Browse Source

评价助手对接qy消息中心

master
shanji 1 year ago
parent
commit
52ec1f1d5a
  1. 5
      BBWY.Server.API/Controllers/EvaluationAssistantController.cs
  2. 94
      BBWY.Server.Business/EvaluationAssistant/EvaluationAssistantBusiness.cs
  3. 49
      BBWY.Server.Business/QYMessageCenterBusiness.cs
  4. 43
      BBWY.Server.Business/Vender/VenderBusiness.cs
  5. 5
      BBWY.Server.Model/Dto/Response/Vender/ShopResponse.cs

5
BBWY.Server.API/Controllers/EvaluationAssistantController.cs

@ -2,6 +2,7 @@
using BBWY.Server.Model.Dto;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
namespace BBWY.Server.API.Controllers
@ -106,7 +107,7 @@ namespace BBWY.Server.API.Controllers
[HttpPost]
public void StartPromotionTask([FromBody] StartPromotionTaskRequest request)
{
evaluationAssistantBusiness.StartPromotionTask(request);
evaluationAssistantBusiness.StartPromotionTask(request, null);
}
/// <summary>
@ -124,7 +125,7 @@ namespace BBWY.Server.API.Controllers
/// </summary>
/// <param name="pjzsTaskId"></param>
[HttpDelete("{pjzsTaskId}")]
public void DeletePromotionTask([FromRoute]long pjzsTaskId)
public void DeletePromotionTask([FromRoute] long pjzsTaskId)
{
evaluationAssistantBusiness.DeletePromotionTask(pjzsTaskId);
}

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

