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