A17404李放 3 vuotta sitten
vanhempi
commit
5e9aa56b10
38 muutettua tiedostoa jossa 316 lisäystä ja 162 poistoa
  1. 19 11
      nb-admin/src/test/java/com/coffee/admin/BusDeviceAlarmTest.java
  2. 35 0
      nb-admin/src/test/java/com/coffee/admin/BusPatientTest.java
  3. 6 4
      nb-common/src/main/java/com/coffee/common/config/CacheHttpServletRequestWrapper.java
  4. 0 1
      nb-common/src/main/java/com/coffee/common/config/CachingContentFilter.java
  5. 1 1
      nb-framework/src/main/java/com/coffee/framework/web/service/impl/UserServiceImpl.java
  6. 9 7
      nb-system/src/main/java/com/coffee/bus/controller/BusPatientController.java
  7. 6 19
      nb-system/src/main/java/com/coffee/bus/entity/BusDeviceAlarmEntity.java
  8. 4 0
      nb-system/src/main/java/com/coffee/bus/entity/BusEvaluationEntity.java
  9. 0 2
      nb-system/src/main/java/com/coffee/bus/entity/BusPatientEntity.java
  10. 1 1
      nb-system/src/main/java/com/coffee/bus/enums/DeviceAlarmEnum.java
  11. 7 4
      nb-system/src/main/java/com/coffee/bus/hospital/config/HospitalFinishMonitorConfigHandler.java
  12. 1 3
      nb-system/src/main/java/com/coffee/bus/hospital/config/HospitalFunctionAnalConfigHandler.java
  13. 4 4
      nb-system/src/main/java/com/coffee/bus/hospital/config/HospitalFunctionExtraConfigHandler.java
  14. 1 1
      nb-system/src/main/java/com/coffee/bus/hospital/his/strategy/all/EqualsStrategyHandler.java
  15. 1 1
      nb-system/src/main/java/com/coffee/bus/mapper/BusPatientMapper.java
  16. 1 1
      nb-system/src/main/java/com/coffee/bus/registry/constant/DeviceKeyConstant.java
  17. 13 1
      nb-system/src/main/java/com/coffee/bus/registry/device/ClusterDeviceOperator.java
  18. 1 0
      nb-system/src/main/java/com/coffee/bus/registry/device/ClusterDeviceRegistry.java
  19. 16 0
      nb-system/src/main/java/com/coffee/bus/registry/device/DeviceOperator.java
  20. 2 2
      nb-system/src/main/java/com/coffee/bus/registry/patient/ClusterPatientRegistry.java
  21. 9 0
      nb-system/src/main/java/com/coffee/bus/registry/patient/PatientRegistry.java
  22. 2 2
      nb-system/src/main/java/com/coffee/bus/service/LocalBusClinicService.java
  23. 2 2
      nb-system/src/main/java/com/coffee/bus/service/LocalBusEvaluationService.java
  24. 9 0
      nb-system/src/main/java/com/coffee/bus/service/LocalBusHospitalConfigService.java
  25. 32 26
      nb-system/src/main/java/com/coffee/bus/service/LocalBusPatientService.java
  26. 4 1
      nb-system/src/main/java/com/coffee/bus/service/dto/ClinicResult.java
  27. 7 2
      nb-system/src/main/java/com/coffee/bus/service/dto/DeviceShiftConfig.java
  28. 1 0
      nb-system/src/main/java/com/coffee/bus/service/dto/ManualUndoConfig.java
  29. 4 1
      nb-system/src/main/java/com/coffee/bus/service/dto/PatientMonitorResult.java
  30. 3 3
      nb-system/src/main/java/com/coffee/bus/stats/analyse/AlarmStatsAnalyse.java
  31. 1 1
      nb-system/src/main/java/com/coffee/bus/stats/entity/AlarmScatter.java
  32. 1 1
      nb-system/src/main/java/com/coffee/bus/stats/entity/AlarmTotalPieResult.java
  33. 6 6
      nb-system/src/main/java/com/coffee/bus/utils/WsPublishUtils.java
  34. 57 16
      nb-system/src/main/java/com/coffee/bus/websocket/listener/DeviceInfoListener.java
  35. 11 6
      nb-system/src/main/resources/mapper/bus/BusClinicMapper.xml
  36. 24 24
      nb-system/src/main/resources/mapper/bus/BusDeviceAlarmMapper.xml
  37. 7 4
      nb-system/src/main/resources/mapper/bus/BusInfusionHistoryMapper.xml
  38. 8 4
      nb-system/src/main/resources/mapper/bus/BusPatientMapper.xml

+ 19 - 11
nb-admin/src/test/java/com/coffee/admin/BusDeviceAlarmTest.java

@@ -4,11 +4,13 @@ import com.coffee.bus.controller.BusDeviceController;
 import com.coffee.bus.controller.BusDeviceHistoryController;
 import com.coffee.bus.entity.BusDeviceAlarmEntity;
 import com.coffee.bus.entity.BusDeviceEntity;
+import com.coffee.bus.entity.BusInfusionHistoryEntity;
 import com.coffee.bus.enums.DeviceAlarmEnum;
 import com.coffee.bus.enums.DeviceStatusEnum;
 import com.coffee.bus.enums.FlowStatusEnum;
 import com.coffee.bus.mapper.BusDeviceAlarmMapper;
 import com.coffee.bus.service.LocalBusDeviceAlarmService;
+import com.coffee.bus.service.LocalBusInfusionHistoryService;
 import com.coffee.bus.service.dto.DeviceAlarmQuery;
 import lombok.extern.slf4j.Slf4j;
 import org.junit.Test;
