2.28-修复部分问题

This commit is contained in:
wuhan 2024-02-28 18:09:30 +08:00
parent 02fa93faa9
commit c0b90c95bc
3 changed files with 282 additions and 210 deletions

View File

@ -33,15 +33,11 @@ class ClientMapper {
async queryHccChildNum({ areaCode }) {
// const obj: any = {};
if (areaCode) {
// obj.areaCode = Like(`${areaCode}%`);
// return UserNum.find({
// where: {
// areaCode: Like(`${areaCode}%`),
// },
// });
// 省级筛选
if (areaCode && areaCode.length == 2) {
return UserNum.createQueryBuilder()
.where(`areaCode like :areaCode`, { areaCode: `${areaCode}%` })
.andWhere(`length(areaCode) = 4`)
.select('areaCode')
.addSelect('areaName')
.addSelect('totalNum')
@ -49,7 +45,20 @@ class ClientMapper {
.addSelect('totalUserNum')
.orderBy('totalUserNum', 'DESC')
.getRawMany();
} else {
} else if (areaCode && areaCode.length == 4) {
// 市级筛选
return UserNum.createQueryBuilder()
.where(`areaCode like :areaCode`, { areaCode: `${areaCode}%` })
.andWhere(`length(areaCode) = 6`)
.select('areaCode')
.addSelect('areaName')
.addSelect('totalNum')
.addSelect('onlineNum')
.addSelect('totalUserNum')
.orderBy('totalUserNum', 'DESC')
.getRawMany();
}
else {
return UserNum.createQueryBuilder()
.where(`length(areaCode) = 2`)
.select('areaCode')
@ -80,29 +89,38 @@ class ClientMapper {
}
}
async queryMp({ areaCode, topLimit, startTime, endTime }) {
async queryMp({ areaCode, topLimit }) {
const sql = MpInfo.createQueryBuilder();
if (areaCode) {
const sql = MpInfo.createQueryBuilder();
sql.where(`areaCode like :areaCode`, { areaCode: `${areaCode}%` });
if (startTime && endTime) {
sql.andWhere(`date between ${startTime} and ${endTime}`);
if (areaCode.length == 2) {
sql.andWhere(`length(areaCode) = 4`)
} else {
sql.andWhere(`length(areaCode) = 6`)
}
return sql.select('id', 'id').groupBy('id').take(6).getRawMany();
// if (startTime && endTime) {
// sql.andWhere(`date between ${startTime} and ${endTime}`);
// }
} else {
const sql = MpInfo.createQueryBuilder();
if (startTime && endTime) {
sql.where(`date between ${startTime} and ${endTime}`);
}
return sql
.andWhere(`length(areaCode) = 2`)
.select('id', 'id')
.groupBy('id')
.take(6)
.getRawMany();
sql.where(`length(areaCode) = 2`);
}
// return sql
// return sql
// .andWhere(`length(areaCode) = 2`)
return sql
.andWhere(`length(areaCode) = 2`)
.select('id', 'id')
.addSelect('name', 'name')
.addSelect('icon', 'icon')
.addSelect('sum(num)', 'sum')
.groupBy('id')
.orderBy('sum')
.take(topLimit)
.getRawMany();
}
async queryMpInfo({ id }) {
async queryMpInfo({ id, startTime, endTime }) {
const obj: any = {};
// if (id) {
obj.id = id;
@ -111,12 +129,12 @@ class ClientMapper {
// take: topLimit,
// });
// 计算最近7天的起始时间
const toData = new Date(new Date().toLocaleDateString()).getTime();
const startTime = moment(new Date(toData - 7 * 3600 * 24 * 1000)).format(
'YYYY-MM-DD',
// const toData = new Date(new Date().toLocaleDateString()).getTime();
startTime = moment(startTime).format(
'YYYY-MM-DD 00:00:00',
);
const endTime = moment(new Date(toData + 24 * 60 * 60 * 1000 - 1)).format(
'YYYY-MM-DD',
endTime = moment(endTime).format(
'YYYY-MM-DD 23:59:59',
);
const sql = MpInfo.createQueryBuilder().where('id in (:...id)', {
id,
@ -130,6 +148,7 @@ class ClientMapper {
.addSelect('id')
.addSelect('num')
.addSelect('date')
.groupBy('date')
.orderBy('date', 'DESC')
.getRawMany();
// } else {
@ -262,16 +281,22 @@ class ClientMapper {
});
}
async queryDataUseNum({ areaCode, startTime, endTime, limit, dateRange }) {
async queryDataUseNum({ areaCode, startTime, limit, dateRange }) {
let sql;
if (areaCode) {
sql = HomeInfo.createQueryBuilder().where(`areaCode like '${areaCode}%'`);
// if (startTime && endTime) {
// sql.andWhere(`date between '${startTime}' and '${endTime}'`);
// }
if (areaCode.length == 2) {
sql.andWhere(`length(areaCode) = 4`)
} else {
sql.andWhere(`length(areaCode) = 6`)
}
} else {
sql = HomeInfo.createQueryBuilder().where(`length(areaCode) = 2`);
}
if (startTime) {
sql.andWhere(`date >= '${startTime}' `);
}
switch (dateRange) {
case 1:
sql.select(`DATE_FORMAT(date,'%Y%m%d') time`);

View File

@ -4,6 +4,7 @@ import clientMapper from './client.mapper';
import { UserNum } from 'src/entities/user-num.entity';
import axios from 'axios';
import { ConnectedSocket } from '@nestjs/websockets';
import Time from '../utils/time'
const moment = require('moment');
moment.locale('zh_CN');
@Injectable()
@ -97,41 +98,53 @@ export class ClientService {
*/
async queryMpNum({ areaCode, topLimit = 6, type = 0 }) {
console.log('queryMpNum');
const { startTime, endTime } = this.dealTime(type);
const { startTime, endTime } = Time.dealTime(type);
const count = await clientMapper.queryMp({
areaCode,
topLimit,
startTime,
endTime,
topLimit
});
const obj: any = {};
count.forEach(e => {
obj[e.id] = {
name: e.name,
icon: e.icon,
id: e.id,
liveNum: e.sum,
dayNumList: [],
}
})
const id = count.map((e) => e.id);
const info = await clientMapper.queryMpInfo({ id });
const info = await clientMapper.queryMpInfo({ id, startTime, endTime });
// const [count, info] = await Promise.all([
// clientMapper.queryMpNum({ areaCode ,startTime, endTime}),
// clientMapper.queryMpInfo({ areaCode, topLimit, startTime, endTime }),
// ]);
const obj: any = {};
info.forEach((e) => {
if (!obj[e.id]) {
obj[e.id] = {
name: e.name,
icon: e.icon,
id: e.id,
liveNum: e.num,
dayNumList: [
{
date: moment(e.date).format('YYYY-MM-DD'),
num: e.num,
},
],
};
} else {
obj[e.id].liveNum += e.num;
if (obj[e.id]) {
obj[e.id].dayNumList.push({
date: moment(e.date).format('YYYY-MM-DD'),
num: e.num,
});
}
// obj[e.id] = {
// name: e.name,
// icon: e.icon,
// id: e.id,
// liveNum: e.num,
// dayNumList: [
// {
// date: moment(e.date).format('YYYY-MM-DD'),
// num: e.num,
// },
// ],
// };
// } else {
// obj[e.id].liveNum += e.num;
// obj[e.id].dayNumList.push({
// date: moment(e.date).format('YYYY-MM-DD'),
// num: e.num,
// });
// }
});
const data = {
totalNum: topLimit,
@ -143,110 +156,6 @@ export class ClientService {
return data;
}
dealTime(type) {
let startTime: Date, endTime: Date;
switch (type) {
case 0:
break;
case 1:
startTime = new Date(this.startTime(new Date()));
endTime = new Date(this.endTime(new Date()));
break;
case 2:
const data = this.getCurrentWeekStartTimeAndEndTime();
startTime = data.startTime;
endTime = data.endTime;
break;
case 3:
startTime = new Date(this.getCurrentMonthFirst(new Date()));
endTime = new Date(this.getCurrentMonthLast(new Date()));
break;
case 4:
startTime = new Date(this.getCurrentYearFirst(new Date()));
endTime = new Date(this.getCurrentYearLast(new Date()));
break;
default:
break;
}
return { startTime, endTime };
}
startTime(time) {
const nowTimeDate = new Date(time);
return nowTimeDate.setHours(0, 0, 0, 0);
}
endTime(time) {
const nowTimeDate = new Date(time);
return nowTimeDate.setHours(23, 59, 59, 999);
}
getCurrentWeekStartTimeAndEndTime(time?) {
const current = time ? time : new Date();
// current是本周的第几天
let nowDayOfWeek = current.getDay();
if (nowDayOfWeek === 0) nowDayOfWeek = 7;
const dayNum = 1 * 24 * 60 * 60 * 1000;
// 获取本周星期一的时间,星期一作为一周的第一天
const firstDate = new Date(current.valueOf() - (nowDayOfWeek - 1) * dayNum);
// 获取本周星期天的时间,星期天作为一周的最后一天
const lastDate = new Date(new Date(firstDate).valueOf() + 6 * dayNum);
return {
startTime: new Date(this.startTime(firstDate)),
endTime: new Date(this.endTime(lastDate)),
};
}
/**
*
* @param time
* @returns
*/
getCurrentMonthFirst(time) {
const date = time ? time : new Date();
date.setDate(1);
return this.startTime(date);
}
/**
*
* @param time
* @returns
*/
getCurrentMonthLast(time) {
const date = time ? time : new Date();
const currentMonth = date.getMonth();
const nextMonth = currentMonth + 1;
const nextMonthFirstDay = new Date(date.getFullYear(), nextMonth, 1);
const oneDay = 24 * 60 * 60 * 1000;
return this.endTime(new Date(nextMonthFirstDay.valueOf() - oneDay));
}
/**
*
* @param date
* @returns
*/
getCurrentYearFirst(date) {
date = date ? date : new Date();
date.setDate(1);
date.setMonth(0);
return this.startTime(date);
}
/**
*
* @param date
* @returns
*/
getCurrentYearLast(date) {
date = date ? date : new Date();
date.setFullYear(date.getFullYear() + 1); // 设置到明年
date.setMonth(0); // 明年的0月也就是对应到1月是存在的哦不是不存在的0
date.setDate(0); // 明年的0日
return this.endTime(date);
}
/**
* 4.5
*/
@ -356,55 +265,6 @@ export class ClientService {
*/
async queryWarnList({ code, type, time, page }) {
console.log('queryWarnList');
// let pageSize, pageIndex;
// if (!page) {
// pageSize = 10;
// pageIndex = 0;
// }
// let result;
// // 为空查询当月
// if (!time) {
// const { startTime, endTime } = this.dealTime(3);
// result = await clientMapper.queryWarnList({
// code,
// type,
// startTime,
// endTime,
// pageSize,
// pageIndex,
// status: 1,
// time: null,
// });
// } else {
// result = await clientMapper.queryWarnList({
// code,
// type,
// time,
// pageSize,
// pageIndex,
// startTime: null,
// endTime: null,
// status: 0,
// });
// }
// result[0].forEach((e) => {
// e.typeName = e.dataTypeName;
// e.time = moment(e.time).format('YYYY-MM-DD');
// delete e.dataTypeName;
// });
// const data = {
// page: {
// totalNum: result[1],
// totalPage:
// result[1] / pageSize > 1 && result[1] % pageSize != 0
// ? (pageIndex + 1) * pageSize + 1
// : pageIndex + 1,
// pageSize,
// pageIndex,
// },
// alarmList: result[0],
// };
// return data;
if (!page) {
page = {
pageSize: 10,
@ -472,11 +332,27 @@ export class ClientService {
*/
async queryDataUseNum({ areaCode, dateRange = 1, limit = 7 }) {
console.log('queryDataUseNum');
const { startTime, endTime } = this.dealTime(dateRange);
// const { startTime, endTime } = this.dealTime(dateRange);
//获取时间开始节点
let startTime;
limit -= 1
if (dateRange == 1) {
// 日
startTime = Time.getRecentDays(limit)
} else if (dateRange == 2) {
// 周
startTime = Time.getRecentWeeks(limit)
} else if (dateRange == 3) {
// 月
startTime = Time.getRecentMonths(limit)
} else {
//年
startTime = Time.getRecentYears(limit)
}
const result = await clientMapper.queryDataUseNum({
areaCode,
startTime: moment(startTime).format('YYYY-MM-DD HH:mm:ss'),
endTime: moment(endTime).format('YYYY-MM-DD HH:mm:ss'),
startTime,
// endTime: moment(endTime).format('YYYY-MM-DD HH:mm:ss'),
limit,
dateRange,
});

171
src/utils/time.ts Normal file
View File

@ -0,0 +1,171 @@
const moment = require('moment');
moment.locale('zh_CN');
class Time {
dealTime(type) {
let startTime: Date, endTime: Date;
switch (type) {
case 0:
break;
case 1:
startTime = new Date(this.startTime(new Date()));
endTime = new Date(this.endTime(new Date()));
break;
case 2:
const data = this.getCurrentWeekStartTimeAndEndTime();
startTime = data.startTime;
endTime = data.endTime;
break;
case 3:
startTime = new Date(this.getCurrentMonthFirst(new Date()));
endTime = new Date(this.getCurrentMonthLast(new Date()));
break;
case 4:
startTime = new Date(this.getCurrentYearFirst(new Date()));
endTime = new Date(this.getCurrentYearLast(new Date()));
break;
default:
break;
}
return { startTime, endTime };
}
startTime(time) {
const nowTimeDate = new Date(time);
return nowTimeDate.setHours(0, 0, 0, 0);
}
endTime(time) {
const nowTimeDate = new Date(time);
return nowTimeDate.setHours(23, 59, 59, 999);
}
getCurrentWeekStartTimeAndEndTime(time?) {
const current = time ? time : new Date();
// current是本周的第几天
let nowDayOfWeek = current.getDay();
if (nowDayOfWeek === 0) nowDayOfWeek = 7;
const dayNum = 1 * 24 * 60 * 60 * 1000;
// 获取本周星期一的时间,星期一作为一周的第一天
const firstDate = new Date(current.valueOf() - (nowDayOfWeek - 1) * dayNum);
// 获取本周星期天的时间,星期天作为一周的最后一天
const lastDate = new Date(new Date(firstDate).valueOf() + 6 * dayNum);
return {
startTime: new Date(this.startTime(firstDate)),
endTime: new Date(this.endTime(lastDate)),
};
}
/**
*
* @param time
* @returns
*/
getCurrentMonthFirst(time) {
const date = time ? time : new Date();
date.setDate(1);
return this.startTime(date);
}
/**
*
* @param time
* @returns
*/
getCurrentMonthLast(time) {
const date = time ? time : new Date();
const currentMonth = date.getMonth();
const nextMonth = currentMonth + 1;
const nextMonthFirstDay = new Date(date.getFullYear(), nextMonth, 1);
const oneDay = 24 * 60 * 60 * 1000;
return this.endTime(new Date(nextMonthFirstDay.valueOf() - oneDay));
}
/**
*
* @param date
* @returns
*/
getCurrentYearFirst(date) {
date = date ? date : new Date();
date.setDate(1);
date.setMonth(0);
return this.startTime(date);
}
/**
*
* @param date
* @returns
*/
getCurrentYearLast(date) {
date = date ? date : new Date();
date.setFullYear(date.getFullYear() + 1); // 设置到明年
date.setMonth(0); // 明年的0月也就是对应到1月是存在的哦不是不存在的0
date.setDate(0); // 明年的0日
return this.endTime(date);
}
/**
*
* @param limit
* @returns
*/
getRecentDays(limit = 7) {
// 当天开始时间
// const toData = new Date(new Date().toLocaleDateString()).getTime()
// //今天
// let todayStart = toData //开始时间
// let todayEnd = todayStart + 24 * 60 * 60 * 1000 - 1 //结束时间
// //昨天
// let yesterdayStart = toData - 3600 * 24 * 1000
// let yesterdayEnd = (yesterdayStart) + 24 * 60 * 60 * 1000 - 1
// //最近7天
// let past7daysStart = toData - (limit - 1) * 3600 * 24 * 1000
// let past7daysEnd = (past7daysStart) + 24 * 60 * 60 * 1000 - 1
// return new Date(past7daysStart)
return moment().subtract(limit, 'days').format('YYYY-MM-DD 00:00:00')
}
/**
*
* @param limit
*/
getRecentWeeks(limit = 7) {
const current = new Date();
// current是本周的第几天
let nowDayOfWeek = current.getDay();
if (nowDayOfWeek === 0) nowDayOfWeek = 7;
const dayNum = 1 * 24 * 60 * 60 * 1000;
// 获取本周星期一的时间,星期一作为一周的第一天
const firstDate = new Date(current.valueOf() - (nowDayOfWeek - 1) * dayNum);
// const firstDate = current.valueOf() - (nowDayOfWeek - 1) * dayNum;
// const recentWeek = firstDate - (limit - 1) * 7 * 24 * 3600 * 1000
// return new Date(recentWeek)
return moment(firstDate).subtract(limit, 'weeks').format('YYYY-MM-DD 00:00:00')
}
getRecentMonths(limit = 6) {
const current = new Date();
current.setDate(1);
// 获取当月第一天
const firstDay = this.startTime(current);
const recentDay = moment(new Date(firstDay)).subtract(limit, 'months').format('YYYY-MM-DD 00:00:00')
return recentDay
}
/**
*
* @param limit
* @returns
*/
getRecentYears(limit = 3) {
return moment().subtract(limit, 'years').format('YYYY-MM-DD 00:00:00')
// const year = new Date().getFullYear()
// const recent = year - limit + 1
// const date = new Date(`${recent}-01-01 00:00:00`).valueOf() / 1000
// return date
}
}
export default new Time()