/// <summary> /// 入库任务处理 /// </summary> /// <param name="item"></param> public void ProcessInTask(WCS_TASK_ITEM item) { try { // 摆渡车于运输车对接点 String AR = ConfigurationManager.AppSettings["StandbyAR"]; // 运输车[内]待命复位点 String R = ConfigurationManager.AppSettings["StandbyP2"]; // 运输车于运输车对接点 String RR = ConfigurationManager.AppSettings["StandbyRR"]; // 获取对应清单 String sql = String.Format(@"select TASK_UID_1,LOC_TO_1,SITE_1, TASK_UID_2,LOC_TO_2,SITE_2 from wcs_command_v where WCS_NO = '{0}'", item.WCS_NO); DataTable dt = mySQL.SelectAll(sql); if (tools.IsNoData(dt)) { return; } String taskid1 = dt.Rows[0]["TASK_UID_1"].ToString(); //任务1 String taskid2 = dt.Rows[0]["TASK_UID_2"].ToString(); //任务2 String site1 = dt.Rows[0]["SITE_1"].ToString(); //状态1 String site2 = dt.Rows[0]["SITE_2"].ToString(); //状态2 String loc1 = dt.Rows[0]["LOC_TO_1"].ToString(); //目标点1 String loc2 = dt.Rows[0]["LOC_TO_2"].ToString(); //目标点2 // 默认入库时 taskid1对接运输车设备辊台②、taskid2对接运输车设备辊台① String loc_1 = task.GetRGVLoc(2, loc1); //辊台②任务1 String loc_2 = task.GetRGVLoc(1, loc2); //辊台①任务2 String loc; //执行目标 switch (item.ITEM_ID) //根据最后的设备指令,可得货物已在流程中该设备对接的下一设备处 { case ItemId.固定辊台入库: //目的设备为对接的摆渡车,可直接加以分配 #region 将摆渡车移至运输车对接位置 // 可断定货物需移至运输车 // 生成摆渡车任务 task.CreateCustomItem(item.WCS_NO, ItemId.摆渡车定位运输车对接, item.LOC_TO, "", AR, ItemStatus.请求执行); #endregion break; case ItemId.摆渡车入库: //目的设备为对接的运输车,可直接加以分配 #region 将运输车移至行车对接位置 || 运输车间对接 // 根据货物目的地判断是否需要运输车对接运输车 loc = task.GetLocByRgvToLoc(loc_1, loc_2); if (loc == "NG") { //不能没有货物目的位置 break; } // 判断是否需要对接到运输车[内]范围内作业 if (Convert.ToInt32(loc) >= Convert.ToInt32(R)) // 需对接运输车[内] { // 生成运输车[内]复位任务 task.CreateItem(item.WCS_NO, ItemId.运输车复位2, R); // 待分配设备 // 生成运输车[外]对接位任务 task.CreateCustomItem(item.WCS_NO, ItemId.运输车对接定位, item.LOC_TO, "", RR, ItemStatus.请求执行); } else { // 生成运输车[外]定位任务 task.CreateCustomItem(item.WCS_NO, ItemId.运输车定位, item.LOC_TO, "", loc, ItemStatus.请求执行); } #endregion break; case ItemId.运输车入库: //目的设备为对接的运输车,可直接加以分配 #region 将运输车移至行车对接位置 // 判断是否作业过运输车定位对接行车任务 String sqlrr = String.Format(@"select * from wcs_task_item where ITEM_ID = '033' and STATUS not in ('E','X') and WCS_NO = '{0}'", item.WCS_NO); DataTable dtrr = mySQL.SelectAll(sqlrr); if (tools.IsNoData(dt)) { loc = task.GetLocByRgvToLoc(loc_1, loc_2); if (loc == "NG") { //不能没有货物目的位置 break; } // 生成运输车定位任务 task.CreateCustomItem(item.WCS_NO, ItemId.运输车定位, item.LOC_TO, "", loc, ItemStatus.请求执行); } #endregion break; case ItemId.行车取货: #region 将运输车移至行车对接位置 && 行车定位 // 默认入库时 taskid1对接运输车设备辊台②、taskid2对接运输车设备辊台① // 获取当前运输车加以分配 String rgv = task.GetItemDeviceLast(item.WCS_NO, ItemId.运输车定位); // =>获取当前运输车资讯 // =>获取有货&无货辊台各对应的WMS任务目标 String loc_Y = ""; //有货辊台对应目标点 String loc_N = ""; //无货辊台对应目标点 // 根据当前运输车坐标及任务目标,生成对应运输车定位/对接运输车任务 // 生成行车库存定位任务 task.CreateCustomItem(item.WCS_NO, ItemId.行车库存定位, item.DEVICE, "", task.GetABCStockLoc(loc_N), ItemStatus.请求执行); #endregion break; case ItemId.行车放货: #region 行车定位 // 未完成的任务目标点 loc = site1 == "Y" ? loc2 : loc1; // 行车到运输车对接取货点 String ABCloc = task.GetABCTrackLoc(loc); //获取对应行车位置 // 生成行车轨道定位任务 task.CreateCustomItem(item.WCS_NO, ItemId.行车轨道定位, item.DEVICE, "", ABCloc, ItemStatus.请求执行); #endregion break; default: break; } } catch (Exception ex) { throw ex; } }