Ver Fonte

fix 输注量统计

A17404李放 há 3 anos atrás
pai
commit
88f630d746

+ 3 - 0
nb-system/src/main/java/com/nb/bus/service/dto/CombineQuery.java

@@ -147,6 +147,9 @@ public class CombineQuery {
     @ApiModelProperty(value = "设备报警状态")
     private Integer deviceAlarm;
 
+    @ApiModelProperty(value = "设备运行状态")
+    private Integer deviceRunState;
+
     @ApiModelProperty("按照输注开始时间排序")
     private Boolean infusionStartTimeDesc;
 

+ 9 - 5
nb-system/src/main/java/com/nb/bus/stats/analyse/AlarmStatsAnalyse.java

@@ -220,9 +220,9 @@ public class AlarmStatsAnalyse implements CommonStats<CombineAlarmResult> {
         TableResult result = new TableResult();
         //根据时间对结果进行区分统计
         Map<String, List<CombineAlarmResult>> groupByTimeResults = groupByTime(sources, unit,minTime,maxTime,
-                t->ObjectUtil.isNotNull(t.getAlarmTime()),
-                CombineAlarmResult::getAlarmTime,
-                t->CollectionUtil.newHashSet(unit.parse(t.getAlarmTime())));
+                t->true,
+                CombineAlarmResult::getUpdateTime,
+                t->CollectionUtil.newHashSet(unit.parse(t.getUpdateTime())));
         List<String> columnNames = Arrays.asList(
                 DeviceAlarmEnum.Jam.getText(),
                 DeviceAlarmEnum.Limit.getText(),
@@ -258,8 +258,12 @@ public class AlarmStatsAnalyse implements CommonStats<CombineAlarmResult> {
         //根据时间区间对镇痛方式进行统计
         groupByTimeResults.forEach((timeRange,combineResults)->{
             AlarmTotalPieResult alarmTotalPieResult = groupByTimeCountResult.computeIfAbsent(timeRange, k -> new AlarmTotalPieResult(addIntelligentParam()));
-            combineResults.forEach(alarmTotalPieResult::handle);
-            alarmTotalPieResult.setInfusionCount(combineResults.stream().map(CombineAlarmResult::getId).distinct().count());
+            Set<String> totalInfusion=new HashSet<>();
+            combineResults.stream()
+                    .filter(r->ObjectUtil.isNotNull(r.getAlarmTime()))
+                    .peek(r->totalInfusion.add(r.getId()))
+                    .forEach(alarmTotalPieResult::handle);
+            alarmTotalPieResult.setInfusionCount(CollectionUtil.size(totalInfusion));
         });
         groupByTimeCountResult.forEach((timeRange,totalResult)->{
             //表格内容

+ 28 - 2
nb-system/src/main/java/com/nb/bus/stats/analyse/InfusionDoseStatsAnalyse.java

@@ -82,7 +82,20 @@ public class InfusionDoseStatsAnalyse implements CommonHistoryStats {
 
     private LineResult appendDoseLine(Map<String, List<CombineHistoryResult>> groupByTime) {
         LineResult<BigDecimal> result = LineResult.of("appendDoseLine",false,false,"追加量分析走势图");
-        handleMixPolyLines(groupByTime,result,
+
+        //阶梯状计算每个输注在特定区间内的已输注量
+        Map<String, List<CombineHistoryResult>> ladderResult = new HashMap<>();
+        //记录每个输注在最后区间范围内计算的结果, 当前区间的已输注量-前一时间区间的Pca数量=当前时间区间pca数量
+        Map<String, BigDecimal> inputDoseByInfusion = new HashMap<>();
+        groupByTime.forEach((timeRange,combineResults)->{
+            for (CombineHistoryResult combineResult : combineResults) {
+                BigDecimal inputDose = Optional.ofNullable(combineResult.getTotalAppendDose()).orElse(BigDecimal.ZERO);
+                BigDecimal lastInputDose = Optional.ofNullable(inputDoseByInfusion.get(combineResult.getId())).orElse(BigDecimal.ZERO);
+                combineResult.setTotalAppendDose(inputDose.subtract(lastInputDose));
+                inputDoseByInfusion.put(combineResult.getId(),lastInputDose);
+            }
+        });
+        handleMixPolyLines(ladderResult,result,
                 combineResult -> {
                     if (combineResult.getTotalAppendDose() == null) {
                         combineResult.setTotalAppendDose(BigDecimal.valueOf(0));
@@ -102,7 +115,20 @@ public class InfusionDoseStatsAnalyse implements CommonHistoryStats {
      */
     private LineResult inputDoseLine(Map<String, List<CombineHistoryResult>> groupByTime) {
         LineResult<BigDecimal> result = LineResult.of("inputDoseLine",false,false,"已输入量分析走势图");
-        handleMixPolyLines(groupByTime,result,
+       //阶梯状计算每个输注在特定区间内的已输注量
+        Map<String, List<CombineHistoryResult>> ladderResult = new HashMap<>();
+        //记录每个输注在最后区间范围内计算的结果, 当前区间的已输注量-前一时间区间的Pca数量=当前时间区间pca数量
+        Map<String, BigDecimal> inputDoseByInfusion = new HashMap<>();
+        groupByTime.forEach((timeRange,combineResults)->{
+            for (CombineHistoryResult combineResult : combineResults) {
+                BigDecimal inputDose = Optional.ofNullable(combineResult.getInputDose()).orElse(BigDecimal.ZERO);
+                BigDecimal lastInputDose = Optional.ofNullable(inputDoseByInfusion.get(combineResult.getId())).orElse(BigDecimal.ZERO);
+                combineResult.setInputDose(inputDose.subtract(lastInputDose));
+                inputDoseByInfusion.put(combineResult.getId(),lastInputDose);
+            }
+        });
+
+        handleMixPolyLines(ladderResult,result,
                 combineResult -> {
                     if (combineResult.getInputDose() == null) {
                         combineResult.setInputDose(BigDecimal.valueOf(0));

+ 9 - 9
nb-system/src/main/java/com/nb/bus/stats/analyse/PcaStatsAnalyse.java

@@ -93,7 +93,7 @@ public class PcaStatsAnalyse implements CommonHistoryStats {
         //根据病号对输注进行划分
         groupByTime.forEach((k,histories)->{
             if(CollectionUtil.isNotEmpty(histories)){
-                groupByTimeAndPatient.put(k,groupByPatient(histories));
+                groupByTimeAndPatient.put(k, groupByClinic(histories));
             }
         });
 
@@ -169,7 +169,7 @@ public class PcaStatsAnalyse implements CommonHistoryStats {
         //根据病号对输注进行划分,计算人均次数
         groupByTime.forEach((k,histories)->{
             if(CollectionUtil.isNotEmpty(histories)){
-                groupByTimeAndPatient.put(k,groupByTimeAndPatient.put(k,groupByPatient(histories)));
+                groupByTimeAndPatient.put(k,groupByTimeAndPatient.put(k, groupByClinic(histories)));
             }
         });
 
@@ -184,7 +184,7 @@ public class PcaStatsAnalyse implements CommonHistoryStats {
             long total=0;
             long pcaValidTotalCount=0;
             long pcaInvalidTotalCount=0;
-            List<CombineHistoryResult> personalPcaResults =groupByPatient(combineResults);
+            List<CombineHistoryResult> personalPcaResults = groupByClinic(combineResults);
 
             for (CombineHistoryResult combineResult : personalPcaResults) {
                 Integer validCount = Optional.ofNullable(combineResult.getPcaValidCount()).orElse(0);
@@ -213,18 +213,18 @@ public class PcaStatsAnalyse implements CommonHistoryStats {
 
 
     /**
-     * 描述: 根据病号对结果进行划分
+     * 描述: 根据临床手术对结果进行划分
      * @author lifang
      * @date 2022/7/23 15:21
      * @param sources
-     * @return List<CombineHistoryResult> 一个病人信息占据一个CombineHistoryResult,包括PCA信息
+     * @return List<CombineHistoryResult> 一个临床手术信息占据一个CombineHistoryResult,包括PCA信息
      */
-    private List<CombineHistoryResult> groupByPatient(List<CombineHistoryResult> sources){
+    private List<CombineHistoryResult> groupByClinic(List<CombineHistoryResult> sources){
         List<CombineHistoryResult> result = new ArrayList<>();
         Map<String, List<CombineHistoryResult>> patientMap = sources.parallelStream()
                 .collect(
-                        Collectors.groupingBy(CombineHistoryResult::getPatientId));
-        patientMap.forEach((patientId,histories)->{
+                        Collectors.groupingBy(CombineHistoryResult::getClinicId));
+        patientMap.forEach((clinicId,histories)->{
             CombineHistoryResult value = new CombineHistoryResult();
             AtomicInteger pcaValidCount=new AtomicInteger(0);
             AtomicInteger pcaInValidCount=new AtomicInteger(0);
@@ -234,7 +234,7 @@ public class PcaStatsAnalyse implements CommonHistoryStats {
             });
             value.setPcaValidCount(pcaValidCount.get());
             value.setPcaInvalidCount(pcaInValidCount.get());
-            value.setPatientId(patientId);
+            value.setClinicId(clinicId);
             result.add(value);
         });
         return result;

+ 0 - 1
nb-system/src/main/java/com/nb/bus/stats/report/AsaStatsReport.java

@@ -151,7 +151,6 @@ public class AsaStatsReport implements CommonClinicStats {
 
         //根据时间区间对镇痛方式进行统计
         groupByTime.forEach((timeRange,combineResult)->{
-            //已有的镇痛方式数量
             BigDecimal totalSize = BigDecimal.valueOf(CollectionUtil.size(combineResult));
             Map<String, Long> groupByAnal = groupByAsa(combineResult);
             //获取特定时间区间内 各镇痛方式的 数量

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

@@ -362,6 +362,7 @@
     <select id="queryStatsHistory" resultMap="queryStatsHistory">
         SELECT i.id AS infusion_id,
         p.id AS patient_id,
+        c.id as clinic_id,
         MAX(h.total_append_dose) AS total_append_dose,
         MAX(h.input_dose) AS input_dose,
         MAX(h.continue_dose) AS continue_dose,
@@ -409,6 +410,9 @@
                     and undo_time &lt;=  #{query.undoTimeRange[1]}
                 </if>
             </if>
+            <if test="query.deviceRunState != null">
+                and run_state = #{query.deviceRunState}
+            </if>
             <if test="query.deviceType != null">
                 and type =  #{query.deviceType}
             </if>