BoxOutJobType.cs 2.9 KB
using Common;

namespace DeviceLibrary
{
    /// <summary>
    /// 云仓出料任务
    /// </summary>
    public class BoxOutJobType : JobType
    {

        /// <summary>
        /// 云仓出料任务
        /// </summary>
        /// <param name="agv"></param>
        /// <returns></returns>
        public override Job GetNewJob(Agv_Info agv)
        {

            if (!Context.CheckCanExecuteMission(agv))
                return null;
            if (!Context.CheckAGVStatusNone(agv))
                return null;
            string rfid = "";
            string checkPlace = SettingString.D2;
            //查找云仓出料的任务
            if (FindNeedLeaveMission(agv, checkPlace, out rfid,false))
            {
                LogUtil.info(string.Format("{0} [{1}]需要出满料串{2}", agv.Name, checkPlace, rfid));
                return new GetFullShelfJob(agv.Place, checkPlace, rfid);
            }
            if (FindNeedLeaveMission(agv, checkPlace,out rfid,true))
            {
                if (BoxInJobType.FindNeedEnterMission(agv, SettingString.D1, true)||
                    BoxInJobType.FindNeedEnterMission(agv, SettingString.D3, true)||
                    BoxInJobType.FindNeedEnterMission(agv, SettingString.A4, true)||
                    BoxInJobType.FindNeedEnterMission(agv, SettingString.A2, true))
                {
                    LogUtil.info(string.Format("{0} [{1}]需要出空料串{2}", agv.Name, checkPlace, rfid));
                    return new GetShelfJob(agv.Place, checkPlace, rfid, false);
                }

            }

            checkPlace = SettingString.D4;
            if (FindNeedLeaveMission(agv, checkPlace, out rfid,false))
            {
                LogUtil.info(string.Format("{0} [{1}]需要出满料串{2}", agv.Name, checkPlace, rfid));
                return new GetFullShelfJob(agv.Place, checkPlace, rfid);
            }
            if (FindNeedLeaveMission(agv, checkPlace, out rfid,true))
            {
                if (BoxInJobType.FindNeedEnterMission(agv, SettingString.D1, true) ||
                    BoxInJobType.FindNeedEnterMission(agv, SettingString.D3, true) ||
                    BoxInJobType.FindNeedEnterMission(agv, SettingString.A4, true) ||
                    BoxInJobType.FindNeedEnterMission(agv, SettingString.A2, true))
                {
                    LogUtil.info(string.Format("{0} [{1}]需要出空料串{2}", agv.Name, checkPlace, rfid));
                    return new GetShelfJob(agv.Place, checkPlace, rfid, false);
                }

            }

            return null;
        }

        public static bool CheckFullTask(string rfid,out string targetName)
        {
            targetName = "";
            if (RequestManager.FindFullShelfTarget(rfid, out BoxDestInfo destInfo))
            {
                targetName = destInfo.data;
                return true;
            }
            return false;
        }
    }


}