//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; } } } /// 调用表库 /// 调用表库 /// /// 方法名 /// 入参 /// 出参 /// 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; } /// 反射调用 /// 反射调用 /// /// 类名(全) /// 方法 /// 入参 /// 出参 /// 返回结果 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 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 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 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_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 DETAIL_LIST) { bool bResult = true; sResult = string.Empty; DETAIL_LIST = new List(); 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; } /// /// 扫码上架,入库口到叠盘机任务 /// /// /// /// /// 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 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; } /// /// 删除指定任务号等待执行任务 /// /// /// /// 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; } } }