using iWareCc.Conveyor.Entity; using iWareCc.Conveyor.EnumType; using iWareCc.DecomposeTask.Entity; using iWareCc.Properties; using iWareCommon.Common.Entity; using iWareCommon.Common.EnumType; using iWareCommon.Utils; using iWareDataCore.BASE.EnumType; 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.CreateMainTask.chain { public class 根据扫码生成入库主任务 : IHandler { /// /// 该节点的下一个节点 /// private IHandler nextHandler = null; public IHandler NextHandler { set { nextHandler = value; } } private ConveyorEntity Conveyor; private MainTaskContainer MainTaskContainer; /// /// 构造函数 /// /// 结果容器 /// WIP任务容器 public 根据扫码生成入库主任务(ConveyorEntity c, MainTaskContainer mainTaskContainer) { this.Conveyor = c; this.MainTaskContainer = mainTaskContainer; } public void Handle() { using (var dbModel = new DbModelCore()) { try { var alarm = Conveyor.Gates.Find(x => x.Place.PlaceTypeName == "alarm"); var sc = Conveyor.Gates.Find(x => x.Place.PlaceTypeName == "sc"); if (sc != null && !string.IsNullOrEmpty(sc.RCheckMaterialCode) && !string.IsNullOrWhiteSpace(sc.RCheckMaterialCode) && !sc.RCheckMaterialCode.Contains("ERROR")) { var material = dbModel.BASEMaterialViews.FirstOrDefault(x => x.code == sc.RCheckMaterialCode.Trim()); //判断物料是否入库,如果入库直接发送入库任务,不入库生成退库记录 if (material != null) { var placematerial = dbModel.BASEPlaceMaterialViews.FirstOrDefault(x => x.materialcode == sc.RCheckMaterialCode.Trim()); if (placematerial != null) { // alarm.SendGateAlarmTask((int)ESendCode.已在立库中不能入库); LogTextHelper.WriteLine(Resources.LogDir + @"/自动生成入库主任务流程", "物料号:{0}", sc.RCheckMaterialCode + "已在立库中"); sc.RCheckMaterialCode = ""; return; } var tasknew = dbModel.TASKPartTasks.FirstOrDefault(x => x.type == (int)EPartTaskType.输送机任务 && x.isreleased == (int)EYesOrNo.否 && x.isfinished == (int)EYesOrNo.否 && x.materialcode == material.code && x.maintasktype == (int)EMainTaskType.入库任务); if (tasknew != null) { // LogTextHelper.WriteLine(Resources.LogDir + @"/自动生成主任务流程", "物料号:{0}", sc.RCheckMaterialCode + "已在要执行的任务序列中"); return; } var emptyPlace = dbModel.BASEEmptyPlaceViews.Where(x => x.isexecute == (int)EYesOrNo.否 && x.islock == (int)EYesOrNo.否 && x.typeid == 4 && x.status == (int)EPlaceStatus.空库位).OrderBy(x => new { x.layer, x.col }).FirstOrDefault(); if (emptyPlace == null) { alarm.SendGateAlarmTask((int)ESendCode.入库库位不足); LogTextHelper.WriteLine(Resources.LogDir + @"/自动生成入库主任务流程", "寻找空库位:{0}", "空库位不足"); return; } var task = dbModel.TASKMainTasks.FirstOrDefault(x => x.materialcode == sc.RCheckMaterialCode.Trim() && x.tasktype == (int)EMainTaskType.入库任务 && x.status == 0); if (task != null) { //alarm.SendGateAlarmTask((int)ESendCode.已存在该任务); LogTextHelper.WriteLine(Resources.LogDir + @"/自动生成入库主任务流程", "物料号:{0}", "该任务已存在"); return; } int materialid = material.id; var inoutlistdetail = dbModel.BASEInOutListDetails.FirstOrDefault(x => x.materialid == materialid && x.isfinish != 1); if (inoutlistdetail == null) { alarm.SendGateAlarmTask((int)ESendCode.物料不在入库清单中); LogTextHelper.WriteLine(Resources.LogDir + @"/自动生成入库主任务流程", "物料号:{0}", "不在入库清单中"); sc.RCheckMaterialCode = ""; return; } TASKMainTask matask = new TASKMainTask() { taskno = DateTime.Now.ToFileTime().ToString(), tasktype = (int)EMainTaskType.入库任务, materialcode = sc.RCheckMaterialCode, syscode = "1", sendtime = DateTime.Now, sourceplace = "100101", toplace = emptyPlace.code, packageno = "", processcardnumber = "", quantity = 1, status = 0, decompositiontime = DateTime.Now, wipstatus = 0, decompositiontimes = 0, islots = 0, priority = 0, //赋值 【Editby shaocx,2025-09-29】 InOutListDetailId = inoutlistdetail.id, //ListNo = inoutlistdetail.listno, }; MainTaskContainer.MainTask = new MainTaskEntity(matask); } else { alarm.SendGateAlarmTask((int)ESendCode.物料不存在); LogTextHelper.WriteLine(Resources.LogDir + @"/自动生成入库主任务流程", "物料号:{0}", sc.RCheckMaterialCode + "不存在此物料"); sc.RCheckMaterialCode = ""; return; } if (nextHandler != null) { nextHandler.Handle(); } } else { LogTextHelper.WriteLine(Resources.LogDir + @"/自动生成入库主任务流程", "未检测到有扫码信息"); return; } } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "Handle", ex.Message); } } } } }