using Microsoft.AspNetCore.SignalR; using OASystem.API.OAMethodLib.Hub.Hubs; using OASystem.API.OAMethodLib.Quartz.Business; using OASystem.Infrastructure.Repositories.PersonnelModule; using Quartz; namespace OASystem.API.OAMethodLib.Quartz.Jobs { /// <summary> /// 任务消息推送 /// 每天下午两点推送 /// </summary> public class TaskNewsFeedJob : IJob { private readonly ILogger<TaskNewsFeedJob> _logger; private readonly TaskAllocationRepository _taskAllocationRep = AutofacIocManager.Instance.GetService<TaskAllocationRepository>(); public TaskNewsFeedJob(ILogger<TaskNewsFeedJob> logger, TaskAllocationRepository taskAllocationRep) { _logger = logger; _taskAllocationRep = taskAllocationRep; } /// <summary> /// 任务消息推送 /// </summary> /// <param name="context"></param> /// <returns></returns> public async Task Execute(IJobExecutionContext context) { //_logger.LogInformation("调用任务消息推送 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")+"【在线人数】:"+JsonConvert.SerializeObject(ServerHub.OnlineUser)); //在此处编写任务业务代码 #region 消息处理 //var data = _taskAllocationRep._sqlSugar // .Queryable<Pm_TaskAllocation>() // .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<int> primaryIds = new List<int>(); // primaryIds = data.Select(it => it.Id).ToList(); // var subData = _taskAllocationRep._sqlSugar // .Queryable<Pm_TaskRelevanceUser>() // .Where(it => it.IsDel == 0 && // primaryIds.Contains(it.TAId) && // it.TaskStatus <= (int)TaskEnum.UnderWay // ) // .ToList(); // _taskAllocationRep._sqlSugar.BeginTran(); // var depDatas = _taskAllocationRep._sqlSugar.Queryable<Sys_Department>().Where(it => it.IsDel == 0).ToList(); // var groupDatas = _taskAllocationRep._sqlSugar.Queryable<Grp_DelegationInfo>().Where(it => it.IsDel == 0).ToList(); // var userDatas = _taskAllocationRep._sqlSugar.Queryable<Sys_Users>().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}<br/> // 归属团组:{1}<br/> // 预计起止时间:{2} 至 {3}<br/> // 实际开始时间:{4}<br/> // 任务优先级:{5}<br/> // 任务参与者:{6}<br/> // 任务内容:{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<Sys_Message>(_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<Sys_MessageReadAuth>(_MessageReadAuth).ExecuteReturnIdentity(); // if (msgAuthAddId < 0) // { // _taskAllocationRep._sqlSugar.RollbackTran(); // _logger.LogError("任务通知消息推送失败!"); // return; // } // } // } // _taskAllocationRep._sqlSugar.CommitTran(); //} #endregion string msg = string.Empty; //查询需要提示的消息 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<MessageReadAuthPushView>(sql).ToList(); msg = JsonConvert.SerializeObject(datas); //_hubContext.Clients.All.SendAsync("ReceiveMessage", "系统通知", $"最新消息{DateTime.Now}"); //推送给所有连接ID的第一条数据 //await _hubContext.Clients.Clients(ServerHub.OnlineUser.Select(q => q.ConnectionId).ToList()).SendAsync("SendMessageResponse", $"最新消息{DateTime.Now}"); //return Task.CompletedTask; } } }