Selaa lähdekoodia

update 枚举类改为MybatisEnumTypeHandler

18339543638 3 vuotta sitten
vanhempi
commit
a9aaa138b5
38 muutettua tiedostoa jossa 355 lisäystä ja 236 poistoa
  1. 2 1
      coffee-admin/src/main/resources/application.yml
  2. 2 2
      coffee-common/src/main/java/com/coffee/common/crud/BaseService.java
  3. 6 4
      coffee-common/src/main/java/com/coffee/common/enums/SexEnum.java
  4. 5 5
      coffee-framework/src/main/java/com/coffee/framework/config/WebAppMvcConfig.java
  5. 11 2
      coffee-system/src/main/java/com/coffee/bus/controller/BusDeviceRunningController.java
  6. 7 3
      coffee-system/src/main/java/com/coffee/bus/entity/BusClinicEntity.java
  7. 0 1
      coffee-system/src/main/java/com/coffee/bus/entity/BusConAlarmEntity.java
  8. 0 1
      coffee-system/src/main/java/com/coffee/bus/entity/BusConMixEntity.java
  9. 0 3
      coffee-system/src/main/java/com/coffee/bus/entity/BusDeviceAlarmEntity.java
  10. 4 5
      coffee-system/src/main/java/com/coffee/bus/entity/BusDeviceEntity.java
  11. 3 5
      coffee-system/src/main/java/com/coffee/bus/entity/BusDeviceHistoryEntity.java
  12. 2 3
      coffee-system/src/main/java/com/coffee/bus/entity/BusDeviceRunningEntity.java
  13. 0 1
      coffee-system/src/main/java/com/coffee/bus/entity/BusHospitalConfigEntity.java
  14. 0 1
      coffee-system/src/main/java/com/coffee/bus/entity/BusHospitalLogEntity.java
  15. 3 4
      coffee-system/src/main/java/com/coffee/bus/entity/BusInfusionHistoryEntity.java
  16. 1 3
      coffee-system/src/main/java/com/coffee/bus/entity/BusInfusionModifyEntity.java
  17. 4 2
      coffee-system/src/main/java/com/coffee/bus/entity/BusPatientEntity.java
  18. 3 2
      coffee-system/src/main/java/com/coffee/bus/enums/ConfigEnum.java
  19. 8 4
      coffee-system/src/main/java/com/coffee/bus/enums/ConstantEnum.java
  20. 3 2
      coffee-system/src/main/java/com/coffee/bus/enums/ConstantMixEnum.java
  21. 3 5
      coffee-system/src/main/java/com/coffee/bus/enums/DeviceAlarmEnum.java
  22. 3 2
      coffee-system/src/main/java/com/coffee/bus/enums/DeviceEnum.java
  23. 3 2
      coffee-system/src/main/java/com/coffee/bus/enums/DeviceStatusEnum.java
  24. 0 40
      coffee-system/src/main/java/com/coffee/bus/enums/DeviceWarnEnum.java
  25. 0 18
      coffee-system/src/main/java/com/coffee/bus/enums/EvalEnum.java
  26. 7 4
      coffee-system/src/main/java/com/coffee/bus/enums/HospitalLogEnum.java
  27. 24 0
      coffee-system/src/main/java/com/coffee/bus/enums/PatientAlarmEnum.java
  28. 2 2
      coffee-system/src/main/java/com/coffee/bus/mapper/BusClinicMapper.java
  29. 21 5
      coffee-system/src/main/java/com/coffee/bus/registry/device/ClusterDeviceRegistry.java
  30. 14 3
      coffee-system/src/main/java/com/coffee/bus/registry/patient/ClusterPatientRegistry.java
  31. 23 1
      coffee-system/src/main/java/com/coffee/bus/service/LocalBusClinicService.java
  32. 47 27
      coffee-system/src/main/java/com/coffee/bus/service/LocalBusDeviceRunningService.java
  33. 0 45
      coffee-system/src/main/java/com/coffee/bus/service/LocalBusPatientService.java
  34. 46 0
      coffee-system/src/main/java/com/coffee/bus/service/dto/DeviceShiftConfig.java
  35. 38 0
      coffee-system/src/main/java/com/coffee/bus/service/dto/ManualUndoConfig.java
  36. 13 9
      coffee-system/src/main/java/com/coffee/bus/service/dto/UndoDeviceConfig.java
  37. 11 8
      coffee-system/src/main/java/com/coffee/bus/websocket/listener/DeviceInfoListener.java
  38. 36 11
      coffee-system/src/main/java/com/coffee/bus/websocket/listener/HisInfoListener.java

+ 2 - 1
coffee-admin/src/main/resources/application.yml

@@ -64,7 +64,8 @@ mybatis-plus:
     dbConfig:
       idType: ASSIGN_ID
   configuration:
-    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+    log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
+    default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
 
 # 阿里云对接配置
 aliyun:

+ 2 - 2
coffee-common/src/main/java/com/coffee/common/crud/BaseService.java

@@ -257,10 +257,10 @@ public abstract class BaseService<M extends BaseMapper<E>, E,PK extends Serializ
 //        else {
 //            queryWrapper.orderByDesc("create_time");
 //        }
