1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
| import { Init, Inject, Provide } from '@midwayjs/core';
| import { BaseService } from '@cool-midway/core';
| import * as moment from 'moment';
| import { Utils } from '../../../comm/utils';
|
| /**
| * 通用
| */
| @Provide()
| export class CountCommService extends BaseService {
| @Inject()
| utils: Utils;
|
| /**
| * 获得时间范围
| * @param unit
| */
| getTimeRange(unit: 'day' | 'week' | 'month' | 'year') {
| let start, end;
| if (unit === 'week') {
| // 周的开始时间加一天,以匹配您的需求
| start = moment()
| .startOf(unit)
| .add(1, 'days')
| .format('YYYY-MM-DD HH:mm:ss');
| } else {
| start = moment().startOf(unit).format('YYYY-MM-DD HH:mm:ss');
| }
| end = moment().endOf(unit).format('YYYY-MM-DD HH:mm:ss');
| return { start, end };
| }
|
| /**
| * 图表
| * @param tableName
| * @param dayCount
| * @param column 统计列
| * @returns
| */
| async chart(tableName: string, dayCount: number, column = 'count(a.id)') {
| const result = {
| datas: [],
| dates: [],
| };
| const dates = this.utils.getRecentlyDates(dayCount);
| const count = await this.nativeQuery(
| `SELECT
| ${column} as total,
| LEFT(a.createTime, 10) AS time
| FROM
| ${tableName} a
| WHERE
| DATE_SUB( CURDATE( ), INTERVAL ? DAY ) <= a.createTime
| GROUP BY
| LEFT(a.createTime, 10)`,
| [dayCount]
| );
| dates.forEach(date => {
| let data = 0;
| for (const item of count) {
| if (date == item.time) {
| data = item.total;
| break;
| }
| }
| result.dates.push(date);
| result.datas.push(data);
| });
| return result;
| }
| }
|
|