@pisell/pisellos 2.2.260 → 2.2.261

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 (129) hide show
  1. package/dist/model/strategy/adapter/index.d.ts +0 -4
  2. package/dist/model/strategy/adapter/index.js +1 -5
  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 +1 -1
  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 +17 -13
  14. package/dist/modules/Order/index.d.ts +33 -2
  15. package/dist/modules/Order/index.js +615 -288
  16. package/dist/modules/Order/types.d.ts +20 -2
  17. package/dist/modules/Order/utils/bundleDiscountHydration.d.ts +5 -0
  18. package/dist/modules/Order/utils/bundleDiscountHydration.js +144 -0
  19. package/dist/modules/Order/utils.d.ts +4 -0
  20. package/dist/modules/Order/utils.js +116 -29
  21. package/dist/modules/Product/types.d.ts +0 -22
  22. package/dist/modules/ProductList/index.d.ts +1 -1
  23. package/dist/modules/ProductList/index.js +2 -4
  24. package/dist/modules/ProductList/types.d.ts +0 -2
  25. package/dist/modules/Rules/index.d.ts +4 -3
  26. package/dist/modules/Rules/index.js +42 -17
  27. package/dist/modules/Rules/types.d.ts +2 -1
  28. package/dist/modules/SalesSummary/index.d.ts +7 -3
  29. package/dist/modules/SalesSummary/index.js +67 -39
  30. package/dist/modules/SalesSummary/types.d.ts +1 -0
  31. package/dist/modules/SalesSummary/utils.js +2 -1
  32. package/dist/modules/SurchargeList/index.d.ts +6 -4
  33. package/dist/modules/SurchargeList/index.js +62 -39
  34. package/dist/modules/SurchargeList/types.d.ts +6 -2
  35. package/dist/server/index.d.ts +3 -50
  36. package/dist/server/index.js +1075 -1040
  37. package/dist/server/modules/order/index.d.ts +22 -3
  38. package/dist/server/modules/order/index.js +398 -316
  39. package/dist/server/modules/products/index.d.ts +7 -26
  40. package/dist/server/modules/products/index.js +76 -166
  41. package/dist/server/modules/products/types.d.ts +0 -14
  42. package/dist/solution/BaseSales/index.d.ts +22 -2
  43. package/dist/solution/BaseSales/index.js +995 -701
  44. package/dist/solution/BaseSales/types.d.ts +1 -0
  45. package/dist/solution/BaseSales/types.js +2 -1
  46. package/dist/solution/BaseSales/utils/cartPromotion.d.ts +3 -1
  47. package/dist/solution/BaseSales/utils/cartPromotion.js +74 -29
  48. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +6 -3
  49. package/dist/solution/BookingByStep/index.d.ts +1 -1
  50. package/dist/solution/BookingTicket/index.d.ts +9 -1
  51. package/dist/solution/BookingTicket/index.js +153 -6
  52. package/dist/solution/BookingTicket/types.d.ts +0 -2
  53. package/dist/solution/ScanOrder/index.js +31 -20
  54. package/dist/solution/VenueBooking/index.js +30 -19
  55. package/lib/model/strategy/adapter/index.d.ts +0 -4
  56. package/lib/model/strategy/adapter/index.js +2 -13
  57. package/lib/model/strategy/adapter/promotion/adapter.d.ts +4 -0
  58. package/lib/model/strategy/adapter/promotion/adapter.js +20 -0
  59. package/lib/model/strategy/adapter/promotion/evaluator.d.ts +17 -0
  60. package/lib/model/strategy/adapter/promotion/evaluator.js +235 -0
  61. package/lib/model/strategy/adapter/promotion/examples.d.ts +86 -0
  62. package/lib/model/strategy/adapter/promotion/examples.js +91 -0
  63. package/lib/model/strategy/adapter/promotion/index.d.ts +1 -1
  64. package/lib/model/strategy/adapter/promotion/index.js +2 -0
  65. package/lib/model/strategy/adapter/promotion/type.d.ts +90 -2
  66. package/lib/model/strategy/adapter/promotion/type.js +2 -0
  67. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +11 -1
  68. package/lib/modules/Order/index.d.ts +33 -2
  69. package/lib/modules/Order/index.js +402 -64
  70. package/lib/modules/Order/types.d.ts +20 -2
  71. package/lib/modules/Order/utils/bundleDiscountHydration.d.ts +5 -0
  72. package/lib/modules/Order/utils/bundleDiscountHydration.js +139 -0
  73. package/lib/modules/Order/utils.d.ts +4 -0
  74. package/lib/modules/Order/utils.js +90 -3
  75. package/lib/modules/Product/types.d.ts +0 -22
  76. package/lib/modules/ProductList/index.d.ts +1 -1
  77. package/lib/modules/ProductList/index.js +2 -4
  78. package/lib/modules/ProductList/types.d.ts +0 -2
  79. package/lib/modules/Rules/index.d.ts +4 -3
  80. package/lib/modules/Rules/index.js +27 -7
  81. package/lib/modules/Rules/types.d.ts +2 -1
  82. package/lib/modules/SalesSummary/index.d.ts +7 -3
  83. package/lib/modules/SalesSummary/index.js +28 -11
  84. package/lib/modules/SalesSummary/types.d.ts +1 -0
  85. package/lib/modules/SalesSummary/utils.js +2 -0
  86. package/lib/modules/SurchargeList/index.d.ts +6 -4
  87. package/lib/modules/SurchargeList/index.js +41 -21
  88. package/lib/modules/SurchargeList/types.d.ts +6 -2
  89. package/lib/server/index.d.ts +3 -50
  90. package/lib/server/index.js +244 -215
  91. package/lib/server/modules/order/index.d.ts +22 -3
  92. package/lib/server/modules/order/index.js +103 -53
  93. package/lib/server/modules/products/index.d.ts +7 -26
  94. package/lib/server/modules/products/index.js +35 -113
  95. package/lib/server/modules/products/types.d.ts +0 -14
  96. package/lib/solution/BaseSales/index.d.ts +22 -2
  97. package/lib/solution/BaseSales/index.js +246 -60
  98. package/lib/solution/BaseSales/types.d.ts +1 -0
  99. package/lib/solution/BaseSales/types.js +2 -1
  100. package/lib/solution/BaseSales/utils/cartPromotion.d.ts +3 -1
  101. package/lib/solution/BaseSales/utils/cartPromotion.js +59 -16
  102. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +6 -6
  103. package/lib/solution/BookingByStep/index.d.ts +1 -1
  104. package/lib/solution/BookingTicket/index.d.ts +9 -1
  105. package/lib/solution/BookingTicket/index.js +101 -0
  106. package/lib/solution/BookingTicket/types.d.ts +0 -2
  107. package/lib/solution/ScanOrder/index.js +8 -0
  108. package/lib/solution/VenueBooking/index.js +8 -0
  109. package/package.json +1 -1
  110. package/dist/model/strategy/adapter/dataVariant/adapter.d.ts +0 -49
  111. package/dist/model/strategy/adapter/dataVariant/adapter.js +0 -152
  112. package/dist/model/strategy/adapter/dataVariant/evaluator.d.ts +0 -87
  113. package/dist/model/strategy/adapter/dataVariant/evaluator.js +0 -755
  114. package/dist/model/strategy/adapter/dataVariant/examples.d.ts +0 -39
  115. package/dist/model/strategy/adapter/dataVariant/examples.js +0 -282
  116. package/dist/model/strategy/adapter/dataVariant/index.d.ts +0 -4
  117. package/dist/model/strategy/adapter/dataVariant/index.js +0 -4
  118. package/dist/model/strategy/adapter/dataVariant/type.d.ts +0 -146
  119. package/dist/model/strategy/adapter/dataVariant/type.js +0 -54
  120. package/lib/model/strategy/adapter/dataVariant/adapter.d.ts +0 -49
  121. package/lib/model/strategy/adapter/dataVariant/adapter.js +0 -139
  122. package/lib/model/strategy/adapter/dataVariant/evaluator.d.ts +0 -87
  123. package/lib/model/strategy/adapter/dataVariant/evaluator.js +0 -564
  124. package/lib/model/strategy/adapter/dataVariant/examples.d.ts +0 -39
  125. package/lib/model/strategy/adapter/dataVariant/examples.js +0 -295
  126. package/lib/model/strategy/adapter/dataVariant/index.d.ts +0 -4
  127. package/lib/model/strategy/adapter/dataVariant/index.js +0 -38
  128. package/lib/model/strategy/adapter/dataVariant/type.d.ts +0 -146
  129. package/lib/model/strategy/adapter/dataVariant/type.js +0 -31
@@ -49,6 +49,13 @@ var ORDER_SILENT_REFRESH_MIN_INTERVAL_MS = 30000;
49
49
  /** 视为「业务侧刚写入」的来源,pubsub 回声可跳过 SQLite */
50
50
  var ORDER_BUSINESS_WRITE_SOURCES = new Set(['upsertOrdersFromRemote', 'upsertPendingSyncOrders', 'overwriteExistingOrder', 'markOrderSyncedByExternalSaleNumber']);
51
51
 
52
+ /**
53
+ * 合并热路径全表去重自检开关:默认关闭。
54
+ * 开启后每次合并会额外对整张 store 做一次 O(n^2) 重复检测并告警,
55
+ * 仅用于排查增量身份索引是否遗漏了重复订单,不应在生产常开。
56
+ */
57
+ var ORDER_MERGE_SELF_CHECK = false;
58
+
52
59
  /**
53
60
  * Order 模块 - 基础框架
54
61
  */
@@ -68,8 +75,6 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
68
75
  _defineProperty(_assertThisInitialized(_this), "syncTimer", void 0);
69
76
  _defineProperty(_assertThisInitialized(_this), "isProcessingSyncBatch", false);
