ts-glitter 21.0.9 → 21.1.2

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.
Files changed (43) hide show
  1. package/lowcode/Entry.js +1 -1
  2. package/lowcode/Entry.ts +1 -1
  3. package/lowcode/cms-plugin/POS-setting.js +10 -6
  4. package/lowcode/cms-plugin/POS-setting.ts +11 -5
  5. package/lowcode/cms-plugin/data-analyze-orders.js +1 -0
  6. package/lowcode/cms-plugin/data-analyze-orders.ts +1 -1
  7. package/lowcode/cms-plugin/data-analyze.js +21 -1
  8. package/lowcode/cms-plugin/data-analyze.ts +24 -25
  9. package/lowcode/cms-plugin/pos-basic-setting.ts +1 -0
  10. package/lowcode/cms-plugin/pos-config-setting.js +56 -8
  11. package/lowcode/cms-plugin/pos-config-setting.ts +81 -28
  12. package/lowcode/cms-plugin/pos-pages/products-page.js +13 -2
  13. package/lowcode/cms-plugin/pos-pages/products-page.ts +14 -2
  14. package/lowcode/editor-components/font-select.js +1 -0
  15. package/lowcode/editor-components/font-select.ts +64 -0
  16. package/lowcode/official_view_component/official/component.js +10 -5
  17. package/lowcode/official_view_component/official/component.ts +22 -13
  18. package/lowcode/setting/fonts-config.js +119 -59
  19. package/lowcode/setting/fonts-config.ts +7075 -6999
  20. package/package.json +1 -1
  21. package/src/api-public/controllers/index.js.map +1 -1
  22. package/src/api-public/controllers/index.ts +1 -0
  23. package/src/api-public/services/checkout-event.js +1 -3
  24. package/src/api-public/services/checkout-event.js.map +1 -1
  25. package/src/api-public/services/data-analyze.d.ts +4 -4
  26. package/src/api-public/services/data-analyze.js +213 -283
  27. package/src/api-public/services/data-analyze.js.map +1 -1
  28. package/src/api-public/services/data-analyze.ts +222 -332
  29. package/src/api-public/services/public-table-check.js +13 -0
  30. package/src/api-public/services/public-table-check.js.map +1 -1
  31. package/src/api-public/services/public-table-check.ts +13 -0
  32. package/src/api-public/services/schedule.d.ts +1 -0
  33. package/src/api-public/services/schedule.js +87 -54
  34. package/src/api-public/services/schedule.js.map +1 -1
  35. package/src/api-public/services/schedule.ts +101 -57
  36. package/src/api-public/services/shopping.js +2 -3
  37. package/src/api-public/services/shopping.js.map +1 -1
  38. package/src/api-public/services/shopping.ts +2 -3
  39. package/src/api-public/utils/ut-permission.d.ts +0 -1
  40. package/src/run.js +2 -3
  41. package/src/run.js.map +1 -1
  42. package/src/run.ts +1 -1
  43. /package/{vp00rqhw1r.json → ye8r333y6g.json} +0 -0
