Forráskód Böngészése

fix 低电量报警改为电量耗尽

18339543638 3 éve
szülő
commit
4e82ecd466

+ 0 - 0
doc/db/nb.sql → doc/db/create.sql


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 38 - 0
doc/db/insert.sql


+ 3 - 1
nb-common/config-common/src/main/java/com/nb/common/config/notice/msg/DeviceMsg.java

@@ -16,10 +16,12 @@ import lombok.Data;
 public class DeviceMsg extends AbstractMsg {
     private long msgCount;
     private long deviceCount;
+    private long infusionCount;
     @Override
     String getSendMarkDownMsgContent() {
         return  getType().getMarkDownTitle()+"\n"+String.format("> 昨日设备使用数: <font color=\"comment\">**{  %s }**</font>\n" +
-                "> 昨日设备消息数: <font color=\"comment\">**{  %s }**</font>",deviceCount,msgCount);
+                "> 昨日设备消息数: <font color=\"comment\">**{  %s }**</font>\n"+
+                "> 昨日输注数量: <font color=\"comment\">**{  %s }**</font>",deviceCount,msgCount,infusionCount);
     }
 
     @Override

+ 16 - 1
nb-common/ws-common/src/main/java/com/nb/common/websocket/ws/DefaultWsServerAioListener.java

@@ -1,5 +1,9 @@
 package com.nb.common.websocket.ws;
 
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
+import com.nb.auth.bean.LoginUser;
+import com.nb.auth.utils.SecurityUtil;
 import com.nb.common.websocket.handler.WsHandler;
 import lombok.extern.slf4j.Slf4j;
 import org.tio.core.ChannelContext;
@@ -8,6 +12,8 @@ import org.tio.websocket.server.WsServerAioListener;
 
 import java.util.*;
 
+import static com.nb.core.Constants.LOGIN_USER_KEY;
+
 /**
  * @author lifang
  * @version 1.0.0
@@ -27,8 +33,17 @@ public class DefaultWsServerAioListener extends WsServerAioListener {
 
     @Override
     public boolean onHeartbeatTimeout(ChannelContext channelContext, Long interval, int heartbeatTimeoutCount) {
-        //连接关闭时进行业务处理
+        //连接关闭时进行业务处理,发送
         log.info("{},心跳超时,通道关闭", channelContext);
+        String auth = String.valueOf(channelContext.getAttribute(LOGIN_USER_KEY));
+        if(!StrUtil.isNullOrUndefined(auth)){
+            try {
+                LoginUser loginUser = SecurityUtil.getLoginUser(auth);
+                log.error("ws断开连接{}",JSONUtil.toJsonStr(loginUser));
+            }catch (Exception e){
+
+            }
+        }
         wsHandlers.parallelStream().forEach(wsHandler -> wsHandler.close(channelContext));
         return false;
     }

+ 1 - 3
nb-core/src/main/java/com/nb/core/doc/SwaggerConfig.java

@@ -26,15 +26,13 @@ import java.util.*;
 @Configuration
 @EnableKnife4j
 @EnableSwagger2WebMvc
-//@Profile("dev")
+@Profile("dev")
 public class SwaggerConfig implements WebMvcConfigurer {
 
     public static final String VERSION = "1.0.0";
 
-    private List<Docket> docketList;
 
     public SwaggerConfig(List<Docket> docketList) {
-        this.docketList = docketList;
         for (Docket docket : docketList) {
             docket.apiInfo(apiInfo())
                     .securitySchemes(security())

+ 1 - 1
nb-service-api/web-service-api/src/main/java/com/nb/web/api/entity/common/CommonDeviceParam.java

@@ -87,7 +87,7 @@ public class CommonDeviceParam<K,T>  extends DeviceProperties<K,T>  {
     }
 
     private void judgeWarnFlow() {
-        if(this.warnFlow==null){
+        if(this.warnFlow==null||this.warnFlow.equals(FlowStatusEnum.None)){
             return;
         }
         if (CharSequenceUtil.isEmpty(this.warns)) {

+ 23 - 0
nb-service/patient-service/pom.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>nb-service</artifactId>
+        <groupId>com.tuoren</groupId>
+        <version>1.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>patient-service</artifactId>
+
+
+    <description>患者端服务</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.tuoren</groupId>
+            <artifactId>nb-auth</artifactId>
+        </dependency>
+    </dependencies>
+</project>

+ 30 - 0
nb-service/patient-service/src/main/java/com/nb/patient/service/doc/PatientDocConfig.java

@@ -0,0 +1,30 @@
+package com.nb.patient.service.doc;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Profile;
+import org.springframework.stereotype.Component;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName SwaggerDocConfig.java
+ * @Description TODO
+ * @createTime 2022年08月01日 22:01:00
+ */
+@Component
+public class PatientDocConfig {
+    @Bean
+    @Profile("dev")
+    public Docket system(){
+        return new Docket(DocumentationType.SWAGGER_2)
+                .select()
+                .apis(RequestHandlerSelectors.basePackage("com.nb.patient.service.controller"))
+                .paths(PathSelectors.any())
+                .build()
+                .groupName("病患APP模块");
+    }
+}

