|
|
@@ -10,10 +10,10 @@ import com.nb.bus.enums.DeviceStatusEnum;
|
|
|
import com.nb.bus.enums.DeviceTypeEnum;
|
|
|
import com.nb.bus.hospital.enums.ConfigHandlerEnums;
|
|
|
import com.nb.bus.registry.constant.DeviceKeyConstant;
|
|
|
+import com.nb.bus.registry.device.DeviceOperator;
|
|
|
import com.nb.bus.registry.device.DeviceRegistry;
|
|
|
import com.nb.bus.service.LocalBusDeviceAlarmService;
|
|
|
import com.nb.bus.service.LocalBusInfusionHistoryService;
|
|
|
-import com.nb.bus.service.LocalBusPatientService;
|
|
|
import com.nb.bus.utils.WsPublishUtils;
|
|
|
import com.nb.common.cache.ConfigStorage;
|
|
|
import com.nb.common.entity.AbstractMsgId;
|
|
|
@@ -21,9 +21,9 @@ import com.nb.common.util.RedissonUtil;
|
|
|
import lombok.Builder;
|
|
|
import lombok.Data;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
-import org.intellij.lang.annotations.Flow;
|
|
|
import org.redisson.api.RDelayedQueue;
|
|
|
-import java.util.Date;
|
|
|
+
|
|
|
+import java.util.*;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
/**
|
|
|
@@ -41,15 +41,12 @@ public class HospitalFunctionExtraConfigHandler extends AbstractHospitalConfig
|
|
|
private HospitalFinishMonitorConfigHandler monitorConfigHandler;
|
|
|
private HospitalAutoUndoConfigHandler autoUndoConfigHandler;
|
|
|
private LocalBusDeviceAlarmService alarmService;
|
|
|
- //最后一次低输注警报延迟任务
|
|
|
- private LowInfusionEntity lastLowInfusionWarn;
|
|
|
|
|
|
public HospitalFunctionExtraConfigHandler(ConfigStorage configStorage, String hospitalId, RedissonUtil redissonUtil, LocalBusInfusionHistoryService infusionHistoryService,
|
|
|
DeviceRegistry deviceRegistry, WsPublishUtils wsPublishUtils,
|
|
|
HospitalFinishMonitorConfigHandler monitorConfigHandler,
|
|
|
HospitalAutoUndoConfigHandler autoUndoConfigHandler,
|
|
|
- LocalBusDeviceAlarmService alarmService,
|
|
|
- LocalBusPatientService patientService) {
|
|
|
+ LocalBusDeviceAlarmService alarmService) {
|
|
|
super(configStorage, hospitalId, redissonUtil, infusionHistoryService, deviceRegistry, wsPublishUtils);
|
|
|
this.monitorConfigHandler=monitorConfigHandler;
|
|
|
this.autoUndoConfigHandler=autoUndoConfigHandler;
|
|
|
@@ -76,7 +73,7 @@ public class HospitalFunctionExtraConfigHandler extends AbstractHospitalConfig
|
|
|
if (config.getNoSignal()!=null&&config.getNoSignal()>0) {
|
|
|
judgeNoSignal(source,config.getNoSignal());
|
|
|
}
|
|
|
- if (config.getLowInfusion()!=null&&config.getLowInfusion()>0&&!DeviceStatusEnum.StartUp.equals(source.getRunState())) {
|
|
|
+ if (config.getLowInfusion()!=null&&config.getLowInfusion()>=0&&!DeviceStatusEnum.StartUp.equals(source.getRunState())) {
|
|
|
judgeLowInfusion(source,config.getLowInfusion());
|
|
|
}
|
|
|
}
|
|
|
@@ -165,72 +162,41 @@ public class HospitalFunctionExtraConfigHandler extends AbstractHospitalConfig
|
|
|
* @author lifang
|
|
|
* @date 2022/5/19 15:52
|
|
|
* @param source
|
|
|
- * @param interval
|
|
|
+ * @param interval 毫秒级
|
|
|
* @return void
|
|
|
*/
|
|
|
private void judgeLowInfusion(BusDeviceRunningEntity source,int interval){
|
|
|
- RDelayedQueue<AbstractMsgId> lowInfusionDelay = redissonUtil.getDelayedQueue(getId() +"-lowFusion", e -> {
|
|
|
- if(e instanceof LowInfusionEntity){
|
|
|
- handleLowInfusion((LowInfusionEntity)e);
|
|
|
- }
|
|
|
- });
|
|
|
//仅智能泵存在
|
|
|
if(DeviceTypeEnum.intelligent.equals(source.getType())){
|
|
|
+ DeviceOperator operator = deviceRegistry.getOperator(source.getDeviceId());
|
|
|
if (source.getFlowDownLimit()!=null&&source.getContinueDose().compareTo(source.getFlowDownLimit())<1) {
|
|
|
- if(log.isDebugEnabled()){
|
|
|
- log.debug("设备【{}】,持续量【{}】,下限【{}】,触发【低输注】延迟任务",source.getDeviceId(),source.getContinueDose(),source.getFlowDownLimit());
|
|
|
+ if(log.isDebugEnabled()) {
|
|
|
+ log.debug("消息【{}】,设备【{}】,持续量【{}】,下限【{}】,触发【低输注】判定", source.getMsgId(),source.getDeviceId(), source.getContinueDose(), source.getFlowDownLimit());
|
|
|
}
|
|
|
- //输注量超过阈值,进行低输注判定
|
|
|
- lastLowInfusionWarn= LowInfusionEntity.builder()
|
|
|
- .deviceId(source.getDeviceId())
|
|
|
- .timeout(interval)
|
|
|
- .unit(TimeUnit.MINUTES)
|
|
|
- .tenantId(source.getTenantId())
|
|
|
- .historyId(source.getHistoryId())
|
|
|
- .infusionId(source.getInfusionId())
|
|
|
- .timestamp(new Date())
|
|
|
- .build();
|
|
|
- redissonUtil.offerQueue(lowInfusionDelay,lastLowInfusionWarn,lastLowInfusionWarn.getTimeout(),lastLowInfusionWarn.getUnit());
|
|
|
- }
|
|
|
- }else {
|
|
|
- //输注量未超过阈值,取消低输注状态
|
|
|
- if(lastLowInfusionWarn!=null){
|
|
|
- log.info("设备【{}】不满足低输注状态,取消【低输注】延迟任务【{}】",lastLowInfusionWarn.getId());
|
|
|
- lowInfusionDelay.remove(lastLowInfusionWarn);
|
|
|
- }
|
|
|
- if(FlowStatusEnum.Lowest.equals(source.getWarnFlow())){
|
|
|
- source.setWarnFlow(null);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ if(interval==0){
|
|
|
+ //实时判定
|
|
|
+ source.setWarnFlow(FlowStatusEnum.Lowest);
|
|
|
+ }else if(!source.isNewInfusion()) {
|
|
|
+ //非实时判定时,对于新输注的第一条数据不做判定
|
|
|
+ Date nonLowInfusionTime = operator
|
|
|
+ .getNonLowInfusionTime();
|
|
|
+ if(nonLowInfusionTime==null){
|
|
|
+ //非低输注时间为空表示该此输注过程中所有的数据都为低输注判定数据,则判定时间按照输注开始时间进行计算
|
|
|
+ nonLowInfusionTime=source.getStartTime();
|
|
|
+ }
|
|
|
+ if((source.getUploadTime().getTime()-TimeUnit.MINUTES.toMillis(interval))>nonLowInfusionTime.getTime()){
|
|
|
+ //当前上传时间-低输注判定间隔 > 最后一次 非低输注状态,则当前状态判定为低输注状态
|
|
|
+ source.setWarnFlow(FlowStatusEnum.Lowest);
|
|
|
+ }
|
|
|
|
|
|
- /**
|
|
|
- * 描述: 低输注状态处理
|
|
|
- * @author lifang
|
|
|
- * @date 2022/5/19 16:08
|
|
|
- * @param source
|
|
|
- * @return void
|
|
|
- */
|
|
|
- private void handleLowInfusion(LowInfusionEntity source) {
|
|
|
- String deviceId = source.getDeviceId();
|
|
|
- BusInfusionHistoryEntity infusionHistory = infusionHistoryService.getById(source.getInfusionId());
|
|
|
- if (Boolean.TRUE.equals(infusionHistory.getFinished())) {
|
|
|
- //泵已换绑医院,无需再处理
|
|
|
- return;
|
|
|
+ }
|
|
|
+ source.setMaybeLowInfusion(true);
|
|
|
+ }else {
|
|
|
+ if(FlowStatusEnum.Lowest.equals(source.getWarnFlow())){
|
|
|
+ source.setWarnFlow(null);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- infusionHistoryService.update(new UpdateWrapper<BusInfusionHistoryEntity>().lambda().eq(BusInfusionHistoryEntity::getId, infusionHistory.getId())
|
|
|
- .set(BusInfusionHistoryEntity::getWarnFlow, FlowStatusEnum.Lowest));
|
|
|
- //报警/提醒缓存重置
|
|
|
- deviceRegistry.getOperator(deviceId)
|
|
|
- .getCache()
|
|
|
- .remove(DeviceKeyConstant.ALARM);
|
|
|
- //低输注报警
|
|
|
- Date uploadTime=new Date(source.getTimestamp().getTime()+source.getUnit().toMillis(source.getTimeout()));
|
|
|
- BusDeviceAlarmEntity alarm = BusDeviceAlarmEntity.lowInfusion(source.getDeviceId(),source.getInfusionId(),source.getHistoryId(),source.getTenantId(),uploadTime);
|
|
|
- alarmService.save(alarm);
|
|
|
- //发布推送
|
|
|
- wsPublishUtils.publishPatientMonitor(infusionHistory.getPatientId(), infusionHistory.getTenantId());
|
|
|
-
|
|
|
}
|
|
|
|
|
|
@Data
|
|
|
@@ -246,16 +212,4 @@ public class HospitalFunctionExtraConfigHandler extends AbstractHospitalConfig
|
|
|
private Date uploadTime;
|
|
|
private Date timestamp;
|
|
|
}
|
|
|
-
|
|
|
- @Data
|
|
|
- @Builder
|
|
|
- static class LowInfusionEntity extends AbstractMsgId {
|
|
|
- private String deviceId;
|
|
|
- private Integer timeout;
|
|
|
- private TimeUnit unit;
|
|
|
- private String historyId;
|
|
|
- private String tenantId;
|
|
|
- private String infusionId;
|
|
|
- private Date timestamp;
|
|
|
- }
|
|
|
}
|