public static bool SyncOne(SUPPLY_MIN_PRICE product) { EnsureProductContext(product); if (!product.SHOP_SID.HasValue) return false; using (var ts = new TransactionScope()) { using (var db = new YintaiHangzhouContext("YintaiHangzhouContext")) { var existProduct = db.Set<ProductMapEntity>().Where(b => b.ChannelPId == product.PRODUCT_SID).FirstOrDefault(); var tagEntity = db.Set<TagEntity>().Join(db.Set<CategoryMapEntity>().Where(cm => cm.ChannelCatId == product.PRO_CLASS_SID), o => o.Id, i => i.CatId, (o, i) => o) .FirstOrDefault(); var storeEntity = db.Set<StoreEntity>().Where(s => s.ExStoreId == product.SHOP_SID).FirstOrDefault(); if (storeEntity == null) { Log.Error(string.Format("product sid has no store:{0}", product.PRODUCT_SID)); return false; } var brandEntity = db.Set<BrandEntity>().Where(b => b.ChannelBrandId == product.BRAND_SID).FirstOrDefault(); if (brandEntity == null) { Log.Error(string.Format("product sid has no brand:{0}", product.PRODUCT_SID)); return false; } if (existProduct == null) { var newProduct = new ProductEntity() { CreatedDate = DateTime.Now, CreatedUser = DEFAULT_OWNER_ID, SkuCode = product.PRO_SKU, Brand_Id = brandEntity == null ? 0 : brandEntity.Id, Description = product.PRO_DESC ?? string.Empty, Is4Sale = false, Name = string.IsNullOrEmpty(product.PRODUCT_NAME)? string.Format("{0}-{1}", brandEntity.Name, product.PRO_SKU):product.PRODUCT_NAME, UnitPrice = product.ORIGINAL_PRICE ?? NULL_PRICE, RecommendedReason = product.PRO_DESC ?? string.Empty, RecommendUser = DEFAULT_OWNER_ID, SortOrder = 0, Status = (int)DataStatus.Default, Store_Id = storeEntity == null ? 0 : storeEntity.Id, Tag_Id = tagEntity == null ? int.Parse(DEFAULT_TAG_ID) : tagEntity.Id, Price = product.PROMOTION_PRICE ?? NULL_PRICE, UpdatedDate = product.OPT_UPDATE_TIME ?? DateTime.Now, UpdatedUser = DEFAULT_OWNER_ID, BarCode = product.BARCODE, Favorable = "1" }; db.Products.Add(newProduct); db.SaveChanges(); db.ProductMaps.Add(new ProductMapEntity() { Channel = "ERP", ChannelBrandId = (int)product.BRAND_SID, ChannelPId = (int)product.PRODUCT_SID, ChannelCatId = (int)(product.PRO_CLASS_SID??0m), ProductId = newProduct.Id, UpdateDate = product.OPT_UPDATE_TIME ?? DateTime.Now }); } else { var existProductEntity = db.Set<ProductEntity>().Find(existProduct.ProductId); existProductEntity.BarCode = product.BARCODE; existProductEntity.UpdatedDate = product.OPT_UPDATE_TIME ?? DateTime.Now; existProductEntity.Store_Id = storeEntity == null ? 0 : storeEntity.Id; existProductEntity.Brand_Id = brandEntity == null ? 0 : brandEntity.Id; existProductEntity.Tag_Id = tagEntity == null ? int.Parse(DEFAULT_TAG_ID) : tagEntity.Id; existProductEntity.SkuCode = product.PRO_SKU; existProductEntity.Name = string.IsNullOrEmpty(product.PRODUCT_NAME) ? string.Format("{0}-{1}", brandEntity.Name, product.PRO_SKU) : product.PRODUCT_NAME; existProductEntity.UnitPrice = product.ORIGINAL_PRICE ?? NULL_PRICE; existProductEntity.Price = product.PROMOTION_PRICE ?? NULL_PRICE; existProductEntity.Description = product.PRO_DESC ?? string.Empty; existProductEntity.RecommendedReason = product.PRO_DESC ?? string.Empty; } db.SaveChanges(); } ts.Complete(); } return true; }
private static void EnsureProductContext(SUPPLY_MIN_PRICE product) { using (var db = new YintaiHangzhouContext("YintaiHangzhouContext")) { var exBrand = db.Set<BrandEntity>().Where(b => b.ChannelBrandId == product.BRAND_SID).FirstOrDefault(); if (null == exBrand) { using (var erpDb = new ErpContext()) { var brand = erpDb.Set<BRAND>().Find(product.BRAND_SID); if (null != brand) BrandSyncJob.SyncOne(brand); } } var exCat = db.Set<CategoryEntity>().Where(c => c.ExCatId == product.PRO_CLASS_SID).FirstOrDefault(); if (null == exCat) { using (var erpDb = new ErpContext()) { var cat = erpDb.Set<PRO_CLASS_DICT>().Find(product.PRO_CLASS_SID); if (null != cat) CategorySyncJob.SyncOne(cat); } } var exStore = db.Set<StoreEntity>().Where(c => c.ExStoreId == product.SHOP_SID).FirstOrDefault(); if (null == exStore) { using (var erpDb = new ErpContext()) { var store = erpDb.Set<SHOP_INFO>().Find(product.SHOP_SID); if (null != store) StoreSyncJob.SyncOne(store); } } } }
private static void syncRelatedPics(SUPPLY_MIN_PRICE product) { IEnumerable<PRO_PICTURE> pics = null; using (var erp = new ErpContext()) { pics = erp.PRO_PICTURE.Where(p => p.PRODUCT_SID == product.PRODUCT_SID).ToList(); } foreach (var pic in pics) { ProductPicSyncJob.SyncOne(pic); } }