AHTC/WebService/Interface/HouseBase.cs

755 lines
35 KiB
C#
Raw Permalink Normal View History

2025-05-19 09:22:33 +08:00
//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;
}
}
}