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<>(); + } }