+ 1 - 0
nb-service/pom.xml

@@ -14,6 +14,7 @@
     <modules>
         <module>iot-service</module>
         <module>web-service</module>
+        <module>patient-service</module>
     </modules>
 
     <dependencies>

+ 3 - 1
nb-service/web-service/src/main/java/com/nb/web/service/bus/controller/vo/ClinicStatsVo.java

@@ -25,8 +25,10 @@ public class ClinicStatsVo {
     private String infusionId;
     @ApiModelProperty("是否统计流速")
     private boolean continueDose;
-    @ApiModelProperty("是否统计追加量")
+    @ApiModelProperty("是否统计追加量")
     private boolean appendDose;
+    @ApiModelProperty("是否统计自控有效量(单次追加量)")
+    private boolean singleAppendDose;
     @ApiModelProperty("是否统计已输注量")
     private boolean inputDose;
     @ApiModelProperty("是否统计有效次数")

+ 10 - 2
nb-service/web-service/src/main/java/com/nb/web/service/bus/job/DeviceFlowStatsJob.java

@@ -6,9 +6,11 @@ import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.nb.web.api.entity.BusHospitalLogEntity;
 import com.nb.web.api.enums.HospitalLogEnum;
+import com.nb.web.service.bus.entity.BusInfusionHistoryEntity;
 import com.nb.web.service.bus.service.LocalBusHospitalLogService;
 import com.nb.common.config.notice.msg.DeviceMsg;
 import com.nb.common.config.notice.wechat.EnterpriseWeChatNotify;
+import com.nb.web.service.bus.service.LocalBusInfusionHistoryService;
 import lombok.AllArgsConstructor;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.scheduling.annotation.Scheduled;
@@ -31,7 +33,7 @@ import java.util.stream.Collectors;
 public class DeviceFlowStatsJob {
     private final LocalBusHospitalLogService hospitalLogService;
     private final EnterpriseWeChatNotify enterpriseWeChatNotify;
-
+    private final LocalBusInfusionHistoryService infusionHistoryService;
     /**
      * 描述: 每天早上9点定时发送
      * @author lifang
@@ -57,9 +59,15 @@ public class DeviceFlowStatsJob {
                 .eq(BusHospitalLogEntity::getType, HospitalLogEnum.ALI_DATA_UPLOAD)
                 .lt(BusHospitalLogEntity::getCreateTime, endTime)
                 .gt(BusHospitalLogEntity::getCreateTime, startTime));
+        long infusionCount = infusionHistoryService.count(new QueryWrapper<BusInfusionHistoryEntity>()
+                .lambda()
+                .gt(BusInfusionHistoryEntity::getStartTime, startTime)
+                .lt(BusInfusionHistoryEntity::getStartTime, endTime));
         Set<String> deviceIds = deviceLogs.parallelStream().map(BusHospitalLogEntity::getIdentityCode).collect(Collectors.toSet());
+
         int deviceCount= CollectionUtil.size(deviceIds);
         int msgCount=CollectionUtil.size(deviceLogs);
-        enterpriseWeChatNotify.send(DeviceMsg.of(msgCount,deviceCount));
+
+        enterpriseWeChatNotify.send(DeviceMsg.of(msgCount,deviceCount,infusionCount));
     }
 }

+ 3 - 3
nb-service/web-service/src/main/java/com/nb/web/service/bus/listener/DeviceInfoListener.java

@@ -241,9 +241,9 @@ public class DeviceInfoListener implements IIotMsgHandler {
                 device.setWarnFlow(FlowStatusEnum.Limited);
             }
         }
-        if(device.getWarnFlow()!=null&&FlowStatusEnum.None.equals(device.getWarnFlow())){
-            device.setWarnFlow(null);
-        }
+//        if(device.getWarnFlow()!=null&&FlowStatusEnum.None.equals(device.getWarnFlow())){
+//            device.setWarnFlow(null);
+//        }
         if(device.getWarnFlow()!=null&&FlowStatusEnum.Limited.equals(device.getWarnFlow())){
             //加档受限,进行标识
             device.setFlowRestricted(true);

+ 3 - 1
nb-service/web-service/src/main/java/com/nb/web/service/bus/service/dto/ClinicStatsQueryResult.java

@@ -21,8 +21,10 @@ import java.util.Date;
 public class ClinicStatsQueryResult implements Serializable {
     @ApiModelProperty(value = "流速",hidden = true)
     private BigDecimal continueDose;
-    @ApiModelProperty(value = "追加量",hidden = true)
+    @ApiModelProperty(value = "追加量",hidden = true)
     private BigDecimal appendDose;
+    @ApiModelProperty(value = "单次追加量",hidden = true)
+    private BigDecimal singleAppendDose;
     @ApiModelProperty(value = "已输注量",hidden = true)
     private BigDecimal inputDose;
     @ApiModelProperty(value = "无效次数",hidden = true)

+ 54 - 3
nb-service/web-service/src/main/java/com/nb/web/service/bus/service/dto/ClinicStatsReturnResult.java

@@ -10,7 +10,11 @@ import lombok.Data;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
 /**
  * @author lifang
  * @version 1.0.0
@@ -21,10 +25,14 @@ import java.util.*;
 @Data
 @ApiModel("统计返回前端数据")
 public class ClinicStatsReturnResult implements Serializable {
+    //毫秒到小时的进率
+    private static BigDecimal feedRate=BigDecimal.valueOf(60*60*1000);
     @ApiModelProperty("流速数据集")
     private List<BigDecimal> continueDose;
-    @ApiModelProperty("追加量数据集")
+    @ApiModelProperty("追加量数据集")
     private List<BigDecimal> appendDose;
+    @ApiModelProperty("自控有效量(单次追加量)数据集")
+    private List<BigDecimal> singleAppendDose;
     @ApiModelProperty("已输注量数据集")
     private List<BigDecimal> inputDose;
     @ApiModelProperty("有效次数数据集")
@@ -34,25 +42,53 @@ public class ClinicStatsReturnResult implements Serializable {
 
     @ApiModelProperty("上传时间")
     private List<String> uploadTimes;
+
+    @ApiModelProperty("x轴刻度")
+    private List<Long> xAxisScales;
+
+    @ApiModelProperty("x轴时间节点")
+    private List<BigDecimal> xAxisPositions;
+
     public static ClinicStatsReturnResult of(List<ClinicStatsQueryResult> queryResults){
+        queryResults=queryResults.stream().sorted(Comparator.comparing(ClinicStatsQueryResult::getUploadTime)).collect(Collectors.toList());
         ClinicStatsReturnResult result = new ClinicStatsReturnResult();
         if(CollectionUtil.isEmpty(queryResults)){
             return result;
         }
         String lastInfusionId="";
+        Integer lastValidPcaCount=null;
         BigDecimal infusionLastAppendDose=BigDecimal.ZERO;
         BigDecimal tmpLastAppendDose=BigDecimal.ZERO;
+        List<Long> axisScales = new ArrayList<>();
+
+        Long startTime=queryResults.get(0).getUploadTime().getTime();
+        Long endTime=queryResults.get(queryResults.size()-1).getUploadTime().getTime();
+        //相差的毫秒数
+        long subMillTime = endTime - startTime;
+
+        //以小时为单位的间距
+        long subHours = TimeUnit.MILLISECONDS.toHours(subMillTime) + 1;
+
+        for (long i = 0; i <= subHours; i++) {
+            axisScales.add(i);
+        }
+
+        List<BigDecimal> axisPositions = new ArrayList<>();
+
         for (ClinicStatsQueryResult queryResult : queryResults) {
             if(queryResult.getUploadTime()==null){
                 continue;
             }
-            String uploadTime = DateUtil.format(queryResult.getUploadTime(), DatePattern.NORM_DATETIME_PATTERN);
+            Date date = queryResult.getUploadTime();
+
+            String uploadTime = DateUtil.format(date, DatePattern.NORM_DATETIME_PATTERN);
             List<BigDecimal> continueDoses = Optional.ofNullable(result.getContinueDose()).orElse(new ArrayList<>());
             List<BigDecimal> appendDoses = Optional.ofNullable(result.getAppendDose()).orElse(new ArrayList<>());
             List<BigDecimal> inputDoses = Optional.ofNullable(result.getInputDose()).orElse(new ArrayList<>());
             List<Integer> validCounts = Optional.ofNullable(result.getValidCount()).orElse(new ArrayList<>());
             List<Integer> inValidCounts = Optional.ofNullable(result.getInValidCount()).orElse(new ArrayList<>());
             List<String> uploadTimes = Optional.ofNullable(result.getUploadTimes()).orElse(new ArrayList<>());
+            List<BigDecimal> singleAppendDoses = Optional.ofNullable(result.getSingleAppendDose()).orElse(new ArrayList<>());
 
             BigDecimal appendDose = queryResult.getAppendDose()!=null?queryResult.getAppendDose():BigDecimal.ZERO;
             if(!ObjectUtil.equal(lastInfusionId,queryResult.getInfusionId())){
@@ -68,15 +104,30 @@ public class ClinicStatsReturnResult implements Serializable {
             inputDoses.add( queryResult.getInputDose()!=null?queryResult.getInputDose():BigDecimal.ZERO);
             validCounts.add(queryResult.getValidCount()!=null?queryResult.getValidCount():0);
             inValidCounts.add(queryResult.getInValidCount()!=null?queryResult.getInValidCount():0);
-            uploadTimes.add(uploadTime);
 
+            singleAppendDoses.add(
+                    (queryResult.getValidCount()!=null&&queryResult.getValidCount()!=0
+                            &&!queryResult.getValidCount().equals(lastValidPcaCount) )?
+                            queryResult.getSingleAppendDose():BigDecimal.ZERO);
+
+            //计算当前节点相对于x轴刻度的位置
+            axisPositions.add(BigDecimal.valueOf(date.getTime() - startTime)
+                    .divide(feedRate, 2, RoundingMode.HALF_UP));
+
+
+            uploadTimes.add(uploadTime);
             result.setContinueDose(continueDoses);
             result.setAppendDose(appendDoses);
             result.setInputDose(inputDoses);
             result.setValidCount(validCounts);
             result.setInValidCount(inValidCounts);
             result.setUploadTimes(uploadTimes);
+            result.setSingleAppendDose(singleAppendDoses);
+            lastValidPcaCount=queryResult.getValidCount();
         };
+        result.setXAxisScales(axisScales);
+        result.setXAxisPositions(axisPositions);
+
         return result;
     }
 }

+ 2 - 2
nb-core/src/main/java/com/nb/core/doc/SwaggerDocConfig.java → nb-service/web-service/src/main/java/com/nb/web/service/doc/WebDocConfig.java

@@ -1,4 +1,4 @@
-package com.nb.core.doc;
+package com.nb.web.service.doc;
 
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Profile;
@@ -22,7 +22,7 @@ import java.util.List;
  * @createTime 2022年08月01日 22:01:00
  */
 @Component
-public class SwaggerDocConfig {
+public class WebDocConfig {
     @Bean
     @Profile("dev")
     public Docket system(){

+ 5 - 0
nb-service/web-service/src/main/resources/mapper/bus/BusClinicMapper.xml

@@ -7,6 +7,7 @@
         <result column="append_dose" property="appendDose"/>
         <result column="input_dose" property="inputDose"/>
         <result column="valid_count" property="validCount"/>
+        <result column="single_append_dose" property="singleAppendDose"/>
         <result column="invalid_count" property="inValidCount"/>
         <result column="upload_time" property="uploadTime"/>
         <result column="infusion_id" property="infusionId"/>
@@ -43,6 +44,10 @@
         <if test="query.inputDose!=false">
             h.input_dose as input_dose,
         </if>
+        <if test="query.singleAppendDose!=false">
+            h.append_dose as single_append_dose,
+            h.pca_valid_count as valid_count,
+        </if>
         <if test="query.validCount!=false">
             h.pca_valid_count as valid_count,
         </if>

Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott