コード例 #1
0
        /// <summary>
        ///     Sets the value.
        ///     根据前端页面表单HttpContext设置内容
        /// </summary>
        /// <param name="httpContext">The HTTP context.</param>
        public ServiceResult SetValue(HttpContext httpContext)
        {
            var activityModule = AutoMapping.SetValue <GroupBuyActivity>(httpContext); // 活动模块

            activityModule = JsonMapping.HttpContextToExtension <GroupBuyActivity>(activityModule, httpContext);
            var priceSytles =
                Resolve <IAutoConfigService>()
                .GetList <PriceStyleConfig>(r => r.Status == Status.Normal); // 状态不正常的商品,可能不支持价格类型
            var moneyTypes = Resolve <IAutoConfigService>().MoneyTypes();    // 所有货币类型
            var productId  = httpContext.Request.Form["ProductId"].ConvertToLong();
            var product    = Resolve <IProductService>().GetSingle(r => r.Id == productId);

            if (product == null)
            {
                return(ServiceResult.Failure("商品不存在"));
            }

            var priceStyleConfig = Resolve <IAutoConfigService>().GetList <PriceStyleConfig>()
                                   .FirstOrDefault(r => r.Id == product.PriceStyleId);

            if (product.MinCashRate == 0)
            {
                product.MinCashRate = priceStyleConfig.MinCashRate;
            }

            activityModule.SkuProducts.Foreach(r =>
            {
                r.GroupBuyDisplayPrice = Resolve <IProductGoodsService>().Resolve <IProductService>()
                                         .GetDisplayPrice(r.Price, priceStyleConfig.Id, priceStyleConfig.MinCashRate);
                // 如果商品中有价格参数,则使员商品中的最小抵现价格
                if (priceStyleConfig != null)
                {
                    var moneyConfig = moneyTypes.FirstOrDefault(e => e.Id == priceStyleConfig.MoneyTypeId);
                    if (moneyConfig?.RateFee == 0)
                    {
                        moneyConfig.RateFee = 1;
                    }
                    // 如果不是现金商品
                    if (priceStyleConfig.PriceStyle != PriceStyle.CashProduct)
                    {
                        r.MinPayCash  = Math.Round(r.Price * priceStyleConfig.MinCashRate, 2); // 最低可使用的现金资产
                        r.MaxPayPrice = Math.Round(r.Price * (1 - priceStyleConfig.MinCashRate) / moneyConfig.RateFee,
                                                   2);                                         // 最高可使用的现金资产
                    }
                    else
                    {
                        r.MaxPayPrice = 0;       // 现金商品,最高可使用的虚拟资产为0
                        r.MinPayCash  = r.Price; //现金商品,最低使用的现金为价格
                    }
                }
            });

            var result = ServiceResult.Success;

            result.ReturnObject = activityModule;
            return(result);
        }