@@ -28,7 +28,7 @@ export class DataAnalyze {
28
28
  // 以 t_voucher_history 更新資料舉例
29
29
  const jsonData = await db.query(
30
30
  `SELECT *
31
- FROM \`${this.app}\`.t_voucher_history`,
31
+ FROM \`${this.app}\`.t_voucher_history`,
32
32
  []
33
33
  );
34
34
  const t0 = performance.now();
@@ -139,15 +139,15 @@ export class DataAnalyze {
139
139
  async getRecentActiveUser() {
140
140
  try {
141
141
  const recentSQL = `
142
- SELECT *
143
- FROM \`${this.app}\`.t_user
144
- WHERE online_time BETWEEN DATE_SUB(NOW(), INTERVAL 10 MINUTE) AND NOW();
142
+ SELECT *
143
+ FROM \`${this.app}\`.t_user
144
+ WHERE online_time BETWEEN DATE_SUB(NOW(), INTERVAL 10 MINUTE) AND NOW();
145
145
  `;
146
146
  const recent_users = await db.query(recentSQL, []);
147
147
  const monthSQL = `
148
- SELECT *
149
- FROM \`${this.app}\`.t_user
150
- WHERE MONTH (online_time) = MONTH (NOW()) AND YEAR (online_time) = YEAR (NOW());
148
+ SELECT *
149
+ FROM \`${this.app}\`.t_user
150
+ WHERE MONTH (online_time) = MONTH (NOW()) AND YEAR (online_time) = YEAR (NOW());
151
151
  `;
152
152
  const month_users = await db.query(monthSQL, []);
153
153
  return { recent: recent_users.length, months: month_users.length };
@@ -161,13 +161,13 @@ export class DataAnalyze {
161
161
  const orderCountingSQL = await this.getOrderCountingSQL();
162
162
 
163
163
  const getCheckoutsSQL = (monthOffset: number) => `
164
- SELECT *
165
- FROM \`${this.app}\`.t_checkout
166
- WHERE MONTH (created_time) = MONTH (DATE_SUB(NOW()
167
- , INTERVAL ${monthOffset} MONTH))
168
- AND YEAR (created_time) = YEAR (DATE_SUB(NOW()
169
- , INTERVAL ${monthOffset} MONTH))
170
- AND (${orderCountingSQL});
164
+ SELECT *
165
+ FROM \`${this.app}\`.t_checkout
166
+ WHERE MONTH (created_time) = MONTH (DATE_SUB(NOW()
167
+ , INTERVAL ${monthOffset} MONTH))
168
+ AND YEAR (created_time) = YEAR (DATE_SUB(NOW()
169
+ , INTERVAL ${monthOffset} MONTH))
170
+ AND (${orderCountingSQL});
171
171
  `;
172
172
 
173
173
  const calculateTotal = (checkouts: any[]): number =>
@@ -229,18 +229,18 @@ export class DataAnalyze {
229
229
  // 組裝 SQL 查詢
230
230
  const orderCountingSQL = await this.getOrderCountingSQL();
231
231
  const checkoutSQL = `
232
- SELECT *
233
- FROM \`${this.app}\`.t_checkout
234
- WHERE ${
235
- duration === 'day'
236
- ? `created_time BETWEEN NOW() AND NOW() + INTERVAL 1 DAY - INTERVAL 1 SECOND`
237
- : duration === 'month'
238
- ? `created_time BETWEEN DATE_SUB(NOW(), INTERVAL 1 MONTH) AND NOW()`
239
- : sqlConditions.length
240
- ? sqlConditions.join(' AND ')
241
- : '1=1'
242
- }
243
- AND (${orderCountingSQL});
232
+ SELECT *
233
+ FROM \`${this.app}\`.t_checkout
234
+ WHERE ${
235
+ duration === 'day'
236
+ ? `created_time BETWEEN NOW() AND NOW() + INTERVAL 1 DAY - INTERVAL 1 SECOND`
237
+ : duration === 'month'
238
+ ? `created_time BETWEEN DATE_SUB(NOW(), INTERVAL 1 MONTH) AND NOW()`
239
+ : sqlConditions.length
240
+ ? sqlConditions.join(' AND ')
241
+ : '1=1'
242
+ }
243
+ AND (${orderCountingSQL});
244
244
  `;
245
245
 
246
246
  const checkouts = await db.query(checkoutSQL, []);
@@ -251,7 +251,7 @@ export class DataAnalyze {
251
251
 
252
252
  checkouts.forEach(({ orderData }: { orderData: any }) => {
253
253
  orderData.lineItems?.forEach((item: any) => {
254
- item.collection=item.collection??[];
254
+ item.collection = item.collection ?? [];
255
255
  const existing = productMap.get(item.title);
256
256
  const collections = new Set(item.collection.filter((c: string) => c.trim().length > 0));
257
257
 
@@ -310,13 +310,13 @@ export class DataAnalyze {
310
310
  const orderCountingSQL = await this.getOrderCountingSQL();
311
311
 
312
312
  const getCheckoutCountSQL = (monthOffset: number) => `
313
- SELECT id
314
- FROM \`${this.app}\`.t_checkout
315
- WHERE MONTH (created_time) = MONTH (DATE_SUB(NOW()
316
- , INTERVAL ${monthOffset} MONTH))
317
- AND YEAR (created_time) = YEAR (DATE_SUB(NOW()
318
- , INTERVAL ${monthOffset} MONTH))
319
- AND ${orderCountingSQL};
313
+ SELECT id
314
+ FROM \`${this.app}\`.t_checkout
315
+ WHERE MONTH (created_time) = MONTH (DATE_SUB(NOW()
316
+ , INTERVAL ${monthOffset} MONTH))
317
+ AND YEAR (created_time) = YEAR (DATE_SUB(NOW()
318
+ , INTERVAL ${monthOffset} MONTH))
319
+ AND ${orderCountingSQL};
320
320
  `;
321
321
 
322
322
  const recentMonthCheckouts = await db.query(getCheckoutCountSQL(0), []);
@@ -351,10 +351,10 @@ export class DataAnalyze {
351
351
  const queries = Array.from({ length: 14 }, async (_, index) => {
352
352
  const dayOffset = `DATE_SUB(DATE(NOW()), INTERVAL ${index} DAY)`;
353
353
  const monthCheckoutSQL = `
354
- SELECT orderData ->>'$.orderSource' as orderSource, orderData
355
- FROM \`${this.app}\`.t_checkout
356
- WHERE DATE (${convertTimeZone('created_time')}) = ${dayOffset}
357
- AND ${orderCountingSQL};
354
+ SELECT orderData ->>'$.orderSource' as orderSource, orderData
355
+ FROM \`${this.app}\`.t_checkout
356
+ WHERE DATE (${convertTimeZone('created_time')}) = ${dayOffset}
357
+ AND ${orderCountingSQL};
358
358
  `;
359
359
 
360
360
  return db.query(monthCheckoutSQL, []).then(data => {
@@ -408,10 +408,10 @@ export class DataAnalyze {
408
408
  const queries = Array.from({ length: 30 }, async (_, index) => {
409
409
  const dayOffset = `DATE_SUB(DATE(NOW()), INTERVAL ${index} DAY)`;
410
410
  const monthCheckoutSQL = `
411
- SELECT orderData ->>'$.orderSource' as orderSource, orderData
412
- FROM \`${this.app}\`.t_checkout
413
- WHERE DATE (${convertTimeZone('created_time')}) = ${dayOffset}
414
- AND ${orderCountingSQL};
411
+ SELECT orderData ->>'$.orderSource' as orderSource, orderData
412
+ FROM \`${this.app}\`.t_checkout
413
+ WHERE DATE (${convertTimeZone('created_time')}) = ${dayOffset}
414
+ AND ${orderCountingSQL};
415
415
  `;
416
416
 
417
417
  return db.query(monthCheckoutSQL, []).then(data => {
@@ -469,10 +469,10 @@ export class DataAnalyze {
469
469
  const queries = Array.from({ length: days }, async (_, index) => {
470
470
  const dayOffset = `DATE_SUB(DATE("${endDate}"), INTERVAL ${index} DAY)`;
471
471
  const monthCheckoutSQL = `
472
- SELECT orderData ->>'$.orderSource' as orderSource, orderData
473
- FROM \`${this.app}\`.t_checkout
474
- WHERE DATE (${convertTimeZone('created_time')}) = ${dayOffset}
475
- AND ${orderCountingSQL};
472
+ SELECT orderData ->>'$.orderSource' as orderSource, orderData
473
+ FROM \`${this.app}\`.t_checkout
474
+ WHERE DATE (${convertTimeZone('created_time')}) = ${dayOffset}
475
+ AND ${orderCountingSQL};
476
476
  `;
477
477
 
478
478
  return db.query(monthCheckoutSQL, []).then(data => {
@@ -526,11 +526,11 @@ export class DataAnalyze {
526
526
  const queries = Array.from({ length: 12 }, async (_, index) => {
527
527
  const monthOffset = `DATE_FORMAT(DATE_SUB(${convertTimeZone('NOW()')}, INTERVAL ${index} MONTH), '%Y-%m')`;
528
528
  const monthCheckoutSQL = `
529
- SELECT orderData ->>'$.orderSource' as orderSource, orderData
530
- FROM \`${this.app}\`.t_checkout
531
- WHERE DATE_FORMAT(${convertTimeZone('created_time')}
532
- , '%Y-%m') = ${monthOffset}
533
- AND ${orderCountingSQL};
529
+ SELECT orderData ->>'$.orderSource' as orderSource, orderData
530
+ FROM \`${this.app}\`.t_checkout
531
+ WHERE DATE_FORMAT(${convertTimeZone('created_time')}
532
+ , '%Y-%m') = ${monthOffset}
533
+ AND ${orderCountingSQL};
534
534
  `;
535
535
 
536
536
  return db.query(monthCheckoutSQL, []).then(data => {
@@ -581,14 +581,14 @@ export class DataAnalyze {
581
581
  await new Promise(resolve => {
582
582
  for (let index = 0; index < 12; index++) {
583
583
  const monthCheckoutSQL = `
584
- SELECT orderData
585
- FROM \`${this.app}\`.t_checkout
586
- WHERE
587
- MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone('NOW()')}
588
- , INTERVAL ${index} MONTH))
589
- AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone('NOW()')}
590
- , INTERVAL ${index} MONTH))
591
- AND ${orderCountingSQL};
584
+ SELECT orderData
585
+ FROM \`${this.app}\`.t_checkout
586
+ WHERE
587
+ MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone('NOW()')}
588
+ , INTERVAL ${index} MONTH))
589
+ AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone('NOW()')}
590
+ , INTERVAL ${index} MONTH))
591
+ AND ${orderCountingSQL};
592
592
  `;
593
593
  db.query(monthCheckoutSQL, []).then(data => {
594
594
  pass++;
@@ -659,16 +659,16 @@ export class DataAnalyze {
659
659
  await new Promise(resolve => {
660
660
  for (let index = 0; index < 14; index++) {
661
661
  const monthCheckoutSQL = `
662
- SELECT orderData
663
- FROM \`${this.app}\`.t_checkout
664
- WHERE
665
- DAY (${convertTimeZone('created_time')}) = DAY (DATE_SUB(${convertTimeZone('NOW()')}
666
- , INTERVAL ${index} DAY))
667
- AND MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone('NOW()')}
668
- , INTERVAL ${index} DAY))
669
- AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone('NOW()')}
670
- , INTERVAL ${index} DAY))
671
- AND ${orderCountingSQL};
662
+ SELECT orderData
663
+ FROM \`${this.app}\`.t_checkout
664
+ WHERE
665
+ DAY (${convertTimeZone('created_time')}) = DAY (DATE_SUB(${convertTimeZone('NOW()')}
666
+ , INTERVAL ${index} DAY))
667
+ AND MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone('NOW()')}
668
+ , INTERVAL ${index} DAY))
669
+ AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone('NOW()')}
670
+ , INTERVAL ${index} DAY))
671
+ AND ${orderCountingSQL};
672
672
  `;
673
673
  db.query(monthCheckoutSQL, []).then(data => {
674
674
  pass++;
@@ -738,16 +738,16 @@ export class DataAnalyze {
738
738
  await new Promise(resolve => {
739
739
  for (let index = 0; index < 30; index++) {
740
740
  const monthCheckoutSQL = `
741
- SELECT orderData
742
- FROM \`${this.app}\`.t_checkout
743
- WHERE
744
- DAY (${convertTimeZone('created_time')}) = DAY (DATE_SUB(${convertTimeZone('NOW()')}
745
- , INTERVAL ${index} DAY))
746
- AND MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone('NOW()')}
747
- , INTERVAL ${index} DAY))
748
- AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone('NOW()')}
749
- , INTERVAL ${index} DAY))
750
- AND ${orderCountingSQL};
741
+ SELECT orderData
742
+ FROM \`${this.app}\`.t_checkout
743
+ WHERE
744
+ DAY (${convertTimeZone('created_time')}) = DAY (DATE_SUB(${convertTimeZone('NOW()')}
745
+ , INTERVAL ${index} DAY))
746
+ AND MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone('NOW()')}
747
+ , INTERVAL ${index} DAY))
748
+ AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone('NOW()')}
749
+ , INTERVAL ${index} DAY))
750
+ AND ${orderCountingSQL};
751
751
  `;
752
752
  db.query(monthCheckoutSQL, []).then(data => {
753
753
  pass++;
@@ -831,16 +831,16 @@ export class DataAnalyze {
831
831
  await new Promise(resolve => {
832
832
  for (let index = 0; index < days; index++) {
833
833
  const monthCheckoutSQL = `
834
- SELECT orderData
835
- FROM \`${this.app}\`.t_checkout
836
- WHERE
837
- DAY (${convertTimeZone('created_time')}) = DAY (DATE_SUB(${convertTimeZone(formatEndDate)}
838
- , INTERVAL ${index} DAY))
839
- AND MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone(formatEndDate)}
840
- , INTERVAL ${index} DAY))
841
- AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone(formatEndDate)}
842
- , INTERVAL ${index} DAY))
843
- AND ${orderCountingSQL};
834
+ SELECT orderData
835
+ FROM \`${this.app}\`.t_checkout
836
+ WHERE
837
+ DAY (${convertTimeZone('created_time')}) = DAY (DATE_SUB(${convertTimeZone(formatEndDate)}
838
+ , INTERVAL ${index} DAY))
839
+ AND MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone(formatEndDate)}
840
+ , INTERVAL ${index} DAY))
841
+ AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone(formatEndDate)}
842
+ , INTERVAL ${index} DAY))
843
+ AND ${orderCountingSQL};
844
844
  `;
845
845
  db.query(monthCheckoutSQL, []).then(data => {
846
846
  pass++;
@@ -909,14 +909,14 @@ export class DataAnalyze {
909
909
  await new Promise(resolve => {
910
910
  for (let index = 0; index < 12; index++) {
911
911
  const monthCheckoutSQL = `
912
- SELECT orderData
913
- FROM \`${this.app}\`.t_checkout
914
- WHERE
915
- MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone('NOW()')}
916
- , INTERVAL ${index} MONTH))
917
- AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone('NOW()')}
918
- , INTERVAL ${index} MONTH))
919
- AND ${orderCountingSQL};
912
+ SELECT orderData
913
+ FROM \`${this.app}\`.t_checkout
914
+ WHERE
915
+ MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone('NOW()')}
916
+ , INTERVAL ${index} MONTH))
917
+ AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone('NOW()')}
918
+ , INTERVAL ${index} MONTH))
919
+ AND ${orderCountingSQL};
920
920
  `;
921
921
  db.query(monthCheckoutSQL, []).then(data => {
922
922
  pass++;
@@ -992,16 +992,16 @@ export class DataAnalyze {
992
992
  await new Promise(resolve => {
993
993
  for (let index = 0; index < 14; index++) {
994
994
  const monthCheckoutSQL = `
995
- SELECT orderData
996
- FROM \`${this.app}\`.t_checkout
997
- WHERE
998
- DAY (${convertTimeZone('created_time')}) = DAY (DATE_SUB(${convertTimeZone('NOW()')}
999
- , INTERVAL ${index} DAY))
1000
- AND MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone('NOW()')}
1001
- , INTERVAL ${index} DAY))
1002
- AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone('NOW()')}
1003
- , INTERVAL ${index} DAY))
1004
- AND ${orderCountingSQL};
995
+ SELECT orderData
996
+ FROM \`${this.app}\`.t_checkout
997
+ WHERE
998
+ DAY (${convertTimeZone('created_time')}) = DAY (DATE_SUB(${convertTimeZone('NOW()')}
999
+ , INTERVAL ${index} DAY))
1000
+ AND MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone('NOW()')}
1001
+ , INTERVAL ${index} DAY))
1002
+ AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone('NOW()')}
1003
+ , INTERVAL ${index} DAY))
1004
+ AND ${orderCountingSQL};
1005
1005
  `;
1006
1006
  db.query(monthCheckoutSQL, []).then(data => {
1007
1007
  pass++;
@@ -1077,16 +1077,16 @@ export class DataAnalyze {
1077
1077
  await new Promise(resolve => {
1078
1078
  for (let index = 0; index < 30; index++) {
1079
1079
  const monthCheckoutSQL = `
1080
- SELECT orderData
1081
- FROM \`${this.app}\`.t_checkout
1082
- WHERE
1083
- DAY (${convertTimeZone('created_time')}) = DAY (DATE_SUB(${convertTimeZone('NOW()')}
1084
- , INTERVAL ${index} DAY))
1085
- AND MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone('NOW()')}
1086
- , INTERVAL ${index} DAY))
1087
- AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone('NOW()')}
1088
- , INTERVAL ${index} DAY))
1089
- AND ${orderCountingSQL};
1080
+ SELECT orderData
1081
+ FROM \`${this.app}\`.t_checkout
1082
+ WHERE
1083
+ DAY (${convertTimeZone('created_time')}) = DAY (DATE_SUB(${convertTimeZone('NOW()')}
1084
+ , INTERVAL ${index} DAY))
1085
+ AND MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone('NOW()')}
1086
+ , INTERVAL ${index} DAY))
1087
+ AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone('NOW()')}
1088
+ , INTERVAL ${index} DAY))
1089
+ AND ${orderCountingSQL};
1090
1090
  `;
1091
1091
  db.query(monthCheckoutSQL, []).then(data => {
1092
1092
  pass++;
@@ -1165,16 +1165,16 @@ export class DataAnalyze {
1165
1165
  await new Promise(resolve => {
1166
1166
  for (let index = 0; index < days; index++) {
1167
1167
  const monthCheckoutSQL = `
1168
- SELECT orderData
1169
- FROM \`${this.app}\`.t_checkout
1170
- WHERE
1171
- DAY (${convertTimeZone('created_time')}) = DAY (DATE_SUB(${convertTimeZone(formatEndDate)}
1172
- , INTERVAL ${index} DAY))
1173
- AND MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone(formatEndDate)}
1174
- , INTERVAL ${index} DAY))
1175
- AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone(formatEndDate)}
1176
- , INTERVAL ${index} DAY))
1177
- AND ${orderCountingSQL}
1168
+ SELECT orderData
1169
+ FROM \`${this.app}\`.t_checkout
1170
+ WHERE
1171
+ DAY (${convertTimeZone('created_time')}) = DAY (DATE_SUB(${convertTimeZone(formatEndDate)}
1172
+ , INTERVAL ${index} DAY))
1173
+ AND MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone(formatEndDate)}
1174
+ , INTERVAL ${index} DAY))
1175
+ AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone(formatEndDate)}
1176
+ , INTERVAL ${index} DAY))
1177
+ AND ${orderCountingSQL}
1178
1178
  `;
1179
1179
  db.query(monthCheckoutSQL, []).then(data => {
1180
1180
  pass++;
@@ -1240,150 +1240,66 @@ export class DataAnalyze {
1240
1240
  async getActiveRecentYear() {
1241
1241
  const utTimer = new UtTimer('GET-RECENT-ACTIVE-USER-YEAR');
1242
1242
  const checkPoint = utTimer.checkPoint;
1243
- const endDate = moment.tz('Asia/Taipei').toDate();
1244
- endDate.setMonth(endDate.getMonth() + 1, 1);
1245
-
1246
- const startDate = moment.tz('Asia/Taipei').toDate();
1247
- startDate.setMonth(endDate.getMonth() - 12);
1248
-
1249
- const sql = `
1250
- SELECT mac_address, created_time
1251
- FROM \`${saasConfig.SAAS_NAME}\`.t_monitor
1252
- WHERE app_name = ${db.escape(this.app)}
1253
- AND req_type = 'file'
1254
- AND created_time BETWEEN '${startDate.toISOString()}' AND '${endDate.toISOString()}'
1255
- GROUP BY id, mac_address
1256
- `;
1257
- console.log(`getActiveRecentYear: ${sql}`);
1258
- checkPoint(`sql-start`)
1259
- const queryData = await db.query(sql, []);
1260
-
1261
- checkPoint(`sql-end-${queryData.length}`)
1262
1243
  const now = moment.tz('Asia/Taipei').toDate(); // 當前時間
1263
- const dataList = Array.from({ length: 12 }, (_, index) => {
1264
- // 計算第 index 個月前的日期
1265
- const targetDate = new Date(now.getFullYear(), now.getMonth() - index, 1);
1266
-
1267
- const year = targetDate.getFullYear();
1268
- const month = targetDate.getMonth() + 1; // 月份從 0 開始,需要加 1
1269
-
1270
- // 篩選該月份的資料
1271
- const filteredData = queryData.filter((item: any) => {
1272
- const date = moment.tz(item.created_time, 'UTC').clone().tz('Asia/Taipei').toDate();
1273
- return date.getFullYear() === year && date.getMonth() + 1 === month;
1244
+ const dataList = await Promise.all(Array.from({ length: 12 }, (_, index) => index).map((dd, index) => {
1245
+ return new Promise(async (resolve, reject) => {
1246
+ const sql = `
1247
+ select sum(count)
1248
+ from \`${this.app}\`.visit_logs where
1249
+ MONTH(${'date'}) = MONTH(DATE_SUB(${convertTimeZone('NOW()')}, INTERVAL ${index} MONTH))
1250
+ `;
1251
+ const queryData = await db.query(sql, []);
1252
+ resolve((queryData[0] && queryData[0]['sum(count)']) || 0);
1274
1253
  });
1275
-
1276
- // 計算不重複的 mac_address
1277
- const uniqueMacAddresses = new Set(filteredData.map((item: any) => item.mac_address));
1278
-
1279
- return {
1280
- year,
1281
- month,
1282
- total_count: filteredData.length,
1283
- unique_count: uniqueMacAddresses.size,
1284
- };
1285
- });
1286
-
1287
- const result = dataList.map(data => data.unique_count);
1288
- checkPoint(`data-end`)
1254
+ }));
1289
1255
  return {
1290
- count_array: result.reverse(), // 將結果反轉,保證時間順序為最近到最遠
1256
+ count_array: dataList.reverse().map((dd:any)=>{
1257
+ return (dd && parseInt(dd,10)) || 0
1258
+ }), // 將結果反轉,保證時間順序為最近到最遠
1291
1259
  };
1292
1260
  }
1293
1261
 
1294
1262
  async getActiveRecentWeek() {
1295
- const sql = `
1296
- SELECT mac_address, ${convertTimeZone('created_time')} AS created_time
1297
- FROM \`${saasConfig.SAAS_NAME}\`.t_monitor
1298
- WHERE app_name = ${db.escape(this.app)}
1299
- AND req_type = 'file'
1300
- AND ${convertTimeZone('created_time')} BETWEEN (DATE_SUB(${convertTimeZone('NOW()')}
1301
- , INTERVAL 14 DAY))
1302
- AND ${convertTimeZone('NOW()')}
1303
- GROUP BY id, mac_address
1304
- `;
1305
-
1306
- const queryData = await db.query(sql, []);
1307
-
1263
+ const utTimer = new UtTimer('GET-RECENT-ACTIVE-USER-WEEK');
1264
+ const checkPoint = utTimer.checkPoint;
1308
1265
  const now = moment.tz('Asia/Taipei').toDate(); // 當前時間
1309
- const dataList = Array.from({ length: 14 }, (_, index) => {
1310
- const targetDate = new Date(now.getTime());
1311
- targetDate.setDate(new Date(now.getTime()).getDate() - index); // 設定為第 index 天前的日期
1312
-
1313
- const year = targetDate.getFullYear();
1314
- const month = targetDate.getMonth() + 1; // 月份從 0 開始,需要加 1
1315
- const day = targetDate.getDate();
1316
-
1317
- // 篩選該日期的資料
1318
- const filteredData = queryData.filter((item: any) => {
1319
- const date = moment.tz(item.created_time, 'UTC').clone().tz('Asia/Taipei').toDate();
1320
- return date.getFullYear() === year && date.getMonth() + 1 === month && date.getDate() === day;
1266
+ const dataList = await Promise.all(Array.from({ length: 14 }, (_, index) => index).map((dd, index) => {
1267
+ return new Promise(async (resolve, reject) => {
1268
+ const sql = `
1269
+ select count
1270
+ from \`${this.app}\`.visit_logs where
1271
+ DATE(${'date'}) = DATE(DATE_SUB(${convertTimeZone('NOW()')}, INTERVAL ${index} DAY))
1272
+ `;
1273
+ const queryData = await db.query(sql, []);
1274
+ resolve((queryData[0] && queryData[0]['count']) || 0);
1321
1275
  });
1322
-
1323
- // 計算不重複的 mac_address
1324
- const uniqueMacAddresses = new Set(filteredData.map((item: any) => item.mac_address));
1325
-
1326
- return {
1327
- year,
1328
- month,
1329
- day,
1330
- total_count: filteredData.length,
1331
- unique_count: uniqueMacAddresses.size,
1332
- };
1333
- });
1334
-
1335
- const result = dataList.map(data => data.unique_count);
1336
-
1276
+ }));
1337
1277
  return {
1338
- count_array: result.reverse(), // 將結果反轉,保證時間順序為最近到最遠
1278
+ count_array: dataList.reverse().map((dd:any)=>{
1279
+ return (dd && parseInt(dd,10)) || 0
1280
+ }), // 將結果反轉,保證時間順序為最近到最遠
1339
1281
  };
1340
1282
  }
1341
1283
 
1342
1284
  async getActiveRecentMonth() {
1343
- const sql = `
1344
- SELECT mac_address, ${convertTimeZone('created_time')} AS created_time
1345
- FROM \`${saasConfig.SAAS_NAME}\`.t_monitor
1346
- WHERE app_name = ${db.escape(this.app)}
1347
- AND req_type = 'file'
1348
- AND ${convertTimeZone('created_time')} BETWEEN (DATE_SUB(${convertTimeZone('NOW()')}
1349
- , INTERVAL 30 DAY))
1350
- AND ${convertTimeZone('NOW()')}
1351
- GROUP BY id, mac_address
1352
- `;
1353
-
1354
- const queryData = await db.query(sql, []);
1355
-
1285
+ const utTimer = new UtTimer('GET-RECENT-ACTIVE-USER-WEEK');
1286
+ const checkPoint = utTimer.checkPoint;
1356
1287
  const now = moment.tz('Asia/Taipei').toDate(); // 當前時間
1357
- const dataList = Array.from({ length: 30 }, (_, index) => {
1358
- const targetDate = new Date(now.getTime());
1359
- targetDate.setDate(new Date(now.getTime()).getDate() - index); // 設定為第 index 天前的日期
1360
-
1361
- const year = targetDate.getFullYear();
1362
- const month = targetDate.getMonth() + 1; // 月份從 0 開始,需要加 1
1363
- const day = targetDate.getDate();
1364
-
1365
- // 篩選該日期的資料
1366
- const filteredData = queryData.filter((item: any) => {
1367
- const date = moment.tz(item.created_time, 'UTC').clone().tz('Asia/Taipei').toDate();
1368
- return date.getFullYear() === year && date.getMonth() + 1 === month && date.getDate() === day;
1288
+ const dataList = await Promise.all(Array.from({ length: 30 }, (_, index) => index).map((dd, index) => {
1289
+ return new Promise(async (resolve, reject) => {
1290
+ const sql = `
1291
+ select count
1292
+ from \`${this.app}\`.visit_logs where
1293
+ DATE(${'date'}) = DATE(DATE_SUB(${convertTimeZone('NOW()')}, INTERVAL ${index} DAY))
1294
+ `;
1295
+ const queryData = await db.query(sql, []);
1296
+ resolve((queryData[0] && queryData[0]['count']) || 0);
1369
1297
  });
1370
-
1371
- // 計算不重複的 mac_address
1372
- const uniqueMacAddresses = new Set(filteredData.map((item: any) => item.mac_address));
1373
-
1374
- return {
1375
- year,
1376
- month,
1377
- day,
1378
- total_count: filteredData.length,
1379
- unique_count: uniqueMacAddresses.size,
1380
- };
1381
- });
1382
-
1383
- const result = dataList.map(data => data.unique_count);
1384
-
1298
+ }));
1385
1299
  return {
1386
- count_array: result.reverse(), // 將結果反轉,保證時間順序為最近到最遠
1300
+ count_array: dataList.reverse().map((dd:any)=>{
1301
+ return (dd && parseInt(dd,10)) || 0
1302
+ }), // 將結果反轉,保證時間順序為最近到最遠
1387
1303
  };
1388
1304
  }
1389
1305
 
@@ -1392,50 +1308,24 @@ export class DataAnalyze {
1392
1308
  const formatStartDate = `"${Tool.replaceDatetime(qData.start)}"`;
1393
1309
  const formatEndDate = `"${Tool.replaceDatetime(qData.end)}"`;
1394
1310
  const days = this.diffDates(new Date(qData.start), new Date(qData.end));
1395
- const sql = `
1396
- SELECT mac_address, ${convertTimeZone('created_time')} AS created_time
1397
- FROM \`${saasConfig.SAAS_NAME}\`.t_monitor
1398
- WHERE app_name = ${db.escape(this.app)}
1399
- AND req_type = 'file'
1400
- AND ${convertTimeZone('created_time')}
1401
- BETWEEN ${convertTimeZone(formatStartDate)}
1402
- AND ${convertTimeZone(formatEndDate)}
1403
- GROUP BY id, mac_address
1404
- `;
1405
-
1406
- const queryData = await db.query(sql, []);
1407
-
1408
- const now = moment(qData.end).tz('Asia/Taipei').clone().toDate(); // 當前時間
1409
- const dataList = Array.from({ length: days }, (_, index) => {
1410
- const targetDate = new Date(now.getTime());
1411
- targetDate.setDate(new Date(now.getTime()).getDate() - index); // 設定為第 index 天前的日期
1412
-
1413
- const year = targetDate.getFullYear();
1414
- const month = targetDate.getMonth() + 1; // 月份從 0 開始,需要加 1
1415
- const day = targetDate.getDate();
1416
-
1417
- // 篩選該日期的資料
1418
- const filteredData = queryData.filter((item: any) => {
1419
- const date = moment.tz(item.created_time, 'UTC').clone().tz('Asia/Taipei').toDate();
1420
- return date.getFullYear() === year && date.getMonth() + 1 === month && date.getDate() === day;
1311
+ const utTimer = new UtTimer('GET-RECENT-ACTIVE-USER-WEEK');
1312
+ const checkPoint = utTimer.checkPoint;
1313
+ const now = moment.tz('Asia/Taipei').toDate(); // 當前時間
1314
+ const dataList = await Promise.all(Array.from({ length: days }, (_, index) => index).map((dd, index) => {
1315
+ return new Promise(async (resolve, reject) => {
1316
+ const sql = `
1317
+ select count
1318
+ from \`${this.app}\`.visit_logs where
1319
+ DATE(${'date'}) = DATE(DATE_SUB(${convertTimeZone('NOW()')}, INTERVAL ${index} DAY))
1320
+ `;
1321
+ const queryData = await db.query(sql, []);
1322
+ resolve((queryData[0] && queryData[0]['count']) || 0);
1421
1323
  });
1422
-
1423
- // 計算不重複的 mac_address
1424
- const uniqueMacAddresses = new Set(filteredData.map((item: any) => item.mac_address));
1425
-
1426
- return {
1427
- year,
1428
- month,
1429
- day,
1430
- total_count: filteredData.length,
1431
- unique_count: uniqueMacAddresses.size,
1432
- };
1433
- });
1434
-
1435
- const result = dataList.map(data => data.unique_count);
1436
-
1324
+ }));
1437
1325
  return {
1438
- count_array: result.reverse(), // 將結果反轉,保證時間順序為最近到最遠
1326
+ count_array: dataList.reverse().map((dd:any)=>{
1327
+ return (dd && parseInt(dd,10)) || 0
1328
+ }), // 將結果反轉,保證時間順序為最近到最遠
1439
1329
  };
1440
1330
  }
1441
1331
 
@@ -1446,16 +1336,16 @@ export class DataAnalyze {
1446
1336
  await new Promise(resolve => {
1447
1337
  for (let index = 0; index < 30; index++) {
1448
1338
  const monthCheckoutSQL = `
1449
- SELECT count(1)
1450
- FROM \`${this.app}\`.t_user
1451
- WHERE
1452
- DAY (${convertTimeZone('created_time')}) = DAY (DATE_SUB(${convertTimeZone('NOW()')}
1453
- , INTERVAL ${index} DAY))
1454
- AND MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone('NOW()')}
1455
- , INTERVAL ${index} DAY))
1456
- AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone('NOW()')}
1457
- , INTERVAL ${index} DAY))
1458
- AND status <> 0;
1339
+ SELECT count(1)
1340
+ FROM \`${this.app}\`.t_user
1341
+ WHERE
1342
+ DAY (${convertTimeZone('created_time')}) = DAY (DATE_SUB(${convertTimeZone('NOW()')}
1343
+ , INTERVAL ${index} DAY))
1344
+ AND MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone('NOW()')}
1345
+ , INTERVAL ${index} DAY))
1346
+ AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone('NOW()')}
1347
+ , INTERVAL ${index} DAY))
1348
+ AND status <> 0;
1459
1349
  `;
1460
1350
  db.query(monthCheckoutSQL, []).then(data => {
1461
1351
  countArray[index] = data[0]['count(1)'];
@@ -1494,16 +1384,16 @@ export class DataAnalyze {
1494
1384
  await new Promise(resolve => {
1495
1385
  for (let index = 0; index < days; index++) {
1496
1386
  const monthCheckoutSQL = `
1497
- SELECT count(1)
1498
- FROM \`${this.app}\`.t_user
1499
- WHERE
1500
- DAY (${convertTimeZone('created_time')}) = DAY (DATE_SUB(${convertTimeZone(formatEndDate)}
1501
- , INTERVAL ${index} DAY))
1502
- AND MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone(formatEndDate)}
1503
- , INTERVAL ${index} DAY))
1504
- AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone(formatEndDate)}
1505
- , INTERVAL ${index} DAY))
1506
- AND status <> 0;
1387
+ SELECT count(1)
1388
+ FROM \`${this.app}\`.t_user
1389
+ WHERE
1390
+ DAY (${convertTimeZone('created_time')}) = DAY (DATE_SUB(${convertTimeZone(formatEndDate)}
1391
+ , INTERVAL ${index} DAY))
1392
+ AND MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone(formatEndDate)}
1393
+ , INTERVAL ${index} DAY))
1394
+ AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone(formatEndDate)}
1395
+ , INTERVAL ${index} DAY))
1396
+ AND status <> 0;
1507
1397
  `;
1508
1398
  db.query(monthCheckoutSQL, []).then(data => {
1509
1399
  countArray[index] = data[0]['count(1)'];
@@ -1538,16 +1428,16 @@ export class DataAnalyze {
1538
1428
  await new Promise(resolve => {
1539
1429
  for (let index = 0; index < 14; index++) {
1540
1430
  const monthCheckoutSQL = `
1541
- SELECT count(1)
1542
- FROM \`${this.app}\`.t_user
1543
- WHERE
1544
- DAY (${convertTimeZone('created_time')}) = DAY (DATE_SUB(${convertTimeZone('NOW()')}
1545
- , INTERVAL ${index} DAY))
1546
- AND MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone('NOW()')}
1547
- , INTERVAL ${index} DAY))
1548
- AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone('NOW()')}
1549
- , INTERVAL ${index} DAY))
1550
- AND status <> 0;
1431
+ SELECT count(1)
1432
+ FROM \`${this.app}\`.t_user
1433
+ WHERE
1434
+ DAY (${convertTimeZone('created_time')}) = DAY (DATE_SUB(${convertTimeZone('NOW()')}
1435
+ , INTERVAL ${index} DAY))
1436
+ AND MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone('NOW()')}
1437
+ , INTERVAL ${index} DAY))
1438
+ AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone('NOW()')}
1439
+ , INTERVAL ${index} DAY))
1440
+ AND status <> 0;
1551
1441
  `;
1552
1442
  db.query(monthCheckoutSQL, []).then(data => {
1553
1443
  countArray[index] = data[0]['count(1)'];
@@ -1589,12 +1479,12 @@ export class DataAnalyze {
1589
1479
  await new Promise(resolve => {
1590
1480
  for (let index = 0; index < 12; index++) {
1591
1481
  const monthRegisterSQL = `
1592
- SELECT count(1)
1593
- FROM \`${this.app}\`.t_user
1594
- WHERE MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone('NOW()')}
1595
- , INTERVAL ${index} MONTH))
1596
- AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone('NOW()')}
1597
- , INTERVAL ${index} MONTH))
1482
+ SELECT count(1)
1483
+ FROM \`${this.app}\`.t_user
1484
+ WHERE MONTH (${convertTimeZone('created_time')}) = MONTH (DATE_SUB(${convertTimeZone('NOW()')}
1485
+ , INTERVAL ${index} MONTH))
1486
+ AND YEAR (${convertTimeZone('created_time')}) = YEAR (DATE_SUB(${convertTimeZone('NOW()')}
1487
+ , INTERVAL ${index} MONTH))
1598
1488
  `;
1599
1489
  db.query(monthRegisterSQL, []).then(data => {
1600
1490
  pass++;