|
@@ -5,10 +5,9 @@ using ServiceCenter.SqlSugars;
|
|
|
using System.ComponentModel;
|
|
|
using WCS.Core;
|
|
|
using WCS.Entity;
|
|
|
-using WCS.Entity.Protocol.Station;
|
|
|
using WCS.WorkEngineering.Extensions;
|
|
|
-using WCS.WorkEngineering.Protocol.RGV;
|
|
|
using WCS.WorkEngineering.Protocol.SRM;
|
|
|
+using WCS.WorkEngineering.Protocol.Station;
|
|
|
using WCS.WorkEngineering.WebApi.Controllers;
|
|
|
using WCS.WorkEngineering.Worlds;
|
|
|
using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
|
|
@@ -39,12 +38,10 @@ namespace WCS.WorkEngineering.Systems
|
|
|
{
|
|
|
if (obj.Entity.HasFlag(DeviceFlags.出库))
|
|
|
{
|
|
|
-
|
|
|
List<WCS_AgvTaskInfo> agvTaskInfos = new List<WCS_AgvTaskInfo>();
|
|
|
//获取所有未结束的叫料及背负式补空AGV任务
|
|
|
SqlSugarHelper.Do(db =>
|
|
|
{
|
|
|
-
|
|
|
agvTaskInfos = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => (v.TaskType == AGVTaskType.CallMaterial || v.TaskType == AGVTaskType.CallForMaterial || v.TaskType == AGVTaskType.ForkliftFilling))
|
|
|
.Where(v => v.Status < AGVTaskStatus.MissionCompleted)
|
|
|
.SplitTable(tabs => tabs.Take(2)).OrderBy(v => v.AddTime).ToList();
|
|
@@ -104,7 +101,6 @@ namespace WCS.WorkEngineering.Systems
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
foreach (var item in taskInfos)
|
|
|
{
|
|
|
WmsApi.CompleteTask(item.ID);
|
|
@@ -117,7 +113,6 @@ namespace WCS.WorkEngineering.Systems
|
|
|
//获取所有未结束的入库AGV任务
|
|
|
SqlSugarHelper.Do(db =>
|
|
|
{
|
|
|
-
|
|
|
agvTaskInfos = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot).SplitTable(tabs => tabs.Take(2)).OrderBy(v => v.EditTime).ToList();
|
|
|
});
|
|
|
|
|
@@ -133,7 +128,9 @@ namespace WCS.WorkEngineering.Systems
|
|
|
//找到对应WCS任务
|
|
|
var task = db.Default.Queryable<WCS_TaskInfo>().First(v => v.AgvTaskID == agv.ID);
|
|
|
if (task == null) throw new Exception($"AGV任务{agv.ID}未找到对应WCS任务");
|
|
|
+
|
|
|
#region 开始跟据AGV状态做出处理
|
|
|
+
|
|
|
//巷道分配
|
|
|
if (agv.AgvStatus == AGVTaskStatus.RequestOrPermission1 && agv.Status != AGVTaskStatus.Complete1)
|
|
|
{
|
|
@@ -151,9 +148,9 @@ namespace WCS.WorkEngineering.Systems
|
|
|
//一楼三个入库口
|
|
|
stations = devs.Where(v => v.Entity.Code is "1011" or "1013" or "1015").ToList();
|
|
|
//筛选出可用站台
|
|
|
- stations = stations.Where(v => v.Data.VoucherNo == v.Data2.VoucherNo && v.Data3.Status.HasFlag(StatusEunm.Auto))
|
|
|
- .Where(v => !v.Data3.Status.HasFlag(StatusEunm.PH_Status) && !v.Data3.Status.HasFlag(StatusEunm.OT_Status))
|
|
|
- .Where(v => !v.Data3.Status.HasFlag(StatusEunm.Run)).ToList(); // 筛选出可用站台
|
|
|
+ stations = stations.Where(v => v.Data.VoucherNo == v.Data2.VoucherNo && v.Data3.Status.HasFlag(StationStatus.Auto))
|
|
|
+ .Where(v => !v.Data3.Status.HasFlag(StationStatus.PH_Status) && !v.Data3.Status.HasFlag(StationStatus.OT_Status))
|
|
|
+ .Where(v => !v.Data3.Status.HasFlag(StationStatus.Run)).ToList(); // 筛选出可用站台
|
|
|
this.ExRecord(obj.Entity.Code, $"AGV任务{agv.ID},可用放货站台", stations.Select(v => v.Entity.Code).ToList());
|
|
|
//可用堆垛机
|
|
|
srm = stations.Select(v => v.Entity.Sources).SelectMany(v => v).Where(v => v.IsTunnel()) //上一个地址是巷道的
|
|
@@ -168,9 +165,9 @@ namespace WCS.WorkEngineering.Systems
|
|
|
//二楼三个入库口
|
|
|
stations = devs.Where(v => v.Entity.Code is "1021" or "1023" or "1025").ToList();
|
|
|
//筛选出可用站台
|
|
|
- stations = stations.Where(v => v.Data.VoucherNo == v.Data2.VoucherNo && v.Data3.Status.HasFlag(StatusEunm.Auto))
|
|
|
- .Where(v => !v.Data3.Status.HasFlag(StatusEunm.PH_Status) && !v.Data3.Status.HasFlag(StatusEunm.OT_Status))
|
|
|
- .Where(v => !v.Data3.Status.HasFlag(StatusEunm.Run)).ToList(); // 筛选出可用站台
|
|
|
+ stations = stations.Where(v => v.Data.VoucherNo == v.Data2.VoucherNo && v.Data3.Status.HasFlag(StationStatus.Auto))
|
|
|
+ .Where(v => !v.Data3.Status.HasFlag(StationStatus.PH_Status) && !v.Data3.Status.HasFlag(StationStatus.OT_Status))
|
|
|
+ .Where(v => !v.Data3.Status.HasFlag(StationStatus.Run)).ToList(); // 筛选出可用站台
|
|
|
this.ExRecord(obj.Entity.Code, $"AGV任务{agv.ID},可用放货站台", stations.Select(v => v.Entity.Code).ToList());
|
|
|
//可用堆垛机
|
|
|
srm = stations.Select(v => v.Entity.Sources).SelectMany(v => v).Where(v => v.IsTunnel()) //上一个地址是巷道的
|
|
@@ -179,7 +176,6 @@ namespace WCS.WorkEngineering.Systems
|
|
|
.Where(v => v != null && !v.Data2.Status.HasFlag(SrmStatus.Alarm) && v.Data2.AutoStatus == SrmAutoStatus.Automatic) //筛选出可用堆垛机
|
|
|
.Where(v => tunnelNo.Contains(v.Entity.Code)) //筛选出巷道优先级最高的堆垛机
|
|
|
.MinBy(v => tunnelNo.IndexOf(v.Entity.Code));//按照巷道优先级排序
|
|
|
-
|
|
|
}
|
|
|
if (srm == null) throw new Exception($"agv任务{agv.ID}无可用堆垛机");
|
|
|
|
|
@@ -206,7 +202,6 @@ namespace WCS.WorkEngineering.Systems
|
|
|
throw new Exception(msg);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
//更新AGV任务状态
|
|
|
agv.Status = AGVTaskStatus.Complete1;
|
|
|
agv.Position = flag == true ? "1025" : nextPos.Entity.Code;
|
|
@@ -219,12 +214,13 @@ namespace WCS.WorkEngineering.Systems
|
|
|
task.Tunnel = "3";
|
|
|
task.AddrNext = "1025";
|
|
|
}
|
|
|
- else {
|
|
|
+ else
|
|
|
+ {
|
|
|
task.Device = srm.Entity.Code;
|
|
|
task.Tunnel = task.Device.GetLastDigit().ToString();
|
|
|
task.AddrNext = agv.Position;
|
|
|
- }
|
|
|
- db.Default.Updateable(task).ExecuteCommand();
|
|
|
+ }
|
|
|
+ db.Default.Updateable(task).ExecuteCommand();
|
|
|
task.AddWCS_TASK_DTL(db, "AGV巷道分配点", nextPos.Entity.Code, $"任务分配至堆垛机:{srm.Entity.Code}");
|
|
|
this.ExRecord(obj.Entity.Code, $"AGV任务{agv.ID}分配至堆垛机:{srm.Entity.Code}");
|
|
|
//调继续执行任务接口
|
|
@@ -237,10 +233,10 @@ namespace WCS.WorkEngineering.Systems
|
|
|
var dev = devs.Find(v => v.Entity.Code == agv.Position);
|
|
|
|
|
|
if (dev.Data.VoucherNo != dev.Data2.VoucherNo) throw new Exception($"AGV请求放货,但{dev.Entity.Code}凭证号不一致");
|
|
|
- if (!dev.Data3.Status.HasFlag(StatusEunm.Auto)) throw new Exception($"AGV请求放货,但{dev.Entity.Code}不在自动状态");
|
|
|
- if (dev.Data3.Status.HasFlag(StatusEunm.PH_Status)) throw new Exception($"AGV请求放货,但{dev.Entity.Code}光电有货");
|
|
|
- if (dev.Data3.Status.HasFlag(StatusEunm.OT_Status)) throw new Exception($"AGV请求放货,但{dev.Entity.Code}任务有货");
|
|
|
- if (dev.Data3.Status.HasFlag(StatusEunm.Run)) throw new Exception($"AGV请求放货,但{dev.Entity.Code}在运行状态");
|
|
|
+ if (!dev.Data3.Status.HasFlag(StationStatus.Auto)) throw new Exception($"AGV请求放货,但{dev.Entity.Code}不在自动状态");
|
|
|
+ if (dev.Data3.Status.HasFlag(StationStatus.PH_Status)) throw new Exception($"AGV请求放货,但{dev.Entity.Code}光电有货");
|
|
|
+ if (dev.Data3.Status.HasFlag(StationStatus.OT_Status)) throw new Exception($"AGV请求放货,但{dev.Entity.Code}任务有货");
|
|
|
+ if (dev.Data3.Status.HasFlag(StationStatus.Run)) throw new Exception($"AGV请求放货,但{dev.Entity.Code}在运行状态");
|
|
|
agv.Status = AGVTaskStatus.Complete2;
|
|
|
db.Default.Updateable(agv).SplitTable().ExecuteCommand();
|
|
|
|