diff --git a/BBWY.Server.Business/PurchaseOrderV2/BatchPurchase/BatchPurchaseBusiness.cs b/BBWY.Server.Business/PurchaseOrderV2/BatchPurchase/BatchPurchaseBusiness.cs index 337f5bdf..15f39dd1 100644 --- a/BBWY.Server.Business/PurchaseOrderV2/BatchPurchase/BatchPurchaseBusiness.cs +++ b/BBWY.Server.Business/PurchaseOrderV2/BatchPurchase/BatchPurchaseBusiness.cs @@ -215,14 +215,27 @@ namespace BBWY.Server.Business if (request.CargoParamGroupList == null || request.CargoParamGroupList.Count() == 0 || request.CargoParamGroupList.Any(g => g.CargoParamList == null || g.CargoParamList.Count() == 0 || string.IsNullOrEmpty(g.PurchaserId))) throw new BusinessException("缺少商品参数"); - if (request.Consignee == null || - string.IsNullOrEmpty(request.Consignee.Address) || - string.IsNullOrEmpty(request.Consignee.Mobile) || - string.IsNullOrEmpty(request.Consignee.ContactName)) - throw new BusinessException("缺少收货人信息"); if (request.PurchaseAccountList == null || request.PurchaseAccountList.Count() == 0) throw new BusinessException("缺少采购账号"); + if (request.Consignee == null || + string.IsNullOrEmpty(request.Consignee.Address) || + string.IsNullOrEmpty(request.Consignee.Mobile) || + string.IsNullOrEmpty(request.Consignee.ContactName)) + { + request.Consignee = new ConsigneeRequest() + { + ContactName = "默认收货人", + Address = "齐越众创投资有限公司", + Province = "福建省", + City = "泉州市", + County = "鲤城区", + Town = "鲤城区", + Mobile = "15000000000", + TelePhone = "15000000000" + }; + } + var extJArray = new List(); var errorBuilder = new StringBuilder(); var freightAmount = 0M; diff --git a/BBWY.Server.Business/Sync/ProductSyncBusiness.cs b/BBWY.Server.Business/Sync/ProductSyncBusiness.cs index 6faa2d17..417a3a21 100644 --- a/BBWY.Server.Business/Sync/ProductSyncBusiness.cs +++ b/BBWY.Server.Business/Sync/ProductSyncBusiness.cs @@ -186,6 +186,19 @@ namespace BBWY.Server.Business.Sync { try { + var shopId = long.Parse(shop.ShopId); + var dbProductList = fsql.Select().Where(p => p.ShopId == shopId).ToList(); + var dbProductSkuList = fsql.Select().Where(p => p.ShopId == shopId).ToList(); + + List productList = new List(); + List productSkuList = new List(); + + List insertProductList = new List(); + List insertProductSkuList = new List(); + + List> updateProductList = new List>(); + List> updateProductSkuList = new List>(); + var request = new SearchProductRequest() { PageSize = 50, @@ -197,15 +210,135 @@ namespace BBWY.Server.Business.Sync }; while (true) { - var productList = productBusiness.GetProductList(request); - if (productList == null || productList.Count == 0) - return; - SyncProduct(shop, productList); - if (productList.Items.Count < 50 || !IsSyncAllProduct) + var currentProductList = productBusiness.GetProductList(request); + if (currentProductList == null || currentProductList.Count == 0) + break; + productList.AddRange(currentProductList.Items); + + foreach (var product in currentProductList.Items) + { + var currentSkuList = productBusiness.GetProductSkuList(new SearchProductSkuRequest() + { + AppKey = shop.AppKey, + AppSecret = shop.AppSecret, + AppToken = shop.AppToken, + Platform = shop.PlatformId, + Spu = product.Id, + IsContainSource = true + }); + if (currentSkuList == null || currentSkuList.Count() == 0) + continue; + productSkuList.AddRange(currentSkuList); + } + + if (currentProductList.Items.Count < 50 || !IsSyncAllProduct) break; request.PageIndex++; Thread.Sleep(1000); } + + #region 找出新增的产品 + var newProductList = productList.Where(p => !dbProductList.Any(dp => dp.Id == p.Id)).ToList(); + if (newProductList.Count() > 0) + { + insertProductList.AddRange(newProductList.Select(p => new Product() + { + Id = p.Id, + CreateTime = p.CreateTime, + Title = p.Title, + State = p.State, + ShopId = shopId, + Platform = shop.PlatformId, + ProductItemNum = p.ProductItemNum, + MainSkuId = productSkuList.FirstOrDefault(s => s.ProductId == p.Id)?.Id + })); + } + #endregion + + #region 找出状态变化的产品 + var stateChangeProductList = productList.Where(p => dbProductList.Any(dp => dp.Id == p.Id && dp.State != p.State)).ToList(); + if (stateChangeProductList.Count() > 0) + { + foreach (var product in stateChangeProductList) + { + var update = fsql.Update(product.Id).Set(p => p.State, product.State); + updateProductList.Add(update); + } + } + #endregion + + #region 找出接口查不出的产品 + var goneProductList = dbProductList.Where(dp => !productList.Any(p => p.Id == dp.Id)).ToList(); + if (goneProductList.Count() > 0) + { + var goneProductIdList = goneProductList.Select(p => p.Id).ToList(); + var update = fsql.Update().Set(p => p.State, -1).Where(p => goneProductIdList.Contains(p.Id)); + updateProductList.Add(update); + } + #endregion + + #region 找出新增的SKU + var newProductSkuList = productSkuList.Where(p => !dbProductSkuList.Any(dp => dp.Id == p.Id)).ToList(); + if (newProductSkuList.Count() > 0) + { + insertProductSkuList.AddRange(newProductSkuList.Select(p => new ProductSku() + { + Id = p.Id, + CreateTime = p.CreateTime, + Title = p.Title, + State = p.State, + ShopId = shopId, + Platform = shop.PlatformId, + Logo = p.Logo, + ProductId = p.ProductId, + Price = p.Price, + CategoryId = p.Source.Value("categoryId") + })); + } + #endregion + + #region 找出状态变化的SKU + var stateChangeProductSkuList = productSkuList.Where(p => dbProductSkuList.Any(dp => dp.Id == p.Id && dp.State != p.State)).ToList(); + if (stateChangeProductSkuList.Count() > 0) + { + foreach (var productSku in stateChangeProductSkuList) + { + var update = fsql.Update(productSku.Id).Set(p => p.State, productSku.State); + updateProductSkuList.Add(update); + } + } + #endregion + + #region 找出接口查不出的SKU + var goneProductSkuList = dbProductSkuList.Where(dp => !productSkuList.Any(p => p.Id == dp.Id)).ToList(); + if (goneProductSkuList.Count() > 0) + { + var goneProductSkuIdList = goneProductSkuList.Select(p => p.Id).ToList(); + var update = fsql.Update().Set(p => p.State, 4).Where(p => goneProductSkuIdList.Contains(p.Id)); + updateProductSkuList.Add(update); + } + #endregion + + + fsql.Transaction(() => + { + if (insertProductList.Count() > 0) + fsql.Insert(insertProductList).ExecuteAffrows(); + if (insertProductSkuList.Count() > 0) + fsql.Insert(insertProductSkuList).ExecuteAffrows(); + + if (updateProductList.Count() > 0) + { + foreach (var update in updateProductList) + update.ExecuteAffrows(); + } + + if (updateProductSkuList.Count() > 0) + { + foreach (var update in updateProductSkuList) + update.ExecuteAffrows(); + } + }); } catch (Exception ex) { @@ -232,8 +365,8 @@ namespace BBWY.Server.Business.Sync /// public void SyncAllShopAllProduct() { - var shopList = venderBusiness.GetShopList(); - //SyncProduct(shopList.FirstOrDefault(s => s.ShopName == "趣弈手机配件专营店"), true); + var shopList = venderBusiness.GetShopList(platform: Enums.Platform.京东); + //SyncProduct(shopList.FirstOrDefault(s => s.ShopName == "熊猴玩具专营店"), true); foreach (var shop in shopList) { Task.Factory.StartNew(() => SyncProduct(shop, true), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.ProductSyncTaskScheduler); diff --git a/BBWY.Server.Business/TestBusiness.cs b/BBWY.Server.Business/TestBusiness.cs index 2646837f..23a9a1b3 100644 --- a/BBWY.Server.Business/TestBusiness.cs +++ b/BBWY.Server.Business/TestBusiness.cs @@ -62,13 +62,13 @@ namespace BBWY.Server.Business var productSkuCount = fsql.Select().Where(p => p.ShopId == shopId) .Where(p => p.State == 1) .Count(); - var jpspu_sql = $"select count(1) as Count,t.ShopId from (select max(osku1.Id) as oskuId,max(osku1.CreateTime) as maxTime,osku1.ProductId,o.ShopId from OrderSku osku1 inner join `Order` o on osku1.OrderId=o.Id where o.OrderState !=6 and o.IsGift=0 and o.StartTime>='2022-05-01' and o.ShopId='{shopId}' Group By osku1.ProductId,o.ShopId order by maxTime desc,osku1.ProductId desc,o.ShopId desc) as t inner join orderSku osku on t.oskuId=osku.Id inner join `order` o on osku.OrderId=o.Id inner join product p on t.ProductId = p.Id where o.StorageType=0 and p.state=8 group by t.ShopId"; + var jpspu_sql = $"select count(1) as Count,t.ShopId from (select max(osku1.Id) as oskuId,max(osku1.CreateTime) as maxTime,osku1.ProductId,o.ShopId from OrderSku osku1 inner join `Order` o on osku1.OrderId=o.Id where o.OrderState !=6 and o.IsGift=0 and o.StartTime>='2022-05-01' and o.ShopId='{shopId}' Group By osku1.ProductId,o.ShopId order by maxTime desc,osku1.ProductId desc,o.ShopId desc) as t inner join orderSku osku on t.oskuId=osku.Id inner join `order` o on osku.OrderId=o.Id inner join product p on t.ProductId = p.Id where o.StorageType in (0,1) and p.state=8 group by t.ShopId"; //京配spu数 var jpspu = fsql.Ado.QuerySingle(jpspu_sql); - var jpsku_sql = $"select count(1) as Count,t.ShopId from (select max(osku1.Id) as oskuId,max(osku1.CreateTime) as maxTime,osku1.SkuId,o.ShopId from OrderSku osku1 inner join `Order` o on osku1.OrderId=o.Id where o.OrderState !=6 and o.IsGift=0 and o.StartTime>='2022-05-01' and o.ShopId='{shopId}' Group By osku1.SkuId,o.ShopId order by maxTime desc,osku1.SkuId desc,o.ShopId desc) as t inner join orderSku osku on t.oskuId=osku.Id inner join `order` o on osku.OrderId=o.Id inner join productsku psku on t.SkuId = psku.Id where o.StorageType=0 and psku.State=1 group by t.ShopId"; + var jpsku_sql = $"select count(1) as Count,t.ShopId from (select max(osku1.Id) as oskuId,max(osku1.CreateTime) as maxTime,osku1.SkuId,o.ShopId from OrderSku osku1 inner join `Order` o on osku1.OrderId=o.Id where o.OrderState !=6 and o.IsGift=0 and o.StartTime>='2022-05-01' and o.ShopId='{shopId}' Group By osku1.SkuId,o.ShopId order by maxTime desc,osku1.SkuId desc,o.ShopId desc) as t inner join orderSku osku on t.oskuId=osku.Id inner join `order` o on osku.OrderId=o.Id inner join productsku psku on t.SkuId = psku.Id where o.StorageType in (0,1) and psku.State=1 group by t.ShopId"; var jpsku = fsql.Ado.QuerySingle(jpsku_sql);