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