@pisell/pisellos 2.3.28 → 2.3.29

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 (84) hide show
  1. package/dist/model/strategy/adapter/dataVariant/adapter.d.ts +50 -0
  2. package/dist/model/strategy/adapter/dataVariant/adapter.js +167 -0
  3. package/dist/model/strategy/adapter/dataVariant/evaluator.d.ts +89 -0
  4. package/dist/model/strategy/adapter/dataVariant/evaluator.js +780 -0
  5. package/dist/model/strategy/adapter/dataVariant/examples.d.ts +39 -0
  6. package/dist/model/strategy/adapter/dataVariant/examples.js +277 -0
  7. package/dist/model/strategy/adapter/dataVariant/index.d.ts +4 -0
  8. package/dist/model/strategy/adapter/dataVariant/index.js +4 -0
  9. package/dist/model/strategy/adapter/dataVariant/type.d.ts +148 -0
  10. package/dist/model/strategy/adapter/dataVariant/type.js +54 -0
  11. package/dist/model/strategy/adapter/index.d.ts +4 -0
  12. package/dist/model/strategy/adapter/index.js +5 -1
  13. package/dist/model/strategy/adapter/promotion/index.js +0 -9
  14. package/dist/modules/Discount/index.d.ts +5 -2
  15. package/dist/modules/Discount/index.js +30 -7
  16. package/dist/modules/Discount/types.d.ts +4 -0
  17. package/dist/modules/Order/index.d.ts +7 -1
  18. package/dist/modules/Order/index.js +187 -74
  19. package/dist/modules/Order/types.d.ts +2 -0
  20. package/dist/modules/Order/utils/orderCollectionIdentity.d.ts +53 -0
  21. package/dist/modules/Order/utils/orderCollectionIdentity.js +405 -0
  22. package/dist/modules/Order/utils.d.ts +2 -1
  23. package/dist/modules/Order/utils.js +2 -8
  24. package/dist/modules/Product/types.d.ts +22 -0
  25. package/dist/modules/ProductList/index.d.ts +1 -1
  26. package/dist/modules/ProductList/index.js +4 -2
  27. package/dist/modules/ProductList/types.d.ts +2 -0
  28. package/dist/server/index.d.ts +50 -0
  29. package/dist/server/index.js +995 -749
  30. package/dist/server/modules/order/index.d.ts +10 -4
  31. package/dist/server/modules/order/index.js +404 -399
  32. package/dist/server/modules/products/index.d.ts +26 -7
  33. package/dist/server/modules/products/index.js +167 -76
  34. package/dist/server/modules/products/types.d.ts +14 -0
  35. package/dist/solution/BaseSales/index.d.ts +9 -1
  36. package/dist/solution/BaseSales/index.js +998 -756
  37. package/dist/solution/BaseSales/utils/parseSalesResponse.d.ts +3 -3
  38. package/dist/solution/BaseSales/utils/parseSalesResponse.js +6 -8
  39. package/dist/solution/BookingByStep/index.d.ts +1 -1
  40. package/dist/solution/BookingTicket/index.d.ts +14 -2
  41. package/dist/solution/BookingTicket/types.d.ts +2 -0
  42. package/dist/solution/ShopDiscount/index.js +15 -14
  43. package/lib/model/strategy/adapter/dataVariant/adapter.d.ts +50 -0
  44. package/lib/model/strategy/adapter/dataVariant/adapter.js +149 -0
  45. package/lib/model/strategy/adapter/dataVariant/evaluator.d.ts +89 -0
  46. package/lib/model/strategy/adapter/dataVariant/evaluator.js +583 -0
  47. package/lib/model/strategy/adapter/dataVariant/examples.d.ts +39 -0
  48. package/lib/model/strategy/adapter/dataVariant/examples.js +293 -0
  49. package/lib/model/strategy/adapter/dataVariant/index.d.ts +4 -0
  50. package/lib/model/strategy/adapter/dataVariant/index.js +38 -0
  51. package/lib/model/strategy/adapter/dataVariant/type.d.ts +148 -0
  52. package/lib/model/strategy/adapter/dataVariant/type.js +31 -0
  53. package/lib/model/strategy/adapter/index.d.ts +4 -0
  54. package/lib/model/strategy/adapter/index.js +13 -2
  55. package/lib/modules/Discount/index.d.ts +5 -2
  56. package/lib/modules/Discount/index.js +23 -3
  57. package/lib/modules/Discount/types.d.ts +4 -0
  58. package/lib/modules/Order/index.d.ts +7 -1
  59. package/lib/modules/Order/index.js +104 -6
  60. package/lib/modules/Order/types.d.ts +2 -0
  61. package/lib/modules/Order/utils/orderCollectionIdentity.d.ts +53 -0
  62. package/lib/modules/Order/utils/orderCollectionIdentity.js +415 -0
  63. package/lib/modules/Order/utils.d.ts +2 -1
  64. package/lib/modules/Order/utils.js +4 -11
  65. package/lib/modules/Product/types.d.ts +22 -0
  66. package/lib/modules/ProductList/index.d.ts +1 -1
  67. package/lib/modules/ProductList/index.js +4 -2
  68. package/lib/modules/ProductList/types.d.ts +2 -0
  69. package/lib/server/index.d.ts +50 -0
  70. package/lib/server/index.js +206 -29
  71. package/lib/server/modules/order/index.d.ts +10 -4
  72. package/lib/server/modules/order/index.js +198 -139
  73. package/lib/server/modules/products/index.d.ts +26 -7
  74. package/lib/server/modules/products/index.js +114 -35
  75. package/lib/server/modules/products/types.d.ts +14 -0
  76. package/lib/solution/BaseSales/index.d.ts +9 -1
  77. package/lib/solution/BaseSales/index.js +229 -54
  78. package/lib/solution/BaseSales/utils/parseSalesResponse.d.ts +3 -3
  79. package/lib/solution/BaseSales/utils/parseSalesResponse.js +4 -5
  80. package/lib/solution/BookingByStep/index.d.ts +1 -1
  81. package/lib/solution/BookingTicket/index.d.ts +14 -2
  82. package/lib/solution/BookingTicket/types.d.ts +2 -0
  83. package/lib/solution/ShopDiscount/index.js +2 -1
  84. package/package.json +1 -1
@@ -33,6 +33,7 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
33
33
  import { cloneDeep } from 'lodash-es';
34
34
  import dayjs from 'dayjs';
35
35
  import { BaseModule } from "../../../modules/BaseModule";
36
+ import { applyOrderCollectionUidRemaps, getOrderCollectionPersistentId, getOrderCollectionReferenceUid, getOrderCollectionUid, isSameOrderCollectionItem, mergeOrderCollectionItems, normalizeOrderCollections } from "../../../modules/Order/utils/orderCollectionIdentity";
36
37
  import { OrderHooks } from "./types";
37
38
 
38
39
  /**
@@ -55,6 +56,12 @@ var ORDER_BUSINESS_WRITE_SOURCES = new Set(['upsertOrdersFromRemote', 'upsertPen
55
56
  * 仅用于排查增量身份索引是否遗漏了重复订单,不应在生产常开。
56
57
  */
57
58
  var ORDER_MERGE_SELF_CHECK = false;
59
+ var ORDER_AUTHORITATIVE_COLLECTION_FIELDS = ['products', 'bookings', 'payments'];
60
+ var ORDER_COLLECTION_KIND_BY_FIELD = {
61
+ products: 'product',
62
+ bookings: 'booking',
63
+ payments: 'payment'
64
+ };
58
65
 
