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();
}
}
}