@pisell/pisellos 2.2.291 → 2.2.293

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 (174) hide show
  1. package/dist/core/index.d.ts +7 -0
  2. package/dist/core/index.js +108 -65
  3. package/dist/model/strategy/adapter/itemRule/adapter.d.ts +4 -1
  4. package/dist/model/strategy/adapter/itemRule/adapter.js +135 -35
  5. package/dist/model/strategy/adapter/itemRule/evaluator.d.ts +8 -1
  6. package/dist/model/strategy/adapter/itemRule/evaluator.js +25 -1
  7. package/dist/model/strategy/adapter/itemRule/type.d.ts +44 -0
  8. package/dist/model/strategy/adapter/itemRule/type.js +19 -1
  9. package/dist/model/strategy/adapter/promotion/index.js +0 -9
  10. package/dist/modules/BookingContext/index.d.ts +3 -0
  11. package/dist/modules/BookingContext/index.js +42 -13
  12. package/dist/modules/BookingContext/types.d.ts +4 -4
  13. package/dist/modules/BookingContext/types.js +3 -3
  14. package/dist/modules/OpenData/types.d.ts +1 -0
  15. package/dist/modules/Order/index.d.ts +18 -3
  16. package/dist/modules/Order/index.js +885 -485
  17. package/dist/modules/Order/salesNotes.d.ts +31 -0
  18. package/dist/modules/Order/salesNotes.js +492 -0
  19. package/dist/modules/Order/types.d.ts +93 -5
  20. package/dist/modules/Order/types.js +5 -0
  21. package/dist/modules/Order/utils.d.ts +12 -0
  22. package/dist/modules/Order/utils.js +96 -31
  23. package/dist/modules/Product/types.d.ts +2 -0
  24. package/dist/modules/ProductList/clientDataVariants.d.ts +50 -0
  25. package/dist/modules/ProductList/clientDataVariants.js +216 -0
  26. package/dist/modules/ProductList/index.d.ts +18 -3
  27. package/dist/modules/ProductList/index.js +220 -38
  28. package/dist/modules/ProductList/types.d.ts +10 -0
  29. package/dist/modules/Quotation/index.d.ts +22 -0
  30. package/dist/modules/Quotation/index.js +293 -28
  31. package/dist/modules/ResourcePlanner/index.d.ts +0 -22
  32. package/dist/modules/ResourcePlanner/index.js +1 -180
  33. package/dist/modules/ResourcePlanner/localClock.d.ts +33 -0
  34. package/dist/modules/ResourcePlanner/localClock.js +183 -0
  35. package/dist/modules/ResourcePlanner/planner.d.ts +5 -14
  36. package/dist/modules/ResourcePlanner/planner.js +2111 -958
  37. package/dist/modules/ResourcePlanner/types.d.ts +359 -187
  38. package/dist/modules/ResourcePlanner/types.js +33 -1
  39. package/dist/plugins/request.d.ts +1 -0
  40. package/dist/server/index.d.ts +17 -2
  41. package/dist/server/index.js +1134 -932
  42. package/dist/server/modules/floor-plan/index.d.ts +4 -0
  43. package/dist/server/modules/floor-plan/index.js +240 -98
  44. package/dist/server/modules/menu/index.js +48 -23
  45. package/dist/server/modules/order/index.d.ts +17 -7
  46. package/dist/server/modules/order/index.js +419 -207
  47. package/dist/server/modules/products/index.d.ts +10 -4
  48. package/dist/server/modules/products/index.js +177 -84
  49. package/dist/server/modules/resource/index.js +21 -13
  50. package/dist/server/utils/product.d.ts +1 -1
  51. package/dist/server/utils/product.js +186 -22
  52. package/dist/server/utils/small-ticket.d.ts +9 -1
  53. package/dist/server/utils/small-ticket.js +131 -84
  54. package/dist/solution/BaseSales/index.d.ts +26 -3
  55. package/dist/solution/BaseSales/index.js +1384 -905
  56. package/dist/solution/BaseSales/types.d.ts +2 -0
  57. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +3 -0
  58. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +10 -3
  59. package/dist/solution/BaseSales/utils.js +6 -3
  60. package/dist/solution/BookingByStep/index.d.ts +4 -4
  61. package/dist/solution/BookingTicket/index.d.ts +1 -1
  62. package/dist/solution/BookingTicket/index.js +4 -2
  63. package/dist/solution/BookingTicket/utils/addProductDecision.d.ts +2 -1
  64. package/dist/solution/BookingTicket/utils/addProductDecision.js +6 -3
  65. package/dist/solution/BookingTicket/utils/orderCustomer.js +3 -2
  66. package/dist/solution/RegisterAndLogin/config.d.ts +9 -3
  67. package/dist/solution/RegisterAndLogin/config.js +95 -40
  68. package/dist/solution/RegisterAndLogin/index.js +4 -1
  69. package/dist/solution/ScanOrder/index.d.ts +1 -0
  70. package/dist/solution/ScanOrder/index.js +31 -27
  71. package/dist/solution/ScanOrder/types.d.ts +2 -0
  72. package/dist/solution/ScanOrder/utils.d.ts +1 -0
  73. package/dist/solution/ScanOrder/utils.js +8 -3
  74. package/dist/solution/UnifiedBookingSales/index.d.ts +128 -74
  75. package/dist/solution/UnifiedBookingSales/index.js +3877 -963
  76. package/dist/solution/UnifiedBookingSales/remoteOccupancyCache.d.ts +49 -0
  77. package/dist/solution/UnifiedBookingSales/remoteOccupancyCache.js +430 -0
  78. package/dist/solution/UnifiedBookingSales/types.d.ts +161 -77
  79. package/dist/solution/UnifiedBookingSales/types.js +4 -9
  80. package/dist/solution/VenueBooking/index.d.ts +3 -0
  81. package/dist/solution/VenueBooking/index.js +549 -497
  82. package/dist/solution/VenueBooking/utils/dateSummary.d.ts +1 -0
  83. package/dist/solution/VenueBooking/utils/dateSummary.js +3 -1
  84. package/dist/solution/VenueBooking/utils/slotMerge.d.ts +2 -0
  85. package/dist/solution/VenueBooking/utils/slotMerge.js +3 -1
  86. package/dist/utils/platform.d.ts +8 -0
  87. package/dist/utils/platform.js +15 -0
  88. package/lib/core/index.d.ts +7 -0
  89. package/lib/core/index.js +20 -2
  90. package/lib/model/strategy/adapter/itemRule/adapter.d.ts +4 -1
  91. package/lib/model/strategy/adapter/itemRule/adapter.js +73 -4
  92. package/lib/model/strategy/adapter/itemRule/evaluator.d.ts +8 -1
  93. package/lib/model/strategy/adapter/itemRule/evaluator.js +23 -1
  94. package/lib/model/strategy/adapter/itemRule/type.d.ts +44 -0
  95. package/lib/model/strategy/adapter/itemRule/type.js +19 -1
  96. package/lib/modules/BookingContext/index.d.ts +3 -0
  97. package/lib/modules/BookingContext/index.js +35 -8
  98. package/lib/modules/BookingContext/types.d.ts +4 -4
  99. package/lib/modules/BookingContext/types.js +3 -3
  100. package/lib/modules/OpenData/types.d.ts +1 -0
  101. package/lib/modules/Order/index.d.ts +18 -3
  102. package/lib/modules/Order/index.js +325 -28
  103. package/lib/modules/Order/salesNotes.d.ts +31 -0
  104. package/lib/modules/Order/salesNotes.js +382 -0
  105. package/lib/modules/Order/types.d.ts +93 -5
  106. package/lib/modules/Order/types.js +4 -0
  107. package/lib/modules/Order/utils.d.ts +12 -0
  108. package/lib/modules/Order/utils.js +85 -16
  109. package/lib/modules/Product/types.d.ts +2 -0
  110. package/lib/modules/ProductList/clientDataVariants.d.ts +50 -0
  111. package/lib/modules/ProductList/clientDataVariants.js +204 -0
  112. package/lib/modules/ProductList/index.d.ts +18 -3
  113. package/lib/modules/ProductList/index.js +137 -8
  114. package/lib/modules/ProductList/types.d.ts +10 -0
  115. package/lib/modules/Quotation/index.d.ts +22 -0
  116. package/lib/modules/Quotation/index.js +158 -11
  117. package/lib/modules/ResourcePlanner/index.d.ts +0 -22
  118. package/lib/modules/ResourcePlanner/index.js +9 -129
  119. package/lib/modules/ResourcePlanner/localClock.d.ts +33 -0
  120. package/lib/modules/ResourcePlanner/localClock.js +205 -0
  121. package/lib/modules/ResourcePlanner/planner.d.ts +5 -14
  122. package/lib/modules/ResourcePlanner/planner.js +1807 -783
  123. package/lib/modules/ResourcePlanner/types.d.ts +359 -187
  124. package/lib/modules/ResourcePlanner/types.js +13 -1
  125. package/lib/plugins/request.d.ts +1 -0
  126. package/lib/server/index.d.ts +17 -2
  127. package/lib/server/index.js +149 -21
  128. package/lib/server/modules/floor-plan/index.d.ts +4 -0
  129. package/lib/server/modules/floor-plan/index.js +60 -7
  130. package/lib/server/modules/menu/index.js +26 -4
  131. package/lib/server/modules/order/index.d.ts +17 -7
  132. package/lib/server/modules/order/index.js +194 -57
  133. package/lib/server/modules/products/index.d.ts +10 -4
  134. package/lib/server/modules/products/index.js +93 -23
  135. package/lib/server/modules/resource/index.js +12 -2
  136. package/lib/server/utils/product.d.ts +1 -1
  137. package/lib/server/utils/product.js +163 -3
  138. package/lib/server/utils/small-ticket.d.ts +9 -1
  139. package/lib/server/utils/small-ticket.js +123 -79
  140. package/lib/solution/BaseSales/index.d.ts +26 -3
  141. package/lib/solution/BaseSales/index.js +396 -70
  142. package/lib/solution/BaseSales/types.d.ts +2 -0
  143. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +3 -0
  144. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +9 -2
  145. package/lib/solution/BaseSales/utils.js +3 -0
  146. package/lib/solution/BookingByStep/index.d.ts +4 -4
  147. package/lib/solution/BookingTicket/index.d.ts +1 -1
  148. package/lib/solution/BookingTicket/index.js +2 -1
  149. package/lib/solution/BookingTicket/utils/addProductDecision.d.ts +2 -1
  150. package/lib/solution/BookingTicket/utils/addProductDecision.js +5 -2
  151. package/lib/solution/BookingTicket/utils/orderCustomer.js +2 -1
  152. package/lib/solution/RegisterAndLogin/config.d.ts +9 -3
  153. package/lib/solution/RegisterAndLogin/config.js +49 -8
  154. package/lib/solution/RegisterAndLogin/index.js +4 -1
  155. package/lib/solution/ScanOrder/index.d.ts +1 -0
  156. package/lib/solution/ScanOrder/index.js +5 -1
  157. package/lib/solution/ScanOrder/types.d.ts +2 -0
  158. package/lib/solution/ScanOrder/utils.d.ts +1 -0
  159. package/lib/solution/ScanOrder/utils.js +4 -0
  160. package/lib/solution/UnifiedBookingSales/index.d.ts +128 -74
  161. package/lib/solution/UnifiedBookingSales/index.js +2592 -424
  162. package/lib/solution/UnifiedBookingSales/remoteOccupancyCache.d.ts +49 -0
  163. package/lib/solution/UnifiedBookingSales/remoteOccupancyCache.js +316 -0
  164. package/lib/solution/UnifiedBookingSales/types.d.ts +161 -77
  165. package/lib/solution/UnifiedBookingSales/types.js +4 -6
  166. package/lib/solution/VenueBooking/index.d.ts +3 -0
  167. package/lib/solution/VenueBooking/index.js +33 -9
  168. package/lib/solution/VenueBooking/utils/dateSummary.d.ts +1 -0
  169. package/lib/solution/VenueBooking/utils/dateSummary.js +3 -1
  170. package/lib/solution/VenueBooking/utils/slotMerge.d.ts +2 -0
  171. package/lib/solution/VenueBooking/utils/slotMerge.js +3 -1
  172. package/lib/utils/platform.d.ts +8 -0
  173. package/lib/utils/platform.js +22 -0
  174. package/package.json +1 -1
