Jelajahi Sumber

fix 自动结束管理

A17404李放 3 tahun lalu
induk
melakukan
74cb2e9894

+ 6 - 1
nb-system/src/main/java/com/nb/bus/hospital/config/handler/ClinicAutoFinishMonitorHandler.java

@@ -54,7 +54,8 @@ public class ClinicAutoFinishMonitorHandler implements DelayMessageHandler {
         if (source.getInfusionId().equals(patient.getInfusionId())) {
             BusInfusionHistoryEntity infusionHistory = infusionHistoryService.getById(patient.getInfusionId());
             Date uploadTime = source.getUploadTime();
-            if (infusionHistory.getLastUploadTime().equals(uploadTime)) {
+            //当延迟时间为0时,可能由于事务问题,导致此时mysql中还未及时更新数据
+            if (message.getProperties().getExpire()==0||infusionHistory.getLastUploadTime().equals(uploadTime)) {
                 log.info("延迟消息【{}】处理开始进行【{临床自动结束}】处理",JSONUtil.toJsonStr(message));
                 UndoDeviceConfig config = source.getConfig();
                 ManualUndoConfig manualUndoConfig = new ManualUndoConfig();
@@ -66,6 +67,10 @@ public class ClinicAutoFinishMonitorHandler implements DelayMessageHandler {
                 manualUndoConfig.setPatientId(patient.getId());
                 manualUndoConfig.setInfusionIds(Collections.singletonList(source.getInfusionId()));
                 infusionHistoryService.undo(manualUndoConfig,true);
+            }else {
+                if(log.isDebugEnabled()){
+                    log.debug("延迟消息【{}】时间为【{}】,对应输注最后上传时间为【{}】,不相等,【{临床自动结束}】处理失败",JSONUtil.toJsonStr(message),infusionHistory.getLastUploadTime());
+                }
             }
         }
         log.info("延迟消息【{}】处理完成,处理器【{临床自动结束}】",JSONUtil.toJsonStr(message));

+ 2 - 1
nb-system/src/main/java/com/nb/bus/hospital/config/handler/DeputyDeviceAutoUndoHandler.java

@@ -54,7 +54,8 @@ public class DeputyDeviceAutoUndoHandler implements DelayMessageHandler {
         if (!infusionId.equals(patient.getInfusionId())) {
             //只有副泵会自动撤泵
             BusInfusionHistoryEntity infusionHistory = infusionHistoryService.getById(infusionId);
-            if(ObjectUtil.equal(infusionHistory.getLastUploadTime(),source.getUploadTime())){
+            if(message.getProperties().getExpire()==0||ObjectUtil.equal(infusionHistory.getLastUploadTime(),source.getUploadTime())){
+                log.info("延迟消息【{}】处理开始进行【{设备自动撤泵}】处理",JSONUtil.toJsonStr(message));
                 ManualUndoConfig manualUndoConfig = new ManualUndoConfig();
                 manualUndoConfig.setInfusionIds(Collections.singletonList(source.getInfusionId()));
                 manualUndoConfig.setPatientId(patient.getId());

+ 4 - 0
nb-system/src/main/java/com/nb/bus/service/dto/CombineEvalResult.java

@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.math.BigDecimal;
+import java.sql.Date;
 
 /**
  * @author lifang
@@ -16,6 +17,9 @@ import java.math.BigDecimal;
 @Data
 public class CombineEvalResult extends CombineResult {
 
+    @ApiModelProperty("评价时间")
+    private Date evalTime;
+
     @ApiModelProperty(value = "评价id")
     private String evalId;
 

+ 9 - 3
nb-system/src/main/java/com/nb/bus/stats/CommonStats.java

@@ -17,6 +17,7 @@ import java.util.*;
 import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.function.Predicate;
+import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
 /**
@@ -68,16 +69,21 @@ public interface CommonStats<T extends CombineResult> {
 
 
     default Map<String, List<T>> groupByTime(List<T> results, StatsTimeUnit unit){
-        results.sort(Comparator.comparing(CombineResult::getInfusionStartTime));
+        return groupByTime(results,unit,T::getInfusionStartTime);
+    }
+
+    default Map<String, List<T>> groupByTime(List<T> results, StatsTimeUnit unit, Function< T,Date> supplier){
+        results.sort(Comparator.comparing(supplier));
         Map<String, List<T>> result = new LinkedHashMap<>();
         results.forEach(combineResult->{
-            combineResult.setTimeParseResult(unit.parse(combineResult.getInfusionStartTime()));
-            String timeFormat = unit.parse(combineResult.getInfusionStartTime());
+            String timeFormat = unit.parse(supplier.apply(combineResult));
+            combineResult.setTimeParseResult(timeFormat);
             result.computeIfAbsent(timeFormat,k->new ArrayList<>()).add(combineResult);
         });
         return result;
     }
 
+
     default List<StatsColumn> getAllColumn(List<String> allAnalName){
         List<StatsColumn> columnNames = new ArrayList<>();
         columnNames.add(StatsColumn.of("时间","时间"));

+ 6 - 5
nb-system/src/main/java/com/nb/bus/stats/analyse/EvalStatsAnalyse.java

@@ -14,6 +14,7 @@ import com.nb.bus.service.LocalBusHospitalConfigService;
 import com.nb.bus.service.LocalBusInfusionHistoryService;
 import com.nb.bus.service.dto.CombineEvalResult;
 import com.nb.bus.service.dto.CombineQuery;
+import com.nb.bus.service.dto.CombineResult;
 import com.nb.bus.stats.CommonStats;
 import com.nb.bus.stats.entity.*;
 import com.nb.bus.stats.enums.PieEnum;
@@ -206,7 +207,7 @@ public class EvalStatsAnalyse implements CommonStats<CombineEvalResult> {
         Map<String, List<CombineEvalResult>> groupByTime = groupByTime(results, unit);
         //获取所有镇痛信息
         List<LineResult> result = new ArrayList<>();
-        result.add(addRatio(groupByTime));
+        result.add(addRatio(results,unit,groupByTime));
         //只对包含评价的数据进行时间划分
         Map<String, List<CombineEvalResult>> exitEvalGroupByTime = groupByTime(
                 results
@@ -336,18 +337,18 @@ public class EvalStatsAnalyse implements CommonStats<CombineEvalResult> {
     }
 
     /**
-     * 描述:添加评价比率
+     * 描述:添加评价比率,当天/周/月 评价过的输注次数与 当天/周/月总输注次数的占比
      * @author lifang
      * @date 2022/6/8 21:50
-     * @param groupByTime
+     * @param groupByTime 根据输注开始时间进行统计
      * @return LineResult
      */
-    private LineResult<BigDecimal> addRatio(Map<String, List<CombineEvalResult>> groupByTime) {
+    private LineResult<BigDecimal> addRatio(List<CombineEvalResult> results, StatsTimeUnit unit,Map<String, List<CombineEvalResult>> groupByTime) {
         LineResult<BigDecimal> result = LineResult.of("ratio",true,false,"评价占比分布图");
         LineResult.LineContent<BigDecimal> ratioLine =  new LineResult.LineContent<>("评价占比");
         List<String> time = result.getTime();
 
-        //根据时间区间对镇痛方式进行统计
+        //根据输注开始时间区间对评价进行统计
         groupByTime.forEach((timeRange,combineResult)->{
             ratioLine.addValue(computeEvalRatio(combineResult).getRatio());
             time.add(timeRange);

+ 2 - 0
nb-system/src/main/resources/mapper/bus/BusInfusionHistoryMapper.xml

@@ -84,6 +84,7 @@
     </resultMap>
 
     <resultMap id="combineEvalResult" type="com.nb.bus.service.dto.CombineEvalResult">
+        <result column="evaluate_time" property="evalTime"/>
         <result column="infusion_id" property="id"/>
         <result column="eval_id" property="evalId"/>
         <result column="infusion_start_time" property="infusionStartTime"/>
@@ -275,6 +276,7 @@
         select
         i.id as infusion_id,
         i.start_time as infusion_start_time,
+        e.evaluate_time as evaluate_time,
         e.statics as statics,
         e.activity as activity,
         e.calm as calm,