InitJob.cs 6.3 KB
using Mushiny;
using System.Linq;
using OnlineStore.Common;
using CtuDeviceLib;
using log4net.Util;
using System.Windows.Forms;
using System.ServiceModel.Configuration;
namespace DeviceLibrary.CtuService
{
    public class InitJob : CtuTaskBase
    {
        public InitJob(CTU ctu) : base(ctu)
        {
            Name = "初始化CTU任务";
        }

        public override void Excute()
        {
            PosInfo currentPosInfo = PosInfos.GetPosInfoByPtCode(ctu.CurLandMark);
            if (currentPosInfo != null)
            {
                if (currentPosInfo.IsInRawLineOut())//在手动线出口
                {
                    if (ctu.HasEmptyBasket())
                    {
                        var task = OutTaskHelper.GetNearstTakeBoxFromLineTask(ctu);
                        if (task != null)
                        {
                            MoveInfo.Info($"找到取入库料箱任务【{task.Name}】【{task.boxCode}】【{task.destination}】");
                            ctu.CtuTask = task;
                            return;
                        }
                    }
                    else //没有空背篓
                    {
                        var basket = ctu.GetFirstFullBasket();
                        if (!string.IsNullOrEmpty(basket.DstName))
                        {
                            if (Setting_Init.rawLine_in.Equals(basket.DstName))
                            {
                                var task = OutTaskHelper.GetPutBoxToLineTask(ctu);
                                if (task != null)
                                {
                                    MoveInfo.Info($"找到放出库箱任务【{task.Name}】【{task.boxCode}】【{task.destination}】");
                                    ctu.CtuTask = task;
                                    return;
                                }
                            }

                            var dstPosinfo = PosInfos.GetPosInfoByName(basket.DstName);
                            if (dstPosinfo != null && dstPosInfo.IsShelf())
                            {
                                var task = OutTaskHelper.GetNearestPutBoxToShelfTask(ctu, out _);
                                if (task != null)
                                {
                                    MoveInfo.Info($"找到放入库箱任务【{task.Name}】【{task.boxCode}】【{task.destination}】");
                                    ctu.CtuTask = task;
                                    return;
                                }
                            }
                        }
                    }
                }
                else if (currentPosInfo.IsInRawLineIn())//在线体入口
                {
                    if (!ctu.AllBasketIsEmpty())//背篓不空
                    {
                        var basket = ctu.GetFirstFullBasket();
                        if (!string.IsNullOrEmpty(basket.DstName))
                        {
                            if (Setting_Init.rawLine_in.Equals(basket.DstName))
                            {
                                var task = OutTaskHelper.GetPutBoxToLineTask(ctu);
                                if (task != null)
                                {
                                    MoveInfo.Info($"找到放出库箱任务【{task.Name}】【{task.boxCode}】【{task.destination}】");
                                    ctu.CtuTask = task;
                                    return;
                                }
                            }

                            var dstPosinfo = PosInfos.GetPosInfoByName(basket.DstName);
                            if (dstPosinfo != null && dstPosInfo.IsShelf())
                            {
                                var task = OutTaskHelper.GetNearestPutBoxToShelfTask(ctu, out _);
                                if (task != null)
                                {
                                    MoveInfo.Info($"找到放入库箱任务【{task.Name}】【{task.boxCode}】【{task.destination}】");
                                    ctu.CtuTask = task;
                                    return;
                                }
                            }
                        }
                    }
                }
                else if (currentPosInfo.IsShelf()) //在巷道
                {
                    var outletTask = OutTaskHelper.GetNearestTakeBoxFromShelfOrPutBoxToShelfTask(ctu, out string resultMsg);
                    if (outletTask != null)
                    {
                        ctu.CtuTask = outletTask;
                        return;
                    }
                }
                else
                {
                    var outletTask = OutTaskHelper.GetNearestTakeBoxFromShelfOrPutBoxToShelfTask(ctu, out string resultMsg);
                    if (outletTask != null)
                    {
                        ctu.CtuTask = outletTask;
                        return;
                    }

                    var basket = ctu.GetFirstFullBasket();
                    if (!string.IsNullOrEmpty(basket.DstName))
                    {
                        if (Setting_Init.rawLine_in.Equals(basket.DstName))
                        {
                            var task = OutTaskHelper.GetPutBoxToLineTask(ctu);
                            if (task != null)
                            {
                                MoveInfo.Info($"找到放出库箱任务【{task.Name}】【{task.boxCode}】【{task.destination}】");
                                ctu.CtuTask = task;
                                return;
                            }
                        }
                    }

                    if (ctu.HasEmptyBasket())
                    {
                        var task = OutTaskHelper.GetNearstTakeBoxFromLineTask(ctu);
                        if (task != null)
                        {
                            MoveInfo.Info($"找到取入库料箱任务【{task.Name}】【{task.boxCode}】【{task.destination}】");
                            ctu.CtuTask = task;
                            return;
                        }
                    }
                }

            }

            //回待机位
            var standByForOutTask = new StandbyTask(ctu);
            ctu.CtuTask = standByForOutTask;
        }
    }
}