@@ -43,6 +43,7 @@ import { getOrderPaymentIdentityKeys, isIdentifiedPendingOrderPayment, isPending
43
43
  var INDEXDB_STORE_NAME = 'orders';
44
44
  var ORDER_STORAGE_KEY_FIELD = '__order_storage_key';
45
45
  var ORDER_LAST_FULL_FETCH_AT_STORAGE_KEY = 'server_order_last_full_fetch_at';
46
+ var ORDER_LAST_FULL_FETCH_SHOP_ID_STORAGE_KEY = 'server_order_last_full_fetch_shop_id';
46
47
  var ORDER_SYNC_THROTTLE_MS_STORAGE_KEY = 'order_sync_throttle_ms';
47
48
  var DEFAULT_ORDER_SYNC_THROTTLE_MS = 2000;
48
49
  /** pubsub 回声写入去重窗口:业务 API 刚写入后,跳过同单 SQLite patch */
@@ -309,18 +310,23 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
309
310
  }, {
310
311
  key: "normalizeOrderCollectionsForIngress",
311
312
  value: function normalizeOrderCollectionsForIngress(order, source) {
312
- var sourceOrder = cloneDeep(order);
313
- var sourceOrderRecord = sourceOrder;
313
+ var sourceOrderRecord = order;
314
+ var sourceOrder = sourceOrderRecord;
314
315
  if (Array.isArray(sourceOrderRecord.payments)) {
315
- sourceOrderRecord.payments = sourceOrderRecord.payments.map(function (payment) {
316
- if (!isPendingOrderPayment(payment) || getOrderPaymentIdentityKeys(payment).some(function (key) {
317
- return key.startsWith('unique_payment_number:');
318
- })) {
319
- return payment;
320
- }
321
- return _objectSpread(_objectSpread({}, payment), {}, _defineProperty({}, PENDING_PAYMENT_WITHOUT_UNIQUE_MARKER, true));
316
+ sourceOrder = _objectSpread(_objectSpread({}, sourceOrderRecord), {}, {
317
+ payments: sourceOrderRecord.payments.map(function (payment) {
318
+ if (!isPendingOrderPayment(payment) || getOrderPaymentIdentityKeys(payment).some(function (key) {
319
+ return key.startsWith('unique_payment_number:');
320
+ })) {
321
+ return payment;
322
+ }
323
+ return _objectSpread(_objectSpread({}, payment), {}, _defineProperty({}, PENDING_PAYMENT_WITHOUT_UNIQUE_MARKER, true));
324
+ })
322
325
  });
323
326
  }
327
+
328
+ // normalizeOrderCollections 内部已经 cloneDeep;这里只浅复制被改写的 payments,
329
+ // 既不修改调用方对象,也避免对整笔订单重复深拷贝。
324
330
  var result = normalizeOrderCollections(sourceOrder);
325
331
  var normalizedOrderRecord = result.order;
326
332
  if (Array.isArray(normalizedOrderRecord.payments)) {
@@ -733,26 +739,96 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
733
739
  key: "preload",
734
740
  value: function () {
735
741
  var _preload = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
736
- var orders;
742
+ var preloadStartedAt, cachedOrders, sqliteLoadTimings, memoryPrepareStartedAt, memoryOrders, memoryPrepareMs, syncMapStartedAt, syncMapMs, onOrdersLoadedStartedAt, onOrdersLoadedMs, emitOrdersChangedStartedAt, emitOrdersChangedMs, orders;
737
743
  return _regeneratorRuntime().wrap(function _callee4$(_context4) {
738
744
  while (1) switch (_context4.prev = _context4.next) {
739
745
  case 0:
740
- _context4.next = 2;
741
- return this.loadOrdersByServer();
742
- case 2:
746
+ preloadStartedAt = Date.now();
747
+ cachedOrders = null;
748
+ if (!this.dbManager) {
749
+ _context4.next = 12;
750
+ break;
751
+ }
752
+ _context4.prev = 3;
753
+ _context4.next = 6;
754
+ return this.loadOrdersFromSQLite({
755
+ throwOnError: true,
756
+ onTiming: function onTiming(timings) {
757
+ sqliteLoadTimings = timings;
758
+ }
759
+ });
760
+ case 6:
761
+ cachedOrders = _context4.sent;
762
+ _context4.next = 12;
763
+ break;
764
+ case 9:
765
+ _context4.prev = 9;
766
+ _context4.t0 = _context4["catch"](3);
767
+ this.logWarning('preload-SQLite读取失败,回退远端全量拉取', {
768
+ error: _context4.t0 instanceof Error ? _context4.t0.message : String(_context4.t0)
769
+ });
770
+ case 12:
771
+ if (!(cachedOrders !== null && this.hasPulledOrdersToday())) {
772
+ _context4.next = 30;
773
+ break;
774
+ }
775
+ memoryPrepareStartedAt = performance.now();
776
+ memoryOrders = this.prepareNormalizedOrdersForMemoryList(cachedOrders);
777
+ memoryPrepareMs = +(performance.now() - memoryPrepareStartedAt).toFixed(2); // loadOrdersFromSQLite 已返回独立且完成集合规范化的新对象;直接进入 store,
778
+ // 不再进行第二轮 normalize 和没有隔离收益的最终 cloneDeep。
779
+ this.store.list = memoryOrders;
780
+ syncMapStartedAt = performance.now();
781
+ this.syncOrdersMap();
782
+ syncMapMs = +(performance.now() - syncMapStartedAt).toFixed(2);
783
+ onOrdersLoadedStartedAt = performance.now();
784
+ _context4.next = 23;
785
+ return this.core.effects.emit(OrderHooks.onOrdersLoaded, this.store.list);
786
+ case 23:
787
+ onOrdersLoadedMs = +(performance.now() - onOrdersLoadedStartedAt).toFixed(2);
788
+ emitOrdersChangedStartedAt = performance.now();
789
+ _context4.next = 27;
790
+ return this.emitOrdersChanged([], 'preload.sqlite');
791
+ case 27:
792
+ emitOrdersChangedMs = +(performance.now() - emitOrdersChangedStartedAt).toFixed(2);
793
+ this.logInfo('预加载完成', {
794
+ trigger: 'preload',
795
+ source: 'SQLite',
796
+ orderCount: this.store.list.length,
797
+ duration: "".concat(Date.now() - preloadStartedAt, "ms"),
798
+ stages: _objectSpread(_objectSpread({}, sqliteLoadTimings || {}), {}, {
799
+ memoryPrepareMs: memoryPrepareMs,
800
+ syncMapMs: syncMapMs,
801
+ onOrdersLoadedMs: onOrdersLoadedMs,
802
+ emitOrdersChangedMs: emitOrdersChangedMs
803
+ })
804
+ });
805
+ return _context4.abrupt("return");
806
+ case 30:
807
+ _context4.next = 32;
808
+ return this.loadOrdersByServer({
809
+ trigger: 'preload'
810
+ });
811
+ case 32:
743
812
  orders = _context4.sent;
744
813
  this.store.list = cloneDeep(orders);
745
814
  this.syncOrdersMap();
746
- _context4.next = 7;
815
+ _context4.next = 37;
747
816
  return this.emitOrdersChanged([], 'preload');
748
- case 7:
749
- _context4.next = 9;
817
+ case 37:
818
+ _context4.next = 39;
750
819
  return this.core.effects.emit(OrderHooks.onOrdersSyncCompleted, null);
751
- case 9:
820
+ case 39:
821
+ this.logInfo('预加载完成', {
822
+ trigger: 'preload',
823
+ source: 'Server',
824
+ orderCount: this.store.list.length,
825
+ duration: "".concat(Date.now() - preloadStartedAt, "ms")
826
+ });
827
+ case 40:
752
828
  case "end":
753
829
  return _context4.stop();
754
830
  }
755
- }, _callee4, this);
831
+ }, _callee4, this, [[3, 9]]);
756
832
  }));
757
833
  function preload() {
758
834
  return _preload.apply(this, arguments);
@@ -1085,18 +1161,32 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1085
1161
  var _loadOrdersByServer = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8() {
1086
1162
  var _this5 = this,
1087
1163
  _this$store;
1088
- var orderList, protectedOrdersBeforeRemoteFetch, data, mergedOrders, memoryOrders;
1164
+ var options,
1165
+ orderList,
1166
+ hasFetchedRemoteSnapshot,
1167
+ trigger,
1168
+ protectedOrdersBeforeRemoteFetch,
1169
+ data,
1170
+ _yield$this$replaceOr,
1171
+ mergedOrders,
1172
+ isRemoteSnapshotPersisted,
1173
+ memoryOrders,
1174
+ _args8 = arguments;
1089
1175
  return _regeneratorRuntime().wrap(function _callee8$(_context8) {
1090
1176
  while (1) switch (_context8.prev = _context8.next) {
1091
1177
  case 0:
1178
+ options = _args8.length > 0 && _args8[0] !== undefined ? _args8[0] : {};
1092
1179
  orderList = [];
1093
- _context8.next = 3;
1180
+ hasFetchedRemoteSnapshot = false;
1181
+ trigger = options.trigger || 'unknown';
1182
+ _context8.next = 6;
1094
1183
  return this.loadOrdersFromSQLite();
1095
- case 3:
1184
+ case 6:
1096
1185
  protectedOrdersBeforeRemoteFetch = _context8.sent.filter(function (order) {
1097
1186
  return _this5.shouldProtectLocalOrderFromRemoteSnapshot(order);
1098
1187
  });
1099
1188
  this.logInfo('loadOrdersByServer-开始', {
1189
+ trigger: trigger,
1100
1190
  hasOrderDataSource: !!this.orderDataSource,
1101
1191
  query: ((_this$store = this.store) === null || _this$store === void 0 ? void 0 : _this$store.createdAtQuery) || null,
1102
1192
  protectedLocalOrderCount: protectedOrdersBeforeRemoteFetch.length,
@@ -1105,51 +1195,61 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1105
1195
  }, 0)
1106
1196
  });
1107
1197
  if (!this.orderDataSource) {
1108
- _context8.next = 20;
1198
+ _context8.next = 23;
1109
1199
  break;
1110
1200
  }
1111
- _context8.prev = 6;
1112
- _context8.next = 9;
1201
+ _context8.prev = 9;
1202
+ _context8.next = 12;
1113
1203
  return this.orderDataSource.run({
1114
1204
  sse: {
1115
1205
  query: this.store.createdAtQuery
1116
1206
  }
1117
1207
  });
1118
- case 9:
1208
+ case 12:
1119
1209
  data = _context8.sent;
1120
1210
  orderList = data || [];
1121
1211
  this.logInfo('loadOrdersByServer-SSE拉取成功', {
1212
+ trigger: trigger,
1122
1213
  count: orderList.length
1123
1214
  });
1124
- this.markOrderPulledAtNow();
1215
+ hasFetchedRemoteSnapshot = true;
1125
1216
  this.lastServerFullFetchAtMs = Date.now();
1126
- _context8.next = 20;
1217
+ _context8.next = 23;
1127
1218
  break;
1128
- case 16:
1129
- _context8.prev = 16;
1130
- _context8.t0 = _context8["catch"](6);
1219
+ case 19:
1220
+ _context8.prev = 19;
1221
+ _context8.t0 = _context8["catch"](9);
1131
1222
  this.logInfo('loadOrdersByServer-SSE拉取失败,保持当前内存订单');
1132
1223
  return _context8.abrupt("return", this.store.list);
1133
- case 20:
1134
- _context8.next = 22;
1224
+ case 23:
1225
+ if (hasFetchedRemoteSnapshot) {
1226
+ this.clearOrderSnapshotMarker();
1227
+ }
1228
+ _context8.next = 26;
1135
1229
  return this.replaceOrdersSnapshotInSQLite(orderList, 'loadOrdersByServer', protectedOrdersBeforeRemoteFetch);
1136
- case 22:
1137
- mergedOrders = _context8.sent;
1230
+ case 26:
1231
+ _yield$this$replaceOr = _context8.sent;
1232
+ mergedOrders = _yield$this$replaceOr.orders;
1233
+ isRemoteSnapshotPersisted = _yield$this$replaceOr.persisted;
1234
+ if (hasFetchedRemoteSnapshot && isRemoteSnapshotPersisted) {
1235
+ this.markOrderPulledAtNow();
1236
+ }
1138
1237
  memoryOrders = this.normalizeOrdersForMemoryList(mergedOrders, 'loadOrdersByServer.memory');
1139
1238
  this.logInfo('loadOrdersByServer-结束', {
1239
+ trigger: trigger,
1140
1240
  count: memoryOrders.length,
1141
1241
  persistedCount: mergedOrders.length,
1142
1242
  sqliteOnlyDraftCount: mergedOrders.length - memoryOrders.length
1143
1243
  });
1144
- _context8.next = 27;
1244
+ _context8.next = 34;
1145
1245
  return this.core.effects.emit(OrderHooks.onOrdersLoaded, memoryOrders);
1146
- case 27:
1246
+ case 34:
1147
1247
  return _context8.abrupt("return", memoryOrders);
1148
- case 28:
1248
+ case 35:
1149
1249
  case "end":
1150
1250
  return _context8.stop();
1151
1251
  }
1152
- }, _callee8, this, [[6, 16]]);
1252
+ }, _callee8, this, [[9, 19]]);
1153
1253
  }));