@@ -19,7 +21,9 @@ import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 
 /**
  * @author zsl
@@ -40,8 +44,8 @@ public class BusDeviceAlarmTest {
     LocalBusDeviceAlarmService service;
     @Autowired
     BusDeviceHistoryController controller;
-
-
+    @Autowired
+    LocalBusInfusionHistoryService infusionHistoryService;
     @Test
     public void test001(){
         DeviceAlarmQuery query = new DeviceAlarmQuery();
@@ -58,7 +62,7 @@ public class BusDeviceAlarmTest {
     public void test003(){
         DeviceAlarmQuery query = new DeviceAlarmQuery();
         query.setHositalName("驼人医疗器械有限公司");
-     //   query.setTenantId("1");
+        //   query.setTenantId("1");
         System.out.println(controller.deviceUse("1",query));
     }
 
@@ -86,13 +90,17 @@ public class BusDeviceAlarmTest {
     }
     @Test
     public void test006(){
-
-        BusDeviceAlarmEntity busDeviceAlarmEntity = new BusDeviceAlarmEntity();
-//        busDeviceAlarmEntity.setAlarm(Boolean.TRUE);
-        // busDeviceAlarmEntity.setAlarmState(DeviceAlarmEnum.Bubble);
-        //busDeviceAlarmEntity.setWarnAnalgesicPoor(1==1);
-        //busDeviceAlarmEntity.setRunState(DeviceStatusEnum.NoSignal);
-        //busDeviceAlarmEntity.setWarnFlow(FlowStatusEnum.Lowest);
-        System.out.println(controller.deviceUseDetail("1",busDeviceAlarmEntity));
+        ArrayList<BusDeviceAlarmEntity> objects = new ArrayList<>();
+        List<BusDeviceAlarmEntity> list = service.list();
+        for (BusDeviceAlarmEntity deviceAlarmEntity : list) {
+            BusInfusionHistoryEntity byId = infusionHistoryService.getById(deviceAlarmEntity.getInfusionId());
+            if(byId==null){
+                service.removeById(deviceAlarmEntity);
+                continue;
+            }
+            objects.add(deviceAlarmEntity);
+            deviceAlarmEntity.setDeviceType(byId.getType());
+        }
+        service.updateBatchById(objects);
     }
 }

+ 35 - 0
nb-admin/src/test/java/com/coffee/admin/BusPatientTest.java

@@ -9,10 +9,12 @@ import com.coffee.bus.controller.BusDeviceManualController;
 import com.coffee.bus.controller.vo.ClinicEditVo;
 import com.coffee.bus.entity.BusClinicEntity;
 import com.coffee.bus.entity.BusDeviceManualEntity;
+import com.coffee.bus.entity.BusInfusionHistoryEntity;
 import com.coffee.bus.entity.BusPatientEntity;
 import com.coffee.bus.enums.DeviceManualEnum;
 import com.coffee.bus.hospital.his.strategy.all.EqualsStrategyHandler;
 import com.coffee.bus.service.LocalBusClinicService;
+import com.coffee.bus.service.LocalBusInfusionHistoryService;
 import com.coffee.bus.service.LocalBusPatientService;
 import com.coffee.bus.service.dto.PatientDeviceRepeatResult;
 import com.coffee.common.enums.SexEnum;
@@ -43,6 +45,9 @@ public class BusPatientTest {
     @Autowired
     private LocalBusClinicService clinicService;
 
+    @Autowired
+    private LocalBusInfusionHistoryService infusionHistoryService;
+
     @Autowired
     private EqualsStrategyHandler equalsStrategyHandler;
     @Autowired
@@ -162,6 +167,36 @@ public class BusPatientTest {
         }
     }
 
+    @Test
+    public void updateClinicPatientId(){
+        List<BusClinicEntity> list = clinicService.list();
+        for (BusClinicEntity clinicEntity : list) {
+            BusPatientEntity patientEntity = patientService.getOne(new QueryWrapper<BusPatientEntity>()
+                    .lambda().eq(BusPatientEntity::getCode, clinicEntity.getPatientCode())
+                    .eq(BusPatientEntity::getTenantId, clinicEntity.getTenantId()));
+            if(patientEntity==null){
+                continue;
+            }
+            clinicEntity.setPatientId(patientEntity.getId());
+        }
+        clinicService.updateBatchById(list);
+    }
+
+    @Test
+    public void updateInfusionPatientId(){
+        List<BusInfusionHistoryEntity> list = infusionHistoryService.list();
+        for (BusInfusionHistoryEntity infusionHistoryEntity : list) {
+            BusPatientEntity patientEntity = patientService.getOne(new QueryWrapper<BusPatientEntity>()
+                    .lambda().eq(BusPatientEntity::getCode, infusionHistoryEntity.getPatientCode())
+                    .eq(BusPatientEntity::getTenantId, infusionHistoryEntity.getTenantId()));
+            if(patientEntity==null){
+                continue;
+            }
+            infusionHistoryEntity.setPatientId(patientEntity.getId());
+        }
+        infusionHistoryService.updateBatchById(list);
+    }
+
     public static void main(String[] args) {
         System.out.println(getName());
     }

+ 6 - 4
nb-common/src/main/java/com/coffee/common/config/CacheHttpServletRequestWrapper.java

@@ -1,5 +1,6 @@
 package com.coffee.common.config;
 
+import cn.hutool.core.bean.BeanUtil;
 import org.springframework.util.StreamUtils;
 
 import javax.servlet.ReadListener;
@@ -21,6 +22,7 @@ public class CacheHttpServletRequestWrapper extends HttpServletRequestWrapper {
     public CacheHttpServletRequestWrapper(HttpServletRequest request) throws IOException {
         super(request);
         this.bodyString = StreamUtils.copyToString(request.getInputStream(), Charset.defaultCharset());
+
         body = bodyString.getBytes(Charset.defaultCharset());
     }
 
@@ -73,8 +75,8 @@ public class CacheHttpServletRequestWrapper extends HttpServletRequestWrapper {
             }
         };
     }
-//    @Override
-//    public Collection<Part> getParts() throws IOException, ServletException {
-//        return this._getHttpServletRequest().getParts();
-//    }
+    @Override
+    public Collection<Part> getParts() throws IOException, ServletException {
+        return ((HttpServletRequest)super.getRequest()).getParts();
+    }
 }

+ 0 - 1
nb-common/src/main/java/com/coffee/common/config/CachingContentFilter.java

@@ -30,7 +30,6 @@ public class CachingContentFilter implements Filter {
 
         HttpServletRequest requestWrapper = new CacheHttpServletRequestWrapper((HttpServletRequest) servletRequest);
         chain.doFilter(requestWrapper, servletResponse);
-
     }
 
     @Override

+ 1 - 1
nb-framework/src/main/java/com/coffee/framework/web/service/impl/UserServiceImpl.java

@@ -86,7 +86,7 @@ public class UserServiceImpl implements IUserService {
                 String requestFrom = request.getHeader("RequestFrom");
                 //来自app的请求不需要验证码
                 if(!"TuoRenApp".equals(requestFrom)){
-//                    captchaTool.ver(req.getCodeKey(),req.getCode());
+                    captchaTool.ver(req.getCodeKey(),req.getCode());
                 }
             }
             sysUser = sysUserService.getOne(Wrappers.lambdaQuery(SysUser.class).eq(SysUser::getAccount, req.getUsername()));

+ 9 - 7
nb-system/src/main/java/com/coffee/bus/controller/BusPatientController.java

@@ -24,7 +24,6 @@ import com.coffee.common.crud.BaseService;
 import com.coffee.common.crud.controller.BaseQueryController;
 import com.coffee.common.exception.CustomException;
 import com.coffee.common.result.R;
-import io.netty.channel.EventLoopGroup;
 import io.swagger.annotations.*;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -187,7 +186,7 @@ public class BusPatientController  implements BaseQueryController<BusPatientEnti
         R<Boolean> result = R.success(clinicService.update(new UpdateWrapper<BusClinicEntity>().lambda().eq(BusClinicEntity::getId, clinicId)
                 .set(BusClinicEntity::getEndTime, null)));
         BusClinicEntity clinic = clinicService.getById(clinicId);
-        wsPublishUtils.publishPatientMonitor(clinic.getPatientCode(),clinic.getTenantId());
+        wsPublishUtils.publishPatientMonitor(clinic.getPatientId(),clinic.getTenantId());
         return result;
     }
 
@@ -209,7 +208,7 @@ public class BusPatientController  implements BaseQueryController<BusPatientEnti
     public R shift(@RequestBody@Validated DeviceShiftConfig shiftConfig){
         log.info("主泵切换的操作,【{}】",JSONUtil.toJsonStr(shiftConfig));
         patientService.shift(shiftConfig);
-        wsPublishUtils.publishPatientMonitor(shiftConfig.getPatientCode(),shiftConfig.getTenantId());
+        wsPublishUtils.publishPatientMonitor(shiftConfig.getPatientId(),shiftConfig.getTenantId());
         return R.success();
     }
 
@@ -219,6 +218,10 @@ public class BusPatientController  implements BaseQueryController<BusPatientEnti
     public R shift(@RequestBody@Validated ManualUndoConfig undoConfig, @RequestAttribute("tenantId")@ApiParam(hidden = true) String tenantId){
         log.info("批量撤泵,【{}】",JSONUtil.toJsonStr(undoConfig));
         undoConfig.setTenantId(tenantId);
+        BusPatientEntity patient = patientService.findByFormatCode( undoConfig.getPatientCode());
+        if(patient==null){
+            throw new CustomException(String.format("病号【%s】不存在,请刷新后重试",undoConfig.getPatientCode()));
+        }
         //泵切换完成后,对病号报警解除
         infusionService.undo(undoConfig,false);
         PatientOperator operator = patientRegistry.getOperator(undoConfig.getTenantId(), undoConfig.getPatientCode());
@@ -230,12 +233,11 @@ public class BusPatientController  implements BaseQueryController<BusPatientEnti
         //处理缓存信息
         if(count==1){
             patientService.update(new UpdateWrapper<BusPatientEntity>().lambda()
-                    .eq(BusPatientEntity::getCode,undoConfig.getPatientCode())
-                    .eq(BusPatientEntity::getTenantId,undoConfig.getTenantId())
+                    .eq(BusPatientEntity::getId,patient.getId())
                     .set(BusPatientEntity::getAlarm, PatientAlarmEnum.NONE));
             wsPublishUtils.publishDeviceRepeat(undoConfig.getTenantId());
         }
-        wsPublishUtils.publishPatientMonitor(undoConfig.getPatientCode(),undoConfig.getTenantId());
+        wsPublishUtils.publishPatientMonitor(patient.getId(),undoConfig.getTenantId());
         return R.success();
     }
 
@@ -252,7 +254,7 @@ public class BusPatientController  implements BaseQueryController<BusPatientEnti
             String infusionId = vo.getInfusionId();
             if(CharSequenceUtil.isAllBlank(infusionId)){
                 String patientCode = vo.getPatientCode();
-                BusPatientEntity patient = patientService.getOne(new QueryWrapper<BusPatientEntity>().lambda().eq(BusPatientEntity::getCode, patientCode));
+                BusPatientEntity patient = patientService.findByFormatCode(patientCode);
                 if(patient==null){
                     throw new CustomException("该病号信息不存在,请刷新后重试");
                 }

+ 6 - 19
nb-system/src/main/java/com/coffee/bus/entity/BusDeviceAlarmEntity.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import com.coffee.bus.entity.common.CommonDeviceParam;
 import com.coffee.bus.enums.DeviceAlarmEnum;
 import com.coffee.bus.enums.DeviceStatusEnum;
+import com.coffee.bus.enums.DeviceTypeEnum;
 import com.coffee.bus.enums.FlowStatusEnum;
 import com.coffee.common.entity.TenantGenericEntity;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@@ -53,6 +54,9 @@ public class BusDeviceAlarmEntity extends TenantGenericEntity<String,String> {
     @ApiModelProperty(value = "输注记录")
     private String infusionId;
 
+    @ApiModelProperty(value = "设备类型")
+    private DeviceTypeEnum deviceType;
+
     @ApiModelProperty(value = "泵运行状态",accessMode = ApiModelProperty.AccessMode.READ_ONLY)
     @TableField(updateStrategy = FieldStrategy.IGNORED)
     private DeviceStatusEnum runState;
@@ -93,25 +97,7 @@ public class BusDeviceAlarmEntity extends TenantGenericEntity<String,String> {
         entity.setWarnLowBattery(history.getWarnLowBattery());
         entity.setWarnFlow(history.getWarnFlow());
         entity.setTenantId(history.getTenantId());
-        return entity;
-    }
-
-    public static BusDeviceAlarmEntity parseRunning(BusDeviceRunningEntity source){
-        BusDeviceAlarmEntity entity = new BusDeviceAlarmEntity();
-        entity.setDeviceId(source.getDeviceId());
-        entity.setUploadTime(source.getUploadTime());
-        if (source.getAlarm() != null && !DeviceAlarmEnum.None.equals(source.getAlarm())) {
-            entity.setAlarm(true);
-        }
-        entity.setHistoryId(source.getId());
-        entity.setInfusionId(source.getInfusionId());
-        entity.setRunState(source.getRunState());
-        entity.setAlarmState(source.getAlarm());
-        entity.setWarnWillFinished(source.getWarnWillFinished());
-        entity.setWarnAnalgesicPoor(source.getWarnAnalgesicPoor());
-        entity.setWarnLowBattery(source.getWarnLowBattery());
-        entity.setWarnFlow(source.getWarnFlow());
-        entity.setTenantId(source.getTenantId());
+        entity.setDeviceType(history.getType());
         return entity;
     }
 
@@ -131,6 +117,7 @@ public class BusDeviceAlarmEntity extends TenantGenericEntity<String,String> {
         entity.setWarnLowBattery(source.getWarnLowBattery());
         entity.setWarnFlow(source.getWarnFlow());
         entity.setTenantId(source.getTenantId());
+        entity.setDeviceType(source.getType());
         return entity;
     }
 

+ 4 - 0
nb-system/src/main/java/com/coffee/bus/entity/BusEvaluationEntity.java

@@ -28,6 +28,10 @@ import javax.validation.constraints.NotNull;
 @ApiModel(value="评价得分", description="评价得分实体类")
 public class BusEvaluationEntity extends TenantGenericEntity<String,String> {
 
+    @ApiModelProperty(value = "病号")
+    @Length(max = 255,message = "病号长度不得超过255个字节")
+    public String patientId;
+
     @ApiModelProperty(value = "病号")
     @Length(max = 255,message = "病号长度不得超过255个字节")
     public String patientCode;

+ 0 - 2
nb-system/src/main/java/com/coffee/bus/entity/BusPatientEntity.java

@@ -56,8 +56,6 @@ public class BusPatientEntity extends TenantGenericEntity<String,String> {
     public static BusPatientEntity of(BusClinicEntity clinic){
         BusPatientEntity patient = new BusPatientEntity();
         patient.setCode(clinic.getPatientCode());
-        patient.setName(clinic.getPatientName());
-        patient.setGender(clinic.getPatientGender());
         patient.setClinicId(clinic.getId());
         patient.setTenantId(clinic.getTenantId());
         return patient;

+ 1 - 1
nb-system/src/main/java/com/coffee/bus/enums/DeviceAlarmEnum.java

@@ -26,7 +26,7 @@ public enum DeviceAlarmEnum  implements IEnum<Integer> {
     Bubble(1,"气泡报警"),
     Jam(2,"堵塞报警"),
     NotBox(3,"未装药盒报警"),
-    InfusionMax(4,"返厂维修"),
+    InfusionMax(4,"输入总量报警"),
     Limit(5,"极限报警"),
     Finished(6,"输液结束"),
     LowBattery(7,"电量耗尽报警"),

+ 7 - 4
nb-system/src/main/java/com/coffee/bus/hospital/config/HospitalFinishMonitorConfigHandler.java

@@ -73,7 +73,7 @@ public class HospitalFinishMonitorConfigHandler extends AbstractHospitalConfigHa
         }
     }
 
-    public void judgeNoSignalAutoFinish(String device, String patientCode, String tenantId, String infusionId, Date uploadTime){
+    public void judgeNoSignalAutoFinish(String patientId,String device, String patientCode, String tenantId, String infusionId, Date uploadTime){
         FunctionFinishMonitorConfig config = this.getConfig().as(FunctionFinishMonitorConfig.class);
         if(config==null||!Boolean.TRUE.equals(config.isEnable())|| Objects.isNull(config.getNoSignalInterval())){
             return;
@@ -90,6 +90,7 @@ public class HospitalFinishMonitorConfigHandler extends AbstractHospitalConfigHa
                 .patientCode(patientCode)
                 .config(undoDeviceConfig)
                 .infusionId(infusionId)
+                .patientId(patientId)
                 .timeout(config.getNoSignalInterval())
                 .uploadTime(uploadTime)
                 //todo
@@ -125,6 +126,7 @@ public class HospitalFinishMonitorConfigHandler extends AbstractHospitalConfigHa
             lastShutDownFinish = FinishMonitorEntity.builder()
                     .deviceId(source.getDeviceId())
                     .patientCode(source.getPatientCode())
+                    .patientId(source.getPatientId())
                     .config(undoDeviceConfig)
                     .timeout(config.getShutDownInterval())
                     .uploadTime(source.getUploadTime())
@@ -147,8 +149,8 @@ public class HospitalFinishMonitorConfigHandler extends AbstractHospitalConfigHa
     private void handleFinishMonitor(FinishMonitorEntity source){
         log.info("延迟任务【{}】,结束临床管理【{}】",source.getId(),source);
         //判断是否为主输注,只有主输注才可结束临床
-        String patientCode = source.getPatientCode();
-        BusPatientEntity patient = patientService.findByCode(patientCode, source.getTenantId());
+        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();
@@ -160,7 +162,7 @@ public class HospitalFinishMonitorConfigHandler extends AbstractHospitalConfigHa
                 manualUndoConfig.setUndo(config);
                 manualUndoConfig.setMonitorType(true);
                 manualUndoConfig.setClinicId(patient.getClinicId());
-                manualUndoConfig.setPatientCode(patientCode);
+                manualUndoConfig.setPatientCode(source.getPatientCode());
                 manualUndoConfig.setInfusionIds(Collections.singletonList(source.getInfusionId()));
                 infusionHistoryService.undo(manualUndoConfig,true);
             }
@@ -171,6 +173,7 @@ public class HospitalFinishMonitorConfigHandler extends AbstractHospitalConfigHa
     @Builder
     static class FinishMonitorEntity extends AbstractMsgId {
         private String deviceId;
+        private String patientId;
         private String patientCode;
         private UndoDeviceConfig config;
         private String clinicId;

+ 1 - 3
nb-system/src/main/java/com/coffee/bus/hospital/config/HospitalFunctionAnalConfigHandler.java

@@ -15,13 +15,11 @@ import com.coffee.bus.utils.WsPublishUtils;
 import com.coffee.common.cache.ConfigStorage;
 import com.coffee.common.cache.value.Value;
 import com.coffee.common.entity.AbstractMsgId;
-import com.coffee.common.redis.RedisUtils;
 import com.coffee.common.util.RedissonUtil;
 import lombok.Builder;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.redisson.api.RDelayedQueue;
-import org.redisson.client.protocol.ScoredEntry;
 
 import java.util.*;
 import java.util.concurrent.TimeUnit;
@@ -180,7 +178,7 @@ public class HospitalFunctionAnalConfigHandler extends AbstractHospitalConfigHan
                     .set(BusInfusionHistoryEntity::getWarnAnalgesicPoor,false));
             deviceRegistry.getOperator(deviceId).setAlarmOrWarn(null);
             //发布推送
-            wsPublishUtils.publishPatientMonitor(infusionHistory.getPatientCode(),infusionHistory.getTenantId());
+            wsPublishUtils.publishPatientMonitor(infusionHistory.getPatientId(),infusionHistory.getTenantId());
         }
 
 

+ 4 - 4
nb-system/src/main/java/com/coffee/bus/hospital/config/HospitalFunctionExtraConfigHandler.java

@@ -154,9 +154,9 @@ public class HospitalFunctionExtraConfigHandler  extends  AbstractHospitalConfig
         if(update){
             deviceRegistry.getOperator(deviceId)
                     .setStatus(DeviceStatusEnum.NoSignal);
-            wsPublishUtils.publishPatientMonitor(infusionHistory.getPatientCode(), infusionHistory.getTenantId());
+            wsPublishUtils.publishPatientMonitor(infusionHistory.getPatientId(), infusionHistory.getTenantId());
             //不在服务区
-            monitorConfigHandler.judgeNoSignalAutoFinish(deviceId,source.getPatientCode(),source.getTenantId(),source.getInfusionId(),source.getUploadTime());
+            monitorConfigHandler.judgeNoSignalAutoFinish(infusionHistory.getPatientId(),deviceId,source.getPatientCode(),source.getTenantId(),source.getInfusionId(),source.getUploadTime());
             autoUndoConfigHandler.judgeNoSignalAutoUndo(deviceId,source.getPatientCode(),source.getTenantId(),source.getInfusionId());
         }
     }
@@ -178,7 +178,7 @@ public class HospitalFunctionExtraConfigHandler  extends  AbstractHospitalConfig
         });
         //仅智能泵存在
         if(DeviceTypeEnum.intelligent.equals(source.getType())){
-            if (source.getFlowDownLimit()!=null&&source.getFlowDownLimit().compareTo(BigDecimal.valueOf(0.1))<1) {
+            if (source.getFlowDownLimit()!=null&&source.getContinueDose().compareTo(source.getFlowDownLimit())<1) {
                 //输注量超过阈值,进行低输注判定
                 lastLowInfusionWarn= LowInfusionEntity.builder()
                         .deviceId(source.getDeviceId())
@@ -223,7 +223,7 @@ public class HospitalFunctionExtraConfigHandler  extends  AbstractHospitalConfig
         BusDeviceAlarmEntity alarm = BusDeviceAlarmEntity.lowInfusion(source.getDeviceId(),source.getInfusionId(),source.getHistoryId(),source.getTenantId(),uploadTime);
         alarmService.save(alarm);
         //发布推送
-        wsPublishUtils.publishPatientMonitor(infusionHistory.getPatientCode(), infusionHistory.getTenantId());
+        wsPublishUtils.publishPatientMonitor(infusionHistory.getPatientId(), infusionHistory.getTenantId());
 
     }
 

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

@@ -63,7 +63,7 @@ public class EqualsStrategyHandler implements HisAllStrategyHandler {
         if(count>1){
             clinicService.setCurrentClinicByHis(CollectionUtil.getFirst(source.iterator()));
         }else {
-            wsPublishUtils.publishPatientMonitor(clinicEntity.getPatientCode(),clinicEntity.getTenantId());
+            wsPublishUtils.publishPatientMonitor(clinicEntity.getPatientId(),clinicEntity.getTenantId());
         }
     }
 

+ 1 - 1
nb-system/src/main/java/com/coffee/bus/mapper/BusPatientMapper.java

@@ -42,7 +42,7 @@ public interface BusPatientMapper extends BaseMapper<BusPatientEntity> {
      */
     IPage<PatientMonitorResult> selectMonitor(IPage<PatientMonitorResult> page, @Param("query") PatientMonitorQuery query);
 
