using Infrastructure; using Newtonsoft.Json.Linq; using Newtonsoft.Json; using Quartz; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using OpenAuth.App.BaseApp.WFTask; using DocumentFormat.OpenXml.Drawing.Diagrams; using OpenAuth.Repository.Domain; using OpenAuth.App.Interface; namespace OpenAuth.App.BaseApp.Jobs { public class TaskTimeoutJob : IJob { private ImMsgApp _immsgApp; private OpenJobApp _openJobApp; private WFTaskApp _wfTaskApp; private IAuth _auth; public TaskTimeoutJob(ImMsgApp immsgApp, OpenJobApp openJobApp,WFTaskApp wfTaskApp, IAuth auth) { _immsgApp = immsgApp; _openJobApp = openJobApp; _wfTaskApp= wfTaskApp; _auth = auth; } public async Task Execute(IJobExecutionContext context) { var jobId = context.MergedJobDataMap.GetString(Define.JOBMAPKEY); //todo:这里可以加入自己的自动任务逻辑 try { var job = _openJobApp.Get(jobId); if (job != null) { var parms = (JObject)JsonConvert.DeserializeObject(job.JobCallParams); string taskid = parms["TaskId"].ToString(); //更新任务状态 var taskInfo = _wfTaskApp.GetEntity(taskid); if (taskInfo != null && (taskInfo.State == 3 || taskInfo.State == 4)) { _openJobApp.DeleteEntity(job); } else { taskInfo.IsOutTime = 1; _wfTaskApp.Update(taskInfo); //创建消息接收用户集合 List userlist = new List(); userlist.Add(taskInfo.UserId); var users = _wfTaskApp.GetUsers(taskid); userlist = userlist.Union(users).ToList(); //创建消息发送内容 string msg = $"任务{taskInfo.ProcessTitle}{taskInfo.UnitName}已超时,请及时办理"; //更新Job信息,停止job,运行次数+1 _openJobApp.RecordRun(jobId); _openJobApp.ChangeJobStatus1(new App.Request.ChangeJobStatusReq { Id = jobId, Status = 0 }); //发送消息 await _immsgApp.SendMsg("ChaoShi", userlist, msg, "4", taskInfo.Token); } } } catch { return; } await Task.CompletedTask; } } }