using IWareCC.CacheInfo.Container; using IWareCC.Conveyor.Entity; using IWareCC.Extend; using IWareCC.ORM; using IWareCC.Properties; using IWareCC.wmsService; 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.Conveyor.Handle.FinishConveyorTaskAuto { public class 将输送线完成结果更新至数据库 : IHandler { /// /// 该节点的下一个节点 /// private IHandler nextHandler = null; public IHandler NextHandler { set { nextHandler = value; } } private ConveyorEntity Conveyor; /// /// 任务容器 /// private PartTaskContainer DecompositionTaskContainer; public 将输送线完成结果更新至数据库(PartTaskContainer decompositionTaskContainer) { this.DecompositionTaskContainer = decompositionTaskContainer; } public void Handle() { using (var dbModel = new DbModel()) { try { var task = DecompositionTaskContainer.DecompositionTask; var parttask = dbModel.PartTasks.FirstOrDefault(x => x.isfinished == (int)EYesOrNo.否 && x.id == task.id); parttask.isfinished = (int)EYesOrNo.是; parttask.status = (int)EPartTaskStatus.已完成; parttask.finishTime = DateTime.Now;//完成时间 【EditBy shaocx,2022-09-18】 parttask.updatetime = DateTime.Now; parttask.iscurrent = (int)EYesOrNo.否; parttask.filereason = ""; var maintask = dbModel.MainTasks.OrderByDescending(x => x.id).FirstOrDefault(x => x.id == parttask.maintaskid); if (maintask != null) { if (parttask.nexthandel == (int)ENextHandelTask.已全部完成) { maintask.finishstatus = 1;//任务已经全部完成,使用枚举 EMainTaskFinishstatus } #region 入库高度检测处理 if ((parttask.sourceplace == "1021" && parttask.toplace == "1022") || (parttask.sourceplace == "1026" && parttask.toplace == "1027")) { if (task.heighttype != 0)//根据接收到的获取高度调取接口获取目标库位信息以及那个立库 { IapitestClient iapservice = new IapitestClient(); //发送wms的任务ID 【EditBy shaocx,2022-09-22】 int wmsTaskId = 0; if (maintask.wmsTaskId != null) { wmsTaskId = Convert.ToInt32(maintask.wmsTaskId); } string toplace = iapservice.getToPlace(int.Parse(maintask.taskno), task.containertype, task.heighttype, wmsTaskId); LogTextHelper.WriteLine(Resources.LogDir + @"/完成输送线任务/" + "Line" + parttask.sourceplace, "高度是{0}Wcf返回位置{1}", task.heighttype, string.IsNullOrEmpty(toplace) ? "无目标位置" : toplace); if (!string.IsNullOrEmpty(toplace))//获取到了目标库位任务号和目标库位 { maintask.heighttype = task.heighttype; maintask.toplace = toplace.Substring(2); maintask.storageno = int.Parse(toplace.Substring(0, 1)); parttask.targetplace = toplace.Substring(2); parttask.storageno = int.Parse(toplace.Substring(0, 1)); parttask.heighttype = task.heighttype; } else { maintask.finishstatus = 3;//,使用枚举 EMainTaskFinishstatus parttask.nexthandel = (int)ENextHandelTask.已全部完成; parttask.ishandled = (int)EYesOrNo.是; PartTask otparttask = new PartTask { maintaskid = task.id, maintasktype = task.maintasktype, executionsequence = 1, sourceplace = task.toplace, status = (int)EPartTaskStatus.开始执行, createtime = DateTime.Now, updatetime = DateTime.Now, voidlabel = (int)EYesOrNo.否, priority = 100, ismovetask = (int)EYesOrNo.否, packageno = "0000", taskcode = NumberHelp.GenerateRandomCode(), targetplace = "0", containertype = task.containertype, toplace = task.sourceplace, heighttype = (int)task.heighttype, storageno = task.storageno, ishandled = (int)EYesOrNo.是, eqtype = (int)EPartTaskType.输送线任务, type = (int)ENextHandelTask.入库处库口出库输送线任务, nexthandel = (int)ENextHandelTask.已全部完成 }; if (task.toplace == "1027") { otparttask.toplace = "1026"; otparttask.eqid = (int)EDeviceId.Line1027号输送线; otparttask.eqname = EDeviceId.Line1027号输送线.ToString(); } else { otparttask.toplace = "1021"; otparttask.eqid = (int)EDeviceId.Line1022号输送线; otparttask.eqname = EDeviceId.Line1022号输送线.ToString(); } dbModel.PartTasks.Add(otparttask); } } LogTextHelper.WriteLine(Resources.LogDir + @"/完成输送线任务/" + "Line" + parttask.sourceplace, "高度是{0}位置{1}", task.heighttype, parttask.toplace); } #endregion } dbModel.SaveChanges(); LogTextHelper.WriteLine(Resources.LogDir + @"/完成输送线任务/" + "Line" + parttask.sourceplace, "将完成结果更新至数据库:{0}", "保存成功"); if (nextHandler != null) { nextHandler.Handle(); } } catch (Exception ex) { //LogTextHelper.WriteLine(Resources.LogDir + @"/完成输送线任务/" + Conveyor.ConveyorName, "将完成结果更新至数据库:{0}", ex.Message); LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "Handle", ex.Message); } } } } }