TaskAssignment.cs 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. using OASystem.Domain.Entities.Groups;
  2. using OASystem.Domain.Entities.PersonnelModule;
  3. using OASystem.Infrastructure.Repositories.PersonnelModule;
  4. using ILogger = Microsoft.Extensions.Logging.ILogger;
  5. namespace OASystem.API.OAMethodLib.Quartz.Business
  6. {
  7. /// <summary>
  8. /// 任务指派
  9. /// 定时任务
  10. /// </summary>
  11. public static class TaskAssignment
  12. {
  13. private readonly static TaskAllocationRepository _taskAllocationRep = AutofacIocManager.Instance.GetService<TaskAllocationRepository>();
  14. private readonly static ILogger _logger;
  15. /// <summary>
  16. /// 定时任务更改状态
  17. /// 每天下午六点定时更新
  18. /// </summary>
  19. public static async void PostTaskUpdateStatus()
  20. {
  21. var data = await _taskAllocationRep._sqlSugar
  22. .Queryable<Pm_TaskAllocation>()
  23. .Where(it => it.IsDel == 0 &&
  24. !string.IsNullOrEmpty(it.PredictEndTime) &&
  25. Convert.ToDateTime(it.PredictEndTime) >= DateTime.Now
  26. )
  27. .ToListAsync();
  28. if (data.Count > 0)
  29. {
  30. //处理要变更状态的员工
  31. List<int> primaryIds = new List<int>();
  32. primaryIds = data.Select(it => it.Id).ToList();
  33. var subData = await _taskAllocationRep._sqlSugar
  34. .Queryable<Pm_TaskRelevanceUser>()
  35. .Where(it => it.IsDel == 0 &&
  36. primaryIds.Contains(it.TAId) &&
  37. it.TaskStatus <= (int)TaskEnum.UnderWay
  38. )
  39. .ToListAsync();
  40. foreach (var item in subData)
  41. {
  42. item.OverTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm-ss");
  43. item.TaskStatus = (int)TaskEnum.UnFinished;
  44. item.Cause = string.Format(@"任务没有提交完成或者超时,由系统设置任务未完成");
  45. }
  46. if (subData.Count > 0)
  47. {
  48. var updateStatus = await _taskAllocationRep._sqlSugar
  49. .Updateable(subData)
  50. .WhereColumns(it => it.Id)
  51. .ExecuteCommandAsync();
  52. }
  53. }
  54. }
  55. /// <summary>
  56. /// 任务消息推送
  57. /// 每天下午2点定时推送
  58. /// </summary>
  59. public static async void PostTaskNewsFeed()
  60. {
  61. var data = _taskAllocationRep._sqlSugar
  62. .Queryable<Pm_TaskAllocation>()
  63. .Where(it => it.IsDel == 0 &&
  64. !string.IsNullOrEmpty(it.PredictEndTime) &&
  65. Convert.ToDateTime(it.PredictEndTime).ToString("yyyy-MM-dd").Equals(DateTime.Now.ToString("yyyy-MM-dd"))
  66. )
  67. .ToList();
  68. if (data.Count > 0)
  69. {
  70. //处理要任务提醒的员工
  71. List<int> primaryIds = new List<int>();
  72. primaryIds = data.Select(it => it.Id).ToList();
  73. var subData = _taskAllocationRep._sqlSugar
  74. .Queryable<Pm_TaskRelevanceUser>()
  75. .Where(it => it.IsDel == 0 &&
  76. primaryIds.Contains(it.TAId) &&
  77. it.TaskStatus <= (int)TaskEnum.UnderWay
  78. )
  79. .ToList();
  80. _taskAllocationRep._sqlSugar.BeginTran();
  81. var depDatas = _taskAllocationRep._sqlSugar.Queryable<Sys_Department>().Where(it => it.IsDel == 0).ToList();
  82. var groupDatas = _taskAllocationRep._sqlSugar.Queryable<Grp_DelegationInfo>().Where(it => it.IsDel == 0).ToList();
  83. var userDatas = _taskAllocationRep._sqlSugar.Queryable<Sys_Users>().Where(it => it.IsDel == 0).ToList();
  84. foreach (var item in data)
  85. {
  86. string depName = string.Empty;
  87. string groupName = string.Empty;
  88. var depData = depDatas.Where(it => it.Id == item.DepId).FirstOrDefault();
  89. if (depData != null) { depName = depData.DepName; }
  90. if (item.DiId == -1) { groupName = "其他"; }
  91. else
  92. {
  93. var groupData = groupDatas.Where(it => it.Id == item.DiId).FirstOrDefault();
  94. if (groupData != null) { groupName = groupData.TeamName; }
  95. }
  96. var subData1 = subData.Where(it => it.TAId == item.Id).ToList();
  97. foreach (var subItem in subData1)
  98. {
  99. string realityStartTime = string.Empty;
  100. string userName = string.Empty;
  101. if (!string.IsNullOrEmpty(subItem.BeginTime))
  102. {
  103. realityStartTime = subItem.BeginTime;
  104. }
  105. else
  106. {
  107. if (subItem.TaskStatus == -1) realityStartTime = "未开始";
  108. else if (subItem.TaskStatus == 0) realityStartTime = "已知晓";
  109. }
  110. var userData = userDatas.Where(it => it.Id == subItem.UserId).FirstOrDefault();
  111. if (userData != null) { userName = userData.CnName; }
  112. string msgContent = string.Format(@"任务归属:{0}<br/>
  113. 归属团组:{1}<br/>
  114. 预计起止时间:{2} 至 {3}<br/>
  115. 实际开始时间:{4}<br/>
  116. 任务优先级:{5}<br/>
  117. 任务参与者:{6}<br/>
  118. 任务内容:{7}", depName, groupName, item.PredictBeginTime, item.PredictEndTime,
  119. realityStartTime, item.TaskPriority, userName, item.TaskContent);
  120. Sys_Message _Message = new Sys_Message()
  121. {
  122. Type = MessgeTypeEnum.TaskProgressUpdate,
  123. Title = item.TaskName,
  124. IssuerId = 4, //管理员
  125. Content = msgContent,
  126. ReleaseTime = DateTime.Now,
  127. CreateUserId = 4,
  128. CreateTime = DateTime.Now,
  129. DeleteTime = "1990-01-01 00:00:00.000",
  130. DiId = item.DiId,
  131. };
  132. var msgAddId = _taskAllocationRep._sqlSugar.Insertable<Sys_Message>(_Message).ExecuteReturnIdentity();
  133. if (msgAddId < 0)
  134. {
  135. _taskAllocationRep._sqlSugar.RollbackTran();
  136. _logger.LogError("任务通知消息推送失败!");
  137. return;
  138. }
  139. Sys_MessageReadAuth _MessageReadAuth = new Sys_MessageReadAuth()
  140. {
  141. MsgId = msgAddId,
  142. ReadableUId = subItem.UserId,
  143. IsRead = 0,
  144. ReadTime = Convert.ToDateTime("1990-01-01 00:00:00.000"),
  145. CreateUserId = 4,
  146. CreateTime = DateTime.Now,
  147. DeleteTime = "1990-01-01 00:00:00.000"
  148. };
  149. var msgAuthAddId = _taskAllocationRep._sqlSugar.Insertable<Sys_MessageReadAuth>(_MessageReadAuth).ExecuteReturnIdentity();
  150. if (msgAuthAddId < 0)
  151. {
  152. _taskAllocationRep._sqlSugar.RollbackTran();
  153. _logger.LogError("任务通知消息推送失败!");
  154. return;
  155. }
  156. }
  157. }
  158. _taskAllocationRep._sqlSugar.CommitTran();
  159. }
  160. //查询需要提示的消息 Singlr
  161. string sql = string.Format(@"Select smra.Id,su.CnName As Issuer,sm.ReleaseTime,sm.Title,
  162. sm.Content,smra.ReadableUId,smra.IsRead,smra.CreateTime
  163. From Sys_Message sm
  164. Left Join Sys_MessageReadAuth smra On sm.Id = smra.MsgId
  165. Left Join Sys_Users su On sm.IssuerId = su.Id
  166. Where sm.IsDel = 0 And sm.Type = 6 And smra.IsRead = 0
  167. Order By smra.ReadableUId,smra.CreateTime Desc");
  168. var datas = _taskAllocationRep._sqlSugar.SqlQueryable<MessageReadAuthPushView>(sql).ToList();
  169. }
  170. }
  171. }