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(); } } } }