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