From 232261296fc6fffc53b68099274b2ff899f70439 Mon Sep 17 00:00:00 2001 From: wangjian963 <15215920+aprilry@user.noreply.gitee.com> Date: Fri, 8 May 2026 17:22:39 +0800 Subject: [PATCH] =?UTF-8?q?=20Fix:=20=E5=8C=BB=E7=94=9F=E7=AB=99getRequest?= =?UTF-8?q?BaseInfo=E6=8E=A5=E5=8F=A3=E6=8A=A5=E9=94=99=EF=BC=8Cadm=5Fchar?= =?UTF-8?q?ge=5Fitem=E8=A1=A8=E6=97=A0content=5Fjson=E5=88=97=E5=AF=BC?= =?UTF-8?q?=E8=87=B4UNION=20ALL=E6=9F=A5=E8=AF=A2=E5=A4=B1=E8=B4=A5=20=20B?= =?UTF-8?q?ug=20#401:=20=E9=97=A8=E8=AF=8A=E5=8C=BB=E7=94=9F=E7=AB=99?= =?UTF-8?q?=E5=AE=8C=E8=AF=8Adiv=5Flog=E5=AE=A1=E8=AE=A1=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=8C=E5=8F=8AgetRequestBaseInfo=20SQL?= =?UTF-8?q?=E5=88=97=E5=BC=95=E7=94=A8=E9=94=99=E8=AF=AF=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/DoctorStationMainAppServiceImpl.java | 69 +++++++++++++------ .../DoctorStationAdviceAppMapper.xml | 2 +- 2 files changed, 49 insertions(+), 22 deletions(-) diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationMainAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationMainAppServiceImpl.java index 6683ed67..a77b4ff6 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationMainAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationMainAppServiceImpl.java @@ -18,6 +18,10 @@ import com.openhis.common.constant.CommonConstants; import com.openhis.common.enums.*; import com.openhis.common.utils.EnumUtils; import com.openhis.common.utils.HisQueryUtils; +import com.openhis.appointmentmanage.domain.ScheduleSlot; +import com.openhis.appointmentmanage.mapper.ScheduleSlotMapper; +import com.openhis.clinical.domain.Order; +import com.openhis.clinical.service.IOrderService; import com.openhis.triageandqueuemanage.domain.DivLog; import com.openhis.triageandqueuemanage.domain.TriageQueueItem; import com.openhis.triageandqueuemanage.service.DivLogService; @@ -78,6 +82,12 @@ public class DoctorStationMainAppServiceImpl implements IDoctorStationMainAppSer @Resource private DivLogService divLogService; + @Resource + private IOrderService iOrderService; + + @Resource + private ScheduleSlotMapper scheduleSlotMapper; + /** * 查询就诊患者信息 * @@ -264,8 +274,27 @@ public class DoctorStationMainAppServiceImpl implements IDoctorStationMainAppSer return R.fail("非就诊中患者不能完诊"); } - // 2. 查找队列项(限定当天,避免复诊患者匹配到历史队列记录) + // 2. 获取 pool_id 和 slot_id:从 encounter → order_main → adm_schedule_slot 链路获取 + // 确保 div_log 中的值与排班主表一致,不依赖 triage_queue_item(队列项可能不存在或值错误) Integer tenantId = SecurityUtils.getLoginUser().getTenantId(); + Long divPoolId = null; + Long divSlotId = null; + if (encounter.getOrderId() != null) { + try { + Order order = iOrderService.getById(encounter.getOrderId()); + if (order != null && order.getSlotId() != null) { + divSlotId = order.getSlotId(); + ScheduleSlot slot = scheduleSlotMapper.selectById(divSlotId); + if (slot != null) { + divPoolId = slot.getPoolId(); + } + } + } catch (Exception e) { + log.warn("获取完诊div_log的pool_id/slot_id失败,encounterId={}", encounterId, e); + } + } + + // 3. 查找队列项(限定当天,避免复诊患者匹配到历史队列记录) TriageQueueItem queueItem = triageQueueItemService.getOne( new LambdaQueryWrapper() .eq(TriageQueueItem::getTenantId, tenantId) @@ -278,31 +307,29 @@ public class DoctorStationMainAppServiceImpl implements IDoctorStationMainAppSer // 使用排除法而非白名单:只要不是"已完成"就可以完诊,覆盖跳过、等待等非标准流转状态 if (queueItem != null && !TriageQueueStatus.COMPLETED.getValue().equals(queueItem.getStatus())) { - // 更新队列状态为已完成 java.time.LocalDateTime nowLocal = java.time.LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS); queueItem.setStatus(TriageQueueStatus.COMPLETED.getValue()); queueItem.setUpdateTime(nowLocal); triageQueueItemService.updateById(queueItem); - - // 写入 div_log 审计日志(使用实体+Service替代原生JDBC SQL,避免SQL注入风险,便于维护) - try { - LoginUser loginUser = SecurityUtils.getLoginUser(); - DivLog divLog = new DivLog() - .setPoolId(queueItem.getPoolId()) - .setSlotId(queueItem.getSlotId()) - .setOpUserId(loginUser != null ? loginUser.getUserId() : null) - .setAction("COMPLETE") - .setCreateTime(LocalDateTime.now()) - .setUpdateAt(LocalDateTime.now()) - .setCreatedAt(LocalDateTime.now()); - divLogService.save(divLog); - } catch (Exception e) { - log.error("写入div_log审计日志失败", e); - // 审计日志失败不影响主流程 - } } - // 3. 更新状态、完成时间以及初复诊标识 + // 写入 div_log 审计日志(独立于队列项,确保每次完诊都生成记录) + try { + LoginUser loginUser = SecurityUtils.getLoginUser(); + DivLog divLog = new DivLog() + .setPoolId(divPoolId) + .setSlotId(divSlotId) + .setOpUserId(loginUser != null ? loginUser.getUserId() : null) + .setAction("COMPLETE") + .setCreateTime(LocalDateTime.now()) + .setUpdateAt(LocalDateTime.now()) + .setCreatedAt(LocalDateTime.now()); + divLogService.save(divLog); + } catch (Exception e) { + log.error("写入div_log审计日志失败", e); + } + + // 4. 更新状态、完成时间以及初复诊标识 Date now = new Date(); int update = encounterMapper.update(null, new LambdaUpdateWrapper() @@ -315,7 +342,7 @@ public class DoctorStationMainAppServiceImpl implements IDoctorStationMainAppSer if (update <= 0) return R.fail("完诊失败"); - // 4. 审计日志(sys_oper_log) + // 5. 审计日志(sys_oper_log) try { String username = SecurityUtils.getUsernameSafe(); String sql = "INSERT INTO sys_oper_log " 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 b8c08a35..1ade4844 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 @@ -547,7 +547,7 @@ CI.enterer_id AS requester_id, CI.entered_date AS request_time, CASE WHEN CI.enterer_id = #{practitionerId} THEN '1' ELSE '0' END AS biz_request_flag, - COALESCE(DR.content_json, CI.content_json) AS content_json, + DR.content_json AS content_json, NULL AS skin_test_flag, NULL AS inject_flag, NULL AS group_id,