Example #1
0
        /// <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));
        }
Example #4
0
        /// <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);
        }
Example #5
0
        /// <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);
        }
Example #6
0
        /// <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);
        }