Browse Source

pjzs修改

AddValidOverTime
shanji 2 years ago
parent
commit
615b5ed85f
  1. 28
      BBWY.Server.Business/DingDingBusiness.cs
  2. 91
      BBWY.Server.Business/EvaluationAssistant/EvaluationAssistantBusiness.cs
  3. 22
      BBWY.Server.Business/PlatformSDK/JDBusiness.cs
  4. 7
      BBWY.Server.Business/TestBusiness.cs
  5. 5
      BBWY.Server.Model/Dto/Request/PromotionTask/StartPromotionTaskRequest.cs

28
BBWY.Server.Business/DingDingBusiness.cs

@ -21,20 +21,24 @@ namespace BBWY.Server.Business
public void SendDingDingBotMessage(string secret, string webHook, string content) public void SendDingDingBotMessage(string secret, string webHook, string content)
{ {
var timestamp = DateTime.Now.DateTimeToStamp(); try
var stringToSign = timestamp + "\n" + secret;
var sign = EncryptWithSHA256(stringToSign, secret);
var url = $"{webHook}&timestamp={timestamp}&sign={sign}";
var result = restApiService.SendRequest(url, string.Empty, new
{ {
msgtype = "text", var timestamp = DateTime.Now.DateTimeToStamp();
text = new var stringToSign = timestamp + "\n" + secret;
var sign = EncryptWithSHA256(stringToSign, secret);
var url = $"{webHook}&timestamp={timestamp}&sign={sign}";
var result = restApiService.SendRequest(url, string.Empty, new
{ {
content = content msgtype = "text",
} text = new
}, null, HttpMethod.Post); {
if (result.StatusCode != System.Net.HttpStatusCode.OK) content = content
throw new Exception($"发送钉钉机器人消息失败 {result.Content}"); }
}, null, HttpMethod.Post);
if (result.StatusCode != System.Net.HttpStatusCode.OK)
throw new Exception($"发送钉钉机器人消息失败 {result.Content}");
}
catch { }
} }
/// <summary> /// <summary>

91
BBWY.Server.Business/EvaluationAssistant/EvaluationAssistantBusiness.cs

