using OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice;
using OASystem.Domain.Entities.Groups;
using OASystem.Infrastructure.Repositories.Groups;
using static OASystem.Infrastructure.Repositories.Groups.ProcessOverviewRepository;
namespace OASystem.API.OAMethodLib.Quartz.Business
{
///
/// 团组流程节点提示通知
///
public static class GroupProcessNode
{
private readonly static DelegationInfoRepository _grpDeleRep = AutofacIocManager.Instance.GetService();
private readonly static ProcessOverviewRepository _procOverviewRep = AutofacIocManager.Instance.GetService();
//private static readonly IQiYeWeChatApiService _qiYeWeChatApiService = AutofacIocManager.Instance.GetService();
///
/// 默认通知人用户ID集合 团组流程
///
private readonly static HashSet defaultNotifyUserIds_groupProc = new HashSet
{
"johnny.yang@pan-american-intl.com", // 杨俊霄 5
"Roy.lei", // 雷怡 208
"js" // 江姗 327
};
///
/// 默认通知人用户ID集合 费用结算流程
///
private readonly static HashSet defaultNotifyUserIds_feeProc = new HashSet
{
"johnny.yang@pan-american-intl.com", // 杨俊霄 5
"amy.zhu@pan-american-intl.com", // 朱成梅 22
"Roy.lei", // 雷怡 208
};
///
/// 企微通知
///
public static async void QiYeWeChatNotifyAsync()
{
var currDt = DateTime.Now;
var groupAllNodeInfos = await _procOverviewRep.GetGroupAllProcessNodeInfoAsync();
if (groupAllNodeInfos == null) return;
var notifyList = groupAllNodeInfos.FindAll(x =>
x.IsPrompt &&
x.PromptTime?.Date == currDt.Date &&
(x.GroupType != 248 || // 条件1:非248团组
x.GroupType == 248 && // 条件2:248团组
(x.ProcType == GroupProcessType.Visa ||
x.ProcType == GroupProcessType.Invitation)) // 条件3:只允许签证和商邀
);
if (notifyList == null) return;
// 按照团组ID和流程枚举分组
var groupedByGroupIdAndProcType = notifyList.GroupBy(x => new { x.GroupId, x.ProcType })
.ToDictionary(
group => group.Key,
group => group.ToList()
);
// 提取获取提示人员企业微信用户ID的逻辑
Func, List> getPromptPersonQiyeChatUserIds = promptPersons =>
promptPersons?.Select(x => x.QiyeChatUserId).ToList() ?? new List();
// 按照团分组发送通知
foreach (var group in groupedByGroupIdAndProcType)
{
var info = group.Value.FirstOrDefault();
if (info == null) continue;
var msgs = info.ProcType == GroupProcessType.Invitation
? group.Value.Select(x => $"任务:{x.NodeName},开始了。").ToList()
: new List { $"任务:{info.NodeName},开始了。" };
var qiWeiChatUserIds = new List();
//根据流程 通知不同的人 费用结算 通知财务主管;其他类型 通知国交经理
if (info.ProcType == GroupProcessType.FeeSettle) qiWeiChatUserIds.AddRange(defaultNotifyUserIds_feeProc);
else qiWeiChatUserIds.AddRange(defaultNotifyUserIds_groupProc);
qiWeiChatUserIds.AddRange(getPromptPersonQiyeChatUserIds(info.PromptPerson));
// 企微通知
await AppNoticeLibrary.SendUserMsg_GroupProcNode_Notif("团组任务通知", info.GroupName, msgs, qiWeiChatUserIds);
}
}
///
/// 企微预警通知
///
public static async void QiYeWeChatWarnNotifyAsync()
{
var currDt = DateTime.Now;
var groupAllNodeInfos = await _procOverviewRep.GetGroupAllProcessNodeInfoAsync();
if (groupAllNodeInfos == null) return;
var notifyList = groupAllNodeInfos.FindAll(x =>
x.IsAlert &&
x.AlertTime?.Date == currDt.Date &&
(x.GroupType != 248 || // 条件1:非248团组
x.GroupType == 248 && // 条件2:248团组
(x.ProcType == GroupProcessType.Visa ||
x.ProcType == GroupProcessType.Invitation)) // 条件3:只允许签证和商邀
);
if (notifyList == null) return;
// 按照团组ID和流程枚举分组
var groupedByGroupIdAndProcType = notifyList.GroupBy(x => new { x.GroupId, x.ProcType })
.ToDictionary(
group => group.Key,
group => group.ToList()
);
// 提取获取提示人员企业微信用户ID的逻辑
Func, List> getPromptPersonQiyeChatUserIds = promptPersons =>
promptPersons?.Select(x => x.QiyeChatUserId).ToList() ?? new List();
// 按照团分组发送通知
foreach (var group in groupedByGroupIdAndProcType)
{
var info = group.Value.FirstOrDefault();
if (info == null) continue;
var msgs = info.ProcType == GroupProcessType.Invitation
? group.Value.Select(x => $"你操作的 {x.NodeName} 任务进度用时已过半,请抓紧时间完成任务!如需帮助,请立即联系上级领导!").ToList()
: new List { $"你操作的 {info.NodeName} 任务进度用时已过半,请抓紧时间完成任务!如需帮助,请立即联系上级领导!" };
var qiWeiChatUserIds = new List();
//根据流程 通知不同的人 费用结算 通知财务主管;其他类型 通知国交经理
if (info.ProcType == GroupProcessType.FeeSettle) qiWeiChatUserIds.AddRange(defaultNotifyUserIds_feeProc);
else qiWeiChatUserIds.AddRange(defaultNotifyUserIds_groupProc);
qiWeiChatUserIds.AddRange(getPromptPersonQiyeChatUserIds(info.PromptPerson));
// 企微通知
await AppNoticeLibrary.SendUserMsg_GroupProcNode_Notif("团组任务预警",info.GroupName, msgs, qiWeiChatUserIds);
}
}
}
}