Exemple #1
0
        /// <summary>
        /// 获取产品最小价
        /// </summary>
        /// <param name="productId"></param>
        /// <param name="mIds"></param>
        /// <param name="nums"></param>
        /// <returns></returns>
        public static ProductPriceView GetProductMinPrice(int id, int city)
        {
            DateTime time = DateTime.Now;

            //获取时间
            using (var uk = DalContext.UnitWork())
            {
                var repSkuPrice     = uk.Get <SkuPrice>();
                var repSkuArea      = uk.Get <SkuArea>();
                var repPriceTemplet = uk.Get <PriceTemplet>();
                var repPriceItem    = uk.Get <PriceTempletItem>();
                var skuAreaId       = repSkuArea.TableNoTracking.Where(o => o.ProductId == id && o.CityId == city).Select(o => o.Id).ToList();
                var realPrice       = repSkuPrice.TableNoTracking.Where(o => o.ProductId == id && skuAreaId.Contains(o.SkuAreaId)).OrderBy(o => o.Price).Select(o => new { o.Price }).FirstOrDefault();
                var priceItem       = (from i in repPriceItem.TableNoTracking
                                       join t in repPriceTemplet.TableNoTracking on i.PriceTempletId equals t.Id
                                       join p in repSkuPrice.TableNoTracking on i.ProductId equals p.ProductId
                                       where i.ProductId == id && t.State == PriceTempletStateEnum.启用 && t.StartTime <= time && t.EndTime >= time && skuAreaId.Contains(i.SkuAreaId)
                                       select new
                {
                    Price = p.Price,
                    NowPrice = i.Price
                }).OrderBy(o => o.Price).FirstOrDefault();
                //获取价格
                ProductPriceView productPrice = new ProductPriceView();
                if (realPrice != null)
                {
                    productPrice.Price    = realPrice.Price;
                    productPrice.NowPrice = realPrice.Price;
                }
                if (realPrice != null && priceItem != null)
                {
                    if (realPrice.Price <= priceItem.NowPrice)
                    {
                        productPrice.Price    = realPrice.Price;
                        productPrice.NowPrice = realPrice.Price;
                    }
                    if (realPrice.Price > priceItem.NowPrice)
                    {
                        productPrice.Price    = priceItem.Price;
                        productPrice.NowPrice = priceItem.NowPrice;
                    }
                }
                return(productPrice);
            }
        }
Exemple #2
0
        public ActionResult Details(string id)
        {
            ProductPriceDetailView productPriceDetailView = new ProductPriceDetailView();

            #region Access Check
            bool hasPermission = GetEmployee().IsGuaranteed("ProductPrice_Read");
            if (!hasPermission)
            {
                ModelState.AddModelError("", "AccessDenied");
                return(View(productPriceDetailView));
            }
            #endregion

            ProductPriceView productPriceView = this.GetProductPriceView(id);

            productPriceDetailView.ProductPriceView = productPriceView;
            productPriceDetailView.EmployeeView     = GetEmployee();

            return(View(productPriceDetailView));
        }
        public GetProductPriceResponse GetProductPrice(GetRequest request)
        {
            GetProductPriceResponse response = new GetProductPriceResponse();

            try
            {
                ProductPrice     productPrice     = new ProductPrice();
                ProductPriceView productPriceView = productPrice.ConvertToProductPriceView();

                productPrice = _productPriceRepository.FindBy(request.ID);
                if (productPrice != null)
                {
                    productPriceView = productPrice.ConvertToProductPriceView();
                }

                response.ProductPriceView = productPriceView;
            }
            catch (Exception ex)
            {
            }

            return(response);
        }
