using Microsoft.VisualBasic;
using RGD.DBUtility;
using System;
using System.Data;
namespace RGD.DataService
{
///
/// 调度任务服务类
///
public class ManageTaskService
{
#region 移库任务
public bool CreateMove(string TASK_NO, string CONTROL_TASK_TYPE, string START_DEVICE, string END_DEVICE, string STOCK_BARCODE, out string sResult)
{
return CreateMove(TASK_NO, CONTROL_TASK_TYPE, START_DEVICE, END_DEVICE, STOCK_BARCODE, 0, "", false, false, out sResult);
}
public bool CreateMove(string TASK_NO, int ManageTaskKindIndex, string CONTROL_TASK_TYPE, string START_DEVICE, string END_DEVICE, string STOCK_BARCODE, out string sResult)
{
return CreateMove(TASK_NO, ManageTaskKindIndex, CONTROL_TASK_TYPE, START_DEVICE, END_DEVICE, STOCK_BARCODE, 0, "", false, false, out sResult);
}
public bool CreateMove(string TASK_NO, int ManageTaskKindIndex, string CONTROL_TASK_TYPE, string START_DEVICE, string END_DEVICE, string STOCK_BARCODE, int PICKUP_LOCATION, string PICKUP_TYPE, bool IS_PICKUP, bool IS_LASTBOX, out string sResult)
{
return CreateMove(TASK_NO, ManageTaskKindIndex, CONTROL_TASK_TYPE, START_DEVICE, END_DEVICE, STOCK_BARCODE, PICKUP_LOCATION, PICKUP_TYPE, IS_PICKUP, IS_LASTBOX, 1, out sResult);
}
public bool CreateMove(string TASK_NO, string CONTROL_TASK_TYPE, string START_DEVICE, string END_DEVICE, string STOCK_BARCODE, int TASK_LEVEL, out string sResult)
{
return CreateMove(TASK_NO, 1, CONTROL_TASK_TYPE, START_DEVICE, END_DEVICE, STOCK_BARCODE, 0, "", false, false, TASK_LEVEL, out sResult);
}
public bool CreateMove(string TASK_NO, string CONTROL_TASK_TYPE, string START_DEVICE, string END_DEVICE, string STOCK_BARCODE, bool IS_LASTBOX, out string sResult)
{
return CreateMove(TASK_NO, CONTROL_TASK_TYPE, START_DEVICE, END_DEVICE, STOCK_BARCODE, 0, "", false, IS_LASTBOX, out sResult);
}
public bool CreateMove(string TASK_NO, string CONTROL_TASK_TYPE, string START_DEVICE, string END_DEVICE, string STOCK_BARCODE, int PICKUP_LOCATION, string PICKUP_TYPE, bool IS_PICKUP, bool IS_LASTBOX, out string sResult)
{
return CreateMove(TASK_NO, 1, CONTROL_TASK_TYPE, START_DEVICE, END_DEVICE, STOCK_BARCODE, PICKUP_LOCATION, PICKUP_TYPE, IS_PICKUP, IS_LASTBOX, 1, out sResult);
}
public bool CreateMove(string TASK_NO, int ManageTaskKindIndex, string CONTROL_TASK_TYPE, string START_DEVICE, string END_DEVICE, string STOCK_BARCODE, int PICKUP_LOCATION, string PICKUP_TYPE, bool IS_PICKUP, bool IS_LASTBOX, int TASK_LEVEL, out string sResult)
{
bool bResult = true;
sResult = "";
try
{
//等待执行的;已批复的申请改道的
string UseAwayFork = "-";
DataView dvt = DbHelperSQL.Query("select * from T_Manage_Task where FPALLETBARCODE = '" + STOCK_BARCODE + "'").Tables[0].DefaultView;//dzf20120822
if (dvt.Count > 0)
{
sResult = "此托盘任务已存在。";
return false;
}
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;
if (Information.IsNumeric(START_DEVICE) == false)
{
dvl = DbHelperSQL.Query("SELECT FLaneWay,FStack FROM ST_CELL where FCELLCODE='" + START_DEVICE + "'").Tables[0].DefaultView;
if (dvl.Count > 0)
{
flaneway = dvl[0]["FLaneWay"].ToString();
stackno = Convert.ToInt32(dvl[0]["FStack"]);//20101028
FStartCol = Convert.ToInt32(START_DEVICE.Substring(3, 2));
FStartLayer = Convert.ToInt32(START_DEVICE.Substring(6, 2));
}
}
else
{
if (Information.IsNumeric(END_DEVICE) == false)//dzf理解 终点设备不是数字的情况
{
//20101028
dvl = DbHelperSQL.Query("SELECT FLaneWay,FStack FROM ST_CELL where FCELLCODE='" + END_DEVICE + "'").Tables[0].DefaultView;
if (dvl.Count > 0)
{
flaneway = dvl[0]["FLaneWay"].ToString();
stackno = Convert.ToInt32(dvl[0]["FStack"]);//20101028
FEndCol = Convert.ToInt32(END_DEVICE.Substring(3, 2));
FEndLayer = Convert.ToInt32(END_DEVICE.Substring(6, 2));
}
}
}
int AutoManageIdx = GetAutoManageIdx();
if (Information.IsNumeric(START_DEVICE) == true)
{
FSTARTDEVICE = Convert.ToInt32(START_DEVICE);
FSTARTCELL = "-";
}
else
{//货位编码
obj = DbHelperSQL.GetSingle("SELECT FLaneWay FROM ST_CELL where FCELLCODE='" + START_DEVICE + "'");
if (obj != null)
{
FSTARTDEVICE = Convert.ToInt32(obj);
}
else
{
sResult = "获取任务时:没找到调度任务索引:" + START_DEVICE + ",的起点位置!";
return false;
}
FSTARTCELL = START_DEVICE;
}
if (Information.IsNumeric(END_DEVICE) == true)//dzf理解 终点设备是数字的情况
{
FENDDEVICE = Convert.ToInt32(END_DEVICE);
FENDCELL = "-";
}
else if (END_DEVICE == "")
{ }
else //dzf理解 终点设备是货位的情况,获得终点设备号FENDDEVICE是巷道
{//货位编码
obj = DbHelperSQL.GetSingle("SELECT FLaneWay FROM ST_CELL where FCELLCODE='" + END_DEVICE + "'");
if (obj != null)
{
FENDDEVICE = Convert.ToInt32(obj);
}
else
{
sResult = "获取任务时:没找到调度任务索引:" + END_DEVICE + ",的终点位置!";
return false;
}
FENDCELL = END_DEVICE;
}
//20091014
int FTASKLEVEL = 0;//空托盘组出库的优先级应该最大
DataView dv = DbHelperSQL.Query("select F_EQUIP_TYPE from t_warehouse").Tables[0].DefaultView;
string sendout_type = "1";
if (dv[0][0].ToString() == "03")
{
sendout_type = "2";
}
string sql = "INSERT INTO T_Manage_Task" +
"(FID, F_ManageTaskKindIndex,FMANAGEID,F_RELATIVECONTORLID,FPALLETBARCODE,FCONTROLTASKTYPE, FTASKLEVEL, FISRETURN," +
"FSTARTWAREHOUSE, FSTARTCELL, FSTARTDEVICE,FENDWAREHOUSE,FENDCELL,FENDDEVICE, " +
"FSTATUS,FIntoStepOK,FREMARK,FLANEWAY,FSTACK,FUseAwayFork,SENDOUT_TYPE,FStartCol,FStartLayer,FEndCol,FEndLayer,PICKUP_LOCATION,PICKUP_TYPE) " +
"VALUES (" + AutoManageIdx + "," + ManageTaskKindIndex + ",'" + TASK_NO + "',0,'" + STOCK_BARCODE +
"','" + CONTROL_TASK_TYPE + "'," + FTASKLEVEL + ",'"
+ 0 + "','1','" + FSTARTCELL + "','"
+ FSTARTDEVICE + "','1','" + FENDCELL + "','" + FENDDEVICE + "',"
+ "'0','" + 0 + "',''," + flaneway + "," +
stackno + ",'" + UseAwayFork + "'," + sendout_type + "," + FStartCol + "," + FStartLayer + "," + FEndCol + "," + FEndLayer + "," + PICKUP_LOCATION + "," + (PICKUP_TYPE == "" ? "0" : PICKUP_TYPE) + ")";//20110318
int rc = DbHelperSQL.ExecuteSql(sql);
if (rc == 0)
{
sResult = "写入失败";
return false;
}
if (IS_LASTBOX)
{
dv = DbHelperSQL.Query("select F_Bindingdevice,F_Barcode from t_base_plc_ask where F_askkind=2").Tables[0].DefaultView;
for (int i = 0; i < dv.Count; i++)
{
dvt = DbHelperSQL.Query("select FID from t_manage_task where FENDDEVICE=" + dv[i]["F_bindingdevice"]).Tables[0].DefaultView;
if (dvt.Count != 0)
{
DbHelperSQL.ExecuteSql("update T_MANAGE_TASK set LAST_BOX_REMARK=" + AutoManageIdx + " where LAST_BOX_REMARK is null and FENDDEVICE = '" + dv[i]["F_bindingdevice"] + "'");
}
else if (dv[i]["f_Barcode"].ToString() != "")
{
//ISendDeviceOrder sdo = CommModeCreate.CreateSendDeviceOrder(int.Parse(dv[i]["F_bindingdevice"].ToString()));
//sdo.SendDeviceOrder(3, 0, 0, int.Parse(dv[i]["F_bindingdevice"].ToString()), 0);
}
}
}
}
catch (Exception ex)
{
sResult = ex.Message;
bResult = false;
}
//if (!bResult)
//_log.Debug(sResult);
return bResult;
}
#endregion 移库任务
#region 基础查询
///
/// 取得任务编号 最大9998
///
///
private int GetAutoManageIdx()
{
DataSet ds;
try
{
int maxIdx = 1;
ds = DbHelperSQL.Query("SELECT F_ManageTaskIndex FROM T_Base_Manage_Task_Index_Auto_Task");
if (ds.Tables[0].DefaultView.Count > 0)
{
if ((Convert.ToInt32(ds.Tables[0].DefaultView[0]["F_ManageTaskIndex"]) + 1) >= 9998)
{
maxIdx = 1;
}
else
{
maxIdx = (Convert.ToInt32(ds.Tables[0].DefaultView[0]["F_ManageTaskIndex"]) + 1);
}
}
else
{
maxIdx = 1;
}
DataView dv = DbHelperSQL.Query("select F_ManageTaskIndex from T_Base_Manage_Task_Index_Auto_Task").Tables[0].DefaultView;
if (dv.Count > 0)
{
if (maxIdx > Convert.ToInt32(dv[0]["F_ManageTaskIndex"]))
{
DbHelperSQL.ExecuteSql("UPDATE T_Base_Manage_Task_Index_Auto_Task SET F_ManageTaskIndex =" + maxIdx);
}
}
else
{
DbHelperSQL.ExecuteSql("INSERT INTO T_Base_Manage_Task_Index_Auto_Task (F_ManageTaskIndex)VALUES (" + maxIdx + ")");
}
return maxIdx;
}
catch (Exception ex)
{
throw ex;
}
finally
{
ds = null;
}
}
///
/// 获取发送任务类型 6低箱 7高箱
///
///
///
public int GetTypeIndex(int managerTaskIndex) //dzf20130713供叠盘机区别高低箱子
{
DataView dv;
try
{
string sql = "select * from T_Manage_Task where T_Manage_Task.fid=" + managerTaskIndex;
dv = DbHelperSQL.Query(sql).Tables[0].DefaultView;
if (dv.Count > 0)
{
return Convert.ToInt32(dv[0]["SENDOUT_TYPE"]);
}
else
{
return 0;
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
dv = null;
}
}
///
/// 获取任务的异常编号
///
///
///
///
public int GetExceptionNOFromManageTask(int FID, int ManTaskKind)
{
DataTable dt;
try
{
string sql = "SELECT FID, F_ManageTaskKindIndex, FExceptionNO FROM T_Manage_Task WHERE (FID = " + FID + ") AND (F_ManageTaskKindIndex = " + ManTaskKind + ") ";
dt = DbHelperSQL.Query(sql).Tables[0];
if (dt.Rows.Count > 0)
{
if (dt.Rows[0]["FExceptionNO"] == DBNull.Value)
{
return -1;
}
else
{
return Convert.ToInt32(dt.Rows[0]["FExceptionNO"]);
}
}
else
{
return -1;
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
dt = null;
}
}
#endregion 基础查询
}
}