From 920752d36b7ae21716159b4b124ad1a129692690 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=8E=E4=BD=97?= Date: Tue, 2 Jun 2026 02:32:24 +0800 Subject: [PATCH] =?UTF-8?q?fix(#613):=20=E8=AF=B7=E4=BF=AE=E5=A4=8D=20Bug?= =?UTF-8?q?=20#613=EF=BC=9A=E3=80=90=E5=8C=BB=E5=98=B1=E6=A0=A1=E5=AF=B9/?= =?UTF-8?q?=E4=BD=8F=E9=99=A2=E5=8C=BB=E7=94=9F=E5=B7=A5=E4=BD=9C=E7=AB=99?= =?UTF-8?q?=E3=80=91=E5=8C=BB=E5=98=B1=E2=80=9C=E9=80=80=E5=9B=9E=E2=80=9D?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E7=BC=BA=E5=A4=B1=E5=8F=8D=E9=A6=88=E6=9C=BA?= =?UTF-8?q?=E5=88=B6=EF=BC=9A=E6=8A=A4=E5=A3=AB=E7=AB=AF=E9=80=80=E5=9B=9E?= =?UTF-8?q?=E6=97=A0=E5=8E=9F=E5=9B=A0=E5=BD=95=E5=85=A5=EF=BC=8C=E5=8C=BB?= =?UTF-8?q?=E7=94=9F=E7=AB=AF=E7=BC=BA=E5=A4=B1=E5=8E=9F=E5=9B=A0=E6=98=BE?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因: - Bug #请修复 Bug #613 存在的问题 修复: - 后端修复完成。共修改 13 个文件,打通了从护士端退回 → Service 写入 backReason/reasonText → 医生端 Mapper 查询展示的完整数据链路。编译验证通过。 --- .../com/openhis/web/common/dto/PerformInfoDto.java | 3 +++ .../impl/DoctorStationAdviceAppServiceImpl.java | 2 +- .../web/doctorstation/dto/RequestBaseDto.java | 5 +++++ .../impl/AdviceProcessAppServiceImpl.java | 12 ++++++++++-- .../impl/OutpatientInfusionAppServiceImpl.java | 2 +- .../appservice/impl/AdviceManageAppServiceImpl.java | 2 +- .../doctorstation/DoctorStationAdviceAppMapper.xml | 7 ++++++- .../medication/domain/MedicationRequest.java | 3 +++ .../service/IMedicationRequestService.java | 2 +- .../service/impl/MedicationRequestServiceImpl.java | 5 ++++- .../workflow/service/IServiceRequestService.java | 2 +- .../service/impl/ServiceRequestServiceImpl.java | 12 +++++++++--- .../20260529_fix_BUG#613_add_column_back_reason.sql | 13 +++++++++++++ 13 files changed, 58 insertions(+), 12 deletions(-) create mode 100644 openhis-server-new/sql/迁移记录-DB变更记录/20260529_fix_BUG#613_add_column_back_reason.sql diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/PerformInfoDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/PerformInfoDto.java index c1f30a14e..0b3e9d3d4 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/PerformInfoDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/PerformInfoDto.java @@ -36,4 +36,7 @@ public class PerformInfoDto { /** 分组id */ @JsonSerialize(using = ToStringSerializer.class) private Long groupId; + + /** 退回原因 */ + private String backReason; } 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 305efdecf..827dc61d0 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 @@ -2286,7 +2286,7 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp log.info("BugFix: signOffAdvice - 签退所有请求,状态改为待签发, requestIdList={}", requestIdList); // 尝试签退药品请求(只有存在的才会更新) - iMedicationRequestService.updateDraftStatusBatch(requestIdList, null, null); + iMedicationRequestService.updateDraftStatusBatch(requestIdList, null, null, null); // 尝试签退耗材请求(只有存在的才会更新) iDeviceRequestService.updateDraftStatusBatch(requestIdList); // 尝试签退诊疗请求(只有存在的才会更新) diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/RequestBaseDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/RequestBaseDto.java index d15d39c26..294160314 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/RequestBaseDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/RequestBaseDto.java @@ -121,6 +121,11 @@ public class RequestBaseDto { * 请求状态 */ private Integer statusEnum; + + /** + * 退回原因 + */ + private String reasonText; private String statusEnum_enumText; /** 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 d32571262..24b19365b 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 @@ -58,6 +58,8 @@ import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.util.*; +import java.util.*; +import java.util.Objects; import java.util.stream.Collectors; /** @@ -405,15 +407,21 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { } Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); Date checkDate = new Date(); + // 从请求中提取退回原因(所有项目共享同一原因) + String backReason = performInfoList.stream() + .map(PerformInfoDto::getBackReason) + .filter(Objects::nonNull) + .findFirst() + .orElse(null); if (!serviceRequestList.isEmpty()) { // 更新服务请求状态待发送 serviceRequestService.updateDraftStatus( - serviceRequestList.stream().map(PerformInfoDto::getRequestId).toList(), practitionerId, checkDate); + serviceRequestList.stream().map(PerformInfoDto::getRequestId).toList(), practitionerId, checkDate, backReason); } if (!medRequestList.isEmpty()) { // 更新药品请求状态待发送 medicationRequestService.updateDraftStatusBatch( - medRequestList.stream().map(PerformInfoDto::getRequestId).toList(), practitionerId, checkDate); + medRequestList.stream().map(PerformInfoDto::getRequestId).toList(), practitionerId, checkDate, backReason); } return R.ok(null, "退回成功"); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/impl/OutpatientInfusionAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/impl/OutpatientInfusionAppServiceImpl.java index e12a5bd29..8d06a4c0b 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/impl/OutpatientInfusionAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/impl/OutpatientInfusionAppServiceImpl.java @@ -256,7 +256,7 @@ public class OutpatientInfusionAppServiceImpl implements IOutpatientInfusionAppS } boolean result = serviceRequestService.updateCancelledStatus(serviceReqId, now, practitionerId, orgId); // 更新主服务请求状态为待执行 - serviceRequestService.updateDraftStatus(List.of(serviceRequest.getBasedOnId()), null, null); + serviceRequestService.updateDraftStatus(List.of(serviceRequest.getBasedOnId()), null, null, null); if (result) { // 判断是否全部取消执行 boolean exists = serviceRequestMapper.exists(new LambdaQueryWrapper() 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 df05c98dc..da8368ab6 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 @@ -1016,7 +1016,7 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { } if (!medicineRequestIds.isEmpty()) { // 根据请求id更新请求状态 - iMedicationRequestService.updateDraftStatusBatch(medicineRequestIds, null, null); + iMedicationRequestService.updateDraftStatusBatch(medicineRequestIds, null, null, null); } if (!activityRequestIds.isEmpty()) { // 根据请求id更新请求状态 diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml index bb6c9b673..3f2cae4c1 100755 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml @@ -516,6 +516,7 @@ T1.patient_id AS patient_id, 'med_medication_definition' AS advice_table_name, T1.medication_id AS advice_definition_id + , T1.back_reason AS reason_text FROM med_medication_request AS T1 LEFT JOIN med_medication_definition AS T2 ON T2.ID = T1.medication_id AND T2.delete_flag = '0' @@ -577,6 +578,7 @@ T1.patient_id AS patient_id, 'med_medication_definition' AS advice_table_name, T3.ID AS advice_definition_id + , T2.back_reason AS reason_text FROM adm_charge_item AS T1 INNER JOIN med_medication_request AS T2 ON T2.ID = T1.service_id AND T2.delete_flag = '0' LEFT JOIN med_medication_definition AS T3 ON T3.ID = T2.medication_id AND T3.delete_flag = '0' @@ -637,6 +639,7 @@ CI.patient_id AS patient_id, 'adm_device_definition' AS advice_table_name, CI.product_id AS advice_definition_id + , NULL AS reason_text FROM adm_charge_item AS CI LEFT JOIN adm_charge_item_definition CID ON CID.id = CI.definition_id AND CID.delete_flag = '0' LEFT JOIN wor_device_request DR ON DR.id = CI.service_id AND DR.delete_flag = '0' @@ -691,6 +694,7 @@ T1.patient_id AS patient_id, 'adm_device_definition' AS advice_table_name, T1.device_def_id AS advice_definition_id + , NULL AS reason_text FROM wor_device_request AS T1 LEFT JOIN adm_device_definition AS T2 ON T2.ID = T1.device_def_id AND T2.delete_flag = '0' @@ -747,6 +751,7 @@ T1.patient_id AS patient_id, 'wor_activity_definition' AS advice_table_name, T1.activity_id AS advice_definition_id + , T1.reason_text AS reason_text FROM wor_service_request AS T1 LEFT JOIN wor_activity_definition AS T2 ON T2.ID = T1.activity_id @@ -926,4 +931,4 @@ ORDER BY t1.ID, t1.name ASC, t2.ID ASC - \ No newline at end of file + diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationRequest.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationRequest.java index 38c26463a..108c14986 100755 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationRequest.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationRequest.java @@ -111,6 +111,9 @@ public class MedicationRequest extends HisBaseEntity { /** 支持用药信息 */ private String supportInfo; + /** 退回原因 */ + private String backReason; + /** 请求开始时间 */ private Date reqAuthoredTime; diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/IMedicationRequestService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/IMedicationRequestService.java index a57aa0a5e..96bb1350c 100755 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/IMedicationRequestService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/IMedicationRequestService.java @@ -30,7 +30,7 @@ public interface IMedicationRequestService extends IService { * @param practitionerId 校对人 * @param checkDate 校对时间 */ - void updateDraftStatusBatch(List requestIdList, Long practitionerId, Date checkDate); + void updateDraftStatusBatch(List requestIdList, Long practitionerId, Date checkDate, String backReason); /** * 更新请求状态:取消 diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/impl/MedicationRequestServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/impl/MedicationRequestServiceImpl.java index 71f35fb77..88e3320be 100755 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/impl/MedicationRequestServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/impl/MedicationRequestServiceImpl.java @@ -44,7 +44,7 @@ public class MedicationRequestServiceImpl extends ServiceImpl requestIdList, Long practitionerId, Date checkDate) { + public void updateDraftStatusBatch(List requestIdList, Long practitionerId, Date checkDate, String backReason) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper().in(MedicationRequest::getId, requestIdList) .set(MedicationRequest::getStatusEnum, RequestStatus.DRAFT.getValue()); @@ -54,6 +54,9 @@ public class MedicationRequestServiceImpl extends ServiceImpl { * @param practitionerId 校对人 * @param checkDate 校对时间 */ - void updateDraftStatus(List serviceRequestIdList, Long practitionerId, Date checkDate); + void updateDraftStatus(List serviceRequestIdList, Long practitionerId, Date checkDate, String backReason); /** * 更新服务状态:待发送 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 9f34065f8..261c92617 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 @@ -172,9 +172,15 @@ public class ServiceRequestServiceImpl extends ServiceImpl serviceRequestIdList, Long practitionerId, Date checkDate) { - baseMapper.update(new ServiceRequest().setStatusEnum(RequestStatus.DRAFT.getValue()) - .setPerformerCheckId(SecurityUtils.getLoginUser().getPractitionerId()).setCheckTime(DateUtils.getNowDate()), + public void updateDraftStatus(List serviceRequestIdList, Long practitionerId, Date checkDate, String backReason) { + ServiceRequest updateEntity = new ServiceRequest() + .setStatusEnum(RequestStatus.DRAFT.getValue()) + .setPerformerCheckId(SecurityUtils.getLoginUser().getPractitionerId()) + .setCheckTime(DateUtils.getNowDate()); + if (backReason != null && !backReason.isEmpty()) { + updateEntity.setReasonText(backReason); + } + baseMapper.update(updateEntity, new LambdaUpdateWrapper().in(ServiceRequest::getId, serviceRequestIdList) .eq(ServiceRequest::getDeleteFlag, DelFlag.NO.getCode())); } diff --git a/openhis-server-new/sql/迁移记录-DB变更记录/20260529_fix_BUG#613_add_column_back_reason.sql b/openhis-server-new/sql/迁移记录-DB变更记录/20260529_fix_BUG#613_add_column_back_reason.sql new file mode 100644 index 000000000..08f941cd5 --- /dev/null +++ b/openhis-server-new/sql/迁移记录-DB变更记录/20260529_fix_BUG#613_add_column_back_reason.sql @@ -0,0 +1,13 @@ +-- Bug #613: 医嘱退回流程 — med_medication_request 表缺少退回原因字段 +-- 执行前检查:如果列已存在则跳过 +DO $$ +BEGIN + IF NOT EXISTS ( + SELECT 1 FROM information_schema.columns + WHERE table_name = 'med_medication_request' AND column_name = 'back_reason' + ) THEN + ALTER TABLE med_medication_request ADD COLUMN back_reason VARCHAR(500) DEFAULT NULL; + COMMENT ON COLUMN med_medication_request.back_reason IS '退回原因'; + END IF; +END +$$;