755 lines
35 KiB
C#
755 lines
35 KiB
C#
//using DBFactory;
|
||
using Matrix.Utility;
|
||
using RGD.DBUtility;
|
||
using RGDWCSServices.WMS;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Data;
|
||
using System.Linq;
|
||
using System.Reflection;
|
||
using static RGDWCSServices.Base;
|
||
|
||
namespace RGDWCSServices
|
||
{
|
||
public class HouseBase : Base
|
||
{
|
||
|
||
[Serializable]
|
||
public class LOCATION
|
||
{
|
||
private string _loc_no;
|
||
private string _pallet_code;
|
||
private string _need_back;
|
||
|
||
public string LOC_NO
|
||
{
|
||
get { return this._loc_no; }
|
||
set { this._loc_no = getWCS_LOC_NO(value); }
|
||
}
|
||
|
||
public string PALLET_CODE
|
||
{
|
||
get { return this._pallet_code; }
|
||
set { this._pallet_code = value; }
|
||
}
|
||
|
||
public string NEED_BACK
|
||
{
|
||
get { return this._need_back; }
|
||
set { this._need_back = value; }
|
||
}
|
||
}
|
||
|
||
public class LOC_BoxInvTask
|
||
{
|
||
private string _loc_no;
|
||
private string _pallet_code;
|
||
private string _box_type;
|
||
|
||
public string LOC_NO
|
||
{
|
||
get { return this._loc_no; }
|
||
set { this._loc_no = getWCS_LOC_NO(value); }
|
||
}
|
||
|
||
public string PALLET_CODE
|
||
{
|
||
get { return this._pallet_code; }
|
||
set { this._pallet_code = value; }
|
||
}
|
||
|
||
public string BOX_TYPE
|
||
{
|
||
get { return this._box_type; }
|
||
set { this._box_type = value; }
|
||
}
|
||
}
|
||
|
||
/// <summary>调用表库
|
||
/// 调用表库
|
||
/// </summary>
|
||
/// <param name="sMethodName">方法名</param>
|
||
/// <param name="sXmlIn">入参</param>
|
||
/// <param name="sXmlOut">出参</param>
|
||
/// <returns></returns>
|
||
public bool InvokeHouse(String sMethodName, String sXmlIn, out string sXmlOut)
|
||
{
|
||
bool bResult = true;
|
||
sXmlOut = string.Empty;
|
||
DateTime dtBegin = System.DateTime.Now;
|
||
DateTime dtEnd;
|
||
try
|
||
{
|
||
string sClassFullName = string.Format("RGDWCSServices.WCS.{0}", sMethodName);
|
||
|
||
bResult = this.Invoke(sClassFullName, "Notify", sXmlIn, out sXmlOut);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
bResult = false;
|
||
|
||
sXmlOut = ex.Message;
|
||
}
|
||
finally
|
||
{
|
||
dtEnd = System.DateTime.Now;
|
||
LogUtil.WriteLog("webService", "WCS_WMS_HouseBase_InvokeHouse;sMethodName:" + sMethodName);
|
||
string str = string.Format("平台调用表库接口开始时间 InvokeHouse:{3}\n\r方法:{0}\n\r入参:{1}\n\r出参:{2}\n\r", sMethodName, sXmlIn, sXmlOut, dtBegin.ToString("yyyyMMdd HH:mm:ss"));
|
||
this._log.Debug(str);
|
||
System.Diagnostics.Debug.WriteLine(str);
|
||
}
|
||
|
||
return bResult;
|
||
}
|
||
|
||
/// <summary>反射调用
|
||
/// 反射调用
|
||
/// </summary>
|
||
/// <param name="sClassFullName">类名(全)</param>
|
||
/// <param name="sMethodName">方法</param>
|
||
/// <param name="sXmlIn">入参</param>
|
||
/// <param name="sXmlOut">出参</param>
|
||
/// <returns>返回结果</returns>
|
||
public bool Invoke(string sClassFullName, string sMethodName, object sXmlIn, out string sXmlOut)
|
||
{
|
||
bool bResult = true;
|
||
|
||
sXmlOut = string.Empty;
|
||
|
||
Type t = this.GetType();
|
||
|
||
Assembly complierAssembly = t.Assembly;
|
||
|
||
object complierInstance = complierAssembly.CreateInstance(sClassFullName);
|
||
|
||
Type type = complierInstance.GetType();
|
||
|
||
MethodInfo Method = type.GetMethod(sMethodName);
|
||
|
||
object[] obj = new object[] { sXmlIn, sXmlOut };
|
||
|
||
object oResult = Method.Invoke(complierInstance, obj);
|
||
|
||
bResult = Convert.ToBoolean(oResult);
|
||
|
||
sXmlOut = obj[1].ToString();
|
||
|
||
return bResult;
|
||
}
|
||
public bool START_INTASK(string QTY)
|
||
{
|
||
bool bResult = true;
|
||
|
||
DbHelperSQL.ExecuteSql("update T_InTask_QTY set count=" + int.Parse(QTY));
|
||
return bResult;
|
||
}
|
||
|
||
public bool START_INTASK(string WH_ID, string EQUIP_TYPE, string TASK_NO, string PLATFORM_NO, string IO_WH_SORT_CODE, List<LOCATION> LOC_LIST, string SINGLE_STANDARD, string xmlin, out string sResult)
|
||
{
|
||
bool bResult = true;
|
||
sResult = string.Empty;
|
||
|
||
if (LOC_LIST.Count == 0)
|
||
{
|
||
DataSet ds = DbHelperSQL.Query("select * from IO_RFID where STATION_CODE='" + PLATFORM_NO + "'");
|
||
if (ds.Tables[0].Rows.Count == 0)
|
||
{
|
||
sResult = "未找到入库站台";
|
||
return false;
|
||
}
|
||
}
|
||
|
||
DataSet ds_task = DbHelperSQL.Query("select * from T_warehouse");
|
||
if (ds_task.Tables[0].Rows[0]["F_TASK_NO"] != DBNull.Value && ds_task.Tables[0].Rows[0]["F_TASK_NO"].ToString() != "0" && ds_task.Tables[0].Rows[0]["F_TASK_NO"].ToString() != "")
|
||
{//不空闲
|
||
if (ds_task.Tables[0].Rows[0]["F_TASK_NO"].ToString() == TASK_NO)
|
||
{
|
||
sResult = "执行中";
|
||
return true;
|
||
}
|
||
DataView dv_task_list = DbHelperSQL.Query("select * from t_task_list where TASK_NO='" + TASK_NO + "'").Tables[0].DefaultView;
|
||
if (dv_task_list.Count > 0)
|
||
sResult = "已在队列中";
|
||
else
|
||
{
|
||
DbHelperSQL.ExecuteSql("insert into T_TASK_LIST (TASK_NO,METHOD_NAME,XMLIN,TASK_STATUS,TASK_START_TIME,PLATFORM_NO) values ('" + TASK_NO + "','startInTask','" + xmlin + "','Waiting',getdate(),'" + PLATFORM_NO + "')");
|
||
sResult = "有正在执行中的任务。任务号:" + ds_task.Tables[0].Rows[0]["F_TASK_NO"] + ",任务类型:" + ds_task.Tables[0].Rows[0]["F_TASK_TYPE"];
|
||
}
|
||
return true;
|
||
}
|
||
|
||
string outxml = string.Empty;
|
||
taskStart ws = new taskStart();
|
||
bResult = ws.Notify(WH_ID, TASK_NO, out outxml);
|
||
DbHelperSQL.ExecuteSql("delete from t_task_list where TASK_NO='" + TASK_NO + "'");
|
||
if (!bResult)
|
||
return true;
|
||
|
||
if (LOC_LIST.Count != 0)
|
||
{
|
||
CommonClassLib.StaticClass.CreateMove(TASK_NO, Enum.CONTROL_TYPE.Up.ToString("d"), PLATFORM_NO, LOC_LIST[0].LOC_NO, LOC_LIST[0].PALLET_CODE, out sResult);
|
||
}
|
||
|
||
DbHelperSQL.ExecuteSql("update T_WareHouse set F_WarehouseIndex='" + WH_ID + "',F_TASK_NO='" + TASK_NO + "',F_TASK_TYPE='In',F_TASK_STATUS='RUN',F_EQUIP_TYPE='" + EQUIP_TYPE + "',F_IO_WH_SORT_CODE='" + IO_WH_SORT_CODE + "',F_SINGLE_STANDARD='" + SINGLE_STANDARD + "'");
|
||
|
||
return bResult;
|
||
}
|
||
|
||
public bool START_OUTTASK(string WH_ID, string EQUIP_TYPE, string TASK_NO, string PLATFORM_NO, string IO_WH_SORT_CODE, string IS_PAST, List<LOCATION> LOC_LIST, string xmlin, out string sResult)
|
||
{
|
||
bool bResult = true;
|
||
sResult = string.Empty;
|
||
|
||
if (LOC_LIST.Count() <= 0)
|
||
{
|
||
sResult = "出库下发的货位号为空!";
|
||
return false;
|
||
}
|
||
|
||
DataSet ds_task = DbHelperSQL.Query("select * from T_warehouse");
|
||
if (ds_task.Tables[0].Rows[0]["F_TASK_NO"] != DBNull.Value && ds_task.Tables[0].Rows[0]["F_TASK_NO"].ToString() != "0" && ds_task.Tables[0].Rows[0]["F_TASK_NO"].ToString() != "")
|
||
{//不空闲
|
||
if (ds_task.Tables[0].Rows[0]["F_TASK_NO"].ToString() == TASK_NO)
|
||
{
|
||
return true;
|
||
}
|
||
DataView dv_task_list = DbHelperSQL.Query("select * from t_task_list where TASK_NO='" + TASK_NO + "'").Tables[0].DefaultView;
|
||
if (dv_task_list.Count > 0)
|
||
sResult = "已在队列中";
|
||
else
|
||
{
|
||
DbHelperSQL.ExecuteSql("insert into T_TASK_LIST (TASK_NO,METHOD_NAME,XMLIN,TASK_STATUS,TASK_START_TIME,PLATFORM_NO) values ('" + TASK_NO + "','startOutTask','" + xmlin + "','Waiting',getdate(),'" + PLATFORM_NO + "')");
|
||
sResult = "有正在执行中的任务。任务号:" + ds_task.Tables[0].Rows[0]["F_TASK_NO"] + ",任务类型:" + ds_task.Tables[0].Rows[0]["F_TASK_TYPE"];
|
||
}
|
||
return true;
|
||
}
|
||
|
||
string outxml = string.Empty;
|
||
taskStart ws = new taskStart();
|
||
bResult = ws.Notify(WH_ID, TASK_NO, out outxml);
|
||
DbHelperSQL.ExecuteSql("delete from t_task_list where TASK_NO='" + TASK_NO + "'");
|
||
if (!bResult)
|
||
return true;
|
||
|
||
try
|
||
{
|
||
foreach (LOCATION LOC in LOC_LIST)
|
||
{
|
||
|
||
|
||
if (LOC.NEED_BACK.Equals("1"))
|
||
{
|
||
CommonClassLib.StaticClass.CreateMove(TASK_NO, "2", LOC.LOC_NO, "12001", LOC.PALLET_CODE, true, out sResult);
|
||
}
|
||
else
|
||
{
|
||
CommonClassLib.StaticClass.CreateMove(TASK_NO, "2", LOC.LOC_NO, PLATFORM_NO, LOC.PALLET_CODE, "", 0, "", false, false, false, 1, out sResult);
|
||
}
|
||
}
|
||
DbHelperSQL.ExecuteSql("update T_WareHouse set F_WarehouseIndex='" + WH_ID + "',F_TASK_NO='" + TASK_NO + "',F_TASK_TYPE='Out',F_TASK_STATUS='RUN',F_EQUIP_TYPE='" + EQUIP_TYPE + "',F_IO_WH_SORT_CODE='" + IO_WH_SORT_CODE + "'");
|
||
DbHelperSQL.ExecuteSql("delete IO_VISION_DETAIL");
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
bResult = false;
|
||
sResult = "下达出库任务时出错:" + ex.Message;
|
||
}
|
||
return bResult;
|
||
}
|
||
|
||
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"]) || (Convert.ToInt32(ds.Tables[0].DefaultView[0]["F_ManageTaskIndex"]) + 1) >= 9998)
|
||
{
|
||
DbHelperSQL.Query("UPDATE T_Base_Manage_Task_Index_Auto_Task SET F_ManageTaskIndex =" + maxIdx);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
DbHelperSQL.Query("INSERT INTO T_Base_Manage_Task_Index_Auto_Task (F_ManageTaskIndex)VALUES (" + maxIdx + ")");
|
||
}
|
||
return maxIdx;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
throw ex;
|
||
}
|
||
finally
|
||
{
|
||
ds = null;
|
||
}
|
||
}
|
||
|
||
public bool START_INVENTORYTASK(string WH_ID, string EQUIP_TYPE, string TASK_NO, List<LOCATION> LOC_LIST, string xmlin, out string sResult)
|
||
{
|
||
bool bResult = true;
|
||
sResult = string.Empty;
|
||
|
||
if (LOC_LIST.Count() <= 0)
|
||
{
|
||
sResult = "盘库下发的货位号为空!";
|
||
return false;
|
||
}
|
||
|
||
DataSet ds_task = DbHelperSQL.Query("select * from T_warehouse");
|
||
if (ds_task.Tables[0].Rows[0]["F_TASK_NO"] != DBNull.Value && ds_task.Tables[0].Rows[0]["F_TASK_NO"].ToString() != "0" && ds_task.Tables[0].Rows[0]["F_TASK_NO"].ToString() != "")
|
||
{//不空闲
|
||
if (ds_task.Tables[0].Rows[0]["F_TASK_NO"].ToString() == TASK_NO)
|
||
{
|
||
return true;
|
||
}
|
||
DataView dv_task_list = DbHelperSQL.Query("select * from t_task_list where TASK_NO='" + TASK_NO + "'").Tables[0].DefaultView;
|
||
if (dv_task_list.Count > 0)
|
||
sResult = "已在队列中";
|
||
else
|
||
{
|
||
DbHelperSQL.ExecuteSql("insert into T_TASK_LIST (TASK_NO,METHOD_NAME,XMLIN,TASK_STATUS,TASK_START_TIME) values ('" + TASK_NO + "','startInventoryTask','" + xmlin + "','Waiting',getdate())");
|
||
sResult = "有正在执行中的任务。任务号:" + ds_task.Tables[0].Rows[0]["F_TASK_NO"] + ",任务类型:" + ds_task.Tables[0].Rows[0]["F_TASK_TYPE"];
|
||
}
|
||
return true;
|
||
}
|
||
|
||
string outxml = string.Empty;
|
||
taskStart ws = new taskStart();
|
||
bResult = ws.Notify(WH_ID, TASK_NO, out outxml);
|
||
DbHelperSQL.ExecuteSql("delete from t_task_list where TASK_NO='" + TASK_NO + "'");
|
||
if (!bResult)
|
||
return true;
|
||
|
||
DbHelperSQL.ExecuteSql("update T_WareHouse set F_WarehouseIndex='" + WH_ID + "',F_TASK_NO='" + TASK_NO + "',F_TASK_TYPE='Inventory',F_TASK_STATUS='RUN',F_EQUIP_TYPE='" + EQUIP_TYPE + "'");
|
||
try
|
||
{
|
||
foreach (LOCATION LOC in LOC_LIST)
|
||
{
|
||
string Sql, _tasktype, _startposition, _startsite = "-", _endposition, _endsite = "-";
|
||
|
||
DataSet ds;
|
||
_tasktype = "2";
|
||
_endposition = "12002";
|
||
int flaneway = 0;
|
||
int stackno = 0;
|
||
|
||
_startsite = LOC.LOC_NO;
|
||
ds = DbHelperSQL.Query("SELECT * FROM ST_CELL where FCELLSTATUS<> '-1' and FCELLCODE='" + _startsite + "'");
|
||
if (ds.Tables[0].Rows.Count == 0)
|
||
{
|
||
sResult = "起始位置和起始货位编码在数据库中没有记录或货位不可用!";
|
||
return false;
|
||
}
|
||
_startposition = ds.Tables[0].Rows[0]["FLaneWay"].ToString();
|
||
flaneway = Convert.ToInt32(_startposition);
|
||
|
||
//20100304
|
||
Sql = "SELECT F_RouteID FROM T_Base_Route WHERE (F_StartDevice = " + _startposition + ") AND (F_EndDevice = " + _endposition + ")";
|
||
ds = DbHelperSQL.Query(Sql).Tables[0].DataSet;
|
||
if (ds.Tables[0].DefaultView.Count <= 0)
|
||
{
|
||
sResult = "起始位置和结束位置不在有效路径的范围内!";
|
||
return false;
|
||
}
|
||
|
||
string FSTARTCELL = _startsite, FENDCELL = _endsite, UseAwayFork = "-";
|
||
int FSTARTDEVICE = Convert.ToInt32(_startposition); int FENDDEVICE = Convert.ToInt32(_endposition);
|
||
|
||
stackno = Convert.ToInt32(DbHelperSQL.GetSingle("SELECT F_StackIndex FROM T_Base_LaneInfo WHERE (F_LaneDeviceIndex = " + flaneway + ")"));
|
||
string dtime = DateTime.Now.ToString("u");
|
||
dtime = dtime.Substring(0, dtime.Length - 1);
|
||
int AutoManageIdx = GetAutoManageIdx();
|
||
|
||
int startcol = 0, startlayer = 0;
|
||
|
||
startcol = Convert.ToInt32(_startsite.Substring(3, 2));
|
||
startlayer = Convert.ToInt32(_startsite.Substring(6, 2));
|
||
|
||
int SENDOUT_TYPE = 1;
|
||
if (EQUIP_TYPE == "03")
|
||
{
|
||
SENDOUT_TYPE = 2;
|
||
}
|
||
|
||
Sql = "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,FMANAGEID,SENDOUT_TYPE) " +
|
||
"values(" + AutoManageIdx + ",'" + LOC.PALLET_CODE + "','" + _tasktype + "',1,'" + GetWarehouseIndex() + "','" + _startposition + "','" + _startsite + "','" + GetWarehouseIndex() + "','"
|
||
+ _endposition + "','" + _endsite + "'," + flaneway + "," + stackno + ",'" + UseAwayFork + "','" + dtime + "',1,1," + startcol + "," + startlayer + ",'" + TASK_NO + "'," + SENDOUT_TYPE + ")";
|
||
ds = DbHelperSQL.Query(Sql);
|
||
int AutoManageIdx2 = GetAutoManageIdx();
|
||
|
||
//在此处就添加返库任务
|
||
Sql = "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,FMANAGEID,SENDOUT_TYPE) " +
|
||
"values(" + AutoManageIdx2 + ",'" + LOC.PALLET_CODE + "b','1',1,'" + GetWarehouseIndex() + "','" + _endposition + "','" + _endsite + "','" + GetWarehouseIndex() + "','"
|
||
+ _startposition + "','" + _startsite + "'," + flaneway + "," + stackno + ",'" + UseAwayFork + "','" + dtime + "',1,1," + startcol + "," + startlayer + ",'" + TASK_NO + "'," + SENDOUT_TYPE + ")";
|
||
ds = DbHelperSQL.Query(Sql);
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
bResult = false;
|
||
sResult = "下达盘库任务时出错:" + ex.Message;
|
||
}
|
||
return bResult;
|
||
}
|
||
|
||
public bool START_BOXINVTASK(string WH_ID, string TASK_NO, List<LOC_BoxInvTask> LOC_LIST, string xmlin, out string sResult)
|
||
{
|
||
bool bResult = true;
|
||
sResult = string.Empty;
|
||
|
||
if (LOC_LIST.Count() <= 0)
|
||
{
|
||
sResult = "盘库下发的货位号为空!";
|
||
return false;
|
||
}
|
||
|
||
DataSet ds_task = DbHelperSQL.Query("select * from T_warehouse");
|
||
if (ds_task.Tables[0].Rows[0]["F_TASK_NO"] != DBNull.Value && ds_task.Tables[0].Rows[0]["F_TASK_NO"].ToString() != "0" && ds_task.Tables[0].Rows[0]["F_TASK_NO"].ToString() != "")
|
||
{//不空闲
|
||
if (ds_task.Tables[0].Rows[0]["F_TASK_NO"].ToString() == TASK_NO)
|
||
{
|
||
return true;
|
||
}
|
||
DataView dv_task_list = DbHelperSQL.Query("select * from t_task_list where TASK_NO='" + TASK_NO + "'").Tables[0].DefaultView;
|
||
if (dv_task_list.Count > 0)
|
||
sResult = "已在队列中";
|
||
else
|
||
{
|
||
DbHelperSQL.ExecuteSql("insert into T_TASK_LIST (TASK_NO,METHOD_NAME,XMLIN,TASK_STATUS,TASK_START_TIME) values ('" + TASK_NO + "','startBoxInvTask','" + xmlin + "','Waiting',getdate())");
|
||
sResult = "有正在执行中的任务。任务号:" + ds_task.Tables[0].Rows[0]["F_TASK_NO"] + ",任务类型:" + ds_task.Tables[0].Rows[0]["F_TASK_TYPE"];
|
||
}
|
||
return true;
|
||
}
|
||
|
||
string outxml = string.Empty;
|
||
taskStart ws = new taskStart();
|
||
bResult = ws.Notify(WH_ID, TASK_NO, out outxml);
|
||
DbHelperSQL.ExecuteSql("delete from t_task_list where TASK_NO='" + TASK_NO + "'");
|
||
if (!bResult)
|
||
return true;
|
||
|
||
DbHelperSQL.ExecuteSql("update T_WareHouse set F_WarehouseIndex='" + WH_ID + "',F_TASK_NO='" + TASK_NO + "',F_TASK_TYPE='BoxInv',F_TASK_STATUS='RUN',F_EQUIP_TYPE=''");
|
||
foreach (LOC_BoxInvTask LOC in LOC_LIST)
|
||
{
|
||
string Sql, _tasktype, _startposition, _startsite = "-";// _endposition, _endsite = "-";
|
||
|
||
DataSet ds;
|
||
_tasktype = "2";
|
||
//_endposition = PLATFORM_NO;
|
||
int flaneway = 0;
|
||
int stackno = 0;
|
||
|
||
_startsite = LOC.LOC_NO;
|
||
ds = DbHelperSQL.Query("SELECT * FROM ST_CELL where FCELLSTATUS<> '-1' and FCELLCODE='" + _startsite + "'");
|
||
if (ds.Tables[0].Rows.Count == 0)
|
||
{
|
||
sResult = "起始位置和起始货位编码在数据库中没有记录或货位不可用!";
|
||
return false;
|
||
}
|
||
_startposition = ds.Tables[0].Rows[0]["FLaneWay"].ToString();
|
||
flaneway = Convert.ToInt32(_startposition);
|
||
|
||
try
|
||
{
|
||
string FSTARTCELL = _startsite, UseAwayFork = "-";
|
||
int FSTARTDEVICE = Convert.ToInt32(_startposition);
|
||
//int FENDDEVICE = Convert.ToInt32(_endposition);
|
||
//Model.MDevice devinfo = Model.CGetInfo.GetDeviceInfo(FSTARTDEVICE);
|
||
|
||
stackno = Convert.ToInt32(DbHelperSQL.GetSingle("SELECT F_StackIndex FROM T_Base_LaneInfo WHERE (F_LaneDeviceIndex = " + flaneway + ")"));
|
||
string dtime = DateTime.Now.ToString("u");
|
||
dtime = dtime.Substring(0, dtime.Length - 1);
|
||
int AutoManageIdx = GetAutoManageIdx();
|
||
|
||
int startcol = 0, startlayer = 0;
|
||
|
||
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,BOX_QUANTITY,UNPACK_QUANTITY,FStartCol,FStartLayer,FMANAGEID) " +
|
||
"values(" + AutoManageIdx + ",'" + LOC.PALLET_CODE + "','" + _tasktype + "',1,'" + GetWarehouseIndex() + "','" + _startposition + "','" + _startsite + "','" + GetWarehouseIndex() + "','"
|
||
+ "12029" + "','12029'," + flaneway + "," + stackno + ",'" + UseAwayFork + "','" + dtime + "',1,1," + startcol + "," + startlayer + ",'" + TASK_NO + "')";
|
||
ds = DbHelperSQL.Query(Sql);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
throw ex;
|
||
}
|
||
}
|
||
|
||
return bResult;
|
||
}
|
||
|
||
public bool GETWHEQUIPSTATUS(string WH_ID, out string sResult, out List<RGDWCSServices.WCS.getWhEquipStatus.DETAIL> DETAIL_LIST)
|
||
{
|
||
bool bResult = true;
|
||
sResult = string.Empty;
|
||
DETAIL_LIST = new List<WCS.getWhEquipStatus.DETAIL>();
|
||
|
||
DataSet ds = DbHelperSQL.Query("select F_DeviceIndex,F_DeviceName,F_RunState from t_base_device");
|
||
|
||
foreach (DataRow dr in ds.Tables[0].Rows)
|
||
{
|
||
WCS.getWhEquipStatus.DETAIL detail = new WCS.getWhEquipStatus.DETAIL();
|
||
detail.CUR_STATUS = dr["F_RunState"].ToString();
|
||
detail.DEVICE_NO = dr["F_DeviceIndex"].ToString();
|
||
detail.DEVICE_NAME = dr["F_DeviceName"].ToString();
|
||
DETAIL_LIST.Add(detail);
|
||
}
|
||
|
||
return bResult;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 扫码上架,入库口到叠盘机任务
|
||
/// </summary>
|
||
/// <param name="TASK_NO"></param>
|
||
/// <param name="BOX_BAR_CODE"></param>
|
||
/// <param name="sResult"></param>
|
||
/// <returns></returns>
|
||
public bool PACKTASK(string TASK_NO, string BOX_BAR_CODE, out string sResult)
|
||
{
|
||
bool bResult = true;
|
||
sResult = string.Empty;
|
||
|
||
string Sql, _tasktype, _startposition, _startsite = "-", _endposition, _endsite = "-";
|
||
|
||
DataSet ds;
|
||
_tasktype = "2";
|
||
_startposition = "12001";
|
||
_endposition = "12004";//区分叠盘机
|
||
int flaneway = -1;
|
||
int stackno = -1;
|
||
|
||
try
|
||
{
|
||
string UseAwayFork = "-";
|
||
string dtime = DateTime.Now.ToString("u");
|
||
dtime = dtime.Substring(0, dtime.Length - 1);
|
||
int AutoManageIdx = GetAutoManageIdx();
|
||
|
||
int startcol = 0, startlayer = 0;
|
||
|
||
Sql = "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,FMANAGEID) " +
|
||
"values(" + AutoManageIdx + ",'" + BOX_BAR_CODE + "','" + _tasktype + "',1,'" + GetWarehouseIndex() + "','" + _startposition + "','" + _startsite + "','" + GetWarehouseIndex() + "','"
|
||
+ _endposition + "','" + _endsite + "'," + flaneway + "," + stackno + ",'" + UseAwayFork + "','" + dtime + "',1,1," + startcol + "," + startlayer + ",'" + TASK_NO + "')";
|
||
ds = DbHelperSQL.Query(Sql);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
throw ex;
|
||
}
|
||
|
||
return bResult;
|
||
}
|
||
|
||
public bool STARTARRANGETASK(string WH_ID, string EQUIP_TYPE, string TASK_NO, string ARRANGE_TYPE, List<LOCATION> LOC_LIST, string xmlin, out string sResult)
|
||
{
|
||
bool bResult = true;
|
||
sResult = string.Empty;
|
||
|
||
if (LOC_LIST.Count() <= 0)
|
||
{
|
||
sResult = "整理下发的货位号为空!";
|
||
return false;
|
||
}
|
||
|
||
DataSet ds_task = DbHelperSQL.Query("select * from T_warehouse");
|
||
if (ds_task.Tables[0].Rows[0]["F_TASK_NO"] != DBNull.Value && ds_task.Tables[0].Rows[0]["F_TASK_NO"].ToString() != "0" && ds_task.Tables[0].Rows[0]["F_TASK_NO"].ToString() != "")
|
||
{//不空闲
|
||
if (ds_task.Tables[0].Rows[0]["F_TASK_NO"].ToString() == TASK_NO)
|
||
{
|
||
return true;
|
||
}
|
||
DataView dv_task_list = DbHelperSQL.Query("select * from t_task_list where TASK_NO='" + TASK_NO + "'").Tables[0].DefaultView;
|
||
if (dv_task_list.Count > 0)
|
||
sResult = "已在队列中";
|
||
else
|
||
{
|
||
DbHelperSQL.ExecuteSql("insert into T_TASK_LIST TASK_NO,METHOD_NAME,XMLIN,TASK_STATUS,TASK_START_TIME values ('" + TASK_NO + "','startArrangeTask','" + xmlin + "','Waiting',getdate())");
|
||
sResult = "有正在执行中的任务。任务号:" + ds_task.Tables[0].Rows[0]["F_TASK_NO"] + ",任务类型:" + ds_task.Tables[0].Rows[0]["F_TASK_TYPE"];
|
||
}
|
||
return true;
|
||
}
|
||
|
||
string outxml = string.Empty;
|
||
taskStart ws = new taskStart();
|
||
bResult = ws.Notify(WH_ID, TASK_NO, out outxml);
|
||
DbHelperSQL.ExecuteSql("delete from t_task_list where TASK_NO='" + TASK_NO + "'");
|
||
if (!bResult)
|
||
return true;
|
||
|
||
DbHelperSQL.ExecuteSql("update T_WareHouse set F_WarehouseIndex='" + WH_ID + "',F_TASK_NO='" + TASK_NO + "',F_TASK_TYPE='Arrange',F_TASK_STATUS='RUN',F_EQUIP_TYPE='" + EQUIP_TYPE + "'");
|
||
|
||
return bResult;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 删除指定任务号等待执行任务
|
||
/// </summary>
|
||
/// <param name="TASK_NO"></param>
|
||
/// <param name="sResult"></param>
|
||
/// <returns></returns>
|
||
public bool STOPTASK(string TASK_NO, out string sResult)
|
||
{
|
||
LogUtil.WriteLog("webService", "HouseBase_STOPTASK;TASK_NO:" + TASK_NO);
|
||
bool bResult = true;
|
||
sResult = string.Empty;
|
||
|
||
DataView dv = DbHelperSQL.Query("select F_TASK_NO,F_TASK_TYPE,F_TASK_STATUS,F_EQUIP_TYPE from T_Warehouse").Tables[0].DefaultView;
|
||
|
||
if (TASK_NO != dv[0]["F_TASK_NO"].ToString())
|
||
{
|
||
DataView dv_list = DbHelperSQL.Query("select * from t_task_list where task_status in ('Waiting','Runnning') and task_no='" + TASK_NO + "'").Tables[0].DefaultView;
|
||
if (dv_list.Count > 0)
|
||
{
|
||
DbHelperSQL.ExecuteSql("update t_task_list set task_status='stopped' where task_id=" + dv_list[0]["task_id"]);
|
||
return true;
|
||
}
|
||
else
|
||
{
|
||
bResult = false;
|
||
sResult = "未找到对应任务。";
|
||
return bResult;
|
||
}
|
||
}
|
||
string TASK_TYPE = dv[0]["F_TASK_TYPE"].ToString();
|
||
|
||
switch (TASK_TYPE)
|
||
{
|
||
case "In":
|
||
//DataTable dt = DbHelperSQL.Query("select * from t_manage_task where fmanageid='" + TASK_NO + "'").Tables[0];
|
||
//if (dt.Rows.Count == 0)
|
||
//{
|
||
// DbHelperSQL.ExecuteSql("update T_Warehouse set F_TASK_NO='0',f_TASK_TYPE='',f_task_status='FREE',F_IO_WH_SORT_CODE='',F_LASTBOX_REACH_FLAG=0");
|
||
//}
|
||
//else
|
||
//{
|
||
// DbHelperSQL.ExecuteSql("update T_Warehouse set f_task_status='STOPPING'");
|
||
// //bResult = false;
|
||
// sResult = "正在停止,有未执行完的任务。";
|
||
//}
|
||
bool TaskCleared = true;
|
||
//查找目标叠盘机的任务,标记last
|
||
//查找有箱无任务的叠盘机,放行
|
||
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++)
|
||
{
|
||
DataView dvt = DbHelperSQL.Query("select FID from t_manage_task where FENDDEVICE=" + dv[i]["F_bindingdevice"]).Tables[0].DefaultView;
|
||
if (dvt.Count != 0 || dv[i]["f_Barcode"].ToString() != "")
|
||
{
|
||
TaskCleared = false;
|
||
}
|
||
}
|
||
//停止任务接口:停止任务时总是报“正在停止,有未执行完的任务”
|
||
//标记入库任务
|
||
if (!TaskCleared)
|
||
{
|
||
DbHelperSQL.ExecuteSql("update T_Warehouse set f_task_status='STOPPING'");
|
||
//bResult = false;
|
||
sResult = "正在停止,有未执行完的任务。";
|
||
}
|
||
else
|
||
{
|
||
DataTable dt = DbHelperSQL.Query("select * from t_manage_task where fmanageid='" + TASK_NO + "'").Tables[0];
|
||
if (dt.Rows.Count == 0)
|
||
{
|
||
DbHelperSQL.ExecuteSql("update T_Warehouse set F_TASK_NO='0',f_TASK_TYPE='',f_task_status='FREE',F_IO_WH_SORT_CODE=''");
|
||
}
|
||
else
|
||
{
|
||
DbHelperSQL.ExecuteSql("update T_Warehouse set f_task_status='STOPPING'");
|
||
//bResult = false;
|
||
sResult = "正在停止,有未执行完的任务。";
|
||
}
|
||
}
|
||
break;
|
||
|
||
case "Out":
|
||
//DbHelperSQL.Query("delete from t_manage_task where fmanageid='" + TASK_NO + "'");
|
||
DataTable dt3 = DbHelperSQL.Query("select * from t_manage_task where fmanageid='" + TASK_NO + "'").Tables[0];
|
||
if (dt3.Rows.Count == 0)
|
||
{
|
||
DbHelperSQL.ExecuteSql("update T_Warehouse set F_TASK_NO='0',f_TASK_TYPE='',f_task_status='FREE',F_IO_WH_SORT_CODE='',F_LASTBOX_REACH_FLAG=0");
|
||
}
|
||
else
|
||
{
|
||
DbHelperSQL.ExecuteSql("update T_Warehouse set f_task_status='STOPPING'");
|
||
//bResult = false;
|
||
sResult = "正在停止,有未执行完的任务。";
|
||
}
|
||
//DbHelperSQL.Query("update t_warehouse set f_task_status='STOPPING'");
|
||
////DbHelperSQL.ExecuteSql("update T_Warehouse set F_TASK_NO='0',f_TASK_TYPE='',f_task_status='FREE'");
|
||
//DataView dv_manage = DbHelperSQL.Query("select FID from t_manage_task where fmanageid='" + TASK_NO + "'").Tables[0].DefaultView;
|
||
//bool bcompleted = false;
|
||
//if (dv_manage.Count == 0)
|
||
//{
|
||
// DataView dv_rfid = DbHelperSQL.Query("select SOURCE_CELL_CODE from IO_RFID where STATION_CODE='12002' and not SOURCE_CELL_CODE='' and SOURCE_CELL_CODE is not null").Tables[0].DefaultView;
|
||
// if (dv_rfid.Count == 0)
|
||
// {//射频无物
|
||
// DbHelperSQL.ExecuteSql("update T_Warehouse set F_TASK_NO='0',f_TASK_TYPE='',f_task_status='FREE',F_IO_WH_SORT_CODE='',F_LASTBOX_REACH_FLAG=0");
|
||
// bcompleted = true;
|
||
// }
|
||
//}
|
||
//if (!bcompleted)
|
||
//{
|
||
// //bResult = false;
|
||
// sResult = "正在停止,有未执行完的任务。";
|
||
//}
|
||
break;
|
||
|
||
case "BoxInv":
|
||
case "Inventory":
|
||
DbHelperSQL.Query("delete from t_manage_task where FIntoStepOK=0 and FMANAGETASKTYPE='5' and fmanageid='" + TASK_NO + "'");
|
||
DataTable dtInventory = DbHelperSQL.Query("select * from t_manage_task where fmanageid='" + TASK_NO + "'").Tables[0];
|
||
if (dtInventory.Rows.Count == 0)
|
||
{
|
||
DataView dv_rfid = DbHelperSQL.Query("select SOURCE_CELL_CODE from IO_RFID where STATION_CODE='12002' and (not SOURCE_CELL_CODE='' or SOURCE_CELL_CODE is not null)").Tables[0].DefaultView;
|
||
if (dv_rfid.Count == 0)
|
||
{//射频无物
|
||
DbHelperSQL.ExecuteSql("update T_Warehouse set F_TASK_NO='0',f_TASK_TYPE='',f_task_status='FREE',F_IO_WH_SORT_CODE=''");
|
||
}
|
||
else
|
||
{
|
||
//bResult = false;
|
||
sResult = "正在停止,有未执行完的任务。";
|
||
DbHelperSQL.ExecuteSql("update T_Warehouse set f_task_status='STOPPING'");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
//bResult = false;
|
||
sResult = "正在停止,有未执行完的任务。";
|
||
DbHelperSQL.ExecuteSql("update T_Warehouse set f_task_status='STOPPING'");
|
||
}
|
||
break;
|
||
}
|
||
|
||
return bResult;
|
||
}
|
||
}
|
||
} |