Пример #1
0
        /// <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
            }
        }
Пример #2
0
        /// <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);
                }
            }
        }