大屏手表监测数据统计逻辑修改
This commit is contained in:
@@ -27,6 +27,17 @@ public class BigScreenVo {
|
||||
@Parameter(description = "统计数据总条目数")
|
||||
private Integer totalSum;
|
||||
|
||||
/**
|
||||
* 目前只有大屏监测数据中的心率使用
|
||||
*/
|
||||
@Parameter(description = "最大值")
|
||||
private Integer maxValue;
|
||||
/**
|
||||
* 目前只有大屏监测数据中的心率使用
|
||||
*/
|
||||
@Parameter(description = "最小值")
|
||||
private Integer minValue;
|
||||
|
||||
public Integer getWarnCount() {
|
||||
if(null != warnCount){
|
||||
return warnCount;
|
||||
|
||||
+31
-26
@@ -1220,17 +1220,21 @@ public class WatchDataServiceImpl extends ServiceImpl<WatchDataMapper, WatchData
|
||||
}
|
||||
|
||||
private BigScreenVo heartRateData(String orgCode,Date startDate,Date endDate){
|
||||
MPJLambdaWrapper<WatchDataHeartRate> wrapper = new MPJLambdaWrapper<>();
|
||||
wrapper.selectFunc(() ->"COUNT(DISTINCT bind_user_id)",
|
||||
MPJLambdaWrapper<WatchDataHeartRate> baseWrapper = new MPJLambdaWrapper<>();
|
||||
baseWrapper.selectFunc(() ->"COUNT(DISTINCT bind_user_id)",
|
||||
WatchDataHeartRate::getBindUserId,BigScreenVo::getUserCount);
|
||||
wrapper.selectFunc(() ->"COUNT(IF(data_value >= '50' and data_value < '120', '1', NULL))",
|
||||
baseWrapper.selectFunc(() ->"COUNT(IF(data_value >= '60' and data_value <= '100', '1', NULL))",
|
||||
WatchDataHeartRate::getId, BigScreenVo::getNormalCount);
|
||||
wrapper.selectCount(WatchDataHeartRate::getId,BigScreenVo::getTotalSum);
|
||||
wrapper.ge(WatchDataHeartRate::getDataDate,startDate);
|
||||
wrapper.le(WatchDataHeartRate::getDataDate,endDate);
|
||||
baseWrapper.selectCount(WatchDataHeartRate::getId,BigScreenVo::getTotalSum);
|
||||
//新疆项目中心率数据额外查询最大值于最小值
|
||||
baseWrapper.selectMin(WatchDataHeartRate::getDataValue,BigScreenVo::getMinValue);
|
||||
baseWrapper.selectMax(WatchDataHeartRate::getDataValue,BigScreenVo::getMaxValue);
|
||||
BigScreenVo screenVo = heartRateMapper.selectJoinOne(BigScreenVo.class,baseWrapper);
|
||||
baseWrapper.ge(WatchDataHeartRate::getDataDate,startDate);
|
||||
baseWrapper.le(WatchDataHeartRate::getDataDate,endDate);
|
||||
if(StrUtil.isNotEmpty(orgCode)){
|
||||
//目前的表结构不支持部门的筛选 ,要支持需要嵌套日汇总表的子查询
|
||||
wrapper.in(WatchDataHeartRate::getBindUserId,WatchStatUserInfoDayHeartRate.class,
|
||||
baseWrapper.in(WatchDataHeartRate::getBindUserId,WatchStatUserInfoDayHeartRate.class,
|
||||
in -> in.select(WatchStatUserInfoDayHeartRate::getUserId)
|
||||
.likeRight(WatchStatUserInfoDayHeartRate::getOrgCode,orgCode)
|
||||
.ge(WatchStatUserInfoDayHeartRate::getDataDate,startDate)
|
||||
@@ -1238,17 +1242,17 @@ public class WatchDataServiceImpl extends ServiceImpl<WatchDataMapper, WatchData
|
||||
.groupBy(WatchStatUserInfoDayHeartRate::getUserId)
|
||||
);
|
||||
}
|
||||
BigScreenVo screenVo = heartRateMapper.selectJoinOne(BigScreenVo.class,wrapper);
|
||||
screenVo.setWarnCount(screenVo.getTotalSum() - screenVo.getNormalCount());
|
||||
screenVo.setType("1");
|
||||
return screenVo;
|
||||
}
|
||||
|
||||
|
||||
private BigScreenVo spo2Data(String orgCode,Date startDate,Date endDate){
|
||||
MPJLambdaWrapper<WatchDataSpo2> wrapper = new MPJLambdaWrapper<>();
|
||||
wrapper.selectFunc(() ->"COUNT(DISTINCT bind_user_id)",
|
||||
WatchDataSpo2::getBindUserId,BigScreenVo::getUserCount);
|
||||
wrapper.selectFunc(() ->"COUNT(IF(data_value >= '75' and data_value < '98', '1', NULL))",
|
||||
wrapper.selectFunc(() ->"COUNT(IF(data_value >= '70', '1', NULL))",
|
||||
WatchDataSpo2::getId, BigScreenVo::getNormalCount);
|
||||
wrapper.selectCount(WatchDataSpo2::getId,BigScreenVo::getTotalSum);
|
||||
wrapper.ge(WatchDataSpo2::getDataDate,startDate);
|
||||
@@ -1343,9 +1347,9 @@ public class WatchDataServiceImpl extends ServiceImpl<WatchDataMapper, WatchData
|
||||
Date startDate = dateByType(dto.getType(),false);
|
||||
Date endDate = dateByType(dto.getType(),true);
|
||||
String orgCode = dto.getOrgCode();
|
||||
//查询告警的数量(心率告警和血氧告警)
|
||||
CompletableFuture<List<BigScreenVo>> monitorDataFuture = CompletableFuture.supplyAsync(() ->
|
||||
monitorData(orgCode,startDate,endDate),asyncTaskExecutor);
|
||||
//查询告警的数量(心率告警和血氧告警) 20251216前查询了告警记录作为了境界数据,后新疆项目去掉了此处的逻辑
|
||||
/* CompletableFuture<List<BigScreenVo>> monitorDataFuture = CompletableFuture.supplyAsync(() ->
|
||||
monitorData(orgCode,startDate,endDate),asyncTaskExecutor);*/
|
||||
//查询心率区间分布
|
||||
CompletableFuture<BigScreenVo> heartRateDataFuture = CompletableFuture.supplyAsync(() ->
|
||||
heartRateData(orgCode,startDate,endDate),asyncTaskExecutor);
|
||||
@@ -1358,22 +1362,23 @@ public class WatchDataServiceImpl extends ServiceImpl<WatchDataMapper, WatchData
|
||||
//查询体温数据的区间分布
|
||||
CompletableFuture<BigScreenVo> temperatureDataFuture = CompletableFuture.supplyAsync(() ->
|
||||
temperatureData(orgCode,startDate,endDate),asyncTaskExecutor);
|
||||
CompletableFuture.allOf(monitorDataFuture, heartRateDataFuture,spo2DataFuture,stressDataFuture,temperatureDataFuture).join();
|
||||
CompletableFuture.allOf(heartRateDataFuture,spo2DataFuture,stressDataFuture,temperatureDataFuture).join();
|
||||
//处理数据(按之前的业务逻辑要将告警人数加到各统计项目中)
|
||||
try {
|
||||
List<BigScreenVo> temperatureDataList = monitorDataFuture.get();
|
||||
BigScreenVo heartRate = heartRateDataFuture.get();
|
||||
temperatureDataList.stream().filter(o -> o.getType().equals("heart_rate")).findFirst().ifPresent(co ->{
|
||||
heartRate.setRiskCount(co.getTotalSum());
|
||||
heartRate.setTotalSum(heartRate.getTotalSum() + co.getTotalSum() );
|
||||
});
|
||||
list.add(heartRate);
|
||||
BigScreenVo spo2Data = spo2DataFuture.get();
|
||||
temperatureDataList.stream().filter(o -> o.getType().equals("spo2")).findFirst().ifPresent(co ->{
|
||||
spo2Data.setRiskCount(co.getTotalSum());
|
||||
spo2Data.setTotalSum(spo2Data.getTotalSum() + co.getTotalSum() );
|
||||
});
|
||||
list.add(spo2Data);
|
||||
// List<BigScreenVo> temperatureDataList = monitorDataFuture.get();
|
||||
// BigScreenVo heartRate = heartRateDataFuture.get();
|
||||
// temperatureDataList.stream().filter(o -> o.getType().equals("heart_rate")).findFirst().ifPresent(co ->{
|
||||
// heartRate.setRiskCount(co.getTotalSum());
|
||||
// heartRate.setTotalSum(heartRate.getTotalSum() + co.getTotalSum() );
|
||||
// });
|
||||
// list.add(heartRate);
|
||||
// BigScreenVo spo2Data = spo2DataFuture.get();
|
||||
// temperatureDataList.stream().filter(o -> o.getType().equals("spo2")).findFirst().ifPresent(co ->{
|
||||
// spo2Data.setRiskCount(co.getTotalSum());
|
||||
// spo2Data.setTotalSum(spo2Data.getTotalSum() + co.getTotalSum() );
|
||||
// });
|
||||
list.add(heartRateDataFuture.get());
|
||||
list.add(spo2DataFuture.get());
|
||||
list.add(stressDataFuture.get());
|
||||
list.add(temperatureDataFuture.get());
|
||||
} catch (InterruptedException | ExecutionException e) {
|
||||
|
||||
Reference in New Issue
Block a user