Exemple #4
0
        /// <summary>
        /// 获取价格
        /// </summary>
        /// <param name="productId"></param>
        /// <param name="areaid"></param>
        /// <param name="time"></param>
        /// <param name="skuNames"></param>
        /// <param name="units"></param>
        /// <param name="memberLevel"></param>
        /// <returns></returns>
        public static ProductPriceView GetProductPrice(int productId, int areaid, DateTime time, Dictionary <int, string> skuNames, Dictionary <int, int> units, MemberLevel memberLevel)
        {
            //获取时间
            DayOfWeek dayOfWeek = time.DayOfWeek;
            TimeSpan  timeSpan  = TimeSpan.Parse(time.GetDateTimeFormats('t')[0]);
            string    skun      = "," + string.Join(",", skuNames.Select(o => o.Value).ToList()) + ",";

            using (var uk = DalContext.UnitWork())
            {
                var skuPriceRep = uk.Get <SkuPrice>();
                var skuAreaRep  = uk.Get <SkuArea>();
                var skuTimeRep  = uk.Get <SkuTime>();

                #region 判断
                //判断地区是否服务
                int numArea = skuAreaRep.TableNoTracking.Count(o => o.ProductId == productId && o.AreaId == areaid);
                if (numArea == 0)
                {
                    throw new Exception("产品不在服务地区范围内");
                }
                //判断时间是否服务
                int numTime = skuTimeRep.TableNoTracking.Count(o => o.ProductId == productId && o.Week == dayOfWeek && o.StartTime <= timeSpan && o.EndTime >= timeSpan);
                if (numTime == 0)
                {
                    throw new Exception("产品不在服务时间范围内");
                }
                #endregion

                var priceTempletItemRep = uk.Get <PriceTempletItem>();
                var priceTempletRep     = uk.Get <PriceTemplet>();

                var data = (from s in skuPriceRep.TableNoTracking
                            join a in skuAreaRep.TableNoTracking on s.SkuAreaId equals a.Id
                            join t in skuTimeRep.TableNoTracking on s.SkuTimeId equals t.Id
                            where s.ProductId == productId && s.SkuValue == skun && a.AreaId == areaid && t.Week == dayOfWeek && t.StartTime <= timeSpan && t.EndTime >= timeSpan
                            select s).OrderBy(o => o.Id).FirstOrDefault();

                if (data == null)
                {
                    throw new Exception("查找不到价格,当前选择的产品组合不服务");
                }



                #region 查询产品价格模板是否存在价格 (isItem判断是否存在价格)
                //根据已获取的产品价格Id 去获取价格模板的价格
                //根据产品Id获取价格模板的价格
                List <PriceTempletItem> priceItems = priceTempletItemRep.TableNoTracking.Where(o => o.ProductId == productId && o.SkuPriceId.Contains("," + data.Id.ToString() + ",") && o.MemberLevel.Contains("," + memberLevel + ",")).ToList();
                List <int> priceTempletIds         = priceItems.Select(o => o.PriceTempletId).ToList();
                var        priceTemplets           = priceTempletRep.TableNoTracking.Where(o => priceTempletIds.Contains(o.Id));
                foreach (var priceItem in priceItems)
                {
                    List <int>     skuTimeIds    = priceItem.SkuTimeId.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(o => Convert.ToInt32(o)).ToList();
                    List <SkuTime> priceItemTime = skuTimeRep.TableNoTracking.Where(o => skuTimeIds.Contains(o.Id)).ToList();
                    var            priceTemplet  = priceTemplets.FirstOrDefault(o => o.Id == priceItem.PriceTempletId);
                    if (priceTemplet != null && priceTemplet.State == PriceTempletStateEnum.启用)
                    {
                        if (time >= priceTemplet.StartTime && time <= priceTemplet.EndTime)
                        {
                            foreach (var t in priceItemTime)
                            {
                                //判断sku时间
                                if (dayOfWeek == t.Week && timeSpan >= t.StartTime && timeSpan <= t.EndTime)
                                {
                                    data.Price           = priceItem.Price;
                                    data.AdditionalPrice = priceItem.AdditionalPrice;
                                }
                            }
                        }
                    }
                }

                #endregion
                ProductPriceView dataPrice = new ProductPriceView();
                dataPrice.NowPrice = data.Price;
                int unitsRide = 1;
                foreach (var u in units)
                {
                    unitsRide = unitsRide * u.Value;
                }
                dataPrice.TotalPrice = data.Price * unitsRide + data.AdditionalPrice;
                return(dataPrice);
            }
        }