@pisell/pisellos 2.2.285 → 2.2.286

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.
@@ -5468,7 +5468,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5468
5468
  var _syncPaymentsToOrder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee34(params) {
5469
5469
  var _this32 = this,
5470
5470
  _params$confirmPendin;
5471
- var tempOrder, needsPaymentNumber, devicePrefix, mappedPayments, shouldConfirmPendingVoucherPayments, effectivePayments, completion, orderPaidPaymentTotal, paymentStatus, paymentSyncIdempotencyToken, submitParams, submitResult;
5471
+ var tempOrder, needsPaymentNumber, devicePrefix, mappedPayments, shouldConfirmPendingVoucherPayments, effectivePayments, completion, orderPaidPaymentTotal, paymentStatus, paymentSyncIdempotencyToken, enhancePayload, submitParams, submitResult;
5472
5472
  return _regeneratorRuntime().wrap(function _callee34$(_context37) {
5473
5473
  while (1) switch (_context37.prev = _context37.next) {
5474
5474
  case 0:
@@ -5521,6 +5521,12 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5521
5521
  case 25:
5522
5522
  this.store.syncState = 'submitting';
5523
5523
  paymentSyncIdempotencyToken = this.buildPaymentSyncIdempotencyToken(tempOrder, effectivePayments);
5524
+ enhancePayload = function enhancePayload(payload, ctx) {
5525
+ var enhancedPayload = params.enhancePayload ? params.enhancePayload(payload, ctx) : payload;
5526
+ return _objectSpread(_objectSpread({}, enhancedPayload), {}, {
5527
+ request_unique_idempotency_token: paymentSyncIdempotencyToken
5528
+ });
5529
+ };
5524
5530
  submitParams = {
5525
5531
  payments: effectivePayments,
5526
5532
  paymentStatus: paymentStatus,
@@ -5528,34 +5534,29 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5528
5534
  businessCode: params.businessCode,
5529
5535
  channel: params.channel,
5530
5536
  confirmPendingVoucherPayments: true,
5531
- enhancePayload: function enhancePayload(payload) {
5532
- var nextPayload = _objectSpread(_objectSpread({}, payload), {}, {
5533
- request_unique_idempotency_token: paymentSyncIdempotencyToken
5534
- });
5535
- return nextPayload;
5536
- }
5537
+ enhancePayload: enhancePayload
5537
5538
  };
5538
5539
  if (!(params.checkoutSyncTaskEnabled === false)) {
5539
- _context37.next = 34;
5540
+ _context37.next = 35;
5540
5541
  break;
5541
5542
  }
5542
- _context37.next = 31;
5543
+ _context37.next = 32;
5543
5544
  return this.submitTempOrderAsync(submitParams);
5544
- case 31:
5545
+ case 32:
5545
5546
  _context37.t1 = _context37.sent;
5546
- _context37.next = 37;
5547
+ _context37.next = 38;
5547
5548
  break;
5548
- case 34:
5549
- _context37.next = 36;
5549
+ case 35:
5550
+ _context37.next = 37;
5550
5551
  return this.submitTempOrder(submitParams);
5551
- case 36:
5552
- _context37.t1 = _context37.sent;
5553
5552
  case 37:
5553
+ _context37.t1 = _context37.sent;
5554
+ case 38:
5554
5555
  submitResult = _context37.t1;
5555
5556
  return _context37.abrupt("return", _objectSpread(_objectSpread({}, completion), {}, {
5556
5557
  submitResult: submitResult
5557
5558
  }));
5558
- case 39:
5559
+ case 40:
5559
5560
  case "end":
5560
5561
  return _context37.stop();
5561
5562
  }
@@ -608,6 +608,7 @@ export interface SyncPaymentsToOrderParams {
608
608
  businessCode?: string;
609
609
  channel?: string;
610
610
  confirmPendingVoucherPayments?: boolean;
611
+ enhancePayload?: SubmitPayloadEnhancer;
611
612
  }
612
613
  export interface SyncPaymentsToOrderResult<T = any> {
613
614
  isFullyPaid: boolean;
@@ -505,6 +505,10 @@ declare class Server {
505
505
  private buildCheckoutTaskIdempotencyKey;
506
506
  private isBlankCheckoutValue;
507
507
  private isLocalCheckoutOrderId;
508
+ private applyCheckoutFulfillmentBuzzer;
509
+ private buildCheckoutResourceIdentifierBuzzer;
510
+ private getCheckoutResourceIdentifier;
511
+ private stringifyCheckoutResourceIdentifier;
508
512
  private normalizeCheckoutSubmitData;
509
513
  private ensureCheckoutOrderNumbers;
510
514
  private dispatchCheckoutSyncTask;
@@ -43,6 +43,7 @@ import { filterBookingsFromOrders, sortBookings } from "./modules/order/utils/fi
43
43
  import { buildSmallTicketData, hasSmallTicketData } from "./utils/small-ticket";
44
44
  import { BaseSalesImpl } from "../solution/BaseSales";
45
45
  import { getOrderPaymentIdentityKeys, isIdentifiedPendingOrderPayment, isPendingOrderPayment, mergeOrderPaymentListsByIdentity } from "../modules/Order/payment-utils";
46
+ var OS_FULFILLMENT_REF_MODE_FIELD = '_os_fulfillment_ref_mode';
46
47
 
47
48
  // 重新导出类型供外部使用
48
49
 
@@ -2445,7 +2446,7 @@ var Server = /*#__PURE__*/function () {
2445
2446
  value: function () {
2446
2447
  var _runCheckoutSync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee31(params) {
2447
2448
  var _this$app6;
2448
- var backendPath, title, normalizedData, checkoutData, remoteCheckoutData, response, fresh, externalSaleNumber, syncedOrder, printableSyncedOrder;
2449
+ var backendPath, title, normalizedData, numberedData, checkoutData, remoteCheckoutData, response, fresh, externalSaleNumber, syncedOrder, printableSyncedOrder;
2449
2450
  return _regeneratorRuntime().wrap(function _callee31$(_context31) {
2450
2451
  while (1) switch (_context31.prev = _context31.next) {
2451
2452
  case 0:
@@ -2457,23 +2458,24 @@ var Server = /*#__PURE__*/function () {
2457
2458
  _context31.next = 6;
2458
2459
  return this.ensureCheckoutOrderNumbers(normalizedData, title);
2459
2460
  case 6:
2460
- checkoutData = _context31.sent;
2461
+ numberedData = _context31.sent;
2462
+ checkoutData = this.applyCheckoutFulfillmentBuzzer(numberedData, title);
2461
2463
  remoteCheckoutData = this.buildRemoteCheckoutData(checkoutData, title);
2462
2464
  if ((_this$app6 = this.app) !== null && _this$app6 !== void 0 && (_this$app6 = _this$app6.request) !== null && _this$app6 !== void 0 && _this$app6.post) {
2463
- _context31.next = 10;
2465
+ _context31.next = 11;
2464
2466
  break;
2465
2467
  }
2466
2468
  throw new Error('app.request 不可用');
2467
- case 10:
2468
- _context31.next = 12;
2469
+ case 11:
2470
+ _context31.next = 13;
2469
2471
  return this.app.request.post(backendPath, remoteCheckoutData, {
2470
2472
  isShopApi: true,
2471
2473
  customToast: function customToast() {}
2472
2474
  });
2473
- case 12:
2475
+ case 13:
2474
2476
  response = _context31.sent;
2475
2477
  if (!this.isCheckoutResponseRejected(response)) {
2476
- _context31.next = 15;
2478
+ _context31.next = 16;
2477
2479
  break;
2478
2480
  }
2479
2481
  return _context31.abrupt("return", {
@@ -2484,13 +2486,13 @@ var Server = /*#__PURE__*/function () {
2484
2486
  normalizedResponse: this.normalizeCheckoutResponse(response),
2485
2487
  checkoutData: checkoutData
2486
2488
  });
2487
- case 15:
2489
+ case 16:
2488
2490
  fresh = this.extractOrderDataFromCheckoutResponse(response);
2489
2491
  externalSaleNumber = this.getCheckoutExternalSaleNumber(checkoutData, {
2490
2492
  external_sale_number: params.externalSaleNumber,
2491
2493
  data: checkoutData
2492
2494
  });
2493
- _context31.next = 19;
2495
+ _context31.next = 20;
2494
2496
  return this.persistSyncedCheckoutOrder({
2495
2497
  backendPath: backendPath,
2496
2498
  checkoutData: checkoutData,
@@ -2499,7 +2501,7 @@ var Server = /*#__PURE__*/function () {
2499
2501
  title: title,
2500
2502
  persistCheckoutDataWithResponse: params.persistCheckoutDataWithResponse === true
2501
2503
  });
2502
- case 19:
2504
+ case 20:
2503
2505
  syncedOrder = _context31.sent;
2504
2506
  printableSyncedOrder = syncedOrder ? this.buildSyncedOrderForPrint({
2505
2507
  syncedOrder: syncedOrder,
@@ -2509,17 +2511,17 @@ var Server = /*#__PURE__*/function () {
2509
2511
  checkoutData: checkoutData,
2510
2512
  syncedOrder: printableSyncedOrder
2511
2513
  }))) {
2512
- _context31.next = 24;
2514
+ _context31.next = 25;
2513
2515
  break;
2514
2516
  }
2515
- _context31.next = 24;
2517
+ _context31.next = 25;
2516
2518
  return this.dispatchPrintOtherReceiptTask({
2517
2519
  checkoutData: checkoutData,
2518
2520
  syncedOrder: printableSyncedOrder,
2519
2521
  response: response,
2520
2522
  deviceId: params.deviceId
2521
2523
  });
2522
- case 24:
2524
+ case 25:
2523
2525
  return _context31.abrupt("return", {
2524
2526
  rejected: false,
2525
2527
  response: response,
@@ -2528,7 +2530,7 @@ var Server = /*#__PURE__*/function () {
2528
2530
  syncedOrder: syncedOrder,
2529
2531
  fresh: fresh
2530
2532
  });
2531
- case 25:
2533
+ case 26:
2532
2534
  case "end":
2533
2535
  return _context31.stop();
2534
2536
  }
@@ -2554,6 +2556,7 @@ var Server = /*#__PURE__*/function () {
2554
2556
  var next = cloneDeep(this.omitCheckoutSyncMode(data));
2555
2557
  if (!next || _typeof(next) !== 'object') return next;
2556
2558
  var record = next;
2559
+ delete record[OS_FULFILLMENT_REF_MODE_FIELD];
2557
2560
  if (!Array.isArray(record.payments)) return next;
2558
2561
  var originalPayments = record.payments;
2559
2562
  var filteredPayments = originalPayments.filter(function (payment) {
@@ -5315,6 +5318,92 @@ var Server = /*#__PURE__*/function () {
5315
5318
  value: function isLocalCheckoutOrderId(orderId) {
5316
5319
  return typeof orderId === 'string' && orderId.startsWith('LOCAL_');
5317
5320
  }
5321
+ }, {
5322
+ key: "applyCheckoutFulfillmentBuzzer",
5323
+ value: function applyCheckoutFulfillmentBuzzer(data, title) {
5324
+ if (!data || _typeof(data) !== 'object') return data;
5325
+ var next = _objectSpread({}, data);
5326
+ var refMode = String(next[OS_FULFILLMENT_REF_MODE_FIELD] || '').trim();
5327
+ delete next[OS_FULFILLMENT_REF_MODE_FIELD];
5328
+ if (!refMode) return next;
5329
+ if (refMode === 'manual_input') {
5330
+ this.logInfo("".concat(title, ": fulfillment ref mode \u4FDD\u7559\u624B\u52A8 buzzer"), {
5331
+ fulfillment_ref_mode: refMode,
5332
+ has_buzzer: !this.isBlankCheckoutValue(next.buzzer)
5333
+ });
5334
+ return next;
5335
+ }
5336
+ if (refMode === 'resource_identifier') {
5337
+ next.buzzer = this.buildCheckoutResourceIdentifierBuzzer(next.bookings);
5338
+ } else if (refMode === 'sale_number') {
5339
+ next.buzzer = this.isBlankCheckoutValue(next.shop_order_number) ? '' : String(next.shop_order_number);
5340
+ } else if (refMode === 'short_number') {
5341
+ next.buzzer = this.isBlankCheckoutValue(next.shop_full_order_number) ? '' : String(next.shop_full_order_number);
5342
+ } else {
5343
+ this.logWarning("".concat(title, ": \u672A\u8BC6\u522B\u7684 fulfillment ref mode\uFF0C\u8DF3\u8FC7 buzzer \u81EA\u52A8\u586B\u5145"), {
5344
+ fulfillment_ref_mode: refMode
5345
+ });
5346
+ return next;
5347
+ }
5348
+ this.logInfo("".concat(title, ": fulfillment ref mode \u5DF2\u586B\u5145 buzzer"), {
5349
+ fulfillment_ref_mode: refMode,
5350
+ buzzer: next.buzzer
5351
+ });
5352
+ return next;
5353
+ }
5354
+ }, {
5355
+ key: "buildCheckoutResourceIdentifierBuzzer",
5356
+ value: function buildCheckoutResourceIdentifierBuzzer(bookings) {
5357
+ var _this13 = this;
5358
+ if (!Array.isArray(bookings)) return '';
5359
+ var values = [];
5360
+ var seen = new Set();
5361
+ var visitResource = function visitResource(resource) {
5362
+ var identifier = _this13.getCheckoutResourceIdentifier(resource);
5363
+ if (identifier && !seen.has(identifier)) {
5364
+ seen.add(identifier);
5365
+ values.push(identifier);
5366
+ }
5367
+ if (Array.isArray(resource === null || resource === void 0 ? void 0 : resource.children)) {
5368
+ resource.children.forEach(visitResource);
5369
+ }
5370
+ };
5371
+ bookings.forEach(function (booking) {
5372
+ if (Array.isArray(booking === null || booking === void 0 ? void 0 : booking.resources)) {
5373
+ booking.resources.forEach(visitResource);
5374
+ }
5375
+ });
5376
+ return values.join(',');
5377
+ }
5378
+ }, {
5379
+ key: "getCheckoutResourceIdentifier",
5380
+ value: function getCheckoutResourceIdentifier(resource) {
5381
+ var _resource$metadata, _resource$metadata2;
5382
+ if (!resource || _typeof(resource) !== 'object') return '';
5383
+ var candidates = [resource.main_field, resource.name, resource.title, (_resource$metadata = resource.metadata) === null || _resource$metadata === void 0 ? void 0 : _resource$metadata.resource_name, (_resource$metadata2 = resource.metadata) === null || _resource$metadata2 === void 0 ? void 0 : _resource$metadata2.name, resource.relation_id, resource.id];
5384
+ for (var _i2 = 0, _candidates = candidates; _i2 < _candidates.length; _i2++) {
5385
+ var candidate = _candidates[_i2];
5386
+ var value = this.stringifyCheckoutResourceIdentifier(candidate);
5387
+ if (value) return value;
5388
+ }
5389
+ return '';
5390
+ }
5391
+ }, {
5392
+ key: "stringifyCheckoutResourceIdentifier",
5393
+ value: function stringifyCheckoutResourceIdentifier(value) {
5394
+ if (value === undefined || value === null) return '';
5395
+ if (typeof value === 'string' || typeof value === 'number') {
5396
+ return String(value).trim();
5397
+ }
5398
+ if (_typeof(value) !== 'object' || Array.isArray(value)) return '';
5399
+ var localeCandidates = [value.original, value.auto, value.en, value['zh-CN'], value.zh_CN, value['zh-HK'], value.zh_HK];
5400
+ for (var _i3 = 0, _localeCandidates = localeCandidates; _i3 < _localeCandidates.length; _i3++) {
5401
+ var candidate = _localeCandidates[_i3];
5402
+ var normalized = this.stringifyCheckoutResourceIdentifier(candidate);
5403
+ if (normalized) return normalized;
5404
+ }
5405
+ return '';
5406
+ }
5318
5407
  }, {
5319
5408
  key: "normalizeCheckoutSubmitData",
5320
5409
  value: function () {
@@ -5877,7 +5966,7 @@ var Server = /*#__PURE__*/function () {
5877
5966
  key: "handleOrderCheckoutSubmit",
5878
5967
  value: function () {
5879
5968
  var _handleOrderCheckoutSubmit = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee60(params) {
5880
- var backendPath, data, title, normalizedData, checkoutData, pendingResult, pendingOrder;
5969
+ var backendPath, data, title, normalizedData, numberedData, checkoutData, pendingResult, pendingOrder;
5881
5970
  return _regeneratorRuntime().wrap(function _callee60$(_context60) {
5882
5971
  while (1) switch (_context60.prev = _context60.next) {
5883
5972
  case 0:
@@ -5905,42 +5994,43 @@ var Server = /*#__PURE__*/function () {
5905
5994
  _context60.next = 9;
5906
5995
  return this.ensureCheckoutOrderNumbers(normalizedData, title);
5907
5996
  case 9:
5908
- checkoutData = _context60.sent;
5909
- _context60.next = 12;
5997
+ numberedData = _context60.sent;
5998
+ checkoutData = this.applyCheckoutFulfillmentBuzzer(numberedData, title);
5999
+ _context60.next = 13;
5910
6000
  return this.handlePendingSyncCheckoutOrder({
5911
6001
  backendPath: backendPath,
5912
6002
  data: checkoutData,
5913
6003
  title: title,
5914
6004
  reason: 'checkout 已转入设备任务同步'
5915
6005
  });
5916
- case 12:
6006
+ case 13:
5917
6007
  pendingResult = _context60.sent;
5918
6008
  if (!((pendingResult === null || pendingResult === void 0 ? void 0 : pendingResult.status) === true)) {
5919
- _context60.next = 20;
6009
+ _context60.next = 21;
5920
6010
  break;
5921
6011
  }
5922
6012
  pendingOrder = pendingResult.data;
5923
6013
  if (!(pendingOrder && this.shouldBuildSmallTicketData(checkoutData) && this.isSalesOrderFullyPaid(pendingOrder) && this.shouldAutoPrintCheckoutReceipt())) {
5924
- _context60.next = 18;
6014
+ _context60.next = 19;
5925
6015
  break;
5926
6016
  }
5927
- _context60.next = 18;
6017
+ _context60.next = 19;
5928
6018
  return this.dispatchLocalReceiptPrint({
5929
6019
  checkoutData: checkoutData,
5930
6020
  order: pendingOrder,
5931
6021
  response: pendingResult,
5932
6022
  requireFullyPaid: true
5933
6023
  });
5934
- case 18:
5935
- _context60.next = 20;
6024
+ case 19:
6025
+ _context60.next = 21;
5936
6026
  return this.dispatchCheckoutSyncTask({
5937
6027
  backendPath: backendPath,
5938
6028
  data: checkoutData,
5939
6029
  title: title
5940
6030
  });
5941
- case 20:
6031
+ case 21:
5942
6032
  if (pendingResult.data.order_id) {
5943
- _context60.next = 22;
6033
+ _context60.next = 23;
5944
6034
  break;
5945
6035
  }
5946
6036
  return _context60.abrupt("return", _objectSpread(_objectSpread({}, pendingResult), {}, {
@@ -5948,9 +6038,9 @@ var Server = /*#__PURE__*/function () {
5948
6038
  order_id: pendingResult.data.external_sale_number
5949
6039
  })
5950
6040
  }));
5951
- case 22:
5952
- return _context60.abrupt("return", pendingResult);
5953
6041
  case 23:
6042
+ return _context60.abrupt("return", pendingResult);
6043
+ case 24:
5954
6044
  case "end":
5955
6045
  return _context60.stop();
5956
6046
  }
@@ -6143,7 +6233,7 @@ var Server = /*#__PURE__*/function () {
6143
6233
  key: "handlePendingSyncCheckoutOrder",
6144
6234
  value: function () {
6145
6235
  var _handlePendingSyncCheckoutOrder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee63(params) {
6146
- var _this13 = this;
6236
+ var _this14 = this;
6147
6237
  var backendPath, data, title, reason, pendingOrder, _pendingOrder$payment, _pendingOrder$summary, _pendingOrder$summary2, _pendingOrder$summary3, changeGivenAmount, errorMessage;
6148
6238
  return _regeneratorRuntime().wrap(function _callee63$(_context63) {
6149
6239
  while (1) switch (_context63.prev = _context63.next) {
@@ -6196,7 +6286,7 @@ var Server = /*#__PURE__*/function () {
6196
6286
  });
6197
6287
  changeGivenAmount = pendingOrder === null || pendingOrder === void 0 || (_pendingOrder$payment = pendingOrder.payments) === null || _pendingOrder$payment === void 0 ? void 0 : _pendingOrder$payment.reduce(function (sum, payment) {
6198
6288
  var _payment$metadata;
6199
- return sum + _this13.toAmountNumber(payment === null || payment === void 0 || (_payment$metadata = payment.metadata) === null || _payment$metadata === void 0 ? void 0 : _payment$metadata.change_given_amount);
6289
+ return sum + _this14.toAmountNumber(payment === null || payment === void 0 || (_payment$metadata = payment.metadata) === null || _payment$metadata === void 0 ? void 0 : _payment$metadata.change_given_amount);
6200
6290
  }, 0);
6201
6291
  return _context63.abrupt("return", {
6202
6292
  code: 200,
@@ -6336,13 +6426,13 @@ var Server = /*#__PURE__*/function () {
6336
6426
  }, {
6337
6427
  key: "sumPaidOrderPayments",
6338
6428
  value: function sumPaidOrderPayments(payments) {
6339
- var _this14 = this;
6429
+ var _this15 = this;
6340
6430
  if (!Array.isArray(payments)) return 0;
6341
6431
  return payments.reduce(function (sum, payment) {
6342
6432
  var _payment$amount;
6343
6433
  var status = String((payment === null || payment === void 0 ? void 0 : payment.status) || '').toLowerCase();
6344
6434
  if (status !== 'paid') return sum;
6345
- return sum + _this14.toAmountNumber((_payment$amount = payment === null || payment === void 0 ? void 0 : payment.amount) !== null && _payment$amount !== void 0 ? _payment$amount : payment === null || payment === void 0 ? void 0 : payment.origin_amount);
6435
+ return sum + _this15.toAmountNumber((_payment$amount = payment === null || payment === void 0 ? void 0 : payment.amount) !== null && _payment$amount !== void 0 ? _payment$amount : payment === null || payment === void 0 ? void 0 : payment.origin_amount);
6346
6436
  }, 0);
6347
6437
  }
6348
6438
  }, {
@@ -6358,7 +6448,7 @@ var Server = /*#__PURE__*/function () {
6358
6448
  value: function () {
6359
6449
  var _buildSmallTicketProductMap = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee66(order) {
6360
6450
  var _this$products3,
6361
- _this15 = this;
6451
+ _this16 = this;
6362
6452
  var products, productIdSet, productIds, entries;
6363
6453
  return _regeneratorRuntime().wrap(function _callee66$(_context66) {
6364
6454
  while (1) switch (_context66.prev = _context66.next) {
@@ -6391,20 +6481,20 @@ var Server = /*#__PURE__*/function () {
6391
6481
  _context66.next = 8;
6392
6482
  return Promise.all(productIds.map( /*#__PURE__*/function () {
6393
6483
  var _ref68 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee65(id) {
6394
- var _this15$products, _this15$products$getP, product;
6484
+ var _this16$products, _this16$products$getP, product;
6395
6485
  return _regeneratorRuntime().wrap(function _callee65$(_context65) {
6396
6486
  while (1) switch (_context65.prev = _context65.next) {
6397
6487
  case 0:
6398
6488
  _context65.prev = 0;
6399
6489
  _context65.next = 3;
6400
- return (_this15$products = _this15.products) === null || _this15$products === void 0 || (_this15$products$getP = _this15$products.getProductById) === null || _this15$products$getP === void 0 ? void 0 : _this15$products$getP.call(_this15$products, Number(id));
6490
+ return (_this16$products = _this16.products) === null || _this16$products === void 0 || (_this16$products$getP = _this16$products.getProductById) === null || _this16$products$getP === void 0 ? void 0 : _this16$products$getP.call(_this16$products, Number(id));
6401
6491
  case 3:
6402
6492
  product = _context65.sent;
6403
6493
  return _context65.abrupt("return", product ? [String(id), product] : null);
6404
6494
  case 7:
6405
6495
  _context65.prev = 7;
6406
6496
  _context65.t0 = _context65["catch"](0);
6407
- _this15.logWarning('buildSmallTicketProductMap: 查询本地商品失败', {
6497
+ _this16.logWarning('buildSmallTicketProductMap: 查询本地商品失败', {
6408
6498
  product_id: id,
6409
6499
  error: _context65.t0 instanceof Error ? _context65.t0.message : String(_context65.t0)
6410
6500
  });
@@ -6555,7 +6645,7 @@ var Server = /*#__PURE__*/function () {
6555
6645
  key: "withSalesDetailProductSnapshots",
6556
6646
  value: function () {
6557
6647
  var _withSalesDetailProductSnapshots = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee68(order) {
6558
- var _this16 = this;
6648
+ var _this17 = this;
6559
6649
  var products, snapshotMap, hasChanged, enrichedProducts, enrichedOrder;
6560
6650
  return _regeneratorRuntime().wrap(function _callee68$(_context68) {
6561
6651
  while (1) switch (_context68.prev = _context68.next) {
@@ -6579,8 +6669,8 @@ var Server = /*#__PURE__*/function () {
6579
6669
  case 8:
6580
6670
  hasChanged = false;
6581
6671
  enrichedProducts = products.map(function (product) {
6582
- var productWithBundleSnapshots = _this16.withBundleCatalogSnapshots(product, snapshotMap);
6583
- var nextProduct = _this16.withProductCatalogSnapshots(productWithBundleSnapshots, snapshotMap);
6672
+ var productWithBundleSnapshots = _this17.withBundleCatalogSnapshots(product, snapshotMap);
6673
+ var nextProduct = _this17.withProductCatalogSnapshots(productWithBundleSnapshots, snapshotMap);
6584
6674
  if (nextProduct !== product) hasChanged = true;
6585
6675
  return nextProduct;
6586
6676
  });
@@ -6608,13 +6698,13 @@ var Server = /*#__PURE__*/function () {
6608
6698
  }, {
6609
6699
  key: "withPendingSyncProductTitles",
6610
6700
  value: function withPendingSyncProductTitles(order, productMap) {
6611
- var _this17 = this;
6701
+ var _this18 = this;
6612
6702
  var products = Array.isArray(order.products) ? order.products : null;
6613
6703
  if (!(products !== null && products !== void 0 && products.length)) return order;
6614
6704
  return _objectSpread(_objectSpread({}, order), {}, {
6615
6705
  products: products.map(function (product) {
6616
6706
  return _objectSpread(_objectSpread({}, product), {}, {
6617
- product_title: _this17.buildProductTitleSnapshot(product, productMap)
6707
+ product_title: _this18.buildProductTitleSnapshot(product, productMap)
6618
6708
  });
6619
6709
  })
6620
6710
  });
@@ -6625,7 +6715,7 @@ var Server = /*#__PURE__*/function () {
6625
6715
  var _product$product_id4,
6626
6716
  _product$product,
6627
6717
  _fallbackProduct$prod,
6628
- _this18 = this;
6718
+ _this19 = this;
6629
6719
  var productId = (_product$product_id4 = product.product_id) !== null && _product$product_id4 !== void 0 ? _product$product_id4 : product.id;
6630
6720
  var fallbackProduct = productId !== undefined && productId !== null ? productMap[productId] || productMap[String(productId)] : null;
6631
6721
  var ownTitle = product.product_title || product.title || product.name || ((_product$product = product.product) === null || _product$product === void 0 ? void 0 : _product$product.title);
@@ -6633,7 +6723,7 @@ var Server = /*#__PURE__*/function () {
6633
6723
  var currentLocale = this.getProductTitleSnapshotCurrentLocale();
6634
6724
  var autoTitle = this.resolveFirstProductTitleValue(ownTitle) || this.resolveFirstProductTitleValue(fallbackTitle);
6635
6725
  return PRODUCT_TITLE_SNAPSHOT_KEYS.reduce(function (snapshot, key) {
6636
- snapshot[key] = _this18.resolveProductTitleValue(ownTitle, key, currentLocale) || _this18.resolveProductTitleValue(fallbackTitle, key, currentLocale) || (key === 'auto' || key === 'original' ? autoTitle : null);
6726
+ snapshot[key] = _this19.resolveProductTitleValue(ownTitle, key, currentLocale) || _this19.resolveProductTitleValue(fallbackTitle, key, currentLocale) || (key === 'auto' || key === 'original' ? autoTitle : null);
6637
6727
  return snapshot;
6638
6728
  }, {});
6639
6729
  }
@@ -6695,8 +6785,8 @@ var Server = /*#__PURE__*/function () {
6695
6785
  if (value === undefined || value === null || value === '') return null;
6696
6786
  if (_typeof(value) !== 'object') return String(value);
6697
6787
  var preferredKeys = ['auto', 'en', 'original', 'zh-CN', 'zh_CN', 'zh-HK', 'zh_HK', 'kitchen', 'ja', 'pt', 'default'];
6698
- for (var _i2 = 0, _preferredKeys = preferredKeys; _i2 < _preferredKeys.length; _i2++) {
6699
- var _key6 = _preferredKeys[_i2];
6788
+ for (var _i4 = 0, _preferredKeys = preferredKeys; _i4 < _preferredKeys.length; _i4++) {
6789
+ var _key6 = _preferredKeys[_i4];
6700
6790
  var rawValue = value[_key6];
6701
6791
  if (rawValue !== undefined && rawValue !== null && rawValue !== '') return String(rawValue);
6702
6792
  }
@@ -6732,14 +6822,14 @@ var Server = /*#__PURE__*/function () {
6732
6822
  key: "enrichPaymentNamesByCode",
6733
6823
  value: function () {
6734
6824
  var _enrichPaymentNamesByCode = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee69(order) {
6735
- var _this19 = this;
6825
+ var _this20 = this;
6736
6826
  var payments, hasMissingName, paymentModule, payMethods, nameByCode, _iterator12, _step12, method, codeKey, name, hasResolvedName, enrichedPayments;
6737
6827
  return _regeneratorRuntime().wrap(function _callee69$(_context69) {
6738
6828
  while (1) switch (_context69.prev = _context69.next) {
6739
6829
  case 0:
6740
6830
  payments = Array.isArray(order === null || order === void 0 ? void 0 : order.payments) ? order.payments : [];
6741
6831
  hasMissingName = payments.some(function (payment) {
6742
- return _this19.isBlankPaymentName(payment === null || payment === void 0 ? void 0 : payment.name) && _this19.shouldLookupPaymentMethodNameByCode(payment === null || payment === void 0 ? void 0 : payment.code);
6832
+ return _this20.isBlankPaymentName(payment === null || payment === void 0 ? void 0 : payment.name) && _this20.shouldLookupPaymentMethodNameByCode(payment === null || payment === void 0 ? void 0 : payment.code);
6743
6833
  });
6744
6834
  if (hasMissingName) {
6745
6835
  _context69.next = 4;
@@ -6772,9 +6862,9 @@ var Server = /*#__PURE__*/function () {
6772
6862
  }
6773
6863
  hasResolvedName = false;
6774
6864
  enrichedPayments = payments.map(function (payment) {
6775
- if (!_this19.isBlankPaymentName(payment === null || payment === void 0 ? void 0 : payment.name)) return payment;
6776
- if (!_this19.shouldLookupPaymentMethodNameByCode(payment === null || payment === void 0 ? void 0 : payment.code)) return payment;
6777
- var name = nameByCode.get(_this19.getPaymentCodeKey(payment === null || payment === void 0 ? void 0 : payment.code));
6865
+ if (!_this20.isBlankPaymentName(payment === null || payment === void 0 ? void 0 : payment.name)) return payment;
6866
+ if (!_this20.shouldLookupPaymentMethodNameByCode(payment === null || payment === void 0 ? void 0 : payment.code)) return payment;
6867
+ var name = nameByCode.get(_this20.getPaymentCodeKey(payment === null || payment === void 0 ? void 0 : payment.code));
6778
6868
  if (!name) return payment;
6779
6869
  hasResolvedName = true;
6780
6870
  return _objectSpread(_objectSpread({}, payment), {}, {
@@ -6912,8 +7002,8 @@ var Server = /*#__PURE__*/function () {
6912
7002
  pushRaw(this.extractQueryParam(url, 'order_ids'));
6913
7003
  var seen = new Set();
6914
7004
  var result = [];
6915
- for (var _i3 = 0, _collected = collected; _i3 < _collected.length; _i3++) {
6916
- var id = _collected[_i3];
7005
+ for (var _i5 = 0, _collected = collected; _i5 < _collected.length; _i5++) {
7006
+ var id = _collected[_i5];
6917
7007
  if (seen.has(id)) continue;
6918
7008
  seen.add(id);
6919
7009
  result.push(id);
@@ -7191,8 +7281,8 @@ var Server = /*#__PURE__*/function () {
7191
7281
  value: function extractOrderDataFromCheckoutResponse(response) {
7192
7282
  var _response$data6, _response$data7;
7193
7283
  var candidates = [response === null || response === void 0 || (_response$data6 = response.data) === null || _response$data6 === void 0 ? void 0 : _response$data6.order, response === null || response === void 0 || (_response$data7 = response.data) === null || _response$data7 === void 0 ? void 0 : _response$data7.sales, response === null || response === void 0 ? void 0 : response.data, response === null || response === void 0 ? void 0 : response.order, response === null || response === void 0 ? void 0 : response.sales, response];
7194
- for (var _i4 = 0, _candidates = candidates; _i4 < _candidates.length; _i4++) {
7195
- var candidate = _candidates[_i4];
7284
+ for (var _i6 = 0, _candidates2 = candidates; _i6 < _candidates2.length; _i6++) {
7285
+ var candidate = _candidates2[_i6];
7196
7286
  if (!candidate || _typeof(candidate) !== 'object') continue;
7197
7287
  if (candidate.order_id !== undefined && candidate.order_id !== null) {
7198
7288
  return candidate;
@@ -7356,10 +7446,10 @@ var Server = /*#__PURE__*/function () {
7356
7446
  value: function extractBackendErrorResponse(error) {
7357
7447
  var _error$response3,
7358
7448
  _error$response4,
7359
- _this20 = this;
7449
+ _this21 = this;
7360
7450
  var candidates = [error === null || error === void 0 || (_error$response3 = error.response) === null || _error$response3 === void 0 ? void 0 : _error$response3.data, error === null || error === void 0 ? void 0 : error.data, error === null || error === void 0 || (_error$response4 = error.response) === null || _error$response4 === void 0 ? void 0 : _error$response4.body, error === null || error === void 0 ? void 0 : error.body];
7361
7451
  return candidates.find(function (candidate) {
7362
- return _this20.isExplicitBackendErrorResponse(candidate);
7452
+ return _this21.isExplicitBackendErrorResponse(candidate);
7363
7453
  }) || null;
7364
7454
  }
7365
7455
  }, {
@@ -7719,7 +7809,7 @@ var Server = /*#__PURE__*/function () {
7719
7809
  value: (function () {
7720
7810
  var _computeProductQueryResult = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee75(context, options) {
7721
7811
  var _menu_list_ids$length3,
7722
- _this21 = this;
7812
+ _this22 = this;
7723
7813
  var tTotal, menu_list_ids, ids, schedule_date, schedule_datetime, customer_id, extension_type, product_id, strategy_context, queryIds, formatterContext, uniqueIds, _tPrice, productsWithPrice, _filteredProducts, extensionFilteredProducts, _published$find, pid, _tPrice2, allProductsWithPrice, published, item, _tPrice3, _filteredProducts2, _tStatus, _beforeStatusCount, _tExtensionType, _beforeExtensionTypeCount, _tSort, activeMenuList, tMenu, getActiveMenus, tFilter, productScope, scopedProductIds, tPrice, filteredProducts, tStatus, beforeStatusCount, tExtensionType, beforeExtensionTypeCount, tSort;
7724
7814
  return _regeneratorRuntime().wrap(function _callee75$(_context75) {
7725
7815
  while (1) switch (_context75.prev = _context75.next) {
@@ -7918,9 +8008,9 @@ var Server = /*#__PURE__*/function () {
7918
8008
  }
7919
8009
  tMenu = performance.now();
7920
8010
  getActiveMenus = function getActiveMenus() {
7921
- return _this21.menu.getMenuByIds(menu_list_ids).filter(function (menu) {
7922
- var _this21$schedule;
7923
- return ((_this21$schedule = _this21.schedule) === null || _this21$schedule === void 0 ? void 0 : _this21$schedule.getDateIsInSchedule(schedule_datetime, menu.schedule)) || false;
8011
+ return _this22.menu.getMenuByIds(menu_list_ids).filter(function (menu) {
8012
+ var _this22$schedule;
8013
+ return ((_this22$schedule = _this22.schedule) === null || _this22$schedule === void 0 ? void 0 : _this22$schedule.getDateIsInSchedule(schedule_datetime, menu.schedule)) || false;
7924
8014
  });
7925
8015
  };
7926
8016
  activeMenuList = getActiveMenus();
@@ -8229,7 +8319,7 @@ var Server = /*#__PURE__*/function () {
8229
8319
  }, {
8230
8320
  key: "notifySalesSearchSubscribers",
8231
8321
  value: function notifySalesSearchSubscribers(payload) {
8232
- var _this22 = this;
8322
+ var _this23 = this;
8233
8323
  if (this.salesSearchSubscribers.size === 0) return;
8234
8324
  var changedOrders = this.extractChangedOrdersFromPayload(payload);
8235
8325
  if (changedOrders.length === 0) {
@@ -8247,21 +8337,21 @@ var Server = /*#__PURE__*/function () {
8247
8337
  subscriber = _step20$value[1];
8248
8338
  try {
8249
8339
  var changedVisibleOrders = changedOrders.filter(function (order) {
8250
- var orderId = _this22.getSalesSearchOrderId(order);
8340
+ var orderId = _this23.getSalesSearchOrderId(order);
8251
8341
  return !!orderId && subscriber.visibleOrderIds.has(orderId);
8252
8342
  });
8253
8343
  if (changedVisibleOrders.length === 0) {
8254
8344
  return 1; // continue
8255
8345
  }
8256
- subscriber.callback(_this22.buildSalesSearchDeltaResponse(subscriber, changedVisibleOrders));
8257
- _this22.logInfo('notifySalesSearchSubscribers: 已推送 delta', {
8346
+ subscriber.callback(_this23.buildSalesSearchDeltaResponse(subscriber, changedVisibleOrders));
8347
+ _this23.logInfo('notifySalesSearchSubscribers: 已推送 delta', {
8258
8348
  subscriberId: subscriberId,
8259
8349
  kind: subscriber.kind,
8260
8350
  count: changedVisibleOrders.length
8261
8351
  });
8262
8352
  } catch (error) {
8263
8353
  var errorMessage = error instanceof Error ? error.message : String(error);
8264
- _this22.logError('notifySalesSearchSubscribers: 推送失败', {
8354
+ _this23.logError('notifySalesSearchSubscribers: 推送失败', {
8265
8355
  subscriberId: subscriberId,
8266
8356
  error: errorMessage
8267
8357
  });
@@ -20,6 +20,8 @@ export declare class OrderModule extends BaseModule implements Module {
20
20
  private storage;
21
21
  private orderSQLiteSaveQueue; /** 按 storageKey 记录最近一次 SQLite 写入来源与时间,用于去重 */
22
22
  private recentSqliteWriteByStorageKey;
23
+ /** 最近一次清理过期 SQLite 去重记录的时间,避免每次写入都遍历 Map */
24
+ private lastRecentSqliteWriteCleanupAtMs;
23
25
  /** 最近一次 SSE 全量拉取完成时间 */
24
26
  private lastServerFullFetchAtMs;
25
27
  constructor(name?: string, version?: string);
@@ -58,6 +60,12 @@ export declare class OrderModule extends BaseModule implements Module {
58
60
  */
59
61
  private mergeAuthoritativeOrderCollection;
60
62
  private reconcileOverwriteOrderCollections;
63
+ /**
64
+ * 惰性清理已经超过去重窗口的 SQLite 写入记录。
65
+ *
66
+ * 清理频率与去重窗口一致,既限制 Map 长期增长,也不会移除仍参与去重的记录。
67
+ */
68
+ private cleanupExpiredRecentSqliteWrites;
61
69
  /**
62
70
  * 记录订单最近一次 SQLite 写入,供 pubsub 回声去重使用。
63
71
  *