void StatisticPayProduct(DateTime statisticStartDate, DateTime statisticEndDate) { Himall.Entity.Entities entity = new Himall.Entity.Entities(); //时间段内已支付预约单 var payOrders = from o in entity.OrderInfo join i in entity.OrderItemInfo on o.Id equals i.OrderId where o.PayDate.HasValue && o.PayDate.Value >= statisticStartDate && o.PayDate.Value < statisticEndDate select new { OrderId = o.Id, OrderDate = o.OrderDate, ShopId = o.ShopId, ProductId = i.ProductId, ProductName = i.ProductName, TotalAmount = i.RealTotalPrice, //实际上是金额 OrderProductQuantity = i.Quantity, UserId = o.UserId }; var payOrderGroups = payOrders.GroupBy(e => e.ProductId); List <ProductVistiInfo> productVisitRange = new List <ProductVistiInfo>(); var pids = payOrderGroups.Select(e => e.Key).Distinct(); var oldProductVisits = entity.ProductVistiInfo.Where(e => e.Date == statisticStartDate && pids.Contains(e.ProductId)).ToList(); foreach (var g in payOrderGroups) { ProductVistiInfo productVisit = oldProductVisits.FirstOrDefault(e => e.ProductId == g.Key); if (productVisit == null) { productVisit = new ProductVistiInfo(); productVisitRange.Add(productVisit); //使用量、使用金额在预约单逻辑里有实时处理,如果没有记录则进行统计 productVisit.SaleCounts = g.Sum(e => e.OrderProductQuantity); productVisit.SaleAmounts = g.Sum(e => e.TotalAmount); } productVisit.Date = statisticStartDate; productVisit.ProductId = g.Key; productVisit.PayUserCounts = g.Select(e => e.UserId).Distinct().Count(); productVisit.StatisticFlag = true; var item = g.FirstOrDefault(); if (item != null) { productVisit.ShopId = item.ShopId; } } //将没有付款记录的统计信息,统一修改为已统计 var noPayOrdersStatistic = oldProductVisits.Where(e => !pids.Any(p => p == e.ProductId)); foreach (var v in noPayOrdersStatistic) { v.StatisticFlag = true; } entity.ProductVistiInfo.AddRange(productVisitRange); entity.SaveChanges(); }
private void UpdateProductVisti(OrderRefundInfo refund, DateTime payDate) { OrderItemInfo orderItemInfo = refund.OrderItemInfo; ProductInfo productInfo = new ProductInfo(); ProductVistiInfo productVistiInfo = new ProductVistiInfo(); if (refund.RefundMode == OrderRefundInfo.OrderRefundMode.OrderRefund) { List <OrderItemInfo> list = ( from d in context.OrderItemInfo where d.OrderId == refund.OrderId select d).ToList(); foreach (OrderItemInfo orderItemInfo1 in list) { productInfo = context.ProductInfo.FirstOrDefault((ProductInfo d) => d.Id == orderItemInfo1.ProductId); if (productInfo != null) { ProductInfo saleCounts = productInfo; saleCounts.SaleCounts = saleCounts.SaleCounts - orderItemInfo1.Quantity; } productVistiInfo = context.ProductVistiInfo.FindBy((ProductVistiInfo d) => d.ProductId == orderItemInfo1.ProductId && (d.Date == payDate.Date)).FirstOrDefault(); if (productVistiInfo == null) { continue; } ProductVistiInfo saleCounts1 = productVistiInfo; saleCounts1.SaleCounts = saleCounts1.SaleCounts - orderItemInfo.Quantity; ProductVistiInfo saleAmounts = productVistiInfo; saleAmounts.SaleAmounts = saleAmounts.SaleAmounts - refund.Amount; } } else if (refund.IsReturn) { productInfo = context.ProductInfo.FirstOrDefault((ProductInfo d) => d.Id == refund.OrderItemInfo.ProductId); if (productInfo != null) { ProductInfo productInfo1 = productInfo; productInfo1.SaleCounts = productInfo1.SaleCounts - refund.OrderItemInfo.ReturnQuantity; } productVistiInfo = context.ProductVistiInfo.FindBy((ProductVistiInfo item) => item.ProductId == orderItemInfo.ProductId && (item.Date == payDate.Date)).FirstOrDefault(); if (productVistiInfo != null) { ProductVistiInfo productVistiInfo1 = productVistiInfo; productVistiInfo1.SaleCounts = productVistiInfo1.SaleCounts - orderItemInfo.Quantity; ProductVistiInfo saleAmounts1 = productVistiInfo; saleAmounts1.SaleAmounts = saleAmounts1.SaleAmounts - refund.Amount; } } context.SaveChanges(); }
public ActionResult Search(string keywords = "", string exp_keywords = "", long cid = 0L, long b_id = 0L, string a_id = "", int orderKey = 1, int orderType = 1, int pageNo = 1, int pageSize = 60) { int i; long valueId; long num; string str; ProductSearch productSearch = new ProductSearch() { shopId = 0, BrandId = b_id, CategoryId = cid, Ex_Keyword = exp_keywords, Keyword = keywords, OrderKey = orderKey, OrderType = orderType == 1, AttrIds = new List <string>(), PageNumber = pageNo, PageSize = pageSize }; ProductSearch productSearch1 = productSearch; string str1 = a_id.Replace("%40", "@"); char[] chrArray = new char[] { '@' }; string[] strArrays = str1.Split(chrArray); for (i = 0; i < strArrays.Length; i++) { string str2 = strArrays[i]; if (!string.IsNullOrWhiteSpace(str2)) { productSearch1.AttrIds.Add(str2); } } IProductService productService = ServiceHelper.Create <IProductService>(); PageModel <ProductInfo> pageModel = productService.SearchProduct(productSearch1); int total = pageModel.Total; ViewBag.Total = total; ProductInfo[] array = pageModel.Models.ToArray(); dynamic viewBag = base.ViewBag; num = (base.CurrentUser == null ? 0 : base.CurrentUser.Id); viewBag.BrowsedHistory = BrowseHistrory.GetBrowsingProducts(13, num); CategoryInfo category = ServiceHelper.Create <ICategoryService>().GetCategory(productSearch1.CategoryId); string str3 = (category == null ? string.Empty : category.Name); BrandInfo brand = ServiceHelper.Create <IBrandService>().GetBrand(b_id) ?? new BrandInfo(); string str4 = (brand == null ? "" : brand.Name); string str5 = (string.IsNullOrEmpty(keywords) ? str3 : keywords); base.ViewBag.keywords = (string.IsNullOrEmpty(str5) ? str4 : str5); ViewBag.exp_keywords = exp_keywords; if (pageModel.Total == 0) { return(View()); } var categoryId = from prod in array orderby prod.CategoryId group prod by prod.CategoryId into G select new { Key = G.Key, Path = G.FirstOrDefault().CategoryPath }; List <CategoryJsonModel> categoryJsonModels = new List <CategoryJsonModel>(); foreach (var variable in categoryId) { string path = variable.Path; char[] chrArray1 = new char[] { '|' }; if (path.Split(chrArray1).Length != 2) { string path1 = variable.Path; chrArray = new char[] { '|' }; if (path1.Split(chrArray).Length != 3) { continue; } string path2 = variable.Path; chrArray = new char[] { '|' }; long num1 = long.Parse(path2.Split(chrArray)[1]); string path3 = variable.Path; chrArray = new char[] { '|' }; InitialCategory(categoryJsonModels, num1, long.Parse(path3.Split(chrArray)[2])); } else { string path4 = variable.Path; chrArray = new char[] { '|' }; long num2 = long.Parse(path4.Split(chrArray)[0]); string path5 = variable.Path; chrArray = new char[] { '|' }; InitialCategory(categoryJsonModels, num2, long.Parse(path5.Split(chrArray)[1])); } } List <BrandInfo> brandInfos = new List <BrandInfo>(); IEnumerable <long> nums = ( from a in array where a.BrandId != 0 select a.BrandId).Distinct <long>(); IQueryable <BrandInfo> brands = from a in ServiceHelper.Create <IBrandService>().GetBrands("") where nums.Contains(a.Id) select a; brandInfos = brands.ToList(); List <TypeAttributesModel> typeAttributesModels = new List <TypeAttributesModel>(); var collection = from p in array group p by p.CategoryId into G select new { Key = G.Key, Count = G.Count() } into pp orderby pp.Count descending select pp; long key = collection.ToList()[0].Key; array = ( from p in array orderby p.CategoryId.Equals(key) descending select p).ToArray(); if (collection.Count() <= 20) { IEnumerable <ProductInfo> productInfos = from p in array where p.CategoryId.Equals(key) select p; foreach (ProductInfo productInfo in productInfos) { if (System.IO.File.Exists(Server.MapPath(productInfo.ImagePath + string.Format("/{0}.png", 1)))) { if (!System.IO.File.Exists(Server.MapPath(productInfo.ImagePath + string.Format("/{0}_{1}.png", 1, base.CurrentSiteSetting.CategoryProductPictureSize)))) { string str8 = Server.MapPath(productInfo.ImagePath + string.Format("/{0}_{1}.png", 1, base.CurrentSiteSetting.CategoryProductPictureSize)); ImageHelper.CreateThumbnail(Server.MapPath(productInfo.ImagePath + string.Format("/{0}.png", 1)), str8, int.Parse(base.CurrentSiteSetting.CategoryProductPictureSize), int.Parse(base.CurrentSiteSetting.CategoryProductPictureSize)); } } ProductAttributeInfo[] productAttributeInfoArray = productService.GetProductAttribute(productInfo.Id).ToArray(); ProductAttributeInfo[] productAttributeInfoArray1 = productAttributeInfoArray; for (i = 0; i < productAttributeInfoArray1.Length; i++) { ProductAttributeInfo productAttributeInfo = productAttributeInfoArray1[i]; if (typeAttributesModels.Any((TypeAttributesModel p) => p.AttrId == productAttributeInfo.AttributeId)) { TypeAttributesModel typeAttributesModel = typeAttributesModels.FirstOrDefault((TypeAttributesModel p) => p.AttrId == productAttributeInfo.AttributeId); if (!typeAttributesModel.AttrValues.Any((TypeAttrValue p) => p.Id == productAttributeInfo.ValueId.ToString())) { if (productAttributeInfo.AttributesInfo.AttributeValueInfo.FirstOrDefault((AttributeValueInfo a) => a.Id == productAttributeInfo.ValueId) != null) { List <TypeAttrValue> attrValues = typeAttributesModel.AttrValues; TypeAttrValue typeAttrValue = new TypeAttrValue(); valueId = productAttributeInfo.ValueId; typeAttrValue.Id = valueId.ToString(); typeAttrValue.Name = productAttributeInfo.AttributesInfo.AttributeValueInfo.FirstOrDefault((AttributeValueInfo a) => a.Id == productAttributeInfo.ValueId).Value; attrValues.Add(typeAttrValue); } } } else { TypeAttributesModel typeAttributesModel1 = new TypeAttributesModel() { AttrId = productAttributeInfo.AttributeId, AttrValues = new List <TypeAttrValue>(), Name = productAttributeInfo.AttributesInfo.Name }; TypeAttributesModel typeAttributesModel2 = typeAttributesModel1; foreach (AttributeValueInfo attributeValueInfo in productAttributeInfo.AttributesInfo.AttributeValueInfo) { if (!((IEnumerable <ProductAttributeInfo>)productAttributeInfoArray).Any((ProductAttributeInfo p) => p.ValueId == attributeValueInfo.Id)) { continue; } List <TypeAttrValue> typeAttrValues = typeAttributesModel2.AttrValues; TypeAttrValue value = new TypeAttrValue(); valueId = attributeValueInfo.Id; value.Id = valueId.ToString(); value.Name = attributeValueInfo.Value; typeAttrValues.Add(value); } typeAttributesModels.Add(typeAttributesModel2); } } } } Dictionary <string, string> strs = new Dictionary <string, string>(); foreach (string attrId in productSearch1.AttrIds) { long num3 = 0; chrArray = new char[] { '\u005F' }; long.TryParse(attrId.Split(chrArray)[0], out num3); long num4 = 0; chrArray = new char[] { '\u005F' }; long.TryParse(attrId.Split(chrArray)[1], out num4); AttributeInfo attributeInfo = ServiceHelper.Create <IProductService>().GetAttributeInfo(num3); AttributeValueInfo attributeValueInfo1 = attributeInfo.AttributeValueInfo.FirstOrDefault((AttributeValueInfo v) => v.Id == num4); string str6 = string.Concat(attributeInfo.Name, ':', attributeValueInfo1.Value); string str7 = ""; foreach (string attrId1 in productSearch1.AttrIds) { if (attrId1.Equals(attrId)) { if (productSearch1.AttrIds.Count() != 1) { continue; } str7 = attrId1; } else { str7 = string.Concat(str7, attrId1, '@'); } } chrArray = new char[] { '@' }; strs.Add(str6, str7.TrimEnd(chrArray)); } ViewBag.Attrs = typeAttributesModels; ViewBag.Brands = brandInfos; ViewBag.Category = categoryJsonModels; ViewBag.cid = cid; ViewBag.b_id = b_id; ViewBag.a_id = a_id; ViewBag.orderKey = orderKey; ViewBag.orderType = orderType; dynamic obj = base.ViewBag; str = (b_id == 0 ? "" : brandInfos.FirstOrDefault((BrandInfo b) => b.Id.Equals(b_id)).Name); obj.BrandName = str; ViewBag.AttrDic = strs; base.ViewBag.Logined = (base.CurrentUser != null ? 1 : 0); switch (orderKey) { case 2: { ProductInfo[] productInfoArray = array; for (i = 0; i < productInfoArray.Length; i++) { ProductInfo productInfo1 = productInfoArray[i]; ProductVistiInfo productVistiInfo = productInfo1.Himall_ProductVistis.FirstOrDefault(); productInfo1.OrderCounts = (productVistiInfo == null || !productVistiInfo.OrderCounts.HasValue ? 0 : productVistiInfo.OrderCounts.Value); } array = ( from p in array orderby p.OrderCounts descending select p).ToArray(); break; } case 3: { if (orderType != 2) { array = ( from p in array orderby p.MinSalePrice select p).ToArray(); break; } else { array = ( from p in array orderby p.MinSalePrice descending select p).ToArray(); break; } } case 4: { array = ( from p in array orderby p.ProductConsultationInfo.Count() descending select p).ToArray(); break; } case 5: { array = ( from p in array orderby p.AddedDate descending select p).ToArray(); break; } } PagingInfo pagingInfo = new PagingInfo() { CurrentPage = productSearch1.PageNumber, ItemsPerPage = pageSize, TotalItems = total }; ViewBag.pageInfo = pagingInfo; CategoryInfo categoryInfo = ServiceHelper.Create <ICategoryService>().GetCategory(cid); if (categoryInfo != null && categoryInfo.Depth == 3) { array = ( from p in array where p.CategoryId == cid select p).ToArray(); } return(View(array ?? new ProductInfo[0])); }