/// <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); } } }