@pisell/pisellos 2.2.261 → 2.2.263

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 (134) hide show
  1. package/dist/model/strategy/adapter/dataVariant/adapter.d.ts +50 -0
  2. package/dist/model/strategy/adapter/dataVariant/adapter.js +167 -0
  3. package/dist/model/strategy/adapter/dataVariant/evaluator.d.ts +89 -0
  4. package/dist/model/strategy/adapter/dataVariant/evaluator.js +780 -0
  5. package/dist/model/strategy/adapter/dataVariant/examples.d.ts +39 -0
  6. package/dist/model/strategy/adapter/dataVariant/examples.js +277 -0
  7. package/dist/model/strategy/adapter/dataVariant/index.d.ts +4 -0
  8. package/dist/model/strategy/adapter/dataVariant/index.js +4 -0
  9. package/dist/model/strategy/adapter/dataVariant/type.d.ts +148 -0
  10. package/dist/model/strategy/adapter/dataVariant/type.js +54 -0
  11. package/dist/model/strategy/adapter/index.d.ts +4 -0
  12. package/dist/model/strategy/adapter/index.js +5 -1
  13. package/dist/model/strategy/adapter/promotion/adapter.d.ts +0 -4
  14. package/dist/model/strategy/adapter/promotion/adapter.js +0 -23
  15. package/dist/model/strategy/adapter/promotion/evaluator.d.ts +0 -17
  16. package/dist/model/strategy/adapter/promotion/evaluator.js +6 -279
  17. package/dist/model/strategy/adapter/promotion/examples.d.ts +0 -86
  18. package/dist/model/strategy/adapter/promotion/examples.js +0 -99
  19. package/dist/model/strategy/adapter/promotion/index.d.ts +1 -1
  20. package/dist/model/strategy/adapter/promotion/index.js +1 -1
  21. package/dist/model/strategy/adapter/promotion/type.d.ts +2 -90
  22. package/dist/model/strategy/adapter/promotion/type.js +0 -45
  23. package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +16 -10
  24. package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +2 -1
  25. package/dist/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +1 -1
  26. package/dist/modules/BookingContext/utils/cacheItemToBookingInput.js +32 -1
  27. package/dist/modules/Discount/index.d.ts +5 -2
  28. package/dist/modules/Discount/index.js +30 -7
  29. package/dist/modules/Discount/types.d.ts +4 -0
  30. package/dist/modules/Order/index.d.ts +14 -2
  31. package/dist/modules/Order/index.js +1035 -736
  32. package/dist/modules/Order/types.d.ts +16 -0
  33. package/dist/modules/Order/utils/orderCollectionIdentity.d.ts +53 -0
  34. package/dist/modules/Order/utils/orderCollectionIdentity.js +405 -0
  35. package/dist/modules/Order/utils.d.ts +4 -3
  36. package/dist/modules/Order/utils.js +54 -61
  37. package/dist/modules/Product/types.d.ts +22 -0
  38. package/dist/modules/ProductList/index.d.ts +1 -1
  39. package/dist/modules/ProductList/index.js +4 -2
  40. package/dist/modules/ProductList/types.d.ts +2 -0
  41. package/dist/modules/Rules/index.d.ts +2 -9
  42. package/dist/modules/Rules/index.js +69 -43
  43. package/dist/modules/Rules/types.d.ts +10 -1
  44. package/dist/server/index.d.ts +55 -0
  45. package/dist/server/index.js +1173 -753
  46. package/dist/server/modules/order/index.d.ts +10 -4
  47. package/dist/server/modules/order/index.js +404 -399
  48. package/dist/server/modules/order/types.d.ts +4 -0
  49. package/dist/server/modules/products/index.d.ts +31 -8
  50. package/dist/server/modules/products/index.js +549 -390
  51. package/dist/server/modules/products/types.d.ts +18 -0
  52. package/dist/solution/BaseSales/index.d.ts +21 -1
  53. package/dist/solution/BaseSales/index.js +1136 -789
  54. package/dist/solution/BaseSales/types.d.ts +6 -1
  55. package/dist/solution/BaseSales/types.js +1 -1
  56. package/dist/solution/BaseSales/utils/cartPromotion.d.ts +1 -3
  57. package/dist/solution/BaseSales/utils/cartPromotion.js +48 -81
  58. package/dist/solution/BaseSales/utils/parseSalesResponse.d.ts +3 -3
  59. package/dist/solution/BaseSales/utils/parseSalesResponse.js +6 -8
  60. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +14 -1
  61. package/dist/solution/BookingByStep/index.d.ts +1 -1
  62. package/dist/solution/BookingTicket/index.d.ts +1 -1
  63. package/dist/solution/BookingTicket/index.js +59 -25
  64. package/dist/solution/BookingTicket/types.d.ts +2 -0
  65. package/dist/solution/ScanOrder/index.js +20 -31
  66. package/dist/solution/ShopDiscount/index.js +15 -14
  67. package/dist/solution/VenueBooking/index.js +19 -30
  68. package/lib/model/strategy/adapter/dataVariant/adapter.d.ts +50 -0
  69. package/lib/model/strategy/adapter/dataVariant/adapter.js +149 -0
  70. package/lib/model/strategy/adapter/dataVariant/evaluator.d.ts +89 -0
  71. package/lib/model/strategy/adapter/dataVariant/evaluator.js +583 -0
  72. package/lib/model/strategy/adapter/dataVariant/examples.d.ts +39 -0
  73. package/lib/model/strategy/adapter/dataVariant/examples.js +293 -0
  74. package/lib/model/strategy/adapter/dataVariant/index.d.ts +4 -0
  75. package/lib/model/strategy/adapter/dataVariant/index.js +38 -0
  76. package/lib/model/strategy/adapter/dataVariant/type.d.ts +148 -0
  77. package/lib/model/strategy/adapter/dataVariant/type.js +31 -0
  78. package/lib/model/strategy/adapter/index.d.ts +4 -0
  79. package/lib/model/strategy/adapter/index.js +13 -2
  80. package/lib/model/strategy/adapter/promotion/adapter.d.ts +0 -4
  81. package/lib/model/strategy/adapter/promotion/adapter.js +0 -20
  82. package/lib/model/strategy/adapter/promotion/evaluator.d.ts +0 -17
  83. package/lib/model/strategy/adapter/promotion/evaluator.js +0 -235
  84. package/lib/model/strategy/adapter/promotion/examples.d.ts +0 -86
  85. package/lib/model/strategy/adapter/promotion/examples.js +0 -91
  86. package/lib/model/strategy/adapter/promotion/index.d.ts +1 -1
  87. package/lib/model/strategy/adapter/promotion/index.js +0 -51
  88. package/lib/model/strategy/adapter/promotion/type.d.ts +2 -90
  89. package/lib/model/strategy/adapter/promotion/type.js +0 -2
  90. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +5 -0
  91. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +1 -0
  92. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +1 -1
  93. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +23 -2
  94. package/lib/modules/Discount/index.d.ts +5 -2
  95. package/lib/modules/Discount/index.js +23 -3
  96. package/lib/modules/Discount/types.d.ts +4 -0
  97. package/lib/modules/Order/index.d.ts +14 -2
  98. package/lib/modules/Order/index.js +326 -60
  99. package/lib/modules/Order/types.d.ts +16 -0
  100. package/lib/modules/Order/utils/orderCollectionIdentity.d.ts +53 -0
  101. package/lib/modules/Order/utils/orderCollectionIdentity.js +415 -0
  102. package/lib/modules/Order/utils.d.ts +4 -3
  103. package/lib/modules/Order/utils.js +22 -23
  104. package/lib/modules/Product/types.d.ts +22 -0
  105. package/lib/modules/ProductList/index.d.ts +1 -1
  106. package/lib/modules/ProductList/index.js +4 -2
  107. package/lib/modules/ProductList/types.d.ts +2 -0
  108. package/lib/modules/Rules/index.d.ts +2 -9
  109. package/lib/modules/Rules/index.js +61 -29
  110. package/lib/modules/Rules/types.d.ts +10 -1
  111. package/lib/server/index.d.ts +55 -0
  112. package/lib/server/index.js +332 -34
  113. package/lib/server/modules/order/index.d.ts +10 -4
  114. package/lib/server/modules/order/index.js +198 -139
  115. package/lib/server/modules/order/types.d.ts +4 -0
  116. package/lib/server/modules/products/index.d.ts +31 -8
  117. package/lib/server/modules/products/index.js +134 -35
  118. package/lib/server/modules/products/types.d.ts +18 -0
  119. package/lib/solution/BaseSales/index.d.ts +21 -1
  120. package/lib/solution/BaseSales/index.js +313 -72
  121. package/lib/solution/BaseSales/types.d.ts +6 -1
  122. package/lib/solution/BaseSales/utils/cartPromotion.d.ts +1 -3
  123. package/lib/solution/BaseSales/utils/cartPromotion.js +29 -60
  124. package/lib/solution/BaseSales/utils/parseSalesResponse.d.ts +3 -3
  125. package/lib/solution/BaseSales/utils/parseSalesResponse.js +4 -5
  126. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +8 -0
  127. package/lib/solution/BookingByStep/index.d.ts +1 -1
  128. package/lib/solution/BookingTicket/index.d.ts +1 -1
  129. package/lib/solution/BookingTicket/index.js +33 -8
  130. package/lib/solution/BookingTicket/types.d.ts +2 -0
  131. package/lib/solution/ScanOrder/index.js +0 -8
  132. package/lib/solution/ShopDiscount/index.js +2 -1
  133. package/lib/solution/VenueBooking/index.js +0 -8
  134. package/package.json +1 -1
