HospitalManager.java 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. package com.coffee.bus.hospital;
  2. import cn.hutool.core.util.StrUtil;
  3. import cn.hutool.extra.spring.SpringUtil;
  4. import cn.hutool.json.JSONUtil;
  5. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  6. import com.coffee.bus.bean.Script;
  7. import com.coffee.bus.entity.BusDeviceRunningEntity;
  8. import com.coffee.bus.entity.BusHospitalConfigEntity;
  9. import com.coffee.bus.entity.BusHospitalEntity;
  10. import com.coffee.bus.entity.BusPatientEntity;
  11. import com.coffee.bus.hospital.config.HospitalAutoUndoConfigHandler;
  12. import com.coffee.bus.hospital.config.HospitalFinishMonitorConfigHandler;
  13. import com.coffee.bus.hospital.config.HospitalFunctionAnalConfigHandler;
  14. import com.coffee.bus.hospital.config.HospitalFunctionExtraConfigHandler;
  15. import com.coffee.bus.hospital.config.bean.*;
  16. import com.coffee.bus.hospital.his.HisScriptSession;
  17. import com.coffee.bus.hospital.his.strategy.HisStrategyEnum;
  18. import com.coffee.bus.registry.device.DeviceRegistry;
  19. import com.coffee.bus.registry.patient.PatientRegistry;
  20. import com.coffee.bus.hospital.script.ScriptManager;
  21. import com.coffee.bus.hospital.script.ScriptParse;
  22. import com.coffee.bus.service.*;
  23. import com.coffee.bus.service.constant.LocalBusConMixService;
  24. import com.coffee.bus.utils.WsPublishUtils;
  25. import com.coffee.common.cache.ConfigStorage;
  26. import com.coffee.common.cache.manager.ConfigStorageManager;
  27. import com.coffee.common.util.RedissonUtil;
  28. import com.fasterxml.jackson.databind.ObjectMapper;
  29. import lombok.Data;
  30. import java.util.List;
  31. import java.util.Map;
  32. import java.util.Optional;
  33. /**
  34. * @author lifang
  35. * @version 1.0.0
  36. * @ClassName HospitalManage.java
  37. * @Description 医院管理器
  38. * @createTime 2022年05月20日 08:33:00
  39. */
  40. @Data
  41. public class HospitalManager {
  42. private String hospitalId;
  43. private HisScriptSession scriptSession;
  44. private HospitalAutoUndoConfigHandler autoUndoConfigHandler;
  45. private HospitalFinishMonitorConfigHandler finishMonitorConfigHandler;
  46. private HospitalFunctionAnalConfigHandler analConfigHandler;
  47. private HospitalFunctionExtraConfigHandler extraConfigHandler;
  48. private LocalBusHospitalConfigService hospitalConfigService;
  49. private ScriptManager scriptManager;
  50. private ConfigStorage storage;
  51. private LocalBusHospitalService hospitalService;
  52. public HospitalManager(String hospitalId,
  53. DeviceRegistry deviceRegistry,
  54. WsPublishUtils wsPublishUtils,
  55. ScriptManager scriptManager,
  56. ConfigStorageManager configStorageManager,
  57. RedissonUtil redissonUtil) {
  58. this.hospitalId = hospitalId;
  59. this.hospitalService= SpringUtil.getBean(LocalBusHospitalService.class);
  60. this.hospitalConfigService = SpringUtil.getBean(LocalBusHospitalConfigService.class);
  61. this.scriptManager = scriptManager;
  62. this.storage=configStorageManager.getStorage(hospitalId);
  63. this.autoUndoConfigHandler=new HospitalAutoUndoConfigHandler(storage,hospitalId,redissonUtil,SpringUtil.getBean(LocalBusInfusionHistoryService.class),deviceRegistry,wsPublishUtils,SpringUtil.getBean(LocalBusPatientService.class));
  64. this.finishMonitorConfigHandler=new HospitalFinishMonitorConfigHandler(storage,hospitalId,redissonUtil,SpringUtil.getBean(LocalBusInfusionHistoryService.class),deviceRegistry,wsPublishUtils,SpringUtil.getBean(LocalBusPatientService.class));
  65. this.analConfigHandler=new HospitalFunctionAnalConfigHandler(storage,hospitalId,redissonUtil,SpringUtil.getBean(LocalBusInfusionHistoryService.class),deviceRegistry,wsPublishUtils,SpringUtil.getBean(LocalBusDeviceAlarmService.class));
  66. this.extraConfigHandler=new HospitalFunctionExtraConfigHandler(storage,hospitalId,redissonUtil,SpringUtil.getBean(LocalBusInfusionHistoryService.class),deviceRegistry,wsPublishUtils,finishMonitorConfigHandler,autoUndoConfigHandler,SpringUtil.getBean(LocalBusDeviceAlarmService.class),SpringUtil.getBean(LocalBusPatientService.class));
  67. init(configStorageManager);
  68. }
  69. private void init(ConfigStorageManager configStorageManager){
  70. this.scriptSession=new HisScriptSession(hospitalId,scriptManager,configStorageManager);
  71. refreshInfo();
  72. refreshConfig();
  73. refreshScript();
  74. }
  75. /**
  76. * 描述: 刷新医院信息
  77. * @author lifang
  78. * @date 2022/5/20 8:47
  79. * @param
  80. * @return void
  81. */
  82. public void refreshInfo(){
  83. BusHospitalEntity hospital = hospitalService.getById(hospitalId);
  84. storage.setConfig("info",hospital);
  85. storage.setConfig("strategy",hospital.getStrategy());
  86. }
  87. public HisStrategyEnum getStrategy(){
  88. return storage.getConfig("strategy").as(HisStrategyEnum.class);
  89. }
  90. public BusHospitalEntity getInfo(){
  91. return storage.getConfig("info").as(BusHospitalEntity.class);
  92. }
  93. /**
  94. * 描述: 刷新配置
  95. * @author lifang
  96. * @date 2022/5/20 8:47
  97. * @param
  98. * @return void
  99. */
  100. public void refreshConfig(){
  101. List<BusHospitalConfigEntity> hospitalConfig = hospitalConfigService.list(new QueryWrapper<BusHospitalConfigEntity>().lambda().eq(BusHospitalConfigEntity::getTenantId, hospitalId));
  102. //设置默认参数
  103. for (BusHospitalConfigEntity config : hospitalConfig) {
  104. Map<String, Object> param = config.getConfig();
  105. switch (config.getType()) {
  106. case undo:
  107. FunctionUndoConfig functionUndoConfig = JSONUtil.toBean(JSONUtil.toJsonStr(param), FunctionUndoConfig.class);
  108. //自动撤泵
  109. FunctionAutoUndoConfig autoUndo = functionUndoConfig.getAuto();
  110. autoUndoConfigHandler.setConfig(autoUndo);
  111. //自动结束临床管理
  112. FunctionFinishMonitorConfig finishMonitor = functionUndoConfig.getFinishMonitor();
  113. finishMonitorConfigHandler.setConfig(finishMonitor);
  114. break;
  115. case other:
  116. FunctionOtherConfig otherConfig = JSONUtil.toBean(JSONUtil.toJsonStr(param), FunctionOtherConfig.class);
  117. //镇痛不足
  118. FunctionAnalConfig anal = otherConfig.getAnal();
  119. analConfigHandler.setConfig(anal);
  120. //其他
  121. FunctionExtraConfig extraConfig = otherConfig.getOther();
  122. extraConfigHandler.setConfig(extraConfig);
  123. break;
  124. default:break;
  125. }
  126. }
  127. }
  128. /**
  129. * 描述: 对设备发来消息进行处理
  130. * @author lifang
  131. * @date 2022/5/20 8:50
  132. * @param source
  133. * @return void
  134. */
  135. public void handleDeviceMessage(BusDeviceRunningEntity source){
  136. analConfigHandler.handler(source);
  137. extraConfigHandler.handler(source);
  138. autoUndoConfigHandler.handler(source);
  139. finishMonitorConfigHandler.handler(source);
  140. }
  141. public void refreshScript(){
  142. BusHospitalEntity hospital = hospitalService.getById(hospitalId);
  143. Script script=Optional.ofNullable(hospital.getScript()).orElse(new Script());
  144. scriptManager.resetScript(hospitalId,StrUtil.isNotEmpty(script.getContent())?"python":"default",script.getContent());
  145. }
  146. }