A17404李放 3 年之前
父節點
當前提交
2572d4bea4
共有 22 個文件被更改,包括 171 次插入84 次删除
  1. 0 5
      coffee-common/src/main/java/com/coffee/common/cache/value/SimpleValue.java
  2. 3 1
      coffee-common/src/main/java/com/coffee/common/redis/RedisConfig.java
  3. 3 1
      coffee-framework/src/main/java/com/coffee/framework/config/WebAppMvcConfig.java
  4. 4 2
      coffee-system/src/main/java/com/coffee/bus/controller/BusPatientController.java
  5. 3 0
      coffee-system/src/main/java/com/coffee/bus/controller/vo/GetPatientInfoVo.java
  6. 0 1
      coffee-system/src/main/java/com/coffee/bus/entity/BusHospitalEntity.java
  7. 7 0
      coffee-system/src/main/java/com/coffee/bus/hospital/HospitalManager.java
  8. 0 1
      coffee-system/src/main/java/com/coffee/bus/hospital/his/HisScriptSession.java
  9. 3 1
      coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/HisStrategyEnum.java
  10. 0 1
      coffee-system/src/main/java/com/coffee/bus/service/LocalBusHospitalService.java
  11. 6 3
      coffee-system/src/main/java/com/coffee/bus/service/LocalBusPatientService.java
  12. 1 1
      coffee-system/src/main/java/com/coffee/bus/service/dto/AlarmQuery.java
  13. 0 1
      coffee-system/src/main/java/com/coffee/bus/service/dto/DeviceHistoryQuery.java
  14. 0 1
      coffee-system/src/main/java/com/coffee/bus/service/dto/EvalQuery.java
  15. 10 1
      coffee-system/src/main/java/com/coffee/bus/stats/CommonStats.java
  16. 30 19
      coffee-system/src/main/java/com/coffee/bus/stats/analyse/AlarmStatsAnalyse.java
  17. 95 36
      coffee-system/src/main/java/com/coffee/bus/stats/entity/AlarmScatter.java
  18. 3 0
      coffee-system/src/main/java/com/coffee/bus/stats/entity/LineResult.java
  19. 0 6
      coffee-system/src/main/java/com/coffee/system/entity/SysUser.java
  20. 1 1
      coffee-system/src/main/resources/mapper/bus/BusDeviceAlarmMapper.xml
  21. 1 1
      coffee-system/src/main/resources/mapper/bus/BusDeviceHistoryMapper.xml
  22. 1 1
      coffee-system/src/main/resources/mapper/bus/BusEvaluationMapper.xml

+ 0 - 5
coffee-common/src/main/java/com/coffee/common/cache/value/SimpleValue.java

@@ -1,19 +1,14 @@
 package com.coffee.common.cache.value;
 
 import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.util.EnumUtil;
-import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ReflectUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.annotation.IEnum;
-import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.yaml.snakeyaml.util.EnumUtils;
 
 import java.lang.reflect.Array;
-import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.util.*;

+ 3 - 1
coffee-common/src/main/java/com/coffee/common/redis/RedisConfig.java

@@ -8,6 +8,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CachingConfigurerSupport;
 import org.springframework.cache.annotation.EnableCaching;
 import org.springframework.context.annotation.Bean;
