using HH.WCS.Hexafluo.device;
|
using HH.WCS.Hexafluo.dispatch;
|
using HH.WCS.Hexafluo.util;
|
using HH.WCS.Hexafluo.wms;
|
using HH.WCS.SJML.Bll;
|
using HH.WCS.SJML.dispatch;
|
using HH.WCS.SJML.Dto;
|
using HH.WCS.SJML.Entitys;
|
using HH.WCS.SJML.util;
|
using HH.WCS.ZCQTJ.Dto;
|
using HH.WCS.ZCQTJ.Entitys;
|
using HH.WCS.ZCQTJ.Entitys.MES中间表;
|
using Newtonsoft.Json;
|
using SqlSugar;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using static HH.WCS.Hexafluo.device.OITcpHelper;
|
using static HH.WCS.SJML.api.ApiModel;
|
|
namespace HH.WCS.Hexafluo.process
|
{
|
internal class TaskProcess
|
{
|
#region 任务相关
|
//--------------------------------------------------任务相关--------------------------------------------------
|
/// <summary>
|
/// 取货卸货完成,缓存位状态更新
|
/// </summary>
|
/// <param name="mst"></param>
|
/// <param name="v"></param>
|
internal static void CacheBitUpdate(WMSTask mst, bool load)
|
{
|
var trayCarryCount = mst.N_CNTR_COUNT > 0 ? mst.N_CNTR_COUNT : 1;
|
if (load)
|
{
|
//Console.WriteLine($"任务{mst.S_TASK_NO} 货位{mst.S_START_LOC}取货完成,起点解绑容器{mst.S_CNTRS}");
|
LogHelper.CompInfo($"任务{mst.S_TASK_NO} 货位{mst.S_START_LOC}取货完成,起点解绑容器{mst.S_CNTRS}");
|
LocationHelper.UnBindingLoc(mst.S_START_LOC, mst.S_CNTRS.Split(',').ToList());
|
}
|
else
|
{
|
// Console.WriteLine($"任务{mst.S_TASK_NO} 货位{mst.S_END_LOC}卸货完成,终点绑定容器{mst.S_CNTRS}");
|
LogHelper.CompInfo($"任务{mst.S_TASK_NO} 货位{mst.S_END_LOC}卸货完成,起点解绑容器{mst.S_CNTRS}");
|
LocationHelper.BindingLoc(mst.S_END_LOC, mst.S_CNTRS.Split(',').ToList());
|
}
|
|
}
|
|
/// <summary>
|
/// 任务取消,缓存位状态更新
|
/// </summary>
|
/// <param name="mst"></param>
|
internal static void CacheBitCancelUpdate(WMSTask mst)
|
{
|
//任务取消,取货完成前的,起点的loadingCount和终点unLoadingCount都清除,取货完成的只处理终点
|
if (TaskHelper.CheckActionRecordExist(mst.S_TASK_NO, "4"))
|
{
|
//根据客户现场要求,如果取货完成任务失败人工拉到终点,我们就当卸货完成处理;如果是人工拉走到其它区域,我们就解锁终点,删除托盘。
|
//终点绑定
|
CacheBitUpdate(mst, false);
|
LocationHelper.UnLockLoc(mst.S_END_LOC);
|
}
|
else
|
{
|
|
//起点终点解锁
|
LocationHelper.UnLockLoc(mst.S_START_LOC);
|
LocationHelper.UnLockLoc(mst.S_END_LOC);
|
|
}
|
|
}
|
|
/// <summary>
|
/// 安全请求
|
/// </summary>
|
/// <param name="no"></param>
|
/// <param name="state"></param>
|
/// <param name="forkliftNo"></param>
|
/// <param name="extData"></param>
|
internal static void OperateReq(string no, int state, string forkliftNo, string extData, WMSTask task = null)
|
{
|
var logPara = LogType.LogPara("完工回报");
|
var chi = new SqlHelper<object>().GetInstance();
|
var newDb = chi.CopyNew();
|
try
|
{
|
if (state == 1101)//取货申请,允许进入取货,修改参数18为1101 入库是机台 出库是立库
|
{
|
//是否允许安全进入
|
if (task != null)
|
{
|
if (task.S_TYPE == "出库")
|
{
|
var tac = newDb.Queryable<TN_TcpCont>().Where(a => a.LocationCode == task.S_START_LOC)?.First();
|
if (tac != null)
|
{
|
if (tac.CtiaMode == "MODBUS")
|
{
|
if (tac.C_IS_RFID == "Y")
|
{
|
NDCHelper.ChangeParam(no, 1101, 18);
|
}
|
else
|
{
|
if (string.IsNullOrEmpty(tac.host) || tac.port == 0)
|
{
|
LogHelper.Info("完工回报", $"报错:通讯模式配置表货中 货位{task.S_START_LOC} ip地址 写入目标设备的IP端口 有空值或者默认值");
|
}
|
else
|
{
|
RegisterWriteOutPutModel Register = new RegisterWriteOutPutModel();
|
Register.host = tac.host;
|
Register.port = tac.port;
|
Register.addr = tac.addr + 1;
|
Register.data = tac.dataNum;
|
LogHelper.Info("完工回报", $"MODBUS 发送参数{JsonConvert.SerializeObject(Register)}");
|
var ta = OITcpHelper.RegisterWriteOutPut(Register);
|
LogHelper.Info("完工回报", $"MODBUS 返回参数{JsonConvert.SerializeObject(ta)}");
|
Register.host = tac.host;
|
Register.port = tac.port;
|
Register.addr = tac.addr + 5;
|
Register.data = tac.dataNum;
|
LogHelper.Info("完工回报", $"MODBUS 发送参数{JsonConvert.SerializeObject(Register)}");
|
ta = OITcpHelper.RegisterWriteOutPut(Register);
|
LogHelper.Info("完工回报", $"MODBUS 返回参数{JsonConvert.SerializeObject(ta)}");
|
RegisterReadOutPutModel Regis = new RegisterReadOutPutModel();
|
Regis.host = tac.host;
|
Regis.port = tac.port;
|
Regis.addr = tac.Seleaddr;
|
Regis.dataNum = 4;
|
LogHelper.Info("完工回报", $"MODBUS 读取输出寄存器数据 输入参数{JsonConvert.SerializeObject(Regis)}");
|
var tra = OITcpHelper.RegisterReadOutPut(Regis);
|
LogHelper.Info("完工回报", $"MODBUS 读取输出寄存器数据 返回参数{JsonConvert.SerializeObject(tra)}");
|
if (tra != null)
|
{
|
if (tra.result.ToList().Count() > 0)
|
{
|
|
if (tra.result[0] == 1 && tra.result[3] == 1)
|
{
|
NDCHelper.ChangeParam(no, 1101, 18);
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|
else
|
{
|
var tac1 = newDb.Queryable<WmsTaskAction>().Where(a => a.S_TASK_NO == task.S_TASK_NO && a.S_ACTION_CODE == "1002")?.First();
|
if (tac1 != null)
|
{
|
NDCHelper.ChangeParam(no, 1101, 18);
|
}
|
else
|
{
|
var tno = "";
|
if (task.S_TASK_NO.IndexOf('_') > 0)
|
{
|
tno = task.S_TASK_NO.Substring(0, task.S_TASK_NO.LastIndexOf("_"));
|
}
|
if (!string.IsNullOrEmpty(tno))
|
{
|
var transportTask = newDb.Queryable<WMSTask>().Where(e => e.S_TASK_NO == tno + "_1")?.First();
|
if (transportTask.S_B_STATE == "完成")
|
{
|
BLLCreator.Create<WcsTask>().WcsCallback(task, state, forkliftNo);
|
}
|
}
|
if (!task.S_TASK_NO.Contains("_"))
|
{
|
BLLCreator.Create<WcsTask>().WcsCallback(task, state, forkliftNo);
|
}
|
}
|
}
|
}
|
else if (task.S_TYPE == "入库")
|
{
|
if (!string.IsNullOrEmpty(task.mark))
|
{
|
BLLCreator.Create<WcsTask>().WcsCallback(task, state, forkliftNo);
|
}
|
else
|
{
|
var tac = newDb.Queryable<TN_TcpCont>().Where(a => a.LocationCode == task.S_START_LOC)?.First();
|
if (tac != null)
|
{
|
if (tac.CtiaMode == "MODBUS")
|
{
|
if (tac.C_IS_RFID == "Y")
|
{
|
NDCHelper.ChangeParam(no, 1101, 18);
|
}
|
else
|
{
|
if (string.IsNullOrEmpty(tac.host) || tac.port == 0)
|
{
|
LogHelper.Info("完工回报", $"报错:通讯模式配置表货中 货位{task.S_START_LOC} ip地址 写入目标设备的IP端口 有空值或者默认值");
|
}
|
else
|
{
|
RegisterWriteOutPutModel Register = new RegisterWriteOutPutModel();
|
Register.host = tac.host;
|
Register.port = tac.port;
|
Register.addr = tac.addr + 1;
|
Register.data = tac.dataNum;
|
LogHelper.Info("完工回报", $"MODBUS 发送参数{JsonConvert.SerializeObject(Register)}");
|
var ta = OITcpHelper.RegisterWriteOutPut(Register);
|
LogHelper.Info("完工回报", $"MODBUS 返回参数{JsonConvert.SerializeObject(ta)}");
|
// RegisterWriteOutPutModel Register = new RegisterWriteOutPutModel();
|
Register.host = tac.host;
|
Register.port = tac.port;
|
Register.addr = tac.addr + 5;
|
Register.data = tac.dataNum;
|
LogHelper.Info("完工回报", $"MODBUS 发送参数{JsonConvert.SerializeObject(Register)}");
|
ta = OITcpHelper.RegisterWriteOutPut(Register);
|
LogHelper.Info("完工回报", $"MODBUS 返回参数{JsonConvert.SerializeObject(ta)}");
|
RegisterReadOutPutModel Regis = new RegisterReadOutPutModel();
|
Regis.host = tac.host;
|
Regis.port = tac.port;
|
Regis.addr = tac.Seleaddr;
|
Regis.dataNum = 4;
|
LogHelper.Info("完工回报", $"MODBUS 读取输出寄存器数据 输入参数{JsonConvert.SerializeObject(Regis)}");
|
var tra = OITcpHelper.RegisterReadOutPut(Regis);
|
LogHelper.Info("完工回报", $"MODBUS 读取输出寄存器数据 返回参数{JsonConvert.SerializeObject(tra)}");
|
if (tra != null)
|
{
|
if (tra.result.ToList().Count() > 0)
|
{
|
|
if (tra.result[0] == 1 && tra.result[3] == 1)
|
{
|
NDCHelper.ChangeParam(no, 1101, 18);
|
}
|
}
|
}
|
//RegisterReadOutPutModel Regis2 = new RegisterReadOutPutModel();
|
//Regis2.host = tac.host;
|
//Regis2.port = tac.port;
|
//Regis2.addr = tac.Seleaddr + 3;
|
//Regis2.dataNum = 1;
|
//LogHelper.Info("完工回报", $"MODBUS 读取输出寄存器数据 输入参数{JsonConvert.SerializeObject(Regis2)}");
|
//tra = OITcpHelper.RegisterReadOutPut(Regis2);
|
//LogHelper.Info("完工回报", $"MODBUS 读取输出寄存器数据 返回参数{JsonConvert.SerializeObject(tra)}");
|
//if (tra?.result.ToList().FirstOrDefault() == 1)
|
//{
|
// NDCHelper.ChangeParam(no, 1101, 18);
|
//}
|
}
|
}
|
}
|
if (tac.CtiaMode == "VMI")//Exitpos4Full
|
{
|
var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac.host)?.First();
|
if (Alone == null)
|
{
|
throw new Exception($"未查询到对应的VMI ConfigId为 {tac.host} 的数据库连接字符串");
|
}
|
var childA = new SqlHelper<object>().GetInstance(Alone.ConnectionString);
|
// var childA = newDb.GetConnection(tac.host);
|
var GGF = childA.Queryable<BDST_TO_AGV_STATUS>().OrderBy(st => st.VMI_TO_AGV_DATA, OrderByType.Desc)?.First();
|
var GGF2 = childA.Queryable<DATA_TO_HMI>()?.First();
|
LogHelper.Info("完工回报", $"读安全信号交互表 {JsonConvert.SerializeObject(GGF)}");
|
if (GGF != null)
|
{
|
if (GGF.AutoMode && !GGF.FatalFault && !GGF.AgvBypass && GGF.ExitPos4Full && !GGF.ExitTrackBusy && GGF.ExitRemovePallet)//123 789 为true
|
{
|
var I = childA.Updateable<BDST_TO_AGV_STATUS>().SetColumns(it => new BDST_TO_AGV_STATUS() { Handshake = "-" }).Where(e => e.VMI_TO_AGV_DATA == GGF.VMI_TO_AGV_DATA).ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("读安全信号交互表 更新Handshake字段为 - 失败");
|
}
|
LogHelper.Info("完工回报", $"读安全信号交互表 更新Handshake字段为 - 成功");
|
I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "1", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BDST_FAULT").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BDST_EXIT_REMOVE_ACTIVE 字段为 1失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BDST_EXIT_REMOVE_ACTIVE 字段为 1成功");
|
NDCHelper.ChangeParam(no, 1101, 18);
|
}
|
else if (!GGF.ExitPos4Full)
|
{
|
var ta = BLLCreator.CreateSingleton<StateTaskBLL>().ExecuteState(task.S_TASK_NO, "取消", logPara, task);
|
if (ta.Success)
|
{
|
var bbt = NDCHelper.Cancel(task.S_TASK_NO);//取消agv任务
|
}
|
}
|
}
|
else
|
{
|
LogHelper.Info("完工回报", "读安全信号交互表 未获取到数据");
|
}
|
}
|
if (tac.CtiaMode == "VMI2")
|
{
|
var transportTask = newDb.Queryable<ConfigJsonEntitys>().Where(e => e.Autoindex == "VMI2入库交互取消相关点位")?.First();
|
var TaryJb = JsonConvert.DeserializeObject<VmiBit>(transportTask?.TypeJson);
|
var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac.host)?.First();
|
if (Alone == null)
|
{
|
throw new Exception($"未查询到对应的VMI ConfigId为 {tac.host} 的数据库连接字符串");
|
}
|
var childA = new SqlHelper<object>().GetInstance(Alone.ConnectionString);
|
var GGF = childA.Queryable<AGV_STATUS_BAST>().OrderBy(st => st.Id, OrderByType.Desc)?.First();
|
LogHelper.Info("完工回报", $"读安全信号交互表 {JsonConvert.SerializeObject(GGF)}");
|
if (GGF != null)
|
{
|
|
if (TaryJb != null && TaryJb.Bit.Contains(task?.S_START_LOC))
|
{
|
if (GGF.ExitPos8Full)
|
{
|
if (!GGF.ExitTrackBusy)
|
{
|
NDCHelper.ChangeParam(no, 1101, 18);
|
|
}
|
}
|
else
|
{
|
LogHelper.Info("完工回报", $"VMI2 ExitPos8Full=0 取消任务 任务号为: {task.S_TASK_NO}");
|
deadlockRollEntitys Deck = new deadlockRollEntitys();
|
Deck.S_INTER_STATE = "7";
|
Deck.S_VALUE_JSON = task.S_TASK_NO;
|
try
|
{
|
newDb.BeginTran();
|
|
var I = newDb.Insertable(Deck).ExecuteCommand();
|
if (I == 0)
|
{
|
newDb.RollbackTran();
|
}
|
newDb.CommitTran();
|
NDCHelper.Cancel(task.S_TASK_NO);//取消agv任务
|
}
|
catch (Exception ex)
|
{
|
|
newDb.RollbackTran();
|
}
|
}
|
}
|
else
|
{
|
if (!GGF.ExitTrackBusy && GGF.ExitPos8Full)
|
{
|
NDCHelper.ChangeParam(no, 1101, 18);
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|
else
|
{
|
LogHelper.Info("完工回报", "未查询到对应的任务信息");
|
}
|
}
|
else if (state == 1102)//取货退出完成(车辆完全脱离机台) 或者完全脱离接驳位
|
{
|
if (task != null)//出库是立库 入库是机台
|
{
|
if (task.S_TYPE == "出库")
|
{
|
var tac1 = newDb.Queryable<WmsTaskAction>().Where(a => a.S_TASK_NO == task.S_TASK_NO && a.S_ACTION_CODE == "1002")?.First();
|
if (tac1 != null)
|
{
|
var tac2 = newDb.Queryable<TN_TcpCont>().Where(a => a.LocationCode == task.S_START_LOC)?.First();
|
if (tac2 != null)
|
{
|
if (tac2.CtiaMode == "VMI2")
|
{
|
NDCHelper.ChangeParam(no, 1102, 18);
|
var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac2.host)?.First();
|
if (Alone == null)
|
{
|
throw new Exception($"未查询到对应的VMI ConfigId为 {tac2.host} 的数据库连接字符串");
|
}
|
var childA = new SqlHelper<object>().GetInstance(Alone.ConnectionString);
|
var I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_ENTRY_SUPP_ACTIVE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_ENTRY_SUPP_ACTIVE 字段为 0失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_ENTRY_SUPP_ACTIVE 字段为 0成功");
|
I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_ENTRY_TRANSF_DONE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_ENTRY_TRANSF_DONE 字段为 0失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_ENTRY_TRANSF_DONE 字段为 0成功");
|
}
|
else if (tac2.CtiaMode == "MODBUS" && tac2.C_IS_RFID == "Y")
|
{
|
RegisterWriteOutPutModel Register = new RegisterWriteOutPutModel();
|
Register.host = tac2.host;
|
Register.port = tac2.port;
|
Register.addr = tac2.addr + 2;
|
Register.data = tac2.dataNum;
|
LogHelper.Info("完工回报", $"MODBUS 发送参数{JsonConvert.SerializeObject(Register)}");
|
var ta = OITcpHelper.RegisterWriteOutPut(Register);
|
LogHelper.Info("完工回报", $"MODBUS 返回参数{JsonConvert.SerializeObject(ta)}");
|
}
|
}
|
}
|
else
|
{
|
var tac = BLLCreator.Create<WcsTask>().WcsCallback(task, state, forkliftNo);
|
if (tac.Success)
|
{
|
// NDCHelper.ChangeParam(no, 1102, 18);
|
}
|
}
|
|
}
|
else if (task.S_TYPE == "入库")
|
{
|
if (!string.IsNullOrEmpty(task.mark))
|
{
|
BLLCreator.Create<WcsTask>().WcsCallback(task, state, forkliftNo);
|
}
|
else
|
{
|
var tac = newDb.Queryable<TN_TcpCont>().Where(a => a.LocationCode == task.S_START_LOC)?.First();
|
if (tac != null)
|
{
|
if (tac.CtiaMode == "MODBUS")
|
{
|
if (string.IsNullOrEmpty(tac.host) || tac.port == 0)
|
{
|
LogHelper.Info("完工回报", $"报错:通讯模式配置表货中 货位{task.S_START_LOC} ip地址 写入目标设备的IP端口 有空值或者默认值");
|
}
|
else
|
{
|
RegisterWriteOutPutModel Register = new RegisterWriteOutPutModel();
|
Register.host = tac.host;
|
Register.port = tac.port;
|
Register.addr = tac.addr + 3;
|
Register.data = tac.dataNum;
|
var ta = OITcpHelper.RegisterWriteOutPut(Register);
|
LogHelper.Info("完工回报", $"MODBUS 发送参数{JsonConvert.SerializeObject(Register)}");
|
LogHelper.Info("完工回报", $"MODBUS 返回参数{JsonConvert.SerializeObject(ta)}");
|
}
|
}
|
if (tac.CtiaMode == "VMI")
|
{
|
var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac.host)?.First();
|
if (Alone == null)
|
{
|
throw new Exception($"未查询到对应的VMI ConfigId为 {tac.host} 的数据库连接字符串");
|
}
|
var childA = new SqlHelper<object>().GetInstance(Alone.ConnectionString);
|
var GGF = childA.Queryable<BDST_TO_AGV_STATUS>().OrderBy(st => st.VMI_TO_AGV_DATA, OrderByType.Desc)?.First();
|
var GGF2 = childA.Queryable<DATA_TO_HMI>()?.First();
|
LogHelper.Info("完工回报", $"读安全信号交互表 {JsonConvert.SerializeObject(GGF)}");
|
if (GGF != null)
|
{
|
var I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BDST_EXIT_REMOVE_ACTIVE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BDST_EXIT_REMOVE_ACTIVE 字段为 0失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BDST_EXIT_REMOVE_ACTIVE 字段为 0成功");
|
I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "1", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BDST_EXIT_TRANSF_DONE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BDST_EXIT_TRANSF_DONE 字段为 1失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BDST_EXIT_TRANSF_DONE 字段为 1成功");
|
}
|
else
|
{
|
LogHelper.Info("完工回报", "读安全信号交互表 未获取到数据");
|
}
|
}
|
if (tac != null && tac.CtiaMode == "VMI2")
|
{
|
var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac.host)?.First();
|
if (Alone == null)
|
{
|
throw new Exception($"未查询到对应的VMI ConfigId为 {tac.host} 的数据库连接字符串");
|
}
|
var childA = new SqlHelper<object>().GetInstance(Alone.ConnectionString);
|
var I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "1", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_EXIT_TRANSF_DONE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_EXIT_TRANSF_DONE 字段为 1失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_EXIT_TRANSF_DONE 字段为 1成功");
|
I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_EXIT_RETR_ACTIVE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_EXIT_RETR_ACTIVE 字段为 0失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_EXIT_RETR_ACTIVE 字段为 0成功");
|
}
|
}
|
}
|
}
|
}
|
else
|
{
|
LogHelper.Info("完工回报", "未查询到对应的任务信息");
|
}
|
//查询表 看看是否是需要安全交互
|
}
|
else if (state == 1103)//安全请求 卸货申请,允许进入卸货,修改参数18为1103
|
{
|
if (task.S_TYPE == "入库")
|
{
|
//var tno = no.Substring(0, no.LastIndexOf("_"));
|
//var ta = newDb.Queryable<WMSTask>().Where(e => e.S_TASK_NO == tno)?.First();
|
//List<TN_SubsidiaryEntitys> Subsidiary = new List<TN_SubsidiaryEntitys>();
|
//var locationBit = LocationHelper.LocationCode(ta.S_END_LOC);
|
//if (task != null)
|
//{
|
// var Subs = Expressionable.Create<TN_SubsidiaryEntitys>();
|
// Subs.And(it => it.S_AREA_CODE == ta.S_END_LAREA);
|
// Subs.And(it => it.S_IS_IN_OUT == "入库");
|
// Subs.And(it => it.S_FlowNo == ta.S_FlowNo);
|
// Subsidiary = newDb.Queryable<TN_SubsidiaryEntitys>().Where(Subs.ToExpression()).ToList();
|
//}
|
//var RoaSub = Subsidiary.Find(e => e.N_ROADWAY == locationBit.N_ROADWAY);
|
//2024年6月20日13:59:32 禁用改道功能 原因是 经肖世民与现场设备人员沟通,小车无法实时响应改道后点位信息,所以代码暂时注释
|
//if (RoaSub?.N_Y_ROADWAY != "Y")
|
if (false)
|
{
|
//计算货位
|
//var logicAreaCode = string.Empty;
|
//logicAreaCode = ta.S_TOOLS_TPYE;
|
//List<areaPriorClass> classes = new List<areaPriorClass>();
|
//areaPriorClass area = new areaPriorClass
|
//{
|
// areaCode = ta.S_END_LAREA,
|
// Prior = 0
|
//};
|
//classes.Add(area);
|
//var aEntity = new InAssignEntity()
|
//{
|
// objectType = InAssignEntity.ObjectType.托盘,
|
// objectCode = task.S_CNTRS,
|
// itemCode = "",
|
// lstAreaPrior = classes,
|
// projectCode = "",
|
// logicAreaCode = logicAreaCode,
|
// stockCode = "ZCQTJ",
|
// S_Roadway = new List<string>(),
|
// needCalLock = true
|
//};
|
////根据库区获取货位
|
//InAssignResultEntity resultEntity = BLLCreator.Create<In_AlgorBLL>().InAssign(aEntity);
|
//if (resultEntity.Success)
|
//{
|
// //查询改道后计算的终点货位属于哪个巷道的 然后取这个巷道的接驳位
|
// //改道--任务
|
// var SubLocation = newDb.Queryable<Location>().Where(e => e.S_LOC_CODE == resultEntity.locationCode)?.First();
|
// if (SubLocation != null)
|
// {
|
// var ggt = Subsidiary.Find(e => e.N_ROADWAY == SubLocation.N_ROADWAY);
|
// if (ggt != null)
|
// {
|
// var JbLocation = "";
|
// var result = ggt.S_CONNECTION.Split(',').ToList();
|
// if (result.Count > 1)
|
// {
|
|
|
// List<string> TaskState = new List<string>() { "取消", "完成" };
|
// var transportTask = newDb.Queryable<WMSTask>().Where(e => !TaskState.Contains(e.S_B_STATE) && result.Contains(e.S_Jb_Bit) && e.S_NOTE == "agv任务" && e.S_TYPE == "入库").ToList();
|
|
// //分组 把任务量最少的
|
// bool df = true;
|
// foreach (var item in result)
|
// {
|
// //查询是否有没任务的接驳位,如果有就下任务到这个接驳位
|
// var gg = transportTask.FindAll(e => e.S_Jb_Bit == item).ToList();
|
// if (gg.Count() > 0)
|
// {
|
// continue;
|
// }
|
// else
|
// {
|
// df = false;
|
// JbLocation = item;
|
// break;
|
// }
|
// }
|
// if (df)
|
// {
|
// //初步筛选没有空任务的入库接驳位 需要从中取任务量最少的
|
// var fft = transportTask.GroupBy(e => e.S_Jb_Bit).Select(g => new { Jb_Bit = g.Key, Count = g.Count() }).ToList();
|
// var MinJb_Bit = fft.OrderBy(e => e.Count)?.First();
|
// JbLocation = MinJb_Bit.Jb_Bit;
|
// }
|
// }
|
// else
|
// {
|
// JbLocation = ggt.S_CONNECTION;
|
// }
|
// var Jb = newDb.Queryable<Location>().Where(e => e.S_LOC_CODE == JbLocation)?.First();
|
// var tra = BLLCreator.Create<ZCBLL>().UpdateTaskEndLocation(ta, resultEntity.locationCode, Jb);
|
// if (!tra.Success)
|
// {
|
// newDb.BeginTran();
|
// var I = newDb.Updateable<Location>().SetColumns(it => it.S_LOCK_STATE == "无").Where(x => x.S_LOC_CODE == resultEntity.locationCode).ExecuteCommand();
|
// if (I == 0)
|
// {
|
// newDb.RollbackTran();
|
// }
|
// newDb.CommitTran();
|
// }
|
// //改道--通知小车
|
// var loca = LocationHelper.GetAgvSiteZc(Jb.S_LOC_CODE);
|
// NDCHelper.ChangeParam(no, loca, 2);
|
// NDCHelper.ChangeParam(no, 1003, 18);
|
// }
|
// }
|
//}
|
}
|
else
|
{
|
if (task.S_SRC_SYS == "点对点改道")
|
{
|
var tac = newDb.Queryable<TN_TcpCont>().Where(a => a.LocationCode == task.S_END_LOC)?.First();
|
if (tac != null)
|
{
|
if (tac.CtiaMode == "MODBUS")
|
{
|
if (string.IsNullOrEmpty(tac.host) || tac.port == 0)
|
{
|
LogHelper.Info("完工回报", $"报错:通讯模式配置表货中 货位{task.S_END_LOC} ip地址 写入目标设备的IP端口 有空值或者默认值");
|
}
|
else
|
{
|
RegisterWriteOutPutModel Register = new RegisterWriteOutPutModel();
|
Register.host = tac.host;
|
Register.port = tac.port;
|
Register.addr = tac.addr;
|
Register.data = tac.dataNum;
|
LogHelper.Info("完工回报", $"MODBUS 写--发送参数{JsonConvert.SerializeObject(Register)}");
|
var ta = OITcpHelper.RegisterWriteOutPut(Register);
|
LogHelper.Info("完工回报", $"MODBUS 写--返回参数{JsonConvert.SerializeObject(ta)}");
|
// RegisterWriteOutPutModel Register = new RegisterWriteOutPutModel();
|
Register.host = tac.host;
|
Register.port = tac.port;
|
Register.addr = tac.addr + 4;
|
Register.data = tac.dataNum;
|
LogHelper.Info("完工回报", $"MODBUS 写--发送参数{JsonConvert.SerializeObject(Register)}");
|
var gg = OITcpHelper.RegisterWriteOutPut(Register);
|
LogHelper.Info("完工回报", $"MODBUS 写--返回参数{JsonConvert.SerializeObject(gg)}");
|
|
RegisterReadOutPutModel Regis = new RegisterReadOutPutModel();
|
Regis.host = tac.host;
|
Regis.port = tac.port;
|
Regis.addr = tac.Seleaddr;
|
Regis.dataNum = 5;
|
LogHelper.Info("完工回报", $"MODBUS 读取输出寄存器数据 发送参数{JsonConvert.SerializeObject(Regis)}");
|
var tra = OITcpHelper.RegisterReadOutPut(Regis);
|
LogHelper.Info("完工回报", $"MODBUS 读取输出寄存器数据 返回参数{JsonConvert.SerializeObject(tra)}");
|
if (tra != null)
|
{
|
if (tra.result.ToList().Count() > 0)
|
{
|
if (tra.result[0] == 1 && tra.result[4] == 1)
|
{
|
NDCHelper.ChangeParam(no, 1103, 18);
|
}
|
}
|
}
|
}
|
}
|
if (tac.CtiaMode == "VMI")
|
{
|
var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac.host)?.First();
|
if (Alone == null)
|
{
|
throw new Exception($"未查询到对应的VMI ConfigId为 {tac.host} 的数据库连接字符串");
|
}
|
var childA = new SqlHelper<object>().GetInstance(Alone.ConnectionString);
|
var GGF = childA.Queryable<BDST_TO_AGV_STATUS>().OrderBy(st => st.VMI_TO_AGV_DATA, OrderByType.Desc)?.First();
|
var GGF2 = childA.Queryable<DATA_TO_HMI>()?.First();
|
if (GGF != null)
|
{
|
LogHelper.Info("完工回报", $"读安全信号交互表 {JsonConvert.SerializeObject(GGF)}");
|
if (GGF.AutoMode && !GGF.FatalFault && !GGF.AgvBypass && !GGF.EntryTrackBusy && GGF.EntryPos1Empty && GGF.EntrySupplyPallet)//123 456 为true
|
{
|
var I = childA.Updateable<BDST_TO_AGV_STATUS>().SetColumns(it => new BDST_TO_AGV_STATUS() { Handshake = "-" }).Where(e => e.VMI_TO_AGV_DATA == GGF.VMI_TO_AGV_DATA).ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("读安全信号交互表 更新Handshake字段为 - 失败");
|
}
|
LogHelper.Info("完工回报", $"读安全信号交互表 更新Handshake字段为 - 成功");
|
I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "1", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BDST_ENTRY_SUPP_ACTIVE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BDST_ENTRY_SUPP_ACTIVE 字段为 1失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BDST_ENTRY_SUPP_ACTIVE 字段为 1成功");
|
//I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "1", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BDST_ENTRY_SUPP_ACTIVE").ExecuteCommand();
|
//if (I == 0)
|
//{
|
// throw new Exception("写安全信号交互表 IMES_AGV_BDST_ENTRY_SUPP_ACTIVE 字段为 0失败");
|
//}
|
//LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BDST_ENTRY_SUPP_ACTIVE 字段为 0成功");
|
NDCHelper.ChangeParam(no, 1103, 18);
|
}
|
}
|
else
|
{
|
LogHelper.Info("完工回报", "读安全信号交互表 未获取到数据");
|
}
|
}
|
else if (tac.CtiaMode == "VMI2")
|
{
|
var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac.host)?.First();
|
if (Alone == null)
|
{
|
throw new Exception($"未查询到对应的VMI ConfigId为 {tac.host} 的数据库连接字符串");
|
}
|
var childA = new SqlHelper<object>().GetInstance(Alone.ConnectionString);
|
var GGF = childA.Queryable<AGV_STATUS_BAST>().OrderBy(st => st.Id, OrderByType.Desc)?.First();
|
LogHelper.Info("完工回报", $"读安全信号交互表 {JsonConvert.SerializeObject(GGF)}");
|
if (GGF != null)
|
{
|
if (!GGF.EntryTrackBusy && !GGF.EntryPos1Empty)
|
{
|
NDCHelper.ChangeParam(no, 1103, 18);
|
}
|
}
|
}
|
}
|
}
|
else
|
{
|
BLLCreator.CreateSingleton<WcsTask>().WcsCallback(task, state, forkliftNo);
|
}
|
}
|
}
|
else if (task.S_TYPE == "出库")
|
{
|
var tac = newDb.Queryable<TN_TcpCont>().Where(a => a.LocationCode == task.S_END_LOC)?.First();
|
if (tac != null)
|
{
|
if (tac.CtiaMode == "MODBUS")
|
{
|
if (string.IsNullOrEmpty(tac.host) || tac.port == 0)
|
{
|
LogHelper.Info("完工回报", $"报错:通讯模式配置表货中 货位{task.S_END_LOC} ip地址 写入目标设备的IP端口 有空值或者默认值");
|
}
|
else
|
{
|
RegisterWriteOutPutModel Register = new RegisterWriteOutPutModel();
|
Register.host = tac.host;
|
Register.port = tac.port;
|
Register.addr = tac.addr;
|
Register.data = tac.dataNum;
|
LogHelper.Info("完工回报", $"MODBUS 写--发送参数{JsonConvert.SerializeObject(Register)}");
|
var ta = OITcpHelper.RegisterWriteOutPut(Register);
|
LogHelper.Info("完工回报", $"MODBUS 写--返回参数{JsonConvert.SerializeObject(ta)}");
|
// RegisterWriteOutPutModel Register = new RegisterWriteOutPutModel();
|
Register.host = tac.host;
|
Register.port = tac.port;
|
Register.addr = tac.addr + 4;
|
Register.data = tac.dataNum;
|
LogHelper.Info("完工回报", $"MODBUS 写--发送参数{JsonConvert.SerializeObject(Register)}");
|
var gg = OITcpHelper.RegisterWriteOutPut(Register);
|
LogHelper.Info("完工回报", $"MODBUS 写--返回参数{JsonConvert.SerializeObject(gg)}");
|
|
RegisterReadOutPutModel Regis = new RegisterReadOutPutModel();
|
Regis.host = tac.host;
|
Regis.port = tac.port;
|
Regis.addr = tac.Seleaddr;
|
Regis.dataNum = 5;
|
LogHelper.Info("完工回报", $"MODBUS 读取输出寄存器数据 发送参数{JsonConvert.SerializeObject(Regis)}");
|
var tra = OITcpHelper.RegisterReadOutPut(Regis);
|
LogHelper.Info("完工回报", $"MODBUS 读取输出寄存器数据 返回参数{JsonConvert.SerializeObject(tra)}");
|
if (tra != null)
|
{
|
if (tra.result.ToList().Count() > 0)
|
{
|
|
|
if (tra.result[0] == 1 && tra.result[4] == 1)
|
{
|
NDCHelper.ChangeParam(no, 1103, 18);
|
}
|
}
|
}
|
//if (tra?.result.ToList().FirstOrDefault() == 1)
|
//{
|
// RegisterReadOutPutModel Regis2 = new RegisterReadOutPutModel();
|
// Regis2.host = tac.host;
|
// Regis2.port = tac.port;
|
// Regis2.addr = tac.Seleaddr + 4;
|
// Regis2.dataNum = 1;
|
// LogHelper.Info("完工回报", $"MODBUS 读取输入寄存器数据 发送参数{JsonConvert.SerializeObject(Regis2)}");
|
// tra = OITcpHelper.RegisterReadOutPut(Regis2);
|
// LogHelper.Info("完工回报", $"MODBUS 读取输入寄存器数据 返回参数{JsonConvert.SerializeObject(tra)}");
|
// if (tra?.result.ToList().FirstOrDefault() == 1)
|
// {
|
// NDCHelper.ChangeParam(no, 1103, 18);
|
// }
|
//}
|
}
|
}
|
if (tac.CtiaMode == "VMI")
|
{
|
var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac.host)?.First();
|
if (Alone == null)
|
{
|
throw new Exception($"未查询到对应的VMI ConfigId为 {tac.host} 的数据库连接字符串");
|
}
|
var childA = new SqlHelper<object>().GetInstance(Alone.ConnectionString);
|
var GGF = childA.Queryable<BDST_TO_AGV_STATUS>().OrderBy(st => st.VMI_TO_AGV_DATA, OrderByType.Desc)?.First();
|
var GGF2 = childA.Queryable<DATA_TO_HMI>()?.First();
|
if (GGF != null)
|
{
|
LogHelper.Info("完工回报", $"读安全信号交互表 {JsonConvert.SerializeObject(GGF)}");
|
if (GGF.AutoMode && !GGF.FatalFault && !GGF.AgvBypass && !GGF.EntryTrackBusy && GGF.EntryPos1Empty && GGF.EntrySupplyPallet)//123 456 为true
|
{
|
var I = childA.Updateable<BDST_TO_AGV_STATUS>().SetColumns(it => new BDST_TO_AGV_STATUS() { Handshake = "-" }).Where(e => e.VMI_TO_AGV_DATA == GGF.VMI_TO_AGV_DATA).ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("读安全信号交互表 更新Handshake字段为 - 失败");
|
}
|
LogHelper.Info("完工回报", $"读安全信号交互表 更新Handshake字段为 - 成功");
|
I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "1", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BDST_ENTRY_SUPP_ACTIVE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BDST_ENTRY_SUPP_ACTIVE 字段为 1失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BDST_ENTRY_SUPP_ACTIVE 字段为 1成功");
|
//I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "1", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BDST_ENTRY_SUPP_ACTIVE").ExecuteCommand();
|
//if (I == 0)
|
//{
|
// throw new Exception("写安全信号交互表 IMES_AGV_BDST_ENTRY_SUPP_ACTIVE 字段为 0失败");
|
//}
|
//LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BDST_ENTRY_SUPP_ACTIVE 字段为 0成功");
|
NDCHelper.ChangeParam(no, 1103, 18);
|
}
|
}
|
else
|
{
|
LogHelper.Info("完工回报", "读安全信号交互表 未获取到数据");
|
}
|
}
|
else if (tac.CtiaMode == "VMI2")
|
{
|
var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac.host)?.First();
|
if (Alone == null)
|
{
|
throw new Exception($"未查询到对应的VMI ConfigId为 {tac.host} 的数据库连接字符串");
|
}
|
var childA = new SqlHelper<object>().GetInstance(Alone.ConnectionString);
|
var GGF = childA.Queryable<AGV_STATUS_BAST>().OrderBy(st => st.Id, OrderByType.Desc)?.First();
|
LogHelper.Info("完工回报", $"读安全信号交互表 {JsonConvert.SerializeObject(GGF)}");
|
if (GGF != null)
|
{
|
if (!GGF.EntryTrackBusy && !GGF.EntryPos1Empty)
|
{
|
NDCHelper.ChangeParam(no, 1103, 18);
|
}
|
}
|
}
|
else if (tac.CtiaMode == "立库")
|
{
|
task.S_TYPE = "入库";
|
BLLCreator.CreateSingleton<WcsTask>().WcsCallback(task, state, forkliftNo);
|
}
|
}
|
}
|
}
|
else if (state == 1104)//卸货退出完成(车辆完全脱离机台)
|
{
|
if (task.S_TYPE == "入库")
|
{
|
|
if (task.S_SRC_SYS == "点对点改道")
|
{
|
var tac = newDb.Queryable<TN_TcpCont>().Where(a => a.LocationCode == task.S_END_LOC)?.First();
|
if (tac != null)
|
{
|
if (tac.CtiaMode == "MODBUS")
|
{
|
if (string.IsNullOrEmpty(tac.host) || tac.port == 0)
|
{
|
LogHelper.Info("完工回报", $"报错:通讯模式配置表货中 货位{task.S_END_LOC} ip地址 写入目标设备的IP端口 有空值或者默认值");
|
}
|
else
|
{
|
RegisterWriteOutPutModel Register = new RegisterWriteOutPutModel();
|
Register.host = tac.host;
|
Register.port = tac.port;
|
Register.addr = tac.addr + 2;
|
Register.data = tac.dataNum;
|
if (tac.C_IS_RFID == "Y")
|
{
|
}
|
else
|
{
|
var ta = OITcpHelper.RegisterWriteOutPut(Register);
|
LogHelper.Info("完工回报", $"MODBUS 发送参数{JsonConvert.SerializeObject(Register)}");
|
LogHelper.Info("完工回报", $"MODBUS 返回参数{JsonConvert.SerializeObject(ta)}");
|
}
|
}
|
}
|
else if (tac.CtiaMode == "VMI")
|
{
|
var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac.host)?.First();
|
if (Alone == null)
|
{
|
throw new Exception($"未查询到对应的VMI ConfigId为 {tac.host} 的数据库连接字符串");
|
}
|
var childA = new SqlHelper<object>().GetInstance(Alone.ConnectionString);
|
var GGF = childA.Queryable<BDST_TO_AGV_STATUS>().OrderBy(st => st.VMI_TO_AGV_DATA, OrderByType.Desc)?.First();
|
var GGF2 = childA.Queryable<DATA_TO_HMI>()?.First();
|
LogHelper.Info("完工回报", $"读安全信号交互表 {JsonConvert.SerializeObject(GGF)}");
|
if (GGF != null)
|
{
|
var I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BDST_ENTRY_SUPP_ACTIVE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BDST_ENTRY_SUPP_ACTIVE 字段为 0失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BDST_ENTRY_SUPP_ACTIVE 字段为 0成功");
|
I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "1", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BDST_ENTRY_TRANSF_DONE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BDST_ENTRY_TRANSF_DONE 字段为 1失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BDST_ENTRY_TRANSF_DONE 字段为 1成功");
|
}
|
else
|
{
|
LogHelper.Info("完工回报", "读安全信号交互表 未获取到数据");
|
}
|
}
|
else if (tac.CtiaMode == "VMI2")//VMI2有需要RFID验证的也有不需要的 不需要则直接复位发00 需要的发01 2024年7月25日16:35:44
|
{
|
if (tac.C_IS_RFID == "Y")
|
{
|
var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac.host)?.First();
|
if (Alone == null)
|
{
|
throw new Exception($"未查询到对应的VMI ConfigId为 {tac.host} 的数据库连接字符串");
|
}
|
var childA = new SqlHelper<object>().GetInstance(Alone.ConnectionString);
|
var I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_ENTRY_SUPP_ACTIVE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_ENTRY_SUPP_ACTIVE 字段为 0失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_ENTRY_SUPP_ACTIVE 字段为 0成功");
|
|
I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "1", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_ENTRY_TRANSF_DONE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_ENTRY_TRANSF_DONE 字段为 0失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_ENTRY_TRANSF_DONE 字段为 1成功");
|
}
|
else
|
{
|
var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac.host)?.First();
|
if (Alone == null)
|
{
|
throw new Exception($"未查询到对应的VMI ConfigId为 {tac.host} 的数据库连接字符串");
|
}
|
var childA = new SqlHelper<object>().GetInstance(Alone.ConnectionString);
|
var I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_ENTRY_SUPP_ACTIVE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_ENTRY_SUPP_ACTIVE 字段为 0失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_ENTRY_SUPP_ACTIVE 字段为 0成功");
|
|
I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_ENTRY_TRANSF_DONE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_ENTRY_TRANSF_DONE 字段为 0失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_ENTRY_TRANSF_DONE 字段为 0成功");
|
}
|
}
|
}
|
}
|
else
|
{
|
var tra = BLLCreator.Create<WcsTask>().WcsCallback(task, state, forkliftNo);
|
if (tra.Success)
|
{
|
// NDCHelper.ChangeParam(no, 1104, 18);
|
}
|
}
|
}
|
else if (task.S_TYPE == "出库")
|
{
|
var tac = newDb.Queryable<TN_TcpCont>().Where(a => a.LocationCode == task.S_END_LOC)?.First();
|
if (tac != null)
|
{
|
if (tac.CtiaMode == "MODBUS")
|
{
|
if (string.IsNullOrEmpty(tac.host) || tac.port == 0)
|
{
|
LogHelper.Info("完工回报", $"报错:通讯模式配置表货中 货位{task.S_END_LOC} ip地址 写入目标设备的IP端口 有空值或者默认值");
|
}
|
else
|
{
|
RegisterWriteOutPutModel Register = new RegisterWriteOutPutModel();
|
Register.host = tac.host;
|
Register.port = tac.port;
|
Register.addr = tac.addr + 2;
|
Register.data = tac.dataNum;
|
if (tac.C_IS_RFID == "Y")
|
{
|
|
}
|
else
|
{
|
var ta = OITcpHelper.RegisterWriteOutPut(Register);
|
LogHelper.Info("完工回报", $"MODBUS 发送参数{JsonConvert.SerializeObject(Register)}");
|
LogHelper.Info("完工回报", $"MODBUS 返回参数{JsonConvert.SerializeObject(ta)}");
|
}
|
|
|
}
|
}
|
else if (tac.CtiaMode == "VMI")
|
{
|
var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac.host)?.First();
|
if (Alone == null)
|
{
|
throw new Exception($"未查询到对应的VMI ConfigId为 {tac.host} 的数据库连接字符串");
|
}
|
var childA = new SqlHelper<object>().GetInstance(Alone.ConnectionString);
|
var GGF = childA.Queryable<BDST_TO_AGV_STATUS>().OrderBy(st => st.VMI_TO_AGV_DATA, OrderByType.Desc)?.First();
|
var GGF2 = childA.Queryable<DATA_TO_HMI>()?.First();
|
LogHelper.Info("完工回报", $"读安全信号交互表 {JsonConvert.SerializeObject(GGF)}");
|
if (GGF != null)
|
{
|
var I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BDST_ENTRY_SUPP_ACTIVE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BDST_ENTRY_SUPP_ACTIVE 字段为 0失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BDST_ENTRY_SUPP_ACTIVE 字段为 0成功");
|
I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "1", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BDST_ENTRY_TRANSF_DONE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BDST_ENTRY_TRANSF_DONE 字段为 1失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BDST_ENTRY_TRANSF_DONE 字段为 1成功");
|
}
|
else
|
{
|
LogHelper.Info("完工回报", "读安全信号交互表 未获取到数据");
|
}
|
}
|
else if (tac.CtiaMode == "VMI2")//VMI2有需要RFID验证的也有不需要的 不需要则直接复位发00 需要的发01 2024年7月25日16:35:44
|
{
|
if (tac.C_IS_RFID == "Y")
|
{
|
var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac.host)?.First();
|
if (Alone == null)
|
{
|
throw new Exception($"未查询到对应的VMI ConfigId为 {tac.host} 的数据库连接字符串");
|
}
|
var childA = new SqlHelper<object>().GetInstance(Alone.ConnectionString);
|
var I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_ENTRY_SUPP_ACTIVE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_ENTRY_SUPP_ACTIVE 字段为 0失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_ENTRY_SUPP_ACTIVE 字段为 0成功");
|
|
I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "1", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_ENTRY_TRANSF_DONE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_ENTRY_TRANSF_DONE 字段为 0失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_ENTRY_TRANSF_DONE 字段为 1成功");
|
}
|
else
|
{
|
var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac.host)?.First();
|
if (Alone == null)
|
{
|
throw new Exception($"未查询到对应的VMI ConfigId为 {tac.host} 的数据库连接字符串");
|
}
|
var childA = new SqlHelper<object>().GetInstance(Alone.ConnectionString);
|
var I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_ENTRY_SUPP_ACTIVE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_ENTRY_SUPP_ACTIVE 字段为 0失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_ENTRY_SUPP_ACTIVE 字段为 0成功");
|
|
I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_ENTRY_TRANSF_DONE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_ENTRY_TRANSF_DONE 字段为 0失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_ENTRY_TRANSF_DONE 字段为 0成功");
|
}
|
}
|
else if (tac.CtiaMode == "立库")
|
{
|
task.S_TYPE = "入库";
|
var tra = BLLCreator.Create<WcsTask>().WcsCallback(task, state, forkliftNo);
|
}
|
}
|
}
|
}
|
else if (state == 1105)
|
{
|
if (task.S_TYPE == "入库")
|
{
|
var tac = newDb.Queryable<TN_TcpCont>().Where(a => a.LocationCode == task.S_START_LOC)?.First();
|
if (tac != null)
|
{
|
if (tac.CtiaMode == "VMI")//Exitpos4Full
|
{
|
var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac.host)?.First();
|
if (Alone == null)
|
{
|
throw new Exception($"未查询到对应的VMI ConfigId为 {tac.host} 的数据库连接字符串");
|
}
|
var childA = new SqlHelper<object>().GetInstance(Alone.ConnectionString);
|
// var childA = newDb.GetConnection(tac.host);
|
var GGF = childA.Queryable<BDST_TO_AGV_STATUS>().OrderBy(st => st.VMI_TO_AGV_DATA, OrderByType.Desc)?.First();
|
LogHelper.Info("完工回报", $"读安全信号交互表 {JsonConvert.SerializeObject(GGF)}");
|
if (GGF != null)
|
{
|
if (GGF.AutoMode && !GGF.FatalFault && !GGF.AgvBypass && GGF.ExitPos4Full && !GGF.ExitTrackBusy && GGF.ExitRemovePallet)//123 789 为true
|
{
|
var I = childA.Updateable<BDST_TO_AGV_STATUS>().SetColumns(it => new BDST_TO_AGV_STATUS() { Handshake = "-" }).Where(e => e.VMI_TO_AGV_DATA == GGF.VMI_TO_AGV_DATA).ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("读安全信号交互表 更新Handshake字段为 - 失败");
|
}
|
LogHelper.Info("完工回报", $"读安全信号交互表 更新Handshake字段为 - 成功");
|
I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BDST_FAULT").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BDST_FAULT 字段为 0失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BDST_FAULT 字段为 0成功");
|
NDCHelper.ChangeParam(no, 1105, 18);
|
}
|
else if (!GGF.ExitPos4Full)
|
{
|
var ta = BLLCreator.CreateSingleton<StateTaskBLL>().ExecuteState(task.S_TASK_NO, "取消", logPara, task);
|
if (ta.Success)
|
{
|
var bbt = NDCHelper.Cancel(task.S_TASK_NO);//取消agv任务
|
}
|
}
|
}
|
else
|
{
|
LogHelper.Info("完工回报", "读安全信号交互表 未获取到数据");
|
}
|
}
|
}
|
}
|
}
|
else if (state == 1107)
|
{
|
if (task.S_TYPE == "出库")
|
{
|
var tac = newDb.Queryable<TN_TcpCont>().Where(a => a.LocationCode == task.S_END_LOC)?.First();
|
if (tac != null)
|
{
|
if (tac.CtiaMode == "VMI")
|
{
|
var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac.host)?.First();
|
if (Alone == null)
|
{
|
throw new Exception($"未查询到对应的VMI ConfigId为 {tac.host} 的数据库连接字符串");
|
}
|
var childA = new SqlHelper<object>().GetInstance(Alone.ConnectionString);
|
var GGF = childA.Queryable<BDST_TO_AGV_STATUS>().OrderBy(st => st.VMI_TO_AGV_DATA, OrderByType.Desc)?.First();
|
if (GGF != null)
|
{
|
LogHelper.Info("完工回报", $"读安全信号交互表 {JsonConvert.SerializeObject(GGF)}");
|
if (GGF.AutoMode && !GGF.FatalFault && !GGF.AgvBypass && !GGF.EntryTrackBusy && GGF.EntryPos1Empty && GGF.EntrySupplyPallet)//123 456 为true
|
{
|
var I = childA.Updateable<BDST_TO_AGV_STATUS>().SetColumns(it => new BDST_TO_AGV_STATUS() { Handshake = "-" }).Where(e => e.VMI_TO_AGV_DATA == GGF.VMI_TO_AGV_DATA).ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("读安全信号交互表 更新Handshake字段为 - 失败");
|
}
|
LogHelper.Info("完工回报", $"读安全信号交互表 更新Handshake字段为 - 成功");
|
I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BDST_FAULT").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BDST_FAULT 字段为 0失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BDST_FAULT 字段为 0成功");
|
NDCHelper.ChangeParam(no, 1107, 18);
|
}
|
}
|
}
|
}
|
}
|
}
|
else if (state == 1002)
|
{
|
if (task != null)//出库是立库 入库是机台
|
{
|
if (task.S_TYPE == "入库")
|
{
|
if (task.S_SRC_SYS == "点对点改道")
|
{
|
var tac = newDb.Queryable<TN_TcpCont>().Where(a => a.LocationCode == task.S_END_LOC)?.First();
|
if (tac != null)
|
{
|
if (tac.CtiaMode == "VMI2" && tac.C_IS_RFID == "Y")
|
{
|
var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac.host)?.First();
|
if (Alone == null)
|
{
|
throw new Exception($"未查询到对应的VMI ConfigId为 {tac.host} 的数据库连接字符串");
|
}
|
var childA = new SqlHelper<object>().GetInstance(Alone.ConnectionString);
|
var VMI2 = childA.Queryable<AGV_STATUS_BAST_VMI2>().OrderBy(st => st.Id, OrderByType.Desc)?.First();
|
LogHelper.Info("完工回报", $"读安全信号交互表 查 RFIDCheck 字段为 读取到的数据为{JsonConvert.SerializeObject(VMI2)}");
|
if (VMI2 != null)
|
{
|
if (VMI2.RFIDCheck == 2)
|
{
|
NDCHelper.ChangeParam(task.S_TASK_NO, 60000, 18);
|
var I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_ENTRY_SUPP_ACTIVE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_ENTRY_SUPP_ACTIVE 字段为 0失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_ENTRY_SUPP_ACTIVE 字段为 0成功");
|
I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_ENTRY_TRANSF_DONE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_ENTRY_TRANSF_DONE 字段为 0失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_ENTRY_TRANSF_DONE 字段为 0成功");
|
}
|
else if (VMI2.RFIDCheck == 1)
|
{
|
TN_Loc_AbnormalEntitys ent = null;
|
if (task.S_TOOLS_TPYE == "KJZ")
|
{
|
ent = newDb.Queryable<TN_Loc_AbnormalEntitys>().Where(e => e.S_CNTR_CODE == task.S_END_LOC + "-" + task.S_TOOLS_TPYE)?.First();
|
}
|
else
|
{
|
ent = newDb.Queryable<TN_Loc_AbnormalEntitys>().Where(e => e.S_CNTR_CODE == task.S_TOOLS_TPYE)?.First();
|
}
|
if (ent == null)
|
{
|
throw new Exception("未维护该工装类型的异常缓存位,请联系管理员");
|
}
|
if (string.IsNullOrEmpty(ent.S_S_LOC_CODE))
|
{
|
throw new Exception("维护的异常缓存位数据中缓存位货位码是空值");
|
}
|
//查询主任务
|
var Z_Task = newDb.Queryable<WMSTask>().Where(e => e.S_TASK_NO == task.S_SRC_NO)?.First();
|
if (Z_Task == null)
|
{
|
throw new Exception($"未查询到主任务 任务号为{Z_Task}");
|
}
|
Location Bf = new Location();
|
int TT = LocationHelper.GetAgvSiteZc(Z_Task.S_END_LOC);
|
if (!string.IsNullOrEmpty(task.S_END_LOC_AGO))
|
{
|
Bf = LocationHelper.LocationCodeJbw(task.S_END_LOC_AGO);
|
TT = LocationHelper.GetAgvSiteZc(Z_Task.S_END_LOC_AGO);
|
}
|
int[] parms = { TT, LocationHelper.GetAgvSiteZc(ent.S_S_LOC_CODE) };
|
var endloca = LocationHelper.LocationCodeJbw(ent.S_S_LOC_CODE);
|
try
|
{
|
newDb.BeginTran();
|
var A = newDb.Updateable<WMSTask>().SetColumns(it => new WMSTask() { mark = "Y" }).Where(x => x.S_TASK_NO == task.S_SRC_NO).ExecuteCommand();//主任务
|
if (string.IsNullOrEmpty(task.S_END_LOC_AGO))
|
{
|
A = newDb.Updateable<WMSTask>().SetColumns(it => new WMSTask() { mark = "Y", S_END_LOC_AGO = task.S_END_LOC, S_START_LOC = Z_Task.S_END_LOC, S_START_LAREA = Z_Task.S_END_LAREA, S_END_LOC = ent.S_S_LOC_CODE, S_END_LAREA = endloca.S_AREA_CODE, S_Subtask = "N" }).Where(x => x.S_TASK_NO == task.S_TASK_NO).ExecuteCommand();//agv任务 RFID异常改道
|
if (A == 0)
|
{
|
LogHelper.TaskDetail(logPara, "RFID验证:更新任务状态失败");
|
}
|
}
|
else
|
{
|
A = newDb.Updateable<WMSTask>().SetColumns(it => new WMSTask() { mark = "Y", S_START_LOC = task.S_END_LOC_AGO, S_START_LAREA = Bf.S_AREA_CODE, S_END_LOC = ent.S_S_LOC_CODE, S_END_LAREA = endloca.S_AREA_CODE, S_Subtask = "N" }).Where(x => x.S_TASK_NO == task.S_TASK_NO).ExecuteCommand();//agv任务 RFID异常改道
|
if (A == 0)
|
{
|
LogHelper.TaskDetail(logPara, "RFID验证:更新任务状态失败");
|
}
|
}
|
|
newDb.CommitTran();
|
}
|
catch (Exception ex)
|
{
|
LogHelper.TaskDetail(logPara, JsonConvert.SerializeObject(ex));
|
newDb.RollbackTran();
|
}
|
|
var I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "1", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_ENTRY_SUPP_ACTIVE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_ENTRY_SUPP_ACTIVE 字段为 1失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_ENTRY_SUPP_ACTIVE 字段为 1成功");
|
I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_ENTRY_TRANSF_DONE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_ENTRY_TRANSF_DONE 字段为 1失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_ENTRY_TRANSF_DONE 字段为 1成功");
|
|
NDCHelper.ChangeParam(task.S_TASK_NO, parms[0], 1);
|
NDCHelper.ChangeParam(task.S_TASK_NO, parms[1], 2);
|
NDCHelper.ChangeParam(task.S_TASK_NO, 1002, 18);
|
}
|
}
|
else
|
{
|
LogHelper.Info("完工回报", "读安全信号交互表 查 RFIDCheck 字段为空");
|
}
|
}
|
else if (tac.CtiaMode == "MODBUS" && tac.C_IS_RFID == "Y")
|
{
|
RegisterReadOutPutModel Regis = new RegisterReadOutPutModel();
|
Regis.host = tac.host;
|
Regis.port = tac.port;
|
Regis.addr = tac.Seleaddr;
|
Regis.dataNum = 6;
|
LogHelper.Info("完工回报", $"MODBUS 读取输出寄存器数据 输入参数{JsonConvert.SerializeObject(Regis)}");
|
var tra = OITcpHelper.RegisterReadOutPut(Regis);
|
LogHelper.Info("完工回报", $"MODBUS 读取输出寄存器数据 返回参数{JsonConvert.SerializeObject(tra)}");
|
if (tra != null)
|
{
|
if (tra.result.ToList().Count() > 0)
|
{
|
|
if (tra.result[5] == 2)
|
{
|
RegisterWriteOutPutModel Register = new RegisterWriteOutPutModel();
|
Register.host = tac.host;
|
Register.port = tac.port;
|
Register.addr = tac.addr + 2;
|
Register.data = tac.dataNum;
|
LogHelper.Info("完工回报", $"MODBUS 发送参数{JsonConvert.SerializeObject(Register)}");
|
var ta = OITcpHelper.RegisterWriteOutPut(Register);
|
LogHelper.Info("完工回报", $"MODBUS 返回参数{JsonConvert.SerializeObject(ta)}");
|
NDCHelper.ChangeParam(task.S_TASK_NO, 60000, 18);
|
}
|
else if (tra.result[5] == 1)
|
{
|
TN_Loc_AbnormalEntitys ent = null;
|
if (task.S_TOOLS_TPYE == "KJZ")
|
{
|
ent = newDb.Queryable<TN_Loc_AbnormalEntitys>().Where(e => e.S_CNTR_CODE == task.S_END_LOC + "-" + task.S_TOOLS_TPYE)?.First();
|
}
|
else
|
{
|
ent = newDb.Queryable<TN_Loc_AbnormalEntitys>().Where(e => e.S_CNTR_CODE == task.S_TOOLS_TPYE)?.First();
|
}
|
if (ent == null)
|
{
|
throw new Exception("未维护该工装类型的异常缓存位,请联系管理员");
|
}
|
if (string.IsNullOrEmpty(ent.S_S_LOC_CODE))
|
{
|
throw new Exception("维护的异常缓存位数据中缓存位货位码是空值");
|
}
|
//查询主任务
|
var Z_Task = newDb.Queryable<WMSTask>().Where(e => e.S_TASK_NO == task.S_SRC_NO)?.First();
|
if (Z_Task == null)
|
{
|
throw new Exception($"未查询到主任务 任务号为{Z_Task}");
|
}
|
Location Bf = new Location();
|
int TT = LocationHelper.GetAgvSiteZc(Z_Task.S_END_LOC);
|
if (!string.IsNullOrEmpty(task.S_END_LOC_AGO))
|
{
|
Bf = LocationHelper.LocationCodeJbw(task.S_END_LOC_AGO);
|
TT = LocationHelper.GetAgvSiteZc(Z_Task.S_END_LOC_AGO);
|
}
|
int[] parms = { TT, LocationHelper.GetAgvSiteZc(ent.S_S_LOC_CODE) };
|
var endloca = LocationHelper.LocationCodeJbw(ent.S_S_LOC_CODE);
|
try
|
{
|
newDb.BeginTran();
|
var A = newDb.Updateable<WMSTask>().SetColumns(it => new WMSTask() { mark = "Y" }).Where(x => x.S_TASK_NO == task.S_SRC_NO).ExecuteCommand();//主任务
|
if (string.IsNullOrEmpty(task.S_END_LOC_AGO))
|
{
|
A = newDb.Updateable<WMSTask>().SetColumns(it => new WMSTask() { mark = "Y", S_END_LOC_AGO = task.S_END_LOC, S_START_LOC = Z_Task.S_END_LOC, S_START_LAREA = Z_Task.S_END_LAREA, S_END_LOC = ent.S_S_LOC_CODE, S_END_LAREA = endloca.S_AREA_CODE, S_Subtask = "N" }).Where(x => x.S_TASK_NO == task.S_TASK_NO).ExecuteCommand();//agv任务 RFID异常改道
|
if (A == 0)
|
{
|
LogHelper.TaskDetail(logPara, "RFID验证:更新任务状态失败");
|
}
|
}
|
else
|
{
|
A = newDb.Updateable<WMSTask>().SetColumns(it => new WMSTask() { mark = "Y", S_START_LOC = task.S_END_LOC_AGO, S_START_LAREA = Bf.S_AREA_CODE, S_END_LOC = ent.S_S_LOC_CODE, S_END_LAREA = endloca.S_AREA_CODE, S_Subtask = "N" }).Where(x => x.S_TASK_NO == task.S_TASK_NO).ExecuteCommand();//agv任务 RFID异常改道
|
if (A == 0)
|
{
|
LogHelper.TaskDetail(logPara, "RFID验证:更新任务状态失败");
|
}
|
}
|
|
newDb.CommitTran();
|
}
|
catch (Exception ex)
|
{
|
LogHelper.TaskDetail(logPara, JsonConvert.SerializeObject(ex));
|
newDb.RollbackTran();
|
}
|
NDCHelper.ChangeParam(task.S_TASK_NO, parms[0], 1);
|
NDCHelper.ChangeParam(task.S_TASK_NO, parms[1], 2);
|
NDCHelper.ChangeParam(task.S_TASK_NO, 1002, 18);
|
}
|
}
|
}
|
}
|
}
|
}
|
else
|
{
|
var tac = newDb.Queryable<WmsTaskAction>().Where(a => a.S_TASK_NO == task.S_TASK_NO && a.S_ACTION_CODE == "6")?.First();
|
if (tac != null)
|
{
|
List<string> statetask = new List<string>() { "完成", "取消", "卸货完成" };
|
if (!statetask.Contains(task.S_B_STATE))
|
{
|
var ta = BLLCreator.Create<StateTaskBLL>().ExecuteState(tac.S_TASK_NO, "卸货完成", logPara, task);
|
}
|
}
|
var taskNo = task.S_TASK_NO;
|
if (taskNo.IndexOf("_") > 0)
|
{
|
var topNo = taskNo.Substring(0, taskNo.IndexOf("_"));
|
var WmsTaskAct = newDb.Queryable<WmsTaskAction>().Where(e => e.S_TASK_NO == topNo + "_2" && e.S_EQ_NO == "WCS" && e.S_ACTION_CODE == "4")?.First();
|
if (WmsTaskAct != null)
|
{
|
WcsTaskState Supplier = JsonConvert.DeserializeObject<WcsTaskState>(WmsTaskAct.S_DATA);
|
|
if (Supplier.noticeType == "4")
|
{
|
var transportTask = newDb.Queryable<WMSTask>().Where(e => e.S_TASK_NO == taskNo)?.First();
|
var transportTask2 = newDb.Queryable<WMSTask>().Where(e => e.S_TASK_NO == topNo + "_2")?.First();
|
|
if (transportTask != null)
|
{
|
if (taskNo.IndexOf('_') > 0)
|
{
|
string topNo2 = taskNo.Substring(0, taskNo.IndexOf("_"));
|
var transportTask3 = newDb.Queryable<WMSTask>().Where(e => e.S_TASK_NO == topNo)?.First();
|
if (transportTask.S_TYPE == "入库")
|
{
|
if (Supplier.code == "0")
|
{
|
NDCHelper.ChangeParam(task.S_TASK_NO, 60000, 18);
|
}
|
else if (Supplier.code == "1")
|
{
|
TN_Loc_AbnormalEntitys ent = null;
|
if (task.S_TOOLS_TPYE == "KJZ")
|
{
|
ent = newDb.Queryable<TN_Loc_AbnormalEntitys>().Where(e => e.S_CNTR_CODE == task.S_END_LOC + "-" + transportTask.S_TOOLS_TPYE)?.First();
|
}
|
else
|
{
|
ent = newDb.Queryable<TN_Loc_AbnormalEntitys>().Where(e => e.S_CNTR_CODE == transportTask.S_TOOLS_TPYE)?.First();
|
}
|
if (ent == null)
|
{
|
throw new Exception("未维护该工装类型的异常缓存位,请联系管理员");
|
}
|
if (string.IsNullOrEmpty(ent.S_S_LOC_CODE))
|
{
|
throw new Exception("维护的异常缓存位数据中缓存位货位码是空值");
|
}
|
int[] parms = { LocationHelper.GetAgvSiteZc(task.S_Jb_Bit), LocationHelper.GetAgvSiteZc(ent.S_S_LOC_CODE) };
|
var endloca = LocationHelper.LocationCodeJbw(ent.S_S_LOC_CODE);
|
var ta = BLLCreator.Create<StateTaskBLL>().ExecuteState(topNo2 + "_2", "取消", logPara);
|
try
|
{
|
newDb.BeginTran();
|
var I = newDb.Updateable<WMSTask>().SetColumns(it => new WMSTask() { mark = "Y" }).Where(x => x.S_ID == transportTask3.S_ID).ExecuteCommand();//主任务
|
I = newDb.Updateable<WMSTask>().SetColumns(it => new WMSTask() { mark = "Y" }).Where(x => x.S_ID == transportTask2.S_ID).ExecuteCommand();//第二个子任务
|
I = newDb.Updateable<WMSTask>().SetColumns(it => new WMSTask() { mark = "Y", S_START_LOC = task.S_Jb_Bit, S_START_LAREA = task.S_END_LAREA, S_END_LOC = ent.S_S_LOC_CODE, S_END_LAREA = endloca.S_AREA_CODE, S_Subtask = "N" }).Where(x => x.S_ID == transportTask.S_ID).ExecuteCommand();//第一个子任务
|
if (I == 0)
|
{
|
LogHelper.TaskDetail(logPara, "RFID验证:更新任务状态失败");
|
}
|
newDb.CommitTran();
|
NDCHelper.ChangeParam(task.S_TASK_NO, parms[0], 1);
|
NDCHelper.ChangeParam(task.S_TASK_NO, parms[1], 2);
|
NDCHelper.ChangeParam(task.S_TASK_NO, 1002, 18);
|
}
|
catch (Exception ex)
|
{
|
LogHelper.TaskDetail(logPara, JsonConvert.SerializeObject(ex));
|
newDb.RollbackTran();
|
}
|
}
|
else
|
{
|
LogHelper.TaskDetail(logPara, "RFID验证:该信号与任务类型不符合");
|
}
|
}
|
else
|
{
|
LogHelper.TaskDetail(logPara, "RFID验证:该任务不是两段式任务");
|
}
|
}
|
else
|
{
|
LogHelper.TaskDetail(logPara, "RFID验证:该任务不是两段式任务");
|
}
|
}
|
}
|
}
|
}
|
else
|
{
|
NDCHelper.ChangeParam(task.S_TASK_NO, 1002, 18);
|
}
|
}
|
}
|
else if (task.S_TYPE == "出库")
|
{
|
var tac = newDb.Queryable<TN_TcpCont>().Where(a => a.LocationCode == task.S_END_LOC)?.First();
|
if (tac != null)
|
{
|
if (tac.CtiaMode == "VMI2" && tac.C_IS_RFID == "Y")
|
{
|
var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac.host)?.First();
|
if (Alone == null)
|
{
|
throw new Exception($"未查询到对应的VMI ConfigId为 {tac.host} 的数据库连接字符串");
|
}
|
var childA = new SqlHelper<object>().GetInstance(Alone.ConnectionString);
|
var VMI2 = childA.Queryable<AGV_STATUS_BAST_VMI2>().OrderBy(st => st.Id, OrderByType.Desc)?.First();
|
LogHelper.Info("完工回报", $"读安全信号交互表 查 RFIDCheck 字段为 读取到的数据为{JsonConvert.SerializeObject(VMI2)}");
|
if (VMI2 != null)
|
{
|
if (VMI2.RFIDCheck == 2)
|
{
|
NDCHelper.ChangeParam(task.S_TASK_NO, 60000, 18);
|
var I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_ENTRY_SUPP_ACTIVE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_ENTRY_SUPP_ACTIVE 字段为 0失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_ENTRY_SUPP_ACTIVE 字段为 0成功");
|
I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_ENTRY_TRANSF_DONE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_ENTRY_TRANSF_DONE 字段为 0失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_ENTRY_TRANSF_DONE 字段为 0成功");
|
}
|
else if (VMI2.RFIDCheck == 1)
|
{
|
TN_Loc_AbnormalEntitys ent = null;
|
if (task.S_TOOLS_TPYE == "KJZ")
|
{
|
ent = newDb.Queryable<TN_Loc_AbnormalEntitys>().Where(e => e.S_CNTR_CODE == task.S_END_LOC + "-" + task.S_TOOLS_TPYE)?.First();
|
}
|
else
|
{
|
ent = newDb.Queryable<TN_Loc_AbnormalEntitys>().Where(e => e.S_CNTR_CODE == task.S_TOOLS_TPYE)?.First();
|
}
|
if (ent == null)
|
{
|
throw new Exception("未维护该工装类型的异常缓存位,请联系管理员");
|
}
|
if (string.IsNullOrEmpty(ent.S_S_LOC_CODE))
|
{
|
throw new Exception("维护的异常缓存位数据中缓存位货位码是空值");
|
}
|
//查询主任务
|
var Z_Task = newDb.Queryable<WMSTask>().Where(e => e.S_TASK_NO == task.S_SRC_NO)?.First();
|
if (Z_Task == null)
|
{
|
throw new Exception($"未查询到主任务 任务号为{Z_Task}");
|
}
|
Location Bf = new Location();
|
int TT = LocationHelper.GetAgvSiteZc(Z_Task.S_END_LOC);
|
if (!string.IsNullOrEmpty(task.S_END_LOC_AGO))
|
{
|
Bf = LocationHelper.LocationCodeJbw(task.S_END_LOC_AGO);
|
TT = LocationHelper.GetAgvSiteZc(Z_Task.S_END_LOC_AGO);
|
}
|
int[] parms = { TT, LocationHelper.GetAgvSiteZc(ent.S_S_LOC_CODE) };
|
var endloca = LocationHelper.LocationCodeJbw(ent.S_S_LOC_CODE);
|
try
|
{
|
newDb.BeginTran();
|
var A = newDb.Updateable<WMSTask>().SetColumns(it => new WMSTask() { mark = "Y" }).Where(x => x.S_TASK_NO == task.S_SRC_NO).ExecuteCommand();//主任务
|
if (string.IsNullOrEmpty(task.S_END_LOC_AGO))
|
{
|
A = newDb.Updateable<WMSTask>().SetColumns(it => new WMSTask() { mark = "Y", S_END_LOC_AGO = task.S_END_LOC, S_START_LOC = Z_Task.S_END_LOC, S_START_LAREA = Z_Task.S_END_LAREA, S_END_LOC = ent.S_S_LOC_CODE, S_END_LAREA = endloca.S_AREA_CODE, S_Subtask = "N" }).Where(x => x.S_TASK_NO == task.S_TASK_NO).ExecuteCommand();//agv任务 RFID异常改道
|
if (A == 0)
|
{
|
LogHelper.TaskDetail(logPara, "RFID验证:更新任务状态失败");
|
}
|
}
|
else
|
{
|
A = newDb.Updateable<WMSTask>().SetColumns(it => new WMSTask() { mark = "Y", S_START_LOC = task.S_END_LOC_AGO, S_START_LAREA = Bf.S_AREA_CODE, S_END_LOC = ent.S_S_LOC_CODE, S_END_LAREA = endloca.S_AREA_CODE, S_Subtask = "N" }).Where(x => x.S_TASK_NO == task.S_TASK_NO).ExecuteCommand();//agv任务 RFID异常改道
|
if (A == 0)
|
{
|
LogHelper.TaskDetail(logPara, "RFID验证:更新任务状态失败");
|
}
|
}
|
|
newDb.CommitTran();
|
}
|
catch (Exception ex)
|
{
|
LogHelper.TaskDetail(logPara, JsonConvert.SerializeObject(ex));
|
newDb.RollbackTran();
|
}
|
|
var I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "1", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_ENTRY_SUPP_ACTIVE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_ENTRY_SUPP_ACTIVE 字段为 1失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_ENTRY_SUPP_ACTIVE 字段为 1成功");
|
I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_ENTRY_TRANSF_DONE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_ENTRY_TRANSF_DONE 字段为 1失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_ENTRY_TRANSF_DONE 字段为 1成功");
|
|
NDCHelper.ChangeParam(task.S_TASK_NO, parms[0], 1);
|
NDCHelper.ChangeParam(task.S_TASK_NO, parms[1], 2);
|
NDCHelper.ChangeParam(task.S_TASK_NO, 1002, 18);
|
}
|
}
|
else
|
{
|
LogHelper.Info("完工回报", "读安全信号交互表 查 RFIDCheck 字段为空");
|
}
|
}
|
else if (tac.CtiaMode == "MODBUS" && tac.C_IS_RFID == "Y")
|
{
|
RegisterReadOutPutModel Regis = new RegisterReadOutPutModel();
|
Regis.host = tac.host;
|
Regis.port = tac.port;
|
Regis.addr = tac.Seleaddr;
|
Regis.dataNum = 6;
|
LogHelper.Info("完工回报", $"MODBUS 读取输出寄存器数据 输入参数{JsonConvert.SerializeObject(Regis)}");
|
var tra = OITcpHelper.RegisterReadOutPut(Regis);
|
LogHelper.Info("完工回报", $"MODBUS 读取输出寄存器数据 返回参数{JsonConvert.SerializeObject(tra)}");
|
if (tra != null)
|
{
|
if (tra.result.ToList().Count() > 0)
|
{
|
|
if (tra.result[5] == 2)
|
{
|
RegisterWriteOutPutModel Register = new RegisterWriteOutPutModel();
|
Register.host = tac.host;
|
Register.port = tac.port;
|
Register.addr = tac.addr + 2;
|
Register.data = tac.dataNum;
|
LogHelper.Info("完工回报", $"MODBUS 发送参数{JsonConvert.SerializeObject(Register)}");
|
var ta = OITcpHelper.RegisterWriteOutPut(Register);
|
LogHelper.Info("完工回报", $"MODBUS 返回参数{JsonConvert.SerializeObject(ta)}");
|
NDCHelper.ChangeParam(task.S_TASK_NO, 60000, 18);
|
}
|
else if (tra.result[5] == 1)
|
{
|
TN_Loc_AbnormalEntitys ent = null;
|
if (task.S_TOOLS_TPYE == "KJZ")
|
{
|
ent = newDb.Queryable<TN_Loc_AbnormalEntitys>().Where(e => e.S_CNTR_CODE == task.S_END_LOC + "-" + task.S_TOOLS_TPYE)?.First();
|
}
|
else
|
{
|
ent = newDb.Queryable<TN_Loc_AbnormalEntitys>().Where(e => e.S_CNTR_CODE == task.S_TOOLS_TPYE)?.First();
|
}
|
if (ent == null)
|
{
|
throw new Exception("未维护该工装类型的异常缓存位,请联系管理员");
|
}
|
if (string.IsNullOrEmpty(ent.S_S_LOC_CODE))
|
{
|
throw new Exception("维护的异常缓存位数据中缓存位货位码是空值");
|
}
|
//查询主任务
|
var Z_Task = newDb.Queryable<WMSTask>().Where(e => e.S_TASK_NO == task.S_SRC_NO)?.First();
|
if (Z_Task == null)
|
{
|
throw new Exception($"未查询到主任务 任务号为{Z_Task}");
|
}
|
Location Bf = new Location();
|
int TT = LocationHelper.GetAgvSiteZc(Z_Task.S_END_LOC);
|
if (!string.IsNullOrEmpty(task.S_END_LOC_AGO))
|
{
|
Bf = LocationHelper.LocationCodeJbw(task.S_END_LOC_AGO);
|
TT = LocationHelper.GetAgvSiteZc(Z_Task.S_END_LOC_AGO);
|
}
|
int[] parms = { TT, LocationHelper.GetAgvSiteZc(ent.S_S_LOC_CODE) };
|
var endloca = LocationHelper.LocationCodeJbw(ent.S_S_LOC_CODE);
|
try
|
{
|
newDb.BeginTran();
|
var A = newDb.Updateable<WMSTask>().SetColumns(it => new WMSTask() { mark = "Y" }).Where(x => x.S_TASK_NO == task.S_SRC_NO).ExecuteCommand();//主任务
|
if (string.IsNullOrEmpty(task.S_END_LOC_AGO))
|
{
|
A = newDb.Updateable<WMSTask>().SetColumns(it => new WMSTask() { mark = "Y", S_END_LOC_AGO = task.S_END_LOC, S_START_LOC = Z_Task.S_END_LOC, S_START_LAREA = Z_Task.S_END_LAREA, S_END_LOC = ent.S_S_LOC_CODE, S_END_LAREA = endloca.S_AREA_CODE, S_Subtask = "N" }).Where(x => x.S_TASK_NO == task.S_TASK_NO).ExecuteCommand();//agv任务 RFID异常改道
|
if (A == 0)
|
{
|
LogHelper.TaskDetail(logPara, "RFID验证:更新任务状态失败");
|
}
|
}
|
else
|
{
|
A = newDb.Updateable<WMSTask>().SetColumns(it => new WMSTask() { mark = "Y", S_START_LOC = task.S_END_LOC_AGO, S_START_LAREA = Bf.S_AREA_CODE, S_END_LOC = ent.S_S_LOC_CODE, S_END_LAREA = endloca.S_AREA_CODE, S_Subtask = "N" }).Where(x => x.S_TASK_NO == task.S_TASK_NO).ExecuteCommand();//agv任务 RFID异常改道
|
if (A == 0)
|
{
|
LogHelper.TaskDetail(logPara, "RFID验证:更新任务状态失败");
|
}
|
}
|
|
newDb.CommitTran();
|
}
|
catch (Exception ex)
|
{
|
LogHelper.TaskDetail(logPara, JsonConvert.SerializeObject(ex));
|
newDb.RollbackTran();
|
}
|
NDCHelper.ChangeParam(task.S_TASK_NO, parms[0], 1);
|
NDCHelper.ChangeParam(task.S_TASK_NO, parms[1], 2);
|
NDCHelper.ChangeParam(task.S_TASK_NO, 1002, 18);
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|
else if (state == 1003)
|
{
|
if (task.S_END_LAREA != "TQRKJBW")
|
{
|
var IsGd = true;
|
var transportTask = newDb.Queryable<ConfigJsonEntitys>().Where(e => e.Autoindex == "成型机台")?.First();
|
List<string> ListString = new List<string>();
|
if (transportTask != null)
|
{
|
ListString = JsonConvert.DeserializeObject<List<string>>(transportTask.TypeJson);
|
}
|
if (ListString.Contains(task.S_START_LOC))
|
{
|
//判断空托满托
|
var Km = newDb.Queryable<CntrItemRel>().Where(e => e.S_CNTR_CODE == task.S_CNTRS).ToList();
|
LogHelper.Info("完工回报", $"查询是否有物料 {JsonConvert.SerializeObject(Km)}");
|
if (Km.Count() == 0)
|
{
|
//到达等待点后查询空托任务缓存表是否有数据 有则改道到线边 否则入库
|
var transportTask2 = newDb.Queryable<MesKtTaskDto>().Where(e => e.NeedTrig == "Y" && e.Task_State == "接驳位至线边点对点").ToList();
|
if (transportTask2.Any())
|
{
|
//查询第一个 然后再没有生成任务的时候改道
|
var orTask = transportTask2.OrderBy(e => e.T_CREATE).First();
|
//查询这个终点所在库区
|
var EndLocation = newDb.Queryable<Location>().Where(e => e.S_LOC_CODE == orTask.Location_To)?.First();
|
WMSTask ZrwTask = null;
|
if (no.IndexOf('_') > 0)
|
{
|
var tno = no.Substring(0, no.LastIndexOf("_"));
|
ZrwTask = newDb.Queryable<WMSTask>().Where(e => e.S_TASK_NO == tno)?.First();
|
}
|
LogHelper.Info("完工回报", $"查询是否有主任务 {JsonConvert.SerializeObject(ZrwTask)}");
|
var tac = newDb.Queryable<TN_TcpCont>().Where(a => a.LocationCode == EndLocation.S_LOC_CODE)?.First();
|
try
|
{
|
// 先将原来的货位释放了
|
newDb.BeginTran();
|
//更新任务的终点货位
|
var I = newDb.Updateable<WMSTask>().SetColumns(it => new WMSTask
|
{
|
S_END_LOC_AGO = task.S_END_LOC,
|
S_END_LAREA = EndLocation.S_AREA_CODE,
|
S_SRC_SYS = "点对点改道",
|
S_END_LOC = EndLocation.S_LOC_CODE
|
}).Where(x => x.S_ID == task.S_ID).ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("改任务终点失败");
|
}
|
//改主任务的
|
if (ZrwTask != null)
|
{
|
I = newDb.Updateable<WMSTask>().SetColumns(it => new WMSTask
|
{
|
S_END_LOC_AGO = ZrwTask.S_END_LOC,
|
S_END_LAREA = EndLocation.S_AREA_CODE,
|
S_Subtask = "N",
|
S_END_LOC = EndLocation.S_LOC_CODE
|
}).Where(x => x.S_ID == ZrwTask.S_ID).ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("改主任务终点失败");
|
}
|
I = newDb.Updateable<Location>().SetColumns(it => it.S_LOCK_STATE == "无").Where(x => x.S_LOC_CODE == ZrwTask.S_END_LOC).ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("终点货位释放失败");
|
}
|
}
|
//给任务标记为已经生成任务
|
I = newDb.Updateable<MesKtTaskDto>().SetColumns(it => new MesKtTaskDto()
|
{
|
NeedTrig = "N"
|
}).Where(x => x.S_ID == orTask.S_ID).ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("改mes任务缓存表失败");
|
}
|
//然后通知小车改道
|
if (tac?.CtiaMode == "MODBUS")
|
{
|
if (string.IsNullOrEmpty(tac.host) || tac.port == 0)
|
{
|
LogHelper.Info("完工回报", $"报错:通讯模式配置表货中 货位{EndLocation.S_LOC_CODE} ip地址 写入目标设备的IP端口 有空值或者默认值");
|
}
|
else
|
{
|
RegisterWriteOutPutModel Register = new RegisterWriteOutPutModel();
|
Register.host = tac.host;
|
Register.port = tac.port;
|
Register.addr = tac.addr;
|
Register.data = tac.dataNum;
|
var ta = OITcpHelper.RegisterWriteOutPut(Register);
|
LogHelper.Info("完工回报", $"MODBUS 发送参数{JsonConvert.SerializeObject(Register)}");
|
LogHelper.Info("完工回报", $"MODBUS 返回参数{JsonConvert.SerializeObject(ta)}");
|
}
|
}
|
var loca = EndLocation.N_AGV_CODE;
|
NDCHelper.ChangeParam(no, loca, 2);
|
NDCHelper.ChangeParam(no, 0, 4);
|
NDCHelper.ChangeParam(no, 1003, 18);
|
newDb.CommitTran();
|
IsGd = false;
|
}
|
catch (Exception ex)
|
{
|
newDb.RollbackTran();
|
LogHelper.DanInfo("完工回报", ex.Message);
|
}
|
}
|
}
|
}
|
if (IsGd)
|
{
|
//需要判断中间的接驳位状态 然后里面的接驳位坏了还能入外侧的接驳位
|
var SoList = new List<string>() { "TMRKJBW-01", "TMRKJBW-02", "TMRKJBW-03", "TMRKJBW-04", "TMRKJBW-05", "TMRKJBW-06", "TMRKHCW-01", "TMRKHCW-02" };
|
var ggf = BLLCreator.Create<WcsTask>().WcsPositionAvailable(task.S_TASK_NO, SoList);
|
if (ggf.code == "0" && ggf.available?.Count() > 0)
|
{
|
var tno = no.Substring(0, no.LastIndexOf("_"));
|
var ta = newDb.Queryable<WMSTask>().Where(e => e.S_TASK_NO == tno)?.First();
|
var location = newDb.Queryable<Location>().Where(a => a.S_LOC_CODE == ta.S_END_LOC).First();
|
if (ggf.available.Contains(task.S_END_LOC))
|
{
|
|
//1 2巷道
|
if (task.S_END_LOC == "TMRKJBW-03" || task.S_END_LOC == "TMRKJBW-02")
|
{
|
if (ggf.available.Contains("TMRKHCW-01"))
|
{
|
var loca = LocationHelper.GetAgvSiteZc(task.S_END_LOC);
|
NDCHelper.ChangeParam(task.S_TASK_NO, loca, 2);
|
NDCHelper.ChangeParam(no, 1003, 18);
|
}
|
else
|
{
|
//判断主任务的终点货位在那个巷道 如果在1巷道则需要改货位 在2巷道则不用更改
|
if (location.N_ROADWAY == 1)
|
{
|
AgvUpLo(task, ta, ggf, ggf.available);
|
|
}
|
else if (location.N_ROADWAY == 2)
|
{
|
//直接入
|
var loca = LocationHelper.GetAgvSiteZc(task.S_END_LOC);
|
NDCHelper.ChangeParam(task.S_TASK_NO, loca, 2);
|
NDCHelper.ChangeParam(no, 1003, 18);
|
}
|
}
|
}
|
else if (task.S_END_LOC == "TMRKJBW-05" || task.S_END_LOC == "TMRKJBW-06")
|
{
|
//34 巷道
|
if (ggf.available.Contains("TMRKHCW-02"))
|
{
|
var loca = LocationHelper.GetAgvSiteZc(task.S_END_LOC);
|
NDCHelper.ChangeParam(task.S_TASK_NO, loca, 2);
|
NDCHelper.ChangeParam(no, 1003, 18);
|
}
|
else
|
{
|
//判断主任务的终点货位在那个巷道 如果在1巷道则需要改货位 在2巷道则不用更改
|
if (location.N_ROADWAY == 4)
|
{
|
AgvUpLo(task, ta, ggf, ggf.available);
|
}
|
else if (location.N_ROADWAY == 3)
|
{
|
//直接入
|
var loca = LocationHelper.GetAgvSiteZc(task.S_END_LOC);
|
NDCHelper.ChangeParam(task.S_TASK_NO, loca, 2);
|
NDCHelper.ChangeParam(no, 1003, 18);
|
}
|
}
|
}
|
else if (task.S_END_LOC == "TMRKJBW-01" || task.S_END_LOC == "TMRKJBW-04")
|
{
|
var loca = LocationHelper.GetAgvSiteZc(task.S_END_LOC);
|
NDCHelper.ChangeParam(task.S_TASK_NO, loca, 2);
|
NDCHelper.ChangeParam(no, 1003, 18);
|
}
|
}
|
else
|
{
|
//更换货位
|
AgvUpLo(task, ta, ggf, ggf.available);
|
}
|
}
|
}
|
}
|
else
|
{
|
var IsGd = true;
|
var transportTask = newDb.Queryable<ConfigJsonEntitys>().Where(e => e.Autoindex == "胎圈线边_成型机")?.First();
|
List<string> ListString = new List<string>();
|
if (transportTask != null)
|
{
|
ListString = JsonConvert.DeserializeObject<List<string>>(transportTask.TypeJson);
|
}
|
if (ListString.Contains(task.S_START_LOC))
|
{
|
//判断空托满托
|
var Km = newDb.Queryable<CntrItemRel>().Where(e => e.S_CNTR_CODE == task.S_CNTRS).ToList();
|
LogHelper.Info("完工回报", $"查询是否有物料 {JsonConvert.SerializeObject(Km)}");
|
if (Km.Count() == 0)
|
{
|
//到达等待点后查询空托任务缓存表是否有数据 有则改道到线边 否则入库
|
var transportTask2 = newDb.Queryable<MesKtTaskDto>().Where(e => e.NeedTrig == "Y" && e.Task_State == "胎圈空托出库缓存").ToList();
|
if (transportTask2.Any())
|
{
|
//查询第一个 然后再没有生成任务的时候改道
|
var orTask = transportTask2.OrderBy(e => e.T_CREATE).First();
|
//查询这个终点所在库区
|
var EndLocation = newDb.Queryable<Location>().Where(e => e.S_LOC_CODE == orTask.Location_To)?.First();
|
WMSTask ZrwTask = null;
|
if (no.IndexOf('_') > 0)
|
{
|
var tno = no.Substring(0, no.LastIndexOf("_"));
|
ZrwTask = newDb.Queryable<WMSTask>().Where(e => e.S_TASK_NO == tno)?.First();
|
}
|
LogHelper.Info("完工回报", $"查询是否有主任务 {JsonConvert.SerializeObject(ZrwTask)}");
|
var tac = newDb.Queryable<TN_TcpCont>().Where(a => a.LocationCode == EndLocation.S_LOC_CODE)?.First();
|
try
|
{
|
// 先将原来的货位释放了
|
newDb.BeginTran();
|
//更新任务的终点货位
|
var I = newDb.Updateable<WMSTask>().SetColumns(it => new WMSTask
|
{
|
S_END_LOC_AGO = task.S_END_LOC,
|
S_END_LAREA = EndLocation.S_AREA_CODE,
|
S_SRC_SYS = "点对点改道",
|
S_END_LOC = EndLocation.S_LOC_CODE
|
}).Where(x => x.S_ID == task.S_ID).ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("改任务终点失败");
|
}
|
//改主任务的
|
if (ZrwTask != null)
|
{
|
I = newDb.Updateable<WMSTask>().SetColumns(it => new WMSTask
|
{
|
S_END_LOC_AGO = ZrwTask.S_END_LOC,
|
S_END_LAREA = EndLocation.S_AREA_CODE,
|
S_Subtask = "N",
|
S_END_LOC = EndLocation.S_LOC_CODE
|
}).Where(x => x.S_ID == ZrwTask.S_ID).ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("改主任务终点失败");
|
}
|
I = newDb.Updateable<Location>().SetColumns(it => it.S_LOCK_STATE == "无").Where(x => x.S_LOC_CODE == ZrwTask.S_END_LOC).ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("终点货位释放失败");
|
}
|
}
|
//给任务标记为已经生成任务
|
I = newDb.Updateable<MesKtTaskDto>().SetColumns(it => new MesKtTaskDto()
|
{
|
NeedTrig = "N"
|
}).Where(x => x.S_ID == orTask.S_ID).ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("改mes任务缓存表失败");
|
}
|
//然后通知小车改道
|
if (tac?.CtiaMode == "MODBUS")
|
{
|
if (string.IsNullOrEmpty(tac.host) || tac.port == 0)
|
{
|
LogHelper.Info("完工回报", $"报错:通讯模式配置表货中 货位{EndLocation.S_LOC_CODE} ip地址 写入目标设备的IP端口 有空值或者默认值");
|
}
|
else
|
{
|
RegisterWriteOutPutModel Register = new RegisterWriteOutPutModel();
|
Register.host = tac.host;
|
Register.port = tac.port;
|
Register.addr = tac.addr;
|
Register.data = tac.dataNum;
|
var ta = OITcpHelper.RegisterWriteOutPut(Register);
|
LogHelper.Info("完工回报", $"MODBUS 发送参数{JsonConvert.SerializeObject(Register)}");
|
LogHelper.Info("完工回报", $"MODBUS 返回参数{JsonConvert.SerializeObject(ta)}");
|
}
|
}
|
var loca = EndLocation.N_AGV_CODE;
|
NDCHelper.ChangeParam(no, loca, 2);
|
// NDCHelper.ChangeParam(no, 0, 4);
|
NDCHelper.ChangeParam(no, 1003, 18);
|
newDb.CommitTran();
|
IsGd = false;
|
}
|
catch (Exception ex)
|
{
|
newDb.RollbackTran();
|
LogHelper.DanInfo("完工回报", ex.Message);
|
}
|
}
|
}
|
}
|
if (IsGd)
|
{
|
//需要判断中间的接驳位状态 然后里面的接驳位坏了还能入外侧的接驳位
|
var SoList = new List<string> { "TQRKJBW-01", "TQRKJBW-02", "TQRKJBW-03", "TQRKJBW-04", "TQRKJBW-05", "TQRKJBW-06" };
|
var ggf = BLLCreator.Create<WcsTask>().WcsPositionAvailable(task.S_TASK_NO, SoList);
|
if (ggf.code == "0" && ggf.available?.Count() > 0)
|
{
|
var tno = no.Substring(0, no.LastIndexOf("_"));
|
var ta = newDb.Queryable<WMSTask>().Where(e => e.S_TASK_NO == tno)?.First();
|
var location = newDb.Queryable<Location>().Where(a => a.S_LOC_CODE == ta.S_END_LOC).First();
|
if (ggf.available.Contains(task.S_END_LOC))
|
{
|
var loca = LocationHelper.GetAgvSiteZc(task.S_END_LOC);
|
NDCHelper.ChangeParam(task.S_TASK_NO, loca, 2);
|
NDCHelper.ChangeParam(no, 1003, 18);
|
}
|
else
|
{
|
//更换货位
|
AgvUpLo(task, ta, ggf, ggf.available);
|
}
|
}
|
}
|
}
|
}
|
else if (state == 5)//开始卸货
|
{
|
var tac = newDb.Queryable<TN_TcpCont>().Where(a => a.LocationCode == task.S_END_LOC)?.First();
|
//12 1 13 0
|
if (tac != null && tac.CtiaMode == "VMI")
|
{
|
var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac.host)?.First();
|
if (Alone == null)
|
{
|
throw new Exception($"未查询到对应的VMI ConfigId为 {tac.host} 的数据库连接字符串");
|
}
|
var childA = new SqlHelper<object>().GetInstance(Alone.ConnectionString);
|
var I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "1", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BDST_ENTRY_SUPP_ACTIVE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BDST_ENTRY_SUPP_ACTIVE 字段为 1失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BDST_ENTRY_SUPP_ACTIVE 字段为 1成功");
|
I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BDST_ENTRY_TRANSF_DONE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BDST_ENTRY_TRANSF_DONE 字段为 0失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BDST_ENTRY_TRANSF_DONE 字段为 0成功");
|
}
|
else if (tac != null && tac.CtiaMode == "VMI2")
|
{
|
var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac.host)?.First();
|
if (Alone == null)
|
{
|
throw new Exception($"未查询到对应的VMI ConfigId为 {tac.host} 的数据库连接字符串");
|
}
|
var childA = new SqlHelper<object>().GetInstance(Alone.ConnectionString);
|
var I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "1", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_ENTRY_SUPP_ACTIVE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_ENTRY_SUPP_ACTIVE 字段为 1失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_ENTRY_SUPP_ACTIVE 字段为 1成功");
|
|
I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_ENTRY_TRANSF_DONE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_ENTRY_TRANSF_DONE 字段为 0失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_ENTRY_TRANSF_DONE 字段为 0成功");
|
}
|
|
}
|
else if (state == 3)//开始取货
|
{
|
//14 1 15 0
|
var tac = newDb.Queryable<TN_TcpCont>().Where(a => a.LocationCode == task.S_START_LOC)?.First();
|
if (tac != null && tac.CtiaMode == "VMI")
|
{
|
var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac.host)?.First();
|
if (Alone == null)
|
{
|
throw new Exception($"未查询到对应的VMI ConfigId为 {tac.host} 的数据库连接字符串");
|
}
|
var childA = new SqlHelper<object>().GetInstance(Alone.ConnectionString);
|
var I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "1", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BDST_EXIT_REMOVE_ACTIVE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BDST_EXIT_REMOVE_ACTIVE 字段为 1失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BDST_EXIT_REMOVE_ACTIVE 字段为 1成功");
|
I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BDST_EXIT_TRANSF_DONE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BDST_EXIT_TRANSF_DONE 字段为 0失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BDST_EXIT_TRANSF_DONE 字段为 0成功");
|
}
|
if (tac != null && tac.CtiaMode == "VMI2")
|
{
|
var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac.host)?.First();
|
if (Alone == null)
|
{
|
throw new Exception($"未查询到对应的VMI ConfigId为 {tac.host} 的数据库连接字符串");
|
}
|
var childA = new SqlHelper<object>().GetInstance(Alone.ConnectionString);
|
if (task.S_TYPE == "出库")
|
{
|
var I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_ENTRY_TRANSF_DONE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_ENTRY_TRANSF_DONE 字段为 0失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_ENTRY_TRANSF_DONE 字段为 0成功");
|
I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "1", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_ENTRY_SUPP_ACTIVE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_ENTRY_SUPP_ACTIVE 字段为 1失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_ENTRY_SUPP_ACTIVE 字段为 1成功");
|
}
|
else
|
{
|
var I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_EXIT_TRANSF_DONE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_EXIT_TRANSF_DONE 字段为 0失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_EXIT_TRANSF_DONE 字段为 0成功");
|
I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "1", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_EXIT_RETR_ACTIVE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_EXIT_RETR_ACTIVE 字段为 1失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_EXIT_RETR_ACTIVE 字段为 1成功");
|
}
|
}
|
}
|
else if (state == 4)
|
{
|
if (task.S_TYPE == "入库")
|
{
|
var tac = newDb.Queryable<TN_TcpCont>().Where(a => a.LocationCode == task.S_START_LOC)?.First();
|
if (tac != null && tac.CtiaMode == "VMI")
|
{
|
var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac.host)?.First();
|
if (Alone == null)
|
{
|
throw new Exception($"未查询到对应的VMI ConfigId为 {tac.host} 的数据库连接字符串");
|
}
|
var childA = new SqlHelper<object>().GetInstance(Alone.ConnectionString);
|
var I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "1", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BDST_EXIT_TRANSF_DONE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BDST_EXIT_TRANSF_DONE 字段为 1失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BDST_EXIT_TRANSF_DONE 字段为 1成功");
|
}
|
}
|
|
}
|
else if (state == 7)
|
{
|
var tac = newDb.Queryable<TN_TcpCont>().Where(a => a.LocationCode == task.S_END_LOC)?.First();
|
if (tac != null && tac.CtiaMode == "VMI2")
|
{
|
var tacList = newDb.Queryable<WmsTaskAction>().Where(a => a.S_TASK_NO == task.S_TASK_NO).ToList();
|
var ActList = tacList.OrderBy(e => e.T_CREATE).ToList();
|
if (ActList.Find(e => e.S_ACTION_CODE == "5") != null && ActList.Find(e => e.S_ACTION_CODE == "2") == null)
|
{
|
var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac.host)?.First();
|
if (Alone == null)
|
{
|
throw new Exception($"未查询到对应的VMI ConfigId为 {tac.host} 的数据库连接字符串");
|
}
|
var childA = new SqlHelper<object>().GetInstance(Alone.ConnectionString);
|
var I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_ENTRY_TRANSF_DONE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_ENTRY_TRANSF_DONE 字段为 0失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_ENTRY_TRANSF_DONE 字段为 0成功");
|
I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BAST_ENTRY_SUPP_ACTIVE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BAST_ENTRY_SUPP_ACTIVE 字段为 0失败");
|
}
|
LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_ENTRY_SUPP_ACTIVE 字段为 0成功");
|
}
|
}
|
else if (tac != null && tac.CtiaMode == "VMI")
|
{
|
if (task.S_NOTE == "agv任务")
|
{
|
if (task.S_TYPE == "入库")
|
{
|
var tacList = newDb.Queryable<WmsTaskAction>().Where(a => a.S_TASK_NO == task.S_TASK_NO).ToList();
|
var ActList = tacList.OrderBy(e => e.T_CREATE).ToList();
|
var ggfbool = false;
|
if (ActList.Find(e => e.S_ACTION_CODE == "5") != null && ActList.Find(e => e.S_ACTION_CODE == "1104") == null)
|
{
|
ggfbool = true;
|
}
|
if (ActList.Find(e => e.S_ACTION_CODE == "3") != null && ActList.Find(e => e.S_ACTION_CODE == "1102") == null)
|
{
|
ggfbool = true;
|
}
|
if (ggfbool)
|
{
|
var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac.host)?.First();
|
if (Alone == null)
|
{
|
throw new Exception($"未查询到对应的VMI ConfigId为 {tac.host} 的数据库连接字符串");
|
}
|
var childA = new SqlHelper<object>().GetInstance(Alone.ConnectionString);
|
var GGF = childA.Queryable<BDST_TO_AGV_STATUS>().OrderBy(st => st.VMI_TO_AGV_DATA, OrderByType.Desc)?.First();
|
var GGF2 = childA.Queryable<DATA_TO_HMI>()?.First();
|
LogHelper.Info("完工回报", $"读安全信号交互表 {JsonConvert.SerializeObject(GGF)}");
|
if (GGF != null)
|
{
|
var I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "0", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BDST_ENTRY_SUPP_ACTIVE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BDST_ENTRY_SUPP_ACTIVE 字段为 0失败");
|
}
|
I = childA.Updateable<DATA_TO_HMI>().SetColumns(it => new DATA_TO_HMI() { Value = "1", Handshake = "U" }).Where(e => e.TagName == "IMES_AGV_BDST_ENTRY_TRANSF_DONE").ExecuteCommand();
|
if (I == 0)
|
{
|
throw new Exception("写安全信号交互表 IMES_AGV_BDST_ENTRY_TRANSF_DONE 字段为 0失败");
|
}
|
}
|
}
|
}
|
|
}
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
LogHelper.DanInfo("完工回报", "安全交互 报错:" + ex.Message);
|
}
|
}
|
|
public static OperateResult AgvUpLo(WMSTask task, WMSTask Ztask, WcsReturnEntityTwo ggf, List<string> Jbw, bool Isfo = true)
|
{
|
var chi = new SqlHelper<object>().GetInstance();
|
var RowLocation = new List<string>();
|
List<string> Roadway2 = new List<string>();
|
OperateResult result1 = OperateResult.Error();
|
var newDb = chi.CopyNew();
|
var Jbwd = "";
|
try
|
{
|
var result = OperateResult.Succeed();
|
var endIsCurrentTask = newDb.Queryable<Location>().Where(e => e.S_LOC_CODE == task.S_END_LOC)?.First();
|
//获取辅助表中的数据
|
var Subs = Expressionable.Create<TN_SubsidiaryEntitys>();
|
Subs.And(it => it.S_WH_CODE == endIsCurrentTask.S_WH_CODE);
|
Subs.And(it => it.S_AREA_CODE == Ztask.S_END_LAREA);
|
Subs.And(it => it.S_FlowNo == Ztask.S_FlowNo);
|
Subs.And(it => it.S_IS_IN_OUT == "入库");
|
var Subsidiary = newDb.Queryable<TN_SubsidiaryEntitys>().Where(Subs.ToExpression()).ToList();
|
LogHelper.DanInfo("入库改道", "改道开始");
|
LogHelper.DanInfo("入库改道", $"立库允许进入的接驳位为{JsonConvert.SerializeObject(ggf.available)}");
|
if (!ggf.available.Contains("TMRKHCW-02") && !ggf.available.Contains("TMRKJBW-04"))
|
{
|
Subsidiary.RemoveAll(e => e.N_ROADWAY == 4);
|
LogHelper.DanInfo("入库改道", $"排除巷道4");
|
}
|
if (!ggf.available.Contains("TMRKHCW-01") && !ggf.available.Contains("TMRKJBW-01"))
|
{
|
Subsidiary.RemoveAll(e => e.N_ROADWAY == 1);
|
LogHelper.DanInfo("入库改道", $"排除巷道1");
|
}
|
var jjk = Subsidiary.GroupBy(e => e.N_ROADWAY).Select(f => f.First()).ToList();
|
foreach (var item in ggf.available)
|
{
|
var hhh = jjk.Find(e => e.S_CONNECTION == item);
|
LogHelper.DanInfo("入库改道", $"查询是否有立库允许且辅助表中存在的接驳位对应的巷道");
|
if (hhh != null)
|
{
|
Roadway2.Add(hhh.N_ROADWAY.ToString());
|
}
|
}
|
//foreach (var item in jjk)
|
//{
|
// Roadway2.Add(item.N_ROADWAY.ToString());
|
//}
|
List<areaPriorClass> clas = new List<areaPriorClass>() {
|
new areaPriorClass
|
{
|
areaCode=Ztask.S_END_LAREA,
|
Prior=0
|
}
|
};
|
var aEntity = new InAssignEntity()
|
{
|
objectType = InAssignEntity.ObjectType.托盘,
|
objectCode = task.S_CNTRS,
|
lstAreaPrior = clas,
|
projectCode = "",
|
logicAreaCode = task.S_TOOLS_TPYE,
|
stockCode = endIsCurrentTask.S_WH_CODE,
|
S_Roadway = Roadway2,
|
IsChangeBit = 1,
|
needCalLock = true
|
};
|
//根据库区获取货位
|
InAssignResultEntity resultEntity = BLLCreator.Create<In_AlgorBLL>().InAssign(aEntity);
|
if (resultEntity.Success)
|
{
|
RowLocation.Add(resultEntity.locationCode);
|
//查接驳位的所在的巷道
|
var location = newDb.Queryable<Location>().Where(a => a.S_LOC_CODE == resultEntity.locationCode).First();
|
LogHelper.DanInfo("入库改道", $"查接驳位的所在的巷道");
|
//从辅助表里拿接驳位
|
var jbwl = Subsidiary.Find(e => e.N_ROADWAY == location.N_ROADWAY);
|
var gjj = jbwl.S_CONNECTION.Split(',').ToList();
|
LogHelper.DanInfo("入库改道", $"查接驳位的所在的巷道接驳位为:{JsonConvert.SerializeObject(gjj)}");
|
foreach (var item in gjj)
|
{
|
if (ggf.available.Contains(item))
|
{
|
Jbwd = item;
|
LogHelper.DanInfo("入库改道", $"从辅助表里拿接驳位{Jbwd}");
|
}
|
}
|
if (string.IsNullOrEmpty(Jbwd))
|
{
|
LogHelper.DanInfo("入库改道", $"没有找到合适的入库接驳位");
|
return OperateResult.Error("没有找到合适的入库接驳位");
|
}
|
newDb.BeginTran();
|
try
|
{
|
var B = 0;
|
if (task.S_END_LOC != Jbwd)
|
{
|
B = newDb.Updateable<WMSTask>().SetColumns(it => new WMSTask
|
{
|
S_END_LOC_AGO = task.S_END_LOC,
|
S_END_LOC = Jbwd,
|
S_Jb_Bit = Jbwd
|
}).Where(x => x.S_TASK_NO == task.S_TASK_NO).ExecuteCommand();
|
if (B == 0)
|
{
|
newDb.RollbackTran();
|
throw new Exception("子任务--任务表更新失败");
|
}
|
}
|
if (task.S_TASK_NO.IndexOf('_') > 0)//更改主任务终点货位
|
{
|
B = newDb.Updateable<WMSTask>().SetColumns(it => new WMSTask
|
{
|
S_END_LOC_AGO = Ztask.S_END_LOC,
|
S_END_LOC = resultEntity.locationCode,
|
S_Jb_Bit = Jbwd
|
}).Where(x => x.S_TASK_NO == Ztask.S_TASK_NO).ExecuteCommand();
|
if (B == 0)
|
{
|
newDb.RollbackTran();
|
throw new Exception("主任务--任务表更新失败");
|
}
|
}
|
B = newDb.Updateable<Location>().SetColumns(it => new Location
|
{
|
S_LOCK_STATE = "无"
|
}).Where(x => x.S_LOC_CODE == Ztask.S_END_LOC).ExecuteCommand();
|
if (B == 0)
|
{
|
newDb.RollbackTran();
|
throw new Exception("原先的货位解锁失败");
|
}
|
newDb.CommitTran();
|
result1 = OperateResult.Succeed();
|
var loca = LocationHelper.GetAgvSiteZc(Jbwd);
|
NDCHelper.ChangeParam(task.S_TASK_NO, loca, 2);
|
NDCHelper.ChangeParam(task.S_TASK_NO, 1003, 18);
|
}
|
catch (Exception ex)
|
{
|
newDb.RollbackTran();
|
LogHelper.Info("更换终点", "报错--" + ex.Message);
|
}
|
|
}
|
if (!result1.Success)
|
{
|
if (RowLocation.Count() > 0)
|
{
|
newDb.BeginTran();
|
try
|
{
|
var B = newDb.Updateable<Location>().SetColumns(it => new Location
|
{
|
S_LOCK_STATE = "无"
|
}).Where(x => x.S_LOC_CODE == resultEntity.locationCode).ExecuteCommand();
|
if (B == 0)
|
{
|
newDb.RollbackTran();
|
throw new Exception("原先的货位解锁失败");
|
}
|
newDb.CommitTran();
|
}
|
catch (Exception ex)
|
{
|
newDb.RollbackTran();
|
LogHelper.DanInfo("入库改道", $"回滚锁定的货位失败 货位码为{resultEntity.locationCode}--" + ex.Message);
|
}
|
}
|
}
|
return result;
|
}
|
catch (Exception ex)
|
{
|
LogHelper.DanInfo("入库改道", $"抛出异常:{ex.Message}");
|
return OperateResult.Error(ex.Message);
|
}
|
}
|
|
|
public static int[] ConvertStringToIntArray(string input)
|
{
|
string[] stringArray = input.Split(',');
|
int[] intArray = Array.ConvertAll(stringArray, int.Parse);
|
return intArray;
|
}
|
/// <summary>
|
/// 任务拦截
|
/// </summary>
|
/// <param name="task"></param>
|
/// <returns></returns>
|
internal static bool Intercept(WMSTask mst)
|
{
|
var result = false;
|
//出库任务是批量生成的,初始终点我们先给一个虚拟点,不推送。有单独的现场去判断出库缓存区光电,空了再给出库任务分配终点
|
//string state = mst.S_B_STATE.Trim();
|
//var list = TaskHelper.GetTaskListByState("y");
|
if (mst.S_END_LOC.Trim() == "出库虚拟点")
|
{
|
result = true;
|
}
|
return result;
|
}
|
|
/// <summary>
|
/// 任务状态更新处理
|
/// </summary>
|
/// <param name="mst"></param>
|
/// <param name="state"></param>
|
internal static void OperateStatus(WMSTask mst, int state)
|
{
|
if (state == 4)
|
{
|
CacheBitUpdate(mst, true);
|
}
|
if (state == 6)//卸货完成
|
{
|
CacheBitUpdate(mst, false);
|
}
|
if (state == 7)
|
{
|
//List<string> loc = new List<string> { mst.S_START_LOC };
|
//var loction = LocationHelper.GetLocListAny(loc).FirstOrDefault();
|
//var locList = LocationHelper.GetLocListCol(loction.N_COL);
|
|
//var minLocList = locList.FindAll(e => e.N_COL < loction.N_COL && e.S_LOCK_STATE != "无").ToList();
|
//foreach (var item in minLocList)
|
//{
|
// List<string> list1 = new List<string> { "未执行", "待推送" };
|
// var wmsTask = TaskHelper.GetTaskLocation(loction.S_LOC_CODE, list1);
|
|
// if (wmsTask != null)
|
// CacheBitCancelUpdate(wmsTask);
|
|
// LogHelper.CompInfo("完工回报--取消 当前排任务取消时同时取消后排任务:" + wmsTask.S_TASK_NO);
|
//}
|
CacheBitCancelUpdate(mst);
|
|
|
}
|
}
|
|
private static object locLocker = new object();
|
|
/// <summary>
|
/// 堆叠库区出入库任务申请
|
/// </summary>
|
/// <param name="ls"></param>
|
/// <param name="cntrs"></param>
|
/// <param name="area"></param>
|
/// <param name="itemCode"></param>
|
/// <param name="itemBatch"></param>
|
/// <param name="taskType"></param>
|
/// <param name="insStock"></param>
|
/// <returns></returns>
|
internal static bool ApplyWMSTask(Location ls, ref List<string> cntrs, string area, string itemCode, string itemBatch, string taskType, bool insStock = true)
|
{
|
var result = false;
|
lock (locLocker)
|
{
|
try
|
{
|
if (insStock)
|
{
|
Console.WriteLine($"MoboxHelperCreateTask: {area}-{itemCode}-{itemBatch}-{taskType}");
|
var endLocation = IntensiveArea.GetLocation4In(area, itemCode, itemBatch, 3);
|
if (endLocation != null)
|
{
|
var endLayer = endLocation.N_CURRENT_NUM == 0 ? 1 : 2;
|
var taskNo = DateTime.Now.Ticks.ToString();
|
result = TaskProcess.CreateTransport(ls.S_LOC_CODE, endLocation.S_LOC_CODE, taskType, cntrs, 1, endLayer, 3, 70);
|
}
|
else
|
{
|
Console.WriteLine($"MoboxHelperCreateTask: 未找到终点货位");
|
}
|
}
|
else
|
{
|
var startLocation = IntensiveArea.GetLocation4Out(area, itemCode, itemBatch, 3);
|
if (startLocation != null)
|
{
|
var startLayer = startLocation.N_CURRENT_NUM <= 3 ? 1 : 2;
|
var taskNo = DateTime.Now.Ticks.ToString();
|
var carryCount = startLocation.N_CURRENT_NUM > 3 ? startLocation.N_CURRENT_NUM - 3 : startLocation.N_CURRENT_NUM;
|
//出库要从起点获取托盘
|
var cntrList = LocationHelper.GetLocCntr(startLocation.S_LOC_CODE);
|
if (cntrList.Count == startLocation.N_CURRENT_NUM)
|
{
|
cntrs = cntrList.OrderByDescending(a => a.T_CREATE).Take(carryCount).Select(a => a.S_CNTR_CODE.Trim()).ToList();
|
result = TaskProcess.CreateTransport(startLocation.S_LOC_CODE, ls.S_LOC_CODE, taskType, cntrs, startLayer, 1, carryCount, 65);
|
}
|
else
|
{
|
Console.WriteLine($"起点托盘数量和货位容器表不符合,请检查【货位表】和【货位容器表】");
|
}
|
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
|
Console.WriteLine("MoboxHelperCreateTask:" + ex.Message);
|
LogHelper.Error("MoboxHelperCreateTask:" + ex.Message, ex);
|
}
|
}
|
return result;
|
|
|
}
|
|
/// <summary>
|
/// 普通货架区的出入库申请
|
/// </summary>
|
/// <param name="ls"></param>
|
/// <param name="cntrs"></param>
|
/// <param name="area"></param>
|
/// <param name="taskType"></param>
|
/// <param name="itemCode"></param>
|
/// <param name="insStock"></param>
|
/// <returns></returns>
|
internal static bool ApplyNormalWMSTask(Location ls, ref List<string> cntrs, string area, string taskType, string itemCode, bool insStock = true)
|
{
|
var result = false;
|
lock (locLocker)
|
{
|
try
|
{
|
if (insStock)
|
{
|
Console.WriteLine($"MoboxHelperCreateTask: {area}-{taskType}");
|
var endLocation = NormalArea.GetLocation4In(area);
|
if (endLocation != null)
|
{
|
var taskNo = DateTime.Now.Ticks.ToString();
|
result = TaskProcess.CreateTransport(ls.S_LOC_CODE, endLocation.S_LOC_CODE, taskType, cntrs, 70);
|
}
|
else
|
{
|
Console.WriteLine($"MoboxHelperCreateTask: 未找到终点货位");
|
}
|
}
|
else
|
{
|
var startLocation = NormalArea.GetLocation4Out(area, itemCode);
|
if (startLocation != null)
|
{
|
//出库要从起点获取托盘
|
var cntrList = LocationHelper.GetLocCntr(startLocation.S_LOC_CODE);
|
if (cntrList.Count == startLocation.N_CURRENT_NUM)
|
{
|
result = TaskProcess.CreateTransport(startLocation.S_LOC_CODE, ls.S_LOC_CODE, taskType, new List<string> { cntrList[0].S_CNTR_CODE }, 65);
|
}
|
else
|
{
|
Console.WriteLine($"起点托盘数量和货位容器表不符合,请检查【货位表】和【货位容器表】");
|
}
|
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
|
Console.WriteLine("MoboxHelperCreateTask:" + ex.Message);
|
LogHelper.Error("MoboxHelperCreateTask:" + ex.Message, ex);
|
}
|
}
|
return result;
|
|
|
}
|
/// <summary>
|
/// 推送任务
|
/// </summary>
|
/// <param name="mst"></param>
|
internal static bool SendTask(WMSTask mst)
|
{
|
var chi = new SqlHelper<object>().GetInstance();
|
var newDb = chi.CopyNew();
|
try
|
{
|
|
var result = false;
|
var start = 0; var end = 0;
|
var taskType = mst.S_TYPE.Trim();
|
var taskState = mst.S_B_STATE.Trim();
|
if (taskState == "未执行" || taskState == "待推送")
|
{
|
var dic = new Dictionary<string, string>();
|
var dic1 = new Dictionary<string, string>();
|
LogHelper.Info("NDC", $"agv任务号:{mst.S_TASK_NO}");
|
LogHelper.Info("NDC", $"agv任务起点:{mst.S_START_LOC}");
|
start = LocationHelper.GetAgvSiteZc(mst.S_START_LOC);
|
var transportTask = newDb.Queryable<ConfigJsonEntitys>().Where(e => e.Autoindex == "特殊流程站点")?.First();
|
if (transportTask != null)
|
{
|
var ListString = JsonConvert.DeserializeObject<AgvCodeTs>(transportTask.TypeJson);
|
if (ListString != null && ListString.LocationCode != null && ListString.EndAreaCode != null && ListString.LocationCode.Contains(mst.S_START_LOC) && ListString.EndAreaCode.Contains(mst.S_END_LAREA))
|
{
|
start = LocationHelper.GetAgvSiteZc2(mst.S_START_LOC);
|
}
|
}
|
LogHelper.Info("NDC", $"agv 查询的站点(起点):{start}");
|
LogHelper.Info("NDC", $"agv任务终点:{mst.S_END_LOC}");
|
end = LocationHelper.GetAgvSiteZc(mst.S_END_LOC);
|
LogHelper.Info("NDC", $"agv 查询的站点(终点):{end}");
|
Console.WriteLine($"SendTask {mst.S_TASK_NO}");
|
Console.WriteLine("start=" + start);
|
Console.WriteLine("end= " + end);
|
dic.Add("Pri", mst.N_PRIORITY.ToString());//优先级
|
dic.Add("No", mst.S_TASK_NO.Trim());
|
dic1.Add("From", start.ToString());//起点
|
dic1.Add("To", end.ToString());//终点
|
dic1.Add("Func", "0");
|
if (mst.S_TYPE == "入库")
|
{
|
dic1.Add("Data", "768");
|
//特殊货位不需要安全请求
|
}
|
else
|
{
|
var tac = newDb.Queryable<TN_TcpCont>().Where(a => a.LocationCode == mst.S_END_LOC)?.First();
|
|
if (tac != null && tac.C_IS_RFID == "Y")
|
{
|
dic1.Add("Data", "768");
|
}
|
else
|
{
|
dic1.Add("Data", "0");
|
}
|
}
|
var res = NDC.OrderAdd(1, dic, dic1);
|
if (res != null && (res.Res.ErrCode == 0 || res.Res.ErrCode == 50009))
|
{
|
//推送成功,修改任务优先级
|
TaskHelper.UpdateStatus(mst, "已推送");
|
result = true;
|
}
|
}
|
else { result = true; }
|
return result;
|
}
|
catch (Exception ex)
|
{
|
|
LogHelper.Info("NDC", $"异常:{ex.Message}");
|
return false;
|
}
|
|
}
|
|
/// <summary>
|
/// 天目系统 推送任务
|
/// </summary>
|
/// <param name="mst"></param>
|
/// <returns></returns>
|
internal static bool TMSendTask(WMSTask mst)
|
{
|
var result = false;
|
var start = 0; var end = 0;
|
var taskType = mst.S_TYPE.Trim();
|
var taskState = mst.S_B_STATE.Trim();
|
if (taskState == "未执行" || taskState == "待推送")
|
{
|
start = LocationHelper.GetAgvSite(mst.S_START_LOC);
|
end = LocationHelper.GetAgvSite(mst.S_END_LOC);
|
|
|
LogHelper.Info($"SendTask {mst.S_TASK_NO}");
|
LogHelper.Info("start=" + start);
|
LogHelper.Info("end= " + end);
|
var res = TmToAGV.GetIO(mst, start, end);
|
if (res != null && (res.success))
|
{
|
//推送成功,修改任务优先级
|
TaskHelper.UpdateStatusHg(mst, "已推送", res.data);
|
result = true;
|
}
|
}
|
else { result = true; }
|
return result;
|
}
|
|
/// <summary>
|
/// 查询任务当前状态--天目
|
/// </summary>
|
/// <param name="TaskNo"></param>
|
/// <returns></returns>
|
internal static TmreturnData SeTaskTm(string TaskNo)
|
{
|
return TmToAGV.SeleState(TaskNo);
|
}
|
|
/// <summary>
|
/// 创建搬运任务
|
/// </summary>
|
/// <param name="start"></param>
|
/// <param name="end"></param>
|
/// <param name="taskType"></param>
|
/// <param name="cntrs"></param>
|
/// <param name="startLayer"></param>
|
/// <param name="endLayer"></param>
|
/// <param name="trayCarryCount"></param>
|
/// <param name="priority"></param>
|
/// <returns></returns>
|
public static bool CreateTransport(string start, string end, string taskType, List<string> cntrs, int startLayer, int endLayer, int trayCarryCount = 1, int priority = 1)
|
{
|
var result = false;
|
//批次号存托盘号,1~3个托盘
|
var trayCodes = string.Join(",", cntrs);
|
//var trayCodes = "";
|
var taskNo = DateTime.Now.Ticks.ToString();
|
|
|
var res = TaskHelper.CreateTask(taskNo, start.Trim(), end.Trim(), taskType, priority, trayCodes, trayCarryCount, startLayer, endLayer);
|
if (res)
|
{
|
result = true;
|
//任务创建成功,起点货位出库锁定,终点货位入库锁定
|
LocationHelper.LockLoc(start, "出库锁");
|
LocationHelper.LockLoc(end, "入库锁");
|
|
if (taskType.Contains("-电梯"))
|
{
|
var elevatorTaskInfo = new ElevatorTaskInfo()
|
{
|
actionType = taskType == "满托-电梯" ? 1 : 2,
|
elevatorCacheBit = "",
|
start = start,
|
end = end,
|
sourceNo = taskNo,
|
count = trayCarryCount,
|
trayCode = trayCodes
|
};
|
WCSHelper.AddElevatorTaskInfo(elevatorTaskInfo);
|
}
|
|
}
|
return result;
|
}
|
|
|
public static bool CreateTransport(string start, string end, string taskType, List<string> cntrs, int priority = 1)
|
{
|
var result = false;
|
//批次号存托盘号,1~3个托盘
|
var trayCodes = string.Join(",", cntrs);
|
var taskNo = DateTime.Now.Ticks.ToString();
|
|
|
var res = TaskHelper.CreateTask(taskNo, start.Trim(), end.Trim(), taskType, priority, trayCodes, 1, 1, 1);
|
if (res)
|
{
|
result = true;
|
LocationHelper.LockLoc(start, "出库锁");
|
LocationHelper.LockLoc(end, "入库锁");
|
|
}
|
return result;
|
}
|
#endregion
|
|
|
|
}
|
public class TmreturnData
|
{
|
public bool success { get; set; }
|
public string error_code { get; set; }
|
public string msg { get; set; }
|
public Tmr data { get; set; }
|
public bool finished { get; set; }
|
}
|
public class Tmr
|
{
|
/// <summary>
|
/// Ts定单
|
/// </summary>
|
public string tsOrderIndex { get; set; }
|
/// <summary>
|
/// 任务号
|
/// </summary>
|
public string tsOrderNo { get; set; }
|
|
public int priority { get; set; }
|
/// <summary>
|
/// Ts定单状态
|
/// </summary>
|
public string tsOrderState { get; set; }
|
public string processingVehicle { get; set; }
|
|
public DateTime? credtedTime { get; set; }
|
|
public DateTime? finishedTime { get; set; }
|
public List<string> destinations { get; set; }
|
|
}
|
}
|