Esempio n. 1
0
        /// <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;
            }
        }