@pisell/pisellos 2.3.59 → 2.3.60

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.
@@ -0,0 +1,9 @@
1
+ // 导出评估器
2
+ export { PromotionEvaluator } from "./evaluator";
3
+
4
+ // 导出适配器
5
+ export { PromotionAdapter } from "./adapter";
6
+ export { default } from "./adapter";
7
+
8
+ // 导出策略配置示例常量
9
+ export { X_ITEMS_FOR_Y_PRICE_STRATEGY, BUY_X_GET_Y_FREE_STRATEGY, ITEM_REWARD_STRATEGY } from "./examples";
@@ -157,13 +157,17 @@ declare class Server {
157
157
  * 重新拉取全量 SSE 接口,更新本地数据后触发 onProductsSyncCompleted
158
158
  * 不影响当前界面展示,适用于切回前台、定时刷新等场景
159
159
  */
160
- refreshProductsInBackground(): Promise<void>;
160
+ refreshProductsInBackground(options?: {
161
+ trigger?: string;
162
+ }): Promise<void>;
161
163
  /**
162
164
  * 后台静默刷新订单数据
163
165
  * 重新拉取全量 SSE 接口,更新本地数据后触发 onOrdersSyncCompleted
164
166
  * 不影响当前界面展示,适用于切回前台、定时刷新等场景
165
167
  */
166
- refreshOrdersInBackground(): Promise<void>;
168
+ refreshOrdersInBackground(options?: {
169
+ trigger?: string;
170
+ }): Promise<void>;
167
171
  /**
168
172
  * 编辑正式订单时强制查询 Server 最新快照并覆盖本地缓存。
169
173
  * 商品成员增删由 OrderModule 在 SQLite/Store 更新完成后广播,
@@ -2842,44 +2842,58 @@ var Server = /*#__PURE__*/function () {
2842
2842
  key: "refreshProductsInBackground",
2843
2843
  value: (function () {
2844
2844
  var _refreshProductsInBackground = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee34() {
2845
- var startTime, duration, _duration2, errorMessage;
2845
+ var options,
2846
+ trigger,
2847
+ startTime,
2848
+ duration,
2849
+ _duration2,
2850
+ errorMessage,
2851
+ _args34 = arguments;
2846
2852
  return _regeneratorRuntime().wrap(function _callee34$(_context34) {
2847
2853
  while (1) switch (_context34.prev = _context34.next) {
2848
2854
  case 0:
2855
+ options = _args34.length > 0 && _args34[0] !== undefined ? _args34[0] : {};
2849
2856
  if (this.products) {
2850
- _context34.next = 3;
2857
+ _context34.next = 4;
2851
2858
  break;
2852
2859
  }
2853
2860
  this.logWarning('refreshProductsInBackground: Products 模块未注册');
2854
2861
  return _context34.abrupt("return");
2855
- case 3:
2856
- this.logInfo('refreshProductsInBackground 开始');
2862
+ case 4:
2863
+ trigger = options.trigger || 'background';
2864
+ this.logInfo('refreshProductsInBackground 开始', {
2865
+ trigger: trigger
2866
+ });
2857
2867
  startTime = Date.now();
2858
- _context34.prev = 5;
2859
- _context34.next = 8;
2860
- return this.products.silentRefresh();
2861
- case 8:
2868
+ _context34.prev = 7;
2869
+ _context34.next = 10;
2870
+ return this.products.silentRefresh({
2871
+ trigger: trigger
2872
+ });
2873
+ case 10:
2862
2874
  duration = Date.now() - startTime;
2863
2875
  this.logInfo('refreshProductsInBackground 完成', {
2876
+ trigger: trigger,
2864
2877
  duration: "".concat(duration, "ms")
2865
2878
  });
2866
- _context34.next = 18;
2879
+ _context34.next = 20;
2867
2880
  break;
2868
- case 12:
2869
- _context34.prev = 12;
2870
- _context34.t0 = _context34["catch"](5);
2881
+ case 14:
2882
+ _context34.prev = 14;
2883
+ _context34.t0 = _context34["catch"](7);
2871
2884
  _duration2 = Date.now() - startTime;
2872
2885
  errorMessage = _context34.t0 instanceof Error ? _context34.t0.message : String(_context34.t0);
2873
2886
  console.error('[Server] refreshProductsInBackground 失败:', _context34.t0);
2874
2887
  this.logError('refreshProductsInBackground 失败', {
2888
+ trigger: trigger,
2875
2889
  duration: "".concat(_duration2, "ms"),
2876
2890
  error: errorMessage
2877
2891
  });
2878
- case 18:
2892
+ case 20:
2879
2893
  case "end":
2880
2894
  return _context34.stop();
2881
2895
  }
2882
- }, _callee34, this, [[5, 12]]);
2896
+ }, _callee34, this, [[7, 14]]);
2883
2897
  }));
