/// <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;

            if (_CarProductPriceModel.IsFullNetUsePCode)
            {
                sellPrice = _CarProductPriceModel.FullNetActivityPrice;
            }

            // 优惠券 的 使用 最低价
            decimal couponsMinmoney = (decimal)Convert.ToDouble(coupons.Minmoney);

            if (sellPrice <= couponsMinmoney && sellPrice > 0)//车品售价 小于或等于 优惠券使用额度
            {
                //使用优惠券 购买的最小 次数
                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);
        }
        /// <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());
        }
示例#3
0
        /// <summary>
        ///计算 车品使用 优惠券的详情
        /// </summary>
        /// <param name="couponRulePKID"></param>
        /// <returns></returns>
        public async Task <JsonResult> CalulateCarProductUsedCouponPriceList(string carProductPKID, string couponsString)
        {
            try
            {
                List <GetCouponRules> coupons = JsonConvert.DeserializeObject <List <GetCouponRules> >(couponsString);
                CarProductPriceModel  _CarProductPriceModel = await CarProductPriceManager.GetShopProductsByPidsAsync(carProductPKID);

                List <GetCouponRules> rules = await GetCarProductUsedCouponPriceList(_CarProductPriceModel, coupons);

                return(Json(new { Result = 1, Data = rules }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception ex)
            {
                return(Json(new { Result = 0, Message = ex.Message }, JsonRequestBehavior.AllowGet));
            }
        }
示例#4
0
        /// <summary>
        /// 根据车品的oid 获取 所有可用的优惠券
        /// </summary>
        /// <param name="price"></param>
        /// <returns></returns>
        private async Task <List <PromotionCouponRulesModel> > SelectProductPromotionGetRuleByOidsAsyn(CarProductPriceModel _CarProductPriceModel)
        {
            List <PromotionCouponRulesModel> models = new List <PromotionCouponRulesModel>();

            using (PromotionClient client = new PromotionClient())
            {
                OperationResult <IEnumerable <PromotionCouponRulesModel> > res = await client.SelectPromotionCouponRulesByProducrIDAsync(new string[] { _CarProductPriceModel.PID }, null);

                if (res.Success)
                {
                    models = res.Result.ToList();
                }
                return(models);
            }
        }