1154
1254
  function loadOrdersByServer() {
1155
1255
  return _loadOrdersByServer.apply(this, arguments);
@@ -1165,53 +1265,76 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1165
1265
  key: "silentRefresh",
1166
1266
  value: (function () {
1167
1267
  var _silentRefresh = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee9() {
1168
- var startTime, elapsedSinceFullFetch, orders, errorMessage;
1268
+ var options,
1269
+ startTime,
1270
+ trigger,
1271
+ elapsedSinceFullFetch,
1272
+ orders,
1273
+ errorMessage,
1274
+ _args9 = arguments;
1169
1275
  return _regeneratorRuntime().wrap(function _callee9$(_context9) {
1170
1276
  while (1) switch (_context9.prev = _context9.next) {
1171
1277
  case 0:
1278
+ options = _args9.length > 0 && _args9[0] !== undefined ? _args9[0] : {};
1172
1279
  startTime = Date.now();
1280
+ trigger = options.trigger || 'background';
1173
1281
  elapsedSinceFullFetch = Date.now() - this.lastServerFullFetchAtMs;
1174
1282
  if (!(this.lastServerFullFetchAtMs > 0 && elapsedSinceFullFetch < ORDER_SILENT_REFRESH_MIN_INTERVAL_MS)) {
1175
- _context9.next = 4;
1283
+ _context9.next = 7;
1176
1284
  break;
1177
1285
  }
1286
+ this.logInfo('silentRefresh 跳过全量 SSE', {
1287
+ trigger: trigger,
1288
+ reason: 'within_min_interval',
1289
+ minIntervalMs: ORDER_SILENT_REFRESH_MIN_INTERVAL_MS,
1290
+ elapsedSinceFullFetchMs: elapsedSinceFullFetch,
1291
+ orderCount: this.store.list.length
1292
+ });
1178
1293
  return _context9.abrupt("return", this.store.list);
1179
- case 4:
1180
- this.logInfo('silentRefresh 开始');
1181
- _context9.prev = 5;
1294
+ case 7:
1295
+ this.logInfo('silentRefresh 开始', {
1296
+ trigger: trigger,
1297
+ elapsedSinceFullFetchMs: elapsedSinceFullFetch,
1298
+ orderCount: this.store.list.length
1299
+ });
1300
+ _context9.prev = 8;
1182
1301
  // 刷新前,需要更新当前营业日边界(store.createdAtQuery)
1183
1302
  this.updateCreateStore();
1184
- _context9.next = 9;
1185
- return this.loadOrdersByServer();
1186
- case 9:
1303
+ _context9.next = 12;
1304
+ return this.loadOrdersByServer({
1305
+ trigger: trigger
1306
+ });
1307
+ case 12:
1187
1308
  orders = _context9.sent;
1188
1309
  this.store.list = cloneDeep(orders);
1189
1310
  this.syncOrdersMap();
1190
- _context9.next = 14;
1311
+ _context9.next = 17;
1191
1312
  return this.emitOrdersChanged([], 'silentRefresh');
1192
- case 14:
1193
- _context9.next = 16;
1313
+ case 17:
1314
+ _context9.next = 19;
1194
1315
  return this.core.effects.emit(OrderHooks.onOrdersSyncCompleted, null);
1195
- case 16:
1316
+ case 19:
1196
1317
  this.logInfo('silentRefresh 完成', {
1318
+ trigger: trigger,
1197
1319
  orderCount: orders.length,
1198
1320
  duration: "".concat(Date.now() - startTime, "ms")
1199
1321
  });
1200
1322
  return _context9.abrupt("return", this.store.list);
1201
- case 20:
1202
- _context9.prev = 20;
1203
- _context9.t0 = _context9["catch"](5);
1323
+ case 23:
1324
+ _context9.prev = 23;
1325
+ _context9.t0 = _context9["catch"](8);
1204
1326
  errorMessage = _context9.t0 instanceof Error ? _context9.t0.message : String(_context9.t0);
1205
1327
  this.logError('silentRefresh 失败', {
1328
+ trigger: trigger,
1206
1329
  duration: "".concat(Date.now() - startTime, "ms"),
1207
1330
  error: errorMessage
1208
1331
  });
1209
1332
  return _context9.abrupt("return", this.store.list);
1210
- case 25:
1333
+ case 28:
1211
1334
  case "end":
1212
1335
  return _context9.stop();
1213
1336
  }
1214
- }, _callee9, this, [[5, 20]]);
1337
+ }, _callee9, this, [[8, 23]]);
1215
1338
  }));
1216
1339
  function silentRefresh() {
1217
1340
  return _silentRefresh.apply(this, arguments);
@@ -1223,6 +1346,15 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1223
1346
  value: function normalizeOrderForMemoryList(order) {
1224
1347
  var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'normalizeOrderForMemoryList';
1225
1348
  var normalizedOrder = this.normalizeOrderCollectionsForIngress(order, source);
1349
+ return this.prepareNormalizedOrderForMemoryList(normalizedOrder);
1350
+ }
1351
+
1352
+ /**
1353
+ * 将已经完成集合规范化的订单转换为内存身份,不重复扫描 products/bookings/payments。
1354
+ */
1355
+ }, {
1356
+ key: "prepareNormalizedOrderForMemoryList",
1357
+ value: function prepareNormalizedOrderForMemoryList(normalizedOrder) {
1226
1358
  var externalSaleNumber = normalizedOrder === null || normalizedOrder === void 0 ? void 0 : normalizedOrder.external_sale_number;
1227
1359
  if (this.isDraftOrder(normalizedOrder) && !this.hasRealOrderId(normalizedOrder)) {
1228
1360
  return normalizedOrder;
@@ -1238,15 +1370,25 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1238
1370
  });
1239
1371
  }
