@pisell/pisellos 2.2.59 → 2.2.60
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/index.d.ts +2 -0
- package/dist/model/strategy/adapter/index.js +2 -1
- package/dist/model/strategy/adapter/promotion/evaluator.d.ts +213 -0
- package/dist/model/strategy/adapter/promotion/evaluator.js +1206 -0
- package/dist/model/strategy/adapter/promotion/index.d.ts +206 -0
- package/dist/model/strategy/adapter/promotion/index.js +0 -0
- package/dist/model/strategy/adapter/promotion/type.d.ts +447 -0
- package/dist/model/strategy/adapter/promotion/type.js +209 -0
- package/dist/model/strategy/adapter/walletPass/evaluator.js +4 -1
- package/dist/model/strategy/engine.d.ts +106 -0
- package/dist/model/strategy/engine.js +611 -0
- package/dist/model/strategy/index.d.ts +2 -93
- package/dist/model/strategy/index.js +6 -549
- package/dist/modules/BaseModule.d.ts +4 -0
- package/dist/modules/BaseModule.js +5 -0
- package/dist/modules/Payment/index.js +5 -5
- package/dist/modules/Rules/index.d.ts +1 -0
- package/dist/modules/Rules/index.js +30 -22
- package/dist/modules/Schedule/index.d.ts +2 -2
- package/dist/modules/Schedule/index.js +0 -2
- package/dist/solution/BookingByStep/index.js +1 -0
- package/dist/solution/BookingTicket/index.d.ts +1 -1
- package/dist/solution/Checkout/index.js +39 -43
- package/lib/model/strategy/adapter/index.d.ts +2 -0
- package/lib/model/strategy/adapter/index.js +5 -0
- package/lib/model/strategy/adapter/promotion/evaluator.d.ts +213 -0
- package/lib/model/strategy/adapter/promotion/evaluator.js +844 -0
- package/lib/model/strategy/adapter/promotion/index.d.ts +206 -0
- package/lib/model/strategy/adapter/promotion/index.js +0 -0
- package/lib/model/strategy/adapter/promotion/type.d.ts +447 -0
- package/lib/model/strategy/adapter/promotion/type.js +51 -0
- package/lib/model/strategy/adapter/walletPass/evaluator.js +2 -1
- package/lib/model/strategy/engine.d.ts +106 -0
- package/lib/model/strategy/engine.js +450 -0
- package/lib/model/strategy/index.d.ts +2 -93
- package/lib/model/strategy/index.js +6 -381
- package/lib/modules/BaseModule.d.ts +4 -0
- package/lib/modules/BaseModule.js +3 -0
- package/lib/modules/Payment/index.js +5 -4
- package/lib/modules/Rules/index.d.ts +1 -0
- package/lib/modules/Rules/index.js +25 -23
- package/lib/modules/Schedule/index.d.ts +2 -2
- package/lib/modules/Schedule/index.js +0 -2
- package/lib/solution/BookingByStep/index.js +1 -0
- package/lib/solution/BookingTicket/index.d.ts +1 -1
- package/lib/solution/Checkout/index.js +5 -6
- package/package.json +1 -1
- package/dist/modules/Schedule/getDateIsInSchedule.d.ts +0 -32
- package/dist/modules/Schedule/getDateIsInSchedule.js +0 -747
- package/lib/modules/Schedule/getDateIsInSchedule.d.ts +0 -32
- package/lib/modules/Schedule/getDateIsInSchedule.js +0 -451
|
@@ -201,6 +201,13 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
201
201
|
productList: hasApplicableDiscount ? result.productList : productList
|
|
202
202
|
};
|
|
203
203
|
}
|
|
204
|
+
}, {
|
|
205
|
+
key: "filterDiscountListByType",
|
|
206
|
+
value: function filterDiscountListByType(discountList, type) {
|
|
207
|
+
return (discountList || []).filter(function (item) {
|
|
208
|
+
return item.type === type || item.tag === type;
|
|
209
|
+
});
|
|
210
|
+
}
|
|
204
211
|
}, {
|
|
205
212
|
key: "calcDiscount",
|
|
206
213
|
value: function calcDiscount(_ref2, options) {
|
|
@@ -953,6 +960,9 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
953
960
|
}) && (!((_product$discount_lis5 = product.discount_list) !== null && _product$discount_lis5 !== void 0 && _product$discount_lis5.length) || ((_product11 = product) === null || _product11 === void 0 || (_product11 = _product11.discount_list) === null || _product11 === void 0 || (_product11$every = _product11.every) === null || _product11$every === void 0 ? void 0 : _product11$every.call(_product11, function (item) {
|
|
954
961
|
return item.type === 'product';
|
|
955
962
|
})));
|
|
963
|
+
if (product.inPromotion) {
|
|
964
|
+
isManualDiscount = false;
|
|
965
|
+
}
|
|
956
966
|
} else {
|
|
957
967
|
// bundle子商品:判断父主商品是否手动折扣
|
|
958
968
|
var parentProduct = flatItem.parentProduct;
|
|
@@ -1048,25 +1058,27 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
1048
1058
|
}),
|
|
1049
1059
|
price: product.price
|
|
1050
1060
|
}), {}, {
|
|
1051
|
-
discount_list:
|
|
1061
|
+
discount_list: _this3.filterDiscountListByType(product.discount_list, 'promotion')
|
|
1052
1062
|
}))]);
|
|
1053
1063
|
} else {
|
|
1064
|
+
var _ref7, _product$_promotion$f, _product12;
|
|
1054
1065
|
processedProductsMap.set(product._id, [_this3.hooks.setProduct(originProduct, _objectSpread(_objectSpread({}, isManualDiscount ? {
|
|
1055
1066
|
price: product.price,
|
|
1056
1067
|
main_product_selling_price: product.price
|
|
1057
1068
|
} : {
|
|
1058
1069
|
_id: product._id.split('___')[0] + '___' + index,
|
|
1059
|
-
total: product.origin_total || product.total,
|
|
1070
|
+
total: product.inPromotion ? (_ref7 = (_product$_promotion$f = (_product12 = product) === null || _product12 === void 0 || (_product12 = _product12._promotion) === null || _product12 === void 0 ? void 0 : _product12.finalPrice) !== null && _product$_promotion$f !== void 0 ? _product$_promotion$f : product.origin_total) !== null && _ref7 !== void 0 ? _ref7 : product.total : product.origin_total || product.total,
|
|
1060
1071
|
price: product.price,
|
|
1061
1072
|
main_product_selling_price: product.price
|
|
1062
1073
|
}), {}, {
|
|
1063
|
-
discount_list:
|
|
1074
|
+
discount_list: _this3.filterDiscountListByType(product.discount_list, 'promotion')
|
|
1064
1075
|
}))]);
|
|
1065
1076
|
}
|
|
1066
1077
|
} else {
|
|
1078
|
+
var _flatItem$bundleItem8;
|
|
1067
1079
|
// bundle子商品:保存到扁平化Map
|
|
1068
1080
|
processedFlatItemsMap.set(flatItem._id, [_objectSpread(_objectSpread({}, flatItem), {}, {
|
|
1069
|
-
discount_list: [],
|
|
1081
|
+
discount_list: _this3.filterDiscountListByType(((_flatItem$bundleItem8 = flatItem.bundleItem) === null || _flatItem$bundleItem8 === void 0 ? void 0 : _flatItem$bundleItem8.discount_list) || [], 'promotion'),
|
|
1070
1082
|
price: isManualDiscount ? flatItem.bundleItem.price : flatItem.bundleItem.original_price,
|
|
1071
1083
|
processed: true
|
|
1072
1084
|
})]);
|
|
@@ -1099,14 +1111,14 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
1099
1111
|
// 主商品:保持原有逻辑
|
|
1100
1112
|
if (splitCount < totalQuantity && isNeedSplit) {
|
|
1101
1113
|
arr.push(_this3.hooks.setProduct(originProduct, {
|
|
1102
|
-
discount_list:
|
|
1114
|
+
discount_list: _this3.filterDiscountListByType(product.discount_list, 'promotion'),
|
|
1103
1115
|
quantity: totalQuantity - splitCount,
|
|
1104
1116
|
_id: product._id.split('___')[0],
|
|
1105
1117
|
total: product.origin_total || product.total
|
|
1106
1118
|
}));
|
|
1107
1119
|
}
|
|
1108
1120
|
for (var i = 0; i < splitCount; i++) {
|
|
1109
|
-
var
|
|
1121
|
+
var _originProduct, _selectedDiscount$met, _selectedDiscount$met2;
|
|
1110
1122
|
// 如果用过折扣卡,也就不存在拆分的情况了,这里直接使用上面计算出来的折扣卡
|
|
1111
1123
|
var _selectedDiscount = selectedDiscountCard || applicableDiscounts[i];
|
|
1112
1124
|
// 标记优惠券为已使用
|
|
@@ -1123,7 +1135,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
1123
1135
|
// 优先从 origin_total拿,可能会拿不到(比如用户端预约在没有配置 original_price 的情况下)
|
|
1124
1136
|
var productOriginTotal = product.origin_total || product.total || 0;
|
|
1125
1137
|
// 如果当前 product 有 discount_list,则先从 origin_total 拿
|
|
1126
|
-
if ((
|
|
1138
|
+
if (_this3.filterDiscountListByType(product.discount_list, 'promotion').length && product.origin_total) {
|
|
1127
1139
|
productOriginTotal = product.origin_total;
|
|
1128
1140
|
}
|
|
1129
1141
|
// 如果originProduct?._productInit?.original_price为 0,product.origin_total可能为空,此时取 product.total
|
|
@@ -1205,7 +1217,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
1205
1217
|
}));
|
|
1206
1218
|
} else {
|
|
1207
1219
|
arr.push(_this3.hooks.setProduct(originProduct, {
|
|
1208
|
-
discount_list: [discountDetail],
|
|
1220
|
+
discount_list: _this3.filterDiscountListByType(product.discount_list, 'promotion').concat([discountDetail]),
|
|
1209
1221
|
_id: product._id.split('___')[0] + '___' + _selectedDiscount.id + index,
|
|
1210
1222
|
price: _selectedDiscount.tag === 'good_pass' ? 0 : product.price,
|
|
1211
1223
|
quantity: isNeedSplit ? 1 : product.quantity,
|
|
@@ -1376,7 +1388,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
1376
1388
|
var getDefaultProduct = function getDefaultProduct() {
|
|
1377
1389
|
if (product.isClient) {
|
|
1378
1390
|
return _this3.hooks.setProduct(originProduct, {
|
|
1379
|
-
discount_list:
|
|
1391
|
+
discount_list: _this3.filterDiscountListByType(product.discount_list, 'promotion'),
|
|
1380
1392
|
price: product.price,
|
|
1381
1393
|
origin_total: getProductOriginTotalPrice({
|
|
1382
1394
|
product: {
|
|
@@ -1397,7 +1409,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
1397
1409
|
});
|
|
1398
1410
|
} else {
|
|
1399
1411
|
return _this3.hooks.setProduct(originProduct, {
|
|
1400
|
-
discount_list:
|
|
1412
|
+
discount_list: _this3.filterDiscountListByType(product.discount_list, 'promotion'),
|
|
1401
1413
|
total: product.total,
|
|
1402
1414
|
origin_total: product.origin_total,
|
|
1403
1415
|
price: product.price
|
|
@@ -1567,8 +1579,8 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
1567
1579
|
quantity: 1,
|
|
1568
1580
|
discount_list: updatedMainDiscountList,
|
|
1569
1581
|
bundle: newBundleWithDiscount,
|
|
1570
|
-
total:
|
|
1571
|
-
origin_total:
|
|
1582
|
+
total: newTotalWithDiscount,
|
|
1583
|
+
origin_total: newOriginTotalWithDiscount
|
|
1572
1584
|
})));
|
|
1573
1585
|
|
|
1574
1586
|
// 第二个:包含原始bundle (qty=原quantity-1)
|
|
@@ -1630,8 +1642,6 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
1630
1642
|
return accumulator.add(currentPrice.mul(currentNum));
|
|
1631
1643
|
}, new Decimal(newTotalOriginal)).toNumber();
|
|
1632
1644
|
}
|
|
1633
|
-
newTotalOriginal = new Decimal(newTotalOriginal).toDecimalPlaces(2, Decimal.ROUND_HALF_UP).toNumber();
|
|
1634
|
-
newOriginTotalOriginal = new Decimal(newOriginTotalOriginal).toDecimalPlaces(2, Decimal.ROUND_HALF_UP).toNumber();
|
|
1635
1645
|
|
|
1636
1646
|
// 添加第二个主商品:qty=原quantity-1,包含原始bundle
|
|
1637
1647
|
result.push(_this3.hooks.setProduct(mainProduct, _objectSpread(_objectSpread({}, mainProductData), {}, {
|
|
@@ -1736,8 +1746,6 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
1736
1746
|
return accumulator.add(currentPrice.mul(currentNum));
|
|
1737
1747
|
}, new Decimal(newTotal)).toNumber();
|
|
1738
1748
|
}
|
|
1739
|
-
newTotal = new Decimal(newTotal).toDecimalPlaces(2, Decimal.ROUND_HALF_UP).toNumber();
|
|
1740
|
-
newOriginTotal = new Decimal(newOriginTotal).toDecimalPlaces(2, Decimal.ROUND_HALF_UP).toNumber();
|
|
1741
1749
|
|
|
1742
1750
|
// 生成最终的主商品
|
|
1743
1751
|
result.push(_this3.hooks.setProduct(mainProduct, _objectSpread(_objectSpread({}, mainProductData), {}, {
|
|
@@ -1857,10 +1865,10 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
1857
1865
|
return true; // 单独购买时可用
|
|
1858
1866
|
}
|
|
1859
1867
|
if (isBundleItem) {
|
|
1860
|
-
var _flatItem$
|
|
1868
|
+
var _flatItem$bundleItem9, _flatItem$bundleItem10;
|
|
1861
1869
|
// 套餐中购买时,判断是否为原价
|
|
1862
|
-
var priceType = (_flatItem$
|
|
1863
|
-
var priceTypeExt = (_flatItem$
|
|
1870
|
+
var priceType = (_flatItem$bundleItem9 = flatItem.bundleItem) === null || _flatItem$bundleItem9 === void 0 ? void 0 : _flatItem$bundleItem9.price_type;
|
|
1871
|
+
var priceTypeExt = (_flatItem$bundleItem10 = flatItem.bundleItem) === null || _flatItem$bundleItem10 === void 0 ? void 0 : _flatItem$bundleItem10.price_type_ext;
|
|
1864
1872
|
// original_price 对应:
|
|
1865
1873
|
// 1. price_type: "markup" && price_type_ext: "product_price"
|
|
1866
1874
|
// markup_price 对应:
|
|
@@ -1898,10 +1906,10 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
1898
1906
|
return false; // 单独购买时不可用
|
|
1899
1907
|
}
|
|
1900
1908
|
if (isBundleItem) {
|
|
1901
|
-
var _flatItem$
|
|
1909
|
+
var _flatItem$bundleItem11, _flatItem$bundleItem12;
|
|
1902
1910
|
// 套餐中购买时,判断是否为原价
|
|
1903
|
-
var _priceType = (_flatItem$
|
|
1904
|
-
var _priceTypeExt = (_flatItem$
|
|
1911
|
+
var _priceType = (_flatItem$bundleItem11 = flatItem.bundleItem) === null || _flatItem$bundleItem11 === void 0 ? void 0 : _flatItem$bundleItem11.price_type;
|
|
1912
|
+
var _priceTypeExt = (_flatItem$bundleItem12 = flatItem.bundleItem) === null || _flatItem$bundleItem12 === void 0 ? void 0 : _flatItem$bundleItem12.price_type_ext;
|
|
1905
1913
|
|
|
1906
1914
|
// original_price 对应:
|
|
1907
1915
|
// 1. price_type: "markup" && price_type_ext: "product_price"
|
|
@@ -33,7 +33,7 @@ export declare class ScheduleModule extends BaseModule implements Module, Schedu
|
|
|
33
33
|
isInScheduleByDate({ date, schedule, }: {
|
|
34
34
|
date: string;
|
|
35
35
|
schedule: any;
|
|
36
|
-
}): boolean;
|
|
36
|
+
}): boolean | undefined;
|
|
37
37
|
/**
|
|
38
38
|
* 传入一个时间, 判断改时间是否在schedule 内
|
|
39
39
|
* @param param0 { date: string, schedule: any } date: 日期, schedule: schedule
|
|
@@ -42,5 +42,5 @@ export declare class ScheduleModule extends BaseModule implements Module, Schedu
|
|
|
42
42
|
static isInScheduleByDate({ date, schedule, }: {
|
|
43
43
|
date: string;
|
|
44
44
|
schedule: any;
|
|
45
|
-
}): boolean;
|
|
45
|
+
}): boolean | undefined;
|
|
46
46
|
}
|
|
@@ -27,7 +27,6 @@ import isSameOrBefore from 'dayjs/plugin/isSameOrBefore';
|
|
|
27
27
|
import isSameOrAfter from 'dayjs/plugin/isSameOrAfter';
|
|
28
28
|
import { generateMonthDates, disableAllDates, disableDatesBeforeOneDay } from "../Date/utils";
|
|
29
29
|
import { calcScheduleDateRange } from "./utils";
|
|
30
|
-
import { getDateIsInSchedule } from "./getDateIsInSchedule";
|
|
31
30
|
dayjs.extend(isSameOrBefore);
|
|
32
31
|
dayjs.extend(isSameOrAfter);
|
|
33
32
|
export var ScheduleModule = /*#__PURE__*/function (_BaseModule) {
|
|
@@ -271,7 +270,6 @@ export var ScheduleModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
271
270
|
var _schedule$repeat_rule, _schedule$repeat_rule2;
|
|
272
271
|
var date = _ref3.date,
|
|
273
272
|
schedule = _ref3.schedule;
|
|
274
|
-
return getDateIsInSchedule(date, [schedule]);
|
|
275
273
|
if (schedule.start_time && schedule.end_time) {
|
|
276
274
|
var isBeforeStartTime = dayjs(date).isBefore(dayjs(schedule.start_time));
|
|
277
275
|
var isAfterEndTime = dayjs(date).isAfter(dayjs(schedule.end_time));
|
|
@@ -1161,6 +1161,7 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
1161
1161
|
var productData = _objectSpread(_objectSpread({}, origin), {}, {
|
|
1162
1162
|
product_variant_id: product_variant_id
|
|
1163
1163
|
});
|
|
1164
|
+
debugger;
|
|
1164
1165
|
// 保护,如果进来的是 session 商品,则必须要有 date 和时间片,否则不允许添加
|
|
1165
1166
|
if (isSessionProduct(productData)) {
|
|
1166
1167
|
if (!date || !date.startTime || !date.endTime) {
|
|
@@ -123,7 +123,7 @@ export declare class BookingTicketImpl extends BaseModule implements Module {
|
|
|
123
123
|
* 获取当前的客户搜索条件
|
|
124
124
|
* @returns 当前搜索条件
|
|
125
125
|
*/
|
|
126
|
-
getCurrentCustomerSearchParams(): Omit<import("../../modules").ShopGetCustomerListParams, "
|
|
126
|
+
getCurrentCustomerSearchParams(): Omit<import("../../modules").ShopGetCustomerListParams, "num" | "skip">;
|
|
127
127
|
/**
|
|
128
128
|
* 获取客户列表状态(包含滚动加载相关状态)
|
|
129
129
|
* @returns 客户状态
|
|
@@ -760,7 +760,6 @@ export var CheckoutImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
760
760
|
return _regeneratorRuntime().wrap(function _callee10$(_context10) {
|
|
761
761
|
while (1) switch (_context10.prev = _context10.next) {
|
|
762
762
|
case 0:
|
|
763
|
-
this.payment.wallet.clearAllCache();
|
|
764
763
|
this.logInfo('updateLocalOrderAsync called', {
|
|
765
764
|
orderId: params.orderId,
|
|
766
765
|
orderDataType: (_params$orderData6 = params.orderData) === null || _params$orderData6 === void 0 ? void 0 : _params$orderData6.type,
|
|
@@ -772,11 +771,11 @@ export var CheckoutImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
772
771
|
// 基础校验
|
|
773
772
|
validation = validateLocalOrderData(params.orderData);
|
|
774
773
|
if (validation.valid) {
|
|
775
|
-
_context10.next =
|
|
774
|
+
_context10.next = 4;
|
|
776
775
|
break;
|
|
777
776
|
}
|
|
778
777
|
throw createCheckoutError(CheckoutErrorType.ValidationFailed, "\u8BA2\u5355\u6570\u636E\u9A8C\u8BC1\u5931\u8D25: ".concat(validation.errors.join(', ')));
|
|
779
|
-
case
|
|
778
|
+
case 4:
|
|
780
779
|
// 计算金额
|
|
781
780
|
amountInfo = extractAmountFromCartSummary(params.cartSummary); // 规范化补充字段
|
|
782
781
|
params.orderData.created_at = formatDateTime(new Date());
|
|
@@ -802,19 +801,19 @@ export var CheckoutImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
802
801
|
}
|
|
803
802
|
|
|
804
803
|
// 保留原有支付项:通过 orderId 找到现有订单(按 id 或 order_id 匹配)
|
|
805
|
-
_context10.next =
|
|
804
|
+
_context10.next = 17;
|
|
806
805
|
return this.payment.getOrderListAsync();
|
|
807
|
-
case
|
|
806
|
+
case 17:
|
|
808
807
|
allOrders = _context10.sent;
|
|
809
808
|
existingOrder = allOrders.find(function (o) {
|
|
810
809
|
return String(o.id) === String(params.orderId) || String(o.order_id) === String(params.orderId);
|
|
811
810
|
});
|
|
812
811
|
if (!existingOrder) {
|
|
813
|
-
_context10.next =
|
|
812
|
+
_context10.next = 71;
|
|
814
813
|
break;
|
|
815
814
|
}
|
|
816
815
|
if (!(params.existPayment && params.existPayment.length > 0)) {
|
|
817
|
-
_context10.next =
|
|
816
|
+
_context10.next = 47;
|
|
818
817
|
break;
|
|
819
818
|
}
|
|
820
819
|
this.logInfo('检测到云端支付项,将替换本地订单的支付项列表', {
|
|
@@ -838,7 +837,7 @@ export var CheckoutImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
838
837
|
});
|
|
839
838
|
}); // 计算是否需要支付定金
|
|
840
839
|
_isNeedDeposit = this.checkIsNeedDepositAsync(params.orderData.bookings, params.orderData.relation_products); // 更新订单,替换支付项列表
|
|
841
|
-
_context10.next =
|
|
840
|
+
_context10.next = 28;
|
|
842
841
|
return this.payment.updateOrderAsync(existingOrder.uuid, {
|
|
843
842
|
total_amount: amountInfo.totalAmount,
|
|
844
843
|
is_deposit: _isNeedDeposit.hasDeposit ? 1 : 0,
|
|
@@ -856,21 +855,21 @@ export var CheckoutImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
856
855
|
amount_breakdown: amountInfo
|
|
857
856
|
}
|
|
858
857
|
});
|
|
859
|
-
case
|
|
860
|
-
_context10.next =
|
|
858
|
+
case 28:
|
|
859
|
+
_context10.next = 30;
|
|
861
860
|
return this.payment.getPaymentOrderByUuidAsync(existingOrder.uuid);
|
|
862
|
-
case
|
|
861
|
+
case 30:
|
|
863
862
|
_updated = _context10.sent;
|
|
864
863
|
if (_updated) {
|
|
865
|
-
_context10.next =
|
|
864
|
+
_context10.next = 33;
|
|
866
865
|
break;
|
|
867
866
|
}
|
|
868
867
|
throw createCheckoutError(CheckoutErrorType.UnknownError, '订单更新失败');
|
|
869
|
-
case
|
|
868
|
+
case 33:
|
|
870
869
|
this.store.currentOrder = _updated;
|
|
871
|
-
_context10.next =
|
|
870
|
+
_context10.next = 36;
|
|
872
871
|
return this.updateStateAmountToRemaining(false);
|
|
873
|
-
case
|
|
872
|
+
case 36:
|
|
874
873
|
this.logInfo('本地订单更新成功(已替换云端支付项):', {
|
|
875
874
|
orderId: params.orderId,
|
|
876
875
|
uuid: _updated.uuid,
|
|
@@ -881,12 +880,12 @@ export var CheckoutImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
881
880
|
});
|
|
882
881
|
|
|
883
882
|
// 事件通知
|
|
884
|
-
_context10.next =
|
|
883
|
+
_context10.next = 39;
|
|
885
884
|
return this.core.effects.emit("".concat(this.name, ":onOrderCreated"), {
|
|
886
885
|
order: _updated,
|
|
887
886
|
timestamp: Date.now()
|
|
888
887
|
});
|
|
889
|
-
case
|
|
888
|
+
case 39:
|
|
890
889
|
// 计算已同步的支付金额
|
|
891
890
|
syncedPayments = _updated.payment.filter(function (p) {
|
|
892
891
|
return p.isSynced && p.status !== 'voided';
|
|
@@ -906,7 +905,7 @@ export var CheckoutImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
906
905
|
order_wait_pay_amount: Number(_depositDiffAmount) > 0 ? Number(_depositDiffAmount) : Number(_remainingExpectAmount)
|
|
907
906
|
});
|
|
908
907
|
return _context10.abrupt("return", _updated);
|
|
909
|
-
case
|
|
908
|
+
case 47:
|
|
910
909
|
// 原有逻辑:保留现有支付项
|
|
911
910
|
totalAmount = new Decimal(amountInfo.totalAmount || '0');
|
|
912
911
|
activePayments = (existingOrder.payment || []).filter(function (p) {
|
|
@@ -919,7 +918,7 @@ export var CheckoutImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
919
918
|
}, new Decimal(0));
|
|
920
919
|
remaining = Decimal.max(0, totalAmount.minus(paidAmount)).toFixed(2); // 计算是否需要支付定金,如果需要默认切换到定金模式,以及记录定金总金额,并把当前默认待付金额调整为定金总金额
|
|
921
920
|
_isNeedDeposit2 = this.checkIsNeedDepositAsync(params.orderData.bookings, params.orderData.relation_products); // 更新到支付模块(使用 uuid,不修改 payment 列表)
|
|
922
|
-
_context10.next =
|
|
921
|
+
_context10.next = 54;
|
|
923
922
|
return this.payment.updateOrderAsync(existingOrder.uuid, {
|
|
924
923
|
total_amount: amountInfo.totalAmount,
|
|
925
924
|
is_deposit: _isNeedDeposit2.hasDeposit ? 1 : 0,
|
|
@@ -936,21 +935,21 @@ export var CheckoutImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
936
935
|
amount_breakdown: amountInfo
|
|
937
936
|
}
|
|
938
937
|
});
|
|
939
|
-
case
|
|
940
|
-
_context10.next =
|
|
938
|
+
case 54:
|
|
939
|
+
_context10.next = 56;
|
|
941
940
|
return this.payment.getPaymentOrderByUuidAsync(existingOrder.uuid);
|
|
942
|
-
case
|
|
941
|
+
case 56:
|
|
943
942
|
updated = _context10.sent;
|
|
944
943
|
if (updated) {
|
|
945
|
-
_context10.next =
|
|
944
|
+
_context10.next = 59;
|
|
946
945
|
break;
|
|
947
946
|
}
|
|
948
947
|
throw createCheckoutError(CheckoutErrorType.UnknownError, '订单更新失败');
|
|
949
|
-
case
|
|
948
|
+
case 59:
|
|
950
949
|
this.store.currentOrder = updated;
|
|
951
|
-
_context10.next =
|
|
950
|
+
_context10.next = 62;
|
|
952
951
|
return this.updateStateAmountToRemaining(false);
|
|
953
|
-
case
|
|
952
|
+
case 62:
|
|
954
953
|
this.logInfo('本地订单更新成功(保留支付项):', {
|
|
955
954
|
orderId: params.orderId,
|
|
956
955
|
uuid: updated.uuid,
|
|
@@ -960,12 +959,12 @@ export var CheckoutImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
960
959
|
});
|
|
961
960
|
|
|
962
961
|
// 事件通知(复用创建事件,便于上层监听刷新)
|
|
963
|
-
_context10.next =
|
|
962
|
+
_context10.next = 65;
|
|
964
963
|
return this.core.effects.emit("".concat(this.name, ":onOrderCreated"), {
|
|
965
964
|
order: updated,
|
|
966
965
|
timestamp: Date.now()
|
|
967
966
|
});
|
|
968
|
-
case
|
|
967
|
+
case 65:
|
|
969
968
|
// 需要减去已经同步给后端的支付过的钱
|
|
970
969
|
syncedAmount = activePayments.reduce(function (sum, p) {
|
|
971
970
|
var amt = new Decimal(p.amount || '0');
|
|
@@ -981,10 +980,10 @@ export var CheckoutImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
981
980
|
order_wait_pay_amount: Number(depositDiffAmount) > 0 ? Number(depositDiffAmount) : Number(remainingExpectAmount)
|
|
982
981
|
});
|
|
983
982
|
return _context10.abrupt("return", updated);
|
|
984
|
-
case
|
|
983
|
+
case 71:
|
|
985
984
|
// 计算是否需要支付定金,如果需要默认切换到定金模式,以及记录定金总金额,并把当前默认待付金额调整为定金总金额
|
|
986
985
|
isNeedDeposit = this.checkIsNeedDepositAsync(params.orderData.bookings, params.orderData.relation_products); // 没找到现有订单时,回退为创建逻辑(用于异常兜底)
|
|
987
|
-
_context10.next =
|
|
986
|
+
_context10.next = 74;
|
|
988
987
|
return this.payment.createPaymentOrderAsync({
|
|
989
988
|
order_id: String(params.orderId),
|
|
990
989
|
total_amount: amountInfo.totalAmount,
|
|
@@ -1003,7 +1002,7 @@ export var CheckoutImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
1003
1002
|
amount_breakdown: amountInfo
|
|
1004
1003
|
}
|
|
1005
1004
|
});
|
|
1006
|
-
case
|
|
1005
|
+
case 74:
|
|
1007
1006
|
created = _context10.sent;
|
|
1008
1007
|
this.store.currentOrder = created;
|
|
1009
1008
|
|
|
@@ -1039,7 +1038,7 @@ export var CheckoutImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
1039
1038
|
this.initWalletData();
|
|
1040
1039
|
}
|
|
1041
1040
|
return _context10.abrupt("return", created);
|
|
1042
|
-
case
|
|
1041
|
+
case 78:
|
|
1043
1042
|
case "end":
|
|
1044
1043
|
return _context10.stop();
|
|
1045
1044
|
}
|
|
@@ -1909,9 +1908,7 @@ export var CheckoutImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
1909
1908
|
case 41:
|
|
1910
1909
|
_context18.prev = 41;
|
|
1911
1910
|
_context18.t0 = _context18["catch"](0);
|
|
1912
|
-
this.
|
|
1913
|
-
error: _context18.t0
|
|
1914
|
-
});
|
|
1911
|
+
this.logError('[Checkout] 批量更新代金券支付项失败:', _context18.t0);
|
|
1915
1912
|
_context18.next = 46;
|
|
1916
1913
|
return this.handleError(_context18.t0, CheckoutErrorType.PaymentFailed);
|
|
1917
1914
|
case 46:
|
|
@@ -3130,14 +3127,13 @@ export var CheckoutImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
3130
3127
|
return payment.status !== 'voided';
|
|
3131
3128
|
}) // 只计算未撤销的支付项
|
|
3132
3129
|
.reduce(function (sum, payment) {
|
|
3133
|
-
|
|
3134
|
-
|
|
3135
|
-
|
|
3136
|
-
//
|
|
3137
|
-
//
|
|
3138
|
-
|
|
3139
|
-
var
|
|
3140
|
-
var effectiveAmount = paymentAmount.minus(roundingAmount);
|
|
3130
|
+
var amount = new Decimal(payment.amount || '0');
|
|
3131
|
+
var roundingAmount = new Decimal(payment.rounding_amount || '0');
|
|
3132
|
+
|
|
3133
|
+
// 使用 Decimal.js 计算实际支付有效金额:
|
|
3134
|
+
// 当 rounding_amount 为负数时,表示抹掉的金额,应该按绝对值加到实际支付中
|
|
3135
|
+
// 例如:amount=15, rounding_amount=-0.2,实际相当于支付了15.2(抹掉了0.2元的零头)
|
|
3136
|
+
var effectiveAmount = amount.add(roundingAmount.isNegative() ? roundingAmount.abs() : 0);
|
|
3141
3137
|
return sum.add(effectiveAmount);
|
|
3142
3138
|
}, new Decimal(0));
|
|
3143
3139
|
return paidAmount.toFixed(2);
|
|
@@ -30,6 +30,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
30
30
|
// src/model/strategy/adapter/index.ts
|
|
31
31
|
var adapter_exports = {};
|
|
32
32
|
__export(adapter_exports, {
|
|
33
|
+
PromotionAdapter: () => import_promotion.PromotionAdapter,
|
|
34
|
+
PromotionEvaluator: () => import_promotion.PromotionEvaluator,
|
|
33
35
|
WalletPassAdapter: () => import_walletPass.default,
|
|
34
36
|
WalletPassEvaluator: () => import_evaluator.WalletPassEvaluator
|
|
35
37
|
});
|
|
@@ -37,8 +39,11 @@ module.exports = __toCommonJS(adapter_exports);
|
|
|
37
39
|
__reExport(adapter_exports, require("./type"), module.exports);
|
|
38
40
|
var import_walletPass = __toESM(require("./walletPass"));
|
|
39
41
|
var import_evaluator = require("./walletPass/evaluator");
|
|
42
|
+
var import_promotion = require("./promotion");
|
|
40
43
|
// Annotate the CommonJS export names for ESM import in node:
|
|
41
44
|
0 && (module.exports = {
|
|
45
|
+
PromotionAdapter,
|
|
46
|
+
PromotionEvaluator,
|
|
42
47
|
WalletPassAdapter,
|
|
43
48
|
WalletPassEvaluator,
|
|
44
49
|
...require("./type")
|