public ActionResult SaveProducts(ListSellProductModel model) { model.CorrectSellProducts = (List<SellProductModel>)Session["CorrectProducts"]; var errors = ModelState.Values.Where(x => x.Errors.Count > 0); //Trạng thái khi lưu xuống db int countUpdate = 0; int countInsert = 0; List<List<SellProductModel>> dupSellProduct = new List<List<SellProductModel>>(); foreach (var product in model.CorrectSellProducts) { SmartBuyEntities db = new SmartBuyEntities(); //Trùng data var productNameFirst = product.Name.Split(';').First(); // Cắt chuỗi var dupMarket = db.Markets.Where(m => m.Name.Equals(product.MarketName)).FirstOrDefault(); var dupProduct = db.Products.Where(p => p.Name.Equals(productNameFirst)).FirstOrDefault(); var dupProductDictionary = db.Dictionaries.Where(p => p.Name.Equals(productNameFirst)).FirstOrDefault(); //Trung hoan toan if (dupMarket != null & dupProduct != null) { TrungHoanToan(ref countUpdate, ref countInsert, product, db, dupMarket, dupProduct); } else if (dupMarket == null & dupProduct != null) // Trùng Tên sản phẩm { countInsert = TrungTenSanPham(countInsert, product, db, dupProduct); } else if (dupMarket != null & dupProduct == null) // Trùng Market { var results = TrungMarket(ref countInsert, product, db, productNameFirst, dupMarket, dupProductDictionary); if (results != null) { dupSellProduct.Add(results); } } else //Insert sellProduct mới { countInsert = AddNewProduct(countInsert, product, db, productNameFirst, dupProductDictionary); } } if (dupSellProduct.Count() > 0) { TempData["DictionaryProduct"] = dupSellProduct; } Session.Remove("CorrectProducts"); Session.Remove("duplicateProducts"); Session["duplicateProducts"] = dupSellProduct; TempData["UpdateMessage"] = "Có " + countUpdate + " sản phẩm được cập nhật giá."; TempData["InsertMessage"] = "Có " + countInsert + " sản phẩm được lưu mới."; return RedirectToAction("UploadProduct"); }
public ActionResult UploadProduct(HttpPostedFileBase excelFile) { if (excelFile != null) { Guid guid = Guid.NewGuid(); string savedFileName = "~/UploadedExcelFiles/" + guid + excelFile.FileName; excelFile.SaveAs(Server.MapPath(savedFileName)); ExcelHelper excelHelper = new ExcelHelper(); List<SellProductModel> sellProductCollection = new List<SellProductModel>(); List<SellProductModel> sellProductCorrectCollection = new List<SellProductModel>(); List<SellProductModel> sellProductErrorCollection = new List<SellProductModel>(); ListSellProductModel model = new ListSellProductModel(); //Catch exception string errorName = ""; string errorMarket = ""; string errorPrice = ""; int errorCount = 0; try { sellProductCorrectCollection = excelHelper.ReadDataCorrect((Server.MapPath(savedFileName))); sellProductErrorCollection = excelHelper.ReadDataError((Server.MapPath(savedFileName)), out errorName, out errorMarket, out errorPrice, out errorCount); model.CorrectSellProducts = sellProductCorrectCollection; model.InCorrectSellProducts = sellProductErrorCollection; model.ExceptionName = errorName; model.ExceptionMarket = errorMarket; model.ExceptionPrice = errorPrice; model.ErrorCount = errorCount; List<string> errorNameLines = new List<string>(); List<string> errorMarketNameLines = new List<string>(); List<string> errorPriceLines = new List<string>(); foreach (var product in sellProductErrorCollection) { var errorNameLine = ""; var errorMarketNameLine = ""; var errorPriceLine = ""; if (product.Name.Length < 5 || product.Name.Length > 100) { errorNameLine += product.RowNumber; } if (product.MarketName.Length < 5 || product.MarketName.Length > 100) { errorMarketNameLine += product.RowNumber; } if (product.Price < 1 || product.Price > 10000) { errorPriceLine += product.RowNumber; } if (errorNameLine != product.Name && errorNameLine != "") { errorNameLines.Add(errorNameLine); } if (errorMarketNameLine != product.MarketName && errorMarketNameLine != "") { errorMarketNameLines.Add(errorMarketNameLine); } if (errorPriceLine != "") { errorPriceLines.Add(errorPriceLine); } } model.ErrorNameLines = errorNameLines; model.ErrorMarketNameLines = errorMarketNameLines; model.ErrorPriceLines = errorPriceLines; TempData["CorrectProducts"] = sellProductCorrectCollection; Session["CorrectProducts"] = sellProductCorrectCollection; } catch (Exception exception) { model.Exception = exception.Message; model.ExceptionName = exception.Message; model.ExceptionMarket = exception.Message; model.ExceptionPrice = errorPrice; model.ErrorCount = errorCount; } //Compare items in Excel List<SellProductModel> compareListProduct = sellProductCorrectCollection; List<List<SellProductModel>> results = new List<List<SellProductModel>>(); for (int i = 0; i < compareListProduct.Count; i++) { List<SellProductModel> result = new List<SellProductModel>(); for (int j = i + 1; j < compareListProduct.Count; j++) { if (compareListProduct[i].MarketName == compareListProduct[j].MarketName) { var percentage = CompareStringHelper.CompareString(compareListProduct[i].Name.Split(';').First(), compareListProduct[j].Name.Split(';').First()); if (percentage > 0.7 && percentage < 1) { if (result.Count() == 0) { result.Add(compareListProduct[i]); } result.Add(compareListProduct[j]); compareListProduct.Remove(compareListProduct[j]); } else if (percentage == 1) { compareListProduct[i].Name += ";" + compareListProduct[j].Name ; compareListProduct[i].Price = compareListProduct[j].Price; compareListProduct.Remove(compareListProduct[j]); } } } if (result.Count() != 0) { compareListProduct.Remove(compareListProduct[i]); i = i - 1; results.Add(result); } } model.duplicateCorrectProduct = results; model.duplicateCorrectProductCount = results.Count(); Session["duplicateProducts"] = results; if (model.CorrectSellProducts != null) { model.PagedCorrectProducts = model.CorrectSellProducts.OrderBy(x => x.Name).ToPagedList(1, PageSize); } Session["excel"] = model; return View(model); } return View(); }
public ActionResult SaveDupProducts(ListSellProductModel model) { model.CorrectSellProducts = (List<SellProductModel>)Session["CorrectProducts"]; var errors = ModelState.Values.Where(x => x.Errors.Count > 0); //Trạng thái khi lưu xuống db int countUpdate = 0; int countInsert = 0; List<List<SellProductModel>> dupSellProduct = new List<List<SellProductModel>>(); foreach (var product in model.CorrectSellProducts) { var productNameFirst = product.Name.Split(';').First(); // Cắt chuỗi var dupProduct = db.Products.Where(p => p.Name.Equals(productNameFirst)).FirstOrDefault(); if (dupProduct != null) { var dupMarket = db.Markets.Where(m => m.Name.Equals(product.MarketName)).FirstOrDefault(); var sellProduct = db.SellProducts.Where(s => s.ProductId == dupProduct.Id && s.MarketId == dupMarket.Id).FirstOrDefault(); if (sellProduct != null) { var newSellProduct = new SmartB.UI.Models.EntityFramework.SellProduct //add SellProduct { Market = dupMarket, Product = dupProduct, SellPrice = product.Price, LastUpdatedTime = DateTime.Now }; var addedSellProduct = db.SellProducts.Add(newSellProduct); db.SaveChanges(); // Save to database countUpdate++; //add new product Attribute PriceHelper helper = new PriceHelper(); helper.CalculatePriceRange(dupProduct.Id); // add Product Dictionary var dictionaries = product.Name.Split(';').ToList(); var dupProductDictionary = db.Dictionaries.Where(p => p.Name.Equals(productNameFirst)).FirstOrDefault(); foreach (string dictionary in dictionaries) { if (dictionary != productNameFirst.ToString() && dictionary != "") { var dictionaryDB = db.Dictionaries.Where(d => d.Name.Equals(dictionary)).FirstOrDefault(); if (dictionaryDB != null) { // var getProduct = db.Products.Where(p => p.Name.Equals(dictionaryDB.Name)).FirstOrDefault(); var getProductId = Convert.ToInt32(dictionaryDB.ProductId); var listDic = db.Dictionaries.Where(p => p.ProductId == getProductId).ToList(); foreach (var item in listDic) { item.ProductId = dupProduct.Id; } } else { var ProductDic = new SmartB.UI.Models.EntityFramework.Dictionary { Name = dictionary, ProductId = dupProduct.Id }; var addProductDic = db.Dictionaries.Add(ProductDic); } } } db.SaveChanges(); // Save to database } } else { var dupMarket = db.Markets.Where(m => m.Name.Equals(product.MarketName)).FirstOrDefault(); var newProduct = new SmartB.UI.Models.EntityFramework.Product // add Product { Name = productNameFirst, IsActive = true, }; var addedProduct = db.Products.Add(newProduct); var sellProduct2 = new SmartB.UI.Models.EntityFramework.SellProduct //add SellProduct { Market = dupMarket, Product = addedProduct, SellPrice = product.Price, LastUpdatedTime = DateTime.Now }; var addedSellProduct = db.SellProducts.Add(sellProduct2); countInsert++; db.SaveChanges(); // Save to database //add new product Attribute var productAttribute = new SmartB.UI.Models.EntityFramework.ProductAttribute { ProductId = addedProduct.Id, MinPrice = product.Price, MaxPrice = product.Price, LastUpdatedTime = DateTime.Now, }; var addedProductAtt = db.ProductAttributes.Add(productAttribute); db.SaveChanges(); // Save to database // add Product Dictionary var dictionaries = product.Name.Split(';').ToList(); var dupProductDictionary = db.Dictionaries.Where(p => p.Name.Equals(productNameFirst)).FirstOrDefault(); foreach (string dictionary in dictionaries) { if (dupProductDictionary == null && dictionary != "") { var dictionaryDB = db.Dictionaries.Where(d => d.Name.Equals(dictionary)).FirstOrDefault(); if (dictionaryDB == null) { var ProductDic = new SmartB.UI.Models.EntityFramework.Dictionary { Name = dictionary, ProductId = newProduct.Id }; var addProductDic = db.Dictionaries.Add(ProductDic); } else { //var getProductId = db.Products.Where(p => p.Name.Equals(dictionary)).FirstOrDefault(); //var listDic = db.Dictionaries.Where(d => d.ProductId.Equals(getProductId.Id)).ToList(); var getProductId = Convert.ToInt32(dictionaryDB.ProductId); var listDic = db.Dictionaries.Where(p => p.ProductId == getProductId).ToList(); foreach (var item in listDic) { item.ProductId = addedProduct.Id; } } } } db.SaveChanges(); // Save to database } } TempData["UpdateMessage"] = "Có " + countUpdate + " sản phẩm được cập nhật giá."; TempData["InsertMessage"] = "Có " + countInsert + " sản phẩm được lưu mới."; return RedirectToAction("UploadProduct"); }