package com.coffee.bus.hospital; import cn.hutool.core.util.StrUtil; import cn.hutool.extra.spring.SpringUtil; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.coffee.bus.bean.Script; import com.coffee.bus.entity.BusDeviceRunningEntity; import com.coffee.bus.entity.BusHospitalConfigEntity; import com.coffee.bus.entity.BusHospitalEntity; import com.coffee.bus.entity.BusPatientEntity; 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.hospital.his.strategy.HisStrategyEnum; import com.coffee.bus.registry.device.DeviceRegistry; import com.coffee.bus.registry.patient.PatientRegistry; import com.coffee.bus.hospital.script.ScriptManager; import com.coffee.bus.hospital.script.ScriptParse; import com.coffee.bus.service.*; import com.coffee.bus.service.constant.LocalBusConMixService; 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 com.fasterxml.jackson.databind.ObjectMapper; import lombok.Data; import java.util.List; import java.util.Map; import java.util.Optional; /** * @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 LocalBusHospitalConfigService hospitalConfigService; private ScriptManager scriptManager; private ConfigStorage storage; private LocalBusHospitalService hospitalService; public HospitalManager(String hospitalId, DeviceRegistry deviceRegistry, WsPublishUtils wsPublishUtils, ScriptManager scriptManager, ConfigStorageManager configStorageManager, RedissonUtil redissonUtil) { this.hospitalId = hospitalId; this.hospitalService= SpringUtil.getBean(LocalBusHospitalService.class); this.hospitalConfigService = SpringUtil.getBean(LocalBusHospitalConfigService.class); this.scriptManager = scriptManager; this.storage=configStorageManager.getStorage(hospitalId); this.autoUndoConfigHandler=new HospitalAutoUndoConfigHandler(storage,hospitalId,redissonUtil,SpringUtil.getBean(LocalBusInfusionHistoryService.class),deviceRegistry,wsPublishUtils,SpringUtil.getBean(LocalBusPatientService.class)); this.finishMonitorConfigHandler=new HospitalFinishMonitorConfigHandler(storage,hospitalId,redissonUtil,SpringUtil.getBean(LocalBusInfusionHistoryService.class),deviceRegistry,wsPublishUtils,SpringUtil.getBean(LocalBusPatientService.class)); this.analConfigHandler=new HospitalFunctionAnalConfigHandler(storage,hospitalId,redissonUtil,SpringUtil.getBean(LocalBusInfusionHistoryService.class),deviceRegistry,wsPublishUtils,SpringUtil.getBean(LocalBusDeviceAlarmService.class)); this.extraConfigHandler=new HospitalFunctionExtraConfigHandler(storage,hospitalId,redissonUtil,SpringUtil.getBean(LocalBusInfusionHistoryService.class),deviceRegistry,wsPublishUtils,finishMonitorConfigHandler,autoUndoConfigHandler,SpringUtil.getBean(LocalBusDeviceAlarmService.class),SpringUtil.getBean(LocalBusPatientService.class)); init(configStorageManager); } private void init(ConfigStorageManager configStorageManager){ this.scriptSession=new HisScriptSession(hospitalId,scriptManager,configStorageManager); 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); storage.setConfig("strategy",hospital.getStrategy()); } public HisStrategyEnum getStrategy(){ return storage.getConfig("strategy").as(HisStrategyEnum.class); } 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 hospitalConfig = hospitalConfigService.list(new QueryWrapper().lambda().eq(BusHospitalConfigEntity::getTenantId, hospitalId)); //设置默认参数 for (BusHospitalConfigEntity config : hospitalConfig) { Map 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); Script script=Optional.ofNullable(hospital.getScript()).orElse(new Script()); scriptManager.resetScript(hospitalId,StrUtil.isNotEmpty(script.getContent())?"python":"default",script.getContent()); } }