Commit cc7b9fa8 by 汪志阳

fix:bug修改

parent 58bbfd5d
...@@ -49,6 +49,8 @@ public class AnalysisVO { ...@@ -49,6 +49,8 @@ public class AnalysisVO {
private int hrSlow; // 当前心率 private int hrSlow; // 当前心率
private String hrSlowTime; // 发生时间 private String hrSlowTime; // 发生时间
private String createdTime;
// private Integer sleepDeepMinuteCount; // 深睡每分钟体动和翻身次数 // private Integer sleepDeepMinuteCount; // 深睡每分钟体动和翻身次数
......
...@@ -17,6 +17,10 @@ public class SleepTimeAnalysisVO { ...@@ -17,6 +17,10 @@ public class SleepTimeAnalysisVO {
*/ */
private String endTime; private String endTime;
private String getUpTime;
private String remark;
/** /**
* 间隔时间(分钟) * 间隔时间(分钟)
*/ */
......
package com.makeit.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
* @author wangzy
* @description
* @createDate 2024-01-24-16:42
*/
@Data
public class SaveLogDTO {
@JsonProperty("messageType")
private String messageType;
@JsonProperty("deviceId")
private String deviceId;
@JsonProperty("reportTime")
private LocalDateTime reportTime;
@JsonProperty("createdTime")
private LocalDateTime createdTime;
@JsonProperty("br")
private Integer br;
@JsonProperty("bodyMove")
private Integer bodyMove;
@JsonProperty("personState")
private Integer personState;
@JsonProperty("person")
private Integer person;
@JsonProperty("hr")
private Integer hr;
}
...@@ -2,7 +2,10 @@ package com.makeit.mapper.platform.auth; ...@@ -2,7 +2,10 @@ package com.makeit.mapper.platform.auth;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.dto.SaveLogDTO;
import com.makeit.entity.platform.auth.PlatOrg; import com.makeit.entity.platform.auth.PlatOrg;
import com.makeit.module.iot.vo.analysis.AnalysisVO;
import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
...@@ -15,4 +18,10 @@ import java.util.List; ...@@ -15,4 +18,10 @@ import java.util.List;
public interface PlatOrgMapper extends BaseMapper<PlatOrg> { public interface PlatOrgMapper extends BaseMapper<PlatOrg> {
List<PlatOrg> getSelfAndParents(String id); List<PlatOrg> getSelfAndParents(String id);
void insertBatch(@Param("list") List<SaveLogDTO> saveList);
void saveBatch(@Param("list")List<AnalysisVO> list);
List<AnalysisVO> getData();
} }
package com.makeit.service.platform.elder;
import com.makeit.module.iot.vo.analysis.AnalysisVO;
import com.makeit.module.iot.vo.breathe.DeviceInfoContentBreathe;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
/**
* @author wangzy
* @description
* @createDate 2024-01-24-16:38
*/
public interface TestLogService {
void save(Map<String, List<DeviceInfoContentBreathe>> minuteMap);
void saveEntity(TreeMap<String, AnalysisVO> statisticsMap);
TreeMap<String, AnalysisVO> getData();
void fillDefaultData(TreeMap<String, AnalysisVO> statisticsMap);
}
...@@ -27,21 +27,27 @@ import com.makeit.module.iot.vo.DeviceOperationLogEntity; ...@@ -27,21 +27,27 @@ import com.makeit.module.iot.vo.DeviceOperationLogEntity;
import com.makeit.module.iot.vo.analysis.*; import com.makeit.module.iot.vo.analysis.*;
import com.makeit.module.iot.vo.breathe.DeviceInfoContentBreathe; import com.makeit.module.iot.vo.breathe.DeviceInfoContentBreathe;
import com.makeit.service.platform.device.PlatDeviceService; import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.service.platform.elder.*; import com.makeit.service.platform.elder.PlatElderService;
import com.makeit.service.platform.elder.PlatElderSleepAnalysisService;
import com.makeit.service.platform.elder.PlatElderSleepService;
import com.makeit.service.platform.elder.TestLogService;
import com.makeit.service.platform.space.PlatRoomBedDeviceService; import com.makeit.service.platform.space.PlatRoomBedDeviceService;
import com.makeit.service.saas.*; import com.makeit.service.saas.SaasSleepAnalysisModelService;
import com.makeit.service.saas.SaasSleepEvaluateReportService;
import com.makeit.service.saas.SaasSleepEvaluateStandardReportService;
import com.makeit.utils.data.convert.JsonUtil; import com.makeit.utils.data.convert.JsonUtil;
import com.makeit.utils.data.convert.StreamUtil; import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.vo.platform.elder.report.day.PlatSleepRangeVO; import com.makeit.vo.platform.elder.report.day.PlatSleepRangeVO;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.time.*; import java.time.*;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -76,6 +82,8 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -76,6 +82,8 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
private PlatElderSleepAnalysisService platElderSleepAnalysisService; private PlatElderSleepAnalysisService platElderSleepAnalysisService;
@Autowired @Autowired
private PlatElderSleepService platElderSleepService; private PlatElderSleepService platElderSleepService;
@Resource
private TestLogService testLogService;
private TreeMap<String, AnalysisVO> getPerMinuteData(Map<String, List<DeviceInfoContentBreathe>> minuteMap, SaasSleepAnalysisModel analysisModel) { private TreeMap<String, AnalysisVO> getPerMinuteData(Map<String, List<DeviceInfoContentBreathe>> minuteMap, SaasSleepAnalysisModel analysisModel) {
...@@ -211,10 +219,20 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -211,10 +219,20 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
* @param sleepTimeAnalysisVOList * @param sleepTimeAnalysisVOList
* @return key:开始入睡时间,value:睡眠时间段内的数据 * @return key:开始入睡时间,value:睡眠时间段内的数据
*/ */
private TreeMap<String, TreeMap<String, AnalysisVO>> getFallAsleepData(TreeMap<String, AnalysisVO> totalMap, double sleepTimeActionDuration, private TreeMap<String, TreeMap<String, AnalysisVO>> getFallAsleepData(TreeMap<String, AnalysisVO> totalMap,
List<SleepTimeAnalysisVO> sleepTimeAnalysisVOList) { double sleepTimeActionDuration,
List<SleepTimeAnalysisVO> sleepTimeAnalysisVOList,
SaasSleepAnalysisModel analysisModel) {
String startSleepTime = null; String startSleepTime = null;
String getUpTime1 = null;
String getUpTime2 = null;
String getUpTime = null;
boolean isSleep = false;
int moveMinute = 0;
int minuteActionCount = 0;
int sleepMinute = 0; int sleepMinute = 0;
int riseActionDuration = Integer.parseInt(analysisModel.getRiseActionDuration());
double riseLeaveThreshold = Double.parseDouble(analysisModel.getRiseLeaveThreshold());
for (Map.Entry<String, AnalysisVO> entry : totalMap.entrySet()) { for (Map.Entry<String, AnalysisVO> entry : totalMap.entrySet()) {
AnalysisVO analysisVO = entry.getValue(); AnalysisVO analysisVO = entry.getValue();
// 非离床且体动值<20 // 非离床且体动值<20
...@@ -228,16 +246,55 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -228,16 +246,55 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
if (StringUtils.isEmpty(startSleepTime) && sleepMinute == 0) { if (StringUtils.isEmpty(startSleepTime) && sleepMinute == 0) {
continue; continue;
} }
if (sleepMinute > sleepTimeActionDuration * 60) {
SleepTimeAnalysisVO sleepTimeAnalysisVO = new SleepTimeAnalysisVO(); SleepTimeAnalysisVO sleepTimeAnalysisVO = new SleepTimeAnalysisVO();
if (sleepMinute > sleepTimeActionDuration * 60) {
sleepTimeAnalysisVO.setStartTime(startSleepTime); sleepTimeAnalysisVO.setStartTime(startSleepTime);
sleepTimeAnalysisVO.setEndTime(entry.getKey()); sleepTimeAnalysisVO.setEndTime(entry.getKey());
sleepTimeAnalysisVO.setType(SleepTypeEnum.DAY_SLEEP.getCode()); sleepTimeAnalysisVO.setType(SleepTypeEnum.DAY_SLEEP.getCode());
sleepTimeAnalysisVOList.add(sleepTimeAnalysisVO); // sleepTimeAnalysisVOList.add(sleepTimeAnalysisVO);
isSleep = true;
}
getUpTime = sleepTimeAnalysisVO.getGetUpTime();
// 离床数据计算起床时间
if (isSleep && analysisVO.getIsMoveBed()) {
if (StrUtil.isBlank(getUpTime1)) {
getUpTime1 = entry.getKey();
}
moveMinute++;
}
if (moveMinute > riseLeaveThreshold * 60 && StrUtil.isBlank(getUpTime)) {
getUpTime = entry.getKey();
sleepTimeAnalysisVO.setGetUpTime(getUpTime);
sleepTimeAnalysisVO.setEndTime(getUpTime);
sleepTimeAnalysisVO.setRemark("离床数据计算起床时间");
} }
// 体动值计算起床时间
if (isSleep && analysisVO.getIsMinuteActionFlag()) {
if (StrUtil.isBlank(getUpTime2)) {
getUpTime2 = entry.getKey();
}
minuteActionCount++;
}
if (minuteActionCount > riseActionDuration && StrUtil.isBlank(getUpTime)) {
getUpTime = entry.getKey();
sleepTimeAnalysisVO.setGetUpTime(getUpTime);
sleepTimeAnalysisVO.setEndTime(getUpTime);
sleepTimeAnalysisVO.setRemark("体动值计算起床时间");
}
if (!isSleep) {
startSleepTime = null; startSleepTime = null;
sleepMinute = 0; sleepMinute = 0;
} }
if (isSleep && StrUtil.isNotBlank(getUpTime)) {
startSleepTime = null;
sleepMinute = 0;
sleepTimeAnalysisVOList.add(sleepTimeAnalysisVO);
isSleep = false;
}
}
TreeMap<String, TreeMap<String, AnalysisVO>> sleepTypeMap = new TreeMap<>(); TreeMap<String, TreeMap<String, AnalysisVO>> sleepTypeMap = new TreeMap<>();
if (CollUtil.isEmpty(sleepTimeAnalysisVOList)) { if (CollUtil.isEmpty(sleepTimeAnalysisVOList)) {
return sleepTypeMap; return sleepTypeMap;
...@@ -268,6 +325,89 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -268,6 +325,89 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
return sleepTypeMap; return sleepTypeMap;
} }
private void setGetUpTime(TreeMap<String, TreeMap<String, AnalysisVO>> sleepMap,
List<SleepTimeAnalysisVO> sleepTimeAnalysisVOList,
SaasSleepAnalysisModel analysisModel) {
int riseActionDuration = Integer.parseInt(analysisModel.getRiseActionDuration());
double riseLeaveThreshold = Double.parseDouble(analysisModel.getRiseLeaveThreshold());
List<SleepTimeAnalysisVO> sleepList = sleepTimeAnalysisVOList.stream().filter(f -> f.getType().equals(SleepTypeEnum.DAY_SLEEP.getCode())).collect(Collectors.toList());
if (CollUtil.isEmpty(sleepList)) {
return;
}
sleepList.forEach(s -> {
TreeMap<String, AnalysisVO> treeMap = sleepMap.get(s.getStartTime());
if (CollUtil.isEmpty(treeMap)) {
return;
}
final String[] startGetupTime = {null};
AtomicInteger getupMinute = new AtomicInteger();
treeMap.forEach((k, analysisVO) -> {
if (analysisVO.getIsMoveBed()) {
if (StrUtil.isBlank(startGetupTime[0])) {
startGetupTime[0] = k;
}
getupMinute.getAndIncrement();
return;
}
if (StringUtils.isEmpty(startGetupTime[0]) && getupMinute.get() == 0) {
return;
}
if (getupMinute.get() > riseLeaveThreshold * 60) {
SleepTimeAnalysisVO sleepTimeAnalysisVO = new SleepTimeAnalysisVO();
sleepTimeAnalysisVO.setStartTime(startGetupTime[0]);
sleepTimeAnalysisVO.setEndTime(k);
sleepTimeAnalysisVO.setType(SleepTypeEnum.GETUP.getCode());
sleepTimeAnalysisVO.setRemark("人离床时间时效满足起床");
sleepTimeAnalysisVOList.add(sleepTimeAnalysisVO);
s.setGetUpTime(startGetupTime[0]);
}
startGetupTime[0] = null;
getupMinute.set(0);
});
});
List<SleepTimeAnalysisVO> getUpList = sleepTimeAnalysisVOList.stream()
.filter(f -> SleepTypeEnum.GETUP.getCode().equals(f.getType())).collect(Collectors.toList());
sleepList.forEach(s -> {
TreeMap<String, AnalysisVO> treeMap = sleepMap.get(s.getStartTime());
if (CollUtil.isEmpty(treeMap)) {
return;
}
final String[] startGetupTime = {null};
AtomicInteger getupMinute = new AtomicInteger();
treeMap.forEach((k, analysisVO) -> {
if (analysisVO.getIsMinuteActionFlag()) {
if (StrUtil.isBlank(startGetupTime[0])) {
startGetupTime[0] = k;
}
getupMinute.getAndIncrement();
return;
}
if (StringUtils.isEmpty(startGetupTime[0]) && getupMinute.get() == 0) {
return;
}
if (getupMinute.get() > riseActionDuration && startGetupTime[0] != null) {
String finalStartGetupTime = startGetupTime[0];
boolean exist = getUpList.stream().anyMatch(f -> f.getStartTime().equals(finalStartGetupTime));
if (!exist) {
SleepTimeAnalysisVO sleepTimeAnalysisVO = new SleepTimeAnalysisVO();
sleepTimeAnalysisVO.setStartTime(startGetupTime[0]);
sleepTimeAnalysisVO.setEndTime(k);
sleepTimeAnalysisVO.setType(SleepTypeEnum.GETUP.getCode());
sleepTimeAnalysisVO.setRemark("每分钟大于30秒体动值满足起床");
sleepTimeAnalysisVOList.add(sleepTimeAnalysisVO);
}
if (StrUtil.isBlank(s.getGetUpTime())) {
s.setGetUpTime(startGetupTime[0]);
}
}
startGetupTime[0] = null;
getupMinute.set(0);
});
});
}
/** /**
* 获取起床数据(离床大于0.5小时,或者每分钟大于30秒体动值大于50持续10min,且在两小时内无再次入睡 * 获取起床数据(离床大于0.5小时,或者每分钟大于30秒体动值大于50持续10min,且在两小时内无再次入睡
* *
...@@ -646,7 +786,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -646,7 +786,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
elderSleepAnalysis.setTenantId(tenantId); elderSleepAnalysis.setTenantId(tenantId);
elderSleepAnalysis.setSleepEvaluate(sleepReport.getEvaluate()); elderSleepAnalysis.setSleepEvaluate(sleepReport.getEvaluate());
elderSleepAnalysis.setOriDeviceId(oriDeviceId); elderSleepAnalysis.setOriDeviceId(oriDeviceId);
platElderSleepAnalysisService.save(elderSleepAnalysis); // platElderSleepAnalysisService.save(elderSleepAnalysis);
return elderSleepAnalysis; return elderSleepAnalysis;
} }
...@@ -750,7 +890,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -750,7 +890,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
elderSleepList.add(platElderSleep); elderSleepList.add(platElderSleep);
} }
} }
platElderSleepService.saveBatch(elderSleepList); // platElderSleepService.saveBatch(elderSleepList);
return elderSleepList; return elderSleepList;
} }
...@@ -797,14 +937,14 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -797,14 +937,14 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
continue; continue;
} }
PlatDevice platDevice = platDeviceService.getById(platRoomBedDevice.getDeviceId()); PlatDevice platDevice = platDeviceService.getById(platRoomBedDevice.getDeviceId());
if (platDevice == null) { if (platDevice == null || !"218A00XE2669104".equals(platDevice.getOriDeviceId())) {
continue; continue;
} }
String tenantId = elder.getTenantId(); String tenantId = elder.getTenantId();
for (String hourRange : dayHourRangeList) { for (String hourRange : dayHourRangeList) {
String[] hourRangeArray = hourRange.split("~"); String[] hourRangeArray = hourRange.split("~");
List<DeviceOperationLogEntity> deviceOperationLogEntities = productDeviceService.getDeviceLogByTimeRange(platDevice.getOriDeviceId(), "reportProperty", 5000, hourRangeArray[0], hourRangeArray[1]); List<DeviceOperationLogEntity> deviceOperationLogEntities = productDeviceService.getDeviceLogByTimeRange(platDevice.getOriDeviceId(), "reportProperty", 5000, hourRangeArray[0], hourRangeArray[1]);
if (CollectionUtils.isEmpty(deviceOperationLogEntities)) { if (CollUtil.isEmpty(deviceOperationLogEntities)) {
continue; continue;
} }
List<DeviceInfoContentBreathe> deviceInfoContentBreatheList = deviceOperationLogEntities.stream() List<DeviceInfoContentBreathe> deviceInfoContentBreatheList = deviceOperationLogEntities.stream()
...@@ -816,21 +956,28 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -816,21 +956,28 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
return deviceInfoContentBreathe; return deviceInfoContentBreathe;
}) })
.collect(Collectors.toList()); .collect(Collectors.toList());
deviceInfoContentBreatheList = deviceInfoContentBreatheList.stream().filter(f -> f.getTimestamp() >= 1704786060000L && f.getTimestamp() <= 1704814860000L).collect(Collectors.toList());
Map<String, List<DeviceInfoContentBreathe>> minuteMap = StreamUtil.groupBy(deviceInfoContentBreatheList, DeviceInfoContentBreathe::getReportTime); Map<String, List<DeviceInfoContentBreathe>> minuteMap = StreamUtil.groupBy(deviceInfoContentBreatheList, DeviceInfoContentBreathe::getReportTime);
// testLogService.save(minuteMap);
deviceOperationLogEntities.clear(); deviceOperationLogEntities.clear();
TreeMap<String, AnalysisVO> statisticsMap = getPerMinuteData(minuteMap, analysisModel); TreeMap<String, AnalysisVO> statisticsMap = getPerMinuteData(minuteMap, analysisModel);
if (CollUtil.isNotEmpty(statisticsMap)) { if (CollUtil.isNotEmpty(statisticsMap)) {
// device_minute_info
// testLogService.saveEntity(statisticsMap);
totalMap.putAll(statisticsMap); totalMap.putAll(statisticsMap);
} }
} }
// totalMap = testLogService.getData();
if (CollUtil.isEmpty(totalMap)) { if (CollUtil.isEmpty(totalMap)) {
continue; continue;
} }
// 没有上报数据的时间,填默认值
testLogService.fillDefaultData(totalMap);
// 记录长者不同类型的睡眠时间 // 记录长者不同类型的睡眠时间
List<SleepTimeAnalysisVO> sleepTimeAnalysisVOList = Lists.newArrayList(); List<SleepTimeAnalysisVO> sleepTimeAnalysisVOList = Lists.newArrayList();
// 入睡时间 // 入睡时间
TreeMap<String, TreeMap<String, AnalysisVO>> sleepTypeMap = TreeMap<String, TreeMap<String, AnalysisVO>> sleepTypeMap =
getFallAsleepData(totalMap, sleepTimeActionDuration, sleepTimeAnalysisVOList); getFallAsleepData(totalMap, sleepTimeActionDuration, sleepTimeAnalysisVOList, analysisModel);
// 获取睡眠和小憩 // 获取睡眠和小憩
SleepCountDTO sleepCountDTO = deepSleepAndRestData(sleepTypeMap, analysisModel, sleepTimeAnalysisVOList); SleepCountDTO sleepCountDTO = deepSleepAndRestData(sleepTypeMap, analysisModel, sleepTimeAnalysisVOList);
// 满足睡眠条件的map // 满足睡眠条件的map
......
package com.makeit.service.platform.elder.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import com.google.common.collect.Lists;
import com.makeit.dto.SaveLogDTO;
import com.makeit.mapper.platform.auth.PlatOrgMapper;
import com.makeit.module.iot.vo.analysis.AnalysisVO;
import com.makeit.module.iot.vo.breathe.DeviceInfoContentBreathe;
import com.makeit.service.platform.elder.TestLogService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author wangzy
* @description
* @createDate 2024-01-24-16:38
*/
@Service
public class TestLogServiceImpl implements TestLogService {
@Resource
private PlatOrgMapper platOrgMapper;
@Override
public void save(Map<String, List<DeviceInfoContentBreathe>> minuteMap) {
if (CollUtil.isEmpty(minuteMap)) {
return;
}
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
List<SaveLogDTO> saveList = new ArrayList<>();
minuteMap.forEach((k, v) -> {
v.forEach(value -> {
SaveLogDTO saveLogDTO = new SaveLogDTO();
saveLogDTO.setReportTime(LocalDateTime.parse(k, fmt));
saveLogDTO.setCreatedTime(LocalDateTime.ofInstant(Instant.ofEpochMilli(value.getTimestamp()), ZoneId.systemDefault()));
DeviceInfoContentBreathe.Properties properties = value.getProperties();
saveLogDTO.setBodyMove(properties.getBodymove());
saveLogDTO.setBr(properties.getBr());
saveLogDTO.setDeviceId(value.getDeviceId());
saveLogDTO.setHr(properties.getHr());
saveLogDTO.setPerson(properties.getPerson());
saveLogDTO.setMessageType(value.getMessageType());
saveLogDTO.setPersonState(properties.getPersonState());
saveList.add(saveLogDTO);
});
});
platOrgMapper.insertBatch(saveList);
}
@Override
public void saveEntity(TreeMap<String, AnalysisVO> statisticsMap) {
List<AnalysisVO> list = new ArrayList<>();
statisticsMap.forEach((k,v) -> {
v.setCreatedTime(k);
list.add(v);
});
platOrgMapper.saveBatch(list);
}
@Override
public TreeMap<String, AnalysisVO> getData() {
List<AnalysisVO> data = platOrgMapper.getData();
LinkedHashMap<String, AnalysisVO> collect1 = data.stream().collect(Collectors.toMap(AnalysisVO::getCreatedTime, a -> a, (u, v) -> {
throw new IllegalStateException(String.format("Duplicate key %s", u));
}, LinkedHashMap::new));
TreeMap<String, AnalysisVO> result = new TreeMap<>();
collect1.forEach(result::put);
getDayMinute().forEach(minute -> {
boolean key = result.containsKey(minute);
if (!key) {
AnalysisVO analysisVO = buildDefaultData(minute);
result.put(minute, analysisVO);
}
});
return result;
}
public static List<String> getDayMinute() {
List<String> list = Lists.newArrayList();
LocalDateTime now = LocalDateTime.of(2024, 1, 9, 8, 0);
for (int i = 0; i < 24; i++) {
int hour = now.getHour();
for (int j = 0; j < 60; j++) {
LocalDateTime of = LocalDateTime.of(2024, 1, now.getDayOfMonth(), hour, j);
list.add(DateUtil.format(of, DatePattern.NORM_DATETIME_MINUTE_PATTERN));
}
now = now.plusHours(1);
}
return list;
}
@Override
public void fillDefaultData(TreeMap<String, AnalysisVO> statisticsMap) {
List<String> dayMinute = getDayMinute();
dayMinute.forEach(minute -> {
boolean key = statisticsMap.containsKey(minute);
if (!key) {
AnalysisVO analysisVO = buildDefaultData(minute);
statisticsMap.put(minute, analysisVO);
}
});
}
private AnalysisVO buildDefaultData(String minute) {
AnalysisVO analysisVO = new AnalysisVO();
analysisVO.setCreatedTime(minute);
analysisVO.setActionCount(0);
analysisVO.setAvgBr(0);
analysisVO.setAvgHr(0);
analysisVO.setIsAction(false);
analysisVO.setIsMinuteActionFlag(false);
analysisVO.setIsMoveBed(true);
analysisVO.setAwakeMinuteActionFlag(false);
return analysisVO;
}
}
...@@ -19,4 +19,46 @@ ...@@ -19,4 +19,46 @@
ON T1._id COLLATE utf8mb4_general_ci = T2.id COLLATE utf8mb4_general_ci ON T1._id COLLATE utf8mb4_general_ci = T2.id COLLATE utf8mb4_general_ci
</select> </select>
<!-- 批量插入数据 查询主键ID注入到是实体中-->
<insert id="insertBatch" parameterType="java.util.List" useGeneratedKeys="true">
<selectKey resultType="long" keyProperty="id" order="AFTER">
SELECT
LAST_INSERT_ID()
</selectKey>
insert into device_info_log
(message_type,device_id,report_time,br,body_move,person_state,person,hr,created_time)
values
<foreach collection="list" item="item" index="index" separator=",">
(#{item.messageType},#{item.deviceId},#{item.reportTime},#{item.br},#{item.bodyMove},
#{item.personState},#{item.person},#{item.hr},#{item.createdTime})
</foreach>
</insert>
<insert id="saveBatch" parameterType="java.util.List" useGeneratedKeys="true">
<selectKey resultType="long" keyProperty="id" order="AFTER">
SELECT
LAST_INSERT_ID()
</selectKey>
insert into device_minute_info(total_hr, avg_hr, max_hr, min_hr, total_br, avg_br, max_br, min_br, hr_br_count,
action_count, turned_count, is_action, is_move_bed, is_minute_action_flag,
awake_minute_action_flag, br_stop_threshold, br_stop, br_stop_time, br_fast_threshold,
br_fast, br_fast_time, br_slow_threshold, br_slow, br_slow_time, hr_fast_threshold,
hr_fast, hr_fast_time, hr_slow_threshold, hr_slow, hr_slow_time, created_time)
values
<foreach collection="list" item="item" index="index" separator=",">
(#{item.totalHr},#{item.avgHr},#{item.maxHr},#{item.minHr},#{item.totalBr},#{item.avgBr},#{item.maxBr},#{item.minBr},#{item.hrBrCount},
#{item.actionCount},#{item.turnedCount},#{item.isAction},#{item.isMoveBed},#{item.isMinuteActionFlag},
#{item.awakeMinuteActionFlag},#{item.brStopThreshold},#{item.brStop},#{item.brStopTime},#{item.brFastThreshold},
#{item.brFast},#{item.brFastTime},#{item.brSlowThreshold},#{item.brSlow},#{item.brSlowTime},#{item.hrFastThreshold},
#{item.hrFast},#{item.hrFastTime},#{item.hrSlowThreshold},#{item.hrSlow},#{item.hrSlowTime},#{item.createdTime})
</foreach>
</insert>
<select id="getData" resultType="com.makeit.module.iot.vo.analysis.AnalysisVO">
select * from device_minute_info group by created_time order by created_time
</select>
</mapper> </mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment