@pisell/pisellos 2.3.11 → 2.3.13
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/modules/Order/index.d.ts +1 -0
- package/dist/modules/Order/index.js +6 -0
- package/dist/server/index.d.ts +3 -0
- package/dist/server/index.js +1202 -916
- package/dist/solution/BookingByStep/index.d.ts +1 -1
- package/dist/solution/BookingTicket/index.d.ts +2 -1
- package/dist/solution/BookingTicket/index.js +87 -12
- package/lib/modules/Order/index.d.ts +1 -0
- package/lib/modules/Order/index.js +4 -0
- package/lib/server/index.d.ts +3 -0
- package/lib/server/index.js +196 -3
- package/lib/solution/BookingByStep/index.d.ts +1 -1
- package/lib/solution/BookingTicket/index.d.ts +2 -1
- package/lib/solution/BookingTicket/index.js +78 -7
- package/package.json +1 -1
|
@@ -311,7 +311,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
|
|
|
311
311
|
date: string;
|
|
312
312
|
status: string;
|
|
313
313
|
week: string;
|
|
314
|
-
weekNum: 0 |
|
|
314
|
+
weekNum: 0 | 1 | 2 | 6 | 3 | 4 | 5;
|
|
315
315
|
}[]>;
|
|
316
316
|
submitTimeSlot(timeSlots: TimeSliceItem): void;
|
|
317
317
|
private getScheduleDataByIds;
|
|
@@ -557,7 +557,8 @@ export declare class BookingTicketImpl extends BaseSalesImpl implements Module {
|
|
|
557
557
|
}): Promise<void>;
|
|
558
558
|
handleCheckIn(params: {
|
|
559
559
|
voucher_ids: number[];
|
|
560
|
-
|
|
560
|
+
is_checkin: boolean;
|
|
561
|
+
}): Promise<any>;
|
|
561
562
|
/**
|
|
562
563
|
* 销毁模块:先调用父类(销毁所有 store 内子模块 + emit destroy + super.destroy()),
|
|
563
564
|
* 再清理 BookingTicket 自有资源(scan 监听 + scan 内存缓存)。
|
|
@@ -2600,7 +2600,8 @@ export var BookingTicketImpl = /*#__PURE__*/function (_BaseSalesImpl) {
|
|
|
2600
2600
|
key: "handlePrintWristband",
|
|
2601
2601
|
value: function () {
|
|
2602
2602
|
var _handlePrintWristband = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee32(params) {
|
|
2603
|
-
var
|
|
2603
|
+
var _this$getOrderIdentit;
|
|
2604
|
+
var deviceTask, deviceId, idempotencyKey;
|
|
2604
2605
|
return _regeneratorRuntime().wrap(function _callee32$(_context32) {
|
|
2605
2606
|
while (1) switch (_context32.prev = _context32.next) {
|
|
2606
2607
|
case 0:
|
|
@@ -2618,27 +2619,35 @@ export var BookingTicketImpl = /*#__PURE__*/function (_BaseSalesImpl) {
|
|
|
2618
2619
|
});
|
|
2619
2620
|
return _context32.abrupt("return");
|
|
2620
2621
|
case 4:
|
|
2621
|
-
|
|
2622
|
+
this.logger.addLog({
|
|
2623
|
+
type: 'info',
|
|
2624
|
+
title: '[BookingTicket] handlePrintWristband',
|
|
2625
|
+
metadata: {
|
|
2626
|
+
voucher_ids: Array.isArray(params.voucher_ids) ? params.voucher_ids : [params.voucher_ids]
|
|
2627
|
+
}
|
|
2628
|
+
});
|
|
2629
|
+
_context32.next = 7;
|
|
2622
2630
|
return this.getShortNumberOrDeviceId();
|
|
2623
|
-
case
|
|
2631
|
+
case 7:
|
|
2624
2632
|
deviceId = _context32.sent;
|
|
2633
|
+
idempotencyKey = createUuidV4();
|
|
2625
2634
|
deviceTask.dispatch({
|
|
2626
|
-
action: '
|
|
2635
|
+
action: 'print_all',
|
|
2627
2636
|
device_id: deviceId,
|
|
2628
2637
|
payload: {
|
|
2629
2638
|
type: 'WRISTBAND',
|
|
2630
2639
|
data: {
|
|
2631
|
-
order_id: this.getOrderIdentity(),
|
|
2640
|
+
order_id: (_this$getOrderIdentit = this.getOrderIdentity()) === null || _this$getOrderIdentit === void 0 ? void 0 : _this$getOrderIdentit.orderId,
|
|
2632
2641
|
voucher_ids: Array.isArray(params.voucher_ids) ? params.voucher_ids : [params.voucher_ids]
|
|
2633
2642
|
}
|
|
2634
2643
|
},
|
|
2635
|
-
idempotency_key:
|
|
2636
|
-
name: '
|
|
2637
|
-
source: '
|
|
2638
|
-
source_type: '
|
|
2639
|
-
source_id:
|
|
2644
|
+
idempotency_key: idempotencyKey,
|
|
2645
|
+
name: 'PRINT_WRISTBAND',
|
|
2646
|
+
source: 'bookingTicket',
|
|
2647
|
+
source_type: 'handlePrintWristband',
|
|
2648
|
+
source_id: idempotencyKey
|
|
2640
2649
|
});
|
|
2641
|
-
case
|
|
2650
|
+
case 10:
|
|
2642
2651
|
case "end":
|
|
2643
2652
|
return _context32.stop();
|
|
2644
2653
|
}
|
|
@@ -2653,13 +2662,79 @@ export var BookingTicketImpl = /*#__PURE__*/function (_BaseSalesImpl) {
|
|
|
2653
2662
|
key: "handleCheckIn",
|
|
2654
2663
|
value: function () {
|
|
2655
2664
|
var _handleCheckIn = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee33(params) {
|
|
2665
|
+
var _this$store$order5, _this$store$order5$ge, _this$store$order6, _ref20, _tempOrder$order_id2;
|
|
2666
|
+
var voucherIds, voucherIdSet, tempOrder, vouchers, batchMetadata, hasUpdatedVoucher, nextVouchers, identity, externalSaleNumber, orderId, orderLookup;
|
|
2656
2667
|
return _regeneratorRuntime().wrap(function _callee33$(_context33) {
|
|
2657
2668
|
while (1) switch (_context33.prev = _context33.next) {
|
|
2658
2669
|
case 0:
|
|
2670
|
+
this.logger.addLog({
|
|
2671
|
+
type: 'info',
|
|
2672
|
+
title: '[BookingTicket] handleCheckIn',
|
|
2673
|
+
metadata: {
|
|
2674
|
+
voucher_ids: Array.isArray(params.voucher_ids) ? params.voucher_ids : [params.voucher_ids],
|
|
2675
|
+
is_checkin: params.is_checkin
|
|
2676
|
+
}
|
|
2677
|
+
});
|
|
2678
|
+
voucherIds = Array.isArray(params.voucher_ids) ? params.voucher_ids : [];
|
|
2679
|
+
voucherIdSet = new Set(voucherIds);
|
|
2680
|
+
tempOrder = (_this$store$order5 = this.store.order) === null || _this$store$order5 === void 0 || (_this$store$order5$ge = _this$store$order5.getTempOrder) === null || _this$store$order5$ge === void 0 ? void 0 : _this$store$order5$ge.call(_this$store$order5);
|
|
2681
|
+
vouchers = (tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.vouchers) || ((_this$store$order6 = this.store.order) === null || _this$store$order6 === void 0 ? void 0 : _this$store$order6.getVouchers()) || [];
|
|
2682
|
+
batchMetadata = [];
|
|
2683
|
+
hasUpdatedVoucher = false;
|
|
2684
|
+
nextVouchers = vouchers.map(function (voucher) {
|
|
2685
|
+
var _voucher$metadata;
|
|
2686
|
+
if (!voucherIdSet.has(voucher.voucher_id)) return voucher;
|
|
2687
|
+
hasUpdatedVoucher = true;
|
|
2688
|
+
var metadata = _objectSpread(_objectSpread({}, voucher.metadata || {}), {}, {
|
|
2689
|
+
ticket: _objectSpread(_objectSpread({}, ((_voucher$metadata = voucher.metadata) === null || _voucher$metadata === void 0 ? void 0 : _voucher$metadata.ticket) || {}), {}, {
|
|
2690
|
+
is_checkin: params.is_checkin
|
|
2691
|
+
})
|
|
2692
|
+
});
|
|
2693
|
+
batchMetadata.push({
|
|
2694
|
+
voucher_id: voucher.voucher_id,
|
|
2695
|
+
metadata: metadata
|
|
2696
|
+
});
|
|
2697
|
+
return _objectSpread(_objectSpread({}, voucher), {}, {
|
|
2698
|
+
metadata: metadata
|
|
2699
|
+
});
|
|
2700
|
+
});
|
|
2701
|
+
if (!(tempOrder && hasUpdatedVoucher)) {
|
|
2702
|
+
_context33.next = 11;
|
|
2703
|
+
break;
|
|
2704
|
+
}
|
|
2705
|
+
_context33.next = 11;
|
|
2706
|
+
return this.replaceTempOrder(_objectSpread(_objectSpread({}, tempOrder), {}, {
|
|
2707
|
+
vouchers: nextVouchers
|
|
2708
|
+
}));
|
|
2709
|
+
case 11:
|
|
2710
|
+
if (!(batchMetadata.length === 0)) {
|
|
2711
|
+
_context33.next = 13;
|
|
2712
|
+
break;
|
|
2713
|
+
}
|
|
2714
|
+
return _context33.abrupt("return", {
|
|
2715
|
+
code: 200,
|
|
2716
|
+
status: true,
|
|
2717
|
+
message: '',
|
|
2718
|
+
data: []
|
|
2719
|
+
});
|
|
2720
|
+
case 13:
|
|
2721
|
+
identity = this.getOrderIdentity();
|
|
2722
|
+
externalSaleNumber = (tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.external_sale_number) || (identity === null || identity === void 0 ? void 0 : identity.externalSaleNumber) || undefined;
|
|
2723
|
+
orderId = (_ref20 = (_tempOrder$order_id2 = tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.order_id) !== null && _tempOrder$order_id2 !== void 0 ? _tempOrder$order_id2 : identity === null || identity === void 0 ? void 0 : identity.orderId) !== null && _ref20 !== void 0 ? _ref20 : undefined;
|
|
2724
|
+
orderLookup = externalSaleNumber || orderId || (identity === null || identity === void 0 ? void 0 : identity.orderNumber) || (identity === null || identity === void 0 ? void 0 : identity.shopOrderNumber) || (identity === null || identity === void 0 ? void 0 : identity.shopFullOrderNumber) || undefined;
|
|
2725
|
+
return _context33.abrupt("return", this.request.post('/machinecode/batch-metadata', {
|
|
2726
|
+
data: batchMetadata,
|
|
2727
|
+
order_lookup: orderLookup,
|
|
2728
|
+
order_id: orderId,
|
|
2729
|
+
external_sale_number: externalSaleNumber
|
|
2730
|
+
}, {
|
|
2731
|
+
osServer: true
|
|
2732
|
+
}));
|
|
2733
|
+
case 18:
|
|
2659
2734
|
case "end":
|
|
2660
2735
|
return _context33.stop();
|
|
2661
2736
|
}
|
|
2662
|
-
}, _callee33);
|
|
2737
|
+
}, _callee33, this);
|
|
2663
2738
|
}));
|
|
2664
2739
|
function handleCheckIn(_x24) {
|
|
2665
2740
|
return _handleCheckIn.apply(this, arguments);
|
|
@@ -524,5 +524,6 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
524
524
|
private normalizeHydratedOrderProduct;
|
|
525
525
|
getLastOrderInfo(): Record<string, any> | undefined;
|
|
526
526
|
getOrderInfo(order_id: number): Promise<any>;
|
|
527
|
+
getVouchers(): any[];
|
|
527
528
|
}
|
|
528
529
|
export type { UpdateOrderBookingParams, UpdateOrderProductParams, UpdateOrderProductQuantityParams, } from './types';
|
|
@@ -4176,6 +4176,10 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
4176
4176
|
});
|
|
4177
4177
|
return res;
|
|
4178
4178
|
}
|
|
4179
|
+
getVouchers() {
|
|
4180
|
+
var _a;
|
|
4181
|
+
return ((_a = this.store.tempOrder) == null ? void 0 : _a.vouchers) || [];
|
|
4182
|
+
}
|
|
4179
4183
|
};
|
|
4180
4184
|
// Annotate the CommonJS export names for ESM import in node:
|
|
4181
4185
|
0 && (module.exports = {
|
package/lib/server/index.d.ts
CHANGED
|
@@ -431,6 +431,9 @@ declare class Server {
|
|
|
431
431
|
private shouldLookupLocalPrintOrder;
|
|
432
432
|
private getLocalPrintOrderLookup;
|
|
433
433
|
private handleLocalPrintOrder;
|
|
434
|
+
private handleMachinecodeBatchMetadata;
|
|
435
|
+
private resolveMachinecodeBatchMetadataLookup;
|
|
436
|
+
private syncMachinecodeBatchMetadataToLocalOrder;
|
|
434
437
|
private handleOrderCheckoutSubmit;
|
|
435
438
|
private handleSyncCheckoutSubmit;
|
|
436
439
|
private handlePendingSyncCheckoutOrder;
|
package/lib/server/index.js
CHANGED
|
@@ -639,7 +639,8 @@ var Server = class {
|
|
|
639
639
|
checkoutData,
|
|
640
640
|
order: printableOrder,
|
|
641
641
|
response: null,
|
|
642
|
-
requireFullyPaid: false
|
|
642
|
+
requireFullyPaid: false,
|
|
643
|
+
isManualPrint: true
|
|
643
644
|
});
|
|
644
645
|
return {
|
|
645
646
|
code: 200,
|
|
@@ -661,6 +662,86 @@ var Server = class {
|
|
|
661
662
|
};
|
|
662
663
|
}
|
|
663
664
|
};
|
|
665
|
+
this.handleMachinecodeBatchMetadata = async ({ data }) => {
|
|
666
|
+
var _a, _b;
|
|
667
|
+
const title = "handleMachinecodeBatchMetadata";
|
|
668
|
+
const backendPath = "/shop/machinecode/batch-metadata";
|
|
669
|
+
const batchMetadata = Array.isArray(data == null ? void 0 : data.data) ? data.data : [];
|
|
670
|
+
this.logInfo(`${title}: 开始处理`, {
|
|
671
|
+
backendPath,
|
|
672
|
+
batchSize: batchMetadata.length,
|
|
673
|
+
order_lookup: this.resolveMachinecodeBatchMetadataLookup(data) ?? null
|
|
674
|
+
});
|
|
675
|
+
if (batchMetadata.length === 0) {
|
|
676
|
+
return {
|
|
677
|
+
code: 200,
|
|
678
|
+
status: true,
|
|
679
|
+
message: "",
|
|
680
|
+
data: []
|
|
681
|
+
};
|
|
682
|
+
}
|
|
683
|
+
try {
|
|
684
|
+
await this.syncMachinecodeBatchMetadataToLocalOrder(data, batchMetadata);
|
|
685
|
+
} catch (error) {
|
|
686
|
+
const message = this.getUnknownErrorMessage(error);
|
|
687
|
+
this.logError(`${title}: 本地订单 metadata 更新失败`, {
|
|
688
|
+
error: message,
|
|
689
|
+
error_detail: this.normalizeUnknownError(error)
|
|
690
|
+
});
|
|
691
|
+
return {
|
|
692
|
+
code: 500,
|
|
693
|
+
status: false,
|
|
694
|
+
message,
|
|
695
|
+
data: null
|
|
696
|
+
};
|
|
697
|
+
}
|
|
698
|
+
if (!((_b = (_a = this.app) == null ? void 0 : _a.request) == null ? void 0 : _b.post)) {
|
|
699
|
+
this.logError(`${title}: app.request 不可用`, { backendPath });
|
|
700
|
+
return {
|
|
701
|
+
code: 500,
|
|
702
|
+
status: false,
|
|
703
|
+
message: "app.request 不可用",
|
|
704
|
+
data: null
|
|
705
|
+
};
|
|
706
|
+
}
|
|
707
|
+
try {
|
|
708
|
+
const response = await this.app.request.post(backendPath, {
|
|
709
|
+
data: batchMetadata
|
|
710
|
+
}, {
|
|
711
|
+
isShopApi: true,
|
|
712
|
+
customToast: () => {
|
|
713
|
+
}
|
|
714
|
+
});
|
|
715
|
+
return {
|
|
716
|
+
code: (response == null ? void 0 : response.code) ?? 200,
|
|
717
|
+
status: (response == null ? void 0 : response.status) ?? true,
|
|
718
|
+
message: (response == null ? void 0 : response.message) ?? "",
|
|
719
|
+
data: (response == null ? void 0 : response.data) ?? response
|
|
720
|
+
};
|
|
721
|
+
} catch (error) {
|
|
722
|
+
const backendError = this.extractBackendErrorResponse(error);
|
|
723
|
+
if (backendError) {
|
|
724
|
+
return {
|
|
725
|
+
code: backendError.code ?? 500,
|
|
726
|
+
status: backendError.status ?? false,
|
|
727
|
+
message: backendError.message ?? "后端拒绝 batch-metadata",
|
|
728
|
+
data: backendError.data ?? null
|
|
729
|
+
};
|
|
730
|
+
}
|
|
731
|
+
const message = this.getUnknownErrorMessage(error);
|
|
732
|
+
this.logError(`${title}: 请求失败`, {
|
|
733
|
+
backendPath,
|
|
734
|
+
error: message,
|
|
735
|
+
error_detail: this.normalizeUnknownError(error)
|
|
736
|
+
});
|
|
737
|
+
return {
|
|
738
|
+
code: 500,
|
|
739
|
+
status: false,
|
|
740
|
+
message,
|
|
741
|
+
data: null
|
|
742
|
+
};
|
|
743
|
+
}
|
|
744
|
+
};
|
|
664
745
|
this.handleOrderSalesDetail = async ({ url, data, path }) => {
|
|
665
746
|
var _a;
|
|
666
747
|
const requestPath = this.parseRequestPath(url, path);
|
|
@@ -1743,6 +1824,16 @@ var Server = class {
|
|
|
1743
1824
|
method: "post",
|
|
1744
1825
|
path: "/shop/local/print-order",
|
|
1745
1826
|
handler: this.handleLocalPrintOrder.bind(this)
|
|
1827
|
+
},
|
|
1828
|
+
{
|
|
1829
|
+
method: "post",
|
|
1830
|
+
path: "/shop/machinecode/batch-metadata",
|
|
1831
|
+
handler: this.handleMachinecodeBatchMetadata.bind(this)
|
|
1832
|
+
},
|
|
1833
|
+
{
|
|
1834
|
+
method: "post",
|
|
1835
|
+
path: "/machinecode/batch-metadata",
|
|
1836
|
+
handler: this.handleMachinecodeBatchMetadata.bind(this)
|
|
1746
1837
|
}
|
|
1747
1838
|
]);
|
|
1748
1839
|
this.registerPrefixRoutes([
|
|
@@ -2656,7 +2747,7 @@ var Server = class {
|
|
|
2656
2747
|
action: "print_all",
|
|
2657
2748
|
device_id: params.deviceId ?? deviceId,
|
|
2658
2749
|
payload: {
|
|
2659
|
-
type: "99",
|
|
2750
|
+
type: params.isManualPrint ? "0" : "99",
|
|
2660
2751
|
data: params.receiptOnly ? {
|
|
2661
2752
|
order_id: printIdentity,
|
|
2662
2753
|
small_ticket_data: (_b = (_a = params.syncedOrder) == null ? void 0 : _a.payment_info) == null ? void 0 : _b.small_ticket_data,
|
|
@@ -2712,7 +2803,8 @@ var Server = class {
|
|
|
2712
2803
|
checkoutData: params.checkoutData,
|
|
2713
2804
|
syncedOrder: printableOrder,
|
|
2714
2805
|
response: params.response,
|
|
2715
|
-
receiptOnly: true
|
|
2806
|
+
receiptOnly: true,
|
|
2807
|
+
isManualPrint: params.isManualPrint
|
|
2716
2808
|
});
|
|
2717
2809
|
return { printed: true, order: printableOrder };
|
|
2718
2810
|
}
|
|
@@ -2730,6 +2822,107 @@ var Server = class {
|
|
|
2730
2822
|
}
|
|
2731
2823
|
return void 0;
|
|
2732
2824
|
}
|
|
2825
|
+
resolveMachinecodeBatchMetadataLookup(data) {
|
|
2826
|
+
const candidates = [
|
|
2827
|
+
data == null ? void 0 : data.order_lookup,
|
|
2828
|
+
data == null ? void 0 : data.orderLookup,
|
|
2829
|
+
data == null ? void 0 : data.external_sale_number,
|
|
2830
|
+
data == null ? void 0 : data.externalSaleNumber,
|
|
2831
|
+
data == null ? void 0 : data.order_id,
|
|
2832
|
+
data == null ? void 0 : data.orderId,
|
|
2833
|
+
data == null ? void 0 : data.order_number,
|
|
2834
|
+
data == null ? void 0 : data.orderNumber,
|
|
2835
|
+
data == null ? void 0 : data.shop_order_number,
|
|
2836
|
+
data == null ? void 0 : data.shopOrderNumber,
|
|
2837
|
+
data == null ? void 0 : data.shop_full_order_number,
|
|
2838
|
+
data == null ? void 0 : data.shopFullOrderNumber
|
|
2839
|
+
];
|
|
2840
|
+
return candidates.find((candidate) => candidate !== void 0 && candidate !== null && candidate !== "");
|
|
2841
|
+
}
|
|
2842
|
+
async syncMachinecodeBatchMetadataToLocalOrder(data, batchMetadata) {
|
|
2843
|
+
var _a;
|
|
2844
|
+
const title = "handleMachinecodeBatchMetadata";
|
|
2845
|
+
const lookup = this.resolveMachinecodeBatchMetadataLookup(data);
|
|
2846
|
+
if (lookup === void 0) {
|
|
2847
|
+
this.logWarning(`${title}: order lookup 缺失,跳过本地订单 metadata 更新`, {
|
|
2848
|
+
batchSize: batchMetadata.length
|
|
2849
|
+
});
|
|
2850
|
+
return;
|
|
2851
|
+
}
|
|
2852
|
+
if (!((_a = this.order) == null ? void 0 : _a.getLocalOrderByLookup)) {
|
|
2853
|
+
this.logWarning(`${title}: Order 模块未注册,跳过本地订单 metadata 更新`, {
|
|
2854
|
+
lookup
|
|
2855
|
+
});
|
|
2856
|
+
return;
|
|
2857
|
+
}
|
|
2858
|
+
const localOrder = await this.order.getLocalOrderByLookup(lookup);
|
|
2859
|
+
if (!localOrder) {
|
|
2860
|
+
this.logWarning(`${title}: 本地订单不存在,跳过 metadata 更新`, {
|
|
2861
|
+
lookup
|
|
2862
|
+
});
|
|
2863
|
+
return;
|
|
2864
|
+
}
|
|
2865
|
+
const metadataByVoucherId = /* @__PURE__ */ new Map();
|
|
2866
|
+
for (const item of batchMetadata) {
|
|
2867
|
+
const voucherId = (item == null ? void 0 : item.voucher_id) ?? (item == null ? void 0 : item.voucherId);
|
|
2868
|
+
if (voucherId === void 0 || voucherId === null || voucherId === "")
|
|
2869
|
+
continue;
|
|
2870
|
+
metadataByVoucherId.set(String(voucherId), (item == null ? void 0 : item.metadata) || {});
|
|
2871
|
+
}
|
|
2872
|
+
if (metadataByVoucherId.size === 0) {
|
|
2873
|
+
this.logWarning(`${title}: voucher metadata 缺失,跳过本地订单 metadata 更新`, {
|
|
2874
|
+
lookup
|
|
2875
|
+
});
|
|
2876
|
+
return;
|
|
2877
|
+
}
|
|
2878
|
+
const vouchers = Array.isArray(localOrder.vouchers) ? localOrder.vouchers : [];
|
|
2879
|
+
let hasUpdatedVoucher = false;
|
|
2880
|
+
const nextVouchers = vouchers.map((voucher) => {
|
|
2881
|
+
const voucherId = voucher == null ? void 0 : voucher.voucher_id;
|
|
2882
|
+
if (voucherId === void 0 || voucherId === null)
|
|
2883
|
+
return voucher;
|
|
2884
|
+
const metadata = metadataByVoucherId.get(String(voucherId));
|
|
2885
|
+
if (!metadata)
|
|
2886
|
+
return voucher;
|
|
2887
|
+
hasUpdatedVoucher = true;
|
|
2888
|
+
return {
|
|
2889
|
+
...voucher,
|
|
2890
|
+
metadata
|
|
2891
|
+
};
|
|
2892
|
+
});
|
|
2893
|
+
if (!hasUpdatedVoucher) {
|
|
2894
|
+
this.logWarning(`${title}: 本地订单未命中任何 voucher,跳过 metadata 更新`, {
|
|
2895
|
+
lookup,
|
|
2896
|
+
voucher_ids: Array.from(metadataByVoucherId.keys())
|
|
2897
|
+
});
|
|
2898
|
+
return;
|
|
2899
|
+
}
|
|
2900
|
+
if (typeof this.order.overwriteExistingOrder === "function") {
|
|
2901
|
+
await this.order.overwriteExistingOrder({
|
|
2902
|
+
...localOrder,
|
|
2903
|
+
vouchers: nextVouchers
|
|
2904
|
+
});
|
|
2905
|
+
this.logInfo(`${title}: 本地订单 vouchers metadata 已更新`, {
|
|
2906
|
+
lookup,
|
|
2907
|
+
updatedCount: metadataByVoucherId.size
|
|
2908
|
+
});
|
|
2909
|
+
return;
|
|
2910
|
+
}
|
|
2911
|
+
if ((data == null ? void 0 : data.external_sale_number) && typeof this.order.markOrderSyncedByExternalSaleNumber === "function") {
|
|
2912
|
+
await this.order.markOrderSyncedByExternalSaleNumber({
|
|
2913
|
+
externalSaleNumber: data.external_sale_number,
|
|
2914
|
+
patch: { vouchers: nextVouchers }
|
|
2915
|
+
});
|
|
2916
|
+
this.logInfo(`${title}: 本地订单 vouchers metadata 已更新`, {
|
|
2917
|
+
lookup,
|
|
2918
|
+
updatedCount: metadataByVoucherId.size
|
|
2919
|
+
});
|
|
2920
|
+
return;
|
|
2921
|
+
}
|
|
2922
|
+
this.logWarning(`${title}: Order 模块不支持本地订单覆盖,跳过 metadata 更新`, {
|
|
2923
|
+
lookup
|
|
2924
|
+
});
|
|
2925
|
+
}
|
|
2733
2926
|
async handleOrderCheckoutSubmit(params) {
|
|
2734
2927
|
const { backendPath, data, title } = params;
|
|
2735
2928
|
this.logInfo(`${title}: 开始处理`, {
|
|
@@ -311,7 +311,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
|
|
|
311
311
|
date: string;
|
|
312
312
|
status: string;
|
|
313
313
|
week: string;
|
|
314
|
-
weekNum: 0 |
|
|
314
|
+
weekNum: 0 | 1 | 2 | 6 | 3 | 4 | 5;
|
|
315
315
|
}[]>;
|
|
316
316
|
submitTimeSlot(timeSlots: TimeSliceItem): void;
|
|
317
317
|
private getScheduleDataByIds;
|
|
@@ -557,7 +557,8 @@ export declare class BookingTicketImpl extends BaseSalesImpl implements Module {
|
|
|
557
557
|
}): Promise<void>;
|
|
558
558
|
handleCheckIn(params: {
|
|
559
559
|
voucher_ids: number[];
|
|
560
|
-
|
|
560
|
+
is_checkin: boolean;
|
|
561
|
+
}): Promise<any>;
|
|
561
562
|
/**
|
|
562
563
|
* 销毁模块:先调用父类(销毁所有 store 内子模块 + emit destroy + super.destroy()),
|
|
563
564
|
* 再清理 BookingTicket 自有资源(scan 监听 + scan 内存缓存)。
|
|
@@ -1513,6 +1513,7 @@ var BookingTicketImpl = class extends import_BaseSales.BaseSalesImpl {
|
|
|
1513
1513
|
}
|
|
1514
1514
|
// 打印手环,单个或批量都可以
|
|
1515
1515
|
async handlePrintWristband(params) {
|
|
1516
|
+
var _a;
|
|
1516
1517
|
const deviceTask = this.getDeviceTaskPlugin();
|
|
1517
1518
|
if (!(deviceTask == null ? void 0 : deviceTask.dispatch)) {
|
|
1518
1519
|
this.logger.addLog({
|
|
@@ -1524,26 +1525,96 @@ var BookingTicketImpl = class extends import_BaseSales.BaseSalesImpl {
|
|
|
1524
1525
|
});
|
|
1525
1526
|
return;
|
|
1526
1527
|
}
|
|
1528
|
+
this.logger.addLog({
|
|
1529
|
+
type: "info",
|
|
1530
|
+
title: "[BookingTicket] handlePrintWristband",
|
|
1531
|
+
metadata: {
|
|
1532
|
+
voucher_ids: Array.isArray(params.voucher_ids) ? params.voucher_ids : [params.voucher_ids]
|
|
1533
|
+
}
|
|
1534
|
+
});
|
|
1527
1535
|
const deviceId = await this.getShortNumberOrDeviceId();
|
|
1536
|
+
const idempotencyKey = (0, import_utils.createUuidV4)();
|
|
1528
1537
|
deviceTask.dispatch({
|
|
1529
|
-
action: "
|
|
1538
|
+
action: "print_all",
|
|
1530
1539
|
device_id: deviceId,
|
|
1531
1540
|
payload: {
|
|
1532
1541
|
type: "WRISTBAND",
|
|
1533
1542
|
data: {
|
|
1534
|
-
order_id: this.getOrderIdentity(),
|
|
1543
|
+
order_id: (_a = this.getOrderIdentity()) == null ? void 0 : _a.orderId,
|
|
1535
1544
|
voucher_ids: Array.isArray(params.voucher_ids) ? params.voucher_ids : [params.voucher_ids]
|
|
1536
1545
|
}
|
|
1537
1546
|
},
|
|
1538
|
-
idempotency_key:
|
|
1539
|
-
name: "
|
|
1540
|
-
source: "
|
|
1541
|
-
source_type: "
|
|
1542
|
-
source_id:
|
|
1547
|
+
idempotency_key: idempotencyKey,
|
|
1548
|
+
name: "PRINT_WRISTBAND",
|
|
1549
|
+
source: "bookingTicket",
|
|
1550
|
+
source_type: "handlePrintWristband",
|
|
1551
|
+
source_id: idempotencyKey
|
|
1543
1552
|
});
|
|
1544
1553
|
}
|
|
1545
1554
|
// 触发 checkIn
|
|
1546
1555
|
async handleCheckIn(params) {
|
|
1556
|
+
var _a, _b, _c;
|
|
1557
|
+
this.logger.addLog({
|
|
1558
|
+
type: "info",
|
|
1559
|
+
title: "[BookingTicket] handleCheckIn",
|
|
1560
|
+
metadata: {
|
|
1561
|
+
voucher_ids: Array.isArray(params.voucher_ids) ? params.voucher_ids : [params.voucher_ids],
|
|
1562
|
+
is_checkin: params.is_checkin
|
|
1563
|
+
}
|
|
1564
|
+
});
|
|
1565
|
+
const voucherIds = Array.isArray(params.voucher_ids) ? params.voucher_ids : [];
|
|
1566
|
+
const voucherIdSet = new Set(voucherIds);
|
|
1567
|
+
const tempOrder = (_b = (_a = this.store.order) == null ? void 0 : _a.getTempOrder) == null ? void 0 : _b.call(_a);
|
|
1568
|
+
const vouchers = (tempOrder == null ? void 0 : tempOrder.vouchers) || ((_c = this.store.order) == null ? void 0 : _c.getVouchers()) || [];
|
|
1569
|
+
const batchMetadata = [];
|
|
1570
|
+
let hasUpdatedVoucher = false;
|
|
1571
|
+
const nextVouchers = vouchers.map((voucher) => {
|
|
1572
|
+
var _a2;
|
|
1573
|
+
if (!voucherIdSet.has(voucher.voucher_id))
|
|
1574
|
+
return voucher;
|
|
1575
|
+
hasUpdatedVoucher = true;
|
|
1576
|
+
const metadata = {
|
|
1577
|
+
...voucher.metadata || {},
|
|
1578
|
+
ticket: {
|
|
1579
|
+
...((_a2 = voucher.metadata) == null ? void 0 : _a2.ticket) || {},
|
|
1580
|
+
is_checkin: params.is_checkin
|
|
1581
|
+
}
|
|
1582
|
+
};
|
|
1583
|
+
batchMetadata.push({
|
|
1584
|
+
voucher_id: voucher.voucher_id,
|
|
1585
|
+
metadata
|
|
1586
|
+
});
|
|
1587
|
+
return {
|
|
1588
|
+
...voucher,
|
|
1589
|
+
metadata
|
|
1590
|
+
};
|
|
1591
|
+
});
|
|
1592
|
+
if (tempOrder && hasUpdatedVoucher) {
|
|
1593
|
+
await this.replaceTempOrder({
|
|
1594
|
+
...tempOrder,
|
|
1595
|
+
vouchers: nextVouchers
|
|
1596
|
+
});
|
|
1597
|
+
}
|
|
1598
|
+
if (batchMetadata.length === 0) {
|
|
1599
|
+
return {
|
|
1600
|
+
code: 200,
|
|
1601
|
+
status: true,
|
|
1602
|
+
message: "",
|
|
1603
|
+
data: []
|
|
1604
|
+
};
|
|
1605
|
+
}
|
|
1606
|
+
const identity = this.getOrderIdentity();
|
|
1607
|
+
const externalSaleNumber = (tempOrder == null ? void 0 : tempOrder.external_sale_number) || (identity == null ? void 0 : identity.externalSaleNumber) || void 0;
|
|
1608
|
+
const orderId = (tempOrder == null ? void 0 : tempOrder.order_id) ?? (identity == null ? void 0 : identity.orderId) ?? void 0;
|
|
1609
|
+
const orderLookup = externalSaleNumber || orderId || (identity == null ? void 0 : identity.orderNumber) || (identity == null ? void 0 : identity.shopOrderNumber) || (identity == null ? void 0 : identity.shopFullOrderNumber) || void 0;
|
|
1610
|
+
return this.request.post("/machinecode/batch-metadata", {
|
|
1611
|
+
data: batchMetadata,
|
|
1612
|
+
order_lookup: orderLookup,
|
|
1613
|
+
order_id: orderId,
|
|
1614
|
+
external_sale_number: externalSaleNumber
|
|
1615
|
+
}, {
|
|
1616
|
+
osServer: true
|
|
1617
|
+
});
|
|
1547
1618
|
}
|
|
1548
1619
|
/**
|
|
1549
1620
|
* 销毁模块:先调用父类(销毁所有 store 内子模块 + emit destroy + super.destroy()),
|