using Quartz;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace IStation.DataProvider
|
{
|
|
|
/// <summary>
|
/// 数据任务
|
/// </summary>
|
[DisallowConcurrentExecution]//此特性标识 必须等待这次任务执行完成后,才能执行下次任务
|
public class DataJob : IJob
|
{
|
|
private static List<string> _tagName_p_list = new List<string>()
|
{
|
"S1073",
|
"S1077",
|
"S1113",
|
"S1115",
|
"S1140",
|
"S1142",
|
"S1167",
|
"S1169",
|
"S1194",
|
"S1196",
|
"S1222",
|
"S1224",
|
"S1252",
|
"S1250"
|
};
|
|
/// <summary>
|
///
|
/// </summary>
|
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<Entity.SMIDATA>();
|
var allHisDatas = bllScada.GetAll()?.ToList();
|
if (allHisDatas == null)
|
allHisDatas = new List<Entity.SMIDATA>();
|
|
//添加
|
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;
|
if (_tagName_p_list.Contains(x.TagName))
|
entity.DataValue =(Convert.ToDouble(x.DataValue) * 1000).ToString();
|
else
|
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;
|
if (_tagName_p_list.Contains(x.TagName))
|
entity.DataValue = (Convert.ToDouble(x.DataValue) * 1000).ToString();
|
else
|
entity.DataValue = x.DataValue;
|
entity.DataTime = x.DataTime;
|
return entity;
|
}).ToList();
|
bllScada.Updates(hisdata_updates);
|
IStation.LogHelper.Info(string.Format("成功更新{0}条数据!", hisdata_updates.Count));
|
}
|
});
|
}
|
catch (Exception ex)
|
{
|
var e = new JobExecutionException(ex);
|
IStation.LogHelper.Error("数据任务", ex);
|
throw e;
|
}
|
}
|
|
|
|
}
|
}
|