diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalnursestation/appservice/impl/AdviceProcessAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalnursestation/appservice/impl/AdviceProcessAppServiceImpl.java index d7e19f3b3..af324bad0 100755 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalnursestation/appservice/impl/AdviceProcessAppServiceImpl.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalnursestation/appservice/impl/AdviceProcessAppServiceImpl.java @@ -189,13 +189,18 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(inpatientAdviceParam, null, null, null); - // 手动拼接requestStatus条件:COMPLETED(3)时同时包含CHECK_VERIFIED(10)和PENDING_RECEIVE(11) + // 手动拼接requestStatus条件 + // COMPLETED(3)时同时包含CHECK_VERIFIED(10)和PENDING_RECEIVE(11) + // ACTIVE(2)时同时包含PENDING_STOP(13),以便护士核对停嘱医嘱 // UNION查询外层列名为request_status(T1.status_enum AS request_status),不是status_enum if (requestStatus != null) { if (RequestStatus.COMPLETED.getValue().equals(requestStatus)) { queryWrapper.in("request_status", RequestStatus.COMPLETED.getValue(), RequestStatus.CHECK_VERIFIED.getValue(), RequestStatus.PENDING_RECEIVE.getValue()); + } else if (RequestStatus.ACTIVE.getValue().equals(requestStatus)) { + queryWrapper.in("request_status", + RequestStatus.ACTIVE.getValue(), RequestStatus.PENDING_STOP.getValue()); } else { queryWrapper.eq("request_status", requestStatus); } @@ -404,10 +409,29 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { List serviceReqIds = serviceRequestList.stream().map(PerformInfoDto::getRequestId).toList(); // 先查询服务请求,按 categoryEnum 分流:检查类(23)走 CHECK_VERIFIED,其余走 COMPLETED List allServiceRequests = serviceRequestService.listByIds(serviceReqIds); - List checkReqIds = allServiceRequests.stream() + + // 分离已停嘱(PENDING_STOP)的订单,护士核对后变为已停止(STOPPED) + List pendingStopRequests = allServiceRequests.stream() + .filter(sr -> RequestStatus.PENDING_STOP.getValue().equals(sr.getStatusEnum())) + .toList(); + List normalRequests = allServiceRequests.stream() + .filter(sr -> !RequestStatus.PENDING_STOP.getValue().equals(sr.getStatusEnum())) + .toList(); + + // 已停嘱订单 → 已停止(STOPPED) + if (!pendingStopRequests.isEmpty()) { + List pendingStopIds = pendingStopRequests.stream().map(ServiceRequest::getId).toList(); + serviceRequestService.update(new LambdaUpdateWrapper() + .in(ServiceRequest::getId, pendingStopIds) + .set(ServiceRequest::getStatusEnum, RequestStatus.STOPPED.getValue()) + .set(ServiceRequest::getUpdateBy, SecurityUtils.getNickName())); + } + + // 正常订单:检查类 → 已校对(CHECK_VERIFIED=10),其余 → 已完成(COMPLETED=3) + List checkReqIds = normalRequests.stream() .filter(sr -> ActivityDefCategory.TEST.getValue().equals(sr.getCategoryEnum())) .map(ServiceRequest::getId).toList(); - List otherReqIds = allServiceRequests.stream() + List otherReqIds = normalRequests.stream() .filter(sr -> !ActivityDefCategory.TEST.getValue().equals(sr.getCategoryEnum())) .map(ServiceRequest::getId).toList(); // 检查类 → 已校对(CHECK_VERIFIED=10) @@ -419,7 +443,7 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { serviceRequestService.updateCompleteRequestStatus(otherReqIds, practitionerId, checkDate); } // 处理转科/出院等特殊医嘱 - for (ServiceRequest serviceRequest : allServiceRequests) { + for (ServiceRequest serviceRequest : normalRequests) { if (ActivityDefCategory.TRANSFER.getValue().equals(serviceRequest.getCategoryEnum())) { encounterService.updateEncounterStatus(serviceRequest.getEncounterId(), EncounterZyStatus.PENDING_TRANSFER.getValue()); @@ -430,9 +454,30 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { } } if (!medRequestList.isEmpty()) { - // 更新药品请求状态已完成 - medicationRequestService.updateCompletedStatusBatch( - medRequestList.stream().map(PerformInfoDto::getRequestId).toList(), practitionerId, checkDate); + List medReqIds = medRequestList.stream().map(PerformInfoDto::getRequestId).toList(); + // 查询药品请求,分离已停嘱(PENDING_STOP)的订单 + List allMedRequests = medicationRequestService.list( + new LambdaQueryWrapper() + .select(MedicationRequest::getId, MedicationRequest::getStatusEnum) + .in(MedicationRequest::getId, medReqIds)); + List pendingStopMedIds = allMedRequests.stream() + .filter(mr -> RequestStatus.PENDING_STOP.getValue().equals(mr.getStatusEnum())) + .map(MedicationRequest::getId).toList(); + List normalMedIds = allMedRequests.stream() + .filter(mr -> !RequestStatus.PENDING_STOP.getValue().equals(mr.getStatusEnum())) + .map(MedicationRequest::getId).toList(); + + // 已停嘱订单 → 已停止(STOPPED) + if (!pendingStopMedIds.isEmpty()) { + medicationRequestService.update(new LambdaUpdateWrapper() + .in(MedicationRequest::getId, pendingStopMedIds) + .set(MedicationRequest::getStatusEnum, RequestStatus.STOPPED.getValue()) + .set(MedicationRequest::getUpdateBy, SecurityUtils.getNickName())); + } + // 正常订单 → 已完成(COMPLETED) + if (!normalMedIds.isEmpty()) { + medicationRequestService.updateCompletedStatusBatch(normalMedIds, practitionerId, checkDate); + } } return R.ok(null, "校对成功"); } diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java index 621ca017e..e4493ffb7 100755 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java @@ -1122,14 +1122,14 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { iMedicationRequestService.update(new LambdaUpdateWrapper() .in(MedicationRequest::getId, medicineRequestIds) .set(MedicationRequest::getEffectiveDoseEnd, stopTime) - .set(MedicationRequest::getStatusEnum, RequestStatus.STOPPED.getValue()) + .set(MedicationRequest::getStatusEnum, RequestStatus.PENDING_STOP.getValue()) .set(MedicationRequest::getUpdateBy, stopUserName)); } if (!activityRequestIds.isEmpty()) { iServiceRequestService.update(new LambdaUpdateWrapper() .in(ServiceRequest::getId, activityRequestIds) .set(ServiceRequest::getOccurrenceEndTime, stopTime) - .set(ServiceRequest::getStatusEnum, RequestStatus.STOPPED.getValue()) + .set(ServiceRequest::getStatusEnum, RequestStatus.PENDING_STOP.getValue()) .set(ServiceRequest::getUpdateBy, stopUserName)); } return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[]{"医嘱停止"})); @@ -1173,7 +1173,8 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { .select(MedicationRequest::getId, MedicationRequest::getStatusEnum) .in(MedicationRequest::getId, medicineRequestIds)); for (MedicationRequest mr : medicineRequestList) { - if (!RequestStatus.STOPPED.getValue().equals(mr.getStatusEnum())) { + if (!RequestStatus.STOPPED.getValue().equals(mr.getStatusEnum()) + && !RequestStatus.PENDING_STOP.getValue().equals(mr.getStatusEnum())) { throw new ServiceException("护士站已确认停止该医嘱,无法取消停嘱!"); } } @@ -1184,7 +1185,8 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { .select(ServiceRequest::getId, ServiceRequest::getStatusEnum) .in(ServiceRequest::getId, activityRequestIds)); for (ServiceRequest sr : activityRequestList) { - if (!RequestStatus.STOPPED.getValue().equals(sr.getStatusEnum())) { + if (!RequestStatus.STOPPED.getValue().equals(sr.getStatusEnum()) + && !RequestStatus.PENDING_STOP.getValue().equals(sr.getStatusEnum())) { throw new ServiceException("护士站已确认停止该医嘱,无法取消停嘱!"); } } diff --git a/healthlink-his-server/healthlink-his-common/src/main/java/com/healthlink/his/common/enums/RequestStatus.java b/healthlink-his-server/healthlink-his-common/src/main/java/com/healthlink/his/common/enums/RequestStatus.java index 5e2eba36b..d4a0d4dff 100755 --- a/healthlink-his-server/healthlink-his-common/src/main/java/com/healthlink/his/common/enums/RequestStatus.java +++ b/healthlink-his-server/healthlink-his-common/src/main/java/com/healthlink/his/common/enums/RequestStatus.java @@ -74,6 +74,11 @@ public enum RequestStatus implements HisEnumInterface { */ CHECK_RECEIVED(12, "check_received", "已接收"), + /** + * 已停嘱(医生停嘱,等待护士核对) + */ + PENDING_STOP(13, "pending_stop", "已停嘱"), + /** * 已完成(药品发药完成) */ diff --git a/healthlink-his-ui/src/utils/medicalConstants.js b/healthlink-his-ui/src/utils/medicalConstants.js index 4f49fe6d7..23ad3cb87 100755 --- a/healthlink-his-ui/src/utils/medicalConstants.js +++ b/healthlink-his-ui/src/utils/medicalConstants.js @@ -40,6 +40,8 @@ export const RequestStatus = { PENDING_RECEIVE: 11, /** 已接收(检查申请:医技科室已接单) */ CHECK_RECEIVED: 12, + /** 已停嘱(医生停嘱,等待护士核对) */ + PENDING_STOP: 13, /** 已完成(药品发药完成) */ DISPENSE_COMPLETED: 20, }; @@ -59,6 +61,7 @@ export const RequestStatusDescriptions = { 10: '已校对', 11: '待接收', 12: '已接收', + 13: '已停嘱', 20: '已完成', }; diff --git a/healthlink-his-ui/src/views/inpatientDoctor/home/components/order/index.vue b/healthlink-his-ui/src/views/inpatientDoctor/home/components/order/index.vue index 1ffb07748..334015116 100755 --- a/healthlink-his-ui/src/views/inpatientDoctor/home/components/order/index.vue +++ b/healthlink-his-ui/src/views/inpatientDoctor/home/components/order/index.vue @@ -268,6 +268,7 @@ 已校对 待接收 已校对 + 已停嘱 停止 已完成 {{ scope.row.chargeStatus_enumText }} @@ -638,6 +639,10 @@ const statusOption = [ label: '已签发', value: 2, }, + { + label: '已停嘱', + value: 13, + }, { label: '停止', value: 6, @@ -2235,10 +2240,10 @@ function handleStopAdvice() { break; } } - // 找出停嘱的 + // 找出停嘱的(已停止=6 或 已停嘱=13 的不允许再停) for (let index = 0; index < selectRows.length; index++) { const item = selectRows[index]; - if (item.statusEnum == 6) { + if (item.statusEnum == 6 || item.statusEnum == 13) { isStop = false; break; } @@ -2342,11 +2347,11 @@ function handleResumeAdvice() { }); return; } - // 校验:只有状态为"停止"(statusEnum=6)的医嘱才能恢复 + // 校验:只有状态为"停止"(statusEnum=6)或"已停嘱"(statusEnum=13)的医嘱才能恢复 let hasStopOrder = false; for (let index = 0; index < selectRows.length; index++) { const item = selectRows[index]; - if (item.statusEnum == 6) { + if (item.statusEnum == 6 || item.statusEnum == 13) { hasStopOrder = true; break; } @@ -2354,7 +2359,7 @@ function handleResumeAdvice() { if (!hasStopOrder) { ElMessage({ type: 'error', - message: '请选择已停止的医嘱进行恢复', + message: '请选择已停止或已停嘱的医嘱进行恢复', }); return; } @@ -2362,7 +2367,7 @@ function handleResumeAdvice() { let allStop = true; for (let index = 0; index < selectRows.length; index++) { const item = selectRows[index]; - if (item.statusEnum != 6) { + if (item.statusEnum != 6 && item.statusEnum != 13) { allStop = false; break; } @@ -2370,7 +2375,7 @@ function handleResumeAdvice() { if (!allStop) { ElMessage({ type: 'error', - message: '恢复操作只能选择已停止的医嘱,请重新选择', + message: '恢复操作只能选择已停止或已停嘱的医嘱,请重新选择', }); return; } @@ -2416,10 +2421,10 @@ function combination() { break; } } - // 找出停嘱的 + // 找出停嘱的(已停止或已停嘱的不允许组合) for (let index = 0; index < selectRows.length; index++) { const item = selectRows[index]; - if (item.statusEnum == RequestStatus.STOPPED) { + if (item.statusEnum == RequestStatus.STOPPED || item.statusEnum == RequestStatus.PENDING_STOP) { isStop = false; break; } @@ -2516,10 +2521,10 @@ function split() { break; } } - // 找出停嘱的 + // 找出停嘱的(已停止或已停嘱的不允许拆组) for (let index = 0; index < selectRows.length; index++) { const item = selectRows[index]; - if (item.statusEnum == RequestStatus.STOPPED) { + if (item.statusEnum == RequestStatus.STOPPED || item.statusEnum == RequestStatus.PENDING_STOP) { isStop = false; break; } diff --git a/healthlink-his-ui/src/views/inpatientNurse/medicalOrderProofread/components/prescriptionList.vue b/healthlink-his-ui/src/views/inpatientNurse/medicalOrderProofread/components/prescriptionList.vue index 1a518159d..20e201248 100755 --- a/healthlink-his-ui/src/views/inpatientNurse/medicalOrderProofread/components/prescriptionList.vue +++ b/healthlink-his-ui/src/views/inpatientNurse/medicalOrderProofread/components/prescriptionList.vue @@ -407,6 +407,7 @@ const getStatusType = (status) => { [RequestStatus.COMPLETED]: 'success', [RequestStatus.ON_HOLD]: 'warning', [RequestStatus.CANCELLED]: 'danger', + [RequestStatus.PENDING_STOP]: 'warning', [RequestStatus.STOPPED]: 'danger', [RequestStatus.ENDED]: 'info', };