using System; using System.Collections.Generic; using System.Text; using System.Data; using DBFactory; using System.Threading; using Microsoft.VisualBasic; using CommonLib; using ICommLayer; using System.ServiceModel; using System.Security.Cryptography; namespace WcfControlMonitorLib { /// /// Creator:Richard.liu /// 获取调度任务 /// public static class CObtainTask { public static event CUpdateDBEventHandler UpdateDB; public static void OnUpdateDB(CUpdateDBChangeEventArgs e) { if (UpdateDB != null) { UpdateDB(null, e); } } 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(RefreshMonitorEventArgs e) { if (RefreshMonitor != null) { RefreshMonitor(e); } } static ISendDeviceOrder sdo; static StringBuilder[] wv = { new StringBuilder("2") }; static StringBuilder[] witemnames = { new StringBuilder("") }; static CGetState cgs = new CGetState(); static CCommonFunction ccf = new CCommonFunction(); static Thread mythread; static bool exitThread = false;//20091107 static object lockThis = new object(); static Model.MDevice devinfo; static StringBuilder sbs = new StringBuilder(); static StringBuilder temp = new StringBuilder(); static string stacklane = "12001,12007,12014,12020,12027,12033,12040,12046,12053,12060,12069,12076,12085,12092,12101,12202,12204,12206,12208,12210,12212,12240,12247,12256,12263,12272,12279,12288,12295,12304,12311,12550,12720,24101,24108,24109,24110,24102,24111,24103,24104,24112,24105,24113,24106,24114,24107"; public static HashSet hashSet = new HashSet();//解决委托积压问题20240726边智 private static void BeginListenObtainTask() {//20091107 while (!exitThread) { try { lock (lockThis) { GetManagerTask(); } } catch (Exception ex) { throw ex; } finally { Thread.Sleep(1000); } } } public static void EndListenObtainTask() {//20091107 exitThread = true; if (mythread != null) { dbo.Close(); dboM.Close(); mythread.Abort(); mythread = null; } } public static void StartListenObtainTask() { exitThread = false; mythread = new Thread(new ThreadStart(BeginListenObtainTask)); mythread.IsBackground = true; mythread.Start(); } static string _CObtainTaskError=""; public static string CObtainTaskError { get { return _CObtainTaskError; } set { _CObtainTaskError = value; RefreshMonitorEventArgs rme = new RefreshMonitorEventArgs("tsStatus", _CObtainTaskError); OnRefreshMonitor(rme); } } static DBOperator dbo = new DBOperator();// CStaticClass.dbo; static DBOperator dboM = CStaticClass.dboM;//20130510 /// /// 获得调度任务 /// public static int GetManagerTask() { lock (lockThis) { //是否考虑同时读取IO_CONTROLDETAIL表的数据到本地数据库 DataSet dsIOC = new DataSet(); DataView dvIOC = new DataView(); DataView dv = new DataView(); DataView dvnew = new DataView(); DataView dvmi = new DataView(); DataView DMAN = new DataView(); DataView dvc = new DataView(); DataView dvCopy = new DataView(); object obj = null; #region //受流量限制的出库任务,变量初始化20151120 StringBuilder startWarehouse = new StringBuilder(""); StringBuilder startcell = new StringBuilder(""); StringBuilder endcell = new StringBuilder(""); StringBuilder notin = new StringBuilder(""); #endregion try { int RecCount = 0; //string tmpdt0 = DateTime.Now.ToString("u") + DateTime.Now.Millisecond.ToString(); #region 受流量限制的出库任务优先获取 //dvc = dbo.ExceSQL("SELECT F_DeviceIndex,F_MAXCOUNT FROM T_Base_TaskCount where F_MAXCOUNT>0").Tables[0].DefaultView; //for (int i = 0; i < dvc.Count; i++) //{ // if (i == 0) // { // notin.Append(" and END_DEVICE_CODE not in ('").Append(dvc[i]["F_DeviceIndex"]).Append("'"); // } // else // { // notin.Append(",'").Append(dvc[i]["F_DeviceIndex"]).Append("'"); // } // int leftTask = 0; // dvnew = dbo.ExceSQL(string.Format("SELECT count(fid) as fids FROM T_Manage_Task where FENDDEVICE='{0}'", dvc[i]["F_DeviceIndex"])).Tables[0].DefaultView; // if (dvnew.Count > 0) // { // leftTask = Convert.ToInt32(dvc[i]["F_MAXCOUNT"]) - Convert.ToInt32(dvnew[0]["fids"]); // } // else // { // leftTask = Convert.ToInt32(dvc[i]["F_MAXCOUNT"]); // } // #region 增加终点设备有货或者不空闲的检测 // int[] states = CStaticClass.GetDeviceState(Convert.ToInt32(dvc[i]["F_DeviceIndex"])); // int state = 0; // if (states != null) // { // state = states[1]; // } // if (CStaticClass.GetDevicePhotoelectric(dvc[i]["F_DeviceIndex"].ToString() + ".0") == 1 || state != 0) // { // leftTask--; // } // #endregion // #region 起点是站台的控制流量单独获取任务 // if (leftTask > 0) // { // sbs.Clear(); // sbs.Append("select CONTROL_ID from IO_CONTROL where 1=1 "); // sbs.Append(" and END_DEVICE_CODE='").Append(dvc[i]["F_DeviceIndex"]).Append("'"); // sbs.Append(" and CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKWAIT.ToString()); // //sbs.Append(" and (START_DEVICE_CODE>='12001' and START_DEVICE_CODE<='42202') "); // sbs.Append(" and (START_DEVICE_CODE not like '%-%') "); // sbs.Append(" order by CONTROL_TASK_LEVEL desc,CONTROL_BATCH asc,CONTROL_BEGIN_TIME asc,CONTROL_ID asc "); // dvIOC = dboM.ExceSQL(sbs.ToString()).Tables[0].DefaultView; // if (dvIOC.Count > 0) // { // ObtainDoubleForkTask(dvIOC[0]["CONTROL_ID"], "0"); // leftTask = leftTask - 1; // } // } // #endregion // if (leftTask > 0) // { // #region 到此终点的任务按照巷道等待执行和执行中任务数由小到大依次出叉数量的任务 // dvnew = dbo.ExceSQL(string.Format("SELECT F_StartDevice,(SELECT COUNT(FID) FROM T_Manage_Task where FSTARTDEVICE=F_StartDevice) as aaa FROM T_Base_Route where F_EndDevice={0} and F_StartDevice = (select f_deviceindex from T_BASE_DEVICE where f_devicekindindex=10 and f_deviceindex=F_StartDevice) order by aaa asc,F_StartDevice", Convert.ToInt32(dvc[i]["F_DeviceIndex"]))).Tables[0].DefaultView; // for (int xd = 0; xd < dvnew.Count; xd++) // { // //string tmpdt1 = DateTime.Now.ToString("u") + DateTime.Now.Millisecond.ToString(); // startcell.Clear(); endcell.Clear(); startWarehouse.Clear(); // dv = dbo.ExceSQL(string.Format("SELECT F_STARTCELL,F_ENDCELL,F_WAREHOUSE from T_BASE_LANEINFO where F_LANEDEVICEINDEX={0} ", dvnew[xd]["F_StartDevice"])).Tables[0].DefaultView; // if (dv.Count > 0) // { // startcell.Append(dv[0]["F_STARTCELL"].ToString()); // startWarehouse.Append(dv[0]["F_WAREHOUSE"].ToString()); // endcell.Append(dv[0]["F_ENDCELL"].ToString()); // } // else // { // startcell.Append("-"); // startWarehouse.Append("1"); // endcell.Append("-"); // } // obj = dbo.GetSingle(string.Format("SELECT F_ForkAmount from T_Base_StackInfo where F_LaneNo like '%{0}%'", dvnew[xd]["F_StartDevice"])); // int forkcount = 1; // if (obj != null) // { // forkcount = Convert.ToInt32(obj); // } // sbs.Remove(0, sbs.Length); // if (CStaticClass.ManDBFactory == "OracleDBFactory") // {//20151120调度系统oracle的特殊语句 // sbs.Append("select CONTROL_ID,CONTROL_TASK_TYPE,START_DEVICE_CODE,START_WAREHOUSE_CODE from IO_CONTROL where "); // sbs.Append(" CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKWAIT.ToString()); // sbs.Append(" and START_WAREHOUSE_CODE='").Append(startWarehouse).Append("' "); // sbs.Append(" and START_DEVICE_CODE>='").Append(startcell).Append("' "); // sbs.Append(" and START_DEVICE_CODE<='").Append(endcell).Append("' "); // sbs.Append(" and END_DEVICE_CODE='").Append(dvc[i]["F_DeviceIndex"]).Append("'"); // sbs.Append(" order by CONTROL_TASK_LEVEL desc,CONTROL_BATCH asc,CONTROL_BEGIN_TIME asc,CONTROL_ID asc OFFSET 0 ROWS FETCH NEXT ").Append(forkcount).Append(" ROWS ONLY"); // } // else // { // sbs.Append("select top ").Append(forkcount).Append(" CONTROL_ID,CONTROL_TASK_TYPE,START_DEVICE_CODE,START_WAREHOUSE_CODE from IO_CONTROL where 1=1 "); // sbs.Append(" and CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKWAIT.ToString()); // sbs.Append(" and START_WAREHOUSE_CODE='").Append(startWarehouse).Append("' "); // sbs.Append(" and START_DEVICE_CODE>='").Append(startcell).Append("' "); // sbs.Append(" and START_DEVICE_CODE<='").Append(endcell).Append("' "); // sbs.Append(" and END_DEVICE_CODE='").Append(dvc[i]["F_DeviceIndex"]).Append("'"); // sbs.Append(" order by CONTROL_TASK_LEVEL desc,CONTROL_BATCH asc,CONTROL_BEGIN_TIME asc,CONTROL_ID asc "); // } // dvIOC = dboM.ExceSQL(sbs.ToString()).Tables[0].DefaultView; // //string tmpdt2 = DateTime.Now.ToString("u") + DateTime.Now.Millisecond.ToString(); // for (int inew = 0; inew < dvIOC.Count; inew++) // { // #region 20230815richard.liu东台晶澳连续出库任务远货位出库时查找是否有近货位的任务 如果有先获取 // if (Convert.ToInt32(dvIOC[inew]["CONTROL_TASK_TYPE"]) == 2) // { // object slaneway = dbo.GetSingle(string.Format("select flaneway from ST_CELL where fcellcode='{0}' and FWAREHOUSE='{1}'", dvIOC[inew]["START_DEVICE_CODE"], dvIOC[inew]["START_WAREHOUSE_CODE"])); // if (slaneway != null) // { // int wmsZ = Convert.ToInt32(Convert.ToString(dvIOC[inew]["START_DEVICE_CODE"]).Substring(0, 2)); // StringBuilder sql = new StringBuilder(); // sql.Append("select F_SENDZ from T_BASE_SENDROW WHERE F_WMSZ=").Append(wmsZ).Append(" and F_LANENO= ").Append(slaneway); // object SENDZ = dbo.GetSingle(sql.ToString());//1,2,3,4 // if (SENDZ != null) // { // int tempZ = Convert.ToInt32(SENDZ); // StringBuilder newcode =new StringBuilder(""); // if (tempZ== 4) // { // newcode.Append(string.Format("{0:D2}", wmsZ - 1) + Convert.ToString(dvIOC[inew]["START_DEVICE_CODE"]).Substring(2, 6)); // } // else if (tempZ== 1) // { // if (Convert.ToInt32(dbo.GetSingle("select count(0) from T_BASE_SENDROW where F_LANENO=" + slaneway)) > 2)//判定为双伸 // { // newcode.Append(string.Format("{0:D2}", wmsZ + 1) + Convert.ToString(dvIOC[inew]["START_DEVICE_CODE"]).Substring(2, 6)); // } // } // sbs.Remove(0, sbs.Length); // sbs.Append("select * from IO_CONTROL where (CONTROL_STATUS= 0) and START_WAREHOUSE_CODE='").Append(dvIOC[inew]["START_WAREHOUSE_CODE"]).Append("' and START_DEVICE_CODE = '").Append(newcode).Append("'"); // dvCopy = dboM.ExceSQL(sbs.ToString()).Tables[0].DefaultView; // if (dvCopy.Count > 0) // { // ObtainDoubleForkTask(dvCopy[0]["CONTROL_ID"], "0"); // } // } // } // } // #endregion // ObtainDoubleForkTask(dvIOC[inew]["CONTROL_ID"], "0"); // } // leftTask = leftTask - dvIOC.Count; // if (leftTask <= 0) break; // } // #endregion // } //} ////string tmpdt3 = DateTime.Now.ToString("u") + DateTime.Now.Millisecond.ToString(); //if (dvc.Count > 0) //{ // notin.Append(")"); //} #endregion #region 询组件车间缓存补任务到拆盘机任务 //添加轮询组件车间缓存补任务到拆盘机任务 //if (1 == 0)//功能屏蔽组件车间缓存 { DataView dvbcT; DataView dvbcTT; DataView dvbcTTT; dvbcT = dbo.ExceSQL(String.Format("select * from T_BASE_HORT where status = 0")).Tables[0].DefaultView;//有需求 for (int i = 0; i < dvbcT.Count; i++) { if (Convert.ToInt32(dvbcT[i]["have_flag"]) == 1)//有货 { StringBuilder barcodeT = new StringBuilder(); try { dvbcTTT = dbo.ExceSQL(String.Format("select * from T_Manage_Task where FSTARTDEVICE = {0} AND FSTATUS = 0", Convert.ToInt32(dvbcT[i]["f_device_index"]))).Tables[0].DefaultView; if (dvbcTTT.Count <= 0) { dvbcTT = dbo.ExceSQL(String.Format("select * from T_Manage_Task where FENDDEVICE = {1}", Convert.ToInt32(dvbcT[i]["f_device_index"]), Convert.ToInt32(dvbcT[i]["order_n"]))).Tables[0].DefaultView; if (dvbcTT.Count <= 0) { int tempFid1 = ccf.GetTempManageIdx(); barcodeT.Clear(); barcodeT.Append(tempFid1.ToString()); object[] obt = new object[18] { tempFid1, 2, barcodeT.ToString(), 1, 4, 1, 1, ccf.GetWarehouseIndex(), ccf.GetWarehouseIndex(), "-", Convert.ToInt32(dvbcT[i]["f_device_index"]), Convert.ToInt32(dvbcT[i]["order_n"]), "-", 0, DateTime.Now.ToString("u"), 0, Model.CGeneralFunction.TASKABEND, 0 }; dbo.ExceSQL(string.Format("INSERT INTO T_Manage_Task(FID, F_ManageTaskKindIndex,FPALLETBARCODE,FMANAGETASKTYPE,FCONTROLTASKTYPE, FTASKLEVEL, FISRETURN,FSTARTWAREHOUSE,FENDWAREHOUSE, FSTARTCELL, FSTARTDEVICE, FENDDEVICE, FENDCELL, FSTATUS, FBEGTIME, FIntoStepOK,FExceptionNO,FLOGIC_AREA)VALUES({0},{1},'{2}',{3},{4},{5},{6},'{7}','{8}','{9}',{10},{11},'{12}',{13},'{14}','{15}',{16},{17})", obt)); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "组件车间申请出库托盘垛有缓存直接生成站台间移库任务", Convert.ToString(dvbcT[i]["f_device_index"]), Convert.ToInt32(dvbcT[i]["order_n"]).ToString()); } //更新无需求 dbo.ExecuteSql(string.Format("UPDATE T_BASE_HORT SET status =1 WHERE (order_n = {0}) ", Convert.ToInt32(dvbcT[i]["order_n"]))); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "组件车间申请出库托盘垛更新申请状态为1", Convert.ToString(dvbcT[i]["order_n"]), Convert.ToString(dvbcT[i]["f_device_index"])); break; } else { } } catch (Exception ex) { RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.执行组件车间补空托盘垛时" + ex.StackTrace + ex.Message); OnRefreshMonitor(rmea); continue; } CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "生成组件车间托盘垛任务移库任务", Convert.ToString(dvbcT[i]["f_device_index"]), Convert.ToInt32(dvbcT[i]["order_n"]).ToString()); } } } #endregion #region 获取流量表控制之外的任务 sbs.Remove(0, sbs.Length);//获取流量表控制之外的任务 sbs.Append("select * from IO_CONTROL where ((CONTROL_STATUS="); sbs.Append(Model.CGeneralFunction.TASKWAIT.ToString()); sbs.Append(") or (CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKSINGLEFORKRUN.ToString()).Append(") or (CONTROL_STATUS="); sbs.Append(Model.CGeneralFunction.TASKALTERROUTEREPLY.ToString()); sbs.Append(")) ").Append(" ").Append(notin); sbs.Append(" order by CONTROL_TASK_LEVEL desc,CONTROL_BATCH asc,CONTROL_BEGIN_TIME asc,CONTROL_ID asc");//20151120 dsIOC = dboM.ExceSQL(sbs.ToString()); dvIOC = dsIOC.Tables[0].DefaultView; if (dvIOC.Count > 0) { string FENDCELL = ""; char[] cc = new char[1] { '-' }; int FENDDEVICE = 0; int temponecount12202 = 0; int temponecount12001 = 0; int temponecount12007 = 0; int temponecount12014 = 0; int temponecount12020 = 0; int temponecount12027 = 0; int temponecount12033 = 0; int temponecount12040 = 0; int temponecount12046 = 0; int temponecount12053 = 0; int temponecount12060 = 0; int temponecount12069 = 0; int temponecount12076 = 0; int temponecount12085 = 0; int temponecount12092 = 0; int temponecount12101 = 0; int temponecount12204 = 0; int temponecount12206 = 0; int temponecount12208 = 0; int temponecount12210 = 0; int temponecount12212 = 0; int temponecount12240 = 0; int temponecount12247 = 0; int temponecount12256 = 0; int temponecount12263 = 0; int temponecount12272 = 0; int temponecount12279 = 0; int temponecount12288 = 0; int temponecount12295 = 0; int temponecount12304 = 0; int temponecount12311 = 0; int temponecount12550 = 0; int temponecount12720 = 0; int temponecount24101 = 0; int temponecount24108 = 0; int temponecount24109 = 0; int temponecount24110 = 0; int temponecount24102 = 0; int temponecount24111 = 0; int temponecount24103 = 0; int temponecount24104 = 0; int temponecount24112 = 0; int temponecount24105 = 0; int temponecount24113 = 0; int temponecount24106 = 0; int temponecount24114 = 0; int temponecount24115 = 0; int temponecount24107 = 0; for (int i = 0; i < dvIOC.Count; i++) { #region 任务暂停和恢复 ////20091128 //if ((dvIOC[i]["CONTROL_STATUS"].ToString() == "0") && (dvIOC[i]["CONTROL_ISRETURN"].ToString() == "3")) //{//任务恢复 // dbo.ExceSQL("update T_Manage_Task set FIntoStepOK=0 where (FID = " + Convert.ToInt32(dvIOC[i]["FID"]) + ") AND (F_ManageTASKKINDINDEX =1) and (FIntoStepOK='-')"); // dboM.ExceSQL("update IO_CONTROL set CONTROL_ISRETURN=0 where CONTROL_ID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // continue; //} //if ((dvIOC[i]["CONTROL_STATUS"].ToString() == "0") && (dvIOC[i]["CONTROL_ISRETURN"].ToString() == "2")) //{ //未拆分的任务暂停 // int rs = dbo.ExecuteSql("update T_Manage_Task set FIntoStepOK='-' where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) and (FIntoStepOK='0')"); // if (rs == 0) // { // //已拆分未执行的任务暂停 // dvMT = dbo.ExceSQL("select fid from T_Manage_Task where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) and (FIntoStepOK='1') and (FSTATUS=0)").Tables[0].DefaultView; // if (dvMT.Count > 0) // { // dbo.ExceSQL("delete from T_Monitor_Task where (F_ManageTaskIndex= " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) "); // dbo.ExceSQL("update T_Manage_Task set FIntoStepOK='-' where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) "); // } // } // //dboM.ExceSQL("update IO_CONTROL set CONTROL_ISRETURN=0 where CONTROL_ID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // continue; //} //else //{ // //上报管理FSTATUS=940 // #region 正在执行的任务暂停 // if (dvIOC[i]["CONTROL_ISRETURN"].ToString() == "2") // { // //正在执行的任务暂停 // dvMT = dbo.ExceSQL("select fid from T_Manage_Task where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) and (FIntoStepOK='1') and (FSTATUS>0)").Tables[0].DefaultView; // if (dvMT.Count > 0) // { // //只有暂停“正在运行的堆垛机非送货指令”或者“等待执行的堆垛机送货指令”,输送机无法暂停 // dvMT = dbo.ExceSQL("select F_MonitorIndex,F_Status,F_DeviceIndex,F_DeviceCommandIndex from T_Monitor_Task where (F_ManageTaskIndex= " + // Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) order by F_MonitorIndex asc").Tables[0].DefaultView; // if (dvMT.Count > 0) // { // if (ccf.GetDeviceKindIdx(Convert.ToInt32(dvMT[0]["F_DeviceIndex"])) == 1) // { // if ((dvMT[0]["F_DeviceCommandIndex"].ToString() == "5") && (Convert.ToInt32(dvMT[0]["F_Status"]) == 0)) // {//等待执行的堆垛机送货指令可以改道原货位 // dbo.ExceSQL("update T_Manage_Task set FExceptionNO='940' where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) "); // dbo.ExceSQL("update T_Monitor_Task set F_AheadDetect='',F_NumParam4=F_NumParam1,F_NumParam5=F_NumParam2,F_NumParam6=F_NumParam3 where F_MonitorIndex=" + dvMT[0]["F_MonitorIndex"]); // dbo.ExceSQL("update T_Monitor_Task set F_Status=-1 where F_MonitorIndex>" + dvMT[0]["F_MonitorIndex"] // + " and F_Status=0 and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // dvMT = dbo.ExceSQL("select * from T_Monitor_Task where F_Status=-1 and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Tables[0].DefaultView; // for (int ii = 0; ii < dvMT.Count; ii++) // { // cgs.ActionComplete(Convert.ToInt32(dvMT[ii]["F_DeviceIndex"]), Convert.ToInt32(dvMT[ii]["F_MonitorIndex"]), 900); // } // dbo.ExceSQL("update T_Manage_Task set FIntoStepOK='-' where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) "); // //dboM.ExceSQL("update IO_CONTROL set CONTROL_ISRETURN=0 where CONTROL_ID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // } // else if (dvMT[0]["F_DeviceCommandIndex"].ToString() == "2") // {//正在执行堆垛机将取指令,后续任务都取消;等待执行的堆垛机将取指令和后续任务都取消 // dbo.ExceSQL("update T_Manage_Task set FExceptionNO='940' where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) "); // dbo.ExceSQL("update T_Monitor_Task set F_Status=-1 where F_MonitorIndex>=" + dvMT[0]["F_MonitorIndex"] // + " and F_Status=0 and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // dvMT = dbo.ExceSQL("select * from T_Monitor_Task where F_MonitorIndex>=" + dvMT[0]["F_MonitorIndex"] // + " and F_Status=-1 and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Tables[0].DefaultView; // for (int ii = 0; ii < dvMT.Count; ii++) // { // cgs.ActionComplete(Convert.ToInt32(dvMT[ii]["F_DeviceIndex"]), Convert.ToInt32(dvMT[ii]["F_MonitorIndex"]), 900); // } // dbo.ExceSQL("update T_Manage_Task set FIntoStepOK='-' where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) "); // //dboM.ExceSQL("update IO_CONTROL set CONTROL_ISRETURN=0 where CONTROL_ID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // } // else if (dvMT[0]["F_DeviceCommandIndex"].ToString() == "4") // {//正在执行堆垛机取货指令,后续任务都改道原货位;等待执行的堆垛机取货指令和后续任务都取消 // dbo.ExceSQL("update T_Manage_Task set FExceptionNO='940' where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) "); // if (Convert.ToInt32(dvMT[0]["F_Status"]) >= 1) // { // dbo.ExceSQL("update T_Monitor_Task set F_AheadDetect='',F_NumParam4=F_NumParam1,F_NumParam5=F_NumParam2,F_NumParam6=F_NumParam3 where F_MonitorIndex>" + // dvMT[0]["F_MonitorIndex"] + " and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // //删除送货之后的输送机任务 // dvSend = dbo.ExceSQL("select F_MonitorIndex from T_Monitor_Task where F_DeviceIndex=" + dvMT[0]["F_DeviceIndex"] // + " and F_DeviceCommandIndex=5 and F_Status=0 and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Tables[0].DefaultView; // if (dvSend.Count > 0) // { // dbo.ExceSQL("update T_Monitor_Task set F_Status=-1 where F_MonitorIndex>" + dvSend[0]["F_MonitorIndex"] // + " and F_Status=0 and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // dvMT = dbo.ExceSQL("select * from T_Monitor_Task where F_MonitorIndex>" + dvSend[0]["F_MonitorIndex"] // + " and F_Status=-1 and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Tables[0].DefaultView; // for (int ii = 0; ii < dvMT.Count; ii++) // { // cgs.ActionComplete(Convert.ToInt32(dvMT[ii]["F_DeviceIndex"]), Convert.ToInt32(dvMT[ii]["F_MonitorIndex"]), 900); // } // } // //dboM.ExceSQL("update IO_CONTROL set CONTROL_ISRETURN=0 where CONTROL_ID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // } // else if (dvMT[0]["F_Status"].ToString() == "0") // { // dbo.ExceSQL("update T_Monitor_Task set F_Status=-1 where F_MonitorIndex>=" + dvMT[0]["F_MonitorIndex"] // + " and F_Status=0 and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // dvMT = dbo.ExceSQL("select * from T_Monitor_Task where F_MonitorIndex>=" + dvMT[0]["F_MonitorIndex"] // + " and F_Status=-1 and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["FID"])).Tables[0].DefaultView; // for (int ii = 0; ii < dvMT.Count; ii++) // { // cgs.ActionComplete(Convert.ToInt32(dvMT[ii]["F_DeviceIndex"]), Convert.ToInt32(dvMT[ii]["F_MonitorIndex"]), 900); // } // //dboM.ExceSQL("update IO_CONTROL set CONTROL_ISRETURN=0 where CONTROL_ID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // } // dbo.ExceSQL("update T_Manage_Task set FIntoStepOK='-' where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) "); // } // else if (dvMT[0]["F_DeviceCommandIndex"].ToString() == "3") // {//正在执行堆垛机将送指令,后续任务都改道原货位;等待执行的堆垛机将送指令和后续任务都改道原货位 // dbo.ExceSQL("update T_Manage_Task set FExceptionNO='940' where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) "); // if (dvMT[0]["F_Status"].ToString() == "0") // { // dbo.ExceSQL("update T_Monitor_Task set F_AheadDetect='',F_NumParam4=F_NumParam1,F_NumParam5=F_NumParam2,F_NumParam6=F_NumParam3 where F_MonitorIndex>=" + // dvMT[0]["F_MonitorIndex"] + " and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // //dboM.ExceSQL("update IO_CONTROL set CONTROL_ISRETURN=0 where CONTROL_ID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // } // else if (Convert.ToInt32(dvMT[0]["F_Status"]) >= 1) // { // dbo.ExceSQL("update T_Monitor_Task set F_AheadDetect='',F_NumParam4=F_NumParam1,F_NumParam5=F_NumParam2,F_NumParam6=F_NumParam3 where F_MonitorIndex>" + // dvMT[0]["F_MonitorIndex"] + " and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // //dboM.ExceSQL("update IO_CONTROL set CONTROL_ISRETURN=0 where CONTROL_ID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // } // //删除送货之后的输送机任务 // dvSend = dbo.ExceSQL("select F_MonitorIndex from T_Monitor_Task where F_DeviceIndex=" + dvMT[0]["F_DeviceIndex"] // + " and F_DeviceCommandIndex=5 and F_Status=0 and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Tables[0].DefaultView; // if (dvSend.Count > 0) // { // dbo.ExceSQL("update T_Monitor_Task set F_Status=-1 where F_MonitorIndex>" + dvSend[0]["F_MonitorIndex"] // + " and F_Status=0 and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // dvMT = dbo.ExceSQL("select * from T_Monitor_Task where F_MonitorIndex>" + dvSend[0]["F_MonitorIndex"] // + " and F_Status=-1 and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Tables[0].DefaultView; // for (int ii = 0; ii < dvMT.Count; ii++) // { // cgs.ActionComplete(Convert.ToInt32(dvMT[ii]["F_DeviceIndex"]), Convert.ToInt32(dvMT[ii]["F_MonitorIndex"]), 900); // } // } // dbo.ExceSQL("update T_Manage_Task set FIntoStepOK='-' where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) "); // } // } // continue; // } // } // } // #endregion //} #endregion bool UseOldRoute = false; #region 新任务 if ((dvIOC[i]["CONTROL_STATUS"].ToString() == Model.CGeneralFunction.TASKWAIT.ToString()) || (dvIOC[i]["CONTROL_STATUS"].ToString() == Model.CGeneralFunction.TASKSINGLEFORKRUN.ToString())) { bool Ifobtain = true; #region 流量控制 if (Convert.ToInt32(dvIOC[i]["CONTROL_TASK_TYPE"]) == 2) { DataView dvsptaskcount = new DataView(); DataView dvOutCount1 = new DataView(); dvsptaskcount = dbo.ExceSQL(string.Format("select f_deviceindex,f_maxcount from T_BASE_TASKCOUNT where f_deviceindex = {0}", Convert.ToInt32(dvIOC[i]["end_device_code"]))).Tables[0].DefaultView; int tempcount = 1000; if (dvsptaskcount.Count > 0) { if (Convert.ToInt32(dvIOC[i]["end_device_code"]) == Convert.ToInt32(dvsptaskcount[0]["f_deviceindex"])) { Model.MDevice devinfoX = Model.CGetInfo.GetDeviceInfo(Convert.ToInt32(dvIOC[i]["end_device_code"])); sbs.Remove(0, sbs.Length); sbs.Append("SELECT FSTATUS FROM T_Manage_Task where FENDDEVICE = '").Append(Convert.ToInt32(dvIOC[i]["end_device_code"])).Append("'"); dvOutCount1 = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; tempcount = 1000; if (Convert.ToInt32(dvsptaskcount[0]["f_maxcount"]) < tempcount) { tempcount = Convert.ToInt32(dvsptaskcount[0]["f_maxcount"]); } if (stacklane.IndexOf(Convert.ToString(dvIOC[i]["end_device_code"])) >= 0) { switch (Convert.ToInt32(dvIOC[i]["end_device_code"])) { case 12202: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12202 >= tempcount) { Ifobtain = false; } sbs.Remove(0, sbs.Length); sbs.Append("SELECT FLaneWay,FStack FROM ST_CELL where FCELLCODE='"); sbs.Append(dvIOC[i]["START_DEVICE_CODE"]).Append("' and FWAREHOUSE='").Append(dvIOC[i]["START_WAREHOUSE_CODE"]).Append("'"); DataView dvOutCount12202 = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (dvOutCount12202.Count > 0) { sbs.Remove(0, sbs.Length); sbs.Append("SELECT FSTATUS FROM T_Manage_Task where FSTATUS = 0 and FENDDEVICE = 12202 and fstartdevice = ").Append(Convert.ToString(dvOutCount12202[0]["FLaneWay"])); dvOutCount12202 = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (dvOutCount12202.Count > 1) { Ifobtain = false; } } break; case 12001: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12001 >= tempcount) { Ifobtain = false; } break; case 12007: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12007 >= tempcount) { Ifobtain = false; } break; case 12014: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12014 >= tempcount) { Ifobtain = false; } break; case 12020: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12020 >= tempcount) { Ifobtain = false; } break; case 12027: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12027 >= tempcount) { Ifobtain = false; } break; case 12033: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12033 >= tempcount) { Ifobtain = false; } break; case 12040: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12040 >= tempcount) { Ifobtain = false; } break; case 12046: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12046 >= tempcount) { Ifobtain = false; } break; case 12053: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12053 >= tempcount) { Ifobtain = false; } break; case 12060: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12060 >= tempcount) { Ifobtain = false; } break; case 12069: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12069 >= tempcount) { Ifobtain = false; } break; case 12076: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12076 >= tempcount) { Ifobtain = false; } break; case 12085: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12085 >= tempcount) { Ifobtain = false; } break; case 12092: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12092 >= tempcount) { Ifobtain = false; } break; case 12101: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12101 >= tempcount) { Ifobtain = false; } break; case 12204: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12204 >= tempcount) { Ifobtain = false; } break; case 12206: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12206 >= tempcount) { Ifobtain = false; } break; case 12208: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12208 >= tempcount) { Ifobtain = false; } break; case 12210: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12210 >= tempcount) { Ifobtain = false; } break; case 12212: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12212 >= tempcount) { Ifobtain = false; } break; case 12240: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12240 >= tempcount) { Ifobtain = false; } break; case 12247: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12247 >= tempcount) { Ifobtain = false; } break; case 12256: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12256 >= tempcount) { Ifobtain = false; } break; case 12263: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12263 >= tempcount) { Ifobtain = false; } break; case 12272: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12272 >= tempcount) { Ifobtain = false; } break; case 12279: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12279 >= tempcount) { Ifobtain = false; } break; case 12288: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12288 >= tempcount) { Ifobtain = false; } break; case 12295: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12295 >= tempcount) { Ifobtain = false; } break; case 12304: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12304 >= tempcount) { Ifobtain = false; } break; case 12311: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12311 >= tempcount) { Ifobtain = false; } break; case 12550: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12550 >= tempcount) { Ifobtain = false; } break; case 12720: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount12720 >= tempcount) { Ifobtain = false; } break; case 24101: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount24101 >= tempcount) { Ifobtain = false; } break; case 24108: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount24108 >= tempcount) { Ifobtain = false; } break; case 24109: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount24109 >= tempcount) { Ifobtain = false; } break; case 24110: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount24110 >= tempcount) { Ifobtain = false; } break; case 24102: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount24102 >= tempcount) { Ifobtain = false; } break; case 24111: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount24111 >= tempcount) { Ifobtain = false; } break; case 24103: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount24103 >= tempcount) { Ifobtain = false; } break; case 24104: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount24104 >= tempcount) { Ifobtain = false; } break; if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount24112 >= tempcount) { Ifobtain = false; } break; case 24105: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount24105 >= tempcount) { Ifobtain = false; } break; case 24113: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount24113 >= tempcount) { Ifobtain = false; } break; case 24106: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount24106 >= tempcount) { Ifobtain = false; } break; case 24114: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount24114 >= tempcount) { Ifobtain = false; } break; case 24115: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount24115 >= tempcount) { Ifobtain = false; } break; case 24107: if (devinfoX.SplitByte_0 + dvOutCount1.Count + temponecount24107 >= tempcount) { Ifobtain = false; } break; } } } } } DataView dvOutCount22128 = new DataView(); if (dvIOC[i]["END_DEVICE_CODE"].ToString() == "22128") { Model.MDevice devinfo22128; devinfo22128 = Model.CGetInfo.GetDeviceInfo(22128); sbs.Remove(0, sbs.Length); sbs.Append("SELECT FSTATUS FROM T_Manage_Task where FENDDEVICE='").Append(22128).Append("'"); dvOutCount22128 = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (devinfo22128.SplitByte_0 + dvOutCount22128.Count >= 1 && dvIOC[i]["END_DEVICE_CODE"].ToString() == "22128") { Ifobtain = false; } } DataView dvOutCount22130 = new DataView(); if (dvIOC[i]["END_DEVICE_CODE"].ToString() == "22130") { Model.MDevice devinfo22130; devinfo22130 = Model.CGetInfo.GetDeviceInfo(22130); sbs.Remove(0, sbs.Length); sbs.Append("SELECT FSTATUS FROM T_Manage_Task where FENDDEVICE='").Append(22130).Append("'"); dvOutCount22130 = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (devinfo22130.SplitByte_0 + dvOutCount22128.Count >= 1 && dvIOC[i]["END_DEVICE_CODE"].ToString() == "22130") { Ifobtain = false; } } DataView dvOutCount22155 = new DataView(); if (dvIOC[i]["END_DEVICE_CODE"].ToString() == "22155") { Model.MDevice devinfo22155; devinfo22155 = Model.CGetInfo.GetDeviceInfo(22155); sbs.Remove(0, sbs.Length); sbs.Append("SELECT FSTATUS FROM T_Manage_Task where FENDDEVICE='").Append(22155).Append("'"); dvOutCount22155 = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (devinfo22155.SplitByte_0 + dvOutCount22155.Count >= 1 && dvIOC[i]["END_DEVICE_CODE"].ToString() == "22155") { Ifobtain = false; } } #endregion #region 20120906判断是否是嘉兴一楼三个条码一起配叉任务,三个任务都存在时一起获取 //StringBuilder[] relBarcodes = GetRelativeBarCodes(dvIOC[i]["START_DEVICE_CODE"].ToString(), dvIOC[i]["STOCK_BARCODE"].ToString()); int[] relFID = null; //if (relBarcodes != null) //{ // relFID = new int[relBarcodes.GetLength(0)]; // int ri = 0; int tep = 0; // for (int j = 0; j < relBarcodes.GetLength(0); j++) // { // tep = GetIOControlFromBarcode(relBarcodes[j]); // if (tep <= 0) // { // Ifobtain = false; // } // else // { // relFID[ri] = tep; // ri++; // } // } //} #endregion if (Ifobtain == true) {//20120906全部获取后,一起关联多叉任务 if (relFID != null) { for (int j = 0; j < relFID.GetLength(0); j++) { ObtainDoubleForkTask(relFID[j], "0"); } } #region 20230815richard.liu东台晶澳连续出库任务远货位出库时查找是否有近货位的任务 如果有先获取 if (Convert.ToInt32(dvIOC[i]["CONTROL_TASK_TYPE"]) == 2) { object slaneway = dbo.GetSingle(string.Format("select flaneway from ST_CELL where fcellcode='{0}' and FWAREHOUSE='{1}'", dvIOC[i]["START_DEVICE_CODE"], dvIOC[i]["START_WAREHOUSE_CODE"])); if (slaneway != null) { int wmsZ = Convert.ToInt32(Convert.ToString(dvIOC[i]["START_DEVICE_CODE"]).Substring(0, 2)); StringBuilder sql = new StringBuilder(); sql.Append("select F_SENDZ from T_BASE_SENDROW WHERE F_WMSZ=").Append(wmsZ).Append(" and F_LANENO= ").Append(slaneway); object SENDZ = dbo.GetSingle(sql.ToString());//1,2,3,4 if (SENDZ != null) { int tempZ = Convert.ToInt32(SENDZ); StringBuilder newcode = new StringBuilder(""); if (tempZ == 4) { newcode.Append(string.Format("{0:D2}", wmsZ - 1) + Convert.ToString(dvIOC[i]["START_DEVICE_CODE"]).Substring(2, 6)); } else if (tempZ == 1) { if (Convert.ToInt32(dbo.GetSingle("select count(0) from T_BASE_SENDROW where F_LANENO=" + slaneway)) > 2)//判定为双伸 { newcode.Append(string.Format("{0:D2}", wmsZ + 1) + Convert.ToString(dvIOC[i]["START_DEVICE_CODE"]).Substring(2, 6)); } } sbs.Remove(0, sbs.Length); sbs.Append("select * from IO_CONTROL where (CONTROL_STATUS= 0) and START_WAREHOUSE_CODE='").Append(dvIOC[i]["START_WAREHOUSE_CODE"]).Append("' and START_DEVICE_CODE = '").Append(newcode).Append("'"); dvCopy = dboM.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (dvCopy.Count > 0) { ObtainDoubleForkTask(dvCopy[0]["CONTROL_ID"], "0"); if (stacklane.IndexOf(Convert.ToString(dvCopy[0]["end_device_code"])) >= 0) { switch (Convert.ToInt32(dvCopy[0]["end_device_code"])) { case 12202: temponecount12202++; break; case 12001: temponecount12001++; break; case 12007: temponecount12007++; break; case 12014: temponecount12014++; break; case 12020: temponecount12020++; break; case 12027: temponecount12027++; break; case 12033: temponecount12033++; break; case 12040: temponecount12040++; break; case 12046: temponecount12046++; break; case 12053: temponecount12053++; break; case 12060: temponecount12060++; break; case 12069: temponecount12069++; break; case 12076: temponecount12076++; break; case 12085: temponecount12085++; break; case 12092: temponecount12092++; break; case 12101: temponecount12101++; break; case 12204: temponecount12204++; break; case 12206: temponecount12206++; break; case 12208: temponecount12208++; break; case 12210: temponecount12210++; break; case 12212: temponecount12212++; break; case 12240: temponecount12240++; break; case 12247: temponecount12247++; break; case 12256: temponecount12256++; break; case 12263: temponecount12263++; break; case 12272: temponecount12272++; break; case 12279: temponecount12279++; break; case 12288: temponecount12288++; break; case 12295: temponecount12295++; break; case 12304: temponecount12304++; break; case 12311: temponecount12311++; break; case 12550: temponecount12550++; break; case 12720: temponecount12720++; break; case 24101: temponecount24101++; break; case 24108: temponecount24108++; break; case 24109: temponecount24109++; break; case 24110: temponecount24110++; break; case 24102: temponecount24102++; break; case 24111: temponecount24111++; break; case 24103: temponecount24103++; break; case 24104: temponecount24104++; break; case 24112: temponecount24112++; break; case 24105: temponecount24105++; break; case 24113: temponecount24113++; break; case 24106: temponecount24106++; break; case 24114: temponecount24114++; break; case 24115: temponecount24115++; break; case 24107: temponecount24107++; break; } } } } } } #endregion ObtainDoubleForkTask(dvIOC[i]["CONTROL_ID"], "0"); if (Convert.ToInt32(dvIOC[i]["CONTROL_TASK_TYPE"]) == 2) { if (stacklane.IndexOf(Convert.ToString(dvIOC[i]["end_device_code"])) >= 0) { switch (Convert.ToInt32(dvIOC[i]["end_device_code"])) { case 12202: temponecount12202++; break; case 12001: temponecount12001++; break; case 12007: temponecount12007++; break; case 12014: temponecount12014++; break; case 12020: temponecount12020++; break; case 12027: temponecount12027++; break; case 12033: temponecount12033++; break; case 12040: temponecount12040++; break; case 12046: temponecount12046++; break; case 12053: temponecount12053++; break; case 12060: temponecount12060++; break; case 12069: temponecount12069++; break; case 12076: temponecount12076++; break; case 12085: temponecount12085++; break; case 12092: temponecount12092++; break; case 12101: temponecount12101++; break; case 12204: temponecount12204++; break; case 12206: temponecount12206++; break; case 12208: temponecount12208++; break; case 12210: temponecount12210++; break; case 12212: temponecount12212++; break; case 12240: temponecount12240++; break; case 12247: temponecount12247++; break; case 12256: temponecount12256++; break; case 12263: temponecount12263++; break; case 12272: temponecount12272++; break; case 12279: temponecount12279++; break; case 12288: temponecount12288++; break; case 12295: temponecount12295++; break; case 12304: temponecount12304++; break; case 12311: temponecount12311++; break; case 12550: temponecount12550++; break; case 12720: temponecount12720++; break; case 24101: temponecount24101++; break; case 24108: temponecount24108++; break; case 24109: temponecount24109++; break; case 24110: temponecount24110++; break; case 24102: temponecount24102++; break; case 24111: temponecount24111++; break; case 24103: temponecount24103++; break; case 24104: temponecount24104++; break; case 24112: temponecount24112++; break; case 24105: temponecount24105++; break; case 24113: temponecount24113++; break; case 24106: temponecount24106++; break; case 24114: temponecount24114++; break; case 24115: temponecount24115++; break; case 24107: temponecount24107++; break; } } } string FUseAwayFork = "0"; if (relFID != null) { for (int j = 0; j < relFID.GetLength(0); j++) {//20120906分配一楼关联任务货叉 FUseAwayFork = GetFUseForkFromManage(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); ; sbs.Remove(0, sbs.Length); sbs.Append("update T_Manage_Task set FUseAwayFork=").Append(FUseAwayFork).Append(",F_RELATIVECONTORLID=").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(" where F_ManageTaskKindIndex=1").Append(" and FID=").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); //dbo.ExecuteSql(sbs.ToString()); CUpdateDBChangeEventArgs e = new CUpdateDBChangeEventArgs(dbo, sbs); OnUpdateDB(e); FUseAwayFork = GetFUseForkFromManage(relFID[j]); sbs.Remove(0, sbs.Length); sbs.Append("update T_Manage_Task set FUseAwayFork=").Append(FUseAwayFork).Append(",F_RELATIVECONTORLID=").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(" where F_ManageTaskKindIndex=1").Append(" and FID=").Append(relFID[j]); //dbo.ExecuteSql(sbs.ToString()); e = new CUpdateDBChangeEventArgs(dbo, sbs); OnUpdateDB(e); } } RecCount++; } } #endregion #region 修改路径的答复 #endregion } if (RecCount > 0) { //显示调度任务 CDataChangeEventArgs cea = new CDataChangeEventArgs(null, null); OnDataChange("获取到管理任务", cea); return RecCount; } else { //_CObtainTaskError = "没有获得任何调度任务!"; return 0; } } else { //_CObtainTaskError = "管理程序没有下达新的搬运任务!"; return 0; } #endregion } catch (Exception ex) { CObtainTaskError = string.Format("获得调度任务失败,{0}!", ex.StackTrace + ex.Message); //throw ex; return 0; } finally { dsIOC.Dispose(); dvIOC.Dispose(); DMAN.Dispose(); dv.Dispose(); dvc.Dispose(); dvmi.Dispose(); dvnew.Dispose(); } } } public static int dealwithHash(string operate, string sql)//解决委托积压问题20240726边智 { lock (lockThis) { int a = 0; try { if (operate == "add") { hashSet.Add(sql); a = 1; } if (operate == "remove") { hashSet.Remove(sql); a = 1; } if (operate == "find") { if (hashSet.Contains(sql)) { a = 1; } } return a; } catch { return 0; } } } private static string GetFUseForkFromManage(int p) { DataView dv = new DataView(); try { dv = dboM.ExceSQL(string.Format("SELECT START_DEVICE_CODE FROM IO_CONTROL WHERE (CONTROL_ID ={0})", p)).Tables[0].DefaultView; if (dv.Count > 0) { return dv[0]["START_DEVICE_CODE"].ToString().Trim().Substring(5, 1); } else { return "0"; } } catch (Exception ex) { CObtainTaskError = string.Format("获取任务时,查找任务的货叉GetFUseForkFromManage:{0}", ex.StackTrace+ex.Message ); return "0"; } finally { dv.Dispose(); } } static void RecordMaxManageTaskFID(int fid) { //20101124 StringBuilder sql = new StringBuilder(); DataSet ds= dbo.ExceSQL("select F_ManageTaskIndex from T_Base_Task_Index_Auto_Task"); DataView dv = ds.Tables[0].DefaultView; if (dv.Count > 0) { if (fid > Convert.ToInt32(dv[0]["F_ManageTaskIndex"])) { //20101124 sql.Append("UPDATE T_Base_Task_Index_Auto_Task SET F_ManageTaskIndex =" ).Append( fid); //dbo.ExceSQL(sql.ToString()); CUpdateDBChangeEventArgs e = new CUpdateDBChangeEventArgs(dbo, sql); OnUpdateDB(e); } } else { //20101124 sql.Append("INSERT INTO T_Base_Task_Index_Auto_Task (F_ManageTaskIndex)VALUES (" ).Append( fid ).Append( ")"); //dbo.ExceSQL(sql.ToString()); CUpdateDBChangeEventArgs e = new CUpdateDBChangeEventArgs(dbo, sql); OnUpdateDB(e); } } /// /// 20091005 /// 获取可用的目标位置:入库的巷道或者出库站台 /// /// T_Manage_Task表的行记录 /// public static void GetUsableDestination(DataRowView dr) { //20100610查找一个路径可用,任务数最少的终点设备 Dictionary advDev = new Dictionary(); object ob; //只修申请改调度任务的路径,不修改调度自动任务路径 if (dr["F_ManageTaskKindIndex"].ToString() != "1") return; StringBuilder sql=new StringBuilder();//20101124 string adviceDev = ""; sql.Append("SELECT F_TASKKIND, F_DESTINATION FROM T_Base_Destination WHERE (F_Warehouse='").Append(dr["FENDWAREHOUSE"]).Append("') and (F_TASKKIND = ").Append(dr["FCONTROLTASKTYPE"]).Append(") and (F_AbendStation=1) and (F_DESTINATION=").Append(dr["FENDDEVICE"]).Append(")");//20101124 DataTable dtd = dbo.ExceSQL(sql.ToString()).Tables[0];//20101124 if (dtd.Rows.Count > 0)//原来终点是应急站台那么还分配这个站台,不需要改变 { adviceDev = dtd.Rows[0]["F_DESTINATION"].ToString(); //20091005 return; } else { //查找可用目标位置 //20101124 sql.Remove(0, sql.Length); sql.Append("SELECT F_TASKKIND, F_DESTINATION FROM T_Base_Destination WHERE (F_Warehouse='").Append(dr["FENDWAREHOUSE"]).Append("') and (F_TASKKIND = ").Append(dr["FCONTROLTASKTYPE"]).Append(") and (F_DESTINATION !=").Append(dr["FENDDEVICE"]).Append(") and (F_AbendStation=0)"); DataTable dt = dbo.ExceSQL(sql.ToString()).Tables[0]; //20101124 if (dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { if (CDisassembleTask.MinRouteID(Convert.ToInt32(dr["FSTARTDEVICE"]), Convert.ToInt32(dt.Rows[i]["F_DESTINATION"]), dr["FUseAwayFork"]) != -1) { //20100610统计到终点设备正在执行的任务数 //20101124 sql.Remove(0, sql.Length); sql.Append("SELECT count(FENDDEVICE) as counts FROM T_Manage_Task where FENDDEVICE='" ).Append( dt.Rows[i]["F_DESTINATION"] ).Append( "' and fstatus>0"); ob = dbo.GetSingle(sql.ToString()); advDev.Add(Convert.ToInt32(dt.Rows[i]["F_DESTINATION"]), Convert.ToInt32(ob)); //20100610 adviceDev = dt.Rows[i]["F_DESTINATION"].ToString(); //break; } } if (advDev.Count == 0)//20100610 { return ; } else {//20100610 int mincount = 9999; foreach (int aaa in advDev.Keys) { if (advDev[aaa] < mincount) { mincount = advDev[aaa]; adviceDev = aaa.ToString(); } } if (adviceDev == "") { return ; } } } else { return; } } //DataView DV = dboM.ExceSQL("select IO_CONTROL_APPLY_SEQ.NEXTVAL FROM DUAL").Tables[0].DefaultView; //20101108int fid = dboM.GetManageTableIndex("IO_CONTROL_APPLY"); string dtime = DateTime.Now.ToString("u"); dtime = dtime.Substring(0, dtime.Length - 1); //20091128 dboM.TransBegin(); try { //20101124 sql.Remove(0, sql.Length); sql.Append(" update IO_CONTROL set CONTROL_STATUS=" ).Append( Model.CGeneralFunction.TASKALTERROUTEAPPLY ).Append( " where CONTROL_ID=" ).Append( dr["FID"] ); dboM.ExceSQL(sql.ToString()); //向管理申请修改任务// //20101124 int appid = dboM.GetManageTableIndex("IO_CONTROL_APPLY", true);//CONTROL_APPLY_ID sql.Remove(0, sql.Length); sql.Append("INSERT INTO IO_CONTROL_APPLY ( CONTROL_APPLY_ID,CONTROL_ID,CONTROL_APPLY_TYPE,WAREHOUSE_CODE, STOCK_BARCODE, DEVICE_CODE, APPLY_TASK_STATUS, CREATE_TIME, "); sql.Append(" CONTROL_APPLY_REMARK)").Append("VALUES (" ).Append(appid).Append(",").Append( dr["FID"] ).Append( ",2,'" ).Append( dr["FENDWAREHOUSE"] ).Append( "','" ).Append( dr["FPALLETBARCODE"] ).Append( "','" ).Append( adviceDev ).Append( "',0,'" ).Append( dtime ).Append( "',null)"); dboM.ExceSQL(sql.ToString()); dboM.TransCommit(); //20091102修改调度任务为不可拆分状态 //20101124 sql.Remove(0, sql.Length); sql.Append("update T_Manage_Task set FIntoStepOK='-' where (FID = " ).Append( Convert.ToInt32(dr["FID"]) ).Append( ") AND (F_ManageTASKKINDINDEX =1)"); dbo.ExceSQL(sql.ToString()); CommonClassLib.CCarryConvert.WriteDarkCasket("CObtainTask.GetUsableDestination", "获取任务时,向管理申请改道", "管理任务:" + dr["FID"].ToString(), "条码:" + dr["FPALLETBARCODE"].ToString().ToUpper()); } catch (Exception ex) { CObtainTaskError = string.Format("获取任务时,向管理申请改道:{0}", ex.StackTrace+ex.Message ); dboM.TransRollback(); } } public static bool IfDeleteOutTask(int fid, int deleteflag) { //20101124 try { if (1 != deleteflag) { return false; } StringBuilder strsql = new StringBuilder("select FIntoStepOK from T_Manage_Task where F_ManageTaskKindIndex=1 and FID= "); strsql.Append(fid ).Append( " and FIntoStepOK != '1' "); DataView dv = dbo.ExceSQL(strsql.ToString()).Tables[0].DefaultView; if (dv.Count > 0) { strsql.Remove(0, strsql.Length); strsql.Append("DELETE FROM T_Manage_Task WHERE (F_ManageTaskKindIndex = 1) AND (FID = " ).Append( fid ).Append( ")"); dbo.ExceSQL(strsql.ToString()); strsql.Remove(0, strsql.Length); strsql.Append("update IO_Control set CONTROL_STATUS=" ).Append( Model.CGeneralFunction.TASKCANCEL ).Append( " where CONTROL_ID=" ).Append( fid); dboM.ExceSQL(strsql.ToString()); return true; } else { return false; } } catch (Exception ex) { throw ex; } } /// /// 20101028获取关联任务,同时返回主任务的应该分配的货叉:距离控制柜由近及远货叉序号依次1,2,3,4;'-'代表未分配货叉 /// /// 关联任务FID /// 是否使用远货叉,默认值"-" /// static string ObtainDoubleForkTask(object RelativeControlID,string UseAwayFork) { StringBuilder sbs = new StringBuilder(); int i = 0; DataView dvl; object obj = null; string FSTARTCELL = ""; string FENDCELL = ""; char[] cc = new char[1] { '-' }; int FSTARTDEVICE = 0; int FENDDEVICE = 0; int FSTARTUCODE = 0; int FENDUCODE = 0; string LOGIC_AREA = string.Empty; string flaneway = "-1"; int stackno = -1; int FStartCol = 0, FStartLayer = 0, FEndCol = 0, FEndLayer = 0; try { //20101124 sbs.Remove(0, sbs.Length);//20101208 sbs.Append("select * from IO_CONTROL where CONTROL_ID=").Append(RelativeControlID); DataView dvIOC = dboM.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (dvIOC.Count == 0) return "-"; sbs.Remove(0, sbs.Length); sbs.Append("SELECT T_Base_Manage_Task_Kind.F_TaskKindIndex, "); sbs.Append("T_Manage_Task.F_ManageTaskKindIndex, T_Manage_Task.FID "); sbs.Append("FROM T_Base_Manage_Task_Kind , T_Manage_Task where "); sbs.Append("T_Base_Manage_Task_Kind.F_TaskKindIndex = T_Manage_Task.F_ManageTaskKindIndex "); sbs.Append(" and T_Base_Manage_Task_Kind.F_TaskKindIndex=1 and T_Manage_Task.FID = "); sbs.Append(RelativeControlID); dvl = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; //20101124 if (dvl.Count > 0)// 已经插入调度任务新记录 { return "-"; } int a = 0; if (int.TryParse(dvIOC[i]["START_DEVICE_CODE"].ToString(), out a) == false) {//货位编码 //20101124 sbs.Remove(0, sbs.Length); sbs.Append("SELECT FLaneWay,FStack FROM ST_CELL where FCELLCODE='"); sbs.Append(dvIOC[i]["START_DEVICE_CODE"]).Append("' and FWAREHOUSE='").Append(dvIOC[i]["START_WAREHOUSE_CODE"]).Append("'"); dvl = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; //20101124 if (dvl.Count > 0) { flaneway = dvl[0]["FLaneWay"].ToString(); stackno = Convert.ToInt32(dvl[0]["FStack"]);//20101028 FStartCol = Convert.ToInt32(dvIOC[i]["START_DEVICE_CODE"].ToString().Substring(3, 2)); FStartLayer = Convert.ToInt32(dvIOC[i]["START_DEVICE_CODE"].ToString().Substring(6, 2)); } } else { if (int.TryParse(dvIOC[i]["END_DEVICE_CODE"].ToString(), out a) == false) { //20101124 sbs.Remove(0, sbs.Length); sbs.Append("SELECT FLaneWay,FStack FROM ST_CELL where FCELLCODE='"); sbs.Append(dvIOC[i]["END_DEVICE_CODE"]); sbs.Append("' and FWAREHOUSE='").Append(dvIOC[i]["END_WAREHOUSE_CODE"]).Append("'"); dvl = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; //20101124 if (dvl.Count > 0) { flaneway = dvl[0]["FLaneWay"].ToString(); stackno = Convert.ToInt32(dvl[0]["FStack"]);//20101028 FEndCol = Convert.ToInt32(dvIOC[i]["END_DEVICE_CODE"].ToString().Substring(3, 2)); FEndLayer = Convert.ToInt32(dvIOC[i]["END_DEVICE_CODE"].ToString().Substring(6, 2)); } } } //20101028 //记录调度任务最大索引FID到表T_Base_Task_Index_Auto_Task RecordMaxManageTaskFID(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); if (int.TryParse(dvIOC[i]["START_DEVICE_CODE"].ToString(), out a) == true) { //20101124 sbs.Remove(0, sbs.Length); //sbs.Append("SELECT T_Base_AGV_Gate.F_ChannelsIndex FROM T_Base_Device,T_Base_AGV_Gate where T_Base_Device.F_DeviceIndex = T_Base_AGV_Gate.F_AGVGateDeviceIndex and (T_Base_Device.F_DeviceKindIndex = 9) and (F_AGVGateDeviceIndex = "); sbs.Append("SELECT T_Base_AGV_Gate.F_ChannelsIndex FROM T_Base_Device,T_Base_AGV_Gate where T_Base_Device.F_DeviceIndex = T_Base_AGV_Gate.F_AGVGateDeviceIndex and (T_Base_Device.F_DeviceKindIndex = 2) and (F_AGVGateDeviceIndex = "); sbs.Append(Convert.ToInt32(dvIOC[i]["START_DEVICE_CODE"])).Append(") "); obj = dbo.GetSingle(sbs.ToString()); if ((obj != null)) {//AGV站台编码 FSTARTDEVICE = Convert.ToInt32(obj); FSTARTCELL = dvIOC[i]["START_DEVICE_CODE"].ToString(); } else {//站台编码 FSTARTDEVICE = Convert.ToInt32(dvIOC[i]["START_DEVICE_CODE"]); FSTARTCELL = "-"; } } else {//货位编码 //20111020 sbs.Remove(0, sbs.Length); sbs.Append("SELECT FLaneWay,FUCODE,FUCONVEYOR FROM ST_CELL where FCELLCODE='").Append(dvIOC[i]["START_DEVICE_CODE"]) .Append("' and FWAREHOUSE='").Append(dvIOC[i]["START_WAREHOUSE_CODE"]).Append("'"); dvl = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (dvl.Count > 0) { FSTARTDEVICE = Convert.ToInt32(dvl[0]["FLaneWay"]); //if (dvl[0]["FUCODE"].ToString() != "0") //{ // FSTARTCELL = dvl[0]["FUCONVEYOR"].ToString(); // FSTARTUCODE = Convert.ToInt32(dvl[0]["FUCODE"]); //} //else //{ FSTARTCELL = dvIOC[i]["START_DEVICE_CODE"].ToString(); //} } else { CObtainTaskError = string.Format("获取任务时:没找到调度任务索引:{0},的起点位置!", dvIOC[i]["CONTROL_ID"].ToString()); return "-"; } //20111020 } if (int.TryParse(dvIOC[i]["END_DEVICE_CODE"].ToString(), out a) == true) { //20101124 sbs.Remove(0, sbs.Length); //sbs.Append("SELECT T_Base_AGV_Gate.F_ChannelsIndex FROM T_Base_Device,T_Base_AGV_Gate where T_Base_Device.F_DeviceIndex = T_Base_AGV_Gate.F_AGVGateDeviceIndex and (T_Base_Device.F_DeviceKindIndex = 9) and (F_AGVGateDeviceIndex = ") // .Append(Convert.ToInt32(dvIOC[i]["END_DEVICE_CODE"])).Append(") "); sbs.Append("SELECT T_Base_AGV_Gate.F_ChannelsIndex FROM T_Base_Device,T_Base_AGV_Gate where T_Base_Device.F_DeviceIndex = T_Base_AGV_Gate.F_AGVGateDeviceIndex and (T_Base_Device.F_DeviceKindIndex = 2) and (F_AGVGateDeviceIndex = ") .Append(Convert.ToInt32(dvIOC[i]["END_DEVICE_CODE"])).Append(") "); obj = dbo.GetSingle(sbs.ToString()); if ((obj != null)) {//AGV站台编码 FENDDEVICE = Convert.ToInt32(obj); FENDCELL = dvIOC[i]["END_DEVICE_CODE"].ToString(); } else {//站台编码 FENDDEVICE = Convert.ToInt32(dvIOC[i]["END_DEVICE_CODE"]); FENDCELL = "-"; } } else {//货位编码 //20111020 sbs.Remove(0, sbs.Length); sbs.Append("SELECT FLaneWay,FUCODE,FUCONVEYOR FROM ST_CELL where FCELLCODE='").Append(dvIOC[i]["END_DEVICE_CODE"]) .Append("' and FWAREHOUSE='").Append(dvIOC[i]["END_WAREHOUSE_CODE"]).Append("'"); dvl = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (dvl.Count > 0) { FENDDEVICE = Convert.ToInt32(dvl[0]["FLaneWay"]); //if (dvl[0]["FUCODE"].ToString() != "0") //{ // FENDCELL = dvl[0]["FUCONVEYOR"].ToString(); // FENDUCODE = Convert.ToInt32(dvl[0]["FUCODE"]); //} //else //{ FENDCELL = dvIOC[i]["END_DEVICE_CODE"].ToString(); //} } else { CObtainTaskError = string.Format("获取任务时:没找到调度任务索引:{0},的终点位置!", dvIOC[i]["CONTROL_ID"].ToString()); return "-"; } //20111020 } int FTASKLEVEL = 0;//空托盘组出库的优先级应该最大 FTASKLEVEL = dvIOC[i]["CONTROL_TASK_LEVEL"] == DBNull.Value ? 0 : Convert.ToInt32(dvIOC[i]["CONTROL_TASK_LEVEL"]); //DTJA增加出库到102车间任务 if (((dvIOC[i]["CONTROL_TASK_TYPE"].ToString() == "2") && (Convert.ToInt32(dvIOC[i]["END_DEVICE_CODE"])) > 24000) || (dvIOC[i]["CONTROL_TASK_TYPE"].ToString() == "3")) { FTASKLEVEL = 3; } else { FTASKLEVEL = 0; } #region 扬州晶澳效率添加逻辑订单批次号 //sbs.Remove(0, sbs.Length); //sbs.Append("SELECT HAVE_FLAG from T_BASE_HORT where F_DEVICE_INDEX= 22222"); //DataView dvTime = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; //int TImeLong = Convert.ToInt32(dvTime[0]["HAVE_FLAG"]); //DateTime TimeTask = Convert.ToDateTime(dvIOC[i]["CONTROL_BEGIN_TIME"]); //if ((DateTime.Now > TimeTask.AddMinutes(TImeLong)) && (Convert.ToInt32(dvIOC[i]["CONTROL_TASK_TYPE"]) == 2) && (FENDDEVICE != 14053))//如果时间已经超出设置值 //{ // sbs.Remove(0, sbs.Length); // sbs.Append("update IO_CONTROL SET CONTROL_TASK_LEVEL = 5 , CONTROL_REMARK = 1 where LOGIC_AREA = ").Append(dvIOC[i]["LOGIC_AREA"]).Append(" and CONTROL_REMARK != 1"); // int UPS = dboM.ExecuteSql(sbs.ToString()); // if (UPS > 0) // { // sbs.Remove(0, sbs.Length); // sbs.Append("update T_Manage_Task SET FTASKLEVEL = 5 where FLOGIC_AREA = ").Append(dvIOC[i]["LOGIC_AREA"]); // dbo.ExecuteSql(sbs.ToString()); // sbs.Remove(0, sbs.Length); // sbs.Append("update T_Monitor_Task SET F_MonitorTaskLevel = 5 where F_ChangeStackCell = ").Append(Convert.ToInt32(dvIOC[i]["LOGIC_AREA"])); // dbo.ExecuteSql(sbs.ToString()); // FTASKLEVEL = 5; // } //} #endregion if (UseAwayFork == "0") { string[] lc = new string[2] { "0", "0" }; devinfo = Model.CGetInfo.GetDeviceInfo(FSTARTDEVICE); if (devinfo != null) { if (int.TryParse(FSTARTCELL.ToString(), out a) == true) { //20101124 sbs.Remove(0, sbs.Length); sbs.Append("SELECT F_UseAwayFork FROM T_Base_AGV_Gate WHERE (F_ChannelsIndex=").Append(FSTARTDEVICE) .Append(") and ( F_AGVGateDeviceIndex= ").Append(FSTARTCELL).Append(")"); obj = dbo.GetSingle(sbs.ToString()).ToString(); //20101124 if (obj != null) {//AGV站台的双叉属性 UseAwayFork = obj.ToString(); } } else { if (devinfo.DeviceKind == 2) { UseAwayFork = devinfo.DoubleFork; } } if (FEndCol > 0) { UseAwayFork = ccf.GetLimitXForkNo(FEndCol, FENDDEVICE); } } if (UseAwayFork == "0") { devinfo = Model.CGetInfo.GetDeviceInfo(FENDDEVICE); if (devinfo != null) { if (int.TryParse(FENDCELL.ToString(), out a) == true) { ////20101124 sbs.Remove(0, sbs.Length); sbs.Append("SELECT F_UseAwayFork FROM T_Base_AGV_Gate WHERE (F_ChannelsIndex=").Append(FENDDEVICE) .Append(") and ( F_AGVGateDeviceIndex= ").Append(FENDCELL).Append(")"); obj = dbo.GetSingle(sbs.ToString()).ToString(); //20101124 if (obj != null) { UseAwayFork = obj.ToString(); } } else { if (devinfo.DeviceKind == 2) { UseAwayFork = devinfo.DoubleFork; } } if (FStartCol > 0) { UseAwayFork = ccf.GetLimitXForkNo(FStartCol, FSTARTDEVICE); } } } } //20230718richard.liu string CELL_MODEL = "1";//恒温库大小货位:1小货位,2大货位 int BOXBOS = 0;//版型标志 int CONTROL_FLAG = 0;//打带方式 string CONTROL_BATCH = "-";//成品发货装车订单或者批次号由小到大顺序获取 if (dvIOC[i]["CONTROL_TALL_LOW"] !=DBNull.Value) { CELL_MODEL =dvIOC[i]["CONTROL_TALL_LOW"].ToString(); } if (dvIOC[i]["PALLET_LENGTH_TYPE"] != DBNull.Value) { BOXBOS = Convert.ToInt32(dvIOC[i]["PALLET_LENGTH_TYPE"].ToString()); } if (dvIOC[i]["PALLET_STRAPPING_NUM"] != DBNull.Value) { CONTROL_FLAG = Convert.ToInt32(dvIOC[i]["PALLET_STRAPPING_NUM"]); } if (dvIOC[i]["CONTROL_BATCH"] != DBNull.Value) { CONTROL_BATCH = Convert.ToString(dvIOC[i]["CONTROL_BATCH"]); } int FSTATUS = 0; #region 初始化LOGIC_AREA //LOGIC_AREA = FENDDEVICE.ToString(); if (dvIOC[i]["LOGIC_AREA"] != DBNull.Value) { if (Convert.ToInt32(dvIOC[i]["CONTROL_TASK_TYPE"]) == 2) { LOGIC_AREA = Convert.ToString(dvIOC[i]["LOGIC_AREA"]); } else { LOGIC_AREA = "0"; } } else { LOGIC_AREA = FENDDEVICE.ToString(); } //扬州晶澳此字段值为逻辑订单批次号 #endregion //20111020 //P工装板,B标准,G高货位,D大货位 //object[] ob = new object[34] { dvIOC[i]["CONTROL_ID"], 1, dvIOC[i]["MANAGE_ID"], dvIOC[i]["RELATIVE_CONTROL_ID"], dvIOC[i]["STOCK_BARCODE"].ToString(), object[] ob = new object[34] { dvIOC[i]["CONTROL_ID"], 1, dvIOC[i]["MANAGE_ID"],-1, dvIOC[i]["STOCK_BARCODE"].ToString(), dvIOC[i]["MANAGE_TASK_TYPE"], dvIOC[i]["CONTROL_TASK_TYPE"],FTASKLEVEL,0,dvIOC[i]["START_WAREHOUSE_CODE"],FSTARTCELL,FSTARTDEVICE, dvIOC[i]["END_WAREHOUSE_CODE"] ,FENDCELL,FENDDEVICE,FSTATUS,Convert.ToDateTime(dvIOC[i]["CONTROL_BEGIN_TIME"]).ToString("yyyy-MM-dd HH:mm:ss"), dvIOC[i]["CONTROL_END_TIME"].ToString(),0,dvIOC[i]["CONTROL_REMARK"].ToString().Replace("'",""),flaneway,stackno,UseAwayFork,CONTROL_BATCH, LOGIC_AREA,FStartCol,FStartLayer,FEndCol,FEndLayer,FSTARTUCODE,FENDUCODE,BOXBOS,CONTROL_FLAG,CELL_MODEL}; sbs.Clear(); sbs.AppendFormat(string.Format("INSERT INTO T_Manage_Task(FID, F_ManageTaskKindIndex,FMANAGEID,F_RELATIVECONTORLID,FPALLETBARCODE,FMANAGETASKTYPE," + "FCONTROLTASKTYPE, FTASKLEVEL, FISRETURN,FSTARTWAREHOUSE, FSTARTCELL, FSTARTDEVICE,FENDWAREHOUSE,FENDCELL,FENDDEVICE, FSTATUS, FBEGTIME, FENDTIME," + "FIntoStepOK,FREMARK,FLANEWAY,FSTACK,FUseAwayFork,FCONTORL_BATCH,FLOGIC_AREA,FStartCol,FStartLayer,FEndCol,FEndLayer,FSTARTUCODE,FENDUCODE,BOXBOS,CONTROL_FLAG,CELL_MODEL)VALUES ({0},{1},{2},{3},'{4}'," + "'{5}',{6},{7},{8},'{9}','{10}',{11},'{12}','{13}',{14},{15},'{16}','{17}','{18}','{19}',{20},{21},'{22}','{23}','{24}',{25},{26},{27},{28},{29},{30},'{31}','{32}','{33}')", ob)); //int rc = dbo.ExecuteSql(sbs.ToString()); StringBuilder[] sbArray=new StringBuilder[2];//试试还有违反约束条件不 StringBuilder[] dbFactoryArray = new StringBuilder[2]; if (dealwithHash("find", sbs.ToString()) == 0)//解决委托积压问题20240726边智 { sbArray[0] = new StringBuilder(sbs.ToString()); dbFactoryArray[0] = new StringBuilder("DBFactory"); dealwithHash("add", sbs.ToString()); } else { return "0"; } //sbArray[0] = new StringBuilder(sbs.ToString()); //dbFactoryArray[0]= new StringBuilder("DBFactory"); CommonClassLib.CCarryConvert.WriteDarkCasket("CObtainTask", "获取任务:", ",条码[" + dvIOC[i]["STOCK_BARCODE"].ToString() + "]", ",CONTROL_ID:" + dvIOC[i]["CONTROL_ID"].ToString()); ob = null; //20111020 //if (rc == 0) return "-"; //else //{ if (dvIOC[i]["CONTROL_STATUS"].ToString() != Model.CGeneralFunction.TASKSINGLEFORKRUN.ToString()) { sbs.Clear(); sbs.Append("update IO_CONTROL set CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKCONTROLREADED) .Append(" where CONTROL_ID=").Append(dvIOC[i]["CONTROL_ID"]); // dboM.ExecuteSql(sbs.ToString());//试试还有违反约束条件不 if (dealwithHash("find", sbs.ToString()) == 0)//解决委托积压问题20240726边智 { sbArray[1] = new StringBuilder(sbs.ToString()); dbFactoryArray[1] = new StringBuilder("ManDBFactory"); dealwithHash("add", sbs.ToString()); } else { return "0"; } //sbArray[1] = sbs; //dbFactoryArray[1] = new StringBuilder("ManDBFactory"); } CUpdateDBChangeEventArgs e = new CUpdateDBChangeEventArgs(dbFactoryArray, sbArray); OnUpdateDB(e); return UseAwayFork; //} } catch (Exception ex) { CObtainTaskError = "ObtainDoubleForkTask,"+ex.StackTrace+ex.Message ; return "0"; } } //add for qdty static string ObtainNewTask(object RelativeControlID) { int i = 0; int AutoManageIdx = 0; DataView dvl; string FSTARTCELL = ""; string FENDCELL = ""; char[] cc = new char[1] { '-' }; int FSTARTDEVICE = 0; int FENDDEVICE = 0; int FSTARTUCODE = 0; int FENDUCODE = 0; int FControlTaskType = 0; string LOGIC_AREA = string.Empty; string flaneway = "-1"; int stackno = -1; int FStartCol = 0, FStartLayer = 0, FEndCol = 0, FEndLayer = 0; string slocation = ""; string dlocation = ""; try { //20101124 sbs.Remove(0, sbs.Length);//20101208 sbs.Append("select * from IDX_ASRS_RECEIVE where GROUPTASKID='").Append(RelativeControlID).Append("'"); DataView dvIOC = dboM.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (dvIOC.Count == 0) return "-"; sbs.Remove(0, sbs.Length); sbs.Append("SELECT T_Base_Manage_Task_Kind.F_TaskKindIndex, "); sbs.Append("T_Manage_Task.F_ManageTaskKindIndex, T_Manage_Task.FID "); sbs.Append("FROM T_Base_Manage_Task_Kind , T_Manage_Task where "); sbs.Append("T_Base_Manage_Task_Kind.F_TaskKindIndex = T_Manage_Task.F_ManageTaskKindIndex "); sbs.Append(" and T_Base_Manage_Task_Kind.F_TaskKindIndex=1 and T_Manage_Task.FREMARK = '"); sbs.Append(RelativeControlID).Append("'"); dvl = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; //20101124 if (dvl.Count > 0)// 插入调度任务新记录 { return "-"; } int a = 0; if (int.TryParse(dvIOC[i]["SLOCATION"].ToString(), out a) == true) { FSTARTDEVICE = Convert.ToInt32(dvIOC[i]["SLOCATION"]); FSTARTCELL = "-"; } else {//货位编码 //wms给回复的货位编码类似为R1B-01-02-01,所以需要去掉无用的前四个字符 if (dvIOC[i]["SLOCATION"].ToString().Length > 4) { slocation = dvIOC[i]["SLOCATION"].ToString().Substring(4); } //slocation = "01-02-01"; sbs.Remove(0, sbs.Length); sbs.Append("SELECT FLaneWay,FUCODE,FUCONVEYOR,FStack FROM ST_CELL where FCELLCODE='").Append(slocation).Append("'"); dvl = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (dvl.Count > 0) { flaneway = dvl[0]["FLaneWay"].ToString(); stackno = Convert.ToInt32(dvl[0]["FStack"]);//20101028 FSTARTDEVICE = Convert.ToInt32(dvl[0]["FLaneWay"]); FSTARTCELL = slocation; FStartCol = Convert.ToInt32(slocation.Substring(3, 2)); FStartLayer = Convert.ToInt32(slocation.Substring(6, 2)); } else { CObtainTaskError = string.Format("获取任务时:没找到调度任务索引:{0},的起点位置!", slocation); sbs.Remove(0, sbs.Length); sbs.Append("update IDX_ASRS_RECEIVE set TASKSTATUS=").Append(8).Append(",READTIME=sysdate") .Append(" where TASKTYPE = 'PK' and (TASKSTATUS=0 or TASKSTATUS=3) and GROUPTASKID='").Append(dvIOC[i]["GROUPTASKID"]).Append("'"); dboM.ExecuteSql(sbs.ToString()); return "-"; } } if (int.TryParse(dvIOC[i]["DLOCATION"].ToString(), out a) == true) { FENDDEVICE = Convert.ToInt32(dvIOC[i]["DLOCATION"]); FENDCELL = "-"; } else {//货位编码 //wms给回复的货位编码类似为R1B-01-02-01,所以需要去掉无用的前四个字符 if (dvIOC[i]["DLOCATION"].ToString().Length > 4) { dlocation = dvIOC[i]["DLOCATION"].ToString().Substring(4); } sbs.Remove(0, sbs.Length); sbs.Append("SELECT FLaneWay,FUCODE,FUCONVEYOR,FStack FROM ST_CELL where FCELLCODE='").Append(dlocation).Append("'"); dvl = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (dvl.Count > 0) { flaneway = dvl[0]["FLaneWay"].ToString(); stackno = Convert.ToInt32(dvl[0]["FStack"]); FENDDEVICE = Convert.ToInt32(dvl[0]["FLaneWay"]); FENDCELL = dlocation; FEndCol = Convert.ToInt32(dlocation.Substring(3, 2)); FEndLayer = Convert.ToInt32(dlocation.Substring(6, 2)); } else { CObtainTaskError = string.Format("获取任务时:没找到调度任务索引:{0},的终点位置!", dlocation); sbs.Remove(0, sbs.Length); sbs.Append("update IDX_ASRS_RECEIVE set TASKSTATUS=").Append(8).Append(",READTIME=sysdate") .Append(" where TASKTYPE = 'PK' and (TASKSTATUS=0 or TASKSTATUS=3) and GROUPTASKID='").Append(dvIOC[i]["GROUPTASKID"]).Append("'"); dboM.ExecuteSql(sbs.ToString()); return "-"; } //20111020 } if ((FENDCELL == "-") && (FSTARTCELL == "-")) { FControlTaskType = 4;//站台移库 } else if ((FENDCELL == "-") && (FSTARTCELL != "-")) { FControlTaskType = 2;//出库 } else if ((FENDCELL != "-") && (FSTARTCELL == "-")) { FControlTaskType = 1;//入库 } else { FControlTaskType = 3;//移库 } //记录并更新最大索引FID到表T_Base_Task_Index_Auto_Task AutoManageIdx = ccf.GetAndUpdateAutoManageIdx(); //RecordMaxManageTaskFID(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); int FTASKLEVEL = 0;//空托盘组出库的优先级应该最大 FTASKLEVEL = dvIOC[i]["PRIORITY"] == DBNull.Value ? 0 : Convert.ToInt32(dvIOC[i]["PRIORITY"]); int FSTATUS = 0; #region 初始化LOGIC_AREA LOGIC_AREA = FENDDEVICE.ToString(); #endregion string createtime = " "; if (dvIOC[i]["CREATIONTIME"].ToString() != "") { createtime = Convert.ToDateTime(dvIOC[i]["CREATIONTIME"]).ToString("yyyy-MM-dd HH:mm:ss"); } //扬州晶澳用现有字段记录是否叠托和打带类型 0为无动作 int BOXBOS = 0;//叠盘标志 int CONTROL_FLAG = 0;//打带方式 if (dvIOC[i]["CELL_MODEL"].ToString() != "") { BOXBOS = Convert.ToInt32(dvIOC[i]["CELL_MODEL"]); } if (dvIOC[i]["CELL_MODEL"].ToString() != "") { CONTROL_FLAG = Convert.ToInt32(dvIOC[i]["TASK_FLAG"]); } //20111020 //P工装板,B标准,G高货位,D大货位 object[] ob = new object[33] { AutoManageIdx, 1, dvIOC[i]["GROUPTASKSEQUENCE"], -1, dvIOC[i]["PALLETID"].ToString(), dvIOC[i]["FULLFLAG"], FControlTaskType,FTASKLEVEL,0,1,FSTARTCELL,FSTARTDEVICE, 1 ,FENDCELL,FENDDEVICE,FSTATUS,createtime, dvIOC[i]["COMPLETIONTIME"].ToString(),0,dvIOC[i]["GROUPTASKID"].ToString().Replace("'",""),flaneway,stackno,0,dvIOC[i]["PICKINGCARTONS"].ToString(), LOGIC_AREA,FStartCol,FStartLayer,FEndCol,FEndLayer,FSTARTUCODE,FENDUCODE,BOXBOS,CONTROL_FLAG}; sbs.Remove(0, sbs.Length); sbs.AppendFormat(string.Format("INSERT INTO T_Manage_Task(FID, F_ManageTaskKindIndex,FMANAGEID,F_RELATIVECONTORLID,FPALLETBARCODE,FMANAGETASKTYPE," + "FCONTROLTASKTYPE, FTASKLEVEL, FISRETURN,FSTARTWAREHOUSE, FSTARTCELL, FSTARTDEVICE,FENDWAREHOUSE,FENDCELL,FENDDEVICE, FSTATUS, FBEGTIME, FENDTIME," + "FIntoStepOK,FREMARK,FLANEWAY,FSTACK,FUseAwayFork,FCONTORL_BATCH,FLOGIC_AREA,FStartCol,FStartLayer,FEndCol,FEndLayer,FSTARTUCODE,FENDUCODE,BOXBOS,CONTROL_FLAG)VALUES ({0},{1},{2},{3},'{4}'," + "'{5}',{6},{7},{8},'{9}','{10}',{11},'{12}','{13}',{14},{15},'{16}','{17}','{18}','{19}',{20},{21},'{22}','{23}','{24}',{25},{26},{27},{28},{29},{30},'{31}','{32}')", ob)); int rc = dbo.ExecuteSql(sbs.ToString()); CommonClassLib.CCarryConvert.WriteDarkCasket("CObtainTask", "获取任务:", ",条码[" + dvIOC[i]["PALLETID"].ToString() + "]", ",GROUPTASKID:" + dvIOC[i]["GROUPTASKID"].ToString()); ob = null; //20111020 if (rc == 0) return "-"; else { if (dvIOC[i]["TASKSTATUS"].ToString() != Model.CGeneralFunction.TASKSINGLEFORKRUN.ToString()) { sbs.Remove(0, sbs.Length); sbs.Append("update IDX_ASRS_RECEIVE set TASKSTATUS=").Append(3).Append(",READTIME=sysdate") .Append(" where TASKTYPE = 'PK' and (TASKSTATUS=0) and GROUPTASKID='").Append(dvIOC[i]["GROUPTASKID"]).Append("'"); dboM.ExecuteSql(sbs.ToString()); } return "0"; } } catch (Exception ex) { CObtainTaskError = "ObtainDoubleForkTask," + ex.StackTrace + ex.Message; return "0"; } } private static int GetIOControlFromBarcode(StringBuilder stringBuilder) { DataView dv = new DataView(); try { dv = dboM.ExceSQL(string.Format("SELECT CONTROL_ID FROM IO_CONTROL WHERE (STOCK_BARCODE = '{0}')",stringBuilder)).Tables[0].DefaultView; if (dv.Count > 0) { return Convert.ToInt32(dv[0]["CONTROL_ID"]); } else { return 0; } } catch (Exception ex) { CObtainTaskError = string.Format("获取任务时,通过条码查找任务GetIOControlFromBarcode:{0}", ex.StackTrace+ex.Message ); return 0; } finally { dv.Dispose(); } } private static StringBuilder[] GetRelativeBarCodes(string startdevice,string BarCode) {//20140218 int binddev = 0; int.TryParse(startdevice, out binddev); if (binddev == 0) return null; StringBuilder[] RelativeBarCodes ; DataView dv = new DataView(); try { dv = dbo.ExceSQL(string.Format("SELECT F_FirstProject,F_BarcodeLength FROM T_Base_PLC_Ask WHERE F_BindingDevice ={1} and (F_FirstProject LIKE '%{0}%')", BarCode, binddev)).Tables[0].DefaultView; if (dv.Count > 0) { int bclength=Convert.ToInt32(dv[0]["F_BarcodeLength"]); int amount = Convert.ToInt32(dv[0]["F_FirstProject"].ToString().Length) / bclength; if (amount <= 1) return null; RelativeBarCodes = new StringBuilder[amount - 1]; for (int i = 0; i < (amount - 1); i++) { RelativeBarCodes[i] = new StringBuilder(""); } int getAmount = 0; StringBuilder sb = new StringBuilder(); for (int i = 0; i < amount; i++) { sb.Clear(); sb.Append(dv[0]["F_FirstProject"].ToString().Substring(i * bclength + i, bclength)); if (sb.ToString() != BarCode) { RelativeBarCodes[getAmount].Append(sb); getAmount++; } } return RelativeBarCodes; } else { return null; } } catch (Exception ex) { CObtainTaskError = string.Format("获取任务时,GetRelativeBarCodes判断是否存在多叉入库关联任务的条码:{0}", ex.StackTrace+ex.Message ); return null; } finally { dv.Dispose(); } } } }