ts-glitter 20.6.8 → 20.6.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 (160) hide show
  1. package/lowcode/Entry.js +2 -2
  2. package/lowcode/Entry.ts +2 -2
  3. package/lowcode/backend-manager/bg-blog.js +617 -621
  4. package/lowcode/backend-manager/bg-blog.ts +2323 -2325
  5. package/lowcode/backend-manager/bg-line.js +5 -4
  6. package/lowcode/backend-manager/bg-line.ts +5 -4
  7. package/lowcode/backend-manager/bg-list-component.js +9 -0
  8. package/lowcode/backend-manager/bg-list-component.ts +15 -1
  9. package/lowcode/backend-manager/bg-notify.js +6 -4
  10. package/lowcode/backend-manager/bg-notify.ts +6 -4
  11. package/lowcode/backend-manager/bg-product.js +145 -0
  12. package/lowcode/backend-manager/bg-product.ts +153 -0
  13. package/lowcode/backend-manager/bg-sns.js +5 -3
  14. package/lowcode/backend-manager/bg-sns.ts +5 -3
  15. package/lowcode/backend-manager/bg-widget.js +92 -4
  16. package/lowcode/backend-manager/bg-widget.ts +122 -6
  17. package/lowcode/backend-manager/splitPage.js +0 -39
  18. package/lowcode/backend-manager/splitPage.ts +0 -40
  19. package/lowcode/cms-plugin/auto-fcm-advertise.js +17 -5
  20. package/lowcode/cms-plugin/auto-fcm-advertise.ts +19 -6
  21. package/lowcode/cms-plugin/auto-fcm-history.js +2732 -0
  22. package/lowcode/cms-plugin/auto-fcm-history.ts +2995 -0
  23. package/lowcode/cms-plugin/cms-router.js +5 -0
  24. package/lowcode/cms-plugin/cms-router.ts +6 -0
  25. package/lowcode/cms-plugin/filter-options.js +80 -27
  26. package/lowcode/cms-plugin/filter-options.ts +83 -27
  27. package/lowcode/cms-plugin/language-backend.js +50 -39
  28. package/lowcode/cms-plugin/language-backend.ts +109 -95
  29. package/lowcode/cms-plugin/menus-setting.js +175 -151
  30. package/lowcode/cms-plugin/menus-setting.ts +620 -591
  31. package/lowcode/cms-plugin/model/order.d.ts +1 -0
  32. package/lowcode/cms-plugin/module/data.js +7 -7
  33. package/lowcode/cms-plugin/module/data.ts +262 -233
  34. package/lowcode/cms-plugin/module/delivery-html.js +18 -10
  35. package/lowcode/cms-plugin/module/delivery-html.ts +26 -10
  36. package/lowcode/cms-plugin/module/order-setting.js +458 -328
  37. package/lowcode/cms-plugin/module/order-setting.ts +622 -351
  38. package/lowcode/cms-plugin/module/product-excel.js +1 -1
  39. package/lowcode/cms-plugin/module/product-excel.ts +2 -1
  40. package/lowcode/cms-plugin/order/order-module.js +90 -1
  41. package/lowcode/cms-plugin/order/order-module.ts +106 -1
  42. package/lowcode/cms-plugin/pos-pages/payment-page.js +11 -8
  43. package/lowcode/cms-plugin/pos-pages/payment-page.ts +28 -15
  44. package/lowcode/cms-plugin/pos-pages/products-page.js +0 -39
  45. package/lowcode/cms-plugin/pos-pages/products-page.ts +0 -40
  46. package/lowcode/cms-plugin/shopping-collections.ts +1 -3
  47. package/lowcode/cms-plugin/shopping-finance-setting.js +19 -80
  48. package/lowcode/cms-plugin/shopping-finance-setting.ts +19 -87
  49. package/lowcode/cms-plugin/shopping-order-manager.js +122 -38
  50. package/lowcode/cms-plugin/shopping-order-manager.ts +160 -58
  51. package/lowcode/cms-plugin/shopping-product-setting.js +364 -376
  52. package/lowcode/cms-plugin/shopping-product-setting.ts +406 -415
  53. package/lowcode/cms-plugin/shopping-setting-advance.js +57 -16
  54. package/lowcode/cms-plugin/shopping-setting-advance.ts +69 -18
  55. package/lowcode/cms-plugin/user/user-module.js +2 -43
  56. package/lowcode/cms-plugin/user/user-module.ts +2 -46
  57. package/lowcode/cms-plugin/user-list.js +4 -6
  58. package/lowcode/cms-plugin/user-list.ts +35 -38
  59. package/lowcode/css/editor.css +42 -3
  60. package/lowcode/glitter-base/global/language.js +6 -1
  61. package/lowcode/glitter-base/global/language.ts +10 -4
  62. package/lowcode/glitter-base/global/payment-config.js +19 -16
  63. package/lowcode/glitter-base/global/payment-config.ts +22 -16
  64. package/lowcode/glitter-base/global/shipment-config.js +6 -5
  65. package/lowcode/glitter-base/global/shipment-config.ts +12 -10
  66. package/lowcode/glitter-base/route/fcm.js +21 -1
  67. package/lowcode/glitter-base/route/fcm.ts +22 -2
  68. package/lowcode/glitter-base/route/shopping.js +8 -32
  69. package/lowcode/glitter-base/route/shopping.ts +10 -33
  70. package/lowcode/glitter-base/route/user.js +11 -2
  71. package/lowcode/glitter-base/route/user.ts +23 -12
  72. package/lowcode/jspage/function-page/setting_editor.js +9 -0
  73. package/lowcode/jspage/function-page/setting_editor.ts +9 -0
  74. package/lowcode/public-components/blogs/list.js +223 -195
  75. package/lowcode/public-components/blogs/list.ts +383 -352
  76. package/lowcode/public-components/product/product-list.js +8 -4
  77. package/lowcode/public-components/product/product-list.ts +9 -4
  78. package/lowcode/public-components/terms-related/index.js +1 -1
  79. package/lowcode/public-components/terms-related/index.ts +1 -1
  80. package/lowcode/public-components/user-manager/um-login.js +1 -1
  81. package/lowcode/public-components/user-manager/um-login.ts +2 -2
  82. package/lowcode/public-components/user-manager/um-order.js +41 -5
  83. package/lowcode/public-components/user-manager/um-order.ts +58 -20
  84. package/lowcode/public-components/user-manager/um-voucher.ts +2 -2
  85. package/nhi4veq3gk.json +1 -0
  86. package/package.json +1 -1
  87. package/src/Language.d.ts +2 -0
  88. package/src/Language.js +66 -65
  89. package/src/Language.js.map +1 -1
  90. package/src/Language.ts +719 -715
  91. package/src/api-public/config/shipment-config.js +3 -2
  92. package/src/api-public/config/shipment-config.js.map +1 -1
  93. package/src/api-public/config/shipment-config.ts +3 -2
  94. package/src/api-public/controllers/ai-chat.js.map +1 -1
  95. package/src/api-public/controllers/ai-chat.ts +1 -2
  96. package/src/api-public/controllers/fcm.js +23 -58
  97. package/src/api-public/controllers/fcm.js.map +1 -1
  98. package/src/api-public/controllers/fcm.ts +28 -56
  99. package/src/api-public/controllers/shop.js +7 -1
  100. package/src/api-public/controllers/shop.js.map +1 -1
  101. package/src/api-public/controllers/shop.ts +17 -10
  102. package/src/api-public/controllers/user.js +1 -0
  103. package/src/api-public/controllers/user.js.map +1 -1
  104. package/src/api-public/controllers/user.ts +2 -0
  105. package/src/api-public/services/auto-send-email.js +247 -187
  106. package/src/api-public/services/auto-send-email.js.map +1 -1
  107. package/src/api-public/services/auto-send-email.ts +568 -505
  108. package/src/api-public/services/delivery.js +1 -1
  109. package/src/api-public/services/delivery.js.map +1 -1
  110. package/src/api-public/services/delivery.ts +6 -5
  111. package/src/api-public/services/financial-service.js +1 -2
  112. package/src/api-public/services/financial-service.js.map +1 -1
  113. package/src/api-public/services/financial-service.ts +4 -6
  114. package/src/api-public/services/manager.d.ts +4 -3
  115. package/src/api-public/services/manager.js +8 -12
  116. package/src/api-public/services/manager.js.map +1 -1
  117. package/src/api-public/services/manager.ts +57 -59
  118. package/src/api-public/services/model/handlePaymentTransaction.d.ts +1 -1
  119. package/src/api-public/services/model/handlePaymentTransaction.js +23 -3
  120. package/src/api-public/services/model/handlePaymentTransaction.js.map +1 -1
  121. package/src/api-public/services/model/handlePaymentTransaction.ts +25 -36
  122. package/src/api-public/services/schedule.d.ts +1 -0
  123. package/src/api-public/services/schedule.js +27 -0
  124. package/src/api-public/services/schedule.js.map +1 -1
  125. package/src/api-public/services/schedule.ts +30 -0
  126. package/src/api-public/services/shopping.d.ts +22 -2
  127. package/src/api-public/services/shopping.js +362 -90
  128. package/src/api-public/services/shopping.js.map +1 -1
  129. package/src/api-public/services/shopping.ts +481 -134
  130. package/src/api-public/services/user.d.ts +1 -0
  131. package/src/api-public/services/user.js +32 -12
  132. package/src/api-public/services/user.js.map +1 -1
  133. package/src/api-public/services/user.ts +38 -19
  134. package/src/api-public/services/workers.js +3 -3
  135. package/src/api-public/services/workers.js.map +1 -1
  136. package/src/api-public/services/workers.ts +103 -103
  137. package/src/app-project/serverless/src/modules/database.js +1 -1
  138. package/src/app-project/serverless/src/modules/database.js.map +1 -1
  139. package/src/app-project/serverless/src/modules/database.ts +171 -171
  140. package/src/controllers/template.d.ts +1 -1
  141. package/src/controllers/template.js +16 -16
  142. package/src/controllers/template.js.map +1 -1
  143. package/src/controllers/template.ts +98 -84
  144. package/src/modules/database.js +3 -1
  145. package/src/modules/database.js.map +1 -1
  146. package/src/modules/database.ts +185 -181
  147. package/src/modules/firebase.d.ts +17 -0
  148. package/src/modules/firebase.js +126 -0
  149. package/src/modules/firebase.js.map +1 -1
  150. package/src/modules/firebase.ts +169 -0
  151. package/src/public-config-initial/auto-fcm.js +8 -2
  152. package/src/public-config-initial/auto-fcm.js.map +1 -1
  153. package/src/public-config-initial/auto-fcm.ts +15 -6
  154. package/src/services/app.d.ts +2 -1
  155. package/src/services/app.js.map +1 -1
  156. package/src/services/app.ts +2 -1
  157. package/src/services/template.d.ts +3 -2
  158. package/src/services/template.js +2 -1
  159. package/src/services/template.js.map +1 -1
  160. package/src/services/template.ts +13 -20
