|
|
@@ -2,7 +2,6 @@ package com.nb.bus.stats.analyse;
|
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
|
-import cn.hutool.core.util.StrUtil;
|
|
|
import com.nb.bus.enums.StatsAnalyseEnum;
|
|
|
import com.nb.bus.enums.StatsTimeUnit;
|
|
|
import com.nb.bus.service.LocalBusInfusionHistoryService;
|
|
|
@@ -10,7 +9,6 @@ import com.nb.bus.service.dto.CombineHistoryResult;
|
|
|
import com.nb.bus.service.dto.CombineQuery;
|
|
|
import com.nb.bus.service.dto.CombineResult;
|
|
|
import com.nb.bus.stats.CommonHistoryStats;
|
|
|
-import com.nb.bus.stats.CommonStats;
|
|
|
import com.nb.bus.stats.entity.*;
|
|
|
import com.nb.bus.stats.enums.PieEnum;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
@@ -48,7 +46,13 @@ public class PcaStatsAnalyse implements CommonHistoryStats {
|
|
|
long total=0;
|
|
|
long pcaValidTotalCount=0;
|
|
|
long pcaInvalidTotalCount=0;
|
|
|
- for (CombineResult combineResult : sources) {
|
|
|
+ Map<String, CombineHistoryResult> infusionMaps = sources.stream()
|
|
|
+ .collect(Collectors.groupingBy(CombineHistoryResult::getId,
|
|
|
+ Collectors.collectingAndThen(
|
|
|
+ Collectors.reducing((t1, t2) -> t1.getUploadTime().after(t2.getUploadTime()) ? t1 : t2),
|
|
|
+ Optional::get
|
|
|
+ )));
|
|
|
+ for (CombineResult combineResult : infusionMaps.values()) {
|
|
|
Integer validCount = Optional.ofNullable(combineResult.getPcaValidCount()).orElse(0);
|
|
|
Integer invalidCount =Optional.ofNullable( combineResult.getPcaInvalidCount()).orElse(0);
|
|
|
pcaValidTotalCount=pcaValidTotalCount+validCount;
|
|
|
@@ -63,11 +67,9 @@ public class PcaStatsAnalyse implements CommonHistoryStats {
|
|
|
@Override
|
|
|
public List<LineResult> handleLine(List<CombineHistoryResult> sources, StatsTimeUnit unit,Date minTime,Date maxTime) {
|
|
|
//根据时间对结果进行区分统计
|
|
|
- Map<String, List<CombineHistoryResult>> groupByTime =groupByInfuisonAndGetMax(
|
|
|
- groupByTime(sources,unit,minTime,maxTime,t-> StrUtil.isNotEmpty(t.getHistoryId()),
|
|
|
- CombineHistoryResult::getUploadTime,
|
|
|
- t-> CollectionUtil.newHashSet(unit.parse(t.getUploadTime())))
|
|
|
- );
|
|
|
+ Map<String, List<CombineHistoryResult>> groupByTime = groupByTime(sources, unit, minTime, maxTime, t -> true,
|
|
|
+ CombineHistoryResult::getUploadTime,
|
|
|
+ t -> CollectionUtil.newHashSet(unit.parse(t.getUploadTime())));
|
|
|
//获取所有镇痛信息
|
|
|
List<LineResult> result = new ArrayList<>();
|
|
|
result.add(countLine(groupByTime));
|
|
|
@@ -130,29 +132,39 @@ public class PcaStatsAnalyse implements CommonHistoryStats {
|
|
|
LineResult.LineContent<Long> validCountLine = new LineResult.LineContent<>("自控有效次数");
|
|
|
LineResult.LineContent<Long> invalidCountLine = new LineResult.LineContent<>("自控无效次数");
|
|
|
List<String> time = result.getTime();
|
|
|
- //根据时间区间对pca次数进行统计
|
|
|
+ //记录每个输注在最后区间范围内计算的结果, 当前区间的Pca数量-前一时间区间的Pca数量=当前时间区间pca数量
|
|
|
+ Map<String, CombineResult> combineMap = new HashMap<>();
|
|
|
groupByTime.forEach((timeRange,combineResults)->{
|
|
|
long pcaValidTotalCount=0;
|
|
|
long pcaInvalidTotalCount=0;
|
|
|
+
|
|
|
for (CombineResult combineResult : combineResults) {
|
|
|
Integer validCount = Optional.ofNullable(combineResult.getPcaValidCount()).orElse(0);
|
|
|
Integer invalidCount =Optional.ofNullable( combineResult.getPcaInvalidCount()).orElse(0);
|
|
|
- pcaValidTotalCount=pcaValidTotalCount+validCount;
|
|
|
- pcaInvalidTotalCount=pcaInvalidTotalCount+invalidCount;
|
|
|
+ CombineResult lastCombineResult = Optional.ofNullable(combineMap.get(combineResult.getId())).orElse(new CombineResult());
|
|
|
+
|
|
|
+ pcaValidTotalCount=pcaValidTotalCount+validCount-Optional.ofNullable(lastCombineResult.getPcaValidCount()).orElse(0);
|
|
|
+ pcaInvalidTotalCount=pcaInvalidTotalCount+invalidCount-Optional.ofNullable(lastCombineResult.getPcaInvalidCount()).orElse(0);
|
|
|
+
|
|
|
+ combineMap.put(combineResult.getId(),combineResult);
|
|
|
}
|
|
|
+
|
|
|
validCountLine.addValue(pcaValidTotalCount);
|
|
|
invalidCountLine.addValue(pcaInvalidTotalCount);
|
|
|
time.add(timeRange);
|
|
|
+
|
|
|
});
|
|
|
result.setContent(Arrays.asList(validCountLine,invalidCountLine));
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<TableResult> handleTable(List<CombineHistoryResult> results, StatsTimeUnit unit,Date minTime,Date maxTime) {
|
|
|
+ public List<TableResult> handleTable(List<CombineHistoryResult> sources, StatsTimeUnit unit,Date minTime,Date maxTime) {
|
|
|
TableResult result = new TableResult();
|
|
|
//根据时间对结果进行区分统计
|
|
|
- Map<String, List<CombineHistoryResult>> groupByTime = groupByInfusionTime(results, unit,minTime,maxTime);
|
|
|
+ Map<String, List<CombineHistoryResult>> groupByTime =groupByTime(sources, unit, minTime, maxTime, t -> true,
|
|
|
+ CombineHistoryResult::getUploadTime,
|
|
|
+ t -> CollectionUtil.newHashSet(unit.parse(t.getUploadTime())));
|
|
|
List<StatsColumn> allColumn = Arrays.asList(
|
|
|
StatsColumn.of("时间","时间"),
|
|
|
StatsColumn.of("输注总数","输注总数"),
|
|
|
@@ -161,6 +173,29 @@ public class PcaStatsAnalyse implements CommonHistoryStats {
|
|
|
StatsColumn.of("人均自控数","人均自控数"),
|
|
|
StatsColumn.of("人均自控有效数","人均自控有效数"),
|
|
|
StatsColumn.of("人均自控无效数","人均自控无效数"));
|
|
|
+
|
|
|
+ Map<String, List<CombineHistoryResult>> groupByTimeAndPatient=new HashMap<>();
|
|
|
+
|
|
|
+ //根据病号对输注进行划分,计算人均次数
|
|
|
+ groupByTime.forEach((k,histories)->{
|
|
|
+ if(CollectionUtil.isNotEmpty(histories)){
|
|
|
+ Map<String, Integer> pcaTotalCountByPatient = histories.parallelStream()
|
|
|
+ .collect(
|
|
|
+ Collectors.groupingBy(CombineHistoryResult::getPatientId,
|
|
|
+ Collectors.summingInt(CombineHistoryResult::getPcaTotalCount))
|
|
|
+ );
|
|
|
+ List<CombineHistoryResult> values = new ArrayList<>();
|
|
|
+ pcaTotalCountByPatient.forEach((patientId,pcaTotalCount)->{
|
|
|
+ CombineHistoryResult value = new CombineHistoryResult();
|
|
|
+ value.setPcaTotalCount(pcaTotalCount);
|
|
|
+ value.setPatientId(patientId);
|
|
|
+ values.add(value);
|
|
|
+ });
|
|
|
+ groupByTimeAndPatient.put(k,values);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
List<Map<String, Object>> contents = new ArrayList<>();
|
|
|
result.setContent(contents);
|
|
|
result.setColumn(allColumn);
|
|
|
@@ -171,24 +206,25 @@ public class PcaStatsAnalyse implements CommonHistoryStats {
|
|
|
long total=0;
|
|
|
long pcaValidTotalCount=0;
|
|
|
long pcaInvalidTotalCount=0;
|
|
|
+ List<CombineHistoryResult> personalPcaResults = Optional.ofNullable(groupByTimeAndPatient.get(timeRange)).orElse(new ArrayList<>());
|
|
|
|
|
|
- for (CombineHistoryResult combineResult : combineResults) {
|
|
|
+ for (CombineHistoryResult combineResult : personalPcaResults) {
|
|
|
Integer validCount = Optional.ofNullable(combineResult.getPcaValidCount()).orElse(0);
|
|
|
Integer invalidCount =Optional.ofNullable( combineResult.getPcaInvalidCount()).orElse(0);
|
|
|
pcaValidTotalCount=pcaValidTotalCount+validCount;
|
|
|
pcaInvalidTotalCount=pcaInvalidTotalCount+invalidCount;
|
|
|
total=total+validCount+invalidCount;
|
|
|
}
|
|
|
-
|
|
|
contentValues.put("输注总数", CollectionUtil.size(combineResults));
|
|
|
contentValues.put("自控总数",total);
|
|
|
contentValues.put("自控有效数",pcaValidTotalCount);
|
|
|
contentValues.put("自控无效数",pcaInvalidTotalCount);
|
|
|
- BigDecimal patientCount = BigDecimal.valueOf(combineResults.stream().map(CombineResult::getPatientCode).distinct().count());
|
|
|
+ BigDecimal patientCount = BigDecimal.valueOf(CollectionUtil.size(personalPcaResults));
|
|
|
+
|
|
|
|
|
|
- contentValues.put("人均自控数",BigDecimal.valueOf(total).divide(patientCount,2, RoundingMode.HALF_UP));
|
|
|
- contentValues.put("人均自控有效数",BigDecimal.valueOf(pcaValidTotalCount).divide(patientCount,2, RoundingMode.HALF_UP));
|
|
|
- contentValues.put("人均自控无效数",BigDecimal.valueOf(pcaInvalidTotalCount).divide(patientCount,2, RoundingMode.HALF_UP));
|
|
|
+ contentValues.put("人均自控数",patientCount.equals(BigDecimal.ZERO)?patientCount:BigDecimal.valueOf(total).divide(patientCount,2, RoundingMode.HALF_UP));
|
|
|
+ contentValues.put("人均自控有效数",patientCount.equals(BigDecimal.ZERO)?patientCount:BigDecimal.valueOf(pcaValidTotalCount).divide(patientCount,2, RoundingMode.HALF_UP));
|
|
|
+ contentValues.put("人均自控无效数",patientCount.equals(BigDecimal.ZERO)?patientCount:BigDecimal.valueOf(pcaInvalidTotalCount).divide(patientCount,2, RoundingMode.HALF_UP));
|
|
|
|
|
|
contents.add(contentValues);
|
|
|
});
|