ts-glitter 21.0.9 → 21.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lowcode/Entry.js +1 -1
- package/lowcode/Entry.ts +1 -1
- package/lowcode/cms-plugin/data-analyze-orders.js +1 -0
- package/lowcode/cms-plugin/data-analyze-orders.ts +1 -1
- package/lowcode/cms-plugin/data-analyze.js +21 -1
- package/lowcode/cms-plugin/data-analyze.ts +24 -25
- package/package.json +1 -1
- package/src/api-public/controllers/index.js.map +1 -1
- package/src/api-public/controllers/index.ts +1 -0
- package/src/api-public/services/checkout-event.js +1 -3
- package/src/api-public/services/checkout-event.js.map +1 -1
- package/src/api-public/services/data-analyze.d.ts +4 -4
- package/src/api-public/services/data-analyze.js +205 -283
- package/src/api-public/services/data-analyze.js.map +1 -1
- package/src/api-public/services/data-analyze.ts +214 -332
- package/src/api-public/services/public-table-check.js +13 -0
- package/src/api-public/services/public-table-check.js.map +1 -1
- package/src/api-public/services/public-table-check.ts +13 -0
- package/src/api-public/services/schedule.d.ts +1 -0
- package/src/api-public/services/schedule.js +87 -54
- package/src/api-public/services/schedule.js.map +1 -1
- package/src/api-public/services/schedule.ts +101 -57
- package/src/run.js +2 -3
- package/src/run.js.map +1 -1
- package/src/run.ts +1 -1
- /package/{vp00rqhw1r.json → ye8r333y6g.json} +0 -0
|
@@ -8,7 +8,6 @@ const exception_js_1 = __importDefault(require("../../modules/exception.js"));
|
|
|
8
8
|
const database_js_1 = __importDefault(require("../../modules/database.js"));
|
|
9
9
|
const tool_js_1 = __importDefault(require("../../modules/tool.js"));
|
|
10
10
|
const moment_1 = __importDefault(require("moment"));
|
|
11
|
-
const config_js_1 = require("../../config.js");
|
|
12
11
|
const shopping_js_1 = require("./shopping.js");
|
|
13
12
|
const user_js_1 = require("./user.js");
|
|
14
13
|
const workers_js_1 = require("./workers.js");
|
|
@@ -24,7 +23,7 @@ class DataAnalyze {
|
|
|
24
23
|
async workerExample(data) {
|
|
25
24
|
try {
|
|
26
25
|
const jsonData = await database_js_1.default.query(`SELECT *
|
|
27
|
-
|
|
26
|
+
FROM \`${this.app}\`.t_voucher_history`, []);
|
|
28
27
|
const t0 = performance.now();
|
|
29
28
|
if (data.type === 0) {
|
|
30
29
|
for (const record of jsonData) {
|
|
@@ -121,15 +120,15 @@ class DataAnalyze {
|
|
|
121
120
|
async getRecentActiveUser() {
|
|
122
121
|
try {
|
|
123
122
|
const recentSQL = `
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
123
|
+
SELECT *
|
|
124
|
+
FROM \`${this.app}\`.t_user
|
|
125
|
+
WHERE online_time BETWEEN DATE_SUB(NOW(), INTERVAL 10 MINUTE) AND NOW();
|
|
127
126
|
`;
|
|
128
127
|
const recent_users = await database_js_1.default.query(recentSQL, []);
|
|
129
128
|
const monthSQL = `
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
129
|
+
SELECT *
|
|
130
|
+
FROM \`${this.app}\`.t_user
|
|
131
|
+
WHERE MONTH (online_time) = MONTH (NOW()) AND YEAR (online_time) = YEAR (NOW());
|
|
133
132
|
`;
|
|
134
133
|
const month_users = await database_js_1.default.query(monthSQL, []);
|
|
135
134
|
return { recent: recent_users.length, months: month_users.length };
|
|
@@ -142,13 +141,13 @@ class DataAnalyze {
|
|
|
142
141
|
try {
|
|
143
142
|
const orderCountingSQL = await this.getOrderCountingSQL();
|
|
144
143
|
const getCheckoutsSQL = (monthOffset) => `
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
144
|
+
SELECT *
|
|
145
|
+
FROM \`${this.app}\`.t_checkout
|
|
146
|
+
WHERE MONTH (created_time) = MONTH (DATE_SUB(NOW()
|
|
147
|
+
, INTERVAL ${monthOffset} MONTH))
|
|
148
|
+
AND YEAR (created_time) = YEAR (DATE_SUB(NOW()
|
|
149
|
+
, INTERVAL ${monthOffset} MONTH))
|
|
150
|
+
AND (${orderCountingSQL});
|
|
152
151
|
`;
|
|
153
152
|
const calculateTotal = (checkouts) => checkouts.reduce((total, checkout) => total + parseInt(checkout.orderData.total, 10), 0);
|
|
154
153
|
const recentMonthCheckouts = await database_js_1.default.query(getCheckoutsSQL(0), []);
|
|
@@ -193,16 +192,16 @@ class DataAnalyze {
|
|
|
193
192
|
}
|
|
194
193
|
const orderCountingSQL = await this.getOrderCountingSQL();
|
|
195
194
|
const checkoutSQL = `
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
195
|
+
SELECT *
|
|
196
|
+
FROM \`${this.app}\`.t_checkout
|
|
197
|
+
WHERE ${duration === 'day'
|
|
199
198
|
? `created_time BETWEEN NOW() AND NOW() + INTERVAL 1 DAY - INTERVAL 1 SECOND`
|
|
200
199
|
: duration === 'month'
|
|
201
200
|
? `created_time BETWEEN DATE_SUB(NOW(), INTERVAL 1 MONTH) AND NOW()`
|
|
202
201
|
: sqlConditions.length
|
|
203
202
|
? sqlConditions.join(' AND ')
|
|
204
203
|
: '1=1'}
|
|
205
|
-
|
|
204
|
+
AND (${orderCountingSQL});
|
|
206
205
|
`;
|
|
207
206
|
const checkouts = await database_js_1.default.query(checkoutSQL, []);
|
|
208
207
|
const productMap = new Map();
|
|
@@ -260,13 +259,13 @@ class DataAnalyze {
|
|
|
260
259
|
try {
|
|
261
260
|
const orderCountingSQL = await this.getOrderCountingSQL();
|
|
262
261
|
const getCheckoutCountSQL = (monthOffset) => `
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
262
|
+
SELECT id
|
|
263
|
+
FROM \`${this.app}\`.t_checkout
|
|
264
|
+
WHERE MONTH (created_time) = MONTH (DATE_SUB(NOW()
|
|
265
|
+
, INTERVAL ${monthOffset} MONTH))
|
|
266
|
+
AND YEAR (created_time) = YEAR (DATE_SUB(NOW()
|
|
267
|
+
, INTERVAL ${monthOffset} MONTH))
|
|
268
|
+
AND ${orderCountingSQL};
|
|
270
269
|
`;
|
|
271
270
|
const recentMonthCheckouts = await database_js_1.default.query(getCheckoutCountSQL(0), []);
|
|
272
271
|
const previousMonthCheckouts = await database_js_1.default.query(getCheckoutCountSQL(1), []);
|
|
@@ -293,10 +292,10 @@ class DataAnalyze {
|
|
|
293
292
|
const queries = Array.from({ length: 14 }, async (_, index) => {
|
|
294
293
|
const dayOffset = `DATE_SUB(DATE(NOW()), INTERVAL ${index} DAY)`;
|
|
295
294
|
const monthCheckoutSQL = `
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
295
|
+
SELECT orderData ->>'$.orderSource' as orderSource, orderData
|
|
296
|
+
FROM \`${this.app}\`.t_checkout
|
|
297
|
+
WHERE DATE (${convertTimeZone('created_time')}) = ${dayOffset}
|
|
298
|
+
AND ${orderCountingSQL};
|
|
300
299
|
`;
|
|
301
300
|
return database_js_1.default.query(monthCheckoutSQL, []).then(data => {
|
|
302
301
|
let total = 0, total_pos = 0, total_web = 0, total_store = 0;
|
|
@@ -337,10 +336,10 @@ class DataAnalyze {
|
|
|
337
336
|
const queries = Array.from({ length: 30 }, async (_, index) => {
|
|
338
337
|
const dayOffset = `DATE_SUB(DATE(NOW()), INTERVAL ${index} DAY)`;
|
|
339
338
|
const monthCheckoutSQL = `
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
339
|
+
SELECT orderData ->>'$.orderSource' as orderSource, orderData
|
|
340
|
+
FROM \`${this.app}\`.t_checkout
|
|
341
|
+
WHERE DATE (${convertTimeZone('created_time')}) = ${dayOffset}
|
|
342
|
+
AND ${orderCountingSQL};
|
|
344
343
|
`;
|
|
345
344
|
return database_js_1.default.query(monthCheckoutSQL, []).then(data => {
|
|
346
345
|
let total = 0, total_pos = 0, total_web = 0, total_store = 0;
|
|
@@ -383,10 +382,10 @@ class DataAnalyze {
|
|
|
383
382
|
const queries = Array.from({ length: days }, async (_, index) => {
|
|
384
383
|
const dayOffset = `DATE_SUB(DATE("${endDate}"), INTERVAL ${index} DAY)`;
|
|
385
384
|
const monthCheckoutSQL = `
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
385
|
+
SELECT orderData ->>'$.orderSource' as orderSource, orderData
|
|
386
|
+
FROM \`${this.app}\`.t_checkout
|
|
387
|
+
WHERE DATE (${convertTimeZone('created_time')}) = ${dayOffset}
|
|
388
|
+
AND ${orderCountingSQL};
|
|
390
389
|
`;
|
|
391
390
|
return database_js_1.default.query(monthCheckoutSQL, []).then(data => {
|
|
392
391
|
let total = 0, total_pos = 0, total_web = 0, total_store = 0;
|
|
@@ -427,11 +426,11 @@ class DataAnalyze {
|
|
|
427
426
|
const queries = Array.from({ length: 12 }, async (_, index) => {
|
|
428
427
|
const monthOffset = `DATE_FORMAT(DATE_SUB(${convertTimeZone('NOW()')}, INTERVAL ${index} MONTH), '%Y-%m')`;
|
|
429
428
|
const monthCheckoutSQL = `
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
429
|
+
SELECT orderData ->>'$.orderSource' as orderSource, orderData
|
|
430
|
+
FROM \`${this.app}\`.t_checkout
|
|
431
|
+
WHERE DATE_FORMAT(${convertTimeZone('created_time')}
|
|
432
|
+
, '%Y-%m') = ${monthOffset}
|
|
433
|
+
AND ${orderCountingSQL};
|
|
435
434
|
`;
|
|
436
435
|
return database_js_1.default.query(monthCheckoutSQL, []).then(data => {
|
|
437
436
|
let total = 0, total_pos = 0, total_web = 0, total_store = 0;
|
|
@@ -473,14 +472,14 @@ class DataAnalyze {
|
|
|
473
472
|
await new Promise(resolve => {
|
|
474
473
|
for (let index = 0; index < 12; index++) {
|
|
475
474
|
const monthCheckoutSQL = `
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
475
|
+
SELECT orderData
|
|
476
|
+
FROM \`${this.app}\`.t_checkout
|
|
477
|
+
WHERE
|
|
478
|
+
MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone('NOW()')}
|
|
479
|
+
, INTERVAL ${index} MONTH))
|
|
480
|
+
AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone('NOW()')}
|
|
481
|
+
, INTERVAL ${index} MONTH))
|
|
482
|
+
AND ${orderCountingSQL};
|
|
484
483
|
`;
|
|
485
484
|
database_js_1.default.query(monthCheckoutSQL, []).then(data => {
|
|
486
485
|
pass++;
|
|
@@ -549,16 +548,16 @@ class DataAnalyze {
|
|
|
549
548
|
await new Promise(resolve => {
|
|
550
549
|
for (let index = 0; index < 14; index++) {
|
|
551
550
|
const monthCheckoutSQL = `
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
551
|
+
SELECT orderData
|
|
552
|
+
FROM \`${this.app}\`.t_checkout
|
|
553
|
+
WHERE
|
|
554
|
+
DAY (${convertTimeZone('created_time')}) = DAY (DATE_SUB(${convertTimeZone('NOW()')}
|
|
555
|
+
, INTERVAL ${index} DAY))
|
|
556
|
+
AND MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone('NOW()')}
|
|
557
|
+
, INTERVAL ${index} DAY))
|
|
558
|
+
AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone('NOW()')}
|
|
559
|
+
, INTERVAL ${index} DAY))
|
|
560
|
+
AND ${orderCountingSQL};
|
|
562
561
|
`;
|
|
563
562
|
database_js_1.default.query(monthCheckoutSQL, []).then(data => {
|
|
564
563
|
pass++;
|
|
@@ -627,16 +626,16 @@ class DataAnalyze {
|
|
|
627
626
|
await new Promise(resolve => {
|
|
628
627
|
for (let index = 0; index < 30; index++) {
|
|
629
628
|
const monthCheckoutSQL = `
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
629
|
+
SELECT orderData
|
|
630
|
+
FROM \`${this.app}\`.t_checkout
|
|
631
|
+
WHERE
|
|
632
|
+
DAY (${convertTimeZone('created_time')}) = DAY (DATE_SUB(${convertTimeZone('NOW()')}
|
|
633
|
+
, INTERVAL ${index} DAY))
|
|
634
|
+
AND MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone('NOW()')}
|
|
635
|
+
, INTERVAL ${index} DAY))
|
|
636
|
+
AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone('NOW()')}
|
|
637
|
+
, INTERVAL ${index} DAY))
|
|
638
|
+
AND ${orderCountingSQL};
|
|
640
639
|
`;
|
|
641
640
|
database_js_1.default.query(monthCheckoutSQL, []).then(data => {
|
|
642
641
|
pass++;
|
|
@@ -714,16 +713,16 @@ class DataAnalyze {
|
|
|
714
713
|
await new Promise(resolve => {
|
|
715
714
|
for (let index = 0; index < days; index++) {
|
|
716
715
|
const monthCheckoutSQL = `
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
716
|
+
SELECT orderData
|
|
717
|
+
FROM \`${this.app}\`.t_checkout
|
|
718
|
+
WHERE
|
|
719
|
+
DAY (${convertTimeZone('created_time')}) = DAY (DATE_SUB(${convertTimeZone(formatEndDate)}
|
|
720
|
+
, INTERVAL ${index} DAY))
|
|
721
|
+
AND MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone(formatEndDate)}
|
|
722
|
+
, INTERVAL ${index} DAY))
|
|
723
|
+
AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone(formatEndDate)}
|
|
724
|
+
, INTERVAL ${index} DAY))
|
|
725
|
+
AND ${orderCountingSQL};
|
|
727
726
|
`;
|
|
728
727
|
database_js_1.default.query(monthCheckoutSQL, []).then(data => {
|
|
729
728
|
pass++;
|
|
@@ -792,14 +791,14 @@ class DataAnalyze {
|
|
|
792
791
|
await new Promise(resolve => {
|
|
793
792
|
for (let index = 0; index < 12; index++) {
|
|
794
793
|
const monthCheckoutSQL = `
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
794
|
+
SELECT orderData
|
|
795
|
+
FROM \`${this.app}\`.t_checkout
|
|
796
|
+
WHERE
|
|
797
|
+
MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone('NOW()')}
|
|
798
|
+
, INTERVAL ${index} MONTH))
|
|
799
|
+
AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone('NOW()')}
|
|
800
|
+
, INTERVAL ${index} MONTH))
|
|
801
|
+
AND ${orderCountingSQL};
|
|
803
802
|
`;
|
|
804
803
|
database_js_1.default.query(monthCheckoutSQL, []).then(data => {
|
|
805
804
|
pass++;
|
|
@@ -874,16 +873,16 @@ class DataAnalyze {
|
|
|
874
873
|
await new Promise(resolve => {
|
|
875
874
|
for (let index = 0; index < 14; index++) {
|
|
876
875
|
const monthCheckoutSQL = `
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
876
|
+
SELECT orderData
|
|
877
|
+
FROM \`${this.app}\`.t_checkout
|
|
878
|
+
WHERE
|
|
879
|
+
DAY (${convertTimeZone('created_time')}) = DAY (DATE_SUB(${convertTimeZone('NOW()')}
|
|
880
|
+
, INTERVAL ${index} DAY))
|
|
881
|
+
AND MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone('NOW()')}
|
|
882
|
+
, INTERVAL ${index} DAY))
|
|
883
|
+
AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone('NOW()')}
|
|
884
|
+
, INTERVAL ${index} DAY))
|
|
885
|
+
AND ${orderCountingSQL};
|
|
887
886
|
`;
|
|
888
887
|
database_js_1.default.query(monthCheckoutSQL, []).then(data => {
|
|
889
888
|
pass++;
|
|
@@ -958,16 +957,16 @@ class DataAnalyze {
|
|
|
958
957
|
await new Promise(resolve => {
|
|
959
958
|
for (let index = 0; index < 30; index++) {
|
|
960
959
|
const monthCheckoutSQL = `
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
960
|
+
SELECT orderData
|
|
961
|
+
FROM \`${this.app}\`.t_checkout
|
|
962
|
+
WHERE
|
|
963
|
+
DAY (${convertTimeZone('created_time')}) = DAY (DATE_SUB(${convertTimeZone('NOW()')}
|
|
964
|
+
, INTERVAL ${index} DAY))
|
|
965
|
+
AND MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone('NOW()')}
|
|
966
|
+
, INTERVAL ${index} DAY))
|
|
967
|
+
AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone('NOW()')}
|
|
968
|
+
, INTERVAL ${index} DAY))
|
|
969
|
+
AND ${orderCountingSQL};
|
|
971
970
|
`;
|
|
972
971
|
database_js_1.default.query(monthCheckoutSQL, []).then(data => {
|
|
973
972
|
pass++;
|
|
@@ -1044,16 +1043,16 @@ class DataAnalyze {
|
|
|
1044
1043
|
await new Promise(resolve => {
|
|
1045
1044
|
for (let index = 0; index < days; index++) {
|
|
1046
1045
|
const monthCheckoutSQL = `
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1046
|
+
SELECT orderData
|
|
1047
|
+
FROM \`${this.app}\`.t_checkout
|
|
1048
|
+
WHERE
|
|
1049
|
+
DAY (${convertTimeZone('created_time')}) = DAY (DATE_SUB(${convertTimeZone(formatEndDate)}
|
|
1050
|
+
, INTERVAL ${index} DAY))
|
|
1051
|
+
AND MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone(formatEndDate)}
|
|
1052
|
+
, INTERVAL ${index} DAY))
|
|
1053
|
+
AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone(formatEndDate)}
|
|
1054
|
+
, INTERVAL ${index} DAY))
|
|
1055
|
+
AND ${orderCountingSQL}
|
|
1057
1056
|
`;
|
|
1058
1057
|
database_js_1.default.query(monthCheckoutSQL, []).then(data => {
|
|
1059
1058
|
pass++;
|
|
@@ -1119,117 +1118,58 @@ class DataAnalyze {
|
|
|
1119
1118
|
async getActiveRecentYear() {
|
|
1120
1119
|
const utTimer = new ut_timer_js_1.UtTimer('GET-RECENT-ACTIVE-USER-YEAR');
|
|
1121
1120
|
const checkPoint = utTimer.checkPoint;
|
|
1122
|
-
const endDate = moment_1.default.tz('Asia/Taipei').toDate();
|
|
1123
|
-
endDate.setMonth(endDate.getMonth() + 1, 1);
|
|
1124
|
-
const startDate = moment_1.default.tz('Asia/Taipei').toDate();
|
|
1125
|
-
startDate.setMonth(endDate.getMonth() - 12);
|
|
1126
|
-
const sql = `
|
|
1127
|
-
SELECT mac_address, created_time
|
|
1128
|
-
FROM \`${config_js_1.saasConfig.SAAS_NAME}\`.t_monitor
|
|
1129
|
-
WHERE app_name = ${database_js_1.default.escape(this.app)}
|
|
1130
|
-
AND req_type = 'file'
|
|
1131
|
-
AND created_time BETWEEN '${startDate.toISOString()}' AND '${endDate.toISOString()}'
|
|
1132
|
-
GROUP BY id, mac_address
|
|
1133
|
-
`;
|
|
1134
|
-
console.log(`getActiveRecentYear: ${sql}`);
|
|
1135
|
-
checkPoint(`sql-start`);
|
|
1136
|
-
const queryData = await database_js_1.default.query(sql, []);
|
|
1137
|
-
checkPoint(`sql-end-${queryData.length}`);
|
|
1138
1121
|
const now = moment_1.default.tz('Asia/Taipei').toDate();
|
|
1139
|
-
const dataList = Array.from({ length: 12 }, (_, index) => {
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1122
|
+
const dataList = await Promise.all(Array.from({ length: 12 }, (_, index) => index).map((dd, index) => {
|
|
1123
|
+
return new Promise(async (resolve, reject) => {
|
|
1124
|
+
const sql = `
|
|
1125
|
+
select sum(count)
|
|
1126
|
+
from \`${this.app}\`.visit_logs where
|
|
1127
|
+
MONTH(${convertTimeZone('date')}) = MONTH(DATE_SUB(${convertTimeZone('NOW()')}, INTERVAL ${index} MONTH))
|
|
1128
|
+
`;
|
|
1129
|
+
const queryData = await database_js_1.default.query(sql, []);
|
|
1130
|
+
resolve((queryData[0] && queryData[0]['sum(count)']) || 0);
|
|
1146
1131
|
});
|
|
1147
|
-
|
|
1148
|
-
return {
|
|
1149
|
-
year,
|
|
1150
|
-
month,
|
|
1151
|
-
total_count: filteredData.length,
|
|
1152
|
-
unique_count: uniqueMacAddresses.size,
|
|
1153
|
-
};
|
|
1154
|
-
});
|
|
1155
|
-
const result = dataList.map(data => data.unique_count);
|
|
1156
|
-
checkPoint(`data-end`);
|
|
1132
|
+
}));
|
|
1157
1133
|
return {
|
|
1158
|
-
count_array:
|
|
1134
|
+
count_array: dataList.reverse(),
|
|
1159
1135
|
};
|
|
1160
1136
|
}
|
|
1161
1137
|
async getActiveRecentWeek() {
|
|
1162
|
-
const
|
|
1163
|
-
|
|
1164
|
-
FROM \`${config_js_1.saasConfig.SAAS_NAME}\`.t_monitor
|
|
1165
|
-
WHERE app_name = ${database_js_1.default.escape(this.app)}
|
|
1166
|
-
AND req_type = 'file'
|
|
1167
|
-
AND ${convertTimeZone('created_time')} BETWEEN (DATE_SUB(${convertTimeZone('NOW()')}
|
|
1168
|
-
, INTERVAL 14 DAY))
|
|
1169
|
-
AND ${convertTimeZone('NOW()')}
|
|
1170
|
-
GROUP BY id, mac_address
|
|
1171
|
-
`;
|
|
1172
|
-
const queryData = await database_js_1.default.query(sql, []);
|
|
1138
|
+
const utTimer = new ut_timer_js_1.UtTimer('GET-RECENT-ACTIVE-USER-WEEK');
|
|
1139
|
+
const checkPoint = utTimer.checkPoint;
|
|
1173
1140
|
const now = moment_1.default.tz('Asia/Taipei').toDate();
|
|
1174
|
-
const dataList = Array.from({ length: 14 }, (_, index) => {
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
const
|
|
1182
|
-
|
|
1141
|
+
const dataList = await Promise.all(Array.from({ length: 14 }, (_, index) => index).map((dd, index) => {
|
|
1142
|
+
return new Promise(async (resolve, reject) => {
|
|
1143
|
+
const sql = `
|
|
1144
|
+
select count
|
|
1145
|
+
from \`${this.app}\`.visit_logs where
|
|
1146
|
+
DATE(${convertTimeZone('date')}) = DATE(DATE_SUB(${convertTimeZone('NOW()')}, INTERVAL ${index} DAY))
|
|
1147
|
+
`;
|
|
1148
|
+
const queryData = await database_js_1.default.query(sql, []);
|
|
1149
|
+
resolve((queryData[0] && queryData[0]['count']) || 0);
|
|
1183
1150
|
});
|
|
1184
|
-
|
|
1185
|
-
return {
|
|
1186
|
-
year,
|
|
1187
|
-
month,
|
|
1188
|
-
day,
|
|
1189
|
-
total_count: filteredData.length,
|
|
1190
|
-
unique_count: uniqueMacAddresses.size,
|
|
1191
|
-
};
|
|
1192
|
-
});
|
|
1193
|
-
const result = dataList.map(data => data.unique_count);
|
|
1151
|
+
}));
|
|
1194
1152
|
return {
|
|
1195
|
-
count_array:
|
|
1153
|
+
count_array: dataList.reverse(),
|
|
1196
1154
|
};
|
|
1197
1155
|
}
|
|
1198
1156
|
async getActiveRecentMonth() {
|
|
1199
|
-
const
|
|
1200
|
-
|
|
1201
|
-
FROM \`${config_js_1.saasConfig.SAAS_NAME}\`.t_monitor
|
|
1202
|
-
WHERE app_name = ${database_js_1.default.escape(this.app)}
|
|
1203
|
-
AND req_type = 'file'
|
|
1204
|
-
AND ${convertTimeZone('created_time')} BETWEEN (DATE_SUB(${convertTimeZone('NOW()')}
|
|
1205
|
-
, INTERVAL 30 DAY))
|
|
1206
|
-
AND ${convertTimeZone('NOW()')}
|
|
1207
|
-
GROUP BY id, mac_address
|
|
1208
|
-
`;
|
|
1209
|
-
const queryData = await database_js_1.default.query(sql, []);
|
|
1157
|
+
const utTimer = new ut_timer_js_1.UtTimer('GET-RECENT-ACTIVE-USER-WEEK');
|
|
1158
|
+
const checkPoint = utTimer.checkPoint;
|
|
1210
1159
|
const now = moment_1.default.tz('Asia/Taipei').toDate();
|
|
1211
|
-
const dataList = Array.from({ length: 30 }, (_, index) => {
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
const
|
|
1219
|
-
|
|
1160
|
+
const dataList = await Promise.all(Array.from({ length: 30 }, (_, index) => index).map((dd, index) => {
|
|
1161
|
+
return new Promise(async (resolve, reject) => {
|
|
1162
|
+
const sql = `
|
|
1163
|
+
select count
|
|
1164
|
+
from \`${this.app}\`.visit_logs where
|
|
1165
|
+
DATE(${convertTimeZone('date')}) = DATE(DATE_SUB(${convertTimeZone('NOW()')}, INTERVAL ${index} DAY))
|
|
1166
|
+
`;
|
|
1167
|
+
const queryData = await database_js_1.default.query(sql, []);
|
|
1168
|
+
resolve((queryData[0] && queryData[0]['count']) || 0);
|
|
1220
1169
|
});
|
|
1221
|
-
|
|
1222
|
-
return {
|
|
1223
|
-
year,
|
|
1224
|
-
month,
|
|
1225
|
-
day,
|
|
1226
|
-
total_count: filteredData.length,
|
|
1227
|
-
unique_count: uniqueMacAddresses.size,
|
|
1228
|
-
};
|
|
1229
|
-
});
|
|
1230
|
-
const result = dataList.map(data => data.unique_count);
|
|
1170
|
+
}));
|
|
1231
1171
|
return {
|
|
1232
|
-
count_array:
|
|
1172
|
+
count_array: dataList.reverse(),
|
|
1233
1173
|
};
|
|
1234
1174
|
}
|
|
1235
1175
|
async getActiveRecentCustom(query) {
|
|
@@ -1237,40 +1177,22 @@ class DataAnalyze {
|
|
|
1237
1177
|
const formatStartDate = `"${tool_js_1.default.replaceDatetime(qData.start)}"`;
|
|
1238
1178
|
const formatEndDate = `"${tool_js_1.default.replaceDatetime(qData.end)}"`;
|
|
1239
1179
|
const days = this.diffDates(new Date(qData.start), new Date(qData.end));
|
|
1240
|
-
const
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
const dataList = Array.from({ length: days }, (_, index) => {
|
|
1253
|
-
const targetDate = new Date(now.getTime());
|
|
1254
|
-
targetDate.setDate(new Date(now.getTime()).getDate() - index);
|
|
1255
|
-
const year = targetDate.getFullYear();
|
|
1256
|
-
const month = targetDate.getMonth() + 1;
|
|
1257
|
-
const day = targetDate.getDate();
|
|
1258
|
-
const filteredData = queryData.filter((item) => {
|
|
1259
|
-
const date = moment_1.default.tz(item.created_time, 'UTC').clone().tz('Asia/Taipei').toDate();
|
|
1260
|
-
return date.getFullYear() === year && date.getMonth() + 1 === month && date.getDate() === day;
|
|
1180
|
+
const utTimer = new ut_timer_js_1.UtTimer('GET-RECENT-ACTIVE-USER-WEEK');
|
|
1181
|
+
const checkPoint = utTimer.checkPoint;
|
|
1182
|
+
const now = moment_1.default.tz('Asia/Taipei').toDate();
|
|
1183
|
+
const dataList = await Promise.all(Array.from({ length: days }, (_, index) => index).map((dd, index) => {
|
|
1184
|
+
return new Promise(async (resolve, reject) => {
|
|
1185
|
+
const sql = `
|
|
1186
|
+
select count
|
|
1187
|
+
from \`${this.app}\`.visit_logs where
|
|
1188
|
+
DATE(${convertTimeZone('date')}) = DATE(DATE_SUB(${convertTimeZone('NOW()')}, INTERVAL ${index} DAY))
|
|
1189
|
+
`;
|
|
1190
|
+
const queryData = await database_js_1.default.query(sql, []);
|
|
1191
|
+
resolve((queryData[0] && queryData[0]['count']) || 0);
|
|
1261
1192
|
});
|
|
1262
|
-
|
|
1263
|
-
return {
|
|
1264
|
-
year,
|
|
1265
|
-
month,
|
|
1266
|
-
day,
|
|
1267
|
-
total_count: filteredData.length,
|
|
1268
|
-
unique_count: uniqueMacAddresses.size,
|
|
1269
|
-
};
|
|
1270
|
-
});
|
|
1271
|
-
const result = dataList.map(data => data.unique_count);
|
|
1193
|
+
}));
|
|
1272
1194
|
return {
|
|
1273
|
-
count_array:
|
|
1195
|
+
count_array: dataList.reverse(),
|
|
1274
1196
|
};
|
|
1275
1197
|
}
|
|
1276
1198
|
async getRegisterMonth() {
|
|
@@ -1280,16 +1202,16 @@ class DataAnalyze {
|
|
|
1280
1202
|
await new Promise(resolve => {
|
|
1281
1203
|
for (let index = 0; index < 30; index++) {
|
|
1282
1204
|
const monthCheckoutSQL = `
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1205
|
+
SELECT count(1)
|
|
1206
|
+
FROM \`${this.app}\`.t_user
|
|
1207
|
+
WHERE
|
|
1208
|
+
DAY (${convertTimeZone('created_time')}) = DAY (DATE_SUB(${convertTimeZone('NOW()')}
|
|
1209
|
+
, INTERVAL ${index} DAY))
|
|
1210
|
+
AND MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone('NOW()')}
|
|
1211
|
+
, INTERVAL ${index} DAY))
|
|
1212
|
+
AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone('NOW()')}
|
|
1213
|
+
, INTERVAL ${index} DAY))
|
|
1214
|
+
AND status <> 0;
|
|
1293
1215
|
`;
|
|
1294
1216
|
database_js_1.default.query(monthCheckoutSQL, []).then(data => {
|
|
1295
1217
|
countArray[index] = data[0]['count(1)'];
|
|
@@ -1326,16 +1248,16 @@ class DataAnalyze {
|
|
|
1326
1248
|
await new Promise(resolve => {
|
|
1327
1249
|
for (let index = 0; index < days; index++) {
|
|
1328
1250
|
const monthCheckoutSQL = `
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1251
|
+
SELECT count(1)
|
|
1252
|
+
FROM \`${this.app}\`.t_user
|
|
1253
|
+
WHERE
|
|
1254
|
+
DAY (${convertTimeZone('created_time')}) = DAY (DATE_SUB(${convertTimeZone(formatEndDate)}
|
|
1255
|
+
, INTERVAL ${index} DAY))
|
|
1256
|
+
AND MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone(formatEndDate)}
|
|
1257
|
+
, INTERVAL ${index} DAY))
|
|
1258
|
+
AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone(formatEndDate)}
|
|
1259
|
+
, INTERVAL ${index} DAY))
|
|
1260
|
+
AND status <> 0;
|
|
1339
1261
|
`;
|
|
1340
1262
|
database_js_1.default.query(monthCheckoutSQL, []).then(data => {
|
|
1341
1263
|
countArray[index] = data[0]['count(1)'];
|
|
@@ -1369,16 +1291,16 @@ class DataAnalyze {
|
|
|
1369
1291
|
await new Promise(resolve => {
|
|
1370
1292
|
for (let index = 0; index < 14; index++) {
|
|
1371
1293
|
const monthCheckoutSQL = `
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1294
|
+
SELECT count(1)
|
|
1295
|
+
FROM \`${this.app}\`.t_user
|
|
1296
|
+
WHERE
|
|
1297
|
+
DAY (${convertTimeZone('created_time')}) = DAY (DATE_SUB(${convertTimeZone('NOW()')}
|
|
1298
|
+
, INTERVAL ${index} DAY))
|
|
1299
|
+
AND MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone('NOW()')}
|
|
1300
|
+
, INTERVAL ${index} DAY))
|
|
1301
|
+
AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone('NOW()')}
|
|
1302
|
+
, INTERVAL ${index} DAY))
|
|
1303
|
+
AND status <> 0;
|
|
1382
1304
|
`;
|
|
1383
1305
|
database_js_1.default.query(monthCheckoutSQL, []).then(data => {
|
|
1384
1306
|
countArray[index] = data[0]['count(1)'];
|
|
@@ -1415,12 +1337,12 @@ class DataAnalyze {
|
|
|
1415
1337
|
await new Promise(resolve => {
|
|
1416
1338
|
for (let index = 0; index < 12; index++) {
|
|
1417
1339
|
const monthRegisterSQL = `
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1340
|
+
SELECT count(1)
|
|
1341
|
+
FROM \`${this.app}\`.t_user
|
|
1342
|
+
WHERE MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone('NOW()')}
|
|
1343
|
+
, INTERVAL ${index} MONTH))
|
|
1344
|
+
AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone('NOW()')}
|
|
1345
|
+
, INTERVAL ${index} MONTH))
|
|
1424
1346
|
`;
|
|
1425
1347
|
database_js_1.default.query(monthRegisterSQL, []).then(data => {
|
|
1426
1348
|
pass++;
|