F1LiftToStoreJob.cs 7.4 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 F1LiftToStoreJob() : base()
        {

        }
        public override Job Run(AgvInfo agv)
        {
            agv.SetJobContext(new bean.agv.JobContext()
            {
                MissionId = JobParam.GetMissionInfo().missionId,
                AgvTask = agv.TaskRunState.Task,
                JobFullName = this.ToString(),
                JobStep = JobRunStep.PreStep(),
                Name = agv.Name,
                JobParam = JobParam
            });
            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);
                    //上报状态
                    manager.UploadManager.UploadTransportStatus(new service.model.TransportStatus(agv.CurJob.JobParam.GetMissionInfo().missionId,
                        service.model.TransportStatus.TypeStr.status, agv.Name, agv.Place.Name, service.model.TransportStatus.ModeStr.auto,
                        $"到达{ JobParam.SrcNode.Name }"));
                    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().sourceFloor))
                {
                    JobRunStep.ToNextStep(RunStep.S1F_LiftToStore_02_02_EnterLift);
                    runInfo = $"{JobParam.SrcNode.AliceName}门已开启,去取料点";
                    //任务状态变更
                    MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.返回电梯到达, out string msg);
                    AllocateTask(agv, $"{JobParam.SrcNode.Name}_{SettingString.PutShelfOn}");
                    JobRunStep.Msg = runInfo;
                }
            }
            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}_{JobParam.SrcNode.Name}");
                }
            }
            else if (JobRunStep.IsStep(RunStep.S1F_LiftToStore_03_PutShelfOn))
            {
                if (agv.TaskRunState.CheckTaskFinished(agv.Name))
                {
                    JobRunStep.ToNextStep(RunStep.S1F_LiftToStore_04_LeaveLift);
                    //上报状态
                    manager.UploadManager.UploadTransportStatus(new service.model.TransportStatus(agv.CurJob.JobParam.GetMissionInfo().missionId,
                        service.model.TransportStatus.TypeStr.status, agv.Name, agv.Place.Name, service.model.TransportStatus.ModeStr.auto,
                        $"电梯取车"));
                    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);
                    //关门
                    bool rtn = lift.LiftContext.AGVLeave(JobParam.SrcNode.Name, agv);
                    runInfo = $"离开{JobParam.SrcNode.AliceName},关闭电梯门:{rtn}";
                    //任务状态变更
                    MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.返回离开电梯, out string msg);
                    JobRunStep.Msg = runInfo;
                }
            }
            else if (JobRunStep.IsStep(RunStep.S1F_LiftToStore_05_CloseLiftDoor))
            {
                JobRunStep.ToNextStep(RunStep.S1F_LiftToStore_06_ToStore);
                runInfo = $"关闭{JobParam.SrcNode.AliceName}门完成,去{JobParam.CurTargetNode.AliceName}放料点";
                //任务状态变更
                MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.返回起始地, out string msg);
                AllocateTask(agv, $"{JobParam.CurTargetNode.Name}_{SettingString.TakeShelfOff}");
                JobRunStep.Msg = runInfo;
            }
            else if (JobRunStep.IsStep(RunStep.S1F_LiftToStore_06_ToStore))
            {
                if (agv.TaskRunState.CheckTaskFinished(agv.Name))
                {
                    JobRunStep.ToNextStep(RunStep.S1F_LiftToStore_07_TakeShelfOff);
                    //上报状态
                    manager.UploadManager.UploadTransportStatus(new service.model.TransportStatus(agv.CurJob.JobParam.GetMissionInfo().missionId,
                        service.model.TransportStatus.TypeStr.status, agv.Name, agv.Place.Name, service.model.TransportStatus.ModeStr.auto,
                        $"到达{ JobParam.CurTargetNode.Name }"));
                    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;
                    //上报状态
                    manager.UploadManager.UploadTransportStatus(new service.model.TransportStatus(agv.CurJob.JobParam.GetMissionInfo().missionId,
                        service.model.TransportStatus.TypeStr.status, agv.Name, agv.Place.Name, service.model.TransportStatus.ModeStr.auto,
                        $"还车"));
                }
            }
            else if (JobRunStep.IsStep(RunStep.END))
            {
                JobRunStep.EndJob();
                return null;
            }
            return this;
        }
    }
}