WashPointJob.cs 3.1 KB
using System;
using Model;

namespace BLL
{
    public class WashPointJob : IJob
    {
        private AgvInfo _info;
        private MoveJob move;
        private string mission;
        private JobStep<WashPointStep> washPointStep;

        public WashPointJob()
        {
            washPointStep = new JobStep<WashPointStep>(WashPointStep.None);
            Common.log.Debug("加载WashPointJob");
        }

        public bool IsEnd { get; private set; }

        public string Msg
        {
            get
            {
                return washPointStep.Msg;
            }
        }

        public IJob Execute(AgvInfo info)
        {
            _info = info;
            if (washPointStep.Equals(WashPointStep.None))
            {
                _info.From = "";
                _info.Place = "";
                SteelManage.NewSteelWorkDelAll(_info.Workshop);
                if (_info.IsWorkspace())
                    MoveWash();
                else
                    PassDoor();
            }
            else if (washPointStep.Equals(WashPointStep.PassDoor))
            {
                move.Execute(_info);
                if (move.IsEnd)
                    MoveWash();
            }
            else if (washPointStep.Equals(WashPointStep.MoveWash))
            {
                move.Execute(_info);
                if (move.IsEnd)
                {
                    SteelManage.NewSteelWorkDel(_info.From, _info.From);
                    washPointStep.NextStep(WashPointStep.End);
                    washPointStep.Msg = _info.Name + " 到达清洗点";
                }
            }
            else if (washPointStep.Equals(WashPointStep.End))
            {
                _info.Place = "";
                IJob job = SteelManage.GetNewSteelJob(info);
                if (job == null)
                {
                    job = SteelManage.GetSteelJob(info);
                    if (job == null)
                        return new StandbyJob();
                    else
                        return job;
                }
                else
                {
                    return job;
                }
            }

            return this;
        }

        private void MoveWash()
        {
            mission = Common.MISSION_MOVE_WASH + _info.Workshop;
            _info.From = _info.Workshop + "WASH";
            _info.Place = _info.Workshop + "清洗点";
            move = new MoveJob(mission);
            move.Execute(_info);
            washPointStep.NextStep(WashPointStep.MoveWash);
            washPointStep.Msg = _info.Name + " 去清洗点任务 " + mission;
        }

        private void PassDoor()
        {
            mission = Common.MISSION_PASS_DOOR_INTO + _info.Workshop;
            _info.Place = string.Format("去{0}车间", _info.Workshop);
            move = new MoveJob(mission);
            move.Execute(_info);
            washPointStep.NextStep(WashPointStep.PassDoor);
            washPointStep.Msg = _info.Name + " 发送过车间门任务 " + mission;
        }


        private enum WashPointStep
        {
            None,
            End,
            PassDoor,
            MoveWash,
        }
    }



}