diff --git a/BBWY.Server.Business/DingDingBusiness.cs b/BBWY.Server.Business/DingDingBusiness.cs index a8e6da12..cee0a9a8 100644 --- a/BBWY.Server.Business/DingDingBusiness.cs +++ b/BBWY.Server.Business/DingDingBusiness.cs @@ -21,20 +21,24 @@ namespace BBWY.Server.Business public void SendDingDingBotMessage(string secret, string webHook, string content) { - var timestamp = DateTime.Now.DateTimeToStamp(); - var stringToSign = timestamp + "\n" + secret; - var sign = EncryptWithSHA256(stringToSign, secret); - var url = $"{webHook}×tamp={timestamp}&sign={sign}"; - var result = restApiService.SendRequest(url, string.Empty, new + try { - msgtype = "text", - text = new + var timestamp = DateTime.Now.DateTimeToStamp(); + var stringToSign = timestamp + "\n" + secret; + var sign = EncryptWithSHA256(stringToSign, secret); + var url = $"{webHook}×tamp={timestamp}&sign={sign}"; + var result = restApiService.SendRequest(url, string.Empty, new { - content = content - } - }, null, HttpMethod.Post); - if (result.StatusCode != System.Net.HttpStatusCode.OK) - throw new Exception($"发送钉钉机器人消息失败 {result.Content}"); + msgtype = "text", + text = new + { + content = content + } + }, null, HttpMethod.Post); + if (result.StatusCode != System.Net.HttpStatusCode.OK) + throw new Exception($"发送钉钉机器人消息失败 {result.Content}"); + } + catch { } } /// diff --git a/BBWY.Server.Business/EvaluationAssistant/EvaluationAssistantBusiness.cs b/BBWY.Server.Business/EvaluationAssistant/EvaluationAssistantBusiness.cs index ae6df7db..76c3321d 100644 --- a/BBWY.Server.Business/EvaluationAssistant/EvaluationAssistantBusiness.cs +++ b/BBWY.Server.Business/EvaluationAssistant/EvaluationAssistantBusiness.cs @@ -12,6 +12,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; +using System.Text; using System.Threading; using System.Threading.Tasks; using Yitter.IdGenerator; @@ -262,6 +263,7 @@ namespace BBWY.Server.Business { var list = fsql.Select().As("pt") .Where(pt => pt.ShopId == request.ShopId) + .Where(pt => pt.IsEnabled == true) .OrderBy(pt => SqlExt.Case().When(pt.Status == Enums.PromitionTaskStatus.进行中, 0) .When(pt.Status == Enums.PromitionTaskStatus.等待, 1) .When(pt.Status == Enums.PromitionTaskStatus.已完成, 2) @@ -301,6 +303,7 @@ namespace BBWY.Server.Business var list = fsql.Select().As("pt") .Where(pt => pt.ShopId == shopId) .Where(pt => preTaskStateList.Contains(pt.Status.Value)) + .Where(pt => pt.IsEnabled == true) .OrderBy(pt => SqlExt.Case().When(pt.Status == Enums.PromitionTaskStatus.进行中, 0) .When(pt.Status == Enums.PromitionTaskStatus.等待, 1) .When(pt.Status == Enums.PromitionTaskStatus.已完成, 2) @@ -505,7 +508,9 @@ namespace BBWY.Server.Business } } - var runingTaskList = fsql.Select().Where(pt => pt.ShopId == dbPromotionTask.ShopId && pt.Status == Enums.PromitionTaskStatus.进行中).ToList(); + var runingTaskList = fsql.Select().Where(pt => pt.ShopId == dbPromotionTask.ShopId && + pt.Status == Enums.PromitionTaskStatus.进行中 && + pt.IsEnabled == true).ToList(); if (dbPromotionTask.MotherTemplateId != null && dbPromotionTask.MotherTemplateId != 0) @@ -639,11 +644,12 @@ namespace BBWY.Server.Business .Set(pt => pt.Status, Enums.PromitionTaskStatus.进行中) .ExecuteAffrows(); - joinSkuCount = joinSkuNoGiftList.Distinct().Count(); - Task.Factory.StartNew(() => StartPromotionDelayTask(request, startResponse, dbPromotionTask, shop, joinSkuCount), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.JDPromotionDelayTaskScheduler); + //joinSkuCount = joinSkuNoGiftList.Distinct().Count(); + joinSkuNoGiftList = joinSkuNoGiftList.Distinct().ToList(); + Task.Factory.StartNew(() => StartPromotionDelayTask(request, startResponse, dbPromotionTask, shop, joinSkuNoGiftList), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.JDPromotionDelayTaskScheduler); } - private void StartPromotionDelayTask(StartPromotionTaskRequest request, StartPromotionTaskResponse startResponse, PromotionTask promotionTask, ShopResponse shop, int joinSkuCount) + private void StartPromotionDelayTask(StartPromotionTaskRequest request, StartPromotionTaskResponse startResponse, PromotionTask promotionTask, ShopResponse shop, List joinSkuList) { var host = GetPlatformRelayAPIHost(Enums.Platform.京东); @@ -660,7 +666,8 @@ namespace BBWY.Server.Business HaveGiftTemplate = promotionTask.GiftTemplateId != null && promotionTask.GiftTemplateId != 0, DeleteGiftSkuList = startResponse.DeleteGiftSkuList, ActivityName = promotionTask.ActivityName, - JoinSkuCount = joinSkuCount, + JoinSkuCount = joinSkuList.Count(), + JoinSkuList = joinSkuList, PJZSDingDingKey = shop.PJZSDingDingKey, PJZSDingDingWebHook = shop.PJZSDingDingWebHook }, GetYunDingRequestHeader(), HttpMethod.Post, timeOutSeconds: 500); @@ -692,32 +699,34 @@ namespace BBWY.Server.Business public void DeletePromotionTaskAndJDTask(DeletePromotionTaskRequest request) { var dbPromotionTask = fsql.Select(request.TaskId).ToOne(); - if (dbPromotionTask.Status != Enums.PromitionTaskStatus.等待) - { - var httpResult = restApiService.SendRequest(GetPlatformRelayAPIHost(Enums.Platform.京东), - "api/platformsdk/DeleteJDPromotionTask", - new DeleteJDPromotionTaskRequest() - { - AppKey = request.AppKey, - AppSecret = request.AppSecret, - AppToken = request.AppToken, - Platform = Enums.Platform.京东, - PromotionId = dbPromotionTask.PromotionId.Value - }, - GetYunDingRequestHeader(), - HttpMethod.Post); - if (httpResult.StatusCode != System.Net.HttpStatusCode.OK) - throw new BusinessException(httpResult.Content); - var response = JsonConvert.DeserializeObject(httpResult.Content); - if (!response.Success) - throw new BusinessException(response.Msg); - } fsql.Transaction(() => { - fsql.Delete(request.TaskId).ExecuteAffrows(); - fsql.Delete().Where(psr => psr.PromotionTaskId == request.TaskId).ExecuteAffrows(); + //fsql.Delete(request.TaskId).ExecuteAffrows(); + fsql.Update(request.TaskId).Set(p => p.IsEnabled, false).ExecuteAffrows(); + //fsql.Delete().Where(psr => psr.PromotionTaskId == request.TaskId).ExecuteAffrows(); }); + + //if (dbPromotionTask.Status != Enums.PromitionTaskStatus.等待) + //{ + var httpResult = restApiService.SendRequest(GetPlatformRelayAPIHost(Enums.Platform.京东), + "api/platformsdk/DeleteJDPromotionTask", + new DeleteJDPromotionTaskRequest() + { + AppKey = request.AppKey, + AppSecret = request.AppSecret, + AppToken = request.AppToken, + Platform = Enums.Platform.京东, + PromotionId = dbPromotionTask.PromotionId.Value + }, + GetYunDingRequestHeader(), + HttpMethod.Post); + if (httpResult.StatusCode != System.Net.HttpStatusCode.OK) + throw new BusinessException($"【{dbPromotionTask.ActivityName}】评价助手活动删除成功,JD活动删除失败,请手动到JD后台删除,并通知技术员分析失败原因,{httpResult.Content}"); + var response = JsonConvert.DeserializeObject(httpResult.Content); + if (!response.Success) + throw new BusinessException($"【{dbPromotionTask.ActivityName}】评价助手活动删除成功,JD活动删除失败,请手动到JD后台删除,并通知技术员分析失败原因,{response.Msg}"); + //} } public void DeletePromotionTask(long pjzsTaskId) @@ -832,7 +841,7 @@ namespace BBWY.Server.Business //开始下一轮开始任务 var nextPromotionTaskList = fsql.Select().WhereIf(shopId != null, pt => pt.ShopId == shopId) - .Where(pt => pt.Status == Enums.PromitionTaskStatus.等待 && pt.PreTaskId == -1) + .Where(pt => pt.Status == Enums.PromitionTaskStatus.等待 && pt.PreTaskId == -1 && pt.IsEnabled == true) .ToList(pt => new { Id = pt.Id, ShopId = pt.ShopId, TaskName = pt.ActivityName }); if (nextPromotionTaskList.Count() > 0) { @@ -848,6 +857,7 @@ namespace BBWY.Server.Business //查询正在进行的任务 var runningTaskList = fsql.Select() + .Where(pt => pt.IsEnabled == true) .WhereIf(shopId != null, pt => pt.ShopId == shopId) .WhereIf(taskId != null, pt => pt.Id == taskId) .WhereIf(taskId == null, pt => pt.Status == Enums.PromitionTaskStatus.进行中).ToList(); @@ -1029,6 +1039,30 @@ namespace BBWY.Server.Business }, GetYunDingRequestHeader(), HttpMethod.Post); + if (httpResult.StatusCode != System.Net.HttpStatusCode.OK) + { + var msgBuilder = new StringBuilder(); + msgBuilder.AppendLine($"店铺名称:{shop.ShopName}"); + msgBuilder.AppendLine($"活动名称:{promotionTask.ActivityName}"); + msgBuilder.AppendLine($"错误原因:{httpResult.Content}"); + msgBuilder.AppendLine("删除活动失败,请手动到后台删除,并通知技术员分析失败原因"); + dingDingBusiness.SendDingDingBotMessage(shop.PJZSDingDingKey, shop.PJZSDingDingWebHook, $"任务[{promotionTask.ActivityName}]删除任务失败,{httpResult.Content}"); + } + else + { + var res = JsonConvert.DeserializeObject(httpResult.Content); + if (!res.Success) + { + var msgBuilder = new StringBuilder(); + msgBuilder.AppendLine($"店铺名称:{shop.ShopName}"); + msgBuilder.AppendLine($"活动名称:{promotionTask.ActivityName}"); + msgBuilder.AppendLine($"错误原因:{httpResult.Content}"); + msgBuilder.AppendLine("删除活动失败,请手动到后台删除,并通知技术员分析失败原因"); + dingDingBusiness.SendDingDingBotMessage(shop.PJZSDingDingKey, shop.PJZSDingDingWebHook, $"任务[{promotionTask.ActivityName}]删除任务失败,{res.Msg}"); + } + } + + } #endregion } @@ -1069,6 +1103,7 @@ namespace BBWY.Server.Business { var childTaskList = fsql.Select().Where(pt => pt.ShopId == shopId && pt.Status == Enums.PromitionTaskStatus.等待 && + pt.IsEnabled == true && jobDoneTaskIdList.Contains(pt.PreTaskId.Value)) .ToList(pt => new { Id = pt.Id, ShopId = pt.ShopId, TaskName = pt.ActivityName }); if (childTaskList.Count() > 0) diff --git a/BBWY.Server.Business/PlatformSDK/JDBusiness.cs b/BBWY.Server.Business/PlatformSDK/JDBusiness.cs index 923740e4..eab2da83 100644 --- a/BBWY.Server.Business/PlatformSDK/JDBusiness.cs +++ b/BBWY.Server.Business/PlatformSDK/JDBusiness.cs @@ -1402,13 +1402,17 @@ namespace BBWY.Server.Business #region 检查奶妈sku是否完全生效 var lastQueryJoinCount = 0; + List noJoinSkuList = null; var isJoinCompleted = false; { var repeatCount = 0; while (true) { var promotionTaskSkuList = GetPromotionTaskSku(request.AppKey, request.AppSecret, request.AppToken, request.JDPromotionId); - var currentQueryJoinCount = promotionTaskSkuList.Count(s => s.Value("bind_type") == 1 && s.Value("sku_status") == 1); + //var currentQueryJoinCount = promotionTaskSkuList.Count(s => s.Value("bind_type") == 1 && s.Value("sku_status") == 1); + var currentQueryJoinList = promotionTaskSkuList.Where(s => s.Value("bind_type") == 1 && s.Value("sku_status") == 1) + .Select(s => s.Value("sku_id")).ToList(); + var currentQueryJoinCount = currentQueryJoinList.Count(); if (currentQueryJoinCount == request.JoinSkuCount) { isJoinCompleted = true; @@ -1421,7 +1425,11 @@ namespace BBWY.Server.Business { repeatCount++; if (repeatCount > 2) + { + noJoinSkuList = request.JoinSkuList.Except(currentQueryJoinList).ToList(); break; + } + } lastQueryJoinCount = currentQueryJoinCount; Thread.Sleep(30000); @@ -1440,9 +1448,15 @@ namespace BBWY.Server.Business ddMsg.AppendLine($"任务奶妈数:{request.JoinSkuCount}"); ddMsg.AppendLine($"参与奶妈数:{lastQueryJoinCount}"); ddMsg.AppendLine("参与任务的奶妈数异常请检查"); - //ddMsg.AppendLine("以上SKU可能已下架或同时参与多个赠品促销活动"); - //ddMsg.AppendLine("1.如已下架请将对应的SKU移除奶妈列表"); - //ddMsg.AppendLine("2.系统会自动剔除同时参与多个赠品促销的SKU,请检查以上SKU是否在失效的促销活动,请及时删除,已暂停或已停止的促销活动"); + if (noJoinSkuList != null && noJoinSkuList.Count > 0) + { + foreach (var noJoinSku in noJoinSkuList) + ddMsg.AppendLine(noJoinSku); + ddMsg.AppendLine("以上SKU可能已下架或同时参与多个赠品促销活动"); + ddMsg.AppendLine("1.如已下架请将对应的SKU移除奶妈列表"); + ddMsg.AppendLine("2.系统会自动剔除同时参与多个赠品促销的SKU,请检查以上SKU是否在失效的促销活动,请及时删除,已暂停或已停止的促销活动"); + } + } if (!string.IsNullOrEmpty(request.PJZSDingDingKey) && !string.IsNullOrEmpty(request.PJZSDingDingWebHook)) dingDingBusiness.SendDingDingBotMessage(request.PJZSDingDingKey, request.PJZSDingDingWebHook, ddMsg.ToString()); diff --git a/BBWY.Server.Business/TestBusiness.cs b/BBWY.Server.Business/TestBusiness.cs index f48022af..72472c5a 100644 --- a/BBWY.Server.Business/TestBusiness.cs +++ b/BBWY.Server.Business/TestBusiness.cs @@ -192,6 +192,9 @@ namespace BBWY.Server.Business .OrderByDescending(o => o.StartTime) .ToList(o => o.Id); + if (orderIdList.Count() == 0) + return; + fsql.Transaction(() => { fsql.Delete(orderIdList).ExecuteAffrows(); @@ -204,7 +207,7 @@ namespace BBWY.Server.Business { var orderId = orderIdList[i]; orderSyncBusiness.SyncOrder(shop, orderId); - Console.WriteLine($"SyncOrder {shop.ShopName},orderProgress {i + 1}/{orderIdList.Count()}"); + Console.WriteLine($"SyncOrder {shop.ShopName},SyncProgress {i + 1}/{orderIdList.Count()}"); } // foreach (var orderId in orderIdList) // { @@ -222,7 +225,7 @@ namespace BBWY.Server.Business foreach (var order in orderList) { orderIndex++; - Console.WriteLine($"Calculation {shop.ShopName}, orderProgress {orderIndex}/{orderList.Count()}"); + Console.WriteLine($"Calculation {shop.ShopName}, CalculationProgress {orderIndex}/{orderList.Count()}"); var currentOrderCostDetailList = orderCostDetailList.Where(ocd => ocd.OrderId == order.Id).ToList(); diff --git a/BBWY.Server.Model/Dto/Request/PromotionTask/StartPromotionTaskRequest.cs b/BBWY.Server.Model/Dto/Request/PromotionTask/StartPromotionTaskRequest.cs index 05281206..2287e654 100644 --- a/BBWY.Server.Model/Dto/Request/PromotionTask/StartPromotionTaskRequest.cs +++ b/BBWY.Server.Model/Dto/Request/PromotionTask/StartPromotionTaskRequest.cs @@ -100,6 +100,11 @@ namespace BBWY.Server.Model.Dto /// public int JoinSkuCount { get; set; } + /// + /// 参与活动的SKU列表 (不含赠品) + /// + public List JoinSkuList { get; set; } + /// /// 活动名称 ///