@ -5,6 +5,8 @@ using BBWY.Server.Model;
using BBWY.Server.Model.Db;
using BBWY.Server.Model.Dto;
using FreeSql;
using Jd.Api.Domain;
//using Jd.Api.Domain;
using Microsoft.Extensions.Options;
using Newtonsoft.Json;
@ -27,7 +29,8 @@ namespace BBWY.Server.Business
private IIdGenerator idGenerator;
private TaskSchedulerManager taskSchedulerManager;
private VenderBusiness venderBusiness;
private DingDingBusiness dingDingBusiness;
//private DingDingBusiness dingDingBusiness;
private QYMessageCenterBusiness qyMessageCenterBusiness;
private NLogManager nLogManager;
private List<Enums.OrderState> validOrderStateList;
private List<Enums.PromitionTaskStatus> preTaskStateList;
@ -36,14 +39,15 @@ namespace BBWY.Server.Business
private char[] spliter;
public EvaluationAssistantBusiness(RestApiService restApiService, IOptions<GlobalConfig> options, YunDingBusiness yunDingBusiness, IFreeSql fsql, IIdGenerator idGenerator, TaskSchedulerManager taskSchedulerManager, VenderBusiness venderBusiness, DingDingBusiness dingDingBusiness, NLogManager nLogManager, ProductBusiness productBusiness, FreeSqlMultiDBManager freeSqlMultiDBManager) : base(restApiService, options, yunDingBusiness)
public EvaluationAssistantBusiness(RestApiService restApiService, IOptions<GlobalConfig> options, YunDingBusiness yunDingBusiness, IFreeSql fsql, IIdGenerator idGenerator, TaskSchedulerManager taskSchedulerManager, VenderBusiness venderBusiness, QYMessageCenterBusiness qyMessageCenterBusiness, NLogManager nLogManager, ProductBusiness productBusiness, FreeSqlMultiDBManager freeSqlMultiDBManager) : base(restApiService, options, yunDingBusiness)
{
this.fsql = fsql;
this.idGenerator = idGenerator;
this.taskSchedulerManager = taskSchedulerManager;
this.venderBusiness = venderBusiness;
this.dingDingBusiness = dingDingBusiness;
//this.dingDingBusiness = dingDingBusiness;
this.qyMessageCenterBusiness = qyMessageCenterBusiness;
this.nLogManager = nLogManager;
this.productBusiness = productBusiness;
this.freeSqlMultiDBManager = freeSqlMultiDBManager;
@ -504,7 +508,8 @@ namespace BBWY.Server.Business
/// <param name="request"></param>
/// <param name="shop"></param>
/// <exception cref="BusinessException"></exception>
public void StartPromotionTask(StartPromotionTaskRequest request, ShopResponse shop = null)
/// <exception cref="Exception"></exception>
public PromotionTask StartPromotionTask(StartPromotionTaskRequest request, ShopResponse shop = null)
{
var dbPromotionTask = fsql.Select<PromotionTask>(request.Id).ToOne();
@ -657,13 +662,6 @@ namespace BBWY.Server.Business
startResponse.DeleteGiftSkuList.Count() != 0)
dbPromotionTask.GiftTemplatePutNewSku = string.Join(",", startResponse.DeleteGiftSkuList);
//try
//{
// if (!string.IsNullOrEmpty(shop.PJZSDingDingKey) && !string.IsNullOrEmpty(shop.PJZSDingDingWebHook))
// dingDingBusiness.SendDingDingBotMessage(shop.PJZSDingDingKey, shop.PJZSDingDingWebHook, $"任务[{dbPromotionTask.ActivityName}]已开始,请及时查看任务是否正常进行");
//}
//catch { }
fsql.Update<PromotionTask>(request.Id).Set(pt => pt.PromotionId, startResponse.JDPromotionId)
.SetIf(!string.IsNullOrEmpty(dbPromotionTask.GiftTemplatePutNewSku), pt => pt.GiftTemplatePutNewSku, dbPromotionTask.GiftTemplatePutNewSku)
.Set(pt => pt.StartTime, DateTime.Now)
@ -674,6 +672,7 @@ namespace BBWY.Server.Business
//joinSkuCount = joinSkuNoGiftList.Distinct().Count();
joinSkuNoGiftList = joinSkuNoGiftList.Distinct().ToList();
Task.Factory.StartNew(() => StartPromotionDelayTask(request, startResponse, dbPromotionTask, shop, joinSkuNoGiftList), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.JDPromotionDelayTaskScheduler);
return dbPromotionTask;
}
private void StartPromotionDelayTask(StartPromotionTaskRequest request, StartPromotionTaskResponse startResponse, PromotionTask promotionTask, ShopResponse shop, List<string> joinSkuList)
@ -728,14 +727,20 @@ namespace BBWY.Server.Business
pt.PreTaskId == -1)).Any();
if (!haveNextTask)
{
if (!string.IsNullOrEmpty(shop.PJZSDingDingKey) && !string.IsNullOrEmpty(shop.PJZSDingDingWebHook))
//if (!string.IsNullOrEmpty(shop.PJZSDingDingKey) && !string.IsNullOrEmpty(shop.PJZSDingDingWebHook))
//{
// try
// {
// dingDingBusiness.SendDingDingBotMessage(shop.PJZSDingDingKey, shop.PJZSDingDingWebHook, $"评价助手\n店铺:{shop.ShopName}\n任务列表无后续任务,为避免空档请及时设置后续任务");
// }
// catch { }
//}
try
{
try
{
dingDingBusiness.SendDingDingBotMessage(shop.PJZSDingDingKey, shop.PJZSDingDingWebHook, $"评价助手\n店铺:{shop.ShopName}\n任务列表无后续任务,为避免空档请及时设置后续任务");
}
catch { }
qyMessageCenterBusiness.SendMessage(shop.TeamId, shop.TeamId, shop.ShopId, "PJZS", shop.ShopName, "任务列表无后续任务,为避免空档请及时设置后续任务", "PZJS API", string.Empty);
}
catch { }
}
#endregion
}
@ -1096,26 +1101,19 @@ 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}");
//dingDingBusiness.SendDingDingBotMessage(shop.PJZSDingDingKey, shop.PJZSDingDingWebHook, $"任务[{promotionTask.ActivityName}]删除任务失败,{httpResult.Content}");
qyMessageCenterBusiness.SendMessage(shop.TeamId, shop.TeamId, shop.ShopId, "PZJS", shop.ShopName, $"任务[{promotionTask.ActivityName}]删除任务失败,{httpResult.Content}", "PJZS API", string.Empty);
}
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}");
//dingDingBusiness.SendDingDingBotMessage(shop.PJZSDingDingKey, shop.PJZSDingDingWebHook, $"任务[{promotionTask.ActivityName}]删除任务失败,{res.Msg}");
qyMessageCenterBusiness.SendMessage(shop.TeamId, shop.TeamId, shop.ShopId, "PZJS", shop.ShopName, $"任务[{promotionTask.ActivityName}]删除任务失败,{res.Msg}", "PJZS API", string.Empty);
}
}
@ -1196,7 +1194,8 @@ namespace BBWY.Server.Business
{
try
{
dingDingBusiness.SendDingDingBotMessage(shop.PJZSDingDingKey, shop.PJZSDingDingWebHook, $"任务[{jobDoneTask.ActivityName}]已结束");
//dingDingBusiness.SendDingDingBotMessage(shop.PJZSDingDingKey, shop.PJZSDingDingWebHook, $"任务[{jobDoneTask.ActivityName}]已结束");
qyMessageCenterBusiness.SendMessage(shop.TeamId, shop.TeamId, shop.ShopId, "PZJS", shop.ShopName, $"任务[{jobDoneTask.ActivityName}]已结束", "PJZS API", string.Empty);
}
catch { }
}
@ -1222,7 +1221,9 @@ namespace BBWY.Server.Business
{
try
{
dingDingBusiness.SendDingDingBotMessage(shop.PJZSDingDingKey, shop.PJZSDingDingWebHook, $"评价助手\n店铺:{shop.ShopName}\n任务全部执行完成,请及时设置后续任务!!");
//dingDingBusiness.SendDingDingBotMessage(shop.PJZSDingDingKey, shop.PJZSDingDingWebHook, $"评价助手\n店铺:{shop.ShopName}\n任务全部执行完成,请及时设置后续任务!!");
qyMessageCenterBusiness.SendMessage(shop.TeamId, shop.TeamId, shop.ShopId, "PZJS", shop.ShopName, "任务全部执行完成,请及时设置后续任务", "PJZS API", string.Empty);
}
catch { }
}
@ -1256,9 +1257,10 @@ namespace BBWY.Server.Business
private void AutoStart(long taskId, string taskName, ShopResponse shop)
{
var loggerName = $"评价助手-{shop.ShopName}";
PromotionTask task = null;
try
{
StartPromotionTask(new StartPromotionTaskRequest()
task = StartPromotionTask(new StartPromotionTaskRequest()
{
Id = taskId,
AppKey = shop.AppKey2,
@ -1269,7 +1271,21 @@ namespace BBWY.Server.Business
}
catch (Exception ex)
{
Error(shop, loggerName, $"AutoStart 任务[{taskName}]", ex);
if (task != null)
{
nLogManager.GetLogger(loggerName).Error(ex, $"AutoStart 任务[{task.ActivityName}]");
qyMessageCenterBusiness.SendMessage(shop.TeamId, shop.TeamId, shop.ShopId, "PJZS", shop.ShopName, new
{
task.ActivityName,
task.MainProductSpu,
task.SpuLogo,
ErrorMsg = ex.Message
}, "SHANGJIASHIBAI", "PJZS API", string.Empty);
}
else
{
Error(shop, loggerName, $"AutoStart 任务[{taskName}]", ex);
}
}
}
@ -1277,9 +1293,15 @@ namespace BBWY.Server.Business
{
nLogManager.GetLogger(loggerName).Error(ex, message);
//send dingding
if (!string.IsNullOrEmpty(shop.PJZSDingDingKey) && !string.IsNullOrEmpty(shop.PJZSDingDingWebHook))
dingDingBusiness.SendDingDingBotMessage(shop.PJZSDingDingKey, shop.PJZSDingDingWebHook, $"评价助手\n{shop.ShopName}\n{message}\n{ex.Message}");
////send dingding
//if (!string.IsNullOrEmpty(shop.PJZSDingDingKey) && !string.IsNullOrEmpty(shop.PJZSDingDingWebHook))
// dingDingBusiness.SendDingDingBotMessage(shop.PJZSDingDingKey, shop.PJZSDingDingWebHook, $"评价助手\n{shop.ShopName}\n{message}\n{ex.Message}");
try
{
qyMessageCenterBusiness.SendMessage(shop.TeamId, shop.TeamId, shop.ShopId, "PJZS", shop.ShopName, $"{message} {ex.Message}", "PJZS API", string.Empty);
}
catch { }
}
#endregion
}

49
BBWY.Server.Business/QYMessageCenterBusiness.cs

@ -0,0 +1,49 @@
using BBWY.Common.Http;
using BBWY.Common.Models;
using Newtonsoft.Json;
using System.Net.Http;
namespace BBWY.Server.Business
{
public class QYMessageCenterBusiness : IDenpendency
{
private RestApiService restApiService;
public QYMessageCenterBusiness(RestApiService restApiService)
{
this.restApiService = restApiService;
}
public void SendMessage(string channel, string teamId, string shopId, string appCode, string title, string content, string senderId, string recevierId)
{
SendMessage(channel, teamId, shopId, appCode, title, content, string.Empty, senderId, recevierId, false);
}
public void SendMessage(string channel, string teamId, string shopId, string appCode, string title, object jsonContent, string customTypeCode, string senderId, string recevierId)
{
SendMessage(channel, teamId, shopId, appCode, title, JsonConvert.SerializeObject(jsonContent), customTypeCode, senderId, recevierId, true);
}
private void SendMessage(string channel, string teamId, string shopId, string appCode, string title, string content, string customTypeCode, string senderId, string recevierId, bool isJsonMsg)
{
var httpResult = restApiService.SendRequest("http://api.msg.qiyue666.com", "api/message/send", new
{
appCode,
channel,
teamId,
shopId,
title,
content,
customTypeCode,
senderId,
recevierId,
isJsonMsg
}, null, HttpMethod.Post);
if ((httpResult.StatusCode != System.Net.HttpStatusCode.OK))
throw new BusinessException($"QYMessageCenterBusiness SendMessage HttpCode {httpResult.StatusCode}");
var response = JsonConvert.DeserializeObject<BBWY.Common.Models.ApiResponse>(httpResult.Content);
if (!response.Success)
throw new BusinessException($"QYMessageCenterBusiness SendMessage {response.Msg}");
}
}
}

43
BBWY.Server.Business/Vender/VenderBusiness.cs

@ -295,13 +295,42 @@ namespace BBWY.Server.Business
public IList<ShopResponse> GetShopList(long? shopId = null, Enums.Platform? platform = null, bool filterTurnoverDays = false, bool filterSiNan = false, bool? isEnabled = true)
{
return freeSqlMultiDBManager.MDSfsql.Select<Shops>().Where(s => !string.IsNullOrEmpty(s.ShopId))
.WhereIf(shopId != null, s => s.ShopId == shopId.ToString())
.WhereIf(platform != null, s => s.PlatformId == (int)platform)
.WhereIf(filterTurnoverDays, s => s.SkuSafeTurnoverDays != 0)
.WhereIf(filterSiNan, s => !string.IsNullOrEmpty(s.SiNanDingDingWebHook))
.WhereIf(isEnabled != null, s => s.IsEnabled == isEnabled)
.ToList<ShopResponse>();
return freeSqlMultiDBManager.MDSfsql.Select<Shops, Shopdepartment>()
.InnerJoin((s, sd) => s.Id == sd.ShopId)
.Where((s, sd) => !string.IsNullOrEmpty(s.ShopId))
.WhereIf(shopId != null, (s, sd) => s.ShopId == shopId.ToString())
.WhereIf(platform != null, (s, sd) => s.PlatformId == (int)platform)
.WhereIf(filterTurnoverDays, (s, sd) => s.SkuSafeTurnoverDays != 0)
.WhereIf(filterSiNan, (s, sd) => !string.IsNullOrEmpty(s.SiNanDingDingWebHook))
.WhereIf(isEnabled != null, (s, sd) => s.IsEnabled == isEnabled)
.ToList((s, sd) => new ShopResponse
{
Id = s.Id,
AppKey = s.AppKey,
ShopId = s.ShopId,
AppKey2 = s.AppKey2,
AppSecret = s.AppSecret,
AppSecret2 = s.AppSecret2,
AppToken = s.AppToken,
AppToken2 = s.AppToken2,
DingDingKey = s.DingDingKey,
DingDingWebHook = s.DingDingWebHook,
ManagePwd = s.ManagePwd,
PJZSDingDingKey = s.PJZSDingDingKey,
PJZSDingDingWebHook = s.PJZSDingDingWebHook,
PlatformCommissionRatio = s.PlatformCommissionRatio,
PlatformId = (Enums.Platform)s.PlatformId,
QiKuDingDingKey = s.QiKuDingDingKey,
QiKuDingDingWebHook = s.QiKuDingDingWebHook,
ShopName = s.ShopName,
ShopType = s.ShopType,
SiNanDingDingKey = s.SiNanDingDingKey,
SiNanDingDingWebHook = s.SiNanDingDingWebHook,
SiNanPolicyLevel = s.SiNanPolicyLevel,
SkuSafeTurnoverDays = s.SkuSafeTurnoverDays,
VenderId = s.VenderId,
TeamId = sd.DepartmentId
});
}
public ShopResponse GetShopByVenderId(string venderId)

5
BBWY.Server.Model/Dto/Response/Vender/ShopResponse.cs

@ -92,6 +92,11 @@ namespace BBWY.Server.Model.Dto
/// 齐库钉钉密钥
/// </summary>
public string QiKuDingDingKey { get; set; }
/// <summary>
/// 所属团队Id
/// </summary>
public string TeamId { get; set; }
}
public class PurchaseAccountResponse

Loading…
Cancel
Save