-        if(!StrUtil.isNotEmpty(param.getTenantId())&&!StrUtil.isNullOrUndefined(param.getTenantId())){
+        if(StrUtil.isNotEmpty(param.getTenantId())&&!StrUtil.isNullOrUndefined(param.getTenantId())){
             LoginUser loginUser = (LoginUser) StpUtil.getTokenSession().get(com.coffee.common.Constants.LOGIN_USER_KEY);
             //是否为系统用户
-            if(loginUser!=null&&loginUser.getIsSys()!=null&&loginUser.getIsSys()){
+            if(loginUser!=null&&Boolean.TRUE.equals(loginUser.getIsSys())){
                 queryWrapper.eq("tenant_id",param.getTenantId());
             }
         }

+ 6 - 4
coffee-common/src/main/java/com/coffee/common/enums/SexEnum.java

@@ -1,5 +1,6 @@
 package com.coffee.common.enums;
 
+import com.baomidou.mybatisplus.annotation.IEnum;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
@@ -13,21 +14,22 @@ import lombok.Getter;
 @Getter
 @AllArgsConstructor
 @JsonFormat(shape = JsonFormat.Shape.OBJECT)
-public enum SexEnum {
+public enum SexEnum  implements IEnum<Integer> {
 
     /**
      * 男
      */
-    MAN("1", "男"),
+    MAN(1,"1", "男"),
     /**
      * 女
      */
-    WOMAN("2", "女"),
+    WOMAN(2,"2", "女"),
     /**
      * 未知
      */
-    UNKNOW("3", "未知");
+    UNKNOW(3,"3", "未知");
 
+    private Integer value;
     private String code;
     private String desc;
 

+ 5 - 5
coffee-framework/src/main/java/com/coffee/framework/config/WebAppMvcConfig.java

@@ -29,11 +29,11 @@ public class WebAppMvcConfig implements WebMvcConfigurer {
         MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
         ObjectMapper objectMapper = converter.getObjectMapper();
         // 生成JSON时,将所有Long转换成String
-        SimpleModule dateSimpleModule = new SimpleModule();
-        dateSimpleModule.addSerializer(Long.class, ToStringSerializer.instance);
-        dateSimpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
-
-        objectMapper.registerModule(dateSimpleModule);
+//        SimpleModule dateSimpleModule = new SimpleModule();
+//        dateSimpleModule.addSerializer(Long.class, ToStringSerializer.instance);
+//        dateSimpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
+//
+//        objectMapper.registerModule(dateSimpleModule);
         // 时间格式化
         objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
         objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));

+ 11 - 2
coffee-system/src/main/java/com/coffee/bus/controller/BusDeviceRunningController.java

@@ -6,7 +6,8 @@ import cn.dev33.satoken.stp.StpLogic;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.Mapper;
-import com.coffee.bus.controller.vo.ManualUndoConfig;
+import com.coffee.bus.service.dto.DeviceShiftConfig;
+import com.coffee.bus.service.dto.ManualUndoConfig;
 import com.coffee.bus.controller.vo.NoPumpConfig;
 import com.coffee.bus.entity.BusDeviceRunningEntity;
 import com.coffee.bus.enums.DeviceAlarmEnum;
@@ -72,12 +73,20 @@ public class BusDeviceRunningController implements BaseQueryController<BusDevice
 
     @PostMapping("/undo")
     @SaCheckPermission("device:running:undo")
-    @ApiOperation(value = "进行撤泵操作",notes = "在进行撤泵操作之前[{/count/clinic}],即【查询临床下泵的数量】接口,当出现泵重复状态时,提醒用户处理,权限标识为【device:running:undo】")
+    @ApiOperation(value = "进行临床撤泵操作",notes = "在进行撤泵操作之前[{/count/clinic}],即【查询临床下泵的数量】接口,当出现泵重复状态时,提醒用户处理,权限标识为【device:running:undo】")
     public R undo(@RequestBody ManualUndoConfig manualUndoConfig){
         netPumpService.undo(manualUndoConfig);
         return R.success();
     }
 
+    @PostMapping("/shift")
+    @SaCheckPermission("device:running:shift")
+    @ApiOperation(value = "进行主泵切换的操作",notes = "当出现泵重复状态时,若用户想要进行主泵的切换,调用该接口进行操作,权限标识为【device:running:shift】")
+    public R shift(@RequestBody DeviceShiftConfig shiftConfig){
+        netPumpService.shift(shiftConfig);
+        return R.success();
+    }
+
     /**
      * 权限控制前缀
      * @return

+ 7 - 3
coffee-system/src/main/java/com/coffee/bus/entity/BusClinicEntity.java

@@ -8,12 +8,12 @@ import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
 import com.coffee.bus.bean.HisInfo;
 import com.coffee.common.entity.TenantGenericEntity;
 import com.coffee.common.enums.SexEnum;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
-import org.apache.ibatis.type.EnumTypeHandler;
 import org.hibernate.validator.constraints.Length;
 import java.util.*;
 
@@ -50,7 +50,6 @@ public class BusClinicEntity extends TenantGenericEntity<String,String> {
     private String patientName;
 
     @ApiModelProperty(value = "患者性别")
-    @TableField(typeHandler = EnumTypeHandler.class)
     private SexEnum patientGender;
 
     @ApiModelProperty(value = "患者年龄")
@@ -97,7 +96,7 @@ public class BusClinicEntity extends TenantGenericEntity<String,String> {
     private String formula;
 
     @ApiModelProperty(value = "临床是否结束,0、未结束 1、结束 ")
-    private Integer finished;
+    private Boolean finished;
 
     @ApiModelProperty(value = "临床使用过的设备号")
     @TableField(typeHandler = FastjsonTypeHandler.class)
@@ -107,6 +106,11 @@ public class BusClinicEntity extends TenantGenericEntity<String,String> {
     @TableLogic(value = "0",delval = "1")
     private Integer isDelete;
 
+    //todo
+    @ApiModelProperty(value = "监护类型,1、有泵监护 0、无泵监护")
+    @JsonIgnoreProperties
+    private Boolean monitorType;
+
     public static BusClinicEntity of(HisInfo hisInfo){
         BusClinicEntity clinic = new BusClinicEntity();
         clinic.setTenantId(hisInfo.getHospitalId());

+ 0 - 1
coffee-system/src/main/java/com/coffee/bus/entity/BusConAlarmEntity.java

@@ -37,6 +37,5 @@ public class BusConAlarmEntity extends TenantGenericEntity<String,String> {
     private String remark;
 
     @ApiModelProperty(value = "报警类型",example = "ward,surgery,asa,anaesthesia,anal,drugCate,entrust")
-    @TableField(javaType = true,typeHandler = EnumTypeHandler.class)
     private DeviceAlarmEnum type;
 }

+ 0 - 1
coffee-system/src/main/java/com/coffee/bus/entity/BusConMixEntity.java

@@ -35,6 +35,5 @@ public class BusConMixEntity extends TenantGenericEntity<String,String> {
     private String remark;
 
     @ApiModelProperty(value = "混合常量类型",example = "ward,surgery,asa,anaesthesia,anal,drugCate,entrust")
-    @TableField(javaType = true,typeHandler = EnumTypeHandler.class)
     private ConstantMixEnum type;
 }

+ 0 - 3
coffee-system/src/main/java/com/coffee/bus/entity/BusDeviceAlarmEntity.java

@@ -1,6 +1,5 @@
 package com.coffee.bus.entity;
 
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.coffee.bus.enums.DeviceAlarmEnum;
 import com.coffee.common.entity.TenantGenericEntity;
@@ -10,7 +9,6 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
-import org.apache.ibatis.type.EnumTypeHandler;
 import java.util.Date;
 
 /**
@@ -31,7 +29,6 @@ public class BusDeviceAlarmEntity extends TenantGenericEntity<String,String> {
     private String deviceId;
 
     @ApiModelProperty(value = "报警信息")
-    @TableField(typeHandler = EnumTypeHandler.class)
     private DeviceAlarmEnum alarm;
 
     @ApiModelProperty(value = "报警时间")

+ 4 - 5
coffee-system/src/main/java/com/coffee/bus/entity/BusDeviceEntity.java

@@ -4,8 +4,8 @@ import com.baomidou.mybatisplus.annotation.*;
 import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
 import com.coffee.bus.bean.AliIotConfig;
 import com.coffee.bus.enums.DeviceAlarmEnum;
+import com.coffee.bus.enums.DeviceEnum;
 import com.coffee.bus.enums.DeviceStatusEnum;
-import com.coffee.common.config.mybatis.DateToBigIntHandler;
 import com.coffee.common.entity.RecordCreationEntity;
 import com.coffee.common.entity.RecordModifierEntity;
 import com.coffee.common.entity.TenantGenericEntity;
@@ -14,7 +14,6 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
-import org.apache.ibatis.type.EnumTypeHandler;
 import org.hibernate.validator.constraints.Length;
 
 import java.util.Date;
@@ -43,14 +42,14 @@ public class BusDeviceEntity extends TenantGenericEntity<String,String> implemen
 
     @ApiModelProperty(value = "设备类型")
     @Length(max = 255,message = "设备类型不得超过255个字符")
-    private String type;
+    private DeviceEnum type;
 
     @ApiModelProperty(value = "运行状态",readOnly = true)
-    @TableField(typeHandler = EnumTypeHandler.class,javaType = true,updateStrategy = FieldStrategy.IGNORED)
+    @TableField(javaType = true,updateStrategy = FieldStrategy.IGNORED)
     private DeviceStatusEnum runState;
 
     @ApiModelProperty(value = "报警信息",readOnly = true)
-    @TableField(typeHandler = EnumTypeHandler.class,javaType = true,updateStrategy = FieldStrategy.IGNORED)
+    @TableField(javaType = true,updateStrategy = FieldStrategy.IGNORED)
     private DeviceAlarmEnum alarm;
 
     @ApiModelProperty(value = "第三方平台返回配置")

+ 3 - 5
coffee-system/src/main/java/com/coffee/bus/entity/BusDeviceHistoryEntity.java

@@ -13,8 +13,6 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
-import org.apache.ibatis.type.EnumTypeHandler;
-
 import javax.validation.constraints.DecimalMax;
 import javax.validation.constraints.DecimalMin;
 import javax.validation.constraints.Max;
@@ -149,11 +147,11 @@ public class BusDeviceHistoryEntity extends TenantGenericEntity<String,String> {
 
 
     @ApiModelProperty(value = "泵运行状态",readOnly = true)
-    @TableField(typeHandler = EnumTypeHandler.class,javaType = true,updateStrategy = FieldStrategy.IGNORED)
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private DeviceStatusEnum runState;
 
     @ApiModelProperty(value = "报警信息",readOnly = true)
-    @TableField(typeHandler = EnumTypeHandler.class,javaType = true,updateStrategy = FieldStrategy.IGNORED)
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private DeviceAlarmEnum alarm;
 
     @ApiModelProperty(value = "报警原因")
@@ -181,7 +179,7 @@ public class BusDeviceHistoryEntity extends TenantGenericEntity<String,String> {
     private String classification;
 
     @ApiModelProperty(value = "泵类型",readOnly = true)
-    @TableField(typeHandler = EnumTypeHandler.class,javaType = true,updateStrategy = FieldStrategy.NEVER)
+    @TableField(updateStrategy = FieldStrategy.NEVER)
     private DeviceEnum type;
 
     @ApiModelProperty(value = "数据上传时间",readOnly = true,hidden = true)

+ 2 - 3
coffee-system/src/main/java/com/coffee/bus/entity/BusDeviceRunningEntity.java

@@ -58,7 +58,6 @@ public class BusDeviceRunningEntity extends TenantGenericEntity<String,String> {
     private String patientName;
 
     @ApiModelProperty(value = "病人性别")
-    @TableField(typeHandler = EnumTypeHandler.class,javaType = true)
     private SexEnum patientSex;
 
     @ApiModelProperty(value = "病区")
@@ -118,7 +117,7 @@ public class BusDeviceRunningEntity extends TenantGenericEntity<String,String> {
     @ApiModelProperty(value = "公共参数-pca总按次数",readOnly = true)
     private Integer pcaTotalCount;
 
-    @ApiModelProperty(value = "持续泵参数-持续量",readOnly = true)
+    @ApiModelProperty(value = "公共参数-持续量(流速)",readOnly = true)
     @DecimalMax(value = "50",message = "持续给液量最大值不得超过50")
     @DecimalMin(value = "0",message ="持续给液量最小值不得超过0" )
     private BigDecimal continueDose;
@@ -197,7 +196,7 @@ public class BusDeviceRunningEntity extends TenantGenericEntity<String,String> {
     private String remark;
 
     @ApiModelProperty(value = "监护类型,1、有泵监护 0、无泵监护")
-    @JsonIgnoreProperties(allowSetters = true)
+    @JsonIgnoreProperties
     private Boolean monitorType;
 
     @ApiModelProperty(value = "是否为主泵数据, 0、副泵 1、主泵(即当前临床绑定的泵)")

+ 0 - 1
coffee-system/src/main/java/com/coffee/bus/entity/BusHospitalConfigEntity.java

@@ -30,7 +30,6 @@ import java.util.Map;
 public class BusHospitalConfigEntity extends TenantGenericEntity<String,String> implements RecordModifierEntity, RecordCreationEntity {
 
 
-    @TableField(typeHandler = EnumTypeHandler.class,javaType = true)
     @ApiModelProperty(value = "配置类型",example = "eval:评价配置,other:其他设置,undo:撤泵配置",allowableValues = "eval:评价配置,other:其他设置,undo:撤泵配置")
     private ConfigEnum type;
 

+ 0 - 1
coffee-system/src/main/java/com/coffee/bus/entity/BusHospitalLogEntity.java

@@ -31,7 +31,6 @@ public class BusHospitalLogEntity extends TenantGenericEntity<String,String> {
     @ApiModelProperty(value = "医院数据接收时间")
     private Date receiveTime;
 
-    @TableField(typeHandler = EnumTypeHandler.class)
     @ApiModelProperty(value = "医院数据类型,0、心跳 1、病人信息")
     private HospitalLogEnum  type;
 

+ 3 - 4
coffee-system/src/main/java/com/coffee/bus/entity/BusInfusionHistoryEntity.java

@@ -12,7 +12,6 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
 import lombok.experimental.Accessors;
-import org.apache.ibatis.type.EnumTypeHandler;
 import javax.validation.constraints.DecimalMax;
 import javax.validation.constraints.DecimalMin;
 import javax.validation.constraints.Max;
@@ -150,11 +149,11 @@ public class BusInfusionHistoryEntity extends TenantGenericEntity<String,String>
 
 
     @ApiModelProperty(value = "泵运行状态",readOnly = true)
-    @TableField(typeHandler = EnumTypeHandler.class,javaType = true,updateStrategy = FieldStrategy.IGNORED)
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private DeviceStatusEnum runState;
 
     @ApiModelProperty(value = "报警信息",readOnly = true)
-    @TableField(typeHandler = EnumTypeHandler.class,javaType = true,updateStrategy = FieldStrategy.IGNORED)
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private DeviceAlarmEnum alarm;
 
     @ApiModelProperty(value = "输注即将结束提醒",readOnly = true)
@@ -181,7 +180,7 @@ public class BusInfusionHistoryEntity extends TenantGenericEntity<String,String>
     private String classification;
 
     @ApiModelProperty(value = "泵类型",readOnly = true)
-    @TableField(typeHandler = EnumTypeHandler.class,javaType = true,updateStrategy = FieldStrategy.NEVER)
+    @TableField(updateStrategy = FieldStrategy.NEVER)
     private DeviceEnum type;
 
     @ApiModelProperty(value = "当前输注记录数据最后上传时间",readOnly = true,hidden = true)

+ 1 - 3
coffee-system/src/main/java/com/coffee/bus/entity/BusInfusionModifyEntity.java

@@ -13,7 +13,6 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
 import lombok.experimental.Accessors;
-import org.apache.ibatis.type.EnumTypeHandler;
 
 import javax.validation.constraints.DecimalMax;
 import javax.validation.constraints.DecimalMin;
@@ -21,7 +20,6 @@ import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import java.math.BigDecimal;
 import java.util.Date;
-import java.util.Map;
 
 /**
  * @author 龙三郎
@@ -47,7 +45,7 @@ public class BusInfusionModifyEntity extends TenantGenericEntity<String,String>
     private String clinicId;
 
     @ApiModelProperty(value = "泵类型",readOnly = true)
-    @TableField(typeHandler = EnumTypeHandler.class,javaType = true,updateStrategy = FieldStrategy.NEVER)
+    @TableField(updateStrategy = FieldStrategy.NEVER)
     private DeviceEnum type;
 
     @ApiModelProperty(value = "总量",readOnly = true)

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

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.coffee.bus.bean.HisInfo;
+import com.coffee.bus.enums.PatientAlarmEnum;
 import com.coffee.common.entity.TenantGenericEntity;
 import com.coffee.common.enums.SexEnum;
 import io.swagger.annotations.ApiModel;
@@ -12,7 +13,6 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
-import org.apache.ibatis.type.EnumTypeHandler;
 import org.hibernate.validator.constraints.Length;
 
 /**
@@ -36,7 +36,6 @@ public class BusPatientEntity extends TenantGenericEntity<String,String> {
     @Length(max = 255,message = "医生岗位长度不得超过255个字节")
     private String name;
 
-    @TableField(typeHandler = EnumTypeHandler.class)
     @ApiModelProperty(value = "性别")
     private SexEnum gender;
 
@@ -44,6 +43,9 @@ public class BusPatientEntity extends TenantGenericEntity<String,String> {
     @TableLogic(value = "0",delval = "1")
     private Integer isDelete;
 
+    @ApiModelProperty(value = "病人报警信息",example = "泵重复,无泵")
+    private PatientAlarmEnum alarm;
+
     public static BusPatientEntity of(HisInfo hisInfo){
         BusPatientEntity patient = new BusPatientEntity();
         patient.setCode(hisInfo.getPatientCode());

+ 3 - 2
coffee-system/src/main/java/com/coffee/bus/enums/ConfigEnum.java

@@ -1,5 +1,6 @@
 package com.coffee.bus.enums;
 
+import com.baomidou.mybatisplus.annotation.IEnum;
 import com.coffee.bus.bean.config.EvalConfig;
 import com.coffee.bus.bean.config.OtherConfig;
 import com.coffee.bus.bean.config.UndoConfig;
@@ -15,12 +16,12 @@ import lombok.Getter;
  */
 @Getter
 @AllArgsConstructor
-public enum  ConfigEnum {
+public enum  ConfigEnum implements IEnum<Integer> {
     undo(0,"撤泵配置", UndoConfig.class),
     eval(1,"评价配置", EvalConfig.class),
     other(2,"其他配置", OtherConfig.class);
 
-    private Integer code;
+    private Integer value;
     private String text;
     private Class configClass;
 }

+ 8 - 4
coffee-system/src/main/java/com/coffee/bus/enums/ConstantEnum.java

@@ -1,9 +1,11 @@
 package com.coffee.bus.enums;
 
+import com.baomidou.mybatisplus.annotation.IEnum;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
+import lombok.Getter;
 
 /**
  * @author lifang
@@ -15,11 +17,13 @@ import lombok.AllArgsConstructor;
 @JsonFormat(shape = JsonFormat.Shape.OBJECT)
 @ApiModel("常量类型")
 @AllArgsConstructor
-public enum  ConstantEnum {
+public enum  ConstantEnum implements IEnum<Integer> {
     @ApiModelProperty("混合常量")
-    mix,
+    mix(0),
     @ApiModelProperty("医护人员")
-    doctor,
+    doctor(1),
     @ApiModelProperty("报警原因")
-    alarm
+    alarm(2);
+    @Getter
+    private Integer value;
 }

+ 3 - 2
coffee-system/src/main/java/com/coffee/bus/enums/ConstantMixEnum.java

@@ -1,5 +1,6 @@
 package com.coffee.bus.enums;
 
+import com.baomidou.mybatisplus.annotation.IEnum;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -17,7 +18,7 @@ import lombok.Getter;
 @ApiModel("混合常量类型")
 @AllArgsConstructor
 @Getter
-public enum ConstantMixEnum {
+public enum ConstantMixEnum  implements IEnum<Integer> {
     @ApiModelProperty("病区")
     ward(0,"病区"),
     @ApiModelProperty("手术名称")
@@ -33,6 +34,6 @@ public enum ConstantMixEnum {
     @ApiModelProperty("医嘱")
     entrust(6,"医嘱");
 
-    private Integer code;
+    private Integer value;
     private String text;
 }

+ 3 - 5
coffee-system/src/main/java/com/coffee/bus/enums/DeviceAlarmEnum.java

@@ -1,5 +1,6 @@
 package com.coffee.bus.enums;
 
+import com.baomidou.mybatisplus.annotation.IEnum;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -14,7 +15,7 @@ import lombok.Getter;
  */
 @AllArgsConstructor
 @JsonFormat(shape = JsonFormat.Shape.OBJECT)
-public enum DeviceAlarmEnum {
+public enum DeviceAlarmEnum  implements IEnum<Integer> {
     /**
      * 请在添加或修改的过程中不要改变枚举的顺序!!!!!!!!!!!!!!!
      * 如若新增,请在最后尾部新增
@@ -33,12 +34,9 @@ public enum DeviceAlarmEnum {
     OutOfControl(9,"电机失控报警");
 
 
-    /**
-     * 与枚举ordinal保持一致
-     */
     @Getter
     @ApiModelProperty("报警编码")
-    private Integer code;
+    private Integer value;
     @Getter
     @ApiModelProperty("报警内容")
     private String text;

+ 3 - 2
coffee-system/src/main/java/com/coffee/bus/enums/DeviceEnum.java

@@ -1,5 +1,6 @@
 package com.coffee.bus.enums;
 
+import com.baomidou.mybatisplus.annotation.IEnum;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -14,14 +15,14 @@ import lombok.Getter;
  */
 @AllArgsConstructor
 @JsonFormat(shape = JsonFormat.Shape.OBJECT)
-public enum  DeviceEnum {
+public enum  DeviceEnum implements IEnum<Integer> {
     continuous(0,"持续型网络泵"),
     intelligent(1,"智能泵"),
     pulse(2,"脉冲泵");
 
     @Getter
     @ApiModelProperty("设备编码")
-    private Integer code;
+    private Integer value;
 
     @Getter
     @ApiModelProperty("设备名称")

+ 3 - 2
coffee-system/src/main/java/com/coffee/bus/enums/DeviceStatusEnum.java

@@ -1,5 +1,6 @@
 package com.coffee.bus.enums;
 
+import com.baomidou.mybatisplus.annotation.IEnum;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiOperation;
@@ -16,7 +17,7 @@ import lombok.Setter;
  */
 @AllArgsConstructor
 @JsonFormat(shape = JsonFormat.Shape.OBJECT)
-public enum DeviceStatusEnum {
+public enum DeviceStatusEnum  implements IEnum<Integer> {
     /**
      * 请在添加或修改的过程中不要改变枚举的顺序!!!!!!!!!!!!!!!
      * 如若新增,请在最后尾部新增
@@ -32,7 +33,7 @@ public enum DeviceStatusEnum {
      */
     @Getter
     @ApiModelProperty("运行状态编码")
-    private Integer code;
+    private Integer value;
     @Getter
     @ApiModelProperty("运行状态内容")
     private String text;

+ 0 - 40
coffee-system/src/main/java/com/coffee/bus/enums/DeviceWarnEnum.java

@@ -1,40 +0,0 @@
-package com.coffee.bus.enums;
-
-import com.alibaba.fastjson.annotation.JSONType;
-import com.fasterxml.jackson.annotation.*;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * @author lifang
- * @version 1.0.0
- * @ClassName AlarmEnum.java
- * @Description 泵报警类型
- * @createTime 2022年03月27日 09:49:00
- */
-@AllArgsConstructor
-@JsonFormat(shape = JsonFormat.Shape.OBJECT)
-public enum DeviceWarnEnum {
-    /**
-     * 请在添加或修改的过程中不要改变枚举的顺序!!!!!!!!!!!!!!!
-     * 如若新增,请在最后尾部新增
-     * 切记不可删除!!!!!!!!!!!!
-     */
-    UpLimit(0,"加档受限"),
-    ComingEnd(1,"即将输液完毕"),
-    LowInfusion(2,"低输注状态"),
-    LowBattery(3,"电量不足"),
-    FlowRateLimit(4,"流速已达上限"),
-    InsufficientAnalgesia(5,"镇痛不足");
-
-
-    /**
-     * 与枚举ordinal保持一致
-     */
-    @Getter
-    private Integer code;
-    @Getter
-    private String text;
-
-}

+ 0 - 18
coffee-system/src/main/java/com/coffee/bus/enums/EvalEnum.java

@@ -1,18 +0,0 @@
-package com.coffee.bus.enums;
-
-/**
- * @author lifang
- * @version 1.0.0
- * @ClassName EvalType.java
- * @Description 评价类型
- * @createTime 2022年03月22日 11:22:00
- */
-public enum EvalEnum {
-    String,
-    Integer,
-    Enum,
-    Boolean;
-
-    Class<?> aClass;
-
-}

+ 7 - 4
coffee-system/src/main/java/com/coffee/bus/enums/HospitalLogEnum.java

@@ -1,5 +1,6 @@
 package com.coffee.bus.enums;
 
+import com.baomidou.mybatisplus.annotation.IEnum;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 
@@ -11,12 +12,14 @@ import lombok.Getter;
  * @createTime 2022年03月21日 11:26:00
  */
 @AllArgsConstructor
-public enum HospitalLogEnum{
-    HEART("心跳信息"),
-    PATIENT("病人信息");
+@Getter
+public enum HospitalLogEnum  implements IEnum<Integer> {
+    HEART(0,"心跳信息"),
+    PATIENT(1,"病人信息");
 
+    private Integer value;
     @Getter
-    private String value;
+    private String text;
 
 
 }

+ 24 - 0
coffee-system/src/main/java/com/coffee/bus/enums/PatientAlarmEnum.java

@@ -0,0 +1,24 @@
+package com.coffee.bus.enums;
+
+import com.baomidou.mybatisplus.annotation.IEnum;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName PatientAlarmEnum.java
+ * @Description TODO
+ * @createTime 2022年04月18日 11:06:00
+ */
+@AllArgsConstructor
+@JsonFormat(shape = JsonFormat.Shape.OBJECT)
+@Getter
+public enum PatientAlarmEnum implements IEnum<Integer> {
+    DEVICE_REPEAT(1,"病人绑定多个设备"),
+    DEVICE_NONE(2,"病人未绑定设备");
+
+    private Integer value;
+    private String text;
+}

+ 2 - 2
coffee-system/src/main/java/com/coffee/bus/mapper/BusClinicMapper.java

@@ -18,11 +18,11 @@ import org.apache.ibatis.annotations.Select;
 public interface BusClinicMapper extends BaseMapper<BusClinicEntity> {
 
     /**
-     * 获取当前病号信息
+     * 获取病号最近一场手术信息
      * @param hospitalId
      * @param patientCode
      * @return
      */
     @Select("select * from bus_clinic where tenant_id=#{hospitalId} and patient_code=#{patientCode} order by start_time DESC limit 0,1")
-    BusClinicEntity getCurrentClinic(@Param("hospitalId") String hospitalId,@Param("patientCode") String patientCode);
+    BusClinicEntity recentClinic(@Param("hospitalId") String hospitalId,@Param("patientCode") String patientCode);
 }

+ 21 - 5
coffee-system/src/main/java/com/coffee/bus/registry/device/ClusterDeviceRegistry.java

@@ -5,10 +5,13 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.coffee.bus.entity.BusDeviceEntity;
 import com.coffee.bus.entity.BusDeviceRunningEntity;
+import com.coffee.bus.entity.BusInfusionModifyEntity;
 import com.coffee.bus.registry.RegistryConstant;
 import com.coffee.bus.registry.device.bean.DeviceCacheInfo;
 import com.coffee.bus.service.LocalBusDeviceService;
 import com.coffee.bus.service.LocalBusDeviceRunningService;
+import com.coffee.bus.service.LocalBusInfusionModifyService;
+import com.coffee.bus.websocket.listener.DeviceInfoListener;
 import com.coffee.common.cache.manager.ClusterConfigStorageManager;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
@@ -26,7 +29,7 @@ public class ClusterDeviceRegistry implements DeviceRegistry {
     private final LocalBusDeviceRunningService pumpService;
     private final LocalBusDeviceService deviceService;
     private final ClusterConfigStorageManager configStorageManager;
-
+    private final LocalBusInfusionModifyService infusionModifyService;
     @Override
     public DeviceOperator<DeviceCacheInfo> getOperator(String deviceId) {
         if(StrUtil.isEmpty(deviceId)){
@@ -36,7 +39,7 @@ public class ClusterDeviceRegistry implements DeviceRegistry {
         ClusterDeviceOperator deviceOperator = new ClusterDeviceOperator( configStorageManager.getStorage(key));
         if(StrUtil.isNullOrUndefined(deviceOperator.getDeviceId())){
             //从数据库中获取数据
-            BusDeviceRunningEntity pump = pumpService.getOne(new QueryWrapper<BusDeviceRunningEntity>().lambda().eq(BusDeviceRunningEntity::getDeviceId, deviceId));
+            BusDeviceRunningEntity runningInfo = pumpService.getOne(new QueryWrapper<BusDeviceRunningEntity>().lambda().eq(BusDeviceRunningEntity::getDeviceId, deviceId));
             BusDeviceEntity device = deviceService.getOne(new QueryWrapper<BusDeviceEntity>().lambda()
                     .eq(BusDeviceEntity::getDeviceId, deviceId));
             if(device==null){
@@ -46,12 +49,25 @@ public class ClusterDeviceRegistry implements DeviceRegistry {
             deviceOperator.setEnable(device.getEnable());
             deviceOperator.setDeviceId(deviceId);
             deviceOperator.setTenantId(device.getTenantId());
-            if(pump==null){
+            if(runningInfo==null){
                 deviceOperator.setAlias(device.getAlias());
             }else {
-                deviceOperator.setUsingId(pump.getId());
+                deviceOperator.setUsingId(runningInfo.getId());
+                deviceOperator.setClassification(runningInfo.getClassification());
+                deviceOperator.setAlarm(runningInfo.getAlarm());
+                deviceOperator.setAlias(runningInfo.getAlias());
+                if(StrUtil.isNotEmpty(runningInfo.getInfusionId())){
+                    deviceOperator.setInfusionId(runningInfo.getInfusionId());
+                    BusInfusionModifyEntity infusionModify = infusionModifyService.getOne(new QueryWrapper<BusInfusionModifyEntity>().lambda().eq(BusInfusionModifyEntity::getInfusionId, runningInfo.getInfusionId()).orderByDesc(BusInfusionModifyEntity::getModifyTime).last("LIMIT 1"));
+                    if(infusionModify!=null){
+                        deviceOperator.setInfusionParam(infusionModify.signParam(DeviceInfoListener.sign));
+                    }
+                }
+                deviceOperator.setMaster(runningInfo.getMaster());
+                deviceOperator.setStartTime(runningInfo.getStartTime());
+                deviceOperator.setStatus(runningInfo.getRunState());
                 //判断泵是否医院绑定发生变化
-                if(device.getTenantId().equals(pump.getTenantId())){
+                if(device.getTenantId().equals(runningInfo.getTenantId())){
                     pumpService.update(new UpdateWrapper<BusDeviceRunningEntity>().lambda()
                             .eq(BusDeviceRunningEntity::getDeviceId,deviceId).set(BusDeviceRunningEntity::getTenantId,device.getTenantId()));
                 }

+ 14 - 3
coffee-system/src/main/java/com/coffee/bus/registry/patient/ClusterPatientRegistry.java

@@ -3,9 +3,11 @@ package com.coffee.bus.registry.patient;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.coffee.bus.entity.BusClinicEntity;
 import com.coffee.bus.entity.BusPatientEntity;
 import com.coffee.bus.registry.RegistryConstant;
 import com.coffee.bus.registry.patient.bean.PatientCacheInfo;
+import com.coffee.bus.service.LocalBusClinicService;
 import com.coffee.bus.service.LocalBusPatientService;
 import com.coffee.common.cache.manager.ClusterConfigStorageManager;
 import com.coffee.common.cache.value.Value;
@@ -32,6 +34,7 @@ import java.util.Map;
 public class ClusterPatientRegistry implements PatientRegistry {
     private final LocalBusPatientService patientService;
     private final ClusterConfigStorageManager configStorageManager;
+    private final LocalBusClinicService clinicService;
     @Override
     @Transactional(rollbackFor = Exception.class)
     public PatientOperator<PatientCacheInfo> getOperator(String hospitalId, String patientCode) {
@@ -40,8 +43,8 @@ public class ClusterPatientRegistry implements PatientRegistry {
         }
         String key=getId()+hospitalId+":"+patientCode;
         ClusterPatientOperator patientOperator = new ClusterPatientOperator( configStorageManager.getStorage(key));
-        Map<String, Value> result = patientOperator.getAll();
-        if(result==null||result.size()==0){
+        String code = patientOperator.getCode();
+        if(StrUtil.isNullOrUndefined(code)){
             //将新数据存入数据库
             BusPatientEntity patient = null;
             patient = patientService.getOne(new QueryWrapper<BusPatientEntity>()
@@ -56,13 +59,21 @@ public class ClusterPatientRegistry implements PatientRegistry {
                     patientService.save(patient);
                 }catch (DuplicateKeyException e){
                     log.warn("病号重复插入,医院id:[{}],病号:[{}]",hospitalId,patientCode);
-                    return patientOperator;
                 }
             }
             patientOperator.setCode(patientCode);
             patientOperator.setTenantId(hospitalId);
             patientOperator.setName(patient.getName());
             patientOperator.setGender(patient.getGender());
+            BusClinicEntity clinic = clinicService.recentClinicByPatientCode(hospitalId, patientCode);
+            //不存在临床或临床已结束
+            if(clinic==null||Boolean.TRUE.equals(clinic.getFinished())){
+                clinicService.asyncFromHis(hospitalId,patientCode);
+            }else {
+                patientOperator.setWard(clinic.getWard());
+                patientOperator.setBedNo(clinic.getBedNo());
+                patientOperator.setClinicId(clinic.getId());
+            }
             //将临床数据拉入缓存,获取最新的临床信息 todo
         }
         return patientOperator;

+ 23 - 1
coffee-system/src/main/java/com/coffee/bus/service/LocalBusClinicService.java

@@ -9,6 +9,8 @@ import com.coffee.bus.registry.patient.bean.PatientCacheInfo;
 import com.coffee.common.crud.BaseService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -26,6 +28,7 @@ import java.util.Date;
 public class LocalBusClinicService extends BaseService<BusClinicMapper, BusClinicEntity,String> {
 
     @Autowired
+    @Lazy
     private PatientRegistry patientRegistry;
     @Override
     public void validateBeforeSave(BusClinicEntity entity) {
@@ -59,8 +62,27 @@ public class LocalBusClinicService extends BaseService<BusClinicMapper, BusClini
         .eq(BusClinicEntity::getFinished,false)
         .set(BusClinicEntity::getFinished,true)
         .set(BusClinicEntity::getEndTime,new Date()));
-        //更新病人缓存 todo
+        //更新病人缓存
         PatientOperator<PatientCacheInfo> patient = patientRegistry.getOperator(tenantId, patientCode);
         patient.setFinished(true);
     }
+
+    /**
+     * 找到该病号最近的一场手术
+     * @param hospitalId
+     * @param patientCode
+     */
+    public BusClinicEntity recentClinicByPatientCode(String hospitalId, String patientCode) {
+        return this.baseMapper.recentClinic(hospitalId,patientCode);
+    }
+
+    /**
+     * 从his同步病人数据-异步
+     * @param hospitalId
+     * @param patientCode
+     */
+    @Async
+    public void asyncFromHis(String hospitalId, String patientCode) {
+
+    }
 }

+ 47 - 27
coffee-system/src/main/java/com/coffee/bus/service/LocalBusDeviceRunningService.java

@@ -1,23 +1,25 @@
 package com.coffee.bus.service;
 
 import cn.hutool.core.collection.CollectionUtil;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.coffee.bus.controller.vo.ManualUndoConfig;
+import com.coffee.bus.registry.patient.PatientOperator;
+import com.coffee.bus.registry.patient.PatientRegistry;
+import com.coffee.bus.registry.patient.bean.DeviceTimeSmallInfo;
+import com.coffee.bus.registry.patient.bean.PatientCacheInfo;
+import com.coffee.bus.service.dto.UndoDeviceConfig;
+import com.coffee.bus.service.dto.DeviceShiftConfig;
+import com.coffee.bus.service.dto.ManualUndoConfig;
 import com.coffee.bus.entity.BusClinicEntity;
 import com.coffee.bus.entity.BusDeviceRunningEntity;
-import com.coffee.bus.entity.BusDeviceHistoryEntity;
 import com.coffee.bus.entity.BusInfusionHistoryEntity;
 import com.coffee.bus.mapper.BusDeviceRunningMapper;
 import com.coffee.common.crud.BaseService;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
 
-import java.util.Date;
+import java.util.Arrays;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -33,6 +35,7 @@ import java.util.stream.Collectors;
 public class LocalBusDeviceRunningService extends BaseService<BusDeviceRunningMapper, BusDeviceRunningEntity,String> {
     private final LocalBusClinicService clinicService;
     private final LocalBusInfusionHistoryService infusionHistoryService;
+    private final PatientRegistry patientRegistry;
     @Override
     public void validateBeforeSave(BusDeviceRunningEntity entity) {
 
@@ -48,15 +51,6 @@ public class LocalBusDeviceRunningService extends BaseService<BusDeviceRunningMa
 
     }
 
-    public boolean firstRegister(String deviceId){
-        return this.getOne(new QueryWrapper<BusDeviceRunningEntity>().lambda().eq(BusDeviceRunningEntity::getDeviceId,deviceId))!=null;
-    }
-
-
-    public BusDeviceRunningEntity getByDeviceId(String deviceId){
-        return this.getOne(new QueryWrapper<BusDeviceRunningEntity>().lambda().eq(BusDeviceRunningEntity::getDeviceId,deviceId));
-    }
-
     /**
      * 撤泵操作
      * @param manualUndoConfig
@@ -74,18 +68,22 @@ public class LocalBusDeviceRunningService extends BaseService<BusDeviceRunningMa
         }
         //对所有运行中的泵进行撤泵操作
         this.update(new UpdateWrapper<BusDeviceRunningEntity>().lambda().in(BusDeviceRunningEntity::getId,ids).set(BusDeviceRunningEntity::getIsUndo,true));
-
-        //输注结束,更新撤泵信息
-        Set<String> infusionIds = devices.stream().map(BusDeviceRunningEntity::getInfusionId).collect(Collectors.toSet());
-        infusionHistoryService.update(new UpdateWrapper<BusInfusionHistoryEntity>().lambda()
-                .in(BusInfusionHistoryEntity::getId,infusionIds)
-                .set(BusInfusionHistoryEntity::getUndoBy,manualUndoConfig.getUndoBy())
-                .set(BusInfusionHistoryEntity::getUndoTime,manualUndoConfig.getUndoTime())
-                .set(BusInfusionHistoryEntity::getDestroyer,manualUndoConfig.getDestroyer())
-                .set(BusInfusionHistoryEntity::getWitnesses,manualUndoConfig.getWitnesses()));
-
-        //结束撤泵设备所绑定的临床数据
-        devices.forEach(device->{ clinicService.finish(device.getPatientCode(),device.getTenantId()); });
+        //无泵监护,不需要监护输注数据
+        if(!Boolean.TRUE.equals(manualUndoConfig.getMonitorType())){
+            //输注结束,更新撤泵信息
+            Set<String> infusionIds = devices.stream().map(BusDeviceRunningEntity::getInfusionId).collect(Collectors.toSet());
+            UndoDeviceConfig undo = manualUndoConfig.getUndo();
+            infusionHistoryService.update(new UpdateWrapper<BusInfusionHistoryEntity>().lambda()
+                    .in(BusInfusionHistoryEntity::getId,infusionIds)
+                    .set(BusInfusionHistoryEntity::getUndoBy,undo.getUndoBy())
+                    .set(BusInfusionHistoryEntity::getUndoTime,undo.getUndoTime())
+                    .set(BusInfusionHistoryEntity::getDestroyer,undo.getDestroyer())
+                    .set(BusInfusionHistoryEntity::getWitnesses,undo.getWitnesses()));
+        }
+        if(!Boolean.TRUE.equals(manualUndoConfig.getShift())){
+            //不是泵切换操作,结束撤泵设备所绑定的临床数据
+            devices.forEach(device->{ clinicService.finish(device.getPatientCode(),device.getTenantId()); });
+        }
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -93,8 +91,30 @@ public class LocalBusDeviceRunningService extends BaseService<BusDeviceRunningMa
         this.update(new UpdateWrapper<BusDeviceRunningEntity>().lambda()
                 .in(BusDeviceRunningEntity::getDeviceId,deviceIds)
                 .set(BusDeviceRunningEntity::getClinicId,clinic.getId())
+                .set(BusDeviceRunningEntity::getPatientName,clinic.getPatientName())
                 .set(BusDeviceRunningEntity::getWard,clinic.getWard())
                 .set(BusDeviceRunningEntity::getPatientSex,clinic.getPatientGender())
                 .set(BusDeviceRunningEntity::getBedNo,clinic.getBedNo()));
     }
+
+    /**
+     * 切换主泵
+     * @param shiftConfig 切换配置
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void shift(DeviceShiftConfig shiftConfig) {
+        PatientOperator<PatientCacheInfo> operator = patientRegistry.getOperator(shiftConfig.getTenantId(), shiftConfig.getPatientCode());
+        List<String> replicaIds = shiftConfig.getReplicaIds();
+        if(CollectionUtil.isNotEmpty(replicaIds)){
+            ManualUndoConfig manualUndoConfig = new ManualUndoConfig();
+            manualUndoConfig.setIds(replicaIds);
+            manualUndoConfig.setMonitorType(true);
+            manualUndoConfig.setUndo(shiftConfig.getUndo());
+            manualUndoConfig.setShift(true);
+            //对副泵进行撤泵操作
+            undo(manualUndoConfig);
+        }
+        operator.setBindDeviceId(shiftConfig.getMasterId());
+        operator.setAllDevice(Arrays.asList(DeviceTimeSmallInfo.of(shiftConfig.getMasterId(),shiftConfig.getStartTime())));
+    }
 }

+ 0 - 45
coffee-system/src/main/java/com/coffee/bus/service/LocalBusPatientService.java

@@ -25,7 +25,6 @@ import java.util.Date;
 @AllArgsConstructor
 @Slf4j
 public class LocalBusPatientService extends BaseService<BusPatientMapper, BusPatientEntity,String> {
-    private final LocalBusDeviceRunningService netPumpService;
     @Override
     public void validateBeforeSave(BusPatientEntity entity) {
 
@@ -41,50 +40,6 @@ public class LocalBusPatientService extends BaseService<BusPatientMapper, BusPat
 
     }
 
-    public boolean exist(String patientCode,String hospitalId){
-        return this.getOne(new QueryWrapper<BusPatientEntity>().lambda().
-                eq(BusPatientEntity::getCode,patientCode).eq(BusPatientEntity::getTenantId,hospitalId))!=null;
-    }
-
-    public BusPatientEntity getByCode(String patientCode,String hospitalId){
-        return this.getOne(new QueryWrapper<BusPatientEntity>().lambda().
-                eq(BusPatientEntity::getCode,patientCode).eq(BusPatientEntity::getTenantId,hospitalId));
-    }
-
-    /**
-     * 校对该泵号所绑定病号是否需要发生换泵操作
-     * @param hospitalId 医院id
-     * @param patientCode 病人id
-     * @param checkDeviceId 需要核对的泵号
-     * @param checkStartTime 需要核对的泵的开始时间
-     * @return
-     */
-    public boolean isChangedDevice(String hospitalId, String patientCode, String checkDeviceId, Date checkStartTime){
-        BusDeviceRunningEntity existDevice = netPumpService
-                .getOne(new QueryWrapper<BusDeviceRunningEntity>().lambda().eq(BusDeviceRunningEntity::getTenantId, hospitalId)
-                        .eq(BusDeviceRunningEntity::getPatientCode, patientCode));
-        if(existDevice==null){
-            return true;
-        }
-        if (existDevice.getDeviceId().equals(checkDeviceId)) {
-            return false;
-        }
-        Date startTime = existDevice.getStartTime();
-        return checkStartTime.after(startTime);
-    }
-
-    /**
-     * 进行换泵操作
-     * @param  patientCode 病号
-     * @param hospitalId 医院id
-     * @param newDeviceId 现绑定泵id
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public void changePump(String hospitalId,String patientCode,String newDeviceId){
-        log.info("医院id:[{}],病号:[{}],进行换泵操作,现设备id:[{}]",patientCode,hospitalId,newDeviceId);
-        netPumpService.update(new UpdateWrapper<BusDeviceRunningEntity>().lambda().eq(BusDeviceRunningEntity::getPatientCode,patientCode).set(BusDeviceRunningEntity::getMaster,false));
-        netPumpService.update(new UpdateWrapper<BusDeviceRunningEntity>().lambda().eq(BusDeviceRunningEntity::getDeviceId,newDeviceId).set(BusDeviceRunningEntity::getMaster,true));
-    }
 
 
     /**

+ 46 - 0
coffee-system/src/main/java/com/coffee/bus/service/dto/DeviceShiftConfig.java

@@ -0,0 +1,46 @@
+package com.coffee.bus.service.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName ManualUndoConfig.java
+ * @Description TODO
+ * @createTime 2022年03月30日 08:31:00
+ */
+@Data
+@ApiModel("主副设备切换配置")
+public class DeviceShiftConfig {
+    @ApiModelProperty("副泵id集合")
+    private List<String> replicaIds;
+
+    @ApiModelProperty("主泵id")
+    @NotNull(message = "请选择一个泵作为此临床信息的主泵进行监控")
+    private String masterId;
+
+    @ApiModelProperty("主泵的开始时间")
+    @NotNull(message = "主泵的开始时间不能为空")
+    private Date startTime;
+
+
+    @ApiModelProperty("病号")
+    @NotNull(message = "病号不能为空")
+    private String patientCode;
+
+    @ApiModelProperty("医院id")
+    @NotNull(message = "医院id不能为空")
+    private String tenantId;
+
+    @ApiModelProperty("撤泵配置")
+    @NotNull(message = "撤泵信息不能为空")
+    private UndoDeviceConfig undo;
+
+
+}

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

@@ -0,0 +1,38 @@
+package com.coffee.bus.service.dto;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.*;
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName ManualUndoConfig.java
+ * @Description TODO
+ * @createTime 2022年03月30日 08:31:00
+ */
+@Data
+@ApiModel("手动撤泵配置")
+public class ManualUndoConfig {
+    @ApiModelProperty("进行撤泵的所有运行数据id")
+    private List<String> ids;
+
+    @ApiModelProperty("是否为有泵监护,0、无泵 1、有泵")
+    private Boolean monitorType;
+
+
+    @ApiModelProperty("撤泵配置")
+    @NotNull(message = "撤泵配置不能为空")
+    private UndoDeviceConfig undo;
+
+    /**
+     * 此参数仅用来表示该次撤泵是否为切换主泵的撤泵
+     * 1、若为切换主泵中撤掉多余的副泵,仅变化病人绑定泵状态,不结束临床
+     * 2、若撤掉临床全部的泵,则结束临床
+     */
+    @JsonIgnoreProperties
+    private Boolean shift;
+}

+ 13 - 9
coffee-system/src/main/java/com/coffee/bus/controller/vo/ManualUndoConfig.java → coffee-system/src/main/java/com/coffee/bus/service/dto/UndoDeviceConfig.java

@@ -1,31 +1,35 @@
-package com.coffee.bus.controller.vo;
+package com.coffee.bus.service.dto;
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import java.util.*;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
 /**
  * @author lifang
  * @version 1.0.0
- * @ClassName ManualUndoConfig.java
+ * @ClassName UndoDeviceConfig.java
  * @Description TODO
- * @createTime 2022年03月30日 08:31:00
+ * @createTime 2022年04月15日 15:03:00
  */
 @Data
-@ApiModel("手动撤泵配置")
-public class ManualUndoConfig {
-    @ApiModelProperty("进行撤泵的所有运行数据id")
-    private List<String> ids;
-
+@ApiModel("撤泵所填信息")
+public class UndoDeviceConfig {
     @ApiModelProperty("撤泵人")
+    @NotNull(message = "撤泵人不能为空")
     private String undoBy;
 
     @ApiModelProperty("撤泵时间")
+    @NotNull(message = "撤泵时间不能为空")
     private Date undoTime;
 
     @ApiModelProperty("销毁人")
+    @NotNull(message = "销毁人不能为空")
     private String destroyer;
 
     @ApiModelProperty("见证人")
+    @NotNull(message = "见证人不能为空")
     private String witnesses;
 }

+ 11 - 8
coffee-system/src/main/java/com/coffee/bus/websocket/listener/DeviceInfoListener.java

@@ -68,7 +68,7 @@ public class DeviceInfoListener {
 
     private final LocalBusInfusionModifyService infusionModifyService;
 
-    private final Sign sign = SignUtil.sign(SignAlgorithm.MD5withRSA);
+    public static final Sign sign = SignUtil.sign(SignAlgorithm.MD5withRSA);
 
     private final LocalBusDeviceHistoryService historyService;
     /**
@@ -105,7 +105,6 @@ public class DeviceInfoListener {
             }
             //处理病患数据,解决泵重复,无泵等问题
             handlePatient(device,cacheOperation);
-            //todo 绑定当前临床信息
             //更新/保存当前输注信息
             handleInfusionHistory(device,deviceOperator,newInfusion,cacheOperation);
             //处理输注参数
@@ -121,7 +120,7 @@ public class DeviceInfoListener {
                 deviceUsingService.updateById(device);
             }
             //医院相关配置处理
-            handleHospitalConfig(device);
+            handleHospitalConfig(device,cacheOperation);
             /****************处理泵与患者关系****************/
 
             //则推送设备上报消息
@@ -152,7 +151,6 @@ public class DeviceInfoListener {
         if(classification==null){
             log.error("设备号:[{}]分包标识号为空,无法更新开始时间");
             newInfusion.set(true);
-            classification="-1";
             throw new RuntimeException("设备数据中分包标识不能为空");
         }
         String usingId = deviceOperator.getUsingId();
@@ -363,11 +361,16 @@ public class DeviceInfoListener {
 
 
     /**
-     * 医院相关配置对于设备数据的处理 todo
+     * 医院相关配置对于设备数据的处理
      * @param device 设备运行数据
      */
-    private void handleHospitalConfig(BusDeviceRunningEntity device) {
-
+    private void handleHospitalConfig(BusDeviceRunningEntity device,List<Supplier<?>> cacheOperation) {
+        PatientOperator<PatientCacheInfo> patientOperator = patientRegistry.getOperator(device.getTenantId(), device.getPatientCode());
+        device.setPatientSex(patientOperator.getGender());
+        device.setClinicId(patientOperator.getClinicId());
+        device.setWard(patientOperator.getWard());
+        device.setBedNo(patientOperator.getBedNo());
+        device.setPatientName(patientOperator.getName());
     }
 
 
@@ -494,7 +497,7 @@ public class DeviceInfoListener {
         clinic.setWard("病区:"+now);
         clinic.setBedNo("床号:"+now);
         clinic.setTenantId("1505808170691784706");
-        clinic.setStartTime(new Date(1649918680126L));
+        clinic.setStartTime(new Date());
         SpringUtil.publishEvent(new HisEvent(this,Arrays.asList(clinic),clinic.getTenantId()));
 
     }

+ 36 - 11
coffee-system/src/main/java/com/coffee/bus/websocket/listener/HisInfoListener.java

@@ -3,11 +3,8 @@ package com.coffee.bus.websocket.listener;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.spring.SpringUtil;
-import cn.hutool.json.JSONArray;
-import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.coffee.bus.bean.HisInfo;
 import com.coffee.bus.entity.BusClinicEntity;
 import com.coffee.bus.entity.BusInfusionHistoryEntity;
 import com.coffee.bus.entity.BusPatientEntity;
@@ -16,14 +13,9 @@ import com.coffee.bus.registry.patient.PatientOperator;
 import com.coffee.bus.registry.patient.PatientRegistry;
 import com.coffee.bus.registry.patient.bean.DeviceTimeSmallInfo;
 import com.coffee.bus.registry.patient.bean.PatientCacheInfo;
-import com.coffee.bus.script.ExecuteResult;
-import com.coffee.bus.script.ScriptManager;
 import com.coffee.bus.service.*;
-import com.coffee.common.config.websocket.WebSocketConstant;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.event.EventListener;
-import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
@@ -53,12 +45,14 @@ public class HisInfoListener {
 
     private final LocalBusDeviceRunningService deviceRunningService;
 
+    private final LocalBusPatientService patientService;
 
-    public HisInfoListener(LocalBusClinicService clinicService, LocalBusInfusionHistoryService infusionHistoryService, PatientRegistry patientRegistry, LocalBusDeviceRunningService deviceRunningService) {
+    public HisInfoListener(LocalBusClinicService clinicService, LocalBusInfusionHistoryService infusionHistoryService, PatientRegistry patientRegistry, LocalBusDeviceRunningService deviceRunningService, LocalBusPatientService patientService) {
         this.clinicService = clinicService;
         this.infusionHistoryService = infusionHistoryService;
         this.patientRegistry = patientRegistry;
         this.deviceRunningService = deviceRunningService;
+        this.patientService = patientService;
     }
 
     private HisInfoListener hisInfoListener;
@@ -74,7 +68,25 @@ public class HisInfoListener {
         if(CollectionUtil.isEmpty(clinics)){
             return;
         }
-        //处理病人信息 todo
+        //处理病人信息
+        BusPatientEntity patient = clinics.stream().map(clinicEntity -> {
+            BusPatientEntity patientEntity = new BusPatientEntity();
+            patientEntity.setName(clinicEntity.getPatientName());
+            patientEntity.setGender(clinicEntity.getPatientGender());
+            patientEntity.setCode(clinicEntity.getPatientCode());
+            patientEntity.setTenantId(clinicEntity.getTenantId());
+            return patientEntity;
+        }).findFirst().get();
+        PatientOperator<PatientCacheInfo> patientOperator = patientRegistry.getOperator(patient.getTenantId(), patient.getCode());
+        String name = patientOperator.getName();
+        if(StrUtil.isNullOrUndefined(name)){
+            patientService.update(new UpdateWrapper<BusPatientEntity>().lambda().eq(BusPatientEntity::getCode,patient.getCode())
+                    .eq(BusPatientEntity::getTenantId,patient.getTenantId())
+                    .set(BusPatientEntity::getName,patient.getName())
+                    .set(BusPatientEntity::getGender,patient.getGender()));
+            patientOperator.setName(patient.getName());
+            patientOperator.setGender(patient.getGender());
+        }
         //处理病人手术信息
         clinics.parallelStream().forEach(hisInfoListener::handle);
     }
@@ -96,7 +108,7 @@ public class HisInfoListener {
                     .set(BusInfusionHistoryEntity::getClinicId,clinic.getId())
                     .set(BusInfusionHistoryEntity::getClinicStartTime,clinic.getStartTime())
                     .eq(BusInfusionHistoryEntity::getTenantId,clinic.getTenantId())
-                    .ge(BusInfusionHistoryEntity::getStartTime,clinic.getStartTime().getTime())
+                    .ge(BusInfusionHistoryEntity::getStartTime,clinic.getStartTime())
                     .le(BusInfusionHistoryEntity::getClinicStartTime,clinic.getStartTime())
             );
         }else {
@@ -149,6 +161,13 @@ public class HisInfoListener {
         if(StrUtil.isNullOrUndefined(clinicId)){
             //临床数据尚未存在,则将该临床数据设置为最新的临床数据
             changedRunningClinic(clinic,patientOperator);
+            Boolean finished = patientOperator.getFinished();
+            if(Boolean.TRUE.equals(finished)){
+                clinicService.update(new UpdateWrapper<BusClinicEntity>()
+                        .lambda()
+                        .eq(BusClinicEntity::getId,clinic.getId())
+                        .set(BusClinicEntity::getFinished,true));
+            }
             return ;
         }
         //判断临床信息是否一样
@@ -163,6 +182,12 @@ public class HisInfoListener {
             if(startTime==null||clinic.getStartTime().after(startTime)){
                 //更新临床信息
                 changedRunningClinic(clinic,patientOperator);
+                clinicService.update(new UpdateWrapper<BusClinicEntity>()
+                        .lambda()
+                        .ne(BusClinicEntity::getId,clinic.getId())
+                        .eq(BusClinicEntity::getPatientCode,clinic.getPatientCode())
+                        .eq(BusClinicEntity::getTenantId,clinic.getTenantId())
+                        .set(BusClinicEntity::getFinished,true));
                 return;
             }else {
                 //运行临床信息不发生变化,将该次临床置为结束状态, 进行撤泵操作 todo