using ServiceCenter.Extensions; using ServiceCenter.Logs; using ServiceCenter.SqlSugars; using System.ComponentModel; using WCS.Core; using WCS.Entity; using WCS.WorkEngineering.Extensions; using WCS.WorkEngineering.Protocol.Station; using WCS.WorkEngineering.Worlds; using TaskStatus = WCS.Entity.TaskStatus; namespace WCS.WorkEngineering.Systems { /// /// 分流点 /// [BelongTo(typeof(MainWorld))] [Description("环形库分流点")] public class 环形库分流点 : DeviceSystem> { protected override bool ParallelDo => true; protected override bool SaveLogsToFile => true; public override void Do(Device obj) { if (obj.Data.VoucherNo != obj.Data2.VoucherNo) throw new KnownException($"凭证号不一致,DB520:{obj.Data.VoucherNo}-DB521:{obj.Data2.VoucherNo}", LogLevelEnum.High); if (obj.Data3.Status.HasFlag(StationStatus.Run)) throw new KnownException("设备运行中", LogLevelEnum.Low); if (!obj.Data3.Status.HasFlag(StationStatus.OT_Status)) throw new KnownException("站台货物信息与实际占用不一致", LogLevelEnum.Low); if (obj.Data2.Request != 1) throw new KnownException("无请求", LogLevelEnum.Mid); //处理异常任务 if (obj.Data2.TaskNumber == 1) { obj.Data.TaskNumber = 591; obj.Data.GoodsStart = obj.Entity.Code.ToShort(); obj.Data.GoodsEnd = 591; obj.Data.VoucherNo++; World.Log($"执行记录:任务号[{591}]"); } var db = new SqlSugarHelper(); var taskInfo = db.Default.Queryable().First(v => v.ID == obj.Data2.TaskNumber && v.Status == TaskStatus.FinishOfShunt) ?? throw new KnownException("未找到对应的WCS任务", LogLevelEnum.Mid); try { db.Connect.BeginTran(); //taskInfo.Status = TaskStatus.ConveyorExecution; //taskInfo.AddrNext = "455";//TODO:暂时先用固定值 taskInfo.EditWho = "WCS"; taskInfo.EditTime = DateTime.Now; taskInfo.AddWCS_TASK_DTL(db, obj.Entity.Code, taskInfo.AddrNext, "环形库分流"); db.Default.Updateable(taskInfo).ExecuteCommand(); db.Connect.CommitTran(); taskInfo.UpdateRedisHash(); } catch (Exception e) { db.Connect.RollbackTran(); throw new KnownException($"{obj.Data2.TaskNumber}:----{e.Message}", LogLevelEnum.High); } obj.Data.TaskNumber = obj.Data2.TaskNumber; obj.Data.GoodsStart = obj.Entity.Code.ToShort(); obj.Data.GoodsEnd = 455; obj.Data.VoucherNo++; World.Log($"执行记录:任务号[{obj.Data2.TaskNumber}]"); } public override bool Select(Device dev) { return dev.HasFlag(Extensions.DeviceFlags.环形库分流点); } } }