Browse Source

add 医院管理、医院配置处理

A17404李放 3 years ago
parent
commit
0ac842841a
45 changed files with 801 additions and 199 deletions
  1. 1 3
      coffee-admin/src/test/java/com/coffee/admin/BusPatientTest.java
  2. 4 6
      coffee-admin/src/test/java/com/coffee/admin/HisStrategyTest.java
  3. 1 0
      coffee-common/src/main/java/com/coffee/common/config/mybatis/TenantNameHandler.java
  4. 1 3
      coffee-system/src/main/java/com/coffee/bus/entity/BusHospitalEntity.java
  5. 166 0
      coffee-system/src/main/java/com/coffee/bus/hospital/HospitalManager.java
  6. 88 0
      coffee-system/src/main/java/com/coffee/bus/hospital/HospitalManagerRegister.java
  7. 58 0
      coffee-system/src/main/java/com/coffee/bus/hospital/config/AbstractHospitalConfigHandler.java
  8. 154 0
      coffee-system/src/main/java/com/coffee/bus/hospital/config/HospitalAutoUndoConfigHandler.java
  9. 4 8
      coffee-system/src/main/java/com/coffee/bus/hospital/config/HospitalConfigHandler.java
  10. 168 0
      coffee-system/src/main/java/com/coffee/bus/hospital/config/HospitalFinishMonitorConfigHandler.java
  11. 14 35
      coffee-system/src/main/java/com/coffee/bus/hospital/config/HospitalFunctionAnalConfigHandler.java
  12. 34 30
      coffee-system/src/main/java/com/coffee/bus/hospital/config/HospitalFunctionExtraConfigHandler.java
  13. 1 1
      coffee-system/src/main/java/com/coffee/bus/hospital/config/bean/FunctionAnalConfig.java
  14. 1 1
      coffee-system/src/main/java/com/coffee/bus/hospital/config/bean/FunctionAutoUndoConfig.java
  15. 1 1
      coffee-system/src/main/java/com/coffee/bus/hospital/config/bean/FunctionExtraConfig.java
  16. 3 3
      coffee-system/src/main/java/com/coffee/bus/hospital/config/bean/FunctionFinishMonitorConfig.java
  17. 1 1
      coffee-system/src/main/java/com/coffee/bus/hospital/config/bean/FunctionManualUndoConfig.java
  18. 1 1
      coffee-system/src/main/java/com/coffee/bus/hospital/config/bean/FunctionOtherConfig.java
  19. 4 4
      coffee-system/src/main/java/com/coffee/bus/hospital/config/bean/FunctionUndoConfig.java
  20. 22 0
      coffee-system/src/main/java/com/coffee/bus/hospital/enums/ConfigHandlerEnums.java
  21. 1 1
      coffee-system/src/main/java/com/coffee/bus/hospital/his/HisRequest.java
  22. 1 1
      coffee-system/src/main/java/com/coffee/bus/hospital/his/HisResponse.java
  23. 9 23
      coffee-system/src/main/java/com/coffee/bus/hospital/his/HisScriptSession.java
  24. 6 4
      coffee-system/src/main/java/com/coffee/bus/hospital/his/HisScriptSessionManager.java
  25. 1 1
      coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/HisStrategyEnum.java
  26. 1 1
      coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/HisStrategyHandler.java
  27. 1 1
      coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/HisStrategyManager.java
  28. 1 1
      coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/HisStrategyManagerRegister.java
  29. 1 4
      coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/all/EqualsStrategyHandler.java
  30. 2 2
      coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/all/HisAllStrategyHandler.java
  31. 3 3
      coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/all/HisAllStrategyManager.java
  32. 1 2
      coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/all/LessToMoreHisStrategyHandler.java
  33. 1 2
      coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/all/MoreToLessHisStrategyHandler.java
  34. 1 1
      coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/onlynew/DefaultHisNewStrategyHandler.java
  35. 2 2
      coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/onlynew/HisNewStrategyHandler.java
  36. 3 3
      coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/onlynew/HisNewStrategyManager.java
  37. 3 3
      coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/part/DefaultHisPartStrategyHandler.java
  38. 2 2
      coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/part/HisPartStrategyHandler.java
  39. 3 3
      coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/part/HisPartStrategyManager.java
  40. 0 4
      coffee-system/src/main/java/com/coffee/bus/service/LocalBusDeviceRunningService.java
  41. 10 12
      coffee-system/src/main/java/com/coffee/bus/service/LocalBusHospitalService.java
  42. 2 9
      coffee-system/src/main/java/com/coffee/bus/service/LocalBusPatientService.java
  43. 2 3
      coffee-system/src/main/java/com/coffee/bus/websocket/HisConnectionHandler.java
  44. 14 11
      coffee-system/src/main/java/com/coffee/bus/websocket/listener/DeviceInfoListener.java
  45. 3 3
      coffee-system/src/main/java/com/coffee/bus/websocket/listener/HisInfoListener.java

+ 1 - 3
coffee-admin/src/test/java/com/coffee/admin/BusPatientTest.java

@@ -11,13 +11,11 @@ import com.coffee.bus.entity.BusClinicEntity;
 import com.coffee.bus.entity.BusDeviceManualEntity;
 import com.coffee.bus.entity.BusPatientEntity;
 import com.coffee.bus.enums.DeviceManualEnum;
-import com.coffee.bus.his.strategy.all.EqualsStrategyHandler;
-import com.coffee.bus.his.strategy.all.HisAllStrategyHandler;
+import com.coffee.bus.hospital.his.strategy.all.EqualsStrategyHandler;
 import com.coffee.bus.service.LocalBusClinicService;
 import com.coffee.bus.service.LocalBusPatientService;
 import com.coffee.bus.service.dto.PatientDeviceRepeatResult;
 import com.coffee.common.enums.SexEnum;
-import org.hibernate.validator.constraints.Length;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;

+ 4 - 6
coffee-admin/src/test/java/com/coffee/admin/HisStrategyTest.java

@@ -6,13 +6,11 @@ import cn.hutool.core.util.EnumUtil;
 import cn.hutool.core.util.RandomUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.coffee.bus.entity.BusClinicEntity;
-import com.coffee.bus.entity.BusDeviceEntity;
-import com.coffee.bus.his.strategy.HisStrategyEnum;
-import com.coffee.bus.his.strategy.HisStrategyHandler;
-import com.coffee.bus.his.strategy.HisStrategyManager;
-import com.coffee.bus.his.strategy.HisStrategyManagerRegister;
+import com.coffee.bus.hospital.his.strategy.HisStrategyEnum;
+import com.coffee.bus.hospital.his.strategy.HisStrategyHandler;
+import com.coffee.bus.hospital.his.strategy.HisStrategyManager;
+import com.coffee.bus.hospital.his.strategy.HisStrategyManagerRegister;
 import com.coffee.bus.service.LocalBusClinicService;
-import com.coffee.bus.service.LocalBusDeviceService;
 import com.coffee.common.enums.SexEnum;
 import org.junit.Test;
 import org.junit.runner.RunWith;

+ 1 - 0
coffee-common/src/main/java/com/coffee/common/config/mybatis/TenantNameHandler.java

