using OASystem.Domain.Entities.Groups; using OASystem.Domain.Entities.PersonnelModule; using OASystem.Infrastructure.Repositories.PersonnelModule; using ILogger = Microsoft.Extensions.Logging.ILogger; namespace OASystem.API.OAMethodLib.Quartz.Business { /// /// 任务指派 /// 定时任务 /// public static class TaskAssignment { private readonly static TaskAllocationRepository _taskAllocationRep = AutofacIocManager.Instance.GetService(); private readonly static ILogger _logger; /// /// 定时任务更改状态 /// 每天下午六点定时更新 /// public static async void PostTaskUpdateStatus() { var data = await _taskAllocationRep._sqlSugar .Queryable() .Where(it => it.IsDel == 0 && !string.IsNullOrEmpty(it.PredictEndTime) && Convert.ToDateTime(it.PredictEndTime) >= DateTime.Now ) .ToListAsync(); if (data.Count > 0) { //处理要变更状态的员工 List primaryIds = new List(); primaryIds = data.Select(it => it.Id).ToList(); var subData = await _taskAllocationRep._sqlSugar .Queryable() .Where(it => it.IsDel == 0 && primaryIds.Contains(it.TAId) && it.TaskStatus <= (int)TaskEnum.UnderWay ) .ToListAsync(); foreach (var item in subData) { item.OverTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm-ss"); item.TaskStatus = (int)TaskEnum.UnFinished; item.Cause = string.Format(@"任务没有提交完成或者超时,由系统设置任务未完成"); } if (subData.Count > 0) { var updateStatus = await _taskAllocationRep._sqlSugar .Updateable(subData) .WhereColumns(it => it.Id) .ExecuteCommandAsync(); } } } /// /// 任务消息推送 /// 每天下午2点定时推送 /// public static async void PostTaskNewsFeed() { var data = _taskAllocationRep._sqlSugar .Queryable() .Where(it => it.IsDel == 0 && !string.IsNullOrEmpty(it.PredictEndTime) && Convert.ToDateTime(it.PredictEndTime).ToString("yyyy-MM-dd").Equals(DateTime.Now.ToString("yyyy-MM-dd")) ) .ToList(); if (data.Count > 0) { //处理要任务提醒的员工 List primaryIds = new List(); primaryIds = data.Select(it => it.Id).ToList(); var subData = _taskAllocationRep._sqlSugar .Queryable() .Where(it => it.IsDel == 0 && primaryIds.Contains(it.TAId) && it.TaskStatus <= (int)TaskEnum.UnderWay ) .ToList(); _taskAllocationRep._sqlSugar.BeginTran(); var depDatas = _taskAllocationRep._sqlSugar.Queryable().Where(it => it.IsDel == 0).ToList(); var groupDatas = _taskAllocationRep._sqlSugar.Queryable().Where(it => it.IsDel == 0).ToList(); var userDatas = _taskAllocationRep._sqlSugar.Queryable().Where(it => it.IsDel == 0).ToList(); foreach (var item in data) { string depName = string.Empty; string groupName = string.Empty; var depData = depDatas.Where(it => it.Id == item.DepId).FirstOrDefault(); if (depData != null) { depName = depData.DepName; } if (item.DiId == -1) { groupName = "其他"; } else { var groupData = groupDatas.Where(it => it.Id == item.DiId).FirstOrDefault(); if (groupData != null) { groupName = groupData.TeamName; } } var subData1 = subData.Where(it => it.TAId == item.Id).ToList(); foreach (var subItem in subData1) { string realityStartTime = string.Empty; string userName = string.Empty; if (!string.IsNullOrEmpty(subItem.BeginTime)) { realityStartTime = subItem.BeginTime; } else { if (subItem.TaskStatus == -1) realityStartTime = "未开始"; else if (subItem.TaskStatus == 0) realityStartTime = "已知晓"; } var userData = userDatas.Where(it => it.Id == subItem.UserId).FirstOrDefault(); if (userData != null) { userName = userData.CnName; } string msgContent = string.Format(@"任务归属:{0}
归属团组:{1}
预计起止时间:{2} 至 {3}
实际开始时间:{4}
任务优先级:{5}
任务参与者:{6}
任务内容:{7}", depName, groupName, item.PredictBeginTime, item.PredictEndTime, realityStartTime, item.TaskPriority, userName, item.TaskContent); Sys_Message _Message = new Sys_Message() { Type = MessgeTypeEnum.TaskProgressUpdate, Title = item.TaskName, IssuerId = 4, //管理员 Content = msgContent, ReleaseTime = DateTime.Now, CreateUserId = 4, CreateTime = DateTime.Now, DeleteTime = "1990-01-01 00:00:00.000", DiId = item.DiId, }; var msgAddId = _taskAllocationRep._sqlSugar.Insertable(_Message).ExecuteReturnIdentity(); if (msgAddId < 0) { _taskAllocationRep._sqlSugar.RollbackTran(); _logger.LogError("任务通知消息推送失败!"); return; } Sys_MessageReadAuth _MessageReadAuth = new Sys_MessageReadAuth() { MsgId = msgAddId, ReadableUId = subItem.UserId, IsRead = 0, ReadTime = Convert.ToDateTime("1990-01-01 00:00:00.000"), CreateUserId = 4, CreateTime = DateTime.Now, DeleteTime = "1990-01-01 00:00:00.000" }; var msgAuthAddId = _taskAllocationRep._sqlSugar.Insertable(_MessageReadAuth).ExecuteReturnIdentity(); if (msgAuthAddId < 0) { _taskAllocationRep._sqlSugar.RollbackTran(); _logger.LogError("任务通知消息推送失败!"); return; } } } _taskAllocationRep._sqlSugar.CommitTran(); } //查询需要提示的消息 Singlr string sql = string.Format(@"Select smra.Id,su.CnName As Issuer,sm.ReleaseTime,sm.Title, sm.Content,smra.ReadableUId,smra.IsRead,smra.CreateTime From Sys_Message sm Left Join Sys_MessageReadAuth smra On sm.Id = smra.MsgId Left Join Sys_Users su On sm.IssuerId = su.Id Where sm.IsDel = 0 And sm.Type = 6 And smra.IsRead = 0 Order By smra.ReadableUId,smra.CreateTime Desc"); var datas = _taskAllocationRep._sqlSugar.SqlQueryable(sql).ToList(); } } }