@pisell/pisellos 0.10.2 → 0.10.3

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 (131) hide show
  1. package/dist/core/index.d.ts +2 -0
  2. package/dist/core/index.js +7 -0
  3. package/dist/model/strategy/adapter/promotion/adapter.d.ts +4 -0
  4. package/dist/model/strategy/adapter/promotion/adapter.js +23 -0
  5. package/dist/model/strategy/adapter/promotion/evaluator.d.ts +17 -0
  6. package/dist/model/strategy/adapter/promotion/evaluator.js +279 -6
  7. package/dist/model/strategy/adapter/promotion/examples.d.ts +86 -0
  8. package/dist/model/strategy/adapter/promotion/examples.js +99 -0
  9. package/dist/model/strategy/adapter/promotion/index.d.ts +1 -1
  10. package/dist/model/strategy/adapter/promotion/index.js +0 -9
  11. package/dist/model/strategy/adapter/promotion/type.d.ts +90 -2
  12. package/dist/model/strategy/adapter/promotion/type.js +45 -0
  13. package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +5 -3
  14. package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +6 -3
  15. package/dist/modules/OpenData/index.d.ts +2 -0
  16. package/dist/modules/OpenData/index.js +8 -0
  17. package/dist/modules/Order/index.d.ts +28 -8
  18. package/dist/modules/Order/index.js +818 -503
  19. package/dist/modules/Order/payment-utils.d.ts +26 -0
  20. package/dist/modules/Order/payment-utils.js +225 -0
  21. package/dist/modules/Order/types.d.ts +35 -1
  22. package/dist/modules/Order/utils/orderCollectionIdentity.js +7 -2
  23. package/dist/modules/Order/utils.js +10 -6
  24. package/dist/modules/Payment/index.d.ts +2 -0
  25. package/dist/modules/Payment/index.js +79 -50
  26. package/dist/modules/Payment/types.d.ts +107 -28
  27. package/dist/modules/Payment/types.js +20 -3
  28. package/dist/modules/Payment/walletpass.d.ts +38 -1
  29. package/dist/modules/Payment/walletpass.js +917 -114
  30. package/dist/modules/ProductList/index.js +1 -1
  31. package/dist/modules/Rules/index.d.ts +3 -0
  32. package/dist/modules/Rules/index.js +130 -99
  33. package/dist/server/index.d.ts +16 -0
  34. package/dist/server/index.js +2084 -1188
  35. package/dist/server/modules/index.d.ts +1 -1
  36. package/dist/server/modules/order/index.d.ts +70 -4
  37. package/dist/server/modules/order/index.js +1816 -728
  38. package/dist/server/modules/order/types.d.ts +25 -3
  39. package/dist/server/modules/order/types.js +7 -1
  40. package/dist/solution/BaseSales/index.d.ts +111 -13
  41. package/dist/solution/BaseSales/index.js +1799 -446
  42. package/dist/solution/BaseSales/types.d.ts +55 -1
  43. package/dist/solution/BaseSales/types.js +2 -1
  44. package/dist/solution/BaseSales/utils/cartPromotion.d.ts +3 -1
  45. package/dist/solution/BaseSales/utils/cartPromotion.js +90 -31
  46. package/dist/solution/BaseSales/utils/parseSalesResponse.d.ts +6 -1
  47. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +6 -3
  48. package/dist/solution/BookingByStep/index.d.ts +1 -1
  49. package/dist/solution/BookingTicket/index.d.ts +7 -3
  50. package/dist/solution/BookingTicket/index.js +138 -52
  51. package/dist/solution/BookingTicket/types.d.ts +1 -0
  52. package/dist/solution/BookingTicket/utils/addProductDecision.js +6 -0
  53. package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +8 -0
  54. package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.js +173 -83
  55. package/dist/solution/BookingTicket/utils/weighingProductSku.d.ts +5 -0
  56. package/dist/solution/BookingTicket/utils/weighingProductSku.js +45 -0
  57. package/dist/solution/Sales/index.d.ts +1 -0
  58. package/dist/solution/Sales/index.js +10 -2
  59. package/dist/solution/ScanOrder/index.js +31 -20
  60. package/dist/solution/UnifiedBookingSales/index.js +23 -3
  61. package/dist/solution/VenueBooking/index.d.ts +1 -0
  62. package/dist/solution/VenueBooking/index.js +34 -24
  63. package/dist/types/index.d.ts +1 -0
  64. package/dist/utils/payment-number.d.ts +9 -0
  65. package/dist/utils/payment-number.js +69 -0
  66. package/lib/core/index.d.ts +2 -0
  67. package/lib/core/index.js +4 -0
  68. package/lib/model/strategy/adapter/promotion/adapter.d.ts +4 -0
  69. package/lib/model/strategy/adapter/promotion/adapter.js +20 -0
  70. package/lib/model/strategy/adapter/promotion/evaluator.d.ts +17 -0
  71. package/lib/model/strategy/adapter/promotion/evaluator.js +235 -0
  72. package/lib/model/strategy/adapter/promotion/examples.d.ts +86 -0
  73. package/lib/model/strategy/adapter/promotion/examples.js +91 -0
  74. package/lib/model/strategy/adapter/promotion/index.d.ts +1 -1
  75. package/lib/model/strategy/adapter/promotion/index.js +0 -49
  76. package/lib/model/strategy/adapter/promotion/type.d.ts +90 -2
  77. package/lib/model/strategy/adapter/promotion/type.js +2 -0
  78. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +2 -1
  79. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +2 -1
  80. package/lib/modules/OpenData/index.d.ts +2 -0
  81. package/lib/modules/OpenData/index.js +5 -0
  82. package/lib/modules/Order/index.d.ts +28 -8
  83. package/lib/modules/Order/index.js +233 -68
  84. package/lib/modules/Order/payment-utils.d.ts +26 -0
  85. package/lib/modules/Order/payment-utils.js +224 -0
  86. package/lib/modules/Order/types.d.ts +35 -1
  87. package/lib/modules/Order/utils/orderCollectionIdentity.js +3 -0
  88. package/lib/modules/Order/utils.js +11 -4
  89. package/lib/modules/Payment/index.d.ts +2 -0
  90. package/lib/modules/Payment/index.js +34 -13
  91. package/lib/modules/Payment/types.d.ts +107 -28
  92. package/lib/modules/Payment/types.js +4 -3
  93. package/lib/modules/Payment/walletpass.d.ts +38 -1
  94. package/lib/modules/Payment/walletpass.js +730 -21
  95. package/lib/modules/ProductList/index.js +9 -1
  96. package/lib/modules/Rules/index.d.ts +3 -0
  97. package/lib/modules/Rules/index.js +39 -10
  98. package/lib/server/index.d.ts +16 -0
  99. package/lib/server/index.js +677 -28
  100. package/lib/server/modules/index.d.ts +1 -1
  101. package/lib/server/modules/order/index.d.ts +70 -4
  102. package/lib/server/modules/order/index.js +818 -69
  103. package/lib/server/modules/order/types.d.ts +25 -3
  104. package/lib/server/modules/order/types.js +1 -0
  105. package/lib/solution/BaseSales/index.d.ts +111 -13
  106. package/lib/solution/BaseSales/index.js +882 -46
  107. package/lib/solution/BaseSales/types.d.ts +55 -1
  108. package/lib/solution/BaseSales/types.js +2 -1
  109. package/lib/solution/BaseSales/utils/cartPromotion.d.ts +3 -1
  110. package/lib/solution/BaseSales/utils/cartPromotion.js +63 -12
  111. package/lib/solution/BaseSales/utils/parseSalesResponse.d.ts +6 -1
  112. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +3 -2
  113. package/lib/solution/BookingByStep/index.d.ts +1 -1
  114. package/lib/solution/BookingTicket/index.d.ts +7 -3
  115. package/lib/solution/BookingTicket/index.js +63 -9
  116. package/lib/solution/BookingTicket/types.d.ts +1 -0
  117. package/lib/solution/BookingTicket/utils/addProductDecision.js +4 -0
  118. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +8 -0
  119. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +37 -5
  120. package/lib/solution/BookingTicket/utils/weighingProductSku.d.ts +5 -0
  121. package/lib/solution/BookingTicket/utils/weighingProductSku.js +63 -0
  122. package/lib/solution/Sales/index.d.ts +1 -0
  123. package/lib/solution/Sales/index.js +5 -3
  124. package/lib/solution/ScanOrder/index.js +8 -0
  125. package/lib/solution/UnifiedBookingSales/index.js +10 -2
  126. package/lib/solution/VenueBooking/index.d.ts +1 -0
  127. package/lib/solution/VenueBooking/index.js +13 -6
  128. package/lib/types/index.d.ts +1 -0
  129. package/lib/utils/payment-number.d.ts +9 -0
  130. package/lib/utils/payment-number.js +64 -0
  131. package/package.json +1 -1
