SendNewJob.cs 3.0 KB
using System;
using Model;

namespace BLL
{
    public class SendNewJob : IJob
    {
        private AgvInfo _info;
        private MoveJob move;
        private string mission;
        //private DateTime _getTime;
        private JobStep<SendNewStep> sendNewStep;

        public SendNewJob()
        {
            sendNewStep = new JobStep<SendNewStep>(SendNewStep.None);
            Common.log.Debug("加载SendNewStep");
        }

        public bool IsEnd { get; private set; }

        public IJob Execute(AgvInfo info)
        {
            _info = info;
            if (sendNewStep.Equals(SendNewStep.None))
            {
                if (_info.IsWorkspace())
                    sendNewStep.NextStep(SendNewStep.FindLine);
                else
                    PassDoor();
            }
            else if (sendNewStep.Equals(SendNewStep.PassDoor))
            {
                move.Execute(_info);
                if (move.IsEnd)
                    sendNewStep.NextStep(SendNewStep.FindLine);
            }
            else if (sendNewStep.Equals(SendNewStep.FindLine))
            {
                bool rtn = SteelManage.FindNewSteelWork(_info, out string place);
                if (rtn)
                {
                    if (place.ToLower() == "storage")
                        return new StorageJob();
                    else
                        FindLine(place);
                }
                else
                {
                    sendNewStep.Msg = info.Name + "没有后续新钢板任务";
                    sendNewStep.NextStep(SendNewStep.End);
                }
            }
            else if (sendNewStep.Equals(SendNewStep.MoveLine))
            {
                move.Execute(_info);
                if (move.IsEnd)
                    sendNewStep.NextStep(SendNewStep.FindLine);
            }
            else if (sendNewStep.Equals(SendNewStep.End))
            {
                IJob job = SteelManage.GetSteelJob(info);
                if (job == null)
                    return new StandbyJob();
                else
                    return job;
            }
            return this;
        }

        private void FindLine(string place)
        {
            mission = Common.MISSION_MOVE_STEEL + place;
            _info.Place = place;
            move = new MoveJob(mission);
            move.Execute(_info);
            sendNewStep.NextStep(SendNewStep.MoveLine);
            sendNewStep.Msg = _info.Name + "发送任务" + mission;
        }

        private void MoveLine()
        {
  
        }

        private void PassDoor()
        {
            mission = Common.MISSION_PASS_DOOR_INTO + _info.Workshop;
            _info.Place = mission;
            move = new MoveJob(mission);
            move.Execute(_info);
            sendNewStep.NextStep(SendNewStep.PassDoor);
            sendNewStep.Msg = _info.Name + "发送任务" + mission;
        }

        private enum SendNewStep
        {
            None,
            End,
            PassDoor,
            FindLine,
            MoveLine
        }
    }
}