|
|
@@ -0,0 +1,189 @@
|
|
|
+package com.nb.web.service.bus.job;
|
|
|
+
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.collection.CollectionUtil;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
+import cn.hutool.extra.spring.SpringUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.nb.common.queue.delay.manager.DelayMessageManager;
|
|
|
+import com.nb.common.queue.delay.message.DelayMessage;
|
|
|
+import com.nb.common.queue.delay.message.DelayMessageProperties;
|
|
|
+import com.nb.core.Value;
|
|
|
+import com.nb.web.api.bean.UndoDeviceConfig;
|
|
|
+import com.nb.web.api.entity.BusHospitalConfigEntity;
|
|
|
+import com.nb.web.api.entity.common.BusDeviceRunningEntity;
|
|
|
+import com.nb.web.api.enums.DeviceStatusEnum;
|
|
|
+import com.nb.web.api.feign.query.PatientMonitorQuery;
|
|
|
+import com.nb.web.api.feign.result.PatientMonitorResult;
|
|
|
+import com.nb.web.service.bus.entity.BusHospitalEntity;
|
|
|
+import com.nb.web.service.bus.hospital.HospitalManager;
|
|
|
+import com.nb.web.service.bus.hospital.HospitalManagerRegister;
|
|
|
+import com.nb.web.service.bus.hospital.config.HospitalDeviceAutoUndoConfigHandler;
|
|
|
+import com.nb.web.service.bus.hospital.config.HospitalFinishMonitorConfigHandler;
|
|
|
+import com.nb.web.service.bus.hospital.config.HospitalFunctionExtraConfigHandler;
|
|
|
+import com.nb.web.service.bus.hospital.config.bean.FunctionAutoUndoConfig;
|
|
|
+import com.nb.web.service.bus.hospital.config.bean.FunctionExtraConfig;
|
|
|
+import com.nb.web.service.bus.hospital.config.bean.FunctionFinishMonitorConfig;
|
|
|
+import com.nb.web.service.bus.hospital.config.handler.ClinicAutoFinishMonitorHandler;
|
|
|
+import com.nb.web.service.bus.hospital.config.handler.DeputyDeviceAutoUndoHandler;
|
|
|
+import com.nb.web.service.bus.hospital.config.handler.HandlerConstant;
|
|
|
+import com.nb.web.service.bus.hospital.config.handler.NoSignalHandler;
|
|
|
+import com.nb.web.service.bus.mapper.BusHospitalMapper;
|
|
|
+import com.nb.web.service.bus.service.LocalBusPatientService;
|
|
|
+import lombok.AllArgsConstructor;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.scheduling.annotation.Scheduled;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Objects;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @ClassName : DeviceOfflineJob
|
|
|
+ * @Description :
|
|
|
+ * @Author : LF
|
|
|
+ * @Date: 2024年10月23日
|
|
|
+ */
|
|
|
+@Component
|
|
|
+@AllArgsConstructor
|
|
|
+public class HospitalConfigJob {
|
|
|
+ @Autowired
|
|
|
+ private BusHospitalMapper hospitalMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private LocalBusPatientService patientService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private HospitalManagerRegister hospitalManagerRegister;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ClinicAutoFinishMonitorHandler clinicAutoFinishMonitorHandler;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private NoSignalHandler noSignalHandler;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private DeputyDeviceAutoUndoHandler deputyDeviceAutoUndoHandler;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 描述: 每天早上9点定时对医院的配置参数进行补偿处理
|
|
|
+ * @author lifang
|
|
|
+ * @date 2022/7/29 9:03
|
|
|
+ * @param
|
|
|
+ * @return void
|
|
|
+ */
|
|
|
+ @Scheduled(cron = "0 0 1 * * ?")
|
|
|
+ public void execute() {
|
|
|
+ List<BusHospitalEntity> hospitalList = hospitalMapper.selectList(new LambdaQueryWrapper<>());
|
|
|
+ for (BusHospitalEntity hospital : hospitalList) {
|
|
|
+ PatientMonitorQuery query = new PatientMonitorQuery();
|
|
|
+ query.setTenantId(hospital.getId());
|
|
|
+ List<PatientMonitorResult> patientMonitorResults = patientService.selectAll(query);
|
|
|
+ if (CollectionUtil.isEmpty(patientMonitorResults)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ HospitalManager hospitalManager = hospitalManagerRegister.get(hospital.getId());
|
|
|
+ patientMonitorResults
|
|
|
+ .forEach(infusionInfo -> {
|
|
|
+ BusDeviceRunningEntity source = BeanUtil.toBean(infusionInfo, BusDeviceRunningEntity.class);
|
|
|
+ source.setRunState(infusionInfo.getDeviceRunState());
|
|
|
+ source.setAlarm(infusionInfo.getDeviceAlarm());
|
|
|
+ source.setInfusionId(infusionInfo.getInfusionId());
|
|
|
+ source.setUploadTime(infusionInfo.getLastUploadTime());
|
|
|
+ source.setTenantId(hospital.getId());
|
|
|
+
|
|
|
+ FunctionExtraConfig extraConfig = hospitalManager.getExtraConfigHandler().getConfig().as(FunctionExtraConfig.class);
|
|
|
+ extraHandle(source,extraConfig);
|
|
|
+
|
|
|
+ FunctionAutoUndoConfig autoUndoConfig = hospitalManager.getAutoUndoConfigHandler().getConfig().as(FunctionAutoUndoConfig.class);
|
|
|
+ shutdownAutoUndo(source,autoUndoConfig);
|
|
|
+
|
|
|
+ FunctionFinishMonitorConfig config = hospitalManager.getFinishMonitorConfigHandler().getConfig().as(FunctionFinishMonitorConfig.class);
|
|
|
+ shutDownAutoFinish(source,config);
|
|
|
+ judgeNoSignalAutoFinish(source,config);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void extraHandle(BusDeviceRunningEntity source, FunctionExtraConfig extraConfig) {
|
|
|
+ if(ObjectUtil.isNull(extraConfig)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ HospitalFunctionExtraConfigHandler.NoSignalEntity lastNoSignalWarn = HospitalFunctionExtraConfigHandler.NoSignalEntity.builder()
|
|
|
+ .deviceId(source.getDeviceId())
|
|
|
+ .patientId(source.getPatientId())
|
|
|
+ .tenantId(source.getTenantId())
|
|
|
+ .timestamp(new Date())
|
|
|
+ .historyId(source.getHistoryId())
|
|
|
+ .infusionId(source.getInfusionId())
|
|
|
+ .uploadTime(source.getUploadTime())
|
|
|
+ .build();
|
|
|
+ DelayMessage delayMessage = new DelayMessage(Value.simple(lastNoSignalWarn), HandlerConstant.NO_SIGNAL, DelayMessageProperties.of(TimeUnit.MINUTES, extraConfig.getNoSignal()));
|
|
|
+ noSignalHandler.handle(delayMessage);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void shutdownAutoUndo(BusDeviceRunningEntity source, FunctionAutoUndoConfig config) {
|
|
|
+ if(ObjectUtil.isNull(config)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ UndoDeviceConfig undoDeviceConfig = new UndoDeviceConfig();
|
|
|
+ undoDeviceConfig.setUndoBy(config.getUndoBy());
|
|
|
+ if (DeviceStatusEnum.Shutdown.equals(source.getRunState())) {
|
|
|
+ HospitalDeviceAutoUndoConfigHandler.UndoEntity undo = HospitalDeviceAutoUndoConfigHandler.UndoEntity.builder()
|
|
|
+ .deviceId(source.getDeviceId())
|
|
|
+ .patientId(source.getPatientId())
|
|
|
+ .config(undoDeviceConfig)
|
|
|
+ .clinicId(source.getClinicId())
|
|
|
+ .infusionId(source.getInfusionId())
|
|
|
+ .tenantId(source.getTenantId())
|
|
|
+ .uploadTime(source.getUploadTime())
|
|
|
+ .timestamp(new Date())
|
|
|
+ .build();
|
|
|
+ DelayMessage lastShutDownDelayMessage = new DelayMessage(Value.simple(undo), HandlerConstant.DEVICE_AUTO_UNDO, DelayMessageProperties.of(TimeUnit.MINUTES, config.getShutDownInterval()));
|
|
|
+ deputyDeviceAutoUndoHandler.handle(lastShutDownDelayMessage);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private void shutDownAutoFinish(BusDeviceRunningEntity source, FunctionFinishMonitorConfig config){
|
|
|
+ if(ObjectUtil.isNull(config)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ UndoDeviceConfig undoDeviceConfig = new UndoDeviceConfig();
|
|
|
+ undoDeviceConfig.setUndoBy(config.getUndoBy());
|
|
|
+
|
|
|
+ if(DeviceStatusEnum.Shutdown.equals(source.getRunState())||Boolean.TRUE.equals(source.getFinished())){
|
|
|
+ HospitalFinishMonitorConfigHandler.FinishMonitorEntity body = HospitalFinishMonitorConfigHandler.FinishMonitorEntity.builder()
|
|
|
+ .deviceId(source.getDeviceId())
|
|
|
+ .patientId(source.getPatientId())
|
|
|
+ .config(undoDeviceConfig)
|
|
|
+ .uploadTime(source.getUploadTime())
|
|
|
+ .infusionId(source.getInfusionId())
|
|
|
+ .tenantId(source.getTenantId())
|
|
|
+ .timestamp(new Date())
|
|
|
+ .build();
|
|
|
+ DelayMessage lastShutDownFinish = new DelayMessage(Value.simple(body), HandlerConstant.CLINIC_AUTO_FINISH, DelayMessageProperties.of(TimeUnit.DAYS, config.getShutDownInterval()));
|
|
|
+ clinicAutoFinishMonitorHandler.handle(lastShutDownFinish);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void judgeNoSignalAutoFinish(BusDeviceRunningEntity source, FunctionFinishMonitorConfig config){
|
|
|
+ if(config==null||!Boolean.TRUE.equals(config.isEnable())|| Objects.isNull(config.getNoSignalInterval())){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ UndoDeviceConfig undoDeviceConfig = new UndoDeviceConfig();
|
|
|
+ undoDeviceConfig.setUndoBy(config.getUndoBy());
|
|
|
+ HospitalFinishMonitorConfigHandler.FinishMonitorEntity body = HospitalFinishMonitorConfigHandler.FinishMonitorEntity.builder()
|
|
|
+ .deviceId(source.getDeviceId())
|
|
|
+ .config(undoDeviceConfig)
|
|
|
+ .infusionId(source.getInfusionId())
|
|
|
+ .patientId(source.getPatientId())
|
|
|
+ .uploadTime(source.getUploadTime())
|
|
|
+ .tenantId(source.getTenantId())
|
|
|
+ .timestamp(new Date())
|
|
|
+ .build();
|
|
|
+ DelayMessage lastNoSignalFinish = new DelayMessage(Value.simple(body), HandlerConstant.CLINIC_AUTO_FINISH, DelayMessageProperties.of(TimeUnit.DAYS, config.getNoSignalInterval()));
|
|
|
+ clinicAutoFinishMonitorHandler.handle(lastNoSignalFinish);
|
|
|
+ }
|
|
|
+}
|