feat(dataflow): 添加链路联动 危急值→医嘱停止

- 创建 OrderStopRequestEvent 事件类
- CriticalValueHandler 添加联动逻辑:危急值确认后发布停嘱事件
- findRelatedOrders 为 stub,待接入医嘱服务
This commit is contained in:
2026-06-20 21:42:26 +08:00
parent 1c2bf43d42
commit 33f67cecae
2 changed files with 40 additions and 0 deletions

View File

@@ -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;
}
}

View File

@@ -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<Long> 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<Long> findRelatedOrders(Long encounterId, Long patientId) {
// ponytail: stub — 实际实现需查询医嘱表中与该就诊关联的有效医嘱
// TODO: 接入 IOrderService 或医嘱服务,按 encounterId 查询有效医嘱
log.warn("Chain4-Chain2 linkage: findRelatedOrders not yet implemented, encounterId={}", encounterId);
return new ArrayList<>();
}
}