using ServiceCenter.Extensions; using ServiceCenter.Logs; using ServiceCenter.SqlSugars; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using WCS.Core; using WCS.Entity; using WCS.Entity.Protocol.Station; using WCS.WorkEngineering.Extensions; using WCS.WorkEngineering.WebApi.Controllers; using WCS.WorkEngineering.WebApi.Models.WMS.Response; using WCS.WorkEngineering.Worlds; using TaskStatus = WCS.Entity.TaskStatus; namespace WCS.WorkEngineering.Systems.重绕区 { [BelongTo(typeof(RewindWorld))] [Description("退料搬运")] public class 退料搬运 : DeviceSystem> { protected override bool ParallelDo => true; public override void Do(Device obj) { if (!obj.Data3.Status.HasFlag(StationStatus.PH_Status)) { World.Log($"设备无光电"); return; } SqlSugarHelper.Do(_db => { var db = _db.Default; var ph_9001 = new Device(Device.All.First(x => x.Code == "9001"), World); var ph_9101 = new Device(Device.All.First(x => x.Code == "9101"), World); var flag1 = !db.Queryable().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && v.Station == "9001") .SplitTable(v => v.Take(2)).Any() && !ph_9001.Data.Status.HasFlag(StationStatus.PH_Status); var flag2 = !db.Queryable().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && v.Station == "9101") .SplitTable(v => v.Take(2)).Any() && !ph_9101.Data.Status.HasFlag(StationStatus.PH_Status); var isUse = false; if (flag1 || flag2) { var res = WmsApi.GetFlatLocalIn(100, "T3", obj.Entity.Code, 100); if (res.ResCode == ResponseStatusCodeEnum.Sucess && res.ResData.CellNo == obj.Entity.Code) { isUse = true; } else { World.Log($"{obj.Entity.Code}光电有货但不可用"); return; } } if (isUse) { var agvId = DateTime.Now.GetFormat(GetFormatterEnum.only) + 9001; //开始创建AGV任务 var agvTask = db.Queryable().RowLock().SplitTable(x => x.Take(2)).Single(x => x.Position == obj.Entity.Code && x.TaskType == AGVTaskType.EnterDepot && x.Status < AGVTaskStatus.MissionCompleted); if (agvTask == null) { //开始处理叫料AGV任务任务 db.InsertableRowLock(new WCS_AgvTaskInfo() { ID = _db.GetAgvTaskId(), TaskType = AGVTaskType.EnterDepot, Status = AGVTaskStatus.NewBuild, TaskId = 9001, Position = obj.Entity.Code, Station = flag2 == true ? "9101" : "9001", WorkShop = 333, AddWho = "WCS", AddTime = DateTime.Now, AgvID = agvId }).SplitTable().ExecuteCommand(); } } }); } public override bool Select(Device dev) { return dev.Code is "9210" or "9211" or "9212" or "9213" or "9214"; } } }