From 33f67cecaea4b4ac28cec23bee777c1c85d47b9f Mon Sep 17 00:00:00 2001 From: chenqi Date: Sat, 20 Jun 2026 21:42:26 +0800 Subject: [PATCH] =?UTF-8?q?feat(dataflow):=20=E6=B7=BB=E5=8A=A0=E9=93=BE?= =?UTF-8?q?=E8=B7=AF=E8=81=94=E5=8A=A8=20=E5=8D=B1=E6=80=A5=E5=80=BC?= =?UTF-8?q?=E2=86=92=E5=8C=BB=E5=98=B1=E5=81=9C=E6=AD=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 创建 OrderStopRequestEvent 事件类 - CriticalValueHandler 添加联动逻辑:危急值确认后发布停嘱事件 - findRelatedOrders 为 stub,待接入医嘱服务 --- .../dataflow/event/OrderStopRequestEvent.java | 20 +++++++++++++++++++ .../handler/CriticalValueHandler.java | 20 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/event/OrderStopRequestEvent.java diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/event/OrderStopRequestEvent.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/event/OrderStopRequestEvent.java new file mode 100644 index 000000000..e0efeec78 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/event/OrderStopRequestEvent.java @@ -0,0 +1,20 @@ +package com.healthlink.his.web.dataflow.event; + +import org.springframework.context.ApplicationEvent; +import lombok.Getter; + +@Getter +public class OrderStopRequestEvent extends ApplicationEvent { + private final Long encounterId; + private final Long orderId; + private final String reason; + private final String triggerChain; + + public OrderStopRequestEvent(Object source, Long encounterId, Long orderId, String reason, String triggerChain) { + super(source); + this.encounterId = encounterId; + this.orderId = orderId; + this.reason = reason; + this.triggerChain = triggerChain; + } +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/handler/CriticalValueHandler.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/handler/CriticalValueHandler.java index dc141698d..8e84d0d6a 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/handler/CriticalValueHandler.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/handler/CriticalValueHandler.java @@ -3,14 +3,18 @@ package com.healthlink.his.web.dataflow.handler; import com.healthlink.his.criticalvalue.domain.CriticalValue; import com.healthlink.his.criticalvalue.service.ICriticalValueService; import com.healthlink.his.web.dataflow.event.LabReportPublishedEvent; +import com.healthlink.his.web.dataflow.event.OrderStopRequestEvent; import com.healthlink.his.web.dataflow.util.EventRetryUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.event.EventListener; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; +import java.util.ArrayList; import java.util.Date; +import java.util.List; /** * Chain 4: 检验→危急值推送 — 检验报告发布后推送危急值 @@ -21,6 +25,7 @@ import java.util.Date; public class CriticalValueHandler { private final ICriticalValueService criticalValueService; + private final ApplicationEventPublisher eventPublisher; @Async @EventListener @@ -43,6 +48,21 @@ public class CriticalValueHandler { log.info("Chain4 CriticalValue: critical value pushed for patientId={}, testItem={}", event.getPatientId(), event.getTestItem()); + + // Chain 4 → Chain 2 联动: 危急值确认后触发医嘱停止请求 + List relatedOrderIds = findRelatedOrders(event.getEncounterId(), event.getPatientId()); + for (Long orderId : relatedOrderIds) { + eventPublisher.publishEvent(new OrderStopRequestEvent( + this, event.getEncounterId(), orderId, + "危急值触发自动停嘱: " + event.getTestItem(), "Chain4-Chain2")); + } }, 3); } + + private List findRelatedOrders(Long encounterId, Long patientId) { + // ponytail: stub — 实际实现需查询医嘱表中与该就诊关联的有效医嘱 + // TODO: 接入 IOrderService 或医嘱服务,按 encounterId 查询有效医嘱 + log.warn("Chain4-Chain2 linkage: findRelatedOrders not yet implemented, encounterId={}", encounterId); + return new ArrayList<>(); + } }