From 734bdc6a0dcc29465eba638fb1465ac5db158b56 Mon Sep 17 00:00:00 2001 From: wangjian963 <15215920+aprilry@user.noreply.gitee.com> Date: Tue, 2 Jun 2026 16:02:47 +0800 Subject: [PATCH 1/2] =?UTF-8?q?585=20[=E4=BD=8F=E9=99=A2=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E7=AB=99-=E6=89=8B=E6=9C=AF=E7=94=B3?= =?UTF-8?q?=E8=AF=B7]=20=E6=89=8B=E6=9C=AF=E7=94=B3=E8=AF=B7=E5=8E=86?= =?UTF-8?q?=E5=8F=B2=E5=88=97=E8=A1=A8=E7=BC=BA=E5=A4=B1=E2=80=9C=E6=89=8B?= =?UTF-8?q?=E6=9C=AF=E7=8A=B6=E6=80=81=E2=80=9D=E5=88=97=EF=BC=8C=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E5=8C=BB=E7=94=9F=E6=97=A0=E6=B3=95=E8=B7=9F=E8=B8=AA?= =?UTF-8?q?=E6=89=8B=E6=9C=AF=E6=B5=81=E8=BD=AC=E8=BF=9B=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/AdviceProcessAppServiceImpl.java | 25 ++++++ .../impl/AdviceManageAppServiceImpl.java | 3 +- .../RequestFormManageAppMapper.xml | 38 +++++++++ .../common/enums/SurgeryAppStatusEnum.java | 84 +++++++++++++++++++ .../service/IServiceRequestService.java | 8 ++ .../impl/ServiceRequestServiceImpl.java | 15 ++++ .../src/views/catalog/disease/index.vue | 2 +- .../applicationShow/surgeryApplication.vue | 62 ++++++++++---- 8 files changed, 221 insertions(+), 16 deletions(-) create mode 100644 openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/SurgeryAppStatusEnum.java 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 @@ />