/// <summary> /// </summary> /// <param name="view"></param> public ViewProductEdit GetPageView(ViewProductEdit view) { //var brandList = Service<IStoreBrandService>().GetListFromCache(); //view.BrandItems = SelectListItems.FromIEnumerable(brandList, r => r.Name, r => r.Id); view.ProductConfig = Resolve <IAutoConfigService>().GetValue <ProductConfig>(); view.PriceStyleItems = Resolve <IAutoConfigService>() .GetList <PriceStyleConfig>(r => r.Status == Status.Normal).OrderBy(r => r.SortOrder).ToList(); view.StoreId = view.Product.StoreId.ToObjectId(); if (!view.Product.StoreId.IsObjectIdNullOrEmpty()) { view.Store = Resolve <IStoreService>().GetSingle(r => r.Id == view.Product.StoreId.ToObjectId()); } if (view.Product.PriceStyleId.IsGuidNullOrEmpty()) { view.PriceStyleConfig = view.PriceStyleItems.FirstOrDefault(); } else { view.PriceStyleConfig = view.PriceStyleItems.FirstOrDefault(r => r.Id == view.Product.PriceStyleId); } return(view); }
public ActionResult Edit(ViewProductEdit model) { if (model.SelectedCategoriesId != null) { for (int i = 0; i < model.SelectedCategoriesId.Length; i++) { ShopCategory category = db.ShopCategories.Find(model.SelectedCategoriesId[i]); model.CategoriesSelected.Add(category); } } if (ModelState.IsValid) { ShopProduct product = db.ShopProducts.Include(p => p.ShopCategories).Include(p => p.ShopProductsBrand).Include(p => p.ShopProductsTaste).Where(p => p.Id == model.Id).SingleOrDefault(); product.Name = model.Name; product.Alias = Translit.TranslitString(model.Name); product.Description = model.Description; product.VendorCode = model.VendorCode; product.Weight = model.Weight.Value; product.Proteins = model.Proteins.Value; product.Fats = model.Fats.Value; product.Carbohydrates = model.Carbohydrates.Value; product.Kcal = model.Kcal.Value; //брэнд if (model.SelectedBrandId.HasValue) { product.ShopProductsBrand = db.ShopProductsBrands.Find(model.SelectedBrandId); } else { product.ShopProductsBrand = null; } // вкус if (model.SelectedTasteId.HasValue) { product.ShopProductsTaste = db.ShopProductsTastes.Find(model.SelectedTasteId); } else { product.ShopProductsTaste = null; } // катгории product.ShopCategories = model.CategoriesSelected; if (model.PortionsWeight.HasValue) { product.PortionsWeight = model.PortionsWeight.Value; } else { product.PortionsWeight = 0; } if (model.PortionsCount.HasValue) { product.PortionsCount = model.PortionsCount.Value; } else { product.PortionsCount = 0; } product.DateCreation = DateTime.Now; //сохранение фото товра if (model.PhotoFile != null) { string fileName = Guid.NewGuid().ToString(); string dirPath = HttpContext.Server.MapPath("~/Content/Images/Shop/Products"); product.PhotoName = Image.Save( model.PhotoFile, dirPath, null, fileName); } db.Entry(product).State = EntityState.Modified; db.SaveChanges(); return(RedirectToAction("Index")); } // все категории model.CategoriesAll = db.ShopCategories.OrderBy(c => c.Name).ToList(); // список вкусов List <ShopProductsTaste> tastes = db.ShopProductsTastes.OrderBy(c => c.Name).ToList(); model.TasteList = new SelectList(tastes, "Id", "Name"); // список брэндов List <ShopProductsBrand> brands = db.ShopProductsBrands.OrderBy(c => c.Name).ToList(); model.BrandList = new SelectList(brands, "Id", "Name"); return(View(model)); }
//========================================================== //========================================================== // GET: AdminPanel/Products/Edit/5 public ActionResult Edit(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } ShopProduct product = db.ShopProducts .Include(p => p.ShopProductsBrand) .Include(p => p.ShopProductsTaste) .Include(p => p.ShopCategories) .Where(p => p.Id == id).SingleOrDefault(); if (product == null) { return(HttpNotFound()); } ViewProductEdit model = new ViewProductEdit { Id = product.Id, Name = product.Name, Description = product.Description, VendorCode = product.VendorCode, Weight = product.Weight, Proteins = product.Proteins, Fats = product.Fats, Carbohydrates = product.Carbohydrates, Kcal = product.Kcal, PortionsWeight = product.PortionsWeight, PortionsCount = product.PortionsCount, PhotoName = product.PhotoName }; if (product.ShopProductsTaste != null) { model.SelectedTasteId = product.ShopProductsTaste.Id; } if (product.ShopProductsBrand != null) { model.SelectedBrandId = product.ShopProductsBrand.Id; } if (product.ShopCategories != null) { model.CategoriesSelected = product.ShopCategories; } // все категории model.CategoriesAll = db.ShopCategories.OrderBy(c => c.Name).ToList(); // список вкусов List <ShopProductsTaste> tastes = db.ShopProductsTastes.OrderBy(c => c.Name).ToList(); model.TasteList = new SelectList(tastes, "Id", "Name"); // список брэндов List <ShopProductsBrand> brands = db.ShopProductsBrands.OrderBy(c => c.Name).ToList(); model.BrandList = new SelectList(brands, "Id", "Name"); return(View(model)); }
/// <summary> /// </summary> /// <param name="productId"></param> /// <param name="storeId"></param> public ViewProductEdit GetViewProductEdit(long productId, ObjectId storeId) { var viewProduct = new ViewProductEdit { //管理员获取商品 Service<IProductService>().图片不需要处理 Product = GetSingle(productId) }; if (viewProduct.Product != null) { // viewProduct.ThreeAddress = Resolve<IRegionService>().GetThreeAddress(viewProduct.Product.RegionId); viewProduct.ProductDetail = viewProduct.Product.Detail; viewProduct.ProductDetail.ProductDetailExtension = viewProduct.ProductDetail.Extension.DeserializeJson <ProductDetailExtension>(); viewProduct.Category = Resolve <ICategoryService>().GetSingle(viewProduct.Product.CategoryId); viewProduct.CategoryId = viewProduct.Category.Id; // 将商品值赋值到View中 viewProduct = AutoMapping.SetValue(viewProduct.Product, viewProduct); //将商品详情值赋值到AutoConfig中 viewProduct = AutoMapping.SetValue(viewProduct.ProductDetail, viewProduct); viewProduct.PriceStyleId = viewProduct.Product.PriceStyleId; // viewProduct.DeliveryTemplate = Service<IDeliveryTemplateService>().GetSingle(e => e.Id == viewProduct.ProductDetail.DeliveryTemplateId);//运费模板 viewProduct.Category = Resolve <ICategoryService>().GetSingle(viewProduct.Product.CategoryId); //商品类型 viewProduct.Classes = Resolve <IRelationIndexService>().GetRelationIds <ProductClassRelation>(productId); //商品分类 viewProduct.ProductStatus = viewProduct.Product.ProductStatus; viewProduct.Tags = Resolve <IRelationIndexService>().GetRelationIds <ProductTagRelation>(productId); if (viewProduct.Product.Id > 0) { viewProduct.Store = Resolve <IStoreService>().GetSingle(e => e.Id == storeId); //供应商 //viewProduct.ClassesStore = Service<IRelationIndexService>().GetRelationIds<StoreClassRelation>(productId);///店铺分类 viewProduct.ProductSkus = Resolve <IProductSkuService>() .GetList(o => o.ProductId == viewProduct.Product.Id)?.ToList(); } } else { var config = Ioc.Resolve <IAutoConfigService>().GetValue <ProductConfig>(); var maxId = "" + (Resolve <IProductService>().MaxId() + 1); maxId = maxId.PadLeft(3, '0'); viewProduct.Product = new Product { Bn = config.Bn + maxId, PurchasePrice = config.PurchasePrice, MarketPrice = config.MarketPrice, CostPrice = config.CostPrice, Price = config.Price, Weight = config.Weight, Stock = config.Stock }; viewProduct.ProductDetail = new ProductDetail(); viewProduct.Category = new Category(); viewProduct.ProductStatus = ProductStatus.Online; viewProduct.Product.ProductExtensions = new ProductExtensions { ProductSkus = new List <ProductSku>(), ProductCategory = new Category(), ProductThums = new List <ProductThum>() }; viewProduct.PriceStyleId = Resolve <IAutoConfigService>().GetList <PriceStyleConfig>().FirstOrDefault().Id; viewProduct.ProductStatus = ProductStatus.Online; var Categorys = Resolve <ICategoryService>().GetList(r => r.Status == Status.Normal); if (Categorys.Count() > 0) { viewProduct.CategoryId = Categorys.FirstOrDefault().Id; } } viewProduct.Intro = viewProduct.ProductDetail.Intro; viewProduct.MobileIntro = viewProduct.ProductDetail.MobileIntro; viewProduct.MetaTitle = viewProduct.ProductDetail.MetaTitle; viewProduct.MetaKeywords = viewProduct.ProductDetail.MetaKeywords; viewProduct.MetaDescription = viewProduct.ProductDetail.MetaDescription; viewProduct.Images = viewProduct.ProductDetail.ImageJson.DeserializeJson <List <ProductThum> >() .Select(o => o.OriginalUrl).JoinToString(","); viewProduct.ProductConfig = Resolve <IAutoConfigService>().GetValue <ProductConfig>(); viewProduct.PriceStyleItems = Resolve <IAutoConfigService>() .GetList <PriceStyleConfig>(r => r.Status == Status.Normal).OrderBy(r => r.SortOrder).ToList(); if (!viewProduct.Product.StoreId.IsObjectIdNullOrEmpty()) { viewProduct.Store = Resolve <IStoreService>().GetSingle(r => r.Id == viewProduct.Product.StoreId.ToObjectId()); } if (viewProduct.Product.PriceStyleId.IsGuidNullOrEmpty()) { viewProduct.PriceStyleConfig = viewProduct.PriceStyleItems.FirstOrDefault(); } else { viewProduct.PriceStyleConfig = viewProduct.PriceStyleItems.FirstOrDefault(r => r.Id == viewProduct.Product.PriceStyleId); } return(viewProduct); }
/// <summary> /// Mappings the product value. /// 商品属性值处理 /// </summary> /// <param name="viewProduct">The 视图 product.</param> /// <param name="httpRequest">The HTTP request.</param> /// <param name="updateView">The 更新 视图.</param> private ServiceResult MappingProductValue(ViewProductEdit viewProduct, HttpRequest httpRequest, out ViewProductEdit updateView) { updateView = new ViewProductEdit(); if (viewProduct.Product.PurchasePrice > viewProduct.Product.CostPrice) { return(ServiceResult.FailedWithMessage("进货价不能大于成本价")); } //如果是后台添加商品,则商品关联平台店铺 if (viewProduct.IsAdminAddProduct) { var planform = Resolve <IStoreService>().PlatformStore(); if (planform == null) { return(ServiceResult.FailedWithMessage("请先添加平台店铺")); } viewProduct.Product.StoreId = planform.Id.ToString(); } if (viewProduct.Product.StoreId.IsObjectIdNullOrEmpty()) { return(ServiceResult.FailedWithMessage("请为商品选择店铺")); } if (viewProduct.SkuJson.IsNullOrEmpty()) { return(ServiceResult.FailedWithMessage("请设置商品Sku")); } var category = Resolve <ICategoryService>().GetSingle(viewProduct.CategoryId); if (category == null) { return(ServiceResult.FailedWithMessage("未选择商品类目,或者商品类目已不存在")); } if (Repository <IProductRepository>() .Count(r => r.Bn == viewProduct.Product.Bn && r.Id != viewProduct.Product.Id) > 0) { return(ServiceResult.FailedWithMessage("该货号已存在,请使用其他货号")); } #region product表属性处理 /// 商品表类目,价格模式,状态,显示价格处理 //viewProduct.Product.CategoryId = (Guid)viewProduct.CategoryId; //viewProduct.Product.PriceStyleId = (Guid)viewProduct.PriceStyleId; //viewProduct.Product.RegionId = viewProduct.RegionId; // 对商品进行动态赋值 viewProduct.Product = AutoMapping.SetValue(viewProduct, viewProduct.Product); // 动态赋值 viewProduct.Product.DisplayPrice = Resolve <IProductService>().GetDisplayPrice(viewProduct.Product.Price, viewProduct.Product.PriceStyleId, viewProduct.Product.MinCashRate); viewProduct.Product.ModifiedTime = DateTime.Now; #endregion product表属性处理 #region productDetail表属性,处理 if (viewProduct.ProductDetail == null) { viewProduct.ProductDetail = new ProductDetail(); } viewProduct.ProductDetail = AutoMapping.SetValue(viewProduct, viewProduct.ProductDetail); // 动态赋值 viewProduct.ProductDetail.Extension = ObjectExtension.ToJson(viewProduct.ProductDetail.ProductDetailExtension); // 扩展属性序列 ///商品属性值处理 viewProduct.ProductDetail.PropertyJson = Resolve <ICategoryService>() .AddOrUpdateOrDeleteProductCategoryData(viewProduct.Product, httpRequest); if (viewProduct.ProductDetail.PropertyJson.IsNullOrEmpty()) { return(ServiceResult.FailedWithMessage("商品属性值处理失败,不能为空")); } // 商品图片处理 viewProduct.ProductDetail.ImageJson = CreateImage(viewProduct.Product, viewProduct.Images); #endregion productDetail表属性,处理 updateView = viewProduct; return(ServiceResult.Success); }
/// <summary> /// </summary> /// <param name="viewProduct"></param> /// <param name="httpRequest"></param> public ServiceResult AddOrUpdate(ViewProductEdit viewProduct, HttpRequest httpRequest) { var result = MappingProductValue(viewProduct, httpRequest, out viewProduct); // 商品属性值处理 if (!result.Succeeded) { return(result); } var context = Repository <IProductRepository>().RepositoryContext; context.BeginTransaction(); try { viewProduct.ProductDetail.ProductId = viewProduct.Product.Id; viewProduct.Product.RegionId = httpRequest.Form["Country"].ConvertToLong(1); if (viewProduct.Product.Id == 0) { Resolve <IProductService>().Add(viewProduct.Product); // 添加Shop_product 表 viewProduct.ProductDetail.ProductId = viewProduct.Product.Id; Resolve <IProductDetailService>().Add(viewProduct.ProductDetail); // 添加Shop_productdetai表 } else { viewProduct.Product.StoreId = viewProduct.StoreId.ToString(); //供应商Id单独处理 Resolve <IProductService>().Update(viewProduct.Product); // 更新Shop_product 表 Resolve <IProductDetailService>() .UpdateNoTracking(viewProduct.ProductDetail); // 更新Shop_productdetai表 } // 更新商品Sku var skuResult = Resolve <IProductSkuService>() .AddUpdateOrDelete(viewProduct.Product, viewProduct.ProductSkus); // 更新Shop_productsku表 if (!skuResult.Succeeded) { throw new ValidException(skuResult.ToString()); } //添加商品分类和标签 Resolve <IRelationIndexService>() .AddUpdateOrDelete <ProductClassRelation>(viewProduct.Product.Id, viewProduct.Classes.ToStr()); Resolve <IRelationIndexService>() .AddUpdateOrDelete <ProductTagRelation>(viewProduct.Product.Id, viewProduct.Tags.ToStr()); context.SaveChanges(); context.CommitTransaction(); } catch (Exception ex) { context.RollbackTransaction(); return(ServiceResult.FailedWithMessage("更新失败:" + ex.Message)); } finally { context.DisposeTransaction(); } //删除缓存 var cacheKey = "ApiProduct_" + viewProduct.Product.Id; ObjectCache.Remove(cacheKey); // 更新商品Sku价格 Resolve <IProductSkuService>().AutoUpdateSkuPrice(viewProduct.Product.Id); return(result); }