ShelfBuffToLiftJobType.cs 4.2 KB
using Common;
using DeviceLibrary.bean.job;
using DeviceLibrary.lift;
using DeviceLibrary.manager;
using DeviceLibrary.service.model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DeviceLibrary.bean.jobType
{
    /// <summary>
    /// 从缓存点取料并送入电梯内
    /// </summary>
    public class ShelfBuffToLiftJobType : JobType
    {
        public override Job GetNewJob(AgvInfo agv)
        {
            //if (!agv.IsIdle())
            //    return null;
            if (LiftContext.CheckHasEmptyFinished(agv, SettingString.LIFT_D2, out LiftStatus liftStatus))
                return null;
            service.model.MissionInfo missionInfo = manager.MissionManager.BuffToLiftMission(agv);
            if (missionInfo != null)
            {
                if (CheckHasSameJob(agv, missionInfo.liftName))
                    return null;
                Node src = manager.NodeManager.GetNode(SettingString.ShelfBuff, NodeType.Node);
                Node dest = manager.NodeManager.GetNode(missionInfo.liftName, NodeType.Lift);
                if (src == null)
                {
                    Common.LogUtil.error($"无法生成任务,起始点不存在:{missionInfo.sourcePoint}");
                    return null;
                }
                if (dest == null)
                {
                    Common.LogUtil.error($"无法生成任务,电梯不存在:{missionInfo.liftName}");
                    return null;
                }
                if (missionInfo.state.Equals(MissionState.料架缓存))
                {
                    JobParam jobParam = new JobParam(src, dest, null, missionInfo);
                    MissionManager.SetMissionOccupied(missionInfo, agv);
                    MissionManager.Log.Info($"执行任务[{agv.Name}][ShelfBuffToLiftJobType]{JsonHelper.SerializeObject(missionInfo)}");
                    if (missionInfo.projectType.Equals(ProjectType.移远成品入库))
                    {
                        jobParam.CurTargetNode = manager.NodeManager.GetNode(SettingString.LIFT_D2, NodeType.Lift);
                        F1LiftC1ToLiftD2Job job = new F1LiftC1ToLiftD2Job(jobParam);
                        job.JobRunStep.ToNextStep(RunStep.S1F_LiftC1ToLiftD2_Buff);
                        return job;
                    }
                    else
                        return new LineToLiftJob(jobParam);
                }
                else if (missionInfo.state.Equals(MissionState.料架缓存_返回))
                {
                    JobParam jobParam = new JobParam(dest, src, null, missionInfo);
                    MissionManager.SetMissionOccupied(missionInfo, agv);
                    LiftToLinesJob job = new LiftToLinesJob(jobParam);
                    job.JobRunStep.ToNextStep(RunStep.SD_LiftToLine_11_BackToLift);
                    LiftContext.SetLiftNodeOccupied(agv, dest.Name);
                    return job;
                }

            }
            return null;
        }
        bool CheckHasSameJob(AgvInfo agv, string liftname)
        {
            return false;
            try
            {
                if (agv.Scope.Workshop.Equals("1F"))
                {
                    AgvInfo agvInfo = AGVManager.agvInfo.Find(s => s.Auto && s.Scope.Workshop.Equals(agv.Scope.Workshop) &&
                            s.Scope.Workshop.Equals("1F")
                             && s.CurJob != null && (s.CurJob is LineToLiftJob || s.CurJob is F1LiftC1ToLiftD2Job
                             || s.CurJob is F1LiftD2ToLiftC1Job));
                    if (agvInfo != null)
                    {
                        if (agvInfo?.CurJob?.JobParam?.GetMissionInfo()?.liftName?.Equals(liftname) ?? true)
                        {
                            return true;
                        }
                    }

                    //if (agvInfo != null)
                    //    return true;
                }
                else
                    return false;
            }
            catch (Exception ex)
            {
                LogUtil.error("LineToLiftJobType CheckHasSameJob", ex);
                return true;
            }
            return false;
        }
    }
}