From 6930eda29ae3d55ae3ad5cda55dc0b869aa310f5 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sun, 18 Feb 2024 23:22:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5hycats?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/DataRepairController.cs | 6 + .../DataRepair/DataRepairBusiness.cs | 102 ++++++++++++++ .../Sync/OrderSyncBusiness.cs | 124 +++++++++--------- .../Db/Product/Skuoptimizationtask.cs | 3 - .../Db/TimeLimitTask/TimeLimitTask.cs | 4 + 5 files changed, 171 insertions(+), 68 deletions(-) diff --git a/BBWYB.Server.API/Controllers/DataRepairController.cs b/BBWYB.Server.API/Controllers/DataRepairController.cs index 2d1562b..01df8b4 100644 --- a/BBWYB.Server.API/Controllers/DataRepairController.cs +++ b/BBWYB.Server.API/Controllers/DataRepairController.cs @@ -122,6 +122,12 @@ namespace BBWYB.Server.API.Controllers dataRepairBusiness.RepairPurchaserLocation(); } + [HttpPost] + public void SyncHyCats() + { + dataRepairBusiness.SyncHyCats(); + } + [HttpPost] public void ExportQTSpuAndJDSku() { diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index 249e537..3960818 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -7,6 +7,7 @@ using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Db.HY; using BBWYB.Server.Model.Dto; using FreeSql; +using Newtonsoft.Json.Linq; using SDKAdapter; using SDKAdapter.OperationPlatform.Client; using SDKAdapter.OperationPlatform.Models; @@ -1250,6 +1251,107 @@ namespace BBWYB.Server.Business return location; } + private IDictionary categoryCache = new Dictionary(); + + public (string Id, string parentId, string name, int lev)? GetCategoryById(string categoryId) + { + if (categoryCache.ContainsKey(categoryId)) + return categoryCache[categoryId]; + + var httpResult = restApiService.SendRequest("http://yunding.qiyue666.com", "api/platformsdk/GetCategoryInfoById", new + { + AppKey = "120EA9EC65AB017567D78CC1139EEEA5", + AppSecret = "8a42bc2301e8439b896e99f5475e0a9b", + AppToken = "523ad68443184436965ca4304daff409tizy", + Platform = Enums.Platform.京东, + CategoryId = categoryId + }, null, HttpMethod.Post); + if (httpResult.StatusCode == System.Net.HttpStatusCode.OK) + { + var jtoken = JToken.Parse(httpResult.Content); + string fid = null; + if (jtoken["Data"].Value("fid") != "0") + fid = jtoken["Data"].Value("fid"); + + (string Id, string parentId, string name, int lev)? c = (jtoken["Data"].Value("id"), + fid, + jtoken["Data"].Value("name"), + jtoken["Data"].Value("lev")); + + if (!categoryCache.ContainsKey(c.Value.Id)) + categoryCache.TryAdd(c.Value.Id, c); + return c; + } + return null; + } + + public void SyncHyCats() + { + var l3CategoryIdList = freeSqlMultiDBManager.BBWYCfsql.Select().Where(s => s.CategoryId != null).Distinct().ToList(s => s.CategoryId); + var hycatsList = freeSqlMultiDBManager.HYfsql.Select().ToList(); + + List insertHyCatsList = new List(); + + var count = l3CategoryIdList.Count(); + var index = 1; + foreach (var l3CategoryId in l3CategoryIdList) + { + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine($"{index}/{count} {l3CategoryId}"); + Console.ResetColor(); + index++; + var l3Info = GetCategoryById(l3CategoryId.Value.ToString()); + if (l3Info != null) + { + if (!hycatsList.Any(x => x.Id == l3Info.Value.Id) && !insertHyCatsList.Any(x => x.Id == l3Info.Value.Id)) + { + insertHyCatsList.Add(new HyCats() + { + Id = l3Info.Value.Id, + IsLeaf = 1, + Level = 3, + Name = l3Info.Value.name, + ParentId = l3Info.Value.parentId + }); + } + + var l2Info = GetCategoryById(l3Info.Value.parentId); + if (l2Info != null) + { + if (!hycatsList.Any(x => x.Id == l2Info.Value.Id) && !insertHyCatsList.Any(x => x.Id == l2Info.Value.Id)) + { + insertHyCatsList.Add(new HyCats() + { + Id = l2Info.Value.Id, + IsLeaf = 0, + Level = 2, + Name = l2Info.Value.name, + ParentId = l2Info.Value.parentId + }); + } + var l1Info = GetCategoryById(l2Info.Value.parentId); + if (l1Info != null) + { + if (!hycatsList.Any(x => x.Id == l1Info.Value.Id) && !insertHyCatsList.Any(x => x.Id == l1Info.Value.Id)) + { + insertHyCatsList.Add(new HyCats() + { + Id = l1Info.Value.Id, + IsLeaf = 0, + Level = 1, + Name = l1Info.Value.name, + ParentId = l1Info.Value.parentId + }); + } + } + } + } + } + + if (insertHyCatsList.Count() > 0) + freeSqlMultiDBManager.HYfsql.Insert(insertHyCatsList).ExecuteAffrows(); + } + public void ExportQTSpuAndJDSku() { var qtlist = fsql.Select() diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 8bb43bd..ec0e545 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -401,83 +401,74 @@ namespace BBWYB.Server.Business.Sync !dbSkuOptimizationTaskList.Any(t => t.SkuId == waitCheckOrderSku.SkuId) && !insertSkuOptimizationTaskList.Any(t => t.SkuId == waitCheckOrderSku.SkuId)) { + #region 解析来源店铺数据 + JArray belongSkus = null; + string sourceShopName = string.Empty; + if (!string.IsNullOrEmpty(waitCheckOrder.Extended)) + { + try + { + var jobject = JObject.Parse(waitCheckOrder.Extended); + //dbOrder.SourceSku = jobject.Value("SourceSku"); + sourceShopName = jobject.Value("SourceShopName"); + + if (jobject.ContainsKey("BelongSkus")) + belongSkus = jobject["BelongSkus"] as JArray; + + } + catch (Exception ex) + { + + } + } + #endregion + + #region 创建待优化任务 var skuOptimizationTask = new SkuOptimizationTask() { Id = idGenerator.NewLong(), PreItemCount = 0, PrePurchasedAmount = 0, + IsOptimizationCompleted = false, + CreateTime = DateTime.Now, + SafeWarningRemainingDay = 0, + UsePrePurchasedPrice = 0, + TriggerOptimizationReason = Enums.TriggerOptimizationReason.首次采购, + SkuId = waitCheckOrderSku.SkuId, + ShopId = shopId, + ProductId = waitCheckOrderSku.ProductId, + BelongShopName = sourceShopName, + CompletionTime = null, + JDSkuId = belongSkus?.FirstOrDefault(j => j.Value("SkuId") == waitCheckOrderSku.SkuId)?.Value("BelongSkuId") ?? string.Empty }; insertSkuOptimizationTaskList.Add(skuOptimizationTask); + #endregion + + #region 创建待优化限时任务 + + //判断sku是否首次采购 + var isFirst = !dbSkuTotalSaleInfoList.Any(s => s.SkuId == waitCheckOrderSku.SkuId); + + insertTimeLimitTaskList.Add(new TimeLimitTask() + { + Id = idGenerator.NewLong(), + CreateTme = DateTime.Now, + //ExpirationTime = DateTime.Now.AddDays(isFirst ? 2 : 1), + ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待议价任务, DateTime.Now.AddDays(isFirst ? 1 : 0)), + //OrderId = o.OrderId, + //OrderSn = o.OrderSn, + ShopId = shopId, + SkuId = waitCheckOrderSku.SkuId, + TaskType = Enums.TimeLimitTaskType.待议价任务, + TaskId = skuOptimizationTask.Id, + Remark = "首次采购限时任务" + }); + #endregion } } } } - - - - //var optimizationSpuSaleList = dbSpuTotalSaleInfoList.Union(insertSpuTotalSaleInfoList).Where(s => - //{ - // return GetOptimizationReason(s) != null; - //}); - //if (optimizationSpuSaleList.Count() > 0) - //{ - // foreach (var spuSale in optimizationSpuSaleList) - // { - // var orderList = waitToCheckSkuSaleOrderList.Where(o => o.OrderSkuList.Any(osku => osku.ProductId == spuSale.ProductId)).ToList(); - // foreach (var o in orderList) - // { - // foreach (var osku in o.OrderSkuList) - // { - // if (osku.ProductId != spuSale.ProductId) - // continue; - - // var triggerOptimizationReason = GetOptimizationReason(spuSale); - - // #region 更新sku优化标记 - // var oskuId = long.Parse(osku.Id); - // var insertOrderSku = insertOrderSkuList.FirstOrDefault(s => s.Id == oskuId); - // if (insertOrderSku != null) - // { - // insertOrderSku.IsNeedOptimization = 1; - // insertOrderSku.TriggerOptimizationReason = triggerOptimizationReason; - // } - // else - // { - // //updateOrderSkuIdList_OptimizationFlag.Add(oskuId); - // if (!updateOSkuOptimizationFlagByReasonGroups.TryGetValue(triggerOptimizationReason.Value, out var updateOSkuOptimizationFlagByReasonList)) - // { - // updateOSkuOptimizationFlagByReasonList = new List(); - // updateOSkuOptimizationFlagByReasonGroups.Add(triggerOptimizationReason.Value, updateOSkuOptimizationFlagByReasonList); - // } - // updateOSkuOptimizationFlagByReasonList.Add(oskuId); - // } - // #endregion - - // #region 创建待议价任务 - // if (!dbOptimizationLimitTaskList.Any(t => t.OrderId == o.OrderId && t.SkuId == osku.SkuId)) - // { - // //判断sku是否首次采购 - // var isFirst = !dbSkuTotalSaleInfoList.Any(s => s.SkuId == osku.SkuId); - - // insertTimeLimitTaskList.Add(new TimeLimitTask() - // { - // Id = idGenerator.NewLong(), - // CreateTme = DateTime.Now, - // //ExpirationTime = DateTime.Now.AddDays(isFirst ? 2 : 1), - // ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待议价任务, DateTime.Now.AddDays(isFirst ? 1 : 0)), - // OrderId = o.OrderId, - // OrderSn = o.OrderSn, - // ShopId = shopId, - // SkuId = osku.SkuId, - // TaskType = Enums.TimeLimitTaskType.待议价任务 - // }); - // } - // #endregion - // } - // } - // } - //} } } #endregion @@ -500,6 +491,9 @@ namespace BBWYB.Server.Business.Sync if (insertTimeLimitTaskList.Count() > 0) fsql.Insert(insertTimeLimitTaskList).ExecuteAffrows(); + if (insertSkuOptimizationTaskList.Count() > 0) + fsql.Insert(insertSkuOptimizationTaskList).ExecuteAffrows(); + if (updateOrderList.Count() > 0) foreach (var update in updateOrderList) update.ExecuteAffrows(); diff --git a/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs b/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs index 80ab6ca..fa32c28 100644 --- a/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs +++ b/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs @@ -47,9 +47,6 @@ namespace BBWYB.Server.Model.Db [Column(DbType = "bigint")] public long? ShopId { get; set; } - [Column(DbType = "bigint")] - public long? BelongShopId { get; set; } - /// /// 来源店铺名 /// diff --git a/BBWYB.Server.Model/Db/TimeLimitTask/TimeLimitTask.cs b/BBWYB.Server.Model/Db/TimeLimitTask/TimeLimitTask.cs index d325eaf..2cd3874 100644 --- a/BBWYB.Server.Model/Db/TimeLimitTask/TimeLimitTask.cs +++ b/BBWYB.Server.Model/Db/TimeLimitTask/TimeLimitTask.cs @@ -79,6 +79,10 @@ namespace BBWYB.Server.Model.Db [Column(StringLength = 500)] public string Remark { get; set; } + /// + /// 任务Id(待优化任务有效) + /// + public long TaskId { get; set; } } }