代码逻辑补全

This commit is contained in:
feng
2025-12-16 16:47:19 +08:00
parent a7bad9d444
commit b093d95463
2 changed files with 165 additions and 6 deletions
@@ -1,5 +1,7 @@
package com.renkang.watch.dto;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUtil;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@@ -38,4 +40,22 @@ public class XjScreenAbnormalParam {
*/
@Schema(title = "查询条件(业务类型不同 查询条件数据代表的意义不同)")
private Integer search = 0;
public Date getEndTime() {
if (endTime == null) {
//没传时间默认查一周
endTime = DateUtil.endOfWeek(new Date());
}
endTime = DateUtil.beginOfDay(endTime);
return endTime;
}
public Date getStartTime() {
if (startTime == null) {
//没传时间默认查一周
startTime = DateUtil.beginOfWeek(new Date());
}
endTime = DateUtil.endOfDay(endTime).offset(DateField.MILLISECOND,-999);
return startTime;
}
}
@@ -1440,16 +1440,16 @@ public class WatchDataServiceImpl extends ServiceImpl<WatchDataMapper, WatchData
result = heartRateDataAbnormal(userIds,result,param.getStartTime(),param.getEndTime(),param.getOrgCode(),param.getSearch());
break;
case 2: //血氧异常数据
result = spo2DataAbnormal(userIds,result,param.getStartTime(),param.getEndTime(),param.getOrgCode(),param.getSearch());
break;
case 3: //压力异常数据
result = stressDataAbnormal(userIds,result,param.getStartTime(),param.getEndTime(),param.getOrgCode(),param.getSearch());
break;
case 5: //体温异常数据
result = temperatureDataAbnormal(userIds,result,param.getStartTime(),param.getEndTime(),param.getOrgCode(),param.getSearch());
break;
case 7: //步数异常数据
result = sdcDataAbnormal(userIds,result,param.getStartTime(),param.getEndTime(),param.getOrgCode(),param.getSearch());
break;
default:break;
}
@@ -1457,6 +1457,145 @@ public class WatchDataServiceImpl extends ServiceImpl<WatchDataMapper, WatchData
return result;
}
private IPage<XjScreenAbnormalVO> sdcDataAbnormal(List<String> userIds, IPage<XjScreenAbnormalVO> result, Date startTime, Date endTime, String orgCode, Integer search) {
MPJLambdaWrapper<WatchStatUserInfoDaySdc> baseWrapper = new MPJLambdaWrapper<>();
baseWrapper.selectAs(WatchStatUserInfoDaySdc::getId,XjScreenAbnormalVO::getId);
baseWrapper.selectAs(WatchStatUserInfoDaySdc::getUserId,XjScreenAbnormalVO::getUserId);
baseWrapper.selectAs(WatchStatUserInfoDaySdc::getStepValue,XjScreenAbnormalVO::getDataValue);
baseWrapper.selectAs(WatchStatUserInfoDaySdc::getDataDate,XjScreenAbnormalVO::getDateTime);
baseWrapper.likeRight(StrUtil.isNotEmpty(orgCode),WatchStatUserInfoDaySdc::getOrgCode,orgCode);
baseWrapper.ge(WatchStatUserInfoDaySdc::getDataDate,startTime);
baseWrapper.le(WatchStatUserInfoDaySdc::getDataDate,endTime);
baseWrapper.in(ObjectUtil.isNotNull(userIds),WatchStatUserInfoDaySdc::getUserId,userIds);
//筛选条件 (0:小于5000,1:5000-10000,2:10000-15000,3:15000-20000,4大于20000)
switch (search){
case 0:
baseWrapper.lt(WatchStatUserInfoDaySdc::getStepValue,5000);
break;
case 1:
baseWrapper.ge(WatchStatUserInfoDaySdc::getStepValue,5000);
baseWrapper.lt(WatchStatUserInfoDaySdc::getStepValue,10000);
break;
case 2:
baseWrapper.ge(WatchStatUserInfoDaySdc::getStepValue,10000);
baseWrapper.lt(WatchStatUserInfoDaySdc::getStepValue,15000);
break;
case 3:
baseWrapper.ge(WatchStatUserInfoDaySdc::getStepValue,15000);
baseWrapper.lt(WatchStatUserInfoDaySdc::getStepValue,20000);
break;
case 4:
baseWrapper.ge(WatchStatUserInfoDaySdc::getStepValue,20000);
break;
default:break;
}
return watchStatUserInfoDaySdcMapper.selectJoinPage(result,XjScreenAbnormalVO.class, baseWrapper);
}
private IPage<XjScreenAbnormalVO> temperatureDataAbnormal(List<String> userIds, IPage<XjScreenAbnormalVO> result, Date startTime, Date endTime, String orgCode, Integer search) {
MPJLambdaWrapper<WatchDataTemperature> baseWrapper = new MPJLambdaWrapper<>();
baseWrapper.selectAs(WatchDataTemperature::getId,XjScreenAbnormalVO::getId);
baseWrapper.selectAs(WatchDataTemperature::getBindUserId,XjScreenAbnormalVO::getUserId);
baseWrapper.selectAs(WatchDataTemperature::getDataValue,XjScreenAbnormalVO::getDataValue);
baseWrapper.selectAs(WatchDataTemperature::getDataDate,XjScreenAbnormalVO::getDateTime);
baseWrapper.ge(ObjectUtil.isNotNull(startTime),WatchDataTemperature::getDataDate,startTime);
baseWrapper.le(ObjectUtil.isNotNull(endTime),WatchDataTemperature::getDataDate,endTime);
baseWrapper.in(ObjectUtil.isNotNull(userIds),WatchDataTemperature::getBindUserId,userIds);
//目前的表结构不支持部门的筛选 ,要支持需要嵌套日汇总表的子查询
if(StrUtil.isNotEmpty(orgCode)){
baseWrapper.in(WatchDataTemperature::getBindUserId,WatchStatUserInfoDayTemp.class,
in -> in.select(WatchStatUserInfoDayTemp::getUserId)
.likeRight(WatchStatUserInfoDayTemp::getOrgCode,orgCode)
.ge(ObjectUtil.isNotNull(startTime),WatchStatUserInfoDayTemp::getDataDate,startTime)
.le(ObjectUtil.isNotNull(endTime),WatchStatUserInfoDayTemp::getDataDate,endTime)
.groupBy(WatchStatUserInfoDayTemp::getUserId)
);
}
//(0-大于38,1-37.2-38,2-小于37.2)
switch (search){
case 0:
baseWrapper.ge(WatchDataStress::getDataValue,38);
break;
case 1:
baseWrapper.ge(WatchDataStress::getDataValue,37.2);
baseWrapper.lt(WatchDataStress::getDataValue,38);
break;
case 2:
baseWrapper.lt(WatchDataStress::getDataValue,37.2);
break;
default:break;
}
result = temperatureMapper.selectJoinPage(result,XjScreenAbnormalVO.class,baseWrapper);
return result;
}
private IPage<XjScreenAbnormalVO> stressDataAbnormal(List<String> userIds, IPage<XjScreenAbnormalVO> result, Date startTime, Date endTime, String orgCode, Integer search) {
MPJLambdaWrapper<WatchDataStress> baseWrapper = new MPJLambdaWrapper<>();
baseWrapper.selectAs(WatchDataStress::getId,XjScreenAbnormalVO::getId);
baseWrapper.selectAs(WatchDataStress::getBindUserId,XjScreenAbnormalVO::getUserId);
baseWrapper.selectAs(WatchDataStress::getDataValue,XjScreenAbnormalVO::getDataValue);
baseWrapper.selectAs(WatchDataStress::getDataDate,XjScreenAbnormalVO::getDateTime);
baseWrapper.ge(ObjectUtil.isNotNull(startTime),WatchDataStress::getDataDate,startTime);
baseWrapper.le(ObjectUtil.isNotNull(endTime),WatchDataStress::getDataDate,endTime);
baseWrapper.in(ObjectUtil.isNotNull(userIds),WatchDataStress::getBindUserId,userIds);
//目前的表结构不支持部门的筛选 ,要支持需要嵌套日汇总表的子查询
if(StrUtil.isNotEmpty(orgCode)){
baseWrapper.in(WatchDataStress::getBindUserId,WatchStatUserInfoDayStress.class,
in -> in.select(WatchStatUserInfoDayStress::getUserId)
.likeRight(WatchStatUserInfoDayStress::getOrgCode,orgCode)
.ge(ObjectUtil.isNotNull(startTime),WatchStatUserInfoDayStress::getDataDate,startTime)
.le(ObjectUtil.isNotNull(endTime),WatchStatUserInfoDayStress::getDataDate,endTime)
.groupBy(WatchStatUserInfoDayStress::getUserId)
);
}
//(0-偏高,1-中等,2-正常,3-放松) , 放松<30 30<=正常<60 60<=中等<80 80<偏高
switch (search){
case 0:
baseWrapper.ge(WatchDataStress::getDataValue,80);
break;
case 1:
baseWrapper.ge(WatchDataStress::getDataValue,60);
baseWrapper.lt(WatchDataStress::getDataValue,80);
break;
case 2:
baseWrapper.ge(WatchDataStress::getDataValue,30);
baseWrapper.lt(WatchDataStress::getDataValue,60);
break;
case 3:
baseWrapper.lt(WatchDataStress::getDataValue,30);
break;
default:break;
}
result = stressMapper.selectJoinPage(result,XjScreenAbnormalVO.class,baseWrapper);
return result;
}
private IPage<XjScreenAbnormalVO> spo2DataAbnormal(List<String> userIds, IPage<XjScreenAbnormalVO> result, Date startTime, Date endTime, String orgCode, Integer search) {
MPJLambdaWrapper<WatchDataSpo2> baseWrapper = new MPJLambdaWrapper<>();
baseWrapper.selectAs(WatchDataSpo2::getId,XjScreenAbnormalVO::getId);
baseWrapper.selectAs(WatchDataSpo2::getBindUserId,XjScreenAbnormalVO::getUserId);
baseWrapper.selectAs(WatchDataSpo2::getDataValue,XjScreenAbnormalVO::getDataValue);
baseWrapper.selectAs(WatchDataSpo2::getDataDate,XjScreenAbnormalVO::getDateTime);
baseWrapper.ge(ObjectUtil.isNotNull(startTime),WatchDataSpo2::getDataDate,startTime);
baseWrapper.le(ObjectUtil.isNotNull(endTime),WatchDataSpo2::getDataDate,endTime);
baseWrapper.in(ObjectUtil.isNotNull(userIds),WatchDataSpo2::getBindUserId,userIds);
//目前的表结构不支持部门的筛选 ,要支持需要嵌套日汇总表的子查询
if(StrUtil.isNotEmpty(orgCode)){
baseWrapper.in(WatchDataSpo2::getBindUserId,WatchStatUserInfoDaySpo2.class,
in -> in.select(WatchStatUserInfoDaySpo2::getUserId)
.likeRight(WatchStatUserInfoDaySpo2::getOrgCode,orgCode)
.ge(ObjectUtil.isNotNull(startTime),WatchStatUserInfoDaySpo2::getDataDate,startTime)
.le(ObjectUtil.isNotNull(endTime),WatchStatUserInfoDaySpo2::getDataDate,endTime)
.groupBy(WatchStatUserInfoDaySpo2::getUserId)
);
}
//search (0-异常,1-正常) ,>=90认为是正常
baseWrapper.lt(search == 0,WatchDataHeartRate::getDataValue,90);
baseWrapper.ge(search == 1,WatchDataHeartRate::getDataValue,90);
result = spo2Mapper.selectJoinPage(result,XjScreenAbnormalVO.class,baseWrapper);
return result;
}
private IPage<XjScreenAbnormalVO> heartRateDataAbnormal(List<String> userIds, IPage<XjScreenAbnormalVO> result, Date startTime, Date endTime, String orgCode, Integer search) {
MPJLambdaWrapper<WatchDataHeartRate> baseWrapper = new MPJLambdaWrapper<>();
baseWrapper.selectAs(WatchDataHeartRate::getId,XjScreenAbnormalVO::getId);
@@ -1466,8 +1605,8 @@ public class WatchDataServiceImpl extends ServiceImpl<WatchDataMapper, WatchData
baseWrapper.ge(ObjectUtil.isNotNull(startTime),WatchDataHeartRate::getDataDate,startTime);
baseWrapper.le(ObjectUtil.isNotNull(endTime),WatchDataHeartRate::getDataDate,endTime);
baseWrapper.in(ObjectUtil.isNotNull(userIds),WatchDataHeartRate::getBindUserId,userIds);
//目前的表结构不支持部门的筛选 ,要支持需要嵌套日汇总表的子查询
if(StrUtil.isNotEmpty(orgCode)){
//目前的表结构不支持部门的筛选 ,要支持需要嵌套日汇总表的子查询
baseWrapper.in(WatchDataHeartRate::getBindUserId,WatchStatUserInfoDayHeartRate.class,
in -> in.select(WatchStatUserInfoDayHeartRate::getUserId)
.likeRight(WatchStatUserInfoDayHeartRate::getOrgCode,orgCode)
@@ -1494,7 +1633,7 @@ public class WatchDataServiceImpl extends ServiceImpl<WatchDataMapper, WatchData
if(!result.getRecords().isEmpty()){
List<BaseEmployeeInfo> userList = sysBaseAPI.queryBaseEmployeeInfo(result.getRecords().stream().map(XjScreenAbnormalVO::getUserId).collect(Collectors.toSet()));
result.getRecords().forEach(vo ->{
BaseEmployeeInfo employeeInfo = userList.stream().filter(u -> vo.getUserId().equals(u.getUserId())).findFirst().orElse(null);
BaseEmployeeInfo employeeInfo = userList.stream().filter(u -> u.getUserId().equals(vo.getUserId())).findFirst().orElse(null);
if(null != employeeInfo){
vo.setAge(employeeInfo.getAge());
vo.setSex(employeeInfo.getSex());