using FreeSql;
using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Comm.ItemDB;
using WIDESEA_Comm.LogInfo;
using WIDESEA_Core.EFDbContext;
using WIDESEA_Entity.DomainModels;
using WIDESEA_WCS.IRepositories;
using WIDESEA_WCS.IServices;
using WIDESEA_WCS.Repositories;
using WIDESEA_WCS.Services;
using WIDESEA_WCS.WCSClient;
using static System.Collections.Specialized.BitVector32;
namespace WIDESEA_WCS
{
///
/// 一二单元调度
///
[DisallowConcurrentExecution]
public class One_two_unitJob : 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);
}
catch { }
return Task.CompletedTask;
}
static List gDXDBs = new List();
private void DoAction(PLCClient client)
{
try
{
#region 读写方法、日志、执行时间
//client.Write("DB400.DBX0", "123456");
//client.WriteByOrder("R_wheel_SN", "123456", "4.1");
//client.WriteByOrder("R_wheel_SN", "666666", "4.2");
//var res = client.Read("DB400.DBX0", 20);
//var res1 = client.ReadByOrder("R_wheel_SN", "4.1");
//var res2 = client.ReadByOrder("R_wheel_SN", "4.2");
//日志写入
//WriteDBLog.Info("一二单元调度", "4.1:" + res1 + ";4.2:" + res2, "PCS");
//执行完成时间
//Console.WriteLine(DateTime.Now);
#endregion
#region 添加PLC地址信息
//VOLContext Context = new VOLContext();
//Idt_plcinfodetailRepository dt_PlcinfodetailService = new dt_plcinfodetailRepository(Context);
//List plcinfodetails = new List();
//for (int i = 106; i <= 110; i++)
//{
// dt_plcinfodetail dt_Plcinfodetail = new dt_plcinfodetail()
// {
// plcdetail_id = Guid.NewGuid(),
// plcdetail_iotype = "One_two_unit",
// plcdetail_db = "DB400",
// plcdetail_value = "DBX" + ((i - 1) * 30),
// plcdetail_valtype = "string",
// plcdetail_len = 20,
// plcdetail_name = "R_wheel_SN",
// plcdetail_number = "7." + (i - 80),
// plcdetail_remark = "读取车轮SN号"
// };
// plcinfodetails.Add(dt_Plcinfodetail);
// dt_plcinfodetail dt_Plcinfodetail1 = new dt_plcinfodetail()
// {
// plcdetail_id = Guid.NewGuid(),
// plcdetail_iotype = "One_two_unit",
// plcdetail_db = "DB400",
// plcdetail_value = "DBX" + ((i - 1) * 30 + 20),
// plcdetail_valtype = "int",
// plcdetail_name = "R_wheel_type",
// plcdetail_number = "7." + (i - 80),
// plcdetail_remark = "读取车轮类型"
// };
// plcinfodetails.Add(dt_Plcinfodetail1);
// dt_plcinfodetail dt_Plcinfodetail2 = new dt_plcinfodetail()
// {
// plcdetail_id = Guid.NewGuid(),
// plcdetail_iotype = "One_two_unit",
// plcdetail_db = "DB400",
// plcdetail_value = "DBX" + ((i - 1) * 30 + 22),
// plcdetail_valtype = "byte",
// plcdetail_name = "R_part_status",
// plcdetail_number = "7." + (i - 80),
// plcdetail_remark = "读取车轮零件状态"
// };
// plcinfodetails.Add(dt_Plcinfodetail2);
// dt_plcinfodetail dt_Plcinfodetail3 = new dt_plcinfodetail()
// {
// plcdetail_id = Guid.NewGuid(),
// plcdetail_iotype = "One_two_unit",
// plcdetail_db = "DB400",
// plcdetail_value = "DBX" + ((i - 1) * 30 + 23),
// plcdetail_valtype = "byte",
// plcdetail_name = "R_part_process",
// plcdetail_number = "7." + (i - 80),
// plcdetail_remark = "读取车轮零件工艺"
// };
// plcinfodetails.Add(dt_Plcinfodetail3);
// dt_plcinfodetail dt_Plcinfodetail4 = new dt_plcinfodetail()
// {
// plcdetail_id = Guid.NewGuid(),
// plcdetail_iotype = "One_two_unit",
// plcdetail_db = "DB400",
// plcdetail_value = "DBX" + ((i - 1) * 30 + 24),
// plcdetail_valtype = "byte",
// plcdetail_name = "R_machine_nr",
// plcdetail_number = "7." + (i - 80),
// plcdetail_remark = "读取辊道machine_nr"
// };
// plcinfodetails.Add(dt_Plcinfodetail4);
// dt_plcinfodetail dt_Plcinfodetail5 = new dt_plcinfodetail()
// {
// plcdetail_id = Guid.NewGuid(),
// plcdetail_iotype = "One_two_unit",
// plcdetail_db = "DB400",
// plcdetail_value = "DBX" + ((i - 1) * 30 + 25),
// plcdetail_valtype = "byte",
// plcdetail_name = "R_direction",
// plcdetail_number = "7." + (i - 80),
// plcdetail_remark = "读取辊道direction"
// };
// plcinfodetails.Add(dt_Plcinfodetail5);
//}
//dt_PlcinfodetailService.AddRange(plcinfodetails, true);
#endregion
VOLContext Context = new VOLContext();
Idt_plcinfoheadRepository repository = new dt_plcinfoheadRepository(Context);
Idt_plcinfodetailRepository plcRepository = new dt_plcinfodetailRepository(Context);
PropertyInfo[] propertyInfos = typeof(GDXDB).GetProperties();//获取所有属性
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)
{
GDXDB dBItem = gDXDBs.Where(x => x.R_Name == number.Key).FirstOrDefault();
if (dBItem == null)
{
dBItem = new();
dBItem.OnReadSignal += HandleReadSignal;
gDXDBs.Add(dBItem);
//object obj = dBItem.R_part_status;
//dBItem.R_part_status = client.Read(number.Key);
}
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)
{
Console.WriteLine(ex.Message);
}
}
public void HandleReadSignal(GDXDB DBItem)
{
VOLContext Context = new VOLContext();
Idt_ActualProductionRepository repository = new dt_ActualProductionRepository(Context);
var info = repository.FindFirst(x => x.SN == DBItem.R_wheel_SN);//查询车轮的详细信息
if (info != null)
{
//告诉桁架
}
}
}
}