59
66
  /**
60
67
  * Order 模块 - 基础框架
@@ -233,6 +240,104 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
233
240
  }
234
241
  }
235
242
 
243
+ /**
244
+ * 在订单进入内存或 SQLite 前统一压缩子项强身份重复并补齐协议 UID。
245
+ * 仅记录计数与订单标识,不输出商品、预约、支付或客户明细。
246
+ */
247
+ }, {
248
+ key: "normalizeOrderCollectionsForIngress",
249
+ value: function normalizeOrderCollectionsForIngress(order, source) {
250
+ var result = normalizeOrderCollections(order);
251
+ var kinds = ['product', 'booking', 'payment'];
252
+ var hasChanges = kinds.some(function (kind) {
253
+ var stats = result.stats[kind];
254
+ return stats.backfilledUidCount > 0 || stats.collapsedDuplicateCount > 0 || stats.uidConflictCount > 0 || stats.anonymousRowCount > 0;
255
+ });
256
+ if (hasChanges) {
257
+ var _order$order_id, _external_sale_number;
258
+ var summarize = function summarize(stats) {
259
+ return {
260
+ backfilled_uid_count: stats.backfilledUidCount,
261
+ collapsed_duplicate_count: stats.collapsedDuplicateCount,
262
+ uid_conflict_count: stats.uidConflictCount,
263
+ anonymous_row_count: stats.anonymousRowCount
264
+ };
265
+ };
266
+ var context = {
267
+ source: source,
268
+ order_id: (_order$order_id = order === null || order === void 0 ? void 0 : order.order_id) !== null && _order$order_id !== void 0 ? _order$order_id : null,
269
+ external_sale_number: (_external_sale_number = order === null || order === void 0 ? void 0 : order.external_sale_number) !== null && _external_sale_number !== void 0 ? _external_sale_number : null,
270
+ products: summarize(result.stats.product),
271
+ bookings: summarize(result.stats.booking),
272
+ payments: summarize(result.stats.payment)
273
+ };
274
+ var hasUnsafeIdentity = kinds.some(function (kind) {
275
+ var stats = result.stats[kind];
276
+ return stats.uidConflictCount > 0 || stats.anonymousRowCount > 0;
277
+ });
278
+ if (hasUnsafeIdentity) {
279
+ this.logWarning('订单子项身份存在冲突或匿名行', context);
280
+ } else {
281
+ this.logInfo('订单子项身份已规范化', context);
282
+ }
283
+ }
284
+ return result.order;
285
+ }
286
+
287
+ /**
288
+ * incoming 决定权威成员集合;同一持久化行仍从 existing 补齐 incoming 省略的本地展示字段。
289
+ */
290
+ }, {
291
+ key: "mergeAuthoritativeOrderCollection",
292
+ value: function mergeAuthoritativeOrderCollection(field, existing, incoming) {
293
+ var uidRemaps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
294
+ var kind = ORDER_COLLECTION_KIND_BY_FIELD[field];
295
+ var existingItems = Array.isArray(existing) ? existing : [];
296
+ return incoming.map(function (incomingItem) {
297
+ var existingItem = existingItems.find(function (item) {
298
+ return isSameOrderCollectionItem(kind, item, incomingItem);
299
+ });
300
+ if (!existingItem) return cloneDeep(incomingItem);
301
+ var mergedItem = mergeOrderCollectionItems(kind, existingItem, incomingItem);
302
+ var mergedUid = getOrderCollectionUid(kind, mergedItem);
303
+ if (mergedUid) {
304
+ var _iterator = _createForOfIteratorHelper(new Set([getOrderCollectionReferenceUid(kind, existingItem), getOrderCollectionReferenceUid(kind, incomingItem)])),
305
+ _step;
306
+ try {
307
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
308
+ var from = _step.value;
309
+ if (!from || from === mergedUid) continue;
310
+ uidRemaps.push({
311
+ kind: kind,
312
+ from: from,
313
+ to: mergedUid,
314
+ persistentId: getOrderCollectionPersistentId(kind, incomingItem) || getOrderCollectionPersistentId(kind, existingItem)
315
+ });
316
+ }
317
+ } catch (err) {
318
+ _iterator.e(err);
319
+ } finally {
320
+ _iterator.f();
321
+ }
322
+ }
323
+ return mergedItem;
324
+ });
325
+ }
326
+ }, {
327
+ key: "reconcileOverwriteOrderCollections",
328
+ value: function reconcileOverwriteOrderCollections(existing, incoming) {
329
+ var reconciled = cloneDeep(incoming);
330
+ var existingRecord = existing;
331
+ var incomingRecord = incoming;
332
+ var uidRemaps = [];
333
+ for (var _i = 0, _ORDER_AUTHORITATIVE_ = ORDER_AUTHORITATIVE_COLLECTION_FIELDS; _i < _ORDER_AUTHORITATIVE_.length; _i++) {
334
+ var field = _ORDER_AUTHORITATIVE_[_i];
335
+ if (!Array.isArray(incomingRecord[field])) continue;
336
+ reconciled[field] = this.mergeAuthoritativeOrderCollection(field, existingRecord[field], incomingRecord[field], uidRemaps);
337
+ }
338
+ return this.normalizeOrderCollectionsForIngress(applyOrderCollectionUidRemaps(reconciled, uidRemaps), 'overwriteExistingOrder.reconciled');
339
+ }
340
+
236
341
  /**
237
342
  * 记录订单最近一次 SQLite 写入,供 pubsub 回声去重使用。
238
343
  *
@@ -243,11 +348,11 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
243
348
  key: "recordRecentSqliteWrite",
244
349
  value: function recordRecentSqliteWrite(source, orders) {
245
350
  var now = Date.now();
246
- var _iterator = _createForOfIteratorHelper(orders),
247
- _step;
351
+ var _iterator2 = _createForOfIteratorHelper(orders),
352
+ _step2;
248
353
  try {
249
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
250
- var order = _step.value;
354
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
355
+ var order = _step2.value;
251
356
  var storageKey = this.getOrderStorageKey(order);
252
357
  if (!storageKey) continue;
253
358
  this.recentSqliteWriteByStorageKey.set(storageKey, {
@@ -256,9 +361,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
256
361
  });
257
362
  }
258
363
  } catch (err) {
259
- _iterator.e(err);
364
+ _iterator2.e(err);
260
365
  } finally {
261
- _iterator.f();
366
+ _iterator2.f();
262
367
  }
263
368
  }
264
369
 
@@ -281,11 +386,11 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
281
386
  var now = Date.now();
282
387
  var toWrite = [];
283
388
  var skipped = [];
284
- var _iterator2 = _createForOfIteratorHelper(orders),
285
- _step2;
389
+ var _iterator3 = _createForOfIteratorHelper(orders),
390
+ _step3;
286
391
  try {
287
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
288
- var order = _step2.value;
392
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
393
+ var order = _step3.value;
289
394
  var storageKey = this.getOrderStorageKey(order);
290
395
  if (!storageKey) {
291
396
  toWrite.push(order);
@@ -301,9 +406,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
301
406
  }
302
407
  var recent = this.recentSqliteWriteByStorageKey.get(storageKey);
303
408
  if (recent && ORDER_BUSINESS_WRITE_SOURCES.has(recent.source) && now - recent.ts < ORDER_SQLITE_DEDUPE_MS) {
304
- var _order$order_id;
409
+ var _order$order_id2;
305
410
  skipped.push({
306
- orderId: (_order$order_id = order.order_id) !== null && _order$order_id !== void 0 ? _order$order_id : null,
411
+ orderId: (_order$order_id2 = order.order_id) !== null && _order$order_id2 !== void 0 ? _order$order_id2 : null,
307
412
  storageKey: storageKey,
308
413
  reason: 'skip_pubsub_echo_after_business_write',
309
414
  lastSource: recent.source,
@@ -314,9 +419,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
314
419
  toWrite.push(order);
315
420
  }
316
421
  } catch (err) {
317
- _iterator2.e(err);
422
+ _iterator3.e(err);
318
423
  } finally {
319
- _iterator2.f();
424
+ _iterator3.f();
320
425
  }
321
426
  return {
322
427
  toWrite: toWrite,
@@ -336,11 +441,11 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
336
441
  var now = Date.now();
337
442
  var toFetch = [];
338
443
  var skipped = [];
339
- var _iterator3 = _createForOfIteratorHelper(ids),
340
- _step3;
444
+ var _iterator4 = _createForOfIteratorHelper(ids),
445
+ _step4;
341
446
  try {
342
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
343
- var id = _step3.value;
447
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
448
+ var id = _step4.value;
344
449
  var existing = this.getOrderByOrderId(id);
345
450
  if (!existing) {
346
451
  toFetch.push(id);
@@ -359,9 +464,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
359
464
  toFetch.push(id);
360
465
  }
361
466
  } catch (err) {
362
- _iterator3.e(err);
467
+ _iterator4.e(err);
363
468
  } finally {
364
- _iterator3.f();
469
+ _iterator4.f();
365
470
  }
366
471
  return {
367
472
  toFetch: toFetch,
@@ -781,14 +886,16 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
781
886
  }, {
782
887
  key: "normalizeOrderForMemoryList",
783
888
  value: function normalizeOrderForMemoryList(order) {
784
- var externalSaleNumber = order === null || order === void 0 ? void 0 : order.external_sale_number;
785
- if ((order === null || order === void 0 ? void 0 : order.order_id) !== undefined && (order === null || order === void 0 ? void 0 : order.order_id) !== null && (order === null || order === void 0 ? void 0 : order.order_id) !== '') {
786
- return order;
889
+ var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'normalizeOrderForMemoryList';
890
+ var normalizedOrder = this.normalizeOrderCollectionsForIngress(order, source);
891
+ var externalSaleNumber = normalizedOrder === null || normalizedOrder === void 0 ? void 0 : normalizedOrder.external_sale_number;
892
+ if ((normalizedOrder === null || normalizedOrder === void 0 ? void 0 : normalizedOrder.order_id) !== undefined && (normalizedOrder === null || normalizedOrder === void 0 ? void 0 : normalizedOrder.order_id) !== null && (normalizedOrder === null || normalizedOrder === void 0 ? void 0 : normalizedOrder.order_id) !== '') {
893
+ return normalizedOrder;
787
894
  }
788
895
  if (externalSaleNumber === undefined || externalSaleNumber === null || externalSaleNumber === '') {
789
- return order;
896
+ return normalizedOrder;
790
897
  }
791
- return _objectSpread(_objectSpread({}, order), {}, {
898
+ return _objectSpread(_objectSpread({}, normalizedOrder), {}, {
792
899
  order_id: externalSaleNumber
793
900
  });
794
901
  }
@@ -802,7 +909,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
802
909
  value: (function () {
803
910
  var _overwriteExistingOrder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(fresh) {
804
911
  var _this8 = this;
805
- var orderId, key;
912
+ var orderId, key, normalizedFresh, existingOrder, reconciledFresh;
806
913
  return _regeneratorRuntime().wrap(function _callee8$(_context8) {
807
914
  while (1) switch (_context8.prev = _context8.next) {
808
915
  case 0:
@@ -832,26 +939,31 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
832
939
  orderId: orderId,
833
940
  storeOrderCountBefore: this.store.list.length
834
941
  });
942
+ normalizedFresh = this.normalizeOrderForMemoryList(fresh, 'overwriteExistingOrder.incoming');
943
+ existingOrder = this.store.map.get(key);
944
+ reconciledFresh = this.reconcileOverwriteOrderCollections(existingOrder, normalizedFresh);
835
945
  this.store.list = this.store.list.map(function (order) {
836
946
  var id = order === null || order === void 0 ? void 0 : order.order_id;
837
- if (id === undefined || id === null) return order;
838
- return _this8.getIdKey(id) === key ? fresh : order;
947
+ if (id === undefined || id === null) {
948
+ return _this8.normalizeOrderForMemoryList(order, 'overwriteExistingOrder.existingMemory');
949
+ }
950
+ return _this8.getIdKey(id) === key ? reconciledFresh : _this8.normalizeOrderForMemoryList(order, 'overwriteExistingOrder.existingMemory');
839
951
  });
840
952
  this.syncOrdersMap();
841
- _context8.next = 13;
842
- return this.updateOrderInSQLite(fresh, 'overwriteExistingOrder');
843
- case 13:
953
+ _context8.next = 16;
954
+ return this.updateOrderInSQLite(reconciledFresh, 'overwriteExistingOrder');
955
+ case 16:
844
956
  this.logInfo('overwriteExistingOrder-结束', {
845
957
  orderId: orderId,
846
958
  storeOrderCountAfter: this.store.list.length
847
959
  });
848
- _context8.next = 16;
849
- return this.emitOrdersChanged([fresh], 'overwriteExistingOrder');
850
- case 16:
960
+ _context8.next = 19;
961
+ return this.emitOrdersChanged([reconciledFresh], 'overwriteExistingOrder');
962
+ case 19:
851
963
  return _context8.abrupt("return", {
852
964
  overwritten: true
853
965
  });
854
- case 17:
966
+ case 20:
855
967
  case "end":
856
968
  return _context8.stop();
857
969
  }
@@ -979,7 +1091,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
979
1091
  key: "upsertPendingSyncOrders",
980
1092
  value: (function () {
981
1093
  var _upsertPendingSyncOrders = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee11(pendingOrders) {
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;
1094
+ var _this10 = this;
1095
+ var pendingMap, memoryPendingMap, _iterator5, _step5, order, normalizedOrder, storageKey, mergeActions, updatedList, identityKeyToIndex, index, _iterator6, _step6, key, _iterator7, _step7, _step7$value, _storageKey, pendingOrder, matchIndex, existingOrder, mergedOrder, pendingSnapshot, insertIndex, patchedOrders;
983
1096
  return _regeneratorRuntime().wrap(function _callee11$(_context11) {
984
1097
  while (1) switch (_context11.prev = _context11.next) {
985
1098
  case 0:
@@ -992,129 +1105,134 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
992
1105
  case 3:
993
1106
  pendingMap = new Map();
994
1107
  memoryPendingMap = new Map();
995
- _iterator4 = _createForOfIteratorHelper(pendingOrders);
1108
+ _iterator5 = _createForOfIteratorHelper(pendingOrders);
996
1109
  _context11.prev = 6;
997
- _iterator4.s();
1110
+ _iterator5.s();
998
1111
  case 8:
999
- if ((_step4 = _iterator4.n()).done) {
1000
- _context11.next = 17;
1112
+ if ((_step5 = _iterator5.n()).done) {
1113
+ _context11.next = 18;
1001
1114
  break;
1002
1115
  }
1003
- order = _step4.value;
1004
- storageKey = this.getOrderStorageKey(order);
1116
+ order = _step5.value;
1117
+ normalizedOrder = this.normalizeOrderCollectionsForIngress(order, 'upsertPendingSyncOrders.incoming');
1118
+ storageKey = this.getOrderStorageKey(normalizedOrder);
1005
1119
  if (storageKey) {
1006
- _context11.next = 13;
1120
+ _context11.next = 14;
1007
1121
  break;
1008
1122
  }
1009
- return _context11.abrupt("continue", 15);
1010
- case 13:
1011
- pendingMap.set(storageKey, order);
1012
- memoryPendingMap.set(storageKey, this.normalizeOrderForMemoryList(order));
1013
- case 15:
1123
+ return _context11.abrupt("continue", 16);
1124
+ case 14:
1125
+ pendingMap.set(storageKey, normalizedOrder);
1126
+ memoryPendingMap.set(storageKey, this.normalizeOrderForMemoryList(normalizedOrder, 'upsertPendingSyncOrders.memory'));
1127
+ case 16:
1014
1128
  _context11.next = 8;
1015
1129
  break;
1016
- case 17:
1017
- _context11.next = 22;
1130
+ case 18:
1131
+ _context11.next = 23;
1018
1132
  break;
1019
- case 19:
1020
- _context11.prev = 19;
1133
+ case 20:
1134
+ _context11.prev = 20;
1021
1135
  _context11.t0 = _context11["catch"](6);
1022
- _iterator4.e(_context11.t0);
1023
- case 22:
1024
- _context11.prev = 22;
1025
- _iterator4.f();
1026
- return _context11.finish(22);
1027
- case 25:
1136
+ _iterator5.e(_context11.t0);
1137
+ case 23:
1138
+ _context11.prev = 23;
1139
+ _iterator5.f();
1140
+ return _context11.finish(23);
1141
+ case 26:
1028
1142
  if (!(pendingMap.size === 0)) {
1029
- _context11.next = 28;
1143
+ _context11.next = 29;
1030
1144
  break;
1031
1145
  }
1032
1146
  this.logError('upsertPendingSyncOrders-订单缺少可落库标识', {
1033
1147
  count: pendingOrders.length
1034
1148
  });
1035
1149
  return _context11.abrupt("return");
1036
- case 28:
1150
+ case 29:
1037
1151
  this.logInfo('upsertPendingSyncOrders-开始', {
1038
1152
  count: pendingMap.size
1039
1153
  });
1040
- patchedOrders = _toConsumableArray(pendingMap.values());
1041
1154
  mergeActions = {};
1042
- updatedList = _toConsumableArray(this.store.list); // 与 mergeOrdersToStore 一致:基于身份键(field:value)建立索引,把「查找已存在订单」
1155
+ updatedList = this.store.list.map(function (order) {
1156
+ return _this10.normalizeOrderForMemoryList(order, 'upsertPendingSyncOrders.existingMemory');
1157
+ }); // 与 mergeOrdersToStore 一致:基于身份键(field:value)建立索引,把「查找已存在订单」
1043
1158
  // 从 O(n) 线性扫描降为 O(1),整体复杂度由 O(n^2) 降为 O(n + m)。
1044
1159
  identityKeyToIndex = new Map();
1045
1160
  for (index = 0; index < updatedList.length; index += 1) {
1046
- _iterator5 = _createForOfIteratorHelper(this.getOrderIdentityMatchKeys(updatedList[index]));
1161
+ _iterator6 = _createForOfIteratorHelper(this.getOrderIdentityMatchKeys(updatedList[index]));
1047
1162
  try {
1048
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
1049
- key = _step5.value;
1163
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
1164
+ key = _step6.value;
1050
1165
  // 同一 key 命中多张时保留最靠前的下标,与原 findIndex「取首个匹配」一致
1051
1166
  if (!identityKeyToIndex.has(key)) identityKeyToIndex.set(key, index);
1052
1167
  }
1053
1168
  } catch (err) {
1054
- _iterator5.e(err);
1169
+ _iterator6.e(err);
1055
1170
  } finally {
1056
- _iterator5.f();
1171
+ _iterator6.f();
1057
1172
  }
1058
1173
  }
1059
- _iterator6 = _createForOfIteratorHelper(memoryPendingMap.entries());
1174
+ _iterator7 = _createForOfIteratorHelper(memoryPendingMap.entries());
1060
1175
  _context11.prev = 35;
1061
- _iterator6.s();
1176
+ _iterator7.s();
1062
1177
  case 37:
1063
- if ((_step6 = _iterator6.n()).done) {
1064
- _context11.next = 52;
1178
+ if ((_step7 = _iterator7.n()).done) {
1179
+ _context11.next = 55;
1065
1180
  break;
1066
1181
  }
1067
- _step6$value = _slicedToArray(_step6.value, 2), _storageKey = _step6$value[0], pendingOrder = _step6$value[1];
1182
+ _step7$value = _slicedToArray(_step7.value, 2), _storageKey = _step7$value[0], pendingOrder = _step7$value[1];
1068
1183
  matchIndex = this.lookupOrderIndexByIdentityKeys(identityKeyToIndex, this.getOrderIdentityMatchKeys(pendingOrder));
1069
1184
  if (!(matchIndex >= 0)) {
1070
- _context11.next = 46;
1185
+ _context11.next = 49;
1071
1186
  break;
1072
1187
  }
1073
- mergedOrder = this.mergeOrderRecords(updatedList[matchIndex], pendingOrder, {
1074
- preferIncomingProducts: true
1075
- });
1188
+ existingOrder = updatedList[matchIndex];
1189
+ mergedOrder = this.mergeOrderRecords(existingOrder, pendingOrder);
1076
1190
  updatedList[matchIndex] = mergedOrder;
1191
+ pendingSnapshot = pendingMap.get(_storageKey);
1192
+ if (pendingSnapshot) {
1193
+ pendingMap.set(_storageKey, this.reconcileOverwriteOrderCollections(existingOrder, pendingSnapshot));
1194
+ }
1077
1195
  // 合并后身份字段可能新增(如挂单拿到 order_id),同步登记,供同批后续 pending 命中同一槽位
1078
1196
  this.registerOrderIdentityKeys(identityKeyToIndex, mergedOrder, matchIndex);
1079
1197
  mergeActions[_storageKey] = 'update';
1080
- return _context11.abrupt("continue", 50);
1081
- case 46:
1198
+ return _context11.abrupt("continue", 53);
1199
+ case 49:
1082
1200
  insertIndex = updatedList.length;
1083
1201
  updatedList.push(pendingOrder);
1084
1202
  this.registerOrderIdentityKeys(identityKeyToIndex, pendingOrder, insertIndex);
1085
1203
  mergeActions[_storageKey] = 'insert';
1086
- case 50:
1204
+ case 53:
1087
1205
  _context11.next = 37;
1088
1206
  break;
1089
- case 52:
1090
- _context11.next = 57;
1207
+ case 55:
1208
+ _context11.next = 60;
1091
1209
  break;
1092
- case 54:
1093
- _context11.prev = 54;
1094
- _context11.t1 = _context11["catch"](35);
1095
- _iterator6.e(_context11.t1);
1096
1210
  case 57:
1097
1211
  _context11.prev = 57;
1098
- _iterator6.f();
1099
- return _context11.finish(57);
1212
+ _context11.t1 = _context11["catch"](35);
1213
+ _iterator7.e(_context11.t1);
1100
1214
  case 60:
1101
- // 增量索引已保证 store 去重不变量,无需再对全表做 O(n^2) 压缩;仅自检开关开启时兜底。
1215
+ _context11.prev = 60;
1216
+ _iterator7.f();
1217
+ return _context11.finish(60);
1218
+ case 63:
1219
+ patchedOrders = _toConsumableArray(pendingMap.values()); // 增量索引已保证 store 去重不变量,无需再对全表做 O(n^2) 压缩;仅自检开关开启时兜底。
1102
1220
  this.store.list = this.runOrderStoreSelfCheck(updatedList, 'upsertPendingSyncOrders.store');
1103
1221
  this.syncOrdersMap();
1104
- _context11.next = 64;
1222
+ _context11.next = 68;
1105
1223
  return this.patchOrdersInSQLite(patchedOrders, 'upsertPendingSyncOrders', mergeActions);
1106
- case 64:
1224
+ case 68:
1107
1225
  this.logInfo('upsertPendingSyncOrders-结束', {
1108
1226
  count: patchedOrders.length,
1109
1227
  storeOrderCountAfter: this.store.list.length
1110
1228
  });
1111
- _context11.next = 67;
1229
+ _context11.next = 71;
1112
1230
  return this.emitOrdersChanged(patchedOrders, 'upsertPendingSyncOrders');
1113
- case 67:
1231
+ case 71:
1114
1232
  case "end":
1115
1233
  return _context11.stop();
1116
1234
  }
1117
- }, _callee11, this, [[6, 19, 22, 25], [35, 54, 57, 60]]);
1235
+ }, _callee11, this, [[6, 20, 23, 26], [35, 57, 60, 63]]);
1118
1236
  }));
1119
1237
  function upsertPendingSyncOrders(_x7) {
1120
1238
  return _upsertPendingSyncOrders.apply(this, arguments);
@@ -1192,19 +1310,19 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1192
1310
  key: "syncOrdersMap",
1193
1311
  value: function syncOrdersMap() {
1194
1312
  this.store.map.clear();
1195
- var _iterator7 = _createForOfIteratorHelper(this.store.list),
1196
- _step7;
1313
+ var _iterator8 = _createForOfIteratorHelper(this.store.list),
1314
+ _step8;
1197
1315
  try {
1198
- for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
1199
- var order = _step7.value;
1316
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
1317
+ var order = _step8.value;
1200
1318
  var primaryIdentity = this.getOrderMapKey(order);
1201
1319
  if (!primaryIdentity) continue;
1202
1320
  this.store.map.set(primaryIdentity, order);
1203
1321
  }
1204
1322
  } catch (err) {
1205
- _iterator7.e(err);
1323
+ _iterator8.e(err);
1206
1324
  } finally {
1207
- _iterator7.f();
1325
+ _iterator8.f();
1208
1326
  }
1209
1327
  }
1210
1328
  }, {
@@ -1228,7 +1346,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1228
1346
  }, {
1229
1347
  key: "getOrderIdentityEntries",
1230
1348
  value: function getOrderIdentityEntries(order) {
1231
- var _this10 = this;
1349
+ var _this11 = this;
1232
1350
  if (!order) return [];
1233
1351
  var record = order;
1234
1352
  var candidates = [{
@@ -1246,9 +1364,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1246
1364
  }];
1247
1365
  var entries = [];
1248
1366
  var _loop = function _loop() {
1249
- var candidate = _candidates[_i];
1250
- if (_this10.isBlankIdentityValue(candidate.value)) return 0; // continue
1251
- var key = _this10.getIdKey(candidate.value);
1367
+ var candidate = _candidates[_i2];
1368
+ if (_this11.isBlankIdentityValue(candidate.value)) return 0; // continue
1369
+ var key = _this11.getIdKey(candidate.value);
1252
1370
  if (entries.some(function (entry) {
1253
1371
  return entry.field === candidate.field && entry.key === key;
1254
1372
  })) return 0; // continue
@@ -1258,7 +1376,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1258
1376
  });
1259
1377
  },
1260
1378
  _ret;
1261
- for (var _i = 0, _candidates = candidates; _i < _candidates.length; _i++) {
1379
+ for (var _i2 = 0, _candidates = candidates; _i2 < _candidates.length; _i2++) {
1262
1380
  _ret = _loop();
1263
1381
  if (_ret === 0) continue;
1264
1382
  }
@@ -1268,17 +1386,17 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1268
1386
  key: "getOrderIdentityKeys",
1269
1387
  value: function getOrderIdentityKeys(order) {
1270
1388
  var keys = [];
1271
- var _iterator8 = _createForOfIteratorHelper(this.getOrderIdentityEntries(order)),
1272
- _step8;
1389
+ var _iterator9 = _createForOfIteratorHelper(this.getOrderIdentityEntries(order)),
1390
+ _step9;
1273
1391
  try {
1274
- for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
1275
- var entry = _step8.value;
1392
+ for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
1393
+ var entry = _step9.value;
1276
1394
  if (!keys.includes(entry.key)) keys.push(entry.key);
1277
1395
  }
1278
1396
  } catch (err) {
1279
- _iterator8.e(err);
1397
+ _iterator9.e(err);
1280
1398
  } finally {
1281
- _iterator8.f();
1399
+ _iterator9.f();
1282
1400
  }
1283
1401
  return keys;
1284
1402
  }
@@ -1287,8 +1405,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1287
1405
  value: function getOrderDateKey(order) {
1288
1406
  var _order$bookings, _order$bookings2;
1289
1407
  var candidates = [order === null || order === void 0 ? void 0 : order.schedule_date, order === null || order === void 0 ? void 0 : order.create_date, order === null || order === void 0 ? void 0 : order.created_at, order === null || order === void 0 || (_order$bookings = order.bookings) === null || _order$bookings === void 0 || (_order$bookings = _order$bookings[0]) === null || _order$bookings === void 0 ? void 0 : _order$bookings.start_date, order === null || order === void 0 || (_order$bookings2 = order.bookings) === null || _order$bookings2 === void 0 || (_order$bookings2 = _order$bookings2[0]) === null || _order$bookings2 === void 0 ? void 0 : _order$bookings2.select_date];
1290
- for (var _i2 = 0, _candidates2 = candidates; _i2 < _candidates2.length; _i2++) {
1291
- var v = _candidates2[_i2];
1408
+ for (var _i3 = 0, _candidates2 = candidates; _i3 < _candidates2.length; _i3++) {
1409
+ var v = _candidates2[_i3];
1292
1410
  if (!v) continue;
1293
1411
  var text = String(v);
1294
1412
  if (!text) continue;
@@ -1315,7 +1433,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1315
1433
  }, {
1316
1434
  key: "setupOrderSync",
1317
1435
  value: function setupOrderSync() {
1318
- var _this11 = this;
1436
+ var _this12 = this;
1319
1437
  if (!this.orderDataSource) return;
1320
1438
  this.orderDataSource.run({
1321
1439
  pubsub: {
@@ -1323,22 +1441,22 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1323
1441
  var _message$id, _message$order_id, _message$type;
1324
1442
  console.log('orderDataSource', res);
1325
1443
  var pubsubReceivedAt = Date.now();
1326
- var message = _this11.normalizeOrderSyncMessage(res);
1444
+ var message = _this12.normalizeOrderSyncMessage(res);
1327
1445
  if (!message) return;
1328
1446
  message._pubsubReceivedAt = pubsubReceivedAt;
1329
- _this11.pendingSyncMessages.push(message);
1330
- var throttleMs = _this11.getOrderSyncThrottleMs();
1331
- var routeInfo = _this11.resolveSyncMessageRoute(message);
1332
- _this11.logInfo('orderSync-收到消息并入队', {
1447
+ _this12.pendingSyncMessages.push(message);
1448
+ var throttleMs = _this12.getOrderSyncThrottleMs();
1449
+ var routeInfo = _this12.resolveSyncMessageRoute(message);
1450
+ _this12.logInfo('orderSync-收到消息并入队', {
1333
1451
  id: (_message$id = message.id) !== null && _message$id !== void 0 ? _message$id : null,
1334
1452
  order_id: (_message$order_id = message.order_id) !== null && _message$order_id !== void 0 ? _message$order_id : null,
1335
1453
  type: (_message$type = message.type) !== null && _message$type !== void 0 ? _message$type : null,
1336
- pendingCount: _this11.pendingSyncMessages.length,
1454
+ pendingCount: _this12.pendingSyncMessages.length,
1337
1455
  throttleMs: throttleMs,
1338
1456
  pubsubReceivedAt: new Date(pubsubReceivedAt).toISOString(),
1339
1457
  fullMessage: JSON.stringify(message)
1340
1458
  });
1341
- _this11.scheduleOrderSyncThrottle();
1459
+ _this12.scheduleOrderSyncThrottle();
1342
1460
  }
1343
1461
  }
1344
1462
  }).catch(function () {
@@ -1355,7 +1473,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1355
1473
  }, {
1356
1474
  key: "scheduleOrderSyncThrottle",
1357
1475
  value: function scheduleOrderSyncThrottle() {
1358
- var _this12 = this;
1476
+ var _this13 = this;
1359
1477
  if (this.isProcessingSyncBatch) return;
1360
1478
  if (this.isIdlePhase) {
1361
1479
  this.isIdlePhase = false;
@@ -1366,8 +1484,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1366
1484
  if (this.syncTimer) return;
1367
1485
  var throttleMs = this.getOrderSyncThrottleMs();
1368
1486
  this.syncTimer = setTimeout(function () {
1369
- _this12.syncTimer = undefined;
1370
- void _this12.flushOrderSyncMessagesByThrottle();
1487
+ _this13.syncTimer = undefined;
1488
+ void _this13.flushOrderSyncMessagesByThrottle();
1371
1489
  }, throttleMs);
1372
1490
  }
1373
1491
 
@@ -1435,7 +1553,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1435
1553
  key: "processOrderSyncMessages",
1436
1554
  value: (function () {
1437
1555
  var _processOrderSyncMessages = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee14() {
1438
- var _this13 = this;
1556
+ var _this14 = this;
1439
1557
  var messages, batchProcessStartAt, earliestReceivedAt, upsertOrders, refreshIds, uniqueRefreshIds, upsertList, _this$filterRedundant, toFetch, skipped, freshOrders, batchProcessEndAt;
1440
1558
  return _regeneratorRuntime().wrap(function _callee14$(_context14) {
1441
1559
  while (1) switch (_context14.prev = _context14.next) {
@@ -1462,13 +1580,13 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1462
1580
  upsertOrders = new Map();
1463
1581
  refreshIds = [];
1464
1582
  messages.forEach(function (msg, msgIndex) {
1465
- var routeInfo = _this13.resolveSyncMessageRoute(msg);
1583
+ var routeInfo = _this14.resolveSyncMessageRoute(msg);
1466
1584
  var hasBatchIds = routeInfo.hasBatchIds;
1467
1585
  var singleId = routeInfo.singleId;
1468
1586
  var hasSingleId = routeInfo.hasSingleId;
1469
- var normalizedBody = _this13.normalizeOrderSyncPayload(msg.body || msg.data);
1587
+ var normalizedBody = _this14.normalizeOrderSyncPayload(msg.body || msg.data);
1470
1588
  if (routeInfo.route === 'bodyUpsert' && normalizedBody) {
1471
- upsertOrders.set(_this13.getIdKey(normalizedBody.order_id), normalizedBody);
1589
+ upsertOrders.set(_this14.getIdKey(normalizedBody.order_id), normalizedBody);
1472
1590
  return;
1473
1591
  }
1474
1592
  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));
@@ -1606,7 +1724,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1606
1724
  key: "mergeOrdersToStore",
1607
1725
  value: (function () {
1608
1726
  var _mergeOrdersToStore = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee16(freshOrders, source) {
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;
1727
+ var _this15 = this;
1728
+ var storeOrderCountBefore, normalizedFreshOrders, _iterator10, _step10, order, id, uniqueFreshOrders, uniqueFreshCount, patchedOrders, mergeActions, updatedList, identityKeyToIndex, index, identityKeys, _iterator11, _step11, key, _iterator12, _step12, fresh, freshIdentityKeys, matchIndex, storageKey, mergeKey, existingOrder, _ref2, _existingOrder$order_, _ref3, _external_sale_number2, _existingOrder$paymen, _fresh$payment_status, _existingOrder$need_s, _fresh$need_sync, mergedOrder, insertIndex, insertCount, updateCount;
1610
1729
  return _regeneratorRuntime().wrap(function _callee16$(_context16) {
1611
1730
  while (1) switch (_context16.prev = _context16.next) {
1612
1731
  case 0:
@@ -1618,15 +1737,15 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1618
1737
  });
1619
1738
  this.logDuplicateOrders("".concat(source, ".beforeMerge"), this.store.list);
1620
1739
  normalizedFreshOrders = [];
1621
- _iterator9 = _createForOfIteratorHelper(freshOrders);
1740
+ _iterator10 = _createForOfIteratorHelper(freshOrders);
1622
1741
  _context16.prev = 5;
1623
- _iterator9.s();
1742
+ _iterator10.s();
1624
1743
  case 7:
1625
- if ((_step9 = _iterator9.n()).done) {
1744
+ if ((_step10 = _iterator10.n()).done) {
1626
1745
  _context16.next = 15;
1627
1746
  break;
1628
1747
  }
1629
- order = _step9.value;
1748
+ order = _step10.value;
1630
1749
  id = order === null || order === void 0 ? void 0 : order.order_id;
1631
1750
  if (!(id === undefined || id === null)) {
1632
1751
  _context16.next = 12;
@@ -1644,10 +1763,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1644
1763
  case 17:
1645
1764
  _context16.prev = 17;
1646
1765
  _context16.t0 = _context16["catch"](5);
1647
- _iterator9.e(_context16.t0);
1766
+ _iterator10.e(_context16.t0);
1648
1767
  case 20:
1649
1768
  _context16.prev = 20;
1650
- _iterator9.f();
1769
+ _iterator10.f();
1651
1770
  return _context16.finish(20);
1652
1771
  case 23:
1653
1772
  // 先对本批新单做去重(批内规模 m 很小),保证每条 fresh 身份唯一
@@ -1655,34 +1774,36 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1655
1774
  uniqueFreshCount = uniqueFreshOrders.length;
1656
1775
  patchedOrders = [];
1657
1776
  mergeActions = {};
1658
- updatedList = _toConsumableArray(this.store.list); // 基于身份键(field:value)建立索引,把「查找已存在订单」从 O(n) 线性扫描降为 O(1),
1777
+ updatedList = this.store.list.map(function (order) {
1778
+ return _this15.normalizeOrderForMemoryList(order, "".concat(source, ".existingMemory"));
1779
+ }); // 基于身份键(field:value)建立索引,把「查找已存在订单」从 O(n) 线性扫描降为 O(1),
1659
1780
  // 整体合并复杂度由 O(n^2) 降为 O(n + m)。索引语义与 doOrdersShareIdentity 完全一致:
1660
1781
  // 任一身份字段(order_id/external_sale_number/order_number/shop_order_number)同值即同一单。
1661
1782
  identityKeyToIndex = new Map();
1662
1783
  for (index = 0; index < updatedList.length; index += 1) {
1663
1784
  identityKeys = this.getOrderIdentityMatchKeys(updatedList[index]);
1664
- _iterator10 = _createForOfIteratorHelper(identityKeys);
1785
+ _iterator11 = _createForOfIteratorHelper(identityKeys);
1665
1786
  try {
1666
- for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
1667
- key = _step10.value;
1787
+ for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
1788
+ key = _step11.value;
1668
1789
  // 同一 key 命中多张时保留最靠前的下标,与原 findIndex「取首个匹配」一致
1669
1790
  if (!identityKeyToIndex.has(key)) identityKeyToIndex.set(key, index);
1670
1791
  }
1671
1792
  } catch (err) {
1672
- _iterator10.e(err);
1793
+ _iterator11.e(err);
1673
1794
  } finally {
1674
- _iterator10.f();
1795
+ _iterator11.f();
1675
1796
  }
1676
1797
  }
1677
- _iterator11 = _createForOfIteratorHelper(uniqueFreshOrders);
1798
+ _iterator12 = _createForOfIteratorHelper(uniqueFreshOrders);
1678
1799
  _context16.prev = 31;
1679
- _iterator11.s();
1800
+ _iterator12.s();
1680
1801
  case 33:
1681
- if ((_step11 = _iterator11.n()).done) {
1802
+ if ((_step12 = _iterator12.n()).done) {
1682
1803
  _context16.next = 57;
1683
1804
  break;
1684
1805
  }
1685
- fresh = _step11.value;
1806
+ fresh = _step12.value;
1686
1807
  freshIdentityKeys = this.getOrderIdentityMatchKeys(fresh);
1687
1808
  matchIndex = this.lookupOrderIndexByIdentityKeys(identityKeyToIndex, freshIdentityKeys);
1688
1809
  storageKey = this.getOrderStorageKey(fresh);
@@ -1699,7 +1820,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1699
1820
  this.logInfo('mergeOrdersToStore-跳过 pending 订单远端覆盖', {
1700
1821
  source: source,
1701
1822
  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,
1823
+ external_sale_number: (_ref3 = (_external_sale_number2 = existingOrder.external_sale_number) !== null && _external_sale_number2 !== void 0 ? _external_sale_number2 : fresh.external_sale_number) !== null && _ref3 !== void 0 ? _ref3 : null,
1703
1824
  local_payment_status: (_existingOrder$paymen = existingOrder.payment_status) !== null && _existingOrder$paymen !== void 0 ? _existingOrder$paymen : null,
1704
1825
  remote_payment_status: (_fresh$payment_status = fresh.payment_status) !== null && _fresh$payment_status !== void 0 ? _fresh$payment_status : null,
1705
1826
  local_need_sync: (_existingOrder$need_s = existingOrder.need_sync) !== null && _existingOrder$need_s !== void 0 ? _existingOrder$need_s : null,
@@ -1731,10 +1852,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1731
1852
  case 59:
1732
1853
  _context16.prev = 59;
1733
1854
  _context16.t1 = _context16["catch"](31);
1734
- _iterator11.e(_context16.t1);
1855
+ _iterator12.e(_context16.t1);
1735
1856
  case 62:
1736
1857
  _context16.prev = 62;
1737
- _iterator11.f();
1858
+ _iterator12.f();
1738
1859
  return _context16.finish(62);
1739
1860
  case 65:
1740
1861
  insertCount = Object.values(mergeActions).filter(function (v) {
@@ -1786,19 +1907,19 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1786
1907
  key: "lookupOrderIndexByIdentityKeys",
1787
1908
  value: function lookupOrderIndexByIdentityKeys(identityKeyToIndex, identityKeys) {
1788
1909
  var matchIndex = -1;
1789
- var _iterator12 = _createForOfIteratorHelper(identityKeys),
1790
- _step12;
1910
+ var _iterator13 = _createForOfIteratorHelper(identityKeys),
1911
+ _step13;
1791
1912
  try {
1792
- for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
1793
- var key = _step12.value;
1913
+ for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
1914
+ var key = _step13.value;
1794
1915
  var index = identityKeyToIndex.get(key);
1795
1916
  if (index === undefined) continue;
1796
1917
  if (matchIndex < 0 || index < matchIndex) matchIndex = index;
1797
1918
  }
1798
1919
  } catch (err) {
1799
- _iterator12.e(err);
1920
+ _iterator13.e(err);
1800
1921
  } finally {
1801
- _iterator12.f();
1922
+ _iterator13.f();
1802
1923
  }
1803
1924
  return matchIndex;
1804
1925
  }
@@ -1819,17 +1940,17 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1819
1940
  key: "registerOrderIdentityKeys",
1820
1941
  value: function registerOrderIdentityKeys(identityKeyToIndex, order, index) {
1821
1942
  var identityKeys = this.getOrderIdentityMatchKeys(order);
1822
- var _iterator13 = _createForOfIteratorHelper(identityKeys),
1823
- _step13;
1943
+ var _iterator14 = _createForOfIteratorHelper(identityKeys),
1944
+ _step14;
1824
1945
  try {
1825
- for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
1826
- var key = _step13.value;
1946
+ for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
1947
+ var key = _step14.value;
1827
1948
  identityKeyToIndex.set(key, index);
1828
1949
  }
1829
1950
  } catch (err) {
1830
- _iterator13.e(err);
1951
+ _iterator14.e(err);
1831
1952
  } finally {
1832
- _iterator13.f();
1953
+ _iterator14.f();
1833
1954
  }
1834
1955
  }
1835
1956
 
@@ -1884,17 +2005,17 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1884
2005
  key: "uniqueOrderIds",
1885
2006
  value: function uniqueOrderIds(ids) {
1886
2007
  var idMap = new Map();
1887
- var _iterator14 = _createForOfIteratorHelper(ids),
1888
- _step14;
2008
+ var _iterator15 = _createForOfIteratorHelper(ids),
2009
+ _step15;
1889
2010
  try {
1890
- for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
1891
- var id = _step14.value;
2011
+ for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
2012
+ var id = _step15.value;
1892
2013
  idMap.set(this.getIdKey(id), id);
1893
2014
  }
1894
2015
  } catch (err) {
1895
- _iterator14.e(err);
2016
+ _iterator15.e(err);
1896
2017
  } finally {
1897
- _iterator14.f();
2018
+ _iterator15.f();
1898
2019
  }
1899
2020
  return _toConsumableArray(idMap.values());
1900
2021
  }
@@ -1906,12 +2027,12 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1906
2027
  }, {
1907
2028
  key: "isOrderLookupMatch",
1908
2029
  value: function isOrderLookupMatch(order, lookupKey) {
1909
- var _this14 = this;
2030
+ var _this16 = this;
1910
2031
  if (!order || !lookupKey) return false;
1911
2032
  var candidates = [order.order_id, order.external_sale_number, order.order_number, order.shop_order_number, order.shop_full_order_number];
1912
2033
  return candidates.some(function (value) {
1913
2034
  if (value === undefined || value === null || value === '') return false;
1914
- return _this14.getIdKey(value) === lookupKey;
2035
+ return _this16.getIdKey(value) === lookupKey;
1915
2036
  });
1916
2037
  }
1917
2038
 
@@ -1954,10 +2075,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1954
2075
  }, {
1955
2076
  key: "findOrderIndexByIdentity",
1956
2077
  value: function findOrderIndexByIdentity(orders, target) {
1957
- var _this15 = this;
2078
+ var _this17 = this;
1958
2079
  if (this.getOrderIdentityMatchKeys(target).length === 0) return -1;
1959
2080
  return orders.findIndex(function (order) {
1960
- return _this15.doOrdersShareIdentity(order, target);
2081
+ return _this17.doOrdersShareIdentity(order, target);
1961
2082
  });
1962
2083
  }
1963
2084
  }, {
@@ -1981,153 +2102,22 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1981
2102
  if (rightScore >= leftScore) return right;
1982
2103
  return left;
1983
2104
  }
1984
- }, {
1985
- key: "getProductIdentityKeys",
1986
- value: function getProductIdentityKeys(product) {
1987
- var _record$metadata;
1988
- var record = product;
1989
- if (!record) return [];
1990
- var keys = [];
1991
- var metadataUid = (_record$metadata = record.metadata) === null || _record$metadata === void 0 ? void 0 : _record$metadata.unique_identification_number;
1992
- if (!this.isBlankIdentityValue(metadataUid)) keys.push("uid:".concat(String(metadataUid)));
1993
- var topLevelUid = record.unique_identification_number;
1994
- if (!this.isBlankIdentityValue(topLevelUid)) keys.push("uid:".concat(String(topLevelUid)));
1995
- var orderDetailId = record.order_detail_id;
1996
- if (!this.isBlankIdentityValue(orderDetailId)) keys.push("detail:".concat(String(orderDetailId)));
1997
- var bookingUid = record.booking_uid;
1998
- if (!this.isBlankIdentityValue(bookingUid)) keys.push("booking:".concat(String(bookingUid)));
1999
- return keys;
2000
- }
2001
- }, {
2002
- key: "mergeOrderProductLists",
2003
- value: function mergeOrderProductLists(preferred, secondary) {
2004
- var preferredList = Array.isArray(preferred) ? preferred : [];
2005
- var secondaryList = Array.isArray(secondary) ? secondary : [];
2006
- if (secondaryList.length === 0) return preferredList;
2007
- if (preferredList.length === 0) return secondaryList;
2008
- var seenKeys = new Set();
2009
- var _iterator15 = _createForOfIteratorHelper(preferredList),
2010
- _step15;
2011
- try {
2012
- for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
2013
- var item = _step15.value;
2014
- var keys = this.getProductIdentityKeys(item);
2015
- var _iterator17 = _createForOfIteratorHelper(keys),
2016
- _step17;
2017
- try {
2018
- for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
2019
- var key = _step17.value;
2020
- seenKeys.add(key);
2021
- }
2022
- } catch (err) {
2023
- _iterator17.e(err);
2024
- } finally {
2025
- _iterator17.f();
2026
- }
2027
- }
2028
- } catch (err) {
2029
- _iterator15.e(err);
2030
- } finally {
2031
- _iterator15.f();
2032
- }
2033
- var result = _toConsumableArray(preferredList);
2034
- var _iterator16 = _createForOfIteratorHelper(secondaryList),
2035
- _step16;
2036
- try {
2037
- for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
2038
- var _item = _step16.value;
2039
- var _keys = this.getProductIdentityKeys(_item);
2040
- if (_keys.length === 0 || _keys.some(function (key) {
2041
- return seenKeys.has(key);
2042
- })) continue;
2043
- var _iterator18 = _createForOfIteratorHelper(_keys),
2044
- _step18;
2045
- try {
2046
- for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {
2047
- var _key = _step18.value;
2048
- seenKeys.add(_key);
2049
- }
2050
- } catch (err) {
2051
- _iterator18.e(err);
2052
- } finally {
2053
- _iterator18.f();
2054
- }
2055
- result.push(cloneDeep(_item));
2056
- }
2057
- } catch (err) {
2058
- _iterator16.e(err);
2059
- } finally {
2060
- _iterator16.f();
2061
- }
2062
- return result;
2063
- }
2064
- }, {
2065
- key: "getPaymentMergeKey",
2066
- value: function getPaymentMergeKey(payment) {
2067
- var _record$metadata2;
2068
- var record = payment;
2069
- if (!record) return '';
2070
- var uniquePaymentNumber = (_record$metadata2 = record.metadata) === null || _record$metadata2 === void 0 ? void 0 : _record$metadata2.unique_payment_number;
2071
- if (!this.isBlankIdentityValue(uniquePaymentNumber)) {
2072
- return "unique:".concat(String(uniquePaymentNumber));
2073
- }
2074
- var orderPaymentId = record.order_payment_id;
2075
- if (!this.isBlankIdentityValue(orderPaymentId)) return "order_payment:".concat(String(orderPaymentId));
2076
- var code = record.code;
2077
- var customPaymentId = record.custom_payment_id;
2078
- if (!this.isBlankIdentityValue(code) && !this.isBlankIdentityValue(customPaymentId)) {
2079
- return "custom:".concat(String(code), "#").concat(String(customPaymentId));
2080
- }
2081
- return '';
2082
- }
2083
- }, {
2084
- key: "mergeOrderPaymentLists",
2085
- value: function mergeOrderPaymentLists(existing, incoming) {
2086
- var _this16 = this;
2087
- var existingList = Array.isArray(existing) ? existing : [];
2088
- var incomingList = Array.isArray(incoming) ? incoming : [];
2089
- if (incomingList.length === 0) return cloneDeep(existingList);
2090
- if (existingList.length === 0) return cloneDeep(incomingList);
2091
- var existingByKey = new Map();
2092
- var _iterator19 = _createForOfIteratorHelper(existingList),
2093
- _step19;
2094
- try {
2095
- for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {
2096
- var payment = _step19.value;
2097
- var key = this.getPaymentMergeKey(payment);
2098
- if (!key) continue;
2099
- existingByKey.set(key, payment);
2100
- }
2101
- } catch (err) {
2102
- _iterator19.e(err);
2103
- } finally {
2104
- _iterator19.f();
2105
- }
2106
- return incomingList.map(function (payment) {
2107
- var incomingPayment = payment;
2108
- var key = _this16.getPaymentMergeKey(incomingPayment);
2109
- var existingPayment = key ? existingByKey.get(key) : undefined;
2110
- if (!existingPayment) return cloneDeep(incomingPayment);
2111
- return _objectSpread(_objectSpread(_objectSpread({}, cloneDeep(existingPayment)), cloneDeep(incomingPayment)), {}, {
2112
- metadata: _objectSpread(_objectSpread({}, cloneDeep(existingPayment.metadata || {})), cloneDeep(incomingPayment.metadata || {}))
2113
- });
2114
- });
2115
- }
2116
2105
  }, {
2117
2106
  key: "mergeOrderRecords",
2118
- value: function mergeOrderRecords(existing, incoming, options) {
2107
+ value: function mergeOrderRecords(existing, incoming) {
2119
2108
  var preferred = this.pickPreferredOrder(existing, incoming);
2120
2109
  var secondary = preferred === existing ? incoming : existing;
2121
2110
  var merged = _objectSpread(_objectSpread({}, secondary), preferred);
2122
2111
  var fieldsToPreserve = ['order_id', 'external_sale_number', 'order_number', 'shop_order_number', 'shop_full_order_number'];
2123
- var incomingPatchFields = ['payment_status', 'status', 'shipping_status', 'updated_at', 'shop_discount', 'summary', 'products', 'bookings', 'note', 'customer_id', 'customer_name', 'customer', 'holder', 'contacts_info', 'phone', 'email', 'relation_forms'];
2112
+ var incomingPatchFields = ['payment_status', 'status', 'shipping_status', 'updated_at', 'shop_discount', 'summary', 'note', 'customer_id', 'customer_name', 'customer', 'holder', 'contacts_info', 'phone', 'email', 'relation_forms'];
2124
2113
  var mergedRecord = merged;
2125
2114
  var preferredRecord = preferred;
2126
2115
  var secondaryRecord = secondary;
2116
+ var existingRecord = existing;
2127
2117
  var incomingRecord = incoming;
2128
- var previousRecord = preferred === incoming ? secondaryRecord : preferredRecord;
2129
- for (var _i3 = 0, _fieldsToPreserve = fieldsToPreserve; _i3 < _fieldsToPreserve.length; _i3++) {
2130
- var field = _fieldsToPreserve[_i3];
2118
+ var childUidRemaps = [];
2119
+ for (var _i4 = 0, _fieldsToPreserve = fieldsToPreserve; _i4 < _fieldsToPreserve.length; _i4++) {
2120
+ var field = _fieldsToPreserve[_i4];
2131
2121
  if (!this.isBlankIdentityValue(preferredRecord[field])) {
2132
2122
  mergedRecord[field] = preferredRecord[field];
2133
2123
  continue;
@@ -2136,56 +2126,61 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2136
2126
  mergedRecord[field] = secondaryRecord[field];
2137
2127
  }
2138
2128
  }
2139
- var hasIncomingProducts = Object.prototype.hasOwnProperty.call(incomingRecord, 'products');
2140
- var shouldUseIncomingProductsSnapshot = (options === null || options === void 0 ? void 0 : options.preferIncomingProducts) === true && hasIncomingProducts && incomingRecord.products !== undefined && incomingRecord.products !== null;
2141
- for (var _i4 = 0, _incomingPatchFields = incomingPatchFields; _i4 < _incomingPatchFields.length; _i4++) {
2142
- var _field = _incomingPatchFields[_i4];
2129
+ for (var _i5 = 0, _incomingPatchFields = incomingPatchFields; _i5 < _incomingPatchFields.length; _i5++) {
2130
+ var _field = _incomingPatchFields[_i5];
2143
2131
  if (!Object.prototype.hasOwnProperty.call(incomingRecord, _field)) continue;
2144
2132
  if (incomingRecord[_field] === undefined || incomingRecord[_field] === null) continue;
2145
2133
  if (typeof incomingRecord[_field] === 'string' && incomingRecord[_field] === '') continue;
2146
2134
  mergedRecord[_field] = cloneDeep(incomingRecord[_field]);
2147
2135
  }
2148
- mergedRecord.products = shouldUseIncomingProductsSnapshot ? cloneDeep(incomingRecord.products) : this.mergeOrderProductLists(preferredRecord.products, secondaryRecord.products);
2149
- if (Object.prototype.hasOwnProperty.call(incomingRecord, 'payments')) {
2150
- if (Array.isArray(incomingRecord.payments)) {
2151
- mergedRecord.payments = this.mergeOrderPaymentLists(previousRecord.payments, incomingRecord.payments);
2152
- } else if (incomingRecord.payments !== undefined && incomingRecord.payments !== null) {
2153
- mergedRecord.payments = cloneDeep(incomingRecord.payments);
2136
+
2137
+ // 子项数组遵循完整快照语义:incoming 自有且为数组(包括 [])时权威替换;
2138
+ // 字段缺席或不是数组时视为稀疏 patch,继续保留 existing。
2139
+ for (var _i6 = 0, _ORDER_AUTHORITATIVE_2 = ORDER_AUTHORITATIVE_COLLECTION_FIELDS; _i6 < _ORDER_AUTHORITATIVE_2.length; _i6++) {
2140
+ var _field2 = _ORDER_AUTHORITATIVE_2[_i6];
2141
+ if (Array.isArray(incomingRecord[_field2])) {
2142
+ mergedRecord[_field2] = this.mergeAuthoritativeOrderCollection(_field2, existingRecord[_field2], incomingRecord[_field2], childUidRemaps);
2143
+ continue;
2144
+ }
2145
+ if (Object.prototype.hasOwnProperty.call(existingRecord, _field2)) {
2146
+ mergedRecord[_field2] = cloneDeep(existingRecord[_field2]);
2147
+ } else {
2148
+ delete mergedRecord[_field2];
2154
2149
  }
2155
2150
  }
2156
2151
  if (!this.isPendingSyncOrder(preferred) || !this.isPendingSyncOrder(secondary)) {
2157
2152
  merged.need_sync = 0;
2158
2153
  }
2159
- return merged;
2154
+ return this.normalizeOrderCollectionsForIngress(applyOrderCollectionUidRemaps(merged, childUidRemaps), 'mergeOrderRecords');
2160
2155
  }
2161
2156
  }, {
2162
2157
  key: "summarizeDuplicateOrders",
2163
2158
  value: function summarizeDuplicateOrders(orders) {
2164
2159
  var groups = new Map();
2165
- var _iterator20 = _createForOfIteratorHelper(orders),
2166
- _step20;
2160
+ var _iterator16 = _createForOfIteratorHelper(orders),
2161
+ _step16;
2167
2162
  try {
2168
- for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {
2169
- var order = _step20.value;
2170
- var _iterator21 = _createForOfIteratorHelper(this.getOrderIdentityMatchKeys(order)),
2171
- _step21;
2163
+ for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
2164
+ var order = _step16.value;
2165
+ var _iterator17 = _createForOfIteratorHelper(this.getOrderIdentityMatchKeys(order)),
2166
+ _step17;
2172
2167
  try {
2173
- for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {
2174
- var key = _step21.value;
2168
+ for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
2169
+ var key = _step17.value;
2175
2170
  var group = groups.get(key) || [];
2176
2171
  group.push(order);
2177
2172
  groups.set(key, group);
2178
2173
  }
2179
2174
  } catch (err) {
2180
- _iterator21.e(err);
2175
+ _iterator17.e(err);
2181
2176
  } finally {
2182
- _iterator21.f();
2177
+ _iterator17.f();
2183
2178
  }
2184
2179
  }
2185
2180
  } catch (err) {
2186
- _iterator20.e(err);
2181
+ _iterator16.e(err);
2187
2182
  } finally {
2188
- _iterator20.f();
2183
+ _iterator16.f();
2189
2184
  }
2190
2185
  return _toConsumableArray(groups.entries()).filter(function (_ref4) {
2191
2186
  var _ref5 = _slicedToArray(_ref4, 2),
@@ -2199,10 +2194,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2199
2194
  key: key,
2200
2195
  count: group.length,
2201
2196
  orders: group.map(function (order) {
2202
- var _order$order_id2, _external_sale_number2, _shop_order_number, _shop_full_order_numb, _order$need_sync;
2197
+ var _order$order_id3, _external_sale_number3, _shop_order_number, _shop_full_order_numb, _order$need_sync;
2203
2198
  return {
2204
- order_id: (_order$order_id2 = order.order_id) !== null && _order$order_id2 !== void 0 ? _order$order_id2 : null,
2205
- external_sale_number: (_external_sale_number2 = order.external_sale_number) !== null && _external_sale_number2 !== void 0 ? _external_sale_number2 : null,
2199
+ order_id: (_order$order_id3 = order.order_id) !== null && _order$order_id3 !== void 0 ? _order$order_id3 : null,
2200
+ external_sale_number: (_external_sale_number3 = order.external_sale_number) !== null && _external_sale_number3 !== void 0 ? _external_sale_number3 : null,
2206
2201
  shop_order_number: (_shop_order_number = order.shop_order_number) !== null && _shop_order_number !== void 0 ? _shop_order_number : null,
2207
2202
  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,
2208
2203
  need_sync: (_order$need_sync = order.need_sync) !== null && _order$need_sync !== void 0 ? _order$need_sync : null
@@ -2227,23 +2222,24 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2227
2222
  value: function compactOrderListByIdentity(orders, source) {
2228
2223
  var list = [];
2229
2224
  var removedCount = 0;
2230
- var _iterator22 = _createForOfIteratorHelper(orders),
2231
- _step22;
2225
+ var _iterator18 = _createForOfIteratorHelper(orders),
2226
+ _step18;
2232
2227
  try {
2233
- for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {
2234
- var order = _step22.value;
2235
- var matchIndex = this.findOrderIndexByIdentity(list, order);
2228
+ for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {
2229
+ var order = _step18.value;
2230
+ var normalizedOrder = this.normalizeOrderCollectionsForIngress(order, "".concat(source, ".order"));
2231
+ var matchIndex = this.findOrderIndexByIdentity(list, normalizedOrder);
2236
2232
  if (matchIndex < 0) {
2237
- list.push(order);
2233
+ list.push(normalizedOrder);
2238
2234
  continue;
2239
2235
  }
2240
- list[matchIndex] = this.mergeOrderRecords(list[matchIndex], order);
2236
+ list[matchIndex] = this.mergeOrderRecords(list[matchIndex], normalizedOrder);
2241
2237
  removedCount += 1;
2242
2238
  }
2243
2239
  } catch (err) {
2244
- _iterator22.e(err);
2240
+ _iterator18.e(err);
2245
2241
  } finally {
2246
- _iterator22.f();
2242
+ _iterator18.f();
2247
2243
  }
2248
2244
  if (removedCount > 0) {
2249
2245
  this.logWarning('订单列表重复项已压缩', {
@@ -2342,6 +2338,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2342
2338
  key: "loadOrdersFromSQLite",
2343
2339
  value: function () {
2344
2340
  var _loadOrdersFromSQLite = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee17() {
2341
+ var _this18 = this;
2345
2342
  var orders;
2346
2343
  return _regeneratorRuntime().wrap(function _callee17$(_context17) {
2347
2344
  while (1) switch (_context17.prev = _context17.next) {
@@ -2357,7 +2354,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2357
2354
  return this.dbManager.getAll(INDEXDB_STORE_NAME);
2358
2355
  case 5:
2359
2356
  orders = _context17.sent;
2360
- return _context17.abrupt("return", orders || []);
2357
+ return _context17.abrupt("return", (orders || []).map(function (order) {
2358
+ return _this18.normalizeOrderCollectionsForIngress(order, 'loadOrdersFromSQLite');
2359
+ }));
2361
2360
  case 9:
2362
2361
  _context17.prev = 9;
2363
2362
  _context17.t0 = _context17["catch"](2);
@@ -2381,23 +2380,25 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2381
2380
  }, {
2382
2381
  key: "normalizeRemoteSyncedOrder",
2383
2382
  value: function normalizeRemoteSyncedOrder(order) {
2384
- if (this.isPendingSyncOrder(order)) return order;
2385
- return _objectSpread(_objectSpread({}, order), {}, {
2383
+ var normalizedOrder = this.normalizeOrderCollectionsForIngress(order, 'normalizeRemoteSyncedOrder');
2384
+ if (this.isPendingSyncOrder(normalizedOrder)) return normalizedOrder;
2385
+ return _objectSpread(_objectSpread({}, normalizedOrder), {}, {
2386
2386
  need_sync: 0
2387
2387
  });
2388
2388
  }
2389
2389
  }, {
2390
2390
  key: "mergeRemoteSnapshotWithPendingOrders",
2391
2391
  value: function mergeRemoteSnapshotWithPendingOrders(remoteOrders, existingOrders) {
2392
- var _this17 = this;
2392
+ var _this19 = this;
2393
2393
  var merged = remoteOrders.map(function (order) {
2394
- return _this17.normalizeRemoteSyncedOrder(order);
2394
+ return _this19.normalizeRemoteSyncedOrder(order);
2395
2395
  });
2396
- var _iterator23 = _createForOfIteratorHelper(existingOrders),
2397
- _step23;
2396
+ var _iterator19 = _createForOfIteratorHelper(existingOrders),
2397
+ _step19;
2398
2398
  try {
2399
- for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {
2400
- var order = _step23.value;
2399
+ for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {
2400
+ var rawOrder = _step19.value;
2401
+ var order = this.normalizeOrderCollectionsForIngress(rawOrder, 'mergeRemoteSnapshotWithPendingOrders.existingSQLite');
2401
2402
  if (!this.isPendingSyncOrder(order)) continue;
2402
2403
  var matchIndex = this.findOrderIndexByIdentity(merged, order);
2403
2404
  if (matchIndex >= 0) {
@@ -2408,9 +2409,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2408
2409
  merged.push(order);
2409
2410
  }
2410
2411
  } catch (err) {
2411
- _iterator23.e(err);
2412
+ _iterator19.e(err);
2412
2413
  } finally {
2413
- _iterator23.f();
2414
+ _iterator19.f();
2414
2415
  }
2415
2416
  return this.compactOrderListByIdentity(merged, 'mergeRemoteSnapshotWithPendingOrders').list;
2416
2417
  }
@@ -2460,7 +2461,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2460
2461
  key: "patchOrdersInSQLite",
2461
2462
  value: (function () {
2462
2463
  var _patchOrdersInSQLite = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee20(orders, source) {
2463
- var _this18 = this;
2464
+ var _this20 = this;
2464
2465
  var mergeActions,
2465
2466
  ordersSnapshot,
2466
2467
  _this$filterRedundant2,
@@ -2478,8 +2479,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2478
2479
  }
2479
2480
  return _context20.abrupt("return");
2480
2481
  case 3:
2481
- ordersSnapshot = cloneDeep(orders).filter(function (order) {
2482
- return _this18.getOrderStorageKey(order);
2482
+ ordersSnapshot = cloneDeep(orders).map(function (order) {
2483
+ return _this20.normalizeOrderCollectionsForIngress(order, "".concat(source, ".sqliteIngress"));
2484
+ }).filter(function (order) {
2485
+ return _this20.getOrderStorageKey(order);
2483
2486
  });
2484
2487
  if (!(ordersSnapshot.length === 0)) {
2485
2488
  _context20.next = 6;
@@ -2504,54 +2507,54 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2504
2507
  _context20.prev = 12;
2505
2508
  _context20.next = 15;
2506
2509
  return this.runInOrderSQLiteSaveQueue( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee19() {
2507
- var writeMethod, _iterator24, _step24, order;
2510
+ var writeMethod, _iterator20, _step20, order;
2508
2511
  return _regeneratorRuntime().wrap(function _callee19$(_context19) {
2509
2512
  while (1) switch (_context19.prev = _context19.next) {
2510
2513
  case 0:
2511
2514
  writeMethod = 'none';
2512
- _this18.logInfo('patchOrdersInSQLite-开始', {
2515
+ _this20.logInfo('patchOrdersInSQLite-开始', {
2513
2516
  source: source,
2514
2517
  count: compactedToWrite.length,
2515
2518
  dedupedCount: skipped.length
2516
2519
  });
2517
- if (!(typeof _this18.dbManager.bulkUpdate === 'function')) {
2520
+ if (!(typeof _this20.dbManager.bulkUpdate === 'function')) {
2518
2521
  _context19.next = 8;
2519
2522
  break;
2520
2523
  }
2521
2524
  writeMethod = 'bulkUpdate';
2522
2525
  _context19.next = 6;
2523
- return _this18.dbManager.bulkUpdate(INDEXDB_STORE_NAME, compactedToWrite);
2526
+ return _this20.dbManager.bulkUpdate(INDEXDB_STORE_NAME, compactedToWrite);
2524
2527
  case 6:
2525
2528
  _context19.next = 33;
2526
2529
  break;
2527
2530
  case 8:
2528
- if (!(typeof _this18.dbManager.bulkAdd === 'function')) {
2531
+ if (!(typeof _this20.dbManager.bulkAdd === 'function')) {
2529
2532
  _context19.next = 14;
2530
2533
  break;
2531
2534
  }
2532
2535
  writeMethod = 'bulkAdd';
2533
2536
  _context19.next = 12;
2534
- return _this18.dbManager.bulkAdd(INDEXDB_STORE_NAME, compactedToWrite);
2537
+ return _this20.dbManager.bulkAdd(INDEXDB_STORE_NAME, compactedToWrite);
2535
2538
  case 12:
2536
2539
  _context19.next = 33;
2537
2540
  break;
2538
2541
  case 14:
2539
- if (!(typeof _this18.dbManager.update === 'function')) {
2542
+ if (!(typeof _this20.dbManager.update === 'function')) {
2540
2543
  _context19.next = 33;
2541
2544
  break;
2542
2545
  }
2543
2546
  writeMethod = 'update';
2544
- _iterator24 = _createForOfIteratorHelper(compactedToWrite);
2547
+ _iterator20 = _createForOfIteratorHelper(compactedToWrite);
2545
2548
  _context19.prev = 17;
2546
- _iterator24.s();
2549
+ _iterator20.s();
2547
2550
  case 19:
2548
- if ((_step24 = _iterator24.n()).done) {
2551
+ if ((_step20 = _iterator20.n()).done) {
2549
2552
  _context19.next = 25;
2550
2553
  break;
2551
2554
  }
2552
- order = _step24.value;
2555
+ order = _step20.value;
2553
2556
  _context19.next = 23;
2554
- return _this18.dbManager.update(INDEXDB_STORE_NAME, order);
2557
+ return _this20.dbManager.update(INDEXDB_STORE_NAME, order);
2555
2558
  case 23:
2556
2559
  _context19.next = 19;
2557
2560
  break;
@@ -2561,14 +2564,14 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2561
2564
  case 27:
2562
2565
  _context19.prev = 27;
2563
2566
  _context19.t0 = _context19["catch"](17);
2564
- _iterator24.e(_context19.t0);
2567
+ _iterator20.e(_context19.t0);
2565
2568
  case 30:
2566
2569
  _context19.prev = 30;
2567
- _iterator24.f();
2570
+ _iterator20.f();
2568
2571
  return _context19.finish(30);
2569
2572
  case 33:
2570
- _this18.recordRecentSqliteWrite(source, compactedToWrite);
2571
- _this18.logInfo('patchOrdersInSQLite-完成', {
2573
+ _this20.recordRecentSqliteWrite(source, compactedToWrite);
2574
+ _this20.logInfo('patchOrdersInSQLite-完成', {
2572
2575
  source: source,
2573
2576
  count: compactedToWrite.length,
2574
2577
  writeMethod: writeMethod,
@@ -2612,7 +2615,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2612
2615
  key: "updateOrderInSQLite",
2613
2616
  value: (function () {
2614
2617
  var _updateOrderInSQLite = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee22(order, source) {
2615
- var _this19 = this;
2618
+ var _this21 = this;
2616
2619
  var orderSnapshot, _orderSnapshot$order_3;
2617
2620
  return _regeneratorRuntime().wrap(function _callee22$(_context22) {
2618
2621
  while (1) switch (_context22.prev = _context22.next) {
@@ -2623,7 +2626,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2623
2626
  }
2624
2627
  return _context22.abrupt("return");
2625
2628
  case 2:
2626
- orderSnapshot = cloneDeep(order);
2629
+ orderSnapshot = this.normalizeOrderCollectionsForIngress(cloneDeep(order), "".concat(source, ".sqliteIngress"));
2627
2630
  _context22.prev = 3;
2628
2631
  _context22.next = 6;
2629
2632
  return this.runInOrderSQLiteSaveQueue( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee21() {
@@ -2633,43 +2636,43 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2633
2636
  while (1) switch (_context21.prev = _context21.next) {
2634
2637
  case 0:
2635
2638
  writeMethod = 'none';
2636
- _this19.logInfo('updateOrderInSQLite-开始', {
2639
+ _this21.logInfo('updateOrderInSQLite-开始', {
2637
2640
  source: source,
2638
2641
  orderId: (_orderSnapshot$order_ = orderSnapshot.order_id) !== null && _orderSnapshot$order_ !== void 0 ? _orderSnapshot$order_ : null,
2639
- storageKey: _this19.getOrderStorageKey(orderSnapshot)
2642
+ storageKey: _this21.getOrderStorageKey(orderSnapshot)
2640
2643
  });
2641
- if (!(typeof _this19.dbManager.update === 'function')) {
2644
+ if (!(typeof _this21.dbManager.update === 'function')) {
2642
2645
  _context21.next = 8;
2643
2646
  break;
2644
2647
  }
2645
2648
  writeMethod = 'update';
2646
2649
  _context21.next = 6;
2647
- return _this19.dbManager.update(INDEXDB_STORE_NAME, orderSnapshot);
2650
+ return _this21.dbManager.update(INDEXDB_STORE_NAME, orderSnapshot);
2648
2651
  case 6:
2649
2652
  _context21.next = 18;
2650
2653
  break;
2651
2654
  case 8:
2652
- if (!(typeof _this19.dbManager.bulkUpdate === 'function')) {
2655
+ if (!(typeof _this21.dbManager.bulkUpdate === 'function')) {
2653
2656
  _context21.next = 14;
2654
2657
  break;
2655
2658
  }
2656
2659
  writeMethod = 'bulkUpdate';
2657
2660
  _context21.next = 12;
2658
- return _this19.dbManager.bulkUpdate(INDEXDB_STORE_NAME, [orderSnapshot]);
2661
+ return _this21.dbManager.bulkUpdate(INDEXDB_STORE_NAME, [orderSnapshot]);
2659
2662
  case 12:
2660
2663
  _context21.next = 18;
2661
2664
  break;
2662
2665
  case 14:
2663
- if (!(typeof _this19.dbManager.bulkAdd === 'function')) {
2666
+ if (!(typeof _this21.dbManager.bulkAdd === 'function')) {
2664
2667
  _context21.next = 18;
2665
2668
  break;
2666
2669
  }
2667
2670
  writeMethod = 'bulkAdd';
2668
2671
  _context21.next = 18;
2669
- return _this19.dbManager.bulkAdd(INDEXDB_STORE_NAME, [orderSnapshot]);
2672
+ return _this21.dbManager.bulkAdd(INDEXDB_STORE_NAME, [orderSnapshot]);
2670
2673
  case 18:
2671
- _this19.recordRecentSqliteWrite(source, [orderSnapshot]);
2672
- _this19.logInfo('updateOrderInSQLite-完成', {
2674
+ _this21.recordRecentSqliteWrite(source, [orderSnapshot]);
2675
+ _this21.logInfo('updateOrderInSQLite-完成', {
2673
2676
  source: source,
2674
2677
  orderId: (_orderSnapshot$order_2 = orderSnapshot.order_id) !== null && _orderSnapshot$order_2 !== void 0 ? _orderSnapshot$order_2 : null,
2675
2678
  writeMethod: writeMethod
@@ -2712,7 +2715,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2712
2715
  key: "replaceOrdersSnapshotInSQLite",
2713
2716
  value: (function () {
2714
2717
  var _replaceOrdersSnapshotInSQLite = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee24(orderList, source) {
2715
- var _this20 = this;
2718
+ var _this22 = this;
2716
2719
  var remoteSnapshot, mergedSnapshot;
2717
2720
  return _regeneratorRuntime().wrap(function _callee24$(_context24) {
2718
2721
  while (1) switch (_context24.prev = _context24.next) {
@@ -2722,12 +2725,14 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2722
2725
  break;
2723
2726
  }
2724
2727
  return _context24.abrupt("return", this.compactOrderListByIdentity(orderList.map(function (order) {
2725
- return _this20.normalizeRemoteSyncedOrder(order);
2728
+ return _this22.normalizeRemoteSyncedOrder(order);
2726
2729
  }), "".concat(source, ".snapshotNoDb")).list);
2727
2730
  case 2:
2728
- remoteSnapshot = cloneDeep(orderList);
2731
+ remoteSnapshot = cloneDeep(orderList).map(function (order) {
2732
+ return _this22.normalizeOrderCollectionsForIngress(order, "".concat(source, ".remoteIngress"));
2733
+ });
2729
2734
  mergedSnapshot = this.compactOrderListByIdentity(remoteSnapshot.map(function (order) {
2730
- return _this20.normalizeRemoteSyncedOrder(order);
2735
+ return _this22.normalizeRemoteSyncedOrder(order);
2731
2736
  }), "".concat(source, ".remoteSnapshot")).list;
2732
2737
  _context24.prev = 4;
2733
2738
  _context24.next = 7;
@@ -2736,12 +2741,12 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2736
2741
  return _regeneratorRuntime().wrap(function _callee23$(_context23) {
2737
2742
  while (1) switch (_context23.prev = _context23.next) {
2738
2743
  case 0:
2739
- if (!(typeof _this20.dbManager.getAll === 'function')) {
2744
+ if (!(typeof _this22.dbManager.getAll === 'function')) {
2740
2745
  _context23.next = 6;
2741
2746
  break;
2742
2747
  }
2743
2748
  _context23.next = 3;
2744
- return _this20.dbManager.getAll(INDEXDB_STORE_NAME);
2749
+ return _this22.dbManager.getAll(INDEXDB_STORE_NAME);
2745
2750
  case 3:
2746
2751
  _context23.t0 = _context23.sent;
2747
2752
  _context23.next = 7;
@@ -2750,18 +2755,18 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2750
2755
  _context23.t0 = [];
2751
2756
  case 7:
2752
2757
  existingOrders = _context23.t0;
2753
- orderListSnapshot = _this20.mergeRemoteSnapshotWithPendingOrders(remoteSnapshot, existingOrders || []);
2754
- mergedSnapshot = _this20.compactOrderListByIdentity(orderListSnapshot, "".concat(source, ".sqliteSnapshot")).list;
2755
- _this20.logInfo('replaceOrdersSnapshotInSQLite-开始', {
2758
+ orderListSnapshot = _this22.mergeRemoteSnapshotWithPendingOrders(remoteSnapshot, existingOrders || []);
2759
+ mergedSnapshot = _this22.compactOrderListByIdentity(orderListSnapshot, "".concat(source, ".sqliteSnapshot")).list;
2760
+ _this22.logInfo('replaceOrdersSnapshotInSQLite-开始', {
2756
2761
  source: source,
2757
2762
  count: mergedSnapshot.length,
2758
2763
  remoteCount: remoteSnapshot.length,
2759
2764
  preservedPendingCount: mergedSnapshot.length - remoteSnapshot.length
2760
2765
  });
2761
2766
  _context23.next = 13;
2762
- return _this20.dbManager.clear(INDEXDB_STORE_NAME);
2767
+ return _this22.dbManager.clear(INDEXDB_STORE_NAME);
2763
2768
  case 13:
2764
- _this20.logInfo('replaceOrdersSnapshotInSQLite-clear完成', {
2769
+ _this22.logInfo('replaceOrdersSnapshotInSQLite-clear完成', {
2765
2770
  count: mergedSnapshot.length
2766
2771
  });
2767
2772
  if (!(mergedSnapshot.length === 0)) {
@@ -2771,10 +2776,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2771
2776
  return _context23.abrupt("return");
2772
2777
  case 16:
2773
2778
  _context23.next = 18;
2774
- return _this20.dbManager.bulkAdd(INDEXDB_STORE_NAME, mergedSnapshot);
2779
+ return _this22.dbManager.bulkAdd(INDEXDB_STORE_NAME, mergedSnapshot);
2775
2780
  case 18:
2776
- _this20.recordRecentSqliteWrite(source, mergedSnapshot);
2777
- _this20.logInfo('replaceOrdersSnapshotInSQLite-bulkAdd完成', {
2781
+ _this22.recordRecentSqliteWrite(source, mergedSnapshot);
2782
+ _this22.logInfo('replaceOrdersSnapshotInSQLite-bulkAdd完成', {
2778
2783
  source: source,
2779
2784
  count: mergedSnapshot.length
2780
2785
  });
@@ -2818,7 +2823,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2818
2823
  key: "clear",
2819
2824
  value: (function () {
2820
2825
  var _clear = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee26() {
2821
- var _this21 = this;
2826
+ var _this23 = this;
2822
2827
  return _regeneratorRuntime().wrap(function _callee26$(_context26) {
2823
2828
  while (1) switch (_context26.prev = _context26.next) {
2824
2829
  case 0:
@@ -2834,7 +2839,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2834
2839
  while (1) switch (_context25.prev = _context25.next) {
2835
2840
  case 0:
2836
2841
  _context25.next = 2;
2837
- return _this21.dbManager.clear(INDEXDB_STORE_NAME);
2842
+ return _this23.dbManager.clear(INDEXDB_STORE_NAME);
2838
2843
  case 2:
2839
2844
  case "end":
2840
2845
  return _context25.stop();