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();
        }
예제 #2
0
        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();
        }
예제 #3
0
        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]));
        }