using IWareCC.CacheInfo.Container;
using IWareCC.Extend;
using IWareCC.ORM;
using IWareCC.Properties;
using IWareCommon.Enum.Common;
using IWareCommon.Help;
using IWareCommon.Util;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IWareCC.HandleTask.Handle.HandleTask
{
public class 根据任务类型获取下一阶段任务 : IHandler
{
private IHandler nextHandler = null;
///
/// 该节点的下一个节点
///
public IHandler NextHandler
{
set { nextHandler = value; }
}
///
/// 处理任务容器
///
private PartTaskContainer HandleTaskContainer;
///
/// 下一任务容器
///
private PartTaskContainer NextTaskContainer;
///
/// 结果容器
///
private ResultContainer ResultContainer;
public 根据任务类型获取下一阶段任务(PartTaskContainer handleTaskContainer, PartTaskContainer nextTaskContainer, ResultContainer resultContainer)
{
this.HandleTaskContainer = handleTaskContainer;
this.NextTaskContainer = nextTaskContainer;
this.ResultContainer = resultContainer;
}
public void Handle()
{
var lasttask = HandleTaskContainer.DecompositionTask;
PartTask parttask = new PartTask
{
maintaskid = lasttask.maintaskid,
maintasktype = lasttask.maintasktype,
executionsequence = 1,
sourceplace = lasttask.toplace,
status = (int)EPartTaskStatus.开始执行,
createtime = DateTime.Now,
updatetime = DateTime.Now,
voidlabel = (int)EYesOrNo.否,
priority = 100,
ismovetask = (int)EYesOrNo.否,
packageno = lasttask.packageno,
taskcode = NumberHelp.GenerateRandomCode(),
containertype = lasttask.containertype,
targetplace = lasttask.targetplace,
heighttype = lasttask.heighttype,
storageno = lasttask.storageno,
containername = lasttask.containername
};
switch (lasttask.maintasktype)
{
case (int)EMainTaskType.常规入库:
if (lasttask.nexthandel == (int)ENextHandelTask.入库处入库输送线任务)
{
parttask.ishandled = (int)EYesOrNo.否;
parttask.eqtype = (int)EPartTaskType.输送线任务;
parttask.type = (int)ENextHandelTask.入库处入库输送线任务;
if (parttask.containertype==(int)EContainerType.小托盘)
{
parttask.eqid = (int)EDeviceId.Line1022号输送线;
parttask.eqname = EDeviceId.Line1022号输送线.ToString();
parttask.sourceplace = "1022";
parttask.toplace = "1024";
}
else
{
parttask.eqid = (int)EDeviceId.Line1027号输送线;
parttask.eqname = EDeviceId.Line1027号输送线.ToString();
parttask.sourceplace = "1027";
parttask.toplace = "1029";
}
parttask.nexthandel = (int)ENextHandelTask.入库处入库RGV任务;
}
else if (lasttask.nexthandel == (int)ENextHandelTask.入库处入库RGV任务)
{
parttask.ishandled = (int)EYesOrNo.否;
parttask.eqid = (int)EDeviceId.入库口Rgv;
parttask.eqname = EDeviceId.入库口Rgv.ToString();
parttask.eqtype = (int)EPartTaskType.Rgv任务;
parttask.type = (int)ENextHandelTask.入库处入库RGV任务;
if (parttask.storageno == (int)EStorageno.大盘库)
{
parttask.toplace = "1033";//大盘立库入库口
}
else
{
parttask.toplace = "1031";//小盘立库入库口
}
parttask.nexthandel = (int)ENextHandelTask.入库处库口入库输送线任务;
}
else if (lasttask.nexthandel == (int)ENextHandelTask.入库处库口入库输送线任务)
{
parttask.ishandled = (int)EYesOrNo.否;
parttask.eqtype = (int)EPartTaskType.输送线任务;
if (lasttask.toplace == "1031")
{
parttask.eqid = (int)EDeviceId.Line1031号输送线;
parttask.eqname = EDeviceId.Line1031号输送线.ToString();
parttask.type = (int)ENextHandelTask.入库处库口入库输送线任务;
parttask.toplace = "1031";
parttask.nexthandel = (int)ENextHandelTask.入库处小盘入库堆垛机任务;
}
else
{
parttask.eqid = (int)EDeviceId.Line1033号输送线;
parttask.eqname = EDeviceId.Line1033号输送线.ToString();
parttask.type = (int)ENextHandelTask.入库处库口入库输送线任务;
parttask.toplace = "1033";
parttask.nexthandel = (int)ENextHandelTask.入库处大盘入库堆垛机任务;
}
}
else if (lasttask.nexthandel == (int)ENextHandelTask.入库处小盘入库堆垛机任务 || lasttask.nexthandel == (int)ENextHandelTask.入库处大盘入库堆垛机任务)
{
parttask.ishandled = (int)EYesOrNo.是;
parttask.eqtype = (int)EPartTaskType.堆垛机任务;
if (lasttask.nexthandel == (int)ENextHandelTask.入库处小盘入库堆垛机任务)
{
parttask.eqid = (int)EDeviceId.小盘堆垛机;
parttask.eqname = EDeviceId.小盘堆垛机.ToString();
parttask.type = (int)ENextHandelTask.入库处小盘入库堆垛机任务;
parttask.sourceplace = "0-802-0";
}
else
{
parttask.eqid = (int)EDeviceId.大盘堆垛机;
parttask.eqname = EDeviceId.大盘堆垛机.ToString();
parttask.type = (int)ENextHandelTask.入库处大盘入库堆垛机任务;
if (parttask.containertype == (int)EContainerType.大托盘)
{
parttask.sourceplace = "0-802-0";
}
else
{
parttask.sourceplace = "0-803-0";
}
}
parttask.toplace = parttask.targetplace;
parttask.nexthandel = (int)ENextHandelTask.已全部完成;
}
else
{
ResultContainer.Msg = "未识别该任务类型!";
}
break;
case (int)EMainTaskType.组盘出库:
if (lasttask.nexthandel == (int)ENextHandelTask.入库处库口出库输送线任务)
{
parttask.ishandled = (int)EYesOrNo.否;
parttask.type = (int)ENextHandelTask.入库处库口出库输送线任务;
parttask.eqtype = (int)EPartTaskType.输送线任务;
if (lasttask.type == (int)ENextHandelTask.入库处小盘出库堆垛机任务)
{
parttask.eqid = (int)EDeviceId.Line1030号输送线;
parttask.eqname = EDeviceId.Line1030号输送线.ToString();
parttask.toplace = "1030";//大盘输送线端口
parttask.sourceplace = "1030";
}
else if (lasttask.type == (int)ENextHandelTask.入库处大盘出库堆垛机任务)
{
parttask.eqid = (int)EDeviceId.Line1032号输送线;
parttask.eqname = EDeviceId.Line1032号输送线.ToString();
parttask.toplace = "1032";///小盘输送线端口
parttask.sourceplace = "1032";
}
else
{
ResultContainer.Msg = "未识别该任务类型!";
}
parttask.nexthandel = (int)ENextHandelTask.入库处组盘出库RGV任务;
}
else if (lasttask.nexthandel == (int)ENextHandelTask.入库处组盘出库RGV任务)
{
parttask.ishandled = (int)EYesOrNo.否;
parttask.type = (int)ENextHandelTask.入库处组盘出库RGV任务;
parttask.eqtype = (int)EPartTaskType.Rgv任务;
parttask.eqid = (int)EDeviceId.入库口Rgv;
parttask.eqname = EDeviceId.入库口Rgv.ToString();
if (lasttask.toplace == "1030")
{
parttask.toplace = "1024";//大盘输送线端口
}
else if (lasttask.toplace == "1032")
{
if (parttask.containertype == (int)EContainerType.大托盘)
{
parttask.toplace = "1029";///小盘输送线端口
}else
{
parttask.toplace = "1024";///小盘输送线端口
}
}
else
{
ResultContainer.Msg = "未识别该任务类型!";
}
parttask.nexthandel = (int)ENextHandelTask.入库处出库输送线任务;
}
else if (lasttask.nexthandel == (int)ENextHandelTask.入库处出库输送线任务)
{
parttask.ishandled = (int)EYesOrNo.是;
parttask.type = (int)ENextHandelTask.入库处出库输送线任务;
parttask.eqtype = (int)EPartTaskType.输送线任务;
if (lasttask.toplace == "1024")
{
parttask.sourceplace = "1023";
parttask.toplace = "1021";//大盘输送线端口
parttask.eqid = (int)EDeviceId.Line1023号输送线;
parttask.eqname = EDeviceId.Line1023号输送线.ToString();
}
else if (lasttask.toplace == "1029")
{
parttask.sourceplace = "1028";///小盘输送线端口
parttask.toplace = "1026";///小盘输送线端口
parttask.eqid = (int)EDeviceId.Line1028号输送线;
parttask.eqname = EDeviceId.Line1028号输送线.ToString();
}
else
{
ResultContainer.Msg = "未识别该任务类型!";
}
parttask.nexthandel = (int)ENextHandelTask.已全部完成;
}
else
{
ResultContainer.Msg = "未识别该任务类型!";
}
break;
case (int)EMainTaskType.空托出库:
if (lasttask.nexthandel == (int)ENextHandelTask.入库处库口出库输送线任务)
{
parttask.ishandled = (int)EYesOrNo.否;
parttask.type = (int)ENextHandelTask.入库处库口出库输送线任务;
parttask.eqtype = (int)EPartTaskType.输送线任务;
if (lasttask.type == (int)ENextHandelTask.入库处小盘出库堆垛机任务)
{
parttask.eqid = (int)EDeviceId.Line1030号输送线;
parttask.eqname = EDeviceId.Line1030号输送线.ToString();
parttask.toplace = "1030";//大盘输送线端口
parttask.sourceplace = "1030";
}
else if (lasttask.type == (int)ENextHandelTask.入库处大盘出库堆垛机任务)
{
parttask.eqid = (int)EDeviceId.Line1032号输送线;
parttask.eqname = EDeviceId.Line1032号输送线.ToString();
parttask.toplace = "1032";///小盘输送线端口
parttask.sourceplace = "1032";
}
else
{
ResultContainer.Msg = "未识别该任务类型!";
}
parttask.nexthandel = (int)ENextHandelTask.入库处空盘出库RGV任务;
}
else if (lasttask.nexthandel == (int)ENextHandelTask.入库处空盘出库RGV任务)
{
parttask.ishandled = (int)EYesOrNo.是;
parttask.type = (int)ENextHandelTask.入库处空盘出库RGV任务;
parttask.eqtype = (int)EPartTaskType.Rgv任务;
parttask.eqid = (int)EDeviceId.入库口Rgv;
parttask.eqname = EDeviceId.入库口Rgv.ToString();
if (lasttask.containertype == (int)EContainerType.小托盘)
{
parttask.toplace = "1020";
}
else
{
parttask.toplace = "1025";
}
parttask.nexthandel = (int)ENextHandelTask.已全部完成;
}
else
{
ResultContainer.Msg = "未识别该任务类型!";
}
break;
case (int)EMainTaskType.常规出库:
if (lasttask.nexthandel == (int)ENextHandelTask.出库处库口出库输送线任务)
{
parttask.ishandled = (int)EYesOrNo.否;
parttask.type = (int)ENextHandelTask.出库处库口出库输送线任务;
parttask.eqtype = (int)EPartTaskType.输送线任务;
if (lasttask.type == (int)ENextHandelTask.出库处大盘出库堆垛机任务)
{
parttask.eqid = (int)EDeviceId.Line1013号输送线;
parttask.eqname = EDeviceId.Line1013号输送线.ToString();
parttask.toplace = "1013";//大盘输送线端口
parttask.sourceplace = "1013";
}
else if (lasttask.type == (int)ENextHandelTask.出库处小盘出库堆垛机任务)
{
parttask.eqid = (int)EDeviceId.Line1015号输送线;
parttask.eqname = EDeviceId.Line1015号输送线.ToString();
parttask.toplace = "1015";///小盘输送线端口
parttask.sourceplace = "1015";
}
else
{
ResultContainer.Msg = "未识别该任务类型!";
}
parttask.nexthandel = (int)ENextHandelTask.出库处出库RGV任务;
}
else if (lasttask.nexthandel == (int)ENextHandelTask.出库处出库RGV任务)
{
parttask.ishandled = (int)EYesOrNo.否;
parttask.type = (int)ENextHandelTask.出库处出库RGV任务;
parttask.eqtype = (int)EPartTaskType.Rgv任务;
parttask.eqid = (int)EDeviceId.出库口Rgv;
parttask.eqname = EDeviceId.出库口Rgv.ToString();
if (lasttask.targetplace == "1003")
{
parttask.toplace = "1005";
parttask.nexthandel = (int)ENextHandelTask.出库处出库输送线任务;
}
else if (lasttask.targetplace == "1008")
{
parttask.toplace = "1011";
parttask.nexthandel = (int)ENextHandelTask.出库处出库输送线任务;
}
else if (lasttask.targetplace == "1001")
{
parttask.toplace = "1001";
parttask.ishandled = (int)EYesOrNo.是;
parttask.nexthandel = (int)ENextHandelTask.已全部完成;
}
else
{
ResultContainer.Msg = "未识别该任务类型!";
}
}
else if (lasttask.nexthandel == (int)ENextHandelTask.出库处出库输送线任务)
{
parttask.ishandled = (int)EYesOrNo.是;
parttask.type = (int)ENextHandelTask.出库处出库输送线任务;
parttask.eqtype = (int)EPartTaskType.输送线任务;
if (lasttask.toplace == "1005")
{
parttask.toplace = "1003";
parttask.eqid = (int)EDeviceId.Line1006号输送线;
parttask.eqname = EDeviceId.Line1006号输送线.ToString();
parttask.sourceplace = "1006";
}
else if (lasttask.toplace == "1011")
{
parttask.toplace = "1008";
parttask.eqid = (int)EDeviceId.Line1012号输送线;
parttask.eqname = EDeviceId.Line1012号输送线.ToString();
parttask.sourceplace = "1012";
}
else
{
ResultContainer.Msg = "未识别该任务类型!";
}
parttask.nexthandel = (int)ENextHandelTask.已全部完成;
}
else
{
ResultContainer.Msg = "未识别该任务类型!";
}
break;
case (int)EMainTaskType.出库叠盘:///根据起始位判断出口
if (lasttask.nexthandel == (int)ENextHandelTask.出库处叠盘RGV任务)
{
parttask.ishandled = (int)EYesOrNo.是;
parttask.type = (int)ENextHandelTask.出库处叠盘RGV任务;
parttask.eqtype = (int)EPartTaskType.Rgv任务;
parttask.eqid = (int)EDeviceId.出库口Rgv;
parttask.eqname = EDeviceId.出库口Rgv.ToString();
if (lasttask.containertype == (int)EContainerType.大托盘)
{
parttask.toplace = "1017";
}
else if (lasttask.containertype == (int)EContainerType.小托盘)
{
parttask.toplace = "1018";
}
else
{
ResultContainer.Msg = "未识别该任务类型!";
}
parttask.nexthandel = (int)ENextHandelTask.已全部完成;
}
else
{
ResultContainer.Msg = "未识别该任务类型!";
}
break;
case (int)EMainTaskType.余料回库:
if (lasttask.nexthandel == (int)ENextHandelTask.出库处入库RGV任务)
{
parttask.ishandled = (int)EYesOrNo.否;
parttask.eqtype = (int)EPartTaskType.Rgv任务;
parttask.type = (int)ENextHandelTask.出库处入库RGV任务;
parttask.eqid = (int)EDeviceId.出库口Rgv;
parttask.eqname = EDeviceId.出库口Rgv.ToString();
if (lasttask.storageno == (int)EStorageno.大盘库)
{
parttask.toplace = "1014";//大盘出库口
parttask.nexthandel = (int)ENextHandelTask.出库处库口入库输送线任务;
}
else if (lasttask.containertype == (int)EStorageno.小盘库)
{
parttask.toplace = "1016";//小盘出库口
parttask.nexthandel = (int)ENextHandelTask.出库处库口入库输送线任务;
}
else
{
ResultContainer.Msg = "未识别该任务类型!";
}
}
else if (lasttask.nexthandel == (int)ENextHandelTask.出库处库口入库输送线任务)
{
parttask.ishandled = (int)EYesOrNo.否;
parttask.eqtype = (int)EPartTaskType.输送线任务;
parttask.type = (int)ENextHandelTask.出库处库口入库输送线任务;
if (lasttask.toplace == "1014")
{
parttask.eqid = (int)EDeviceId.Line1014号输送线;
parttask.eqname = EDeviceId.Line1014号输送线.ToString();
parttask.toplace = "1014";//大盘出库口
parttask.nexthandel = (int)ENextHandelTask.出库处大盘入库堆垛机任务;
}
else if (lasttask.toplace == "1016")
{
parttask.eqid = (int)EDeviceId.Line1016号输送线;
parttask.eqname = EDeviceId.Line1016号输送线.ToString();
parttask.toplace = "1016";//小盘出库口
parttask.nexthandel = (int)ENextHandelTask.出库处小盘入库堆垛机任务;
}
else
{
ResultContainer.Msg = "未识别该任务类型!";
}
}
else if (lasttask.nexthandel == (int)ENextHandelTask.出库处大盘入库堆垛机任务 || lasttask.nexthandel == (int)ENextHandelTask.出库处小盘入库堆垛机任务)
{
parttask.ishandled = (int)EYesOrNo.是;
parttask.eqtype = (int)EPartTaskType.堆垛机任务;
if (lasttask.nexthandel == (int)ENextHandelTask.出库处小盘入库堆垛机任务)
{
parttask.eqid = (int)EDeviceId.小盘堆垛机;
parttask.eqname = EDeviceId.小盘堆垛机.ToString();
parttask.type = (int)ENextHandelTask.出库处小盘入库堆垛机任务;
}
else
{
parttask.eqid = (int)EDeviceId.大盘堆垛机;
parttask.eqname = EDeviceId.大盘堆垛机.ToString();
parttask.type = (int)ENextHandelTask.出库处大盘入库堆垛机任务;
}
parttask.sourceplace = "0-801-0";
parttask.toplace = parttask.targetplace;
parttask.nexthandel = (int)ENextHandelTask.已全部完成;
}
else
{
ResultContainer.Msg = "未识别该任务类型!";
}
break;
case (int)EMainTaskType.满空托回库:
if (lasttask.nexthandel == (int)ENextHandelTask.出库处库口入库输送线任务)
{
parttask.ishandled = (int)EYesOrNo.否;
parttask.eqtype = (int)EPartTaskType.输送线任务;
parttask.type = (int)ENextHandelTask.出库处库口入库输送线任务;
if (lasttask.toplace == "1014")
{
parttask.eqid = (int)EDeviceId.Line1014号输送线;
parttask.eqname = EDeviceId.Line1014号输送线.ToString();
parttask.toplace = "1014";//大盘出库口
parttask.nexthandel = (int)ENextHandelTask.出库处大盘入库堆垛机任务;
}
else if (lasttask.toplace == "1016")
{
parttask.eqid = (int)EDeviceId.Line1016号输送线;
parttask.eqname = EDeviceId.Line1016号输送线.ToString();
parttask.toplace = "1016";//小盘出库口
parttask.nexthandel = (int)ENextHandelTask.出库处小盘入库堆垛机任务;
}
else
{
ResultContainer.Msg = "未识别该任务类型!";
}
}
else if (lasttask.nexthandel == (int)ENextHandelTask.出库处大盘入库堆垛机任务 || lasttask.nexthandel == (int)ENextHandelTask.出库处小盘入库堆垛机任务)
{
parttask.ishandled = (int)EYesOrNo.是;
parttask.eqtype = (int)EPartTaskType.堆垛机任务;
if (lasttask.nexthandel == (int)ENextHandelTask.出库处大盘入库堆垛机任务)
{
parttask.type = (int)ENextHandelTask.出库处大盘入库堆垛机任务;
parttask.eqid = (int)EDeviceId.大盘堆垛机;
parttask.eqname = EDeviceId.大盘堆垛机.ToString();
}
else
{
parttask.type = (int)ENextHandelTask.出库处小盘入库堆垛机任务;
parttask.eqid = (int)EDeviceId.小盘堆垛机;
parttask.eqname = EDeviceId.小盘堆垛机.ToString();
}
parttask.sourceplace = "0-801-0";
parttask.toplace = lasttask.targetplace;
parttask.nexthandel = (int)ENextHandelTask.已全部完成;
}
else
{
ResultContainer.Msg = "未识别该任务类型!";
}
break;
default:
ResultContainer.Msg = "未识别该任务类型!";
break;
}
if (!string.IsNullOrEmpty(ResultContainer.Msg))
{
LogTextHelper.WriteLine(Resources.LogDir + @"/处理任务流程", "根据相应的任务类型获取下一阶段任务:{0}", ResultContainer.Msg);
return;
}
NextTaskContainer.DecompositionTask = parttask;
var task = NextTaskContainer.DecompositionTask;
LogTextHelper.WriteLine(Resources.LogDir + @"/处理任务流程", "根据相应的任务类型获取下一阶段任务:{2} {0}--->{1}",
task == null ? "" : task.sourceplace, task == null ? "" : task.toplace, task == null ? "未知" : ((EPartTaskType)task.type).ToString());
if (nextHandler != null)
{
nextHandler.Handle();
}
}
}
}