|
|
@@ -1,26 +1,26 @@
|
|
|
package com.nb.bus.hospital.config;
|
|
|
|
|
|
|
|
|
-import com.nb.bus.entity.BusInfusionHistoryEntity;
|
|
|
-import com.nb.bus.entity.BusPatientEntity;
|
|
|
+import cn.hutool.extra.spring.SpringUtil;
|
|
|
import com.nb.bus.hospital.config.bean.FunctionFinishMonitorConfig;
|
|
|
import com.nb.bus.entity.BusDeviceRunningEntity;
|
|
|
import com.nb.bus.enums.DeviceStatusEnum;
|
|
|
+import com.nb.bus.hospital.config.handler.HandlerConstant;
|
|
|
import com.nb.bus.hospital.enums.ConfigHandlerEnums;
|
|
|
import com.nb.bus.registry.device.DeviceRegistry;
|
|
|
import com.nb.bus.service.LocalBusInfusionHistoryService;
|
|
|
-import com.nb.bus.service.LocalBusPatientService;
|
|
|
-import com.nb.bus.service.dto.ManualUndoConfig;
|
|
|
import com.nb.bus.service.dto.UndoDeviceConfig;
|
|
|
import com.nb.bus.utils.WsPublishUtils;
|
|
|
import com.nb.common.cache.ConfigStorage;
|
|
|
-import com.nb.common.entity.AbstractMsgId;
|
|
|
-import com.nb.common.util.RedissonUtil;
|
|
|
+import com.nb.common.cache.value.Value;
|
|
|
+import com.nb.common.delay_queue.manager.DelayMessageManager;
|
|
|
+import com.nb.common.delay_queue.message.DelayMessage;
|
|
|
+import com.nb.common.delay_queue.message.DelayMessageProperties;
|
|
|
import lombok.Builder;
|
|
|
import lombok.Data;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
-import org.redisson.api.RDelayedQueue;
|
|
|
-import java.util.Collections;
|
|
|
+
|
|
|
+import java.io.Serializable;
|
|
|
import java.util.Date;
|
|
|
import java.util.Objects;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
@@ -35,13 +35,11 @@ import java.util.concurrent.TimeUnit;
|
|
|
@Slf4j
|
|
|
public class HospitalFinishMonitorConfigHandler extends AbstractHospitalConfigHandler<FunctionFinishMonitorConfig, BusDeviceRunningEntity>{
|
|
|
|
|
|
-
|
|
|
- private FinishMonitorEntity lastShutDownFinish;
|
|
|
- private FinishMonitorEntity lastNoSignalFinish;
|
|
|
- private LocalBusPatientService patientService;
|
|
|
- public HospitalFinishMonitorConfigHandler(ConfigStorage configStorage, String hospitalId, RedissonUtil redissonUtil,LocalBusInfusionHistoryService infusionHistoryService, DeviceRegistry deviceRegistry, WsPublishUtils wsPublishUtils, LocalBusPatientService patientService) {
|
|
|
- super(configStorage, hospitalId, redissonUtil, infusionHistoryService, deviceRegistry, wsPublishUtils);
|
|
|
- this.patientService=patientService;
|
|
|
+ private DelayMessage lastShutDownFinish;
|
|
|
+ private DelayMessage lastNoSignalFinish;
|
|
|
+ private DelayMessageManager delayMessageManager= SpringUtil.getBean(DelayMessageManager.class);
|
|
|
+ public HospitalFinishMonitorConfigHandler(ConfigStorage configStorage, String hospitalId) {
|
|
|
+ super(configStorage, hospitalId);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -64,12 +62,7 @@ public class HospitalFinishMonitorConfigHandler extends AbstractHospitalConfigHa
|
|
|
judgeShutdownAutoFinish(source,config);
|
|
|
|
|
|
if(lastNoSignalFinish !=null){
|
|
|
- RDelayedQueue<AbstractMsgId> noSignalFinishDelay = redissonUtil.getDelayedQueue(getId() +"-noSignalFinish", e -> {
|
|
|
- if(e instanceof FinishMonitorEntity){
|
|
|
- this.handleFinishMonitor((FinishMonitorEntity) e);
|
|
|
- }
|
|
|
- });
|
|
|
- noSignalFinishDelay.remove(lastNoSignalFinish);
|
|
|
+ delayMessageManager.remove(lastNoSignalFinish);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -90,27 +83,21 @@ public class HospitalFinishMonitorConfigHandler extends AbstractHospitalConfigHa
|
|
|
if(config==null||!Boolean.TRUE.equals(config.isEnable())|| Objects.isNull(config.getNoSignalInterval())){
|
|
|
return;
|
|
|
}
|
|
|
- RDelayedQueue<AbstractMsgId> noSignalFinishDelay = redissonUtil.getDelayedQueue(getId() +"-noSignalFinish", e -> {
|
|
|
- if(e instanceof FinishMonitorEntity){
|
|
|
- this.handleFinishMonitor((FinishMonitorEntity) e);
|
|
|
- }
|
|
|
- });
|
|
|
+
|
|
|
UndoDeviceConfig undoDeviceConfig = new UndoDeviceConfig();
|
|
|
undoDeviceConfig.setUndoBy(config.getUndoBy());
|
|
|
- lastNoSignalFinish = FinishMonitorEntity.builder()
|
|
|
+ FinishMonitorEntity body = FinishMonitorEntity.builder()
|
|
|
.deviceId(device)
|
|
|
- .patientCode(patientCode)
|
|
|
.config(undoDeviceConfig)
|
|
|
.infusionId(infusionId)
|
|
|
.patientId(patientId)
|
|
|
- .timeout(config.getNoSignalInterval())
|
|
|
.uploadTime(uploadTime)
|
|
|
- .unit(TimeUnit.DAYS)
|
|
|
.tenantId(tenantId)
|
|
|
.timestamp(new Date())
|
|
|
.build();
|
|
|
|
|
|
- redissonUtil.offerQueue(noSignalFinishDelay, lastNoSignalFinish, lastNoSignalFinish.getTimeout(), lastNoSignalFinish.getUnit());
|
|
|
+ lastNoSignalFinish = new DelayMessage(Value.simple(body), HandlerConstant.CLINIC_AUTO_FINISH, DelayMessageProperties.of(TimeUnit.DAYS, config.getNoSignalInterval()));
|
|
|
+ delayMessageManager.add(lastNoSignalFinish);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -122,74 +109,35 @@ public class HospitalFinishMonitorConfigHandler extends AbstractHospitalConfigHa
|
|
|
* @return void
|
|
|
*/
|
|
|
private void judgeShutdownAutoFinish(BusDeviceRunningEntity source, FunctionFinishMonitorConfig config){
|
|
|
- RDelayedQueue<AbstractMsgId> shutdownFinishDelay = redissonUtil.getDelayedQueue(getId() +"-ShutdownFinish", e -> {
|
|
|
- if(e instanceof FinishMonitorEntity){
|
|
|
- this.handleFinishMonitor((FinishMonitorEntity) e);
|
|
|
- }
|
|
|
- });
|
|
|
UndoDeviceConfig undoDeviceConfig = new UndoDeviceConfig();
|
|
|
undoDeviceConfig.setUndoBy(config.getUndoBy());
|
|
|
//删除延迟队列消息
|
|
|
if(lastShutDownFinish!=null){
|
|
|
- shutdownFinishDelay.remove(lastShutDownFinish);
|
|
|
+ delayMessageManager.remove(lastShutDownFinish);
|
|
|
}
|
|
|
+
|
|
|
if(DeviceStatusEnum.Shutdown.equals(source.getRunState())){
|
|
|
- lastShutDownFinish = FinishMonitorEntity.builder()
|
|
|
+ FinishMonitorEntity body = FinishMonitorEntity.builder()
|
|
|
.deviceId(source.getDeviceId())
|
|
|
- .patientCode(source.getPatientCode())
|
|
|
.patientId(source.getPatientId())
|
|
|
.config(undoDeviceConfig)
|
|
|
- .timeout(config.getShutDownInterval())
|
|
|
.uploadTime(source.getUploadTime())
|
|
|
- .unit(TimeUnit.DAYS)
|
|
|
.tenantId(source.getTenantId())
|
|
|
.timestamp(new Date())
|
|
|
.build();
|
|
|
- redissonUtil.offerQueue(shutdownFinishDelay,lastShutDownFinish,config.getShutDownInterval(),lastShutDownFinish.getUnit());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 描述: 自动结束管理处理
|
|
|
- * @author lifang
|
|
|
- * @date 2022/5/19 22:35
|
|
|
- * @param source
|
|
|
- * @return void
|
|
|
- */
|
|
|
- private void handleFinishMonitor(FinishMonitorEntity source){
|
|
|
- log.info("延迟任务【{}】,结束临床管理【{}】",source.getId(),source);
|
|
|
- //判断是否为主输注,只有主输注才可结束临床
|
|
|
- String patientId = source.getPatientId();
|
|
|
- BusPatientEntity patient = patientService.getById(patientId);
|
|
|
- if (source.getInfusionId().equals(patient.getInfusionId())) {
|
|
|
- BusInfusionHistoryEntity infusionHistory = infusionHistoryService.getById(patient.getInfusionId());
|
|
|
- Date uploadTime = source.getUploadTime();
|
|
|
- if (infusionHistory.getLastUploadTime().equals(uploadTime)) {
|
|
|
- UndoDeviceConfig config = source.getConfig();
|
|
|
- ManualUndoConfig manualUndoConfig = new ManualUndoConfig();
|
|
|
- config.setUndoTime(new Date());
|
|
|
- manualUndoConfig.setTenantId(source.getTenantId());
|
|
|
- manualUndoConfig.setUndo(config);
|
|
|
- manualUndoConfig.setMonitorType(true);
|
|
|
- manualUndoConfig.setClinicId(patient.getClinicId());
|
|
|
- manualUndoConfig.setPatientCode(source.getPatientCode());
|
|
|
- manualUndoConfig.setInfusionIds(Collections.singletonList(source.getInfusionId()));
|
|
|
- infusionHistoryService.undo(manualUndoConfig,true);
|
|
|
- }
|
|
|
+ lastShutDownFinish = new DelayMessage(Value.simple(body), HandlerConstant.CLINIC_AUTO_FINISH, DelayMessageProperties.of(TimeUnit.DAYS, config.getShutDownInterval()));
|
|
|
+ delayMessageManager.add(lastShutDownFinish);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Data
|
|
|
@Builder
|
|
|
- static class FinishMonitorEntity extends AbstractMsgId {
|
|
|
+ public static class FinishMonitorEntity implements Serializable {
|
|
|
private String deviceId;
|
|
|
private String patientId;
|
|
|
- private String patientCode;
|
|
|
private UndoDeviceConfig config;
|
|
|
private String clinicId;
|
|
|
private String infusionId;
|
|
|
- private Integer timeout;
|
|
|
- private TimeUnit unit;
|
|
|
private String tenantId;
|
|
|
private Date uploadTime;
|
|
|
private Date timestamp;
|