@pisell/pisellos 2.3.159 → 2.3.160

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.
@@ -328,7 +328,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
328
328
  date: string;
329
329
  status: string;
330
330
  week: string;
331
- weekNum: 0 | 1 | 2 | 3 | 4 | 5 | 6;
331
+ weekNum: 0 | 1 | 2 | 6 | 3 | 4 | 5;
332
332
  }[]>;
333
333
  submitTimeSlot(timeSlots: TimeSliceItem): void;
334
334
  private getScheduleDataByIds;
@@ -71,6 +71,7 @@ export declare class BookingTicketImpl extends BaseSalesImpl implements Module {
71
71
  private getShortNumberOrDeviceId;
72
72
  private configureIdGeneratorFromOpenData;
73
73
  private normalizePositiveInteger;
74
+ private normalizeShortNumberMaximum;
74
75
  private normalizeIdPrefix;
75
76
  /**
76
77
  * 加载销售详情,并在父类基础上把 customer 信息装配到 CustomerModule。
@@ -606,7 +606,7 @@ export var BookingTicketImpl = /*#__PURE__*/function (_BaseSalesImpl) {
606
606
  value: function () {
607
607
  var _configureIdGeneratorFromOpenData = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee9() {
608
608
  var _openDataConfig, _openDataConfig2, _openDataConfig3, _openDataConfig4, _openDataConfig5, _openDataConfig6;
609
- var idGenerator, openDataConfig, receiptSequenceLength, receiptSequenceStart, prefix, shopOrderPrefix, resetReceiptSequenceDaily, operatingDayBoundary, deviceId, businessCode, _openDataConfig7;
609
+ var idGenerator, openDataConfig, receiptSequenceLength, receiptSequenceStart, prefix, shopOrderPrefix, resetReceiptSequenceDaily, operatingDayBoundary, deviceId, businessCode, _openDataConfig7, _openDataConfig8, _openDataConfig9;
610
610
  return _regeneratorRuntime().wrap(function _callee9$(_context9) {
611
611
  while (1) switch (_context9.prev = _context9.next) {
612
612
  case 0:
@@ -664,10 +664,10 @@ export var BookingTicketImpl = /*#__PURE__*/function (_BaseSalesImpl) {
664
664
  config: {
665
665
  prefix: prefix,
666
666
  deviceCode: deviceId,
667
- // TODO 现在 picoding 没这个配置的 key
668
- padReceiptSequence: false,
667
+ padReceiptSequence: ((_openDataConfig7 = openDataConfig) === null || _openDataConfig7 === void 0 ? void 0 : _openDataConfig7['sale.pad_with_leading_zeros']) === true,
669
668
  receiptSequenceLength: receiptSequenceLength,
670
- randomReceiptSequence: ((_openDataConfig7 = openDataConfig) === null || _openDataConfig7 === void 0 ? void 0 : _openDataConfig7['sale.short_number_random']) === true,
669
+ receiptSequenceMax: this.normalizeShortNumberMaximum((_openDataConfig8 = openDataConfig) === null || _openDataConfig8 === void 0 ? void 0 : _openDataConfig8['sale.maximum_number']),
670
+ randomReceiptSequence: ((_openDataConfig9 = openDataConfig) === null || _openDataConfig9 === void 0 ? void 0 : _openDataConfig9['sale.short_number_random']) === true,
671
671
  resetReceiptSequenceDaily: resetReceiptSequenceDaily,
672
672
  receiptSequenceResetTime: operatingDayBoundary === null || operatingDayBoundary === void 0 ? void 0 : operatingDayBoundary.time,
673
673
  receiptSequenceStart: receiptSequenceStart,
@@ -699,6 +699,19 @@ export var BookingTicketImpl = /*#__PURE__*/function (_BaseSalesImpl) {
699
699
  if (!Number.isInteger(numeric) || numeric <= 0) return fallback;
700
700
  return numeric;
701
701
  }
702
+ }, {
703
+ key: "normalizeShortNumberMaximum",
704
+ value: function normalizeShortNumberMaximum(value) {
705
+ if (value === undefined || value === null || typeof value === 'string' && !value.trim()) return null;
706
+ if (typeof value !== 'number' && typeof value !== 'string') {
707
+ throw new Error('sale.maximum_number 必须是安全正整数或空值');
708
+ }
709
+ var numeric = Number(value);
710
+ if (!Number.isSafeInteger(numeric) || numeric <= 0) {
711
+ throw new Error('sale.maximum_number 必须是安全正整数或空值');
712
+ }
713
+ return numeric;
714
+ }
702
715
  }, {
703
716
  key: "normalizeIdPrefix",
704
717
  value: function normalizeIdPrefix(value, fallback) {
@@ -1 +1,46 @@
1
- "use strict";
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "BUY_X_GET_Y_FREE_STRATEGY", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _examples.BUY_X_GET_Y_FREE_STRATEGY;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "ITEM_REWARD_STRATEGY", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _examples.ITEM_REWARD_STRATEGY;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "PromotionAdapter", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _adapter.PromotionAdapter;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "PromotionEvaluator", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _evaluator.PromotionEvaluator;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "X_ITEMS_FOR_Y_PRICE_STRATEGY", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _examples.X_ITEMS_FOR_Y_PRICE_STRATEGY;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "default", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _adapter.default;
40
+ }
41
+ });
42
+ var _evaluator = require("./evaluator");
43
+ var _adapter = _interopRequireWildcard(require("./adapter"));
44
+ var _examples = require("./examples");
45
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
46
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -74,6 +74,8 @@ export interface OpenDataConfig {
74
74
  'sale.enable_item_rules'?: boolean;
75
75
  'sale.enable_short_number'?: boolean;
76
76
  'sale.short_number_digits'?: number;
77
+ 'sale.maximum_number'?: number | string | null;
78
+ 'sale.pad_with_leading_zeros'?: boolean | null;
77
79
  'sale.short_number_random'?: boolean;
78
80
  'sale.short_number_daily_reset'?: boolean;
79
81
  'sale.short_number_start_number'?: number;
@@ -1360,7 +1360,7 @@ class Server {
1360
1360
  data
1361
1361
  }) => ({
1362
1362
  code: 200,
1363
- data: await this.order?.getLocalOrderByLookup(data?.sale_id)
1363
+ data: await this.order?.getLocalOrderForPaymentReadiness(data?.sale_id)
1364
1364
  })
1365
1365
  }, {
1366
1366
  method: 'post',
@@ -105,6 +105,8 @@ export declare class OrderModule extends BaseModule implements Module {
105
105
  getOrderByOrderId(orderId: OrderId): OrderData | undefined;
106
106
  private buildLocalPaymentOrderLogContext;
107
107
  getLocalOrderFromMemoryByLookup(lookup: OrderId): OrderData | null;
108
+ /** Read-only payment gate lookup; never hydrate the whole order list on a miss. */
109
+ getLocalOrderForPaymentReadiness(lookup: OrderId): Promise<OrderData | null>;
108
110
  getLocalOrderByLookup(lookup: OrderId, options?: {
109
111
  operationId?: string;
110
112
  }): Promise<OrderData | null>;
@@ -638,6 +638,42 @@ class OrderModule extends _BaseModule.BaseModule {
638
638
  const memoryOrder = this.store.list.find(order => this.isOrderLookupMatch(order, key));
639
639
  return memoryOrder || null;
640
640
  }
641
+
642
+ /** Read-only payment gate lookup; never hydrate the whole order list on a miss. */
643
+ async getLocalOrderForPaymentReadiness(lookup) {
644
+ if (lookup === undefined || lookup === null || lookup === '') return null;
645
+ const memoryOrder = this.getLocalOrderFromMemoryByLookup(lookup);
646
+ if (memoryOrder) return memoryOrder;
647
+ if (typeof this.dbManager?.find !== 'function') {
648
+ return this.getLocalOrderByLookup(lookup);
649
+ }
650
+ const key = this.getIdKey(lookup);
651
+ const fields = ['order_id', 'external_sale_number', 'order_number', 'shop_order_number', 'shop_full_order_number'];
652
+ const candidates = [];
653
+ for (const column of fields) {
654
+ // Match getAll's storage-key ordering even when aliases collide across rows.
655
+ // Let query errors reach the payment gate rather than treating them as a miss.
656
+ const rows = await this.dbManager.find(INDEXDB_STORE_NAME, {
657
+ filters: [{
658
+ column,
659
+ op: '=',
660
+ value: key
661
+ }],
662
+ orderBy: [{
663
+ column: '__order_storage_key',
664
+ dir: 'asc'
665
+ }],
666
+ limit: 1
667
+ });
668
+ if (rows?.[0] && this.isOrderLookupMatch(rows[0], key)) candidates.push(rows[0]);
669
+ }
670
+ candidates.sort((left, right) => {
671
+ const leftKey = String(left.__order_storage_key ?? this.getOrderStorageKey(left));
672
+ const rightKey = String(right.__order_storage_key ?? this.getOrderStorageKey(right));
673
+ return leftKey < rightKey ? -1 : leftKey > rightKey ? 1 : 0;
674
+ });
675
+ return candidates.length ? this.normalizeOrderForMemoryList(candidates[0], 'paymentReadiness.sqlite') : null;
676
+ }
641
677
  async getLocalOrderByLookup(lookup, options = {}) {
642
678
  const key = this.getIdKey(lookup);
643
679
  const logContext = {
@@ -328,7 +328,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
328
328
  date: string;
329
329
  status: string;
330
330
  week: string;
331
- weekNum: 0 | 1 | 2 | 3 | 4 | 5 | 6;
331
+ weekNum: 0 | 1 | 2 | 6 | 3 | 4 | 5;
332
332
  }[]>;
333
333
  submitTimeSlot(timeSlots: TimeSliceItem): void;
334
334
  private getScheduleDataByIds;
@@ -71,6 +71,7 @@ export declare class BookingTicketImpl extends BaseSalesImpl implements Module {
71
71
  private getShortNumberOrDeviceId;
72
72
  private configureIdGeneratorFromOpenData;
73
73
  private normalizePositiveInteger;
74
+ private normalizeShortNumberMaximum;
74
75
  private normalizeIdPrefix;
75
76
  /**
76
77
  * 加载销售详情,并在父类基础上把 customer 信息装配到 CustomerModule。
@@ -378,9 +378,9 @@ class BookingTicketImpl extends _BaseSales.BaseSalesImpl {
378
378
  config: {
379
379
  prefix,
380
380
  deviceCode: deviceId,
381
- // TODO 现在 picoding 没这个配置的 key
382
- padReceiptSequence: false,
381
+ padReceiptSequence: openDataConfig?.['sale.pad_with_leading_zeros'] === true,
383
382
  receiptSequenceLength,
383
+ receiptSequenceMax: this.normalizeShortNumberMaximum(openDataConfig?.['sale.maximum_number']),
384
384
  randomReceiptSequence: openDataConfig?.['sale.short_number_random'] === true,
385
385
  resetReceiptSequenceDaily,
386
386
  receiptSequenceResetTime: operatingDayBoundary?.time,
@@ -397,6 +397,17 @@ class BookingTicketImpl extends _BaseSales.BaseSalesImpl {
397
397
  if (!Number.isInteger(numeric) || numeric <= 0) return fallback;
398
398
  return numeric;
399
399
  }
400
+ normalizeShortNumberMaximum(value) {
401
+ if (value === undefined || value === null || typeof value === 'string' && !value.trim()) return null;
402
+ if (typeof value !== 'number' && typeof value !== 'string') {
403
+ throw new Error('sale.maximum_number 必须是安全正整数或空值');
404
+ }
405
+ const numeric = Number(value);
406
+ if (!Number.isSafeInteger(numeric) || numeric <= 0) {
407
+ throw new Error('sale.maximum_number 必须是安全正整数或空值');
408
+ }
409
+ return numeric;
410
+ }
400
411
  normalizeIdPrefix(value, fallback) {
401
412
  if (value === undefined || value === null) return fallback;
402
413
  const normalized = String(value).trim().toUpperCase();
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "private": false,
3
3
  "name": "@pisell/pisellos",
4
- "version": "2.3.159",
4
+ "version": "2.3.160",
5
5
  "description": "一个可扩展的前端模块化SDK框架,支持插件系统",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",