TaskNotification.cs 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. using Microsoft.AspNetCore.SignalR;
  2. using OASystem.API.OAMethodLib.Hub.HubClients;
  3. using OASystem.API.OAMethodLib.Hub.Hubs;
  4. using OASystem.API.OAMethodLib.SignalR.Hubs;
  5. using OASystem.Domain.Entities.PersonnelModule;
  6. using OASystem.Infrastructure.Repositories.PersonnelModule;
  7. using ILogger = Microsoft.Extensions.Logging.ILogger;
  8. namespace OASystem.API.OAMethodLib.Quartz.Business
  9. {
  10. public static class TaskNotification
  11. {
  12. private readonly static ILogger _logger;
  13. private readonly static TaskAllocationRepository _taskAllocationRep = AutofacIocManager.Instance.GetService<TaskAllocationRepository>();
  14. private readonly static IHubContext<ChatHub, IChatClient> _hubContext = AutofacIocManager.Instance.GetService<IHubContext<ChatHub, IChatClient>>();
  15. /// <summary>
  16. /// 任务通知
  17. /// </summary>
  18. public static async void PostTaskMessageNotification()
  19. {
  20. _logger.LogInformation("调用任务消息推送 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "【在线人数】:" + JsonConvert.SerializeObject(UserStore.OnlineUser));
  21. //在此处编写任务业务代码
  22. #region 消息处理
  23. var data = _taskAllocationRep._sqlSugar
  24. .Queryable<Domain.Entities.PersonnelModule.Pm_TaskAllocation>()
  25. .Where(it => it.IsDel == 0 &&
  26. !string.IsNullOrEmpty(it.PredictEndTime) &&
  27. Convert.ToDateTime(it.PredictEndTime).ToString("yyyy-MM-dd").Equals(DateTime.Now.ToString("yyyy-MM-dd"))
  28. )
  29. .ToList();
  30. if (data.Count > 0)
  31. {
  32. //处理要任务提醒的员工
  33. List<int> primaryIds = new List<int>();
  34. primaryIds = data.Select(it => it.Id).ToList();
  35. var subData = _taskAllocationRep._sqlSugar
  36. .Queryable<Domain.Entities.PersonnelModule.Pm_TaskRelevanceUser>()
  37. .Where(it => it.IsDel == 0 &&
  38. primaryIds.Contains(it.TAId) &&
  39. (int)it.TaskStatus <= (int)TaskEnum.UnderWay
  40. )
  41. .ToList();
  42. _taskAllocationRep._sqlSugar.BeginTran();
  43. var depDatas = _taskAllocationRep._sqlSugar.Queryable<Sys_Department>().Where(it => it.IsDel == 0).ToList();
  44. var groupDatas = _taskAllocationRep._sqlSugar.Queryable<Domain.Entities.Groups.Grp_DelegationInfo>().Where(it => it.IsDel == 0).ToList();
  45. var userDatas = _taskAllocationRep._sqlSugar.Queryable<Sys_Users>().Where(it => it.IsDel == 0).ToList();
  46. List<int> userIds = new List<int>();
  47. foreach (var item in data)
  48. {
  49. string depName = string.Empty;
  50. string groupName = string.Empty;
  51. var depData = depDatas.Where(it => it.Id == item.DepId).FirstOrDefault();
  52. if (depData != null) { depName = depData.DepName; }
  53. if (item.DiId == -1) { groupName = "其他"; }
  54. else
  55. {
  56. var groupData = groupDatas.Where(it => it.Id == item.DiId).FirstOrDefault();
  57. if (groupData != null) { groupName = groupData.TeamName; }
  58. }
  59. var subData1 = subData.Where(it => it.TAId == item.Id).ToList();
  60. foreach (var subItem in subData1)
  61. {
  62. string realityStartTime = string.Empty;
  63. string userName = string.Empty;
  64. if (!string.IsNullOrEmpty(subItem.BeginTime))
  65. {
  66. realityStartTime = subItem.BeginTime;
  67. }
  68. else
  69. {
  70. if (subItem.TaskStatus == TaskerEnum.NotStarted) realityStartTime = "未开始";
  71. else if (subItem.TaskStatus == TaskerEnum.HaveKnown) realityStartTime = "已知晓";
  72. }
  73. var userData = userDatas.Where(it => it.Id == subItem.UserId).FirstOrDefault();
  74. if (userData != null) { userName = userData.CnName; }
  75. string msgContent = string.Format(@"归属团组:{1}<br/>
  76. 预计起止时间:{2} 至 {3}<br/>
  77. 任务参与者:{4}",
  78. groupName, item.PredictBeginTime, item.PredictEndTime, userName);
  79. Sys_Message _Message = new Sys_Message()
  80. {
  81. Type = MessageTypeEnum.TaskProgressUpdate,
  82. Title = item.TaskName,
  83. IssuerId = 4, //管理员
  84. Content = msgContent,
  85. ReleaseTime = DateTime.Now,
  86. CreateUserId = 4,
  87. CreateTime = DateTime.Now,
  88. DeleteTime = "1990-01-01 00:00:00.000",
  89. DiId = item.DiId,
  90. };
  91. var msgAddId = _taskAllocationRep._sqlSugar.Insertable<Sys_Message>(_Message).ExecuteReturnIdentity();
  92. if (msgAddId < 0)
  93. {
  94. _taskAllocationRep._sqlSugar.RollbackTran();
  95. _logger.LogError("任务通知消息推送失败!");
  96. return;
  97. }
  98. Sys_MessageReadAuth _MessageReadAuth = new Sys_MessageReadAuth()
  99. {
  100. MsgId = msgAddId,
  101. ReadableUId = subItem.UserId,
  102. IsRead = 0,
  103. ReadTime = Convert.ToDateTime("1990-01-01 00:00:00.000"),
  104. CreateUserId = 4,
  105. CreateTime = DateTime.Now,
  106. DeleteTime = "1990-01-01 00:00:00.000"
  107. };
  108. var msgAuthAddId = _taskAllocationRep._sqlSugar.Insertable<Sys_MessageReadAuth>(_MessageReadAuth).ExecuteReturnIdentity();
  109. if (msgAuthAddId < 0)
  110. {
  111. _taskAllocationRep._sqlSugar.RollbackTran();
  112. _logger.LogError("任务通知消息推送失败!");
  113. return;
  114. }
  115. userIds.Add(subItem.UserId);
  116. }
  117. }
  118. _taskAllocationRep._sqlSugar.CommitTran();
  119. //推送消息
  120. _hubContext.Clients.Clients(UserStore.OnlineUser.Where(it => userIds.Contains(it.UserId)).Select(it => it.ConnectionId).ToList()).ReceiveMessage("您有新的任务相关消息");
  121. _logger.LogInformation("任务消息推送成功 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "【在线人数】:" + JsonConvert.SerializeObject(UserStore.OnlineUser));
  122. }
  123. #endregion
  124. }
  125. }
  126. }