@@ -28,7 +29,7 @@ import org.springframework.data.redis.serializer.StringRedisSerializer;
 @AllArgsConstructor
 public class RedisConfig extends CachingConfigurerSupport {
 
-    private final ObjectMapper objectMapper;
+    private  final ObjectMapper objectMapper;
     @Bean
     public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
         RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
@@ -43,6 +44,7 @@ public class RedisConfig extends CachingConfigurerSupport {
 
         jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
 
+
         // 设置value的序列化规则和 key的序列化规则
         redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
         redisTemplate.setKeySerializer(new StringRedisSerializer());

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

@@ -2,6 +2,7 @@ package com.coffee.framework.config;
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.annotation.IEnum;
 import com.coffee.common.config.BooleanToIntegerSerializer;
 import com.coffee.framework.config.convert.EnumDeserializer;
 import com.fasterxml.jackson.core.JsonGenerator;
@@ -10,6 +11,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.*;
 import com.fasterxml.jackson.databind.deser.std.StdScalarDeserializer;
 import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.databind.ser.std.StdSerializer;
 import com.fasterxml.jackson.databind.ser.std.StringSerializer;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
@@ -83,8 +85,8 @@ public class WebAppMvcConfig implements WebMvcConfigurer {
         });
         SimpleModule enumModule = new SimpleModule();
         enumModule.addDeserializer(Enum.class, new EnumDeserializer());
-        objectMapper.registerModule(enumModule);
 
+        objectMapper.registerModule(enumModule);
         objectMapper.registerModule(stringModule);
         objectMapper.registerModule(booleanSimpleModule);
         // 设置格式化内容

+ 4 - 2
coffee-system/src/main/java/com/coffee/bus/controller/BusPatientController.java

@@ -242,6 +242,8 @@ public class BusPatientController  implements BaseQueryController<BusPatientEnti
                 }
                 clinic = clinicService.getById(patient.getClinicId());
                 infusionId=patient.getInfusionId();
+            }else {
+                clinic= clinicService.getById(vo.getClinicId());
             }
             BusInfusionHistoryEntity infusion =infusionService.getById(infusionId);
             result.setInfusion(infusion);
@@ -279,7 +281,7 @@ public class BusPatientController  implements BaseQueryController<BusPatientEnti
     @PostMapping("/pull/async")
     @SaCheckPermission("device:patient:pull")
     @ApiOperation(value = "异步更新患者信息,超时时间默认为10s,超时后数据返回继续处理,输注监控",notes = "权限标识为【bus:patient:pull】")
