// ReSharper disable InconsistentNaming public ActionResult AddNewSKU(CMS_SKU_Model model, MCCC mcModel, CMS_HMNUM_Model hmModel, User_Profile_Model userModel) // ReSharper restore InconsistentNaming { try { var skuSvr = new SKUCreateServices(); string msg; var newSkuid = skuSvr.AddProduct(model, mcModel, hmModel, userModel.User_Account, out msg); return(Json(new NBCMSResultJson { Status = newSkuid > 0 ? StatusType.OK : StatusType.Error, Data = newSkuid })); } catch (Exception ex) { NBCMSLoggerManager.Fatal(ex.Message); NBCMSLoggerManager.Fatal(ex.StackTrace); NBCMSLoggerManager.Error(""); return(Json(new NBCMSResultJson { Status = StatusType.Exception, Data = ex.Message })); } }
// // GET: /SKUCreate/ public ActionResult Index(User_Profile_Model userModel) { var model = new CMS_SKU_Model { userInfo = userModel }; //用于前端控制非本公司销售人员的展示字段 return(View(model)); }
public void UpdateStatus(CMS_SKU_Model model, string exMsg, int StatusID, string StatusDesc) { IDictionary <string, string> ls = new Dictionary <string, string>(); ls.Add("SKUID", model.SKUID.ToString()); ls.Add("StatusID", StatusID.ToString()); ls.Add("StatusDesc", StatusDesc); ls.Add("UpdateOn", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); ls.Add("UpdateBy", model.Modifier); ls.Add("Comments", exMsg == "" ? "successfully" : exMsg); NBCMSLoggerManager.NBCMSLogger("CMS_Ecom_Sync", "", ls); }
public void LogInsertEcom(CMS_SKU_Model model, string exMsg) { IDictionary <string, string> ls = new Dictionary <string, string>(); ls.Add("SKUID", model.SKUID.ToString()); ls.Add("ProductID", model.SKU_HM_Relation.CMS_HMNUM.ProductID.ToString()); ls.Add("HMNUM", model.SKU_HM_Relation.CMS_HMNUM.HMNUM); ls.Add("SKUOrder", model.SKU); ls.Add("Channel", model.ChannelName); ls.Add("Status", "0"); ls.Add("CreatedDate", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); ls.Add("CreatedBy", model.Modifier); ls.Add("ModifiedDate", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); ls.Add("ModifiedBy", model.Modifier); ls.Add("Comments", exMsg == "" ? "successfully" : exMsg); NBCMSLoggerManager.NBCMSLogger("CMS_Ecom_Sync_Result", "", ls); }
public void SKUURL_Action(CMS_SKU_Model WPModel, EcomEntities db) { if (String.IsNullOrEmpty(WPModel.URL)) { return; } var query = db.SKUURL.FirstOrDefault(s => s.SKUOrder == WPModel.SKU && s.MerchantID == WPModel.ChannelName && s.URL == WPModel.URL); if (query == null) { db.SKUURL.Add(new SKUURL { MerchantID = WPModel.ChannelName, SKUOrder = WPModel.SKU, URL = WPModel.URL }); } }
/// <summary> /// Change1:新增了一个MCCC的模块,你懂得 2014年1月28日16:26:45 /// </summary> /// <param name="model"></param> /// <param name="mcModel"></param> /// <param name="userModel"></param> /// <returns></returns> public ActionResult UpdatedProduct([Bind(Exclude = "SKU")] CMS_SKU_Model model, MCCC mcModel, User_Profile_Model userModel) { try { if (model.SKUID == 0) { return(Json(new NBCMSResultJson { Status = StatusType.Error, Data = "Request is illegal." })); } //User_Profile_Model userModel = new CommonController().GetCurrentUserbyCookie(Request[ConfigurationManager.AppSettings["userInfoCookiesKey"]]); var pSvr = new ProductsServices(); string msg; if (pSvr.UpdatedProduct(model, mcModel, userModel.User_Account, out msg)) { return(Json(new NBCMSResultJson { Status = StatusType.OK, Data = "OK" })); } return(Json(new NBCMSResultJson { Status = StatusType.Error, Data = msg == "update product failed." ? "" : msg })); } catch (Exception ex) { NBCMSLoggerManager.Error(ex.Message); NBCMSLoggerManager.Error(ex.Source); return(Json(new NBCMSResultJson { Status = StatusType.Exception, Data = ex.Message })); } }
/// <summary> /// 组合产品的和基础产品的关联表,存在基础产品就更新,不存在就插入 /// </summary> /// <param name="HMModel"></param> /// <param name="db"></param> public void HMNUMGroup_Action(CMS_SKU_Model skuModel, EcomEntities db, ref int pieces) { CMS_HMNUM_Model HMModel = skuModel.SKU_HM_Relation.CMS_HMNUM; pieces = 0; if (!HMModel.IsGroup) { return; } foreach (var subHM in HMModel.Children_CMS_HMNUM_List) { var subImgPath = string.Empty; var hmPImgObj = subHM.MediaList.FirstOrDefault(m => m.IsPrimaryImages == true); if (hmPImgObj != null) { subImgPath = Path.Combine(skuModel.CMSPhysicalPath, hmPImgObj.HMNUM + "\\" + hmPImgObj.ImgName + hmPImgObj.fileFormat); } this.HMNUM_Action(subHM, db, 1, subImgPath, decimal.Parse(skuModel.SKU_Costing.EstimateFreight, NumberStyles.Currency, new CultureInfo("en-US")));//调用内部方法,插入or更新HMNUM 2014年4月22日16:17:23 pieces += subHM.SellSets; var query = db.ProductGroup.FirstOrDefault(g => g.HMNUM == subHM.HMNUM && g.HMNUMParent == HMModel.HMNUM); if (query == null)//【不】存在基础产品-组合产品的一条记录 { db.ProductGroup.Add(new ProductGroup { HMNUMParent = HMModel.HMNUM, HMNUM = subHM.HMNUM, Description = subHM.ProductName, SellSets = subHM.SellSets }); } else//存在基础产品-组合产品的一条记录 { query.SellSets = subHM.SellSets; query.Description = subHM.ProductName; } } }
/// <summary> /// Ecom中的定义: /// Sellset,组合产品中的定义,在Group中,用于标识子产品在组合产品中的PCS数量 /// Sellpack,销售数量定义,表示网站订单1QTY对应系统中销售N个产品的意思 /// boxnum就是sellpack,一个货号我卖6个,装3箱,则:pcs 6 mp2 sellpack 3 Add Remark:2014年4月15日15:09:08 /// </summary> /// <param name="WPModel"></param> /// <param name="db"></param> public void SKU_Action(CMS_SKU_Model WPModel, EcomEntities db) { if (WPModel.CMS_ShipViaType == null)//HMModel.CMS_ShipVia_Type.CMS_ShipVia_Default.SHIPVIA { throw new Exception("This SKU does not set ShipVia Type"); } if (WPModel.CMS_ShipViaType.CMS_ShipVia_Default == null) { throw new Exception("This SKU does not set ShipVia"); } var query = db.SKU.FirstOrDefault(s => s.SKUOrder == WPModel.SKU && s.MerchantID == WPModel.ChannelName); if (query == null) { var newSKU = new SKU { MerchantID = WPModel.ChannelName, HMNUM = WPModel.SKU_HM_Relation.CMS_HMNUM.HMNUM, SKUOrder = WPModel.SKU, SKUBest = WPModel.SKU, SellPack = WPModel.SKU_HM_Relation.R_QTY / Convert.ToInt32(WPModel.SKU_HM_Relation.CMS_HMNUM.MasterPack), //Description = WPModel.ProductName, eCom的Description其实是CMS的ProductName, 2014年4月9日 Description = WPModel.ProductName, URL = WPModel.URL, UPC = WPModel.UPC, SHIPVIA = WPModel.CMS_ShipViaType.CMS_ShipVia_Default.SHIPVIA, Status = WPModel.StatusName }; db.SKU.Add(newSKU); db.SaveChanges();//!! 这里如果不保存,则SKUID =0 !!! //新增:SKU对应的Costing表 db.Costing.Add(new Costing { HMNUM = newSKU.HMNUM, MerchantID = newSKU.MerchantID, SKUID = newSKU.SKUID, SKUOrder = newSKU.SKUOrder, EffectiveDate = WPModel.SKU_Costing.EffectiveDate, Cost = decimal.Parse(WPModel.SKU_Costing.SalePrice, NumberStyles.Currency, new CultureInfo("en-US")), Coupon = 0,//以后再做,Promo这一块 2014年4月24日11:53:47 (Boonie) Retail = WPModel.RetailPrice, Freight = decimal.Parse(WPModel.SKU_Costing.EstimateFreight, NumberStyles.Currency, new CultureInfo("en-US")), MerchantCoupon = 0 }); } else { query.MerchantID = WPModel.ChannelName; query.HMNUM = WPModel.SKU_HM_Relation.CMS_HMNUM.HMNUM; query.SKUOrder = WPModel.SKU; query.SellPack = WPModel.SKU_HM_Relation.R_QTY / Convert.ToInt32(WPModel.SKU_HM_Relation.CMS_HMNUM.MasterPack); //query.SellPack = WPModel.SKU_HM_Relation.CMS_HMNUM.IsGroup ? 1 : WPModel.SKU_HM_Relation.R_QTY; //query.Description = WPModel.ProductDesc;eCom的Description其实是CMS的ProductName, 2014年4月9日 query.Description = WPModel.ProductName; query.URL = WPModel.URL; query.UPC = WPModel.UPC; //query.SHIPVIA = WPModel.CMS_ShipViaType.CMS_ShipVia_Default.SHIPVIA; //取出当前eCom.dbo.Costing表的数据 var eComCostings = db.Costing.Where(s => s.SKUOrder == WPModel.SKU && s.MerchantID == WPModel.ChannelName && s.EffectiveDate != null); if (eComCostings.FirstOrDefault() == null) { db.Costing.Add(new Costing { HMNUM = query.HMNUM, MerchantID = query.MerchantID, SKUID = query.SKUID, SKUOrder = query.SKUOrder, EffectiveDate = WPModel.SKU_Costing.EffectiveDate, Cost = decimal.Parse(WPModel.SKU_Costing.SalePrice, NumberStyles.Currency, new CultureInfo("en-US")), Coupon = 0,//以后再做,Promo这一块 2014年4月24日11:53:47 (Boonie) Retail = WPModel.RetailPrice, Freight = decimal.Parse(WPModel.SKU_Costing.EstimateFreight, NumberStyles.Currency, new CultureInfo("en-US")), MerchantCoupon = 0 }); } else { //如果已经存在并且不止一列,取出最大的那个时间点做比较 if (WPModel.SKU_Costing.EffectiveDate == eComCostings.Max(s => s.EffectiveDate).Value)//前面过滤了null值,所以这里不会出现null值了 { //相等说明CMS没有做价格变动 } else { //插入新的Costing db.Costing.Add(new Costing { HMNUM = query.HMNUM, MerchantID = query.MerchantID, SKUID = query.SKUID, SKUOrder = query.SKUOrder, EffectiveDate = WPModel.SKU_Costing.EffectiveDate, Cost = decimal.Parse(WPModel.SKU_Costing.SalePrice, NumberStyles.Currency, new CultureInfo("en-US")), Coupon = 0,//以后再做,Promo这一块 2014年4月24日11:53:47 (Boonie) Retail = WPModel.RetailPrice, Freight = decimal.Parse(WPModel.SKU_Costing.EstimateFreight, NumberStyles.Currency, new CultureInfo("en-US")), MerchantCoupon = 0 }); } } //db.SaveChanges();为什么要在这里Save导致不能做transaction?2014年4月24日10:41:57 } }
/// <summary> /// Change1:既然文件类型的LOG已经记录了StackTrace,那么 数据库只要记录一个Message就足够了,不要再记录StackTrace了。2014年5月14日11:24:52 /// </summary> /// <param name="model"></param> public void Processing(CMS_SKU_Model model) { HMNUMServices hmSvr = new HMNUMServices(); SKUServices skuSvr = new SKUServices(); IDictionary <string, string> ls = new Dictionary <string, string>(); using (EcomEntities db = new EcomEntities()) { try { int UnitQTY = 0; hmSvr.HMNUMGroup_Action(model, db, ref UnitQTY); hmSvr.HMNUM_Action(model.SKU_HM_Relation.CMS_HMNUM, db, UnitQTY, model.Send2eComPath, decimal.Parse(model.SKU_Costing.EstimateFreight, NumberStyles.Currency, new CultureInfo("en-US"))); hmSvr.Carton_Action(model.SKU_HM_Relation.CMS_HMNUM, db); skuSvr.SKU_Action(model, db); skuSvr.SKUURL_Action(model, db); db.SaveChanges(); UpdateStatus(model, "", 1, "Synchronized"); LogInsertEcom(model, ""); } catch (DbEntityValidationException ex) { var exMsg = String.Empty; foreach (var eve in ex.EntityValidationErrors) { NBCMSLoggerManager.Error(""); NBCMSLoggerManager.Error(""); //HMLog.Error("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",eve.Entry.Entity.GetType().Name, eve.Entry.State); foreach (var ve in eve.ValidationErrors) { string temp = string.Format("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage); NBCMSLoggerManager.Error(temp); exMsg += temp; } NBCMSLoggerManager.Error(""); } exMsg += ex.Message + ":" + ex.StackTrace; UpdateStatus(model, ex.Message, 2, "Failed"); LogInsertEcom(model, ex.Message); } catch (Exception ex) { var exMsg = String.Empty; bool isInnerEx = false; if (ex.InnerException != null) { if (ex.InnerException.InnerException != null) { NBCMSLoggerManager.Error("InnerException.InnerException"); NBCMSLoggerManager.Error(ex.InnerException.InnerException.Message); NBCMSLoggerManager.Error(ex.InnerException.InnerException.Source); NBCMSLoggerManager.Error(ex.InnerException.InnerException.StackTrace); NBCMSLoggerManager.Error(""); exMsg = ex.InnerException.InnerException.Message;// +":" + ex.InnerException.InnerException.StackTrace; isInnerEx = true; } if (!isInnerEx) { NBCMSLoggerManager.Error(ex.InnerException.Message); NBCMSLoggerManager.Error(ex.InnerException.Source); NBCMSLoggerManager.Error(ex.InnerException.StackTrace); NBCMSLoggerManager.Error(""); exMsg = ex.InnerException.Message;// +":" + ex.InnerException.StackTrace; } } if (!isInnerEx) { NBCMSLoggerManager.Error(""); NBCMSLoggerManager.Error(ex.Message); NBCMSLoggerManager.Error(ex.StackTrace); NBCMSLoggerManager.Error(""); exMsg = ex.Message;//+ ":" + ex.StackTrace; } UpdateStatus(model, exMsg, 2, "Failed"); LogInsertEcom(model, exMsg); } } }
/// <summary> /// 新增SKU产品 /// CrateDate:2013年11月24日17:40:08 /// </summary> /// <param name="model"></param> /// <param name="Modifier"></param> /// <param name="msg"></param> /// <returns></returns> public long AddProduct(CMS_SKU_Model model, MCCC mcModel, CMS_HMNUM_Model HMModel, String Modifier, out string msg) { using (PermaisuriCMSEntities db = new PermaisuriCMSEntities()) { msg = ""; var query = db.CMS_SKU.Where(w => w.SKU == model.SKU && w.ChannelID == model.ChannelID).FirstOrDefault(); if (query != null) { msg = string.Format("this item is already exist"); return(-1); } var mat = db.CMS_SKU_Material.FirstOrDefault(s => s.MaterialName == mcModel.Material); if (mat == null) { mat = new CMS_SKU_Material { CreateBy = Modifier, CreateOn = DateTime.Now, ModifyBy = Modifier, ModifyOn = DateTime.Now, MaterialDesc = mcModel.Material, MaterialName = mcModel.Material }; db.CMS_SKU_Material.Add(mat); } var col = db.CMS_SKU_Colour.FirstOrDefault(s => s.ColourName == mcModel.Colour); if (col == null) { col = new CMS_SKU_Colour { CreateBy = Modifier, CreateOn = DateTime.Now, ModifyBy = Modifier, ModifyOn = DateTime.Now, ColourDesc = mcModel.Colour, ColourName = mcModel.Colour }; db.CMS_SKU_Colour.Add(col); } var cat = db.CMS_SKU_Category.FirstOrDefault(s => s.CategoryName == mcModel.Category && s.ParentID == 0); if (cat == null) { cat = new CMS_SKU_Category { CreateBy = Modifier, CreateOn = DateTime.Now, UpdateBy = Modifier, UpdateOn = DateTime.Now, CategoryName = mcModel.Category, CategoryDesc = mcModel.Category, OrderIndex = 0, ParentID = 0 }; db.CMS_SKU_Category.Add(cat); db.SaveChanges(); } var subCat = db.CMS_SKU_Category.FirstOrDefault(s => s.CategoryName == mcModel.SubCategory && s.ParentID != 0); if (subCat == null) { subCat = new CMS_SKU_Category { //CategoryID = ++i, CreateBy = Modifier, CreateOn = DateTime.Now, UpdateBy = Modifier, UpdateOn = DateTime.Now, CategoryName = mcModel.SubCategory, CategoryDesc = mcModel.SubCategory, OrderIndex = 0, //CMS_SKU_Category_Parent = cat ParentID = cat.CategoryID }; db.CMS_SKU_Category.Add(subCat); } var newCosting = new CMS_SKU_Costing { SalePrice = 0, EstimateFreight = 0, EffectiveDate = DateTime.Now, CreateBy = Modifier, CreateOn = DateTime.Now }; //db.CMS_SKU_Costing.Add(newCosting); //db.SaveChanges(); CMS_SKU newProduct = new CMS_SKU { //SKUCostID = 0, //default...为0 会导致后期查询的如果不做NULL排除,会得到意想不到的错误! CMS_SKU_Costing = newCosting, SKU = model.SKU, ProductName = model.ProductName, SKU_QTY = model.SKU_QTY, ChannelID = model.ChannelID, UPC = model.UPC, StatusID = 1,//2014年3月5日 New Visibility = model.Visibility, ProductDesc = model.ProductDesc, Specifications = model.Specifications, Keywords = model.Keywords, BrandID = model.BrandID, RetailPrice = model.RetailPrice, URL = model.URL, //MaterialID = mat.MaterialID, //ColourID = col.ColourID, //CategoryID = cat.CategoryID, //SubCategoryID = subCat.CategoryID, CMS_SKU_Material = mat, CMS_SKU_Colour = col, CMS_SKU_Category = cat, CMS_SKU_Category_Sub = subCat, CMS_Ecom_Sync = new CMS_Ecom_Sync { //SKUID = query.SKUID,坑爹啊 害死人,对象空引用!2014年4月9日 StatusID = 0, StatusDesc = "NeedSend", UpdateBy = Modifier, UpdateOn = DateTime.Now }, CreateBy = Modifier, CreateOn = DateTime.Now, UpdateBy = Modifier, UpdateOn = DateTime.Now, ShipViaTypeID = model.ShipViaTypeID }; //db.CMS_SKU.Add(newProduct); var newHM = db.CMS_HMNUM.Find(HMModel.ProductID); SKU_HM_Relation rModel = new SKU_HM_Relation { CMS_HMNUM = newHM, CMS_SKU = newProduct, StockKeyID = newHM.StockKeyID, R_QTY = HMModel.R_QTY, CreateBy = Modifier, CreateOn = DateTime.Now, UpdateBy = Modifier, UpdateOn = DateTime.Now }; db.SKU_HM_Relation.Add(rModel); db.SaveChanges(); newCosting.HisSKUID = newProduct.SKUID;//经测试:如果让这个生效,一定要在此之前先发生一次db.SaveChanges(),即使是使用强类型嵌套插入也需要这样save 2 次....2014年3月10日 db.SaveChanges(); return(newProduct.SKUID); } }