using Quartz; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace IStation.DataProvider { /// /// 数据任务 /// [DisallowConcurrentExecution]//此特性标识 必须等待这次任务执行完成后,才能执行下次任务 public class DataJob : IJob { /// /// /// public async Task Execute(IJobExecutionContext context) { try { await Task.Run(() => { var dt_now = DateTime.Now; var records = JsonStore.GetCurrentRecord(dt_now); if (records == null || records.Count < 1) return; var bllScada = new BaseMsSqlDAL(); var allHisDatas = bllScada.GetAll()?.ToList(); if (allHisDatas == null) allHisDatas = new List(); //添加 var records_adds = records.Where(x => { var hisData = allHisDatas.Find(t => t.TagName == x.TagName); return hisData == null; }).ToList(); if (records_adds != null && records_adds.Count > 0) { var hisdata_adds = records_adds.Select(x => { var entity = new Entity.SMIDATA(); entity.TagName = x.TagName; entity.DataTime = x.DataTime; entity.DataValue = x.DataValue; entity.InsertTime = dt_now; return entity; }).ToList(); bllScada.Inserts(hisdata_adds); LogHelper.Info(string.Format("成功插入{0}条数据!", hisdata_adds.Count)); } //更新 var records_updates = records.Where(x => { var hisData = allHisDatas.Find(t => t.TagName == x.TagName); return hisData != null; }).ToList(); if (records_updates != null && records_updates.Count > 0) { var hisdata_updates = records_updates.Select(x => { var entity = allHisDatas.Find(t => t.TagName == x.TagName); entity.InsertTime = dt_now; entity.DataValue = x.DataValue; entity.DataTime = x.DataTime; return entity; }).ToList(); bllScada.Updates(hisdata_updates); LogHelper.Info(string.Format("成功更新{0}条数据!", hisdata_updates.Count)); } }); } catch (Exception ex) { var e = new JobExecutionException(ex); LogHelper.Error("数据任务", ex); throw e; } } } }