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 51b0b6f12..cf2bcfb0d 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 @@ -482,6 +482,13 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { if (!checkReqIds.isEmpty()) { serviceRequestService.updatePendingReceiveStatus(checkReqIds); } + // 手术类医嘱执行后,状态改为"已执行"(SurgeryAppStatusEnum.EXECUTED=4) + List surgeryReqIds = executedReqs.stream() + .filter(sr -> ActivityDefCategory.PROCEDURE.getValue().equals(sr.getCategoryEnum())) + .map(ServiceRequest::getId).toList(); + if (!surgeryReqIds.isEmpty()) { + serviceRequestService.updateSurgeryAppStatus(surgeryReqIds, SurgeryAppStatusEnum.EXECUTED.getCode()); + } } return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[]{"医嘱执行"})); @@ -726,6 +733,24 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { deviceDispenseService.removeByIds(deviceDispenseList.stream().map(DeviceDispense::getId).toList()); deviceRequestService.removeByIds(deviceDispenseList.stream().map(DeviceDispense::getDeviceReqId).toList()); } + // 手术类医嘱取消执行后,状态回退为"已校对"(SurgeryAppStatusEnum.VERIFIED=3) + List surgeryCancelReqIds = adviceExecuteParam.getAdviceExecuteDetailList().stream() + .filter(e -> CommonConstants.TableName.WOR_SERVICE_REQUEST.equals(e.getAdviceTable())) + .map(AdviceExecuteDetailParam::getRequestId) + .filter(Objects::nonNull) + .distinct() + .toList(); + if (!surgeryCancelReqIds.isEmpty()) { + List surgeryRequests = serviceRequestService.list( + new LambdaQueryWrapper() + .in(ServiceRequest::getId, surgeryCancelReqIds) + .eq(ServiceRequest::getCategoryEnum, ActivityDefCategory.PROCEDURE.getValue())); + if (!surgeryRequests.isEmpty()) { + serviceRequestService.updateSurgeryAppStatus( + surgeryRequests.stream().map(ServiceRequest::getId).toList(), + SurgeryAppStatusEnum.VERIFIED.getCode()); + } + } return R.ok("取消执行成功,相关汇总领药单已重新生成"); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java index dc59b591a..80aef8a59 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java @@ -192,9 +192,10 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { // 药品 List medicineList = regAdviceSaveList.stream() .filter(e -> ItemType.MEDICINE.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); - // 诊疗活动(包含护理adviceType=26) + // 诊疗活动(包含护理adviceType=26、手术adviceType=6) List activityList = regAdviceSaveList.stream() .filter(e -> ItemType.ACTIVITY.getValue().equals(e.getAdviceType()) + || ItemType.SURGERY.getValue().equals(e.getAdviceType()) || (e.getAdviceType() != null && e.getAdviceType() == 26)) .collect(Collectors.toList()); // 耗材 🔧 Bug #147 修复 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 db9118d76..01a9644c4 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 @@ -30,6 +30,44 @@ drf.create_time, ap.NAME AS patient_name, CASE + -- ========== 手术专用映射 (categoryEnum=24) ========== + -- 手术申请单状态枚举: 1=待签发 2=已签发 3=已校对 4=已执行 5=已安排 6=已完成 10=已作废 + WHEN EXISTS ( + SELECT 1 FROM wor_service_request ws + WHERE ws.prescription_no = drf.prescription_no AND ws.delete_flag = '0' + AND ws.category_enum = 24 AND ws.status_enum = 10 + ) THEN 10 + WHEN EXISTS ( + SELECT 1 FROM wor_service_request ws + WHERE ws.prescription_no = drf.prescription_no AND ws.delete_flag = '0' + AND ws.category_enum = 24 AND ws.status_enum = 6 + ) THEN 6 + WHEN EXISTS ( + SELECT 1 FROM wor_service_request ws + WHERE ws.prescription_no = drf.prescription_no AND ws.delete_flag = '0' + AND ws.category_enum = 24 AND ws.status_enum = 5 + ) THEN 5 + WHEN EXISTS ( + SELECT 1 FROM wor_service_request ws + WHERE ws.prescription_no = drf.prescription_no AND ws.delete_flag = '0' + AND ws.category_enum = 24 AND ws.status_enum = 4 + ) THEN 4 + WHEN EXISTS ( + SELECT 1 FROM wor_service_request ws + WHERE ws.prescription_no = drf.prescription_no AND ws.delete_flag = '0' + AND ws.category_enum = 24 AND ws.status_enum = 3 + ) THEN 3 + WHEN EXISTS ( + SELECT 1 FROM wor_service_request ws + WHERE ws.prescription_no = drf.prescription_no AND ws.delete_flag = '0' + AND ws.category_enum = 24 AND ws.status_enum = 2 + ) THEN 2 + WHEN EXISTS ( + SELECT 1 FROM wor_service_request ws + WHERE ws.prescription_no = drf.prescription_no AND ws.delete_flag = '0' + AND ws.category_enum = 24 AND ws.status_enum = 1 + ) THEN 1 + -- ========== 通用映射 (非手术类型: 检查/检验/药品/输血) ========== WHEN EXISTS ( SELECT 1 FROM wor_service_request ws WHERE ws.prescription_no = drf.prescription_no AND ws.delete_flag = '0' diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/SurgeryAppStatusEnum.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/SurgeryAppStatusEnum.java new file mode 100644 index 000000000..c67225399 --- /dev/null +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/SurgeryAppStatusEnum.java @@ -0,0 +1,84 @@ +package com.openhis.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 手术申请单状态枚举 + *

+ * 区别于 {@link SurgeryStatusEnum}(手术管理状态:待排期/已排期/手术中/已完成/已取消/暂停), + * 本枚举用于手术申请单的业务流转状态,覆盖从医生开立到手术完成的完整生命周期。 + * + *

+ * 正向流转:
+ *   待签发(1) → 已签发(2) → 已校对(3) → 已执行(4) → 已安排(5) → 已完成(6)
+ *
+ * 逆向流转:
+ *   已签发(2) → 待签发(1)   (医生撤回 / 护士退回)
+ *   已执行(4) → 已校对(3)   (护士取消执行)
+ *   任意状态 → 已作废(10)   (医生撤销)
+ * 
+ * + * @author system + * @date 2026-06-02 + */ +@Getter +@AllArgsConstructor +public enum SurgeryAppStatusEnum { + + /** 待签发 — 医生已保存但尚未提交,仅在医生站可见 */ + PENDING_SIGN(1, "待签发"), + + /** 已签发 — 医生已提交,自动流转至护士工作站待校对 */ + SIGNED(2, "已签发"), + + /** 已校对 — 病区护士已校对手术医嘱 */ + VERIFIED(3, "已校对"), + + /** 已执行 — 病区护士已执行手术医嘱,已向手麻科提交申请 */ + EXECUTED(4, "已执行"), + + /** 已安排 — 手麻科已排好手术间及时间,待手术 */ + SCHEDULED(5, "已安排"), + + /** 已完成 — 手术已结束并录入完毕(终态只读) */ + COMPLETED(6, "已完成"), + + /** 已作废 — 医生中途撤销了手术申请(终态) */ + CANCELLED(10, "已作废"); + + private final Integer code; + private final String info; + + /** + * 根据状态码获取枚举 + * + * @param code 状态码 + * @return 对应的枚举,未匹配返回 null + */ + public static SurgeryAppStatusEnum getByCode(Integer code) { + if (code == null) { + return null; + } + for (SurgeryAppStatusEnum val : values()) { + if (val.getCode().equals(code)) { + return val; + } + } + return null; + } + + /** + * 判断是否为终态(不可再变更) + */ + public boolean isFinal() { + return this == COMPLETED || this == CANCELLED; + } + + /** + * 判断是否允许医生编辑 + */ + public boolean isEditable() { + return this == PENDING_SIGN; + } +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IServiceRequestService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IServiceRequestService.java index 4e27ba6c6..4a86e0cff 100755 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IServiceRequestService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IServiceRequestService.java @@ -149,4 +149,12 @@ public interface IServiceRequestService extends IService { * @return 请求信息列表 */ List getServiceRequestListByEncounterId(Long encounterId); + + /** + * 更新手术申请单状态(批量) + * + * @param serReqIdList 服务请求id列表 + * @param statusCode 手术申请单状态码 (SurgeryAppStatusEnum) + */ + void updateSurgeryAppStatus(List serReqIdList, Integer statusCode); } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/ServiceRequestServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/ServiceRequestServiceImpl.java index 45add69da..57cf345e4 100755 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/ServiceRequestServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/ServiceRequestServiceImpl.java @@ -278,4 +278,19 @@ public class ServiceRequestServiceImpl extends ServiceImpl() .eq(ServiceRequest::getEncounterId, encounterId).eq(ServiceRequest::getDeleteFlag, DelFlag.NO.getCode())); } + + /** + * 更新手术申请单状态(批量) + * + * @param serReqIdList 服务请求id列表 + * @param statusCode 手术申请单状态码 (SurgeryAppStatusEnum: 1=待签发,2=已签发,3=已校对,4=已执行,5=已安排,6=已完成,10=已作废) + */ + @Override + public void updateSurgeryAppStatus(List serReqIdList, Integer statusCode) { + baseMapper.update(null, + new LambdaUpdateWrapper() + .set(ServiceRequest::getStatusEnum, statusCode) + .in(ServiceRequest::getId, serReqIdList) + .eq(ServiceRequest::getDeleteFlag, DelFlag.NO.getCode())); + } } diff --git a/openhis-ui-vue3/src/views/catalog/disease/index.vue b/openhis-ui-vue3/src/views/catalog/disease/index.vue index d729c536b..9295c3308 100755 --- a/openhis-ui-vue3/src/views/catalog/disease/index.vue +++ b/openhis-ui-vue3/src/views/catalog/disease/index.vue @@ -675,7 +675,7 @@ getList(); } /* 表格样式调整,移除默认的最大宽度限制 */ - .table-scroll-container { :deep(.el-table) { + .table-scroll-container :deep(.el-table) { min-width: 100%; width: auto; } diff --git a/openhis-ui-vue3/src/views/inpatientDoctor/home/components/applicationShow/surgeryApplication.vue b/openhis-ui-vue3/src/views/inpatientDoctor/home/components/applicationShow/surgeryApplication.vue index 51f671b45..ef5e7eb8a 100755 --- a/openhis-ui-vue3/src/views/inpatientDoctor/home/components/applicationShow/surgeryApplication.vue +++ b/openhis-ui-vue3/src/views/inpatientDoctor/home/components/applicationShow/surgeryApplication.vue @@ -48,31 +48,31 @@ /> - + @@ -118,7 +118,7 @@ />