@@ -35,7 +35,7 @@ const product_initial_js_1 = require("./product-initial.js");
35
35
  const ut_timer_js_1 = require("../utils/ut-timer.js");
36
36
  const auto_fcm_js_1 = require("../../public-config-initial/auto-fcm.js");
37
37
  const handlePaymentTransaction_js_1 = __importDefault(require("./model/handlePaymentTransaction.js"));
38
- const checkout_event_js_1 = require("./checkout-event.js");
38
+ const Language_js_1 = require("../../Language.js");
39
39
  class OrderDetail {
40
40
  constructor(subtotal, shipment) {
41
41
  this.discount = 0;
@@ -204,14 +204,14 @@ class Shopping {
204
204
  }
205
205
  if (query.filter_visible) {
206
206
  if (query.filter_visible === 'true') {
207
- querySql.push(`(content->>'$.visible' is null || content->>'$.visible' = 'true')`);
207
+ querySql.push(`(content->>'$.visible' IS NULL || content->>'$.visible' = 'true')`);
208
208
  }
209
209
  else {
210
210
  querySql.push(`(content->>'$.visible' = 'false')`);
211
211
  }
212
212
  }
213
213
  else if (!query.is_manger && `${query.show_hidden}` !== 'true') {
214
- querySql.push(`(content->>'$.visible' is null || content->>'$.visible' = 'true')`);
214
+ querySql.push(`(content->>'$.visible' IS NULL || content->>'$.visible' = 'true')`);
215
215
  }
216
216
  if (query.productType) {
217
217
  query.productType.split(',').map(dd => {
@@ -345,6 +345,28 @@ class Shopping {
345
345
  querySql.push(`(content->>'$.channel' IS NULL ${channelJoin})`);
346
346
  }
347
347
  }
348
+ if (query.manager_tag) {
349
+ const tagSplit = query.manager_tag.split(',').map(tag => tag.trim());
350
+ if (tagSplit.length > 0) {
351
+ const tagJoin = tagSplit.map(tag => {
352
+ return `JSON_CONTAINS(content->>'$.product_customize_tag', '"${tag}"')`;
353
+ });
354
+ querySql.push(`(${tagJoin.join(' OR ')})`);
355
+ }
356
+ }
357
+ if (query.general_tag) {
358
+ const tagSplit = query.general_tag.split(',').map(tag => tag.trim());
359
+ if (tagSplit.length > 0) {
360
+ const tagJoin = tagSplit.map(tag => {
361
+ var _a;
362
+ return `(JSON_CONTAINS(
363
+ JSON_EXTRACT(content, '$.product_tag.language."${(_a = query.language) !== null && _a !== void 0 ? _a : 'zh-TW'}"'),
364
+ JSON_QUOTE('${tag}')
365
+ ))`;
366
+ });
367
+ querySql.push(`(${tagJoin.join(' OR ')})`);
368
+ }
369
+ }
348
370
  if (query.id_list && idStr) {
349
371
  querySql.push(`(id in (${idStr}))`);
350
372
  }
@@ -745,6 +767,151 @@ class Shopping {
745
767
  throw exception_js_1.default.BadRequestError('BAD_REQUEST', 'GetProduct Error:' + e, null);
746
768
  }
747
769
  }
770
+ async initProductCustomizeTagConifg() {
771
+ var _a, _b;
772
+ try {
773
+ const managerTags = await new user_js_1.User(this.app).getConfigV2({ key: 'product_manager_tags', user_id: 'manager' });
774
+ console.log(`initProductCustomizeTagConifg=>getData=>`, managerTags);
775
+ if (managerTags && Array.isArray(managerTags.list)) {
776
+ return managerTags;
777
+ }
778
+ console.log(`query_sql=>`, `SELECT
779
+ GROUP_CONCAT(DISTINCT JSON_UNQUOTE(JSON_EXTRACT(content, '$.product_customize_tag')) SEPARATOR ',') AS unique_tags
780
+ FROM \`${this.app}\`.t_manager_post
781
+ WHERE JSON_UNQUOTE(JSON_EXTRACT(content, '$.type')) = 'product'`);
782
+ const getData = await database_js_1.default.query(`
783
+ SELECT
784
+ GROUP_CONCAT(DISTINCT JSON_UNQUOTE(JSON_EXTRACT(content, '$.product_customize_tag')) SEPARATOR ',') AS unique_tags
785
+ FROM \`${this.app}\`.t_manager_post
786
+ WHERE JSON_UNQUOTE(JSON_EXTRACT(content, '$.type')) = 'product'
787
+ `, []);
788
+ const unique_tags_string = (_b = (_a = getData[0]) === null || _a === void 0 ? void 0 : _a.unique_tags) !== null && _b !== void 0 ? _b : '';
789
+ console.log(`JSON_STRING=>`, `[${unique_tags_string}]`);
790
+ const unique_tags_array = JSON.parse(`[${unique_tags_string}]`);
791
+ const unique_tags_flot = Array.isArray(unique_tags_array) ? unique_tags_array.flat() : [];
792
+ const data = { list: [...new Set(unique_tags_flot)] };
793
+ console.log(`product_manager_tags=>setData=>`, managerTags);
794
+ await new user_js_1.User(this.app).setConfig({
795
+ key: 'product_manager_tags',
796
+ user_id: 'manager',
797
+ value: data,
798
+ });
799
+ return data;
800
+ }
801
+ catch (error) {
802
+ throw exception_js_1.default.BadRequestError('BAD_REQUEST', 'Set product customize tag conifg Error:' + error, null);
803
+ }
804
+ }
805
+ async setProductCustomizeTagConifg(add_tags) {
806
+ var _a;
807
+ const tagConfig = await new user_js_1.User(this.app).getConfigV2({ key: 'product_manager_tags', user_id: 'manager' });
808
+ const tagList = (_a = tagConfig === null || tagConfig === void 0 ? void 0 : tagConfig.list) !== null && _a !== void 0 ? _a : [];
809
+ const data = { list: [...new Set([...tagList, ...add_tags])] };
810
+ await new user_js_1.User(this.app).setConfig({
811
+ key: 'product_manager_tags',
812
+ user_id: 'manager',
813
+ value: data,
814
+ });
815
+ return data;
816
+ }
817
+ async initProductGeneralTagConifg() {
818
+ var _a, _b;
819
+ try {
820
+ const generalTags = await new user_js_1.User(this.app).getConfigV2({ key: 'product_general_tags', user_id: 'manager' });
821
+ if (generalTags && Array.isArray(generalTags.list)) {
822
+ return generalTags;
823
+ }
824
+ console.log(`initProductCustomizeTagConifg=>getData=>`, generalTags);
825
+ const getData = await database_js_1.default.query(`
826
+ SELECT
827
+ GROUP_CONCAT(DISTINCT JSON_UNQUOTE(JSON_EXTRACT(content, '$.product_tag.language')) SEPARATOR ',') AS unique_tags
828
+ FROM \`${this.app}\`.t_manager_post
829
+ WHERE JSON_UNQUOTE(JSON_EXTRACT(content, '$.type')) = 'product'
830
+ `, []);
831
+ const unique_tags_string = (_b = (_a = getData[0]) === null || _a === void 0 ? void 0 : _a.unique_tags) !== null && _b !== void 0 ? _b : '';
832
+ console.log(`JSON_STRING=>`, `[${unique_tags_string}]`);
833
+ const unique_tags_array = JSON.parse(`[${unique_tags_string}]`);
834
+ console.log(`JSON_DATA=>`, unique_tags_array);
835
+ const unique_tags_flot = Array.isArray(unique_tags_array) ? unique_tags_array.flat() : [];
836
+ const list = {};
837
+ unique_tags_flot.map(item => {
838
+ Language_js_1.Language.locationList.map(lang => {
839
+ var _a;
840
+ list[lang] = [...((_a = list[lang]) !== null && _a !== void 0 ? _a : []), ...item[lang]];
841
+ });
842
+ });
843
+ Language_js_1.Language.locationList.map(lang => {
844
+ list[lang] = [...new Set(list[lang])];
845
+ });
846
+ const data = { list };
847
+ await new user_js_1.User(this.app).setConfig({
848
+ key: 'product_general_tags',
849
+ user_id: 'manager',
850
+ value: data,
851
+ });
852
+ return data;
853
+ }
854
+ catch (error) {
855
+ throw exception_js_1.default.BadRequestError('BAD_REQUEST', 'Set product general tag conifg Error:' + error, null);
856
+ }
857
+ }
858
+ async setProductGeneralTagConifg(add_tags) {
859
+ var _a, _b;
860
+ const tagConfig = (_a = (await new user_js_1.User(this.app).getConfigV2({ key: 'product_general_tags', user_id: 'manager' }))) !== null && _a !== void 0 ? _a : (await this.initProductGeneralTagConifg());
861
+ (_b = tagConfig.list) !== null && _b !== void 0 ? _b : (tagConfig.list = {});
862
+ Language_js_1.Language.locationList.map(lang => {
863
+ var _a;
864
+ const originList = (_a = tagConfig.list[lang]) !== null && _a !== void 0 ? _a : [];
865
+ const updateList = add_tags[lang];
866
+ tagConfig.list[lang] = [...new Set([...originList, ...updateList])];
867
+ });
868
+ await new user_js_1.User(this.app).setConfig({
869
+ key: 'product_general_tags',
870
+ user_id: 'manager',
871
+ value: tagConfig,
872
+ });
873
+ return tagConfig;
874
+ }
875
+ async initOrderCustomizeTagConifg() {
876
+ var _a, _b;
877
+ try {
878
+ const managerTags = await new user_js_1.User(this.app).getConfigV2({ key: 'order_manager_tags', user_id: 'manager' });
879
+ if (managerTags && Array.isArray(managerTags.list)) {
880
+ return managerTags;
881
+ }
882
+ const getData = await database_js_1.default.query(`
883
+ SELECT
884
+ GROUP_CONCAT(DISTINCT JSON_UNQUOTE(JSON_EXTRACT(orderData, '$.tags')) SEPARATOR ',') AS unique_tags
885
+ FROM \`${this.app}\`.t_checkout
886
+ WHERE JSON_UNQUOTE(JSON_EXTRACT(orderData, '$.tags')) IS NOT NULL
887
+ `, []);
888
+ const unique_tags_string = (_b = (_a = getData[0]) === null || _a === void 0 ? void 0 : _a.unique_tags) !== null && _b !== void 0 ? _b : '';
889
+ const unique_tags_array = JSON.parse(`[${unique_tags_string}]`);
890
+ const unique_tags_flot = Array.isArray(unique_tags_array) ? unique_tags_array.flat() : [];
891
+ const data = { list: [...new Set(unique_tags_flot)] };
892
+ await new user_js_1.User(this.app).setConfig({
893
+ key: 'order_manager_tags',
894
+ user_id: 'manager',
895
+ value: data,
896
+ });
897
+ return data;
898
+ }
899
+ catch (error) {
900
+ throw exception_js_1.default.BadRequestError('BAD_REQUEST', 'Set order customize tag conifg Error:' + express_1.default, null);
901
+ }
902
+ }
903
+ async setOrderCustomizeTagConifg(add_tags) {
904
+ var _a;
905
+ const tagConfig = await new user_js_1.User(this.app).getConfigV2({ key: 'order_manager_tags', user_id: 'manager' });
906
+ const tagList = (_a = tagConfig === null || tagConfig === void 0 ? void 0 : tagConfig.list) !== null && _a !== void 0 ? _a : [];
907
+ const data = { list: [...new Set([...tagList, ...add_tags])] };
908
+ await new user_js_1.User(this.app).setConfig({
909
+ key: 'order_manager_tags',
910
+ user_id: 'manager',
911
+ value: data,
912
+ });
913
+ return data;
914
+ }
748
915
  async getAllUseVoucher(userID) {
749
916
  const now = Date.now();
750
917
  const allVoucher = (await this.querySql([`(content->>'$.type'='voucher')`], {
@@ -1232,6 +1399,7 @@ class Shopping {
1232
1399
  };
1233
1400
  const newOrderID = Date.now();
1234
1401
  const carData = {
1402
+ orderID: `${newOrderID}`,
1235
1403
  discount: (_b = orderData.discount) !== null && _b !== void 0 ? _b : 0,
1236
1404
  customer_info: orderData.customer_info || {},
1237
1405
  lineItems: (_c = orderData.lineItems) !== null && _c !== void 0 ? _c : [],
@@ -1242,7 +1410,6 @@ class Shopping {
1242
1410
  rebate: (_j = orderData.rebate) !== null && _j !== void 0 ? _j : 0,
1243
1411
  goodsWeight: 0,
1244
1412
  use_rebate: orderData.use_rebate || 0,
1245
- orderID: `${newOrderID}`,
1246
1413
  shipment_support: shipment_setting.support,
1247
1414
  shipment_info: shipment_setting.info,
1248
1415
  shipment_selector: [
@@ -1275,8 +1442,12 @@ class Shopping {
1275
1442
  fbp: sqlData.fbp,
1276
1443
  editRecord: [],
1277
1444
  };
1278
- console.log("orderData.customer_info.payment_select -- ", orderData.customer_info.payment_select);
1279
- const result = await new handlePaymentTransaction_js_1.default(this.app, orderData.customer_info.payment_select).processPayment(carData);
1445
+ await order_event_js_1.OrderEvent.insertOrder({
1446
+ cartData: orderData,
1447
+ status: 0,
1448
+ app: this.app,
1449
+ });
1450
+ const result = await new handlePaymentTransaction_js_1.default(this.app, orderData.customer_info.payment_select).processPayment(carData, return_url);
1280
1451
  return result;
1281
1452
  }
1282
1453
  }
@@ -1328,7 +1499,7 @@ class Shopping {
1328
1499
  querySql.push(`(archived="${query.archived}")`);
1329
1500
  }
1330
1501
  else if (query.archived === 'false') {
1331
- querySql.push(`((archived is null) or (archived!='true'))`);
1502
+ querySql.push(`((archived IS NULL) or (archived!='true'))`);
1332
1503
  }
1333
1504
  query.status && querySql.push(`status IN (${query.status})`);
1334
1505
  query.email && querySql.push(`email=${database_js_1.default.escape(query.email)}`);
@@ -1479,8 +1650,48 @@ class Shopping {
1479
1650
  }
1480
1651
  }
1481
1652
  async splitOrder(obj) {
1482
- var _a, _b;
1483
1653
  try {
1654
+ async function processCheckoutsStaggered(splitOrderArray, orderData, context) {
1655
+ const promises = splitOrderArray.map((order, index) => {
1656
+ return new Promise((resolve, reject) => {
1657
+ const delay = 1000 * index;
1658
+ setTimeout(() => {
1659
+ var _a, _b;
1660
+ const payload = {
1661
+ code_array: [],
1662
+ 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 : '',
1663
+ line_items: order.lineItems,
1664
+ customer_info: order.customer_info,
1665
+ return_url: '',
1666
+ user_info: order.user_info,
1667
+ discount: order.discount,
1668
+ voucher: order.voucher,
1669
+ total: order.total,
1670
+ pay_status: Number(order.pay_status),
1671
+ };
1672
+ context
1673
+ .toCheckout(payload, 'split')
1674
+ .then(() => {
1675
+ resolve();
1676
+ })
1677
+ .catch((error) => {
1678
+ reject(error);
1679
+ });
1680
+ }, delay);
1681
+ });
1682
+ });
1683
+ try {
1684
+ await Promise.all(promises);
1685
+ return true;
1686
+ }
1687
+ catch (e) {
1688
+ console.error('處理拆分訂單結帳時至少發生一個錯誤 (從 Promise.all 捕獲):', e);
1689
+ return {
1690
+ result: 'failure',
1691
+ reason: e,
1692
+ };
1693
+ }
1694
+ }
1484
1695
  const currentTime = new Date().toISOString();
1485
1696
  function generateOrderIds(orderId, arrayLength) {
1486
1697
  const orderIdArray = [];
@@ -1515,21 +1726,7 @@ class Shopping {
1515
1726
  cart_token: orderData.orderID,
1516
1727
  orderData,
1517
1728
  });
1518
- for (const [index, order] of splitOrderArray.entries()) {
1519
- await (new checkout_event_js_1.CheckoutEvent(this.app, this.token)).toCheckout({
1520
- code_array: [],
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 : '',
1522
- line_items: order.lineItems,
1523
- customer_info: order.customer_info,
1524
- return_url: '',
1525
- user_info: order.user_info,
1526
- discount: order.discount,
1527
- voucher: order.voucher,
1528
- total: order.total,
1529
- pay_status: Number(order.pay_status),
1530
- }, 'split');
1531
- }
1532
- return true;
1729
+ return await processCheckoutsStaggered(splitOrderArray, orderData, this);
1533
1730
  }
1534
1731
  catch (e) {
1535
1732
  throw exception_js_1.default.BadRequestError('BAD_REQUEST', 'splitOrder Error:' + e, null);
@@ -1955,7 +2152,12 @@ class Shopping {
1955
2152
  delete update.orderData.user_info.shipment_date;
1956
2153
  }
1957
2154
  const updateProgress = update.orderData.progress;
1958
- if (prevProgress !== updateProgress) {
2155
+ if (updateProgress === 'wait' &&
2156
+ update.orderData.user_info.shipment_number &&
2157
+ update.orderData.user_info.shipment_number !== origin.orderData.user_info.shipment_number) {
2158
+ await this.sendNotifications(orderData, 'in_stock');
2159
+ }
2160
+ else if (prevProgress !== updateProgress) {
1959
2161
  if (updateProgress === 'shipping') {
1960
2162
  await this.sendNotifications(orderData, 'shipment');
1961
2163
  }
@@ -1973,10 +2175,11 @@ class Shopping {
1973
2175
  update.orderData.lineItems = update.orderData.lineItems.filter((item) => item.count > 0);
1974
2176
  this.writeRecord(origin, update);
1975
2177
  const updateData = Object.entries(update).reduce((acc, [key, value]) => (Object.assign(Object.assign({}, acc), { [key]: typeof value === 'object' ? JSON.stringify(value) : value })), {});
1976
- await database_js_1.default.query(`UPDATE \`${this.app}\`.t_checkout
1977
- SET ?
1978
- WHERE id = ?;
2178
+ await database_js_1.default.query(`UPDATE \`${this.app}\`.t_checkout SET ? WHERE id = ?;
1979
2179
  `, [updateData, origin.id]);
2180
+ if (Array.isArray(update.orderData.tags)) {
2181
+ await this.setOrderCustomizeTagConifg(update.orderData.tags);
2182
+ }
1980
2183
  await Promise.all(origin.orderData.lineItems.map(async (lineItem) => {
1981
2184
  var _a;
1982
2185
  const shopping = new Shopping(this.app, this.token);
@@ -2121,6 +2324,7 @@ class Shopping {
2121
2324
  const typeMap = {
2122
2325
  shipment: 'shipment',
2123
2326
  arrival: 'shipment-arrival',
2327
+ in_stock: 'in-stock',
2124
2328
  };
2125
2329
  if (lineID) {
2126
2330
  const line = new line_message_1.LineMessage(this.app);
@@ -2289,10 +2493,11 @@ class Shopping {
2289
2493
  }
2290
2494
  async getCheckOut(query) {
2291
2495
  try {
2292
- let querySql = ['1=1'];
2293
- let orderString = 'order by id desc';
2294
2496
  const timer = new ut_timer_js_1.UtTimer('get-checkout-info');
2295
2497
  timer.checkPoint('start');
2498
+ const querySql = ['o.id IS NOT NULL'];
2499
+ let orderString = 'order by created_time desc';
2500
+ await this.initOrderCustomizeTagConifg();
2296
2501
  if (query.search && query.searchType) {
2297
2502
  switch (query.searchType) {
2298
2503
  case 'cart_token':
@@ -2338,7 +2543,7 @@ class Shopping {
2338
2543
  let search = [];
2339
2544
  query.reconciliation_status.map(status => {
2340
2545
  if (status === 'pending_entry') {
2341
- search.push(`total_received is NULL`);
2546
+ search.push(`total_received IS NULL`);
2342
2547
  }
2343
2548
  else if (status === 'completed_entry') {
2344
2549
  search.push(`total_received = total`);
@@ -2350,10 +2555,10 @@ class Shopping {
2350
2555
  search.push(`(total_received < total) && ((total_received + offset_amount) = total)`);
2351
2556
  }
2352
2557
  else if (status === 'pending_offset') {
2353
- search.push(`(total_received < total) && (offset_amount is null)`);
2558
+ search.push(`(total_received < total) && (offset_amount IS NULL)`);
2354
2559
  }
2355
2560
  else if (status === 'pending_refund') {
2356
- search.push(`(total_received > total) && (offset_amount is null)`);
2561
+ search.push(`(total_received > total) && (offset_amount IS NULL)`);
2357
2562
  }
2358
2563
  });
2359
2564
  querySql.push(`(${search
@@ -2393,7 +2598,7 @@ class Shopping {
2393
2598
  querySql.push(`shipment_number is NOT null`);
2394
2599
  }
2395
2600
  else if (query.progress === 'wait') {
2396
- querySql.push(`shipment_number is null`);
2601
+ querySql.push(`shipment_number IS NULL`);
2397
2602
  }
2398
2603
  let newArray = query.progress.split(',');
2399
2604
  let temp = '';
@@ -2413,7 +2618,7 @@ class Shopping {
2413
2618
  querySql.push(`order_source='POS'`);
2414
2619
  }
2415
2620
  else if (query.is_pos === 'false') {
2416
- querySql.push(`(order_source!='POS' or order_source is null)`);
2621
+ querySql.push(`(order_source!='POS' or order_source IS NULL)`);
2417
2622
  }
2418
2623
  if (query.shipment) {
2419
2624
  let shipment = query.shipment.split(',');
@@ -2458,36 +2663,90 @@ class Shopping {
2458
2663
  break;
2459
2664
  }
2460
2665
  }
2461
- query.status && querySql.push(`o.status IN (${query.status})`);
2666
+ if (query.manager_tag) {
2667
+ const tagSplit = query.manager_tag.split(',').map(tag => tag.trim());
2668
+ if (tagSplit.length > 0) {
2669
+ const tagJoin = tagSplit.map(tag => {
2670
+ return `JSON_CONTAINS(orderData->>'$.tags', '"${tag}"')`;
2671
+ });
2672
+ querySql.push(`(${tagJoin.join(' OR ')})`);
2673
+ }
2674
+ }
2675
+ if (query.status) {
2676
+ querySql.push(`o.status IN (${query.status})`);
2677
+ }
2462
2678
  const orderMath = [];
2463
2679
  query.email && orderMath.push(`(email=${database_js_1.default.escape(query.email)})`);
2464
2680
  query.phone && orderMath.push(`(email=${database_js_1.default.escape(query.phone)})`);
2465
2681
  if (orderMath.length) {
2466
- querySql.push(`(${orderMath.join(' or ')})`);
2682
+ querySql.push(`(${orderMath.join(' OR ')})`);
2683
+ }
2684
+ if (query.member_levels) {
2685
+ let temp = [];
2686
+ const queryLevel = query.member_levels.split(',');
2687
+ const queryIdLevel = queryLevel.filter(level => level !== 'null');
2688
+ if (queryLevel.includes('null')) {
2689
+ temp = [`u.member_level IS NULL`, `u.member_level = ''`];
2690
+ }
2691
+ if (queryIdLevel.length > 0) {
2692
+ temp = [
2693
+ ...temp,
2694
+ `u.member_level IN (${queryIdLevel
2695
+ .map(level => {
2696
+ return database_js_1.default.escape(level);
2697
+ })
2698
+ .join(',')})`,
2699
+ ];
2700
+ }
2701
+ if (temp.length > 0) {
2702
+ querySql.push(`(${temp.join(' OR ')})`);
2703
+ }
2467
2704
  }
2468
2705
  if (query.filter_type === 'true' || query.archived) {
2469
2706
  if (query.archived === 'true') {
2470
- querySql.push(`(archived="${query.archived}")
2471
- AND (order_status IS NULL OR order_status NOT IN (-99))`);
2707
+ querySql.push(`(archived="${query.archived}") AND (order_status IS NULL OR order_status NOT IN (-99))`);
2472
2708
  }
2473
2709
  else {
2474
- querySql.push(`((archived="${query.archived}") or (archived is null))`);
2710
+ querySql.push(`((archived="${query.archived}") or (archived IS NULL))`);
2475
2711
  }
2476
2712
  }
2477
2713
  else if (query.filter_type === 'normal') {
2478
- querySql.push(`((archived is null) or (archived!='true'))`);
2714
+ querySql.push(`((archived IS NULL) or (archived!='true'))`);
2479
2715
  }
2480
2716
  if (!(query.filter_type === 'true' || query.archived)) {
2481
- querySql.push(`((order_status is null) or (order_status NOT IN (-99)))`);
2482
- }
2483
- let sql = `SELECT i.invoice_no,
2484
- i.invoice_data,
2485
- i.\`status\` as invoice_status,
2486
- o.*
2487
- FROM \`${this.app}\`.t_checkout o
2488
- LEFT JOIN \`${this.app}\`.t_invoice_memory i ON o.cart_token = i.order_id and i.status = 1
2489
- WHERE ${querySql.join(' and ')} ${orderString}`;
2490
- timer.checkPoint('start-query-sql');
2717
+ querySql.push(`((order_status IS NULL) or (order_status NOT IN (-99)))`);
2718
+ }
2719
+ const baseSelect = `
2720
+ SELECT
2721
+ o.*,
2722
+ i.invoice_no,
2723
+ i.invoice_data,
2724
+ i.\`status\` as invoice_status
2725
+ FROM`;
2726
+ const joinClause = `LEFT JOIN \`${this.app}\`.t_invoice_memory i ON o.cart_token = i.order_id AND i.status = 1`;
2727
+ const whereClause = `WHERE ${querySql.join(' AND ')}`;
2728
+ let sql;
2729
+ if (query.member_levels) {
2730
+ sql = `
2731
+ (
2732
+ (
2733
+ ${baseSelect} \`${this.app}\`.t_user u
2734
+ LEFT JOIN \`${this.app}\`.t_checkout o ON o.email = u.phone
2735
+ ${joinClause}
2736
+ ${whereClause}
2737
+ )
2738
+ UNION
2739
+ (
2740
+ ${baseSelect} \`${this.app}\`.t_user u
2741
+ LEFT JOIN \`${this.app}\`.t_checkout o ON o.email = u.email
2742
+ ${joinClause}
2743
+ ${whereClause}
2744
+ )
2745
+ ) ${orderString}`;
2746
+ }
2747
+ else {
2748
+ sql = `${baseSelect} \`${this.app}\`.t_checkout o ${joinClause} ${whereClause} ${orderString}`;
2749
+ }
2491
2750
  if (query.returnSearch == 'true') {
2492
2751
  const data = await database_js_1.default.query(`SELECT *
2493
2752
  FROM \`${this.app}\`.t_checkout
@@ -2512,28 +2771,23 @@ class Shopping {
2512
2771
  }
2513
2772
  return data[0];
2514
2773
  }
2515
- const response_data = await new Promise(async (resolve, reject) => {
2516
- timer.checkPoint('start-query-response_data');
2774
+ const response_data = await new Promise(async (resolve) => {
2517
2775
  if (query.id) {
2518
- const data = (await database_js_1.default.query(`SELECT *
2519
- FROM (${sql}) as subqyery limit ${query.page * query.limit}, ${query.limit}
2776
+ const data = (await database_js_1.default.query(`SELECT * FROM (${sql}) as subqyery limit ${query.page * query.limit}, ${query.limit}
2520
2777
  `, []))[0];
2778
+ timer.checkPoint('get response_data (has query.id)');
2521
2779
  resolve({
2522
2780
  data: data,
2523
2781
  result: !!data,
2524
2782
  });
2525
2783
  }
2526
2784
  else {
2527
- const data = await database_js_1.default.query(`SELECT *
2528
- FROM (${sql}) as subqyery limit ${query.page * query.limit}, ${query.limit}
2785
+ const data = await database_js_1.default.query(`SELECT * FROM (${sql}) as subqyery limit ${query.page * query.limit}, ${query.limit}
2529
2786
  `, []);
2530
- timer.checkPoint('finish-query-response_data');
2531
- console.log(sql);
2787
+ timer.checkPoint('get response_data (not query.id)');
2532
2788
  resolve({
2533
2789
  data: data,
2534
- total: (await database_js_1.default.query(`SELECT count(1)
2535
- FROM (${sql}) as subqyery
2536
- `, []))[0]['count(1)'],
2790
+ total: (await database_js_1.default.query(`SELECT count(1) FROM (${sql}) as subqyery`, []))[0]['count(1)'],
2537
2791
  });
2538
2792
  }
2539
2793
  });
@@ -2602,11 +2856,12 @@ class Shopping {
2602
2856
  catch (e) { }
2603
2857
  })
2604
2858
  .concat(obMap.map(async (order) => {
2859
+ var _a;
2605
2860
  const invoice = (await new invoice_js_1.Invoice(this.app).getInvoice({
2606
2861
  page: 0,
2607
2862
  limit: 1,
2608
2863
  search: order.cart_token,
2609
- searchType: order.orderData.order_number,
2864
+ searchType: (_a = order.orderData) === null || _a === void 0 ? void 0 : _a.order_number,
2610
2865
  })).data[0];
2611
2866
  order.invoice_number = invoice && invoice.invoice_no;
2612
2867
  }))
@@ -2871,8 +3126,7 @@ class Shopping {
2871
3126
  else if (Object.keys(variant.stockList).length === 0) {
2872
3127
  variant.stockList[storeConfig.list[0].id] = { count: variant.stock };
2873
3128
  }
2874
- const insertData = await database_js_1.default.query(`INSERT INTO \`${this.app}\`.t_variants
2875
- SET ?
3129
+ const insertData = await database_js_1.default.query(`INSERT INTO \`${this.app}\`.t_variants SET ?
2876
3130
  `, [
2877
3131
  {
2878
3132
  content: JSON.stringify(variant),
@@ -2885,7 +3139,14 @@ class Shopping {
2885
3139
  }
2886
3140
  return insertData;
2887
3141
  });
2888
- await Promise.all(insertPromises);
3142
+ const chunk = 10;
3143
+ const chunkLength = Math.ceil(insertPromises.length / chunk);
3144
+ for (let i = 0; i < chunkLength; i++) {
3145
+ const promisesArray = insertPromises.slice(i * chunk, (i + 1) * chunk);
3146
+ setTimeout(async () => {
3147
+ await Promise.all(promisesArray);
3148
+ }, 200);
3149
+ }
2889
3150
  const exhibitionConfig = await _user.getConfigV2({ key: 'exhibition_manager', user_id: 'manager' });
2890
3151
  exhibitionConfig.list = (_b = exhibitionConfig.list) !== null && _b !== void 0 ? _b : [];
2891
3152
  exhibitionConfig.list.forEach((exhibition) => {
@@ -3439,11 +3700,11 @@ class Shopping {
3439
3700
  productArray[index] = product;
3440
3701
  }
3441
3702
  else {
3442
- console.error('Product id not exist:', product);
3703
+ console.error('Product id not exist:', product.title);
3443
3704
  }
3444
3705
  }
3445
3706
  else {
3446
- console.error('Product has not id:', product);
3707
+ console.error('Product has not id:', product.title);
3447
3708
  }
3448
3709
  resolve(true);
3449
3710
  });
@@ -3473,8 +3734,8 @@ class Shopping {
3473
3734
  return [product.id || null, (_a = this.token) === null || _a === void 0 ? void 0 : _a.userID, JSON.stringify(product)];
3474
3735
  });
3475
3736
  if (productArray.length) {
3476
- const data = await database_js_1.default.query(`replace
3477
- INTO \`${this.app}\`.\`t_manager_post\` (id,userID,content) values ?`, [
3737
+ const data = await database_js_1.default.query(`REPLACE INTO \`${this.app}\`.\`t_manager_post\` (id,userID,content) values ?
3738
+ `, [
3478
3739
  productArray.map((product) => {
3479
3740
  var _a;
3480
3741
  if (!product.id) {
@@ -3503,30 +3764,41 @@ class Shopping {
3503
3764
  product.id = product.id || insertIDStart++;
3504
3765
  return new Shopping(this.app, this.token).postVariantsAndPriceValue(product);
3505
3766
  });
3506
- await Promise.all(promises);
3767
+ const chunk = 10;
3768
+ const chunkLength = Math.ceil(promises.length / chunk);
3769
+ for (let i = 0; i < chunkLength; i++) {
3770
+ const promisesArray = promises.slice(i * chunk, (i + 1) * chunk);
3771
+ setTimeout(async () => {
3772
+ await Promise.all(promisesArray);
3773
+ }, 200);
3774
+ }
3507
3775
  }
3508
3776
  async putProduct(content) {
3509
- if (content.language_data) {
3510
- const language = await app_js_1.App.getSupportLanguage(this.app);
3511
- for (const b of language) {
3512
- const find_conflict = await database_js_1.default.query(`select count(1)
3513
- from \`${this.app}\`.\`t_manager_post\`
3514
- where content ->>'$.language_data."${b}".seo.domain'='${decodeURIComponent(content.language_data[b].seo.domain)}'
3515
- and id != ${content.id}`, []);
3516
- if (find_conflict[0]['count(1)'] > 0) {
3517
- throw exception_js_1.default.BadRequestError('BAD_REQUEST', 'DOMAIN ALREADY EXISTS:', {
3518
- message: '網域已被使用',
3519
- code: '733',
3520
- });
3521
- }
3522
- }
3523
- }
3777
+ var _a, _b, _c;
3524
3778
  try {
3525
3779
  content.type = 'product';
3780
+ if (content.language_data) {
3781
+ const language = await app_js_1.App.getSupportLanguage(this.app);
3782
+ for (const b of language) {
3783
+ const find_conflict = await database_js_1.default.query(`SELECT count(1)
3784
+ FROM \`${this.app}\`.t_manager_post
3785
+ WHERE content ->>'$.language_data."${b}".seo.domain'='${decodeURIComponent(content.language_data[b].seo.domain)}'
3786
+ AND id != ${content.id}`, []);
3787
+ if (find_conflict[0]['count(1)'] > 0) {
3788
+ throw exception_js_1.default.BadRequestError('BAD_REQUEST', 'DOMAIN ALREADY EXISTS:', {
3789
+ message: '網域已被使用',
3790
+ code: '733',
3791
+ });
3792
+ }
3793
+ }
3794
+ }
3526
3795
  this.checkVariantDataType(content.variants);
3527
- const data = await database_js_1.default.query(`update \`${this.app}\`.\`t_manager_post\`
3528
- SET ?
3529
- where id = ?`, [
3796
+ await Promise.all([
3797
+ this.setProductCustomizeTagConifg((_a = content.product_customize_tag) !== null && _a !== void 0 ? _a : []),
3798
+ this.setProductGeneralTagConifg((_c = (_b = content.product_tag) === null || _b === void 0 ? void 0 : _b.language) !== null && _c !== void 0 ? _c : []),
3799
+ ]);
3800
+ await database_js_1.default.query(`UPDATE \`${this.app}\`.\`t_manager_post\` SET ? WHERE id = ?
3801
+ `, [
3530
3802
  {
3531
3803
  content: JSON.stringify(content),
3532
3804
  },
@@ -3696,7 +3968,7 @@ class Shopping {
3696
3968
  query.id && querySql.push(`(v.id = ${query.id})`);
3697
3969
  if (query.id_list) {
3698
3970
  if ((_a = query.id_list) === null || _a === void 0 ? void 0 : _a.includes('-')) {
3699
- querySql.push(`(v.product_id in (${query.id_list.split(',').map((dd) => {
3971
+ querySql.push(`(v.product_id in (${query.id_list.split(',').map(dd => {
3700
3972
  return dd.split('-')[0];
3701
3973
  })}))`);
3702
3974
  }
@@ -3793,7 +4065,7 @@ class Shopping {
3793
4065
  if ((_c = query.id_list) === null || _c === void 0 ? void 0 : _c.includes('-')) {
3794
4066
  data.data = data.data.filter((dd) => {
3795
4067
  var _a;
3796
- return (_a = query.id_list) === null || _a === void 0 ? void 0 : _a.split(',').find((d1) => {
4068
+ return (_a = query.id_list) === null || _a === void 0 ? void 0 : _a.split(',').find(d1 => {
3797
4069
  return d1 === [dd.product_id, ...dd.variant_content.spec].join('-');
3798
4070
  });
3799
4071
  });