F1LiftToStoreJob.cs 5.5 KB
using Common;
using DeviceLibrary.manager;

namespace DeviceLibrary.bean.job
{
    /// <summary>
    /// 1F,电梯到库房,中间一个电梯(空架返回)
    /// </summary>
    public class F1LiftToStoreJob : Job
    {
        /// <summary>
        /// 1F空架返回任务
        /// </summary>
        public F1LiftToStoreJob(JobParam jobParam) : base(jobParam)
        {
        }
        public override Job Run(AgvInfo agv)
        {
            if (JobRunStep.IsStep(RunStep.NONE))
            {
                JobRunStep.ToNextStep(RunStep.S1F_LiftToStore_01_ToLift);
                runInfo = $"任务开始:去{JobParam.SrcNode.AliceName}";
                JobRunStep.Msg = runInfo;
                AllocateTask(agv, $"{JobParam.SrcNode.Name}");
            }
            else if (JobRunStep.IsStep(RunStep.S1F_LiftToStore_01_ToLift))
            {
                if (agv.TaskRunState.CheckTaskFinished(agv.Name))
                {
                    JobRunStep.ToNextStep(RunStep.S1F_LiftToStore_02_01_WaitLiftDoorOpen);
                    runInfo = $"到达{JobParam.SrcNode.AliceName},等待门开启";
                    JobRunStep.Msg = runInfo;
                }
            }
            else if (JobRunStep.IsStep(RunStep.S1F_LiftToStore_02_01_WaitLiftDoorOpen))
            {
                if (lift.LiftContext.IsDoorOpen(JobParam.SrcNode.Name,JobParam.GetMissionInfo().destinationFloor))
                {
                    JobRunStep.ToNextStep(RunStep.S1F_LiftToStore_02_02_EnterLift);
                    runInfo = $"{JobParam.SrcNode.AliceName}门已开启,去取料点";
                    JobRunStep.Msg = runInfo;
                    //任务状态变更
                    MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.返回电梯到达, out string msg);
                    AllocateTask(agv,$"{JobParam.SrcNode.Name}_{SettingString.PutShelfOn}");
                }
            }
            else if(JobRunStep.IsStep(RunStep.S1F_LiftToStore_02_02_EnterLift))
            {
                if (agv.TaskRunState.CheckTaskFinished(agv.Name))
                {
                    JobRunStep.ToNextStep(RunStep.S1F_LiftToStore_03_PutShelfOn);
                    runInfo = $"到达{JobParam.SrcNode.AliceName}取料点,开始取料车";
                    JobRunStep.Msg = runInfo;
                    AllocateTask(agv,SettingString.PutShelfOn);
                }
            }
            else if (JobRunStep.IsStep(RunStep.S1F_LiftToStore_03_PutShelfOn))
            {
                if (agv.TaskRunState.CheckTaskFinished(agv.Name))
                {
                    JobRunStep.ToNextStep(RunStep.S1F_LiftToStore_04_LeaveLift);
                    runInfo = $"在{JobParam.SrcNode.AliceName}取料车完成,准备离开";
                    JobRunStep.Msg = runInfo; 
                    AllocateTask(agv, $"{SettingString.Leave}_{JobParam.SrcNode.Name}");
                }
            }
            else if (JobRunStep.IsStep(RunStep.S1F_LiftToStore_04_LeaveLift))
            {
                if (agv.TaskRunState.CheckTaskFinished(agv.Name))
                {
                    JobRunStep.ToNextStep(RunStep.S1F_LiftToStore_05_CloseLiftDoor);
                    runInfo = $"离开{JobParam.SrcNode.AliceName},关闭电梯门";
                    //任务状态变更
                    MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.返回离开电梯, out string msg);
                    JobRunStep.Msg = runInfo;
                    //关门
                    lift.LiftContext.CloseDoor(JobParam.SrcNode.Name,agv);                    
                }
            }
            else if (JobRunStep.IsStep(RunStep.S1F_LiftToStore_05_CloseLiftDoor))
            {
                JobRunStep.ToNextStep(RunStep.S1F_LiftToStore_06_ToStore);
                runInfo = $"关闭{JobParam.SrcNode.AliceName}门完成,去{JobParam.CurTargetNode.AliceName}放料点";
                JobRunStep.Msg = runInfo;
                //任务状态变更
                MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.返回起始地, out string msg);
                AllocateTask(agv, $"{JobParam.CurTargetNode.Name}_{SettingString.TakeShelfOff}");
            }
            else if (JobRunStep.IsStep(RunStep.S1F_LiftToStore_06_ToStore))
            {
                if (agv.TaskRunState.CheckTaskFinished(agv.Name))
                {
                    JobRunStep.ToNextStep(RunStep.S1F_LiftToStore_07_TakeShelfOff);
                    runInfo = $"到达{JobParam.CurTargetNode.AliceName}放料点,卸下料车";
                    JobRunStep.Msg = runInfo;
                    AllocateTask(agv, SettingString.TakeShelfOff);
                }
            }
            else if (JobRunStep.IsStep(RunStep.S1F_LiftToStore_07_TakeShelfOff))
            {
                if (agv.TaskRunState.CheckTaskFinished(agv.Name))
                {
                    JobRunStep.ToNextStep(RunStep.END);
                    runInfo = $"任务结束:在{JobParam.CurTargetNode.AliceName}卸下料车完成";
                    //任务状态变更
                    MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.完成, out string msg);
                    JobRunStep.Msg = runInfo;
                }
            }
            else if (JobRunStep.IsStep(RunStep.END))
            {
                JobRunStep.EndJob();
                return null;
            }
            return this;
        }
    }
}