70
77
  _defineProperty(_assertThisInitialized(_this), "isIdlePhase", true);
71
- // Map<resource_id, OrderId[]> 资源到订单的倒排索引
72
- _defineProperty(_assertThisInitialized(_this), "resourceIdIndex", new Map());
73
78
  _defineProperty(_assertThisInitialized(_this), "logger", void 0);
74
79
  // LoggerManager 实例
75
80
  _defineProperty(_assertThisInitialized(_this), "storage", void 0);
@@ -443,9 +448,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
443
448
  var appPlugin = this.core.getPlugin('app');
444
449
  var app = appPlugin === null || appPlugin === void 0 ? void 0 : appPlugin.getApp();
445
450
  if (app) {
446
- var _this$store$createdAt;
447
451
  var coreData = app.data.store.getStore().getDataByModel('core');
448
- if (!((_this$store$createdAt = this.store.createdAtQuery) !== null && _this$store$createdAt !== void 0 && _this$store$createdAt.sales_time_between) && coreData !== null && coreData !== void 0 && coreData.core) {
452
+ if (coreData !== null && coreData !== void 0 && coreData.core) {
449
453
  var today = dayjs();
450
454
  if (coreData !== null && coreData !== void 0 && coreData.core.operating_day_boundary) {
451
455
  var operatingDayBoundary = coreData.core.operating_day_boundary;
@@ -774,17 +778,6 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
774
778
  }
775
779
  return silentRefresh;
776
780
  }())
777
- }, {
778
- key: "getOrdersByResourceId",
779
- value: function getOrdersByResourceId(resourceId) {
780
- var _this8 = this;
781
- var ids = this.resourceIdIndex.get(String(resourceId)) || [];
782
- return ids.map(function (id) {
783
- return _this8.store.map.get(id);
784
- }).filter(function (order) {
785
- return !!order;
786
- });
787
- }
788
781
  }, {
789
782
  key: "normalizeOrderForMemoryList",
790
783
  value: function normalizeOrderForMemoryList(order) {
@@ -808,7 +801,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
808
801
  key: "overwriteExistingOrder",
809
802
  value: (function () {
810
803
  var _overwriteExistingOrder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(fresh) {
811
- var _this9 = this;
804
+ var _this8 = this;
812
805
  var orderId, key;
813
806
  return _regeneratorRuntime().wrap(function _callee8$(_context8) {
814
807
  while (1) switch (_context8.prev = _context8.next) {
@@ -842,7 +835,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
842
835
  this.store.list = this.store.list.map(function (order) {
843
836
  var id = order === null || order === void 0 ? void 0 : order.order_id;
844
837
  if (id === undefined || id === null) return order;
845
- return _this9.getIdKey(id) === key ? fresh : order;
838
+ return _this8.getIdKey(id) === key ? fresh : order;
846
839
  });
847
840
  this.syncOrdersMap();
848
841
  _context8.next = 13;
@@ -908,7 +901,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
908
901
  key: "markOrderSyncedByExternalSaleNumber",
909
902
  value: function () {
910
903
  var _markOrderSyncedByExternalSaleNumber = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee10(params) {
911
- var _this10 = this,
904
+ var _this9 = this,
912
905
  _existing$external_sa,
913
906
  _nextOrder$order_id;
914
907
  var externalSaleNumber, key, targetIndex, existing, nextOrder, storageKey;
@@ -929,7 +922,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
929
922
  targetIndex = this.store.list.findIndex(function (order) {
930
923
  var value = order === null || order === void 0 ? void 0 : order.external_sale_number;
931
924
  if (value === undefined || value === null || value === '') return false;
932
- return _this10.getIdKey(value) === key;
925
+ return _this9.getIdKey(value) === key;
933
926
  });
934
927
  if (!(targetIndex < 0)) {
935
928
  _context10.next = 9;
@@ -986,7 +979,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
986
979
  key: "upsertPendingSyncOrders",
987
980
  value: (function () {
988
981
  var _upsertPendingSyncOrders = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee11(pendingOrders) {
989
- var pendingMap, memoryPendingMap, _iterator4, _step4, order, storageKey, patchedOrders, mergeActions, updatedList, _iterator5, _step5, _step5$value, _storageKey, pendingOrder, matchIndex, _iterator6, _step6, _step6$value, _storageKey2, _order;
982
+ var pendingMap, memoryPendingMap, _iterator4, _step4, order, storageKey, patchedOrders, mergeActions, updatedList, identityKeyToIndex, index, _iterator5, _step5, key, _iterator6, _step6, _step6$value, _storageKey, pendingOrder, matchIndex, mergedOrder, insertIndex;
990
983
  return _regeneratorRuntime().wrap(function _callee11$(_context11) {
991
984
  while (1) switch (_context11.prev = _context11.next) {
992
985
  case 0:
@@ -1046,72 +1039,82 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1046
1039
  });
1047
1040
  patchedOrders = _toConsumableArray(pendingMap.values());
1048
1041
  mergeActions = {};
1049
- updatedList = _toConsumableArray(this.store.list);
1050
- _iterator5 = _createForOfIteratorHelper(memoryPendingMap.entries());
1051
- _context11.prev = 33;
1052
- _iterator5.s();
1053
- case 35:
1054
- if ((_step5 = _iterator5.n()).done) {
1055
- _context11.next = 46;
1042
+ updatedList = _toConsumableArray(this.store.list); // 与 mergeOrdersToStore 一致:基于身份键(field:value)建立索引,把「查找已存在订单」
1043
+ // O(n) 线性扫描降为 O(1),整体复杂度由 O(n^2) 降为 O(n + m)。
1044
+ identityKeyToIndex = new Map();
1045
+ for (index = 0; index < updatedList.length; index += 1) {
1046
+ _iterator5 = _createForOfIteratorHelper(this.getOrderIdentityMatchKeys(updatedList[index]));
1047
+ try {
1048
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
1049
+ key = _step5.value;
1050
+ // 同一 key 命中多张时保留最靠前的下标,与原 findIndex「取首个匹配」一致
1051
+ if (!identityKeyToIndex.has(key)) identityKeyToIndex.set(key, index);
1052
+ }
1053
+ } catch (err) {
1054
+ _iterator5.e(err);
1055
+ } finally {
1056
+ _iterator5.f();
1057
+ }
1058
+ }
1059
+ _iterator6 = _createForOfIteratorHelper(memoryPendingMap.entries());
1060
+ _context11.prev = 35;
1061
+ _iterator6.s();
1062
+ case 37:
1063
+ if ((_step6 = _iterator6.n()).done) {
1064
+ _context11.next = 52;
1056
1065
  break;
1057
1066
  }
1058
- _step5$value = _slicedToArray(_step5.value, 2), _storageKey = _step5$value[0], pendingOrder = _step5$value[1];
1059
- matchIndex = this.findOrderIndexByIdentity(updatedList, pendingOrder);
1060
- if (!(matchIndex < 0)) {
1061
- _context11.next = 40;
1067
+ _step6$value = _slicedToArray(_step6.value, 2), _storageKey = _step6$value[0], pendingOrder = _step6$value[1];
1068
+ matchIndex = this.lookupOrderIndexByIdentityKeys(identityKeyToIndex, this.getOrderIdentityMatchKeys(pendingOrder));
1069
+ if (!(matchIndex >= 0)) {
1070
+ _context11.next = 46;
1062
1071
  break;
1063
1072
  }
1064
- return _context11.abrupt("continue", 44);
1065
- case 40:
1066
- updatedList[matchIndex] = this.mergeOrderRecords(updatedList[matchIndex], pendingOrder, {
1073
+ mergedOrder = this.mergeOrderRecords(updatedList[matchIndex], pendingOrder, {
1067
1074
  preferIncomingProducts: true
1068
1075
  });
1069
- pendingMap.delete(_storageKey);
1070
- memoryPendingMap.delete(_storageKey);
1076
+ updatedList[matchIndex] = mergedOrder;
1077
+ // 合并后身份字段可能新增(如挂单拿到 order_id),同步登记,供同批后续 pending 命中同一槽位
1078
+ this.registerOrderIdentityKeys(identityKeyToIndex, mergedOrder, matchIndex);
1071
1079
  mergeActions[_storageKey] = 'update';
1072
- case 44:
1073
- _context11.next = 35;
1074
- break;
1080
+ return _context11.abrupt("continue", 50);
1075
1081
  case 46:
1076
- _context11.next = 51;
1082
+ insertIndex = updatedList.length;
1083
+ updatedList.push(pendingOrder);
1084
+ this.registerOrderIdentityKeys(identityKeyToIndex, pendingOrder, insertIndex);
1085
+ mergeActions[_storageKey] = 'insert';
1086
+ case 50:
1087
+ _context11.next = 37;
1088
+ break;
1089
+ case 52:
1090
+ _context11.next = 57;
1077
1091
  break;
1078
- case 48:
1079
- _context11.prev = 48;
1080
- _context11.t1 = _context11["catch"](33);
1081
- _iterator5.e(_context11.t1);
1082
- case 51:
1083
- _context11.prev = 51;
1084
- _iterator5.f();
1085
- return _context11.finish(51);
1086
1092
  case 54:
1087
- _iterator6 = _createForOfIteratorHelper(memoryPendingMap.entries());
1088
- try {
1089
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
1090
- _step6$value = _slicedToArray(_step6.value, 2), _storageKey2 = _step6$value[0], _order = _step6$value[1];
1091
- mergeActions[_storageKey2] = 'insert';
1092
- updatedList.push(_order);
1093
- }
1094
- } catch (err) {
1095
- _iterator6.e(err);
1096
- } finally {
1097
- _iterator6.f();
1098
- }
1099
- this.store.list = this.compactOrderListByIdentity(updatedList, 'upsertPendingSyncOrders.store').list;
1093
+ _context11.prev = 54;
1094
+ _context11.t1 = _context11["catch"](35);
1095
+ _iterator6.e(_context11.t1);
1096
+ case 57:
1097
+ _context11.prev = 57;
1098
+ _iterator6.f();
1099
+ return _context11.finish(57);
1100
+ case 60:
1101
+ // 增量索引已保证 store 去重不变量,无需再对全表做 O(n^2) 压缩;仅自检开关开启时兜底。
1102
+ this.store.list = this.runOrderStoreSelfCheck(updatedList, 'upsertPendingSyncOrders.store');
1100
1103
  this.syncOrdersMap();
1101
- _context11.next = 60;
1104
+ _context11.next = 64;
1102
1105
  return this.patchOrdersInSQLite(patchedOrders, 'upsertPendingSyncOrders', mergeActions);
1103
- case 60:
1106
+ case 64:
1104
1107
  this.logInfo('upsertPendingSyncOrders-结束', {
1105
1108
  count: patchedOrders.length,
1106
1109
  storeOrderCountAfter: this.store.list.length
1107
1110
  });
1108
- _context11.next = 63;
1111
+ _context11.next = 67;
1109
1112
  return this.emitOrdersChanged(patchedOrders, 'upsertPendingSyncOrders');
1110
- case 63:
1113
+ case 67:
1111
1114
  case "end":
1112
1115
  return _context11.stop();
1113
1116
  }
1114
- }, _callee11, this, [[6, 19, 22, 25], [33, 48, 51, 54]]);
1117
+ }, _callee11, this, [[6, 19, 22, 25], [35, 54, 57, 60]]);
1115
1118
  }));
1116
1119
  function upsertPendingSyncOrders(_x7) {
1117
1120
  return _upsertPendingSyncOrders.apply(this, arguments);
@@ -1188,39 +1191,15 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1188
1191
  }, {
1189
1192
  key: "syncOrdersMap",
1190
1193
  value: function syncOrdersMap() {
1191
- var _this11 = this;
1192
1194
  this.store.map.clear();
1193
- this.resourceIdIndex.clear();
1194
1195
  var _iterator7 = _createForOfIteratorHelper(this.store.list),
1195
1196
  _step7;
1196
1197
  try {
1197
- var _loop = function _loop() {
1198
- var order = _step7.value;
1199
- var primaryIdentity = _this11.getOrderMapKey(order);
1200
- if (!primaryIdentity) return 1; // continue
1201
- _this11.store.map.set(primaryIdentity, order);
1202
- var resourceIds = _this11.extractResourceIds(order);
1203
- var _iterator8 = _createForOfIteratorHelper(resourceIds),
1204
- _step8;
1205
- try {
1206
- for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
1207
- var resourceId = _step8.value;
1208
- var key = String(resourceId);
1209
- var existing = _this11.resourceIdIndex.get(key) || [];
1210
- if (existing.some(function (eid) {
1211
- return _this11.getIdKey(eid) === primaryIdentity;
1212
- })) continue;
1213
- existing.push(primaryIdentity);
1214
- _this11.resourceIdIndex.set(key, existing);
1215
- }
1216
- } catch (err) {
1217
- _iterator8.e(err);
1218
- } finally {
1219
- _iterator8.f();
1220
- }
1221
- };
1222
1198
  for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
1223
- if (_loop()) continue;
1199
+ var order = _step7.value;
1200
+ var primaryIdentity = this.getOrderMapKey(order);
1201
+ if (!primaryIdentity) continue;
1202
+ this.store.map.set(primaryIdentity, order);
1224
1203
  }
1225
1204
  } catch (err) {
1226
1205
  _iterator7.e(err);
@@ -1249,7 +1228,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1249
1228
  }, {
1250
1229
  key: "getOrderIdentityEntries",
1251
1230
  value: function getOrderIdentityEntries(order) {
1252
- var _this12 = this;
1231
+ var _this10 = this;
1253
1232
  if (!order) return [];
1254
1233
  var record = order;
1255
1234
  var candidates = [{
@@ -1266,10 +1245,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1266
1245
  value: record.shop_order_number
1267
1246
  }];
1268
1247
  var entries = [];
1269
- var _loop2 = function _loop2() {
1248
+ var _loop = function _loop() {
1270
1249
  var candidate = _candidates[_i];
1271
- if (_this12.isBlankIdentityValue(candidate.value)) return 0; // continue
1272
- var key = _this12.getIdKey(candidate.value);
1250
+ if (_this10.isBlankIdentityValue(candidate.value)) return 0; // continue
1251
+ var key = _this10.getIdKey(candidate.value);
1273
1252
  if (entries.some(function (entry) {
1274
1253
  return entry.field === candidate.field && entry.key === key;
1275
1254
  })) return 0; // continue
@@ -1280,7 +1259,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1280
1259
  },
1281
1260
  _ret;
1282
1261
  for (var _i = 0, _candidates = candidates; _i < _candidates.length; _i++) {
1283
- _ret = _loop2();
1262
+ _ret = _loop();
1284
1263
  if (_ret === 0) continue;
1285
1264
  }
1286
1265
  return entries;
@@ -1289,39 +1268,20 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1289
1268
  key: "getOrderIdentityKeys",
1290
1269
  value: function getOrderIdentityKeys(order) {
1291
1270
  var keys = [];
1292
- var _iterator9 = _createForOfIteratorHelper(this.getOrderIdentityEntries(order)),
1293
- _step9;
1271
+ var _iterator8 = _createForOfIteratorHelper(this.getOrderIdentityEntries(order)),
1272
+ _step8;
1294
1273
  try {
1295
- for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
1296
- var entry = _step9.value;
1274
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
1275
+ var entry = _step8.value;
1297
1276
  if (!keys.includes(entry.key)) keys.push(entry.key);
1298
1277
  }
1299
1278
  } catch (err) {
1300
- _iterator9.e(err);
1279
+ _iterator8.e(err);
1301
1280
  } finally {
1302
- _iterator9.f();
1281
+ _iterator8.f();
1303
1282
  }
1304
1283
  return keys;
1305
1284
  }
1306
- }, {
1307
- key: "extractResourceIds",
1308
- value: function extractResourceIds(order) {
1309
- var ids = new Set();
1310
- var visitResources = function visitResources(resources) {
1311
- if (!Array.isArray(resources)) return;
1312
- resources.forEach(function (resource) {
1313
- var rid = resource === null || resource === void 0 ? void 0 : resource.relation_id;
1314
- if (rid !== undefined && rid !== null && rid !== '') ids.add(String(rid));
1315
- if (Array.isArray(resource === null || resource === void 0 ? void 0 : resource.children)) visitResources(resource.children);
1316
- });
1317
- };
1318
- if (Array.isArray(order === null || order === void 0 ? void 0 : order.bookings)) {
1319
- order.bookings.forEach(function (booking) {
1320
- return visitResources((booking === null || booking === void 0 ? void 0 : booking.resources) || []);
1321
- });
1322
- }
1323
- return _toConsumableArray(ids);
1324
- }
1325
1285
  }, {
1326
1286
  key: "getOrderDateKey",
1327
1287
  value: function getOrderDateKey(order) {
@@ -1355,7 +1315,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1355
1315
  }, {
1356
1316
  key: "setupOrderSync",
1357
1317
  value: function setupOrderSync() {
1358
- var _this13 = this;
1318
+ var _this11 = this;
1359
1319
  if (!this.orderDataSource) return;
1360
1320
  this.orderDataSource.run({
1361
1321
  pubsub: {
@@ -1363,22 +1323,22 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1363
1323
  var _message$id, _message$order_id, _message$type;
1364
1324
  console.log('orderDataSource', res);
1365
1325
  var pubsubReceivedAt = Date.now();
1366
- var message = _this13.normalizeOrderSyncMessage(res);
1326
+ var message = _this11.normalizeOrderSyncMessage(res);
1367
1327
  if (!message) return;
1368
1328
  message._pubsubReceivedAt = pubsubReceivedAt;
1369
- _this13.pendingSyncMessages.push(message);
1370
- var throttleMs = _this13.getOrderSyncThrottleMs();
1371
- var routeInfo = _this13.resolveSyncMessageRoute(message);
1372
- _this13.logInfo('orderSync-收到消息并入队', {
1329
+ _this11.pendingSyncMessages.push(message);
1330
+ var throttleMs = _this11.getOrderSyncThrottleMs();
1331
+ var routeInfo = _this11.resolveSyncMessageRoute(message);
1332
+ _this11.logInfo('orderSync-收到消息并入队', {
1373
1333
  id: (_message$id = message.id) !== null && _message$id !== void 0 ? _message$id : null,
1374
1334
  order_id: (_message$order_id = message.order_id) !== null && _message$order_id !== void 0 ? _message$order_id : null,
1375
1335
  type: (_message$type = message.type) !== null && _message$type !== void 0 ? _message$type : null,
1376
- pendingCount: _this13.pendingSyncMessages.length,
1336
+ pendingCount: _this11.pendingSyncMessages.length,
1377
1337
  throttleMs: throttleMs,
1378
1338
  pubsubReceivedAt: new Date(pubsubReceivedAt).toISOString(),
1379
1339
  fullMessage: JSON.stringify(message)
1380
1340
  });
1381
- _this13.scheduleOrderSyncThrottle();
1341
+ _this11.scheduleOrderSyncThrottle();
1382
1342
  }
1383
1343
  }
1384
1344
  }).catch(function () {
@@ -1395,7 +1355,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1395
1355
  }, {
1396
1356
  key: "scheduleOrderSyncThrottle",
1397
1357
  value: function scheduleOrderSyncThrottle() {
1398
- var _this14 = this;
1358
+ var _this12 = this;
1399
1359
  if (this.isProcessingSyncBatch) return;
1400
1360
  if (this.isIdlePhase) {
1401
1361
  this.isIdlePhase = false;
@@ -1406,8 +1366,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1406
1366
  if (this.syncTimer) return;
1407
1367
  var throttleMs = this.getOrderSyncThrottleMs();
1408
1368
  this.syncTimer = setTimeout(function () {
1409
- _this14.syncTimer = undefined;
1410
- void _this14.flushOrderSyncMessagesByThrottle();
1369
+ _this12.syncTimer = undefined;
1370
+ void _this12.flushOrderSyncMessagesByThrottle();
1411
1371
  }, throttleMs);
1412
1372
  }
1413
1373
 
@@ -1475,7 +1435,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1475
1435
  key: "processOrderSyncMessages",
1476
1436
  value: (function () {
1477
1437
  var _processOrderSyncMessages = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee14() {
1478
- var _this15 = this;
1438
+ var _this13 = this;
1479
1439
  var messages, batchProcessStartAt, earliestReceivedAt, upsertOrders, refreshIds, uniqueRefreshIds, upsertList, _this$filterRedundant, toFetch, skipped, freshOrders, batchProcessEndAt;
1480
1440
  return _regeneratorRuntime().wrap(function _callee14$(_context14) {
1481
1441
  while (1) switch (_context14.prev = _context14.next) {
@@ -1502,13 +1462,13 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1502
1462
  upsertOrders = new Map();
1503
1463
  refreshIds = [];
1504
1464
  messages.forEach(function (msg, msgIndex) {
1505
- var routeInfo = _this15.resolveSyncMessageRoute(msg);
1465
+ var routeInfo = _this13.resolveSyncMessageRoute(msg);
1506
1466
  var hasBatchIds = routeInfo.hasBatchIds;
1507
1467
  var singleId = routeInfo.singleId;
1508
1468
  var hasSingleId = routeInfo.hasSingleId;
1509
- var normalizedBody = _this15.normalizeOrderSyncPayload(msg.body || msg.data);
1469
+ var normalizedBody = _this13.normalizeOrderSyncPayload(msg.body || msg.data);
1510
1470
  if (routeInfo.route === 'bodyUpsert' && normalizedBody) {
1511
- upsertOrders.set(_this15.getIdKey(normalizedBody.order_id), normalizedBody);
1471
+ upsertOrders.set(_this13.getIdKey(normalizedBody.order_id), normalizedBody);
1512
1472
  return;
1513
1473
  }
1514
1474
  if (hasBatchIds) refreshIds.push.apply(refreshIds, _toConsumableArray(routeInfo.batchIds));else if (routeInfo.route === 'httpRefresh.singleId' && singleId !== null) refreshIds.push(singleId);else if (routeInfo.route === 'httpRefresh.relationIds') refreshIds.push.apply(refreshIds, _toConsumableArray(routeInfo.batchIds));
@@ -1646,94 +1606,137 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1646
1606
  key: "mergeOrdersToStore",
1647
1607
  value: (function () {
1648
1608
  var _mergeOrdersToStore = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee16(freshOrders, source) {
1649
- var normalizedFreshOrders, _iterator10, _step10, order, id, uniqueFreshOrders, uniqueFreshCount, patchedOrders, mergeActions, updatedList, _iterator11, _step11, fresh, matchIndex, storageKey, mergeKey, mergedOrder, insertCount, updateCount;
1609
+ var storeOrderCountBefore, normalizedFreshOrders, _iterator9, _step9, order, id, uniqueFreshOrders, uniqueFreshCount, patchedOrders, mergeActions, updatedList, identityKeyToIndex, index, identityKeys, _iterator10, _step10, key, _iterator11, _step11, fresh, freshIdentityKeys, matchIndex, storageKey, mergeKey, existingOrder, _ref2, _existingOrder$order_, _ref3, _external_sale_number, _existingOrder$paymen, _fresh$payment_status, _existingOrder$need_s, _fresh$need_sync, mergedOrder, insertIndex, insertCount, updateCount;
1650
1610
  return _regeneratorRuntime().wrap(function _callee16$(_context16) {
1651
1611
  while (1) switch (_context16.prev = _context16.next) {
1652
1612
  case 0:
1613
+ storeOrderCountBefore = this.store.list.length;
1653
1614
  this.logInfo('mergeOrdersToStore-开始', {
1654
1615
  freshOrderCount: freshOrders.length,
1655
- storeOrderCountBefore: this.store.list.length,
1616
+ storeOrderCountBefore: storeOrderCountBefore,
1656
1617
  source: source
1657
1618
  });
1658
1619
  this.logDuplicateOrders("".concat(source, ".beforeMerge"), this.store.list);
1659
1620
  normalizedFreshOrders = [];
1660
- _iterator10 = _createForOfIteratorHelper(freshOrders);
1661
- _context16.prev = 4;
1662
- _iterator10.s();
1663
- case 6:
1664
- if ((_step10 = _iterator10.n()).done) {
1665
- _context16.next = 14;
1621
+ _iterator9 = _createForOfIteratorHelper(freshOrders);
1622
+ _context16.prev = 5;
1623
+ _iterator9.s();
1624
+ case 7:
1625
+ if ((_step9 = _iterator9.n()).done) {
1626
+ _context16.next = 15;
1666
1627
  break;
1667
1628
  }
1668
- order = _step10.value;
1629
+ order = _step9.value;
1669
1630
  id = order === null || order === void 0 ? void 0 : order.order_id;
1670
1631
  if (!(id === undefined || id === null)) {
1671
- _context16.next = 11;
1632
+ _context16.next = 12;
1672
1633
  break;
1673
1634
  }
1674
- return _context16.abrupt("continue", 12);
1675
- case 11:
1676
- normalizedFreshOrders.push(this.normalizeRemoteSyncedOrder(order));
1635
+ return _context16.abrupt("continue", 13);
1677
1636
  case 12:
1678
- _context16.next = 6;
1637
+ normalizedFreshOrders.push(this.normalizeRemoteSyncedOrder(order));
1638
+ case 13:
1639
+ _context16.next = 7;
1679
1640
  break;
1680
- case 14:
1681
- _context16.next = 19;
1641
+ case 15:
1642
+ _context16.next = 20;
1682
1643
  break;
1683
- case 16:
1684
- _context16.prev = 16;
1685
- _context16.t0 = _context16["catch"](4);
1686
- _iterator10.e(_context16.t0);
1687
- case 19:
1688
- _context16.prev = 19;
1689
- _iterator10.f();
1690
- return _context16.finish(19);
1691
- case 22:
1644
+ case 17:
1645
+ _context16.prev = 17;
1646
+ _context16.t0 = _context16["catch"](5);
1647
+ _iterator9.e(_context16.t0);
1648
+ case 20:
1649
+ _context16.prev = 20;
1650
+ _iterator9.f();
1651
+ return _context16.finish(20);
1652
+ case 23:
1653
+ // 先对本批新单做去重(批内规模 m 很小),保证每条 fresh 身份唯一
1692
1654
  uniqueFreshOrders = this.compactOrderListByIdentity(normalizedFreshOrders, "".concat(source, ".incoming")).list;
1693
1655
  uniqueFreshCount = uniqueFreshOrders.length;
1694
1656
  patchedOrders = [];
1695
1657
  mergeActions = {};
1696
- updatedList = _toConsumableArray(this.store.list);
1658
+ updatedList = _toConsumableArray(this.store.list); // 基于身份键(field:value)建立索引,把「查找已存在订单」从 O(n) 线性扫描降为 O(1),
1659
+ // 整体合并复杂度由 O(n^2) 降为 O(n + m)。索引语义与 doOrdersShareIdentity 完全一致:
1660
+ // 任一身份字段(order_id/external_sale_number/order_number/shop_order_number)同值即同一单。
1661
+ identityKeyToIndex = new Map();
1662
+ for (index = 0; index < updatedList.length; index += 1) {
1663
+ identityKeys = this.getOrderIdentityMatchKeys(updatedList[index]);
1664
+ _iterator10 = _createForOfIteratorHelper(identityKeys);
1665
+ try {
1666
+ for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
1667
+ key = _step10.value;
1668
+ // 同一 key 命中多张时保留最靠前的下标,与原 findIndex「取首个匹配」一致
1669
+ if (!identityKeyToIndex.has(key)) identityKeyToIndex.set(key, index);
1670
+ }
1671
+ } catch (err) {
1672
+ _iterator10.e(err);
1673
+ } finally {
1674
+ _iterator10.f();
1675
+ }
1676
+ }
1697
1677
  _iterator11 = _createForOfIteratorHelper(uniqueFreshOrders);
1698
- _context16.prev = 28;
1678
+ _context16.prev = 31;
1699
1679
  _iterator11.s();
1700
- case 30:
1680
+ case 33:
1701
1681
  if ((_step11 = _iterator11.n()).done) {
1702
- _context16.next = 46;
1682
+ _context16.next = 57;
1703
1683
  break;
1704
1684
  }
1705
1685
  fresh = _step11.value;
1706
- matchIndex = this.findOrderIndexByIdentity(updatedList, fresh);
1686
+ freshIdentityKeys = this.getOrderIdentityMatchKeys(fresh);
1687
+ matchIndex = this.lookupOrderIndexByIdentityKeys(identityKeyToIndex, freshIdentityKeys);
1707
1688
  storageKey = this.getOrderStorageKey(fresh);
1708
1689
  mergeKey = storageKey || (fresh.order_id !== undefined && fresh.order_id !== null ? this.getIdKey(fresh.order_id) : '');
1709
1690
  if (!(matchIndex >= 0)) {
1710
- _context16.next = 41;
1691
+ _context16.next = 50;
1711
1692
  break;
1712
1693
  }
1713
- mergedOrder = this.mergeOrderRecords(updatedList[matchIndex], fresh);
1694
+ existingOrder = updatedList[matchIndex];
1695
+ if (!(this.isPendingSyncOrder(existingOrder) && this.isRemoteEchoMergeSource(source))) {
1696
+ _context16.next = 44;
1697
+ break;
1698
+ }
1699
+ this.logInfo('mergeOrdersToStore-跳过 pending 订单远端覆盖', {
1700
+ source: source,
1701
+ order_id: (_ref2 = (_existingOrder$order_ = existingOrder.order_id) !== null && _existingOrder$order_ !== void 0 ? _existingOrder$order_ : fresh.order_id) !== null && _ref2 !== void 0 ? _ref2 : null,
1702
+ external_sale_number: (_ref3 = (_external_sale_number = existingOrder.external_sale_number) !== null && _external_sale_number !== void 0 ? _external_sale_number : fresh.external_sale_number) !== null && _ref3 !== void 0 ? _ref3 : null,
1703
+ local_payment_status: (_existingOrder$paymen = existingOrder.payment_status) !== null && _existingOrder$paymen !== void 0 ? _existingOrder$paymen : null,
1704
+ remote_payment_status: (_fresh$payment_status = fresh.payment_status) !== null && _fresh$payment_status !== void 0 ? _fresh$payment_status : null,
1705
+ local_need_sync: (_existingOrder$need_s = existingOrder.need_sync) !== null && _existingOrder$need_s !== void 0 ? _existingOrder$need_s : null,
1706
+ remote_need_sync: (_fresh$need_sync = fresh.need_sync) !== null && _fresh$need_sync !== void 0 ? _fresh$need_sync : null,
1707
+ reason: 'protect_pending_sync_order_from_remote_echo'
1708
+ });
1709
+ return _context16.abrupt("continue", 55);
1710
+ case 44:
1711
+ mergedOrder = this.mergeOrderRecords(existingOrder, fresh);
1714
1712
  updatedList[matchIndex] = mergedOrder;
1713
+ // 合并后身份字段可能新增(如挂单拿到 order_id),同步登记到索引,
1714
+ // 供同批后续 fresh 命中同一槽位,避免重复插入
1715
+ this.registerOrderIdentityKeys(identityKeyToIndex, mergedOrder, matchIndex);
1715
1716
  patchedOrders.push(mergedOrder);
1716
1717
  if (mergeKey) mergeActions[mergeKey] = 'update';
1717
- return _context16.abrupt("continue", 44);
1718
- case 41:
1718
+ return _context16.abrupt("continue", 55);
1719
+ case 50:
1720
+ insertIndex = updatedList.length;
1719
1721
  updatedList.push(fresh);
1722
+ this.registerOrderIdentityKeys(identityKeyToIndex, fresh, insertIndex);
1720
1723
  patchedOrders.push(fresh);
1721
1724
  if (mergeKey) mergeActions[mergeKey] = 'insert';
1722
- case 44:
1723
- _context16.next = 30;
1725
+ case 55:
1726
+ _context16.next = 33;
1724
1727
  break;
1725
- case 46:
1726
- _context16.next = 51;
1728
+ case 57:
1729
+ _context16.next = 62;
1727
1730
  break;
1728
- case 48:
1729
- _context16.prev = 48;
1730
- _context16.t1 = _context16["catch"](28);
1731
+ case 59:
1732
+ _context16.prev = 59;
1733
+ _context16.t1 = _context16["catch"](31);
1731
1734
  _iterator11.e(_context16.t1);
1732
- case 51:
1733
- _context16.prev = 51;
1735
+ case 62:
1736
+ _context16.prev = 62;
1734
1737
  _iterator11.f();
1735
- return _context16.finish(51);
1736
- case 54:
1738
+ return _context16.finish(62);
1739
+ case 65:
1737
1740
  insertCount = Object.values(mergeActions).filter(function (v) {
1738
1741
  return v === 'insert';
1739
1742
  }).length;
@@ -1745,30 +1748,110 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1745
1748
  updateCount: updateCount,
1746
1749
  storeOrderCountAfter: this.store.list.length
1747
1750
  });
1748
- this.store.list = this.compactOrderListByIdentity(updatedList, "".concat(source, ".store")).list;
1751
+ // 增量索引已保证 store 去重不变量,无需再对全表做 O(n^2) 压缩;
1752
+ // 仅在自检开关开启时做一次兜底校验。
1753
+ this.store.list = this.runOrderStoreSelfCheck(updatedList, "".concat(source, ".store"));
1749
1754
  this.syncOrdersMap();
1750
- _context16.next = 61;
1755
+ _context16.next = 72;
1751
1756
  return this.patchOrdersInSQLite(patchedOrders, source, mergeActions);
1752
- case 61:
1757
+ case 72:
1753
1758
  this.logInfo('mergeOrdersToStore-结束', {
1754
1759
  uniqueFreshCount: uniqueFreshCount,
1755
1760
  storeOrderCountAfter: this.store.list.length,
1756
1761
  insertCount: insertCount,
1757
1762
  updateCount: updateCount
1758
1763
  });
1759
- _context16.next = 64;
1764
+ _context16.next = 75;
1760
1765
  return this.emitOrdersChanged(patchedOrders, source);
1761
- case 64:
1766
+ case 75:
1762
1767
  case "end":
1763
1768
  return _context16.stop();
1764
1769
  }
1765
- }, _callee16, this, [[4, 16, 19, 22], [28, 48, 51, 54]]);
1770
+ }, _callee16, this, [[5, 17, 20, 23], [31, 59, 62, 65]]);
1766
1771
  }));
1767
1772
  function mergeOrdersToStore(_x9, _x10) {
1768
1773
  return _mergeOrdersToStore.apply(this, arguments);
1769
1774
  }
1770
1775
  return mergeOrdersToStore;
1771
- }())
1776
+ }()
1777
+ /**
1778
+ * 在身份索引中查找与目标订单共享任一身份键的已存在订单下标。
1779
+ * 返回所有命中键里最小的下标,等价于原 findOrderIndexByIdentity 的「取首个匹配」语义。
1780
+ *
1781
+ * @example
1782
+ * const idx = this.lookupOrderIndexByIdentityKeys(identityKeyToIndex, freshIdentityKeys)
1783
+ */
1784
+ )
1785
+ }, {
1786
+ key: "lookupOrderIndexByIdentityKeys",
1787
+ value: function lookupOrderIndexByIdentityKeys(identityKeyToIndex, identityKeys) {
1788
+ var matchIndex = -1;
1789
+ var _iterator12 = _createForOfIteratorHelper(identityKeys),
1790
+ _step12;
1791
+ try {
1792
+ for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
1793
+ var key = _step12.value;
1794
+ var index = identityKeyToIndex.get(key);
1795
+ if (index === undefined) continue;
1796
+ if (matchIndex < 0 || index < matchIndex) matchIndex = index;
1797
+ }
1798
+ } catch (err) {
1799
+ _iterator12.e(err);
1800
+ } finally {
1801
+ _iterator12.f();
1802
+ }
1803
+ return matchIndex;
1804
+ }
1805
+ }, {
1806
+ key: "isRemoteEchoMergeSource",
1807
+ value: function isRemoteEchoMergeSource(source) {
1808
+ return source === 'pubsub.bodyUpsert' || source === 'pubsub.httpRefresh';
1809
+ }
1810
+
1811
+ /**
1812
+ * 将订单的全部身份键登记到索引并指向其在列表中的下标。
1813
+ * 合并后订单新增的身份字段(如挂单同步后拿到 order_id)也会被登记。
1814
+ *
1815
+ * @example
1816
+ * this.registerOrderIdentityKeys(identityKeyToIndex, mergedOrder, matchIndex)
1817
+ */
1818
+ }, {
1819
+ key: "registerOrderIdentityKeys",
1820
+ value: function registerOrderIdentityKeys(identityKeyToIndex, order, index) {
1821
+ var identityKeys = this.getOrderIdentityMatchKeys(order);
1822
+ var _iterator13 = _createForOfIteratorHelper(identityKeys),
1823
+ _step13;
1824
+ try {
1825
+ for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
1826
+ var key = _step13.value;
1827
+ identityKeyToIndex.set(key, index);
1828
+ }
1829
+ } catch (err) {
1830
+ _iterator13.e(err);
1831
+ } finally {
1832
+ _iterator13.f();
1833
+ }
1834
+ }
1835
+
1836
+ /**
1837
+ * 合并热路径去重兜底:默认直接返回原列表(增量索引已保证无重复)。
1838
+ * 仅当 ORDER_MERGE_SELF_CHECK 开启时,额外做一次全表压缩并在发现残留重复时告警。
1839
+ */
1840
+ }, {
1841
+ key: "runOrderStoreSelfCheck",
1842
+ value: function runOrderStoreSelfCheck(orders, source) {
1843
+ if (!ORDER_MERGE_SELF_CHECK) return orders;
1844
+ var _this$compactOrderLis = this.compactOrderListByIdentity(orders, source),
1845
+ list = _this$compactOrderLis.list,
1846
+ removedCount = _this$compactOrderLis.removedCount;
1847
+ if (removedCount > 0) {
1848
+ this.logWarning('合并自检发现残留重复订单,已压缩', {
1849
+ source: source,
1850
+ removedCount: removedCount
1851
+ });
1852
+ }
1853
+ return list;
1854
+ }
1772
1855
  }, {
1773
1856
  key: "normalizeOrderSyncMessage",
1774
1857
  value: function normalizeOrderSyncMessage(res) {
@@ -1801,17 +1884,17 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1801
1884
  key: "uniqueOrderIds",
1802
1885
  value: function uniqueOrderIds(ids) {
1803
1886
  var idMap = new Map();
1804
- var _iterator12 = _createForOfIteratorHelper(ids),
1805
- _step12;
1887
+ var _iterator14 = _createForOfIteratorHelper(ids),
1888
+ _step14;
1806
1889
  try {
1807
- for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
1808
- var id = _step12.value;
1890
+ for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
1891
+ var id = _step14.value;
1809
1892
  idMap.set(this.getIdKey(id), id);
1810
1893
  }
1811
1894
  } catch (err) {
1812
- _iterator12.e(err);
1895
+ _iterator14.e(err);
1813
1896
  } finally {
1814
- _iterator12.f();
1897
+ _iterator14.f();
1815
1898
  }
1816
1899
  return _toConsumableArray(idMap.values());
1817
1900
  }
@@ -1823,12 +1906,12 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1823
1906
  }, {
1824
1907
  key: "isOrderLookupMatch",
1825
1908
  value: function isOrderLookupMatch(order, lookupKey) {
1826
- var _this16 = this;
1909
+ var _this14 = this;
1827
1910
  if (!order || !lookupKey) return false;
1828
1911
  var candidates = [order.order_id, order.external_sale_number, order.order_number, order.shop_order_number, order.shop_full_order_number];
1829
1912
  return candidates.some(function (value) {
1830
1913
  if (value === undefined || value === null || value === '') return false;
1831
- return _this16.getIdKey(value) === lookupKey;
1914
+ return _this14.getIdKey(value) === lookupKey;
1832
1915
  });
1833
1916
  }
1834
1917
 
@@ -1871,10 +1954,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1871
1954
  }, {
1872
1955
  key: "findOrderIndexByIdentity",
1873
1956
  value: function findOrderIndexByIdentity(orders, target) {
1874
- var _this17 = this;
1957
+ var _this15 = this;
1875
1958
  if (this.getOrderIdentityMatchKeys(target).length === 0) return -1;
1876
1959
  return orders.findIndex(function (order) {
1877
- return _this17.doOrdersShareIdentity(order, target);
1960
+ return _this15.doOrdersShareIdentity(order, target);
1878
1961
  });
1879
1962
  }
1880
1963
  }, {
@@ -1923,58 +2006,58 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1923
2006
  if (secondaryList.length === 0) return preferredList;
1924
2007
  if (preferredList.length === 0) return secondaryList;
1925
2008
  var seenKeys = new Set();
1926
- var _iterator13 = _createForOfIteratorHelper(preferredList),
1927
- _step13;
2009
+ var _iterator15 = _createForOfIteratorHelper(preferredList),
2010
+ _step15;
1928
2011
  try {
1929
- for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
1930
- var item = _step13.value;
2012
+ for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
2013
+ var item = _step15.value;
1931
2014
  var keys = this.getProductIdentityKeys(item);
1932
- var _iterator15 = _createForOfIteratorHelper(keys),
1933
- _step15;
2015
+ var _iterator17 = _createForOfIteratorHelper(keys),
2016
+ _step17;
1934
2017
  try {
1935
- for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
1936
- var key = _step15.value;
2018
+ for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
2019
+ var key = _step17.value;
1937
2020
  seenKeys.add(key);
1938
2021
  }
1939
2022
  } catch (err) {
1940
- _iterator15.e(err);
2023
+ _iterator17.e(err);
1941
2024
  } finally {
1942
- _iterator15.f();
2025
+ _iterator17.f();
1943
2026
  }
1944
2027
  }
1945
2028
  } catch (err) {
1946
- _iterator13.e(err);
2029
+ _iterator15.e(err);
1947
2030
  } finally {
1948
- _iterator13.f();
2031
+ _iterator15.f();
1949
2032
  }
1950
2033
  var result = _toConsumableArray(preferredList);
1951
- var _iterator14 = _createForOfIteratorHelper(secondaryList),
1952
- _step14;
2034
+ var _iterator16 = _createForOfIteratorHelper(secondaryList),
2035
+ _step16;
1953
2036
  try {
1954
- for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
1955
- var _item = _step14.value;
2037
+ for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
2038
+ var _item = _step16.value;
1956
2039
  var _keys = this.getProductIdentityKeys(_item);
1957
2040
  if (_keys.length === 0 || _keys.some(function (key) {
1958
2041
  return seenKeys.has(key);
1959
2042
  })) continue;
1960
- var _iterator16 = _createForOfIteratorHelper(_keys),
1961
- _step16;
2043
+ var _iterator18 = _createForOfIteratorHelper(_keys),
2044
+ _step18;
1962
2045
  try {
1963
- for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
1964
- var _key = _step16.value;
2046
+ for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {
2047
+ var _key = _step18.value;
1965
2048
  seenKeys.add(_key);
1966
2049
  }
1967
2050
  } catch (err) {
1968
- _iterator16.e(err);
2051
+ _iterator18.e(err);
1969
2052
  } finally {
1970
- _iterator16.f();
2053
+ _iterator18.f();
1971
2054
  }
1972
2055
  result.push(cloneDeep(_item));
1973
2056
  }
1974
2057
  } catch (err) {
1975
- _iterator14.e(err);
2058
+ _iterator16.e(err);
1976
2059
  } finally {
1977
- _iterator14.f();
2060
+ _iterator16.f();
1978
2061
  }
1979
2062
  return result;
1980
2063
  }
@@ -2000,29 +2083,29 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2000
2083
  }, {
2001
2084
  key: "mergeOrderPaymentLists",
2002
2085
  value: function mergeOrderPaymentLists(existing, incoming) {
2003
- var _this18 = this;
2086
+ var _this16 = this;
2004
2087
  var existingList = Array.isArray(existing) ? existing : [];
2005
2088
  var incomingList = Array.isArray(incoming) ? incoming : [];
2006
2089
  if (incomingList.length === 0) return cloneDeep(existingList);
2007
2090
  if (existingList.length === 0) return cloneDeep(incomingList);
2008
2091
  var existingByKey = new Map();
2009
- var _iterator17 = _createForOfIteratorHelper(existingList),
2010
- _step17;
2092
+ var _iterator19 = _createForOfIteratorHelper(existingList),
2093
+ _step19;
2011
2094
  try {
2012
- for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
2013
- var payment = _step17.value;
2095
+ for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {
2096
+ var payment = _step19.value;
2014
2097
  var key = this.getPaymentMergeKey(payment);
2015
2098
  if (!key) continue;
2016
2099
  existingByKey.set(key, payment);
2017
2100
  }
2018
2101
  } catch (err) {
2019
- _iterator17.e(err);
2102
+ _iterator19.e(err);
2020
2103
  } finally {
2021
- _iterator17.f();
2104
+ _iterator19.f();
2022
2105
  }
2023
2106
  return incomingList.map(function (payment) {
2024
2107
  var incomingPayment = payment;
2025
- var key = _this18.getPaymentMergeKey(incomingPayment);
2108
+ var key = _this16.getPaymentMergeKey(incomingPayment);
2026
2109
  var existingPayment = key ? existingByKey.get(key) : undefined;
2027
2110
  if (!existingPayment) return cloneDeep(incomingPayment);
2028
2111
  return _objectSpread(_objectSpread(_objectSpread({}, cloneDeep(existingPayment)), cloneDeep(incomingPayment)), {}, {
@@ -2079,47 +2162,47 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2079
2162
  key: "summarizeDuplicateOrders",
2080
2163
  value: function summarizeDuplicateOrders(orders) {
2081
2164
  var groups = new Map();
2082
- var _iterator18 = _createForOfIteratorHelper(orders),
2083
- _step18;
2165
+ var _iterator20 = _createForOfIteratorHelper(orders),
2166
+ _step20;
2084
2167
  try {
2085
- for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {
2086
- var order = _step18.value;
2087
- var _iterator19 = _createForOfIteratorHelper(this.getOrderIdentityMatchKeys(order)),
2088
- _step19;
2168
+ for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {
2169
+ var order = _step20.value;
2170
+ var _iterator21 = _createForOfIteratorHelper(this.getOrderIdentityMatchKeys(order)),
2171
+ _step21;
2089
2172
  try {
2090
- for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {
2091
- var key = _step19.value;
2173
+ for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {
2174
+ var key = _step21.value;
2092
2175
  var group = groups.get(key) || [];
2093
2176
  group.push(order);
2094
2177
  groups.set(key, group);
2095
2178
  }
2096
2179
  } catch (err) {
2097
- _iterator19.e(err);
2180
+ _iterator21.e(err);
2098
2181
  } finally {
2099
- _iterator19.f();
2182
+ _iterator21.f();
2100
2183
  }
2101
2184
  }
2102
2185
  } catch (err) {
2103
- _iterator18.e(err);
2186
+ _iterator20.e(err);
2104
2187
  } finally {
2105
- _iterator18.f();
2188
+ _iterator20.f();
2106
2189
  }
2107
- return _toConsumableArray(groups.entries()).filter(function (_ref2) {
2108
- var _ref3 = _slicedToArray(_ref2, 2),
2109
- group = _ref3[1];
2110
- return group.length > 1;
2111
- }).slice(0, 20).map(function (_ref4) {
2190
+ return _toConsumableArray(groups.entries()).filter(function (_ref4) {
2112
2191
  var _ref5 = _slicedToArray(_ref4, 2),
2113
- key = _ref5[0],
2114
2192
  group = _ref5[1];
2193
+ return group.length > 1;
2194
+ }).slice(0, 20).map(function (_ref6) {
2195
+ var _ref7 = _slicedToArray(_ref6, 2),
2196
+ key = _ref7[0],
2197
+ group = _ref7[1];
2115
2198
  return {
2116
2199
  key: key,
2117
2200
  count: group.length,
2118
2201
  orders: group.map(function (order) {
2119
- var _order$order_id2, _external_sale_number, _shop_order_number, _shop_full_order_numb, _order$need_sync;
2202
+ var _order$order_id2, _external_sale_number2, _shop_order_number, _shop_full_order_numb, _order$need_sync;
2120
2203
  return {
2121
2204
  order_id: (_order$order_id2 = order.order_id) !== null && _order$order_id2 !== void 0 ? _order$order_id2 : null,
2122
- external_sale_number: (_external_sale_number = order.external_sale_number) !== null && _external_sale_number !== void 0 ? _external_sale_number : null,
2205
+ external_sale_number: (_external_sale_number2 = order.external_sale_number) !== null && _external_sale_number2 !== void 0 ? _external_sale_number2 : null,
2123
2206
  shop_order_number: (_shop_order_number = order.shop_order_number) !== null && _shop_order_number !== void 0 ? _shop_order_number : null,
2124
2207
  shop_full_order_number: (_shop_full_order_numb = order.shop_full_order_number) !== null && _shop_full_order_numb !== void 0 ? _shop_full_order_numb : null,
2125
2208
  need_sync: (_order$need_sync = order.need_sync) !== null && _order$need_sync !== void 0 ? _order$need_sync : null
@@ -2144,11 +2227,11 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2144
2227
  value: function compactOrderListByIdentity(orders, source) {
2145
2228
  var list = [];
2146
2229
  var removedCount = 0;
2147
- var _iterator20 = _createForOfIteratorHelper(orders),
2148
- _step20;
2230
+ var _iterator22 = _createForOfIteratorHelper(orders),
2231
+ _step22;
2149
2232
  try {
2150
- for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {
2151
- var order = _step20.value;
2233
+ for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {
2234
+ var order = _step22.value;
2152
2235
  var matchIndex = this.findOrderIndexByIdentity(list, order);
2153
2236
  if (matchIndex < 0) {
2154
2237
  list.push(order);
@@ -2158,9 +2241,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2158
2241
  removedCount += 1;
2159
2242
  }
2160
2243
  } catch (err) {
2161
- _iterator20.e(err);
2244
+ _iterator22.e(err);
2162
2245
  } finally {
2163
- _iterator20.f();
2246
+ _iterator22.f();
2164
2247
  }
2165
2248
  if (removedCount > 0) {
2166
2249
  this.logWarning('订单列表重复项已压缩', {
@@ -2306,15 +2389,15 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2306
2389
  }, {
2307
2390
  key: "mergeRemoteSnapshotWithPendingOrders",
2308
2391
  value: function mergeRemoteSnapshotWithPendingOrders(remoteOrders, existingOrders) {
2309
- var _this19 = this;
2392
+ var _this17 = this;
2310
2393
  var merged = remoteOrders.map(function (order) {
2311
- return _this19.normalizeRemoteSyncedOrder(order);
2394
+ return _this17.normalizeRemoteSyncedOrder(order);
2312
2395
  });
2313
- var _iterator21 = _createForOfIteratorHelper(existingOrders),
2314
- _step21;
2396
+ var _iterator23 = _createForOfIteratorHelper(existingOrders),
2397
+ _step23;
2315
2398
  try {
2316
- for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {
2317
- var order = _step21.value;
2399
+ for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {
2400
+ var order = _step23.value;
2318
2401
  if (!this.isPendingSyncOrder(order)) continue;
2319
2402
  var matchIndex = this.findOrderIndexByIdentity(merged, order);
2320
2403
  if (matchIndex >= 0) {
@@ -2325,9 +2408,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2325
2408
  merged.push(order);
2326
2409
  }
2327
2410
  } catch (err) {
2328
- _iterator21.e(err);
2411
+ _iterator23.e(err);
2329
2412
  } finally {
2330
- _iterator21.f();
2413
+ _iterator23.f();
2331
2414
  }
2332
2415
  return this.compactOrderListByIdentity(merged, 'mergeRemoteSnapshotWithPendingOrders').list;
2333
2416
  }
@@ -2377,7 +2460,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2377
2460
  key: "patchOrdersInSQLite",
2378
2461
  value: (function () {
2379
2462
  var _patchOrdersInSQLite = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee20(orders, source) {
2380
- var _this20 = this;
2463
+ var _this18 = this;
2381
2464
  var mergeActions,
2382
2465
  ordersSnapshot,
2383
2466
  _this$filterRedundant2,
@@ -2396,7 +2479,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2396
2479
  return _context20.abrupt("return");
2397
2480
  case 3:
2398
2481
  ordersSnapshot = cloneDeep(orders).filter(function (order) {
2399
- return _this20.getOrderStorageKey(order);
2482
+ return _this18.getOrderStorageKey(order);
2400
2483
  });
2401
2484
  if (!(ordersSnapshot.length === 0)) {
2402
2485
  _context20.next = 6;
@@ -2421,54 +2504,54 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2421
2504
  _context20.prev = 12;
2422
2505
  _context20.next = 15;
2423
2506
  return this.runInOrderSQLiteSaveQueue( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee19() {
2424
- var writeMethod, _iterator22, _step22, order;
2507
+ var writeMethod, _iterator24, _step24, order;
2425
2508
  return _regeneratorRuntime().wrap(function _callee19$(_context19) {
2426
2509
  while (1) switch (_context19.prev = _context19.next) {
2427
2510
  case 0:
2428
2511
  writeMethod = 'none';
2429
- _this20.logInfo('patchOrdersInSQLite-开始', {
2512
+ _this18.logInfo('patchOrdersInSQLite-开始', {
2430
2513
  source: source,
2431
2514
  count: compactedToWrite.length,
2432
2515
  dedupedCount: skipped.length
2433
2516
  });
2434
- if (!(typeof _this20.dbManager.bulkUpdate === 'function')) {
2517
+ if (!(typeof _this18.dbManager.bulkUpdate === 'function')) {
2435
2518
  _context19.next = 8;
2436
2519
  break;
2437
2520
  }
2438
2521
  writeMethod = 'bulkUpdate';
2439
2522
  _context19.next = 6;
2440
- return _this20.dbManager.bulkUpdate(INDEXDB_STORE_NAME, compactedToWrite);
2523
+ return _this18.dbManager.bulkUpdate(INDEXDB_STORE_NAME, compactedToWrite);
2441
2524
  case 6:
2442
2525
  _context19.next = 33;
2443
2526
  break;
2444
2527
  case 8:
2445
- if (!(typeof _this20.dbManager.bulkAdd === 'function')) {
2528
+ if (!(typeof _this18.dbManager.bulkAdd === 'function')) {
2446
2529
  _context19.next = 14;
2447
2530
  break;
2448
2531
  }
2449
2532
  writeMethod = 'bulkAdd';
2450
2533
  _context19.next = 12;
2451
- return _this20.dbManager.bulkAdd(INDEXDB_STORE_NAME, compactedToWrite);
2534
+ return _this18.dbManager.bulkAdd(INDEXDB_STORE_NAME, compactedToWrite);
2452
2535
  case 12:
2453
2536
  _context19.next = 33;
2454
2537
  break;
2455
2538
  case 14:
2456
- if (!(typeof _this20.dbManager.update === 'function')) {
2539
+ if (!(typeof _this18.dbManager.update === 'function')) {
2457
2540
  _context19.next = 33;
2458
2541
  break;
2459
2542
  }
2460
2543
  writeMethod = 'update';
2461
- _iterator22 = _createForOfIteratorHelper(compactedToWrite);
2544
+ _iterator24 = _createForOfIteratorHelper(compactedToWrite);
2462
2545
  _context19.prev = 17;
2463
- _iterator22.s();
2546
+ _iterator24.s();
2464
2547
  case 19:
2465
- if ((_step22 = _iterator22.n()).done) {
2548
+ if ((_step24 = _iterator24.n()).done) {
2466
2549
  _context19.next = 25;
2467
2550
  break;
2468
2551
  }
2469
- order = _step22.value;
2552
+ order = _step24.value;
2470
2553
  _context19.next = 23;
2471
- return _this20.dbManager.update(INDEXDB_STORE_NAME, order);
2554
+ return _this18.dbManager.update(INDEXDB_STORE_NAME, order);
2472
2555
  case 23:
2473
2556
  _context19.next = 19;
2474
2557
  break;
@@ -2478,14 +2561,14 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2478
2561
  case 27:
2479
2562
  _context19.prev = 27;
2480
2563
  _context19.t0 = _context19["catch"](17);
2481
- _iterator22.e(_context19.t0);
2564
+ _iterator24.e(_context19.t0);
2482
2565
  case 30:
2483
2566
  _context19.prev = 30;
2484
- _iterator22.f();
2567
+ _iterator24.f();
2485
2568
  return _context19.finish(30);
2486
2569
  case 33:
2487
- _this20.recordRecentSqliteWrite(source, compactedToWrite);
2488
- _this20.logInfo('patchOrdersInSQLite-完成', {
2570
+ _this18.recordRecentSqliteWrite(source, compactedToWrite);
2571
+ _this18.logInfo('patchOrdersInSQLite-完成', {
2489
2572
  source: source,
2490
2573
  count: compactedToWrite.length,
2491
2574
  writeMethod: writeMethod,
@@ -2529,7 +2612,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2529
2612
  key: "updateOrderInSQLite",
2530
2613
  value: (function () {
2531
2614
  var _updateOrderInSQLite = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee22(order, source) {
2532
- var _this21 = this;
2615
+ var _this19 = this;
2533
2616
  var orderSnapshot, _orderSnapshot$order_3;
2534
2617
  return _regeneratorRuntime().wrap(function _callee22$(_context22) {
2535
2618
  while (1) switch (_context22.prev = _context22.next) {
@@ -2550,43 +2633,43 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2550
2633
  while (1) switch (_context21.prev = _context21.next) {
2551
2634
  case 0:
2552
2635
  writeMethod = 'none';
2553
- _this21.logInfo('updateOrderInSQLite-开始', {
2636
+ _this19.logInfo('updateOrderInSQLite-开始', {
2554
2637
  source: source,
2555
2638
  orderId: (_orderSnapshot$order_ = orderSnapshot.order_id) !== null && _orderSnapshot$order_ !== void 0 ? _orderSnapshot$order_ : null,
2556
- storageKey: _this21.getOrderStorageKey(orderSnapshot)
2639
+ storageKey: _this19.getOrderStorageKey(orderSnapshot)
2557
2640
  });
2558
- if (!(typeof _this21.dbManager.update === 'function')) {
2641
+ if (!(typeof _this19.dbManager.update === 'function')) {
2559
2642
  _context21.next = 8;
2560
2643
  break;
2561
2644
  }
2562
2645
  writeMethod = 'update';
2563
2646
  _context21.next = 6;
2564
- return _this21.dbManager.update(INDEXDB_STORE_NAME, orderSnapshot);
2647
+ return _this19.dbManager.update(INDEXDB_STORE_NAME, orderSnapshot);
2565
2648
  case 6:
2566
2649
  _context21.next = 18;
2567
2650
  break;
2568
2651
  case 8:
2569
- if (!(typeof _this21.dbManager.bulkUpdate === 'function')) {
2652
+ if (!(typeof _this19.dbManager.bulkUpdate === 'function')) {
2570
2653
  _context21.next = 14;
2571
2654
  break;
2572
2655
  }
2573
2656
  writeMethod = 'bulkUpdate';
2574
2657
  _context21.next = 12;
2575
- return _this21.dbManager.bulkUpdate(INDEXDB_STORE_NAME, [orderSnapshot]);
2658
+ return _this19.dbManager.bulkUpdate(INDEXDB_STORE_NAME, [orderSnapshot]);
2576
2659
  case 12:
2577
2660
  _context21.next = 18;
2578
2661
  break;
2579
2662
  case 14:
2580
- if (!(typeof _this21.dbManager.bulkAdd === 'function')) {
2663
+ if (!(typeof _this19.dbManager.bulkAdd === 'function')) {
2581
2664
  _context21.next = 18;
2582
2665
  break;
2583
2666
  }
2584
2667
  writeMethod = 'bulkAdd';
2585
2668
  _context21.next = 18;
2586
- return _this21.dbManager.bulkAdd(INDEXDB_STORE_NAME, [orderSnapshot]);
2669
+ return _this19.dbManager.bulkAdd(INDEXDB_STORE_NAME, [orderSnapshot]);
2587
2670
  case 18:
2588
- _this21.recordRecentSqliteWrite(source, [orderSnapshot]);
2589
- _this21.logInfo('updateOrderInSQLite-完成', {
2671
+ _this19.recordRecentSqliteWrite(source, [orderSnapshot]);
2672
+ _this19.logInfo('updateOrderInSQLite-完成', {
2590
2673
  source: source,
2591
2674
  orderId: (_orderSnapshot$order_2 = orderSnapshot.order_id) !== null && _orderSnapshot$order_2 !== void 0 ? _orderSnapshot$order_2 : null,
2592
2675
  writeMethod: writeMethod
@@ -2629,7 +2712,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2629
2712
  key: "replaceOrdersSnapshotInSQLite",
2630
2713
  value: (function () {
2631
2714
  var _replaceOrdersSnapshotInSQLite = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee24(orderList, source) {
2632
- var _this22 = this;
2715
+ var _this20 = this;
2633
2716
  var remoteSnapshot, mergedSnapshot;
2634
2717
  return _regeneratorRuntime().wrap(function _callee24$(_context24) {
2635
2718
  while (1) switch (_context24.prev = _context24.next) {
@@ -2639,12 +2722,12 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2639
2722
  break;
2640
2723
  }
2641
2724
  return _context24.abrupt("return", this.compactOrderListByIdentity(orderList.map(function (order) {
2642
- return _this22.normalizeRemoteSyncedOrder(order);
2725
+ return _this20.normalizeRemoteSyncedOrder(order);
2643
2726
  }), "".concat(source, ".snapshotNoDb")).list);
2644
2727
  case 2:
2645
2728
  remoteSnapshot = cloneDeep(orderList);
2646
2729
  mergedSnapshot = this.compactOrderListByIdentity(remoteSnapshot.map(function (order) {
2647
- return _this22.normalizeRemoteSyncedOrder(order);
2730
+ return _this20.normalizeRemoteSyncedOrder(order);
2648
2731
  }), "".concat(source, ".remoteSnapshot")).list;
2649
2732
  _context24.prev = 4;
2650
2733
  _context24.next = 7;
@@ -2653,12 +2736,12 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2653
2736
  return _regeneratorRuntime().wrap(function _callee23$(_context23) {
2654
2737
  while (1) switch (_context23.prev = _context23.next) {
2655
2738
  case 0:
2656
- if (!(typeof _this22.dbManager.getAll === 'function')) {
2739
+ if (!(typeof _this20.dbManager.getAll === 'function')) {
2657
2740
  _context23.next = 6;
2658
2741
  break;
2659
2742
  }
2660
2743
  _context23.next = 3;
2661
- return _this22.dbManager.getAll(INDEXDB_STORE_NAME);
2744
+ return _this20.dbManager.getAll(INDEXDB_STORE_NAME);
2662
2745
  case 3:
2663
2746
  _context23.t0 = _context23.sent;
2664
2747
  _context23.next = 7;
@@ -2667,18 +2750,18 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2667
2750
  _context23.t0 = [];
2668
2751
  case 7:
2669
2752
  existingOrders = _context23.t0;
2670
- orderListSnapshot = _this22.mergeRemoteSnapshotWithPendingOrders(remoteSnapshot, existingOrders || []);
2671
- mergedSnapshot = _this22.compactOrderListByIdentity(orderListSnapshot, "".concat(source, ".sqliteSnapshot")).list;
2672
- _this22.logInfo('replaceOrdersSnapshotInSQLite-开始', {
2753
+ orderListSnapshot = _this20.mergeRemoteSnapshotWithPendingOrders(remoteSnapshot, existingOrders || []);
2754
+ mergedSnapshot = _this20.compactOrderListByIdentity(orderListSnapshot, "".concat(source, ".sqliteSnapshot")).list;
2755
+ _this20.logInfo('replaceOrdersSnapshotInSQLite-开始', {
2673
2756
  source: source,
2674
2757
  count: mergedSnapshot.length,
2675
2758
  remoteCount: remoteSnapshot.length,
2676
2759
  preservedPendingCount: mergedSnapshot.length - remoteSnapshot.length
2677
2760
  });
2678
2761
  _context23.next = 13;
2679
- return _this22.dbManager.clear(INDEXDB_STORE_NAME);
2762
+ return _this20.dbManager.clear(INDEXDB_STORE_NAME);
2680
2763
  case 13:
2681
- _this22.logInfo('replaceOrdersSnapshotInSQLite-clear完成', {
2764
+ _this20.logInfo('replaceOrdersSnapshotInSQLite-clear完成', {
2682
2765
  count: mergedSnapshot.length
2683
2766
  });
2684
2767
  if (!(mergedSnapshot.length === 0)) {
@@ -2688,10 +2771,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2688
2771
  return _context23.abrupt("return");
2689
2772
  case 16:
2690
2773
  _context23.next = 18;
2691
- return _this22.dbManager.bulkAdd(INDEXDB_STORE_NAME, mergedSnapshot);
2774
+ return _this20.dbManager.bulkAdd(INDEXDB_STORE_NAME, mergedSnapshot);
2692
2775
  case 18:
2693
- _this22.recordRecentSqliteWrite(source, mergedSnapshot);
2694
- _this22.logInfo('replaceOrdersSnapshotInSQLite-bulkAdd完成', {
2776
+ _this20.recordRecentSqliteWrite(source, mergedSnapshot);
2777
+ _this20.logInfo('replaceOrdersSnapshotInSQLite-bulkAdd完成', {
2695
2778
  source: source,
2696
2779
  count: mergedSnapshot.length
2697
2780
  });
@@ -2735,34 +2818,33 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2735
2818
  key: "clear",
2736
2819
  value: (function () {
2737
2820
  var _clear = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee26() {
2738
- var _this23 = this;
2821
+ var _this21 = this;
2739
2822
  return _regeneratorRuntime().wrap(function _callee26$(_context26) {
2740
2823
  while (1) switch (_context26.prev = _context26.next) {
2741
2824
  case 0:
2742
2825
  this.store.list = [];
2743
2826
  this.store.map = new Map();
2744
- this.resourceIdIndex.clear();
2745
2827
  if (!this.dbManager) {
2746
- _context26.next = 6;
2828
+ _context26.next = 5;
2747
2829
  break;
2748
2830
  }
2749
- _context26.next = 6;
2831
+ _context26.next = 5;
2750
2832
  return this.runInOrderSQLiteSaveQueue( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee25() {
2751
2833
  return _regeneratorRuntime().wrap(function _callee25$(_context25) {
2752
2834
  while (1) switch (_context25.prev = _context25.next) {
2753
2835
  case 0:
2754
2836
  _context25.next = 2;
2755
- return _this23.dbManager.clear(INDEXDB_STORE_NAME);
2837
+ return _this21.dbManager.clear(INDEXDB_STORE_NAME);
2756
2838
  case 2:
2757
2839
  case "end":
2758
2840
  return _context25.stop();
2759
2841
  }
2760
2842
  }, _callee25);
2761
2843
  })));
2762
- case 6:
2844
+ case 5:
2763
2845
  this.setStorageItem(ORDER_LAST_FULL_FETCH_AT_STORAGE_KEY, '');
2764
2846
  this.emitOrdersChanged([], 'clear');
2765
- case 8:
2847
+ case 7:
2766
2848
  case "end":
2767
2849
  return _context26.stop();
2768
2850
  }