/// <summary> /// 计算 车品 使用 优惠券 使用所有的优惠券的 价格 /// </summary> /// <param name="_CarProductPriceModel"></param> /// <param name="coupons"></param> /// <returns></returns> private async Task <List <GetCouponRules> > GetCarProductUsedCouponPriceList(CarProductPriceModel _CarProductPriceModel, List <GetCouponRules> coupons) { List <GetCouponRules> models = new List <GetCouponRules>(); //获取所有 可用的优惠券 【此处获取的 是大券 的 pkid】 List <PromotionCouponRulesModel> usefulCoupons = await SelectProductPromotionGetRuleByOidsAsyn(_CarProductPriceModel); List <WebCouponActivityRuleModel> coupon = ActivityManager.SelectCouponRuleByCouponRulesPKID(usefulCoupons.Select(p => p.Pkid).ToList()); List <Guid> usefulCoupons_Pkid = coupon.Select(p => p.GetRuleGUID).Distinct().ToList(); foreach (var c in coupons) { //此处 model 需要重新赋值 不然 会产生覆盖的的问题 GetCouponRules model = new GetCouponRules() { UsedCouponPrice = c.UsedCouponPrice, UsedCouponProfit = c.UsedCouponProfit, GetRuleGUID = c.GetRuleGUID, Description = c.Description, Minmoney = c.Minmoney, Discount = c.Discount, CouponDuration = c.CouponDuration, CouponStartTime = c.CouponStartTime }; //需要 验证优惠券 对商品是否可用 Guid g = Guid.Empty; if (!Guid.TryParse(c.GetRuleGUID, out g)) { continue; } model.IsUseful = usefulCoupons_Pkid.Contains(g); //CheckCoupon(_CarProductPriceModel, c); if (model.IsUseful) { model.UsedCouponPrice = CalulateUseCouponPrice(_CarProductPriceModel, c); //券后毛利 = 券后价格 - 采购价格(代发商品,读取代发价格;非代发商品,读取采购价格) model.UsedCouponProfit = model.UsedCouponPrice - (_CarProductPriceModel.IsDaifa ? _CarProductPriceModel.ContractPrice : _CarProductPriceModel.PurchasePrice); //全网活动可用券 if (_CarProductPriceModel.IsFullNetUsePCode) { //全网活动券后价 var usedCouponPrice = CalulateUseCouponPrice(_CarProductPriceModel, c); model.UsedCouponPrice = usedCouponPrice < model.UsedCouponPrice ? usedCouponPrice : model.UsedCouponPrice; model.UsedCouponProfit = model.UsedCouponPrice - (_CarProductPriceModel.IsDaifa ? _CarProductPriceModel.ContractPrice : _CarProductPriceModel.PurchasePrice); } } models.Add(model); } return(models.OrderBy(p => p.UsedCouponPrice).ToList()); }
/// <summary> /// 计算 车品 使用单张优惠券的价格 /// </summary> /// <param name="price"></param> /// <param name="coupons"></param> /// <returns></returns> private decimal CalulateUseCouponPrice(CarProductPriceModel _CarProductPriceModel, GetCouponRules coupons) { //车品的售价 decimal sellPrice = _CarProductPriceModel.FlashSalePrice == 0 ? _CarProductPriceModel.OriginalPrice : _CarProductPriceModel.FlashSalePrice; // 优惠券 的 使用 最低价 decimal couponsMinmoney = (decimal)Convert.ToDouble(coupons.Minmoney); if (sellPrice <= couponsMinmoney)//车品售价 小于或等于 优惠券使用额度 { //使用优惠券 购买的最小 次数 int num = (int)Math.Ceiling(couponsMinmoney / sellPrice); //优惠券 使用后的价格 coupons.UsedCouponPrice = (num * sellPrice - (decimal)Convert.ToDouble(coupons.Discount)) / num; } else//车品售价 大于 优惠券使用额度 { coupons.UsedCouponPrice = sellPrice - (decimal)Convert.ToDouble(coupons.Discount); } return(coupons.UsedCouponPrice); }