@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.
- package/dist/model/strategy/adapter/promotion/index.js +9 -0
- package/dist/server/index.d.ts +6 -2
- package/dist/server/index.js +56 -28
- package/dist/server/modules/menu/index.js +48 -23
- package/dist/server/modules/order/index.d.ts +6 -2
- package/dist/server/modules/order/index.js +112 -58
- package/dist/server/modules/products/index.d.ts +6 -2
- package/dist/server/modules/products/index.js +150 -72
- package/lib/model/strategy/adapter/promotion/index.js +51 -0
- package/lib/server/index.d.ts +6 -2
- package/lib/server/index.js +18 -8
- package/lib/server/modules/menu/index.js +31 -5
- package/lib/server/modules/order/index.d.ts +6 -2
- package/lib/server/modules/order/index.js +38 -5
- package/lib/server/modules/products/index.d.ts +6 -2
- package/lib/server/modules/products/index.js +82 -20
- package/package.json +1 -1
|
@@ -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";
|
package/dist/server/index.d.ts
CHANGED
|
@@ -157,13 +157,17 @@ declare class Server {
|
|
|
157
157
|
* 重新拉取全量 SSE 接口,更新本地数据后触发 onProductsSyncCompleted
|
|
158
158
|
* 不影响当前界面展示,适用于切回前台、定时刷新等场景
|
|
159
159
|
*/
|
|
160
|
-
refreshProductsInBackground(
|
|
160
|
+
refreshProductsInBackground(options?: {
|
|
161
|
+
trigger?: string;
|
|
162
|
+
}): Promise<void>;
|
|
161
163
|
/**
|
|
162
164
|
* 后台静默刷新订单数据
|
|
163
165
|
* 重新拉取全量 SSE 接口,更新本地数据后触发 onOrdersSyncCompleted
|
|
164
166
|
* 不影响当前界面展示,适用于切回前台、定时刷新等场景
|
|
165
167
|
*/
|
|
166
|
-
refreshOrdersInBackground(
|
|
168
|
+
refreshOrdersInBackground(options?: {
|
|
169
|
+
trigger?: string;
|
|
170
|
+
}): Promise<void>;
|
|
167
171
|
/**
|
|
168
172
|
* 编辑正式订单时强制查询 Server 最新快照并覆盖本地缓存。
|
|
169
173
|
* 商品成员增删由 OrderModule 在 SQLite/Store 更新完成后广播,
|
package/dist/server/index.js
CHANGED
|
@@ -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
|
|
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 =
|
|
2857
|
+
_context34.next = 4;
|
|
2851
2858
|
break;
|
|
2852
2859
|
}
|
|
2853
2860
|
this.logWarning('refreshProductsInBackground: Products 模块未注册');
|
|
2854
2861
|
return _context34.abrupt("return");
|
|
2855
|
-
case
|
|
2856
|
-
|
|
2862
|
+
case 4:
|
|
2863
|
+
trigger = options.trigger || 'background';
|
|
2864
|
+
this.logInfo('refreshProductsInBackground 开始', {
|
|
2865
|
+
trigger: trigger
|
|
2866
|
+
});
|
|
2857
2867
|
startTime = Date.now();
|
|
2858
|
-
_context34.prev =
|
|
2859
|
-
_context34.next =
|
|
2860
|
-
return this.products.silentRefresh(
|
|
2861
|
-
|
|
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 =
|
|
2879
|
+
_context34.next = 20;
|
|
2867
2880
|
break;
|
|
2868
|
-
case
|
|
2869
|
-
_context34.prev =
|
|
2870
|
-
_context34.t0 = _context34["catch"](
|
|
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
|
|
2892
|
+
case 20:
|
|
2879
2893
|
case "end":
|
|
2880
2894
|
return _context34.stop();
|
|
2881
2895
|
}
|
|
2882
|
-
}, _callee34, this, [[
|
|
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
|
|
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 =
|
|
2925
|
+
_context35.next = 4;
|
|
2905
2926
|
break;
|
|
2906
2927
|
}
|
|
2907
2928
|
this.logWarning('refreshOrdersInBackground: Order 模块未注册');
|
|
2908
2929
|
return _context35.abrupt("return");
|
|
2909
|
-
case
|
|
2910
|
-
|
|
2930
|
+
case 4:
|
|
2931
|
+
trigger = options.trigger || 'background';
|
|
2932
|
+
this.logInfo('refreshOrdersInBackground 开始', {
|
|
2933
|
+
trigger: trigger
|
|
2934
|
+
});
|
|
2911
2935
|
startTime = Date.now();
|
|
2912
|
-
_context35.prev =
|
|
2913
|
-
_context35.next =
|
|
2914
|
-
return this.order.silentRefresh(
|
|
2915
|
-
|
|
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 =
|
|
2947
|
+
_context35.next = 20;
|
|
2921
2948
|
break;
|
|
2922
|
-
case
|
|
2923
|
-
_context35.prev =
|
|
2924
|
-
_context35.t0 = _context35["catch"](
|
|
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
|
|
2960
|
+
case 20:
|
|
2933
2961
|
case "end":
|
|
2934
2962
|
return _context35.stop();
|
|
2935
2963
|
}
|
|
2936
|
-
}, _callee35, this, [[
|
|
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
|
-
|
|
342
|
-
_context5.
|
|
341
|
+
startedAt = performance.now();
|
|
342
|
+
_context5.prev = 4;
|
|
343
|
+
_context5.next = 7;
|
|
343
344
|
return this.dbManager.getAll(INDEXDB_STORE_NAME);
|
|
344
|
-
case
|
|
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
|
|
351
|
-
_context5.prev =
|
|
352
|
-
_context5.t0 = _context5["catch"](
|
|
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
|
|
362
|
+
case 18:
|
|
360
363
|
case "end":
|
|
361
364
|
return _context5.stop();
|
|
362
365
|
}
|
|
363
|
-
}, _callee5, this, [[
|
|
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 =
|
|
395
|
-
|
|
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
|
|
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.
|
|
416
|
+
_context6.prev = 17;
|
|
417
|
+
_context6.next = 20;
|
|
403
418
|
return Promise.all(savePromises);
|
|
404
|
-
case
|
|
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 =
|
|
431
|
+
_context6.next = 32;
|
|
410
432
|
break;
|
|
411
|
-
case
|
|
412
|
-
_context6.prev =
|
|
413
|
-
_context6.t0 = _context6["catch"](
|
|
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
|
|
445
|
+
case 32:
|
|
421
446
|
case "end":
|
|
422
447
|
return _context6.stop();
|
|
423
448
|
}
|
|
424
|
-
}, _callee6, this, [[
|
|
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(
|
|
122
|
+
loadOrdersByServer(options?: {
|
|
123
|
+
trigger?: string;
|
|
124
|
+
}): Promise<OrderData[]>;
|
|
123
125
|
/**
|
|
124
126
|
* 静默全量刷新:后台重新拉取全量 SSE 订单数据并更新本地
|
|
125
127
|
* 拿到完整数据后一次性替换 store,触发订单变更与同步完成事件
|
|
126
128
|
* @returns 刷新后的订单列表
|
|
127
129
|
*/
|
|
128
|
-
silentRefresh(
|
|
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 =
|
|
711
|
+
_context4.next = 12;
|
|
711
712
|
break;
|
|
712
713
|
}
|
|
713
|
-
_context4.prev =
|
|
714
|
-
_context4.next =
|
|
714
|
+
_context4.prev = 3;
|
|
715
|
+
_context4.next = 6;
|
|
715
716
|
return this.loadOrdersFromSQLite({
|
|
716
717
|
throwOnError: true
|
|
717
718
|
});
|
|
718
|
-
case
|
|
719
|
+
case 6:
|
|
719
720
|
cachedOrders = _context4.sent;
|
|
720
|
-
_context4.next =
|
|
721
|
+
_context4.next = 12;
|
|
721
722
|
break;
|
|
722
|
-
case
|
|
723
|
-
_context4.prev =
|
|
724
|
-
_context4.t0 = _context4["catch"](
|
|
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
|
|
729
|
+
case 12:
|
|
729
730
|
if (!(cachedOrders !== null && this.hasPulledOrdersToday())) {
|
|
730
|
-
_context4.next =
|
|
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 =
|
|
737
|
+
_context4.next = 18;
|
|
737
738
|
return this.core.effects.emit(OrderHooks.onOrdersLoaded, this.store.list);
|
|
738
|
-
case
|
|
739
|
-
_context4.next =
|
|
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
|
-
|
|
745
|
-
|
|
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.
|
|
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, [[
|
|
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
|
|
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
|
-
|
|
1125
|
+
trigger = options.trigger || 'unknown';
|
|
1126
|
+
_context8.next = 6;
|
|
1099
1127
|
return this.loadOrdersFromSQLite();
|
|
1100
|
-
case
|
|
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 =
|
|
1142
|
+
_context8.next = 23;
|
|
1114
1143
|
break;
|
|
1115
1144
|
}
|
|
1116
|
-
_context8.prev =
|
|
1117
|
-
_context8.next =
|
|
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
|
|
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 =
|
|
1161
|
+
_context8.next = 23;
|
|
1132
1162
|
break;
|
|
1133
|
-
case
|
|
1134
|
-
_context8.prev =
|
|
1135
|
-
_context8.t0 = _context8["catch"](
|
|
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
|
|
1168
|
+
case 23:
|
|
1139
1169
|
if (hasFetchedRemoteSnapshot) {
|
|
1140
1170
|
this.clearOrderSnapshotMarker();
|
|
1141
1171
|
}
|
|
1142
|
-
_context8.next =
|
|
1172
|
+
_context8.next = 26;
|
|
1143
1173
|
return this.replaceOrdersSnapshotInSQLite(orderList, 'loadOrdersByServer', protectedOrdersBeforeRemoteFetch);
|
|
1144
|
-
case
|
|
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 =
|
|
1188
|
+
_context8.next = 34;
|
|
1158
1189
|
return this.core.effects.emit(OrderHooks.onOrdersLoaded, memoryOrders);
|
|
1159
|
-
case
|
|
1190
|
+
case 34:
|
|
1160
1191
|
return _context8.abrupt("return", memoryOrders);
|
|
1161
|
-
case
|
|
1192
|
+
case 35:
|
|
1162
1193
|
case "end":
|
|
1163
1194
|
return _context8.stop();
|
|
1164
1195
|
}
|
|
1165
|
-
}, _callee8, this, [[
|
|
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
|
|
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 =
|
|
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
|
|
1193
|
-
this.logInfo('silentRefresh 开始'
|
|
1194
|
-
|
|
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 =
|
|
1198
|
-
return this.loadOrdersByServer(
|
|
1199
|
-
|
|
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 =
|
|
1255
|
+
_context9.next = 17;
|
|
1204
1256
|
return this.emitOrdersChanged([], 'silentRefresh');
|
|
1205
|
-
case
|
|
1206
|
-
_context9.next =
|
|
1257
|
+
case 17:
|
|
1258
|
+
_context9.next = 19;
|
|
1207
1259
|
return this.core.effects.emit(OrderHooks.onOrdersSyncCompleted, null);
|
|
1208
|
-
case
|
|
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
|
|
1215
|
-
_context9.prev =
|
|
1216
|
-
_context9.t0 = _context9["catch"](
|
|
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
|
|
1277
|
+
case 28:
|
|
1224
1278
|
case "end":
|
|
1225
1279
|
return _context9.stop();
|
|
1226
1280
|
}
|
|
1227
|
-
}, _callee9, this, [[
|
|
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(
|
|
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(
|
|
338
|
+
silentRefresh(options?: {
|
|
339
|
+
trigger?: string;
|
|
340
|
+
}): Promise<ProductData[]>;
|
|
337
341
|
/**
|
|
338
342
|
* 销毁同步资源(取消 pubsub 订阅、清除定时器)
|
|
339
343
|
*/
|