using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using DBFactory;
using System.Threading;
using Microsoft.VisualBasic;
using CommonLib;
using ICommLayer;
namespace WcfControlMonitorLib
{
    /// <summary> 
    /// Creator:Richard.liu
    /// »ñÈ¡µ÷¶ÈÈÎÎñ
    /// </summary>
    public static class CObtainTask
    {
        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 Model.MDevice devinfo;
        static StringBuilder sbs = new StringBuilder();
        static StringBuilder temp = new StringBuilder();
        private static void BeginListen()
        {//20091107
            while (!exitThread )
            {
                GetManagerTask();
                
            }
        }
        public static void EndListen()
        {//20091107
            exitThread = true;
            
            if (mythread != null)
            {
                
                dbo.Close();
                dboM.Close();
                mythread.Abort();
                mythread = null;
            }
        }
        public static void StartListen()
        {
            exitThread = false;
            mythread = new Thread(new ThreadStart(BeginListen));
            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 = CStaticClass.dbo;//20130510
        static DBOperator dboM = CStaticClass.dboM;//20130510
        /// <summary>
        /// »ñµÃµ÷¶ÈÈÎÎñ
        /// </summary>
        public static int GetManagerTask()
        {
            //ÊÇ·ñ¿¼ÂÇͬʱ¶ÁÈ¡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();
            object obj = null;
            #region //ÊÜÁ÷Á¿ÏÞÖÆµÄ³ö¿âÈÎÎñ£¬±äÁ¿³õʼ»¯20151120
            StringBuilder startcell = new StringBuilder("");
            StringBuilder endcell = new StringBuilder("");
            StringBuilder notin = new StringBuilder(" and END_DEVICE_CODE not in (");
            #endregion

            try
            {
                int RecCount = 0;

                #region ÊÜÁ÷Á¿ÏÞÖÆµÄ³ö¿âÈÎÎñ£¬T_Base_TaskCountÓ¦¸Ã¿¼ÂǶÔÁ÷Á¿¿ØÖƵÄÇøÓòÔö¼ÓÓÅÏȼ¶//20151120
                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("'").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 FCONTROLTASKTYPE=2 and 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"]);
                    }
                    if (leftTask > 0)
                    {
                        #region µ½´ËÖÕµãµÄÈÎÎñ°´ÕÕÏïµÀµÈ´ýÖ´ÐкÍÖ´ÐÐÖÐÈÎÎñÊýÓÉСµ½´óÒÀ´Î³ö²æÊýÁ¿µÄÈÎÎñ
                        //
                        dvnew = dbo.ExceSQL(string.Format("SELECT F_StartDevice,(SELECT COUNT(FID) FROM T_Manage_Task where FSTARTDEVICE=F_StartDevice)+(SELECT count(F_MonitorIndex) FROM T_Monitor_Task where F_DeviceIndex =convert(int,'11'+ substring(convert(varchar,F_StartDevice),3,3)) and F_DeviceCommandIndex=5) as aaa  FROM T_Base_Route where F_EndDevice={0}  and F_RouteKind=2 order by aaa asc", Convert.ToInt32(dvc[i]["F_DeviceIndex"]))).Tables[0].DefaultView;//êɵú¹âÏÞÖÆ³ö¿â

                        for (int xd = 0; xd < dvnew.Count; xd++)
                        {
                            startcell.Clear();
                            if (CStaticClass.DBFactory == "OracleDBFactory")
                            {//20151120µ÷¶ÈϵͳoracleµÄÌØÊâÓï¾ä
                                obj = dbo.GetSingle(string.Format("SELECT FCELLCODE from ST_CELL where rownum=1 and FLaneWay={0} order by FCELLCODE asc", dvnew[xd]["F_StartDevice"]));
                            }
                            else
                            {
                                obj = dbo.GetSingle(string.Format("SELECT top 1 FCELLCODE from ST_CELL where FLaneWay={0} order by FCELLCODE asc", dvnew[xd]["F_StartDevice"]));
                            }
                            if (obj != null)
                            {
                                startcell.Append(obj.ToString());
                            }
                            else
                            {
                                startcell.Append("-");
                            }
                            endcell.Clear();
                            if (CStaticClass.DBFactory == "OracleDBFactory")
                            {//20151120µ÷¶ÈϵͳoracleµÄÌØÊâÓï¾ä
                                obj = dbo.GetSingle(string.Format("SELECT FCELLCODE from ST_CELL where rownum=1 and FLaneWay={0} order by FCELLCODE desc", dvnew[xd]["F_StartDevice"]));
                            }
                            else
                            {
                                obj = dbo.GetSingle(string.Format("SELECT top 1 FCELLCODE from ST_CELL where FLaneWay={0} order by FCELLCODE desc", dvnew[xd]["F_StartDevice"]));
                            }

                            if (obj != null)
                            {
                                endcell.Append(obj.ToString());
                            }
                            else
                            {
                                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 from IO_CONTROL where rownum<=").Append(forkcount);
                            }
                            else
                            {
                                sbs.Append("select top ").Append(forkcount).Append(" CONTROL_ID from IO_CONTROL  where CONTROL_TASK_TYPE=2 AND 1=1 ");//êɵú ¹âÏÞÖÆ³ö¿â
                            }
                            sbs.Append(" and CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKWAIT.ToString());//
                            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_BEGIN_TIME asc,CONTROL_ID asc ");
                            dvIOC = dboM.ExceSQL(sbs.ToString()).Tables[0].DefaultView;
                            {
                                for (int inew = 0; inew < dvIOC.Count; inew++) 
                                    ObtainDoubleForkTask(dvIOC[inew]["CONTROL_ID"], "0");                              
                            }
                            leftTask = leftTask - dvIOC.Count;
                            if (leftTask <= 0) break;
                        }
                        #endregion
                    }
                }
                notin.Append(")");
                #endregion

                #region ÏÞÖÆ»ñÈ¡µÄÅÅ»õλÏÞÖÆ

                temp.Remove(0, temp.Length);//20101208
                if (CStaticClass.ManZWhere.ToString().Length > 0)//20101124
                {
                    temp.Append(CStaticClass.ManZWhere.ToString());
                    temp.Replace("or", "and (", 0, 4);
                    temp.Append(")");
                }
                else
                {
                    temp.Append(" and 1=1");
                }
                #endregion

                #region 20210324_ÉϺ£êɵú£¬ÂÖѯÅжϼðѡվָ̨ʾµÆ×´Ì¬Óë¹ÜÀí±í¶©µ¥×´Ì¬ÊÇ·ñÒ»ÖÂ

                //dvIOC = dbo.ExceSQL("SELECT * FROM IO_Station_Status").Tables[0].DefaultView;
                //if(dvIOC.Count > 0)
                //{
                //    int iDeviceIndex;
                //    int iStatus;
                //    Model.MDevice deviceInfo = new Model.MDevice();
                //    for (int i = 0; i < dvIOC.Count; i++)
                //    {
                //        iDeviceIndex = Convert.ToInt32(dvIOC[i]["F_StationID"]);
                //        iStatus = Convert.ToInt32(dvIOC[i]["F_Status"]);
                //        deviceInfo = Model.CGetInfo.GetDeviceInfo(iDeviceIndex * 10 + 1);
                //        if(deviceInfo.ReturnMessage == null || deviceInfo.ReturnMessage[0] != iStatus)
                //        {
                //            witemnames[0].Clear();
                //            witemnames[0].Append(Model.CGeneralFunction.DBSend).Append(".").Append(Convert.ToString(deviceInfo.Dbw1Address + 0)).Append(",b");
                //            wv[0].Clear();
                //            wv[0].Append(iStatus.ToString());
                //            sdo = CommLayerFactory.CommModeCreate.CreateSendDeviceOrder(deviceInfo.DeviceIndex);
                //            sdo.WriteDBData(witemnames, wv, deviceInfo.S7Connection);
                //            int[] lStatus = { iStatus };
                //            deviceInfo.ReturnMessage = lStatus;
                //            CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "¸ü¸Ä¼ðѡվ̨ËþµÆÑÕÉ«", deviceInfo.DeviceIndex.ToString(), "¸ü¸ÄΪ£º" + iStatus);
                //        }
                //    }
                //}

                #endregion

                sbs.Remove(0, sbs.Length);//20110602Ôö¼Ó»ñÈ¡ÈÎÎñʱµÄ¶ÁÈ¡µ¥²æÖ´ÐеÄ״̬
                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(")) " + temp.ToString()).Append("  ").Append("and (CONTROL_TASK_TYPE<>2 or (CONTROL_TASK_TYPE=2 ").Append(notin).Append("))");//.Append(notin);//êɵú
                sbs.Append(" order by CONTROL_TASK_LEVEL desc,CONTROL_ID asc");//20151120
                dsIOC = dboM.ExceSQL(sbs.ToString());
                dvIOC = dsIOC.Tables[0].DefaultView;
                //string sstite, estite;
                if (dvIOC.Count > 0)
                {


                    string FENDCELL = ""; char[] cc = new char[1] { '-' };
                    int FENDDEVICE = 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()))
                        {
                            //20120906
                            #region ¿ØÖÆÈýËÄÂ¥µÄ³ö¿âÈÎÎñ£¬ÓÐÆäËûÅúºÅûͨ¹ýÖ÷µÀºÏÁ÷ɨÃèÆ÷¾Í²»»ñÈ¡ÈÎÎñ
                            ////42529;32710
                            //if (dvIOC[i]["END_DEVICE_CODE"].ToString().Length == 5)
                            //{
                            //    if (dvIOC[i]["END_DEVICE_CODE"].ToString().Substring(0, 1) == "3")
                            //    {
                            //        if (IFExitSameLayerUnSameEndDevice(dvIOC[i]["END_DEVICE_CODE"].ToString().Substring(0, 1), 32710, dvIOC[i]["END_DEVICE_CODE"].ToString()) == true)
                            //        {
                            //            continue;
                            //        }
                            //    }
                            //    else if (dvIOC[i]["END_DEVICE_CODE"].ToString().Substring(0, 1) == "4")
                            //    {
                            //        if (IFExitSameLayerUnSameEndDevice(dvIOC[i]["END_DEVICE_CODE"].ToString().Substring(0, 1), 42529, dvIOC[i]["END_DEVICE_CODE"].ToString()) == true)
                            //        {
                            //            continue;
                            //        }
                            //    }
                            //}
                            #endregion

                            #region ËÄÂ¥¼ì¶¨»Ø¿âÒ»Ì廯ƽ̨׼±¸·ÅÐУ¨²»Âú16Ï䣩
                            //46006\46007\46008£ºÕ¾Ì¨µ½Õ¾Ì¨£¬Ö±½Óת¸øµçÆø
                            if (("46006,46007,46008".IndexOf(dvIOC[i]["START_DEVICE_CODE"].ToString()) >= 0) &&
                                ("46006,46007,46008".IndexOf(dvIOC[i]["END_DEVICE_CODE"].ToString()) >= 0) &&
                                (dvIOC[i]["START_DEVICE_CODE"].ToString() == dvIOC[i]["END_DEVICE_CODE"].ToString()))
                            {
                                IntegrativeNotifyDischarging(Convert.ToInt32(dvIOC[i]["CONTROL_ID"]), Convert.ToInt32(dvIOC[i]["START_DEVICE_CODE"]));
                                continue;
                            }
                            #endregion
                            #region ËÄÂ¥¼ì¶¨»Ø¿âµÄÈý¸öµÀÂë¶â¿ØÖÆ46007£¬46008£¬46006---42639
                            //µçÆøÉêÇë·ÅÐк󣬹ÜÀíÏ´ïÈÎÎñ£¬µÚÒ»¸öÈÎÎñ¸øµçÆøÐ´Èë·ÅÐÐÐźţ¬µçÆø×Ô¼ºÇå³ý£¬·ÅÐк󣬼ǼÅúºÅ£¬ÏàͬÅúºÅ½ûÖ¹ÖØ¸´Ð´Èë·ÅÐÐÐźÅ
                            //ÕýÔÚ·ÅÐеĵ¥Ôª×îºóÒ»Ïäͨ¹ý42664ºóÇå³ý¼Ç¼ÅúºÅ£¬»ñÈ¡ÆäËûµ¥ÔªÈÎÎñ£»42664µÄF_BoxBarcode¼Ç¼ÅúºÅ£¬F_TaskIndex¼Ç¼·ÅÐе¥ÔªºÅ
                            if ("46007,46008,46006".IndexOf(dvIOC[i]["START_DEVICE_CODE"].ToString()) >= 0)
                            {
                                if (ManageSendDischargingTask(Convert.ToInt32(dvIOC[i]["START_DEVICE_CODE"]), dvIOC[i]["CONTORL_BATCH"].ToString(), 42664, Convert.ToInt32(dvIOC[i]["END_DEVICE_CODE"])) == false)
                                {
                                    continue;
                                }
                            }

                            #endregion

                            bool Ifobtain = true;
                            #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");
                                    }
                                }
                                ObtainDoubleForkTask(dvIOC[i]["CONTROL_ID"], "0");
                                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());
                                        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());
                                    }//
                                }
                                else
                                {
                                    if ("12055,12054,12053,12052".IndexOf(dvIOC[i]["START_DEVICE_CODE"].ToString().Substring(0, 5)) >= 0)
                                    {
                                        FUseAwayFork = GetFUseForkFromManage(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); ;
                                        sbs.Remove(0, sbs.Length);
                                        sbs.Append("update T_Manage_Task set FUseAwayFork=").Append(FUseAwayFork).Append(" where F_ManageTaskKindIndex=1").Append(" and FID=").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"]));
                                        dbo.ExecuteSql(sbs.ToString());
                                    }
                                }

                                RecCount++;
                            }
                        }

                        #endregion

                        #region Ð޸ķ¾¶µÄ´ð¸´

                        else if (dvIOC[i]["CONTROL_STATUS"].ToString() == Model.CGeneralFunction.TASKALTERROUTEREPLY.ToString())
                        {
                            int a = 0;
                            if (int.TryParse(dvIOC[i]["END_DEVICE_CODE"].ToString(), out a) == false)
                            {
                                //20101124
                                sbs.Remove(0, sbs.Length);
                                sbs.Append("SELECT FLaneWay FROM ST_CELL where FCELLCODE='").Append(dvIOC[i]["END_DEVICE_CODE"]).Append("' and FWAREHOUSE='").Append(dvIOC[i]["END_WAREHOUSE_CODE"]).Append("'");
                                obj = dbo.GetSingle(sbs.ToString());
                                //20101124
                                if (obj != null)
                                {
                                    FENDDEVICE = Convert.ToInt32(obj);
                                }
                                else
                                {
                                    CObtainTaskError = string.Format("»ñÈ¡ÈÎÎñµÄÐ޸ķ¾¶µÄ´ð¸´£ºÃ»ÕÒµ½µ÷¶ÈÈÎÎñË÷Òý£º{0},Ð޸ĺóµÄÖÕµãλÖã¡", dvIOC[i]["CONTROL_ID"].ToString());
                                    continue;
                                }
                                FENDCELL = dvIOC[i]["END_DEVICE_CODE"].ToString();
                                //20100304
                                if (ccf.GetExceptionNOFromManageTask(Convert.ToInt32(dvIOC[i]["CONTROL_ID"]), 1) == Model.CGeneralFunction.TASKREPEATINPUT)
                                {
                                    UseOldRoute = true;

                                }
                            }
                            else
                            {
                                FENDDEVICE = Convert.ToInt32(dvIOC[i]["END_DEVICE_CODE"]);
                                //20090910
                                if (ccf.GetExceptionNOFromManageTask(Convert.ToInt32(dvIOC[i]["CONTROL_ID"]), 1) == Model.CGeneralFunction.TASKREPEATINPUT)
                                {
                                    //20101124
                                    sbs.Remove(0, sbs.Length);
                                    sbs.Append("SELECT F_TASKKIND, F_DESTINATION FROM T_Base_Destination WHERE (F_TASKKIND = ").Append(dvIOC[i]["CONTROL_TASK_TYPE"]).Append(") and (F_AbendStation=1) and (F_DESTINATION=").Append(FENDDEVICE).Append(")");
                                    dv = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView;
                                    //20101124
                                    if (dv.Count > 0)//ÊÇÓ¦¼±Õ¾Ì¨£¬°ÑÔ­À´µÄÖÕµã¸ÄΪÆðµã¸ÄµÀÖÁÓ¦¼±Õ¾Ì¨
                                    {
                                        //20101124
                                        sbs.Remove(0, sbs.Length);
                                        sbs.Append("update T_Manage_Task set FSTARTDEVICE=FENDDEVICE,FSTARTCELL=FENDCELL where (FID = ").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX =1)");
                                        dbo.ExceSQL(sbs.ToString());
                                    }
                                    else
                                    {
                                        UseOldRoute = true;
                                    }

                                }
                                FENDCELL = "-";

                                #region 20101028ת»»AGVµÄ×ø±êΪͨµÀ

                                //20101124
                                sbs.Remove(0, sbs.Length);
                                sbs.Append("SELECT F_ChannelsIndex FROM T_Base_AGV_Gate WHERE (F_AGVGateDeviceIndex = ").Append(Convert.ToInt32(dvIOC[i]["END_DEVICE_CODE"])).Append(") ");
                                obj = dbo.GetSingle(sbs.ToString());

                                if (obj != null)
                                {
                                    FENDDEVICE = Convert.ToInt32(obj);
                                    FENDCELL = dvIOC[i]["END_DEVICE_CODE"].ToString();
                                }
                                else
                                {
                                    FENDDEVICE = Convert.ToInt32(dvIOC[i]["END_DEVICE_CODE"]);
                                    FENDCELL = "-";
                                }
                                #endregion
                            }
                            //20101124
                            sbs.Remove(0, sbs.Length);
                            sbs.Append("update T_Manage_Task set FENDDEVICE='").Append(FENDDEVICE).Append("',FENDCELL='").Append(FENDCELL).Append("' where (FID = ").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX =1)");
                            dbo.ExceSQL(sbs.ToString());
                            //ÒѾ­¿ªÊ¼Ö´ÐеÄÐèÒª¸ü¸Äµ÷¶ÈÈÎÎñ)
                            //20101124
                            sbs.Remove(0, sbs.Length);
                            sbs.Append("SELECT * FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX =1) AND (F_Status =3) order by F_MonitorIndex asc");
                            dvmi = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView;
                            if (dvmi.Count > 0)
                            {//ÒѾ­¿ªÊ¼Ö´ÐеÄÐèÒª¸ü¸Äµ÷¶ÈÈÎÎñ
                                //ÅжÏÉêÇëÐ޸ķ¾¶µÄµÚÒ»¸öµ÷¶ÈÈÎÎñ£º
                                int monitorIndex = (int)dvmi[0]["F_MonitorIndex"];
                                int associateMonitor = -1;
                                if (dvmi[0]["F_Associate"] != DBNull.Value)
                                {
                                    associateMonitor = Convert.ToInt32(dvmi[0]["F_Associate"]);
                                }
                                int devindex = Convert.ToInt32(dvmi[0]["F_DeviceIndex"]);
                                int devKind = ccf.GetDeviceKindIdx(Convert.ToInt32(dvmi[0]["F_DeviceIndex"]));
                                int devCommand = Convert.ToInt32(dvmi[0]["F_DeviceCommandIndex"]);
                                int routeID = Convert.ToInt32(dvmi[0]["F_RouteID"]);
                                int NumParam1 = Convert.ToInt32(dvmi[0]["F_NumParam1"]);
                                int NumParam4 = Convert.ToInt32(dvmi[0]["F_NumParam4"]);
                                string AheadDetect = dvmi[0]["F_AheadDetect"].ToString();



                                //20101124
                                sbs.Remove(0, sbs.Length);
                                sbs.Append("select * from T_Manage_Task where (FID = ").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX =1)");
                                DMAN = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView;
                                if (DMAN.Count > 0)
                                {


                                    //20091107
                                    int routeidNew = 0;
                                    if (UseOldRoute == false)
                                    {
                                        routeidNew = CDisassembleTask.MinRouteID(Convert.ToInt32(DMAN[0]["FSTARTDEVICE"]), Convert.ToInt32(DMAN[0]["FENDDEVICE"]), DMAN[0]["FUseAwayFork"]);
                                    }
                                    else
                                    {//970ËÍ»õʱ»õ¼ÜÓлõ£¬»¹ÊÇÓÃÔ­À´Â·¾¶
                                        routeidNew = routeID;
                                    }

                                    //20091005
                                    if (routeidNew == -1)
                                    {

                                        //¿¼ÂÇÖØÐÂÏò¹ÜÀíÉêÇë¸ÄµÀ
                                        if (CStaticClass.DeviceErrorAutoModifyRoutePath == "1")
                                        {//20091107
                                            GetUsableDestination(DMAN[0]);
                                        }

                                        continue;
                                    }
                                    //20091005
                                    //ɾ³ýÔ­À´µÄÉêÇëÐ޸ķ¾¶ÈÎÎñ£¬²ð·ÖеÄÈÎÎñ²¢ÇÒÖ»±£ÁôÏÖÓÐÉ豸¿ªÊ¼µÄÈÎÎñ
                                    //20101124
                                    sbs.Remove(0, sbs.Length);
                                    sbs.Append("DELETE FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX =1) AND (F_Status =3)");
                                    dbo.ExceSQL(sbs.ToString());
                                    //20090910
                                    if (CDisassembleTask.CreateMonitor(1, Convert.ToInt32(dvIOC[i]["CONTROL_ID"]), routeidNew, DMAN[0], 3) <= 0)
                                    {
                                        //ÖØÐÂÉú³ÉÉêÇëÐ޸ķ¾¶µÄÉêÇëÈÎÎñ
                                        sbs.Remove(0, sbs.Length);
                                        sbs.Append("INSERT INTO T_Monitor_Task ");
                                        sbs.Append("(F_ManageTaskIndex, F_ManageTASKKINDINDEX, F_MonitorIndex,F_MonitorTaskLevel,");
                                        sbs.Append(" F_DeviceIndex, F_DeviceCommandIndex, F_RouteID, F_Status,F_NumParam1, F_NumParam4,");
                                        sbs.Append(" F_AheadDetect,F_TxtParam)");
                                        sbs.Append("VALUES (").Append(dvIOC[i]["CONTROL_ID"]).Append(",1,").Append(monitorIndex)
                                            .Append(",1,").Append(devindex).Append(",").Append(devCommand).Append(",").Append(routeID)
                                            .Append(",3,").Append(NumParam1).Append(",").Append(NumParam4).Append(",'").Append(AheadDetect)
                                            .Append("','").Append(dvIOC[i]["STOCK_BARCODE"]).Append("')");
                                        dbo.ExceSQL(sbs.ToString());
                                        continue;
                                    }

                                    if (devKind == 4)
                                    {
                                        if (devCommand == 7)
                                        {
                                            int RGVsn = ccf.GetSerialNumberFromRouteDevice(routeID, devindex);
                                            int Consn = ccf.GetSerialNumberFromRouteDevice(routeID, NumParam1);

                                            #region RGVÔ˶¯µ½½Ó»õµã
                                            if (RGVsn > Consn)
                                            {
                                                //ɾ³ýRGVÔ˶¯µ½½Ó»õµã֮ǰµÄÈÎÎñ
                                                //20101124
                                                sbs.Remove(0, sbs.Length);
                                                sbs.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ");
                                                sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = ");
                                                sbs.Append(devindex).Append(") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = ").Append(routeidNew);
                                                sbs.Append(") AND (F_Status = 3)  AND (F_NumParam1 = ").Append(NumParam1).Append(")");
                                                dvnew = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView;
                                                if (dvnew.Count > 0)
                                                {
                                                    //20101124
                                                    sbs.Remove(0, sbs.Length);
                                                    sbs.Append("delete from T_Monitor_Task where F_MonitorIndex<").Append(dvnew[0]["F_MonitorIndex"]).Append(" and (F_ManageTaskIndex = ");
                                                    sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
                                                    dbo.ExceSQL(sbs.ToString());
                                                    //20101124
                                                    sbs.Remove(0, sbs.Length);
                                                    sbs.Append("update  T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = ");
                                                    sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
                                                    dbo.ExceSQL(sbs.ToString());
                                                }


                                            }
                                            #endregion

                                            #region RGVÔ˶¯µ½ËÍ»õµã
                                            if (RGVsn < Consn)
                                            {
                                                int RGVsn1 = ccf.GetSerialNumberFromRouteDevice(routeidNew, devindex);
                                                //ÕÒµ½½Ó»õÊäËÍ»úÉ豸Ë÷Òý
                                                List<int> nextcon = CDisassembleTask.GetNextDevice(routeidNew, RGVsn1);
                                                int condev = nextcon[0];
                                                //ɾ³ýRGVÔ˶¯µ½ËÍ»õµã֮ǰµÄÈÎÎñ
                                                //20101124
                                                sbs.Remove(0, sbs.Length);
                                                sbs.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ");
                                                sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = ");
                                                sbs.Append(devindex).Append(") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = ").Append(routeidNew);
                                                sbs.Append(") AND (F_Status = 3)  AND (F_NumParam1 = ").Append(condev).Append(")");
                                                dvnew = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView;
                                                if (dvnew.Count > 0)
                                                {
                                                    //20101124
                                                    sbs.Remove(0, sbs.Length);
                                                    sbs.Append("delete from T_Monitor_Task where F_MonitorIndex<").Append(dvnew[0]["F_MonitorIndex"]);
                                                    sbs.Append(" and (F_ManageTaskIndex = ").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
                                                    dbo.ExceSQL(sbs.ToString());
                                                    //20101124
                                                    sbs.Remove(0, sbs.Length);
                                                    sbs.Append("update  T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = ");
                                                    sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
                                                    dbo.ExceSQL(sbs.ToString());
                                                }

                                            }
                                            #endregion
                                        }

                                        #region RGVËÍ»õ

                                        if ((devCommand == 3) || (devCommand == 5))
                                        {
                                            int RGVsn = ccf.GetSerialNumberFromRouteDevice(routeidNew, devindex);
                                            //ÕÒµ½½Ó»õÊäËÍ»úÉ豸Ë÷Òý
                                            List<int> nextcon = CDisassembleTask.GetNextDevice(routeidNew, RGVsn);
                                            int condev = nextcon[0];
                                            //ɾ³ýRGVÔ˶¯µ½ËÍ»õµã֮ǰµÄÈÎÎñ
                                            //20101124
                                            sbs.Remove(0, sbs.Length);
                                            sbs.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ");
                                            sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = ");
                                            sbs.Append(devindex).Append(") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = ").Append(routeidNew);
                                            sbs.Append(") AND (F_Status = 3)  AND (F_NumParam1 = ").Append(condev).Append(")");
                                            dvnew = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView;
                                            if (dvnew.Count > 0)
                                            {
                                                //20101124
                                                sbs.Remove(0, sbs.Length);
                                                sbs.Append("delete from T_Monitor_Task where F_MonitorIndex<").Append(dvnew[0]["F_MonitorIndex"]).Append(" and (F_ManageTaskIndex = ");
                                                sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
                                                dbo.ExceSQL(sbs.ToString());
                                                //20101124
                                                sbs.Remove(0, sbs.Length);
                                                sbs.Append("update  T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = ");
                                                sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
                                                dbo.ExceSQL(sbs.ToString());
                                            }


                                        }
                                        #endregion

                                        #region RGV½Ó»õ
                                        if ((devCommand == 2) || (devCommand == 4))
                                        {
                                            int RGVsn = ccf.GetSerialNumberFromRouteDevice(routeidNew, devindex);
                                            //ÕÒµ½ËÍ»õÊäËÍ»úÉ豸Ë÷Òý
                                            List<int> priorcon = CDisassembleTask.GetPriorDevice(routeidNew, RGVsn);
                                            int condev = priorcon[0];
                                            //ɾ³ýRGVÔ˶¯µ½½Ó»õµã֮ǰµÄÈÎÎñ
                                            //20101124
                                            sbs.Remove(0, sbs.Length);
                                            sbs.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ");
                                            sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = ");
                                            sbs.Append(devindex).Append(") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = ").Append(routeidNew);
                                            sbs.Append(") AND (F_Status = 3)  AND (F_NumParam1 = ").Append(condev).Append(")");
                                            dvnew = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView;
                                            if (dvnew.Count > 0)
                                            {
                                                //20101124
                                                sbs.Remove(0, sbs.Length);
                                                sbs.Append("delete from T_Monitor_Task where F_MonitorIndex<").Append(dvnew[0]["F_MonitorIndex"]).Append(" and (F_ManageTaskIndex = ");
                                                sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
                                                dbo.ExceSQL(sbs.ToString());
                                                //20101124
                                                sbs.Remove(0, sbs.Length);
                                                sbs.Append("update  T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = ");
                                                sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
                                                dbo.ExceSQL(sbs.ToString());
                                            }


                                        }
                                        #endregion
                                    }
                                    if (devKind == 2)
                                    {
                                        #region ÊäËÍ»úËÍ»õ
                                        if (devCommand == 3)
                                        {
                                            int consn = ccf.GetSerialNumberFromRouteDevice(routeidNew, devindex);
                                            //ÕÒµ½½Ó»õRGVÉ豸Ë÷Òý
                                            List<int> nextrgv = CDisassembleTask.GetNextDevice(routeidNew, consn);
                                            int rgvdev = nextrgv[0];

                                            //ɾ³ýRGVÔ˶¯µ½½Ó»õµã֮ǰµÄÈÎÎñ
                                            //20101124
                                            sbs.Remove(0, sbs.Length);
                                            sbs.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ");
                                            sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = ");
                                            sbs.Append(rgvdev).Append(") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = ").Append(routeidNew);
                                            sbs.Append(") AND (F_Status = 3)  AND (F_NumParam1 = ").Append(devindex).Append(")");
                                            dvnew = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView;
                                            if (dvnew.Count > 0)
                                            {
                                                //20101124
                                                sbs.Remove(0, sbs.Length);
                                                sbs.Append("delete from T_Monitor_Task where F_MonitorIndex<").Append(dvnew[0]["F_MonitorIndex"]).Append(" and (F_ManageTaskIndex = ");
                                                sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
                                                dbo.ExceSQL(sbs.ToString());
                                                //20101124
                                                sbs.Remove(0, sbs.Length);
                                                sbs.Append("update  T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = ");
                                                sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
                                                dbo.ExceSQL(sbs.ToString());
                                            }

                                        }
                                        #endregion

                                        #region ÊäËÍ»úµÄ½Ó»õ

                                        if (devCommand == 4)
                                        {
                                            int consn = ccf.GetSerialNumberFromRouteDevice(routeID, devindex);
                                            //ÕÒµ½ËÍ»õRGVÉ豸Ë÷Òý
                                            List<int> priorrgv = CDisassembleTask.GetPriorDevice(routeID, consn);
                                            int rgvdev = priorrgv[0];
                                            int rgvsn = ccf.GetSerialNumberFromRouteDevice(routeidNew, rgvdev);
                                            List<int> nextdev = CDisassembleTask.GetNextDevice(routeidNew, rgvdev);
                                            int condev = nextdev[0];
                                            //ɾ³ýRGVÔ˶¯µ½ËÍ»õµã֮ǰµÄÈÎÎñ
                                            //20101124
                                            sbs.Remove(0, sbs.Length);
                                            sbs.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ");
                                            sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = ");
                                            sbs.Append(rgvdev).Append(") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = ").Append(routeidNew);
                                            sbs.Append(") AND (F_Status = 3)  AND (F_NumParam1 = ").Append(condev).Append(")");
                                            dvnew = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView;
                                            if (dvnew.Count > 0)
                                            {
                                                //20101124
                                                sbs.Remove(0, sbs.Length);
                                                sbs.Append("delete from T_Monitor_Task where F_MonitorIndex<").Append(dvnew[0]["F_MonitorIndex"]).Append(" and (F_ManageTaskIndex = ");
                                                sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
                                                dbo.ExceSQL(sbs.ToString());
                                                //20101124
                                                sbs.Remove(0, sbs.Length);
                                                sbs.Append("update  T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = ");
                                                sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
                                                dbo.ExceSQL(sbs.ToString());
                                            }

                                        }

                                        #endregion


                                        #region ÊäËÍ»úµÄËͳö
                                        if (devCommand == 6)
                                        {
                                            //20101124
                                            sbs.Remove(0, sbs.Length);
                                            sbs.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ");
                                            sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = ");
                                            sbs.Append(devindex).Append(") AND (F_DeviceCommandIndex = 6) AND (F_RouteID = ").Append(routeidNew).Append(") AND (F_Status = 3) ");
                                            dvnew = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView;
                                            if (dvnew.Count > 0)
                                            {
                                                //20101124
                                                sbs.Remove(0, sbs.Length);
                                                sbs.Append("delete from T_Monitor_Task where F_MonitorIndex<").Append(dvnew[0]["F_MonitorIndex"]).Append(" and (F_ManageTaskIndex = ");
                                                sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
                                                dbo.ExceSQL(sbs.ToString());
                                                int CurrentLocation = 0;
                                                //20101124
                                                sbs.Remove(0, sbs.Length);
                                                sbs.Append("SELECT FCurrentLocation FROM T_Manage_Task where FID=").Append(dvIOC[i]["CONTROL_ID"]).Append(" and F_ManageTaskKindIndex=1");
                                                dvc = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView;
                                                if (dvc.Count > 0)
                                                {
                                                    CurrentLocation = Convert.ToInt32(dvc[0]["FCurrentLocation"]);
                                                }
                                                if (CurrentLocation == 0) continue;
                                                //20101124
                                                sbs.Remove(0, sbs.Length);
                                                sbs.Append("update T_Monitor_Task set F_DeviceIndex=").Append(CurrentLocation).Append(" where F_MonitorIndex=").Append(dvnew[0]["F_MonitorIndex"]);
                                                dbo.ExceSQL(sbs.ToString());
                                                //20090910ÒѾ­°áÔ˵½CurrentLocation£¨F_NumParam4=CurrentLocation£© ɾ³ýËͳöÈÎÎñ
                                                //20101124
                                                sbs.Remove(0, sbs.Length);
                                                sbs.Append("delete from T_Monitor_Task where  F_DeviceIndex=").Append(CurrentLocation).Append(" and F_NumParam4=").Append(CurrentLocation);
                                                dbo.ExceSQL(sbs.ToString());
                                                //20091102
                                                //20101124
                                                sbs.Remove(0, sbs.Length);
                                                sbs.Append("update T_Base_Device set F_LockedState=0 where F_LockedState=").Append(monitorIndex);
                                                dbo.ExceSQL(sbs.ToString());
                                                //20101124
                                                sbs.Remove(0, sbs.Length);
                                                sbs.Append("update  T_Monitor_Task set F_Status =0 where  (F_ManageTaskIndex = ");
                                                sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
                                                dbo.ExceSQL(sbs.ToString());


                                            }
                                        }
                                        #endregion

                                    }
                                    #region ¶Ñ¶â»úµÄËÍ»õÖØºÍÆäËüÈÎÎñ
                                    if (devKind == 1)
                                    {
                                        //¶Ñ¶â»úµÄËÍ»õÖØ£¬Ö»±£Áô¶Ñ¶â»úµÄËÍ»õÈÎÎñ
                                        //20101124
                                        sbs.Remove(0, sbs.Length);
                                        sbs.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ");
                                        sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = ");
                                        sbs.Append(devindex).Append(") AND (F_DeviceCommandIndex = ").Append(devCommand).Append(") AND (F_RouteID = ").Append(routeidNew).Append(") AND (F_Status = 3)");
                                        dvnew = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView;
                                        if (dvnew.Count > 0)
                                        {
                                            //20101124
                                            sbs.Remove(0, sbs.Length);
                                            sbs.Append("delete from T_Monitor_Task where F_MonitorIndex<").Append(dvnew[0]["F_MonitorIndex"]).Append(" and (F_ManageTaskIndex = ");
                                            sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
                                            dbo.ExceSQL(sbs.ToString());
                                            //20101124
                                            sbs.Remove(0, sbs.Length);
                                            sbs.Append("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=").Append(devindex);
                                            dbo.ExceSQL(sbs.ToString());
                                            //20101124
                                            sbs.Remove(0, sbs.Length);
                                            sbs.Append("update  T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = ");
                                            sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
                                            dbo.ExceSQL(sbs.ToString());
                                        }


                                    }
                                    #endregion

                                }//20090910


                            }
                            else//δ²ð·ÖµÄ£¬ÐÞ¸ÄÄ¿±êλÖúÍ״̬(FSTATUS='40'½ûÓòð·ÖµÄFIntoStepOK='-'¸ÄΪFIntoStepOK='0'£»
                            {
                                //20091128±ØÐëʹÓÃFENDCELL
                                //20101124
                                sbs.Remove(0, sbs.Length);
                                sbs.Append("update T_Manage_Task set FENDDEVICE='").Append(FENDDEVICE).Append("',FENDCELL='").Append(FENDCELL).Append("', FIntoStepOK=0 where (FID = ").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX =1) and (FIntoStepOK='-')");
                                dbo.ExceSQL(sbs.ToString());
                            }
                            //ÐÞ¸ÄT_Manage_TaskµÄFLANEWAY£¬FSTACK
                            int flaneway = -1, stackno = -1;
                            if (int.TryParse(dvIOC[i]["START_DEVICE_CODE"].ToString(), out a) == false)
                            {//»õλ±àÂë
                                //20101124
                                sbs.Remove(0, sbs.Length);
                                sbs.Append("SELECT FLaneWay FROM ST_CELL where FCELLCODE='").Append(dvIOC[i]["START_DEVICE_CODE"]).Append("' and FWAREHOUSE='").Append(dvIOC[i]["START_WAREHOUSE_CODE"]).Append("'");
                                obj = dbo.GetSingle(sbs.ToString());
                                if (obj != null)
                                {
                                    flaneway = Convert.ToInt32(obj);
                                }
                            }
                            else
                            {
                                if (int.TryParse(dvIOC[i]["END_DEVICE_CODE"].ToString(), out a) == false)
                                {
                                    //20101124
                                    sbs.Remove(0, sbs.Length);
                                    sbs.Append("SELECT FLaneWay FROM ST_CELL where FCELLCODE='").Append(dvIOC[i]["END_DEVICE_CODE"]).Append("' and FWAREHOUSE='").Append(dvIOC[i]["END_WAREHOUSE_CODE"]).Append("'");
                                    obj = dbo.GetSingle(sbs.ToString());
                                    if (obj != null)
                                    {
                                        flaneway = Convert.ToInt32(obj);
                                    }
                                }
                            }
                            //20101124
                            sbs.Remove(0, sbs.Length);
                            sbs.Append("SELECT F_StackIndex, F_LaneNo FROM T_Base_StackInfo ");
                            sbs.Append(" where (F_LaneNo='").Append(flaneway).Append("') OR (F_LaneNo like '%").Append(";").Append(flaneway).Append("') OR (F_LaneNo='").Append(flaneway).Append(";").Append("%') ");

                            dv = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView;
                            if (dv.Count > 0)
                            {
                                stackno = Convert.ToInt32(dv[0]["F_StackIndex"]);
                            }
                            //20101124
                            sbs.Remove(0, sbs.Length);
                            sbs.Append("update dbo.T_Manage_Task set FLANEWAY=").Append(flaneway).Append(",FSTACK=").Append(stackno).Append(" where F_ManageTaskKindIndex=1 and FID=").Append(dvIOC[i]["CONTROL_ID"]);
                            dbo.ExceSQL(sbs.ToString());
                            //20091107
                            //20101124
                            sbs.Remove(0, sbs.Length);
                            sbs.Append("update IO_control set CONTROL_status=").Append(Model.CGeneralFunction.TASKRUN).Append(" where (CONTROL_ID = ").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(")");
                            dboM.ExceSQL(sbs.ToString());
                            CDataChangeEventArgs cea = new CDataChangeEventArgs(null, null);
                            OnDataChange("»ñÈ¡ÈÎÎñ£¬GetManagerTask", cea);
                        }

                        #endregion




                    }
                    if (RecCount > 0)
                    {
                        //ÏÔʾµ÷¶ÈÈÎÎñ
                        CDataChangeEventArgs cea = new CDataChangeEventArgs(null, null);
                        OnDataChange("»ñÈ¡µ½¹ÜÀíÈÎÎñ", cea);


                        return RecCount;
                    }
                    else
                    {
                        //_CObtainTaskError = "ûÓлñµÃÈκε÷¶ÈÈÎÎñ£¡";
                        return 0;
                    }
                }
                else
                {
                    //_CObtainTaskError = "¹ÜÀí³ÌÐòûÓÐÏ´ïеİáÔËÈÎÎñ£¡";
                    return 0;
                }
                //20091107

            }
            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();
            }
        }

       private static bool  ManageSendDischargingTask(int startdev, string batch, int ScanDeviceIdx,int arrowDev)
       {
           //startdev46006/46007/46008¹ÜÀí֪ͨPLC·ÅÐжÔÓ¦É豸ºÅ£ºÉ豸ºÅ+¡°3¡±
           //ScanDeviceIdx42664µÄF_BoxBarcode¼Ç¼ÅúºÅ£¬F_TaskIndex¼Ç¼·ÅÐе¥ÔªºÅ
           //arrowDevÊÇ42639¿ØÖÆÅúºÅ·ÅÐУ¬ÆäÓ಻¿ØÖÆ
           DataView dv = new DataView();
           try
           {
               if (arrowDev == 42639)
               {
                   sbs.Clear();
                   sbs.Append(string.Format("SELECT F_TaskIndex,F_BoxBarcode FROM T_Base_PLC_Ask WHERE (F_TaskIndex>0 and F_DeviceIndex = {0})", ScanDeviceIdx));
                   dv = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView;
                   if (dv.Count > 0)
                   {
                       if (dv[0]["F_TaskIndex"].ToString() == startdev.ToString() && dv[0]["F_BoxBarcode"].ToString() == batch)
                       {
                           return true;
                       }
                       else
                       {
                           return false;
                       }
                   }
               }
               
                devinfo = Model.CGetInfo.GetDeviceInfo(Convert.ToInt32(startdev.ToString() + "3"));

                witemnames[0].Clear();
                witemnames[0].Append("DB1." + devinfo.Dbw1Address.ToString()).Append(",b");
                wv[0].Clear();
                wv[0].Append("2");

                sdo = CommLayerFactory.CommModeCreate.CreateSendDeviceOrder(devinfo.DeviceIndex);
                if (sdo.WriteDBData(witemnames, wv,devinfo.S7Connection) == true)
                {
                    CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "¹ÜÀí֪ͨPLC·ÅÐÐ", startdev.ToString(), "ÅúºÅ£º" + batch);
                    if (arrowDev == 42639)
                    {
                        dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_TaskIndex = {0}, F_BoxBarcode = '{1}' WHERE (F_DeviceIndex = {2})", startdev, batch, ScanDeviceIdx));
                    }
                }
		return true;
           }
           catch (Exception ex)
           {
               RefreshMonitorEventArgs rme = new RefreshMonitorEventArgs("tsStatus", string.Format("»ñÈ¡ÈÎÎñIntegrativeNotifyDischargingʱ£º{0}", ex.StackTrace+ex.Message ));
               OnRefreshMonitor(rme);
               return false;
           }
           finally
           {
               dv.Dispose();
           }
       }

       private static bool IFExitSameLayerUnSameEndDevice(string layer, int barcodeBindDevice, string endDevice)
       {
           DataView dv = new DataView();
           try
           {
               dv = dbo.ExceSQL(string.Format("SELECT T_Monitor_Task.F_MonitorIndex, T_Manage_Task.FENDDEVICE, T_Monitor_Task.F_NumParam4 FROM T_Manage_Task,T_Monitor_Task where T_Manage_Task.FID = T_Monitor_Task.F_ManageTaskIndex and T_Manage_Task.F_ManageTaskKindIndex = T_Monitor_Task.F_ManageTASKKINDINDEX and (T_Manage_Task.FENDDEVICE LIKE '{0}%') AND (T_Manage_Task.FENDDEVICE <> '{1}') AND (T_Monitor_Task.F_NumParam4 = {2})", layer, endDevice, barcodeBindDevice)).Tables[0].DefaultView;
               if (dv.Count > 0)
               {
                   return true ;
               }
               else
               {
                   return false;
               }
           }
           catch (Exception ex)
           {
               CObtainTaskError = string.Format("»ñÈ¡ÈÎÎñʱ£¬ÅжÏÊÇ·ñÓÐͬ²ã²»Í¬¼ì¶¨µ¥ÔªÈÎÎñδͨ¹ýºÏÁ÷ɨÃèÆ÷IFExitSameLayerUnSameEndDevice£º{0}", ex.StackTrace+ex.Message );
               return false;
           }
           finally
           {
               dv.Dispose();
           }
       }

       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(long fid)
        {
            //20101124
            StringBuilder sql = new StringBuilder();
            
            DataSet ds= dbo.ExceSQL("select F_ManageTaskIndex from T_Base_Manage_Task_Index_Auto_Task");
            DataView dv = ds.Tables[0].DefaultView;
            if (dv.Count > 0)
            {
                if (fid > Convert.ToInt64(dv[0]["F_ManageTaskIndex"]))
                {
                    //20101124
                    sql.Append("UPDATE T_Base_Manage_Task_Index_Auto_Task SET F_ManageTaskIndex =" ).Append( fid);
                    dbo.ExceSQL(sql.ToString());
                }
            }
            else
            {
                //20101124
                sql.Append("INSERT INTO T_Base_Manage_Task_Index_Auto_Task (F_ManageTaskIndex)VALUES (" ).Append( fid ).Append( ")");
                dbo.ExceSQL(sql.ToString());
            }
        }
        /// <summary>
        /// 20091005
        /// »ñÈ¡¿ÉÓõÄÄ¿±êλÖãºÈë¿âµÄÏïµÀ»òÕß³ö¿âվ̨
        /// </summary>
        /// <param name="dr">T_Manage_Task±íµÄÐмǼ</param>
        /// <returns></returns>
        public static void GetUsableDestination(DataRowView dr)
        {
            //20100610²éÕÒÒ»¸ö·¾¶¿ÉÓã¬ÈÎÎñÊý×îÉÙµÄÖÕµãÉ豸
            Dictionary<int, int> advDev = new Dictionary<int, int>();
            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;
            }
        }
        /// <summary>
        /// 20101028»ñÈ¡¹ØÁªÈÎÎñ£¬Í¬Ê±·µ»ØÖ÷ÈÎÎñµÄÓ¦¸Ã·ÖÅäµÄ»õ²æ£º¾àÀë¿ØÖÆ¹ñÓɽü¼°Ô¶»õ²æÐòºÅÒÀ´Î1,2,3,4;'-'´ú±íδ·ÖÅä»õ²æ
        /// </summary>
        /// <param name="RelativeControlID">¹ØÁªÈÎÎñFID</param>
        /// <param name="UseAwayFork">ÊÇ·ñʹÓÃÔ¶»õ²æ£¬Ä¬ÈÏÖµ"-"</param>
        /// <returns></returns>
        static string ObtainDoubleForkTask(object RelativeControlID,string UseAwayFork)
        {
            
            
            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_Manage_Task_Index_Auto_Task
                RecordMaxManageTaskFID(Convert.ToInt64(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(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(") ");
                    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"]);
                if (FENDDEVICE == 22052 || FENDDEVICE == 22066)//µ½²ðÅ̼°µÄÈÎÎñ20170103
                {
                    FTASKLEVEL=100;
                }
                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);

                            }

                        }

                    }
                }


                int FSTATUS = 0;

                #region ³õʼ»¯LOGIC_AREA
                LOGIC_AREA = FENDDEVICE.ToString();

                #endregion

                //20111020
                //P¹¤×°°å,B±ê×¼,G¸ß»õλ,D´ó»õλ
                object[] ob = new object[31] { dvIOC[i]["CONTROL_ID"], 1, dvIOC[i]["MANAGE_ID"], dvIOC[i]["RELATIVE_CONTROL_ID"], dvIOC[i]["STOCK_BARCODE"].ToString(),
                1, 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,"",
                LOGIC_AREA,FStartCol,FStartLayer,FEndCol,FEndLayer,FSTARTUCODE,FENDUCODE};
                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)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})", ob));
                int rc = dbo.ExecuteSql(sbs.ToString());
                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.Remove(0, sbs.Length);
                        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());

                    }

                    return UseAwayFork;
                }
            }
            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.Substring(0,5), 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();
            }
        }
        /// <summary>
        /// ÊÇ·ñ´æÔÚͬһÂß¼­ÇøÓòÇÒ²»Í¬ÅúºÅµÄ³ö¿âÈÎÎñû¹ý·ÖµÀɨÃèÆ÷
        /// </summary>
        /// <param name="Batch">ÅúºÅ</param>
        /// <param name="Area">Âß¼­ÇøÓò</param>
        /// <returns></returns>
        static bool IfSameAreaExitElseBatch(string Batch, string Area)
        {
            try
            {
                object ob = null;
                sbs.Remove(0, sbs.Length);
                sbs.Append("SELECT FID FROM T_Manage_Task WHERE FCONTROLTASKTYPE=2 and F_ManageTaskKindIndex=1 and FLOGIC_AREA ='").Append(Area).Append("'");// 20110331AND FCONTORL_BATCH <> '").Append(Batch).Append("'
                DataView dv = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView;
                if (dv.Count > 0)
                {
                    for (int i = 0; i < dv.Count; i++)
                    {
                        sbs.Remove(0, sbs.Length);
                        sbs.Append("SELECT F_NumParam4 FROM T_Monitor_Task WHERE F_ManageTASKKINDINDEX = 1 AND F_ManageTaskIndex = ").Append(Convert.ToInt32(dv[i]["FID"]));//20110331
                        ob = dbo.ExecuteSql(sbs.ToString());
                        if (ob != null)
                        {
                            if (ob.ToString() == "12030")
                            {
                                return true;
                            }
                        }
                        else
                        {
                            return true;
                        }
                    }
                    return false;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception ex)
            {
                CObtainTaskError = string.Format("»ñÈ¡ÈÎÎñʱ£¬ÅжÏÊÇ·ñ´æÔÚͬһÂß¼­ÇøÓòÇÒ²»Í¬ÅúºÅµÄ³ö¿âÈÎÎñ£º{0}" , ex.StackTrace+ex.Message );
                return false;
            }
        }
        
        static void ManageTaskComplete(int fid,int mti)
        {
            DataView dv = dbo.ExceSQL("SELECT F_ManageTaskKindIndex, F_ManageTaskIndex,F_DeviceIndex,F_MonitorIndex,F_Status,F_DeviceCommandIndex " +
                    ",F_NumParam2,F_NumParam5,F_TxtParam FROM T_Monitor_Task Where  F_ManageTaskIndex=" + fid + " and F_ManageTaskKindIndex= " +
                    mti).Tables[0].DefaultView;
            if (dv.Count > 0)
            {
                
                for (int i = 0; i < dv.Count; i++)
                {
                    if (Convert.ToInt32(dv[i]["F_Status"]) >= 1)
                    {
                        cgs.ActionComplete(Convert.ToInt32(dv[i]["F_DeviceIndex"]), Convert.ToInt32(dv[i]["F_MonitorIndex"]), 1);
                    }
                    else
                    {
                        cgs.ActionComplete(Convert.ToInt32(dv[i]["F_DeviceIndex"]), Convert.ToInt32(dv[i]["F_MonitorIndex"]), Model.CGeneralFunction.TASKFINISH);
                    }
                }
                
            }
        }
        
        static void IntegrativeNotifyDischarging(int fid, int DeviceIdx)
        {//Ò»Ì廯ƽ̨֪ͨ׼±¸·ÅÐжÔÓ¦É豸£ºDeviceIdx+¡°1¡±
            DataView dv = new DataView();
            try
            {
                devinfo = Model.CGetInfo.GetDeviceInfo(Convert.ToInt32(DeviceIdx.ToString() + "1"));
                
                witemnames[0].Clear();
                witemnames[0].Append("DB1." + devinfo.Dbw1Address.ToString()).Append(",b");
                wv[0].Clear();
                wv[0].Append("2");

                sdo = CommLayerFactory.CommModeCreate.CreateSendDeviceOrder(devinfo.DeviceIndex);
                if (sdo.WriteDBData(witemnames, wv, devinfo.S7Connection) == true)
                {
                    CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "Ò»Ì廯ƽ̨֪ͨ׼±¸·ÅÐÐ", DeviceIdx.ToString(), "CONTROL_ID£º" + fid.ToString());
                    sbs.Remove(0, sbs.Length);
                    sbs.Append("update IO_CONTROL set CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKFINISH)
                        .Append(" where CONTROL_ID=").Append(fid);
                    dboM.ExecuteSql(sbs.ToString());
                }

            }
            catch (Exception ex)
            {
                RefreshMonitorEventArgs rme = new RefreshMonitorEventArgs("tsStatus", string.Format("»ñÈ¡ÈÎÎñIntegrativeNotifyDischargingʱ£º{0}", ex.StackTrace+ex.Message ));
                OnRefreshMonitor(rme);
                return;
            }
            finally
            {
                dv.Dispose();
            }
        }
    }
}