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.
- package/lowcode/Entry.js +1 -1
- package/lowcode/Entry.ts +1 -1
- package/lowcode/cms-plugin/POS-setting.js +10 -6
- package/lowcode/cms-plugin/POS-setting.ts +11 -5
- 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/lowcode/cms-plugin/pos-basic-setting.ts +1 -0
- package/lowcode/cms-plugin/pos-config-setting.js +56 -8
- package/lowcode/cms-plugin/pos-config-setting.ts +81 -28
- package/lowcode/cms-plugin/pos-pages/products-page.js +13 -2
- package/lowcode/cms-plugin/pos-pages/products-page.ts +14 -2
- package/lowcode/editor-components/font-select.js +1 -0
- package/lowcode/editor-components/font-select.ts +64 -0
- package/lowcode/official_view_component/official/component.js +10 -5
- package/lowcode/official_view_component/official/component.ts +22 -13
- package/lowcode/setting/fonts-config.js +119 -59
- package/lowcode/setting/fonts-config.ts +7075 -6999
- 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 +213 -283
- package/src/api-public/services/data-analyze.js.map +1 -1
- package/src/api-public/services/data-analyze.ts +222 -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/api-public/services/shopping.js +2 -3
- package/src/api-public/services/shopping.js.map +1 -1
- package/src/api-public/services/shopping.ts +2 -3
- package/src/api-public/utils/ut-permission.d.ts +0 -1
- 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
|
@@ -7,7 +7,7 @@ import { User } from './user';
|
|
|
7
7
|
import { Shopping } from './shopping';
|
|
8
8
|
import { Mail } from '../services/mail.js';
|
|
9
9
|
import { AutoSendEmail } from './auto-send-email.js';
|
|
10
|
-
import { saasConfig } from '../../config';
|
|
10
|
+
import { ConfigSetting, saasConfig } from '../../config';
|
|
11
11
|
import { InitialFakeData } from './initial-fake-data.js';
|
|
12
12
|
import { LineMessage } from './line-message';
|
|
13
13
|
import { ApiPublic } from './public-table-check.js';
|
|
@@ -15,6 +15,7 @@ import { App } from '../../services/app.js';
|
|
|
15
15
|
import { UserUpdate } from './user-update.js';
|
|
16
16
|
import { Firebase } from '../../modules/firebase.js';
|
|
17
17
|
import { Invoice } from './invoice.js';
|
|
18
|
+
import process from 'process';
|
|
18
19
|
|
|
19
20
|
type ScheduleItem = {
|
|
20
21
|
second: number;
|
|
@@ -43,11 +44,11 @@ export class Schedule {
|
|
|
43
44
|
|
|
44
45
|
async isDatabasePass(app: string) {
|
|
45
46
|
const SQL = `
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
47
|
+
SELECT *
|
|
48
|
+
FROM ${saasConfig.SAAS_NAME}.app_config
|
|
49
|
+
WHERE appName = \'${app}\'
|
|
50
|
+
AND (refer_app is null OR refer_app = appName);
|
|
51
|
+
`;
|
|
51
52
|
return (await db.query(SQL, [])).length > 0;
|
|
52
53
|
}
|
|
53
54
|
|
|
@@ -78,15 +79,15 @@ export class Schedule {
|
|
|
78
79
|
const config = await new User(app).getConfigV2({ key: 'login_config', user_id: 'manager' });
|
|
79
80
|
if (config?.auto_cancel_order_timer && config.auto_cancel_order_timer > 0) {
|
|
80
81
|
const orders = await db.query(
|
|
81
|
-
`SELECT *
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
82
|
+
`SELECT *
|
|
83
|
+
FROM \`${app}\`.t_checkout
|
|
84
|
+
WHERE status = 0
|
|
85
|
+
AND order_status = '0'
|
|
86
|
+
AND progress = 'wait'
|
|
87
|
+
AND payment_method != 'cash_on_delivery'
|
|
87
88
|
AND created_time < NOW() - INTERVAL ${config.auto_cancel_order_timer} HOUR
|
|
88
|
-
|
|
89
|
-
|
|
89
|
+
AND (orderData->>'$.proof_purchase' IS NULL)
|
|
90
|
+
ORDER BY id DESC;`,
|
|
90
91
|
[]
|
|
91
92
|
);
|
|
92
93
|
await Promise.all(
|
|
@@ -117,7 +118,11 @@ export class Schedule {
|
|
|
117
118
|
for (const app of Schedule.app) {
|
|
118
119
|
try {
|
|
119
120
|
if (await this.perload(app)) {
|
|
120
|
-
const users = await db.query(
|
|
121
|
+
const users = await db.query(
|
|
122
|
+
`select *
|
|
123
|
+
from \`${app}\`.t_user `,
|
|
124
|
+
[]
|
|
125
|
+
);
|
|
121
126
|
for (const user of users) {
|
|
122
127
|
//更新會籍
|
|
123
128
|
await new User(app).checkMember(user, true);
|
|
@@ -170,8 +175,8 @@ export class Schedule {
|
|
|
170
175
|
|
|
171
176
|
const users = await db.query(
|
|
172
177
|
`SELECT *
|
|
173
|
-
|
|
174
|
-
|
|
178
|
+
FROM \`${app}\`.t_user
|
|
179
|
+
WHERE MONTH (JSON_EXTRACT(userData, '$.birth')) = MONTH (CURDATE());`,
|
|
175
180
|
[]
|
|
176
181
|
);
|
|
177
182
|
|
|
@@ -235,8 +240,8 @@ export class Schedule {
|
|
|
235
240
|
// 當月生日之顧客
|
|
236
241
|
const users = await db.query(
|
|
237
242
|
`SELECT *
|
|
238
|
-
|
|
239
|
-
|
|
243
|
+
FROM \`${app}\`.t_user
|
|
244
|
+
WHERE MONTH (JSON_EXTRACT(userData, '$.birth')) = MONTH (CURDATE());`,
|
|
240
245
|
[]
|
|
241
246
|
);
|
|
242
247
|
|
|
@@ -302,11 +307,11 @@ export class Schedule {
|
|
|
302
307
|
try {
|
|
303
308
|
if (await this.perload(app)) {
|
|
304
309
|
const orders = await db.query(
|
|
305
|
-
`SELECT *
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
+
`SELECT *
|
|
311
|
+
FROM \`${app}\`.t_triggers
|
|
312
|
+
WHERE tag = 'triggerInvoice'
|
|
313
|
+
AND status = 0
|
|
314
|
+
AND DATE_FORMAT(trigger_time, '%Y-%m-%d %H') = DATE_FORMAT(NOW(), '%Y-%m-%d %H');`,
|
|
310
315
|
[]
|
|
311
316
|
);
|
|
312
317
|
for (const order of orders) {
|
|
@@ -330,11 +335,11 @@ export class Schedule {
|
|
|
330
335
|
try {
|
|
331
336
|
if (await this.perload(app)) {
|
|
332
337
|
const emails = await db.query(
|
|
333
|
-
`SELECT *
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
+
`SELECT *
|
|
339
|
+
FROM \`${app}\`.t_triggers
|
|
340
|
+
WHERE tag = 'sendFCM'
|
|
341
|
+
AND status = 0
|
|
342
|
+
AND DATE_FORMAT(trigger_time, '%Y-%m-%d %H:%i') = DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i');`,
|
|
338
343
|
[]
|
|
339
344
|
);
|
|
340
345
|
for (const email of emails) {
|
|
@@ -351,6 +356,7 @@ export class Schedule {
|
|
|
351
356
|
setTimeout(() => this.autoSendMail(sec), sec * 1000);
|
|
352
357
|
console.log(`autoSendMail-Stop`, (new Date().getTime() - clock.getTime()) / 1000);
|
|
353
358
|
}
|
|
359
|
+
|
|
354
360
|
async autoSendMail(sec: number) {
|
|
355
361
|
let clock = new Date();
|
|
356
362
|
console.log(`autoSendLine`);
|
|
@@ -358,11 +364,11 @@ export class Schedule {
|
|
|
358
364
|
try {
|
|
359
365
|
if (await this.perload(app)) {
|
|
360
366
|
const emails = await db.query(
|
|
361
|
-
`SELECT *
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
367
|
+
`SELECT *
|
|
368
|
+
FROM \`${app}\`.t_triggers
|
|
369
|
+
WHERE tag = 'sendMailBySchedule'
|
|
370
|
+
AND status = 0
|
|
371
|
+
AND DATE_FORMAT(trigger_time, '%Y-%m-%d %H:%i') = DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i');`,
|
|
366
372
|
[]
|
|
367
373
|
);
|
|
368
374
|
for (const email of emails) {
|
|
@@ -386,10 +392,10 @@ export class Schedule {
|
|
|
386
392
|
try {
|
|
387
393
|
if (await this.perload(app)) {
|
|
388
394
|
const emails = await db.query(
|
|
389
|
-
`SELECT *
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
395
|
+
`SELECT *
|
|
396
|
+
FROM \`${app}\`.t_triggers
|
|
397
|
+
WHERE tag = 'sendLineBySchedule'
|
|
398
|
+
AND DATE_FORMAT(trigger_time, '%Y-%m-%d %H:%i') = DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i');`,
|
|
393
399
|
[]
|
|
394
400
|
);
|
|
395
401
|
|
|
@@ -429,7 +435,9 @@ export class Schedule {
|
|
|
429
435
|
if (
|
|
430
436
|
(
|
|
431
437
|
await db.query(
|
|
432
|
-
`select count(1)
|
|
438
|
+
`select count(1)
|
|
439
|
+
from \`${saasConfig.SAAS_NAME}\`.currency_config
|
|
440
|
+
where updated = '${date_index}'`,
|
|
433
441
|
[]
|
|
434
442
|
)
|
|
435
443
|
)[0]['count(1)'] === 0
|
|
@@ -444,10 +452,11 @@ export class Schedule {
|
|
|
444
452
|
axios
|
|
445
453
|
.request(config)
|
|
446
454
|
.then(async (response: any) => {
|
|
447
|
-
await db.query(
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
455
|
+
await db.query(
|
|
456
|
+
`insert into \`${saasConfig.SAAS_NAME}\`.currency_config (\`json\`, updated)
|
|
457
|
+
values (?, ?)`,
|
|
458
|
+
[JSON.stringify(response.data), date_index]
|
|
459
|
+
);
|
|
451
460
|
setTimeout(() => this.currenciesUpdate(sec), sec * 1000);
|
|
452
461
|
})
|
|
453
462
|
.catch((error: any) => {
|
|
@@ -460,21 +469,56 @@ export class Schedule {
|
|
|
460
469
|
}
|
|
461
470
|
}
|
|
462
471
|
|
|
472
|
+
async visitLogs(sec: number) {
|
|
473
|
+
let clock = new Date();
|
|
474
|
+
|
|
475
|
+
function convertTimeZone(date: string) {
|
|
476
|
+
return `CONVERT_TZ(${date}, '+00:00', '+08:00')`;
|
|
477
|
+
}
|
|
478
|
+
console.log(`visitLogs`);
|
|
479
|
+
for (const app of Schedule.app) {
|
|
480
|
+
try {
|
|
481
|
+
if (await this.perload(app)) {
|
|
482
|
+
const count = await db.query(
|
|
483
|
+
` SELECT COUNT(DISTINCT mac_address) as count , CONVERT_TZ(NOW(), '+00:00', '+08:00') as now
|
|
484
|
+
FROM ${process.env.GLITTER_DB}.t_monitor
|
|
485
|
+
WHERE app_name = ${db.escape(app)}
|
|
486
|
+
AND req_type = 'file'
|
|
487
|
+
AND ${convertTimeZone('created_time')} BETWEEN (DATE_SUB(${convertTimeZone('NOW()')}
|
|
488
|
+
, INTERVAL 1 DAY))
|
|
489
|
+
AND ${convertTimeZone('NOW()')}`,
|
|
490
|
+
[]
|
|
491
|
+
);
|
|
492
|
+
await db.query(`replace into \`${app}\`.visit_logs (date, count,tag_name) values (?, ? , ?)`,[count[0]['now'], count[0]['count'],(`${count[0]['now'].toISOString()}`).substring(0,10)]);
|
|
493
|
+
}
|
|
494
|
+
} catch (e) {
|
|
495
|
+
console.error('BAD_REQUEST', 'visitLogs Error: ' + e, null);
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
setTimeout(() => this.visitLogs(sec), sec * 1000);
|
|
499
|
+
console.log(`visitLogs-Stop`, (new Date().getTime() - clock.getTime()) / 1000);
|
|
500
|
+
}
|
|
501
|
+
|
|
463
502
|
main() {
|
|
464
|
-
const scheduleList: ScheduleItem[] =
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
503
|
+
const scheduleList: ScheduleItem[] = ConfigSetting.is_local
|
|
504
|
+
? //線下測試環境
|
|
505
|
+
[ { second: 60 * 5, status: true, func: 'visitLogs', desc: '更新每天造訪人數' },]
|
|
506
|
+
: //線上環境
|
|
507
|
+
[
|
|
508
|
+
// { second: 10, status: false, func: 'example', desc: '排程啟用範例' },
|
|
509
|
+
{ second: 3600, status: true, func: 'birthRebate', desc: '生日禮發放購物金' },
|
|
510
|
+
{ second: 3600, status: true, func: 'birthBlessMail', desc: '生日祝福信件' },
|
|
511
|
+
{ second: 600, status: true, func: 'renewMemberLevel', desc: '更新會員分級' },
|
|
512
|
+
{ second: 30, status: true, func: 'resetVoucherHistory', desc: '未付款歷史優惠券重設' },
|
|
513
|
+
{ second: 30, status: true, func: 'autoSendMail', desc: '自動排程寄送信件' },
|
|
514
|
+
{ second: 30, status: true, func: 'autoSendFCM', desc: '自動排程寄送FCM' },
|
|
515
|
+
{ second: 30, status: true, func: 'autoSendLine', desc: '自動排程寄送line訊息' },
|
|
516
|
+
{ second: 3600 * 24, status: true, func: 'currenciesUpdate', desc: '多國貨幣的更新排程' },
|
|
517
|
+
// { second: 3600 * 24, status: false, func: 'initialSampleApp', desc: '重新刷新示範商店' },
|
|
518
|
+
{ second: 30, status: true, func: 'autoCancelOrder', desc: '自動取消未付款未出貨訂單' },
|
|
519
|
+
{ second: 30, status: true, func: 'autoTriggerInvoice', desc: '自動開立發票' },
|
|
520
|
+
{ second: 60 * 5, status: true, func: 'visitLogs', desc: '更新每天造訪人數' },
|
|
521
|
+
];
|
|
478
522
|
try {
|
|
479
523
|
scheduleList.forEach(schedule => {
|
|
480
524
|
if (schedule.status && typeof this[schedule.func] === 'function') {
|
|
@@ -1837,9 +1837,8 @@ class Shopping {
|
|
|
1837
1837
|
return (userData === null || userData === void 0 ? void 0 : userData.id) && voucher.targetList.includes(userData.userID);
|
|
1838
1838
|
}
|
|
1839
1839
|
if (voucher.target === 'levels') {
|
|
1840
|
-
if (userData
|
|
1841
|
-
|
|
1842
|
-
return trigger && voucher.targetList.includes(trigger.id);
|
|
1840
|
+
if (userData.member_level) {
|
|
1841
|
+
return voucher.targetList.includes(userData.member_level.id);
|
|
1843
1842
|
}
|
|
1844
1843
|
return false;
|
|
1845
1844
|
}
|