@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.
Files changed (36) hide show
  1. package/dist/model/strategy/adapter/walletPass/utils.js +7 -4
  2. package/dist/modules/Order/index.d.ts +12 -10
  3. package/dist/modules/Order/index.js +462 -571
  4. package/dist/modules/Order/types.d.ts +5 -5
  5. package/dist/modules/Order/utils.js +3 -3
  6. package/dist/modules/Payment/utils.js +2 -1
  7. package/dist/modules/SalesSummary/utils.js +1 -1
  8. package/dist/server/index.d.ts +8 -1
  9. package/dist/server/index.js +651 -464
  10. package/dist/server/modules/order/index.d.ts +3 -2
  11. package/dist/server/modules/order/index.js +68 -52
  12. package/dist/solution/BaseSales/index.d.ts +2 -1
  13. package/dist/solution/BaseSales/index.js +116 -122
  14. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +0 -1
  15. package/dist/solution/BookingByStep/index.d.ts +1 -1
  16. package/dist/solution/BookingTicket/index.d.ts +1 -1
  17. package/dist/solution/ScanOrder/index.js +3 -1
  18. package/lib/model/strategy/adapter/promotion/index.js +49 -0
  19. package/lib/model/strategy/adapter/walletPass/utils.js +3 -2
  20. package/lib/modules/Order/index.d.ts +12 -10
  21. package/lib/modules/Order/index.js +94 -118
  22. package/lib/modules/Order/types.d.ts +5 -5
  23. package/lib/modules/Order/utils.js +4 -4
  24. package/lib/modules/Payment/utils.js +2 -1
  25. package/lib/modules/SalesSummary/utils.js +1 -3
  26. package/lib/server/index.d.ts +8 -1
  27. package/lib/server/index.js +143 -24
  28. package/lib/server/modules/order/index.d.ts +3 -2
  29. package/lib/server/modules/order/index.js +25 -15
  30. package/lib/solution/BaseSales/index.d.ts +2 -1
  31. package/lib/solution/BaseSales/index.js +53 -16
  32. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +0 -1
  33. package/lib/solution/BookingByStep/index.d.ts +1 -1
  34. package/lib/solution/BookingTicket/index.d.ts +1 -1
  35. package/lib/solution/ScanOrder/index.js +3 -1
  36. 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 = tempOrder.payment_status || "payment_processing";
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.calculatePaymentEffectiveAmount(paymentRecord)),
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
- tempOrder.payments = [...nonVoucherPayments, ...mappedVouchers];
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
- * 直接调用 /order/checkout 接口创建订单
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
- // TODO 获取详情的接口
2291
- async getOrderInfoByRemote(order_id) {
2292
- const res = await this.request.get(`/order/sales/${order_id}`, {
2293
- with: ["products", "bookings", "payments", "customer", "summary", "contacts_info"]
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
- getOrderInfoByRemote: (order_id: number) => Promise<any>;
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
- return (list || []).map((item) => {
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),
@@ -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 extractOrderSalesDetailId;
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
  */