|
|
@ -179,7 +179,8 @@ const CommonUtil = {
|
|
|
|
* 组装睡眠数据
|
|
|
|
* 组装睡眠数据
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
assembleSleepData(sleepArray) {
|
|
|
|
assembleSleepData(sleepArray) {
|
|
|
|
let dateObj = sleepArray[0]; // 获取第一个数据作为比对的时间
|
|
|
|
console.log("sleepArray:",sleepArray)
|
|
|
|
|
|
|
|
let compareDate = sleepArray[0].yyyyMMdd; // 获取第一个数据的时间作为比对时间
|
|
|
|
let res = []; // 存放最终结果
|
|
|
|
let res = []; // 存放最终结果
|
|
|
|
let resItem = { // 每天的睡眠数据对象
|
|
|
|
let resItem = { // 每天的睡眠数据对象
|
|
|
|
date: '',
|
|
|
|
date: '',
|
|
|
@ -192,12 +193,11 @@ const CommonUtil = {
|
|
|
|
resItem.sleepList.push(firstSleepData); // 将第一个数据放入到 `sleepList`
|
|
|
|
resItem.sleepList.push(firstSleepData); // 将第一个数据放入到 `sleepList`
|
|
|
|
sleepArray.forEach((item,index) => {
|
|
|
|
sleepArray.forEach((item,index) => {
|
|
|
|
// 判断是否是同一天的数据
|
|
|
|
// 判断是否是同一天的数据
|
|
|
|
let isSameDay = this.timeComparison(dateObj.yyyyMMdd, item.yyyyMMdd, item.minute);
|
|
|
|
let isSameDay = this.timeComparison(compareDate, item.yyyyMMdd, item.minute);
|
|
|
|
|
|
|
|
|
|
|
|
// 如果状态发生变化,且日期不同,就表示开始新的睡眠数据
|
|
|
|
// 如果状态发生变化,且日期不同,就表示开始新的睡眠数据
|
|
|
|
if (item.status !== firstSleepData.status) {
|
|
|
|
if (item.status !== firstSleepData.status) {
|
|
|
|
if (isSameDay) {
|
|
|
|
if (isSameDay) {
|
|
|
|
resItem.sleepList.push(item); // 如果是同一天,继续添加到当天的睡眠数据
|
|
|
|
resItem.sleepList.push(item);
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
// 取出数据
|
|
|
|
// 取出数据
|
|
|
|
resItem.sleepList[resItem.sleepList.length - 1] = sleepArray[index - 1];
|
|
|
|
resItem.sleepList[resItem.sleepList.length - 1] = sleepArray[index - 1];
|
|
|
@ -206,7 +206,7 @@ const CommonUtil = {
|
|
|
|
date: item.yyyyMMdd,
|
|
|
|
date: item.yyyyMMdd,
|
|
|
|
sleepList: [item] // 将当前项作为新的睡眠数据开始
|
|
|
|
sleepList: [item] // 将当前项作为新的睡眠数据开始
|
|
|
|
};
|
|
|
|
};
|
|
|
|
dateObj = item; // 更新 `dateObj`,用于比对后续数据
|
|
|
|
compareDate = item.yyyyMMdd; // 更新对比日期,用于比对后续数据
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
firstSleepData = item; // 更新当前比对的睡眠数据
|
|
|
|
firstSleepData = item; // 更新当前比对的睡眠数据
|
|
|
@ -214,6 +214,7 @@ const CommonUtil = {
|
|
|
|
|
|
|
|
|
|
|
|
// 最后一次的睡眠数据也需要被加入到 `res`
|
|
|
|
// 最后一次的睡眠数据也需要被加入到 `res`
|
|
|
|
if (resItem.sleepList.length > 0) {
|
|
|
|
if (resItem.sleepList.length > 0) {
|
|
|
|
|
|
|
|
// 这里要把最后一条数据set作为起床时间,否则起床时间会不对
|
|
|
|
resItem.sleepList[resItem.sleepList.length - 1] = sleepArray[sleepArray.length - 1];
|
|
|
|
resItem.sleepList[resItem.sleepList.length - 1] = sleepArray[sleepArray.length - 1];
|
|
|
|
res.push(resItem);
|
|
|
|
res.push(resItem);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -287,8 +288,64 @@ const CommonUtil = {
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sortSleep(data){
|
|
|
|
|
|
|
|
data.forEach((item) =>{
|
|
|
|
|
|
|
|
// 排序算法
|
|
|
|
|
|
|
|
item.sleepList.sort((a, b) => {
|
|
|
|
|
|
|
|
// 先比较 yyyyMMdd
|
|
|
|
|
|
|
|
if (a.yyyyMMdd !== b.yyyyMMdd) {
|
|
|
|
|
|
|
|
return a.yyyyMMdd.localeCompare(b.yyyyMMdd);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 再比较 minute
|
|
|
|
|
|
|
|
return a.minute - b.minute;
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
item.sleepList[0].status = 1
|
|
|
|
|
|
|
|
// 获取最后一个对象
|
|
|
|
|
|
|
|
const lastItem = item.sleepList[item.sleepList.length - 1];
|
|
|
|
|
|
|
|
// 创建新对象并插入到最后
|
|
|
|
|
|
|
|
if (lastItem) {
|
|
|
|
|
|
|
|
const newObject = {
|
|
|
|
|
|
|
|
...lastItem, // 复制最后一个对象的内容
|
|
|
|
|
|
|
|
minute: lastItem.minute + 1 // minute 加 1
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
item.sleepList.push(newObject); // 插入到最后
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
return data;
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* @param {补全数据} data
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
completeMissingData(data){
|
|
|
|
|
|
|
|
let result = []; // 存放最终结果
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < data.length; i++) {
|
|
|
|
|
|
|
|
result.push(data[i]); // 先将当前数据加入结果集
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 如果当前数据不是最后一个,检查与下一个数据的 minute 是否连续
|
|
|
|
|
|
|
|
if (i < data.length - 1) {
|
|
|
|
|
|
|
|
let currentMinute = data[i].minute;
|
|
|
|
|
|
|
|
let nextMinute = data[i + 1].minute;
|
|
|
|
|
|
|
|
if(data[i].yyyyMMdd == data[i + 1].yyyyMMdd){
|
|
|
|
|
|
|
|
// 如果不连续,补全缺失的数据
|
|
|
|
|
|
|
|
if (nextMinute > currentMinute + 1) {
|
|
|
|
|
|
|
|
for (let j = currentMinute + 1; j < nextMinute; j++) {
|
|
|
|
|
|
|
|
result.push({
|
|
|
|
|
|
|
|
minute: j, // 补全的 minute
|
|
|
|
|
|
|
|
status: 3, // 沿用当前数据的 status
|
|
|
|
|
|
|
|
yyyyMMdd: data[i].yyyyMMdd // 沿用当前数据的日期
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|