@pisell/pisellos 2.3.73 → 2.3.74

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 (35) hide show
  1. package/dist/core/index.d.ts +7 -0
  2. package/dist/core/index.js +109 -65
  3. package/dist/modules/Order/index.d.ts +1 -1
  4. package/dist/modules/Quotation/index.d.ts +6 -0
  5. package/dist/modules/Quotation/index.js +75 -19
  6. package/dist/plugins/request.d.ts +1 -0
  7. package/dist/server/index.d.ts +8 -2
  8. package/dist/server/index.js +206 -140
  9. package/dist/server/modules/floor-plan/index.d.ts +4 -0
  10. package/dist/server/modules/floor-plan/index.js +240 -98
  11. package/dist/server/modules/menu/index.js +48 -23
  12. package/dist/server/modules/order/index.d.ts +17 -7
  13. package/dist/server/modules/order/index.js +419 -207
  14. package/dist/server/modules/products/index.d.ts +8 -2
  15. package/dist/server/modules/products/index.js +167 -75
  16. package/dist/server/modules/resource/index.js +21 -13
  17. package/dist/solution/BookingByStep/index.d.ts +1 -1
  18. package/lib/core/index.d.ts +7 -0
  19. package/lib/core/index.js +20 -2
  20. package/lib/modules/Order/index.d.ts +1 -1
  21. package/lib/modules/Quotation/index.d.ts +6 -0
  22. package/lib/modules/Quotation/index.js +49 -5
  23. package/lib/plugins/request.d.ts +1 -0
  24. package/lib/server/index.d.ts +8 -2
  25. package/lib/server/index.js +52 -17
  26. package/lib/server/modules/floor-plan/index.d.ts +4 -0
  27. package/lib/server/modules/floor-plan/index.js +54 -6
  28. package/lib/server/modules/menu/index.js +31 -5
  29. package/lib/server/modules/order/index.d.ts +17 -7
  30. package/lib/server/modules/order/index.js +197 -40
  31. package/lib/server/modules/products/index.d.ts +8 -2
  32. package/lib/server/modules/products/index.js +97 -24
  33. package/lib/server/modules/resource/index.js +7 -2
  34. package/lib/solution/BookingByStep/index.d.ts +1 -1
  35. package/package.json +1 -1
@@ -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,14 +119,23 @@ 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;
134
+ /**
135
+ * 将已经完成集合规范化的订单转换为内存身份,不重复扫描 products/bookings/payments。
136
+ */
137
+ private prepareNormalizedOrderForMemoryList;
138
+ private prepareNormalizedOrdersForMemoryList;
130
139
  private normalizeOrdersForMemoryList;
131
140
  private hasRealOrderId;
132
141
  private shouldKeepOrderInMemory;
@@ -291,13 +300,14 @@ export declare class OrderModule extends BaseModule implements Module {
291
300
  private logDuplicateOrders;
292
301
  private compactOrderListByIdentity;
293
302
  /**
294
- * 当前订单拉取窗口:
295
- * - 优先使用 createdAtQuery.sales_time_between(已按营业日边界初始化)
296
- * - 无法解析时退化为自然日窗口
303
+ * 当前订单缓存可复用窗口。
304
+ * start_time 模式使用精确的营业日起止时间;配置缺失或异常时退化为自然日。
297
305
  */
298
- private getCurrentPullWindow;
306
+ private getCurrentOrderCacheWindow;
299
307
  private hasPulledOrdersToday;
300
308
  private markOrderPulledAtNow;
309
+ private clearOrderSnapshotMarker;
310
+ private getCurrentShopId;
301
311
  private getStorageItem;
302
312
  private setStorageItem;
303
313
  private loadOrdersFromSQLite;
@@ -335,7 +345,7 @@ export declare class OrderModule extends BaseModule implements Module {
335
345
  * 用于 SSE 全量拉取与营业日窗口裁剪。
336
346
  *
337
347
  * @example
338
- * await this.replaceOrdersSnapshotInSQLite(orderList)
348
+ * const { orders, persisted } = await this.replaceOrdersSnapshotInSQLite(orderList, 'refresh')
339
349
  */
340
350
  private replaceOrdersSnapshotInSQLite;
341
351
  /**