using iWareCc.Cache.Entity;
using iWareCc.DecomposeTask.Entity;
using iWareCcTest.Properties;
using iWareCc.Srm.Entity;
using iWareCommon.Common.Entity;
using iWareCommon.Common.EnumType;
using iWareCommon.Utils;
using iWareDataCore.ORM;
using iWareDataCore.TASK.Entity;
using iWareDataCore.TASK.EnumType;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace iWareCc.DoStackerTaskAuto.Chain
{
public class 选择一个未执行的堆垛机的任务 : IHandler
{
///
/// 该节点的下一个节点
///
private IHandler nextHandler = null;
public IHandler NextHandler
{
set { nextHandler = value; }
}
private StackerEntity Stacker;
///
/// WIP任务容器
///
private PartTaskContainer DecompositionTaskContainer;
///
/// 构造函数
///
/// 结果容器
/// WIP任务容器
public 选择一个未执行的堆垛机的任务(StackerEntity stacker, PartTaskContainer decompositionTaskContainer)
{
this.Stacker = stacker;
this.DecompositionTaskContainer = decompositionTaskContainer;
}
public void Handle()
{
using (var dbModel = new DbModelCore())
{
try
{
string msg;
if (!Stacker.CanParseTask(out msg))
{
LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行堆垛机任务流程/" + Stacker.Equipment.EquipName, "选择一个未执行的堆垛机的任务:堆垛机{0}不能执行任务--{1}", Stacker.Equipment.EquipName, msg);
return;
}
var task = dbModel.TASKPartTasks.OrderByDescending(x => x.priority).ThenBy(x => x.createtime).FirstOrDefault(x => x.type == (int)EPartTaskType.堆垛机任务 && x.isreleased == (int)EYesOrNo.否 && x.isfinished == (int)EYesOrNo.否 && x.equipid == Stacker.Equipment.Id);
if (task == null)
{
LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行堆垛机任务流程/" + Stacker.Equipment.EquipName, "选择一个未执行的堆垛机的任务:{0}", "未找到相应的堆垛机任务");
return;
}
if (task.maintasktype == (int)EMainTaskType.出库任务)//出库任务验证gate21端口是否为空,否则不能执行出库任务
{
var gate = CacheEntity.Conveyors.Find(x => x.Equipment.EquipName == "conveyor2").Gates.FirstOrDefault(x => x.Place.PlaceTypeName == "gate21");
var gate22 = CacheEntity.Conveyors.Find(x => x.Equipment.EquipName == "conveyor2").Gates.FirstOrDefault(x => x.Place.PlaceTypeName == "gate22");
if (!gate.RIsEmpty|| !gate22.RIsEmpty)
{
LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行堆垛机任务流程/" + Stacker.Equipment.EquipName, "选择一个未执行的堆垛机的任务:{0}", "出库口有料不能发送出库任务");
return;
}
}
DecompositionTaskContainer.PartTask = new PartTaskEntity(task);
LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行堆垛机任务流程/" + Stacker.Equipment.EquipName, "选择一个未执行的堆垛机的任务:{0}", DecompositionTaskContainer.PartTask.Id);
if (nextHandler != null)
{
nextHandler.Handle();
}
}
catch (Exception ex)
{
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "Handle", ex.Message);
}
}
}
}
}