using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Comm.DBItem;
using WIDESEA_Comm.ItemDB;
using WIDESEA_Core.EFDbContext;
using WIDESEA_Entity.DomainModels;
using WIDESEA_WCS.IRepositories;
using WIDESEA_WCS.Repositories;
using WIDESEA_WCS.WCSClient;
namespace WIDESEA_WCS
{
///
/// 桁架
///
[DisallowConcurrentExecution]
public class GantryJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
try
{
var client = context.JobDetail.JobDataMap.Get("JobParams") as PLCClient;
if (client == null)
{
return Task.CompletedTask;
}
//自动重连
if (!client.IsConnected)
{
client.Connect();
return Task.CompletedTask;
}
//DoAction(client);
//ExecuteJob(context, DoAction);
}
catch { }
return Task.CompletedTask;
}
static List MachineDBs = new List();
static List wheelDataDBs = new List();
private void DoAction(PLCClient client)
{
try
{
VOLContext Context = new VOLContext();
Idt_plcinfoheadRepository repository = new dt_plcinfoheadRepository(Context);
Idt_plcinfodetailRepository plcRepository = new dt_plcinfodetailRepository(Context);
var plc = repository.FindFirst(x => x.plcinfo_name == client.PLCName);
var numbers = plcRepository.Find(x => x.plcdetail_iotype == plc.plcinfo_iotyep).GroupBy(x => x.plcdetail_number).ToList();
foreach (var number in numbers)
{
if (number.Key.Contains("辊道下料"))
{
PropertyInfo[] propertyInfos = typeof(WheelDataDB).GetProperties();//获取所有属性
WheelDataDB dBItem = wheelDataDBs.Where(x => x.R_Name == number.Key).FirstOrDefault();
if (dBItem == null)
{
dBItem = new();
dBItem.OnReadSignal += HandleReadSignal;
wheelDataDBs.Add(dBItem);
}
List details = plcRepository.Find(x => x.plcdetail_iotype == plc.plcinfo_iotyep && x.plcdetail_number == number.Key).ToList();
for (int i = 0; i < propertyInfos.Length; i++)
{
if (i == 0)
{
dBItem.R_Name = number.Key;
}
else
{
object readData = DBExtension.Read(details.Where(x => x.plcdetail_name == propertyInfos[i].Name).FirstOrDefault(), client);
if (readData != null) { }
object obj = propertyInfos[i].GetValue(dBItem);
if (obj != readData)
propertyInfos[i].SetValue(dBItem, readData);
}
}
}
else
{
PropertyInfo[] propertyInfos = typeof(MachineDB).GetProperties();//获取所有属性
MachineDB dBItem = MachineDBs.Where(x => x.R_Name == number.Key).FirstOrDefault();
if (dBItem == null)
{
dBItem = new();
dBItem.OnReadSignal += HandleReadSignal;
MachineDBs.Add(dBItem);
}
List details = plcRepository.Find(x => x.plcdetail_iotype == plc.plcinfo_iotyep && x.plcdetail_number == number.Key).ToList();
for (int i = 0; i < propertyInfos.Length; i++)
{
if (i == 0)
{
dBItem.R_Name = number.Key;
}
else
{
object readData = DBExtension.Read(details.Where(x => x.plcdetail_name == propertyInfos[i].Name).FirstOrDefault(), client);
if (readData != null) { }
object obj = propertyInfos[i].GetValue(dBItem);
if (obj != readData)
propertyInfos[i].SetValue(dBItem, readData);
}
}
}
}
}
catch (Exception ex)
{
throw;
}
}
public void HandleReadSignal(string type, MachineDB DBItem)
{
switch (type)
{
case OperationType.OperationType_Record:
break;
case OperationType.OperationType_Processor:
break;
case OperationType.OperationType_WheelData:
break;
}
}
public void HandleReadSignal(string type, WheelDataDB DBItem)
{
switch (type)
{
case OperationType.OperationType_Record:
break;
case OperationType.OperationType_Processor:
break;
case OperationType.OperationType_WheelData:
break;
}
}
}
}