|
|
@@ -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;
|
|
|
}
|
|
|
}
|