private List <DictionaryEntryDto> workflowLogCache; // 工作流触发日志缓存(36小时内) // 判断定时时间触发执行 private void EventTimer(object sender, System.Timers.ElapsedEventArgs e) { DateTime crtTime = DateTime.Now; long crtTimeTik = Tools.Date.DateHelper.ToUniversalTimeStamp(crtTime); sys_workflow_log_dal logDal = new sys_workflow_log_dal(); // 更新日志缓存 if ((crtTime.Hour % 3 == 0 && crtTime.Minute == 0) || workflowLogCache == null) // 3小时更新一次 { workflowLogCache = logDal.GetLogListByTime(Tools.Date.DateHelper.ToUniversalTimeStamp(crtTime.AddHours(-36))); } sdk_task_dal taskDal = new sdk_task_dal(); for (var i = tickets.Count - 1; i >= 0; i--) { if (tickets.ElementAt(i).Value == null) { var ticket = taskDal.FindSignleBySql <sdk_task>($"select * from sdk_task where id={tickets.ElementAt(i).Key} and (type_id={(int)DicEnum.TASK_TYPE.SERVICE_DESK_TICKET} or type_id={(int)DicEnum.TASK_TYPE.RECURRING_TICKET_MASTER}) and delete_time=0"); if (ticket == null) { tickets.Remove(tickets.ElementAt(i).Key); } else { tickets[tickets.ElementAt(i).Key] = ticket; } } } foreach (var wf in workflowList) { if (wf.workflow_object_id == (int)DicEnum.WORKFLOW_OBJECT.TICKET) { lock (locker) { foreach (var tkt in tickets) { if (workflowLogCache.Exists(_ => _.val == wf.id.ToString() && _.show == tkt.Key.ToString())) { continue; } // TODO: 根据event名称判断事件及时间,event名称暂未配置 } } } } }