@pisell/pisellos 2.2.215 → 2.2.217

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.
@@ -63,10 +63,47 @@ function preserveManualProductDiscountProducts(previousProducts, nextProducts) {
63
63
  return previous && isBaseSalesManualProductDiscountProduct(previous) ? previous : product;
64
64
  });
65
65
  }
66
+ function getBaseSalesUniqueArrayMetadataKey(key) {
67
+ if (key === 'products' || key === 'bookings') return 'unique_identification_number';
68
+ if (key === 'payments' || key === 'payment') return 'unique_payment_number';
69
+ return null;
70
+ }
71
+ function getBaseSalesMetadataUid(item, metadataKey) {
72
+ var _item$metadata$metada, _item$metadata;
73
+ var uid = (_item$metadata$metada = item === null || item === void 0 || (_item$metadata = item.metadata) === null || _item$metadata === void 0 ? void 0 : _item$metadata[metadataKey]) !== null && _item$metadata$metada !== void 0 ? _item$metadata$metada : item === null || item === void 0 ? void 0 : item[metadataKey];
74
+ if (uid === undefined || uid === null || uid === '') return null;
75
+ return String(uid);
76
+ }
77
+ function mergeBaseSalesUniqueArray(currentValue, loadedValue, metadataKey) {
78
+ var result = [];
79
+ var indexByUid = new Map();
80
+ var appendOrReplaceByUid = function appendOrReplaceByUid(item) {
81
+ var clonedItem = cloneDeep(item);
82
+ var uid = getBaseSalesMetadataUid(clonedItem, metadataKey);
83
+ if (!uid) {
84
+ result.push(clonedItem);
85
+ return;
86
+ }
87
+ var existingIndex = indexByUid.get(uid);
88
+ if (existingIndex !== undefined) {
89
+ result[existingIndex] = clonedItem;
90
+ return;
91
+ }
92
+ indexByUid.set(uid, result.length);
93
+ result.push(clonedItem);
94
+ };
95
+ currentValue.forEach(appendOrReplaceByUid);
96
+ loadedValue.forEach(appendOrReplaceByUid);
97
+ return result;
98
+ }
66
99
  function mergeSalesDetailRecordWithTempOrder(currentTempOrder, loadedRecord) {
67
100
  if (!currentTempOrder) return loadedRecord;
68
- return mergeWith(cloneDeep(currentTempOrder), cloneDeep(loadedRecord || {}), function (currentValue, loadedValue) {
101
+ return mergeWith(cloneDeep(currentTempOrder), cloneDeep(loadedRecord || {}), function (currentValue, loadedValue, key) {
69
102
  if (Array.isArray(currentValue) && Array.isArray(loadedValue)) {
103
+ var metadataKey = getBaseSalesUniqueArrayMetadataKey(key);
104
+ if (metadataKey) {
105
+ return mergeBaseSalesUniqueArray(currentValue, loadedValue, metadataKey);
106
+ }
70
107
  return [].concat(_toConsumableArray(cloneDeep(currentValue)), _toConsumableArray(cloneDeep(loadedValue)));
71
108
  }
72
109
  if (Array.isArray(loadedValue)) return cloneDeep(loadedValue);
@@ -1868,7 +1905,7 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
1868
1905
  }
1869
1906
  throw new Error('BaseSales 解决方案需要 order 模块支持');
1870
1907
  case 2:
1871
- this.store.order.persistTempOrder();
1908
+ // this.store.order.persistTempOrder();
1872
1909
  inferredPaymentStatus = this.getSubmitPaymentStatus(params === null || params === void 0 ? void 0 : params.paymentStatus);
1873
1910
  submitParams = _objectSpread(_objectSpread(_objectSpread(_objectSpread({
1874
1911
  cacheId: this.cacheId,
@@ -1886,7 +1923,7 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
1886
1923
  enhancePayload: params.enhancePayload
1887
1924
  } : {});
1888
1925
  return _context18.abrupt("return", this.store.order.submitTempOrder(submitParams));
1889
- case 6:
1926
+ case 5:
1890
1927
  case "end":
1891
1928
  return _context18.stop();
1892
1929
  }
@@ -311,7 +311,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
311
311
  date: string;
312
312
  status: string;
313
313
  week: string;
314
- weekNum: 0 | 1 | 2 | 3 | 5 | 4 | 6;
314
+ weekNum: 0 | 2 | 1 | 6 | 3 | 4 | 5;
315
315
  }[]>;
316
316
  submitTimeSlot(timeSlots: TimeSliceItem): void;
317
317
  private getScheduleDataByIds;
@@ -391,26 +391,22 @@ export var BookingTicketImpl = /*#__PURE__*/function (_BaseSalesImpl) {
391
391
  country_calling_code: sales === null || sales === void 0 ? void 0 : sales.country_calling_code
392
392
  } : null;
393
393
  selectedCustomer = (_ref = detailCustomer !== null && detailCustomer !== void 0 ? detailCustomer : orderCustomerSnapshot) !== null && _ref !== void 0 ? _ref : protocolCustomer;
394
- if (!(customerModule && selectedCustomer)) {
395
- _context5.next = 17;
396
- break;
394
+ if (customerModule && selectedCustomer) {
395
+ _ref2 = selectedCustomer !== null && selectedCustomer !== void 0 ? selectedCustomer : {}, detailCustomerId = _ref2.id, detailCustomerRest = _objectWithoutProperties(_ref2, _excluded);
396
+ rawId = detailCustomerId !== null && detailCustomerId !== void 0 ? detailCustomerId : '';
397
+ customer = _objectSpread(_objectSpread({}, detailCustomerRest), {}, {
398
+ id: rawId == null ? '' : rawId,
399
+ name: (_selectedCustomer$nam = selectedCustomer === null || selectedCustomer === void 0 ? void 0 : selectedCustomer.name) !== null && _selectedCustomer$nam !== void 0 ? _selectedCustomer$nam : '',
400
+ phone: selectedCustomer === null || selectedCustomer === void 0 ? void 0 : selectedCustomer.phone,
401
+ email: selectedCustomer === null || selectedCustomer === void 0 ? void 0 : selectedCustomer.email,
402
+ country_calling_code: selectedCustomer === null || selectedCustomer === void 0 ? void 0 : selectedCustomer.country_calling_code
403
+ });
404
+ customerModule.setSelectedCustomer(customer);
405
+ this.setOrderCustomer(customer);
406
+ // await this.store.order.saveDraft();
397
407
  }
398
- _ref2 = selectedCustomer !== null && selectedCustomer !== void 0 ? selectedCustomer : {}, detailCustomerId = _ref2.id, detailCustomerRest = _objectWithoutProperties(_ref2, _excluded);
399
- rawId = detailCustomerId !== null && detailCustomerId !== void 0 ? detailCustomerId : '';
400
- customer = _objectSpread(_objectSpread({}, detailCustomerRest), {}, {
401
- id: rawId == null ? '' : rawId,
402
- name: (_selectedCustomer$nam = selectedCustomer === null || selectedCustomer === void 0 ? void 0 : selectedCustomer.name) !== null && _selectedCustomer$nam !== void 0 ? _selectedCustomer$nam : '',
403
- phone: selectedCustomer === null || selectedCustomer === void 0 ? void 0 : selectedCustomer.phone,
404
- email: selectedCustomer === null || selectedCustomer === void 0 ? void 0 : selectedCustomer.email,
405
- country_calling_code: selectedCustomer === null || selectedCustomer === void 0 ? void 0 : selectedCustomer.country_calling_code
406
- });
407
- customerModule.setSelectedCustomer(customer);
408
- this.setOrderCustomer(customer);
409
- _context5.next = 17;
410
- return this.store.order.saveDraft();
411
- case 17:
412
408
  return _context5.abrupt("return", sales);
413
- case 18:
409
+ case 11:
414
410
  case "end":
415
411
  return _context5.stop();
416
412
  }
@@ -809,7 +805,8 @@ export var BookingTicketImpl = /*#__PURE__*/function (_BaseSalesImpl) {
809
805
  throw new Error('refreshSalesDetail: tempOrder.order_id 缺失');
810
806
  case 6:
811
807
  return _context11.abrupt("return", this.loadSalesDetail({
812
- orderId: Number(orderId)
808
+ orderId: Number(orderId),
809
+ merge: true
813
810
  // forceRemote: true,
814
811
  }));
815
812
  case 7:
@@ -0,0 +1,49 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/model/strategy/adapter/promotion/index.ts
30
+ var promotion_exports = {};
31
+ __export(promotion_exports, {
32
+ BUY_X_GET_Y_FREE_STRATEGY: () => import_examples.BUY_X_GET_Y_FREE_STRATEGY,
33
+ PromotionAdapter: () => import_adapter.PromotionAdapter,
34
+ PromotionEvaluator: () => import_evaluator.PromotionEvaluator,
35
+ X_ITEMS_FOR_Y_PRICE_STRATEGY: () => import_examples.X_ITEMS_FOR_Y_PRICE_STRATEGY,
36
+ default: () => import_adapter2.default
37
+ });
38
+ module.exports = __toCommonJS(promotion_exports);
39
+ var import_evaluator = require("./evaluator");
40
+ var import_adapter = require("./adapter");
41
+ var import_adapter2 = __toESM(require("./adapter"));
42
+ var import_examples = require("./examples");
43
+ // Annotate the CommonJS export names for ESM import in node:
44
+ 0 && (module.exports = {
45
+ BUY_X_GET_Y_FREE_STRATEGY,
46
+ PromotionAdapter,
47
+ PromotionEvaluator,
48
+ X_ITEMS_FOR_Y_PRICE_STRATEGY
49
+ });
@@ -334,7 +334,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
334
334
  private logSubmitBackendRejected;
335
335
  syncPaymentsToOrder<T = any>(params: SyncPaymentsToOrderParams): Promise<SyncPaymentsToOrderResult<T>>;
336
336
  createOrder(params: CommitOrderParams['query']): {
337
- type: "appointment_booking" | "virtual";
337
+ type: "virtual" | "appointment_booking";
338
338
  platform: string;
339
339
  sales_channel: string;
340
340
  order_sales_channel: string;
@@ -3031,6 +3031,9 @@ var OrderModule = class extends import_BaseModule.BaseModule {
3031
3031
  if (!lookup) {
3032
3032
  throw new Error("加载销售详情需要 lookup");
3033
3033
  }
3034
+ if (lookup.startsWith("LOCAL_")) {
3035
+ params.forceRemote = false;
3036
+ }
3034
3037
  const res = await this.request.get(`/order/sales/${encodeURIComponent(lookup)}`, {
3035
3038
  with: ["products", "bookings", "payments", "customer", "summary", "contacts_info"],
3036
3039
  ...params.forceRemote ? { forceRemote: true } : {}
@@ -467,7 +467,13 @@ var Server = class {
467
467
  * @example 批量:GET /update/localOrder?order_ids=96971,96972,96973
468
468
  */
469
469
  this.handleUpdateLocalOrder = async ({ url, data }) => {
470
- var _a;
470
+ var _a, _b;
471
+ if (typeof (data == null ? void 0 : data.order_id) === "string" && ((_a = data == null ? void 0 : data.order_id) == null ? void 0 : _a.startsWith("LOCAL_"))) {
472
+ return {
473
+ code: 200,
474
+ status: true
475
+ };
476
+ }
471
477
  const batchIds = this.parseOrderIdsParam(url, data);
472
478
  if (batchIds.length > 0) {
473
479
  return this.handleUpdateLocalOrdersBatch(batchIds);
@@ -483,7 +489,7 @@ var Server = class {
483
489
  this.logError("handleUpdateLocalOrder: Order 模块未注册");
484
490
  return { code: 500, status: false, message: "Order 模块未注册", data: null };
485
491
  }
486
- if (!((_a = this.app) == null ? void 0 : _a.request)) {
492
+ if (!((_b = this.app) == null ? void 0 : _b.request)) {
487
493
  this.logError("handleUpdateLocalOrder: app.request 不可用");
488
494
  return { code: 500, status: false, message: "app.request 不可用", data: null };
489
495
  }
@@ -2545,6 +2551,7 @@ var Server = class {
2545
2551
  return pendingResult;
2546
2552
  }
2547
2553
  async handlePendingSyncCheckoutOrder(params) {
2554
+ var _a, _b, _c, _d;
2548
2555
  const { backendPath, data, title, reason } = params;
2549
2556
  const pendingOrder = await this.buildPendingSyncCheckoutOrder(data);
2550
2557
  if (!pendingOrder) {
@@ -2573,18 +2580,31 @@ var Server = class {
2573
2580
  }
2574
2581
  try {
2575
2582
  await this.order.upsertPendingSyncOrders([pendingOrder]);
2576
- this.logWarning(`${title}: 订单已写入本地待同步`, {
2583
+ this.logInfo(`${title}: 订单已写入本地待同步`, {
2577
2584
  backendPath,
2578
2585
  reason,
2579
2586
  order_id: pendingOrder.order_id,
2580
2587
  external_sale_number: pendingOrder.external_sale_number,
2581
2588
  order_number: pendingOrder.order_number
2582
2589
  });
2590
+ const changeGivenAmount = (_a = pendingOrder == null ? void 0 : pendingOrder.payments) == null ? void 0 : _a.reduce((sum, payment) => {
2591
+ var _a2;
2592
+ return sum + this.toAmountNumber((_a2 = payment == null ? void 0 : payment.metadata) == null ? void 0 : _a2.change_given_amount);
2593
+ }, 0);
2583
2594
  return {
2584
2595
  code: 200,
2585
2596
  status: true,
2586
2597
  message: "",
2587
- data: pendingOrder
2598
+ data: {
2599
+ order_id: (pendingOrder == null ? void 0 : pendingOrder.order_id) ?? (pendingOrder == null ? void 0 : pendingOrder.external_sale_number),
2600
+ amount_gap: (_b = pendingOrder == null ? void 0 : pendingOrder.summary) == null ? void 0 : _b.amount_gap,
2601
+ expect_amount: (_c = pendingOrder == null ? void 0 : pendingOrder.summary) == null ? void 0 : _c.expect_amount,
2602
+ total_amount: (_d = pendingOrder == null ? void 0 : pendingOrder.summary) == null ? void 0 : _d.total_amount,
2603
+ payment_status: pendingOrder == null ? void 0 : pendingOrder.payment_status,
2604
+ payment_info: {
2605
+ current_change_given_amount: changeGivenAmount
2606
+ }
2607
+ }
2588
2608
  };
2589
2609
  } catch (error) {
2590
2610
  const errorMessage = error instanceof Error ? error.message : String(error);
@@ -43,6 +43,7 @@ export declare class OrderModule extends BaseModule implements Module {
43
43
  * @param metadata 日志元数据
44
44
  */
45
45
  private logError;
46
+ private logWarning;
46
47
  /**
47
48
  * 记录订单最近一次 SQLite 写入,供 pubsub 回声去重使用。
48
49
  *
@@ -119,6 +120,9 @@ export declare class OrderModule extends BaseModule implements Module {
119
120
  getRoutes(): RouteDefinition[];
120
121
  destroy(): void;
121
122
  private syncOrdersMap;
123
+ private getOrderMapKey;
124
+ private isBlankIdentityValue;
125
+ private getOrderIdentityEntries;
122
126
  private getOrderIdentityKeys;
123
127
  private extractResourceIds;
124
128
  private getOrderDateKey;
@@ -182,6 +186,15 @@ export declare class OrderModule extends BaseModule implements Module {
182
186
  * // => 'S-1001'
183
187
  */
184
188
  private getOrderStorageKey;
189
+ private getOrderIdentityMatchKeys;
190
+ private doOrdersShareIdentity;
191
+ private findOrderIndexByIdentity;
192
+ private getOrderCompletenessScore;
193
+ private pickPreferredOrder;
194
+ private mergeOrderRecords;
195
+ private summarizeDuplicateOrders;
196
+ private logDuplicateOrders;
197
+ private compactOrderListByIdentity;
185
198
  /**
186
199
  * 当前订单拉取窗口:
187
200
  * - 优先使用 createdAtQuery.sales_time_between(已按营业日边界初始化)