@pisell/pisellos 2.2.192 → 2.2.193
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/walletPass/utils.js +7 -4
- package/dist/modules/Order/index.d.ts +12 -10
- package/dist/modules/Order/index.js +462 -571
- package/dist/modules/Order/types.d.ts +5 -5
- package/dist/modules/Order/utils.js +3 -3
- package/dist/modules/Payment/utils.js +2 -1
- package/dist/modules/SalesSummary/utils.js +1 -1
- package/dist/server/index.d.ts +8 -1
- package/dist/server/index.js +651 -464
- package/dist/server/modules/order/index.d.ts +3 -2
- package/dist/server/modules/order/index.js +68 -52
- package/dist/solution/BaseSales/index.d.ts +2 -1
- package/dist/solution/BaseSales/index.js +116 -122
- package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +0 -1
- package/dist/solution/BookingByStep/index.d.ts +1 -1
- package/dist/solution/BookingTicket/index.d.ts +1 -1
- package/dist/solution/ScanOrder/index.js +3 -1
- package/lib/model/strategy/adapter/promotion/index.js +49 -0
- package/lib/model/strategy/adapter/walletPass/utils.js +3 -2
- package/lib/modules/Order/index.d.ts +12 -10
- package/lib/modules/Order/index.js +94 -118
- package/lib/modules/Order/types.d.ts +5 -5
- package/lib/modules/Order/utils.js +4 -4
- package/lib/modules/Payment/utils.js +2 -1
- package/lib/modules/SalesSummary/utils.js +1 -3
- package/lib/server/index.d.ts +8 -1
- package/lib/server/index.js +143 -24
- package/lib/server/modules/order/index.d.ts +3 -2
- package/lib/server/modules/order/index.js +25 -15
- package/lib/solution/BaseSales/index.d.ts +2 -1
- package/lib/solution/BaseSales/index.js +53 -16
- package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +0 -1
- package/lib/solution/BookingByStep/index.d.ts +1 -1
- package/lib/solution/BookingTicket/index.d.ts +1 -1
- package/lib/solution/ScanOrder/index.js +3 -1
- package/package.json +1 -1
|
@@ -45,7 +45,6 @@ var import_Rules = require("../Rules");
|
|
|
45
45
|
var import_types2 = require("../Rules/types");
|
|
46
46
|
var import_decimal = __toESM(require("decimal.js"));
|
|
47
47
|
var import_lodash_es = require("lodash-es");
|
|
48
|
-
var LOCAL_ORDER_STORE_NAME = "orders";
|
|
49
48
|
var OrderModule = class extends import_BaseModule.BaseModule {
|
|
50
49
|
constructor(name, version) {
|
|
51
50
|
super(name || "order", version);
|
|
@@ -141,7 +140,6 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
141
140
|
}
|
|
142
141
|
const app = appPlugin.getApp();
|
|
143
142
|
this.logger = app.logger;
|
|
144
|
-
this.dbManager = app.sqlite;
|
|
145
143
|
this.window = this.core.getPlugin("window");
|
|
146
144
|
const otherParams = options.otherParams || {};
|
|
147
145
|
this.cacheId = otherParams.cacheId;
|
|
@@ -577,108 +575,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
577
575
|
const paidCount = paidPaymentsCount > 0 ? paidPaymentsCount : payments.length;
|
|
578
576
|
return `${baseToken}_payment_${paidCount}`;
|
|
579
577
|
}
|
|
580
|
-
hasLocalDatabase() {
|
|
581
|
-
return !!this.dbManager;
|
|
582
|
-
}
|
|
583
|
-
buildLocalOrderRecord(tempOrder) {
|
|
584
|
-
const externalSaleNumber = this.ensureExternalSaleNumber(tempOrder);
|
|
585
|
-
return {
|
|
586
|
-
...tempOrder,
|
|
587
|
-
id: tempOrder.order_id ?? externalSaleNumber,
|
|
588
|
-
external_sale_number: externalSaleNumber,
|
|
589
|
-
summary: this.store.summary || (0, import_utils.createEmptySummary)(),
|
|
590
|
-
lastOrderInfo: this.store.lastOrderInfo
|
|
591
|
-
};
|
|
592
|
-
}
|
|
593
|
-
async getLocalOrderByOrderId(orderId) {
|
|
594
|
-
var _a, _b, _c, _d;
|
|
595
|
-
if (!this.dbManager || orderId === void 0 || orderId === null)
|
|
596
|
-
return null;
|
|
597
|
-
try {
|
|
598
|
-
const direct = await ((_b = (_a = this.dbManager).get) == null ? void 0 : _b.call(
|
|
599
|
-
_a,
|
|
600
|
-
LOCAL_ORDER_STORE_NAME,
|
|
601
|
-
orderId
|
|
602
|
-
));
|
|
603
|
-
if (direct)
|
|
604
|
-
return direct;
|
|
605
|
-
const orders = await ((_d = (_c = this.dbManager).getAll) == null ? void 0 : _d.call(_c, LOCAL_ORDER_STORE_NAME));
|
|
606
|
-
return (orders || []).find(
|
|
607
|
-
(order) => String(order == null ? void 0 : order.order_id) === String(orderId)
|
|
608
|
-
) || null;
|
|
609
|
-
} catch (error) {
|
|
610
|
-
this.logWarning("getLocalOrderByOrderId failed", {
|
|
611
|
-
orderId,
|
|
612
|
-
error: error instanceof Error ? error.message : String(error)
|
|
613
|
-
});
|
|
614
|
-
return null;
|
|
615
|
-
}
|
|
616
|
-
}
|
|
617
|
-
async getLocalOrderByOrderNumber(orderNumber) {
|
|
618
|
-
var _a, _b, _c, _d;
|
|
619
|
-
if (!this.dbManager || !orderNumber)
|
|
620
|
-
return null;
|
|
621
|
-
try {
|
|
622
|
-
const direct = await ((_b = (_a = this.dbManager).get) == null ? void 0 : _b.call(
|
|
623
|
-
_a,
|
|
624
|
-
LOCAL_ORDER_STORE_NAME,
|
|
625
|
-
orderNumber
|
|
626
|
-
));
|
|
627
|
-
if (direct)
|
|
628
|
-
return direct;
|
|
629
|
-
const orders = await ((_d = (_c = this.dbManager).getAll) == null ? void 0 : _d.call(_c, LOCAL_ORDER_STORE_NAME));
|
|
630
|
-
return (orders || []).find(
|
|
631
|
-
(order) => String(order == null ? void 0 : order.order_number) === String(orderNumber)
|
|
632
|
-
) || null;
|
|
633
|
-
} catch (error) {
|
|
634
|
-
this.logWarning("getLocalOrderByOrderNumber failed", {
|
|
635
|
-
orderNumber,
|
|
636
|
-
error: error instanceof Error ? error.message : String(error)
|
|
637
|
-
});
|
|
638
|
-
return null;
|
|
639
|
-
}
|
|
640
|
-
}
|
|
641
|
-
async getLocalOrderByExternalSaleNumber(externalSaleNumber) {
|
|
642
|
-
var _a, _b, _c, _d;
|
|
643
|
-
if (!this.dbManager || !externalSaleNumber)
|
|
644
|
-
return null;
|
|
645
|
-
try {
|
|
646
|
-
const direct = await ((_b = (_a = this.dbManager).get) == null ? void 0 : _b.call(
|
|
647
|
-
_a,
|
|
648
|
-
LOCAL_ORDER_STORE_NAME,
|
|
649
|
-
externalSaleNumber
|
|
650
|
-
));
|
|
651
|
-
if (direct)
|
|
652
|
-
return direct;
|
|
653
|
-
const orders = await ((_d = (_c = this.dbManager).getAll) == null ? void 0 : _d.call(_c, LOCAL_ORDER_STORE_NAME));
|
|
654
|
-
return (orders || []).find(
|
|
655
|
-
(order) => String(order == null ? void 0 : order.external_sale_number) === String(externalSaleNumber)
|
|
656
|
-
) || null;
|
|
657
|
-
} catch (error) {
|
|
658
|
-
this.logWarning("getLocalOrderByExternalSaleNumber failed", {
|
|
659
|
-
externalSaleNumber,
|
|
660
|
-
error: error instanceof Error ? error.message : String(error)
|
|
661
|
-
});
|
|
662
|
-
return null;
|
|
663
|
-
}
|
|
664
|
-
}
|
|
665
578
|
async saveDraft() {
|
|
666
|
-
var _a, _b;
|
|
667
|
-
if (!this.draftPersistEnabled || !this.dbManager) {
|
|
668
|
-
return;
|
|
669
|
-
}
|
|
670
|
-
const tempOrder = this.ensureTempOrder();
|
|
671
|
-
const record = this.buildLocalOrderRecord(tempOrder);
|
|
672
|
-
try {
|
|
673
|
-
await ((_b = (_a = this.dbManager).update) == null ? void 0 : _b.call(_a, LOCAL_ORDER_STORE_NAME, record));
|
|
674
|
-
} catch (error) {
|
|
675
|
-
this.logWarning("saveDraft failed", {
|
|
676
|
-
externalSaleNumber: tempOrder.external_sale_number,
|
|
677
|
-
orderNumber: tempOrder.order_number,
|
|
678
|
-
orderId: tempOrder.order_id,
|
|
679
|
-
error: error instanceof Error ? error.message : String(error)
|
|
680
|
-
});
|
|
681
|
-
}
|
|
682
579
|
}
|
|
683
580
|
saveDraftInBackground() {
|
|
684
581
|
void this.saveDraft();
|
|
@@ -728,11 +625,52 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
728
625
|
return;
|
|
729
626
|
}
|
|
730
627
|
if (paymentTotal.lte(0)) {
|
|
731
|
-
tempOrder.payment_status =
|
|
628
|
+
tempOrder.payment_status = "payment_processing";
|
|
732
629
|
return;
|
|
733
630
|
}
|
|
734
631
|
tempOrder.payment_status = paymentTotal.gte(targetAmount) ? "paid" : "partially_paid";
|
|
735
632
|
}
|
|
633
|
+
resolveWalletPassUseValue(payment, amount) {
|
|
634
|
+
const usageUnit = payment.wallet_pass_usage_unit && typeof payment.wallet_pass_usage_unit === "object" ? payment.wallet_pass_usage_unit : null;
|
|
635
|
+
if (!usageUnit)
|
|
636
|
+
return payment.wallet_pass_use_value;
|
|
637
|
+
const price = new import_decimal.default(usageUnit.price || 0);
|
|
638
|
+
const points = new import_decimal.default(usageUnit.points || 0);
|
|
639
|
+
if (price.lte(0) || points.lte(0))
|
|
640
|
+
return payment.wallet_pass_use_value;
|
|
641
|
+
return amount.div(price).times(points).toDecimalPlaces(2).toFixed(2);
|
|
642
|
+
}
|
|
643
|
+
capVoucherPaymentsByRemainingAmount(params) {
|
|
644
|
+
const targetAmount = this.getPaymentTargetAmount();
|
|
645
|
+
const nonVoucherTotal = this.calculatePaymentTotal(params.nonVoucherPayments);
|
|
646
|
+
if (targetAmount.lte(0))
|
|
647
|
+
return [];
|
|
648
|
+
let remainingAmount = import_decimal.default.max(
|
|
649
|
+
targetAmount.minus(nonVoucherTotal),
|
|
650
|
+
0
|
|
651
|
+
);
|
|
652
|
+
const cappedVouchers = [];
|
|
653
|
+
for (const voucher of params.vouchers) {
|
|
654
|
+
if (remainingAmount.lte(0))
|
|
655
|
+
break;
|
|
656
|
+
const voucherAmount = import_decimal.default.max(new import_decimal.default(voucher.amount || 0), 0);
|
|
657
|
+
if (voucherAmount.lte(0))
|
|
658
|
+
continue;
|
|
659
|
+
const cappedAmount = import_decimal.default.min(voucherAmount, remainingAmount);
|
|
660
|
+
const amountText = cappedAmount.toDecimalPlaces(2).toFixed(2);
|
|
661
|
+
cappedVouchers.push({
|
|
662
|
+
...voucher,
|
|
663
|
+
amount: amountText,
|
|
664
|
+
origin_amount: amountText,
|
|
665
|
+
wallet_pass_use_value: this.resolveWalletPassUseValue(
|
|
666
|
+
voucher,
|
|
667
|
+
cappedAmount
|
|
668
|
+
)
|
|
669
|
+
});
|
|
670
|
+
remainingAmount = remainingAmount.minus(cappedAmount);
|
|
671
|
+
}
|
|
672
|
+
return cappedVouchers;
|
|
673
|
+
}
|
|
736
674
|
calculatePaidPaymentSummary(payments) {
|
|
737
675
|
return (payments || []).reduce(
|
|
738
676
|
(summary, payment) => {
|
|
@@ -742,7 +680,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
742
680
|
return {
|
|
743
681
|
customerPaidAmount: summary.customerPaidAmount.plus(paymentRecord.amount || 0),
|
|
744
682
|
orderPaidAmount: summary.orderPaidAmount.plus(paymentRecord.origin_amount || 0),
|
|
745
|
-
gapPaidAmount: summary.gapPaidAmount.plus(this.
|
|
683
|
+
gapPaidAmount: summary.gapPaidAmount.plus(this.calculatePaymentGapAmount(paymentRecord)),
|
|
746
684
|
payServiceChargeAmount: summary.payServiceChargeAmount.plus(this.calculatePaymentServiceFee(paymentRecord))
|
|
747
685
|
};
|
|
748
686
|
},
|
|
@@ -763,6 +701,13 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
763
701
|
const fixedAmount = new import_decimal.default(serviceCharge.amount || 0);
|
|
764
702
|
return new import_decimal.default(payment.amount || 0).times(percentage).plus(fixedAmount);
|
|
765
703
|
}
|
|
704
|
+
calculatePaymentGapAmount(payment) {
|
|
705
|
+
if (payment.origin_amount === void 0 || payment.origin_amount === null || payment.origin_amount === "") {
|
|
706
|
+
return new import_decimal.default(0);
|
|
707
|
+
}
|
|
708
|
+
const rounding = new import_decimal.default(payment.rounding_amount || 0);
|
|
709
|
+
return new import_decimal.default(payment.origin_amount || 0).minus(rounding);
|
|
710
|
+
}
|
|
766
711
|
formatSummaryMetadataMoney(value) {
|
|
767
712
|
if (value === void 0 || value === null || value === "")
|
|
768
713
|
return void 0;
|
|
@@ -978,6 +923,17 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
978
923
|
product.metadata = metadata;
|
|
979
924
|
return String(uid);
|
|
980
925
|
}
|
|
926
|
+
sanitizeOrderProductForTempOrder(product) {
|
|
927
|
+
if (product.metadata && typeof product.metadata === "object") {
|
|
928
|
+
delete product.metadata.origin;
|
|
929
|
+
}
|
|
930
|
+
return product;
|
|
931
|
+
}
|
|
932
|
+
sanitizeTempOrderProducts(tempOrder) {
|
|
933
|
+
tempOrder.products = (tempOrder.products || []).map(
|
|
934
|
+
(product) => this.sanitizeOrderProductForTempOrder(product)
|
|
935
|
+
);
|
|
936
|
+
}
|
|
981
937
|
ensureExtend(tempOrder) {
|
|
982
938
|
if (!tempOrder._extend || typeof tempOrder._extend !== "object") {
|
|
983
939
|
tempOrder._extend = { productsByUid: {} };
|
|
@@ -1069,6 +1025,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
1069
1025
|
const tempOrder = (options == null ? void 0 : options.createIfMissing) ? this.ensureTempOrder() : this.store.tempOrder;
|
|
1070
1026
|
if (!tempOrder)
|
|
1071
1027
|
return null;
|
|
1028
|
+
this.sanitizeTempOrderProducts(tempOrder);
|
|
1072
1029
|
const salesSummary = this.getSalesSummary();
|
|
1073
1030
|
const existedSummary = this.store.summary || (0, import_utils.createEmptySummary)();
|
|
1074
1031
|
const paidPaymentSummary = this.calculatePaidPaymentSummary(
|
|
@@ -1087,8 +1044,9 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
1087
1044
|
}),
|
|
1088
1045
|
pay_service_charge_amount: paidPaymentSummary.payServiceChargeAmount.toFixed(2)
|
|
1089
1046
|
};
|
|
1090
|
-
this.store.summary = emptySummary;
|
|
1091
1047
|
tempOrder.surcharge_fee = emptySummary.surcharge_fee;
|
|
1048
|
+
this.updateTempOrderPaymentStatus(tempOrder);
|
|
1049
|
+
this.store.summary = emptySummary;
|
|
1092
1050
|
return this.store.summary;
|
|
1093
1051
|
}
|
|
1094
1052
|
const salesSummaryResult = await salesSummary.getSummary({
|
|
@@ -1120,6 +1078,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
1120
1078
|
tempOrder.surcharges = summary.surcharges || [];
|
|
1121
1079
|
tempOrder.deposit_amount = summary.deposit_amount || "0.00";
|
|
1122
1080
|
tempOrder.is_deposit = summary.deposit_amount !== "0.00" ? 1 : 0;
|
|
1081
|
+
this.updateTempOrderPaymentStatus(tempOrder);
|
|
1123
1082
|
return this.store.summary;
|
|
1124
1083
|
}
|
|
1125
1084
|
async getOrderSummary() {
|
|
@@ -1416,7 +1375,11 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
1416
1375
|
const nonVoucherPayments = (tempOrder.payments || []).filter((payment) => {
|
|
1417
1376
|
return payment.voucher_id === void 0 || Number(payment.voucher_id) === 0;
|
|
1418
1377
|
});
|
|
1419
|
-
|
|
1378
|
+
const cappedVouchers = this.capVoucherPaymentsByRemainingAmount({
|
|
1379
|
+
vouchers: mappedVouchers,
|
|
1380
|
+
nonVoucherPayments
|
|
1381
|
+
});
|
|
1382
|
+
tempOrder.payments = [...nonVoucherPayments, ...cappedVouchers];
|
|
1420
1383
|
this.updateTempOrderPaymentStatus(tempOrder);
|
|
1421
1384
|
this.persistTempOrder();
|
|
1422
1385
|
void this.recalculateSummary({ createIfMissing: true }).catch((error) => {
|
|
@@ -1550,6 +1513,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
1550
1513
|
}
|
|
1551
1514
|
await this.applyPromotion();
|
|
1552
1515
|
this.applyDiscount();
|
|
1516
|
+
this.sanitizeTempOrderProducts(tempOrder);
|
|
1553
1517
|
await this.recalculateSummary({ createIfMissing: true });
|
|
1554
1518
|
this.persistTempOrder();
|
|
1555
1519
|
return tempOrder.products;
|
|
@@ -1710,6 +1674,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
1710
1674
|
);
|
|
1711
1675
|
await this.applyPromotion();
|
|
1712
1676
|
this.applyDiscount();
|
|
1677
|
+
this.sanitizeTempOrderProducts(tempOrder);
|
|
1713
1678
|
await this.recalculateSummary({ createIfMissing: true });
|
|
1714
1679
|
this.persistTempOrder();
|
|
1715
1680
|
return tempOrder.products;
|
|
@@ -1773,6 +1738,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
1773
1738
|
tempOrder.products[productIndex] = normalizedProduct;
|
|
1774
1739
|
await this.applyPromotion();
|
|
1775
1740
|
this.applyDiscount();
|
|
1741
|
+
this.sanitizeTempOrderProducts(tempOrder);
|
|
1776
1742
|
await this.recalculateSummary({ createIfMissing: true });
|
|
1777
1743
|
this.persistTempOrder();
|
|
1778
1744
|
return tempOrder.products;
|
|
@@ -1818,6 +1784,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
1818
1784
|
}
|
|
1819
1785
|
await this.applyPromotion();
|
|
1820
1786
|
this.applyDiscount();
|
|
1787
|
+
this.sanitizeTempOrderProducts(tempOrder);
|
|
1821
1788
|
await this.recalculateSummary({ createIfMissing: true });
|
|
1822
1789
|
this.persistTempOrder();
|
|
1823
1790
|
return tempOrder.products;
|
|
@@ -1838,6 +1805,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
1838
1805
|
}
|
|
1839
1806
|
await this.applyPromotion();
|
|
1840
1807
|
this.applyDiscount();
|
|
1808
|
+
this.sanitizeTempOrderProducts(tempOrder);
|
|
1841
1809
|
await this.recalculateSummary({ createIfMissing: true });
|
|
1842
1810
|
this.persistTempOrder();
|
|
1843
1811
|
return tempOrder;
|
|
@@ -1847,7 +1815,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
1847
1815
|
* 提交当前 Sales tempOrder。
|
|
1848
1816
|
*
|
|
1849
1817
|
* smallTicketDataFlag 用于 B 端 checkout 小票数据返回。PaymentModal 在支付提交时
|
|
1850
|
-
* 应传 1,确保 /order/sales/checkout 返回打印所需数据。
|
|
1818
|
+
* 应传 1,确保 /shop/order/sales/checkout 返回打印所需数据。
|
|
1851
1819
|
*/
|
|
1852
1820
|
async submitTempOrder(params) {
|
|
1853
1821
|
var _a, _b, _c, _d, _e;
|
|
@@ -2141,7 +2109,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
2141
2109
|
* Checkout 专用:创建订单到后端
|
|
2142
2110
|
*
|
|
2143
2111
|
* 专门为 Checkout 模块设计的订单创建方法,
|
|
2144
|
-
*
|
|
2112
|
+
* 通过 OS Server 调用 checkout 接口创建订单
|
|
2145
2113
|
* 接收已经处理好的订单数据,无需再处理购物车
|
|
2146
2114
|
*
|
|
2147
2115
|
* @param params Checkout 订单参数(已处理的订单数据)
|
|
@@ -2210,7 +2178,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
2210
2178
|
orderData.schedule_date = (0, import_dayjs.default)().format("YYYY-MM-DD HH:mm:ss");
|
|
2211
2179
|
}
|
|
2212
2180
|
console.log("[Order] 调用后端接口创建订单:", {
|
|
2213
|
-
url: "/order/checkout",
|
|
2181
|
+
url: "/shop/order/checkout",
|
|
2214
2182
|
orderType: orderData.type,
|
|
2215
2183
|
platform: orderData.platform,
|
|
2216
2184
|
isDeposit: orderData.is_deposit,
|
|
@@ -2221,7 +2189,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
2221
2189
|
paymentsMethods: ((_m = orderData.payments) == null ? void 0 : _m.map((p) => p.code)) || []
|
|
2222
2190
|
});
|
|
2223
2191
|
this.logInfo("Calling backend checkout API", {
|
|
2224
|
-
url: "/order/checkout",
|
|
2192
|
+
url: "/shop/order/checkout",
|
|
2225
2193
|
orderType: orderData.type,
|
|
2226
2194
|
platform: orderData.platform,
|
|
2227
2195
|
isDeposit: orderData.is_deposit,
|
|
@@ -2243,7 +2211,11 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
2243
2211
|
hasOrderId: !!orderData.order_id,
|
|
2244
2212
|
smallTicketDataFlag: orderData.small_ticket_data_flag
|
|
2245
2213
|
});
|
|
2246
|
-
const response = await this.request.post("/order/checkout", orderData
|
|
2214
|
+
const response = await this.request.post("/shop/order/checkout", orderData, {
|
|
2215
|
+
osServer: true,
|
|
2216
|
+
customToast: () => {
|
|
2217
|
+
}
|
|
2218
|
+
});
|
|
2247
2219
|
this.logInfo("Order API called successfully", {
|
|
2248
2220
|
response
|
|
2249
2221
|
});
|
|
@@ -2263,7 +2235,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
2263
2235
|
async submitSalesOrder(params) {
|
|
2264
2236
|
const { url, query } = params;
|
|
2265
2237
|
const fetchUrl = url || "/order/sales/checkout";
|
|
2266
|
-
return this.request.post(fetchUrl, query, { customToast: () => {
|
|
2238
|
+
return this.request.post(fetchUrl, query, { osServer: true, customToast: () => {
|
|
2267
2239
|
} });
|
|
2268
2240
|
}
|
|
2269
2241
|
/**
|
|
@@ -2287,10 +2259,14 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
2287
2259
|
emails: params.emails
|
|
2288
2260
|
});
|
|
2289
2261
|
}
|
|
2290
|
-
|
|
2291
|
-
|
|
2292
|
-
|
|
2293
|
-
|
|
2262
|
+
async getSalesOrderByLookup(params) {
|
|
2263
|
+
const lookup = params.lookup === void 0 || params.lookup === null ? "" : String(params.lookup).trim();
|
|
2264
|
+
if (!lookup) {
|
|
2265
|
+
throw new Error("加载销售详情需要 lookup");
|
|
2266
|
+
}
|
|
2267
|
+
const res = await this.request.get(`/order/sales/${encodeURIComponent(lookup)}`, {
|
|
2268
|
+
with: ["products", "bookings", "payments", "customer", "summary", "contacts_info"],
|
|
2269
|
+
...params.forceRemote ? { forceRemote: true } : {}
|
|
2294
2270
|
}, { osServer: true });
|
|
2295
2271
|
if (res.code === 200) {
|
|
2296
2272
|
this.store.lastOrderInfo = res.data;
|
|
@@ -2473,7 +2449,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
2473
2449
|
};
|
|
2474
2450
|
if (result.metadata)
|
|
2475
2451
|
delete result.metadata.price_schema_version;
|
|
2476
|
-
return result;
|
|
2452
|
+
return this.sanitizeOrderProductForTempOrder(result);
|
|
2477
2453
|
}
|
|
2478
2454
|
getLastOrderInfo() {
|
|
2479
2455
|
var _a;
|
|
@@ -477,6 +477,10 @@ export interface LoadSalesDetailParams {
|
|
|
477
477
|
external_sale_number?: string;
|
|
478
478
|
forceRemote?: boolean;
|
|
479
479
|
}
|
|
480
|
+
export interface SalesOrderLookupParams {
|
|
481
|
+
lookup: number | string;
|
|
482
|
+
forceRemote?: boolean;
|
|
483
|
+
}
|
|
480
484
|
export interface SyncPaymentsToOrderParams {
|
|
481
485
|
payments: OrderPaymentSource[];
|
|
482
486
|
paymentStatus?: SubmitSalesOrderParams['query']['payment_status'];
|
|
@@ -635,15 +639,11 @@ export interface OrderModuleAPI {
|
|
|
635
639
|
updateVoucherOrderPayments: (payments: OrderPaymentSource[]) => OrderPaymentData[];
|
|
636
640
|
sendCustomerPayLink: <T = any>(params: SendCustomerPayLinkParams) => Promise<T>;
|
|
637
641
|
saveDraft: () => Promise<void>;
|
|
638
|
-
hasLocalDatabase: () => boolean;
|
|
639
|
-
getLocalOrderByOrderId: (orderId: number | string) => Promise<Record<string, any> | null>;
|
|
640
|
-
getLocalOrderByExternalSaleNumber: (externalSaleNumber: string) => Promise<Record<string, any> | null>;
|
|
641
|
-
getLocalOrderByOrderNumber: (orderNumber: string) => Promise<Record<string, any> | null>;
|
|
642
642
|
hydrateTempOrderFromRecord: (record: Record<string, any>, options?: {
|
|
643
643
|
recalcOnHydrate?: boolean;
|
|
644
644
|
}) => Promise<OrderTempOrder>;
|
|
645
645
|
syncPaymentsToOrder: <T = any>(params: SyncPaymentsToOrderParams) => Promise<SyncPaymentsToOrderResult<T>>;
|
|
646
|
-
|
|
646
|
+
getSalesOrderByLookup: (params: SalesOrderLookupParams) => Promise<any>;
|
|
647
647
|
getLastOrderInfo: () => Record<string, any> | undefined;
|
|
648
648
|
getOrderInfo: (order_id: number) => Promise<any>;
|
|
649
649
|
/**
|
|
@@ -211,17 +211,17 @@ function resolveEffectivePerUnitDiscount(product) {
|
|
|
211
211
|
if (hasPromoDiscountItem)
|
|
212
212
|
return fromList;
|
|
213
213
|
const metadata = (product == null ? void 0 : product.metadata) || {};
|
|
214
|
+
const promo = metadata._promotion;
|
|
215
|
+
if ((promo == null ? void 0 : promo.inPromotion) !== true)
|
|
216
|
+
return fromList;
|
|
214
217
|
const optionSum = sumOptionUnitPrice(getProductSkuOptions(product)).toNumber();
|
|
215
|
-
if (metadata.source_product_price != null && metadata.main_product_selling_price != null) {
|
|
218
|
+
if (!discountList.length && metadata.source_product_price != null && metadata.main_product_selling_price != null) {
|
|
216
219
|
const source = Number(metadata.source_product_price);
|
|
217
220
|
const selling = Number(metadata.main_product_selling_price) - optionSum;
|
|
218
221
|
if (Number.isFinite(source) && Number.isFinite(selling) && source !== selling) {
|
|
219
222
|
return fromList + (source - selling);
|
|
220
223
|
}
|
|
221
224
|
}
|
|
222
|
-
const promo = metadata._promotion;
|
|
223
|
-
if ((promo == null ? void 0 : promo.inPromotion) !== true)
|
|
224
|
-
return fromList;
|
|
225
225
|
const originalPrice = Number(promo.originalPrice);
|
|
226
226
|
const finalPrice = Number(promo.finalPrice);
|
|
227
227
|
if (!Number.isFinite(originalPrice) || !Number.isFinite(finalPrice))
|
|
@@ -31,7 +31,7 @@ var getAvailableMaxAmount = (data) => {
|
|
|
31
31
|
return data.tag !== "point_card" ? data.available_max_amount : data == null ? void 0 : data.recommended_usage_amount;
|
|
32
32
|
};
|
|
33
33
|
var formatWalletPassList2PreparePayments = (list) => {
|
|
34
|
-
|
|
34
|
+
const formatted = (list || []).map((item) => {
|
|
35
35
|
return {
|
|
36
36
|
voucher_id: item.id || 0,
|
|
37
37
|
amount: Number(item.edit_current_amount || getAvailableMaxAmount(item)) || 0,
|
|
@@ -40,6 +40,7 @@ var formatWalletPassList2PreparePayments = (list) => {
|
|
|
40
40
|
wallet_pass_use_value: item.wallet_pass_use_value || void 0
|
|
41
41
|
};
|
|
42
42
|
});
|
|
43
|
+
return formatted;
|
|
43
44
|
};
|
|
44
45
|
var sortUserIdentificationCodeList = (list) => {
|
|
45
46
|
if (!Array.isArray(list) || list.length === 0) {
|
|
@@ -423,9 +423,7 @@ function calculateSalesSummary(params) {
|
|
|
423
423
|
tax_fee: toFixed2(productTaxFee),
|
|
424
424
|
surcharge_fee: toFixed2(surchargeAmount),
|
|
425
425
|
surcharges: surcharge,
|
|
426
|
-
discount_amount: toFixed2(
|
|
427
|
-
import_decimal.default.max(productOriginalAmount.minus(productAmount), 0).plus(shopDiscountAmount)
|
|
428
|
-
),
|
|
426
|
+
discount_amount: toFixed2(shopDiscountAmount),
|
|
429
427
|
deposit_amount: deposit ? deposit.total : "0.00",
|
|
430
428
|
deposit,
|
|
431
429
|
expect_amount: toFixed2(totalAmount),
|
package/lib/server/index.d.ts
CHANGED
|
@@ -284,6 +284,9 @@ declare class Server {
|
|
|
284
284
|
* @example 批量:GET /update/localOrder?order_ids=96971,96972,96973
|
|
285
285
|
*/
|
|
286
286
|
private handleUpdateLocalOrder;
|
|
287
|
+
private handleOrderSalesCheckout;
|
|
288
|
+
private handleOrderCheckout;
|
|
289
|
+
private handleOrderCheckoutSubmit;
|
|
287
290
|
private handleOrderSalesDetail;
|
|
288
291
|
/**
|
|
289
292
|
* 解析 order_ids 入参,兼容 url query / data 字段、字符串(csv) / 数组两种形态。
|
|
@@ -311,8 +314,12 @@ declare class Server {
|
|
|
311
314
|
* 从 url 中解析指定 query 参数,兼容相对路径与绝对路径
|
|
312
315
|
*/
|
|
313
316
|
private extractQueryParam;
|
|
314
|
-
private
|
|
317
|
+
private extractOrderSalesDetailLookup;
|
|
318
|
+
private shouldForceRemoteSalesDetail;
|
|
315
319
|
private buildOrderSalesDetailBackendPath;
|
|
320
|
+
private extractOrderDataFromCheckoutResponse;
|
|
321
|
+
private normalizeCheckoutResponse;
|
|
322
|
+
private extractBackendErrorResponse;
|
|
316
323
|
/**
|
|
317
324
|
* 从 url 或路由 path 解析 pathname(不含 query,去掉末尾 /)
|
|
318
325
|
*/
|