From c542b057b5a0143ac729d021d2aaa8a95ec83d23 Mon Sep 17 00:00:00 2001 From: chenqi Date: Tue, 24 Mar 2026 18:27:30 +0800 Subject: [PATCH] =?UTF-8?q?fix(doctorstation):=20=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=E5=8C=BB=E5=98=B1=E7=AE=A1=E7=90=86=E4=B8=AD=E7=9A=84=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=8E=A7=E5=88=B6=E5=92=8C=E6=95=B0=E6=8D=AE=E5=A4=84?= =?UTF-8?q?=E7=90=86=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复了已收费医嘱仍可被勾选的问题,添加了选择条件限制 - 实现了过滤已作废会诊医嘱的功能,防止无效数据展示 - 完善了医嘱删除逻辑,支持草稿、待签发和已作废状态的医嘱删除 - 修复了医嘱撤回功能中的大整数精度丢失问题 - 优化了签退医嘱的服务端处理逻辑,统一处理各种类型的医嘱作废 - 添加了详细的操作日志记录便于问题排查 - 修复了前端医嘱列表加载和操作过程中的数据类型转换问题 --- .../DoctorStationAdviceAppServiceImpl.java | 54 +++++------- .../DoctorStationAdviceController.java | 11 ++- .../service/IServiceRequestService.java | 7 ++ .../impl/ServiceRequestServiceImpl.java | 12 +++ .../prescription/prescriptionlist.vue | 85 +++++++++++++++++-- 5 files changed, 125 insertions(+), 44 deletions(-) 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 ade5cabe..01949a3b 100644 --- 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 @@ -1397,48 +1397,38 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp */ @Override public R signOffAdvice(List requestIdList) { - // 根据请求编号列表查询收费项目信息 + log.info("BugFix#219: signOffAdvice - requestIdList={}", requestIdList); + + // 🔧 BugFix: 直接对所有requestId进行作废操作,不再先查询分类 + // 药品、耗材、诊疗请求都尝试作废,只有存在的才会被更新 + + // 根据请求编号列表查询收费项目信息(用于检查是否已收费) List chargeItemList = iChargeItemService.getChargeItemInfoByReqId(requestIdList); - + if (chargeItemList != null && !chargeItemList.isEmpty()) { for (ChargeItem chargeItem : chargeItemList) { if (ChargeItemStatus.BILLED.getValue().equals(chargeItem.getStatusEnum())) { throw new ServiceException("已收费的项目无法签退,请刷新页面后重试"); } } - // 分别获取各个请求id列表 - List medReqIdList = new ArrayList<>(); - List devReqIdList = new ArrayList<>(); - List serReqIdList = new ArrayList<>(); - - chargeItemList.forEach(item -> { - switch (item.getServiceTable()) { - case CommonConstants.TableName.MED_MEDICATION_REQUEST -> - medReqIdList.add(item.getServiceId()); - case CommonConstants.TableName.WOR_DEVICE_REQUEST -> - devReqIdList.add(item.getServiceId()); - case CommonConstants.TableName.WOR_SERVICE_REQUEST -> - serReqIdList.add(item.getServiceId()); - } - }); + List chargeItemIdList = chargeItemList.stream().map(ChargeItem::getId).collect(Collectors.toList()); // 根据id更新收费项目状态 - iChargeItemService.updatePaymentStatus(chargeItemIdList, ChargeItemStatus.DRAFT.getValue());// 撤回后需要更新为草稿 - if (!medReqIdList.isEmpty()) { - // 根据请求id更新请求状态 - iMedicationRequestService.updateDraftStatusBatch(medReqIdList, null, null); - } - if (!devReqIdList.isEmpty()) { - // 根据请求id更新请求状态 - iDeviceRequestService.updateDraftStatusBatch(devReqIdList); - } - if (!serReqIdList.isEmpty()) { - // 根据请求id更新请求状态 - iServiceRequestService.updateDraftStatusBatch(serReqIdList); - } - } else { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00006, null)); + iChargeItemService.updatePaymentStatus(chargeItemIdList, ChargeItemStatus.DRAFT.getValue()); } + + // 🔧 BugFix: 直接对所有requestId进行作废操作 + log.info("BugFix#219: signOffAdvice - 作废所有请求, requestIdList={}", requestIdList); + + // 尝试作废药品请求(只有存在的才会更新) + iMedicationRequestService.updateCancelledStatusBatch(requestIdList, null, null); + // 尝试作废耗材请求(只有存在的才会更新) + iDeviceRequestService.updateCancelledStatusBatch(requestIdList); + // 尝试作废诊疗请求(只有存在的才会更新) + iServiceRequestService.updateCancelledStatusBatch(requestIdList); + + log.info("BugFix#219: signOffAdvice - 所有请求作废完成"); + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationAdviceController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationAdviceController.java index 41f5983a..0c789392 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationAdviceController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationAdviceController.java @@ -15,6 +15,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.stream.Collectors; /** * 医生站-医嘱/处方 controller @@ -91,12 +92,16 @@ public class DoctorStationAdviceController { /** * 门诊签退医嘱 * - * @param requestIdList 请求id列表 + * @param requestIdList 请求id列表(字符串类型,避免前端大整数精度丢失) * @return 结果 */ @PostMapping(value = "/sign-off") - public R signOffAdvice(@RequestBody List requestIdList) { - return iDoctorStationAdviceAppService.signOffAdvice(requestIdList); + public R signOffAdvice(@RequestBody List requestIdList) { + // 🔧 BugFix: 将字符串转换为Long + List ids = requestIdList.stream() + .map(Long::parseLong) + .collect(Collectors.toList()); + return iDoctorStationAdviceAppService.signOffAdvice(ids); } /** 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 847e7d03..30156f6e 100644 --- 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 @@ -102,6 +102,13 @@ public interface IServiceRequestService extends IService { */ void updateDraftStatusBatch(List serReqIdList); + /** + * 🔧 BugFix#219: 更新服务状态:已作废 + * + * @param serReqIdList 请求id列表 + */ + void updateCancelledStatusBatch(List serReqIdList); + /** * 更新服务申请里的打印次数字段 * 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 adaf87eb..9f34065f 100644 --- 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 @@ -191,6 +191,18 @@ public class ServiceRequestServiceImpl extends ServiceImpl serReqIdList) { + baseMapper.update(null, + new LambdaUpdateWrapper().set(ServiceRequest::getStatusEnum, RequestStatus.CANCELLED.getValue()) + .in(ServiceRequest::getId, serReqIdList)); + } + /** * 更新服务申请里的打印次数字段 * diff --git a/openhis-ui-vue3/src/views/doctorstation/components/prescription/prescriptionlist.vue b/openhis-ui-vue3/src/views/doctorstation/components/prescription/prescriptionlist.vue index 07782cd1..cbac8cff 100644 --- a/openhis-ui-vue3/src/views/doctorstation/components/prescription/prescriptionlist.vue +++ b/openhis-ui-vue3/src/views/doctorstation/components/prescription/prescriptionlist.vue @@ -529,7 +529,13 @@ - +