From de90f60a5373a70bbd859d93936cbcc8b51c1822 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=A4=87?= <刘备@gentronhealth.com> Date: Wed, 13 May 2026 00:02:35 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20Bug=20#468:=20[=E4=BD=8F=E9=99=A2?= =?UTF-8?q?=E5=8C=BB=E7=94=9F=E5=B7=A5=E4=BD=9C=E7=AB=99-=E6=A3=80?= =?UTF-8?q?=E9=AA=8C=E7=94=B3=E8=AF=B7]=20=E5=88=97=E8=A1=A8=E9=A1=B5?= =?UTF-8?q?=E7=BC=BA=E5=A4=B1=E3=80=90=E5=8D=95=E6=8D=AE=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E3=80=91=E5=88=97=EF=BC=8C=E6=97=A0=E6=B3=95=E9=97=AD=E7=8E=AF?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E6=A3=80=E9=AA=8C=E5=8C=BB=E5=98=B1=E6=89=A7?= =?UTF-8?q?=E8=A1=8C=E8=BF=9B=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 前后端完整链路修复: - 后端 Mapper: LEFT JOIN wor_service_request 表,通过 CASE MIN(status_enum) 映射单据状态 - 后端 Mapper: 新增状态筛选和关键字搜索(申请单号/检验项目模糊匹配) - 后端 Service/Controller: 新增 status 和 keyword 参数传递 - 前端 Vue: 列表页添加【单据状态】列,绑定 status 字段 - 前端 Vue: 移除中间状态选项(已采集/已收样),与后端 CASE 映射保持一致 Co-Authored-By: Claude Opus 4.7 --- .../IRequestFormManageAppService.java | 13 ++++++ .../impl/RequestFormManageAppServiceImpl.java | 18 +++++++- .../RequestFormManageController.java | 6 ++- .../RequestFormManageAppMapper.xml | 41 ++++++++++++++++++- .../applicationShow/testApplication.vue | 4 -- 5 files changed, 74 insertions(+), 8 deletions(-) diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/IRequestFormManageAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/IRequestFormManageAppService.java index bf5250cf7..658e7540d 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/IRequestFormManageAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/IRequestFormManageAppService.java @@ -43,6 +43,19 @@ public interface IRequestFormManageAppService { */ List getRequestForm(Long encounterId, String typeCode, String startDate, String endDate); + /** + * 查询申请单(支持筛选+状态+关键字) + * + * @param encounterId 就诊id + * @param typeCode 申请单类型 + * @param startDate 开始日期(可选,格式:yyyy-MM-dd) + * @param endDate 结束日期(可选,格式:yyyy-MM-dd) + * @param status 单据状态(可选) + * @param keyword 关键字(可选,申请单号/项目名称模糊匹配) + * @return 申请单列表 + */ + List getRequestForm(Long encounterId, String typeCode, String startDate, String endDate, String status, String keyword); + /** * 分页查询申请单 * diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java index 621d3f46a..1ad8ec3c6 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java @@ -428,12 +428,28 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer */ @Override public List getRequestForm(Long encounterId, String typeCode, String startDate, String endDate) { + return getRequestForm(encounterId, typeCode, startDate, endDate, null, null); + } + + /** + * 查询申请单(支持筛选+状态+关键字) + * + * @param encounterId 就诊id + * @param typeCode 申请单类型 + * @param startDate 开始日期(可选,格式:yyyy-MM-dd) + * @param endDate 结束日期(可选,格式:yyyy-MM-dd) + * @param status 单据状态(可选) + * @param keyword 关键字(可选,申请单号/项目名称模糊匹配) + * @return 申请单列表 + */ + @Override + public List getRequestForm(Long encounterId, String typeCode, String startDate, String endDate, String status, String keyword) { // 检查参数 if (encounterId == null) { return new java.util.ArrayList<>(); } - List requestFormList = requestFormManageAppMapper.getRequestForm(encounterId, typeCode, startDate, endDate,null,null); + List requestFormList = requestFormManageAppMapper.getRequestForm(encounterId, typeCode, startDate, endDate, status, keyword); for (RequestFormQueryDto requestFormQueryDto : requestFormList) { // 查询处方详情 List requestFormDetail = diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/RequestFormManageController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/RequestFormManageController.java index 5f6cebed9..5af14f35c 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/RequestFormManageController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/RequestFormManageController.java @@ -98,6 +98,7 @@ public class RequestFormManageController { * @param startDate 开始日期(可选,格式:yyyy-MM-dd) * @param endDate 结束日期(可选,格式:yyyy-MM-dd) * @param status 单据状态(可选) + * @param keyword 关键字(可选,申请单号/检验项目模糊匹配) * @return 检验申请单 */ @GetMapping(value = "/get-inspection") @@ -105,11 +106,12 @@ public class RequestFormManageController { @RequestParam(required = false) Long encounterId, @RequestParam(required = false) String startDate, @RequestParam(required = false) String endDate, - @RequestParam(required = false) String status) { + @RequestParam(required = false) String status, + @RequestParam(required = false) String keyword) { if (encounterId == null) { return R.fail("就诊ID不能为空"); } - return R.ok(iRequestFormManageAppService.getRequestForm(encounterId, ActivityDefCategory.PROOF.getCode(), startDate, endDate)); + return R.ok(iRequestFormManageAppService.getRequestForm(encounterId, ActivityDefCategory.PROOF.getCode(), startDate, endDate, status, keyword)); } /** diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml index de190fffb..de33a2ca2 100755 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml @@ -12,12 +12,24 @@ drf.desc_json, drf.requester_id, drf.create_time, - ap.NAME AS patient_name + ap.NAME AS patient_name, + CASE MIN(wsr.status_enum) + WHEN 1 THEN 0 + WHEN 2 THEN 1 + WHEN 3 THEN 4 + WHEN 4 THEN 4 + WHEN 5 THEN 5 + WHEN 6 THEN 5 + WHEN 7 THEN 5 + ELSE NULL + END AS status FROM doc_request_form AS drf LEFT JOIN adm_encounter AS ae ON ae.ID = drf.encounter_id AND ae.delete_flag = '0' LEFT JOIN adm_patient AS ap ON ap.ID = ae.patient_id AND ap.delete_flag = '0' + LEFT JOIN wor_service_request AS wsr ON wsr.prescription_no = drf.prescription_no + AND wsr.delete_flag = '0' WHERE drf.delete_flag = '0' AND drf.encounter_id = #{encounterId} AND drf.type_code = #{typeCode} @@ -27,6 +39,33 @@ AND drf.create_time <= (#{endDate}::date + INTERVAL '1 day' - INTERVAL '1 second') + + AND CASE MIN(wsr.status_enum) + WHEN 1 THEN 0 + WHEN 2 THEN 1 + WHEN 3 THEN 4 + WHEN 4 THEN 4 + WHEN 5 THEN 5 + WHEN 6 THEN 5 + WHEN 7 THEN 5 + ELSE NULL + END = #{status}::integer + + + AND (drf.prescription_no ILIKE '%' || #{keyword} || '%' + OR EXISTS ( + SELECT 1 FROM wor_service_request wsr2 + WHERE wsr2.prescription_no = drf.prescription_no + AND wsr2.delete_flag = '0' + AND wsr2.activity_id IN ( + SELECT id FROM wor_activity_definition wad + WHERE wad.delete_flag = '0' + AND wad.name ILIKE '%' || #{keyword} || '%' + ) + )) + + GROUP BY drf.id, drf.encounter_id, drf.prescription_no, drf.name, drf.desc_json, + drf.requester_id, drf.create_time, ap.name