using CommLayerFactory; using CommonLib; using DBFactory; using ICommLayer; using System; using System.Collections.Generic; using System.Data; using System.Text; using System.Text.RegularExpressions; namespace WcfControlMonitorLib { /// /// Creator:ZCY /// 环型穿梭车通用库 /// public class CCommonFunctionSSAR { string _DisassembleTaskError; public string DisassembleTaskError { get { return _DisassembleTaskError; } set { _DisassembleTaskError = value; } } DBOperator dboM = CStaticClass.dboM; DBOperator dbo = CStaticClass.dbo; static CGetState cgs = new CGetState(); CCommonFunction ccf = new CCommonFunction(); Model.MDevice devinfo; StringBuilder sql = new StringBuilder(); public static event CDataSourceChangeEventHandler DataChange; public static void OnDataChange(object sender, CDataChangeEventArgs e) { if (DataChange != null) { DataChange(sender, e); } } public static event RefreshMonitorEventHandler RefreshMonitor; public static void OnRefreshMonitor(object sender, RefreshMonitorEventArgs e) { if (RefreshMonitor != null) { RefreshMonitor(e); } } public CCommonFunctionSSAR() { } public const int SOUTHLRGV = 1; public const int NORTHLRGV = 2; /// /// 得到环穿任务状态 /// /// /// public bool GetARGVDeviceState(int SSAR, out string errText) { StringBuilder sql = new StringBuilder(); StringBuilder ss = new StringBuilder(); DataView dv = new DataView(); DataView dvM = new DataView(); // MidDataTable.CGetDeviceState gds = new CGetDeviceState();// 为了自动生成到debug文件夹下 bool bReturnState = true; errText = string.Empty; try { #region 处理改道,20210512(如果改道在处理环穿状态后面,当WCS关闭时,SSAR已执行完改道,则WCS可能会将环穿任务完成) sql.Remove(0, sql.Length); sql.Append("SELECT * FROM apply_task"); dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dv.Count > 0) { for (int i = 0; i < dv.Count; i++) { int endrgvdevicecode = Convert.ToInt32(dv[i]["DEVICE_CODE"]); int enddevicecode = endrgvdevicecode + 1; int status = Convert.ToInt32(dv[i]["APPLY_STATUS"]); switch (status) { case 0://SSAR未处理 break; case 1://允许改道 #region 先进行改道后的处理,成功后再删除申请 int fid = 0; int routeid = 0; sql.Clear(); sql.Append("select * from t_monitor_task where F_MonitorIndex =").Append(dv[i]["RGV_TASK_ID"]); dvM = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvM.Count > 0) { fid = Convert.ToInt32(dvM[0]["F_ManageTaskIndex"]); routeid = (Convert.ToInt32(dvM[i]["f_routeid"]) - 1) / 1000; sql.Clear(); sql.Append("select * from T_base_route where f_enddevice = ").Append(enddevicecode) .Append(" and f_startdevice = (select f_startdevice from t_base_route where f_routeid = ") .Append(routeid).Append(")"); dvM = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvM.Count > 0) { int newrouteid = Convert.ToInt32(dvM[0]["f_routeid"]); string errtext; if (PalletInChangeLocation(fid, enddevicecode, endrgvdevicecode, newrouteid, out errtext) == true) { #region 再删除SSAR改道申请 sql.Remove(0, sql.Length); sql.Append("DELETE FROM APPLY_TASK WHERE APPLY_ID = ") .Append(dv[i]["APPLY_ID"].ToString()); dbo.ExecuteSql(sql.ToString()); #endregion } else { //SSAR改道成功,但进行后续处理时失败了,则不能删除SSAR改道申请 CommonClassLib.CCarryConvert.WriteDarkCasket("SSAR", "改道允许,但后续处理失败,已回滚", endrgvdevicecode.ToString(), "改道任务:" + fid); } } } else { //如果调度中的任务没了,处理有点复杂,先不处理。 //1.去查大任务,有大任务,则继续 //2.大任务也没了,则很麻烦,需要人工接入吧 } #endregion break; case 2://拒绝改道 #region 先删除SSAR改道申请 sql.Remove(0, sql.Length); sql.Append("DELETE FROM APPLY_TASK WHERE APPLY_ID = ") .Append(dv[i]["APPLY_ID"].ToString()); dbo.ExecuteSql(sql.ToString()); #endregion #region 再向管理申请空托盘垛 string dtime = ccf.GetDateTime(); string barcode = "0000000"; int errordevice = 0; int applydev = Convert.ToInt32(dv[i]["DEVICE_CODE"]); //RGV送货站台,即申请站台 int enddevice = applydev + 1;//终点站台 int palletkind = 0; #region 托盘类型 palletkind sql.Remove(0, sql.Length); sql.Append("SELECT * FROM RGV_TASK_TYPE where RGV_TaskType_Index = ").Append(dv[i]["APPLY_TYPE"]); dvM = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvM.Count > 0) { try { palletkind = Convert.ToInt32(dvM[0]["GoodsKinds"]); } catch (FormatException ex) { //没找到托盘类型,应该人工处理 //errText = //RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("SSAR", "改道拒绝,托盘类型获取失败!环穿任务类型:" + dv[i]["APPLY _TYPE"].ToString() + "!托盘类型:" + dvM[0]["GoodsKinds"].ToString()); //OnRefreshMonitor(rmea); CommonClassLib.CCarryConvert.WriteDarkCasket("SSAR", "改道拒绝,托盘类型获取失败!", "环穿任务类型:" + applydev.ToString(), "托盘类型:" + dvM[0]["GoodsKinds"].ToString()); } } else { //没找到托盘类型,应该人工处理 } #endregion object[] ob = new object[13] { 2, enddevice, barcode, 0, dtime, "", "1",0,0, palletkind,errordevice,0,0 }; //将向管理申请时的 SQL 放入 WMSApply 方法中 if (ccf.WMSApply(ob, applydev, enddevice) == false) { CommonClassLib.CCarryConvert.WriteDarkCasket("SSAR", "改道拒绝,向管理申请缓存失败", applydev.ToString(), ""); } else { CommonClassLib.CCarryConvert.WriteDarkCasket("SSAR", "改道拒绝,向管理申请缓存", applydev.ToString(), ""); } #endregion break; default: break; } } } #endregion #region 处理环穿状态 string table = string.Empty; if (SSAR == NORTHLRGV) { table = "RGV_TASK_NORTH"; } else { table = "RGV_TASK"; } sql.Remove(0, sql.Length); sql.Append("SELECT * FROM ").Append(table); dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dv.Count > 0) { for (int i = 0; i < dv.Count; i++) { sql.Remove(0, sql.Length); sql.Append("SELECT * FROM T_Monitor_Task WHERE F_ManageTaskIndex = ") .Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ") .Append(dv[i]["RGV_TASK_ID"].ToString()); dvM = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvM.Count > 0) { int iARGVStatus = Convert.ToInt32(dv[i]["RGV_TASK_STATUS"]); switch (iARGVStatus) { case 7: //已接收 if (dvM[0]["F_Status"].ToString() != "7") { sql.Remove(0, sql.Length); sql.Append("UPDATE T_Monitor_Task SET F_Status = 7 WHERE F_ManageTaskIndex = ") .Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ") .Append(dv[i]["RGV_TASK_ID"].ToString()); dbo.ExecuteSql(sql.ToString()); sql.Remove(0, sql.Length); sql.Append("UPDATE T_Manage_Task SET FCurrentLocation =") .Append(dvM[0]["F_DeviceIndex"].ToString()) .Append(" where FID = ").Append(dv[i]["FID"].ToString()); dbo.ExecuteSql(sql.ToString()); } break; case 10: //执行中 if (dvM[0]["F_Status"].ToString() != "10") { sql.Remove(0, sql.Length); sql.Append("UPDATE T_Monitor_Task SET F_Status = 10 WHERE F_ManageTaskIndex = ") .Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ") .Append(dv[i]["RGV_TASK_ID"].ToString()); dbo.ExecuteSql(sql.ToString()); int rgv = Convert.ToInt32(dv[i]["RGV_CODE"]); if (rgv < 15000) { rgv -= 14000; //南侧环穿14001-14021 } else { rgv -= 15000; //北侧环穿15001-15014 } int rgv_code = Convert.ToInt32(dvM[0]["F_DeviceIndex"]) - 1 + rgv; sql.Remove(0, sql.Length); sql.Append("UPDATE T_Manage_Task SET FCurrentLocation =") .Append(rgv_code) .Append(" where FID = ").Append(dv[i]["FID"].ToString()); dbo.ExecuteSql(sql.ToString()); //HWHX 可能不需要同步到管理系统。待定 int fid = ccf.GetManageTaskIndexfromMonitor(Convert.ToInt32(dv[i]["RGV_TASK_ID"])); sql.Remove(0, sql.Length); sql.Append("update IO_CONTROL set CONTROL_STATUS=10 where CONTROL_ID=").Append(fid); dboM.ExecuteSql(sql.ToString()); } break; case 999: //已完成 #region 20200922 双鹿电池,环穿出库任务完成,更新下一条MonitorTask中任务的设备号,终点设备号,检测条件 if (Convert.ToInt32(dv[i]["RGV_TASK_TYPE"]) == 2) { int iFihishDevice = Convert.ToInt32(dv[i]["FINISH_DEVICE_CODE"]); int routeIDsub = ccf.GetRouteIDsub(iFihishDevice); #region 出库成组 int endDevice = 0; sql.Clear(); sql.Append("select * from area_port where asrs_port_code =").Append(iFihishDevice); dvM = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvM.Count > 0) { endDevice = Convert.ToInt32(dv[0]["port_code"]); //更新manage表,更新IO_CONTROL表 sql.Clear(); sql.Append("update t_manage_task set FENDDEVICE = ").Append(endDevice) .Append(" where fid = ").Append(dv[i]["FID"].ToString()); dbo.ExceSQL(sql.ToString()); sql.Clear(); sql.Append("update IO_CONTROL set END_DEVICE_CODE = ").Append(endDevice) .Append(" where CONTROL_ID = ").Append(dv[i]["FID"].ToString()); dboM.ExceSQL(sql.ToString()); #endregion sql.Remove(0, sql.Length); sql.Append("UPDATE T_Monitor_Task SET F_DeviceIndex = ").Append(iFihishDevice) .Append(",F_NumParam1 = ").Append(iFihishDevice) .Append(",F_AheadDetect = 'I").Append(iFihishDevice).Append(";D-").Append(iFihishDevice).Append(".0'") .Append(",F_RouteID = ").Append(routeIDsub) .Append(",F_NumParam4 = ").Append(endDevice) .Append("WHERE F_ManageTaskIndex = ").Append(dv[i]["FID"].ToString()); dbo.ExecuteSql(sql.ToString()); } } #endregion cgs.ActionComplete(Convert.ToInt32(dvM[0]["F_DeviceIndex"]), Convert.ToInt32(dvM[0]["F_MonitorIndex"]), 0); #region 将送货输送线写入Manage中的当前设备 sql.Remove(0, sql.Length); sql.Append("UPDATE T_Manage_Task SET FCurrentLocation =") .Append(dv[i]["FINISH_DEVICE_CODE"].ToString()) .Append(" where FID = ").Append(dv[i]["FID"].ToString()); dbo.ExecuteSql(sql.ToString()); #endregion sql.Remove(0, sql.Length); sql.Append("DELETE FROM ").Append(table).Append(" WHERE FID = ") .Append(dv[i]["FID"].ToString()).Append(" AND RGV_TASK_ID = ") .Append(dv[i]["RGV_TASK_ID"].ToString()); dbo.ExecuteSql(sql.ToString()); break; case 900: //申请删除 if (dvM[0]["F_Status"].ToString() != "900") { sql.Remove(0, sql.Length); sql.Append("UPDATE T_Monitor_Task SET F_Status = 900 WHERE F_ManageTaskIndex = ") .Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ") .Append(dv[i]["RGV_TASK_ID"].ToString()); dbo.ExecuteSql(sql.ToString()); } #region 删除环穿任务 zcy 20210315 sql.Remove(0, sql.Length); sql.Append("DELETE FROM ").Append(table).Append(" WHERE FID = ") .Append(dv[i]["FID"].ToString()).Append(" AND RGV_TASK_ID = ") .Append(dv[i]["RGV_TASK_ID"].ToString()); dbo.ExecuteSql(sql.ToString()); #endregion break; case 0: //已发送 if (dvM[0]["F_Status"].ToString() != "1") { sql.Remove(0, sql.Length); sql.Append("UPDATE T_Monitor_Task SET F_Status = 1 WHERE F_ManageTaskIndex = ") .Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ") .Append(dv[i]["RGV_TASK_ID"].ToString()); dbo.ExecuteSql(sql.ToString()); } break; case 960: //已改道 #region HWHX 待测试j if (Convert.ToInt32(dv[i]["RGV_TASK_TYPE"]) == 1) { #region 删除入库任务 cgs.ActionComplete(Convert.ToInt32(dvM[0]["F_DeviceIndex"]), Convert.ToInt32(dvM[0]["F_MonitorIndex"]), 0); sql.Remove(0, sql.Length); sql.Append("DELETE FROM RGV_TASK WHERE FID = ") .Append(dv[i]["FID"].ToString()).Append(" AND RGV_TASK_ID = ") .Append(dv[i]["RGV_TASK_ID"].ToString()); dbo.ExecuteSql(sql.ToString()); #endregion sql.Remove(0, sql.Length); sql.Append("UPDATE T_Monitor_Task SET F_Status = 10, F_NumParam4 = '").Append(dv[0]["END_AREA_CODE"]) //更改状态 .Append("' WHERE F_ManageTaskIndex = ") .Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ") .Append(dv[i]["RGV_TASK_ID"].ToString()); dbo.ExecuteSql(sql.ToString()); } #endregion break; default: break; } } else { //残留的环穿任务处理 zcy 20210315 bReturnState = false; errText += "环形穿梭车系统任务:任务号:" + dv[i]["FID"].ToString() + ",指令号:" + dv[i]["RGV_TASK_ID"].ToString() + "在调度系统中不存在,已自动删除并记录。"; sql.Remove(0, sql.Length); sql.Append("DELETE FROM ").Append(table).Append(" WHERE FID = ") .Append(dv[i]["FID"].ToString()).Append(" AND RGV_TASK_ID = ") .Append(dv[i]["RGV_TASK_ID"].ToString()); dbo.ExecuteSql(sql.ToString()); CommonClassLib.CCarryConvert.WriteDarkCasket("RGVTASK", "RGV任务被删除", dv[i]["FID"].ToString(), "找不到对应的调度任务,自动将RGV任务删除!"); continue; } } } #endregion #region 出库成组 #endregion //#region 处理AGV任务表 //sql.Remove(0, sql.Length); //sql.Append("SELECT * FROM AGV_TASK"); //dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; //if (dv.Count > 0) //{ // for (int i = 0; i < dv.Count; i++) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT * FROM T_Monitor_Task WHERE F_ManageTaskIndex = ") // .Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ") // .Append(dv[i]["AGV_TASK_ID"].ToString()); // dvM = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvM.Count > 0) // { // int iARGVStatus = Convert.ToInt32(dv[i]["AGV_TASK_STATUS"]); // switch (iARGVStatus) // { // case 7: //已接收 // if (dvM[0]["F_Status"].ToString() != "7") // { // sql.Remove(0, sql.Length); // sql.Append("UPDATE T_Monitor_Task SET F_Status = 7 WHERE F_ManageTaskIndex = ") // .Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ") // .Append(dv[i]["AGV_TASK_ID"].ToString()); // dbo.ExecuteSql(sql.ToString()); // } // break; // case 10: //执行中 // if (dvM[0]["F_Status"].ToString() != "10") // { // sql.Remove(0, sql.Length); // sql.Append("UPDATE T_Monitor_Task SET F_Status = 10 WHERE F_ManageTaskIndex = ") // .Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ") // .Append(dv[i]["AGV_TASK_ID"].ToString()); // dbo.ExecuteSql(sql.ToString()); // int fid = ccf.GetManageTaskIndexfromMonitor(Convert.ToInt32(dv[i]["AGV_TASK_ID"])); // sql.Remove(0, sql.Length); // sql.Append("update IO_CONTROL set CONTROL_STATUS=10 where CONTROL_ID=").Append(fid); // dboMan.ExecuteSql(sql.ToString()); // } // break; // case 999: //已完成 // cgs.ActionComplete(Convert.ToInt32(dvM[0]["F_DeviceIndex"]), Convert.ToInt32(dvM[0]["F_MonitorIndex"]), 0); // sql.Remove(0, sql.Length); // sql.Append("DELETE FROM AGV_TASK WHERE FID = ") // .Append(dv[i]["FID"].ToString()).Append(" AND AGV_TASK_ID = ") // .Append(dv[i]["AGV_TASK_ID"].ToString()); // dbo.ExecuteSql(sql.ToString()); // break; // case 900: //申请删除 // if (dvM[0]["F_Status"].ToString() != "900") // { // sql.Remove(0, sql.Length); // sql.Append("UPDATE T_Monitor_Task SET F_Status = 900 WHERE F_ManageTaskIndex = ") // .Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ") // .Append(dv[i]["AGV_TASK_ID"].ToString()); // dbo.ExecuteSql(sql.ToString()); // } // break; // case 0: //已发送 // if (dvM[0]["F_Status"].ToString() != "1") // { // sql.Remove(0, sql.Length); // sql.Append("UPDATE T_Monitor_Task SET F_Status = 1 WHERE F_ManageTaskIndex = ") // .Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ") // .Append(dv[i]["AGV_TASK_ID"].ToString()); // dbo.ExecuteSql(sql.ToString()); // } // break; // default: // break; // } // } // else // { // bReturnState = false; // errText += "AGV系统任务:任务号:" + dv[i]["FID"].ToString() + ",指令号:" + // dv[i]["RGV_TASK_ID"].ToString() + "在调度系统中不存在,请通知管理人员处理"; // continue; // } // } //} //#endregion return bReturnState; } catch (Exception ex) { //RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.GetARGVDeviceState时" + ex.StackTrace + ex.Message); //OnRefreshMonitor(rmea); bReturnState = false; return bReturnState; } finally { dv.Dispose(); dvM.Dispose(); } } //托盘缓存申请,有托盘入库任务,确定改道时的处理,只处理环穿及环穿后的指令 public bool PalletInChangeLocation(int fid, int newEndDevice, int newRgvEndDevice, int routeid, out string errtext) { StringBuilder sql = new StringBuilder(); DataView dvbc = new DataView(); string dtime = ccf.GetDateTime(); if (routeid != 0) { routeid = routeid * 1000 + 1; } try { dbo.TransBegin(IsolationLevel.ReadCommitted); //1.环穿之前的指令不变,2.更改环穿终点,3.删除指令大于环穿的所有指令,4.添加输送线的送出指令,5.将manage任务插入bak, //6.修改manage终点,任务类型不变,7.更改所有指令的routeid, 8.IO_CONTROL任务更改状态900 sql.Clear(); sql.Append("select * from t_monitor_task where F_ManageTaskIndex = ").Append(fid).Append("order by F_monitorIndex "); dvbc = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; int rgvMonitorId = 0; string palletcode = ""; StringBuilder AheadDetect = new StringBuilder(); int conveyorIndex = 0; for (int i = 0; i < dvbc.Count; i++) { if (Convert.ToInt32(dvbc[i]["F_DeviceIndex"]) == 25001) { //2 rgvMonitorId = Convert.ToInt32(dvbc[i]["F_MonitorIndex"]); //记录rgv的指令 //更新 RGV 终点,时间 sql.Remove(0, sql.Length); sql.Append("update t_monitor_task set F_NumParam4=").Append(newRgvEndDevice).Append(", F_SplitTime='").Append(dtime).Append("' where F_ManageTaskIndex = ").Append(fid).Append(" and F_MonitorIndex = ").Append(rgvMonitorId); dbo.ExecuteSql(sql.ToString()); palletcode = dvbc[i]["F_TxtParam"].ToString(); } if (rgvMonitorId != 0 && Convert.ToInt32(dvbc[i]["F_MonitorIndex"]) > rgvMonitorId) {//3 sql.Remove(0, sql.Length); sql.Append("delete from t_monitor_task where F_MonitorIndex = ").Append(dvbc[i]["F_MonitorIndex"].ToString()); dbo.ExecuteSql(sql.ToString()); conveyorIndex = Convert.ToInt32(dvbc[i]["F_MonitorIndex"]); //记录一个已删除的指令索引 } } #region 4 要保证添加的指令索引大于环穿的指令索引 AheadDetect.Append(";D-").Append(newRgvEndDevice).Append(".0"); AheadDetect.Append(";D").Append(newEndDevice).Append(".0"); AheadDetect.Append(";I").Append(newRgvEndDevice); AheadDetect.Append(";I").Append(newEndDevice); //int mindex = ccf.GetMonitorIndex(fid, 2); //与任务拆分的间隔太久了,本行可能导致索引从最大变成最小 int mindex = conveyorIndex; sql.Remove(0, sql.Length); sql.Append("INSERT INTO T_Monitor_Task ").Append( "(F_ManageTaskIndex, F_ManageTASKKINDINDEX, F_MonitorIndex,F_MonitorTaskLevel,").Append( " F_DeviceIndex, F_DeviceCommandIndex, F_RouteID, F_Status,F_NumParam1, F_NumParam4,").Append( " F_AheadDetect,F_TxtParam)").Append( "VALUES (").Append(fid).Append(",").Append(1).Append(",").Append(mindex).Append(",").Append(9 ).Append(",").Append(newRgvEndDevice).Append(",").Append(6).Append(",").Append(routeid).Append(",").Append(0).Append(",").Append(newRgvEndDevice).Append(",").Append(newEndDevice ).Append(",'").Append(AheadDetect.ToString()).Append("','").Append(palletcode).Append("')"); dbo.ExceSQL(sql.ToString()); #endregion //5 //待添加 //6 sql.Remove(0, sql.Length); //sql.Append("update t_manage_task set FENDDEVICE=").Append(newEndDevice).Append(",FENDCELL='-' ,FBEGTIME='").Append(dtime).Append("',FLANEWAY='',FSTACK='' where fid=").Append(fid); sql.Append("update t_manage_task set goods_num = 905, FENDDEVICE=").Append(newEndDevice).Append(",FENDUCODE='' ,FBEGTIME='").Append(dtime).Append("',FLANEWAY='',FSTACK='' where fid=").Append(fid); dbo.ExecuteSql(sql.ToString()); //7 sql.Remove(0, sql.Length); sql.Append("update t_monitor_task set F_RouteID=").Append(routeid).Append(" where F_ManageTaskIndex=").Append(fid); dbo.ExecuteSql(sql.ToString()); dbo.TransCommit(); //8入库改道,管理需要从缓存区中删除库存,定义状态905 sql.Remove(0, sql.Length); sql.Append("UPDATE IO_CONTROL SET CONTROL_STATUS =905 WHERE CONTROL_ID=").Append(fid); int count = dboM.ExecuteSql(sql.ToString()); if (count != 1) { CommonClassLib.CCarryConvert.WriteDarkCasket("PalletInChangeLocation", "空托盘垛改道", "原任务:" + fid, "IO_CONTROL更新行数:" + count.ToString()); } //9 更改 环穿 任务,RGV_TASK 已接收的任务 sql.Remove(0, sql.Length); sql.Append("update RGV_TASK set LANE_CODE = 0, END_AREA_CODE=").Append(newRgvEndDevice).Append(" where fid = ").Append(fid); dbo.ExecuteSql(sql.ToString()); CommonClassLib.CCarryConvert.WriteDarkCasket("PalletInChangeLocation", "空托盘垛改道成功", "原任务:" + fid, "改道终点:" + newEndDevice.ToString()); errtext = ""; return true; } catch (Exception ex) { //RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.PalletChangeLocation" + ex.Message + ex.StackTrace); //OnRefreshMonitor(rmea); errtext = ex.Message + ex.StackTrace; dbo.TransRollback(); CommonClassLib.CCarryConvert.WriteDarkCasket("PalletInChangeLocation", "空托盘垛改道失败", "改道终点:" + newEndDevice.ToString(), ""); return false; } finally { dvbc.Dispose(); } } //叠盘机入库,有缓存出库任务,确定改道时的处理,删除出库任务 public bool PalletOutChangeLocation(int fid, int newStartDevice, int newEnddevice, string barcodes, out string errtext) { StringBuilder sql = new StringBuilder(); DataView dvbc = new DataView(); string dtime = ccf.GetDateTime(); int AutoManageIdx = ccf.GetTempManageIdx();//调度任务索引 int stack = 0;//堆垛机FSTACK int Laneindex = 0; int controltype = 4;//站台间移库 int managetaskkind = 2; //自动任务 //string barcodes = ""; errtext = ""; object[] ob = new object[16] { AutoManageIdx, barcodes, controltype, managetaskkind, 1, newStartDevice, "-", 1, newEnddevice, "-", Laneindex, stack, "-", dtime, 0, 0 }; try { string sqlstr = string.Format("insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL,FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME,FStartCol,FStartLayer) " + "values ({0},'{1}',{2},{3},{4},{5},'{6}',{7},{8},'{9}',{10},{11},'{12}','{13}',{14},{15})", ob); dbo.ExceSQL(sqlstr); CommonClassLib.CCarryConvert.WriteDarkCasket("PalletOutChangeLocation", "空托盘垛改道成功", "原任务:" + fid, "新任务:" + AutoManageIdx.ToString()); sql.Remove(0, sql.Length); sql.Append("delete from t_monitor_task where F_ManageTaskIndex = ").Append(fid); dbo.ExecuteSql(sql.ToString()); sql.Remove(0, sql.Length); sql.Append("delete T_Manage_Task where fid = ").Append(fid); dbo.ExecuteSql(sql.ToString()); sql.Remove(0, sql.Length); sql.Append("UPDATE IO_CONTROL SET CONTROL_STATUS =900 WHERE CONTROL_ID=").Append(fid); dboM.ExecuteSql(sql.ToString()); return true; } catch (Exception ex) { //RefreshMonitorEventArgs rmea = // new RefreshMonitorEventArgs("tsStatus", // "调度生成拆盘机补货任务时发生错误:" + ex.StackTrace + // ex.Message); //OnRefreshMonitor(rmea); errtext = ex.Message + ex.StackTrace; return false; } finally { dvbc.Dispose(); } } #region 环穿的提前检测 //某一站台如果入库任务超过一定数量,则暂停改站台的入库任务(业务描述:优先级低的站台) //public int SSARGateINTaskCount #endregion } }