@pisell/pisellos 2.3.67 → 2.3.69

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 (61) hide show
  1. package/dist/model/strategy/adapter/walletPass/evaluator.js +0 -1
  2. package/dist/model/strategy/adapter/walletPass/utils.js +0 -2
  3. package/dist/modules/BaseModule.d.ts +1 -0
  4. package/dist/modules/BaseModule.js +24 -28
  5. package/dist/modules/Customer/index.d.ts +4 -0
  6. package/dist/modules/Customer/index.js +91 -59
  7. package/dist/modules/Customer/types.d.ts +2 -0
  8. package/dist/modules/Order/index.d.ts +22 -2
  9. package/dist/modules/Order/index.js +313 -142
  10. package/dist/modules/Order/types.d.ts +13 -1
  11. package/dist/modules/Order/utils/orderCollectionIdentity.d.ts +15 -0
  12. package/dist/modules/Order/utils/orderCollectionIdentity.js +75 -0
  13. package/dist/modules/Order/utils.js +0 -1
  14. package/dist/modules/Payment/index.d.ts +4 -0
  15. package/dist/modules/Payment/index.js +14 -4
  16. package/dist/modules/Payment/walletpass.js +52 -18
  17. package/dist/modules/Rules/index.js +46 -31
  18. package/dist/server/index.js +3 -6
  19. package/dist/server/modules/order/index.d.ts +1 -0
  20. package/dist/server/modules/order/index.js +252 -93
  21. package/dist/server/utils/small-ticket.js +2 -1
  22. package/dist/solution/BaseSales/index.d.ts +13 -1
  23. package/dist/solution/BaseSales/index.js +903 -831
  24. package/dist/solution/BaseSales/utils.js +31 -20
  25. package/dist/solution/BookingTicket/index.d.ts +7 -1
  26. package/dist/solution/BookingTicket/index.js +310 -224
  27. package/dist/solution/ScanOrder/utils.js +31 -20
  28. package/dist/solution/UnifiedBookingSales/index.d.ts +25 -0
  29. package/dist/solution/UnifiedBookingSales/index.js +640 -321
  30. package/dist/solution/UnifiedBookingSales/types.d.ts +7 -0
  31. package/lib/model/strategy/adapter/walletPass/evaluator.js +0 -1
  32. package/lib/model/strategy/adapter/walletPass/utils.js +0 -1
  33. package/lib/modules/BaseModule.d.ts +1 -0
  34. package/lib/modules/BaseModule.js +24 -37
  35. package/lib/modules/Customer/index.d.ts +4 -0
  36. package/lib/modules/Customer/index.js +11 -0
  37. package/lib/modules/Customer/types.d.ts +2 -0
  38. package/lib/modules/Order/index.d.ts +22 -2
  39. package/lib/modules/Order/index.js +212 -54
  40. package/lib/modules/Order/types.d.ts +13 -1
  41. package/lib/modules/Order/utils/orderCollectionIdentity.d.ts +15 -0
  42. package/lib/modules/Order/utils/orderCollectionIdentity.js +70 -0
  43. package/lib/modules/Order/utils.js +0 -1
  44. package/lib/modules/Payment/index.d.ts +4 -0
  45. package/lib/modules/Payment/index.js +7 -0
  46. package/lib/modules/Payment/walletpass.js +27 -2
  47. package/lib/modules/Rules/index.js +17 -1
  48. package/lib/server/index.js +3 -6
  49. package/lib/server/modules/order/index.d.ts +1 -0
  50. package/lib/server/modules/order/index.js +66 -2
  51. package/lib/server/utils/small-ticket.js +1 -1
  52. package/lib/solution/BaseSales/index.d.ts +13 -1
  53. package/lib/solution/BaseSales/index.js +61 -18
  54. package/lib/solution/BaseSales/utils.js +29 -18
  55. package/lib/solution/BookingTicket/index.d.ts +7 -1
  56. package/lib/solution/BookingTicket/index.js +65 -14
  57. package/lib/solution/ScanOrder/utils.js +29 -18
  58. package/lib/solution/UnifiedBookingSales/index.d.ts +25 -0
  59. package/lib/solution/UnifiedBookingSales/index.js +188 -0
  60. package/lib/solution/UnifiedBookingSales/types.d.ts +7 -0
  61. package/package.json +1 -1
