StandbyTask.cs 3.4 KB
using CtuDeviceLib;
using Mushiny;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DeviceLibrary.CtuService
{
    /// <summary>
    /// 待机任务
    /// </summary>
    public class StandbyTask : CtuTaskBase
    {
        public StandbyTask(CTU ctu) : base(ctu)
        {
            Name = "待机任务";
            var rtn = PathManger.GetNearStand(ctu, out CtuStandby ctuStandby);
            if (rtn)
            {
                setDstName(ctuStandby.Name);
            }
        }

        public override void Excute()
        {
            //当前位置不是目的地,就重新规划路线
            if (MoveInfo.MoveStep != RunStep.Wait && MoveInfo.MoveStep != RunStep.Standby_01_MoveToDst)
            {
                if (ctu.CurLandMark != destination)
                {
                    MoveInfo.NextMoveStep(RunStep.Wait);
                    MoveInfo.Info($"当前点位不在目标点【{DstName}】【{destination}】,重新进入去待机点");
                }
            }
            switch (MoveInfo.MoveStep)
            {
                case RunStep.Wait:
                    if (string.IsNullOrEmpty(DstName))
                    {
                        var rtn = PathManger.GetNearStand(ctu, out CtuStandby ctuStandby);
                        if (rtn)
                        {
                            setDstName(ctuStandby.Name);
                            if (CalcDst())
                            {
                                MoveInfo.NextMoveStep(RunStep.Standby_01_MoveToDst);
                                MoveInfo.Info($"去待机点【{DstName}】【{destination}】");
                            }
                            else
                            {
                                Msg.add($"规划到{DstName}[{destination}]失败", MsgLevel.warning);
                            }
                        }
                    }
                    else
                    {
                        if (CalcDst())
                        {
                            MoveInfo.NextMoveStep(RunStep.Standby_01_MoveToDst);
                            MoveInfo.Info($"去待机点【{DstName}】【{destination}】");
                        }
                        else
                        {
                            Msg.add($"规划到{DstName}[{destination}]失败", MsgLevel.warning);
                        }
                    }
                    break;

                case RunStep.Standby_01_MoveToDst:
                    if (IsFinished)
                    {
                        MoveInfo.NextMoveStep(RunStep.Standby_02_AtDst);
                        MoveInfo.Info($"已到达待机点【{DstName}】【{destination}】");
                    }
                    else
                    {
                        Move();
                    }
                    break;

                case RunStep.Standby_02_AtDst:
                    MoveInfo.NextMoveStep(RunStep.CtuTask_ProcessFinished);
                    break;
                case RunStep.CtuTask_ProcessFinished:
                    var ctuTask =OutTaskHelper.FindTasks(ctu);
                    if (ctuTask != null)
                    {
                        if (ctuTask is StandbyTask)
                            return;
                        ctu.CtuTask = ctuTask;
                    }
                    break;
            }

        }
    }
}