1240
1372
  }, {
1241
- key: "normalizeOrdersForMemoryList",
1242
- value: function normalizeOrdersForMemoryList(orders, source) {
1373
+ key: "prepareNormalizedOrdersForMemoryList",
1374
+ value: function prepareNormalizedOrdersForMemoryList(orders) {
1243
1375
  var _this6 = this;
1244
1376
  return orders.map(function (order) {
1245
- return _this6.normalizeOrderForMemoryList(order, source);
1377
+ return _this6.prepareNormalizedOrderForMemoryList(order);
1246
1378
  }).filter(function (order) {
1247
1379
  return _this6.shouldKeepOrderInMemory(order);
1248
1380
  });
1249
1381
  }
1382
+ }, {
1383
+ key: "normalizeOrdersForMemoryList",
1384
+ value: function normalizeOrdersForMemoryList(orders, source) {
1385
+ var _this7 = this;
1386
+ return orders.map(function (order) {
1387
+ return _this7.normalizeOrderForMemoryList(order, source);
1388
+ }).filter(function (order) {
1389
+ return _this7.shouldKeepOrderInMemory(order);
1390
+ });
1391
+ }
1250
1392
  }, {
1251
1393
  key: "hasRealOrderId",
1252
1394
  value: function hasRealOrderId(order) {
@@ -1279,7 +1421,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1279
1421
  key: "overwriteExistingOrder",
1280
1422
  value: (function () {
1281
1423
  var _overwriteExistingOrder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee10(fresh) {
1282
- var _this7 = this;
1424
+ var _this8 = this;
1283
1425
  var orderId, key, normalizedFresh, existingOrder, reconciledFresh;
1284
1426
  return _regeneratorRuntime().wrap(function _callee10$(_context10) {
1285
1427
  while (1) switch (_context10.prev = _context10.next) {
@@ -1316,9 +1458,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1316
1458
  this.store.list = this.store.list.map(function (order) {
1317
1459
  var id = order === null || order === void 0 ? void 0 : order.order_id;
1318
1460
  if (id === undefined || id === null) {
1319
- return _this7.normalizeOrderForMemoryList(order, 'overwriteExistingOrder.existingMemory');
1461
+ return _this8.normalizeOrderForMemoryList(order, 'overwriteExistingOrder.existingMemory');
1320
1462
  }
1321
- return _this7.getIdKey(id) === key ? reconciledFresh : _this7.normalizeOrderForMemoryList(order, 'overwriteExistingOrder.existingMemory');
1463
+ return _this8.getIdKey(id) === key ? reconciledFresh : _this8.normalizeOrderForMemoryList(order, 'overwriteExistingOrder.existingMemory');
1322
1464
  });
1323
1465
  this.syncOrdersMap();
1324
1466
  _context10.next = 16;
@@ -1390,7 +1532,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1390
1532
  key: "markOrderSyncedByExternalSaleNumber",
1391
1533
  value: function () {
1392
1534
  var _markOrderSyncedByExternalSaleNumber = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee12(params) {
1393
- var _this8 = this,
1535
+ var _this9 = this,
1394
1536
  _existing$external_sa,
1395
1537
  _nextOrder$order_id;
1396
1538
  var externalSaleNumber, key, targetIndex, existing, nextOrder, storageKey;
@@ -1411,7 +1553,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1411
1553
  targetIndex = this.store.list.findIndex(function (order) {
1412
1554
  var value = order === null || order === void 0 ? void 0 : order.external_sale_number;
1413
1555
  if (value === undefined || value === null || value === '') return false;
1414
- return _this8.getIdKey(value) === key;
1556
+ return _this9.getIdKey(value) === key;
1415
1557
  });
1416
1558
  if (!(targetIndex < 0)) {
1417
1559
  _context12.next = 9;
@@ -1469,7 +1611,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1469
1611
  key: "upsertPendingSyncOrders",
1470
1612
  value: (function () {
1471
1613
  var _upsertPendingSyncOrders = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee13(pendingOrders) {
1472
- var _this9 = this;
1614
+ var _this10 = this;
1473
1615
  var options,
1474
1616
  pendingMap,
1475
1617
  memoryPendingMap,
@@ -1565,7 +1707,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1565
1707
  });
1566
1708
  mergeActions = {};
1567
1709
  updatedList = this.store.list.map(function (order) {
1568
- return _this9.normalizeOrderForMemoryList(order, 'upsertPendingSyncOrders.existingMemory');
1710
+ return _this10.normalizeOrderForMemoryList(order, 'upsertPendingSyncOrders.existingMemory');
1569
1711
  }); // 与 mergeOrdersToStore 一致:基于身份键(field:value)建立索引,把「查找已存在订单」
1570
1712
  // 从 O(n) 线性扫描降为 O(1),整体复杂度由 O(n^2) 降为 O(n + m)。
1571
1713
  identityKeyToIndex = new Map();
@@ -1675,7 +1817,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1675
1817
  key: "upsertLocalDraftOrders",
1676
1818
  value: (function () {
1677
1819
  var _upsertLocalDraftOrders = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee14(draftOrders) {
1678
- var _this10 = this;
1820
+ var _this11 = this;
1679
1821
  var draftMap, memoryDraftMap, _iterator10, _step10, order, draftOrder, storageKey, memoryDraftOrder, mergeActions, updatedList, identityKeyToIndex, index, _iterator11, _step11, key, _iterator12, _step12, _step12$value, _storageKey2, _draftOrder, matchIndex, existingOrder, reconciledDraftOrder, mergedOrder, nextOrder, insertIndex, patchedOrders, previousList, removedLegacyMemoryDraft;
1680
1822
  return _regeneratorRuntime().wrap(function _callee14$(_context14) {
1681
1823
  while (1) switch (_context14.prev = _context14.next) {
@@ -1745,7 +1887,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1745
1887
  });
1746
1888
  mergeActions = {};
1747
1889
  updatedList = this.store.list.filter(function (order) {
1748
- return _this10.shouldKeepOrderInMemory(order);
1890
+ return _this11.shouldKeepOrderInMemory(order);
1749
1891
  });
1750
1892
  identityKeyToIndex = new Map();
1751
1893
  for (index = 0; index < updatedList.length; index += 1) {
@@ -1832,7 +1974,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1832
1974
  storeOrderCountAfter: this.store.list.length
1833
1975
  });
1834
1976
  removedLegacyMemoryDraft = previousList.some(function (order) {
1835
- return !_this10.shouldKeepOrderInMemory(order);
1977
+ return !_this11.shouldKeepOrderInMemory(order);
1836
1978
  });
1837
1979
  if (!(memoryDraftMap.size > 0 || removedLegacyMemoryDraft)) {
1838
1980
  _context14.next = 84;
@@ -1840,7 +1982,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1840
1982
  }
1841
1983
  _context14.next = 84;
1842
1984
  return this.emitOrdersChanged(patchedOrders.filter(function (order) {
1843
- return _this10.shouldKeepOrderInMemory(order);
1985
+ return _this11.shouldKeepOrderInMemory(order);
1844
1986
  }), 'upsertLocalDraftOrders');
1845
1987
  case 84:
1846
1988
  case "end":
@@ -1925,9 +2067,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1925
2067
  }, {
1926
2068
  key: "syncOrdersMap",
1927
2069
  value: function syncOrdersMap() {
1928
- var _this11 = this;
2070
+ var _this12 = this;
1929
2071
  this.store.list = this.store.list.filter(function (order) {
1930
- return _this11.shouldKeepOrderInMemory(order);
2072
+ return _this12.shouldKeepOrderInMemory(order);
1931
2073
  });
1932
2074
  this.store.map.clear();
1933
2075
  var _iterator13 = _createForOfIteratorHelper(this.store.list),
@@ -1983,7 +2125,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1983
2125
  }, {
1984
2126
  key: "getOrderIdentityEntries",
1985
2127
  value: function getOrderIdentityEntries(order) {
1986
- var _this12 = this;
2128
+ var _this13 = this;
1987
2129
  if (!order) return [];
1988
2130
  var record = order;
1989
2131
  var candidates = [{
@@ -2002,8 +2144,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2002
2144
  var entries = [];
2003
2145
  var _loop = function _loop() {
2004
2146
  var candidate = _candidates[_i2];
2005
- if (_this12.isBlankIdentityValue(candidate.value)) return 0; // continue
2006
- var key = _this12.getIdKey(candidate.value);
2147
+ if (_this13.isBlankIdentityValue(candidate.value)) return 0; // continue
2148
+ var key = _this13.getIdKey(candidate.value);
2007
2149
  if (entries.some(function (entry) {
2008
2150
  return entry.field === candidate.field && entry.key === key;
2009
2151
  })) return 0; // continue
@@ -2070,29 +2212,29 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2070
2212
  }, {
2071
2213
  key: "setupOrderSync",
2072
2214
  value: function setupOrderSync() {
2073
- var _this13 = this;
2215
+ var _this14 = this;
2074
2216
  if (!this.orderDataSource) return;
2075
2217
  this.orderDataSource.run({
2076
2218
  pubsub: {
2077
2219
  callback: function callback(res) {
2078
2220
  var _message$id, _message$order_id, _message$type;
2079
2221
  var pubsubReceivedAt = Date.now();
2080
- var message = _this13.normalizeOrderSyncMessage(res);
2222
+ var message = _this14.normalizeOrderSyncMessage(res);
2081
2223
  if (!message) return;
2082
2224
  message._pubsubReceivedAt = pubsubReceivedAt;
2083
- _this13.pendingSyncMessages.push(message);
2084
- var throttleMs = _this13.getOrderSyncThrottleMs();
2085
- var routeInfo = _this13.resolveSyncMessageRoute(message);
2086
- _this13.logInfo('orderSync-收到消息并入队', {
2225
+ _this14.pendingSyncMessages.push(message);
2226
+ var throttleMs = _this14.getOrderSyncThrottleMs();
2227
+ var routeInfo = _this14.resolveSyncMessageRoute(message);
2228
+ _this14.logInfo('orderSync-收到消息并入队', {
2087
2229
  id: (_message$id = message.id) !== null && _message$id !== void 0 ? _message$id : null,
2088
2230
  order_id: (_message$order_id = message.order_id) !== null && _message$order_id !== void 0 ? _message$order_id : null,
2089
2231
  type: (_message$type = message.type) !== null && _message$type !== void 0 ? _message$type : null,
2090
- pendingCount: _this13.pendingSyncMessages.length,
2232
+ pendingCount: _this14.pendingSyncMessages.length,
2091
2233
  throttleMs: throttleMs,
2092
2234
  pubsubReceivedAt: new Date(pubsubReceivedAt).toISOString(),
2093
2235
  fullMessage: JSON.stringify(message)
2094
2236
  });
2095
- _this13.scheduleOrderSyncThrottle();
2237
+ _this14.scheduleOrderSyncThrottle();
2096
2238
  }
2097
2239
  }
2098
2240
  }).catch(function () {
@@ -2109,7 +2251,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2109
2251
  }, {
2110
2252
  key: "scheduleOrderSyncThrottle",
2111
2253
  value: function scheduleOrderSyncThrottle() {
2112
- var _this14 = this;
2254
+ var _this15 = this;
2113
2255
  if (this.isProcessingSyncBatch) return;
2114
2256
  if (this.isIdlePhase) {
2115
2257
  this.isIdlePhase = false;
@@ -2120,8 +2262,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2120
2262
  if (this.syncTimer) return;
2121
2263
  var throttleMs = this.getOrderSyncThrottleMs();
2122
2264
  this.syncTimer = setTimeout(function () {
2123
- _this14.syncTimer = undefined;
2124
- void _this14.flushOrderSyncMessagesByThrottle();
2265
+ _this15.syncTimer = undefined;
2266
+ void _this15.flushOrderSyncMessagesByThrottle();
2125
2267
  }, throttleMs);
2126
2268
  }
2127
2269
 
@@ -2189,7 +2331,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2189
2331
  key: "processOrderSyncMessages",
2190
2332
  value: (function () {
2191
2333
  var _processOrderSyncMessages = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee17() {
2192
- var _this15 = this;
2334
+ var _this16 = this;
2193
2335
  var messages, batchProcessStartAt, earliestReceivedAt, upsertOrders, refreshIds, uniqueRefreshIds, upsertList, _this$filterRedundant, toFetch, skipped, freshOrders, batchProcessEndAt;
2194
2336
  return _regeneratorRuntime().wrap(function _callee17$(_context17) {
2195
2337
  while (1) switch (_context17.prev = _context17.next) {
@@ -2216,13 +2358,13 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2216
2358
  upsertOrders = new Map();
2217
2359
  refreshIds = [];
2218
2360
  messages.forEach(function (msg, msgIndex) {
2219
- var routeInfo = _this15.resolveSyncMessageRoute(msg);
2361
+ var routeInfo = _this16.resolveSyncMessageRoute(msg);
2220
2362
  var hasBatchIds = routeInfo.hasBatchIds;
2221
2363
  var singleId = routeInfo.singleId;
2222
2364
  var hasSingleId = routeInfo.hasSingleId;
2223
- var normalizedBody = _this15.normalizeOrderSyncPayload(msg.body || msg.data);
2365
+ var normalizedBody = _this16.normalizeOrderSyncPayload(msg.body || msg.data);
2224
2366
  if (routeInfo.route === 'bodyUpsert' && normalizedBody) {
2225
- upsertOrders.set(_this15.getIdKey(normalizedBody.order_id), normalizedBody);
2367
+ upsertOrders.set(_this16.getIdKey(normalizedBody.order_id), normalizedBody);
2226
2368
  return;
2227
2369
  }
2228
2370
  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));
@@ -2360,7 +2502,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2360
2502
  key: "mergeOrdersToStore",
2361
2503
  value: (function () {
2362
2504
  var _mergeOrdersToStore = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee19(freshOrders, source) {
2363
- var _this16 = this;
2505
+ var _this17 = this;
2364
2506
  var storeOrderCountBefore, normalizedFreshOrders, incomingProductsHaveStableIdentity, _iterator15, _step15, order, id, rawProducts, _incomingProductsHave, allProductsHaveStableIdentity, orderIdKey, uniqueFreshOrders, uniqueFreshCount, patchedOrders, remoteProductMembershipChanges, forceWriteStorageKeys, storageKeyMigrations, mergeActions, existingProductsHaveStableIdentity, updatedList, identityKeyToIndex, index, identityKeys, _iterator16, _step16, key, _iterator17, _step17, fresh, freshIdentityKeys, matchIndex, storageKey, mergeKey, existingOrder, previousStorageKey, _ref, _existingOrder$order_, _ref2, _external_sale_number2, _existingOrder$paymen, _fresh$payment_status, _existingOrder$need_s, _fresh$need_sync, _ref3, _existingOrder$order_2, _ref4, _external_sale_number3, _existingOrder$is_dra, _fresh$is_draft_order, mergedOrder, freshOrderId, incomingProductsAreStable, membershipChange, mergedProductsHaveStableIdentity, adjustedMatchIndex, duplicateIndexes, _iterator18, _step18, _key2, _duplicateIndex, _iterator19, _step19, duplicateIndex, _index, _iterator20, _step20, _key, nextStorageKey, _ref5, _ref6, _mergedOrder$order_id, mergedStorageKey, insertIndex, insertCount, updateCount;
2365
2507
  return _regeneratorRuntime().wrap(function _callee19$(_context19) {
2366
2508
  while (1) switch (_context19.prev = _context19.next) {
@@ -2421,10 +2563,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2421
2563
  storageKeyMigrations = [];
2422
2564
  mergeActions = {};
2423
2565
  existingProductsHaveStableIdentity = this.store.list.map(function (order) {
2424
- return _this16.doProductsHaveStableMembershipIdentity(order.products);
2566
+ return _this17.doProductsHaveStableMembershipIdentity(order.products);
2425
2567
  });
2426
2568
  updatedList = this.store.list.map(function (order) {
2427
- return _this16.normalizeOrderForMemoryList(order, "".concat(source, ".existingMemory"));
2569
+ return _this17.normalizeOrderForMemoryList(order, "".concat(source, ".existingMemory"));
2428
2570
  }); // 基于身份键(field:value)建立索引,把「查找已存在订单」从 O(n) 线性扫描降为 O(1),
2429
2571
  // 整体合并复杂度由 O(n^2) 降为 O(n + m)。索引语义与 doOrdersShareIdentity 完全一致:
2430
2572
  // 任一身份字段(order_id/external_sale_number/order_number/shop_order_number)同值即同一单。
@@ -2728,7 +2870,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2728
2870
  }, {
2729
2871
  key: "getRemoteProductMembershipChange",
2730
2872
  value: function getRemoteProductMembershipChange(existingOrder, mergedOrder, source) {
2731
- var _this17 = this,
2873
+ var _this18 = this,
2732
2874
  _mergedOrder$order_id2;
2733
2875
  if (!this.isRemoteProductMembershipChangeSource(source)) return null;
2734
2876
  var previousProducts = Array.isArray(existingOrder.products) ? existingOrder.products : [];
@@ -2743,13 +2885,13 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2743
2885
  var _loop2 = function _loop2() {
2744
2886
  var previousProduct = _step22.value;
2745
2887
  var matchedIndex = currentProducts.findIndex(function (currentProduct, index) {
2746
- return unmatchedCurrentIndexes.has(index) && _this17.isSameProductMembershipItem(previousProduct, currentProduct);
2888
+ return unmatchedCurrentIndexes.has(index) && _this18.isSameProductMembershipItem(previousProduct, currentProduct);
2747
2889
  });
2748
2890
  if (matchedIndex >= 0) {
2749
2891
  unmatchedCurrentIndexes.delete(matchedIndex);
2750
2892
  return 1; // continue
2751
2893
  }
2752
- var productKey = _this17.getProductMembershipKey(previousProduct);
2894
+ var productKey = _this18.getProductMembershipKey(previousProduct);
2753
2895
  if (productKey) removedProductKeys.push(productKey);
2754
2896
  };
2755
2897
  for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {
@@ -2761,7 +2903,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2761
2903
  _iterator22.f();
2762
2904
  }
2763
2905
  var addedProductKeys = _toConsumableArray(unmatchedCurrentIndexes).map(function (index) {
2764
- return _this17.getProductMembershipKey(currentProducts[index]);
2906
+ return _this18.getProductMembershipKey(currentProducts[index]);
2765
2907
  }).filter(Boolean);
2766
2908
  if (addedProductKeys.length === 0 && removedProductKeys.length === 0) {
2767
2909
  return null;
@@ -2876,12 +3018,12 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2876
3018
  }, {
2877
3019
  key: "isOrderLookupMatch",
2878
3020
  value: function isOrderLookupMatch(order, lookupKey) {
2879
- var _this18 = this;
3021
+ var _this19 = this;
2880
3022
  if (!order || !lookupKey) return false;
2881
3023
  var candidates = [order.order_id, order.external_sale_number, order.order_number, order.shop_order_number, order.shop_full_order_number];
2882
3024
  return candidates.some(function (value) {
2883
3025
  if (value === undefined || value === null || value === '') return false;
2884
- return _this18.getIdKey(value) === lookupKey;
3026
+ return _this19.getIdKey(value) === lookupKey;
2885
3027
  });
2886
3028
  }
2887
3029
 
@@ -2933,10 +3075,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2933
3075
  }, {
2934
3076
  key: "findOrderIndexByIdentity",
2935
3077
  value: function findOrderIndexByIdentity(orders, target) {
2936
- var _this19 = this;
3078
+ var _this20 = this;
2937
3079
  if (this.getOrderIdentityMatchKeys(target).length === 0) return -1;
2938
3080
  return orders.findIndex(function (order) {
2939
- return _this19.doOrdersShareIdentity(order, target);
3081
+ return _this20.doOrdersShareIdentity(order, target);
2940
3082
  });
2941
3083
  }
2942
3084
  }, {
@@ -3248,25 +3390,32 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3248
3390
  }
3249
3391
 
3250
3392
  /**
3251
- * 当前订单拉取窗口:
3252
- * - 优先使用 createdAtQuery.sales_time_between(已按营业日边界初始化)
3253
- * - 无法解析时退化为自然日窗口
3393
+ * 当前订单缓存可复用窗口。
3394
+ * start_time 模式使用精确的营业日起止时间;配置缺失或异常时退化为自然日。
3254
3395
  */
3255
3396
  }, {
3256
- key: "getCurrentPullWindow",
3257
- value: function getCurrentPullWindow() {
3258
- var _this$store2;
3397
+ key: "getCurrentOrderCacheWindow",
3398
+ value: function getCurrentOrderCacheWindow() {
3259
3399
  var now = dayjs();
3260
- var range = (_this$store2 = this.store) === null || _this$store2 === void 0 || (_this$store2 = _this$store2.createdAtQuery) === null || _this$store2 === void 0 ? void 0 : _this$store2.sales_time_between;
3261
- if (Array.isArray(range) && range.length >= 2) {
3262
- var _startAt = dayjs(range[0]);
3263
- var endExclusiveAt = dayjs(range[1]);
3264
- if (_startAt.isValid() && endExclusiveAt.isValid() && endExclusiveAt.isAfter(_startAt)) {
3265
- return {
3266
- startAt: _startAt,
3267
- endExclusiveAt: endExclusiveAt
3268
- };
3400
+ try {
3401
+ var _coreData$core;
3402
+ var appPlugin = this.core.getPlugin('app');
3403
+ var app = appPlugin === null || appPlugin === void 0 ? void 0 : appPlugin.getApp();
3404
+ var coreData = app === null || app === void 0 ? void 0 : app.data.store.getStore().getDataByModel('core');
3405
+ var boundary = coreData === null || coreData === void 0 || (_coreData$core = coreData.core) === null || _coreData$core === void 0 ? void 0 : _coreData$core.operating_day_boundary;
3406
+ if ((boundary === null || boundary === void 0 ? void 0 : boundary.type) === 'start_time') {
3407
+ var boundaryTime = String(boundary.time || '').trim();
3408
+ var todayBoundary = dayjs("".concat(now.format('YYYY-MM-DD'), " ").concat(boundaryTime));
3409
+ if (todayBoundary.isValid()) {
3410
+ var _startAt = now.isBefore(todayBoundary) ? todayBoundary.subtract(1, 'day') : todayBoundary;
3411
+ return {
3412
+ startAt: _startAt,
3413
+ endExclusiveAt: _startAt.add(1, 'day')
3414
+ };
3415
+ }
3269
3416
  }
3417
+ } catch (_unused6) {
3418
+ // 读取营业日配置失败时按自然日兜底,不影响启动。
3270
3419
  }
3271
3420
  var startAt = now.startOf('day');
3272
3421
  return {
@@ -3279,20 +3428,47 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3279
3428
  value: function hasPulledOrdersToday() {
3280
3429
  var lastFullFetchAt = this.getStorageItem(ORDER_LAST_FULL_FETCH_AT_STORAGE_KEY);
3281
3430
  if (!lastFullFetchAt) return false;
3431
+ var currentShopId = this.getCurrentShopId();
3432
+ var lastFullFetchShopId = this.getStorageItem(ORDER_LAST_FULL_FETCH_SHOP_ID_STORAGE_KEY);
3433
+ if (!currentShopId || !lastFullFetchShopId || currentShopId !== lastFullFetchShopId) {
3434
+ return false;
3435
+ }
3282
3436
  var parsed = dayjs(lastFullFetchAt);
3283
3437
  if (!parsed.isValid()) return false;
3284
-
3285
- // 按当前拉取窗口判断,而不是自然日判断。
3286
- // 这样在营业日跨日边界(start_time)场景下也能正确判定是否需要重新拉取。
3287
- var _this$getCurrentPullW = this.getCurrentPullWindow(),
3288
- startAt = _this$getCurrentPullW.startAt,
3289
- endExclusiveAt = _this$getCurrentPullW.endExclusiveAt;
3438
+ var _this$getCurrentOrder = this.getCurrentOrderCacheWindow(),
3439
+ startAt = _this$getCurrentOrder.startAt,
3440
+ endExclusiveAt = _this$getCurrentOrder.endExclusiveAt;
3290
3441
  return (parsed.isAfter(startAt) || parsed.isSame(startAt)) && parsed.isBefore(endExclusiveAt);
3291
3442
  }
3292
3443
  }, {
3293
3444
  key: "markOrderPulledAtNow",
3294
3445
  value: function markOrderPulledAtNow() {
3446
+ var currentShopId = this.getCurrentShopId();
3447
+ if (!currentShopId) return;
3295
3448
  this.setStorageItem(ORDER_LAST_FULL_FETCH_AT_STORAGE_KEY, dayjs().format('YYYY-MM-DD HH:mm:ss'));
3449
+ this.setStorageItem(ORDER_LAST_FULL_FETCH_SHOP_ID_STORAGE_KEY, currentShopId);
3450
+ }
3451
+ }, {
3452
+ key: "clearOrderSnapshotMarker",
3453
+ value: function clearOrderSnapshotMarker() {
3454
+ this.setStorageItem(ORDER_LAST_FULL_FETCH_AT_STORAGE_KEY, '');
3455
+ this.setStorageItem(ORDER_LAST_FULL_FETCH_SHOP_ID_STORAGE_KEY, '');
3456
+ }
3457
+ }, {
3458
+ key: "getCurrentShopId",
3459
+ value: function getCurrentShopId() {
3460
+ try {
3461
+ var _coreData$core2;
3462
+ var appPlugin = this.core.getPlugin('app');
3463
+ var app = appPlugin === null || appPlugin === void 0 ? void 0 : appPlugin.getApp();
3464
+ if (!app) return null;
3465
+ var coreData = app.data.store.getStore().getDataByModel('core');
3466
+ var shopId = coreData === null || coreData === void 0 || (_coreData$core2 = coreData.core) === null || _coreData$core2 === void 0 ? void 0 : _coreData$core2.id;
3467
+ if (shopId === undefined || shopId === null || shopId === '') return null;
3468
+ return String(shopId);
3469
+ } catch (_unused7) {
3470
+ return null;
3471
+ }
3296
3472
  }
3297
3473
  }, {
3298
3474
  key: "getStorageItem",
@@ -3303,7 +3479,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3303
3479
  if (typeof globalThis !== 'undefined' && globalThis !== null && globalThis !== void 0 && globalThis.localStorage) {
3304
3480
  return globalThis.localStorage.getItem(key);
3305
3481
  }
3306
- } catch (_unused6) {
3482
+ } catch (_unused8) {
3307
3483
  // 忽略存储异常,避免影响主流程
3308
3484
  }
3309
3485
  return null;
@@ -3320,7 +3496,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3320
3496
  if (typeof globalThis !== 'undefined' && globalThis !== null && globalThis !== void 0 && globalThis.localStorage) {
3321
3497
  globalThis.localStorage.setItem(key, value);
3322
3498
  }
3323
- } catch (_unused7) {
3499
+ } catch (_unused9) {
3324
3500
  // 忽略存储异常,避免影响主流程
3325
3501
  }
3326
3502
  }
@@ -3328,34 +3504,61 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3328
3504
  key: "loadOrdersFromSQLite",
3329
3505
  value: function () {
3330
3506
  var _loadOrdersFromSQLite = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee20() {
3331
- var _this20 = this;
3332
- var orders;
3507
+ var _this21 = this;
3508
+ var options,
3509
+ _options$onTiming,
3510
+ loadStartedAt,
3511
+ rawReadStartedAt,
3512
+ orders,
3513
+ sqliteRawReadMs,
3514
+ normalizeStartedAt,
3515
+ normalizedOrders,
3516
+ sqliteNormalizeMs,
3517
+ _args20 = arguments;
3333
3518
  return _regeneratorRuntime().wrap(function _callee20$(_context20) {
3334
3519
  while (1) switch (_context20.prev = _context20.next) {
3335
3520
  case 0:
3521
+ options = _args20.length > 0 && _args20[0] !== undefined ? _args20[0] : {};
3336
3522
  if (this.dbManager) {
3337
- _context20.next = 2;
3523
+ _context20.next = 3;
3338
3524
  break;
3339
3525
  }
3340
3526
  return _context20.abrupt("return", []);
3341
- case 2:
3342
- _context20.prev = 2;
3343
- _context20.next = 5;
3527
+ case 3:
3528
+ _context20.prev = 3;
3529
+ loadStartedAt = performance.now();
3530
+ rawReadStartedAt = performance.now();
3531
+ _context20.next = 8;
3344
3532
  return this.dbManager.getAll(INDEXDB_STORE_NAME);
3345
- case 5:
3533
+ case 8:
3346
3534
  orders = _context20.sent;
3347
- return _context20.abrupt("return", (orders || []).map(function (order) {
3348
- return _this20.normalizeOrderCollectionsForIngress(order, 'loadOrdersFromSQLite');
3349
- }));
3350
- case 9:
3351
- _context20.prev = 9;
3352
- _context20.t0 = _context20["catch"](2);
3535
+ sqliteRawReadMs = +(performance.now() - rawReadStartedAt).toFixed(2);
3536
+ normalizeStartedAt = performance.now();
3537
+ normalizedOrders = (orders || []).map(function (order) {
3538
+ return _this21.normalizeOrderCollectionsForIngress(order, 'loadOrdersFromSQLite');
3539
+ });
3540
+ sqliteNormalizeMs = +(performance.now() - normalizeStartedAt).toFixed(2);
3541
+ (_options$onTiming = options.onTiming) === null || _options$onTiming === void 0 || _options$onTiming.call(options, {
3542
+ sqliteRawReadMs: sqliteRawReadMs,
3543
+ sqliteNormalizeMs: sqliteNormalizeMs,
3544
+ sqliteLoadTotalMs: +(performance.now() - loadStartedAt).toFixed(2)
3545
+ });
3546
+ return _context20.abrupt("return", normalizedOrders);
3547
+ case 17:
3548
+ _context20.prev = 17;
3549
+ _context20.t0 = _context20["catch"](3);
3550
+ if (!options.throwOnError) {
3551
+ _context20.next = 21;
3552
+ break;
3553
+ }
3554
+ throw _context20.t0;
3555
+ case 21:
3353
3556
  return _context20.abrupt("return", []);
3354
- case 12:
3557
+ case 22:
3355
3558
  case "end":
3356
3559
  return _context20.stop();
3357
3560
  }
3358
- }, _callee20, this, [[2, 9]]);
3561
+ }, _callee20, this, [[3, 17]]);
3359
3562
  }));
3360
3563
  function loadOrdersFromSQLite() {
3361
3564
  return _loadOrdersFromSQLite.apply(this, arguments);
@@ -3405,9 +3608,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3405
3608
  }, {
3406
3609
  key: "mergeRemoteSnapshotWithPendingOrders",
3407
3610
  value: function mergeRemoteSnapshotWithPendingOrders(remoteOrders, existingOrders) {
3408
- var _this21 = this;
3611
+ var _this22 = this;
3409
3612
  var merged = remoteOrders.map(function (order) {
3410
- return _this21.normalizeRemoteSyncedOrder(order);
3613
+ return _this22.normalizeRemoteSyncedOrder(order);
3411
3614
  });
3412
3615
  var _iterator32 = _createForOfIteratorHelper(existingOrders),
3413
3616
  _step32;
@@ -3481,7 +3684,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3481
3684
  key: "patchOrdersInSQLite",
3482
3685
  value: (function () {
3483
3686
  var _patchOrdersInSQLite = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee23(orders, source) {
3484
- var _this22 = this;
3687
+ var _this23 = this;
3485
3688
  var mergeActions,
3486
3689
  options,
3487
3690
  forceWriteStorageKeys,
@@ -3525,13 +3728,13 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3525
3728
  return migration.to;
3526
3729
  }));
3527
3730
  ordersSnapshot = cloneDeep(orders).map(function (order) {
3528
- return _this22.normalizeOrderCollectionsForIngress(order, "".concat(source, ".sqliteIngress"));
3731
+ return _this23.normalizeOrderCollectionsForIngress(order, "".concat(source, ".sqliteIngress"));
3529
3732
  }).map(function (order) {
3530
- var storageKey = _this22.getOrderStorageKey(order);
3733
+ var storageKey = _this23.getOrderStorageKey(order);
3531
3734
  if (!storageKey || !migrationTargetStorageKeys.has(storageKey)) return order;
3532
3735
  return _objectSpread(_objectSpread({}, order), {}, _defineProperty({}, ORDER_STORAGE_KEY_FIELD, storageKey));
3533
3736
  }).filter(function (order) {
3534
- return _this22.getOrderStorageKey(order);
3737
+ return _this23.getOrderStorageKey(order);
3535
3738
  });
3536
3739
  if (!(ordersSnapshot.length === 0)) {
3537
3740
  _context23.next = 13;
@@ -3554,7 +3757,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3554
3757
  return _context23.abrupt("return");
3555
3758
  case 19:
3556
3759
  writtenStorageKeys = new Set(compactedToWrite.map(function (order) {
3557
- return _this22.getOrderStorageKey(order);
3760
+ return _this23.getOrderStorageKey(order);
3558
3761
  }).filter(Boolean));
3559
3762
  storageKeyMigrations = new Map();
3560
3763
  _iterator33 = _createForOfIteratorHelper(options.storageKeyMigrations || []);
@@ -3602,34 +3805,34 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3602
3805
  while (1) switch (_context22.prev = _context22.next) {
3603
3806
  case 0:
3604
3807
  writeMethod = 'none';
3605
- _this22.logInfo('patchOrdersInSQLite-开始', {
3808
+ _this23.logInfo('patchOrdersInSQLite-开始', {
3606
3809
  source: source,
3607
3810
  count: compactedToWrite.length,
3608
3811
  dedupedCount: skipped.length
3609
3812
  });
3610
- if (!(typeof _this22.dbManager.bulkUpdate === 'function')) {
3813
+ if (!(typeof _this23.dbManager.bulkUpdate === 'function')) {
3611
3814
  _context22.next = 8;
3612
3815
  break;
3613
3816
  }
3614
3817
  writeMethod = 'bulkUpdate';
3615
3818
  _context22.next = 6;
3616
- return _this22.dbManager.bulkUpdate(INDEXDB_STORE_NAME, compactedToWrite);
3819
+ return _this23.dbManager.bulkUpdate(INDEXDB_STORE_NAME, compactedToWrite);
3617
3820
  case 6:
3618
3821
  _context22.next = 37;
3619
3822
  break;
3620
3823
  case 8:
3621
- if (!(typeof _this22.dbManager.bulkAdd === 'function')) {
3824
+ if (!(typeof _this23.dbManager.bulkAdd === 'function')) {
3622
3825
  _context22.next = 14;
3623
3826
  break;
3624
3827
  }
3625
3828
  writeMethod = 'bulkAdd';
3626
3829
  _context22.next = 12;
3627
- return _this22.dbManager.bulkAdd(INDEXDB_STORE_NAME, compactedToWrite);
3830
+ return _this23.dbManager.bulkAdd(INDEXDB_STORE_NAME, compactedToWrite);
3628
3831
  case 12:
3629
3832
  _context22.next = 37;
3630
3833
  break;
3631
3834
  case 14:
3632
- if (!(typeof _this22.dbManager.update === 'function')) {
3835
+ if (!(typeof _this23.dbManager.update === 'function')) {
3633
3836
  _context22.next = 35;
3634
3837
  break;
3635
3838
  }
@@ -3644,7 +3847,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3644
3847
  }
3645
3848
  order = _step34.value;
3646
3849
  _context22.next = 23;
3647
- return _this22.dbManager.update(INDEXDB_STORE_NAME, order);
3850
+ return _this23.dbManager.update(INDEXDB_STORE_NAME, order);
3648
3851
  case 23:
3649
3852
  _context22.next = 19;
3650
3853
  break;
@@ -3669,7 +3872,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3669
3872
  }
3670
3873
  throw new Error('订单 SQLite 数据库不支持写入');
3671
3874
  case 37:
3672
- _this22.recordRecentSqliteWrite(source, compactedToWrite);
3875
+ _this23.recordRecentSqliteWrite(source, compactedToWrite);
3673
3876
  if (!(writeMethod !== 'none')) {
3674
3877
  _context22.next = 84;
3675
3878
  break;
@@ -3685,9 +3888,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3685
3888
  migration = _step35.value;
3686
3889
  _context22.prev = 44;
3687
3890
  _context22.next = 47;
3688
- return _this22.dbManager.delete(INDEXDB_STORE_NAME, migration.from);
3891
+ return _this23.dbManager.delete(INDEXDB_STORE_NAME, migration.from);
3689
3892
  case 47:
3690
- _this22.recentSqliteWriteByStorageKey.delete(migration.from);
3893
+ _this23.recentSqliteWriteByStorageKey.delete(migration.from);
3691
3894
  _iterator36 = _createForOfIteratorHelper(orders);
3692
3895
  _context22.prev = 49;
3693
3896
  _iterator36.s();
@@ -3697,7 +3900,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3697
3900
  break;
3698
3901
  }
3699
3902
  _order = _step36.value;
3700
- if (!(_this22.getOrderStorageKey(_order) !== migration.to)) {
3903
+ if (!(_this23.getOrderStorageKey(_order) !== migration.to)) {
3701
3904
  _context22.next = 55;
3702
3905
  break;
3703
3906
  }
@@ -3731,7 +3934,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3731
3934
  case 71:
3732
3935
  _context22.prev = 71;
3733
3936
  _context22.t2 = _context22["catch"](44);
3734
- _this22.logError('删除订单旧 SQLite storage key 失败', {
3937
+ _this23.logError('删除订单旧 SQLite storage key 失败', {
3735
3938
  source: source,
3736
3939
  order_id: migration.orderId,
3737
3940
  oldStorageKey: migration.from,
@@ -3753,7 +3956,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3753
3956
  _iterator35.f();
3754
3957
  return _context22.finish(81);
3755
3958
  case 84:
3756
- _this22.logInfo('patchOrdersInSQLite-完成', {
3959
+ _this23.logInfo('patchOrdersInSQLite-完成', {
3757
3960
  source: source,
3758
3961
  count: compactedToWrite.length,
3759
3962
  writeMethod: writeMethod,
@@ -3802,7 +4005,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3802
4005
  key: "updateOrderInSQLite",
3803
4006
  value: (function () {
3804
4007
  var _updateOrderInSQLite = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee25(order, source) {
3805
- var _this23 = this;
4008
+ var _this24 = this;
3806
4009
  var options,
3807
4010
  orderSnapshot,
3808
4011
  _orderSnapshot$order_3,
@@ -3845,40 +4048,40 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3845
4048
  while (1) switch (_context24.prev = _context24.next) {
3846
4049
  case 0:
3847
4050
  writeMethod = 'none';
3848
- _this23.logInfo('updateOrderInSQLite-开始', {
4051
+ _this24.logInfo('updateOrderInSQLite-开始', {
3849
4052
  source: source,
3850
4053
  orderId: (_orderSnapshot$order_ = orderSnapshot.order_id) !== null && _orderSnapshot$order_ !== void 0 ? _orderSnapshot$order_ : null,
3851
- storageKey: _this23.getOrderStorageKey(orderSnapshot)
4054
+ storageKey: _this24.getOrderStorageKey(orderSnapshot)
3852
4055
  });
3853
- if (!(typeof _this23.dbManager.update === 'function')) {
4056
+ if (!(typeof _this24.dbManager.update === 'function')) {
3854
4057
  _context24.next = 8;
3855
4058
  break;
3856
4059
  }
3857
4060
  writeMethod = 'update';
3858
4061
  _context24.next = 6;
3859
- return _this23.dbManager.update(INDEXDB_STORE_NAME, orderSnapshot);
4062
+ return _this24.dbManager.update(INDEXDB_STORE_NAME, orderSnapshot);
3860
4063
  case 6:
3861
4064
  _context24.next = 22;
3862
4065
  break;
3863
4066
  case 8:
3864
- if (!(typeof _this23.dbManager.bulkUpdate === 'function')) {
4067
+ if (!(typeof _this24.dbManager.bulkUpdate === 'function')) {
3865
4068
  _context24.next = 14;
3866
4069
  break;
3867
4070
  }
3868
4071
  writeMethod = 'bulkUpdate';
3869
4072
  _context24.next = 12;
3870
- return _this23.dbManager.bulkUpdate(INDEXDB_STORE_NAME, [orderSnapshot]);
4073
+ return _this24.dbManager.bulkUpdate(INDEXDB_STORE_NAME, [orderSnapshot]);
3871
4074
  case 12:
3872
4075
  _context24.next = 22;
3873
4076
  break;
3874
4077
  case 14:
3875
- if (!(typeof _this23.dbManager.bulkAdd === 'function')) {
4078
+ if (!(typeof _this24.dbManager.bulkAdd === 'function')) {
3876
4079
  _context24.next = 20;
3877
4080
  break;
3878
4081
  }
3879
4082
  writeMethod = 'bulkAdd';
3880
4083
  _context24.next = 18;
3881
- return _this23.dbManager.bulkAdd(INDEXDB_STORE_NAME, [orderSnapshot]);
4084
+ return _this24.dbManager.bulkAdd(INDEXDB_STORE_NAME, [orderSnapshot]);
3882
4085
  case 18:
3883
4086
  _context24.next = 22;
3884
4087
  break;
@@ -3889,8 +4092,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3889
4092
  }
3890
4093
  throw new Error('订单 SQLite 数据库不支持写入');
3891
4094
  case 22:
3892
- _this23.recordRecentSqliteWrite(source, [orderSnapshot]);
3893
- _this23.logInfo('updateOrderInSQLite-完成', {
4095
+ _this24.recordRecentSqliteWrite(source, [orderSnapshot]);
4096
+ _this24.logInfo('updateOrderInSQLite-完成', {
3894
4097
  source: source,
3895
4098
  orderId: (_orderSnapshot$order_2 = orderSnapshot.order_id) !== null && _orderSnapshot$order_2 !== void 0 ? _orderSnapshot$order_2 : null,
3896
4099
  writeMethod: writeMethod
@@ -3932,17 +4135,18 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3932
4135
  * 用于 SSE 全量拉取与营业日窗口裁剪。
3933
4136
  *
3934
4137
  * @example
3935
- * await this.replaceOrdersSnapshotInSQLite(orderList)
4138
+ * const { orders, persisted } = await this.replaceOrdersSnapshotInSQLite(orderList, 'refresh')
3936
4139
  */
3937
4140
  )
3938
4141
  }, {
3939
4142
  key: "replaceOrdersSnapshotInSQLite",
3940
4143
  value: (function () {
3941
4144
  var _replaceOrdersSnapshotInSQLite = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee27(orderList, source) {
3942
- var _this24 = this;
4145
+ var _this25 = this;
3943
4146
  var protectedOrdersBeforeRemoteFetch,
3944
4147
  remoteSnapshot,
3945
4148
  mergedSnapshot,
4149
+ persisted,
3946
4150
  _args27 = arguments;
3947
4151
  return _regeneratorRuntime().wrap(function _callee27$(_context27) {
3948
4152
  while (1) switch (_context27.prev = _context27.next) {
@@ -3952,29 +4156,33 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3952
4156
  _context27.next = 3;
3953
4157
  break;
3954
4158
  }
3955
- return _context27.abrupt("return", this.compactOrderListByIdentity(orderList.map(function (order) {
3956
- return _this24.normalizeRemoteSyncedOrder(order);
3957
- }), "".concat(source, ".snapshotNoDb")).list);
4159
+ return _context27.abrupt("return", {
4160
+ orders: this.compactOrderListByIdentity(orderList.map(function (order) {
4161
+ return _this25.normalizeRemoteSyncedOrder(order);
4162
+ }), "".concat(source, ".snapshotNoDb")).list,
4163
+ persisted: false
4164
+ });
3958
4165
  case 3:
3959
4166
  remoteSnapshot = cloneDeep(orderList).map(function (order) {
3960
- return _this24.normalizeOrderCollectionsForIngress(order, "".concat(source, ".remoteIngress"));
4167
+ return _this25.normalizeOrderCollectionsForIngress(order, "".concat(source, ".remoteIngress"));
3961
4168
  });
3962
4169
  mergedSnapshot = this.compactOrderListByIdentity(remoteSnapshot.map(function (order) {
3963
- return _this24.normalizeRemoteSyncedOrder(order);
4170
+ return _this25.normalizeRemoteSyncedOrder(order);
3964
4171
  }), "".concat(source, ".remoteSnapshot")).list;
3965
- _context27.prev = 5;
3966
- _context27.next = 8;
4172
+ persisted = false;
4173
+ _context27.prev = 6;
4174
+ _context27.next = 9;
3967
4175
  return this.runInOrderSQLiteSaveQueue( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee26() {
3968
4176
  var existingOrders, protectedLocalOrders, _iterator37, _step37, rawCurrentOrder, currentOrder, protectedIndex, currentNeedsProtection, orderListSnapshot;
3969
4177
  return _regeneratorRuntime().wrap(function _callee26$(_context26) {
3970
4178
  while (1) switch (_context26.prev = _context26.next) {
3971
4179
  case 0:
3972
- if (!(typeof _this24.dbManager.getAll === 'function')) {
4180
+ if (!(typeof _this25.dbManager.getAll === 'function')) {
3973
4181
  _context26.next = 6;
3974
4182
  break;
3975
4183
  }
3976
4184
  _context26.next = 3;
3977
- return _this24.dbManager.getAll(INDEXDB_STORE_NAME);
4185
+ return _this25.dbManager.getAll(INDEXDB_STORE_NAME);
3978
4186
  case 3:
3979
4187
  _context26.t0 = _context26.sent;
3980
4188
  _context26.next = 7;
@@ -3984,9 +4192,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3984
4192
  case 7:
3985
4193
  existingOrders = _context26.t0;
3986
4194
  protectedLocalOrders = protectedOrdersBeforeRemoteFetch.map(function (order) {
3987
- return _this24.normalizeOrderCollectionsForIngress(order, "".concat(source, ".protectedBeforeRemoteFetch"));
4195
+ return _this25.normalizeOrderCollectionsForIngress(order, "".concat(source, ".protectedBeforeRemoteFetch"));
3988
4196
  }).filter(function (order) {
3989
- return _this24.shouldProtectLocalOrderFromRemoteSnapshot(order);
4197
+ return _this25.shouldProtectLocalOrderFromRemoteSnapshot(order);
3990
4198
  });
3991
4199
  _iterator37 = _createForOfIteratorHelper(existingOrders || []);
3992
4200
  _context26.prev = 10;
@@ -3997,9 +4205,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3997
4205
  break;
3998
4206
  }
3999
4207
  rawCurrentOrder = _step37.value;
4000
- currentOrder = _this24.normalizeOrderCollectionsForIngress(rawCurrentOrder, "".concat(source, ".currentSQLite"));
4001
- protectedIndex = _this24.findOrderIndexByIdentity(protectedLocalOrders, currentOrder);
4002
- currentNeedsProtection = _this24.shouldProtectLocalOrderFromRemoteSnapshot(currentOrder);
4208
+ currentOrder = _this25.normalizeOrderCollectionsForIngress(rawCurrentOrder, "".concat(source, ".currentSQLite"));
4209
+ protectedIndex = _this25.findOrderIndexByIdentity(protectedLocalOrders, currentOrder);
4210
+ currentNeedsProtection = _this25.shouldProtectLocalOrderFromRemoteSnapshot(currentOrder);
4003
4211
  if (!(protectedIndex >= 0)) {
4004
4212
  _context26.next = 20;
4005
4213
  break;
@@ -4027,9 +4235,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4027
4235
  _iterator37.f();
4028
4236
  return _context26.finish(28);
4029
4237
  case 31:
4030
- orderListSnapshot = _this24.mergeRemoteSnapshotWithPendingOrders(remoteSnapshot, protectedLocalOrders);
4031
- mergedSnapshot = _this24.compactOrderListByIdentity(orderListSnapshot, "".concat(source, ".sqliteSnapshot")).list;
4032
- _this24.logInfo('replaceOrdersSnapshotInSQLite-开始', {
4238
+ orderListSnapshot = _this25.mergeRemoteSnapshotWithPendingOrders(remoteSnapshot, protectedLocalOrders);
4239
+ mergedSnapshot = _this25.compactOrderListByIdentity(orderListSnapshot, "".concat(source, ".sqliteSnapshot")).list;
4240
+ _this25.logInfo('replaceOrdersSnapshotInSQLite-开始', {
4033
4241
  source: source,
4034
4242
  count: mergedSnapshot.length,
4035
4243
  remoteCount: remoteSnapshot.length,
@@ -4037,10 +4245,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4037
4245
  protectedLocalOrderCount: protectedLocalOrders.length,
4038
4246
  preservedLocalUnsyncedCount: mergedSnapshot.length - remoteSnapshot.length,
4039
4247
  protectedPendingPaymentCount: protectedLocalOrders.reduce(function (count, order) {
4040
- return count + _this24.getIdentifiedPendingPayments(order).length;
4248
+ return count + _this25.getIdentifiedPendingPayments(order).length;
4041
4249
  }, 0),
4042
4250
  protectedPendingPaymentIdentities: protectedLocalOrders.flatMap(function (order) {
4043
- return _this24.getIdentifiedPendingPayments(order).map(function (payment) {
4251
+ return _this25.getIdentifiedPendingPayments(order).map(function (payment) {
4044
4252
  var _order$order_id5, _external_sale_number5;
4045
4253
  return {
4046
4254
  order_id: (_order$order_id5 = order.order_id) !== null && _order$order_id5 !== void 0 ? _order$order_id5 : null,
@@ -4051,9 +4259,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4051
4259
  })
4052
4260
  });
4053
4261
  _context26.next = 36;
4054
- return _this24.dbManager.clear(INDEXDB_STORE_NAME);
4262
+ return _this25.dbManager.clear(INDEXDB_STORE_NAME);
4055
4263
  case 36:
4056
- _this24.logInfo('replaceOrdersSnapshotInSQLite-clear完成', {
4264
+ _this25.logInfo('replaceOrdersSnapshotInSQLite-clear完成', {
4057
4265
  count: mergedSnapshot.length
4058
4266
  });
4059
4267
  if (!(mergedSnapshot.length === 0)) {
@@ -4063,10 +4271,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4063
4271
  return _context26.abrupt("return");
4064
4272
  case 39:
4065
4273
  _context26.next = 41;
4066
- return _this24.dbManager.bulkAdd(INDEXDB_STORE_NAME, mergedSnapshot);
4274
+ return _this25.dbManager.bulkAdd(INDEXDB_STORE_NAME, mergedSnapshot);
4067
4275
  case 41:
4068
- _this24.recordRecentSqliteWrite(source, mergedSnapshot);
4069
- _this24.logInfo('replaceOrdersSnapshotInSQLite-bulkAdd完成', {
4276
+ _this25.recordRecentSqliteWrite(source, mergedSnapshot);
4277
+ _this25.logInfo('replaceOrdersSnapshotInSQLite-bulkAdd完成', {
4070
4278
  source: source,
4071
4279
  count: mergedSnapshot.length
4072
4280
  });
@@ -4076,23 +4284,27 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4076
4284
  }
4077
4285
  }, _callee26, null, [[10, 25, 28, 31]]);
4078
4286
  })));
4079
- case 8:
4080
- _context27.next = 13;
4287
+ case 9:
4288
+ persisted = true;
4289
+ _context27.next = 15;
4081
4290
  break;
4082
- case 10:
4083
- _context27.prev = 10;
4084
- _context27.t0 = _context27["catch"](5);
4291
+ case 12:
4292
+ _context27.prev = 12;
4293
+ _context27.t0 = _context27["catch"](6);
4085
4294
  this.logError('全量保存订单到 SQLite 失败', {
4086
4295
  error: _context27.t0 instanceof Error ? _context27.t0.message : String(_context27.t0),
4087
4296
  orderList: remoteSnapshot.length
4088
4297
  });
4089
- case 13:
4090
- return _context27.abrupt("return", mergedSnapshot);
4091
- case 14:
4298
+ case 15:
4299
+ return _context27.abrupt("return", {
4300
+ orders: mergedSnapshot,
4301
+ persisted: persisted
4302
+ });
4303
+ case 16:
4092
4304
  case "end":
4093
4305
  return _context27.stop();
4094
4306
  }
4095
- }, _callee27, this, [[5, 10]]);
4307
+ }, _callee27, this, [[6, 12]]);
4096
4308
  }));
4097
4309
  function replaceOrdersSnapshotInSQLite(_x20, _x21) {
4098
4310
  return _replaceOrdersSnapshotInSQLite.apply(this, arguments);
@@ -4110,7 +4322,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4110
4322
  key: "clear",
4111
4323
  value: (function () {
4112
4324
  var _clear = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee29() {
4113
- var _this25 = this;
4325
+ var _this26 = this;
4114
4326
  return _regeneratorRuntime().wrap(function _callee29$(_context29) {
4115
4327
  while (1) switch (_context29.prev = _context29.next) {
4116
4328
  case 0:
@@ -4126,7 +4338,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4126
4338
  while (1) switch (_context28.prev = _context28.next) {
4127
4339
  case 0:
4128
4340
  _context28.next = 2;
4129
- return _this25.dbManager.clear(INDEXDB_STORE_NAME);
4341
+ return _this26.dbManager.clear(INDEXDB_STORE_NAME);
4130
4342
  case 2:
4131
4343
  case "end":
4132
4344
  return _context28.stop();
@@ -4134,7 +4346,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4134
4346
  }, _callee28);
4135
4347
  })));
4136
4348
  case 5:
4137
- this.setStorageItem(ORDER_LAST_FULL_FETCH_AT_STORAGE_KEY, '');
4349
+ this.clearOrderSnapshotMarker();
4138
4350
  this.emitOrdersChanged([], 'clear');
4139
4351
  case 7:
4140
4352
  case "end":