GroupProcessNode.cs 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. using OASystem.API.OAMethodLib.QiYeWeChatAPI;
  2. using OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice;
  3. using OASystem.Domain.Entities.Groups;
  4. using OASystem.Infrastructure.Repositories.Groups;
  5. using static OASystem.Infrastructure.Repositories.Groups.ProcessOverviewRepository;
  6. namespace OASystem.API.OAMethodLib.Quartz.Business
  7. {
  8. /// <summary>
  9. /// 团组流程节点提示通知
  10. /// </summary>
  11. public static class GroupProcessNode
  12. {
  13. private readonly static DelegationInfoRepository _grpDeleRep = AutofacIocManager.Instance.GetService<DelegationInfoRepository>();
  14. private static readonly ProcessOverviewRepository _procOverviewRep = AutofacIocManager.Instance.GetService<ProcessOverviewRepository>();
  15. //private static readonly IQiYeWeChatApiService _qiYeWeChatApiService = AutofacIocManager.Instance.GetService<IQiYeWeChatApiService>();
  16. /// <summary>
  17. /// 企微通知
  18. /// </summary>
  19. public static async void QiYeWeChatNotifyAsync()
  20. {
  21. var currDt = DateTime.Now;
  22. // 默认通知人
  23. var defaultNotifyUserIds = new HashSet<int>
  24. {
  25. 5, // 雷怡
  26. 208, // 杨俊霄
  27. 327 // 江姗
  28. };
  29. var defaultNotifyQiyeChatUserIds = await _grpDeleRep._sqlSugar.Queryable<Sys_Users>()
  30. .Where(x => defaultNotifyUserIds.Contains(x.Id) && x.IsDel == 0)
  31. .Select(x => x.QiyeChatUserId)
  32. .ToListAsync();
  33. var groupAllNodeInfos = await _procOverviewRep.GetGroupAllProcessNodeInfoAsync();
  34. if (groupAllNodeInfos == null) return;
  35. var notifyList = groupAllNodeInfos.FindAll(x => x.PromptTime?.Date == currDt.Date);
  36. if (notifyList == null) return;
  37. // 按照团组ID和流程枚举分组
  38. var groupedByGroupIdAndProcType = notifyList.GroupBy(x => new { x.GroupId, x.ProcType })
  39. .ToDictionary(
  40. group => group.Key,
  41. group => group.ToList()
  42. );
  43. // 提取获取提示人员企业微信用户ID的逻辑
  44. Func<List<UserAndQiWeiUserIdView>, List<string>> getPromptPersonQiyeChatUserIds = promptPersons =>
  45. promptPersons?.Select(x => x.QiyeChatUserId).ToList() ?? new List<string>();
  46. // 按照团分组发送通知
  47. foreach (var group in groupedByGroupIdAndProcType)
  48. {
  49. var info = group.Value.FirstOrDefault();
  50. if (info == null) continue;
  51. var msgs = info.ProcType == GroupProcessType.Invitation
  52. ? group.Value.Select(x => $"- {x.NodeName}开始了。").ToList()
  53. : new List<string> { $"- {info.NodeName}开始了。" };
  54. var qiWeiChatUserIds = new List<string>();
  55. qiWeiChatUserIds.AddRange(defaultNotifyQiyeChatUserIds);
  56. qiWeiChatUserIds.AddRange(getPromptPersonQiyeChatUserIds(info.PromptPerson));
  57. // 企微通知
  58. await AppNoticeLibrary.SendUserMsg_GroupProcNode_Notif(info.GroupName, msgs, qiWeiChatUserIds);
  59. }
  60. }
  61. /// <summary>
  62. /// 企微预警通知
  63. /// </summary>
  64. public static async void QiYeWeChatWarnNotifyAsync()
  65. {
  66. var currDt = DateTime.Now;
  67. var groupInfos = await _grpDeleRep._sqlSugar.Queryable<Grp_DelegationInfo>()
  68. .Where(x => x.IsDel == 0)
  69. .ToListAsync();
  70. }
  71. }
  72. }