@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.
- package/dist/model/strategy/adapter/promotion/index.js +9 -0
- package/dist/modules/OpenData/types.d.ts +2 -0
- package/dist/server/index.js +1 -1
- package/dist/server/modules/order/index.d.ts +2 -0
- package/dist/server/modules/order/index.js +794 -714
- package/dist/solution/BookingByStep/index.d.ts +1 -1
- package/dist/solution/BookingTicket/index.d.ts +1 -0
- package/dist/solution/BookingTicket/index.js +17 -4
- package/lib/model/strategy/adapter/promotion/index.js +46 -1
- package/lib/modules/OpenData/types.d.ts +2 -0
- package/lib/server/index.js +1 -1
- package/lib/server/modules/order/index.d.ts +2 -0
- package/lib/server/modules/order/index.js +36 -0
- package/lib/solution/BookingByStep/index.d.ts +1 -1
- package/lib/solution/BookingTicket/index.d.ts +1 -0
- package/lib/solution/BookingTicket/index.js +13 -2
- package/package.json +1 -1
|
@@ -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
|
|
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
|
-
|
|
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
|
-
|
|
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;
|
package/lib/server/index.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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();
|