TakeOldJob.cs 3.4 KB
using System;
using Model;

namespace BLL
{
    public class TakeOldJob : IJob
    {
        private AgvInfo _info;
        private MoveJob move;
        private string mission;
        //private DateTime _getTime;
        private JobStep<TakeOldStep> takeOldStep;

        public TakeOldJob()
        {
            takeOldStep = new JobStep<TakeOldStep>(TakeOldStep.None);
            Common.log.Debug("加载TakeOldJob");
        }

        public bool IsEnd { get; private set; }

        public IJob Execute(AgvInfo info)
        {
            _info = info;
            if (takeOldStep.Equals(TakeOldStep.None))
            {
                info.OldSteel = 0;
                takeOldStep.NextStep(TakeOldStep.FindLine);
            }
            else if (takeOldStep.Equals(TakeOldStep.FindLine))
            {
                if (info.OldSteel == 5)
                {
                    takeOldStep.Msg = info.Name + "旧钢板已满";
                    takeOldStep.NextStep(TakeOldStep.GoWashPoint);
                }
                else
                {
                    FindLine(info);
                }
            }
            else if (takeOldStep.Equals(TakeOldStep.MoveLine))
            {
                move.Execute(_info);
                if (move.IsEnd)
                {
                    info.OldSteel++;
                    takeOldStep.NextStep(TakeOldStep.FindLine);
                    takeOldStep.Msg = _info.Name + "到达" + _info.Place;
                }
            }
            else if (takeOldStep.Equals(TakeOldStep.GoWashPoint))
            {
                mission = Common.MISSION_MOVE_WASH + _info.Workshop;
                _info.Place = mission;
                move = new MoveJob(mission);
                move.Execute(_info);
                takeOldStep.NextStep(TakeOldStep.WaitWashPoint);
                takeOldStep.Msg = _info.Name + "发送任务" + mission;
            }
            else if (takeOldStep.Equals(TakeOldStep.WaitWashPoint))
            {
                move.Execute(_info);
                if (move.IsEnd)
                {
                    takeOldStep.NextStep(TakeOldStep.End);
                    takeOldStep.Msg = _info.Name + "到达" + _info.Workshop + "清洗点";
                }
            }
            else if (takeOldStep.Equals(TakeOldStep.End))
            {
                info.OldSteel = 0;
                IJob job = SteelManage.GetSteelJob(info);
                if (job == null)
                    return new StandbyJob();
                else
                    return job;
            }

            return this;
        }

        private void FindLine(AgvInfo info)
        {
            bool rtn = SteelManage.FindOldSteelWork(info, out string place);
            if (rtn)
            {
                info.Place = place;
                mission = Common.MISSION_MOVE_STEEL + place;
                move = new MoveJob(mission);
                move.Execute(_info);
                takeOldStep.NextStep(TakeOldStep.MoveLine);
                takeOldStep.Msg = _info.Name + "发送任务" + mission;
            }
            else
            {
                takeOldStep.NextStep(TakeOldStep.GoWashPoint);
                takeOldStep.Msg = info.Name + "没有后续旧钢板任务";
            }
        }




        private enum TakeOldStep
        {
            None,
            FindLine,
            MoveLine,
            GoWashPoint,
            WaitWashPoint,
            End
        }
    }
}