using Quartz; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace IStation.Server { /// /// 单个任务 /// [DisallowConcurrentExecution]//此特性标识 必须等待这次任务执行完成后,才能执行下次任务 internal class SingleJob : IJob { public const string ConfigureTagName = "Configure"; public Task Execute(IJobExecutionContext context) { return Task.Run(() => { //获取配置 var dataMap = context.MergedJobDataMap; var configure = (Model.DataDockingConfigureExApi)dataMap[ConfigureTagName]; if (configure == null) return; try { //映射关系 if (configure.Mappers == null || configure.Mappers.Count < 1) { LogHelper.Info($"Api数据对接任务中:{configure.Name},未进行映射关系配置!"); return; } //创建数据对接对象 var dataDocking = DataDockingApiFactory.CreateApi(configure.ConfigureParas.DependencyFile); if (dataDocking == null) { LogHelper.Info($"Api数据对接任务中,{configure.Name},创建数据对接对象失败!!"); return; } dataDocking.HandleData(configure.Mappers, (receive_list) => { if (receive_list == null || receive_list.Count < 1) { LogHelper.Info($"Api数据对接任务中,{configure.Name},接收数据为空!"); return; } var queue = new RabbitMqQueueHelper(); queue.Push(ConfigHelper.QueueName, new Model.MonitorDataDockingCorpRecord() { CorpID = configure.CorpID, ConfigureID = configure.ID, Records = receive_list }); LogHelper.Info($"api配置名称:{configure.Name},成功推入通道{receive_list.Count}条数据!"); }); } catch (Exception ex) { LogHelper.Error($"Api数据对接,任务执行出错,配置名称:{configure.Name}", ex); var e = new JobExecutionException(ex); throw e; } }); } } }