大屏手表监测数据统计逻辑修改

This commit is contained in:
feng
2025-12-16 10:11:41 +08:00
parent 79c8bd0da1
commit 9533c976f2
2 changed files with 42 additions and 26 deletions
@@ -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;
@@ -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) {