ts-glitter 20.5.7 → 20.5.9

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 (33) hide show
  1. package/lowcode/Entry.js +1 -1
  2. package/lowcode/Entry.ts +1 -1
  3. package/lowcode/cms-plugin/shopping-setting-basic.js +1 -1
  4. package/lowcode/cms-plugin/shopping-setting-basic.ts +1 -1
  5. package/lowcode/public-components/checkout/index.js +1 -0
  6. package/lowcode/public-components/checkout/index.ts +1 -0
  7. package/lowcode/public-components/user-manager/um-login.js +6 -1
  8. package/lowcode/public-components/user-manager/um-login.ts +7 -1
  9. package/package.json +1 -1
  10. package/src/api-public/controllers/shop.js +6 -5
  11. package/src/api-public/controllers/shop.js.map +1 -1
  12. package/src/api-public/controllers/shop.ts +6 -5
  13. package/src/api-public/models/glitter-finance.d.ts +1 -1
  14. package/src/api-public/models/glitter-finance.js +14 -11
  15. package/src/api-public/models/glitter-finance.js.map +1 -1
  16. package/src/api-public/models/glitter-finance.ts +12 -10
  17. package/src/api-public/services/checkout-event.d.ts +92 -0
  18. package/src/api-public/services/checkout-event.js +1103 -0
  19. package/src/api-public/services/checkout-event.js.map +1 -0
  20. package/src/api-public/services/checkout-event.ts +1460 -0
  21. package/src/api-public/services/checkout-service.d.ts +83 -0
  22. package/src/api-public/services/checkout-service.js +1074 -0
  23. package/src/api-public/services/checkout-service.js.map +1 -0
  24. package/src/api-public/services/data-analyze.d.ts +1 -1
  25. package/src/api-public/services/shopping.d.ts +1 -71
  26. package/src/api-public/services/shopping.js +3 -1044
  27. package/src/api-public/services/shopping.js.map +1 -1
  28. package/src/api-public/services/shopping.ts +3 -1391
  29. package/src/api-public/services/updated-table-checked.js +2 -2
  30. package/src/api-public/services/updated-table-checked.js.map +1 -1
  31. package/src/services/private_config.js +1 -1
  32. package/src/services/private_config.js.map +1 -1
  33. package/src/services/private_config.ts +1 -1
@@ -1,27 +1,4 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
26
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
4
  };
@@ -33,9 +10,8 @@ const express_1 = __importDefault(require("express"));
33
10
  const moment_1 = __importDefault(require("moment"));
34
11
  const axios_1 = __importDefault(require("axios"));
35
12
  const app_1 = __importDefault(require("../../app"));
36
- const redis_js_1 = __importDefault(require("../../modules/redis.js"));
37
13
  const tool_js_1 = __importDefault(require("../../modules/tool.js"));
38
- const financial_service_js_1 = __importStar(require("./financial-service.js"));
14
+ const financial_service_js_1 = require("./financial-service.js");
39
15
  const private_config_js_1 = require("../../services/private_config.js");
40
16
  const user_js_1 = require("./user.js");
41
17
  const invoice_js_1 = require("./invoice.js");
@@ -43,14 +19,11 @@ const rebate_js_1 = require("./rebate.js");
43
19
  const custom_code_js_1 = require("../services/custom-code.js");
44
20
  const notify_js_1 = require("./notify.js");
45
21
  const auto_send_email_js_1 = require("./auto-send-email.js");
46
- const recommend_js_1 = require("./recommend.js");
47
22
  const config_js_1 = require("../../config.js");
48
23
  const sms_js_1 = require("./sms.js");
49
24
  const line_message_1 = require("./line-message");
50
25
  const EcInvoice_1 = require("./EcInvoice");
51
- const glitter_finance_js_1 = require("../models/glitter-finance.js");
52
26
  const app_js_1 = require("../../services/app.js");
53
- const stock_1 = require("./stock");
54
27
  const order_event_js_1 = require("./order-event.js");
55
28
  const seo_config_js_1 = require("../../seo-config.js");
56
29
  const ses_js_1 = require("../../services/ses.js");
@@ -62,6 +35,7 @@ const product_initial_js_1 = require("./product-initial.js");
62
35
  const ut_timer_js_1 = require("../utils/ut-timer.js");
63
36
  const auto_fcm_js_1 = require("../../public-config-initial/auto-fcm.js");
64
37
  const handlePaymentTransaction_js_1 = __importDefault(require("./model/handlePaymentTransaction.js"));
38
+ const checkout_event_js_1 = require("./checkout-event.js");
65
39
  class OrderDetail {
66
40
  constructor(subtotal, shipment) {
67
41
  this.discount = 0;
@@ -1208,1021 +1182,6 @@ class Shopping {
1208
1182
  });
1209
1183
  return (this.calculateShipment(shipment.volume, total_volume) + this.calculateShipment(shipment.weight, total_weight));
1210
1184
  }
