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
|
{
|
/// <summary>
|
/// 桁架
|
/// </summary>
|
[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<MachineDB> MachineDBs = new List<MachineDB>();
|
static List<WheelDataDB> wheelDataDBs = new List<WheelDataDB>();
|
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<dt_plcinfodetail> 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<dt_plcinfodetail> 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;
|
}
|
}
|
}
|
}
|