@@ -126,7 +126,15 @@ var ProductList = class extends import_BaseModule.BaseModule {
126
126
  "ticket",
127
127
  "event_item"
128
128
  ],
129
- with: ["category", "collection", "resourceRelation"],
129
+ with: [
130
+ "category",
131
+ "collection",
132
+ "resourceRelation",
133
+ "bundleGroup.bundleItem",
134
+ "optionGroup.optionItem",
135
+ "variantGroup.variantItem",
136
+ "dataVariants"
137
+ ],
130
138
  status,
131
139
  num: 500,
132
140
  skip: 1,
@@ -27,6 +27,8 @@ export declare class RulesModule extends BaseModule implements Module, RulesModu
27
27
  }): {
28
28
  isAvailable: boolean;
29
29
  discountList: Discount[];
30
+ /** 完整规则计算后的列表;调用方可用于保留暂时无适用商品的扫码卡券。 */
31
+ evaluatedDiscountList?: Discount[];
30
32
  productList: any[];
31
33
  unavailableReason?: UnavailableReason;
32
34
  };
@@ -35,6 +37,7 @@ export declare class RulesModule extends BaseModule implements Module, RulesModu
35
37
  excludeDiscountListByType(discountList: Discount[], type: string): Discount[];
36
38
  /** 手动改价场景:去掉 promotion,保留 type=product 等行内折扣 */
