diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100755 index 34afcfb17..000000000 --- a/.husky/pre-commit +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env sh -# ============================================================ -# Husky Pre-commit Hook - HIS项目 -# 配置: 关羽 | 日期: 2026-04-24 -# 功能: 提交前检查(已禁用) -# ============================================================ - -# 🔧 已禁用所有检查,直接允许提交 -echo "⏭️ [Pre-commit] 检查已禁用,允许提交" -exit 0 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/appservice/ICommonService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/appservice/ICommonService.java index 124452239..b436d532c 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/appservice/ICommonService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/appservice/ICommonService.java @@ -200,10 +200,9 @@ public interface ICommonService { * 批号匹配 * * @param encounterIdList 就诊id列表 - * @param requestIdList 医嘱请求id列表(可选,用于限定仅校验与当前执行医嘱关联的耗材) * @return 处理结果 */ - R lotNumberMatch(List encounterIdList, List requestIdList); + R lotNumberMatch(List encounterIdList); /** * 根据机构ID获取机构名称 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/appservice/impl/CommonServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/appservice/impl/CommonServiceImpl.java index f136eda28..62c2bbff4 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/appservice/impl/CommonServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/appservice/impl/CommonServiceImpl.java @@ -39,10 +39,8 @@ import com.openhis.web.common.dto.*; import com.openhis.web.common.mapper.CommonAppMapper; import com.openhis.web.pharmacymanage.dto.InventoryDetailDto; import com.openhis.workflow.domain.DeviceDispense; -import com.openhis.workflow.domain.DeviceRequest; import com.openhis.workflow.domain.InventoryItem; import com.openhis.workflow.service.IDeviceDispenseService; -import com.openhis.workflow.service.IDeviceRequestService; import com.openhis.workflow.service.IInventoryItemService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -101,9 +99,6 @@ public class CommonServiceImpl implements ICommonService { @Resource private IDeviceDispenseService deviceDispenseService; - @Resource - private IDeviceRequestService deviceRequestService; - /** * 获取药房列表 * @@ -683,11 +678,10 @@ public class CommonServiceImpl implements ICommonService { * 批号匹配 * * @param encounterIdList 就诊id列表 - * @param requestIdList 医嘱请求id列表(可选,用于限定仅校验与当前执行医嘱关联的耗材) * @return 处理结果 */ @Override - public R lotNumberMatch(List encounterIdList, List requestIdList) { + public R lotNumberMatch(List encounterIdList) { // 查询患者待发放的药品信息 List medicationDispenseList = medicationDispenseService .list(new LambdaQueryWrapper().in(MedicationDispense::getEncounterId, encounterIdList) @@ -804,27 +798,10 @@ public class CommonServiceImpl implements ICommonService { } } // 查询患者待发放的耗材信息 - LambdaQueryWrapper deviceDispenseQuery = new LambdaQueryWrapper() - .in(DeviceDispense::getEncounterId, encounterIdList) - .eq(DeviceDispense::getStatusEnum, DispenseStatus.PREPARATION.getValue()) - .eq(DeviceDispense::getDeleteFlag, DelFlag.NO.getCode()); - // 若传入requestIdList,则仅查询与指定医嘱请求关联的耗材,避免其他未执行医嘱的耗材记录干扰 - if (requestIdList != null && !requestIdList.isEmpty()) { - List deviceReqIds = deviceRequestService - .list(new LambdaQueryWrapper() - .in(DeviceRequest::getBasedOnId, requestIdList) - .eq(DeviceRequest::getBasedOnTable, CommonConstants.TableName.WOR_SERVICE_REQUEST)) - .stream() - .map(DeviceRequest::getId) - .collect(java.util.stream.Collectors.toList()); - if (!deviceReqIds.isEmpty()) { - deviceDispenseQuery.in(DeviceDispense::getDeviceReqId, deviceReqIds); - } else { - // 无关联的耗材请求,直接跳过耗材校验 - deviceDispenseQuery.eq(DeviceDispense::getId, -1L); - } - } - List deviceDispenseList = deviceDispenseService.list(deviceDispenseQuery); + List deviceDispenseList = deviceDispenseService + .list(new LambdaQueryWrapper().in(DeviceDispense::getEncounterId, encounterIdList) + .eq(DeviceDispense::getStatusEnum, DispenseStatus.PREPARATION.getValue()) + .eq(DeviceDispense::getDeleteFlag, DelFlag.NO.getCode())); // 耗材批号匹配 if (deviceDispenseList != null && !deviceDispenseList.isEmpty()) { // 获取待发放的耗材id diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/controller/CommonAppController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/controller/CommonAppController.java index d6bb32032..d3a0dfd1a 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/controller/CommonAppController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/controller/CommonAppController.java @@ -274,13 +274,10 @@ public class CommonAppController { * 批号匹配 * * @param encounterIdList 就诊id列表 - * @param requestIdList 医嘱请求id列表(可选,用于限定仅校验与当前执行医嘱关联的耗材) * @return 处理结果 */ @GetMapping("/lot-number-match") - public R lotNumberMatch( - @RequestParam(value = "encounterIdList") List encounterIdList, - @RequestParam(value = "requestIdList", required = false) List requestIdList) { - return commonService.lotNumberMatch(encounterIdList, requestIdList); + public R lotNumberMatch(@RequestParam(value = "encounterIdList") List encounterIdList) { + return commonService.lotNumberMatch(encounterIdList); } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java index b891617f3..5283f5630 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java @@ -728,12 +728,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp /** * 处理耗材请求 - * 🔧 BugFix #443: 签发时跳过 handDevice,避免重复创建 DeviceDispense 并覆盖关键字段(如 performLocation) - * 签发时只需更新状态(下方 sign-advice 批量更新逻辑已处理) */ - if (AdviceOpType.SAVE_ADVICE.getCode().equals(adviceOpType)) { - this.handDevice(deviceList, curDate, adviceOpType); - } + this.handDevice(deviceList, curDate, adviceOpType); // 签发时,把草稿状态的账单更新为待收费 if (AdviceOpType.SIGN_ADVICE.getCode().equals(adviceOpType) && !adviceSaveList.isEmpty()) { @@ -2107,9 +2103,11 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp CommonConstants.TableName.MED_MEDICATION_REQUEST, CommonConstants.TableName.WOR_DEVICE_REQUEST, CommonConstants.TableName.WOR_SERVICE_REQUEST, practitionerId, Whether.NO.getCode(), sourceEnum, sourceBillNo); - // 🔧 修复 Bug #444: 移除手术计费场景的药品过滤。 - // 原过滤会导致门诊手术医嘱界面无法获取手术计费创建的药品记录。 - // 前端各组件已根据自身业务逻辑做了正确的 adviceType 过滤。 + // 手术计费场景:sourceBillNo 不为空时,过滤掉药品(1),保留耗材(2)和诊疗(3/6) + if (sourceBillNo != null && !sourceBillNo.isEmpty()) { + requestBaseInfo.removeIf(dto -> dto.getAdviceType() != null + && dto.getAdviceType() == 1); + } for (RequestBaseDto requestBaseDto : requestBaseInfo) { // 请求状态 requestBaseDto diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationDiagnosisAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationDiagnosisAppServiceImpl.java index 73a865a3c..2a1fd9356 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationDiagnosisAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationDiagnosisAppServiceImpl.java @@ -246,8 +246,7 @@ public class DoctorStationDiagnosisAppServiceImpl implements IDoctorStationDiagn EncounterDiagnosis encounterDiagnosis; for (SaveDiagnosisChildParam saveDiagnosisChildParam : diagnosisChildList) { encounterDiagnosis = new EncounterDiagnosis(); - // 注意:不设置 encounterDiagnosisId,因为上面已经删除了所有记录 - // 如果设置旧的 ID,saveOrUpdate 会尝试 UPDATE 不存在的记录导致失败或重复插入 + encounterDiagnosis.setId(saveDiagnosisChildParam.getEncounterDiagnosisId()); encounterDiagnosis.setEncounterId(encounterId); encounterDiagnosis.setConditionId(saveDiagnosisChildParam.getConditionId()); encounterDiagnosis.setMaindiseFlag(saveDiagnosisChildParam.getMaindiseFlag()); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/AdviceProcessAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/AdviceProcessAppServiceImpl.java index f800b3925..d4cba14b6 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/AdviceProcessAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/AdviceProcessAppServiceImpl.java @@ -178,7 +178,7 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { inpatientAdviceParam.setEncounterIds(null); Integer exeStatus = inpatientAdviceParam.getExeStatus(); inpatientAdviceParam.setExeStatus(null); - Integer requestStatus = inpatientAdviceParam.getRequestStatus(); + // requestStatus由前端tab控制,后端SQL已通过CASE条件处理校对状态过滤,无需再作为SQL条件 inpatientAdviceParam.setRequestStatus(null); // 构建查询条件 QueryWrapper queryWrapper @@ -198,7 +198,7 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { ParticipantType.ADMITTING_DOCTOR.getCode(), AccountType.PERSONAL_CASH_ACCOUNT.getCode(), ChargeItemStatus.BILLABLE.getValue(), ChargeItemStatus.BILLED.getValue(), ChargeItemStatus.REFUNDED.getValue(), EncounterClass.IMP.getValue(), - GenerateSource.DOCTOR_PRESCRIPTION.getValue(), requestStatus); + GenerateSource.DOCTOR_PRESCRIPTION.getValue()); inpatientAdvicePage.getRecords().forEach(e -> { // 是否皮试 e.setSkinTestFlag_enumText(EnumUtils.getInfoByValue(Whether.class, e.getSkinTestFlag())); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/InpatientAdviceDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/InpatientAdviceDto.java index c923652f5..bcb4fa5ce 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/InpatientAdviceDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/InpatientAdviceDto.java @@ -245,7 +245,7 @@ public class InpatientAdviceDto { /** * 药品/服务类型 */ - private Integer categoryCode; + private String categoryCode; /** * 执行科室 */ diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/mapper/AdviceProcessAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/mapper/AdviceProcessAppMapper.java index c56d5d2a3..95dd6bb3d 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/mapper/AdviceProcessAppMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/mapper/AdviceProcessAppMapper.java @@ -69,6 +69,5 @@ public interface AdviceProcessAppMapper { @Param("active") Integer active, @Param("bed") Integer bed, @Param("admittingDoctor") String admittingDoctor, @Param("personalCashAccount") String personalCashAccount, @Param("billable") Integer billable, @Param("billed") Integer billed, @Param("refunded") Integer refunded, @Param("imp") Integer imp, - @Param("doctorPrescription") Integer doctorPrescription, - @Param("requestStatus") Integer requestStatus); + @Param("doctorPrescription") Integer doctorPrescription); } 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 7659ec718..2e09c86bc 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 @@ -81,35 +81,36 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer Long requestFormId = requestFormSaveDto.getRequestFormId(); boolean isEdit = requestFormId != null && requestFormId != 0L; - // 校验所有activityList中的项目是否都配置了执行科室,并收集positionId供后续使用 - // 必须在任何数据库操作之前完成全部校验,避免部分保存后异常导致脏数据 - List activityList = requestFormSaveDto.getActivityList(); - if (activityList == null || activityList.isEmpty()) { - throw new ServiceException("请选择检查项目"); - } - - // 🔧 Bug #475: 查询诊疗执行科室配置 + // 诊疗执行科室配置校验(必须在任何数据库操作之前) List activityOrganizationConfig = requestFormManageAppMapper.getActivityOrganizationConfig(typeCode); + if (activityOrganizationConfig.isEmpty()) { + throw new ServiceException("请先配置当前时间段的执行科室"); + } - // 缓存校验结果,先全部验证通过后再进行数据库操作 - // 优先使用前端传入的positionId(用户手动选择的发往科室),仅在未选择时使用配置的执行科室 + // 逐个校验activityList中的项目是否都配置了执行科室,并收集positionId供后续使用 + // 必须在任何数据库操作之前完成全部校验,避免部分保存后异常导致脏数据 + // 🔧 Bug #516: 优先使用前端传入的positionId(用户手动选择的发往科室),仅在未选择时使用配置的执行科室 + List activityList = requestFormSaveDto.getActivityList(); + // 缓存校验结果,避免主循环中重复查询和可能出现的数据不一致 java.util.Map activityIdToPositionIdMap = new java.util.HashMap<>(); - for (ActivitySaveDto activitySaveDto : activityList) { - // 优先使用前端传入的positionId(用户手动选择的科室) - Long frontendPositionId = activitySaveDto.getPositionId(); - if (frontendPositionId != null) { - activityIdToPositionIdMap.put(activitySaveDto.getAdviceDefinitionId(), frontendPositionId); - continue; + if (activityList != null && !activityList.isEmpty()) { + for (ActivitySaveDto activitySaveDto : activityList) { + // 优先使用前端传入的positionId(用户手动选择的科室) + Long frontendPositionId = activitySaveDto.getPositionId(); + if (frontendPositionId != null) { + activityIdToPositionIdMap.put(activitySaveDto.getAdviceDefinitionId(), frontendPositionId); + continue; + } + // 前端未传入时,使用配置的执行科室 + Long configPositionId = activityOrganizationConfig.stream() + .filter(dto -> activitySaveDto.getAdviceDefinitionId().equals(dto.getActivityDefinitionId())) + .map(ActivityOrganizationConfigDto::getOrganizationId).findFirst().orElse(null); + if (configPositionId == null) { + throw new ServiceException(activitySaveDto.getAdviceDefinitionName() + "未配置当前时间段的执行科室"); + } + activityIdToPositionIdMap.put(activitySaveDto.getAdviceDefinitionId(), configPositionId); } - // 前端未传入时,使用配置的执行科室 - Long configPositionId = activityOrganizationConfig.stream() - .filter(dto -> activitySaveDto.getAdviceDefinitionId().equals(dto.getActivityDefinitionId())) - .map(ActivityOrganizationConfigDto::getOrganizationId).findFirst().orElse(null); - if (configPositionId == null) { - throw new ServiceException(activitySaveDto.getAdviceDefinitionName() + "未配置当前时间段的执行科室"); - } - activityIdToPositionIdMap.put(activitySaveDto.getAdviceDefinitionId(), configPositionId); } // 诊疗处方号 diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/clinicalmanage/SurgicalScheduleAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/clinicalmanage/SurgicalScheduleAppMapper.xml index 852f2759d..74abd7a4f 100755 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/clinicalmanage/SurgicalScheduleAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/clinicalmanage/SurgicalScheduleAppMapper.xml @@ -91,15 +91,13 @@ os.surgery_nature AS surgeryType, cs.incision_level AS incisionLevel, fc.contract_name AS feeType, + os.fee_type AS feeType, COALESCE(pi.identifier_no, ap.bus_no, '') AS identifierNo FROM op_schedule os LEFT JOIN adm_patient ap ON os.patient_id = ap.id INNER JOIN cli_surgery cs ON os.oper_code = cs.surgery_no AND cs.delete_flag = '0' LEFT JOIN adm_organization o ON cs.org_id = o.id LEFT JOIN doc_request_form drf ON drf.prescription_no=cs.surgery_no - LEFT JOIN adm_encounter ae ON ae.id = os.visit_id AND ae.delete_flag = '0' - LEFT JOIN adm_account aa ON aa.encounter_id = ae.id AND aa.delete_flag = '0' - LEFT JOIN fin_contract fc ON fc.bus_no = aa.contract_no AND fc.delete_flag = '0' LEFT JOIN ( SELECT patient_id, identifier_no FROM ( diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/datadictionary/ActivityDefinitionManageMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/datadictionary/ActivityDefinitionManageMapper.xml index 9acc98362..53bb90d02 100755 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/datadictionary/ActivityDefinitionManageMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/datadictionary/ActivityDefinitionManageMapper.xml @@ -42,8 +42,8 @@ T5.package_name, T6.name as sub_item_name FROM wor_activity_definition T1 - /* 价格表使用LEFT JOIN,避免因缺少价格记录导致搜索不到项目 */ - LEFT JOIN adm_charge_item_definition T2 + /* 只JOIN必要的价格表,使用INNER JOIN避免笛卡尔积 */ + INNER JOIN adm_charge_item_definition T2 ON T1.id = T2.instance_id AND T2.instance_table = 'wor_activity_definition' /* 检验类型关联 */ diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/AdviceProcessAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/AdviceProcessAppMapper.xml index 2ac571880..462449943 100755 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/AdviceProcessAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/AdviceProcessAppMapper.xml @@ -290,7 +290,6 @@ WHERE T1.delete_flag = '0' AND T1.refund_medicine_id IS NULL AND T1.generate_source_enum = #{doctorPrescription} - AND T1.status_enum = #{requestStatus} AND CASE WHEN T1.status_enum = #{draft} THEN T1.performer_check_id IS NOT NULL ELSE 1=1 END @@ -306,28 +305,28 @@ T1.occurrence_end_time AS end_time, T1.requester_id AS requester_id, T1.create_time AS request_time, - NULL AS skin_test_flag, - NULL AS inject_flag, - NULL AS group_id, + NULL::integer AS skin_test_flag, + NULL::integer AS inject_flag, + NULL::bigint AS group_id, T1.performer_check_id, T2."name" AS advice_name, T2.id AS item_id, - NULL AS volume, - NULL AS lot_number, + NULL::varchar AS volume, + NULL::varchar AS lot_number, T1.quantity AS quantity, T1.unit_code AS unit_code, T1.status_enum AS request_status, - NULL AS method_code, - NULL AS rate_code, - NULL AS dose, - NULL AS dose_unit_code, + NULL::varchar AS method_code, + NULL::varchar AS rate_code, + NULL::numeric AS dose, + NULL::varchar AS dose_unit_code, ao1.id AS position_id, ao1."name" AS position_name, - NULL AS dispense_per_duration, - 1 AS part_percent, + NULL::integer AS dispense_per_duration, + 1::numeric AS part_percent, ccd."name" AS condition_definition_name, T1.therapy_enum AS therapy_enum, - NULL AS sort_number, + NULL::integer AS sort_number, T1.quantity AS execute_num, af.day_times, ae.bus_no, @@ -342,7 +341,7 @@ personal_account.balance_amount, personal_account.id AS account_id, T2.category_code, - NULL AS dispense_status + NULL::integer AS dispense_status FROM wor_service_request AS T1 LEFT JOIN wor_activity_definition AS T2 ON T2.id = T1.activity_id @@ -423,7 +422,6 @@ AND af.delete_flag = '0' WHERE T1.delete_flag = '0' AND T1.generate_source_enum = #{doctorPrescription} - AND T1.status_enum = #{requestStatus} AND CASE WHEN T1.status_enum = #{draft} THEN T1.performer_check_id IS NOT NULL ELSE 1=1 END 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 5443eff69..fafd10ae4 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 @@ -45,6 +45,18 @@ AND drf.create_time <= (#{endDate}::date + INTERVAL '1 day' - INTERVAL '1 second') + + AND CASE + WHEN MIN(wsr.status_enum) = 1 THEN 0 + WHEN MIN(wsr.status_enum) = 2 THEN 1 + WHEN MIN(wsr.status_enum) = 3 AND MAX(CASE WHEN wsr.performer_check_id IS NOT NULL THEN 1 ELSE 0 END) = 1 THEN 2 + WHEN MIN(wsr.status_enum) = 3 THEN 4 + WHEN MIN(wsr.status_enum) = 4 THEN 3 + WHEN MIN(wsr.status_enum) = 5 OR MIN(wsr.status_enum) = 6 OR MIN(wsr.status_enum) = 7 THEN 7 + WHEN MIN(wsr.status_enum) = 8 THEN 6 + ELSE NULL + END = #{status}::integer + AND (drf.prescription_no ILIKE '%' || #{keyword} || '%' OR EXISTS ( @@ -60,28 +72,12 @@ GROUP BY drf.id, drf.encounter_id, drf.prescription_no, drf.name, drf.desc_json, drf.requester_id, drf.create_time, ap.name - - HAVING CASE - WHEN MIN(wsr.status_enum) = 1 THEN 0 - WHEN MIN(wsr.status_enum) = 2 THEN 1 - WHEN MIN(wsr.status_enum) = 3 AND MAX(CASE WHEN wsr.performer_check_id IS NOT NULL THEN 1 ELSE 0 END) = 1 THEN 2 - WHEN MIN(wsr.status_enum) = 3 THEN 4 - WHEN MIN(wsr.status_enum) = 4 THEN 3 - WHEN MIN(wsr.status_enum) = 5 OR MIN(wsr.status_enum) = 6 OR MIN(wsr.status_enum) = 7 THEN 7 - WHEN MIN(wsr.status_enum) = 8 THEN 6 - ELSE NULL - END = #{status}::integer -