From 219ac30dc59b253cc0d58eb1b96788a84850b905 Mon Sep 17 00:00:00 2001 From: guanyu Date: Mon, 15 Jun 2026 15:46:59 +0800 Subject: [PATCH] =?UTF-8?q?fix(#763):=20guanyu=20(=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=90=88=E5=85=A5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/AdviceProcessAppServiceImpl.java | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) 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 cd1e2fa58..2fd45421a 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 @@ -53,7 +53,9 @@ import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.math.RoundingMode; +import java.text.SimpleDateFormat; import java.time.LocalDateTime; +import java.util.Date; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; @@ -182,9 +184,8 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { // 提取requestStatus手动处理,支持COMPLETED(3)和CHECK_VERIFIED(10)同时查询 Integer requestStatus = inpatientAdviceParam.getRequestStatus(); inpatientAdviceParam.setRequestStatus(null); - // deadline 不在 UNION 子查询结果列中,且不映射为查询过滤条件 - // 原因:end_time 是医嘱结束时间,长期医嘱的 end_time 远在 deadline 之后, - // 使用 <= 过滤会排除所有长期医嘱,导致"未校对"tab 查询为空 + // 提取deadline手动处理,需要做NULL-safe的end_time比较(Bug #763修复) + String deadline = inpatientAdviceParam.getDeadline(); inpatientAdviceParam.setDeadline(null); // 构建查询条件 QueryWrapper queryWrapper @@ -208,6 +209,18 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { = Arrays.stream(encounterIds.split(CommonConstants.Common.COMMA)).map(Long::parseLong).toList(); queryWrapper.in(CommonConstants.FieldName.EncounterId, encounterIdList); } + // 手动拼接deadline条件:end_time IS NULL OR end_time <= deadline(Bug #763修复) + // 住院医嘱的effective_dose_end可能为NULL(签发临时医嘱时未设置结束时间), + // PostgreSQL中 NULL <= anything 结果为FALSE,需要先判断IS NULL + if (deadline != null && !deadline.isEmpty()) { + try { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date deadlineTime = sdf.parse(deadline); + queryWrapper.and(w -> w.isNull("end_time").or().le("end_time", deadlineTime)); + } catch (java.text.ParseException e) { + // deadline解析失败,忽略此条件 + } + } // 患者医嘱分页列表 Page inpatientAdvicePage = adviceProcessAppMapper.selectInpatientAdvicePage(new Page<>(pageNo, pageSize), queryWrapper, @@ -512,8 +525,7 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { if (!deviceRequestList.isEmpty()) { // 更新耗材请求状态待发送 deviceRequestService.updateDraftStatusBatch( - deviceRequestList.stream().map(PerformInfoDto::getRequestId).toList(), - practitionerId, checkDate, backReason); + deviceRequestList.stream().map(PerformInfoDto::getRequestId).toList()); } return R.ok(null, "退回成功"); }