优化
This commit is contained in:
@@ -117,6 +117,7 @@ export function returnCanUseLimitTimeDiscount(
|
||||
useVipPrice: boolean,
|
||||
idKey = "product_id"
|
||||
) {
|
||||
goods={...goods,product_id:goods.product_id||goods.productId|| goods.id|| ''}
|
||||
if (!limitTimeDiscount || !limitTimeDiscount.id) {
|
||||
return false;
|
||||
}
|
||||
@@ -135,8 +136,12 @@ export function returnCanUseLimitTimeDiscount(
|
||||
return true;
|
||||
}
|
||||
if (useVipPrice && goods.hasOwnProperty("memberPrice")) {
|
||||
if (goods.memberPrice && goods.memberPrice * 1 <= 0) {
|
||||
|
||||
if ( goods.memberPrice * 1 <= 0) {
|
||||
|
||||
return true;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -172,6 +177,7 @@ function returnLimitPrice(
|
||||
limitTimeDiscount,
|
||||
useVipPrice
|
||||
);
|
||||
|
||||
if (canuseLimit) {
|
||||
//可以使用限时折扣
|
||||
if (limitTimeDiscount.discountPriority == "limit-time") {
|
||||
@@ -183,6 +189,7 @@ function returnLimitPrice(
|
||||
return result;
|
||||
}
|
||||
if (limitTimeDiscount.discountPriority == "vip-price") {
|
||||
|
||||
//会员价优先
|
||||
if (useVipPrice && goods.memberPrice && goods.memberPrice * 1 > 0) {
|
||||
//使用会员价
|
||||
@@ -228,7 +235,7 @@ export function returnCalcPrice(
|
||||
fullReductionActivitie.discountShare == 1 &&
|
||||
fullReductionActivitie.vipPriceShare == 1
|
||||
) {
|
||||
//与限时折扣同享,与会员价不同享
|
||||
//与限时折扣同享,与会员价同享
|
||||
return returnLimitPrice(goods, limitTimeDiscount, useVipPrice);
|
||||
}
|
||||
if (
|
||||
@@ -280,7 +287,7 @@ export function calcFullReductionActivityFullAmount(
|
||||
let amount = 0;
|
||||
for (let goods of goodsList) {
|
||||
const availableNum = Math.max(0, goods.number - (goods.returnNum || 0));
|
||||
if (goods.is_temporary || goods.isTemporary || goods.is_gift || goods.isGift || availableNum <= 0) {
|
||||
if (goods.is_temporary ||goods.isTemporary || goods.is_gift ||goods.isGift || availableNum <= 0) {
|
||||
//临时菜,赠菜,数量<=0的商品不计算
|
||||
continue;
|
||||
}
|
||||
@@ -389,7 +396,7 @@ export function truncateToTwoDecimals(num: number | string): number {
|
||||
* @returns 是否临时菜
|
||||
*/
|
||||
export function isTemporaryGoods(goods: BaseCartItem): boolean {
|
||||
return !!goods.is_temporary || !!goods.isTemporary;
|
||||
return !!goods.is_temporary|| !!goods.isTemporary;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -466,8 +473,8 @@ export function filterThresholdGoods(
|
||||
return applicableProductIds.length === 0
|
||||
? baseEligibleGoods
|
||||
: baseEligibleGoods.filter((goods) =>
|
||||
applicableProductIds.includes(String(goods.product_id))
|
||||
); // 核心修正:用商品ID匹配
|
||||
applicableProductIds.includes(String(goods.product_id))
|
||||
); // 核心修正:用商品ID匹配
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -574,7 +581,7 @@ export function calcSingleGoodsRealPrice(
|
||||
const { isMember, memberDiscountRate, limitTimeDiscount: activity } = config;
|
||||
|
||||
//如果是增菜价格为0
|
||||
if (goods.is_gift || goods.isGift) {
|
||||
if (goods.is_gift||goods.isGift) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -587,15 +594,15 @@ export function calcSingleGoodsRealPrice(
|
||||
const memberPrice = new BigNumber(
|
||||
calcMemberPrice(goods, isMember, memberDiscountRate)
|
||||
);
|
||||
if (goods.is_time_discount || goods.isTimeDiscount) {
|
||||
if(goods.is_time_discount||goods.isTimeDiscount){
|
||||
//限时折扣优先
|
||||
return truncateToTwoDecimals(
|
||||
new BigNumber(goods.salePrice)
|
||||
.times((activity ? activity.discountRate : 100) / 100)
|
||||
.decimalPlaces(2, BigNumber.ROUND_UP)
|
||||
.toNumber()
|
||||
);
|
||||
}
|
||||
return truncateToTwoDecimals(
|
||||
new BigNumber(goods.salePrice)
|
||||
.times((activity?activity.discountRate:100) / 100)
|
||||
.decimalPlaces(2, BigNumber.ROUND_UP)
|
||||
.toNumber()
|
||||
);
|
||||
}
|
||||
// 3. 优先级3:营销活动折扣(如限时折扣,需按商品ID匹配活动)
|
||||
let isActivityApplicable = false;
|
||||
if (activity) {
|
||||
@@ -612,13 +619,14 @@ export function calcSingleGoodsRealPrice(
|
||||
if (!activity || !isActivityApplicable) {
|
||||
return memberPrice.toNumber();
|
||||
}
|
||||
|
||||
|
||||
//限时折扣优先或者会员价优先但是不是会员或者未开启会员价格时限时折扣优先
|
||||
if (
|
||||
activity.discountPriority == "limit-time" ||
|
||||
(activity.discountPriority == "vip-price" && !isMember) ||
|
||||
(activity.discountPriority == "vip-price" && isMember && !goods.memberPrice)
|
||||
) {
|
||||
)
|
||||
{
|
||||
//限时折扣优先
|
||||
return truncateToTwoDecimals(
|
||||
new BigNumber(goods.salePrice)
|
||||
@@ -665,9 +673,9 @@ export function calcGoodsOriginalAmount(goodsList: BaseCartItem[]): number {
|
||||
for (const goods of goodsList) {
|
||||
const availableNum = Math.max(0, goods.number - (goods.returnNum || 0));
|
||||
let basePrice = new BigNumber(0);
|
||||
if (goods.is_temporary || goods.isTemporary) {
|
||||
if (goods.is_temporary||goods.isTemporary) {
|
||||
basePrice = new BigNumber(goods?.discountSaleAmount ?? 0);
|
||||
} else if (goods.is_gift || goods.isGift) {
|
||||
} else if (goods.is_gift||goods.isGift) {
|
||||
basePrice = new BigNumber(0);
|
||||
} else {
|
||||
basePrice = new BigNumber(goods.skuData?.salePrice ?? goods.salePrice); // SKU原价优先
|
||||
@@ -956,8 +964,8 @@ export function calcPointDeduction(
|
||||
)
|
||||
? maxDeductByPoints
|
||||
: new BigNumber(rule.maxDeductionAmount || Infinity).isLessThan(maxLimitBn)
|
||||
? maxDeductByPoints
|
||||
: maxLimitBn;
|
||||
? maxDeductByPoints
|
||||
: maxLimitBn;
|
||||
|
||||
// 实际使用积分 = 抵扣金额 * 积分兑换比例
|
||||
const usedPoints = maxDeductAmount.multipliedBy(pointsPerYuanBn);
|
||||
@@ -1064,9 +1072,9 @@ export function calculateOrderCostSummary(
|
||||
// 2.2 计算满减基数(先扣新客立减)
|
||||
let baseAfterNewUserDiscount = new BigNumber(
|
||||
limitTimeDiscount &&
|
||||
limitTimeDiscount.id &&
|
||||
usedFullReductionActivity &&
|
||||
!usedFullReductionActivity.discountShare
|
||||
limitTimeDiscount.id &&
|
||||
usedFullReductionActivity &&
|
||||
!usedFullReductionActivity.discountShare
|
||||
? goodsRealAmount
|
||||
: goodsRealAmount
|
||||
)
|
||||
@@ -1089,7 +1097,6 @@ export function calculateOrderCostSummary(
|
||||
seatFee,
|
||||
packFee
|
||||
);
|
||||
|
||||
usedFullReductionThreshold = selectOptimalThreshold(
|
||||
usedFullReductionActivity.thresholds,
|
||||
usedFullReductionActivityFullAmount,
|
||||
@@ -1097,7 +1104,6 @@ export function calculateOrderCostSummary(
|
||||
goodsRealAmount,
|
||||
usedFullReductionActivity.discountShare || 0 // 与限时折扣同享规则
|
||||
);
|
||||
|
||||
// 2.4 计算满减实际减免金额
|
||||
fullReductionAmount = calcFullReductionAmount(
|
||||
baseAfterNewUserDiscount,
|
||||
@@ -1208,13 +1214,13 @@ export function calculateOrderCostSummary(
|
||||
.plus(packFee)
|
||||
.isGreaterThan(0)
|
||||
? new BigNumber(goodsRealAmount)
|
||||
.minus(newUserDiscount)
|
||||
.minus(fullReductionAmount)
|
||||
.minus(couponDeductionAmount)
|
||||
.minus(pointDeductionAmount)
|
||||
.plus(seatFee)
|
||||
.plus(packFee)
|
||||
.toNumber()
|
||||
.minus(newUserDiscount)
|
||||
.minus(fullReductionAmount)
|
||||
.minus(couponDeductionAmount)
|
||||
.minus(pointDeductionAmount)
|
||||
.plus(seatFee)
|
||||
.plus(packFee)
|
||||
.toNumber()
|
||||
: 0;
|
||||
|
||||
switch (merchantReductionConfig.type) {
|
||||
|
||||
Reference in New Issue
Block a user