@@ -24,6 +24,7 @@ public class TenantNameHandler implements TypeHandler<String> {
 
     private GetNameInterface<String,String> getHospitalName;
 
+
     @Override
     public void setParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) {
 

+ 1 - 3
coffee-system/src/main/java/com/coffee/bus/entity/BusHospitalEntity.java

@@ -4,12 +4,10 @@ import com.baomidou.mybatisplus.annotation.*;
 import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
 import com.coffee.bus.bean.GeoPoint;
 import com.coffee.bus.bean.Script;
-import com.coffee.bus.his.strategy.HisStrategyEnum;
+import com.coffee.bus.hospital.his.strategy.HisStrategyEnum;
 import com.coffee.common.entity.RecordCreationEntity;
 import com.coffee.common.entity.RecordModifierEntity;
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import com.fasterxml.jackson.annotation.JsonSetter;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;

+ 166 - 0
coffee-system/src/main/java/com/coffee/bus/hospital/HospitalManager.java

@@ -0,0 +1,166 @@
+package com.coffee.bus.hospital;
+
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.coffee.bus.entity.BusDeviceRunningEntity;
+import com.coffee.bus.entity.BusHospitalConfigEntity;
+import com.coffee.bus.entity.BusHospitalEntity;
+import com.coffee.bus.hospital.config.HospitalAutoUndoConfigHandler;
+import com.coffee.bus.hospital.config.HospitalFinishMonitorConfigHandler;
+import com.coffee.bus.hospital.config.HospitalFunctionAnalConfigHandler;
+import com.coffee.bus.hospital.config.HospitalFunctionExtraConfigHandler;
+import com.coffee.bus.hospital.config.bean.*;
+import com.coffee.bus.hospital.his.HisScriptSession;
+import com.coffee.bus.registry.device.DeviceRegistry;
+import com.coffee.bus.registry.patient.PatientRegistry;
+import com.coffee.bus.script.ScriptManager;
+import com.coffee.bus.script.ScriptParse;
+import com.coffee.bus.service.*;
+import com.coffee.bus.utils.WsPublishUtils;
+import com.coffee.common.cache.ConfigStorage;
+import com.coffee.common.cache.manager.ConfigStorageManager;
+import com.coffee.common.util.RedissonUtil;
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName HospitalManage.java
+ * @Description 医院管理器
+ * @createTime 2022年05月20日 08:33:00
+ */
+@Data
+public class HospitalManager {
+    private String hospitalId;
+
+    private HisScriptSession scriptSession;
+
+    private HospitalAutoUndoConfigHandler autoUndoConfigHandler;
+
+    private HospitalFinishMonitorConfigHandler finishMonitorConfigHandler;
+
+    private HospitalFunctionAnalConfigHandler analConfigHandler;
+
+    private HospitalFunctionExtraConfigHandler extraConfigHandler;
+
+    private LocalBusHospitalService hospitalService;
+
+    private LocalBusHospitalConfigService hospitalConfigService;
+
+    private LocalBusClinicService clinicService;
+
+    private ScriptManager scriptManager;
+
+    private ConfigStorage storage;
+
+    public HospitalManager(String hospitalId,
+                           LocalBusHospitalService hospitalService,
+                           LocalBusHospitalConfigService hospitalConfigService,
+                           LocalBusClinicService clinicService,
+                           LocalBusDeviceRunningService deviceRunningService,
+                           LocalBusInfusionHistoryService infusionHistoryService,
+                           PatientRegistry patientRegistry,
+                           DeviceRegistry deviceRegistry,
+                           WsPublishUtils wsPublishUtils,
+                           ScriptManager scriptManager,
+                           ConfigStorageManager configStorageManager,
+                           RedissonUtil redissonUtil) {
+        this.hospitalId = hospitalId;
+        this.hospitalService = hospitalService;
+        this.hospitalConfigService = hospitalConfigService;
+        this.clinicService = clinicService;
+        this.scriptManager = scriptManager;
+        this.hospitalId = hospitalId;
+        this.storage=configStorageManager.getStorage(hospitalId);
+        this.autoUndoConfigHandler=new HospitalAutoUndoConfigHandler(storage,hospitalId,redissonUtil,deviceRunningService,infusionHistoryService,deviceRegistry,wsPublishUtils,patientRegistry);
+        this.finishMonitorConfigHandler=new HospitalFinishMonitorConfigHandler(storage,hospitalId,redissonUtil,deviceRunningService,infusionHistoryService,deviceRegistry,wsPublishUtils,patientRegistry);
+        this.analConfigHandler=new HospitalFunctionAnalConfigHandler(storage,hospitalId,redissonUtil,deviceRunningService,infusionHistoryService,deviceRegistry,wsPublishUtils,patientRegistry);
+        this.extraConfigHandler=new HospitalFunctionExtraConfigHandler(storage,hospitalId,redissonUtil,deviceRunningService,infusionHistoryService,deviceRegistry,wsPublishUtils,patientRegistry,finishMonitorConfigHandler,autoUndoConfigHandler);
+        init(configStorageManager);
+    }
+
+    private void init(ConfigStorageManager configStorageManager){
+        this.scriptSession=new HisScriptSession(hospitalId,scriptManager,configStorageManager,clinicService,hospitalService);
+        refreshInfo();
+        refreshConfig();
+        refreshScript();
+    }
+
+    /**
+     * 描述: 刷新医院信息
+     * @author lifang
+     * @date 2022/5/20 8:47
+     * @param
+     * @return void
+     */
+    public void refreshInfo(){
+        BusHospitalEntity hospital = hospitalService.getById(hospitalId);
+        storage.setConfig("info",hospital);
+    }
+
+    public BusHospitalEntity getInfo(){
+        return storage.getConfig("info").as(BusHospitalEntity.class);
+    }
+
+    /**
+     * 描述: 刷新配置
+     * @author lifang
+     * @date 2022/5/20 8:47
+     * @param
+     * @return void
+     */
+    public void refreshConfig(){
+        List<BusHospitalConfigEntity> hospitalConfig = hospitalConfigService.list(new QueryWrapper<BusHospitalConfigEntity>().lambda().eq(BusHospitalConfigEntity::getTenantId, hospitalId));
+        //设置默认参数
+        for (BusHospitalConfigEntity config : hospitalConfig) {
+            Map<String, Object> param = config.getConfig();
+            switch (config.getType()) {
+                case undo:
+                    FunctionUndoConfig functionUndoConfig = JSONUtil.toBean(JSONUtil.toJsonStr(param), FunctionUndoConfig.class);
+                    //自动撤泵
+                    FunctionAutoUndoConfig autoUndo = functionUndoConfig.getAuto();
+                    autoUndoConfigHandler.setConfig(autoUndo);
+                    //自动结束临床管理
+                    FunctionFinishMonitorConfig finishMonitor = functionUndoConfig.getFinishMonitor();
+                    finishMonitorConfigHandler.setConfig(finishMonitor);
+                    break;
+                case other:
+                    FunctionOtherConfig otherConfig = JSONUtil.toBean(JSONUtil.toJsonStr(param), FunctionOtherConfig.class);
+                    //镇痛不足
+                    FunctionAnalConfig anal = otherConfig.getAnal();
+                    analConfigHandler.setConfig(anal);
+                    //其他
+                    FunctionExtraConfig extraConfig = otherConfig.getOther();
+                    extraConfigHandler.setConfig(extraConfig);
+                    break;
+                default:break;
+            }
+        }
+    }
+
+
+    /**
+     * 描述: 对设备发来消息进行处理
+     * @author lifang
+     * @date 2022/5/20 8:50
+     * @param source
+     * @return void
+     */
+    public void handleDeviceMessage(BusDeviceRunningEntity source){
+        analConfigHandler.handler(source);
+        extraConfigHandler.handler(source);
+        autoUndoConfigHandler.handler(source);
+        finishMonitorConfigHandler.handler(source);
+    }
+
+
+    public void refreshScript(){
+        BusHospitalEntity hospital = hospitalService.getById(hospitalId);
+        ScriptParse scriptParse = scriptManager.getById(hospitalId);
+        scriptManager.resetScript(hospitalId,scriptParse.getId(),hospital.getScript().getContent());
+    }
+
+}

+ 88 - 0
coffee-system/src/main/java/com/coffee/bus/hospital/HospitalManagerRegister.java

@@ -0,0 +1,88 @@
+package com.coffee.bus.hospital;
+
+import com.coffee.bus.registry.device.DeviceRegistry;
+import com.coffee.bus.registry.patient.PatientRegistry;
+import com.coffee.bus.script.ScriptManager;
+import com.coffee.bus.service.*;
+import com.coffee.bus.utils.WsPublishUtils;
+import com.coffee.common.cache.manager.ConfigStorageManager;
+import com.coffee.common.util.RedissonUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName HospitalManageRegister.java
+ * @Description 医院管理注册
+ * @createTime 2022年05月20日 08:33:00
+ */
+@Component
+public class HospitalManagerRegister {
+    private Map<String,HospitalManager> managerMap=new ConcurrentHashMap<>();
+
+    private LocalBusHospitalService hospitalService;
+    private LocalBusHospitalConfigService hospitalConfigService;
+    private LocalBusClinicService clinicService;
+    private LocalBusDeviceRunningService deviceRunningService;
+    private LocalBusInfusionHistoryService infusionHistoryService;
+    private PatientRegistry patientRegistry;
+    private DeviceRegistry deviceRegistry;
+    private WsPublishUtils wsPublishUtils;
+    private ScriptManager scriptManager;
+    private ConfigStorageManager configStorageManager;
+    private RedissonUtil redissonUtil;
+
+    public HospitalManagerRegister( LocalBusHospitalService hospitalService, LocalBusHospitalConfigService hospitalConfigService, LocalBusClinicService clinicService, LocalBusDeviceRunningService deviceRunningService, LocalBusInfusionHistoryService infusionHistoryService, PatientRegistry patientRegistry, DeviceRegistry deviceRegistry, WsPublishUtils wsPublishUtils, ScriptManager scriptManager, ConfigStorageManager configStorageManager, RedissonUtil redissonUtil) {
+        this.hospitalService = hospitalService;
+        this.hospitalConfigService = hospitalConfigService;
+        this.clinicService = clinicService;
+        this.deviceRunningService = deviceRunningService;
+        this.infusionHistoryService = infusionHistoryService;
+        this.patientRegistry = patientRegistry;
+        this.deviceRegistry = deviceRegistry;
+        this.wsPublishUtils = wsPublishUtils;
+        this.scriptManager = scriptManager;
+        this.configStorageManager = configStorageManager;
+        this.redissonUtil = redissonUtil;
+    }
+
+    public void register(String hospitalId){
+        managerMap.computeIfAbsent(hospitalId,k->
+                new HospitalManager(k,hospitalService,hospitalConfigService,clinicService,deviceRunningService,infusionHistoryService,patientRegistry,deviceRegistry,wsPublishUtils,scriptManager,configStorageManager,redissonUtil)
+        );
+    };
+
+    public HospitalManager get(String hospitalId){
+        return  managerMap.computeIfAbsent(hospitalId,k->
+                new HospitalManager(k,hospitalService,hospitalConfigService,clinicService,deviceRunningService,infusionHistoryService,patientRegistry,deviceRegistry,wsPublishUtils,scriptManager,configStorageManager,redissonUtil)
+        );
+    }
+
+
+    public void refresh(String hospitalId,boolean info){
+        refresh(hospitalId,info,false,false);
+    }
+
+    public void refresh(String hospitalId,boolean info,boolean config){
+        refresh(hospitalId,info,config,false);
+    }
+
+    public void refresh(String hospitalId,boolean info,boolean config,boolean script){
+        HospitalManager hospitalManager = this.get(hospitalId);
+        if(info){
+            hospitalManager.refreshConfig();
+        }
+        if(config){
+            hospitalManager.refreshConfig();
+        }
+        if(script){
+            hospitalManager.refreshScript();
+        }
+    }
+
+
+
+}

+ 58 - 0
coffee-system/src/main/java/com/coffee/bus/hospital/config/AbstractHospitalConfigHandler.java

@@ -0,0 +1,58 @@
+package com.coffee.bus.hospital.config;
+
+import com.coffee.bus.registry.device.DeviceRegistry;
+import com.coffee.bus.registry.patient.PatientRegistry;
+import com.coffee.bus.service.LocalBusDeviceRunningService;
+import com.coffee.bus.service.LocalBusInfusionHistoryService;
+import com.coffee.bus.utils.WsPublishUtils;
+import com.coffee.common.cache.ClusterConfigStorage;
+import com.coffee.common.cache.ConfigStorage;
+import com.coffee.common.cache.value.Value;
+import com.coffee.common.util.RedissonUtil;
+import lombok.Getter;
+import org.redisson.api.RedissonClient;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName AbstractHospitalConfigHandler.java
+ * @Description TODO
+ * @createTime 2022年05月19日 23:29:00
+ */
+public abstract class AbstractHospitalConfigHandler<E,T> implements HospitalConfigHandler<E,T> {
+    protected final RedissonUtil redissonUtil;
+
+    protected final  LocalBusDeviceRunningService deviceRunningService;
+
+    protected  final LocalBusInfusionHistoryService infusionHistoryService;
+
+    protected final  DeviceRegistry deviceRegistry;
+
+    protected final  WsPublishUtils wsPublishUtils;
+
+    protected final  PatientRegistry patientRegistry;
+
+    protected final ConfigStorage configStorage;
+    @Getter
+    protected String hospitalId;
+
+    public AbstractHospitalConfigHandler(ConfigStorage configStorage, String hospitalId, RedissonUtil redissonUtil, LocalBusDeviceRunningService deviceRunningService, LocalBusInfusionHistoryService infusionHistoryService, DeviceRegistry deviceRegistry, WsPublishUtils wsPublishUtils, PatientRegistry patientRegistry) {
+        this.configStorage=configStorage;
+        this.redissonUtil = redissonUtil;
+        this.deviceRunningService = deviceRunningService;
+        this.infusionHistoryService = infusionHistoryService;
+        this.deviceRegistry = deviceRegistry;
+        this.wsPublishUtils = wsPublishUtils;
+        this.patientRegistry = patientRegistry;
+    }
+
+
+    @Override
+    public void setConfig(E config){
+        this.configStorage.setConfig(getId().name(),config);
+    };
+
+    public Value getConfig(){
+        return this.configStorage.getConfig(getId().name());
+    }
+}

+ 154 - 0
coffee-system/src/main/java/com/coffee/bus/hospital/config/HospitalAutoUndoConfigHandler.java

@@ -0,0 +1,154 @@
+package com.coffee.bus.hospital.config;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.coffee.bus.hospital.config.bean.FunctionAutoUndoConfig;
+import com.coffee.bus.hospital.config.bean.FunctionFinishMonitorConfig;
+import com.coffee.bus.entity.BusDeviceRunningEntity;
+import com.coffee.bus.enums.DeviceStatusEnum;
+import com.coffee.bus.hospital.enums.ConfigHandlerEnums;
+import com.coffee.bus.registry.device.DeviceRegistry;
+import com.coffee.bus.registry.patient.PatientRegistry;
+import com.coffee.bus.service.LocalBusDeviceRunningService;
+import com.coffee.bus.service.LocalBusInfusionHistoryService;
+import com.coffee.bus.service.dto.ManualUndoConfig;
+import com.coffee.bus.service.dto.UndoDeviceConfig;
+import com.coffee.bus.utils.WsPublishUtils;
+import com.coffee.common.cache.ConfigStorage;
+import com.coffee.common.util.RedissonUtil;
+import lombok.Builder;
+import lombok.Data;
+import org.redisson.api.RDelayedQueue;
+
+import java.util.Collections;
+import java.util.Date;
+import java.util.Objects;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName HospitalFinishMonitorConfigHandler.java
+ * @Description 自动结束管理处理
+ * @createTime 2022年05月19日 16:22:00
+ */
+public class HospitalAutoUndoConfigHandler extends  AbstractHospitalConfigHandler<FunctionAutoUndoConfig, BusDeviceRunningEntity>{
+
+
+    public HospitalAutoUndoConfigHandler(ConfigStorage configStorage, String hospitalId, RedissonUtil redissonUtil, LocalBusDeviceRunningService deviceRunningService, LocalBusInfusionHistoryService infusionHistoryService, DeviceRegistry deviceRegistry, WsPublishUtils wsPublishUtils, PatientRegistry patientRegistry) {
+        super(configStorage, hospitalId, redissonUtil, deviceRunningService, infusionHistoryService, deviceRegistry, wsPublishUtils, patientRegistry);
+    }
+
+    @Override
+    public ConfigHandlerEnums getId() {
+        return ConfigHandlerEnums.autoUndo;
+    }
+
+    @Override
+    public String getDescription() {
+        return "自动撤泵";
+    }
+
+    @Override
+    public void handler(BusDeviceRunningEntity source) {
+        FunctionAutoUndoConfig config = this.getConfig().as(FunctionAutoUndoConfig.class);
+        if(config==null||!Boolean.TRUE.equals(config.isEnable())|| Objects.isNull(config.getShutDownInterval())){
+            return;
+        }
+        judgeShutdown(source,config);
+    }
+
+    public void judgeNoSignal(String device,String patientCode,String tenantId){
+        FunctionFinishMonitorConfig config = this.getConfig().as(FunctionFinishMonitorConfig.class);
+        if(config==null||!Boolean.TRUE.equals(config.isEnable())|| Objects.isNull(config.getNoSignalInterval())){
+            return;
+        }
+        RDelayedQueue noSignalUndoDelay = redissonUtil.getDelayedQueue(getId() +"-noSignalUndo"+ "-" + tenantId + "-" +device, e -> {
+            if(e instanceof UndoEntity){
+                this.handleShutdown((UndoEntity) e);
+            }
+        });
+        UndoDeviceConfig undoDeviceConfig = new UndoDeviceConfig();
+        undoDeviceConfig.setUndoBy(config.getUndoBy());
+        HospitalFinishMonitorConfigHandler.FinishMonitorEntity finishMonitor = HospitalFinishMonitorConfigHandler.FinishMonitorEntity.builder()
+                .deviceId(device)
+                .patientCode(patientCode)
+                .config(undoDeviceConfig)
+                .timeout(config.getNoSignalInterval())
+                .unit(TimeUnit.MINUTES)
+                .tenantId(tenantId)
+                .timestamp(new Date())
+                .build();
+        noSignalUndoDelay.offer(finishMonitor,finishMonitor.getTimeout(),finishMonitor.getUnit());
+    }
+
+    /**
+     * 描述: 处理关机到撤泵时间
+     * @author lifang
+     * @date 2022/5/19 16:51
+     * @param source
+     * @param config
+     * @return void
+     */
+    private void judgeShutdown(BusDeviceRunningEntity source,   FunctionAutoUndoConfig config ){
+        RDelayedQueue shutdownUndoDelay = redissonUtil.getDelayedQueue(getId() +"-shutdownUndo"+ "-" + source.getTenantId() + "-" + source.getDeviceId(), e -> {
+            if(e instanceof UndoEntity){
+                this.handleShutdown((UndoEntity) e);
+            }
+        });
+        //清空延迟队列消息
+        shutdownUndoDelay.clear();
+        UndoDeviceConfig undoDeviceConfig = new UndoDeviceConfig();
+        undoDeviceConfig.setUndoBy(config.getUndoBy());
+        //清空延迟队列消息
+        shutdownUndoDelay.clear();
+        if(DeviceStatusEnum.Shutdown.equals(source.getType())){
+            UndoEntity finishMonitor = UndoEntity.builder()
+                    .deviceId(source.getDeviceId())
+                    .patientCode(source.getPatientCode())
+                    .config(undoDeviceConfig)
+                    .timeout(config.getShutDownInterval())
+                    .unit(TimeUnit.MINUTES)
+                    .tenantId(source.getTenantId())
+                    .timestamp(new Date())
+                    .build();
+            shutdownUndoDelay.offer(finishMonitor,config.getShutDownInterval(),TimeUnit.MINUTES);
+        }
+
+
+    }
+
+    private void handleShutdown(UndoEntity source){
+        String deviceId = source.getDeviceId();
+        String patientCode = source.getPatientCode();
+        String tenantId = source.getTenantId();
+        //只有副泵会自动撤泵
+        BusDeviceRunningEntity entity = deviceRunningService.getOne(new QueryWrapper<BusDeviceRunningEntity>().lambda()
+                .eq(BusDeviceRunningEntity::getDeviceId, deviceId)
+                .eq(BusDeviceRunningEntity::getPatientCode, patientCode)
+                .eq(BusDeviceRunningEntity::getMaster, false)
+                .eq(BusDeviceRunningEntity::getTenantId, tenantId));
+        if(entity!=null){
+            ManualUndoConfig manualUndoConfig = new ManualUndoConfig();
+            manualUndoConfig.setDeviceIds(Collections.singletonList(deviceId));
+            manualUndoConfig.setPatientCode(patientCode);
+            manualUndoConfig.setClinicId(entity.getClinicId());
+            manualUndoConfig.setMonitorType(true);
+            manualUndoConfig.setUndo(source.getConfig());
+
+            deviceRunningService.undo(manualUndoConfig,false);
+        }
+    }
+
+
+    @Data
+    @Builder
+    static class UndoEntity{
+        private String deviceId;
+        private String patientCode;
+        private UndoDeviceConfig config;
+        private Integer timeout;
+        private TimeUnit unit;
+        private String tenantId;
+        private Date timestamp;
+    }
+}

+ 4 - 8
coffee-system/src/main/java/com/coffee/bus/config/HospitalConfigHandler.java → coffee-system/src/main/java/com/coffee/bus/hospital/config/HospitalConfigHandler.java

@@ -1,10 +1,6 @@
-package com.coffee.bus.config;
+package com.coffee.bus.hospital.config;
 
-import cn.hutool.core.util.ClassUtil;
-import cn.hutool.core.util.ObjectUtil;
-import com.coffee.bus.enums.ConfigEnum;
-
-import java.util.Map;
+import com.coffee.bus.hospital.enums.ConfigHandlerEnums;
 
 /**
  * @author lifang
@@ -15,9 +11,9 @@ import java.util.Map;
  */
 public interface HospitalConfigHandler<E,T> {
 
-    String getName();
+    String getHospitalId();
 
-    String getId();
+    ConfigHandlerEnums getId();
 
     String getDescription();
 

+ 168 - 0
coffee-system/src/main/java/com/coffee/bus/hospital/config/HospitalFinishMonitorConfigHandler.java

@@ -0,0 +1,168 @@
+package com.coffee.bus.hospital.config;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.coffee.bus.hospital.config.bean.FunctionFinishMonitorConfig;
+import com.coffee.bus.entity.BusDeviceRunningEntity;
+import com.coffee.bus.enums.DeviceStatusEnum;
+import com.coffee.bus.hospital.enums.ConfigHandlerEnums;
+import com.coffee.bus.registry.device.DeviceRegistry;
+import com.coffee.bus.registry.patient.PatientOperator;
+import com.coffee.bus.registry.patient.PatientRegistry;
+import com.coffee.bus.registry.patient.bean.DeviceTimeSmallInfo;
+import com.coffee.bus.registry.patient.bean.PatientCacheInfo;
+import com.coffee.bus.service.LocalBusDeviceRunningService;
+import com.coffee.bus.service.LocalBusInfusionHistoryService;
+import com.coffee.bus.service.dto.ManualUndoConfig;
+import com.coffee.bus.service.dto.UndoDeviceConfig;
+import com.coffee.bus.utils.WsPublishUtils;
+import com.coffee.common.cache.ConfigStorage;
+import com.coffee.common.util.RedissonUtil;
+import lombok.Builder;
+import lombok.Data;
+import org.redisson.api.RDelayedQueue;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Objects;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName HospitalFinishMonitorConfigHandler.java
+ * @Description 自动结束管理处理
+ * @createTime 2022年05月19日 16:22:00
+ */
+public class HospitalFinishMonitorConfigHandler extends AbstractHospitalConfigHandler<FunctionFinishMonitorConfig, BusDeviceRunningEntity>{
+
+
+    public HospitalFinishMonitorConfigHandler(ConfigStorage configStorage, String hospitalId, RedissonUtil redissonUtil, LocalBusDeviceRunningService deviceRunningService, LocalBusInfusionHistoryService infusionHistoryService, DeviceRegistry deviceRegistry, WsPublishUtils wsPublishUtils, PatientRegistry patientRegistry) {
+        super(configStorage, hospitalId, redissonUtil, deviceRunningService, infusionHistoryService, deviceRegistry, wsPublishUtils, patientRegistry);
+    }
+
+    @Override
+    public ConfigHandlerEnums getId() {
+        return ConfigHandlerEnums.finishMonitor;
+    }
+
+    @Override
+    public String getDescription() {
+        return "自动结束管理";
+    }
+
+    @Override
+    public void handler(BusDeviceRunningEntity source) {
+        FunctionFinishMonitorConfig config = this.getConfig().as(FunctionFinishMonitorConfig.class);
+        if(config==null||!Boolean.TRUE.equals(config.isEnable())||Objects.isNull(config.getShutDownInterval())){
+            return;
+        }
+        judgeShutdown(source,config);
+
+    }
+
+    public void judgeNoSignal(String device,String patientCode,String tenantId){
+        FunctionFinishMonitorConfig config = this.getConfig().as(FunctionFinishMonitorConfig.class);
+        if(config==null||!Boolean.TRUE.equals(config.isEnable())|| Objects.isNull(config.getNoSignalInterval())){
+            return;
+        }
+        RDelayedQueue noSignalFinishDelay = redissonUtil.getDelayedQueue(getId() +"-noSignalFinish"+ "-" + tenantId + "-" +device, e -> {
+            if(e instanceof FinishMonitorEntity){
+                this.handleFinishMonitor((FinishMonitorEntity) e);
+            }
+        });
+        UndoDeviceConfig undoDeviceConfig = new UndoDeviceConfig();
+        undoDeviceConfig.setUndoBy(config.getUndoBy());
+        FinishMonitorEntity finishMonitor = FinishMonitorEntity.builder()
+                .deviceId(device)
+                .patientCode(patientCode)
+                .config(undoDeviceConfig)
+                .timeout(config.getNoSignalInterval())
+                .unit(TimeUnit.MINUTES)
+                .tenantId(tenantId)
+                .timestamp(new Date())
+                .build();
+        noSignalFinishDelay.offer(finishMonitor,finishMonitor.getTimeout(),finishMonitor.getUnit());
+    }
+
+    /**
+     * 描述: 处理关机到结束时间
+     * @author lifang
+     * @date 2022/5/19 16:51
+     * @param source
+     * @param config
+     * @return void
+     */
+    private void judgeShutdown(BusDeviceRunningEntity source,FunctionFinishMonitorConfig config){
+        RDelayedQueue shutdownFinishDelay = redissonUtil.getDelayedQueue(getId() +"-ShutdownFinish"+ "-" + source.getTenantId() + "-" + source.getDeviceId(), e -> {
+            if(e instanceof FinishMonitorEntity){
+                this.handleFinishMonitor((FinishMonitorEntity) e);
+            }
+        });
+        UndoDeviceConfig undoDeviceConfig = new UndoDeviceConfig();
+        undoDeviceConfig.setUndoBy(config.getUndoBy());
+        //清空延迟队列消息
+        shutdownFinishDelay.clear();
+        if(DeviceStatusEnum.Shutdown.equals(source.getType())){
+            FinishMonitorEntity finishMonitor = FinishMonitorEntity.builder()
+                    .deviceId(source.getDeviceId())
+                    .patientCode(source.getPatientCode())
+                    .config(undoDeviceConfig)
+                    .timeout(config.getShutDownInterval())
+                    .unit(TimeUnit.MINUTES)
+                    .tenantId(source.getTenantId())
+                    .timestamp(new Date())
+                    .build();
+            shutdownFinishDelay.offer(finishMonitor,config.getShutDownInterval(),TimeUnit.MINUTES);
+        }
+
+        //不在服务区延迟队列清空
+        RDelayedQueue noSignalFinishDelay = redissonUtil.getDelayedQueue(getId() +"-noSignalFinish"+ "-" + source.getTenantId() + "-" +source.getDeviceId(), e -> {
+            if(e instanceof FinishMonitorEntity){
+                this.handleFinishMonitor((FinishMonitorEntity) e);
+            }
+        });
+        noSignalFinishDelay.clear();
+    }
+
+    /**
+     * 描述: 自动结束管理处理
+     * @author lifang
+     * @date 2022/5/19 22:35
+     * @param source
+     * @return void
+     */
+    private void handleFinishMonitor(FinishMonitorEntity source){
+        String deviceId = source.getDeviceId();
+        String patientCode = source.getPatientCode();
+        String tenantId = source.getTenantId();
+        UndoDeviceConfig config = source.getConfig();
+        BusDeviceRunningEntity entity = deviceRunningService.getOne(new QueryWrapper<BusDeviceRunningEntity>().lambda().eq(BusDeviceRunningEntity::getDeviceId, deviceId)
+                .eq(BusDeviceRunningEntity::getPatientCode, patientCode)
+                .eq(BusDeviceRunningEntity::getMaster,true)
+                .eq(BusDeviceRunningEntity::getTenantId, tenantId));
+        if(entity!=null){
+            PatientOperator<PatientCacheInfo> patientOperator = patientRegistry.getOperator(tenantId, patientCode);
+            ManualUndoConfig manualUndoConfig = new ManualUndoConfig();
+            config.setUndoTime(new Date());
+            manualUndoConfig.setUndo(config);
+            manualUndoConfig.setMonitorType(true);
+            manualUndoConfig.setClinicId(entity.getClinicId());
+            manualUndoConfig.setPatientCode(patientCode);
+            manualUndoConfig.setDeviceIds(patientOperator.getAllDevice().stream().map(DeviceTimeSmallInfo::getDeviceId).collect(Collectors.toList()));
+            deviceRunningService.undo(manualUndoConfig,true);
+        }
+    }
+
+    @Data
+    @Builder
+    static class FinishMonitorEntity implements Serializable {
+        private String deviceId;
+        private String patientCode;
+        private UndoDeviceConfig config;
+        private Integer timeout;
+        private TimeUnit unit;
+        private String tenantId;
+        private Date timestamp;
+    }
+}

+ 14 - 35
coffee-system/src/main/java/com/coffee/bus/config/HospitalFunctionAnalConfigHandler.java → coffee-system/src/main/java/com/coffee/bus/hospital/config/HospitalFunctionAnalConfigHandler.java

@@ -1,22 +1,24 @@
-package com.coffee.bus.config;
+package com.coffee.bus.hospital.config;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.coffee.bus.config.bean.FunctionAnalConfig;
+import com.coffee.bus.hospital.config.bean.FunctionAnalConfig;
 import com.coffee.bus.entity.BusDeviceRunningEntity;
 import com.coffee.bus.entity.BusInfusionHistoryEntity;
+import com.coffee.bus.hospital.enums.ConfigHandlerEnums;
 import com.coffee.bus.registry.device.DeviceRegistry;
+import com.coffee.bus.registry.patient.PatientRegistry;
 import com.coffee.bus.service.LocalBusDeviceRunningService;
 import com.coffee.bus.service.LocalBusInfusionHistoryService;
 import com.coffee.bus.utils.WsPublishUtils;
-import com.coffee.common.cache.ClusterConfigStorage;
+import com.coffee.common.cache.ConfigStorage;
 import com.coffee.common.util.RedissonUtil;
 import lombok.Builder;
 import lombok.Data;
-import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
 import org.redisson.api.RDelayedQueue;
+import org.redisson.api.RedissonClient;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -31,35 +33,16 @@ import java.util.concurrent.TimeUnit;
  * @createTime 2022年05月18日 11:25:00
  */
 @Slf4j
-public class HospitalFunctionAnalConfigHandler extends ClusterConfigStorage implements HospitalConfigHandler<FunctionAnalConfig,BusDeviceRunningEntity> {
+public class HospitalFunctionAnalConfigHandler extends AbstractHospitalConfigHandler<FunctionAnalConfig,BusDeviceRunningEntity> {
 
-    private final LocalBusDeviceRunningService deviceRunningService;
 
-    private final LocalBusInfusionHistoryService infusionHistoryService;
-
-    private final RedissonUtil redissonUtil;
-
-    private final DeviceRegistry deviceRegistry;
-    @Getter
-    private String name;
-
-    public HospitalFunctionAnalConfigHandler(String name, LocalBusDeviceRunningService deviceRunningService, LocalBusInfusionHistoryService infusionHistoryService, RedissonUtil redissonUtil, DeviceRegistry deviceRegistry, WsPublishUtils wsPublishUtils) {
-        super(redissonUtil.getRedissonClient(), name);
-        this.name=name;
-        this.deviceRunningService = deviceRunningService;
-        this.infusionHistoryService = infusionHistoryService;
-        this.redissonUtil = redissonUtil;
-        this.deviceRegistry = deviceRegistry;
-        this.wsPublishUtils = wsPublishUtils;
+    public HospitalFunctionAnalConfigHandler(ConfigStorage configStorage, String hospitalId, RedissonUtil redissonUtil, LocalBusDeviceRunningService deviceRunningService, LocalBusInfusionHistoryService infusionHistoryService, DeviceRegistry deviceRegistry, WsPublishUtils wsPublishUtils, PatientRegistry patientRegistry) {
+        super(configStorage, hospitalId, redissonUtil, deviceRunningService, infusionHistoryService, deviceRegistry, wsPublishUtils, patientRegistry);
     }
 
-    private WsPublishUtils wsPublishUtils;
-
-
-
     @Override
-    public String getId() {
-        return "insufficient";
+    public ConfigHandlerEnums getId() {
+        return ConfigHandlerEnums.anal;
     }
 
     @Override
@@ -68,16 +51,12 @@ public class HospitalFunctionAnalConfigHandler extends ClusterConfigStorage impl
     }
 
 
-    @Override
-    public void setConfig(FunctionAnalConfig config) {
-        this.setConfig("config",config);
-    }
 
     @Override
     public void handler(BusDeviceRunningEntity source) {
-        FunctionAnalConfig config = this.getConfig("config").as(FunctionAnalConfig.class);
+        FunctionAnalConfig config = this.getConfig().as(FunctionAnalConfig.class);
         if(config==null){
-            log.warn("id:{},配置名称:{},不存在",getId(),name);
+            log.warn("id:{},配置名称:{},不存在",getId(),hospitalId);
             return;
         }
         handlerAnal(source,config);
@@ -174,7 +153,7 @@ public class HospitalFunctionAnalConfigHandler extends ClusterConfigStorage impl
             noneAnalDelayedQueue.clear();
         }else {
             //没有触发阈值,发入镇痛消失处理
-            FunctionAnalConfig config = this.getConfig("config").as(FunctionAnalConfig.class);
+            FunctionAnalConfig config = this.getConfig().as(FunctionAnalConfig.class);
             NoneAnalEntity noneAnal = NoneAnalEntity.builder()
                     .deviceId(anal.getDeviceId())
                     .tenantId(anal.getTenantId())

+ 34 - 30
coffee-system/src/main/java/com/coffee/bus/config/HospitalFunctionExtraConfigHandler.java → coffee-system/src/main/java/com/coffee/bus/hospital/config/HospitalFunctionExtraConfigHandler.java

@@ -1,24 +1,25 @@
-package com.coffee.bus.config;
+package com.coffee.bus.hospital.config;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.coffee.bus.config.bean.FunctionExtraConfig;
+import com.coffee.bus.enums.ConfigEnum;
+import com.coffee.bus.hospital.config.bean.FunctionExtraConfig;
 import com.coffee.bus.entity.BusDeviceRunningEntity;
 import com.coffee.bus.entity.BusInfusionHistoryEntity;
 import com.coffee.bus.enums.DeviceStatusEnum;
 import com.coffee.bus.enums.DeviceTypeEnum;
+import com.coffee.bus.hospital.enums.ConfigHandlerEnums;
 import com.coffee.bus.registry.device.DeviceRegistry;
+import com.coffee.bus.registry.patient.PatientRegistry;
 import com.coffee.bus.service.LocalBusDeviceRunningService;
 import com.coffee.bus.service.LocalBusInfusionHistoryService;
 import com.coffee.bus.utils.WsPublishUtils;
-import com.coffee.common.cache.ClusterConfigStorage;
+import com.coffee.common.cache.ConfigStorage;
 import com.coffee.common.util.RedissonUtil;
 import lombok.Builder;
 import lombok.Data;
-import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
 import org.redisson.api.RDelayedQueue;
-import org.redisson.api.RedissonClient;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -35,27 +36,20 @@ import java.util.concurrent.TimeUnit;
  * @createTime 2022年05月19日 15:13:00
  */
 @Slf4j
-public class HospitalFunctionExtraConfigHandler  extends ClusterConfigStorage implements HospitalConfigHandler<FunctionExtraConfig, BusDeviceRunningEntity>{
-
-    private RedissonUtil redissonUtil;
-
-    private LocalBusDeviceRunningService deviceRunningService;
-
-    private LocalBusInfusionHistoryService infusionHistoryService;
-
-    private DeviceRegistry deviceRegistry;
-
-    private WsPublishUtils wsPublishUtils;
-    @Getter
-    private String name;
-
-    public HospitalFunctionExtraConfigHandler(RedissonClient redissonClient, String name) {
-        super(redissonClient, name);
+public class HospitalFunctionExtraConfigHandler  extends  AbstractHospitalConfigHandler<FunctionExtraConfig, BusDeviceRunningEntity>{
+
+    private HospitalFinishMonitorConfigHandler monitorConfigHandler;
+    private HospitalAutoUndoConfigHandler autoUndoConfigHandler;
+    public HospitalFunctionExtraConfigHandler(ConfigStorage configStorage, String hospitalId, RedissonUtil redissonUtil, LocalBusDeviceRunningService deviceRunningService, LocalBusInfusionHistoryService infusionHistoryService, DeviceRegistry deviceRegistry, WsPublishUtils wsPublishUtils, PatientRegistry patientRegistry
+    , HospitalFinishMonitorConfigHandler monitorConfigHandler,HospitalAutoUndoConfigHandler autoUndoConfigHandler) {
+        super(configStorage, hospitalId, redissonUtil, deviceRunningService, infusionHistoryService, deviceRegistry, wsPublishUtils, patientRegistry);
+        this.monitorConfigHandler=monitorConfigHandler;
+        this.autoUndoConfigHandler=autoUndoConfigHandler;
     }
 
     @Override
-    public String getId() {
-        return "extra";
+    public ConfigHandlerEnums getId() {
+        return ConfigHandlerEnums.extra;
     }
 
     @Override
@@ -63,16 +57,11 @@ public class HospitalFunctionExtraConfigHandler  extends ClusterConfigStorage im
         return "医院其他配置处理,不在服务区设置、低输注设置";
     }
 
-    @Override
-    public void setConfig(FunctionExtraConfig config) {
-        this.setConfig("config",config);
-    }
-
     @Override
     public void handler(BusDeviceRunningEntity source) {
-        FunctionExtraConfig config = this.getConfig("config").as(FunctionExtraConfig.class);
+        FunctionExtraConfig config = this.getConfig().as(FunctionExtraConfig.class);
         if(config==null){
-            log.warn("id:{},配置名称:{},不存在",getId(),name);
+            log.warn("id:{},配置名称:{},不存在",getId(),hospitalId);
             return;
         }
         if (config.getNoSignal()!=null&&config.getNoSignal()>0) {
@@ -97,8 +86,19 @@ public class HospitalFunctionExtraConfigHandler  extends ClusterConfigStorage im
                 this.handleNoSignal((NoSignalEntity) e);
             }
         });
+        //清空延迟队列消息
         delayedQueue.clear();
 
+        NoSignalEntity noSignal = NoSignalEntity.builder()
+                .deviceId(source.getDeviceId())
+                .patientCode(source.getPatientCode())
+                .tenantId(source.getTenantId())
+                .timestamp(new Date())
+                .timeout(interval)
+                .unit(TimeUnit.SECONDS)
+                .build();
+        //将该次消息视为最后一次消息放入队列中
+        delayedQueue.offer(noSignal,noSignal.getTimeout(),noSignal.getUnit());
     }
 
     /**
@@ -127,6 +127,9 @@ public class HospitalFunctionExtraConfigHandler  extends ClusterConfigStorage im
             //发布推送
             wsPublishUtils.publishPatientMonitor(runningInfo.getPatientCode(), runningInfo.getTenantId());
         }
+        //不在服务区
+        monitorConfigHandler.judgeNoSignal(deviceId,source.getPatientCode(),source.getTenantId());
+        autoUndoConfigHandler.judgeNoSignal(deviceId,source.getPatientCode(),source.getTenantId());
     }
 
 
@@ -198,6 +201,7 @@ public class HospitalFunctionExtraConfigHandler  extends ClusterConfigStorage im
     @Builder
     static class NoSignalEntity implements Serializable {
         private String deviceId;
+        private String patientCode;
         private Integer timeout;
         private TimeUnit unit;
         private String tenantId;

+ 1 - 1
coffee-system/src/main/java/com/coffee/bus/config/bean/FunctionAnalConfig.java → coffee-system/src/main/java/com/coffee/bus/hospital/config/bean/FunctionAnalConfig.java

@@ -1,4 +1,4 @@
-package com.coffee.bus.config.bean;
+package com.coffee.bus.hospital.config.bean;
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;

+ 1 - 1
coffee-system/src/main/java/com/coffee/bus/config/bean/FunctionAutoUndoConfig.java → coffee-system/src/main/java/com/coffee/bus/hospital/config/bean/FunctionAutoUndoConfig.java

@@ -1,4 +1,4 @@
-package com.coffee.bus.config.bean;
+package com.coffee.bus.hospital.config.bean;
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;

+ 1 - 1
coffee-system/src/main/java/com/coffee/bus/config/bean/FunctionExtraConfig.java → coffee-system/src/main/java/com/coffee/bus/hospital/config/bean/FunctionExtraConfig.java

@@ -1,4 +1,4 @@
-package com.coffee.bus.config.bean;
+package com.coffee.bus.hospital.config.bean;
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;

+ 3 - 3
coffee-system/src/main/java/com/coffee/bus/config/bean/FunctionFinishMonitorConfig.java → coffee-system/src/main/java/com/coffee/bus/hospital/config/bean/FunctionFinishMonitorConfig.java

@@ -1,4 +1,4 @@
-package com.coffee.bus.config.bean;
+package com.coffee.bus.hospital.config.bean;
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -22,7 +22,7 @@ public class FunctionFinishMonitorConfig implements Serializable {
     private Integer shutDownInterval;
     @ApiModelProperty("自动撤泵人姓名")
     private String undoBy;
-    @ApiModelProperty("自动撤泵人是否为麻醉医生")
-    private boolean noSignalInterval;
+    @ApiModelProperty("不在服务区到结束时间")
+    private Integer noSignalInterval;
 
 }

+ 1 - 1
coffee-system/src/main/java/com/coffee/bus/config/bean/FunctionManualUndoConfig.java → coffee-system/src/main/java/com/coffee/bus/hospital/config/bean/FunctionManualUndoConfig.java

@@ -1,4 +1,4 @@
-package com.coffee.bus.config.bean;
+package com.coffee.bus.hospital.config.bean;
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;

+ 1 - 1
coffee-system/src/main/java/com/coffee/bus/config/bean/FunctionOtherConfig.java → coffee-system/src/main/java/com/coffee/bus/hospital/config/bean/FunctionOtherConfig.java

@@ -1,4 +1,4 @@
-package com.coffee.bus.config.bean;
+package com.coffee.bus.hospital.config.bean;
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;

+ 4 - 4
coffee-system/src/main/java/com/coffee/bus/config/bean/FunctionUndoConfig.java → coffee-system/src/main/java/com/coffee/bus/hospital/config/bean/FunctionUndoConfig.java

@@ -1,8 +1,7 @@
-package com.coffee.bus.config.bean;
+package com.coffee.bus.hospital.config.bean;
 
 import io.swagger.annotations.ApiModel;
 import lombok.Data;
-
 import java.io.Serializable;
 
 /**
@@ -12,11 +11,12 @@ import java.io.Serializable;
  * @Description TODO
  * @createTime 2022年05月18日 08:33:00
  */
-@ApiModel("撤泵功能配置")
+@ApiModel("结束管理功能配置")
 @Data
 public class FunctionUndoConfig implements Serializable {
+    private FunctionFinishMonitorConfig finishMonitor;
+
     private FunctionAutoUndoConfig auto;
 
     private FunctionManualUndoConfig manual;
-
 }

+ 22 - 0
coffee-system/src/main/java/com/coffee/bus/hospital/enums/ConfigHandlerEnums.java

@@ -0,0 +1,22 @@
+package com.coffee.bus.hospital.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName ConfigHandlerEnums.java
+ * @Description 功能配置类型
+ * @createTime 2022年05月20日 08:37:00
+ */
+@AllArgsConstructor
+public enum ConfigHandlerEnums {
+    autoUndo("自动撤泵配置"),
+    finishMonitor("自动结束管理配置"),
+    anal("镇痛不足配置"),
+    extra("其他配置");
+
+    @Getter
+    private String description;
+}

+ 1 - 1
coffee-system/src/main/java/com/coffee/bus/his/HisRequest.java → coffee-system/src/main/java/com/coffee/bus/hospital/his/HisRequest.java

@@ -1,4 +1,4 @@
-package com.coffee.bus.his;
+package com.coffee.bus.hospital.his;
 
 import com.coffee.bus.entity.BusClinicEntity;
 import com.coffee.common.result.R;

+ 1 - 1
coffee-system/src/main/java/com/coffee/bus/his/HisResponse.java → coffee-system/src/main/java/com/coffee/bus/hospital/his/HisResponse.java

@@ -1,4 +1,4 @@
-package com.coffee.bus.his;
+package com.coffee.bus.hospital.his;
 
 import lombok.Data;
 

+ 9 - 23
coffee-system/src/main/java/com/coffee/bus/his/HisScriptSession.java → coffee-system/src/main/java/com/coffee/bus/hospital/his/HisScriptSession.java

@@ -1,4 +1,4 @@
-package com.coffee.bus.his;
+package com.coffee.bus.hospital.his;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
@@ -21,12 +21,14 @@ import com.coffee.bus.script.ScriptParse;
 import com.coffee.bus.service.LocalBusClinicService;
 import com.coffee.bus.service.LocalBusHospitalService;
 import com.coffee.common.cache.ClusterConfigStorage;
+import com.coffee.common.cache.ConfigStorage;
+import com.coffee.common.cache.manager.ClusterConfigStorageManager;
+import com.coffee.common.cache.manager.ConfigStorageManager;
 import com.coffee.common.cache.value.Value;
 import com.coffee.common.exception.CustomException;
 import com.coffee.common.result.R;
 import lombok.extern.slf4j.Slf4j;
 import org.redisson.api.RedissonClient;
-import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.util.Assert;
 import org.springframework.web.context.request.async.DeferredResult;
 import org.tio.core.ChannelContext;
@@ -34,7 +36,6 @@ import org.tio.core.Tio;
 import org.tio.core.utils.TioUtils;
 import org.tio.websocket.common.WsResponse;
 
-import javax.validation.constraints.NotNull;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.Executors;
@@ -54,35 +55,20 @@ public class HisScriptSession {
     private ChannelContext channelContext;
     private ScriptManager scriptManager;
     private LocalBusClinicService clinicService;
-    private ClusterConfigStorage clusterConfigStorage;
+    private ConfigStorage clusterConfigStorage;
     private LocalBusHospitalService hospitalService;
     private Map<String,HisRequest> hisRequestMap=new ConcurrentHashMap<>();
 
-    public HisScriptSession(String hospitalId, ChannelContext channelContext, ScriptManager scriptManager,
-                            RedissonClient redissonClient, LocalBusClinicService clinicService, LocalBusHospitalService hospitalService) {
+    public HisScriptSession(String hospitalId, ScriptManager scriptManager, ConfigStorageManager configStorageManager, LocalBusClinicService clinicService, LocalBusHospitalService hospitalService) {
         this.hospitalId = hospitalId;
-        this.channelContext = channelContext;
         this.scriptManager = scriptManager;
         this.clinicService = clinicService;
         this.hospitalService=hospitalService;
-        init(redissonClient,hospitalId,hospitalService);
+        init(configStorageManager,hospitalId);
     }
 
-    public HisScriptSession(String hospitalId, ScriptManager scriptManager, RedissonClient redissonClient, LocalBusClinicService clinicService,LocalBusHospitalService hospitalService) {
-        this.hospitalId = hospitalId;
-        this.scriptManager = scriptManager;
-        this.clinicService = clinicService;
-        this.hospitalService=hospitalService;
-        init(redissonClient,hospitalId,hospitalService);
-    }
-
-    private void init(RedissonClient redissonClient, String hospitalId, LocalBusHospitalService hospitalService){
-        BusHospitalEntity hospital = hospitalService.getById(hospitalId);
-        if(hospital==null){
-            throw new RuntimeException(String.format("医院{%s}不存在,获取医院脚本会话失败",hospitalId));
-        }
-        clusterConfigStorage=new ClusterConfigStorage(redissonClient,hospitalId);
-        clusterConfigStorage.setConfig("info",hospital);
+    private void init(ConfigStorageManager configStorageManager, String hospitalId){
+        clusterConfigStorage = configStorageManager.getStorage(hospitalId);
     }
 
     /**

+ 6 - 4
coffee-system/src/main/java/com/coffee/bus/his/HisScriptSessionManager.java → coffee-system/src/main/java/com/coffee/bus/hospital/his/HisScriptSessionManager.java

@@ -1,11 +1,11 @@
-package com.coffee.bus.his;
+package com.coffee.bus.hospital.his;
 
 import com.coffee.bus.script.ScriptManager;
 import com.coffee.bus.service.LocalBusClinicService;
 import com.coffee.bus.service.LocalBusHospitalService;
+import com.coffee.common.cache.manager.ClusterConfigStorageManager;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;
@@ -25,13 +25,15 @@ public class HisScriptSessionManager {
     private ScriptManager scriptManager;
     private RedissonClient redissonClient;
     private LocalBusHospitalService hospitalService;
+    private ClusterConfigStorageManager configStorageManager;
 
     @Autowired
-    public HisScriptSessionManager(LocalBusClinicService clinicService, ScriptManager scriptManager, RedissonClient redissonClient, LocalBusHospitalService hospitalService) {
+    public HisScriptSessionManager( LocalBusClinicService clinicService, ScriptManager scriptManager, RedissonClient redissonClient, LocalBusHospitalService hospitalService, ClusterConfigStorageManager configStorageManager) {
         this.clinicService = clinicService;
         this.scriptManager = scriptManager;
         this.redissonClient = redissonClient;
         this.hospitalService = hospitalService;
+        this.configStorageManager = configStorageManager;
     }
 
     /**
@@ -53,7 +55,7 @@ public class HisScriptSessionManager {
      * @return HisScriptSession
      */
     public HisScriptSession register(String hospitalId){
-        return new HisScriptSession(hospitalId, scriptManager,redissonClient, clinicService,hospitalService);
+        return new HisScriptSession(hospitalId, scriptManager,configStorageManager, clinicService,hospitalService);
     }
 
     /**

+ 1 - 1
coffee-system/src/main/java/com/coffee/bus/his/strategy/HisStrategyEnum.java → coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/HisStrategyEnum.java

@@ -1,4 +1,4 @@
-package com.coffee.bus.his.strategy;
+package com.coffee.bus.hospital.his.strategy;
 
 import com.baomidou.mybatisplus.annotation.IEnum;
 import lombok.AllArgsConstructor;

+ 1 - 1
coffee-system/src/main/java/com/coffee/bus/his/strategy/HisStrategyHandler.java → coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/HisStrategyHandler.java

@@ -1,4 +1,4 @@
-package com.coffee.bus.his.strategy;
+package com.coffee.bus.hospital.his.strategy;
 
 import com.coffee.bus.entity.BusClinicEntity;
 import java.util.*;

+ 1 - 1
coffee-system/src/main/java/com/coffee/bus/his/strategy/HisStrategyManager.java → coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/HisStrategyManager.java

@@ -1,4 +1,4 @@
-package com.coffee.bus.his.strategy;
+package com.coffee.bus.hospital.his.strategy;
 
 import java.util.*;
 /**

+ 1 - 1
coffee-system/src/main/java/com/coffee/bus/his/strategy/HisStrategyManagerRegister.java → coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/HisStrategyManagerRegister.java

@@ -1,4 +1,4 @@
-package com.coffee.bus.his.strategy;
+package com.coffee.bus.hospital.his.strategy;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;

+ 1 - 4
coffee-system/src/main/java/com/coffee/bus/his/strategy/all/EqualsStrategyHandler.java → coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/all/EqualsStrategyHandler.java

@@ -1,11 +1,9 @@
-package com.coffee.bus.his.strategy.all;
+package com.coffee.bus.hospital.his.strategy.all;
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.json.JSONUtil;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.coffee.bus.entity.BusClinicEntity;
 import com.coffee.bus.service.LocalBusClinicService;
-import com.coffee.bus.his.strategy.HisStrategyHandler;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
@@ -13,7 +11,6 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Comparator;
 import java.util.List;
-import java.util.stream.Collectors;
 
 /**
  * @author lifang

+ 2 - 2
coffee-system/src/main/java/com/coffee/bus/his/strategy/all/HisAllStrategyHandler.java → coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/all/HisAllStrategyHandler.java

@@ -1,6 +1,6 @@
-package com.coffee.bus.his.strategy.all;
+package com.coffee.bus.hospital.his.strategy.all;
 
-import com.coffee.bus.his.strategy.HisStrategyHandler;
+import com.coffee.bus.hospital.his.strategy.HisStrategyHandler;
 
 /**
  * @author lifang

+ 3 - 3
coffee-system/src/main/java/com/coffee/bus/his/strategy/all/HisAllStrategyManager.java → coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/all/HisAllStrategyManager.java

@@ -1,7 +1,7 @@
-package com.coffee.bus.his.strategy.all;
+package com.coffee.bus.hospital.his.strategy.all;
 
-import com.coffee.bus.his.strategy.HisStrategyEnum;
-import com.coffee.bus.his.strategy.HisStrategyManager;
+import com.coffee.bus.hospital.his.strategy.HisStrategyEnum;
+import com.coffee.bus.hospital.his.strategy.HisStrategyManager;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 

+ 1 - 2
coffee-system/src/main/java/com/coffee/bus/his/strategy/all/LessToMoreHisStrategyHandler.java → coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/all/LessToMoreHisStrategyHandler.java

@@ -1,10 +1,9 @@
-package com.coffee.bus.his.strategy.all;
+package com.coffee.bus.hospital.his.strategy.all;
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.json.JSONUtil;
 import com.coffee.bus.entity.BusClinicEntity;
 import com.coffee.bus.service.LocalBusClinicService;
-import com.coffee.bus.his.strategy.HisStrategyHandler;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;

+ 1 - 2
coffee-system/src/main/java/com/coffee/bus/his/strategy/all/MoreToLessHisStrategyHandler.java → coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/all/MoreToLessHisStrategyHandler.java

@@ -1,10 +1,9 @@
-package com.coffee.bus.his.strategy.all;
+package com.coffee.bus.hospital.his.strategy.all;
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.json.JSONUtil;
 import com.coffee.bus.entity.BusClinicEntity;
 import com.coffee.bus.service.LocalBusClinicService;
-import com.coffee.bus.his.strategy.HisStrategyHandler;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;

+ 1 - 1
coffee-system/src/main/java/com/coffee/bus/his/strategy/onlynew/DefaultHisNewStrategyHandler.java → coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/onlynew/DefaultHisNewStrategyHandler.java

@@ -1,4 +1,4 @@
-package com.coffee.bus.his.strategy.onlynew;
+package com.coffee.bus.hospital.his.strategy.onlynew;
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.json.JSONUtil;

+ 2 - 2
coffee-system/src/main/java/com/coffee/bus/his/strategy/onlynew/HisNewStrategyHandler.java → coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/onlynew/HisNewStrategyHandler.java

@@ -1,6 +1,6 @@
-package com.coffee.bus.his.strategy.onlynew;
+package com.coffee.bus.hospital.his.strategy.onlynew;
 
-import com.coffee.bus.his.strategy.HisStrategyHandler;
+import com.coffee.bus.hospital.his.strategy.HisStrategyHandler;
 
 /**
  * @author lifang

+ 3 - 3
coffee-system/src/main/java/com/coffee/bus/his/strategy/onlynew/HisNewStrategyManager.java → coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/onlynew/HisNewStrategyManager.java

@@ -1,7 +1,7 @@
-package com.coffee.bus.his.strategy.onlynew;
+package com.coffee.bus.hospital.his.strategy.onlynew;
 
-import com.coffee.bus.his.strategy.HisStrategyEnum;
-import com.coffee.bus.his.strategy.HisStrategyManager;
+import com.coffee.bus.hospital.his.strategy.HisStrategyEnum;
+import com.coffee.bus.hospital.his.strategy.HisStrategyManager;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;

+ 3 - 3
coffee-system/src/main/java/com/coffee/bus/his/strategy/part/DefaultHisPartStrategyHandler.java → coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/part/DefaultHisPartStrategyHandler.java

@@ -1,10 +1,10 @@
-package com.coffee.bus.his.strategy.part;
+package com.coffee.bus.hospital.his.strategy.part;
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.json.JSONUtil;
 import com.coffee.bus.entity.BusClinicEntity;
-import com.coffee.bus.his.strategy.all.HisAllStrategyHandler;
-import com.coffee.bus.his.strategy.onlynew.HisNewStrategyHandler;
+import com.coffee.bus.hospital.his.strategy.all.HisAllStrategyHandler;
+import com.coffee.bus.hospital.his.strategy.onlynew.HisNewStrategyHandler;
 import com.coffee.bus.service.LocalBusClinicService;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;

+ 2 - 2
coffee-system/src/main/java/com/coffee/bus/his/strategy/part/HisPartStrategyHandler.java → coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/part/HisPartStrategyHandler.java

@@ -1,6 +1,6 @@
-package com.coffee.bus.his.strategy.part;
+package com.coffee.bus.hospital.his.strategy.part;
 
-import com.coffee.bus.his.strategy.HisStrategyHandler;
+import com.coffee.bus.hospital.his.strategy.HisStrategyHandler;
 
 /**
  * @author lifang

+ 3 - 3
coffee-system/src/main/java/com/coffee/bus/his/strategy/part/HisPartStrategyManager.java → coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/part/HisPartStrategyManager.java

@@ -1,7 +1,7 @@
-package com.coffee.bus.his.strategy.part;
+package com.coffee.bus.hospital.his.strategy.part;
 
-import com.coffee.bus.his.strategy.HisStrategyEnum;
-import com.coffee.bus.his.strategy.HisStrategyManager;
+import com.coffee.bus.hospital.his.strategy.HisStrategyEnum;
+import com.coffee.bus.hospital.his.strategy.HisStrategyManager;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;

+ 0 - 4
coffee-system/src/main/java/com/coffee/bus/service/LocalBusDeviceRunningService.java

@@ -114,10 +114,6 @@ public class LocalBusDeviceRunningService extends BaseService<BusDeviceRunningMa
             if(CollectionUtil.isEmpty(devices)){
                 return;
             }
-//            //主泵撤除且没有结束临床
-//            if (devices.stream().anyMatch(BusDeviceRunningEntity::getMaster)&&!finishClinic) {
-//                throw new CustomException("主泵不可撤除,请在【结束管理】处操作");
-//            }
             //对所有运行中的泵进行撤泵操作
             this.update(new UpdateWrapper<BusDeviceRunningEntity>().lambda().in(BusDeviceRunningEntity::getDeviceId,deviceIds).set(BusDeviceRunningEntity::getIsUndo,true));
             //无泵监护,不需要监护输注数据

+ 10 - 12
coffee-system/src/main/java/com/coffee/bus/service/LocalBusHospitalService.java

@@ -1,15 +1,16 @@
 package com.coffee.bus.service;
 
-import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.coffee.bus.bean.GeoPoint;
 import com.coffee.bus.entity.BusHospitalEntity;
-import com.coffee.bus.his.HisScriptSession;
-import com.coffee.bus.his.HisScriptSessionManager;
-import com.coffee.bus.his.strategy.HisStrategyEnum;
+import com.coffee.bus.hospital.HospitalManager;
+import com.coffee.bus.hospital.HospitalManagerRegister;
+import com.coffee.bus.hospital.his.HisScriptSession;
+import com.coffee.bus.hospital.his.HisScriptSessionManager;
+import com.coffee.bus.hospital.his.strategy.HisStrategyEnum;
 import com.coffee.bus.mapper.BusHospitalMapper;
 import com.coffee.bus.utils.CodeUtils;
 import com.coffee.common.config.mybatis.GetNameInterface;
@@ -32,7 +33,7 @@ import java.util.Optional;
 public class LocalBusHospitalService extends BaseService<BusHospitalMapper, BusHospitalEntity,String> implements CommandLineRunner, GetNameInterface<String,String> {
     @Autowired
     @Lazy
-    private HisScriptSessionManager scriptSessionManager;
+    private HospitalManagerRegister hospitalManagerRegister;
     @Override
     public void validateBeforeSave(BusHospitalEntity entity) {
         long id = IdWorker.getId();
@@ -72,19 +73,17 @@ public class LocalBusHospitalService extends BaseService<BusHospitalMapper, BusH
 
     @Override
     public void postSave(BusHospitalEntity entity) {
-        HisScriptSession hisScriptSession = scriptSessionManager.get(entity.getId());
-        hisScriptSession.refresh(entity);
+
     }
 
     @Override
     public void postUpdate(BusHospitalEntity entity) {
-        HisScriptSession hisScriptSession = scriptSessionManager.get(entity.getId());
-        hisScriptSession.refresh(entity);
+        hospitalManagerRegister.refresh(entity.getId(),true,null!=entity.getScript());
     }
 
     @Override
     public void postDelete(String id) {
-        scriptSessionManager.unregister(id);
+
     }
 
     @Override
@@ -98,8 +97,7 @@ public class LocalBusHospitalService extends BaseService<BusHospitalMapper, BusH
         if(StrUtil.isAllBlank(id)){
             return "";
         }
-        HisScriptSession hisScriptSession = scriptSessionManager.get(id);
-        return Optional.ofNullable(hisScriptSession.getHospitalInfo()).orElse(new BusHospitalEntity()).getName();
+        return Optional.ofNullable(hospitalManagerRegister.get(id).getInfo()).orElse(new BusHospitalEntity()).getName();
     }
 
 

+ 2 - 9
coffee-system/src/main/java/com/coffee/bus/service/LocalBusPatientService.java

@@ -1,10 +1,7 @@
 package com.coffee.bus.service;
 
 import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.date.LocalDateTimeUtil;
-import cn.hutool.json.JSONObject;
-import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -15,24 +12,20 @@ import com.coffee.bus.entity.PatientDeviceRepeatDomain;
 import com.coffee.bus.enums.DeviceAlarmEnum;
 import com.coffee.bus.enums.DeviceStatusEnum;
 import com.coffee.bus.enums.PatientAlarmEnum;
-import com.coffee.bus.his.HisScriptSession;
-import com.coffee.bus.his.HisScriptSessionManager;
-import com.coffee.bus.his.strategy.HisStrategyManager;
+import com.coffee.bus.hospital.his.HisScriptSession;
+import com.coffee.bus.hospital.his.HisScriptSessionManager;
 import com.coffee.bus.service.dto.*;
 import com.coffee.bus.mapper.BusPatientMapper;
 import com.coffee.bus.registry.patient.PatientOperator;
 import com.coffee.bus.registry.patient.PatientRegistry;
 import com.coffee.bus.registry.patient.bean.PatientCacheInfo;
 import com.coffee.bus.utils.WsPublishUtils;
-import com.coffee.common.config.websocket.WebSocketConstant;
 import com.coffee.common.crud.BaseService;
 import com.coffee.common.enums.SexEnum;
 import com.coffee.common.result.R;
 import lombok.extern.slf4j.Slf4j;
-import net.bytebuddy.asm.Advice;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
-import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.context.request.async.DeferredResult;

+ 2 - 3
coffee-system/src/main/java/com/coffee/bus/websocket/HisConnectionHandler.java

@@ -5,15 +5,14 @@ import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.coffee.bus.entity.BusHospitalEntity;
-import com.coffee.bus.his.HisScriptSession;
-import com.coffee.bus.his.HisScriptSessionManager;
+import com.coffee.bus.hospital.his.HisScriptSession;
+import com.coffee.bus.hospital.his.HisScriptSessionManager;
 import com.coffee.bus.service.LocalBusHospitalService;
 import com.coffee.common.config.websocket.MessagingRequest;
 import com.coffee.common.config.websocket.WebSocketConstant;
 import com.coffee.common.config.websocket.handler.Subscribe;
 import com.coffee.common.result.R;
 import lombok.AllArgsConstructor;
-import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 import org.tio.core.ChannelContext;
 import org.tio.core.Tio;

+ 14 - 11
coffee-system/src/main/java/com/coffee/bus/websocket/listener/DeviceInfoListener.java

@@ -12,10 +12,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
-import com.coffee.bus.config.HospitalFunctionAnalConfigHandler;
-import com.coffee.bus.config.bean.FunctionAnalConfig;
 import com.coffee.bus.entity.*;
 import com.coffee.bus.enums.PatientAlarmEnum;
+import com.coffee.bus.hospital.HospitalManagerRegister;
 import com.coffee.bus.registry.device.DeviceRegistry;
 import com.coffee.bus.listener.event.bean.DeviceInfoEvent;
 import com.coffee.bus.registry.device.bean.DeviceCacheInfo;
@@ -29,13 +28,11 @@ import com.coffee.bus.utils.WsPublishUtils;
 import com.coffee.common.util.RedissonUtil;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.redisson.api.RedissonClient;
 import org.springframework.context.event.EventListener;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 import java.util.*;
 import java.util.List;
-import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
@@ -75,7 +72,7 @@ public class DeviceInfoListener {
 
     private final LocalBusDeviceService deviceService;
 
-    private final RedissonUtil redissonUtil;
+    private final HospitalManagerRegister hospitalManagerRegister;
 
 
     /**
@@ -94,7 +91,7 @@ public class DeviceInfoListener {
             /****************处理泵数据 todo 后续交由上游处理****************/
             BusDeviceRunningEntity device = infoEvent.getContent();
             device.setMonitorType(true);
-            device.setMaster(false);
+            device.setMaster(true);
             //1、判断该设备是否已和医院绑定并开启使用
             String deviceId = device.getDeviceId();
             device.setUploadTime(device.getUploadTime()==null?new Date():device.getUploadTime());
@@ -118,6 +115,8 @@ public class DeviceInfoListener {
             //处理设备运行数据,     判断是否为注册后第一次开机,判断是否为新的输注信息
             boolean first = handleRunningInfo(device, deviceOperator,cacheOperation);
 
+            //医院相关配置处理
+            handleHospitalConfig(device,cacheOperation);
 
             //处理输注参数
             handleInfusion(device, deviceOperator, cacheOperation);
@@ -143,8 +142,6 @@ public class DeviceInfoListener {
             }else {
                 deviceRunningService.updateById(device);
             }
-            //医院相关配置处理
-            handleHospitalConfig(device,cacheOperation);
 
             cacheOperation.add(()->{
                 wsPublishUtils.publishPatientMonitor(device.getPatientCode(),device.getTenantId());
@@ -283,7 +280,7 @@ public class DeviceInfoListener {
                         .set(BusPatientEntity::getAlarm, PatientAlarmEnum.DEVICE_NONE)
                 );
                 suppliers.add(()->{
-                    //todo 发起无泵报警,处理原先泵的无泵信息
+                    //发起无泵报警,处理原先泵的无泵信息
                     patientOperator.setBindDeviceId(null);
                     patientOperator.setAllDevice(new HashSet<>());
                     wsPublishUtils.publishDeviceNone(hospitalId);
@@ -410,7 +407,7 @@ public class DeviceInfoListener {
         BusInfusionModifyEntity busInfusionModify = BusInfusionModifyEntity.parseRunningInfo(device);
         String signHex = busInfusionModify.signParam(sign);
         String infusionParam = deviceOperator.getInfusionParam();
-        device.setMaster(true);
+
         //输注参数已发生变化
         if(ObjectUtil.notEqual(signHex,infusionParam)){
             infusionModifyService.save(busInfusionModify);
@@ -439,6 +436,10 @@ public class DeviceInfoListener {
                 return null;
             });
         }else {
+            String bindDeviceId = operator.getBindDeviceId();
+            if (device.getDeviceId().equals(bindDeviceId)) {
+                device.setMaster(true);
+            }
             //填充当前参数修改记录id
             BusInfusionModifyEntity modify = infusionModifyService.getOne(new QueryWrapper<BusInfusionModifyEntity>().lambda()
                     .select(BusInfusionModifyEntity::getId)
@@ -454,7 +455,9 @@ public class DeviceInfoListener {
      * @param device 设备运行数据
      */
     private void handleHospitalConfig(BusDeviceRunningEntity device,List<Supplier<?>> cacheOperation) {
-
+        hospitalManagerRegister
+                .get(device.getTenantId())
+                .handleDeviceMessage(device);
     }
 
 

+ 3 - 3
coffee-system/src/main/java/com/coffee/bus/websocket/listener/HisInfoListener.java

@@ -5,9 +5,9 @@ import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.coffee.bus.entity.BusClinicEntity;
 import com.coffee.bus.entity.BusHospitalEntity;
-import com.coffee.bus.his.strategy.HisStrategyHandler;
-import com.coffee.bus.his.strategy.HisStrategyManager;
-import com.coffee.bus.his.strategy.HisStrategyManagerRegister;
+import com.coffee.bus.hospital.his.strategy.HisStrategyHandler;
+import com.coffee.bus.hospital.his.strategy.HisStrategyManager;
+import com.coffee.bus.hospital.his.strategy.HisStrategyManagerRegister;
 import com.coffee.bus.listener.event.bean.HisEvent;
 import com.coffee.bus.service.*;
 import lombok.AllArgsConstructor;