@ -12,6 +12,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Net.Http; using System.Net.Http;
using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Yitter.IdGenerator; using Yitter.IdGenerator;
@ -262,6 +263,7 @@ namespace BBWY.Server.Business
{ {
var list = fsql.Select<PromotionTask>().As("pt") var list = fsql.Select<PromotionTask>().As("pt")
.Where(pt => pt.ShopId == request.ShopId) .Where(pt => pt.ShopId == request.ShopId)
.Where(pt => pt.IsEnabled == true)
.OrderBy(pt => SqlExt.Case().When(pt.Status == Enums.PromitionTaskStatus., 0) .OrderBy(pt => SqlExt.Case().When(pt.Status == Enums.PromitionTaskStatus., 0)
.When(pt.Status == Enums.PromitionTaskStatus., 1) .When(pt.Status == Enums.PromitionTaskStatus., 1)
.When(pt.Status == Enums.PromitionTaskStatus., 2) .When(pt.Status == Enums.PromitionTaskStatus., 2)
@ -301,6 +303,7 @@ namespace BBWY.Server.Business
var list = fsql.Select<PromotionTask>().As("pt") var list = fsql.Select<PromotionTask>().As("pt")
.Where(pt => pt.ShopId == shopId) .Where(pt => pt.ShopId == shopId)
.Where(pt => preTaskStateList.Contains(pt.Status.Value)) .Where(pt => preTaskStateList.Contains(pt.Status.Value))
.Where(pt => pt.IsEnabled == true)
.OrderBy(pt => SqlExt.Case().When(pt.Status == Enums.PromitionTaskStatus., 0) .OrderBy(pt => SqlExt.Case().When(pt.Status == Enums.PromitionTaskStatus., 0)
.When(pt.Status == Enums.PromitionTaskStatus., 1) .When(pt.Status == Enums.PromitionTaskStatus., 1)
.When(pt.Status == Enums.PromitionTaskStatus., 2) .When(pt.Status == Enums.PromitionTaskStatus., 2)
@ -505,7 +508,9 @@ namespace BBWY.Server.Business
} }
} }
var runingTaskList = fsql.Select<PromotionTask>().Where(pt => pt.ShopId == dbPromotionTask.ShopId && pt.Status == Enums.PromitionTaskStatus.).ToList(); var runingTaskList = fsql.Select<PromotionTask>().Where(pt => pt.ShopId == dbPromotionTask.ShopId &&
pt.Status == Enums.PromitionTaskStatus. &&
pt.IsEnabled == true).ToList();
if (dbPromotionTask.MotherTemplateId != null && dbPromotionTask.MotherTemplateId != 0) if (dbPromotionTask.MotherTemplateId != null && dbPromotionTask.MotherTemplateId != 0)
@ -639,11 +644,12 @@ namespace BBWY.Server.Business
.Set(pt => pt.Status, Enums.PromitionTaskStatus.) .Set(pt => pt.Status, Enums.PromitionTaskStatus.)
.ExecuteAffrows(); .ExecuteAffrows();
joinSkuCount = joinSkuNoGiftList.Distinct().Count(); //joinSkuCount = joinSkuNoGiftList.Distinct().Count();
Task.Factory.StartNew(() => StartPromotionDelayTask(request, startResponse, dbPromotionTask, shop, joinSkuCount), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.JDPromotionDelayTaskScheduler); 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<string> joinSkuList)
{ {
var host = GetPlatformRelayAPIHost(Enums.Platform.); var host = GetPlatformRelayAPIHost(Enums.Platform.);
@ -660,7 +666,8 @@ namespace BBWY.Server.Business
HaveGiftTemplate = promotionTask.GiftTemplateId != null && promotionTask.GiftTemplateId != 0, HaveGiftTemplate = promotionTask.GiftTemplateId != null && promotionTask.GiftTemplateId != 0,
DeleteGiftSkuList = startResponse.DeleteGiftSkuList, DeleteGiftSkuList = startResponse.DeleteGiftSkuList,
ActivityName = promotionTask.ActivityName, ActivityName = promotionTask.ActivityName,
JoinSkuCount = joinSkuCount, JoinSkuCount = joinSkuList.Count(),
JoinSkuList = joinSkuList,
PJZSDingDingKey = shop.PJZSDingDingKey, PJZSDingDingKey = shop.PJZSDingDingKey,
PJZSDingDingWebHook = shop.PJZSDingDingWebHook PJZSDingDingWebHook = shop.PJZSDingDingWebHook
}, GetYunDingRequestHeader(), HttpMethod.Post, timeOutSeconds: 500); }, GetYunDingRequestHeader(), HttpMethod.Post, timeOutSeconds: 500);
@ -692,32 +699,34 @@ namespace BBWY.Server.Business
public void DeletePromotionTaskAndJDTask(DeletePromotionTaskRequest request) public void DeletePromotionTaskAndJDTask(DeletePromotionTaskRequest request)
{ {
var dbPromotionTask = fsql.Select<PromotionTask>(request.TaskId).ToOne(); var dbPromotionTask = fsql.Select<PromotionTask>(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<ApiResponse>(httpResult.Content);
if (!response.Success)
throw new BusinessException(response.Msg);
}
fsql.Transaction(() => fsql.Transaction(() =>
{ {
fsql.Delete<PromotionTask>(request.TaskId).ExecuteAffrows(); //fsql.Delete<PromotionTask>(request.TaskId).ExecuteAffrows();
fsql.Delete<PromotionTaskSkuRecord>().Where(psr => psr.PromotionTaskId == request.TaskId).ExecuteAffrows(); fsql.Update<PromotionTask>(request.TaskId).Set(p => p.IsEnabled, false).ExecuteAffrows();
//fsql.Delete<PromotionTaskSkuRecord>().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<ApiResponse>(httpResult.Content);
if (!response.Success)
throw new BusinessException($"【{dbPromotionTask.ActivityName}】评价助手活动删除成功,JD活动删除失败,请手动到JD后台删除,并通知技术员分析失败原因,{response.Msg}");
//}
} }
public void DeletePromotionTask(long pjzsTaskId) public void DeletePromotionTask(long pjzsTaskId)
@ -832,7 +841,7 @@ namespace BBWY.Server.Business
//开始下一轮开始任务 //开始下一轮开始任务
var nextPromotionTaskList = fsql.Select<PromotionTask>().WhereIf(shopId != null, pt => pt.ShopId == shopId) var nextPromotionTaskList = fsql.Select<PromotionTask>().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 }); .ToList(pt => new { Id = pt.Id, ShopId = pt.ShopId, TaskName = pt.ActivityName });
if (nextPromotionTaskList.Count() > 0) if (nextPromotionTaskList.Count() > 0)
{ {
@ -848,6 +857,7 @@ namespace BBWY.Server.Business
//查询正在进行的任务 //查询正在进行的任务
var runningTaskList = fsql.Select<PromotionTask>() var runningTaskList = fsql.Select<PromotionTask>()
.Where(pt => pt.IsEnabled == true)
.WhereIf(shopId != null, pt => pt.ShopId == shopId) .WhereIf(shopId != null, pt => pt.ShopId == shopId)
.WhereIf(taskId != null, pt => pt.Id == taskId) .WhereIf(taskId != null, pt => pt.Id == taskId)
.WhereIf(taskId == null, pt => pt.Status == Enums.PromitionTaskStatus.).ToList(); .WhereIf(taskId == null, pt => pt.Status == Enums.PromitionTaskStatus.).ToList();
@ -1029,6 +1039,30 @@ namespace BBWY.Server.Business
}, },
GetYunDingRequestHeader(), GetYunDingRequestHeader(),
HttpMethod.Post); 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<ApiResponse>(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 #endregion
} }
@ -1069,6 +1103,7 @@ namespace BBWY.Server.Business
{ {
var childTaskList = fsql.Select<PromotionTask>().Where(pt => pt.ShopId == shopId && var childTaskList = fsql.Select<PromotionTask>().Where(pt => pt.ShopId == shopId &&
pt.Status == Enums.PromitionTaskStatus. && pt.Status == Enums.PromitionTaskStatus. &&
pt.IsEnabled == true &&
jobDoneTaskIdList.Contains(pt.PreTaskId.Value)) jobDoneTaskIdList.Contains(pt.PreTaskId.Value))
.ToList(pt => new { Id = pt.Id, ShopId = pt.ShopId, TaskName = pt.ActivityName }); .ToList(pt => new { Id = pt.Id, ShopId = pt.ShopId, TaskName = pt.ActivityName });
if (childTaskList.Count() > 0) if (childTaskList.Count() > 0)

22
BBWY.Server.Business/PlatformSDK/JDBusiness.cs

@ -1402,13 +1402,17 @@ namespace BBWY.Server.Business
#region 检查奶妈sku是否完全生效 #region 检查奶妈sku是否完全生效
var lastQueryJoinCount = 0; var lastQueryJoinCount = 0;
List<string> noJoinSkuList = null;
var isJoinCompleted = false; var isJoinCompleted = false;
{ {
var repeatCount = 0; var repeatCount = 0;
while (true) while (true)
{ {
var promotionTaskSkuList = GetPromotionTaskSku(request.AppKey, request.AppSecret, request.AppToken, request.JDPromotionId); var promotionTaskSkuList = GetPromotionTaskSku(request.AppKey, request.AppSecret, request.AppToken, request.JDPromotionId);
var currentQueryJoinCount = promotionTaskSkuList.Count(s => s.Value<int>("bind_type") == 1 && s.Value<int>("sku_status") == 1); //var currentQueryJoinCount = promotionTaskSkuList.Count(s => s.Value<int>("bind_type") == 1 && s.Value<int>("sku_status") == 1);
var currentQueryJoinList = promotionTaskSkuList.Where(s => s.Value<int>("bind_type") == 1 && s.Value<int>("sku_status") == 1)
.Select(s => s.Value<string>("sku_id")).ToList();
var currentQueryJoinCount = currentQueryJoinList.Count();
if (currentQueryJoinCount == request.JoinSkuCount) if (currentQueryJoinCount == request.JoinSkuCount)
{ {
isJoinCompleted = true; isJoinCompleted = true;
@ -1421,7 +1425,11 @@ namespace BBWY.Server.Business
{ {
repeatCount++; repeatCount++;
if (repeatCount > 2) if (repeatCount > 2)
{
noJoinSkuList = request.JoinSkuList.Except(currentQueryJoinList).ToList();
break; break;
}
} }
lastQueryJoinCount = currentQueryJoinCount; lastQueryJoinCount = currentQueryJoinCount;
Thread.Sleep(30000); Thread.Sleep(30000);
@ -1440,9 +1448,15 @@ namespace BBWY.Server.Business
ddMsg.AppendLine($"任务奶妈数:{request.JoinSkuCount}"); ddMsg.AppendLine($"任务奶妈数:{request.JoinSkuCount}");
ddMsg.AppendLine($"参与奶妈数:{lastQueryJoinCount}"); ddMsg.AppendLine($"参与奶妈数:{lastQueryJoinCount}");
ddMsg.AppendLine("参与任务的奶妈数异常请检查"); ddMsg.AppendLine("参与任务的奶妈数异常请检查");
//ddMsg.AppendLine("以上SKU可能已下架或同时参与多个赠品促销活动"); if (noJoinSkuList != null && noJoinSkuList.Count > 0)
//ddMsg.AppendLine("1.如已下架请将对应的SKU移除奶妈列表"); {
//ddMsg.AppendLine("2.系统会自动剔除同时参与多个赠品促销的SKU,请检查以上SKU是否在失效的促销活动,请及时删除,已暂停或已停止的促销活动"); 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)) if (!string.IsNullOrEmpty(request.PJZSDingDingKey) && !string.IsNullOrEmpty(request.PJZSDingDingWebHook))
dingDingBusiness.SendDingDingBotMessage(request.PJZSDingDingKey, request.PJZSDingDingWebHook, ddMsg.ToString()); dingDingBusiness.SendDingDingBotMessage(request.PJZSDingDingKey, request.PJZSDingDingWebHook, ddMsg.ToString());

7
BBWY.Server.Business/TestBusiness.cs

@ -192,6 +192,9 @@ namespace BBWY.Server.Business
.OrderByDescending(o => o.StartTime) .OrderByDescending(o => o.StartTime)
.ToList(o => o.Id); .ToList(o => o.Id);
if (orderIdList.Count() == 0)
return;
fsql.Transaction(() => fsql.Transaction(() =>
{ {
fsql.Delete<OrderTotalInfo>(orderIdList).ExecuteAffrows(); fsql.Delete<OrderTotalInfo>(orderIdList).ExecuteAffrows();
@ -204,7 +207,7 @@ namespace BBWY.Server.Business
{ {
var orderId = orderIdList[i]; var orderId = orderIdList[i];
orderSyncBusiness.SyncOrder(shop, orderId); 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) // foreach (var orderId in orderIdList)
// { // {
@ -222,7 +225,7 @@ namespace BBWY.Server.Business
foreach (var order in orderList) foreach (var order in orderList)
{ {
orderIndex++; 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(); var currentOrderCostDetailList = orderCostDetailList.Where(ocd => ocd.OrderId == order.Id).ToList();

5
BBWY.Server.Model/Dto/Request/PromotionTask/StartPromotionTaskRequest.cs

@ -100,6 +100,11 @@ namespace BBWY.Server.Model.Dto
/// </summary> /// </summary>
public int JoinSkuCount { get; set; } public int JoinSkuCount { get; set; }
/// <summary>
/// 参与活动的SKU列表 (不含赠品)
/// </summary>
public List<string> JoinSkuList { get; set; }
/// <summary> /// <summary>
/// 活动名称 /// 活动名称
/// </summary> /// </summary>

Loading…
Cancel
Save