using Microsoft.AspNetCore.SignalR;
using OASystem.API.OAMethodLib.Hubs;
using OASystem.API.OAMethodLib.Quartz.Business;
using OASystem.Infrastructure.Repositories.PersonnelModule;
using Quartz;
namespace OASystem.API.OAMethodLib.Quartz.Jobs
{
///
/// 任务消息推送
/// 每天下午两点推送
///
public class TaskNewsFeedJob : IJob
{
private readonly ILogger _logger;
private readonly TaskAllocationRepository _taskAllocationRep = AutofacIocManager.Instance.GetService();
private readonly IHubContext _hubContext;
public TaskNewsFeedJob(ILogger logger, TaskAllocationRepository taskAllocationRep, IHubContext hubContext)
{
_logger = logger;
_taskAllocationRep = taskAllocationRep;
_hubContext = hubContext;
}
public Task Execute(IJobExecutionContext context)
{
_logger.LogInformation("调用任务消息推送 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
//在此处编写任务业务代码
#region 消息处理
//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();
//}
#endregion
//查询需要提示的消息 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();
_hubContext.Clients.All.SendAsync("ReceiveMessage", "系统通知", $"最新消息{DateTime.Now}");
return Task.CompletedTask;
}
}
}