using PlcSiemens.Core.Extension; using ServiceCenter.Logs; using ServiceCenter.Redis; using ServiceCenter.SqlSugars; using System.ComponentModel; using WCS.Core; using WCS.Entity; using WCS.WorkEngineering.Extensions; using WCS.WorkEngineering.Worlds; namespace WCS.WorkEngineering.Systems { /// /// 无交互系统 /// [BelongTo(typeof(MainWorld))] [Description("无交互系统")] public class NoInteractionSystems : DeviceSystem { public NoInteractionSystems() { } protected override bool ParallelDo => true; protected override bool SaveLogsToFile => true; public override void Do(Station obj) { var key = $"WCS:Lock:无交互系统{obj.Entity.Code}"; try { if (RedisHub.Default.Get(key) != null) { throw new KnownException($"[{obj.Entity.Code}]--触发并发管控", LogLevelEnum.High); } RedisHub.Default.Set(key, obj.Entity.Code); #region 处理所有的新增任务 try { List taskInfos = new List(); SqlSugarHelper.Do(db => { taskInfos = db.Default.Queryable().Where(t => t.Status == Entity.TaskStatus.NewBuild).ToList(); }); if (taskInfos.Any()) { foreach (var item in taskInfos) { try { SqlSugarHelper.Do(db => { var task = db.Default.Queryable().Where(t => t.ID == item.ID).First() ?? throw new Exception($"未找到对应的WCS任务[{item.ID}]"); if (task.Type == TaskType.EnterDepot) { //更新任务状态 task.Status = Entity.TaskStatus.WaitingToExecute; db.Default.Updateable(task).ExecuteCommand(); task.AddWCS_TASK_DTL(db, task.Device, $"初始化入库任务信息"); } else if (task.Type == TaskType.OutDepot) { //if (task.SrmStation.IsNullOrEmpty()) //如果没有指定放货站台 //{ // //获取堆垛机到目标地址的路径信息 // var path = DevicePath.GetPath(task.Device, task.AddrTo); // task.SrmStation = path.Points[1].Code; //} string putStation = ""; if (task.AddrTo == "8278") { switch (task.Tunnel) { case "1": putStation = "8271"; break; case "2": putStation = "8272"; break; case "3": putStation = "8273"; break; case "4": putStation = "8274"; break; case "5": putStation = "8275"; break; } } else if (task.AddrTo == "8263" || task.AddrTo == "8257" || task.AddrTo == "8269") { switch (task.Tunnel) { case "1": putStation = "8251"; break; case "2": putStation = "8248"; break; case "3": putStation = "8247"; break; case "4": putStation = "8245"; break; case "5": putStation = "8242"; break; } } //更新任务状态 task.Status = Entity.TaskStatus.WaitingToExecute; task.SrmStation = putStation; db.Default.Updateable(task).ExecuteCommand(); task.AddWCS_TASK_DTL(db, task.Device, $"初始化出库任务信息,放货站台:{task.SrmStation}"); } }); } catch (Exception ex) { World.Log(ex.Message, LogLevelEnum.Mid); continue; } } } } catch (Exception ex) { World.Log(ex.Message, LogLevelEnum.Mid); } #endregion 处理所有的新增任务 } finally { RedisHub.Default.Del(key); } } public override bool Select(Device dev) { return dev.Code == "8271"; } } }