public void AddFlashSale(FlashSaleModel model) { CheckFlashSale(model); var product = DbFactory.Default.Get <ProductInfo>().Where(p => p.Id == model.ProductId).FirstOrDefault(); DbFactory.Default.InTransaction(() => { FlashSaleInfo flashSale = new FlashSaleInfo(); flashSale.Title = model.Title; flashSale.ShopId = model.ShopId; flashSale.ProductId = model.ProductId; flashSale.Status = model.Status; flashSale.BeginDate = DateTime.Parse(model.BeginDate); flashSale.EndDate = DateTime.Parse(model.EndDate); flashSale.CategoryName = model.CategoryName; flashSale.LimitCountOfThePeople = model.LimitCountOfThePeople; flashSale.SaleCount = model.SaleCount; flashSale.ImagePath = product.RelativePath; flashSale.MinPrice = model.Details.Min(p => p.Price); DbFactory.Default.Add(flashSale); foreach (var detail in model.Details) { FlashSaleDetailInfo fsd = new FlashSaleDetailInfo(); fsd.FlashSaleId = flashSale.Id; fsd.ProductId = flashSale.ProductId; fsd.SkuId = detail.SkuId; fsd.Price = detail.Price; fsd.TotalCount = detail.TotalCount; DbFactory.Default.Add(fsd); } }); }
public void UpdateFlashSale(FlashSaleModel model) { CheckFlashSale(model); FlashSaleInfo flashSale = DbFactory.Default.Get <FlashSaleInfo>().Where(p => p.Id == model.Id).FirstOrDefault(); if (flashSale == null) { throw new MallException("此活动已被删除"); } DbFactory.Default.InTransaction(() => { DbFactory.Default.Del <FlashSaleDetailInfo>().Where(p => p.ProductId == model.ProductId).Succeed(); if (flashSale.Status == FlashSaleInfo.FlashSaleStatus.WaitForAuditing) { if (flashSale.ProductId != model.ProductId) { var product = DbFactory.Default.Get <ProductInfo>().Where(p => p.Id == model.ProductId).FirstOrDefault(); flashSale.ImagePath = product.RelativePath; } flashSale.Title = model.Title; flashSale.ShopId = model.ShopId; flashSale.ProductId = model.ProductId; flashSale.BeginDate = DateTime.Parse(model.BeginDate); flashSale.CategoryName = model.CategoryName; flashSale.EndDate = DateTime.Parse(model.EndDate); flashSale.LimitCountOfThePeople = model.LimitCountOfThePeople; flashSale.MinPrice = model.Details.Min(p => p.Price); if (model.Status == FlashSaleInfo.FlashSaleStatus.WaitForAuditing) { flashSale.Status = FlashSaleInfo.FlashSaleStatus.WaitForAuditing; } DbFactory.Default.Update(flashSale); foreach (var detail in model.Details) { FlashSaleDetailInfo fsd = new FlashSaleDetailInfo(); fsd.ProductId = flashSale.ProductId; fsd.SkuId = detail.SkuId; fsd.Price = detail.Price; fsd.TotalCount = detail.TotalCount; fsd.FlashSaleId = flashSale.Id; DbFactory.Default.Add(fsd); } } else if (flashSale.Status == FlashSaleInfo.FlashSaleStatus.Ongoing) { flashSale.Title = model.Title; flashSale.CategoryName = model.CategoryName; flashSale.LimitCountOfThePeople = model.LimitCountOfThePeople; flashSale.EndDate = DateTime.Parse(model.EndDate); flashSale.MinPrice = model.Details.Min(p => p.Price); if (model.Status == FlashSaleInfo.FlashSaleStatus.WaitForAuditing) { flashSale.Status = FlashSaleInfo.FlashSaleStatus.WaitForAuditing; } DbFactory.Default.Update(flashSale); foreach (var detail in model.Details) { FlashSaleDetailInfo fsd = new FlashSaleDetailInfo(); fsd.ProductId = flashSale.ProductId; fsd.SkuId = detail.SkuId; fsd.Price = detail.Price; fsd.TotalCount = detail.TotalCount; fsd.FlashSaleId = flashSale.Id; DbFactory.Default.Add(fsd); } } }); }
///// <summary> ///// 获取限时抢购商品详情 ///// </summary> ///// <param name="id"></param> ///// <returns></returns> public object GetLimitBuyProduct(string openId, long countDownId) { CheckUserLogin(); ProductDetailModelForMobie model = new ProductDetailModelForMobie() { Product = new ProductInfoModel(), Shop = new ShopInfoModel(), Color = new CollectionSKU(), Size = new CollectionSKU(), Version = new CollectionSKU() }; ProductInfo product = null; ShopInfo shop = null; FlashSaleModel market = null; market = ServiceProvider.Instance <ILimitTimeBuyService> .Create.Get(countDownId); if (market == null || market.Status != FlashSaleInfo.FlashSaleStatus.Ongoing) { //可能参数是商品ID market = market == null ? ServiceProvider.Instance <ILimitTimeBuyService> .Create.GetFlaseSaleByProductId(countDownId) : market; if (market == null || market.Status != FlashSaleInfo.FlashSaleStatus.Ongoing) { //跳转到404页面 return(Json(new { Success = "false", ErrorMsg = "你所请求的限时购或者商品不存在!" })); } } if (market != null && (market.Status != FlashSaleInfo.FlashSaleStatus.Ongoing || DateTime.Parse(market.EndDate) < DateTime.Now)) { return(Json(new { Success = "true", IsValidLimitBuy = "false" })); } model.MaxSaleCount = market.LimitCountOfThePeople; model.Title = market.Title; product = ServiceProvider.Instance <IProductService> .Create.GetProduct(market.ProductId); bool hasSku = false; #region 商品SKU ProductTypeInfo typeInfo = ServiceProvider.Instance <ITypeService> .Create.GetType(product.TypeId); string colorAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.ColorAlias)) ? SpecificationType.Color.ToDescription() : typeInfo.ColorAlias; string sizeAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.SizeAlias)) ? SpecificationType.Size.ToDescription() : typeInfo.SizeAlias; string versionAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.VersionAlias)) ? SpecificationType.Version.ToDescription() : typeInfo.VersionAlias; List <object> SkuItemList = new List <object>(); List <object> Skus = new List <object>(); if (product.SKUInfo != null && product.SKUInfo.Count() > 0) { hasSku = true; #region 颜色 long colorId = 0, sizeId = 0, versionId = 0; List <object> colorAttributeValue = new List <object>(); List <string> listcolor = new List <string>(); foreach (var sku in product.SKUInfo) { var specs = sku.Id.Split('_'); if (specs.Count() > 0) { if (long.TryParse(specs[1], out colorId)) { } //相同颜色规格累加对应值 if (colorId != 0) { if (!listcolor.Contains(sku.Color)) { var c = product.SKUInfo.Where(s => s.Color.Equals(sku.Color)).Sum(s => s.Stock); var colorvalue = new { ValueId = colorId, UseAttributeImage = "False", Value = sku.Color, ImageUrl = Himall.Core.HimallIO.GetRomoteImagePath(sku.ShowPic) }; listcolor.Add(sku.Color); colorAttributeValue.Add(colorvalue); } } } } var color = new { AttributeName = colorAlias, AttributeId = product.TypeId, AttributeValue = colorAttributeValue }; if (colorId > 0) { SkuItemList.Add(color); } #endregion #region 容量 List <object> sizeAttributeValue = new List <object>(); List <string> listsize = new List <string>(); foreach (var sku in product.SKUInfo) { var specs = sku.Id.Split('_'); if (specs.Count() > 1) { if (long.TryParse(specs[2], out sizeId)) { } if (sizeId != 0) { if (!listsize.Contains(sku.Size)) { var ss = product.SKUInfo.Where(s => s.Size.Equals(sku.Size)).Sum(s1 => s1.Stock); var sizeValue = new { ValueId = sizeId, UseAttributeImage = false, Value = sku.Size, ImageUrl = Himall.Core.HimallIO.GetRomoteImagePath(sku.ShowPic) }; listsize.Add(sku.Size); sizeAttributeValue.Add(sizeValue); } } } } var size = new { AttributeName = sizeAlias, AttributeId = product.TypeId, AttributeValue = sizeAttributeValue }; if (sizeId > 0) { SkuItemList.Add(size); } #endregion #region 规格 List <object> versionAttributeValue = new List <object>(); List <string> listversion = new List <string>(); foreach (var sku in product.SKUInfo) { var specs = sku.Id.Split('_'); if (specs.Count() > 2) { if (long.TryParse(specs[3], out versionId)) { } if (versionId != 0) { if (!listversion.Contains(sku.Version)) { var v = product.SKUInfo.Where(s => s.Version.Equals(sku.Version)); var versionValue = new { ValueId = versionId, UseAttributeImage = false, Value = sku.Version, ImageUrl = Himall.Core.HimallIO.GetRomoteImagePath(sku.ShowPic) }; listversion.Add(sku.Version); versionAttributeValue.Add(versionValue); } } } } var version = new { AttributeName = versionAlias, AttributeId = product.TypeId, AttributeValue = versionAttributeValue }; if (versionId > 0) { SkuItemList.Add(version); } #endregion #region Sku值 foreach (var sku in product.SKUInfo) { FlashSaleDetailInfo detailInfo = ServiceProvider.Instance <ILimitTimeBuyService> .Create.GetDetail(sku.Id); var prosku = new { SkuItems = "", MemberPrices = "", SkuId = sku.Id, ProductId = product.Id, SKU = sku.Sku, Weight = 0, Stock = sku.Stock, WarningStock = sku.SafeStock, CostPrice = sku.CostPrice, SalePrice = sku.SalePrice,//限时抢购价格 StoreStock = 0, StoreSalePrice = 0, OldSalePrice = 0, ImageUrl = "", ThumbnailUrl40 = "", ThumbnailUrl410 = "", MaxStock = 15, FreezeStock = 0, ActivityStock = sku.Stock, //限时抢购库存 ActivityPrice = detailInfo.Price //限时抢购价格 }; Skus.Add(prosku); } #endregion } #endregion #region 店铺 shop = ServiceProvider.Instance <IShopService> .Create.GetShop(product.ShopId); var mark = ShopServiceMark.GetShopComprehensiveMark(shop.Id); model.Shop.PackMark = mark.PackMark; model.Shop.ServiceMark = mark.ServiceMark; model.Shop.ComprehensiveMark = mark.ComprehensiveMark; var comm = ServiceProvider.Instance <ICommentService> .Create.GetCommentsByProductId(product.Id); model.Shop.Name = shop.ShopName; model.Shop.ProductMark = (comm == null || comm.Count() == 0) ? 0 : comm.Average(p => (decimal)p.ReviewMark); model.Shop.Id = product.ShopId; model.Shop.FreeFreight = shop.FreeFreight; model.Shop.ProductNum = ServiceProvider.Instance <IProductService> .Create.GetShopOnsaleProducts(product.ShopId); var shopStatisticOrderComments = ServiceProvider.Instance <IShopService> .Create.GetShopStatisticOrderComments(product.ShopId); var productAndDescription = shopStatisticOrderComments.Where(c => c.CommentKey == StatisticOrderCommentsInfo.EnumCommentKey.ProductAndDescription).FirstOrDefault(); var sellerServiceAttitude = shopStatisticOrderComments.Where(c => c.CommentKey == StatisticOrderCommentsInfo.EnumCommentKey.SellerServiceAttitude).FirstOrDefault(); var sellerDeliverySpeed = shopStatisticOrderComments.Where(c => c.CommentKey == StatisticOrderCommentsInfo.EnumCommentKey.SellerDeliverySpeed).FirstOrDefault(); var productAndDescriptionPeer = shopStatisticOrderComments.Where(c => c.CommentKey == StatisticOrderCommentsInfo.EnumCommentKey.ProductAndDescriptionPeer).FirstOrDefault(); var sellerServiceAttitudePeer = shopStatisticOrderComments.Where(c => c.CommentKey == StatisticOrderCommentsInfo.EnumCommentKey.SellerServiceAttitudePeer).FirstOrDefault(); var sellerDeliverySpeedPeer = shopStatisticOrderComments.Where(c => c.CommentKey == StatisticOrderCommentsInfo.EnumCommentKey.SellerDeliverySpeedPeer).FirstOrDefault(); var productAndDescriptionMax = shopStatisticOrderComments.Where(c => c.CommentKey == StatisticOrderCommentsInfo.EnumCommentKey.ProductAndDescriptionMax).FirstOrDefault(); var productAndDescriptionMin = shopStatisticOrderComments.Where(c => c.CommentKey == StatisticOrderCommentsInfo.EnumCommentKey.ProductAndDescriptionMin).FirstOrDefault(); var sellerServiceAttitudeMax = shopStatisticOrderComments.Where(c => c.CommentKey == StatisticOrderCommentsInfo.EnumCommentKey.SellerServiceAttitudeMax).FirstOrDefault(); var sellerServiceAttitudeMin = shopStatisticOrderComments.Where(c => c.CommentKey == StatisticOrderCommentsInfo.EnumCommentKey.SellerServiceAttitudeMin).FirstOrDefault(); var sellerDeliverySpeedMax = shopStatisticOrderComments.Where(c => c.CommentKey == StatisticOrderCommentsInfo.EnumCommentKey.SellerDeliverySpeedMax).FirstOrDefault(); var sellerDeliverySpeedMin = shopStatisticOrderComments.Where(c => c.CommentKey == StatisticOrderCommentsInfo.EnumCommentKey.SellerDeliverySpeedMin).FirstOrDefault(); decimal defaultValue = 5; //宝贝与描述 if (productAndDescription != null && productAndDescriptionPeer != null) { model.Shop.ProductAndDescription = productAndDescription.CommentValue; } else { model.Shop.ProductAndDescription = defaultValue; } //卖家服务态度 if (sellerServiceAttitude != null && sellerServiceAttitudePeer != null) { model.Shop.SellerServiceAttitude = sellerServiceAttitude.CommentValue; } else { model.Shop.SellerServiceAttitude = defaultValue; } //卖家发货速度 if (sellerDeliverySpeedPeer != null && sellerDeliverySpeed != null) { model.Shop.SellerDeliverySpeed = sellerDeliverySpeed.CommentValue; } else { model.Shop.SellerDeliverySpeed = defaultValue; } if (ServiceProvider.Instance <IVShopService> .Create.GetVShopByShopId(shop.Id) == null) { model.Shop.VShopId = -1; } else { model.Shop.VShopId = ServiceProvider.Instance <IVShopService> .Create.GetVShopByShopId(shop.Id).Id; } List <object> coupons = new List <object>(); //优惠券 var result = GetCouponList(shop.Id);//取设置的优惠券 if (result != null) { var couponCount = result.Count(); model.Shop.CouponCount = couponCount; if (result.ToList().Count > 0) { foreach (var item in result.ToList()) { var couponInfo = new { CouponId = item.Id, CouponName = item.CouponName, Price = item.Price, SendCount = item.Num, UserLimitCount = item.PerMax, OrderUseLimit = item.OrderAmount, StartTime = item.StartTime.ToString("yyyy-MM-dd HH:mm:ss"), ClosingTime = item.EndTime.ToString("yyyy-MM-dd HH:mm:ss"), CanUseProducts = "", ObtainWay = item.ReceiveType, NeedPoint = item.NeedIntegral, UseWithGroup = false, UseWithPanicBuying = false, UseWithFireGroup = false, LimitText = item.CouponName, CanUseProduct = "店铺通用", StartTimeText = item.StartTime.ToString("yyyy.MM.dd"), ClosingTimeText = item.EndTime.ToString("yyyy.MM.dd") }; coupons.Add(couponInfo); } } } #endregion #region 商品 var consultations = ServiceProvider.Instance <IConsultationService> .Create.GetConsultations(product.Id); double total = product.Himall_ProductComments.Count(); double niceTotal = product.Himall_ProductComments.Count(item => item.ReviewMark >= 4); bool isFavorite = false; if (CurrentUser == null) { isFavorite = false; } else { isFavorite = ServiceProvider.Instance <IProductService> .Create.IsFavorite(product.Id, CurrentUser.Id); } var limitBuy = ServiceProvider.Instance <ILimitTimeBuyService> .Create.GetLimitTimeMarketItemByProductId(product.Id); var productImage = new List <string>(); for (int i = 1; i < 6; i++) { if (File.Exists(HttpContext.Current.Server.MapPath(product.RelativePath + string.Format("/{0}.png", i)))) { productImage.Add(Core.HimallIO.GetRomoteImagePath(product.RelativePath + string.Format("/{0}.png", i))); } } model.Product = new ProductInfoModel() { ProductId = product.Id, CommentCount = product.Himall_ProductComments.Count(), Consultations = consultations.Count(), ImagePath = productImage, IsFavorite = isFavorite, MarketPrice = product.MarketPrice, MinSalePrice = product.MinSalePrice, NicePercent = model.Shop.ProductMark == 0 ? 100 : (int)((niceTotal / total) * 100), ProductName = product.ProductName, ProductSaleStatus = product.SaleStatus, AuditStatus = product.AuditStatus, ShortDescription = product.ShortDescription, ProductDescription = product.ProductDescriptionInfo.ShowMobileDescription, IsOnLimitBuy = limitBuy != null }; #endregion //LogProduct(market.ProductId); //统计商品浏览量、店铺浏览人数 StatisticApplication.StatisticVisitCount(product.Id, product.ShopId); TimeSpan end = new TimeSpan(DateTime.Parse(market.EndDate).Ticks); TimeSpan start = new TimeSpan(DateTime.Now.Ticks); TimeSpan ts = end.Subtract(start); var second = ts.TotalSeconds < 0 ? 0 : ts.TotalSeconds; List <object> ProductImgs = new List <object>(); for (int i = 1; i < 5; i++) { ProductImgs.Add(Core.HimallIO.GetRomoteProductSizeImage(product.ImagePath, i, (int)ImageSize.Size_350)); } var countDownStatus = 0; if (market.Status == FlashSaleInfo.FlashSaleStatus.Ended) { countDownStatus = 4;//"PullOff"; //已下架 } else if (market.Status == FlashSaleInfo.FlashSaleStatus.Cancelled || market.Status == FlashSaleInfo.FlashSaleStatus.AuditFailed || market.Status == FlashSaleInfo.FlashSaleStatus.WaitForAuditing) { countDownStatus = 4;//"NoJoin"; //未参与 } else if (DateTime.Parse(market.BeginDate) > DateTime.Now) { countDownStatus = 6; // "AboutToBegin"; //即将开始 6 } else if (DateTime.Parse(market.EndDate) < DateTime.Now) { countDownStatus = 4;// "ActivityEnd"; //已结束 4 } else if (market.Status == FlashSaleInfo.FlashSaleStatus.Ended) { countDownStatus = 6;// "SoldOut"; //已抢完 } else { countDownStatus = 2;//"Normal"; //正常 2 } //Normal:正常 //PullOff:已下架 //NoJoin:未参与 //AboutToBegin:即将开始 //ActivityEnd:已结束 //SoldOut:已抢完 var json = new { Status = "OK", Data = new { CountDownId = market.Id,//.CountDownId, MaxCount = market.LimitCountOfThePeople, CountDownStatus = countDownStatus, StartDate = DateTime.Parse(market.BeginDate).ToString("yyyy/MM/dd HH:mm:ss"), EndDate = DateTime.Parse(market.EndDate).ToString("yyyy/MM/dd HH:mm:ss"), NowTime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss", System.Globalization.DateTimeFormatInfo.InvariantInfo), ProductId = product.Id, ProductName = product.ProductName, MetaDescription = model.Product.ProductDescription, ShortDescription = product.ShortDescription, ShowSaleCounts = product.SaleCounts.ToString(), Weight = product.Weight.ToString(), MinSalePrice = market.MinPrice.ToString("0.##"), //product.SKUInfo.Min(c => c.SalePrice).ToString("0.##"),//限时抢购价格 MaxSalePrice = product.MarketPrice, Stock = market.Quantity, //限时抢购库存 MarketPrice = product.MarketPrice, //product.SKUInfo.Min(c => c.SalePrice).ToString("0.##"), IsfreeShipping = product.Himall_Shops.FreeFreight, //product.Product.IsfreeShipping.ToString(), ThumbnailUrl60 = Core.HimallIO.GetRomoteProductSizeImage(product.ImagePath, 1, (int)ImageSize.Size_350), ProductImgs = ProductImgs, SkuItemList = SkuItemList, Skus = Skus, Freight = 0, Coupons = coupons, } }; return(json); }
///// <summary> ///// 获取限时抢购商品详情 ///// </summary> ///// <param name="id"></param> ///// <returns></returns> public JsonResult <Result <dynamic> > GetLimitBuyProduct(string openId, long countDownId) { //CheckUserLogin(); ProductDetailModelForMobie model = new ProductDetailModelForMobie() { Product = new ProductInfoModel(), Shop = new ShopInfoModel(), Color = new CollectionSKU(), Size = new CollectionSKU(), Version = new CollectionSKU() }; Entities.ShopInfo shop = null; FlashSaleModel market = null; market = ServiceProvider.Instance <ILimitTimeBuyService> .Create.Get(countDownId); if (market == null || market.Status != FlashSaleInfo.FlashSaleStatus.Ongoing) { //可能参数是商品ID market = market == null ? ServiceProvider.Instance <ILimitTimeBuyService> .Create.GetFlaseSaleByProductId(countDownId) : market; if (market == null || market.Status != FlashSaleInfo.FlashSaleStatus.Ongoing) { //跳转到404页面 return(Json(ErrorResult <dynamic>("你所请求的限时购或者商品不存在!"))); } } if (market != null && (market.Status != FlashSaleInfo.FlashSaleStatus.Ongoing || DateTime.Parse(market.EndDate) < DateTime.Now)) { return(JsonResult <dynamic>(new { IsValidLimitBuy = false })); } model.MaxSaleCount = market.LimitCountOfThePeople; model.Title = market.Title; var product = ServiceProvider.Instance <IProductService> .Create.GetProduct(market.ProductId); var description = ProductManagerApplication.GetProductDescription(product.Id); #region 根据运费模板获取发货地址 var freightTemplateService = ServiceApplication.Create <IFreightTemplateService>(); var template = freightTemplateService.GetFreightTemplate(product.FreightTemplateId); //string productAddress = string.Empty; //if (template != null) //{ // var fullName = ServiceApplication.Create<IRegionService>().GetFullName(template.SourceAddress); // if (fullName != null) // { // var ass = fullName.Split(' '); // if (ass.Length >= 2) // { // productAddress = ass[0] + " " + ass[1]; // } // else // { // productAddress = ass[0]; // } // } //} //model.ProductAddress = productAddress; model.FreightTemplate = template; #endregion #region 商品SKU Entities.TypeInfo typeInfo = ServiceProvider.Instance <ITypeService> .Create.GetType(product.TypeId); string colorAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.ColorAlias)) ? SpecificationType.Color.ToDescription() : typeInfo.ColorAlias; string sizeAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.SizeAlias)) ? SpecificationType.Size.ToDescription() : typeInfo.SizeAlias; string versionAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.VersionAlias)) ? SpecificationType.Version.ToDescription() : typeInfo.VersionAlias; List <object> SkuItemList = new List <object>(); List <object> Skus = new List <object>(); var skus = ProductManagerApplication.GetSKUs(product.Id); if (skus.Count > 0) { #region 颜色 long colorId = 0, sizeId = 0, versionId = 0; List <object> colorAttributeValue = new List <object>(); List <string> listcolor = new List <string>(); foreach (var sku in skus) { var specs = sku.Id.Split('_'); if (specs.Count() > 0 && !string.IsNullOrEmpty(sku.Color)) { if (long.TryParse(specs[1], out colorId)) { } //相同颜色规格累加对应值 if (colorId != 0) { if (!listcolor.Contains(sku.Color)) { var c = skus.Where(s => s.Color.Equals(sku.Color)).Sum(s => s.Stock); var colorvalue = new { ValueId = colorId, UseAttributeImage = "False", Value = sku.Color, ImageUrl = Himall.Core.HimallIO.GetRomoteImagePath(sku.ShowPic) }; listcolor.Add(sku.Color); colorAttributeValue.Add(colorvalue); } } } } var color = new { AttributeName = !string.IsNullOrWhiteSpace(product.ColorAlias) ? product.ColorAlias : colorAlias,//如果商品有自定义规格名称则用 AttributeId = product.TypeId, AttributeValue = colorAttributeValue, AttributeIndex = 0, }; if (colorId > 0) { SkuItemList.Add(color); } #endregion #region 容量 List <object> sizeAttributeValue = new List <object>(); List <string> listsize = new List <string>(); foreach (var sku in skus) { var specs = sku.Id.Split('_'); if (specs.Count() > 1) { if (long.TryParse(specs[2], out sizeId)) { } if (sizeId != 0) { if (!listsize.Contains(sku.Size)) { var ss = skus.Where(s => s.Size.Equals(sku.Size)).Sum(s1 => s1.Stock); var sizeValue = new { ValueId = sizeId, UseAttributeImage = false, Value = sku.Size, //ImageUrl = Himall.Core.HimallIO.GetRomoteImagePath(sku.ShowPic) }; listsize.Add(sku.Size); sizeAttributeValue.Add(sizeValue); } } } } var size = new { AttributeName = !string.IsNullOrWhiteSpace(product.SizeAlias) ? product.SizeAlias : sizeAlias, AttributeId = product.TypeId, AttributeValue = sizeAttributeValue, AttributeIndex = 1, }; if (sizeId > 0) { SkuItemList.Add(size); } #endregion #region 规格 List <object> versionAttributeValue = new List <object>(); List <string> listversion = new List <string>(); foreach (var sku in skus) { var specs = sku.Id.Split('_'); if (specs.Count() > 2) { if (long.TryParse(specs[3], out versionId)) { } if (versionId != 0) { if (!listversion.Contains(sku.Version)) { var v = skus.Where(s => s.Version.Equals(sku.Version)); var versionValue = new { ValueId = versionId, UseAttributeImage = false, Value = sku.Version, //ImageUrl = Himall.Core.HimallIO.GetRomoteImagePath(sku.ShowPic) }; listversion.Add(sku.Version); versionAttributeValue.Add(versionValue); } } } } var version = new { AttributeName = !string.IsNullOrWhiteSpace(product.VersionAlias) ? product.VersionAlias : versionAlias, AttributeId = product.TypeId, AttributeValue = versionAttributeValue, AttributeIndex = 2, }; if (versionId > 0) { SkuItemList.Add(version); } #endregion #region Sku值 foreach (var sku in skus) { FlashSaleDetailInfo detailInfo = ServiceProvider.Instance <ILimitTimeBuyService> .Create.GetDetail(sku.Id); var prosku = new { SkuItems = "", MemberPrices = "", SkuId = sku.Id, ProductId = product.Id, SKU = sku.Sku, Weight = 0, Stock = detailInfo == null? sku.Stock: Math.Min(detailInfo.TotalCount, sku.Stock), WarningStock = sku.SafeStock, CostPrice = sku.CostPrice, SalePrice = sku.SalePrice,//限时抢购价格 StoreStock = 0, StoreSalePrice = 0, OldSalePrice = 0, ImageUrl = "", ThumbnailUrl40 = "", ThumbnailUrl410 = "", MaxStock = 15, FreezeStock = 0, ActivityStock = sku.Stock, //限时抢购库存 ActivityPrice = detailInfo == null ? sku.SalePrice : detailInfo.Price //限时抢购价格 }; Skus.Add(prosku); } #endregion } #endregion #region 店铺 shop = ServiceProvider.Instance <IShopService> .Create.GetShop(product.ShopId); var vshopinfo = ServiceProvider.Instance <IVShopService> .Create.GetVShopByShopId(shop.Id); if (vshopinfo != null) { model.VShopLog = vshopinfo.WXLogo; model.Shop.VShopId = vshopinfo.Id; } else { model.Shop.VShopId = -1; model.VShopLog = string.Empty; } var mark = Web.Framework.ShopServiceMark.GetShopComprehensiveMark(shop.Id); model.Shop.PackMark = mark.PackMark; model.Shop.ServiceMark = mark.ServiceMark; model.Shop.ComprehensiveMark = mark.ComprehensiveMark; model.Shop.Name = shop.ShopName; model.Shop.ProductMark = CommentApplication.GetProductAverageMark(product.Id); model.Shop.Id = product.ShopId; model.Shop.FreeFreight = shop.FreeFreight; model.Shop.ProductNum = ServiceProvider.Instance <IProductService> .Create.GetShopOnsaleProducts(product.ShopId); var shopStatisticOrderComments = ShopApplication.GetStatisticOrderComment(product.ShopId); //宝贝与描述 model.Shop.ProductAndDescription = shopStatisticOrderComments.ProductAndDescription; //卖家服务态度 model.Shop.SellerServiceAttitude = shopStatisticOrderComments.SellerServiceAttitude; //卖家发货速度 model.Shop.SellerDeliverySpeed = shopStatisticOrderComments.SellerDeliverySpeed; if (ServiceProvider.Instance <IVShopService> .Create.GetVShopByShopId(shop.Id) == null) { model.Shop.VShopId = -1; } else { model.Shop.VShopId = ServiceProvider.Instance <IVShopService> .Create.GetVShopByShopId(shop.Id).Id; } List <object> coupons = new List <object>(); //优惠券 var result = GetCouponList(shop.Id);//取设置的优惠券 if (result != null) { var couponCount = result.Count(); model.Shop.CouponCount = couponCount; if (result.ToList().Count > 0) { foreach (var item in result.ToList()) { if (CurrentUser != null) {//登录才处理已领 var Receive = CouponApplication.GetReceiveStatus(CurrentUserId, item.ShopId, item.Id); if (Receive == 2 || Receive == 4) {//不符合领取条件 continue; } } var couponInfo = new { CouponId = item.Id, CouponName = item.CouponName, Price = item.Price, SendCount = item.Num, UserLimitCount = item.PerMax, OrderUseLimit = item.OrderAmount, StartTime = item.StartTime.ToString("yyyy-MM-dd HH:mm:ss"), ClosingTime = item.EndTime.ToString("yyyy-MM-dd HH:mm:ss"), CanUseProducts = "", ObtainWay = item.ReceiveType, NeedPoint = item.NeedIntegral, UseWithGroup = false, UseWithPanicBuying = false, UseWithFireGroup = false, LimitText = item.CouponName, CanUseProduct = item.UseArea == 1 ? "部分商品可用" : "全店通用", StartTimeText = item.StartTime.ToString("yyyy.MM.dd"), ClosingTimeText = item.EndTime.ToString("yyyy.MM.dd") }; coupons.Add(couponInfo); } } } #endregion #region 商品 var consultations = ServiceProvider.Instance <IConsultationService> .Create.GetConsultations(product.Id); var comments = CommentApplication.GetCommentsByProduct(product.Id); var total = comments.Count(); var niceTotal = comments.Count(item => item.ReviewMark >= 4); bool isFavorite = false; if (CurrentUser == null) { isFavorite = false; } else { isFavorite = ServiceProvider.Instance <IProductService> .Create.IsFavorite(product.Id, CurrentUser.Id); } var limitBuy = ServiceProvider.Instance <ILimitTimeBuyService> .Create.GetLimitTimeMarketItemByProductId(product.Id); var productImage = new List <string>(); for (int i = 1; i < 6; i++) { if (i == 1 || Himall.Core.HimallIO.ExistFile(product.RelativePath + string.Format("/{0}.png", i))) { productImage.Add(Core.HimallIO.GetRomoteImagePath(product.RelativePath + string.Format("/{0}.png", i))); } } model.Product = new ProductInfoModel() { ProductId = product.Id, CommentCount = CommentApplication.GetCommentCountByProduct(product.Id), Consultations = consultations.Count(), ImagePath = productImage, IsFavorite = isFavorite, MarketPrice = product.MarketPrice, MinSalePrice = product.MinSalePrice, NicePercent = model.Shop.ProductMark == 0 ? 100 : (int)((niceTotal / total) * 100), ProductName = product.ProductName, ProductSaleStatus = product.SaleStatus, AuditStatus = product.AuditStatus, ShortDescription = product.ShortDescription, ProductDescription = description.ShowMobileDescription, IsOnLimitBuy = limitBuy != null, MeasureUnit = product.MeasureUnit }; #endregion //LogProduct(market.ProductId); //统计商品浏览量、店铺浏览人数 StatisticApplication.StatisticVisitCount(product.Id, product.ShopId); TimeSpan end = new TimeSpan(DateTime.Parse(market.EndDate).Ticks); TimeSpan start = new TimeSpan(DateTime.Now.Ticks); TimeSpan ts = end.Subtract(start); var second = ts.TotalSeconds < 0 ? 0 : ts.TotalSeconds; List <object> ProductImgs = new List <object>(); for (int i = 1; i < 5; i++) { if (i == 1 || Himall.Core.HimallIO.ExistFile(product.RelativePath + string.Format("/{0}.png", i))) { ProductImgs.Add(Core.HimallIO.GetRomoteProductSizeImage(product.ImagePath, i, (int)ImageSize.Size_350)); } } var countDownStatus = 0; if (market.Status == FlashSaleInfo.FlashSaleStatus.Ended) { countDownStatus = 4;//"PullOff"; //已下架 } else if (market.Status == FlashSaleInfo.FlashSaleStatus.Cancelled || market.Status == FlashSaleInfo.FlashSaleStatus.AuditFailed || market.Status == FlashSaleInfo.FlashSaleStatus.WaitForAuditing) { countDownStatus = 4;//"NoJoin"; //未参与 } else if (DateTime.Parse(market.BeginDate) > DateTime.Now) { countDownStatus = 6; // "AboutToBegin"; //即将开始 6 } else if (DateTime.Parse(market.EndDate) < DateTime.Now) { countDownStatus = 4;// "ActivityEnd"; //已结束 4 } else if (market.Status == FlashSaleInfo.FlashSaleStatus.Ended) { countDownStatus = 6;// "SoldOut"; //已抢完 } else { countDownStatus = 2;//"Normal"; //正常 2 } long saleCounts = 0; if (countDownStatus == 2) { saleCounts = market.SaleCount; } else { saleCounts = product.SaleCounts + Himall.Core.Helper.TypeHelper.ObjectToInt(product.VirtualSaleCounts); } //Normal:正常 //PullOff:已下架 //NoJoin:未参与 //AboutToBegin:即将开始 //ActivityEnd:已结束 //SoldOut:已抢完 decimal discount = 1M;//限时购不考虑会员折 int addressId = 0; if (CurrentUser != null) { var addressInfo = ShippingAddressApplication.GetDefaultUserShippingAddressByUserId(CurrentUser.Id); if (addressInfo != null) { addressId = addressInfo.RegionId; } } //商品关联版式 string DescriptionPrefix = "", DescriptiondSuffix = ""; var iprodestempser = ServiceApplication.Create <IProductDescriptionTemplateService>(); if (description.DescriptionPrefixId != 0) { var desc = iprodestempser.GetTemplate(description.DescriptionPrefixId, product.ShopId); DescriptionPrefix = desc == null ? "" : desc.MobileContent; } if (description.DescriptiondSuffixId != 0) { var desc = iprodestempser.GetTemplate(description.DescriptiondSuffixId, product.ShopId); DescriptiondSuffix = desc == null ? "" : desc.MobileContent; } var productDescription = DescriptionPrefix + model.Product.ProductDescription + DescriptiondSuffix; string skuId = skus.FirstOrDefault()?.Id ?? string.Empty; return(JsonResult <dynamic>(new { CountDownId = market.Id,//.CountDownId, MaxCount = market.LimitCountOfThePeople, CountDownStatus = countDownStatus, StartDate = DateTime.Parse(market.BeginDate).ToString("yyyy/MM/dd HH:mm:ss"), EndDate = DateTime.Parse(market.EndDate).ToString("yyyy/MM/dd HH:mm:ss"), NowTime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss", System.Globalization.DateTimeFormatInfo.InvariantInfo), ProductId = product.Id, ProductName = product.ProductName, MetaDescription = productDescription.Replace("\"/Storage/Shop", "\"" + Core.HimallIO.GetRomoteImagePath("/Storage/Shop")),//替换链接 /Storage/Shop, ShortDescription = product.ShortDescription, ShowSaleCounts = saleCounts, IsSaleCountOnOff = SiteSettingApplication.SiteSettings.ProductSaleCountOnOff == 1, Weight = product.Weight.ToString(), MinSalePrice = market.MinPrice.ToString("0.##"), //限时抢购价格 MaxSalePrice = market.SkuMaxPrice, Stock = market.Quantity, //限时抢购库存 MarketPrice = product.MarketPrice, IsfreeShipping = shop.FreeFreight, ThumbnailUrl60 = Core.HimallIO.GetRomoteProductSizeImage(product.ImagePath, 1, (int)ImageSize.Size_350), ProductImgs = ProductImgs, SkuItemList = SkuItemList, Skus = Skus, Shop = model.Shop, VShopLog = Himall.Core.HimallIO.GetRomoteImagePath(model.VShopLog), Freight = GetFreightStr(product.Id, discount, skuId, addressId), Coupons = coupons, IsValidLimitBuy = true, CommentsNumber = CommentApplication.GetCommentCountByProduct(product.Id), VideoPath = string.IsNullOrWhiteSpace(product.VideoPath) ? string.Empty : Himall.Core.HimallIO.GetRomoteImagePath(product.VideoPath), MeasureUnit = string.IsNullOrEmpty(product.MeasureUnit)?"":product.MeasureUnit, //单位 SendTime = (model.FreightTemplate != null && !string.IsNullOrEmpty(model.FreightTemplate.SendTime) ? (model.FreightTemplate.SendTime + "h内发货") : ""), //运费模板发货时间 })); }