using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using DBFactory;
using System.Threading;
using Microsoft.VisualBasic;
using System.Windows.Forms;
using static ControlSystem.CreateMonitor;
using System.Data.SqlTypes;
using System.Linq;
namespace ControlSystem
{
///
/// Creator:Richard.liu
/// 获取调度任务
///
public static class CObtainTask
{
static CGetState cgs = new CGetState();
static CCommonFunction ccf = new CCommonFunction();
static Thread mythread;
static bool exitThread = false;//20091107
static Model.MDevice devinfo;
private static void BeginListen()
{//20091107
while (!exitThread )
{
try
{
GetManagerTask();
}
catch (Exception ex)
{
_CObtainTaskError = ex.Message;
}
}
}
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; }
}
static DBOperator dbo = new DBOperator();
static DBOperator dboM = new DBOperator("ManConnString", "ManDBFactory");
public static int IsInv = 0;//是否是盘库 0 不是 1是盘库
///
/// 获得调度任务
///
public static int GetManagerTask()
{
//是否考虑同时读取IO_CONTROLDETAIL表的数据到本地数据库
DataSet dsIOC ;
DataView dvIOC;
DataView dv;
DataView dvnew;
DataView dvmi;
DataView DMAN;
DataView dvc;
string[] wv = new string[1] { "2" };
string[] witemnames = new string[1];
object obj = null;
try
{
int RecCount = 0;
//等待执行的;已批复的申请改道的
string sql = "select * from IO_CONTROL where ((CONTROL_STATUS=" + Model.CGeneralFunction.TASKWAIT + ") or (CONTROL_STATUS=" + Model.CGeneralFunction.TASKALTERROUTEREPLY + ")) " + " order by CONTROL_TASK_LEVEL desc,CONTROL_ID asc";
dsIOC = dboM.ExceSQL(sql);
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
if (dvIOC[i]["MANAGE_TASK_TYPE"].ToString() == "3")
{
string Aisle = "18001";
if (dvIOC[i]["STOCK_BARCODE"].ToString() == "11002")
{
Aisle = "18002";
}
DataSet invs = dboM.ExceSQL($"select CellNo from PurchaseOrders_Inv where Aisle = '{Aisle}' group by CellNo");
var fullList = CreateMonitor.DataSetToList(invs);
var sortedList = fullList.OrderBy(item =>
{
var parts = item.CellNo.Split('-');
int row = int.Parse(parts[0]); // 排号
int col = int.Parse(parts[1]); // 列号
int layer = int.Parse(parts[2]); // 层号
return (col, layer, row);
}).ToList();
int startIndex = int.Parse(dvIOC[i]["STOCK_BARCODE"].ToString());
int CONTROL_ID = Convert.ToInt32(dvIOC[i]["CONTROL_ID"]);
foreach (var item in sortedList)
{
//盘库逻辑,拆分盘库任务
CreateMonitor.CreateMoveInv(startIndex, item.CellNo, 4,CONTROL_ID);//先取货
CreateMonitor.CreateMoveInv(startIndex, item.CellNo, 5, CONTROL_ID);//再放货
}
dboM.ExceSQL("update IO_control set CONTROL_status=" + Model.CGeneralFunction.TASKRUN + " where (CONTROL_ID = " + CONTROL_ID + ")");
if (CStaticClass.RealRefresh == true)
{
//显示设备指令
DataSet ds = dbo.ExceSQL("select * from V_Monitor_Task where " + CStaticClass.Monstatus);
FrmControlMonitor.FormInstance.MonitorRefresh(ds.Tables[0].DefaultView);
//显示调度任务
FrmControlMonitor.FormInstance.ManagerRefresh(
dbo.ExceSQL("select * from V_Manage_Task where " + CStaticClass.Manstatus).Tables[0].DefaultView);
}
IsInv = 1;
continue;
}
#region 不同结束位置任务数控制
string END_DEVICE_CODE = dvIOC[i]["END_DEVICE_CODE"].ToString();
int managecount = ManageCountControl(END_DEVICE_CODE);
DataView dvchaipan= dbo.ExceSQL("select * from T_Manage_Task where FENDDEVICE ='" + END_DEVICE_CODE + "'").Tables[0].DefaultView;
if (dvchaipan.Count >= managecount)
{
continue;
}
#endregion
bool UseOldRoute = false;
#region 新任务
//判断(FSTATUS='0')
if (dvIOC[i]["CONTROL_STATUS"].ToString() == Model.CGeneralFunction.TASKWAIT.ToString())
{
#region 20101011同一个逻辑区域可以同时执行的不同批次数在此控制
#endregion
string UseAwayFork="-";
//20100329双叉关联调度任务在此同时获取,否则等待,获取后并且直接分配远近货叉(增加一个函数处理关联任务的获取,返回主任务的远近货叉)
if (dvIOC[i]["RELATIVE_CONTROL_ID"].ToString() != "-1")
{
dv = dboM.ExceSQL("select CONTROL_ID from IO_CONTROL where CONTROL_ID=" + dvIOC[i]["RELATIVE_CONTROL_ID"] + "").Tables[0].DefaultView;
if (dv.Count > 0)
{
UseAwayFork = ObtainDoubleForkTask(dvIOC[i]["RELATIVE_CONTROL_ID"],"-");
RecCount++;
}
else
{
continue;
}
}
ObtainDoubleForkTask(dvIOC[i]["CONTROL_ID"],UseAwayFork);//主任务
RecCount++;
}
#endregion
#region 修改路径的答复
else if (dvIOC[i]["CONTROL_STATUS"].ToString() == Model.CGeneralFunction.TASKALTERROUTEREPLY.ToString())
{
if (Information.IsNumeric(dvIOC[i]["END_DEVICE_CODE"])==false )
{
obj = dbo.GetSingle("SELECT FLaneWay FROM ST_CELL where FCELLCODE='" + dvIOC[i]["END_DEVICE_CODE"] + "' and FWAREHOUSE='" + dvIOC[i]["END_WAREHOUSE_CODE"] + "'");
if (obj != null)
{
FENDDEVICE = Convert.ToInt32(obj);
}
else
{
_CObtainTaskError = "获取任务的修改路径的答复:没找到调度任务索引:" + 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)
{
dv = dbo.ExceSQL("SELECT F_TASKKIND, F_DESTINATION FROM T_Base_Destination WHERE (F_TASKKIND = " + dvIOC[i]["CONTROL_TASK_TYPE"] + ") and (F_AbendStation=1) and (F_DESTINATION=" + FENDDEVICE+ ")").Tables[0].DefaultView ;
if (dv.Count > 0)//是应急站台,把原来的终点改为起点改道至应急站台
{
dbo.ExceSQL("update T_Manage_Task set FSTARTDEVICE=FENDDEVICE,FSTARTCELL=FENDCELL where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1)");
}
else
{
UseOldRoute = true;
}
}
FENDCELL = "-";
#region 20101028转换AGV的坐标为通道
obj = dbo.GetSingle("SELECT F_ChannelsIndex FROM T_Base_AGV_Gate WHERE (F_AGVGateDeviceIndex = " + Convert.ToInt32(dvIOC[i]["END_DEVICE_CODE"]) + ") ");
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
}
dbo.ExceSQL("update T_Manage_Task set FExceptionNO=NULL,FENDDEVICE='" + FENDDEVICE + "',FENDCELL='" + FENDCELL + "' where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1)");
//已经开始执行的需要更改调度任务)
dvmi = dbo.ExceSQL("SELECT * FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) AND (F_Status =3) order by F_MonitorIndex asc").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();
////20090925 WHERE
DMAN = dbo.ExceSQL("select * from T_Manage_Task where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1)").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
//删除原来的申请修改路径任务,拆分新的任务并且只保留现有设备开始的任务
dbo.ExceSQL("DELETE FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) AND (F_Status =3)");
//20090910
if (CDisassembleTask.CreateMonitor(1, Convert.ToInt32(dvIOC[i]["CONTROL_ID"]), routeidNew, DMAN[0], 3) <= 0)
{
//重新生成申请修改路径的申请任务
sql = "INSERT INTO T_Monitor_Task " +
"(F_ManageTaskIndex, F_ManageTASKKINDINDEX, F_MonitorIndex,F_MonitorTaskLevel," +
" F_DeviceIndex, F_DeviceCommandIndex, F_RouteID, F_Status,F_NumParam1, F_NumParam4," +
" F_AheadDetect,F_TxtParam)" +
"VALUES (" + dvIOC[i]["CONTROL_ID"] + ",1," + monitorIndex + ",1," + devindex + "," + devCommand + "," + routeID + ",3," + NumParam1 + "," + NumParam4
+ ",'" + AheadDetect + "','" + dvIOC[i]["STOCK_BARCODE"] + "')";
dbo.ExceSQL(sql);
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运动到接货点之前的任务
dvnew = dbo.ExceSQL("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " +
Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = " +
devindex + ") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = " + routeidNew +
") AND (F_Status = 3) AND (F_NumParam1 = " + NumParam1 + ")").Tables[0].DefaultView;
if (dvnew.Count > 0)
{
dbo.ExceSQL("delete from T_Monitor_Task where F_MonitorIndex<" + dvnew[0]["F_MonitorIndex"] + " and (F_ManageTaskIndex = " +
Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
dbo.ExceSQL("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = " +
Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
}
}
#endregion
#region RGV运动到送货点
if (RGVsn < Consn)
{
int RGVsn1 = ccf.GetSerialNumberFromRouteDevice(routeidNew, devindex);
//找到接货输送机设备索引
List nextcon = CDisassembleTask.GetNextDevice(routeidNew, RGVsn1);
int condev = nextcon[0];
//删除RGV运动到送货点之前的任务
dvnew = dbo.ExceSQL("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " +
Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = " +
devindex + ") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = " + routeidNew +
") AND (F_Status = 3) AND (F_NumParam1 = " + condev + ")").Tables[0].DefaultView;
if (dvnew.Count > 0)
{
dbo.ExceSQL("delete from T_Monitor_Task where F_MonitorIndex<" + dvnew[0]["F_MonitorIndex"] + " and (F_ManageTaskIndex = " +
Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
dbo.ExceSQL("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = " +
Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
}
}
#endregion
}
#region RGV送货
if ((devCommand == 3) || (devCommand == 5))
{
int RGVsn = ccf.GetSerialNumberFromRouteDevice(routeidNew, devindex);
//找到接货输送机设备索引
List nextcon = CDisassembleTask.GetNextDevice(routeidNew, RGVsn);
int condev = nextcon[0];
//删除RGV运动到送货点之前的任务
dvnew = dbo.ExceSQL("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " +
Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = " +
devindex + ") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = " + routeidNew +
") AND (F_Status = 3) AND (F_NumParam1 = " + condev + ")").Tables[0].DefaultView;
if (dvnew.Count > 0)
{
dbo.ExceSQL("delete from T_Monitor_Task where F_MonitorIndex<" + dvnew[0]["F_MonitorIndex"] + " and (F_ManageTaskIndex = " +
Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
dbo.ExceSQL("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = " +
Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
}
}
#endregion
#region RGV接货
if ((devCommand == 2) || (devCommand == 4))
{
int RGVsn = ccf.GetSerialNumberFromRouteDevice(routeidNew, devindex);
//找到送货输送机设备索引
List priorcon = CDisassembleTask.GetPriorDevice(routeidNew, RGVsn);
int condev = priorcon[0];
//删除RGV运动到接货点之前的任务
dvnew = dbo.ExceSQL("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " +
Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = " +
devindex + ") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = " + routeidNew +
") AND (F_Status = 3) AND (F_NumParam1 = " + condev + ")").Tables[0].DefaultView;
if (dvnew.Count > 0)
{
dbo.ExceSQL("delete from T_Monitor_Task where F_MonitorIndex<" + dvnew[0]["F_MonitorIndex"] + " and (F_ManageTaskIndex = " +
Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
dbo.ExceSQL("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = " +
Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
}
}
#endregion
}
if (devKind == 2)
{
#region 输送机送货
if (devCommand == 3)
{
int consn = ccf.GetSerialNumberFromRouteDevice(routeidNew, devindex);
//找到接货RGV设备索引
List nextrgv = CDisassembleTask.GetNextDevice(routeidNew, consn);
int rgvdev = nextrgv[0];
//删除RGV运动到接货点之前的任务
dvnew = dbo.ExceSQL("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " +
Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = " +
rgvdev + ") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = " + routeidNew +
") AND (F_Status = 3) AND (F_NumParam1 = " + devindex + ")").Tables[0].DefaultView;
if (dvnew.Count > 0)
{
dbo.ExceSQL("delete from T_Monitor_Task where F_MonitorIndex<" + dvnew[0]["F_MonitorIndex"] + " and (F_ManageTaskIndex = " +
Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
dbo.ExceSQL("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = " +
Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
}
}
#endregion
#region 输送机的接货
if (devCommand == 4)
{
int consn = ccf.GetSerialNumberFromRouteDevice(routeID, devindex);
//找到送货RGV设备索引
List priorrgv = CDisassembleTask.GetPriorDevice(routeID, consn);
int rgvdev = priorrgv[0];
int rgvsn = ccf.GetSerialNumberFromRouteDevice(routeidNew, rgvdev);
List nextdev = CDisassembleTask.GetNextDevice(routeidNew, rgvdev);
int condev = nextdev[0];
//删除RGV运动到送货点之前的任务
dvnew = dbo.ExceSQL("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " +
Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = " +
rgvdev + ") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = " + routeidNew +
") AND (F_Status = 3) AND (F_NumParam1 = " + condev + ")").Tables[0].DefaultView;
if (dvnew.Count > 0)
{
dbo.ExceSQL("delete from T_Monitor_Task where F_MonitorIndex<" + dvnew[0]["F_MonitorIndex"] + " and (F_ManageTaskIndex = " +
Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
dbo.ExceSQL("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = " +
Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
}
}
#endregion
#region 输送机的送出
if (devCommand == 6)
{
dvnew = dbo.ExceSQL("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " +
Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = " +
devindex + ") AND (F_DeviceCommandIndex = 6) AND (F_RouteID = " + routeidNew +
") AND (F_Status = 3) ").Tables[0].DefaultView;
if (dvnew.Count > 0)
{
dbo.ExceSQL("delete from T_Monitor_Task where F_MonitorIndex<" + dvnew[0]["F_MonitorIndex"] + " and (F_ManageTaskIndex = " +
Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
int CurrentLocation = 0;
dvc = dbo.ExceSQL("SELECT FCurrentLocation FROM T_Manage_Task where FID=" + dvIOC[i]["CONTROL_ID"] + " and F_ManageTaskKindIndex=1").Tables[0].DefaultView;
if (dvc.Count > 0)
{
CurrentLocation = Convert.ToInt32(dvc[0]["FCurrentLocation"]);
}
if (CurrentLocation == 0) continue;
dbo.ExceSQL("update T_Monitor_Task set F_DeviceIndex=" + CurrentLocation + " where F_MonitorIndex=" + dvnew[0]["F_MonitorIndex"]);
//20090910已经搬运到CurrentLocation(F_NumParam4=CurrentLocation) 删除送出任务
dbo.ExceSQL("delete from T_Monitor_Task where F_DeviceIndex=" + CurrentLocation + " and F_NumParam4=" + CurrentLocation + "");
//20091102
dbo.ExceSQL("update T_Base_Device set F_LockedState=0 where F_LockedState=" + monitorIndex);
dbo.ExceSQL("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = " +
Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
}
}
#endregion
}
#region 堆垛机的送货重和其它任务
if (devKind == 1)
{
//堆垛机的送货重,只保留堆垛机的送货任务
dvnew = dbo.ExceSQL("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " +
Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = " +
devindex + ") AND (F_DeviceCommandIndex = " + devCommand + ") AND (F_RouteID = " + routeidNew +
") AND (F_Status = 3)").Tables[0].DefaultView;
if (dvnew.Count > 0)
{
dbo.ExceSQL("delete from T_Monitor_Task where F_MonitorIndex<" + dvnew[0]["F_MonitorIndex"] + " and (F_ManageTaskIndex = " +
Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
dbo.ExceSQL("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" + devindex + "");
dbo.ExceSQL("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = " +
Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)");
}
}
#endregion
}//20090910
}
else//未拆分的,修改目标位置和状态(FSTATUS='40'禁用拆分的FIntoStepOK='-'改为FIntoStepOK='0';
{
//20091128必须使用FENDCELL
dbo.ExceSQL("update T_Manage_Task set FENDDEVICE='" + FENDDEVICE + "',FENDCELL='" + FENDCELL + "', FIntoStepOK=0 where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) and (FIntoStepOK='-')");
}
//修改T_Manage_Task的FLANEWAY,FSTACK
int flaneway = -1, stackno = -1;
if (Information.IsNumeric(dvIOC[i]["START_DEVICE_CODE"]) == false)
{//货位编码
obj = dbo.GetSingle("SELECT FLaneWay FROM ST_CELL where FCELLCODE='" + dvIOC[i]["START_DEVICE_CODE"] + "' and FWAREHOUSE='" + dvIOC[i]["START_WAREHOUSE_CODE"] + "'");
if (obj != null)
{
flaneway =Convert.ToInt32( obj);
}
}
else
{
if (Information.IsNumeric(dvIOC[i]["END_DEVICE_CODE"]) == false)
{
obj = dbo.GetSingle("SELECT FLaneWay FROM ST_CELL where FCELLCODE='" + dvIOC[i]["END_DEVICE_CODE"] + "' and FWAREHOUSE='" + dvIOC[i]["END_WAREHOUSE_CODE"] + "'");
if (obj != null)
{
flaneway =Convert.ToInt32( obj);
}
}
}
string sss = "SELECT F_StackIndex, F_LaneNo FROM T_Base_StackInfo " +
" where (F_LaneNo='" + flaneway + "') OR (F_LaneNo like '%" + ";" + flaneway + "') OR (F_LaneNo='" + flaneway + ";" + "%') ";
dv = dbo.ExceSQL(sss).Tables[0].DefaultView;
if (dv.Count > 0)
{
stackno = Convert.ToInt32(dv[0]["F_StackIndex"]);
}
dbo.ExceSQL("update dbo.T_Manage_Task set FLANEWAY=" + flaneway + ",FSTACK=" + stackno + " where F_ManageTaskKindIndex=1 and FID=" + dvIOC[i]["CONTROL_ID"] + "");
//20091107
dboM.ExceSQL("update IO_control set CONTROL_status=" + Model.CGeneralFunction.TASKRUN + " where (CONTROL_ID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ")");
}
#endregion
}
if (RecCount > 0)
{
//显示调度任务
if (CStaticClass.RealRefresh == true)
{
FrmControlMonitor.FormInstance.ManagerRefresh(
dbo.ExceSQL("select * from V_Manage_Task where " + CStaticClass.Manstatus).Tables[0].DefaultView);
}
return RecCount;
}
else
{
//_CObtainTaskError = "没有获得任何调度任务!";
return 0;
}
}
else
{
#region 测试自动生成任务 20120916
// int havegood = CStaticClass.GetDevicePhotoelectric("12112.0");
// int[] status = new int[6];
//// status = CStaticClass.GetDeviceState(12111);
// status[1] = 0;
// if ((havegood ==1) && (status[1] == 0))
// {
// int AutoManageIdx = ccf.GetTempManageIdx();
// string dtime = DateTime.Now.ToString("u");//20101028
// dtime = dtime.Substring(0, dtime.Length - 1);//20101028
// string tempsql = " insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL,FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME,BOX_QUANTITY,UNPACK_QUANTITY,FStartCol,FStartLayer) values(" + AutoManageIdx + ",'343243243243243','1',2,'1','12112','-','1','12115','-',0,0,'-','" + dtime + "',0,0,0,0)";
// DataView tempdv= dbo.ExceSQL("select * from t_manage_task where FSTARTDEVICE =" + 12112).Tables[0].DefaultView;
// if (tempdv.Count <=0)
// {
// return 0;
// dbo.ExceSQL(tempsql);
// }
// }
//int havegood = CStaticClass.GetDevicePhotoelectric("12026.0");
//int[] status = new int[6];
//// status = CStaticClass.GetDeviceState(12111);
//status[1] = 0;
//if ((havegood == 1) && (status[1] == 0))
//{
// int AutoManageIdx = ccf.GetTempManageIdx();
// string dtime = DateTime.Now.ToString("u");//20101028
// dtime = dtime.Substring(0, dtime.Length - 1);//20101028
// string tempsql = " insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL,FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME,BOX_QUANTITY,UNPACK_QUANTITY,FStartCol,FStartLayer) values(" + AutoManageIdx + ",'343243243243243','1',2,'1','12026','-','1','12526','-',0,0,'-','" + dtime + "',0,0,0,0)";
// DataView tempdv = dbo.ExceSQL("select * from t_manage_task where FSTARTDEVICE =" + 12026).Tables[0].DefaultView;
// if (tempdv.Count <= 0)
// {
// dbo.ExceSQL(tempsql);
// }
// else
// {
// DataView tempdvmon = dbo.ExceSQL("select * from t_monitor_task where f_deviceindex =12026 ").Tables[0].DefaultView;
// if (tempdvmon.Count <= 0)
// {
// dbo.ExceSQL(tempsql);
// }
// }
//}
//int havegood = CStaticClass.GetDevicePhotoelectric("12026.0");
//int[] status = new int[6];
//// status = CStaticClass.GetDeviceState(12111);
//status[1] = 0;
//if ((havegood == 1) && (status[1] == 0))
//{
// int AutoManageIdx = ccf.GetTempManageIdx();
// string dtime = DateTime.Now.ToString("u");//20101028
// dtime = dtime.Substring(0, dtime.Length - 1);//20101028
// string tempsql = " insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL,FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME,BOX_QUANTITY,UNPACK_QUANTITY,FStartCol,FStartLayer) values(" + AutoManageIdx + ",'343243243243243','1',2,'1','12026','-','1','12043','-',0,0,'-','" + dtime + "',0,0,0,0)";
// DataView tempdv = dbo.ExceSQL("select * from t_manage_task where FSTARTDEVICE =" + 12026).Tables[0].DefaultView;
// if (tempdv.Count <= 0)
// {
// dbo.ExceSQL(tempsql);
// }
// else
// {
// }
//}
#endregion 测试自动生成任务
//_CObtainTaskError = "管理程序没有下达新的搬运任务!";
return 0;
}
}
catch (Exception ex)
{
_CObtainTaskError = "获得调度任务失败:" + ex.Message;
return 0;
}
finally
{
dsIOC=null;
dvIOC=null;
dv = null;
dvc = null;
dvmi = null;
dvnew = null;
}
}
///
/// 根据自动任务修改的获取出入库任务
///
/// 扫描到的托盘号
public static void GetWebManageTask(string gdata)
{
//任务状态已启动 托盘号是扫描到的
DataView dsIOC = dboM.ExceSQL($"select * from TaskDetails where TaskStatus = 1 and PalletNo='{gdata}'").Tables[0].DefaultView;
if (dsIOC.Count>0)
{
string Sql, _tasktype, _startposition, _startsite = "-", _endposition, _endsite = "-";
DataSet ds;
_tasktype = dsIOC[0]["TaskType"].ToString();//入库
_startposition = dsIOC[0]["SourceLocation"].ToString();//起始点
_endposition = dsIOC[0]["Aisle"].ToString();//巷道
int flaneway = 0;
int stackno = 0;
int startdevicekind = ccf.GetDeviceKindIdx(Convert.ToInt32(_startposition));//20110411
if (_tasktype == "2")//出库
{
_startsite = dsIOC[0]["SourceLocation"].ToString();//起点位置
flaneway = Convert.ToInt32(_startposition);
if (dbo.Exists("SELECT FID FROM ST_CELL where FCELLSTATUS<> '-1' and FLaneWay=" + flaneway + " and FCELLCODE='" + _startsite + "'") == false)
{
MessageBox.Show("起始位置和起始货位编码在数据库中没有记录!", "误操作提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
}
if (_tasktype == "1")//入库
{
_endsite = dsIOC[0]["TargetLocation"].ToString();//终点位置
flaneway = Convert.ToInt32(_endposition);
if (dbo.Exists("SELECT FID FROM ST_CELL where FCELLSTATUS<> '-1' and FLaneWay=" + flaneway + " and FCELLCODE='" + _endsite + "'") == false)
{
MessageBox.Show("终点位置和终点货位编码在数据库中没有记录!", "误操作提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
}
try
{
//20100304
Sql = "SELECT F_RouteID FROM T_Base_Route WHERE (F_StartDevice = " + _startposition + ") AND (F_EndDevice = " + _endposition + ")";
ds = dbo.ExceSQL(Sql).Tables[0].DataSet;
if (ds.Tables[0].DefaultView.Count <= 0)
{
MessageBox.Show("起始位置和结束位置不在有效路径的范围内!", "误操作提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
string FSTARTCELL = _startsite, FENDCELL = _endsite, UseAwayFork = "-";
int FSTARTDEVICE = Convert.ToInt32(_startposition); int FENDDEVICE = Convert.ToInt32(_endposition);
devinfo = Model.CGetInfo.GetDeviceInfo(FSTARTDEVICE);
stackno = Convert.ToInt32(dbo.GetSingle("SELECT F_StackIndex FROM T_Base_LaneInfo WHERE (F_LaneDeviceIndex = " + flaneway + ")"));//20101028
string dtime = DateTime.Now.ToString("u");//20101028
dtime = dtime.Substring(0, dtime.Length - 1);//20101028
int AutoManageIdx = ccf.GetTempManageIdx();
//插入临时调度任务T_Manage_Task(监控下的调度任务):
int startcol = 0, startlayer = 0;//20110411
if (startdevicekind == 10)//出库或是巷道内移库任务
{
startcol = Convert.ToInt32(_startsite.Substring(3, 2));
startlayer = Convert.ToInt32(_startsite.Substring(6, 2));
}
Sql = "insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL," +
"FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME,UNPACK_QUANTITY,BOX_QUANTITY,FStartCol,FStartLayer) " +
"values(" + AutoManageIdx + ",'" + dsIOC[0]["RFID"].ToString() + "','" + _tasktype + "',2,'" + ccf.GetWarehouseIndex() + "','" + _startposition + "','" + _startsite + "','" + ccf.GetWarehouseIndex() + "','"
+ _endposition + "','" + _endsite + "'," + flaneway + "," + stackno + ",'" + UseAwayFork + "','" + dtime + "'," + 1 + "," + int.Parse(dsIOC[0]["TaskQty"].ToString()) + "," + startcol + "," + startlayer + ")";//20101028
ds = dbo.ExceSQL(Sql);
}
catch (Exception ex)
{
throw ex;
}
}
}
///
/// 本行记录是否需要软确认
///
/// 行视图
/// true必须软确认;false无需软确认
public static bool IfSoftConfirm(string FCONTROLTASKTYPE)
{
try
{
DataSet ds = dbo.ExceSQL("SELECT FCODE, FSOFTCONFIRM FROM T_ITEMTASKTYPE where FCODE='" + FCONTROLTASKTYPE+"'");
if (ds.Tables[0].DefaultView.Count > 0)
{
if (ds.Tables[0].DefaultView[0]["FSOFTCONFIRM"].ToString() == "1")
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
catch (Exception ex)
{
throw ex;
}
}
static void FeedBackConfirm(int FID, int FSTARTDEVICE)
{
//判断每个任务的第一个设备FSTARTDEVICE是否空闲???
try
{
DataSet dsS = dbo.ExceSQL("SELECT F_DeviceIndex,F_LockedState FROM T_Base_Device Where F_DeviceIndex=" + FSTARTDEVICE + "and F_LockedState=0");
if (dsS.Tables[0].DefaultView.Count > 0)
{
DataSet ds = dboM.ExceSQL("update IO_CONTROL set CONTROL_STATUS='2' where CONTROL_ID=" + FID);
}
}
catch (Exception ex)
{
throw ex;
}
}
///
/// 获得FSTARTCELL或者FENDCELL
///
/// IO_CONTROL的主键FID
/// 设备索引
/// 堆垛机001取坐标;002送坐标
/// 返回FSTARTCELL或者FENDCELL
static string GetSite(int fid, int devidx, string kind)
{
try
{
DataSet ds = dbo.ExceSQL("SELECT F_DeviceIndex, F_DeviceKindIndex FROM T_Base_Device where F_DeviceKindIndex=10 and F_DeviceIndex=" + devidx);
if (ds.Tables[0].DefaultView.Count > 0)
{
DataSet dss = dboM.ExceSQL("SELECT * FROM IO_CONTROLDETAIL where FCONTROLID=" + fid + " and FKIND=" + kind);
if (dss.Tables[0].DefaultView.Count > 0)
{
return dss.Tables[0].DefaultView[0]["FVALUE"].ToString();
}
else
{
_CObtainTaskError = "获取调度任务时,无法取得堆垛机坐标!!!";
return "";
}
}
else
{
return "-";
}
}
catch (Exception ex)
{
throw ex;
}
}
///
///判断调度任务A是否为91码盘入库或者92码盘出库;
///如果A的FMANAGEID任务有9搬运木块码盘的任务,不允许插入调度任务A
///
/// 调度任务类型
///
///
static bool GetStackPalletTask(string TaskType, int FMANAGEID)
{
DataSet ds = dbo.ExceSQL("SELECT FCODE, FINTERCODE FROM T_ITEMTASKTYPE Where FCODE='"+TaskType +"'");
if (ds.Tables[0].DefaultView.Count > 0)
{
if ((ds.Tables[0].DefaultView[0]["FINTERCODE"].ToString() == "91")
|| (ds.Tables[0].DefaultView[0]["FINTERCODE"].ToString() == "92"))
{
DataSet dss = dbo.ExceSQL("SELECT FINTERCODE, FCONTROLTASKTYPE,FCODE FROM T_Manage_Task ,T_ITEMTASKTYPE Where FCONTROLTASKTYPE = FCODE and FMANAGEID=" + FMANAGEID + " and FINTERCODE=9 ");
if (dss.Tables[0].DefaultView.Count > 0)
{
return true;
}
else
return false;
}
else
return false;
}
else
_CObtainTaskError ="管理单据传来的搬运任务类型在监控表里不存在!";
return false;
}
///
///判断调度任务A是否为开始位置4#站台或者5#站台码盘任务;
///如果A的FMANAGEID任务有9搬运木块码盘的任务,不允许插入调度任务A
///
/// 开始位置
///
///
static bool GetStackPalletTask(int FSTARTDEVICE, int FMANAGEID)
{
if ((FSTARTDEVICE==4)|| (FSTARTDEVICE==5))
{
DataSet dss = dbo.ExceSQL("SELECT FINTERCODE, FCONTROLTASKTYPE,FCODE FROM T_Manage_Task ,T_ITEMTASKTYPE Where FCONTROLTASKTYPE = FCODE and FMANAGEID=" + FMANAGEID + " and FINTERCODE=9 ");
if (dss.Tables[0].DefaultView.Count > 0)
{
return true;
}
else
return false;
}
else
return false;
}
static bool GetStackPalletTask(DataRowView drv)
{
DataView dv = dbo.ExceSQL("SELECT F_StackPositionDeviceIndex FROM T_BASE_STACK_ROBOT where F_StackPositionDeviceIndex=" +Convert.ToInt32( drv["FSTARTDEVICE"])).Tables[0].DefaultView;
//if ((drv["FSTARTDEVICE"].ToString() == "4") || (drv["FSTARTDEVICE"].ToString() == "5"))
if(dv.Count>0)
{
DataSet dss = dboM.ExceSQL("SELECT MANAGE_ID, CONTROL_TASK_TYPE FROM IO_CONTROL where MANAGE_ID=" + Convert.ToInt32(drv["FMANAGEID"]) + " and CONTROL_TASK_TYPE='901'");
if (dss.Tables[0].DefaultView.Count > 0)
{
return true;
}
else
return false;
}
else
return false;
}
static void RecordMaxManageTaskFID(int fid)
{
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.ToInt32(dv[0]["F_ManageTaskIndex"]))
{
dbo.ExceSQL("UPDATE T_Base_Manage_Task_Index_Auto_Task SET F_ManageTaskIndex ="+fid);
}
}
else
{
dbo.ExceSQL("INSERT INTO T_Base_Manage_Task_Index_Auto_Task (F_ManageTaskIndex)VALUES (" + fid + ")");
}
}
///
/// 20091005
/// 获取可用的目标位置:入库的巷道或者出库站台
///
/// T_Manage_Task表的行记录
///
public static void GetUsableDestination(DataRowView dr)
{
//20100610查找一个路径可用,任务数最少的终点设备
Dictionary advDev = new Dictionary();
object ob;
//只修申请改调度任务的路径,不修改调度自动任务路径
if (dr["F_ManageTaskKindIndex"].ToString() != "1") return;
string sql = "";
string adviceDev = "";
DataTable dtd = dbo.ExceSQL("SELECT F_TASKKIND, F_DESTINATION FROM T_Base_Destination WHERE (F_TASKKIND = " + dr["FCONTROLTASKTYPE"] + ") and (F_AbendStation=1) and (F_DESTINATION=" + dr["FENDDEVICE"] + ")").Tables[0];
if (dtd.Rows.Count > 0)//原来终点是应急站台那么还分配这个站台,不需要改变
{
adviceDev = dtd.Rows[0]["F_DESTINATION"].ToString();
//20091005
return;
}
else
{
//查找可用目标位置
DataTable dt = dbo.ExceSQL("SELECT F_TASKKIND, F_DESTINATION FROM T_Base_Destination WHERE (F_TASKKIND = " + dr["FCONTROLTASKTYPE"] + ") and (F_DESTINATION <>" + dr["FENDDEVICE"] + ") and (F_AbendStation=0)").Tables[0];
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统计到终点设备正在执行的任务数
ob = dbo.GetSingle("SELECT count(FENDDEVICE) as counts FROM T_Manage_Task where FENDDEVICE='" + dt.Rows[i]["F_DESTINATION"] + "' and fstatus>0");
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
{
dboM.ExceSQL(" update IO_CONTROL set CONTROL_STATUS=" + Model.CGeneralFunction.TASKALTERROUTEAPPLY + " where CONTROL_ID=" + dr["FID"] + "");
//向管理申请修改任务//20101108CONTROL_APPLY_ID," + fid + ",
sql = "INSERT INTO IO_CONTROL_APPLY ( CONTROL_ID,CONTROL_APPLY_TYPE,WAREHOUSE_CODE, STOCK_BARCODE, DEVICE_CODE, APPLY_TASK_STATUS, CREATE_TIME, " +
" CONTROL_APPLY_REMARK)" +
"VALUES (" + dr["FID"] + ",2,'" + dr["FENDWAREHOUSE"] + "','" + dr["FPALLETBARCODE"] + "','" + adviceDev + "',0,'" + dtime + "',null)";
dboM.ExceSQL(sql);
dboM.TransCommit();
//20091102修改调度任务为不可拆分状态
dbo.ExceSQL("update T_Manage_Task set FIntoStepOK='-' where (FID = " + Convert.ToInt32(dr["FID"]) + ") AND (F_ManageTASKKINDINDEX =1)");
}
catch (Exception ex)
{
_CObtainTaskError = "获取任务时,向管理申请改道:" + ex.Message;
dboM.TransRollback();
}
}
public static bool IfDeleteOutTask(int fid, int deleteflag)
{ //20091014
try
{
if (1 != deleteflag)
{
return false;
}
string strsql = "select FIntoStepOK from T_Manage_Task where F_ManageTaskKindIndex=1 and FID= " + fid + " and FIntoStepOK <> '1' ";
DataView dv = dbo.ExceSQL(strsql).Tables[0].DefaultView;
if (dv.Count > 0)
{
string delsql = "DELETE FROM T_Manage_Task WHERE (F_ManageTaskKindIndex = 1) AND (FID = " + fid + ")";
string cancelsql = "update IO_Control set CONTROL_STATUS=" + Model.CGeneralFunction.TASKCANCEL + " where CONTROL_ID=" + fid;
dbo.ExceSQL(delsql);
dboM.ExceSQL(cancelsql);
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
throw ex;
}
}
///
/// 20101028获取关联任务,同时返回主任务的应该分配的货叉:0,近货叉;1,远货叉;“-”未分配
///
/// 关联任务FID
/// 是否使用远货叉,默认值"-"
///
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;
string flaneway = "-1";
int stackno = -1;
int FStartCol = 0, FStartLayer = 0, FEndCol = 0, FEndLayer = 0;
DataView dvIOC = dboM.ExceSQL("select * from IO_CONTROL where CONTROL_ID=" + RelativeControlID + "").Tables[0].DefaultView;
if (dvIOC.Count == 0) return "-";
string sql = "SELECT T_Base_Manage_Task_Kind.F_TaskKindIndex, " +
"T_Manage_Task.F_ManageTaskKindIndex, T_Manage_Task.FID " +
"FROM T_Base_Manage_Task_Kind , T_Manage_Task where " +
"T_Base_Manage_Task_Kind.F_TaskKindIndex = T_Manage_Task.F_ManageTaskKindIndex " +
" and T_Base_Manage_Task_Kind.F_TaskKindIndex=1 and T_Manage_Task.FID = ";
sql = sql + RelativeControlID;
dvl = dbo.ExceSQL(sql).Tables[0].DefaultView;
if (dvl.Count > 0)// 插入调度任务新记录
{
return "-";
}
if (Information.IsNumeric(dvIOC[i]["START_DEVICE_CODE"]) == false)
{//货位编码
//20101028
dvl = dbo.ExceSQL("SELECT FLaneWay,FStack FROM ST_CELL where FCELLCODE='" + dvIOC[i]["START_DEVICE_CODE"] + "' and FWAREHOUSE='" + dvIOC[i]["START_WAREHOUSE_CODE"] + "'").Tables[0].DefaultView;
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 (Information.IsNumeric(dvIOC[i]["END_DEVICE_CODE"]) == false)
{
//20101028
dvl = dbo.ExceSQL("SELECT FLaneWay,FStack FROM ST_CELL where FCELLCODE='" + dvIOC[i]["END_DEVICE_CODE"] + "' and FWAREHOUSE='" + dvIOC[i]["END_WAREHOUSE_CODE"] + "'").Tables[0].DefaultView;
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.ToInt32(dvIOC[i]["CONTROL_ID"]));
if (Information.IsNumeric(dvIOC[i]["START_DEVICE_CODE"]) == true)
{
obj = dbo.GetSingle("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 = " + Convert.ToInt32(dvIOC[i]["START_DEVICE_CODE"]) + ") ");
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
{//货位编码
obj = dbo.GetSingle("SELECT FLaneWay FROM ST_CELL where FCELLCODE='" + dvIOC[i]["START_DEVICE_CODE"] + "' and FWAREHOUSE='" + dvIOC[i]["START_WAREHOUSE_CODE"] + "'");
if (obj != null)
{
FSTARTDEVICE = Convert.ToInt32(obj);
}
else
{
_CObtainTaskError = "获取任务时:没找到调度任务索引:" + dvIOC[i]["CONTROL_ID"].ToString() + ",的起点位置!";
return "-";
}
FSTARTCELL = dvIOC[i]["START_DEVICE_CODE"].ToString();
}
if (Information.IsNumeric(dvIOC[i]["END_DEVICE_CODE"]) == true)
{
obj = dbo.GetSingle("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 = " + Convert.ToInt32(dvIOC[i]["END_DEVICE_CODE"]) + ") ");
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
{//货位编码
obj = dbo.GetSingle("SELECT FLaneWay FROM ST_CELL where FCELLCODE='" + dvIOC[i]["END_DEVICE_CODE"] + "' and FWAREHOUSE='" + dvIOC[i]["END_WAREHOUSE_CODE"] + "'");
if (obj != null)
{
FENDDEVICE = Convert.ToInt32(obj);
}
else
{
_CObtainTaskError = "获取任务时:没找到调度任务索引:" + dvIOC[i]["CONTROL_ID"].ToString() + ",的终点位置!";
return "-";
}
FENDCELL = dvIOC[i]["END_DEVICE_CODE"].ToString();
}
//20091014
int FTASKLEVEL = 0;//空托盘组出库的优先级应该最大
FTASKLEVEL = dvIOC[i]["CONTROL_TASK_LEVEL"] == DBNull.Value ? 0 : Convert.ToInt32(dvIOC[i]["CONTROL_TASK_LEVEL"]);
if (UseAwayFork == "-")
{
devinfo = Model.CGetInfo.GetDeviceInfo(FSTARTDEVICE);
if (devinfo != null)
{
if (Microsoft.VisualBasic.Information.IsNumeric(FSTARTCELL) == true)
{
obj = dbo.GetSingle("SELECT F_UseAwayFork FROM T_Base_AGV_Gate WHERE (F_ChannelsIndex=" + FSTARTDEVICE + ") and ( F_AGVGateDeviceIndex= " + FSTARTCELL + ")").ToString();
if (obj != null)
{//AGV站台的双叉属性
UseAwayFork = obj.ToString();
}
}
else
{
if (devinfo.DoubleFork == "1")
{
UseAwayFork = "0";
}
else if (devinfo.DoubleFork == "2")
{
UseAwayFork = "1";
}
}
if (FEndCol > 0)
{//结束列有数据是巷道货位判断是否为极限列,以极限列为准分配货叉
//obj = dbo.GetSingle("SELECT F_ForwardLimitX FROM T_Base_LaneInfo WHERE (F_LaneDeviceIndex = " + flaneway + ") AND (F_ForwardLimitX = " + FEndCol + ")");
//if (obj != null)
//{
// UseAwayFork = "0";
//}
//obj = dbo.GetSingle("SELECT F_BackLimitX FROM T_Base_LaneInfo WHERE (F_LaneDeviceIndex = " + flaneway + ") AND (F_BackLimitX = " + FEndCol + ")");
//if (obj != null)
//{
// UseAwayFork = "1";
//}
}
}
if (UseAwayFork == "-")
{
devinfo = Model.CGetInfo.GetDeviceInfo(FENDDEVICE);
if (devinfo != null)
{
if (Microsoft.VisualBasic.Information.IsNumeric(FENDCELL) == true)
{
obj = dbo.GetSingle("SELECT F_UseAwayFork FROM T_Base_AGV_Gate WHERE (F_ChannelsIndex=" + FENDDEVICE + ") and ( F_AGVGateDeviceIndex= " + FENDCELL + ")").ToString();
if (obj != null)
{
UseAwayFork = obj.ToString();
}
}
else
{
if (devinfo.DoubleFork == "1")
{
UseAwayFork = "0";
}
else if (devinfo.DoubleFork == "2")
{
UseAwayFork = "1";
}
}
if (FStartCol > 0)
{//开始列有数据是巷道货位判断是否为极限列,以极限列为准分配货叉
//obj = dbo.GetSingle("SELECT F_ForwardLimitX FROM T_Base_LaneInfo WHERE (F_LaneDeviceIndex = " + flaneway + ") AND (F_ForwardLimitX = " + FStartCol + ")");
//if (obj != null)
//{
// UseAwayFork = "0";
//}
//obj = dbo.GetSingle("SELECT F_BackLimitX FROM T_Base_LaneInfo WHERE (F_LaneDeviceIndex = " + flaneway + ") AND (F_BackLimitX = " + FStartCol + ")");
//if (obj != null)
//{
// UseAwayFork = "1";
//}
}
}
}
}
//if (FENDDEVICE==13001||FENDDEVICE==13002)
//{
// //FENDDEVICE = 12072;
//}
//20110428 remark 1280,64取空 " + dvIOC[i]["CONTROL_REMARK"] + "
string typeStatus = "-1";
if (dvIOC[i]["MANAGE_TASK_TYPE"].ToString() == "2")
{
typeStatus = "0";
}
sql =$"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,FStartCol,FStartLayer,FEndCol,FEndLayer ,BOX_QUANTITY,UNPACK_QUANTITY)" +
"VALUES (" + dvIOC[i]["CONTROL_ID"] + ",1," + dvIOC[i]["MANAGE_ID"] + "," +
dvIOC[i]["RELATIVE_CONTROL_ID"] + ",'" + dvIOC[i]["STOCK_BARCODE"] +
"','" + dvIOC[i]["MANAGE_TASK_TYPE"] + "','" + dvIOC[i]["CONTROL_TASK_TYPE"] + "'," + FTASKLEVEL + ",'"
+ 0 + "','" + dvIOC[i]["START_WAREHOUSE_CODE"] + "','" + FSTARTCELL + "','"
+ FSTARTDEVICE + "','" + dvIOC[i]["END_WAREHOUSE_CODE"] + "','" + FENDCELL + "','" + FENDDEVICE + "','"+ typeStatus + "','" + Convert.ToDateTime(dvIOC[i]["CONTROL_BEGIN_TIME"]).ToString("yyyy-MM-dd HH:mm:ss") + "','"
+ dvIOC[i]["CONTROL_END_TIME"] + "','" + 0 + "',''," + flaneway + "," +
stackno + ",'" + UseAwayFork + "'," + FStartCol + "," + FStartLayer + "," + FEndCol + "," + FEndLayer + "," + Convert.ToInt32(dvIOC[i]["BOX_QUANTITY"]) + "," + Convert.ToInt32(dvIOC[i]["UNPACK_QUANTITY"]) + ")";//20110318
int rc = dbo.ExecuteSql(sql);
if (rc == 0) return "-";
else
{
if (UseAwayFork == "1")
{
UseAwayFork = "0";
}
else if (UseAwayFork == "0")
{
UseAwayFork = "1";
}
//20101011
dboM.ExecuteSql("update IO_CONTROL set CONTROL_STATUS=" + Model.CGeneralFunction.TASKCONTROLREADED + " where CONTROL_ID=" + dvIOC[i]["CONTROL_ID"]);
// CommonClassLib.CCarryConvert.WriteDarkCasket("CObtainTask", "管理CNTROL任务ID" + dvIOC[i]["CONTROL_ID"],"调度任务ID"+, (dt2 - dt1).ToString());
return UseAwayFork;
}
}
///
/// 返回关联任务的CONTROL_ID
///
///
///
static int GetDouleForkFID(int fid)
{//CONTORL_BATCH LOGIC_AREA END_DEVICE_CODE START_DEVICE_CODE
DataView dv = dboM.ExceSQL("select * from IO_CONTROL where CONTROL_ID="+fid).Tables[0].DefaultView;
if (dv.Count > 0)
{
int minFid = -1; double minX = -1;
char[] cc=new char[1]{'-'};
DataView dv0 = dboM.ExceSQL("select * from IO_CONTROL where CONTROL_STATUS=0 and CONTORL_BATCH='" +
dv[0]["CONTORL_BATCH"] + "' and LOGIC_AREA='" + dv[0]["LOGIC_AREA"] + "' and END_DEVICE_CODE='" +
dv[0]["END_DEVICE_CODE"] + "' and START_WAREHOUSE_CODE='" + dv[0]["START_WAREHOUSE_CODE"] + "'").Tables[0].DefaultView;
if (dv[0]["START_DEVICE_CODE"].ToString().IndexOf("-") < 0) return -1;
string[] sp1=dv[0]["START_DEVICE_CODE"].ToString().Split(cc),sp2;
for (int i = 0; i < dv0.Count; i++)
{//START_DEVICE_CODE z-x-y
if (dv0[0]["START_DEVICE_CODE"].ToString().IndexOf("-") < 0) continue ;
if (EqualCellDoubleFork(dv[0]["START_DEVICE_CODE"].ToString(), dv0[0]["START_DEVICE_CODE"].ToString(), dv[0]["START_WAREHOUSE_CODE"].ToString()) == false )
{//不符合双叉原则
continue;
}
if (InSameLaneWay(dv[0]["START_DEVICE_CODE"].ToString(), dv0[0]["START_DEVICE_CODE"].ToString(), dv[0]["START_WAREHOUSE_CODE"].ToString()) == false)
{//不在一个巷道
continue;
}
sp2=dv0[0]["START_DEVICE_CODE"].ToString().Split(cc);
//1、优先考虑:同一巷道的Z,临X(差值是1),同Y,符合双叉原则;
if ((sp1[2] == sp2[2])&&(Math.Abs(int.Parse(sp2[1])-int.Parse(sp1[1]))==1))
{
return int.Parse(dv0[i]["CONTROL_ID"].ToString());
}
//2、其次:同一巷道的Z,X差值平方+Y差值平方,符合双叉原则;
if (minX > (Math.Pow(Math.Abs(int.Parse(sp2[1]) - int.Parse(sp1[1])), 2) + Math.Pow(Math.Abs(int.Parse(sp2[2]) - int.Parse(sp1[2])), 2)))
{
minX = Math.Pow(Convert.ToDouble(Math.Abs(decimal.Parse(sp2[1]) - decimal.Parse(sp1[1]))), 2) + Math.Pow(Convert.ToDouble(Math.Abs(decimal.Parse(sp2[2]) - decimal.Parse(sp1[2]))), 2);
minFid = int.Parse(dv0[i]["CONTROL_ID"].ToString());
}
}
return minFid;
}
else
{
return -1;
}
}
///
/// 判断两个货位是否满足双叉原则
///
/// 货位1
/// 货位2
/// 库房位置
///
static bool EqualCellDoubleFork(string Zxy,string Zxy1,string warehouse)
{
char[] cc = new char[1] { '-'};
string[] sp = Zxy.Split(cc);
string[] sp1 = Zxy1.Split(cc);
char DoubleFork = '0', DoubleFork1 = '0';
int z = int.Parse(sp[0]), x = int.Parse(sp[1]), y = int.Parse(sp[2]), z1 = int.Parse(sp1[0]), x1 = int.Parse(sp1[1]), y1 = int.Parse(sp1[2]);
object ob,ob1;
try
{
//考虑极限货位:如果其中一个是前极限货位,另外一个必须为非前极限货位;
//如果其中一个是后极限货位,另外一个必须为非后极限货位
ob = dbo.GetSingle("SELECT FLaneWay FROM ST_CELL WHERE FCELLCODE = '"+Zxy+"'");
#region 考虑极限货位
ob1 = dbo.GetSingle("SELECT F_LaneDeviceIndex FROM T_Base_LaneInfo where (F_LaneDeviceIndex =" + ob + ") and (F_ForwardLimitX=" + x + ") and (F_ForwardLimitX=" + x1 + ")");
if (ob1 != null)
{
return false;
}
ob1 = dbo.GetSingle("SELECT F_LaneDeviceIndex FROM T_Base_LaneInfo where (F_LaneDeviceIndex =" + ob + ") and (F_BackLimitX=" + x + ") and (F_BackLimitX=" + x1 + ")");
if (ob1 != null)
{
return false;
}
#endregion
DoubleFork =char.Parse( Model.CGeneralFunction.GetDoubleForkFromST_CELL(z,x,y,warehouse).ToString());
if ((z == 0) && (x == 0) && (y == 0))
{
return false;
}
else
{
DoubleFork1 =char.Parse( Model.CGeneralFunction.GetDoubleForkFromST_CELL(z1, x1, y1, warehouse).ToString());
//0,1,-
if (x>=x1)
{
if (DoubleFork == '1')
{
if (DoubleFork1 != '1') return true;
else
{
return false;
}
}
else if (DoubleFork=='0')
{
return false;
}
else //'-'
{
if (DoubleFork1 == '1') return false;
else
{
return true;
}
}
}
else//x1>x
{
if (DoubleFork1 == '1')
{
if (DoubleFork != '1') return true;
else
{
return false;
}
}
else if (DoubleFork1 == '0')
{
return false;
}
else //'-'
{
if (DoubleFork == '1') return false;
else
{
return true;
}
}
}
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
ob = null;
ob1 = null;
cc=null;
sp = null;
sp1 = null;
}
}
static bool InSameLaneWay(string Zxy, string Zxy1, string warehouse)
{
DataView dv = dbo.ExceSQL("SELECT FLaneWay FROM ST_CELL WHERE (FCELLCODE = '" + Zxy + "') and FWAREHOUSE='"+warehouse+"'").Tables[0].DefaultView;
if (dv.Count > 0)
{
DataView dv1 = dbo.ExceSQL("SELECT FLaneWay FROM ST_CELL WHERE (FCELLCODE = '" + Zxy1 + "') and FWAREHOUSE='" + warehouse + "'").Tables[0].DefaultView;
if (dv1.Count > 0)
{
if (dv[0]["FLaneWay"].ToString() == dv1[0]["FLaneWay"].ToString())
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
else
{
return false;
}
}
///
/// 出库任务数量控制
///
///
///
static int ManageCountControl(string enddevice)
{
int count = 0;
int device = 0;
if (!int.TryParse(enddevice, out device))
{
count = 100;
return count;
}
DataView dv= dbo.ExceSQL("select * from t_base_device_taskcontrol where device_id =" + Convert.ToInt64(enddevice)).Tables[0].DefaultView;
if (dv.Count > 0)
{
count = Convert.ToInt32(dv[0]["manage_max"]);
}
else
{
count = 100;
}
return count;
}
}
}