37
39
  resolveDiscountListForManualOverride(discountList: Discount[]): Discount[];
40
+ private isItemRewardProductDiscount;
38
41
  private getUnavailableReason;
39
42
  calcDiscount({ discountList, productList, holders, isFormSubject, orderTotalAmount }: {
40
43
  discountList: Discount[];
@@ -94,7 +94,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
94
94
  productList
95
95
  };
96
96
  }
97
- if (productList.every((item) => {
97
+ if (productList.length > 0 && productList.every((item) => {
98
98
  var _a;
99
99
  const product = this.hooks.getProduct(item);
100
100
  return product.booking_id && (((_a = product.discount_list) == null ? void 0 : _a.length) || product.total == 0);
@@ -152,6 +152,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
152
152
  return {
153
153
  isAvailable: hasApplicableDiscount,
154
154
  discountList: hasApplicableDiscount ? result.discountList : oldDiscountList,
155
+ evaluatedDiscountList: result.discountList,
155
156
  productList: hasApplicableDiscount ? result.productList : productList,
156
157
  unavailableReason
157
158
  };
@@ -167,13 +168,27 @@ var RulesModule = class extends import_BaseModule.BaseModule {
167
168
  resolveDiscountListForManualOverride(discountList) {
168
169
  return this.excludeDiscountListByType(discountList, "promotion");
169
170
  }
171
+ isItemRewardProductDiscount(product) {
172
+ var _a;
173
+ const discountList = Array.isArray(product == null ? void 0 : product.discount_list) ? product.discount_list : [];
174
+ return ((_a = product == null ? void 0 : product._promotion) == null ? void 0 : _a.actionType) === "ITEM_REWARD" && discountList.some(
175
+ (item) => {
176
+ var _a2, _b;
177
+ return (item == null ? void 0 : item.type) === "product" && ((_a2 = item == null ? void 0 : item.metadata) == null ? void 0 : _a2.source) === "promotion" && ((_b = item == null ? void 0 : item.metadata) == null ? void 0 : _b.actionType) === "ITEM_REWARD";
178
+ }
179
+ );
180
+ }
170
181
  // 获取券不可用的原因
171
182
  getUnavailableReason(discountList, productList) {
172
183
  var _a;
173
184
  for (const discount of discountList) {
174
- for (const item of productList) {
185
+ const bookingTimes = productList.length ? productList.map((item) => {
175
186
  const product = this.hooks.getProduct(item);
176
- const bookingTime = ((product == null ? void 0 : product.startDate) || (0, import_dayjs.default)()).format("YYYY-MM-DD HH:mm:ss");
187
+ return ((product == null ? void 0 : product.startDate) || (0, import_dayjs.default)()).format(
188
+ "YYYY-MM-DD HH:mm:ss"
189
+ );
190
+ }) : [(0, import_dayjs.default)().format("YYYY-MM-DD HH:mm:ss")];
191
+ for (const bookingTime of bookingTimes) {
177
192
  const filteredList = (0, import_utils.filterDiscountListByBookingTime)([discount], bookingTime);
178
193
  if (filteredList.length === 0) {
179
194
  return import_types.UnavailableReason.TimeLimit;
@@ -303,8 +318,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
303
318
  bundleIndex,
304
319
  // 虚拟商品属性
305
320
  price: Number(bundleItem.price || 0),
306
- id: bundleItem._bundle_product_id,
307
- // 🔥 使用 _bundle_product_id
321
+ id: bundleItem.bundle_product_id ?? bundleItem._bundle_product_id ?? bundleItem.product_id,
308
322
  _id: `${product._id}_bundle_${bundleIndex}`,
309
323
  parentId: product._id,
310
324
  num: bundleItem.num || 1,
@@ -501,6 +515,9 @@ var RulesModule = class extends import_BaseModule.BaseModule {
501
515
  startDate: (_a2 = flatItem.parentProduct) == null ? void 0 : _a2.startDate
502
516
  };
503
517
  }
518
+ if (this.isItemRewardProductDiscount(product)) {
519
+ return false;
520
+ }
504
521
  const isAvailableProduct = flatItem.type === "main" ? !((product == null ? void 0 : product.booking_id) && ((_b = product == null ? void 0 : product.discount_list) == null ? void 0 : _b.length) && ((_c = product == null ? void 0 : product.discount_list) == null ? void 0 : _c.every((d) => d.id && ["good_pass", "discount_card", "product_discount_card"].includes(d.tag || d.type)))) : !((flatItem == null ? void 0 : flatItem.booking_id) && !!((_e = (_d = flatItem == null ? void 0 : flatItem.bundleItem) == null ? void 0 : _d.discount_list) == null ? void 0 : _e.length) && ((_g = (_f = flatItem == null ? void 0 : flatItem.bundleItem) == null ? void 0 : _f.discount_list) == null ? void 0 : _g.every((d) => d.id)));
505
522
  if (!isAvailableProduct) {
506
523
  return false;
@@ -626,6 +643,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
626
643
  };
627
644
  originProduct = flatItem.originProduct;
628
645
  }
646
+ const isItemRewardProductDiscount = this.isItemRewardProductDiscount(product);
629
647
  addModeDiscount.forEach((discount) => {
630
648
  var _a3, _b, _c, _d, _e, _f, _g, _h, _i, _j;
631
649
  const limitedData = discount == null ? void 0 : discount.limited_relation_product_data;
@@ -649,7 +667,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
649
667
  ].includes(discount2.tag || discount2.type)
650
668
  ))) : !((flatItem == null ? void 0 : flatItem.booking_id) && !!((_d = (_c = flatItem == null ? void 0 : flatItem.bundleItem) == null ? void 0 : _c.discount_list) == null ? void 0 : _d.length) && ((_f = (_e = flatItem == null ? void 0 : flatItem.bundleItem) == null ? void 0 : _e.discount_list) == null ? void 0 : _f.every((discount2) => discount2.id)));
651
669
  const isBundleAvailable = this.checkPackageSubItemUsageRules(discount, flatItem);
652
- if (isAvailableProduct && isLimitedProduct && timeLimit && isBundleAvailable && ((_g = discount.config) == null ? void 0 : _g.isAvailable)) {
670
+ if (isAvailableProduct && !isItemRewardProductDiscount && isLimitedProduct && timeLimit && isBundleAvailable && ((_g = discount.config) == null ? void 0 : _g.isAvailable)) {
653
671
  (_h = discountApplicability.get(discount.id)) == null ? void 0 : _h.push(product.id);
654
672
  const applicableProducts = discountApplicableProducts.get(discount.id) || [];
655
673
  const discountType = discount.tag || discount.type;
@@ -773,6 +791,8 @@ var RulesModule = class extends import_BaseModule.BaseModule {
773
791
  }
774
792
  const applicableDiscounts = sortedDiscountList.filter((discount) => {
775
793
  var _a3, _b2, _c2, _d2;
794
+ if (this.isItemRewardProductDiscount(product))
795
+ return false;
776
796
  const discountType = discount.tag || discount.type;
777
797
  const currentOriginUid = getOriginProductUid(originProduct);
778
798
  const isReapplyEditModeDiscountForProduct = discount.isEditMode && reapplyBookingDiscountProductUids.size > 0 && currentOriginUid && reapplyBookingDiscountProductUids.has(String(currentOriginUid)) && discount.isSelected === true;
@@ -842,11 +862,17 @@ var RulesModule = class extends import_BaseModule.BaseModule {
842
862
  }
843
863
  return false;
844
864
  });
845
- const selectedDiscountCard = applicableDiscounts.find(
865
+ const explicitlySelectedDiscountCard = (options == null ? void 0 : options.isSelected) === true && options.discountId !== void 0 ? applicableDiscounts.find((discount) => {
866
+ const discountType = discount.tag || discount.type;
867
+ return String(discount.id) === String(options.discountId) && ["discount_card", "product_discount_card"].includes(discountType);
868
+ }) : void 0;
869
+ const scannedSelectedDiscountCard = applicableDiscounts.find(
846
870
  (n) => n.isScan && n.isSelected && (n.tag || n.type) !== "good_pass"
847
871
  );
872
+ const selectedDiscountCard = explicitlySelectedDiscountCard || scannedSelectedDiscountCard;
848
873
  const selectedDiscount = selectedDiscountCard || applicableDiscounts[0];
849
874
  let isManualDiscount = false;
875
+ let isItemRewardProductDiscount = false;
850
876
  if (flatItem.type === "main") {
851
877
  isManualDiscount = typeof product.isManualDiscount === "boolean" ? product.isManualDiscount : ((_g = product.discount_list) == null ? void 0 : _g.some((item) => item.type === "product")) || product.total != product.origin_total && (product.bundle || []).every(
852
878
  (item) => {
@@ -857,7 +883,8 @@ var RulesModule = class extends import_BaseModule.BaseModule {
857
883
  _i,
858
884
  (item) => item.type === "product"
859
885
  )));
860
- if (product.inPromotion) {
886
+ isItemRewardProductDiscount = this.isItemRewardProductDiscount(product);
887
+ if (product.inPromotion && !isItemRewardProductDiscount) {
861
888
  isManualDiscount = false;
862
889
  }
863
890
  } else {
@@ -971,14 +998,16 @@ var RulesModule = class extends import_BaseModule.BaseModule {
971
998
  } else {
972
999
  let total = product.inPromotion ? ((_w = product == null ? void 0 : product._promotion) == null ? void 0 : _w.finalPrice) ?? product.origin_total ?? product.total : product.origin_total ?? product.total;
973
1000
  let main_product_selling_price = product.price;
974
- if ((product.discount_list || []).some((item) => item.type === "promotion") || (0, import_lodash_es.isBoolean)(product.vouchersApplicable) && !product.vouchersApplicable) {
1001
+ if ((product.discount_list || []).some((item) => item.type === "promotion") || isItemRewardProductDiscount || (0, import_lodash_es.isBoolean)(product.vouchersApplicable) && !product.vouchersApplicable) {
975
1002
  total = product.total ?? product.origin_total;
976
1003
  main_product_selling_price = product.main_product_selling_price ?? main_product_selling_price;
977
1004
  }
978
1005
  processedProductsMap.set(product._id, [
979
1006
  this.hooks.setProduct(originProduct, {
980
1007
  ...isManualDiscount ? {
981
- price: product.price
1008
+ price: product.price,
1009
+ main_product_selling_price: isItemRewardProductDiscount ? main_product_selling_price : product.price,
1010
+ ...isItemRewardProductDiscount ? { total } : {}
982
1011
  } : {
983
1012
  _id: product._id.split("___")[0] + "___" + index,
984
1013
  total,
@@ -61,6 +61,7 @@ declare class Server {
61
61
  private readonly BOOKING_REMOTE_CACHE_MAX_ENTRIES;
62
62
  private salesSearchSubscribers;
63
63
  private deviceTaskActionsRegistered;
64
+ private localPaymentUpdateQueues;
64
65
  private floorPlanQuerySubscribers;
65
66
  private moduleRegistry;
66
67
  constructor(core: PisellCore);
@@ -124,6 +125,8 @@ declare class Server {
124
125
  private handleSyncSalesTask;
125
126
  private runCheckoutSync;
126
127
  private omitCheckoutSyncMode;
128
+ private buildRemoteCheckoutData;
129
+ private mergeCheckoutSyncPayments;
127
130
  private persistSyncedCheckoutOrder;
128
131
  /**
129
132
  * 将普通层 QuotationModule 的报价单计算能力桥接到 Server Products 模块。
@@ -467,6 +470,18 @@ declare class Server {
467
470
  */
468
471
  private handleUpdateLocalOrder;
469
472
  private handleOrderSalesCheckout;
473
+ private handleOrderSalesDraft;
474
+ private createLocalPaymentOperationId;
475
+ private buildLocalPaymentOrderLogContext;
476
+ private isValidLocalPaymentDecimal;
477
+ private getInvalidLocalPaymentSurchargeFields;
478
+ private buildLocalPaymentSurchargeUpdate;
479
+ private handleGetLocalPayment;
480
+ private handleUpdateLocalPayment;
481
+ private runLocalPaymentUpdateInQueue;
482
+ private processLocalPaymentUpdate;
483
+ private processSuccessfulLocalPayment;
484
+ private sanitizeLocalRecoveryOrder;
470
485
  private handleOrderCheckout;
471
486
  private getDeviceTaskPlugin;
472
487
  private getIdGeneratorPlugin;
@@ -494,6 +509,7 @@ declare class Server {
494
509
  private syncMachinecodeRedeemStatusToLocalOrder;
495
510
  private handleOrderCheckoutSubmit;
496
511
  private handleSyncCheckoutSubmit;
512
+ private handleOrderDraftSubmit;
497
513
  private handlePendingSyncCheckoutOrder;
498
514
  private buildPendingSyncCheckoutOrder;
499
515
  private shouldBuildSmallTicketData;