-    PatientMonitorResult findByPatientCode(@Param("tenantId") String tenantId,@Param("patientCode")String patientCode);
+    PatientMonitorResult findByPatientId(@Param("tenantId") String tenantId,@Param("patientId")String patientId);
 
 
     long selectAlarmCount(@Param("tenantId") String tenantId,@Param("alarmValue") int alarmValue);

+ 1 - 1
nb-system/src/main/java/com/coffee/bus/registry/constant/DeviceKeyConstant.java

@@ -36,7 +36,7 @@ public class DeviceKeyConstant {
 
     public static final String INFUSION_PARAM="infusion_param";
 
-    public static final String UNDO="undo";
+    public static final String CONTINUE_DOSE="continue_dose";
 
     public static final String UPLOAD_TIME="upload_time";
 }

+ 13 - 1
nb-system/src/main/java/com/coffee/bus/registry/device/ClusterDeviceOperator.java

@@ -4,8 +4,9 @@ package com.coffee.bus.registry.device;
 import com.coffee.bus.enums.DeviceStatusEnum;
 import com.coffee.bus.registry.constant.DeviceKeyConstant;
 import com.coffee.common.cache.ConfigStorage;
-import lombok.AllArgsConstructor;   
+import lombok.AllArgsConstructor;
 
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.*;
 /**
@@ -181,6 +182,17 @@ public class ClusterDeviceOperator implements DeviceOperator {
         configStorage.setConfig(DeviceKeyConstant.UPLOAD_TIME,uploadTime);
     }
 
+    @Override
+    public BigDecimal getContinueDose() {
+        return getValue(DeviceKeyConstant.CONTINUE_DOSE).as(BigDecimal.class);
+
+    }
+
+    @Override
+    public void setContinueDose(BigDecimal continueDose) {
+        configStorage.setConfig(DeviceKeyConstant.CONTINUE_DOSE,continueDose);
+    }
+
     @Override
     public void clear() {
         configStorage.clear();

+ 1 - 0
nb-system/src/main/java/com/coffee/bus/registry/device/ClusterDeviceRegistry.java

@@ -62,6 +62,7 @@ public class ClusterDeviceRegistry implements DeviceRegistry {
                 }
                 deviceOperator.setStartTime(lastInfusion.getStartTime());
                 deviceOperator.setStatus(lastInfusion.getRunState());
+                deviceOperator.setContinueDose(lastInfusion.getContinueDose());
             }
 
 

+ 16 - 0
nb-system/src/main/java/com/coffee/bus/registry/device/DeviceOperator.java

@@ -4,6 +4,7 @@ import com.coffee.bus.entity.BusDeviceRunningEntity;
 import com.coffee.bus.enums.DeviceStatusEnum;
 import com.coffee.bus.registry.Operator;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -198,5 +199,20 @@ public interface DeviceOperator extends Operator {
      */
     void setUploadTime(Date uploadTime);
 