@@ -136,6 +136,9 @@ function resolveProductTitle(product, booking, sourceProduct) {
136
136
  const metadata = product.metadata || {};
137
137
  return (sourceProduct == null ? void 0 : sourceProduct.title) ?? (sourceProduct == null ? void 0 : sourceProduct.name) ?? metadata.product_title ?? metadata.product_name ?? ((_a = booking == null ? void 0 : booking.product) == null ? void 0 : _a.title) ?? ((_b = booking == null ? void 0 : booking.detail) == null ? void 0 : _b.product_title) ?? "";
138
138
  }
139
+ function resolveProductCover(product, booking, sourceProduct) {
140
+ return (sourceProduct == null ? void 0 : sourceProduct.cover) ?? product.product_cover ?? "";
141
+ }
139
142
  function resolveMainProductPrice(product, fallback) {
140
143
  const metadata = product.metadata || {};
141
144
  const value = metadata.main_product_original_price ?? metadata.source_product_price;
@@ -195,6 +198,7 @@ function buildCacheItemFromOrderLine(input) {
195
198
  const capacity = resolveCapacityFromBooking(booking);
196
199
  const holderId = ((_a = booking.metadata) == null ? void 0 : _a.holder_id) ?? booking.holder_id;
197
200
  const productTitle = resolveProductTitle(product, booking, sourceProduct);
201
+ const productCover = resolveProductCover(product, booking, sourceProduct);
198
202
  const productOptionString = (0, import_orderLineDisplay.buildProductOptionStringFromOrderLine)(product);
199
203
  const other = {
200
204
  product_variant_id: product.product_variant_id ?? 0,
@@ -214,6 +218,7 @@ function buildCacheItemFromOrderLine(input) {
214
218
  sub_type: booking.sub_type,
215
219
  quantity: product.num ?? 1,
216
220
  product_name: productTitle,
221
+ product_cover: productCover,
217
222
  note: product.note ?? ((_b = booking == null ? void 0 : booking.detail) == null ? void 0 : _b.note) ?? "",
218
223
  price: mainProductPrice,
219
224
  total: selling,
@@ -136,6 +136,7 @@ function buildNormalProductCacheItemFromOrderLine(input) {
136
136
  product_id: resolvedId,
137
137
  _id: uid,
138
138
  title: (sourceProduct == null ? void 0 : sourceProduct.title) ?? product.product_title ?? "",
139
+ cover: (sourceProduct == null ? void 0 : sourceProduct.cover) ?? product.product_cover ?? "",
139
140
  price: (sourceProduct == null ? void 0 : sourceProduct.price) ?? sourcePrice,
140
141
  selling_price: product.selling_price,
141
142
  original_price: product.original_price,
@@ -48,7 +48,7 @@ export interface BookingResourceInput {
48
48
  capacity?: number;
49
49
  like_status?: string;
50
50
  metadata?: Record<string, any>;
51
- children?: any[];
51
+ children?: BookingResourceInput[];
52
52
  }
53
53
  /** custom / package 人数维度快照,与 info2 `_extend.capacity` / `metadata.capacity` 对齐。 */
54
54
  export interface BookingCapacityMetadataItem {
@@ -88,6 +88,24 @@ function resolveDurationMinutes(value) {
88
88
  const n = Number(value);
89
89
  return Number.isNaN(n) ? void 0 : n;
90
90
  }
91
+ function normalizeChildResource(child, parentFormId) {
92
+ const item = {
93
+ form_id: (child == null ? void 0 : child.form_id) ?? parentFormId,
94
+ relation_type: (child == null ? void 0 : child.relation_type) || "form",
95
+ relation_id: (child == null ? void 0 : child.relation_id) ?? (child == null ? void 0 : child.id),
96
+ capacity: child == null ? void 0 : child.capacity,
97
+ like_status: (child == null ? void 0 : child.like_status) || "common"
98
+ };
99
+ if ((child == null ? void 0 : child.metadata) !== void 0) {
100
+ item.metadata = { ...child.metadata };
101
+ }
102
+ if (Array.isArray(child == null ? void 0 : child.children)) {
103
+ item.children = child.children.map(
104
+ (nestedChild) => normalizeChildResource(nestedChild, item.form_id)
105
+ );
106
+ }
107
+ return item;
108
+ }
91
109
  function flattenResources(cacheItem) {
92
110
  var _a;
93
111
  const resourceMap = ((_a = cacheItem == null ? void 0 : cacheItem._extend) == null ? void 0 : _a.resource) || {};
@@ -107,8 +125,11 @@ function flattenResources(cacheItem) {
107
125
  if ((r == null ? void 0 : r.metadata) !== void 0) {
108
126
  item.metadata = { ...r.metadata };
109
127
  }
110
- if ((r == null ? void 0 : r.children) !== void 0)
111
- item.children = r.children;
128
+ if (Array.isArray(r == null ? void 0 : r.children)) {
129
+ item.children = r.children.map(
130
+ (child) => normalizeChildResource(child, item.form_id)
131
+ );
132
+ }
112
133
  result.push(item);
113
134
  });
114
135
  });
@@ -1,6 +1,6 @@
1
1
  import { Module, PisellCore, ModuleOptions } from '../../types';
2
2
  import { BaseModule } from '../BaseModule';
3
- import { Discount, DiscountModuleAPI, DiscountWithReason } from './types';
3
+ import { Discount, DiscountModuleAPI, DiscountWithReason, DiscountPrepareConfigResult } from './types';
4
4
  export declare class DiscountModule extends BaseModule implements Module, DiscountModuleAPI {
5
5
  protected defaultName: string;
6
6
  protected defaultVersion: string;
@@ -16,15 +16,18 @@ export declare class DiscountModule extends BaseModule implements Module, Discou
16
16
  getDiscountList(): Discount[];
17
17
  setOriginalDiscountList(originalDiscountList: Discount[]): Promise<void>;
18
18
  getOriginalDiscountList(): Discount[];
19
+ private normalizePositiveNumberIds;
19
20
  loadPrepareConfig(params: {
20
21
  action?: 'create' | 'edit';
21
22
  with_good_pass: 0 | 1;
22
23
  with_discount_card: 0 | 1;
23
24
  customer_id: number;
24
25
  with_wallet_pass_holder: 0 | 1;
26
+ with_available_wallet_flag?: 0 | 1;
27
+ with_available_wallet_pass_flag?: 0 | 1;
25
28
  request_timezone: string;
26
29
  order_id?: number | string;
27
- }): Promise<Discount[]>;
30
+ }): Promise<DiscountPrepareConfigResult>;
28
31
  batchSearch(code: string, options?: {
29
32
  customerId?: number;
30
33
  orderId?: number;
@@ -91,23 +91,43 @@ var DiscountModule = class extends import_BaseModule.BaseModule {
91
91
  getOriginalDiscountList() {
92
92
  return this.store.originalDiscountList || [];
93
93
  }
94
+ normalizePositiveNumberIds(values) {
95
+ const ids = values.map((value) => Number(value)).filter((value) => Number.isFinite(value) && value > 0);
96
+ return Array.from(new Set(ids));
97
+ }
94
98
  async loadPrepareConfig(params) {
95
- var _a, _b;
99
+ var _a, _b, _c, _d, _e;
96
100
  if (typeof params.order_id === "string" && params.order_id.startsWith("LOCAL_")) {
97
101
  params.order_id = void 0;
98
102
  }
99
103
  const prepareConfig = await this.request.post(
100
104
  `/order/prepare/config`,
101
- params
105
+ {
106
+ ...params,
107
+ with_available_wallet_flag: params.with_available_wallet_flag ?? 1,
108
+ with_available_wallet_pass_flag: params.with_available_wallet_pass_flag ?? 1
109
+ }
102
110
  );
103
111
  const rawDiscountList = [
104
112
  ...((_a = prepareConfig == null ? void 0 : prepareConfig.data) == null ? void 0 : _a.good_pass_list) || [],
105
113
  ...((_b = prepareConfig == null ? void 0 : prepareConfig.data) == null ? void 0 : _b.discount_card_list) || []
106
114
  ];
115
+ const availableWalletList = [
116
+ ...((_c = prepareConfig == null ? void 0 : prepareConfig.data) == null ? void 0 : _c.avaiable_wallet_list) || [],
117
+ ...((_d = prepareConfig == null ? void 0 : prepareConfig.data) == null ? void 0 : _d.available_wallet_list) || []
118
+ ];
119
+ const availableWalletPassList = ((_e = prepareConfig == null ? void 0 : prepareConfig.data) == null ? void 0 : _e.available_wallet_pass_list) || [];
120
+ const availableWalletIds = this.normalizePositiveNumberIds([
121
+ ...availableWalletList.map((item) => item == null ? void 0 : item.wallet_id),
122
+ ...availableWalletPassList.map((item) => item == null ? void 0 : item.product_id)
123
+ ]);
107
124
  const goodPassList = this.filterEnabledDiscountList(
108
125
  rawDiscountList
109
126
  ) || [];
110
- return goodPassList;
127
+ return {
128
+ discountList: goodPassList,
129
+ availableWalletIds
130
+ };
111
131
  }
112
132
  async batchSearch(code, options) {
113
133
  const { customerId, orderId } = options || {};
@@ -68,6 +68,10 @@ export interface DiscountWithReason {
68
68
  discountList: Discount[];
69
69
  unavailableReasonKey: DiscountFilterRejectKey | null;
70
70
  }
71
+ export interface DiscountPrepareConfigResult {
72
+ discountList: Discount[];
73
+ availableWalletIds: number[];
74
+ }
71
75
  interface ExtensionData {
72
76
  id: number;
73
77
  shop_id: number;
@@ -75,6 +75,8 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
75
75
  apply?: boolean;
76
76
  }): Promise<Discount[]>;
77
77
  getDiscountList(): Discount[];
78
+ getAvailableWalletIds(): number[];
79
+ private syncScannedDiscountsToOriginalDiscountList;
78
80
  private ensureEditDiscountConfigForProductChange;
79
81
  scanCode(code: string, customerId?: number): Promise<{
80
82
  isAvailable: boolean;
@@ -84,7 +86,9 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
84
86
  unavailableReasonKey?: string | null;
85
87
  scannedDiscountList?: Discount[];
86
88
  }>;
87
- applyDiscount(): void;
89
+ applyDiscount(options?: {
90
+ reapplyBookingDiscountProductUids?: string[];
91
+ }): void;
88
92
  /**
89
93
  * 注入促销评估器。
90
94
  *
@@ -152,6 +156,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
152
156
  private extractOrderIdFromSubmitResult;
153
157
  private calculatePaymentEffectiveAmount;
154
158
  private calculatePaymentTotal;
159
+ private calculateOrderPaidPaymentTotal;
155
160
  private getDepositAmount;
156
161
  private normalizeDepositAmount;
157
162
  private getLastOrderDepositSnapshot;
@@ -180,6 +185,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
180
185
  private calculatePaidPaymentSummary;
181
186
  private calculatePaymentServiceFee;
182
187
  private calculatePaymentGapAmount;
188
+ private calculatePaymentOrderAmount;
183
189
  private calculatePaymentRoundingAmount;
184
190
  private formatSummaryMetadataMoney;
185
191
  private syncSummaryProductMetadata;
@@ -274,6 +280,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
274
280
  updateTempOrderContactsInfo(contactsInfo: Record<string, any> | null): Record<string, any> | null;
275
281
  private buildTempOrderCustomer;
276
282
  private isCustomerBoundDiscount;
283
+ private shouldKeepCustomerBoundDiscountAfterCustomerChange;
277
284
  private productHasCustomerBoundDiscount;
278
285
  private shouldSkipDiscountCalculation;
279
286
  private clearCustomerBoundDiscounts;
@@ -461,7 +468,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
461
468
  generateIdempotencyToken(): string;
462
469
  syncPaymentsToOrder<T = any>(params: SyncPaymentsToOrderParams): Promise<SyncPaymentsToOrderResult<T>>;
463
470
  createOrder(params: CommitOrderParams['query']): {
464
- type: "appointment_booking" | "virtual";
471
+ type: "virtual" | "appointment_booking";
465
472
  platform: string;
466
473
  sales_channel: string;
467
474
  order_sales_channel: string;
@@ -518,6 +525,11 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
518
525
  * this.normalizeHydratedBookingHolder({ metadata: { holder: { form_record: [1] } } });
519
526
  */
520
527
  private normalizeHydratedBookingHolder;
528
+ /**
529
+ * 匿名 booking 没有服务端行 ID 时,商品侧已有的 booking_uid 就是唯一可用的强引用。
530
+ * 在统一规范化生成 UUID 前先复用它;已落库 booking 仍按 schedule_event_id 派生稳定 UID。
531
+ */
532
+ private seedAnonymousBookingUidsFromProducts;
521
533
  private normalizeTempOrderForRuntime;
522
534
  private hydrateLinkedBookingIdentity;
523
535
  private pickHydratedDisplayText;