衢州华友成品库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

399 lines
17 KiB

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using ICommLayer;
using DBFactory;
using System.Security.Cryptography;
namespace MidDataTable
{
/// <summary>
/// 20230313 AGV 中间表的通讯接口派生类
/// 获得设备状态类
/// 创建者:zcy
/// </summary>
public class CGetDeviceState:IGetDeviceState
{
string _commLayerError;
public string CommLayerError
{
get { return _commLayerError; }
set { _commLayerError = value; }
}
public static DBOperator dbo = CommonClassLib.AppSettings.dbo; //20130510
public static DBOperator dboM = CommonClassLib.AppSettings.dboM; //20130510
public CGetDeviceState()
{
}
//~CGetDeviceState()
//{
//
//}
/// <summary>
public int[] GetDeviceState(int DeviceIndex, int TaskIndex)
{
return null;
}
public string GetStringData(int DeviceIndex, int TaskIndex)
{
return "";
}
//AGV 更新任务当前状态后,WCS做后续处理
//dv.AGV_TASK_ID, dv.FID, dv.AGV_TASK_STATUS
/// <summary>
/// 获取agv任务
/// </summary>
/// <param name="Fid"></param>
/// <param name="TaskIndex"></param>
/// <param name="status"></param>
/// <param name="WCS_FLAG"></param>
public void GetAGVState(int Fid, int TaskIndex, int status, int WCS_FLAG)
{
DataView valist0 = dbo.ExceSQL(string.Format("select * from t_monitor_task where F_ManageTaskIndex = {0} and F_MonitorIndex = {1}", Fid, TaskIndex)).Tables[0].DefaultView;
if (valist0.Count > 0)
{
int iAGVStatus = status;
int newTaskStart = 0;
int newTaskEnd = 0;
switch (iAGVStatus)
{
case 1: //已接收
//if (Convert.ToInt32(valist0[0]["F_Status"]) != 9)
//{
// dbo.ExceSQL(string.Format("update T_Monitor_Task set F_Status = 9 where F_ManageTaskIndex = {0} and F_MonitorIndex = {1}", Fid, TaskIndex));
// dbo.ExceSQL(string.Format("update T_Manage_Task set FCurrentLocation == 1001 where FID = {0} ", Fid));
//}
break;
case 2: //已分配
//if (Convert.ToInt32(valist0[0]["F_Status"]) != 10)
//{
// dbo.ExceSQL(string.Format("update T_Monitor_Task set F_Status =10 where F_ManageTaskIndex = {0} and F_MonitorIndex = {1}", Fid, TaskIndex));
//}
break;
case 3: //取货完成
if (Convert.ToInt32(valist0[0]["F_Status"]) != 3)
{
dbo.ExceSQL(string.Format("update T_Monitor_Task set F_Status =3 where F_ManageTaskIndex = {0} and F_MonitorIndex = {1}", Fid, TaskIndex));
}
{
#region 衢州华友出库任务 AGV 取货完成,生成自动任务,空托盘去叠盘
newTaskStart = Convert.ToInt32(valist0[0]["F_NumParam2"]); //叠盘任务起点
newTaskEnd = GetPilerLocat(newTaskStart);//叠盘任务终点
if (newTaskEnd != -1)
{
string newBarcode = "D-" + valist0[0]["F_TxtParam"];
if (WCS_FLAG == 0 )
{
if (GetManageTaskCountForStartAndEndDevice(newTaskStart, newTaskEnd, newBarcode) == 0)
{
var ssss = string.Format("INSERT INTO T_Manage_Task(FID, F_ManageTaskKindIndex,FPALLETBARCODE,FMANAGETASKTYPE,FCONTROLTASKTYPE, FTASKLEVEL, FSTARTWAREHOUSE,FENDWAREHOUSE, FSTARTCELL, FSTARTDEVICE, FENDDEVICE, FENDCELL, FSTATUS, FBEGTIME, FIntoStepOK)VALUES('{0}',{1},'{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}')"
, GetTempManageIdx(), 2, newBarcode, 1, 4, 1, 1, 1, "-", newTaskStart, newTaskEnd, "-", 0, DateTime.Now.ToString("u"), 0);
dbo.ExceSQL(ssss);
}
dbo.ExceSQL(string.Format("update AGV_TASK set WCS_FLAG =1 where AGV_TASK_ID = {0} ", TaskIndex));
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "AGV取货完成,生成叠盘任务。", newTaskStart.ToString(), TaskIndex.ToString());
}
}
#endregion
}
//Dbo.Deleteable<T_Monitor_Task>().Where(it => it.F_ManageTaskIndex == Fid&& it.F_MonitorIndex == TaskIndex).ExecuteCommand();
break;
case 4: //送货完成
if (Convert.ToInt32(valist0[0]["F_Status"]) != 4)
{
//更新调度指令任务
dbo.ExceSQL(string.Format("update T_Monitor_Task set F_Status = 4 where F_ManageTaskIndex = {0} and F_MonitorIndex = {1}", Fid, TaskIndex));
dbo.ExceSQL(string.Format("update T_Manage_Task set FSTATUS == 999 where FID = {0} ", Fid));
//站台逻辑无货
dbo.ExceSQL(string.Format("update T_Base_Device set F_HaveGoods == 0 where F_DeviceIndex = {0} ", valist0[0]["F_NumParam5"].ToString()));
//给管理更新终点和状态
dboM.ExceSQL(string.Format("update IO_CONTROL set CONTROL_STATUS == 999,END_DEVICE_CODE = {0} where CONTROL_ID = {1} ", Fid, valist0[0]["F_NumParam5"].ToString()));
}
#region 衢州华友入库前置任务, AGV 送货完成,生成自动任务,去扫码
newTaskStart = Convert.ToInt32(valist0[0]["F_NumParam5"]); //扫码任务起点
newTaskEnd = GetScannerLocat(newTaskStart);//扫码任务终点
if (newTaskEnd != -1)
{
string newBarcode = "S-" + valist0[0]["F_TxtParam"];
if (WCS_FLAG != 2)
{
if (GetManageTaskCountForStartAndEndDevice(newTaskStart, newTaskEnd, newBarcode) == 0)
{
object ob = new object[15] { GetTempManageIdx(), 2, "S-" + valist0[0]["F_TxtParam"], 1, 4, 1, 1, 1, "-", newTaskStart, newTaskEnd, "-", 0, DateTime.Now.ToString("u"), 0 };
dbo.ExceSQL(string.Format("INSERT INTO T_Manage_Task(FID, F_ManageTaskKindIndex,FPALLETBARCODE,FMANAGETASKTYPE,FCONTROLTASKTYPE, FTASKLEVEL, FSTARTWAREHOUSE,FENDWAREHOUSE, FSTARTCELL, FSTARTDEVICE, FENDDEVICE, FENDCELL, FSTATUS, FBEGTIME, FIntoStepOK)VALUES({0},{1},'{2}',{3},{4},{5},{6},'{7}','{8}','{9}',{10},{11},'{12}',{13},'{14}'})", ob));
}
dbo.ExceSQL(string.Format("update AGV_TASK set WCS_FLAG =2 where AGV_TASK_ID = {0} ", TaskIndex));
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "AGV送货完成,生成扫码任务。", newTaskStart.ToString(), TaskIndex.ToString());
}
}
#endregion
//删除AGV任务
dbo.ExceSQL(string.Format("delete AGV_TASK where FID = {0} and AGV_TASK_ID = {1}", Fid, TaskIndex));
//删除调度指令
dbo.ExceSQL(string.Format("delete T_Monitor_Task where F_ManageTaskIndex = {0} and F_MonitorIndex = {1}", Fid, TaskIndex));
//删除调度任务
dbo.ExceSQL(string.Format("delete T_Manage_Task where FID = {0}", Fid));
break;
case 5: //任务完成
//删除AGV任务
dbo.ExceSQL(string.Format("delete AGV_TASK where FID = {0} and AGV_TASK_ID = {1}", Fid, TaskIndex));
//删除调度指令
dbo.ExceSQL(string.Format("delete T_Monitor_Task where F_ManageTaskIndex = {0} and F_MonitorIndex = {1}", Fid, TaskIndex));
//删除调度任务
dbo.ExceSQL(string.Format("delete T_Manage_Task where FID = {0}", Fid));
break;
case 6: //申请删除
if (Convert.ToInt32(valist0[0]["F_Status"]) != 900)
{
if (Convert.ToInt32(valist0[0]["F_Status"]) == 9 || Convert.ToInt32(valist0[0]["F_Status"]) == 10)
{
//调度指令更新标记
dbo.ExceSQL(string.Format("update T_Monitor_Task set F_Status = 900 where F_ManageTaskIndex = {0} and F_MonitorIndex = {1}", Fid, TaskIndex));
//删除AGV任务
dbo.ExceSQL(string.Format("delete AGV_TASK where FID = {0} and AGV_TASK_ID = {1}", Fid, TaskIndex));
}
else if (Convert.ToInt32(valist0[0]["F_Status"]) == 3)
{
int start = Convert.ToInt32(valist0[0]["F_NumParam2"]);
int end = Convert.ToInt32(valist0[0]["F_NumParam5"]);
if (GetPilerLocat(start) != -1) //出库任务取完货,AGV删除,调度认为完成,管理报完成
{
//调度指令更新标记
dbo.ExceSQL(string.Format("update T_Monitor_Task set F_Status = 900 where F_ManageTaskIndex = {0} and F_MonitorIndex = {1}", Fid, TaskIndex));
//删除AGV任务
dbo.ExceSQL(string.Format("delete AGV_TASK where FID = {0} and AGV_TASK_ID = {1}", Fid, TaskIndex));
//调度任务完成(已经出到输送线了,不可能回到货位了)
dbo.ExceSQL(string.Format("update T_Manage_Task set FSTATUS == 999 where FID = {0} ", Fid));
//给管理更新终点和状态
dboM.ExceSQL(string.Format("update IO_CONTROL set CONTROL_STATUS == 999,END_DEVICE_CODE = {0} where CONTROL_ID = {1} ", Fid, valist0[0]["F_NumParam5"].ToString()));
//删除调度指令
dbo.ExceSQL(string.Format("delete T_Monitor_Task where F_ManageTaskIndex = {0} and F_MonitorIndex = {1}", Fid, TaskIndex));
//删除调度任务
dbo.ExceSQL(string.Format("delete T_Manage_Task where FID = {0}", Fid));
}
else if (GetPilerLocat(end) != -1) //入库任务,AGV删除,调度也删除,并将状态更新管理,生成叠盘任务
{
}
else //AGV站台间移库,AGV删除,调度也删除,状态更新管理
{
}
}
}
break;
default:
break;
}
}
else
{
//残留的AGV任务处理 zcy 20230310
dbo.ExceSQL(string.Format("delete AGV_TASK where FID = {0} and AGV_TASK_ID = {1}", Fid, TaskIndex));
CommonClassLib.CCarryConvert.WriteDarkCasket("RGVTASK", "AGV 任务被删除", Fid.ToString(), "找不到对应的调度任务,自动将RGV任务删除!");
}
}
public int GetManageTaskCountForStartAndEndDevice(int start, int end, string barcode)
{
DataView dv = new DataView();
string sql = string.Empty;
try
{
{
sql = string.Format("SELECT * FROM T_Manage_Task WHERE FSTARTDEVICE = '{0}' and FENDDEVICE = '{1}' and FPALLETBARCODE = '{2}'",
start, end, barcode);
}
dv = dbo.ExceSQL(sql).Tables[0].DefaultView;
return dv.Count;
}
catch (Exception ex)
{
throw ex;
}
finally
{
dv.Dispose();
}
}
//根据输送线,返回拆叠盘机所在输送线的位置
public int GetPilerLocat(int device)
{
DataView valist = dbo.ExceSQL(string.Format("select * from T_Base_PLC_Ask where F_DeviceIndex = {0} and F_Askkind = 9", device)).Tables[0].DefaultView;
if (valist.Count > 0)
{
return Convert.ToInt32(valist[0]["F_TempFirstProject"]);
}
else
{
return -1;
}
}
//根据输送线,返回扫码器所在输送线的位置
public int GetScannerLocat(int device)
{
DataView valist = dbo.ExceSQL(string.Format("select * from T_Base_PLC_Ask where F_DeviceIndex = {0} and F_Askkind = 9", device)).Tables[0].DefaultView;
if (valist.Count > 0)
{
return Convert.ToInt32(valist[0]["F_FirstProject"]);
}
else
{
return -1;
}
}
StringBuilder sql = new StringBuilder();
public static int GetTempManageIdx()
{
//20100108
DataSet ds = new DataSet();
try
{
int maxIdx = 10001;
ds = dbo.ExceSQL("SELECT F_ManageTaskIndex FROM T_Base_Manage_Task_Index_Temp_Task");
if (ds.Tables[0].DefaultView.Count > 0)
{
if ((Convert.ToInt32(ds.Tables[0].DefaultView[0]["F_ManageTaskIndex"]) + 1) >= 19998)
{
maxIdx = 10001;
}
else
{
maxIdx = (Convert.ToInt32(ds.Tables[0].DefaultView[0]["F_ManageTaskIndex"]) + 1);
}
}
else
{
maxIdx = 10001;
}
//判断临时调度任务表是否有重复值
if (IFExitTempManageIndex(maxIdx) == true)
{
RecordMaxTempManageTaskFID(maxIdx);
maxIdx = GetTempManageIdx();
return maxIdx;
}
RecordMaxTempManageTaskFID(maxIdx);
return maxIdx;
}
catch (Exception ex)
{//20100108
throw ex;
//return 0;
}
finally
{//20100108
ds.Dispose();
}
}
public static bool IFExitTempManageIndex(int fid)
{
//20100108
DataView dv = new DataView();
try
{
dv = dbo.ExceSQL(string.Format("SELECT fid FROM T_Manage_Task WHERE F_ManageTaskKindIndex=2 and fid = {0}", fid)).Tables[0].DefaultView;
if (dv.Count > 0)
{
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{//20100108
throw ex;
}
finally
{//20100108
dv.Dispose();
}
}
public static void RecordMaxTempManageTaskFID(int fid)
{//20100108
DataView dv = new DataView();
try
{//20100108
dv = dbo.ExceSQL("select F_ManageTaskIndex from T_Base_Manage_Task_Index_Temp_Task").Tables[0].DefaultView;
if (dv.Count > 0)
{
//if (fid == 19998)
//{
// dbo.ExceSQL("UPDATE T_Base_Manage_Task_Index_Temp_Task SET F_ManageTaskIndex =10001");
// return;
//}
//if (fid > Convert.ToInt32(dv[0]["F_ManageTaskIndex"]))
//{
//20101124
dbo.ExceSQL(string.Format("UPDATE T_Base_Manage_Task_Index_Temp_Task SET F_ManageTaskIndex ={0}", fid));
return;
//}
}
else
{
dbo.ExceSQL(string.Format("INSERT INTO T_Base_Manage_Task_Index_Temp_Task (F_ManageTaskIndex)VALUES ({0})", fid));
return;
}
}
catch (Exception ex)
{//20100108
throw ex;
//return 0;
}
finally
{//20100108
dv.Dispose();
}
}
}
}