@@ -41,6 +41,7 @@ import { getOrderPaymentIdentityKeys, isIdentifiedPendingOrderPayment, isPending
41
41
  * SQLite 存储名称
42
42
  */
43
43
  var INDEXDB_STORE_NAME = 'orders';
44
+ var ORDER_STORAGE_KEY_FIELD = '__order_storage_key';
44
45
  var ORDER_LAST_FULL_FETCH_AT_STORAGE_KEY = 'server_order_last_full_fetch_at';
45
46
  var ORDER_LAST_FULL_FETCH_SHOP_ID_STORAGE_KEY = 'server_order_last_full_fetch_shop_id';
46
47
  var ORDER_SYNC_THROTTLE_MS_STORAGE_KEY = 'order_sync_throttle_ms';
@@ -2468,7 +2469,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2468
2469
  value: (function () {
2469
2470
  var _mergeOrdersToStore = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee19(freshOrders, source) {
2470
2471
  var _this17 = this;
2471
- var storeOrderCountBefore, normalizedFreshOrders, incomingProductsHaveStableIdentity, _iterator14, _step14, order, id, rawProducts, _incomingProductsHave, allProductsHaveStableIdentity, orderIdKey, uniqueFreshOrders, uniqueFreshCount, patchedOrders, remoteProductMembershipChanges, forceWriteStorageKeys, mergeActions, existingProductsHaveStableIdentity, updatedList, identityKeyToIndex, index, identityKeys, _iterator15, _step15, key, _iterator16, _step16, fresh, freshIdentityKeys, matchIndex, storageKey, mergeKey, existingOrder, _ref, _existingOrder$order_, _ref2, _external_sale_number2, _existingOrder$paymen, _fresh$payment_status, _existingOrder$need_s, _fresh$need_sync, _ref3, _existingOrder$order_2, _ref4, _external_sale_number3, _existingOrder$is_dra, _fresh$is_draft_order, mergedOrder, freshOrderId, incomingProductsAreStable, membershipChange, mergedProductsHaveStableIdentity, adjustedMatchIndex, duplicateIndexes, _iterator17, _step17, _key2, _duplicateIndex, _iterator18, _step18, duplicateIndex, _index, _iterator19, _step19, _key, mergedStorageKey, insertIndex, insertCount, updateCount;
2472
+ var storeOrderCountBefore, normalizedFreshOrders, incomingProductsHaveStableIdentity, _iterator14, _step14, order, id, rawProducts, _incomingProductsHave, allProductsHaveStableIdentity, orderIdKey, uniqueFreshOrders, uniqueFreshCount, patchedOrders, remoteProductMembershipChanges, forceWriteStorageKeys, storageKeyMigrations, mergeActions, existingProductsHaveStableIdentity, updatedList, identityKeyToIndex, index, identityKeys, _iterator15, _step15, key, _iterator16, _step16, fresh, freshIdentityKeys, matchIndex, storageKey, mergeKey, existingOrder, previousStorageKey, _ref, _existingOrder$order_, _ref2, _external_sale_number2, _existingOrder$paymen, _fresh$payment_status, _existingOrder$need_s, _fresh$need_sync, _ref3, _existingOrder$order_2, _ref4, _external_sale_number3, _existingOrder$is_dra, _fresh$is_draft_order, mergedOrder, freshOrderId, incomingProductsAreStable, membershipChange, mergedProductsHaveStableIdentity, adjustedMatchIndex, duplicateIndexes, _iterator17, _step17, _key2, _duplicateIndex, _iterator18, _step18, duplicateIndex, _index, _iterator19, _step19, _key, nextStorageKey, _ref5, _ref6, _mergedOrder$order_id, mergedStorageKey, insertIndex, insertCount, updateCount;
2472
2473
  return _regeneratorRuntime().wrap(function _callee19$(_context19) {
2473
2474
  while (1) switch (_context19.prev = _context19.next) {
2474
2475
  case 0:
@@ -2525,6 +2526,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2525
2526
  patchedOrders = [];
2526
2527
  remoteProductMembershipChanges = [];
2527
2528
  forceWriteStorageKeys = new Set();
2529
+ storageKeyMigrations = [];
2528
2530
  mergeActions = {};
2529
2531
  existingProductsHaveStableIdentity = this.store.list.map(function (order) {
2530
2532
  return _this17.doProductsHaveStableMembershipIdentity(order.products);
@@ -2551,11 +2553,11 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2551
2553
  }
2552
2554
  }
2553
2555
  _iterator16 = _createForOfIteratorHelper(uniqueFreshOrders);
2554
- _context19.prev = 37;
2556
+ _context19.prev = 38;
2555
2557
  _iterator16.s();
2556
- case 39:
2558
+ case 40:
2557
2559
  if ((_step16 = _iterator16.n()).done) {
2558
- _context19.next = 96;
2560
+ _context19.next = 100;
2559
2561
  break;
2560
2562
  }
2561
2563
  fresh = _step16.value;
@@ -2564,12 +2566,13 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2564
2566
  storageKey = this.getOrderStorageKey(fresh);
2565
2567
  mergeKey = storageKey || (fresh.order_id !== undefined && fresh.order_id !== null ? this.getIdKey(fresh.order_id) : '');
2566
2568
  if (!(matchIndex >= 0)) {
2567
- _context19.next = 88;
2569
+ _context19.next = 92;
2568
2570
  break;
2569
2571
  }
2570
2572
  existingOrder = updatedList[matchIndex];
2573
+ previousStorageKey = this.getPersistedOrderStorageKey(existingOrder);
2571
2574
  if (!(this.isPendingSyncOrder(existingOrder) && this.isRemoteEchoMergeSource(source))) {
2572
- _context19.next = 50;
2575
+ _context19.next = 52;
2573
2576
  break;
2574
2577
  }
2575
2578
  this.logInfo('mergeOrdersToStore-跳过 pending 订单远端覆盖', {
@@ -2582,10 +2585,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2582
2585
  remote_need_sync: (_fresh$need_sync = fresh.need_sync) !== null && _fresh$need_sync !== void 0 ? _fresh$need_sync : null,
2583
2586
  reason: 'protect_pending_sync_order_from_remote_echo'
2584
2587
  });
2585
- return _context19.abrupt("continue", 94);
2586
- case 50:
2588
+ return _context19.abrupt("continue", 98);
2589
+ case 52:
2587
2590
  if (!(this.isDraftOrder(existingOrder) && this.shouldProtectDraftOrderFromIncoming(source))) {
2588
- _context19.next = 53;
2591
+ _context19.next = 55;
2589
2592
  break;
2590
2593
  }
2591
2594
  this.logInfo('mergeOrdersToStore-跳过 draft 订单远端覆盖', {
@@ -2596,8 +2599,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2596
2599
  remote_is_draft_order: (_fresh$is_draft_order = fresh.is_draft_order) !== null && _fresh$is_draft_order !== void 0 ? _fresh$is_draft_order : null,
2597
2600
  reason: 'protect_draft_order_from_remote_echo'
2598
2601
  });
2599
- return _context19.abrupt("continue", 94);
2600
- case 53:
2602
+ return _context19.abrupt("continue", 98);
2603
+ case 55:
2601
2604
  mergedOrder = this.mergeOrderRecords(existingOrder, fresh);
2602
2605
  freshOrderId = fresh.order_id;
2603
2606
  incomingProductsAreStable = freshOrderId !== undefined && freshOrderId !== null && incomingProductsHaveStableIdentity.get(this.getIdKey(freshOrderId)) !== false;
@@ -2609,37 +2612,37 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2609
2612
  adjustedMatchIndex = matchIndex;
2610
2613
  duplicateIndexes = new Set();
2611
2614
  _iterator17 = _createForOfIteratorHelper(freshIdentityKeys);
2612
- _context19.prev = 62;
2615
+ _context19.prev = 64;
2613
2616
  _iterator17.s();
2614
- case 64:
2617
+ case 66:
2615
2618
  if ((_step17 = _iterator17.n()).done) {
2616
- _context19.next = 72;
2619
+ _context19.next = 74;
2617
2620
  break;
2618
2621
  }
2619
2622
  _key2 = _step17.value;
2620
2623
  _duplicateIndex = identityKeyToIndex.get(_key2);
2621
2624
  if (!(_duplicateIndex === undefined || _duplicateIndex === matchIndex)) {
2622
- _context19.next = 69;
2625
+ _context19.next = 71;
2623
2626
  break;
2624
2627
  }
2625
- return _context19.abrupt("continue", 70);
2626
- case 69:
2628
+ return _context19.abrupt("continue", 72);
2629
+ case 71:
2627
2630
  duplicateIndexes.add(_duplicateIndex);
2628
- case 70:
2629
- _context19.next = 64;
2630
- break;
2631
2631
  case 72:
2632
- _context19.next = 77;
2632
+ _context19.next = 66;
2633
2633
  break;
2634
2634
  case 74:
2635
- _context19.prev = 74;
2636
- _context19.t1 = _context19["catch"](62);
2635
+ _context19.next = 79;
2636
+ break;
2637
+ case 76:
2638
+ _context19.prev = 76;
2639
+ _context19.t1 = _context19["catch"](64);
2637
2640
  _iterator17.e(_context19.t1);
2638
- case 77:
2639
- _context19.prev = 77;
2641
+ case 79:
2642
+ _context19.prev = 79;
2640
2643
  _iterator17.f();
2641
- return _context19.finish(77);
2642
- case 80:
2644
+ return _context19.finish(79);
2645
+ case 82:
2643
2646
  if (duplicateIndexes.size > 0) {
2644
2647
  _iterator18 = _createForOfIteratorHelper(_toConsumableArray(duplicateIndexes).sort(function (left, right) {
2645
2648
  return right - left;
@@ -2673,6 +2676,14 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2673
2676
  }
2674
2677
  }
2675
2678
  }
2679
+ nextStorageKey = this.getOrderStorageKey(mergedOrder);
2680
+ if (previousStorageKey && nextStorageKey && previousStorageKey !== nextStorageKey) {
2681
+ storageKeyMigrations.push({
2682
+ orderId: (_ref5 = (_ref6 = (_mergedOrder$order_id = mergedOrder.order_id) !== null && _mergedOrder$order_id !== void 0 ? _mergedOrder$order_id : existingOrder.order_id) !== null && _ref6 !== void 0 ? _ref6 : fresh.order_id) !== null && _ref5 !== void 0 ? _ref5 : null,
2683
+ from: previousStorageKey,
2684
+ to: nextStorageKey
2685
+ });
2686
+ }
2676
2687
  updatedList[adjustedMatchIndex] = mergedOrder;
2677
2688
  existingProductsHaveStableIdentity[adjustedMatchIndex] = mergedProductsHaveStableIdentity;
2678
2689
  if (membershipChange) {
@@ -2685,29 +2696,29 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2685
2696
  this.registerOrderIdentityKeys(identityKeyToIndex, mergedOrder, adjustedMatchIndex);
2686
2697
  patchedOrders.push(mergedOrder);
2687
2698
  if (mergeKey) mergeActions[mergeKey] = 'update';
2688
- return _context19.abrupt("continue", 94);
2689
- case 88:
2699
+ return _context19.abrupt("continue", 98);
2700
+ case 92:
2690
2701
  insertIndex = updatedList.length;
2691
2702
  updatedList.push(fresh);
2692
2703
  existingProductsHaveStableIdentity.push(fresh.order_id !== undefined && fresh.order_id !== null && incomingProductsHaveStableIdentity.get(this.getIdKey(fresh.order_id)) !== false);
2693
2704
  this.registerOrderIdentityKeys(identityKeyToIndex, fresh, insertIndex);
2694
2705
  patchedOrders.push(fresh);
2695
2706
  if (mergeKey) mergeActions[mergeKey] = 'insert';
2696
- case 94:
2697
- _context19.next = 39;
2707
+ case 98:
2708
+ _context19.next = 40;
2698
2709
  break;
2699
- case 96:
2700
- _context19.next = 101;
2710
+ case 100:
2711
+ _context19.next = 105;
2701
2712
  break;
2702
- case 98:
2703
- _context19.prev = 98;
2704
- _context19.t2 = _context19["catch"](37);
2713
+ case 102:
2714
+ _context19.prev = 102;
2715
+ _context19.t2 = _context19["catch"](38);
2705
2716
  _iterator16.e(_context19.t2);
2706
- case 101:
2707
- _context19.prev = 101;
2717
+ case 105:
2718
+ _context19.prev = 105;
2708
2719
  _iterator16.f();
2709
- return _context19.finish(101);
2710
- case 104:
2720
+ return _context19.finish(105);
2721
+ case 108:
2711
2722
  insertCount = Object.values(mergeActions).filter(function (v) {
2712
2723
  return v === 'insert';
2713
2724
  }).length;
@@ -2723,25 +2734,27 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2723
2734
  // 仅在自检开关开启时做一次兜底校验。
2724
2735
  this.store.list = this.runOrderStoreSelfCheck(updatedList, "".concat(source, ".store"));
2725
2736
  this.syncOrdersMap();
2726
- _context19.next = 111;
2727
- return this.patchOrdersInSQLite(patchedOrders, source, mergeActions, {}, forceWriteStorageKeys);
2728
- case 111:
2737
+ _context19.next = 115;
2738
+ return this.patchOrdersInSQLite(patchedOrders, source, mergeActions, {
2739
+ storageKeyMigrations: storageKeyMigrations
2740
+ }, forceWriteStorageKeys);
2741
+ case 115:
2729
2742
  this.logInfo('mergeOrdersToStore-结束', {
2730
2743
  uniqueFreshCount: uniqueFreshCount,
2731
2744
  storeOrderCountAfter: this.store.list.length,
2732
2745
  insertCount: insertCount,
2733
2746
  updateCount: updateCount
2734
2747
  });
2735
- _context19.next = 114;
2748
+ _context19.next = 118;
2736
2749
  return this.emitRemoteProductMembershipChanges(remoteProductMembershipChanges);
2737
- case 114:
2738
- _context19.next = 116;
2750
+ case 118:
2751
+ _context19.next = 120;
2739
2752
  return this.emitOrdersChanged(patchedOrders, source);
2740
- case 116:
2753
+ case 120:
2741
2754
  case "end":
2742
2755
  return _context19.stop();
2743
2756
  }
2744
- }, _callee19, this, [[6, 20, 23, 26], [37, 98, 101, 104], [62, 74, 77, 80]]);
2757
+ }, _callee19, this, [[6, 20, 23, 26], [38, 102, 105, 108], [64, 76, 79, 82]]);
2745
2758
  }));
2746
2759
  function mergeOrdersToStore(_x13, _x14) {
2747
2760
  return _mergeOrdersToStore.apply(this, arguments);
@@ -2824,7 +2837,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2824
2837
  key: "getRemoteProductMembershipChange",
2825
2838
  value: function getRemoteProductMembershipChange(existingOrder, mergedOrder, source) {
2826
2839
  var _this18 = this,
2827
- _mergedOrder$order_id;
2840
+ _mergedOrder$order_id2;
2828
2841
  if (!this.isRemoteProductMembershipChangeSource(source)) return null;
2829
2842
  var previousProducts = Array.isArray(existingOrder.products) ? existingOrder.products : [];
2830
2843
  var currentProducts = Array.isArray(mergedOrder.products) ? mergedOrder.products : [];
@@ -2861,7 +2874,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2861
2874
  if (addedProductKeys.length === 0 && removedProductKeys.length === 0) {
2862
2875
  return null;
2863
2876
  }
2864
- var orderId = (_mergedOrder$order_id = mergedOrder.order_id) !== null && _mergedOrder$order_id !== void 0 ? _mergedOrder$order_id : existingOrder.order_id;
2877
+ var orderId = (_mergedOrder$order_id2 = mergedOrder.order_id) !== null && _mergedOrder$order_id2 !== void 0 ? _mergedOrder$order_id2 : existingOrder.order_id;
2865
2878
  if (orderId === undefined || orderId === null) return null;
2866
2879
  return {
2867
2880
  order_id: orderId,
@@ -3000,6 +3013,15 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3000
3013
  }
3001
3014
  return '';
3002
3015
  }
3016
+ }, {
3017
+ key: "getPersistedOrderStorageKey",
3018
+ value: function getPersistedOrderStorageKey(order) {
3019
+ var persistedStorageKey = order === null || order === void 0 ? void 0 : order[ORDER_STORAGE_KEY_FIELD];
3020
+ if (persistedStorageKey !== undefined && persistedStorageKey !== null && persistedStorageKey !== '') {
3021
+ return String(persistedStorageKey);
3022
+ }
3023
+ return this.getOrderStorageKey(order);
3024
+ }
3003
3025
  }, {
3004
3026
  key: "getOrderIdentityMatchKeys",
3005
3027
  value: function getOrderIdentityMatchKeys(order) {
@@ -3201,10 +3223,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3201
3223
  if (_field2 === 'payments') {
3202
3224
  var preservedPending = this.getUnmatchedIdentifiedPendingPayments(existingRecord[_field2], incomingRecord[_field2]);
3203
3225
  if (preservedPending.length > 0) {
3204
- var _ref5, _existing$order_id, _ref6, _existingRecord$exter;
3226
+ var _ref7, _existing$order_id, _ref8, _existingRecord$exter;
3205
3227
  this.logInfo('mergeOrderRecords-保留本地 pending 支付项', {
3206
- order_id: (_ref5 = (_existing$order_id = existing.order_id) !== null && _existing$order_id !== void 0 ? _existing$order_id : incoming.order_id) !== null && _ref5 !== void 0 ? _ref5 : null,
3207
- external_sale_number: (_ref6 = (_existingRecord$exter = existingRecord.external_sale_number) !== null && _existingRecord$exter !== void 0 ? _existingRecord$exter : incomingRecord.external_sale_number) !== null && _ref6 !== void 0 ? _ref6 : null,
3228
+ order_id: (_ref7 = (_existing$order_id = existing.order_id) !== null && _existing$order_id !== void 0 ? _existing$order_id : incoming.order_id) !== null && _ref7 !== void 0 ? _ref7 : null,
3229
+ external_sale_number: (_ref8 = (_existingRecord$exter = existingRecord.external_sale_number) !== null && _existingRecord$exter !== void 0 ? _existingRecord$exter : incomingRecord.external_sale_number) !== null && _ref8 !== void 0 ? _ref8 : null,
3208
3230
  preserved_pending_count: preservedPending.length,
3209
3231
  preserved_payment_identities: preservedPending.map(function (payment) {
3210
3232
  return getOrderPaymentIdentityKeys(payment);
@@ -3257,14 +3279,14 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3257
3279
  } finally {
3258
3280
  _iterator28.f();
3259
3281
  }
3260
- return _toConsumableArray(groups.entries()).filter(function (_ref7) {
3261
- var _ref8 = _slicedToArray(_ref7, 2),
3262
- group = _ref8[1];
3263
- return group.length > 1;
3264
- }).slice(0, 20).map(function (_ref9) {
3282
+ return _toConsumableArray(groups.entries()).filter(function (_ref9) {
3265
3283
  var _ref10 = _slicedToArray(_ref9, 2),
3266
- key = _ref10[0],
3267
3284
  group = _ref10[1];
3285
+ return group.length > 1;
3286
+ }).slice(0, 20).map(function (_ref11) {
3287
+ var _ref12 = _slicedToArray(_ref11, 2),
3288
+ key = _ref12[0],
3289
+ group = _ref12[1];
3268
3290
  return {
3269
3291
  key: key,
3270
3292
  count: group.length,
@@ -3632,11 +3654,17 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3632
3654
  var mergeActions,
3633
3655
  options,
3634
3656
  forceWriteStorageKeys,
3657
+ migrationTargetStorageKeys,
3635
3658
  ordersSnapshot,
3636
3659
  _this$filterRedundant2,
3637
3660
  toWrite,
3638
3661
  skipped,
3639
3662
  compactedToWrite,
3663
+ writtenStorageKeys,
3664
+ storageKeyMigrations,
3665
+ _iterator32,
3666
+ _step32,
3667
+ migration,
3640
3668
  _args23 = arguments;
3641
3669
  return _regeneratorRuntime().wrap(function _callee23$(_context23) {
3642
3670
  while (1) switch (_context23.prev = _context23.next) {
@@ -3662,35 +3690,83 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3662
3690
  case 8:
3663
3691
  return _context23.abrupt("return");
3664
3692
  case 9:
3693
+ migrationTargetStorageKeys = new Set((options.storageKeyMigrations || []).map(function (migration) {
3694
+ return migration.to;
3695
+ }));
3665
3696
  ordersSnapshot = cloneDeep(orders).map(function (order) {
3666
3697
  return _this23.normalizeOrderCollectionsForIngress(order, "".concat(source, ".sqliteIngress"));
3698
+ }).map(function (order) {
3699
+ var storageKey = _this23.getOrderStorageKey(order);
3700
+ if (!storageKey || !migrationTargetStorageKeys.has(storageKey)) return order;
3701
+ return _objectSpread(_objectSpread({}, order), {}, _defineProperty({}, ORDER_STORAGE_KEY_FIELD, storageKey));
3667
3702
  }).filter(function (order) {
3668
3703
  return _this23.getOrderStorageKey(order);
3669
3704
  });
3670
3705
  if (!(ordersSnapshot.length === 0)) {
3671
- _context23.next = 12;
3706
+ _context23.next = 13;
3672
3707
  break;
3673
3708
  }
3674
3709
  return _context23.abrupt("return");
3675
- case 12:
3710
+ case 13:
3676
3711
  _this$filterRedundant2 = this.filterRedundantPatchOrders(source, ordersSnapshot, mergeActions, forceWriteStorageKeys), toWrite = _this$filterRedundant2.toWrite, skipped = _this$filterRedundant2.skipped;
3677
3712
  if (!(toWrite.length === 0)) {
3678
- _context23.next = 15;
3713
+ _context23.next = 16;
3679
3714
  break;
3680
3715
  }
3681
3716
  return _context23.abrupt("return");
3682
- case 15:
3717
+ case 16:
3683
3718
  compactedToWrite = this.compactOrderListByIdentity(toWrite, "".concat(source, ".sqlitePatch")).list;
3684
3719
  if (!(compactedToWrite.length === 0)) {
3685
- _context23.next = 18;
3720
+ _context23.next = 19;
3686
3721
  break;
3687
3722
  }
3688
3723
  return _context23.abrupt("return");
3689
- case 18:
3690
- _context23.prev = 18;
3691
- _context23.next = 21;
3724
+ case 19:
3725
+ writtenStorageKeys = new Set(compactedToWrite.map(function (order) {
3726
+ return _this23.getOrderStorageKey(order);
3727
+ }).filter(Boolean));
3728
+ storageKeyMigrations = new Map();
3729
+ _iterator32 = _createForOfIteratorHelper(options.storageKeyMigrations || []);
3730
+ _context23.prev = 22;
3731
+ _iterator32.s();
3732
+ case 24:
3733
+ if ((_step32 = _iterator32.n()).done) {
3734
+ _context23.next = 33;
3735
+ break;
3736
+ }
3737
+ migration = _step32.value;
3738
+ if (writtenStorageKeys.has(migration.to)) {
3739
+ _context23.next = 28;
3740
+ break;
3741
+ }
3742
+ return _context23.abrupt("continue", 31);
3743
+ case 28:
3744
+ if (!writtenStorageKeys.has(migration.from)) {
3745
+ _context23.next = 30;
3746
+ break;
3747
+ }
3748
+ return _context23.abrupt("continue", 31);
3749
+ case 30:
3750
+ storageKeyMigrations.set(migration.from, migration);
3751
+ case 31:
3752
+ _context23.next = 24;
3753
+ break;
3754
+ case 33:
3755
+ _context23.next = 38;
3756
+ break;
3757
+ case 35:
3758
+ _context23.prev = 35;
3759
+ _context23.t0 = _context23["catch"](22);
3760
+ _iterator32.e(_context23.t0);
3761
+ case 38:
3762
+ _context23.prev = 38;
3763
+ _iterator32.f();
3764
+ return _context23.finish(38);
3765
+ case 41:
3766
+ _context23.prev = 41;
3767
+ _context23.next = 44;
3692
3768
  return this.runInOrderSQLiteSaveQueue( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee22() {
3693
- var writeMethod, _iterator32, _step32, order;
3769
+ var writeMethod, _iterator33, _step33, order, _iterator34, _step34, migration, _iterator35, _step35, _orderRecord$ORDER_ST, _order, orderRecord;
3694
3770
  return _regeneratorRuntime().wrap(function _callee22$(_context22) {
3695
3771
  while (1) switch (_context22.prev = _context22.next) {
3696
3772
  case 0:
@@ -3727,15 +3803,15 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3727
3803
  break;
3728
3804
  }
3729
3805
  writeMethod = 'update';
3730
- _iterator32 = _createForOfIteratorHelper(compactedToWrite);
3806
+ _iterator33 = _createForOfIteratorHelper(compactedToWrite);
3731
3807
  _context22.prev = 17;
3732
- _iterator32.s();
3808
+ _iterator33.s();
3733
3809
  case 19:
3734
- if ((_step32 = _iterator32.n()).done) {
3810
+ if ((_step33 = _iterator33.n()).done) {
3735
3811
  _context22.next = 25;
3736
3812
  break;
3737
3813
  }
3738
- order = _step32.value;
3814
+ order = _step33.value;
3739
3815
  _context22.next = 23;
3740
3816
  return _this23.dbManager.update(INDEXDB_STORE_NAME, order);
3741
3817
  case 23:
@@ -3747,10 +3823,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3747
3823
  case 27:
3748
3824
  _context22.prev = 27;
3749
3825
  _context22.t0 = _context22["catch"](17);
3750
- _iterator32.e(_context22.t0);
3826
+ _iterator33.e(_context22.t0);
3751
3827
  case 30:
3752
3828
  _context22.prev = 30;
3753
- _iterator32.f();
3829
+ _iterator33.f();
3754
3830
  return _context22.finish(30);
3755
3831
  case 33:
3756
3832
  _context22.next = 37;
@@ -3763,38 +3839,121 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3763
3839
  throw new Error('订单 SQLite 数据库不支持写入');
3764
3840
  case 37:
3765
3841
  _this23.recordRecentSqliteWrite(source, compactedToWrite);
3842
+ if (!(writeMethod !== 'none')) {
3843
+ _context22.next = 84;
3844
+ break;
3845
+ }
3846
+ _iterator34 = _createForOfIteratorHelper(storageKeyMigrations.values());
3847
+ _context22.prev = 40;
3848
+ _iterator34.s();
3849
+ case 42:
3850
+ if ((_step34 = _iterator34.n()).done) {
3851
+ _context22.next = 76;
3852
+ break;
3853
+ }
3854
+ migration = _step34.value;
3855
+ _context22.prev = 44;
3856
+ _context22.next = 47;
3857
+ return _this23.dbManager.delete(INDEXDB_STORE_NAME, migration.from);
3858
+ case 47:
3859
+ _this23.recentSqliteWriteByStorageKey.delete(migration.from);
3860
+ _iterator35 = _createForOfIteratorHelper(orders);
3861
+ _context22.prev = 49;
3862
+ _iterator35.s();
3863
+ case 51:
3864
+ if ((_step35 = _iterator35.n()).done) {
3865
+ _context22.next = 61;
3866
+ break;
3867
+ }
3868
+ _order = _step35.value;
3869
+ if (!(_this23.getOrderStorageKey(_order) !== migration.to)) {
3870
+ _context22.next = 55;
3871
+ break;
3872
+ }
3873
+ return _context22.abrupt("continue", 59);
3874
+ case 55:
3875
+ orderRecord = _order;
3876
+ if (!(String((_orderRecord$ORDER_ST = orderRecord[ORDER_STORAGE_KEY_FIELD]) !== null && _orderRecord$ORDER_ST !== void 0 ? _orderRecord$ORDER_ST : '') !== migration.from)) {
3877
+ _context22.next = 58;
3878
+ break;
3879
+ }
3880
+ return _context22.abrupt("continue", 59);
3881
+ case 58:
3882
+ orderRecord[ORDER_STORAGE_KEY_FIELD] = migration.to;
3883
+ case 59:
3884
+ _context22.next = 51;
3885
+ break;
3886
+ case 61:
3887
+ _context22.next = 66;
3888
+ break;
3889
+ case 63:
3890
+ _context22.prev = 63;
3891
+ _context22.t1 = _context22["catch"](49);
3892
+ _iterator35.e(_context22.t1);
3893
+ case 66:
3894
+ _context22.prev = 66;
3895
+ _iterator35.f();
3896
+ return _context22.finish(66);
3897
+ case 69:
3898
+ _context22.next = 74;
3899
+ break;
3900
+ case 71:
3901
+ _context22.prev = 71;
3902
+ _context22.t2 = _context22["catch"](44);
3903
+ _this23.logError('删除订单旧 SQLite storage key 失败', {
3904
+ source: source,
3905
+ order_id: migration.orderId,
3906
+ oldStorageKey: migration.from,
3907
+ newStorageKey: migration.to,
3908
+ error: _context22.t2 instanceof Error ? _context22.t2.message : String(_context22.t2)
3909
+ });
3910
+ case 74:
3911
+ _context22.next = 42;
3912
+ break;
3913
+ case 76:
3914
+ _context22.next = 81;
3915
+ break;
3916
+ case 78:
3917
+ _context22.prev = 78;
3918
+ _context22.t3 = _context22["catch"](40);
3919
+ _iterator34.e(_context22.t3);
3920
+ case 81:
3921
+ _context22.prev = 81;
3922
+ _iterator34.f();
3923
+ return _context22.finish(81);
3924
+ case 84:
3766
3925
  _this23.logInfo('patchOrdersInSQLite-完成', {
3767
3926
  source: source,
3768
3927
  count: compactedToWrite.length,
3769
3928
  writeMethod: writeMethod,
3770
3929
  dedupedCount: skipped.length
3771
3930
  });
3772
- case 39:
3931
+ case 85:
3773
3932
  case "end":
3774
3933
  return _context22.stop();
3775
3934
  }
3776
- }, _callee22, null, [[17, 27, 30, 33]]);
3935
+ }, _callee22, null, [[17, 27, 30, 33], [40, 78, 81, 84], [44, 71], [49, 63, 66, 69]]);
3777
3936
  })));
3778
- case 21:
3779
- _context23.next = 28;
3937
+ case 44:
3938
+ _context23.next = 51;
3780
3939
  break;
3781
- case 23:
3782
- _context23.prev = 23;
3783
- _context23.t0 = _context23["catch"](18);
3940
+ case 46:
3941
+ _context23.prev = 46;
3942
+ _context23.t1 = _context23["catch"](41);
3784
3943
  this.logError('增量保存订单到 SQLite 失败', {
3785
- error: _context23.t0 instanceof Error ? _context23.t0.message : String(_context23.t0),
3944
+ error: _context23.t1 instanceof Error ? _context23.t1.message : String(_context23.t1),
3786
3945
  orderCount: ordersSnapshot.length
3787
3946
  });
3788
3947
  if (!options.throwOnError) {
3789
- _context23.next = 28;
3948
+ _context23.next = 51;
3790
3949
  break;
3791
3950
  }
3792
- throw _context23.t0;
3793
- case 28:
3951
+ throw _context23.t1;
3952
+ case 51:
3794
3953
  case "end":
3795
3954
  return _context23.stop();
3796
3955
  }
3797
- }, _callee23, this, [[18, 23]]);
3956
+ }, _callee23, this, [[22, 35, 38, 41], [41, 46]]);
3798
3957
  }));
3799
3958
  function patchOrdersInSQLite(_x16, _x17) {
3800
3959
  return _patchOrdersInSQLite.apply(this, arguments);
@@ -3980,7 +4139,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3980
4139
  _context27.prev = 6;
3981
4140
  _context27.next = 9;
3982
4141
  return this.runInOrderSQLiteSaveQueue( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee26() {
3983
- var existingOrders, protectedLocalOrders, _iterator33, _step33, rawCurrentOrder, currentOrder, protectedIndex, currentNeedsProtection, orderListSnapshot;
4142
+ var existingOrders, protectedLocalOrders, _iterator36, _step36, rawCurrentOrder, currentOrder, protectedIndex, currentNeedsProtection, orderListSnapshot;
3984
4143
  return _regeneratorRuntime().wrap(function _callee26$(_context26) {
3985
4144
  while (1) switch (_context26.prev = _context26.next) {
3986
4145
  case 0:
@@ -4003,15 +4162,15 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4003
4162
  }).filter(function (order) {
4004
4163
  return _this25.shouldProtectLocalOrderFromRemoteSnapshot(order);
4005
4164
  });
4006
- _iterator33 = _createForOfIteratorHelper(existingOrders || []);
4165
+ _iterator36 = _createForOfIteratorHelper(existingOrders || []);
4007
4166
  _context26.prev = 10;
4008
- _iterator33.s();
4167
+ _iterator36.s();
4009
4168
  case 12:
4010
- if ((_step33 = _iterator33.n()).done) {
4169
+ if ((_step36 = _iterator36.n()).done) {
4011
4170
  _context26.next = 23;
4012
4171
  break;
4013
4172
  }
4014
- rawCurrentOrder = _step33.value;
4173
+ rawCurrentOrder = _step36.value;
4015
4174
  currentOrder = _this25.normalizeOrderCollectionsForIngress(rawCurrentOrder, "".concat(source, ".currentSQLite"));
4016
4175
  protectedIndex = _this25.findOrderIndexByIdentity(protectedLocalOrders, currentOrder);
4017
4176
  currentNeedsProtection = _this25.shouldProtectLocalOrderFromRemoteSnapshot(currentOrder);
@@ -4036,10 +4195,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4036
4195
  case 25:
4037
4196
  _context26.prev = 25;
4038
4197
  _context26.t1 = _context26["catch"](10);
4039
- _iterator33.e(_context26.t1);
4198
+ _iterator36.e(_context26.t1);
4040
4199
  case 28:
4041
4200
  _context26.prev = 28;
4042
- _iterator33.f();
4201
+ _iterator36.f();
4043
4202
  return _context26.finish(28);
4044
4203
  case 31:
4045
4204
  orderListSnapshot = _this25.mergeRemoteSnapshotWithPendingOrders(remoteSnapshot, protectedLocalOrders);
@@ -619,7 +619,8 @@ function formatBundlePrice(bundle, currencySymbol) {
619
619
  var _ref33, _ref34, _bundle$bundle_sellin;
620
620
  var value = (_ref33 = (_ref34 = (_bundle$bundle_sellin = bundle.bundle_selling_price) !== null && _bundle$bundle_sellin !== void 0 ? _bundle$bundle_sellin : bundle.bundle_sum_price) !== null && _ref34 !== void 0 ? _ref34 : bundle.price) !== null && _ref33 !== void 0 ? _ref33 : 0;
621
621
  var amount = new Decimal(toMoneyNumber(value));
622
- var isNegative = bundle.price_type === 'markdown' || bundle.price_type === 'markup' && bundle.price_type_ext === 'product_price';
622
+ // 套餐价格协议:只有 markdown 是减价;加价与商品原价都保持正数。
623
+ var isNegative = bundle.price_type === 'markdown';
623
624
  if (isNegative) return "-".concat(currencySymbol).concat(amount.abs().toFixed(2));
624
625
  return formatMoney(amount, currencySymbol);
625
626
  }