2884
2898
  function refreshProductsInBackground() {
2885
2899
  return _refreshProductsInBackground.apply(this, arguments);
@@ -2896,44 +2910,58 @@ var Server = /*#__PURE__*/function () {
2896
2910
  key: "refreshOrdersInBackground",
2897
2911
  value: (function () {
2898
2912
  var _refreshOrdersInBackground = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee35() {
2899
- var startTime, duration, _duration3, errorMessage;
2913
+ var options,
2914
+ trigger,
2915
+ startTime,
2916
+ duration,
2917
+ _duration3,
2918
+ errorMessage,
2919
+ _args35 = arguments;
2900
2920
  return _regeneratorRuntime().wrap(function _callee35$(_context35) {
2901
2921
  while (1) switch (_context35.prev = _context35.next) {
2902
2922
  case 0:
2923
+ options = _args35.length > 0 && _args35[0] !== undefined ? _args35[0] : {};
2903
2924
  if (this.order) {
2904
- _context35.next = 3;
2925
+ _context35.next = 4;
2905
2926
  break;
2906
2927
  }
2907
2928
  this.logWarning('refreshOrdersInBackground: Order 模块未注册');
2908
2929
  return _context35.abrupt("return");
2909
- case 3:
2910
- this.logInfo('refreshOrdersInBackground 开始');
2930
+ case 4:
2931
+ trigger = options.trigger || 'background';
2932
+ this.logInfo('refreshOrdersInBackground 开始', {
2933
+ trigger: trigger
2934
+ });
2911
2935
  startTime = Date.now();
2912
- _context35.prev = 5;
2913
- _context35.next = 8;
2914
- return this.order.silentRefresh();
2915
- case 8:
2936
+ _context35.prev = 7;
2937
+ _context35.next = 10;
2938
+ return this.order.silentRefresh({
2939
+ trigger: trigger
2940
+ });
2941
+ case 10:
2916
2942
  duration = Date.now() - startTime;
2917
2943
  this.logInfo('refreshOrdersInBackground 完成', {
2944
+ trigger: trigger,
2918
2945
  duration: "".concat(duration, "ms")
2919
2946
  });
2920
- _context35.next = 18;
2947
+ _context35.next = 20;
2921
2948
  break;
2922
- case 12:
2923
- _context35.prev = 12;
2924
- _context35.t0 = _context35["catch"](5);
2949
+ case 14:
2950
+ _context35.prev = 14;
2951
+ _context35.t0 = _context35["catch"](7);
2925
2952
  _duration3 = Date.now() - startTime;
2926
2953
  errorMessage = _context35.t0 instanceof Error ? _context35.t0.message : String(_context35.t0);
2927
2954
  console.error('[Server] refreshOrdersInBackground 失败:', _context35.t0);
2928
2955
  this.logError('refreshOrdersInBackground 失败', {
2956
+ trigger: trigger,
2929
2957
  duration: "".concat(_duration3, "ms"),
2930
2958
  error: errorMessage
2931
2959
  });
2932
- case 18:
2960
+ case 20:
2933
2961
  case "end":
2934
2962
  return _context35.stop();
2935
2963
  }
2936
- }, _callee35, this, [[5, 12]]);
2964
+ }, _callee35, this, [[7, 14]]);
2937
2965
  }));
