using IWareCC.CacheInfo.Container; using IWareCC.ChaiDie.Entity; 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.ChaiDie.Handle.FinishChaiDieTaskAuto { public class 获取当前的拆叠机任务: IHandler { /// /// 该节点的下一个节点 /// private IHandler nextHandler = null; public IHandler NextHandler { set { nextHandler = value; } } private ChaiDieEntity Chaidie; /// /// 任务容器 /// private PartTaskContainer DecompositionTaskContainer; public 获取当前的拆叠机任务(ChaiDieEntity chaidie, PartTaskContainer decompositionTaskContainer) { this.Chaidie = chaidie; this.DecompositionTaskContainer = decompositionTaskContainer; } public void Handle() { using (var dbModel = new DbModel()) { try { #region 确认各位置是否需要空托或者满托需要运走 if (Chaidie.EmptyStatus == (int)EChaiDieEmptyStatus.空盘 || Chaidie.EmptyStatus == (int)EChaiDieEmptyStatus.满盘) { LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行拆叠机任务流程/" + Chaidie.ChaiDieName, "选择一个未执行的拆叠机的任务:拆叠机{0}收到{1}", Chaidie.ChaiDieName, Chaidie.EmptyStatus); bool bl = false; if (Chaidie.EmptyStatus == (int)EChaiDieEmptyStatus.空盘 && (Chaidie.ChaiDieName == "ChaiDei3" || Chaidie.ChaiDieName == "ChaiDei4")) { if (Chaidie.PH1 == 2 && Chaidie.PH2 == 2) { bl = true; LogTextHelper.WriteLine(Resources.LogDir + @"/完成拆叠机任务/" + Chaidie.ChaiDieName, "空盘触发:{0}{1}", Chaidie.EmptyStatus, Chaidie.ChaiDieName); }else { bl = false; LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行拆叠机任务流程/" + Chaidie.ChaiDieName, "拆盘机异常触发:拆叠机{0}还有托盘,不能下发任务", Chaidie.ChaiDieName); } } if (Chaidie.EmptyStatus == (int)EChaiDieEmptyStatus.满盘 && (Chaidie.ChaiDieName == "ChaiDei1" || Chaidie.ChaiDieName == "ChaiDei2")) { bl = true; LogTextHelper.WriteLine(Resources.LogDir + @"/完成拆叠机任务/" + Chaidie.ChaiDieName, "满盘触发:{0}{1}", Chaidie.EmptyStatus,Chaidie.ChaiDieName); } if (!bl) { return; } bool f1 = Chaidie.WriteValue(Chaidie.OpcReadItems.EmptyStatus, 0); if (f1) { var cdttask = dbModel.ChaiDieTransports.FirstOrDefault(x => (x.status == 1 || x.status == 0) && x.dev == Chaidie.DeviceId); if (cdttask == null || cdttask.status == 2) { dbModel.ChaiDieTransports.Add(new ChaiDieTransport() { dev = Chaidie.DeviceId, devname = Chaidie.ChaiDieName, createtime = DateTime.Now, type = Chaidie.EmptyStatus, status = 0, updatetime = DateTime.Now, name = ((EChaiDieEmptyStatus)Chaidie.EmptyStatus).ToString(), }); dbModel.SaveChanges(); } } } #endregion if (Chaidie.RACK) { Chaidie.WriteValue(Chaidie.OpcWriteItems.STP, 0); Chaidie.WriteValue(Chaidie.OpcWriteItems.NeedCon, 0); LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行拆叠机任务流程/" + Chaidie.ChaiDieName, "选择一个未执行的拆叠机的任务:拆叠机{0}已在任务中,不能再下发任务", Chaidie.ChaiDieName); return; } var task = dbModel.PartTasks.OrderBy(x => x.finishtimes).FirstOrDefault(x => x.iscurrent == (int)EYesOrNo.是 && x.isreleased == (int)EYesOrNo.是 && x.isfinished == (int)EYesOrNo.否 && x.eqtype == (int)EPartTaskType.拆叠机任务 && x.eqid == Chaidie.DeviceId); if (task == null) { // LogTextHelper.WriteLine(Resources.LogDir + @"/完成拆叠机任务/" + Chaidie.ChaiDieName, "获取当前的拆叠机任务:{0}", "没有找到待完成的任务"); return; } task.finishtimes += 1; dbModel.SaveChanges(); DecompositionTaskContainer.DecompositionTask = task; LogTextHelper.WriteLine(Resources.LogDir + @"/完成拆叠机任务/" + Chaidie.ChaiDieName, "获取当前的拆叠机任务:{0}", DecompositionTaskContainer.DecompositionTask.id); if (nextHandler != null) { nextHandler.Handle(); } } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "Handle", ex.Message); } } } } }