1211
- async toCheckout(data, type = 'add', replace_order_id) {
1212
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11;
1213
- try {
1214
- const utTimer = new ut_timer_js_1.UtTimer('TO-CHECKOUT');
1215
- const checkPoint = utTimer.checkPoint;
1216
- const userClass = new user_js_1.User(this.app);
1217
- const rebateClass = new rebate_js_1.Rebate(this.app);
1218
- const checkoutPayment = (_a = data.user_info) === null || _a === void 0 ? void 0 : _a.payment;
1219
- let scheduledData;
1220
- data.line_items = (_b = (data.line_items || data.lineItems)) !== null && _b !== void 0 ? _b : [];
1221
- data.isExhibition = data.checkOutType === 'POS' && ((_d = (_c = data.pos_store) === null || _c === void 0 ? void 0 : _c.includes('exhibition_')) !== null && _d !== void 0 ? _d : false);
1222
- if (replace_order_id) {
1223
- const orderData = (await database_js_1.default.query(`SELECT *
1224
- FROM \`${this.app}\`.t_checkout
1225
- WHERE cart_token = ?
1226
- AND status = 0;
1227
- `, [replace_order_id]))[0];
1228
- if (!orderData) {
1229
- throw exception_js_1.default.BadRequestError('BAD_REQUEST', 'ToCheckout Error: Cannot find this orderID', null);
1230
- }
1231
- await database_js_1.default.query(`DELETE
1232
- FROM \`${this.app}\`.t_checkout
1233
- WHERE cart_token = ?
1234
- AND status = 0;
1235
- `, [replace_order_id]);
1236
- const { lineItems, user_info, code, customer_info, use_rebate } = orderData.orderData;
1237
- data.line_items = lineItems;
1238
- data.email = orderData.email;
1239
- data.user_info = user_info;
1240
- data.code = code;
1241
- data.customer_info = customer_info;
1242
- data.use_rebate = use_rebate;
1243
- }
1244
- if (data.order_id && type === 'POS') {
1245
- const order = (await database_js_1.default.query(`SELECT *
1246
- FROM \`${this.app}\`.t_checkout
1247
- WHERE cart_token = ?
1248
- `, [data.order_id]))[0];
1249
- if (order) {
1250
- for (const b of order.orderData.lineItems) {
1251
- const pdDqlData = (await this.getProduct({
1252
- page: 0,
1253
- limit: 50,
1254
- id: b.id,
1255
- status: 'inRange',
1256
- channel: data.checkOutType === 'POS' ? (data.isExhibition ? 'exhibition' : 'pos') : undefined,
1257
- whereStore: data.checkOutType === 'POS' ? data.pos_store : undefined,
1258
- })).data;
1259
- const pd = pdDqlData.content;
1260
- const variant = pd.variants.find((dd) => dd.spec.join('-') === b.spec.join('-'));
1261
- await updateStock(variant, b.deduction_log);
1262
- await this.updateVariantsWithSpec(variant, b.id, b.spec);
1263
- await database_js_1.default.query(`UPDATE \`${this.app}\`.t_manager_post
1264
- SET content = ?
1265
- WHERE id = ?
1266
- `, [JSON.stringify(pd), pdDqlData.id]);
1267
- }
1268
- }
1269
- }
1270
- async function updateStock(variant, deductionLog) {
1271
- Object.keys(deductionLog).forEach(key => {
1272
- try {
1273
- variant.stockList[key].count += deductionLog[key];
1274
- }
1275
- catch (e) {
1276
- console.error(`Error updating stock for variant ${variant.id}:`, e);
1277
- }
1278
- });
1279
- }
1280
- if (data.checkOutType === 'POS') {
1281
- this.token = undefined;
1282
- }
1283
- const hasAuthentication = (data) => {
1284
- return ((this.token && this.token.userID) ||
1285
- data.email ||
1286
- (data.user_info && data.user_info.email) ||
1287
- (data.user_info && data.user_info.phone));
1288
- };
1289
- if (type !== 'preview' && !hasAuthentication(data)) {
1290
- throw exception_js_1.default.BadRequestError('BAD_REQUEST', 'ToCheckout Error: No email and phone', null);
1291
- }
1292
- const checkOutType = (_e = data.checkOutType) !== null && _e !== void 0 ? _e : 'manual';
1293
- const getUserDataAsync = async (type, token, data) => {
1294
- if (type === 'preview' &&
1295
- !((token === null || token === void 0 ? void 0 : token.userID) || (data.user_info && data.user_info.email) || (data.user_info && data.user_info.phone))) {
1296
- return {};
1297
- }
1298
- if ((token === null || token === void 0 ? void 0 : token.userID) && type !== 'POS' && checkOutType !== 'POS') {
1299
- return await userClass.getUserData(`${token.userID}`, 'userID');
1300
- }
1301
- return ((data.user_info.email && (await userClass.getUserData(data.user_info.email, 'email_or_phone'))) ||
1302
- (data.user_info.phone && (await userClass.getUserData(data.user_info.phone, 'email_or_phone'))) ||
1303
- {});
1304
- };
1305
- checkPoint('check user auth');
1306
- const userData = await getUserDataAsync(type, this.token, data);
1307
- data.email = ((_f = userData === null || userData === void 0 ? void 0 : userData.userData) === null || _f === void 0 ? void 0 : _f.email) || ((_g = userData === null || userData === void 0 ? void 0 : userData.userData) === null || _g === void 0 ? void 0 : _g.phone) || '';
1308
- if (!data.email || data.email === 'no-email') {
1309
- data.email =
1310
- ((_h = data.user_info) === null || _h === void 0 ? void 0 : _h.email) && data.user_info.email !== 'no-email'
1311
- ? data.user_info.email
1312
- : ((_j = data.user_info) === null || _j === void 0 ? void 0 : _j.phone) || '';
1313
- }
1314
- if (!data.email && type !== 'preview') {
1315
- data.email = 'no-email';
1316
- }
1317
- const appStatus = await rebateClass.mainStatus();
1318
- if (appStatus && userData && data.use_rebate && data.use_rebate > 0) {
1319
- const userRebate = await rebateClass.getOneRebate({ user_id: userData.userID });
1320
- const sum = userRebate ? userRebate.point : 0;
1321
- if (sum < data.use_rebate) {
1322
- data.use_rebate = 0;
1323
- }
1324
- }
1325
- else {
1326
- data.use_rebate = 0;
1327
- }
1328
- checkPoint('check rebate');
1329
- const shipment = await this.getShipmentRefer(data.user_info);
1330
- const shipment_setting = await (async () => {
1331
- try {
1332
- const config = await private_config_js_1.Private_config.getConfig({
1333
- appName: this.app,
1334
- key: 'logistics_setting',
1335
- });
1336
- if (!config) {
1337
- return {
1338
- support: [],
1339
- shipmentSupport: [],
1340
- };
1341
- }
1342
- return config[0].value;
1343
- }
1344
- catch (e) {
1345
- return [];
1346
- }
1347
- })();
1348
- checkPoint('set shipment');
1349
- shipment_setting.custom_delivery = shipment_setting.custom_delivery
1350
- ? await Promise.all(shipment_setting.custom_delivery.map(async (form) => {
1351
- const config = await new user_js_1.User(this.app).getConfigV2({
1352
- user_id: 'manager',
1353
- key: `form_delivery_${form.id}`,
1354
- });
1355
- form.form = config.list || [];
1356
- return form;
1357
- })).then(dataArray => dataArray)
1358
- : [];
1359
- shipment_setting.support = (_k = shipment_setting.support) !== null && _k !== void 0 ? _k : [];
1360
- const languageInfo = (_m = (_l = shipment_setting.language_data) === null || _l === void 0 ? void 0 : _l[data.language]) === null || _m === void 0 ? void 0 : _m.info;
1361
- shipment_setting.info = languageInfo !== null && languageInfo !== void 0 ? languageInfo : shipment_setting.info;
1362
- const carData = {
1363
- customer_info: data.customer_info || {},
1364
- lineItems: [],
1365
- total: 0,
1366
- email: (_q = (_o = data.email) !== null && _o !== void 0 ? _o : (_p = data.user_info) === null || _p === void 0 ? void 0 : _p.email) !== null && _q !== void 0 ? _q : '',
1367
- user_info: data.user_info,
1368
- shipment_fee: 0,
1369
- rebate: 0,
1370
- goodsWeight: 0,
1371
- use_rebate: data.use_rebate || 0,
1372
- orderID: data.order_id || `${Date.now()}`,
1373
- shipment_support: shipment_setting.support,
1374
- shipment_info: shipment_setting.info,
1375
- shipment_selector: [
1376
- ...shipment_config_js_1.ShipmentConfig.list.map(dd => ({
1377
- name: dd.title,
1378
- value: dd.value,
1379
- })),
1380
- ...((_r = shipment_setting.custom_delivery) !== null && _r !== void 0 ? _r : []).map((dd) => ({
1381
- form: dd.form,
1382
- name: dd.name,
1383
- value: dd.id,
1384
- system_form: dd.system_form,
1385
- })),
1386
- ].filter(option => shipment_setting.support.includes(option.value)),
1387
- use_wallet: 0,
1388
- method: (_s = data.user_info) === null || _s === void 0 ? void 0 : _s.method,
1389
- user_email: (_w = (_u = (_t = userData === null || userData === void 0 ? void 0 : userData.account) !== null && _t !== void 0 ? _t : data.email) !== null && _u !== void 0 ? _u : (_v = data.user_info) === null || _v === void 0 ? void 0 : _v.email) !== null && _w !== void 0 ? _w : '',
1390
- useRebateInfo: { point: 0 },
1391
- custom_form_format: data.custom_form_format,
1392
- custom_form_data: data.custom_form_data,
1393
- custom_receipt_form: data.custom_receipt_form,
1394
- orderSource: checkOutType === 'POS' ? 'POS' : '',
1395
- code_array: data.code_array,
1396
- give_away: data.give_away,
1397
- user_rebate_sum: 0,
1398
- language: data.language,
1399
- pos_info: data.pos_info,
1400
- client_ip_address: data.client_ip_address,
1401
- fbc: data.fbc,
1402
- fbp: data.fbp,
1403
- editRecord: [],
1404
- };
1405
- if (!((_x = data.user_info) === null || _x === void 0 ? void 0 : _x.name) && userData && userData.userData) {
1406
- const { name, phone } = userData.userData;
1407
- carData.user_info = Object.assign(Object.assign({}, carData.user_info), { name,
1408
- phone });
1409
- }
1410
- const add_on_items = [];
1411
- const gift_product = [];
1412
- const saveStockArray = [];
1413
- function getVariant(prod, item) {
1414
- var _a;
1415
- if (prod.product_category === 'kitchen') {
1416
- let price = 0;
1417
- let show_understocking = false;
1418
- let stock = Infinity;
1419
- if (prod.specs.length) {
1420
- price = item.spec.reduce((total, spec, index) => {
1421
- const dpe = prod.specs[index].option.find((dd) => dd.title === spec);
1422
- if (dpe) {
1423
- const currentStock = Number(dpe.stock) || Infinity;
1424
- stock = Math.min(stock, currentStock);
1425
- if (dpe.stock !== undefined) {
1426
- show_understocking = true;
1427
- }
1428
- return total + (Number(dpe.price) || 0);
1429
- }
1430
- return total;
1431
- }, 0);
1432
- }
1433
- else {
1434
- price = Number(prod.price) || 0;
1435
- show_understocking = Boolean((_a = prod.stock) !== null && _a !== void 0 ? _a : '');
1436
- stock = Number(prod.stock) || 0;
1437
- }
1438
- if (stock === Infinity) {
1439
- show_understocking = false;
1440
- }
1441
- return {
1442
- sku: '',
1443
- spec: [],
1444
- type: 'variants',
1445
- stock,
1446
- v_width: 0,
1447
- product_id: prod.id,
1448
- sale_price: price,
1449
- origin_price: 0,
1450
- compare_price: 0,
1451
- preview_image: prod.preview_image && prod.preview_image[0],
1452
- shipment_type: 'none',
1453
- show_understocking: String(show_understocking),
1454
- };
1455
- }
1456
- else {
1457
- return prod.variants.find((dd) => dd.spec.join('-') === item.spec.join('-'));
1458
- }
1459
- }
1460
- data.line_items = await Promise.all(data.line_items.map(async (item) => {
1461
- var _a, _b, _c, _d, _e;
1462
- const getProductData = (await this.getProduct({
1463
- page: 0,
1464
- limit: 1,
1465
- id: `${item.id}`,
1466
- status: 'inRange',
1467
- channel: checkOutType === 'POS' ? (data.isExhibition ? 'exhibition' : 'pos') : undefined,
1468
- whereStore: checkOutType === 'POS' ? data.pos_store : undefined,
1469
- setUserID: `${(userData === null || userData === void 0 ? void 0 : userData.userID) || ''}`,
1470
- })).data;
1471
- if (getProductData) {
1472
- const content = getProductData.content;
1473
- const variant = getVariant(content, item);
1474
- const count = Number(item.count);
1475
- if ((Number.isInteger(variant.stock) || variant.show_understocking === 'false') &&
1476
- !isNaN(count) &&
1477
- count > 0) {
1478
- const isPOS = checkOutType === 'POS';
1479
- const isUnderstockingVisible = variant.show_understocking !== 'false';
1480
- const isManualType = type === 'manual' || type === 'manual-preview';
1481
- if (isPOS && isUnderstockingVisible && !data.isExhibition) {
1482
- variant.stock = ((_b = (_a = variant.stockList) === null || _a === void 0 ? void 0 : _a[data.pos_store]) === null || _b === void 0 ? void 0 : _b.count) || 0;
1483
- }
1484
- if (variant.stock < item.count && isUnderstockingVisible && !isManualType) {
1485
- if (isPOS) {
1486
- item.pre_order = true;
1487
- }
1488
- else {
1489
- item.count = variant.stock;
1490
- }
1491
- }
1492
- if (variant && item.count > 0) {
1493
- Object.assign(item, {
1494
- specs: content.specs,
1495
- language_data: content.language_data,
1496
- product_category: content.product_category,
1497
- preview_image: variant.preview_image || content.preview_image[0],
1498
- title: content.title,
1499
- sale_price: variant.sale_price,
1500
- origin_price: variant.origin_price,
1501
- collection: content.collection,
1502
- sku: variant.sku,
1503
- stock: variant.stock,
1504
- show_understocking: variant.show_understocking,
1505
- stockList: variant.stockList,
1506
- weight: parseInt(variant.weight || '0', 10),
1507
- designated_logistics: (_c = content.designated_logistics) !== null && _c !== void 0 ? _c : { type: 'all', list: [] },
1508
- });
1509
- const shipmentValue = (() => {
1510
- if (!variant.shipment_type || variant.shipment_type === 'none')
1511
- return 0;
1512
- if (variant.shipment_type === 'weight') {
1513
- return item.count * variant.weight;
1514
- }
1515
- if (variant.shipment_type === 'volume') {
1516
- return item.count * variant.v_length * variant.v_width * variant.v_height;
1517
- }
1518
- return 0;
1519
- })();
1520
- item.shipment_obj = {
1521
- type: variant.shipment_type,
1522
- value: shipmentValue,
1523
- };
1524
- variant.shipment_weight = parseInt(variant.shipment_weight || '0', 10);
1525
- carData.lineItems.push(item);
1526
- if (checkOutType == 'group_buy') {
1527
- if (!scheduledData) {
1528
- const sql = `WHERE JSON_CONTAINS(content->'$.pending_order', '"${data.temp_cart_id}"'`;
1529
- const scheduledDataQuery = `
1530
- SELECT *
1531
- FROM \`${this.app}\`.\`t_live_purchase_interactions\` ${sql});
1532
- `;
1533
- scheduledData = (await database_js_1.default.query(scheduledDataQuery, []))[0];
1534
- if (scheduledData) {
1535
- const { content } = scheduledData;
1536
- const productData = content.item_list.find((pb) => pb.id === item.id);
1537
- if (productData) {
1538
- const variantData = productData.content.variants.find((dd) => dd.spec.join('-') === item.spec.join('-'));
1539
- if (variantData) {
1540
- item.sale_price = variantData.live_model.live_price;
1541
- carData.total += item.sale_price * item.count;
1542
- }
1543
- }
1544
- }
1545
- }
1546
- }
1547
- else if (type !== 'manual') {
1548
- if (content.productType.giveaway) {
1549
- variant.sale_price = 0;
1550
- }
1551
- else {
1552
- carData.total += variant.sale_price * item.count;
1553
- }
1554
- }
1555
- }
1556
- if (!['preview', 'manual', 'manual-preview'].includes(type) && variant.show_understocking !== 'false') {
1557
- const remainingStock = Math.max(variant.stock - item.count, 0);
1558
- variant.stock = remainingStock;
1559
- if (type === 'POS') {
1560
- if (data.isExhibition) {
1561
- if (data.pos_store) {
1562
- await this.updateExhibitionActiveStock(data.pos_store, variant.variant_id, item.count);
1563
- }
1564
- }
1565
- else {
1566
- variant.deduction_log = { [data.pos_store]: item.count };
1567
- variant.stockList[data.pos_store].count -= item.count;
1568
- item.deduction_log = variant.deduction_log;
1569
- }
1570
- }
1571
- else {
1572
- const returnData = new stock_1.Stock(this.app, this.token).allocateStock(variant.stockList, item.count);
1573
- variant.deduction_log = returnData.deductionLog;
1574
- item.deduction_log = returnData.deductionLog;
1575
- }
1576
- saveStockArray.push(() => new Promise(async (resolve, reject) => {
1577
- var _a;
1578
- try {
1579
- if (data.checkOutType == 'group_buy') {
1580
- if (!scheduledData) {
1581
- const sql = `WHERE JSON_CONTAINS(content->'$.pending_order', '"${data.temp_cart_id}"'`;
1582
- const scheduledDataQuery = `
1583
- SELECT *
1584
- FROM \`${this.app}\`.\`t_live_purchase_interactions\` ${sql});
1585
- `;
1586
- scheduledData = (await database_js_1.default.query(scheduledDataQuery, []))[0];
1587
- }
1588
- if (scheduledData) {
1589
- const { content } = scheduledData;
1590
- const productData = content.item_list.find((pb) => pb.id === item.id);
1591
- if (productData) {
1592
- const variantData = productData.content.variants.find((dd) => dd.spec.join('-') === item.spec.join('-'));
1593
- if (variantData) {
1594
- const stockService = new stock_1.Stock(this.app, this.token);
1595
- const { stockList, deductionLog } = stockService.allocateStock(variantData.stockList, item.count);
1596
- variantData.stockList = stockList;
1597
- item.deduction_log = deductionLog;
1598
- carData.scheduled_id = scheduledData.id;
1599
- await this.updateVariantsForScheduled(content, scheduledData.id);
1600
- }
1601
- }
1602
- }
1603
- }
1604
- else {
1605
- if (content.shopee_id) {
1606
- await new shopee_1.Shopee(this.app, this.token).asyncStockToShopee({
1607
- product: getProductData,
1608
- callback: () => { },
1609
- });
1610
- }
1611
- if (content.product_category === 'kitchen' && ((_a = variant.spec) === null || _a === void 0 ? void 0 : _a.length)) {
1612
- variant.spec.forEach((d1, index) => {
1613
- const option = content.specs[index].option.find((d2) => d2.title === d1);
1614
- if ((option === null || option === void 0 ? void 0 : option.stock) !== undefined) {
1615
- option.stock = parseInt(option.stock, 10) - item.count;
1616
- }
1617
- });
1618
- const store_config = await userClass.getConfigV2({
1619
- key: 'store_manager',
1620
- user_id: 'manager',
1621
- });
1622
- item.deduction_log = { [store_config.list[0].id]: item.count };
1623
- }
1624
- else {
1625
- await this.updateVariantsWithSpec(variant, item.id, item.spec);
1626
- }
1627
- await database_js_1.default.query(`UPDATE \`${this.app}\`.\`t_manager_post\`
1628
- SET ?
1629
- WHERE id = ${getProductData.id}`, [{ content: JSON.stringify(content) }]);
1630
- }
1631
- resolve(true);
1632
- }
1633
- catch (error) {
1634
- reject(error);
1635
- }
1636
- }));
1637
- }
1638
- }
1639
- Object.assign(item, {
1640
- is_add_on_items: content.productType.addProduct && !content.productType.product,
1641
- is_hidden: content.visible === 'false',
1642
- is_gift: content.productType.giveaway,
1643
- sale_price: content.productType.giveaway ? 0 : item.sale_price,
1644
- min_qty: (_d = content.min_qty) !== null && _d !== void 0 ? _d : item.min_qty,
1645
- max_qty: (_e = content.max_qty) !== null && _e !== void 0 ? _e : item.max_qty,
1646
- });
1647
- item.is_add_on_items && add_on_items.push(item);
1648
- item.is_gift && gift_product.push(item);
1649
- }
1650
- return item;
1651
- })).then(dataArray => dataArray);
1652
- checkPoint('get product info');
1653
- const maxProductMap = new Map();
1654
- let hasMaxProduct = false;
1655
- for (const product of data.line_items) {
1656
- if (product.max_qty && product.max_qty > 0) {
1657
- maxProductMap.set(product.id, true);
1658
- hasMaxProduct = true;
1659
- }
1660
- }
1661
- if (hasMaxProduct && data.email !== 'no-email') {
1662
- const cartTokenSQL = `
1663
- SELECT cart_token
1664
- FROM \`${this.app}\`.t_checkout
1665
- WHERE email IN (${[-99, (_y = userData === null || userData === void 0 ? void 0 : userData.userData) === null || _y === void 0 ? void 0 : _y.email, (_z = userData === null || userData === void 0 ? void 0 : userData.userData) === null || _z === void 0 ? void 0 : _z.phone]
1666
- .filter(Boolean)
1667
- .map(item => database_js_1.default.escape(item))
1668
- .join(',')})
1669
- AND order_status <> '-1'
1670
- `;
1671
- const soldHistory = await database_js_1.default.query(`
1672
- SELECT *
1673
- FROM \`${this.app}\`.t_products_sold_history
1674
- WHERE product_id IN (${[...maxProductMap.keys()].join(',')})
1675
- AND order_id IN (${cartTokenSQL})
1676
- `, []);
1677
- const purchaseHistory = new Map();
1678
- for (const history of soldHistory) {
1679
- const pid = Number(history.product_id);
1680
- purchaseHistory.set(pid, ((_0 = purchaseHistory.get(pid)) !== null && _0 !== void 0 ? _0 : 0) + history.count);
1681
- }
1682
- for (const item of data.line_items) {
1683
- if (maxProductMap.has(item.id)) {
1684
- item.buy_history_count = purchaseHistory.get(item.id) || 0;
1685
- }
1686
- }
1687
- }
1688
- checkPoint('set max product');
1689
- carData.shipment_fee = this.getShipmentFee(data.user_info, carData.lineItems, shipment);
1690
- carData.total += carData.shipment_fee;
1691
- const f_rebate = await this.formatUseRebate(carData.total, carData.use_rebate);
1692
- carData.useRebateInfo = f_rebate;
1693
- carData.use_rebate = f_rebate.point;
1694
- carData.total -= carData.use_rebate;
1695
- carData.code = data.code;
1696
- carData.voucherList = [];
1697
- checkPoint('set carData');
1698
- if (userData && userData.account) {
1699
- const userRebate = await rebateClass.getOneRebate({ user_id: userData.userID });
1700
- carData.user_rebate_sum = (userRebate === null || userRebate === void 0 ? void 0 : userRebate.point) || 0;
1701
- }
1702
- if (data.distribution_code) {
1703
- const linkList = await new recommend_js_1.Recommend(this.app, this.token).getLinkList({
1704
- page: 0,
1705
- limit: 99999,
1706
- code: data.distribution_code,
1707
- status: true,
1708
- no_detail: true,
1709
- });
1710
- if (linkList.data.length > 0) {
1711
- const content = linkList.data[0].content;
1712
- if (this.checkDuring(content)) {
1713
- carData.distribution_info = content;
1714
- }
1715
- }
1716
- }
1717
- checkPoint('distribution code');
1718
- if (type !== 'manual' && type !== 'manual-preview') {
1719
- carData.lineItems = carData.lineItems.filter(dd => {
1720
- return !add_on_items.includes(dd) && !gift_product.includes(dd);
1721
- });
1722
- const c_carData = await this.checkVoucher(structuredClone(carData));
1723
- add_on_items.forEach(dd => {
1724
- var _a;
1725
- try {
1726
- const isAddOnItem = (_a = c_carData.voucherList) === null || _a === void 0 ? void 0 : _a.some(voucher => {
1727
- return (voucher.reBackType === 'add_on_items' &&
1728
- voucher.add_on_products.find(d2 => {
1729
- return `${dd.id}` === `${d2}`;
1730
- }));
1731
- });
1732
- if (isAddOnItem) {
1733
- carData.lineItems.push(dd);
1734
- }
1735
- }
1736
- catch (e) {
1737
- console.error('Error processing add-on items:', e);
1738
- }
1739
- });
1740
- await this.checkVoucher(carData);
1741
- checkPoint('check voucher');
1742
- let can_add_gift = [];
1743
- (_1 = carData.voucherList) === null || _1 === void 0 ? void 0 : _1.filter(dd => dd.reBackType === 'giveaway').forEach(dd => can_add_gift.push(dd.add_on_products));
1744
- gift_product.forEach(dd => {
1745
- const max_count = can_add_gift.filter(d1 => d1.includes(dd.id)).length;
1746
- if (dd.count <= max_count) {
1747
- for (let a = 0; a < dd.count; a++) {
1748
- can_add_gift = can_add_gift.filter(d1 => !d1.includes(dd.id));
1749
- }
1750
- carData.lineItems.push(dd);
1751
- }
1752
- });
1753
- for (const giveawayData of carData.voucherList.filter(dd => dd.reBackType === 'giveaway')) {
1754
- if (!((_2 = giveawayData.add_on_products) === null || _2 === void 0 ? void 0 : _2.length))
1755
- continue;
1756
- const productPromises = giveawayData.add_on_products.map(async (id) => {
1757
- const getGiveawayData = (await this.getProduct({
1758
- page: 0,
1759
- limit: 1,
1760
- id: `${id}`,
1761
- status: 'inRange',
1762
- channel: checkOutType === 'POS' ? (data.isExhibition ? 'exhibition' : 'pos') : undefined,
1763
- whereStore: checkOutType === 'POS' ? data.pos_store : undefined,
1764
- })).data.content;
1765
- getGiveawayData.voucher_id = giveawayData.id;
1766
- return getGiveawayData;
1767
- });
1768
- giveawayData.add_on_products = await Promise.all(productPromises);
1769
- }
1770
- }
1771
- const configData = await private_config_js_1.Private_config.getConfig({
1772
- appName: this.app,
1773
- key: 'glitter_finance',
1774
- });
1775
- const keyData = (_3 = configData[0]) === null || _3 === void 0 ? void 0 : _3.value;
1776
- if (keyData) {
1777
- carData.payment_info_custom = keyData.payment_info_custom;
1778
- }
1779
- await new Promise(resolve => {
1780
- var _a;
1781
- let n = 0;
1782
- carData.payment_customer_form = (_a = carData.payment_customer_form) !== null && _a !== void 0 ? _a : [];
1783
- keyData.payment_info_custom.map((item, index) => {
1784
- userClass
1785
- .getConfigV2({
1786
- user_id: 'manager',
1787
- key: `form_finance_${item.id}`,
1788
- })
1789
- .then(data => {
1790
- carData.payment_customer_form[index] = {
1791
- id: item.id,
1792
- list: data.list,
1793
- };
1794
- n++;
1795
- if (keyData.payment_info_custom.length === n) {
1796
- resolve();
1797
- }
1798
- });
1799
- });
1800
- if (n === 0) {
1801
- resolve();
1802
- }
1803
- });
1804
- checkPoint('set payment');
1805
- keyData.cash_on_delivery = (_4 = keyData.cash_on_delivery) !== null && _4 !== void 0 ? _4 : { shipmentSupport: [] };
1806
- carData.payment_info_line_pay = keyData.payment_info_line_pay;
1807
- carData.payment_info_atm = keyData.payment_info_atm;
1808
- const defaultPayArray = glitter_finance_js_1.onlinePayArray.map(item => item.key);
1809
- keyData.cash_on_delivery.shipmentSupport = (_5 = keyData.cash_on_delivery.shipmentSupport) !== null && _5 !== void 0 ? _5 : [];
1810
- carData.shipment_support = checkoutPayment
1811
- ? ((_6 = (() => {
1812
- if (checkoutPayment === 'cash_on_delivery') {
1813
- return keyData.cash_on_delivery;
1814
- }
1815
- else if (defaultPayArray.includes(checkoutPayment)) {
1816
- return keyData[checkoutPayment];
1817
- }
1818
- else if (checkoutPayment === 'atm') {
1819
- return keyData.payment_info_atm;
1820
- }
1821
- else if (checkoutPayment === 'line') {
1822
- return keyData.payment_info_line_pay;
1823
- }
1824
- else {
1825
- const customPay = keyData.payment_info_custom.find((c) => c.id === checkoutPayment);
1826
- return customPay !== null && customPay !== void 0 ? customPay : {};
1827
- }
1828
- })().shipmentSupport) !== null && _6 !== void 0 ? _6 : [])
1829
- : [];
1830
- let subtotal = 0;
1831
- carData.lineItems.map(item => {
1832
- var _a;
1833
- if (item.is_gift) {
1834
- item.sale_price = 0;
1835
- }
1836
- if (!item.is_gift) {
1837
- subtotal += item.count * (item.sale_price - ((_a = item.discount_price) !== null && _a !== void 0 ? _a : 0));
1838
- }
1839
- });
1840
- if (carData.total < 0 || carData.use_rebate > subtotal) {
1841
- carData.use_rebate = 0;
1842
- carData.total = subtotal + carData.shipment_fee;
1843
- }
1844
- carData.lineItems.map(item => {
1845
- carData.goodsWeight += item.weight * item.count;
1846
- });
1847
- const excludedValuesByTotal = new Set(['UNIMARTC2C', 'FAMIC2C', 'HILIFEC2C', 'OKMARTC2C']);
1848
- const excludedValuesByWeight = new Set(['normal', 'black_cat']);
1849
- const isExcludedByTotal = (dd) => {
1850
- return carData.total > 20000 && excludedValuesByTotal.has(dd.value);
1851
- };
1852
- const isExcludedByWeight = (dd) => {
1853
- return carData.goodsWeight > 20 && excludedValuesByWeight.has(dd.value);
1854
- };
1855
- const isIncludedInDesignatedLogistics = (dd) => {
1856
- return carData.lineItems.every(item => {
1857
- return (item.designated_logistics === undefined ||
1858
- item.designated_logistics.type === 'all' ||
1859
- item.designated_logistics.list.includes(dd.value));
1860
- });
1861
- };
1862
- carData.shipment_selector = carData.shipment_selector
1863
- .filter((dd) => {
1864
- return isIncludedInDesignatedLogistics(dd);
1865
- })
1866
- .map(dd => {
1867
- dd.isExcludedByTotal = isExcludedByTotal(dd);
1868
- dd.isExcludedByWeight = isExcludedByWeight(dd);
1869
- return dd;
1870
- });
1871
- carData.code_array = (carData.code_array || []).filter(code => {
1872
- return (carData.voucherList || []).find(dd => dd.code === code);
1873
- });
1874
- function getCartFormulaPass(keyData) {
1875
- const data = keyData.cartSetting;
1876
- if (!data || data.orderFormula === undefined)
1877
- return true;
1878
- const formulaSet = new Set(data.orderFormula);
1879
- const total = carData.total -
1880
- (formulaSet.has('shipment_fee') ? 0 : carData.shipment_fee) +
1881
- (formulaSet.has('discount') || !carData.discount ? 0 : carData.discount) +
1882
- (formulaSet.has('use_rebate') ? 0 : carData.use_rebate);
1883
- return (!data.minimumTotal || total >= data.minimumTotal) && (!data.maximumTotal || total <= data.maximumTotal);
1884
- }
1885
- carData.payment_setting = glitter_finance_js_1.onlinePayArray.filter((dd) => {
1886
- const k = keyData[dd.key];
1887
- if (!k || !k.toggle || !getCartFormulaPass(k))
1888
- return false;
1889
- dd.custome_name = k.custome_name;
1890
- if (carData.orderSource === 'POS') {
1891
- if (dd.key === 'ut_credit_card') {
1892
- dd.pwd = k['pwd'];
1893
- }
1894
- return dd.type === 'pos';
1895
- }
1896
- return dd.type !== 'pos';
1897
- });
1898
- carData.off_line_support = (_7 = keyData.off_line_support) !== null && _7 !== void 0 ? _7 : {};
1899
- Object.entries(carData.off_line_support).map(([key, value]) => {
1900
- if (!value)
1901
- return;
1902
- if (key === 'cash_on_delivery') {
1903
- carData.off_line_support[key] = getCartFormulaPass(keyData[key]);
1904
- }
1905
- else if (key === 'atm') {
1906
- carData.off_line_support[key] = getCartFormulaPass(keyData.payment_info_atm);
1907
- }
1908
- else if (key === 'line') {
1909
- carData.off_line_support[key] = getCartFormulaPass(keyData.payment_info_line_pay);
1910
- }
1911
- else {
1912
- const customPay = keyData.payment_info_custom.find((c) => c.id === key);
1913
- carData.off_line_support[key] = getCartFormulaPass(customPay !== null && customPay !== void 0 ? customPay : {});
1914
- }
1915
- });
1916
- if (Array.isArray(carData.shipment_support)) {
1917
- await Promise.all(carData.shipment_support.map(async (sup) => {
1918
- return await userClass
1919
- .getConfigV2({ key: 'shipment_config_' + sup, user_id: 'manager' })
1920
- .then(r => {
1921
- return getCartFormulaPass(r);
1922
- })
1923
- .catch(() => {
1924
- return true;
1925
- });
1926
- })).then(dataArray => {
1927
- var _a;
1928
- carData.shipment_support = (_a = carData.shipment_support) === null || _a === void 0 ? void 0 : _a.filter((_, index) => dataArray[index]);
1929
- });
1930
- }
1931
- checkPoint('return preview');
1932
- if (type === 'preview' || type === 'manual-preview')
1933
- return { data: carData };
1934
- if (userData && userData.userID) {
1935
- await rebateClass.insertRebate(userData.userID, carData.use_rebate * -1, '使用折抵', {
1936
- order_id: carData.orderID,
1937
- });
1938
- if (carData.voucherList && carData.voucherList.length > 0) {
1939
- for (const voucher of carData.voucherList) {
1940
- await this.insertVoucherHistory(userData.userID, carData.orderID, voucher.id);
1941
- }
1942
- }
1943
- const sum = (await database_js_1.default.query(`SELECT sum(money)
1944
- FROM \`${this.app}\`.t_wallet
1945
- WHERE status in (1, 2)
1946
- and userID = ?`, [userData.userID]))[0]['sum(money)'] || 0;
1947
- carData.use_wallet = sum < carData.total ? sum : carData.total;
1948
- }
1949
- checkPoint('check user rebate');
1950
- if (type === 'manual' || type === 'split') {
1951
- carData.orderSource = type;
1952
- let tempVoucher = {
1953
- discount_total: data.voucher.discount_total,
1954
- end_ISO_Date: '',
1955
- for: 'all',
1956
- forKey: [],
1957
- method: data.voucher.method,
1958
- overlay: false,
1959
- rebate_total: data.voucher.rebate_total,
1960
- reBackType: data.voucher.reBackType,
1961
- rule: 'min_price',
1962
- ruleValue: 0,
1963
- startDate: '',
1964
- startTime: '',
1965
- start_ISO_Date: '',
1966
- status: 1,
1967
- target: '',
1968
- targetList: [],
1969
- title: data.voucher.title,
1970
- trigger: 'auto',
1971
- type: 'voucher',
1972
- value: data.voucher.value,
1973
- id: data.voucher.id,
1974
- bind: [],
1975
- bind_subtotal: 0,
1976
- times: 1,
1977
- counting: 'single',
1978
- conditionType: 'item',
1979
- includeDiscount: 'before',
1980
- device: ['normal'],
1981
- productOffStart: 'price_all',
1982
- };
1983
- carData.discount = data.discount;
1984
- carData.voucherList = [tempVoucher];
1985
- carData.customer_info = data.customer_info;
1986
- carData.total = (_8 = data.total) !== null && _8 !== void 0 ? _8 : 0;
1987
- carData.rebate = tempVoucher.rebate_total;
1988
- if (tempVoucher.reBackType == 'shipment_free' || type == 'split') {
1989
- carData.shipment_fee = 0;
1990
- }
1991
- if (tempVoucher.reBackType == 'rebate') {
1992
- let customerData = await userClass.getUserData(data.email || data.user_info.email, 'account');
1993
- if (!customerData) {
1994
- await userClass.createUser(data.email, tool_js_1.default.randomString(8), {
1995
- email: data.email,
1996
- name: data.customer_info.name,
1997
- phone: data.customer_info.phone,
1998
- }, {}, true);
1999
- customerData = await userClass.getUserData(data.email || data.user_info.email, 'account');
2000
- }
2001
- }
2002
- await order_event_js_1.OrderEvent.insertOrder({
2003
- cartData: carData,
2004
- status: data.pay_status,
2005
- app: this.app,
2006
- });
2007
- new notify_js_1.ManagerNotify(this.app).checkout({ orderData: carData, status: 0 });
2008
- const emailList = new Set([carData.customer_info, carData.user_info].map(dd => dd && dd.email));
2009
- for (const email of emailList) {
2010
- if (email) {
2011
- await auto_fcm_js_1.AutoFcm.orderChangeInfo({
2012
- app: this.app,
2013
- tag: 'order-create',
2014
- order_id: carData.orderID,
2015
- phone_email: email,
2016
- });
2017
- auto_send_email_js_1.AutoSendEmail.customerOrder(this.app, 'auto-email-order-create', carData.orderID, email, carData.language);
2018
- }
2019
- }
2020
- checkPoint('manual order done');
2021
- return {
2022
- data: carData,
2023
- };
2024
- }
2025
- else if (type === 'POS') {
2026
- carData.orderSource = 'POS';
2027
- if (checkOutType === 'POS' && Array.isArray(data.voucherList)) {
2028
- const manualVoucher = data.voucherList.find((item) => item.id === 0);
2029
- if (manualVoucher) {
2030
- manualVoucher.discount = (_9 = manualVoucher.discount_total) !== null && _9 !== void 0 ? _9 : 0;
2031
- carData.total -= manualVoucher.discount;
2032
- carData.discount += manualVoucher.discount;
2033
- carData.voucherList.push(manualVoucher);
2034
- }
2035
- }
2036
- const trans = await database_js_1.default.Transaction.build();
2037
- if (data.pre_order) {
2038
- carData.progress = 'pre_order';
2039
- carData.orderStatus = '0';
2040
- const payTotal = data.pos_info.payment
2041
- .map((dd) => dd.total)
2042
- .reduce((acc, val) => acc + val, 0);
2043
- if (carData.total <= payTotal) {
2044
- data.pay_status = 1;
2045
- }
2046
- else {
2047
- data.pay_status = 3;
2048
- }
2049
- }
2050
- else if (carData.user_info.shipment === 'now') {
2051
- carData.orderStatus = '1';
2052
- carData.progress = 'finish';
2053
- }
2054
- await order_event_js_1.OrderEvent.insertOrder({
2055
- cartData: carData,
2056
- status: data.pay_status,
2057
- app: this.app,
2058
- });
2059
- if (data.invoice_select !== 'nouse') {
2060
- carData.invoice = await new invoice_js_1.Invoice(this.app).postCheckoutInvoice(carData, carData.user_info.send_type !== 'carrier');
2061
- }
2062
- await trans.commit();
2063
- await trans.release();
2064
- await Promise.all(saveStockArray.map(dd => dd()));
2065
- await this.releaseCheckout((_10 = data.pay_status) !== null && _10 !== void 0 ? _10 : 0, carData.orderID);
2066
- checkPoint('release pos checkout');
2067
- for (const email of new Set([carData.customer_info, carData.user_info].map(dd => {
2068
- return dd && dd.email;
2069
- }))) {
2070
- if (email) {
2071
- await auto_fcm_js_1.AutoFcm.orderChangeInfo({
2072
- app: this.app,
2073
- tag: 'order-create',
2074
- order_id: carData.orderID,
2075
- phone_email: email,
2076
- });
2077
- auto_send_email_js_1.AutoSendEmail.customerOrder(this.app, 'auto-email-order-create', carData.orderID, email, carData.language);
2078
- }
2079
- }
2080
- return { result: 'SUCCESS', message: 'POS訂單新增成功', data: carData };
2081
- }
2082
- const id = 'redirect_' + tool_js_1.default.randomString(6);
2083
- const redirect_url = new URL(data.return_url);
2084
- redirect_url.searchParams.set('cart_token', carData.orderID);
2085
- await redis_js_1.default.setValue(id, redirect_url.href);
2086
- if (carData.use_wallet === carData.total) {
2087
- await database_js_1.default.query(`INSERT INTO \`${this.app}\`.t_wallet (orderID, userID, money, status, note)
2088
- values (?, ?, ?, ?, ?);`, [
2089
- carData.orderID,
2090
- userData.userID,
2091
- carData.use_wallet * -1,
2092
- 1,
2093
- JSON.stringify({
2094
- note: '使用錢包購物',
2095
- orderData: carData,
2096
- }),
2097
- ]);
2098
- carData.method = 'off_line';
2099
- await order_event_js_1.OrderEvent.insertOrder({
2100
- cartData: carData,
2101
- status: 1,
2102
- app: this.app,
2103
- });
2104
- if (carData.use_wallet > 0) {
2105
- new invoice_js_1.Invoice(this.app).postCheckoutInvoice(carData.orderID, false);
2106
- }
2107
- await Promise.all(saveStockArray.map(dd => dd()));
2108
- checkPoint('insert order & create invoice');
2109
- return {
2110
- is_free: true,
2111
- return_url: `${process.env.DOMAIN}/api-public/v1/ec/redirect?g-app=${this.app}&return=${id}`,
2112
- };
2113
- }
2114
- else {
2115
- const keyData = (await private_config_js_1.Private_config.getConfig({
2116
- appName: this.app,
2117
- key: 'glitter_finance',
2118
- }))[0].value;
2119
- let kd = (_11 = keyData[carData.customer_info.payment_select]) !== null && _11 !== void 0 ? _11 : {
2120
- ReturnURL: '',
2121
- NotifyURL: '',
2122
- };
2123
- switch (carData.customer_info.payment_select) {
2124
- case 'ecPay':
2125
- case 'newWebPay':
2126
- const subMitData = await new financial_service_js_1.default(this.app, {
2127
- HASH_IV: kd.HASH_IV,
2128
- HASH_KEY: kd.HASH_KEY,
2129
- ActionURL: kd.ActionURL,
2130
- NotifyURL: `${process.env.DOMAIN}/api-public/v1/ec/notify?g-app=${this.app}&type=${carData.customer_info.payment_select}`,
2131
- ReturnURL: `${process.env.DOMAIN}/api-public/v1/ec/redirect?g-app=${this.app}&return=${id}`,
2132
- MERCHANT_ID: kd.MERCHANT_ID,
2133
- TYPE: carData.customer_info.payment_select,
2134
- }).createOrderPage(carData);
2135
- await Promise.all(saveStockArray.map(dd => {
2136
- return dd();
2137
- }));
2138
- checkPoint('select newWebPay');
2139
- return {
2140
- form: subMitData,
2141
- };
2142
- case 'paypal':
2143
- kd.ReturnURL = `${process.env.DOMAIN}/api-public/v1/ec/redirect?g-app=${this.app}&return=${id}`;
2144
- kd.NotifyURL = `${process.env.DOMAIN}/api-public/v1/ec/notify?g-app=${this.app}&type=${carData.customer_info.payment_select}`;
2145
- await Promise.all(saveStockArray.map(dd => {
2146
- return dd();
2147
- }));
2148
- checkPoint('select paypal');
2149
- return await new financial_service_js_1.PayPal(this.app, kd).checkout(carData);
2150
- case 'line_pay':
2151
- kd.ReturnURL = `${process.env.DOMAIN}/api-public/v1/ec/redirect?g-app=${this.app}&return=${id}&type=${carData.customer_info.payment_select}`;
2152
- kd.NotifyURL = `${process.env.DOMAIN}/api-public/v1/ec/notify?g-app=${this.app}&type=${carData.customer_info.payment_select}`;
2153
- await Promise.all(saveStockArray.map(dd => {
2154
- return dd();
2155
- }));
2156
- checkPoint('select linepay');
2157
- return await new financial_service_js_1.LinePay(this.app, kd).createOrder(carData);
2158
- case 'paynow': {
2159
- kd.ReturnURL = `${process.env.DOMAIN}/api-public/v1/ec/redirect?g-app=${this.app}&return=${id}&type=${carData.customer_info.payment_select}`;
2160
- kd.NotifyURL = `${process.env.DOMAIN}/api-public/v1/ec/notify?g-app=${this.app}&paynow=true&type=${carData.customer_info.payment_select}`;
2161
- await Promise.all(saveStockArray.map(dd => {
2162
- return dd();
2163
- }));
2164
- checkPoint('select paynow');
2165
- return await new financial_service_js_1.PayNow(this.app, kd).createOrder(carData);
2166
- }
2167
- case 'jkopay': {
2168
- kd.ReturnURL = `${process.env.DOMAIN}/api-public/v1/ec/redirect?g-app=${this.app}&jkopay=true&return=${id}`;
2169
- kd.NotifyURL = `${process.env.DOMAIN}/api-public/v1/ec/notify?g-app=${this.app}&type=jkopay&return=${id}`;
2170
- checkPoint('select jkopay');
2171
- return await new financial_service_js_1.JKO(this.app, kd).createOrder(carData);
2172
- }
2173
- default:
2174
- carData.method = 'off_line';
2175
- await order_event_js_1.OrderEvent.insertOrder({
2176
- cartData: carData,
2177
- status: 0,
2178
- app: this.app,
2179
- });
2180
- await Promise.all(saveStockArray.map(dd => {
2181
- return dd();
2182
- }));
2183
- new notify_js_1.ManagerNotify(this.app).checkout({
2184
- orderData: carData,
2185
- status: 0,
2186
- });
2187
- for (const phone of new Set([carData.customer_info, carData.user_info].map(dd => {
2188
- return dd && dd.phone;
2189
- }))) {
2190
- let sns = new sms_js_1.SMS(this.app);
2191
- await sns.sendCustomerSns('auto-sns-order-create', carData.orderID, phone);
2192
- console.info('訂單簡訊寄送成功');
2193
- }
2194
- if (carData.customer_info.lineID) {
2195
- let line = new line_message_1.LineMessage(this.app);
2196
- await line.sendCustomerLine('auto-line-order-create', carData.orderID, carData.customer_info.lineID);
2197
- console.info('訂單line訊息寄送成功');
2198
- }
2199
- for (const email of new Set([carData.customer_info, carData.user_info].map(dd => {
2200
- return dd && dd.email;
2201
- }))) {
2202
- if (email) {
2203
- await auto_fcm_js_1.AutoFcm.orderChangeInfo({
2204
- app: this.app,
2205
- tag: 'order-create',
2206
- order_id: carData.orderID,
2207
- phone_email: email,
2208
- });
2209
- auto_send_email_js_1.AutoSendEmail.customerOrder(this.app, 'auto-email-order-create', carData.orderID, email, carData.language);
2210
- }
2211
- }
2212
- await this.releaseVoucherHistory(carData.orderID, 1);
2213
- checkPoint('default release checkout');
2214
- return {
2215
- off_line: true,
2216
- return_url: `${process.env.DOMAIN}/api-public/v1/ec/redirect?g-app=${this.app}&return=${id}`,
2217
- };
2218
- }
2219
- }
2220
- }
2221
- catch (e) {
2222
- console.error(e);
2223
- throw exception_js_1.default.BadRequestError('BAD_REQUEST', 'ToCheckout Func Error:' + e, null);
2224
- }
2225
- }
2226
1185
  async repayOrder(orderID, return_url) {
2227
1186
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
2228
1187
  const app = this.app;
@@ -2557,7 +1516,7 @@ class Shopping {
2557
1516
  orderData,
2558
1517
  });
2559
1518
  for (const [index, order] of splitOrderArray.entries()) {
2560
- await this.toCheckout({
1519
+ await (new checkout_event_js_1.CheckoutEvent(this.app, this.token)).toCheckout({
2561
1520
  code_array: [],
2562
1521
  order_id: (_b = (_a = orderData === null || orderData === void 0 ? void 0 : orderData.splitOrders) === null || _a === void 0 ? void 0 : _a[index]) !== null && _b !== void 0 ? _b : '',
2563
1522
  line_items: order.lineItems,