2938
2966
  function refreshOrdersInBackground() {
2939
2967
  return _refreshOrdersInBackground.apply(this, arguments);
@@ -327,7 +327,7 @@ export var MenuModule = /*#__PURE__*/function (_BaseModule) {
327
327
  key: "loadMenuFromIndexDB",
328
328
  value: (function () {
329
329
  var _loadMenuFromIndexDB = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {
330
- var _menuList$length, menuList, errorMessage;
330
+ var startedAt, _menuList$length, menuList, errorMessage;
331
331
  return _regeneratorRuntime().wrap(function _callee5$(_context5) {
332
332
  while (1) switch (_context5.prev = _context5.next) {
333
333
  case 0:
@@ -338,29 +338,32 @@ export var MenuModule = /*#__PURE__*/function (_BaseModule) {
338
338
  this.logWarning('loadMenuFromIndexDB: dbManager 不可用');
339
339
  return _context5.abrupt("return", []);
340
340
  case 3:
341
- _context5.prev = 3;
342
- _context5.next = 6;
341
+ startedAt = performance.now();
342
+ _context5.prev = 4;
343
+ _context5.next = 7;
343
344
  return this.dbManager.getAll(INDEXDB_STORE_NAME);
344
- case 6:
345
+ case 7:
345
346
  menuList = _context5.sent;
346
347
  this.logInfo('从 IndexDB 加载餐牌数据', {
347
- menuCount: (_menuList$length = menuList === null || menuList === void 0 ? void 0 : menuList.length) !== null && _menuList$length !== void 0 ? _menuList$length : 0
348
+ menuCount: (_menuList$length = menuList === null || menuList === void 0 ? void 0 : menuList.length) !== null && _menuList$length !== void 0 ? _menuList$length : 0,
349
+ durationMs: +(performance.now() - startedAt).toFixed(2)
348
350
  });
349
351
  return _context5.abrupt("return", menuList || []);
350
- case 11:
351
- _context5.prev = 11;
352
- _context5.t0 = _context5["catch"](3);
352
+ case 12:
353
+ _context5.prev = 12;
354
+ _context5.t0 = _context5["catch"](4);
353
355
  errorMessage = _context5.t0 instanceof Error ? _context5.t0.message : String(_context5.t0);
354
356
  console.error('[Menu] 从 IndexDB 读取数据失败:', _context5.t0);
355
357
  this.logError('从 IndexDB 读取数据失败', {
358
+ durationMs: +(performance.now() - startedAt).toFixed(2),
356
359
  error: errorMessage
357
360
  });
358
361
  return _context5.abrupt("return", []);
359
- case 17:
362
+ case 18:
360
363
  case "end":
361
364
  return _context5.stop();
362
365
  }
363
- }, _callee5, this, [[3, 11]]);
366
+ }, _callee5, this, [[4, 12]]);
364
367
  }));
365
368
  function loadMenuFromIndexDB() {
366
369
  return _loadMenuFromIndexDB.apply(this, arguments);
@@ -377,7 +380,7 @@ export var MenuModule = /*#__PURE__*/function (_BaseModule) {
377
380
  value: (function () {
378
381
  var _saveMenuToIndexDB = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(menuList) {
379
382
  var _this2 = this;
380
- var savePromises, errorMessage;
383
+ var startedAt, clearDurationMs, writeDurationMs, clearStartedAt, writeStartedAt, savePromises, errorMessage;
381
384
  return _regeneratorRuntime().wrap(function _callee6$(_context6) {
382
385
  while (1) switch (_context6.prev = _context6.next) {
383
386
  case 0:
@@ -388,40 +391,62 @@ export var MenuModule = /*#__PURE__*/function (_BaseModule) {
388
391
  this.logWarning('saveMenuToIndexDB: dbManager 不可用');
389
392
  return _context6.abrupt("return");
390
393
  case 3:
394
+ startedAt = performance.now();
395
+ clearDurationMs = 0;
396
+ writeDurationMs = 0;
391
397
  this.logInfo('开始保存餐牌数据到 IndexDB', {
392
398
  menuCount: menuList.length
393
399
  });
394
- _context6.prev = 4;
395
- _context6.next = 7;
400
+ _context6.prev = 7;
401
+ // 先清空现有的餐牌数据
402
+ clearStartedAt = performance.now();
403
+ _context6.prev = 9;
404
+ _context6.next = 12;
396
405
  return this.dbManager.clear(INDEXDB_STORE_NAME);
397
- case 7:
406
+ case 12:
407
+ _context6.prev = 12;
408
+ clearDurationMs = +(performance.now() - clearStartedAt).toFixed(2);
409
+ return _context6.finish(12);
410
+ case 15:
398
411
  // 逐个保存餐牌(每个餐牌是独立的记录)
412
+ writeStartedAt = performance.now();
399
413
  savePromises = menuList.map(function (menu) {
400
414
  return _this2.dbManager.add(INDEXDB_STORE_NAME, menu);
401
415
  });
402
- _context6.next = 10;
416
+ _context6.prev = 17;
417
+ _context6.next = 20;
403
418
  return Promise.all(savePromises);
404
- case 10:
419
+ case 20:
420
+ _context6.prev = 20;
421
+ writeDurationMs = +(performance.now() - writeStartedAt).toFixed(2);
422
+ return _context6.finish(20);
423
+ case 23:
405
424
  console.log("[Menu] \u5DF2\u5C06 ".concat(menuList.length, " \u6761\u9910\u724C\u6570\u636E\u4FDD\u5B58\u5230 IndexDB"));
406
425
  this.logInfo('餐牌数据已保存到 IndexDB', {
407
- menuCount: menuList.length
426
+ menuCount: menuList.length,
427
+ clearDurationMs: clearDurationMs,
428
+ writeDurationMs: writeDurationMs,
429
+ totalDurationMs: +(performance.now() - startedAt).toFixed(2)
408
430
  });
409
- _context6.next = 19;
431
+ _context6.next = 32;
410
432
  break;
411
- case 14:
412
- _context6.prev = 14;
413
- _context6.t0 = _context6["catch"](4);
433
+ case 27:
434
+ _context6.prev = 27;
435
+ _context6.t0 = _context6["catch"](7);
414
436
  errorMessage = _context6.t0 instanceof Error ? _context6.t0.message : String(_context6.t0);
415
437
  console.error('[Menu] 保存数据到 IndexDB 失败:', _context6.t0);
416
438
  this.logError('保存数据到 IndexDB 失败', {
417
439
  menuCount: menuList.length,
440
+ clearDurationMs: clearDurationMs,
441
+ writeDurationMs: writeDurationMs,
442
+ totalDurationMs: +(performance.now() - startedAt).toFixed(2),
418
443
  error: errorMessage
419
444
  });
420
- case 19:
445
+ case 32:
421
446
  case "end":
422
447
  return _context6.stop();
423
448
  }
424
- }, _callee6, this, [[4, 14]]);
449
+ }, _callee6, this, [[7, 27], [9,, 12, 15], [17,, 20, 23]]);
425
450
  }));
426
451
  function saveMenuToIndexDB(_x4) {
427
452
  return _saveMenuToIndexDB.apply(this, arguments);
@@ -119,13 +119,17 @@ export declare class OrderModule extends BaseModule implements Module {
119
119
  payment: Record<string, any>;
120
120
  previousPayment: Record<string, any>;
121
121
  } | null>;
122
- loadOrdersByServer(): Promise<OrderData[]>;
122
+ loadOrdersByServer(options?: {
123
+ trigger?: string;
124
+ }): Promise<OrderData[]>;
123
125
  /**
124
126
  * 静默全量刷新:后台重新拉取全量 SSE 订单数据并更新本地
125
127
  * 拿到完整数据后一次性替换 store,触发订单变更与同步完成事件
126
128
  * @returns 刷新后的订单列表
127
129
  */
128
- silentRefresh(): Promise<OrderData[]>;
130
+ silentRefresh(options?: {
131
+ trigger?: string;
132
+ }): Promise<OrderData[]>;
129
133
  private normalizeOrderForMemoryList;
130
134
  private normalizeOrdersForMemoryList;
131
135
  private hasRealOrderId;
@@ -701,62 +701,78 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
701
701
  key: "preload",
702
702
  value: function () {
703
703
  var _preload = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
704
- var cachedOrders, memoryOrders, orders;
704
+ var preloadStartedAt, cachedOrders, memoryOrders, orders;
705
705
  return _regeneratorRuntime().wrap(function _callee4$(_context4) {
706
706
  while (1) switch (_context4.prev = _context4.next) {
707
707
  case 0:
708
+ preloadStartedAt = Date.now();
708
709
  cachedOrders = null;
709
710
  if (!this.dbManager) {
710
- _context4.next = 11;
711
+ _context4.next = 12;
711
712
  break;
712
713
  }
713
- _context4.prev = 2;
714
- _context4.next = 5;
714
+ _context4.prev = 3;
715
+ _context4.next = 6;
715
716
  return this.loadOrdersFromSQLite({
716
717
  throwOnError: true
717
718
  });
718
- case 5:
719
+ case 6:
719
720
  cachedOrders = _context4.sent;
720
- _context4.next = 11;
721
+ _context4.next = 12;
721
722
  break;
722
- case 8:
723
- _context4.prev = 8;
724
- _context4.t0 = _context4["catch"](2);
723
+ case 9:
724
+ _context4.prev = 9;
725
+ _context4.t0 = _context4["catch"](3);
725
726
  this.logWarning('preload-SQLite读取失败,回退远端全量拉取', {
726
727
  error: _context4.t0 instanceof Error ? _context4.t0.message : String(_context4.t0)
727
728
  });
728
- case 11:
729
+ case 12:
729
730
  if (!(cachedOrders !== null && this.hasPulledOrdersToday())) {
730
- _context4.next = 20;
731
+ _context4.next = 22;
731
732
  break;
732
733
  }
733
734
  memoryOrders = this.normalizeOrdersForMemoryList(cachedOrders, 'preload.sqliteMemory');
734
735
  this.store.list = cloneDeep(memoryOrders);
735
736
  this.syncOrdersMap();
736
- _context4.next = 17;
737
+ _context4.next = 18;
737
738
  return this.core.effects.emit(OrderHooks.onOrdersLoaded, this.store.list);
738
- case 17:
739
- _context4.next = 19;
739
+ case 18:
740
+ _context4.next = 20;
740
741
  return this.emitOrdersChanged([], 'preload.sqlite');
741
- case 19:
742
- return _context4.abrupt("return");
743
742
  case 20:
744
- _context4.next = 22;
745
- return this.loadOrdersByServer();
743
+ this.logInfo('预加载完成', {
744
+ trigger: 'preload',
745
+ source: 'SQLite',
746
+ orderCount: this.store.list.length,
747
+ duration: "".concat(Date.now() - preloadStartedAt, "ms")
748
+ });
749
+ return _context4.abrupt("return");
746
750
  case 22:
751
+ _context4.next = 24;
752
+ return this.loadOrdersByServer({
753
+ trigger: 'preload'
754
+ });
755
+ case 24:
747
756
  orders = _context4.sent;
748
757
  this.store.list = cloneDeep(orders);
749
758
  this.syncOrdersMap();
750
- _context4.next = 27;
751
- return this.emitOrdersChanged([], 'preload');
752
- case 27:
753
759
  _context4.next = 29;
754
- return this.core.effects.emit(OrderHooks.onOrdersSyncCompleted, null);
760
+ return this.emitOrdersChanged([], 'preload');
755
761
  case 29:
762
+ _context4.next = 31;
763
+ return this.core.effects.emit(OrderHooks.onOrdersSyncCompleted, null);
764
+ case 31:
765
+ this.logInfo('预加载完成', {
766
+ trigger: 'preload',
767
+ source: 'Server',
768
+ orderCount: this.store.list.length,
769
+ duration: "".concat(Date.now() - preloadStartedAt, "ms")
770
+ });
771
+ case 32:
756
772
  case "end":
757
773
  return _context4.stop();
758
774
  }
759
- }, _callee4, this, [[2, 8]]);
775
+ }, _callee4, this, [[3, 9]]);
760
776
  }));