+
+    /**
+     * 获取设备上传流速
+     * @return
+     */
+    BigDecimal getContinueDose();
+
+
+    /**
+     * 设置设备流速
+     * @param continueDose
+     */
+    void setContinueDose(BigDecimal continueDose);
+
+
     void clear();
 }

+ 2 - 2
nb-system/src/main/java/com/coffee/bus/registry/patient/ClusterPatientRegistry.java

@@ -51,6 +51,7 @@ public class ClusterPatientRegistry implements PatientRegistry {
         }
         String key=getId()+hospitalId+":"+patientCode;
         ClusterPatientOperator patientOperator = new ClusterPatientOperator(configStorageManager.getStorage(key));
+        //设备上传病号
         String code = patientOperator.getCode();
         if(StrUtil.isNullOrUndefined(code)){
             //将新数据存入数据库
@@ -62,7 +63,7 @@ public class ClusterPatientRegistry implements PatientRegistry {
             BusClinicEntity clinic=new BusClinicEntity();
             if(patient==null){
                 patient=new BusPatientEntity();
-                patient.setCode(patientCode);
+                patient.setOriginCode(patientCode);
                 patient.setTenantId(hospitalId);
                 patient.setId(IdWorker.getIdStr());
 
@@ -81,7 +82,6 @@ public class ClusterPatientRegistry implements PatientRegistry {
 
             patientOperator.setCode(patientCode);
             patientOperator.setTenantId(hospitalId);
-            patientOperator.setPatientId(patient.getId());
 
             //填充临床信息
             patient.setClinicId(clinic.getId());

+ 9 - 0
nb-system/src/main/java/com/coffee/bus/registry/patient/PatientRegistry.java

@@ -21,6 +21,15 @@ public interface PatientRegistry extends Registry {
     PatientOperator getOperator(String hospitalId, String patientCode);
 
 
+    /**
+     * 描述:
+     * @author lifang
+     * @date 2022/6/30 14:31
+     * @param hospitalId
+     * @param patientCode 设备上传住院号
+     * @param params
+     * @return PatientOperator
+     */
     PatientOperator getOperator(String hospitalId, String patientCode, Map<String, Object> params);
 
     /**

+ 2 - 2
nb-system/src/main/java/com/coffee/bus/service/LocalBusClinicService.java

@@ -152,7 +152,7 @@ public class LocalBusClinicService extends BaseService<BusClinicMapper, BusClini
     @Transactional(rollbackFor = Exception.class)
     public void setCurrentClinicByHis(BusClinicEntity source){
         Assert.hasText(source.getId(),"LocalBusClinicService.setCurrentClinic方法调用时,source参数id不能为空");
-        Assert.hasText(source.getPatientCode(),"LocalBusClinicService.setCurrentClinic方法调用时,source参数patientCode不能为空");
+        Assert.hasText(source.getPatientId(),"LocalBusClinicService.setCurrentClinic方法调用时,source参数patientId不能为空");
         Assert.hasText(source.getTenantId(),"LocalBusClinicService.setCurrentClinic方法调用时,source参数tenantId不能为空");
         Assert.notNull(source.getStartTime(),"LocalBusClinicService.setCurrentClinic方法调用时,source参数startTime不能为空");
 
@@ -194,7 +194,7 @@ public class LocalBusClinicService extends BaseService<BusClinicMapper, BusClini
 
         PatientOperator operator = patientRegistry.getOperator(source.getTenantId(), source.getPatientCode());
         operator.setClinicId(source.getId());
-        wsPublishUtils.publishPatientMonitor(source.getPatientCode(),source.getTenantId());
+        wsPublishUtils.publishPatientMonitor(source.getPatientId(),source.getTenantId());
     }
 
     public ClinicStatsReturnResult stats(ClinicStatsVo statsVo) {

+ 2 - 2
nb-system/src/main/java/com/coffee/bus/service/LocalBusEvaluationService.java

@@ -56,8 +56,8 @@ public class LocalBusEvaluationService extends BaseService<BusEvaluationMapper,
             clinicService.update(new UpdateWrapper<BusClinicEntity>().lambda()
                     .eq(BusClinicEntity::getId,entity.getClinicId())
                     .set(BusClinicEntity::getEvalTime, Optional.ofNullable(entity.getEvaluateTime()).orElse(new Date())));
-            if(CharSequenceUtil.isNotBlank(entity.getPatientCode())){
-                wsPublishUtils.publishPatientMonitor(entity.getPatientCode(),entity.getTenantId());
+            if(CharSequenceUtil.isNotBlank(entity.getPatientId())){
+                wsPublishUtils.publishPatientMonitor(entity.getPatientId(),entity.getTenantId());
             }
         }
     }

+ 9 - 0
nb-system/src/main/java/com/coffee/bus/service/LocalBusHospitalConfigService.java

@@ -7,6 +7,7 @@ import com.coffee.bus.enums.ConfigEnum;
 import com.coffee.bus.hospital.HospitalManagerRegister;
 import com.coffee.bus.hospital.config.bean.*;
 import com.coffee.bus.mapper.BusHospitalConfigMapper;
+import com.coffee.bus.utils.WsPublishUtils;
 import com.coffee.common.crud.BaseService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
@@ -33,6 +34,9 @@ public class LocalBusHospitalConfigService extends BaseService<BusHospitalConfig
     @Lazy
     private HospitalManagerRegister managerRegister;
 
+    @Autowired
+    @Lazy
+    private WsPublishUtils wsPublishUtils;
 
     @Override
     public void validateBeforeSave(BusHospitalConfigEntity entity) {
@@ -53,6 +57,11 @@ public class LocalBusHospitalConfigService extends BaseService<BusHospitalConfig
     public void postSave(BusHospitalConfigEntity entity) {
         BusHospitalConfigEntity configEntity = this.getById(entity.getId());
         managerRegister.refresh(configEntity.getTenantId(),false,true);
+        if (entity.getType().equals(ConfigEnum.patientCode)) {
+            CompletableFuture.runAsync(()->{
+//                wsPublishUtils.publishPatientAdd();
+            });
+        }
     }
 
     @Override

+ 32 - 26
nb-system/src/main/java/com/coffee/bus/service/LocalBusPatientService.java

@@ -70,6 +70,10 @@ public class LocalBusPatientService extends BaseService<BusPatientMapper, BusPat
     @Lazy
     private LocalBusInfusionHistoryService infusionHistoryService;
 
+    @Autowired
+    @Lazy
+    private LocalBusPatientService patientService;
+
     @Autowired
     @Lazy
     private DeviceRegistry deviceRegistry;
@@ -227,53 +231,45 @@ public class LocalBusPatientService extends BaseService<BusPatientMapper, BusPat
      */
     @Transactional(rollbackFor = Exception.class)
     public void manualEdit(BusClinicEntity clinic) {
+        BusClinicEntity originClinicInfo = clinicService.getById(clinic.getId());
+        if(originClinicInfo==null){
+            throw new CustomException("该住院号临床信息不存在,请刷新后重试");
+        }
+        BusPatientEntity originPatientInfo = patientService.getById(originClinicInfo.getPatientId());
+        if(originPatientInfo==null){
+            throw new CustomException("该住院号信息不存在,请刷新后重试");
+        }
         //先更新手术信息
         clinicService.updateById(clinic);
         //后更新病人信息
         BusPatientEntity patient = BusPatientEntity.of(clinic);
-        PatientOperator patientOperator = patientRegistry.getOperator(patient.getTenantId(), patient.getCode());
-        if (StrUtil.isEmpty(patientOperator.getCode())) {
-            this.save(patient);
-            patientOperator.setCode(patient.getCode());
-            patientOperator.setTenantId(patient.getTenantId());
-        }else {
-            BusPatientEntity existPatient = this.getOne(new QueryWrapper<BusPatientEntity>().lambda().eq(BusPatientEntity::getCode, patient.getCode()).last("limit 1"));
-            patient.setId(existPatient.getId());
-            this.updateById(patient);
-        }
+        PatientOperator patientOperator = patientRegistry.getOperator(patient.getTenantId(), originPatientInfo.getOriginCode());
+        BusPatientEntity existPatient = this.getOne(new QueryWrapper<BusPatientEntity>().lambda().eq(BusPatientEntity::getCode, patient.getCode()).last("limit 1"));
+        patient.setId(existPatient.getId());
+        this.updateById(patient);
         patientOperator.setClinicId(patient.getClinicId());
 
         CompletableFuture.runAsync(()->{
-            wsPublishUtils.publishPatientMonitor(patient.getCode(),patient.getTenantId());
+            wsPublishUtils.publishPatientMonitor(originPatientInfo.getId(),patient.getTenantId());
         });
     }
 
     /**
      * 根据病号查询临床监控记录
      * @author lifang
-     * @param patientCode 病号
+     * @param patientId 病号id
      * @param tenantId 医院id
      * @return
      */
-    public PatientMonitorResult lookMonitorByPatientCode(String patientCode,String tenantId) {
+    public PatientMonitorResult lookMonitorByPatientCode(String patientId,String tenantId) {
         try {
-            return this.baseMapper.findByPatientCode(tenantId, patientCode);
+            return this.baseMapper.findByPatientId(tenantId, patientId);
         } catch (Exception e) {
             log.error("根据病号查询临床失败,",e.getMessage());
             return null;
         }
     }
 
-    /**
-     * 根据病号查询临床监控记录
-     * @author lifang
-     * @param patientCode 病号
-     * @return
-     */
-    public PatientMonitorResult lookMonitorByPatientCode(String patientCode) {
-        return lookMonitorByPatientCode(patientCode, null);
-    }
-
     /**
      * 描述: 设备状态数量统计
      * @author lifang
@@ -379,6 +375,12 @@ public class LocalBusPatientService extends BaseService<BusPatientMapper, BusPat
      */
     @Transactional(rollbackFor = Exception.class)
     public void shift(DeviceShiftConfig shiftConfig) {
+        String formatCode = shiftConfig.getPatientCode();
+        BusPatientEntity patient = patientService.getOne(new QueryWrapper<BusPatientEntity>().lambda().eq(BusPatientEntity::getCode, formatCode));
+        if(patient==null){
+            throw new CustomException(String.format("住院号【%s】不存在,请刷新后重试",shiftConfig.getPatientCode()));
+        }
+        shiftConfig.setPatientId(patient.getId());
         PatientOperator patientOperator = patientRegistry.getOperator(shiftConfig.getTenantId(), shiftConfig.getPatientCode());
         List<String> replicaDeviceIds = shiftConfig.getReplicaDeviceIds();
         String masterDeviceId = shiftConfig.getMasterDeviceId();
@@ -400,8 +402,12 @@ public class LocalBusPatientService extends BaseService<BusPatientMapper, BusPat
         patientOperator.setBindDeviceId(shiftConfig.getMasterDeviceId());
     }
 
-    public BusPatientEntity findByCode(String patientCode,String tenantId){
+    public BusPatientEntity findByFormatCode(String patientCode, String tenantId){
         return this.getOne(new QueryWrapper<BusPatientEntity>().lambda().eq(BusPatientEntity::getCode,patientCode)
-                .eq(BusPatientEntity::getTenantId,tenantId));
+                .eq(StrUtil.isNotBlank(tenantId),BusPatientEntity::getTenantId,tenantId));
+    }
+
+    public BusPatientEntity findByFormatCode(String patientCode){
+        return findByFormatCode(patientCode,null);
     }
 }

+ 4 - 1
nb-system/src/main/java/com/coffee/bus/service/dto/ClinicResult.java

@@ -22,7 +22,10 @@ public class ClinicResult  implements Serializable {
     @ApiModelProperty("临床id")
     private String clinicId;
 
-    @ApiModelProperty("住院号")
+    @ApiModelProperty("病人id")
+    private String patientId;
+
+    @ApiModelProperty("格式化后的住院号")
     private String patientCode;
 
     @ApiModelProperty("姓名")

+ 7 - 2
nb-system/src/main/java/com/coffee/bus/service/dto/DeviceShiftConfig.java

@@ -1,5 +1,6 @@
 package com.coffee.bus.service.dto;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -25,10 +26,14 @@ public class DeviceShiftConfig {
     @NotNull(message = "请选择一个泵作为此临床信息的主泵进行监控")
     private String masterDeviceId;
 
-    @ApiModelProperty("号")
-    @NotNull(message = "号不能为空")
+    @ApiModelProperty("住院号")
+    @NotNull(message = "住院号不能为空")
     private String patientCode;
 
+    @ApiModelProperty("住院号id")
+    @JsonIgnore
+    private String patientId;
+
     @ApiModelProperty("医院id")
     @NotNull(message = "医院id不能为空")
     private String tenantId;

+ 1 - 0
nb-system/src/main/java/com/coffee/bus/service/dto/ManualUndoConfig.java

@@ -36,6 +36,7 @@ public class ManualUndoConfig implements Serializable {
     @Deprecated
     private String patientCode;
 
+
     @ApiModelProperty(value = "临床id",hidden = true)
     @JsonIgnore
     private String clinicId;

+ 4 - 1
nb-system/src/main/java/com/coffee/bus/service/dto/PatientMonitorResult.java

@@ -25,7 +25,10 @@ import java.util.Date;
 @Data
 @ToString
 public class PatientMonitorResult implements Serializable {
-    @ApiModelProperty(value = "病号")
+    @ApiModelProperty(value = "病人id")
+    private String patientId;
+
+    @ApiModelProperty(value = "格式化后的病号")
     private String patientCode;
 
     @ApiModelProperty(value = "病人名称")

+ 3 - 3
nb-system/src/main/java/com/coffee/bus/stats/analyse/AlarmStatsAnalyse.java

@@ -194,7 +194,7 @@ public class AlarmStatsAnalyse implements CommonStats<CombineAlarmResult> {
         //根据时间对结果进行区分统计
         Map<String, List<CombineAlarmResult>> groupByTimeResults = groupByTime(results, unit);
         //顺序不可错! 先数量后比率
-        List<StatsColumn> allColumn = getAllColumn(Arrays.asList("堵塞","极限","未装药盒","电机失控","镇痛不足","不在服务区","机械故障","电量耗尽","气泡无液","返厂维护","低输注"));
+        List<StatsColumn> allColumn = getAllColumn(Arrays.asList("堵塞","极限","未装药盒","电机失控","镇痛不足","不在服务区","机械故障","电量耗尽","气泡无液","输入总量报警","低输注"));
         allColumn.add(1,StatsColumn.of("输注总数","输注总数"));
         allColumn.add(2,StatsColumn.of("提示总数","提示总数"));
         List<Map<String, Object>> contents = new ArrayList<>();
@@ -225,7 +225,7 @@ public class AlarmStatsAnalyse implements CommonStats<CombineAlarmResult> {
             contentValues.put("电量耗尽",totalResult.getLowBattery().getValue());
             contentValues.put("气泡无液",totalResult.getBubble().getValue());
             contentValues.put("低输注",totalResult.getLowInfusion().getValue());
-            contentValues.put("返厂维护",totalResult.getInfusionMax().getValue());
+            contentValues.put("输入总量报警",totalResult.getInfusionMax().getValue());
             contentValues.put("堵塞比率",computeRatio(BigDecimal.valueOf(totalResult.getJam().getValue()),total));
             contentValues.put("极限比率",computeRatio(BigDecimal.valueOf(totalResult.getLimit().getValue()),total));
             contentValues.put("未装药盒比率",computeRatio(BigDecimal.valueOf(totalResult.getNoBox().getValue()),total));
@@ -236,7 +236,7 @@ public class AlarmStatsAnalyse implements CommonStats<CombineAlarmResult> {
             contentValues.put("电量耗尽比率",computeRatio(BigDecimal.valueOf(totalResult.getLowBattery().getValue()),total));
             contentValues.put("气泡无液比率",computeRatio(BigDecimal.valueOf(totalResult.getBubble().getValue()),total));
             contentValues.put("低输注比率",computeRatio(BigDecimal.valueOf(totalResult.getLowInfusion().getValue()),total));
-            contentValues.put("返厂维护比率",computeRatio(BigDecimal.valueOf(totalResult.getInfusionMax().getValue()),total));
+            contentValues.put("输入总量报警比率",computeRatio(BigDecimal.valueOf(totalResult.getInfusionMax().getValue()),total));
             contents.add(contentValues);
         });
         return Arrays.asList(result);

+ 1 - 1
nb-system/src/main/java/com/coffee/bus/stats/entity/AlarmScatter.java

@@ -115,7 +115,7 @@ public class AlarmScatter extends LinkedHashMap<String, Map<String, AlarmScatter
     }
 
     public AlarmScatter.AlarmStatsByTime getInfusionMax(String time) {
-        return this.computeIfAbsent("返厂维护",k->new LinkedHashMap<>())
+        return this.computeIfAbsent("输入总量报警",k->new LinkedHashMap<>())
                 .computeIfAbsent(time,t->AlarmStatsByTime.of(time,0));
     }
 

+ 1 - 1
nb-system/src/main/java/com/coffee/bus/stats/entity/AlarmTotalPieResult.java

@@ -137,7 +137,7 @@ public class AlarmTotalPieResult extends HashMap<String,PieContent> {
     }
 
     public PieContent getInfusionMax() {
-        return this.computeIfAbsent("infusionMax",k->PieContent.of("返厂维护",0L));
+        return this.computeIfAbsent("infusionMax",k->PieContent.of("输入总量报警",0L));
     }
 
     public void incrementInfusionMax() {

+ 6 - 6
nb-system/src/main/java/com/coffee/bus/utils/WsPublishUtils.java

@@ -40,22 +40,22 @@ public class WsPublishUtils implements Serializable{
      * 描述: 推送设备输注消息
      * @author lifang
      * @date 2022/5/13 9:39
-     * @param patientCode
+     * @param patientId 病号id
      * @param tenantId
      * @return void
      */
     @Async
-    public void publishPatientMonitor(String patientCode,String tenantId){
+    public void publishPatientMonitor(String patientId,String tenantId){
         Assert.hasText(tenantId,"医院id不能为空");
-        log.info("推送病号数据【{}】", JSONUtil.toJsonStr(patientCode));
-        PatientMonitorResult message = patientService.lookMonitorByPatientCode(patientCode, tenantId);
+        log.info("推送病号数据【{}】", JSONUtil.toJsonStr(patientId));
+        PatientMonitorResult message = patientService.lookMonitorByPatientCode(patientId, tenantId);
         if (log.isDebugEnabled()) {
             log.debug("推送病号当前状态,【{}】",JSONUtil.toJsonStr(message));
         }
         if(message!=null){
             message.handleWarn();
-            this.publish(WebSocketConstant.getPatientMonitor(null, patientCode, tenantId).getTopic(),
-                    TopicMessage.of(message,patientCode)
+            this.publish(WebSocketConstant.getPatientMonitor(null, patientId, tenantId).getTopic(),
+                    TopicMessage.of(message,patientId)
             );
         }
     }

+ 57 - 16
nb-system/src/main/java/com/coffee/bus/websocket/listener/DeviceInfoListener.java

@@ -1,5 +1,6 @@
 package com.coffee.bus.websocket.listener;
 
+import cn.hutool.core.comparator.CompareUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
@@ -8,6 +9,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.coffee.bus.entity.*;
+import com.coffee.bus.enums.DeviceTypeEnum;
+import com.coffee.bus.enums.FlowStatusEnum;
 import com.coffee.bus.enums.PatientAlarmEnum;
 import com.coffee.bus.hospital.HospitalManagerRegister;
 import com.coffee.bus.registry.device.DeviceRegistry;
@@ -23,6 +26,7 @@ import org.springframework.context.event.EventListener;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.List;
 import java.util.concurrent.CompletableFuture;
@@ -95,6 +99,7 @@ public class DeviceInfoListener {
             List<Supplier<?>> cacheOperation=new ArrayList<>();
             //格式化病号
             formatPatientCode(device);
+
             //处理输注参数
             BusInfusionHistoryEntity infusionHistory = handleInfusionHistory(device, deviceOperator, cacheOperation);
             //处理输注修改参数
@@ -113,15 +118,12 @@ public class DeviceInfoListener {
                         .set(BusDeviceEntity::getType,device.getType())
                 );
                 infusionHistoryService.save(infusionHistory);
-                patientService.update(new UpdateWrapper<BusPatientEntity>().lambda()
-                        .eq(BusPatientEntity::getId,device.getPatientId())
-                        .set(BusPatientEntity::getCode,device.getFormatPatientCode()));
             }else {
                 infusionHistoryService.updateById(infusionHistory);
             }
 
             cacheOperation.add(()->{
-                wsPublishUtils.publishPatientMonitor(device.getPatientCode(),device.getTenantId());
+                wsPublishUtils.publishPatientMonitor(device.getPatientId(),device.getTenantId());
                 if (Boolean.TRUE.equals(device.isResetUndo())||Boolean.TRUE.equals(device.isInfusionModify())) {
                     if (Boolean.TRUE.equals(device.isInfusionModify())) {
                         wsPublishUtils.publishDeviceNone(device.getTenantId());
@@ -150,6 +152,37 @@ public class DeviceInfoListener {
         }
     }
 
+
+    /**
+     * 描述: 是否存在加档受限、存在则跳过判定,不存在则判定加减档标识
+     * 1、新输注则忽略
+     * 2、与上次流速进行比较,降低为减档,增加为加档
+     * @author lifang
+     * @date 2022/6/30 9:53
+     * @param device
+     * @param deviceOperator
+     * @return void
+     */
+    private void handleIntelligent(BusDeviceRunningEntity device, DeviceOperator deviceOperator) {
+        if(DeviceTypeEnum.intelligent.equals(device.getType())
+                &&null!=device.getWarnFlow()
+                && Boolean.FALSE.equals(device.isNewInfusion())){
+            BigDecimal lastContinueDose = deviceOperator.getContinueDose();
+            if(lastContinueDose==null){
+                log.warn("设备【{}】流速在缓存中不存在",device.getContinueDose());
+            }else {
+                if(CompareUtil.compare(device.getContinueDose(),lastContinueDose)>0){
+                    device.setWarnFlow(FlowStatusEnum.Up);
+                }else if(CompareUtil.compare(device.getContinueDose(),lastContinueDose)<0){
+                    device.setWarnFlow(FlowStatusEnum.Down);
+                }else {
+                    device.setWarnFlow(null);
+                }
+            }
+        }
+
+    }
+
     private void init(BusDeviceRunningEntity device) {
         String deviceId = device.getDeviceId();
         //默认格式化住院号=设备上传住院号
@@ -184,28 +217,35 @@ public class DeviceInfoListener {
                 long runningInfusionCount = infusionHistoryService.count(new QueryWrapper<BusInfusionHistoryEntity>().lambda()
                         .eq(BusInfusionHistoryEntity::getFinished, false)
                         .eq(BusInfusionHistoryEntity::getIsUndo,false)
-                        .eq(BusInfusionHistoryEntity::getPatientCode, device.getPatientCode())
-                        .eq(BusInfusionHistoryEntity::getTenantId, device.getTenantId()));
+                        .eq(BusInfusionHistoryEntity::getPatientId, device.getPatientId()));
                 patientService.update(new UpdateWrapper<BusPatientEntity>()
                         .lambda()
-                        .eq(BusPatientEntity::getCode,device.getPatientCode())
-                        .eq(BusPatientEntity::getTenantId,device.getTenantId())
-                        //已撤泵重启的输注不再作为主泵进行判定
-                        .set(Boolean.FALSE.equals(device.isResetUndo()),BusPatientEntity::getInfusionId,device.getInfusionId())
+                        .eq(BusPatientEntity::getId,device.getPatientId())
+                        //已撤泵且修改参数的输注不再作为主泵进行判定
+                        .set(device.isNewInfusion(),BusPatientEntity::getInfusionId,device.getInfusionId())
+                        .set(device.isNewInfusion(),BusPatientEntity::getOriginCode,device.getPatientCode())
+                        .set(device.isNewInfusion(),BusPatientEntity::getCode,device.getFormatPatientCode())
                         .set(runningInfusionCount>0,BusPatientEntity::getAlarm,PatientAlarmEnum.DEVICE_REPEAT)
                         .set(runningInfusionCount==0,BusPatientEntity::getAlarm,PatientAlarmEnum.NONE));
                 if(device.isNewInfusion()){
                     BusInfusionHistoryEntity lastInfusion = infusionHistoryService.lastInfusion(deviceId);
-                    if(lastInfusion!=null&&ObjectUtil.notEqual(device.getPatientCode(),lastInfusion.getPatientCode())){
+                    if(lastInfusion!=null&&ObjectUtil.notEqual(device.getPatientId(),lastInfusion.getPatientId())){
                         //输注设备被占用
                         BusInfusionHistoryEntity normalInfusion = infusionHistoryService.deviceOccupation(lastInfusion);
+                        if(log.isDebugEnabled()){
+                            log.debug("住院号【{}】输注设备被占用,最后一条输注信息为【{}】",lastInfusion.getPatientCode(),JSONUtil.toJsonStr(lastInfusion));
+                        }
                         if(normalInfusion!=null){
                             String patientId = lastInfusion.getPatientId();
                             BusPatientEntity lastPatient = patientService.getById(patientId);
+                            if(log.isDebugEnabled()){
+                                log.debug("住院号病人信息,【{}】,输注设备被占用,切换设备",JSONUtil.toJsonStr(lastPatient));
+                            }
                             patientRegistry
-                                    .getOperator(lastInfusion.getTenantId(),lastPatient.getOriginCode()).setBindDeviceId(normalInfusion.getDeviceId());
+                                    .getOperator(lastInfusion.getTenantId(),lastPatient.getOriginCode())
+                                    .setBindDeviceId(normalInfusion.getDeviceId());
                             suppliers.add(()->{
-                                wsPublishUtils.publishPatientMonitor(lastInfusion.getPatientCode(),lastInfusion.getTenantId());
+                                wsPublishUtils.publishPatientMonitor(lastInfusion.getPatientId(),lastInfusion.getTenantId());
                                 return null;
                             });
                         }
@@ -223,8 +263,7 @@ public class DeviceInfoListener {
             }else if(!clinicFinished){
                 //临床未结束,切换当前输注信息为主输注
                 patientService.update(new UpdateWrapper<BusPatientEntity>().lambda()
-                        .eq(BusPatientEntity::getCode,device.getPatientCode())
-                        .eq(BusPatientEntity::getTenantId,device.getTenantId())
+                        .eq(BusPatientEntity::getId,device.getPatientId())
                         .set(BusPatientEntity::getInfusionId,device.getInfusionId()));
                 device.setMaster(true);
                 suppliers.add(()->{
@@ -250,7 +289,8 @@ public class DeviceInfoListener {
         PatientOperator patientOperator = patientRegistry.getOperator(device.getTenantId(), device.getPatientCode(),MapUtil.of("startTime", device.getStartTime()));
         device.setClinicId(patientOperator.getClinicId());
         device.setPatientId(patientOperator.getPatientId());
-
+        //智能泵处理
+        handleIntelligent(device,deviceOperator);
         BusInfusionHistoryEntity infusionHistory = BusInfusionHistoryEntity.parseRunningInfo(device);
         String originInfusionId = deviceOperator.getInfusionId();
         if(ObjectUtil.equal(device.getDeviceId(),patientOperator.getBindDeviceId())){
@@ -281,6 +321,7 @@ public class DeviceInfoListener {
                 deviceOperator.setClassification(device.getClassification());
                 deviceOperator.setStartTime(infusionHistory.getStartTime());
                 deviceOperator.setTenantId(device.getTenantId());
+                deviceOperator.setContinueDose(device.getContinueDose());
             }
             return null;
         });

+ 11 - 6
nb-system/src/main/resources/mapper/bus/BusClinicMapper.xml

@@ -13,6 +13,7 @@
 
     <resultMap id="queryResult" type="com.coffee.bus.service.dto.ClinicResult">
         <result column="clinic_id" property="clinicId"/>
+        <result column="patient_id" property="patientId"/>
         <result column="patient_code" property="patientCode"/>
         <result column="patient_name" property="patientName"/>
         <result column="ward" property="ward"/>
@@ -79,8 +80,10 @@
 
     <select id="pageQuery" resultMap="queryResult" parameterType="com.coffee.bus.service.dto.ClinicQuery">
         select
+        p.id as patient_id,
+        p.code as patient_code,
         c.id as clinic_id,
-        c.patient_code as patient_code,
+--         c.patient_code as patient_code,
         c.patient_name as patient_name,
         c.ward as ward,
         c.bed_no as bed_no,
@@ -108,9 +111,6 @@
             <if test="query.patientName!=null">
                 and patient_name like concat('%',#{query.patientName},'%')
             </if>
-            <if test="query.patientCode!=null">
-                and patient_code like concat('%',#{query.patientCode},'%')
-            </if>
             <if test="query.ward != null and query.ward.size > 0">
                 and ward in
                 <foreach item="w" index="index" collection="query.ward" open="(" separator="," close=")">
@@ -124,8 +124,14 @@
                 and monitor_start_time &gt; #{query.timeRange[0]} and  monitor_start_time &lt; #{query.timeRange[1]}
             </if>
         </where>
-
         ) as c
+        join (select * from bus_patient
+        <where>
+            <if test="query.patientCode!=null">
+                and code like concat('%',#{query.patientCode},'%')
+            </if>
+        </where>
+        ) as p on c.patient_id = p.id
         left join  (select clinic_id,count(1) as infusion_count from bus_infusion_history GROUP BY clinic_id) as i on i.clinic_id=c.id
         left join (select clinic_id,count(1) as eval_count from bus_evaluation  GROUP BY clinic_id) as eval on eval.clinic_id=c.id
         <if test="(query.orderByDesc!=null and query.orderByDesc.size > 0 ) or (query.orderByAsc!=null and query.orderByAsc.size > 0)">
@@ -170,7 +176,6 @@
                 and code like concat('%',#{query.patientCode},'%')
             </if>
         </where>
-
         )as p
         left join
         (select * from bus_clinic

+ 24 - 24
nb-system/src/main/resources/mapper/bus/BusDeviceAlarmMapper.xml

@@ -82,7 +82,7 @@
         select * from bus_device
         <where>
             <if test="query.uploadTimeMin != null">
-                and update_time >= #{query.uploadTimeMin}
+                and update_time &gt;= #{query.uploadTimeMin}
             </if>
             <if test="query.uploadTimeMax != null">
                 AND update_time &lt;= #{query.uploadTimeMax}
@@ -105,30 +105,30 @@
         FROM
         bus_device_alarm AS da,
         (SELECT @i:=-1) AS itable
-        WHERE
-        1=1
-        <if test="query.alarm != null">
-            and da.alarm = #{query.alarm}
-        </if>
-        <if test="query.runState != null">
-            and da.run_state = #{query.runState}
-        </if>
-        <if test="query.alarmState != null">
-            and da.alarm_state = #{query.alarmState}
-        </if>
-        <if test="query.warnWillFinished != null">
-            and da.warn_will_finished = #{query.warnWillFinished}
-        </if>
+        <where>
+            <if test="query.alarm != null">
+                and da.alarm = #{query.alarm}
+            </if>
+            <if test="query.runState != null">
+                and da.run_state = #{query.runState}
+            </if>
+            <if test="query.alarmState != null">
+                and da.alarm_state = #{query.alarmState}
+            </if>
+            <if test="query.warnWillFinished != null">
+                and da.warn_will_finished = #{query.warnWillFinished}
+            </if>
 
-        <if test="query.warnAnalgesicPoor != null">
-            and da.warn_analgesic_poor = #{query.warnAnalgesicPoor}
-        </if>
-        <if test="query.warnLowBattery != null">
-            and da.warn_low_battery = #{query.warnLowBattery}
-        </if>
-        <if test="query.warnFlow != null">
-            and da.warn_flow = #{query.warnFlow}
-        </if>
+            <if test="query.warnAnalgesicPoor != null">
+                and da.warn_analgesic_poor = #{query.warnAnalgesicPoor}
+            </if>
+            <if test="query.warnLowBattery != null">
+                and da.warn_low_battery = #{query.warnLowBattery}
+            </if>
+            <if test="query.warnFlow != null">
+                and da.warn_flow = #{query.warnFlow}
+            </if>
+        </where>
         GROUP BY
         da.device_id
     </select>

+ 7 - 4
nb-system/src/main/resources/mapper/bus/BusInfusionHistoryMapper.xml

@@ -248,10 +248,6 @@
         ) as i
         JOIN (select * from bus_clinic
         <where>
-            <if test="query.patientCode != null">
-                and patient_code like concat('%',#{query.patientCode},'%')
-            </if>
-
             <if test="query.patientName != null">
                 and patient_name like concat('%',#{query.patientName},'%')
             </if>
@@ -320,6 +316,13 @@
         </where>
         ) as c
         on i.clinic_id=c.id
+        join (select * from bus_patient
+        <where>
+            <if test="query.patientCode != null">
+                and patient_code like concat('%',#{query.patientCode},'%')
+            </if>
+        </where>
+        ) as p on p.id = c.patient_id
         <if test="(query.orderByDesc!=null and query.orderByDesc.size > 0) or (query.orderByAsc!=null and query.orderByAsc.size > 0)">
             order by
         </if>

+ 8 - 4
nb-system/src/main/resources/mapper/bus/BusPatientMapper.xml

@@ -77,6 +77,7 @@
         <result column="monitor_end_time" property="monitorEndTime"/>
         <result column="monitor_start_time" property="monitorStartTime"/>
         <result column="eval_time" property="evalTime"/>
+        <result column="patient_id" property="patientId"/>
     </resultMap>
 
     <resultMap id="deviceNone" type="com.coffee.bus.service.dto.PatientDeviceNoneResult">
@@ -150,6 +151,7 @@
 
     <select id="selectMonitor" resultMap="monitorResult" parameterType="com.coffee.bus.service.dto.PatientMonitorQuery">
         select
+        p.id as patient_id,
         p.`code` as patient_code,
         p.alarm as patient_alarm,
         i.id as infusion_id,
@@ -335,8 +337,9 @@
     </select>
 
 
-    <select id="findByPatientCode" resultMap="monitorResult">
+    <select id="findByPatientId" resultMap="monitorResult">
         select
+        p.id as patient_id,
         p.alarm as patient_alarm,
         p.`code` as patient_code,
         i.device_id as device_id,
@@ -395,8 +398,8 @@
             <if test="tenantId!=null">
                 and tenant_id=#{tenantId}
             </if>
-            <if test="patientCode!=null">
-                and code=#{patientCode}
+            <if test="patientId!=null">
+                and id=#{patientId}
             </if>
         </where>
         )
@@ -424,7 +427,8 @@
                 and tenant_id=#{tenantId}
             </if>
         </where>
-        ) as c on p.code=c.patient_code
+        ) as c on p.id=c.patient_id
+--         ) as c on p.code=c.patient_code
         <where>
             <if test="alarmValue!=null">
                 and p.alarm=#{alarmValue}