-    public DeferredResult<R<BusClinicEntity>> syn(@RequestAttribute("tenantId")@ApiParam(hidden = true) String tenantId, @RequestBody GetPatientInfoVo vo){
+    public DeferredResult<R<BusClinicEntity>> syn(@RequestAttribute("tenantId")@ApiParam(hidden = true) String tenantId, @Validated@RequestBody GetPatientInfoVo vo){
         return patientService.getPatientInfoFromHis(tenantId,vo.getPatientCode(),vo.getTimeout(),false);
     }
 
@@ -308,7 +310,7 @@ public class BusPatientController  implements BaseQueryController<BusPatientEnti
     @PostMapping("/pull/sync")
     @SaCheckPermission("device:patient:pull")
     @ApiOperation(value = "同步更新患者信息,超时时间默认为10s,超时后数据返回则不进行处理,无泵更新",notes = "权限标识为【bus:patient:pull】")
-    public DeferredResult<R<BusClinicEntity>>  async(@RequestAttribute("tenantId")@ApiParam(hidden = true) String tenantId, @RequestBody GetPatientInfoVo vo){
+    public DeferredResult<R<BusClinicEntity>>  async(@RequestAttribute("tenantId")@ApiParam(hidden = true) String tenantId,@Validated @RequestBody GetPatientInfoVo vo){
         return patientService.getPatientInfoFromHis(tenantId,vo.getPatientCode(),vo.getTimeout(),true);
     }
 

+ 3 - 0
coffee-system/src/main/java/com/coffee/bus/controller/vo/GetPatientInfoVo.java

@@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.constraints.NotBlank;
+
 /**
  * @author lifang
  * @version 1.0.0
@@ -15,6 +17,7 @@ import lombok.Data;
 @ApiModel("从his获取病人信息")
 public class GetPatientInfoVo {
     @ApiModelProperty("病号")
+    @NotBlank(message = "病号不能为空")
     private String patientCode;
     @ApiModelProperty("超时时间,单位:秒;默认10s,当超时时间为-1时,若没有拉取到数据则立即返回")
     private long timeout=10;

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

@@ -95,7 +95,6 @@ public class BusHospitalEntity implements RecordModifierEntity, RecordCreationEn
     private String createBy;
 
     @ApiModelProperty("接收his数据的策略, 1(默认)、获取病人全部信息 2、获取病人部分信息 3、获取病人最新信息")
-    @TableField(updateStrategy = FieldStrategy.NEVER)
     private HisStrategyEnum strategy;
 
     @TableField(fill = FieldFill.INSERT_UPDATE)

+ 7 - 0
coffee-system/src/main/java/com/coffee/bus/hospital/HospitalManager.java

@@ -14,6 +14,7 @@ import com.coffee.bus.hospital.config.HospitalFunctionAnalConfigHandler;
 import com.coffee.bus.hospital.config.HospitalFunctionExtraConfigHandler;
 import com.coffee.bus.hospital.config.bean.*;
 import com.coffee.bus.hospital.his.HisScriptSession;
+import com.coffee.bus.hospital.his.strategy.HisStrategyEnum;
 import com.coffee.bus.registry.device.DeviceRegistry;
 import com.coffee.bus.registry.patient.PatientRegistry;
 import com.coffee.bus.hospital.script.ScriptManager;
@@ -111,6 +112,12 @@ public class HospitalManager {
     public void refreshInfo(){
         BusHospitalEntity hospital = hospitalService.getById(hospitalId);
         storage.setConfig("info",hospital);
+        storage.setConfig("strategy",hospital.getStrategy());
+
+    }
+
+    public HisStrategyEnum getStrategy(){
+        return storage.getConfig("strategy").as(HisStrategyEnum.class);
     }
 
     public BusHospitalEntity getInfo(){

+ 0 - 1
coffee-system/src/main/java/com/coffee/bus/hospital/his/HisScriptSession.java

@@ -59,7 +59,6 @@ public class HisScriptSession {
     private LocalBusHospitalService hospitalService;
     private LocalBusPatientService patientService;
     private LocalBusHospitalLogService hospitalLogService;
-    private ObjectMapper objectMapper;
     private Map<String,HisRequest> hisRequestMap=new ConcurrentHashMap<>();
 
     public HisScriptSession(String hospitalId, ScriptManager scriptManager, ConfigStorageManager configStorageManager, LocalBusClinicService clinicService, LocalBusHospitalService hospitalService, LocalBusHospitalLogService hospitalLogService,LocalBusPatientService patientService) {

+ 3 - 1
coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/HisStrategyEnum.java

@@ -5,6 +5,8 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 
+import java.io.Serializable;
+
 /**
  * @author lifang
  * @version 1.0.0
@@ -15,7 +17,7 @@ import lombok.Getter;
 @AllArgsConstructor
 @Getter
 @JsonFormat(shape = JsonFormat.Shape.OBJECT)
-public enum  HisStrategyEnum  implements IEnum<Integer> {
+public enum  HisStrategyEnum  implements IEnum<Integer>, Serializable {
     NONE(0,"无his对接"),
     ALL(1,"拉取所有的病人数据"),
     PART(2,"拉取部分病人数据(例、最新三个月)"),

+ 0 - 1
coffee-system/src/main/java/com/coffee/bus/service/LocalBusHospitalService.java

@@ -109,7 +109,6 @@ public class LocalBusHospitalService extends BaseService<BusHospitalMapper, BusH
                         log.error("新增医院默认配置失败,",e);
                     }
                 });
-
         nameCache.setConfig(entity.getId(),entity.getName());
     }
 

+ 6 - 3
coffee-system/src/main/java/com/coffee/bus/service/LocalBusPatientService.java

@@ -14,6 +14,8 @@ import com.coffee.bus.entity.PatientDeviceRepeatDomain;
 import com.coffee.bus.enums.DeviceAlarmEnum;
 import com.coffee.bus.enums.DeviceStatusEnum;
 import com.coffee.bus.enums.PatientAlarmEnum;
+import com.coffee.bus.hospital.HospitalManager;
+import com.coffee.bus.hospital.HospitalManagerRegister;
 import com.coffee.bus.hospital.his.HisScriptSession;
 import com.coffee.bus.hospital.his.HisScriptSessionManager;
 import com.coffee.bus.hospital.his.strategy.HisStrategyEnum;
@@ -61,7 +63,7 @@ public class LocalBusPatientService extends BaseService<BusPatientMapper, BusPat
 
     @Autowired
     @Lazy
-    private HisScriptSessionManager scriptSessionManager;
+    private HospitalManagerRegister hospitalManagerRegister;
 
     @Autowired
     @Lazy
@@ -115,8 +117,9 @@ public class LocalBusPatientService extends BaseService<BusPatientMapper, BusPat
      * @param sync 是否为同步操作
      */
     public DeferredResult<R<BusClinicEntity>> getPatientInfoFromHis(String hospitalId, String patientCode, long timeout,boolean sync){
-        HisScriptSession hisScriptSession = scriptSessionManager.get(hospitalId);
-        HisStrategyEnum strategy = hisScriptSession.getHospitalInfo().getStrategy();
+        HospitalManager hospitalManager = hospitalManagerRegister.get(hospitalId);
+        HisScriptSession hisScriptSession = hospitalManager.getScriptSession();
+        HisStrategyEnum strategy = hospitalManager.getStrategy();
         if(null==strategy||HisStrategyEnum.NONE.equals(strategy)){
             throw new CustomException("医院未对接his,请到【信息维护】->【HIS对接】配置his策略");
         }

+ 1 - 1
coffee-system/src/main/java/com/coffee/bus/service/dto/AlarmQuery.java

@@ -21,8 +21,8 @@ public class AlarmQuery {
     @ApiModelProperty("临床id")
     @NotNull(message = "临床id不能为空")
     private String clinicId;
+
     @ApiModelProperty("设备id")
-    @NotNull(message = "设备id不能为空")
     private String deviceId;
     @ApiModelProperty("输注id")
     private String infusionId;

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

@@ -23,7 +23,6 @@ public class DeviceHistoryQuery {
     @NotNull(message = "临床id不能为空")
     private String clinicId;
     @ApiModelProperty("设备id")
-    @NotNull(message = "设备id不能为空")
     private String deviceId;
     @ApiModelProperty("输注id")
     private String infusionId;

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

@@ -22,7 +22,6 @@ public class EvalQuery {
     @NotNull(message = "临床id不能为空")
     private String clinicId;
     @ApiModelProperty("设备id")
-    @NotNull(message = "设备id不能为空")
     private String deviceId;
     @ApiModelProperty("输注id")
     private String infusionId;

+ 10 - 1
coffee-system/src/main/java/com/coffee/bus/stats/CommonStats.java

@@ -1,5 +1,6 @@
 package com.coffee.bus.stats;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import com.coffee.bus.enums.StatsAnalyseEnum;
 import com.coffee.bus.enums.StatsTimeUnit;
@@ -95,9 +96,17 @@ public interface CommonStats<T extends CombineResult> {
                 .multiply(BigDecimal.valueOf(100));
     }
 
+    /**
+     * 描述: 计算标准差
+     * @author lifang
+     * @date 2022/6/13 11:01
+     * @param sources
+     * @param average
+     * @return BigDecimal
+     */
     default  BigDecimal computeStandardDeviation(List<BigDecimal> sources,BigDecimal average){
         BigDecimal subTotal=BigDecimal.valueOf(0);
-        if(CollectionUtil.size(sources)<2){
+        if(CollUtil.size(sources)<2){
             return subTotal;
         }
         for (BigDecimal source : sources) {

+ 30 - 19
coffee-system/src/main/java/com/coffee/bus/stats/analyse/AlarmStatsAnalyse.java

@@ -1,7 +1,6 @@
 package com.coffee.bus.stats.analyse;
 
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.text.CharSequenceUtil;
 import com.coffee.bus.enums.DeviceAlarmEnum;
 import com.coffee.bus.enums.StatsAnalyseEnum;
@@ -17,8 +16,8 @@ import lombok.Data;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
-import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
 /**
@@ -56,14 +55,11 @@ public class AlarmStatsAnalyse implements CommonStats<CombineAlarmResult> {
         //根据时间对结果进行区分统计
         Map<String, List<CombineAlarmResult>> groupByTime = groupByTime(results, unit);
         List<LineResult> result = new ArrayList<>();
+        //增加散点图
+        result.add(alarmScatter(groupByTime));
         result.add(countLine(groupByTime));
         result.add(ratioLine(groupByTime));
-        //增加散点图
-//        result.add(alarmScatter(groupByTime));
-        result.add(addAlarmLine(groupByTime,
-                LineResult.of("analgesicPoor",false,false,"镇痛不足分析走势图"),
-                combineResult-> Boolean.TRUE.equals(combineResult.getWarnAnalgesicPoor()),
-                unit));
+
 
         //比率
         return result;
@@ -74,22 +70,37 @@ public class AlarmStatsAnalyse implements CommonStats<CombineAlarmResult> {
      * @author lifang
      * @date 2022/6/11 16:27
      * @param groupByTime
-     * @param result
-     * @param predicate
      * @return LineResult
      */
-    private LineResult addAlarmLine(Map<String, List<CombineAlarmResult>> groupByTime, LineResult result, Predicate<CombineAlarmResult> predicate,StatsTimeUnit unit) {
+    private LineResult alarmScatter(Map<String, List<CombineAlarmResult>> groupByTime) {
+        LineResult<BigDecimal> result = LineResult.of("alarmScatter", false, false, true,"报警均数走势分析图");
+        LineResult.LineContent<BigDecimal> scatterLine = new LineResult.LineContent("报警均值");
+        AlarmScatter alarmScatter = new AlarmScatter();
         groupByTime.forEach((timeRange,combineResults)->{
-            //以天为单位
-            int totalSize = CollUtil.size(combineResults);
+            for (CombineAlarmResult combineResult : combineResults) {
+                alarmScatter.handle(combineResult,timeRange);
+
+            }
+        });
+        result.getTime().addAll(alarmScatter.keySet());
+        //均值、方差
+        alarmScatter.forEach((alarmName,statsByTimeMap)->{
+
+            int sum=statsByTimeMap.values().stream().mapToInt(AlarmScatter.AlarmStatsByTime::getCount).sum();
+            BigDecimal average =CollUtil.isEmpty(statsByTimeMap)?BigDecimal.ZERO:BigDecimal.valueOf(sum).divide(BigDecimal.valueOf(CollUtil.size(statsByTimeMap)),2, RoundingMode.HALF_UP);
+
+            List<BigDecimal> averageList = Optional.ofNullable(scatterLine.getAverage()).orElse(new ArrayList<>());
+            averageList.add(average);
+            scatterLine.setAverage(averageList);
 
+            BigDecimal standardDeviation = computeStandardDeviation(
+                    statsByTimeMap.values().stream().map(AlarmScatter.AlarmStatsByTime::getCount).map(BigDecimal::valueOf).collect(Collectors.toList()),
+                    average);
+            List<List<BigDecimal>> standardDeviationList = Optional.ofNullable(scatterLine.getVariance()).orElse(new ArrayList<>());
+            standardDeviationList.add(Arrays.asList(average.subtract(standardDeviation),average.add(standardDeviation)));
+            scatterLine.setVariance(standardDeviationList);
         });
-        handleMixPolyLines(groupByTime,result,
-                combineResult -> { },
-                predicate,
-                combineResult -> BigDecimal.ONE);
-        result.setMax(null);
-        result.setMin(null);
+        result.setContent(Arrays.asList(scatterLine));
         return result;
     }
 

+ 95 - 36
coffee-system/src/main/java/com/coffee/bus/stats/entity/AlarmScatter.java

@@ -1,10 +1,15 @@
 package com.coffee.bus.stats.entity;
 
+import com.coffee.bus.enums.DeviceAlarmEnum;
+import com.coffee.bus.enums.DeviceStatusEnum;
+import com.coffee.bus.enums.FlowStatusEnum;
+import com.coffee.bus.service.dto.CombineAlarmResult;
 import lombok.AllArgsConstructor;
+import lombok.Data;
 
 import java.util.LinkedHashMap;
 import java.util.Map;
-import java.util.function.Function;
+import java.util.Optional;
 
 /**
  * @author lifang
@@ -14,32 +19,36 @@ import java.util.function.Function;
  * @createTime 2022年06月11日 17:10:00
  */
 public class AlarmScatter extends LinkedHashMap<String, Map<String, AlarmScatter.AlarmStatsByTime>> {
-    public Map<String, AlarmScatter.AlarmStatsByTime> getJam(String time) {
-        return this.computeIfAbsent("jam", initValue(time));
+    public AlarmScatter.AlarmStatsByTime getJam(String time) {
+        return this.computeIfAbsent("堵塞",k->new LinkedHashMap<>())
+                .computeIfAbsent(time,t->AlarmStatsByTime.of(time,0));
     }
 
     public void incrementJam(String time) {
         incrementValue(this.getJam(time));
     }
 
-    public Map<String, AlarmScatter.AlarmStatsByTime> getLimit(String time) {
-        return this.computeIfAbsent("limit", initValue(time));
+    public  AlarmScatter.AlarmStatsByTime getLimit(String time) {
+        return this.computeIfAbsent("极限",k->new LinkedHashMap<>())
+                .computeIfAbsent(time,t->AlarmStatsByTime.of(time,0));
     }
 
     public void incrementLimit(String time) {
         incrementValue(this.getLimit(time));
     }
 
-    public Map<String, AlarmScatter.AlarmStatsByTime> getNoBox(String time) {
-        return this.computeIfAbsent("noBox", initValue(time));
+    public  AlarmScatter.AlarmStatsByTime getNoBox(String time) {
+        return this.computeIfAbsent("未装药盒",k->new LinkedHashMap<>())
+                .computeIfAbsent(time,t->AlarmStatsByTime.of(time,0));
     }
 
     public void incrementNoBox(String time) {
         incrementValue(this.getNoBox(time));
     }
 
-    public Map<String, AlarmScatter.AlarmStatsByTime> getOutOfControl(String time) {
-        return this.computeIfAbsent("outOfControl", initValue(time));
+    public AlarmScatter.AlarmStatsByTime getOutOfControl(String time) {
+        return this.computeIfAbsent("电机失控",k->new LinkedHashMap<>())
+                .computeIfAbsent(time,t->AlarmStatsByTime.of(time,0));
     }
 
     public void incrementOutOfControl(String time) {
@@ -47,8 +56,9 @@ public class AlarmScatter extends LinkedHashMap<String, Map<String, AlarmScatter
     }
 
 
-    public Map<String, AlarmScatter.AlarmStatsByTime> getAnalgesicPoor(String time) {
-        return this.computeIfAbsent("analgesicPoor", initValue(time));
+    public AlarmScatter.AlarmStatsByTime getAnalgesicPoor(String time) {
+        return this.computeIfAbsent("镇痛不足",k->new LinkedHashMap<>())
+                .computeIfAbsent(time,t->AlarmStatsByTime.of(time,0));
     }
 
 
@@ -56,8 +66,9 @@ public class AlarmScatter extends LinkedHashMap<String, Map<String, AlarmScatter
         incrementValue(this.getAnalgesicPoor(time));
     }
 
-    public Map<String, AlarmScatter.AlarmStatsByTime> getNoSignal(String time) {
-        return this.computeIfAbsent("noSignal", initValue(time));
+    public AlarmScatter.AlarmStatsByTime getNoSignal(String time) {
+        return this.computeIfAbsent("不在服务区",k->new LinkedHashMap<>())
+                .computeIfAbsent(time,t->AlarmStatsByTime.of(time,0));
     }
 
     public void incrementNoSignal(String time) {
@@ -65,16 +76,18 @@ public class AlarmScatter extends LinkedHashMap<String, Map<String, AlarmScatter
     }
 
 
-    public Map<String, AlarmScatter.AlarmStatsByTime> getMachine(String time) {
-        return this.computeIfAbsent("machine",  initValue(time));
+    public AlarmScatter.AlarmStatsByTime getMachine(String time) {
+        return this.computeIfAbsent("机械故障",k->new LinkedHashMap<>())
+                .computeIfAbsent(time,t->AlarmStatsByTime.of(time,0));
     }
 
     public void incrementMachine(String time) {
         incrementValue(this.getMachine(time));
     }
 
-    public Map<String, AlarmScatter.AlarmStatsByTime> getLowBattery(String time) {
-        return this.computeIfAbsent("lowBattery", initValue(time));
+    public AlarmScatter.AlarmStatsByTime getLowBattery(String time) {
+        return this.computeIfAbsent("电量耗尽",k->new LinkedHashMap<>())
+                .computeIfAbsent(time,t->AlarmStatsByTime.of(time,0));
     }
 
 
@@ -82,8 +95,9 @@ public class AlarmScatter extends LinkedHashMap<String, Map<String, AlarmScatter
         incrementValue(this.getLowBattery(time));
     }
 
-    public Map<String, AlarmScatter.AlarmStatsByTime> getBubble(String time) {
-        return this.computeIfAbsent("bubble",  initValue(time));
+    public AlarmScatter.AlarmStatsByTime getBubble(String time) {
+        return this.computeIfAbsent("气泡无液",k->new LinkedHashMap<>())
+                .computeIfAbsent(time,t->AlarmStatsByTime.of(time,0));
     }
 
 
@@ -91,37 +105,82 @@ public class AlarmScatter extends LinkedHashMap<String, Map<String, AlarmScatter
         incrementValue(this.getBubble(time));
     }
 
-    public Map<String, AlarmScatter.AlarmStatsByTime> getLowInfusion(String time) {
-        return this.computeIfAbsent("lowInfusion",  initValue(time));
+    public AlarmScatter.AlarmStatsByTime getLowInfusion(String time) {
+        return this.computeIfAbsent("低输注",k->new LinkedHashMap<>())
+                .computeIfAbsent(time,t->AlarmStatsByTime.of(time,0));
     }
 
     public void incrementLowInfusion(String time) {
         incrementValue(this.getLowInfusion(time));
     }
 
-    public Map<String, AlarmScatter.AlarmStatsByTime> getInfusionMax(String time) {
-        return this.computeIfAbsent("infusionMax", initValue(time));
+    public AlarmScatter.AlarmStatsByTime getInfusionMax(String time) {
+        return this.computeIfAbsent("返厂维护",k->new LinkedHashMap<>())
+                .computeIfAbsent(time,t->AlarmStatsByTime.of(time,0));
     }
 
     public void incrementInfusionMax(String time) {
-        incrementValue(this.getInfusionMax(time));
-    }
-
-    private void incrementValue(Map<String, AlarmScatter.AlarmStatsByTime> map){
-
+        incrementValue(this.getLowInfusion(time));
     }
 
 
-    private Function<String, Map<String, AlarmScatter.AlarmStatsByTime>>  initValue(String time){
-        return  k->{
-            Map<String, AlarmScatter.AlarmStatsByTime> map = new LinkedHashMap<>();
-            map.computeIfAbsent(time,t->AlarmStatsByTime.of(time,0L));
-            return map;
-        };
-    }
+    private void incrementValue(AlarmScatter.AlarmStatsByTime stats){
+        stats.setCount(Optional.ofNullable(stats.getCount()).orElse(0) +1);
+    }
+
+
+
+    public void handle(CombineAlarmResult alarmResult,String time) {
+        if (Boolean.TRUE.equals(alarmResult.getIsAlarm())) {
+            DeviceAlarmEnum alarm = alarmResult.getAlarm();
+            switch (alarm){
+                case Jam:
+                    incrementJam(time);
+                    break;
+                case Limit:
+                    incrementLimit(time);
+                    break;
+                case NotBox:
+                    incrementNoBox(time);
+                    break;
+                case Machine:
+                    incrementMachine(time);
+                    break;
+                case OutOfControl:
+                    incrementOutOfControl(time);
+                    break;
+                case LowBattery:
+                    incrementLowBattery(time);
+                    break;
+                case Bubble:
+                    incrementBubble(time);
+                    break;
+                case InfusionMax:
+                    incrementInfusionMax(time);
+                    break;
+                default:break;
+            }
+        }else {
+            Boolean warnAnalgesicPoor = alarmResult.getWarnAnalgesicPoor();
+            if (Boolean.TRUE.equals(warnAnalgesicPoor)) {
+                incrementAnalgesicPoor(time);
+            }
+            DeviceStatusEnum runState = alarmResult.getRunState();
+            if (DeviceStatusEnum.NoSignal.equals(runState)) {
+                incrementNoSignal(time);
+            }
+            FlowStatusEnum warnFlow = alarmResult.getWarnFlow();
+            if (FlowStatusEnum.Lowest.equals(warnFlow)) {
+                incrementLowInfusion(time);
+            }
+
+        }
+    }
+
+    @Data
     @AllArgsConstructor(staticName = "of")
     public static class AlarmStatsByTime{
         private String time;
-        private Long count;
+        private Integer count;
     }
 }

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

@@ -20,6 +20,9 @@ import java.util.*;
 public class LineResult<V> {
     private String id;
     private List<LineContent<V>> content;
+    /**
+     * x轴,一般为时间
+     */
     private List<String> time;
 
     @ApiModelProperty("是否为比率图")

+ 0 - 6
coffee-system/src/main/java/com/coffee/system/entity/SysUser.java

@@ -127,12 +127,6 @@ public class SysUser extends TenantGenericEntity<Long,Long> {
      */
     private String deptId;
 
-    /**
-     * 锁定标记 0正常;1锁定
-     */
-    @ExcelProperty(value = "锁定", index = 10, converter = ExcelDictConverter.class)
-    @ExcelDict("sys_lock_flag")
-    private String lockFlag;
 
     /**
      * 排序

+ 1 - 1
coffee-system/src/main/resources/mapper/bus/BusDeviceAlarmMapper.xml

@@ -17,7 +17,7 @@
                 and clinic_id=#{query.clinicId}
             </if>
             <if test="query.deviceId != null">
-                and device_id=#{query.deviceId})
+                and device_id=#{query.deviceId}
             </if>
         </where>) as h
         on a.infusion_id=h.id

+ 1 - 1
coffee-system/src/main/resources/mapper/bus/BusDeviceHistoryMapper.xml

@@ -12,7 +12,7 @@
                 and clinic_id=#{query.clinicId}
             </if>
             <if test="query.deviceId !=null">
-                and deviceId=#{query.deviceId}
+                and device_id=#{query.deviceId}
             </if>
             <if test="query.clinicId !=null">
                 and clinic_id=#{query.clinicId}

+ 1 - 1
coffee-system/src/main/resources/mapper/bus/BusEvaluationMapper.xml

@@ -12,7 +12,7 @@
             and clinic_id=#{query.clinicId}
         </if>
         <if test="query.deviceId !=null">
-            and deviceId=#{query.deviceId}
+            and device_id=#{query.deviceId}
         </if>
         <if test="query.clinicId !=null">
             and clinic_id=#{query.clinicId}