761
777
  function preload() {
762
778
  return _preload.apply(this, arguments);
@@ -1089,19 +1105,32 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1089
1105
  var _loadOrdersByServer = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8() {
1090
1106
  var _this5 = this,
1091
1107
  _this$store;
1092
- var orderList, hasFetchedRemoteSnapshot, protectedOrdersBeforeRemoteFetch, data, _yield$this$replaceOr, mergedOrders, isRemoteSnapshotPersisted, memoryOrders;
1108
+ var options,
1109
+ orderList,
1110
+ hasFetchedRemoteSnapshot,
1111
+ trigger,
1112
+ protectedOrdersBeforeRemoteFetch,
1113
+ data,
1114
+ _yield$this$replaceOr,
1115
+ mergedOrders,
1116
+ isRemoteSnapshotPersisted,
1117
+ memoryOrders,
1118
+ _args8 = arguments;
1093
1119
  return _regeneratorRuntime().wrap(function _callee8$(_context8) {
1094
1120
  while (1) switch (_context8.prev = _context8.next) {
1095
1121
  case 0:
1122
+ options = _args8.length > 0 && _args8[0] !== undefined ? _args8[0] : {};
1096
1123
  orderList = [];
1097
1124
  hasFetchedRemoteSnapshot = false;
1098
- _context8.next = 4;
1125
+ trigger = options.trigger || 'unknown';
1126
+ _context8.next = 6;
1099
1127
  return this.loadOrdersFromSQLite();
1100
- case 4:
1128
+ case 6:
1101
1129
  protectedOrdersBeforeRemoteFetch = _context8.sent.filter(function (order) {
1102
1130
  return _this5.shouldProtectLocalOrderFromRemoteSnapshot(order);
1103
1131
  });
1104
1132
  this.logInfo('loadOrdersByServer-开始', {
1133
+ trigger: trigger,
1105
1134
  hasOrderDataSource: !!this.orderDataSource,
1106
1135
  query: ((_this$store = this.store) === null || _this$store === void 0 ? void 0 : _this$store.createdAtQuery) || null,
1107
1136
  protectedLocalOrderCount: protectedOrdersBeforeRemoteFetch.length,
@@ -1110,38 +1139,39 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1110
1139
  }, 0)
1111
1140
  });
1112
1141
  if (!this.orderDataSource) {
1113
- _context8.next = 21;
1142
+ _context8.next = 23;
1114
1143
  break;
1115
1144
  }
1116
- _context8.prev = 7;
1117
- _context8.next = 10;
1145
+ _context8.prev = 9;
1146
+ _context8.next = 12;
1118
1147
  return this.orderDataSource.run({
1119
1148
  sse: {
1120
1149
  query: this.store.createdAtQuery
1121
1150
  }
1122
1151
  });
1123
- case 10:
1152
+ case 12:
1124
1153
  data = _context8.sent;
1125
1154
  orderList = data || [];
1126
1155
  this.logInfo('loadOrdersByServer-SSE拉取成功', {
1156
+ trigger: trigger,
1127
1157
  count: orderList.length
1128
1158
  });
1129
1159
  hasFetchedRemoteSnapshot = true;
1130
1160
  this.lastServerFullFetchAtMs = Date.now();
1131
- _context8.next = 21;
1161
+ _context8.next = 23;
1132
1162
  break;
1133
- case 17:
1134
- _context8.prev = 17;
1135
- _context8.t0 = _context8["catch"](7);
1163
+ case 19:
1164
+ _context8.prev = 19;
1165
+ _context8.t0 = _context8["catch"](9);
1136
1166
  this.logInfo('loadOrdersByServer-SSE拉取失败,保持当前内存订单');
1137
1167
  return _context8.abrupt("return", this.store.list);
1138
- case 21:
1168
+ case 23:
1139
1169
  if (hasFetchedRemoteSnapshot) {
1140
1170
  this.clearOrderSnapshotMarker();
1141
1171
  }
1142
- _context8.next = 24;
1172
+ _context8.next = 26;
1143
1173
  return this.replaceOrdersSnapshotInSQLite(orderList, 'loadOrdersByServer', protectedOrdersBeforeRemoteFetch);
1144
- case 24:
1174
+ case 26:
1145
1175
  _yield$this$replaceOr = _context8.sent;
1146
1176
  mergedOrders = _yield$this$replaceOr.orders;
1147
1177
  isRemoteSnapshotPersisted = _yield$this$replaceOr.persisted;
@@ -1150,19 +1180,20 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1150
1180
  }
1151
1181
  memoryOrders = this.normalizeOrdersForMemoryList(mergedOrders, 'loadOrdersByServer.memory');
1152
1182
  this.logInfo('loadOrdersByServer-结束', {
1183
+ trigger: trigger,
1153
1184
  count: memoryOrders.length,
1154
1185
  persistedCount: mergedOrders.length,
1155
1186
  sqliteOnlyDraftCount: mergedOrders.length - memoryOrders.length
1156
1187
  });
1157
- _context8.next = 32;
1188
+ _context8.next = 34;
1158
1189
  return this.core.effects.emit(OrderHooks.onOrdersLoaded, memoryOrders);
1159
- case 32:
1190
+ case 34:
1160
1191
  return _context8.abrupt("return", memoryOrders);
1161
- case 33:
1192
+ case 35:
1162
1193
  case "end":
1163
1194
  return _context8.stop();
1164
1195
  }
1165
- }, _callee8, this, [[7, 17]]);
1196
+ }, _callee8, this, [[9, 19]]);
1166
1197
  }));
