mirror of
http://git.coreshop.cn/jianweie/coreshoppro.git
synced 2025-12-06 19:53:27 +08:00
【新增】优惠券及全局优惠的【指定商品减固定金额】【指定商品打X折】【指定商品一口价】,增加针对订单符合条件商品是只单个数量计算,还是针对满足条件商品的所有数量计算优惠。
【优化】订单详情不在针对优惠条件下,修改商品sku保存的优惠后单品售价,防止出现优惠模式下,购买多个同样商品,但是只计算一个商品数量优惠的情况,可能导致明细合计与订单计算合计歧义。 【修复】修复优惠券及全局优惠【指定商品每第几件减去指定金额】多次满足条件不叠加计算的问题。 【修复】修复优惠券未在领取有效期内,但是可以领取的问题。
This commit is contained in:
@@ -258,6 +258,7 @@ namespace CoreCms.Net.Services
|
||||
{
|
||||
if (!parameters.ContainsKey("money")) return 0;
|
||||
var objMoney = parameters["money"].ObjectToDecimal(0);
|
||||
var isApplyToNum = parameters["isApplyToNum"].ObjectToInt(1);
|
||||
|
||||
decimal promotionMoney = 0;
|
||||
//判断极端情况,减的太多,超过商品单价了,那么就最多减到0
|
||||
@@ -265,11 +266,12 @@ namespace CoreCms.Net.Services
|
||||
{
|
||||
objMoney = cartProducts.products.price;
|
||||
}
|
||||
cartProducts.products.price = Math.Round(cartProducts.products.price - objMoney, 2);
|
||||
//此处不存储优惠后单价,防止出现针对单个产品,多个数量情况下,单一优惠券无法针对每个数量的商品进行计算售价。
|
||||
//cartProducts.products.price = Math.Round(cartProducts.products.price - objMoney, 2);
|
||||
//此次商品促销一共优惠了多少钱
|
||||
promotionMoney = promotionInfo.type == (int)GlobalEnumVars.PromotionType.Coupon ? objMoney : Math.Round(cartProducts.nums * objMoney, 2);
|
||||
promotionMoney = promotionInfo.type == (int)GlobalEnumVars.PromotionType.Coupon ? isApplyToNum == 1 ? objMoney : Math.Round(cartProducts.nums * objMoney, 2) : Math.Round(cartProducts.nums * objMoney, 2);
|
||||
//设置商品优惠总金额
|
||||
cartProducts.products.promotionAmount = Math.Round(cartProducts.products.promotionAmount + objMoney, 2);
|
||||
cartProducts.products.promotionAmount = Math.Round(cartProducts.products.promotionAmount + promotionMoney, 2);
|
||||
//设置商品的实际销售金额(单品)
|
||||
cartProducts.products.amount = Math.Round(cartProducts.products.amount - promotionMoney, 2);
|
||||
return promotionMoney;
|
||||
@@ -286,13 +288,22 @@ namespace CoreCms.Net.Services
|
||||
{
|
||||
if (!parameters.ContainsKey("discount")) return 0;
|
||||
var objDiscount = parameters["discount"].ObjectToDecimal(0);
|
||||
var isApplyToNum = parameters["isApplyToNum"].ObjectToInt(1);
|
||||
|
||||
//判断参数是否设置的正确
|
||||
if (objDiscount >= 10 || objDiscount <= 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
decimal promotionMoney = 0;
|
||||
decimal goodsPrice = cartProducts.products.price;
|
||||
cartProducts.products.price = Math.Round(Math.Round(Math.Round(cartProducts.products.price * objDiscount, 3) * 10, 2) / 100, 2);
|
||||
//此处不存储优惠后单价,防止出现针对单个产品,多个数量情况下,单一优惠券无法针对每个数量的商品进行计算售价。
|
||||
//cartProducts.products.price = Math.Round(Math.Round(Math.Round(cartProducts.products.price * objDiscount, 3) * 10, 2) / 100, 2);
|
||||
var productsPrice = Math.Round(Math.Round(Math.Round(cartProducts.products.price * objDiscount, 3) * 10, 2) / 100, 2);
|
||||
|
||||
//单品优惠的金额
|
||||
var pmoney = Math.Round(goodsPrice - cartProducts.products.price, 2);
|
||||
promotionMoney = promotionInfo.type == (int)GlobalEnumVars.PromotionType.Coupon ? pmoney : Math.Round(cartProducts.nums * pmoney, 2);
|
||||
var pmoney = Math.Round(goodsPrice - productsPrice, 2);
|
||||
var promotionMoney = promotionInfo.type == (int)GlobalEnumVars.PromotionType.Coupon ? isApplyToNum == 1 ? pmoney : Math.Round(cartProducts.nums * pmoney, 2) : Math.Round(cartProducts.nums * pmoney, 2);
|
||||
//设置商品优惠总金额
|
||||
cartProducts.products.promotionAmount = Math.Round(cartProducts.products.promotionAmount + promotionMoney, 2);
|
||||
//设置商品的实际销售总金额
|
||||
@@ -306,6 +317,7 @@ namespace CoreCms.Net.Services
|
||||
{
|
||||
if (!parameters.ContainsKey("money")) return 0;
|
||||
var objMoney = parameters["money"].ObjectToDecimal(0);
|
||||
var isApplyToNum = parameters["isApplyToNum"].ObjectToInt(1);
|
||||
|
||||
//如果一口价比商品价格高,那么就不执行了
|
||||
decimal promotionMoney = 0;
|
||||
@@ -314,10 +326,12 @@ namespace CoreCms.Net.Services
|
||||
return promotionMoney;
|
||||
}
|
||||
var goodsPrice = (decimal)cartProducts.products.price;
|
||||
cartProducts.products.price = Math.Round(objMoney, 2);
|
||||
//此处不存储优惠后单价,防止出现针对单个产品,多个数量情况下,单一优惠券无法针对每个数量的商品进行计算售价。
|
||||
//cartProducts.products.price = Math.Round(objMoney, 2);
|
||||
var productsPrice = Math.Round(objMoney, 2);
|
||||
//单品优惠的金额
|
||||
var pmoney = Math.Round(goodsPrice - cartProducts.products.price, 2);
|
||||
promotionMoney = promotionInfo.type == (int)GlobalEnumVars.PromotionType.Coupon ? pmoney : Math.Round(cartProducts.nums * pmoney, 2);
|
||||
var pmoney = Math.Round(goodsPrice - productsPrice, 2);
|
||||
promotionMoney = promotionInfo.type == (int)GlobalEnumVars.PromotionType.Coupon ? isApplyToNum == 1 ? pmoney : Math.Round(cartProducts.nums * pmoney, 2) : Math.Round(cartProducts.nums * pmoney, 2);
|
||||
//设置商品优惠总金额
|
||||
cartProducts.products.promotionAmount = Math.Round(cartProducts.products.promotionAmount + promotionMoney, 2);
|
||||
//设置商品的实际销售总金额
|
||||
@@ -344,11 +358,12 @@ namespace CoreCms.Net.Services
|
||||
|
||||
if (cartProducts.nums >= num)
|
||||
{
|
||||
//var promotionNum = buyNum / num;
|
||||
var pmoney = Math.Round(objMoney / buyNum, 2); //单品优惠的金额
|
||||
var goodsPrice = (decimal)cartProducts.products.price;
|
||||
cartProducts.products.price = goodsPrice - pmoney; //优惠后的平均价格
|
||||
promotionMoney = Math.Round(cartProducts.nums * pmoney, 2);//优惠金额
|
||||
var promotionNum = buyNum / num;
|
||||
//var pmoney = Math.Round(objMoney / buyNum, 2); //单品优惠的金额
|
||||
//var goodsPrice = (decimal)cartProducts.products.price;
|
||||
//此处不存储优惠后单价,防止出现针对单个产品,多个数量情况下,单一优惠券无法针对每个数量的商品进行计算售价。
|
||||
//cartProducts.products.price = goodsPrice - pmoney; //优惠后的平均价格
|
||||
promotionMoney = Math.Round(promotionNum * objMoney, 2);//优惠金额
|
||||
|
||||
//设置商品优惠总金额
|
||||
cartProducts.products.promotionAmount = Math.Round(cartProducts.products.promotionAmount + promotionMoney, 2);
|
||||
|
||||
@@ -684,9 +684,10 @@ namespace CoreCms.Net.Services
|
||||
public async Task<WebApiCallBack> ReceiveCoupon(int promotionId)
|
||||
{
|
||||
var jm = new WebApiCallBack();
|
||||
|
||||
var dt = DateTime.Now;
|
||||
var where = PredicateBuilder.True<CoreCmsPromotion>();
|
||||
where = where.And(p => p.endTime > DateTime.Now); //判断优惠券失效时间 是否可领取
|
||||
where = where.And(p => p.endTime > dt); //判断优惠券失效时间 是否可领取
|
||||
//where = where.And(p => p.startTime < dt);
|
||||
where = where.And(p => p.isEnable == true); //启用状态
|
||||
where = where.And(p => p.type == (int)GlobalEnumVars.PromotionType.Coupon); //促销 类型
|
||||
where = where.And(p => p.isAutoReceive == true); //自动领取状态
|
||||
@@ -699,6 +700,12 @@ namespace CoreCms.Net.Services
|
||||
{
|
||||
jm.data = info;
|
||||
//判断最大领取数量
|
||||
if (info.endTime < dt || info.startTime > dt)
|
||||
{
|
||||
jm.status = false;
|
||||
jm.msg = "请在领取时间范围内领取";
|
||||
return jm;
|
||||
}
|
||||
if (info.maxRecevieNums == 0)
|
||||
{
|
||||
jm.status = true;
|
||||
|
||||
Reference in New Issue
Block a user