1167
1198
  function loadOrdersByServer() {
1168
1199
  return _loadOrdersByServer.apply(this, arguments);
@@ -1178,53 +1209,76 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1178
1209
  key: "silentRefresh",
1179
1210
  value: (function () {
1180
1211
  var _silentRefresh = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee9() {
1181
- var startTime, elapsedSinceFullFetch, orders, errorMessage;
1212
+ var options,
1213
+ startTime,
1214
+ trigger,
1215
+ elapsedSinceFullFetch,
1216
+ orders,
1217
+ errorMessage,
1218
+ _args9 = arguments;
1182
1219
  return _regeneratorRuntime().wrap(function _callee9$(_context9) {
1183
1220
  while (1) switch (_context9.prev = _context9.next) {
1184
1221
  case 0:
1222
+ options = _args9.length > 0 && _args9[0] !== undefined ? _args9[0] : {};
1185
1223
  startTime = Date.now();
1224
+ trigger = options.trigger || 'background';
1186
1225
  elapsedSinceFullFetch = Date.now() - this.lastServerFullFetchAtMs;
1187
1226
  if (!(this.lastServerFullFetchAtMs > 0 && elapsedSinceFullFetch < ORDER_SILENT_REFRESH_MIN_INTERVAL_MS)) {
1188
- _context9.next = 4;
1227
+ _context9.next = 7;
1189
1228
  break;
1190
1229
  }
1230
+ this.logInfo('silentRefresh 跳过全量 SSE', {
1231
+ trigger: trigger,
1232
+ reason: 'within_min_interval',
1233
+ minIntervalMs: ORDER_SILENT_REFRESH_MIN_INTERVAL_MS,
1234
+ elapsedSinceFullFetchMs: elapsedSinceFullFetch,
1235
+ orderCount: this.store.list.length
1236
+ });
1191
1237
  return _context9.abrupt("return", this.store.list);
1192
- case 4:
1193
- this.logInfo('silentRefresh 开始');
1194
- _context9.prev = 5;
1238
+ case 7:
1239
+ this.logInfo('silentRefresh 开始', {
1240
+ trigger: trigger,
1241
+ elapsedSinceFullFetchMs: elapsedSinceFullFetch,
1242
+ orderCount: this.store.list.length
1243
+ });
1244
+ _context9.prev = 8;
1195
1245
  // 刷新前,需要更新当前营业日边界(store.createdAtQuery)
1196
1246
  this.updateCreateStore();
1197
- _context9.next = 9;
1198
- return this.loadOrdersByServer();
1199
- case 9:
1247
+ _context9.next = 12;
1248
+ return this.loadOrdersByServer({
1249
+ trigger: trigger
1250
+ });
1251
+ case 12:
1200
1252
  orders = _context9.sent;
1201
1253
  this.store.list = cloneDeep(orders);
1202
1254
  this.syncOrdersMap();
1203
- _context9.next = 14;
1255
+ _context9.next = 17;
1204
1256
  return this.emitOrdersChanged([], 'silentRefresh');
1205
- case 14:
1206
- _context9.next = 16;
1257
+ case 17:
1258
+ _context9.next = 19;
1207
1259
  return this.core.effects.emit(OrderHooks.onOrdersSyncCompleted, null);
1208
- case 16:
1260
+ case 19:
1209
1261
  this.logInfo('silentRefresh 完成', {
1262
+ trigger: trigger,
1210
1263
  orderCount: orders.length,
1211
1264
  duration: "".concat(Date.now() - startTime, "ms")
1212
1265
  });
1213
1266
  return _context9.abrupt("return", this.store.list);
1214
- case 20:
1215
- _context9.prev = 20;
1216
- _context9.t0 = _context9["catch"](5);
1267
+ case 23:
1268
+ _context9.prev = 23;
1269
+ _context9.t0 = _context9["catch"](8);
1217
1270
  errorMessage = _context9.t0 instanceof Error ? _context9.t0.message : String(_context9.t0);
1218
1271
  this.logError('silentRefresh 失败', {
1272
+ trigger: trigger,
1219
1273
  duration: "".concat(Date.now() - startTime, "ms"),
1220
1274
  error: errorMessage
1221
1275
  });
1222
1276
  return _context9.abrupt("return", this.store.list);
1223
- case 25:
1277
+ case 28:
1224
1278
  case "end":
1225
1279
  return _context9.stop();
1226
1280
  }
1227
- }, _callee9, this, [[5, 20]]);
1281
+ }, _callee9, this, [[8, 23]]);
1228
1282
  }));
1229
1283
  function silentRefresh() {
1230
1284
  return _silentRefresh.apply(this, arguments);
@@ -183,7 +183,9 @@ export declare class ProductsModule extends BaseModule implements Module {
183
183
  /**
184
184
  * 通过 ProductDataSource SSE 加载完整商品列表
185
185
  */
186
- loadProductsByServer(): Promise<any>;
186
+ loadProductsByServer(options?: {
187
+ trigger?: string;
188
+ }): Promise<any>;
187
189
  /**
188
190
  * 纯请求方法:通过 HTTP 接口获取商品列表(无副作用,不触发事件、不写 IndexDB)
189
191
  * @param params 查询参数
@@ -333,7 +335,9 @@ export declare class ProductsModule extends BaseModule implements Module {
333
335
  * 拿到完整数据后一次性替换 store,清除价格缓存,触发 onProductsSyncCompleted
334
336
  * @returns 刷新后的商品列表
335
337
  */
336
- silentRefresh(): Promise<ProductData[]>;
338
+ silentRefresh(options?: {
339
+ trigger?: string;
340
+ }): Promise<ProductData[]>;
337
341
  /**
338
342
  * 销毁同步资源(取消 pubsub 订阅、清除定时器)
339
343
  */