|
|
@@ -66,6 +66,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
//判断完成任务号是否大于0
|
|
|
if (obj.Data2.TaskFinishiId > 0)
|
|
|
{
|
|
|
+ WCS_TaskInfo taskInfo = null;
|
|
|
var result = SqlSugarHelper.Do(db =>
|
|
|
{
|
|
|
//根据DB521任务号获取对应任务
|
|
|
@@ -84,6 +85,8 @@ namespace WCS.WorkEngineering.Systems
|
|
|
|
|
|
case TaskType.OutDepot:
|
|
|
task.Status = Entity.TaskStatus.ConveyorExecution;
|
|
|
+ var dev = new Station(Device.All.FirstOrDefault(v => v.Code == task.SrmStation), this.World);
|
|
|
+ dev.Data.TaskNumber = task.ID;
|
|
|
task.AddWCS_TASK_DTL(db, task.SrmStation, "出库任务到达放货站台");
|
|
|
break;
|
|
|
|
|
|
@@ -92,12 +95,23 @@ namespace WCS.WorkEngineering.Systems
|
|
|
task.EedTime = DateTime.Now;
|
|
|
task.AddWCS_TASK_DTL(db, task.AddrTo, "移库任务结束");
|
|
|
break;
|
|
|
+
|
|
|
+ case TaskType.EmptyInit:
|
|
|
+ task.Status = Entity.TaskStatus.Finish;
|
|
|
+ task.EedTime = DateTime.Now;
|
|
|
+ task.AddWCS_TASK_DTL(db, task.AddrTo, "移库任务结束");
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
db.Default.Updateable(task).ExecuteCommand();
|
|
|
- task.CompleteOrCancelTasks(db, World);
|
|
|
+ if (task.Status >= TaskStatus.Finish) task.CompleteOrCancelTasks(db);
|
|
|
+ if (task.Type == TaskType.OutDepot && task.Status == TaskStatus.ConveyorExecution) WmsApi.SrmPickOutCompleted(task.ID);
|
|
|
+
|
|
|
+ taskInfo = task;
|
|
|
});
|
|
|
- if (!result) throw new KnownException("数据库提交事务错误", LogLevelEnum.High);
|
|
|
+ if (!result && taskInfo == null) throw new KnownException("数据库提交事务错误", LogLevelEnum.High);
|
|
|
+ //通知WMS任务完成
|
|
|
+ if (taskInfo.Status == TaskStatus.Finish) WmsApi.CompleteTask(taskInfo.ID);
|
|
|
// 写入信号
|
|
|
obj.Data.OkAck = 1;
|
|
|
}
|
|
|
@@ -203,13 +217,15 @@ namespace WCS.WorkEngineering.Systems
|
|
|
var result = SqlSugarHelper.Do(db =>
|
|
|
{
|
|
|
//根据有货设备的任务号获取所有类型为入库状态为输送机执行中的任务
|
|
|
- var tasks = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Type == TaskType.EnterDepot && v.Status == TaskStatus.ConveyorExecution && arrIn.Select(p => p.Data.TaskNumber).Contains(v.ID));
|
|
|
+ var tasks = db.Default.Queryable<WCS_TaskInfo>().Where(v => (v.Type == TaskType.EnterDepot || v.Type == TaskType.EmptyInit)
|
|
|
+ && v.Status == TaskStatus.ConveyorExecution
|
|
|
+ && arrIn.Select(p => p.Data.TaskNumber).Contains(v.ID));
|
|
|
//按条件先后排序获取一条排序后第一条结果1.优先级2.所在楼层与本次优先执行楼层 TODO:待验证排序结果
|
|
|
var task = tasks.OrderByDescending(v => v.Priority).OrderByDescending(v => v.Floor == floor ? 1 : 0).First() ?? throw new KnownException($"{obj.Entity.Code}未找到入库任务", LogLevelEnum.High);
|
|
|
//获取任务所有设备
|
|
|
station = arrIn.First(v => v.Data.TaskNumber == task.ID);
|
|
|
//获取当前货物巷道
|
|
|
- var res = WmsApi.GetLocalIn(task.ID, 3, station.Entity.Code);
|
|
|
+ var res = WmsApi.GetLocalIn(task.ID, task.Device, station.Entity.Code);
|
|
|
var loc = res.ResData.CellNo.Split("-");
|
|
|
task.Status = TaskStatus.StackerExecution;
|
|
|
task.AddrTo = $"{loc[0]}-{loc[1]}-{loc[2]}";
|
|
|
@@ -234,48 +250,60 @@ namespace WCS.WorkEngineering.Systems
|
|
|
else if (enterOrOut == 3 || !lastIsOut) //出库任务
|
|
|
{
|
|
|
//判断本次优先执行楼层,并设置下次执行时优先楼层
|
|
|
+
|
|
|
var floor = obj.Entity.GetFlag<int>("FloorOut");
|
|
|
+
|
|
|
floor = floor % 2 + 1;
|
|
|
obj.Entity.SetFlag("FloorOut", floor);
|
|
|
|
|
|
//获取当前堆垛机所有的取货站台
|
|
|
- var arrOut = PickUpDevices.First(v => v.Key == obj.Entity.Code).Value;
|
|
|
+ var arrOut = PutDevices.First(v => v.Key == obj.Entity.Code).Value;
|
|
|
+
|
|
|
if (!arrOut.Any()) throw new KnownException($"堆垛机{obj.Entity.Code}无放货路径点", LogLevelEnum.High);
|
|
|
|
|
|
//获取可以放货的设备集合
|
|
|
arrOut = arrOut.Where(v => !v.Data3.Status.HasFlag(StatusEunm.PH_Status) //无光电
|
|
|
- && !v.Data3.Status.HasFlag(StatusEunm.Run) //未运行
|
|
|
- && !v.Data3.Status.HasFlag(StatusEunm.OT_Status) //无任务
|
|
|
- && !v.Data3.Status.HasFlag(StatusEunm.UnassignedTask) //未分配任务
|
|
|
- && v.Data3.Status.HasFlag(StatusEunm.Auto)).ToList(); //自动
|
|
|
+ && !v.Data3.Status.HasFlag(StatusEunm.Run) //未运行
|
|
|
+ && !v.Data3.Status.HasFlag(StatusEunm.OT_Status) //无任务
|
|
|
+ && !v.Data3.Status.HasFlag(StatusEunm.UnassignedTask) //未分配任务
|
|
|
+
|
|
|
+ && v.Data3.Status.HasFlag(StatusEunm.Auto)).ToList(); //自动
|
|
|
+
|
|
|
if (!arrOut.Any()) throw new KnownException($"[{obj.Entity.Code}]等待出库任务输送到位", LogLevelEnum.Mid);
|
|
|
+
|
|
|
WCS_TaskInfo taskInfo = null;
|
|
|
string[] addrFrom = null;
|
|
|
|
|
|
var result = SqlSugarHelper.Do(db =>
|
|
|
- {
|
|
|
- var allOutCode = arrOut.Select(v => v.Entity.Code).ToList();
|
|
|
- //按条件先后排序获取一条排序后第一条结果1.优先级2.所在楼层与本次优先执行楼层 TODO:待验证排序结果
|
|
|
- var task = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Type == TaskType.OutDepot && v.Status == TaskStatus.WaitingToExecute)
|
|
|
- .Where(v => allOutCode.Contains(v.SrmStation))
|
|
|
- .OrderByDescending(v => v.Priority)
|
|
|
- .OrderByDescending(v => v.Floor == floor ? 1 : 0)
|
|
|
- .First() ?? throw new KnownException($"{obj.Entity.Code}未找到出库任务", LogLevelEnum.High);
|
|
|
+ {
|
|
|
+ var allOutCode = arrOut.Select(v => v.Entity.Code).ToList();
|
|
|
+ //按条件先后排序获取一条排序后第一条结果1.优先级2.所在楼层与本次优先执行楼层 TODO:待验证排序结果
|
|
|
+ var task = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Type == TaskType.OutDepot && v.Status == TaskStatus.WaitingToExecute)
|
|
|
+ .Where(v => allOutCode.Contains(v.SrmStation))
|
|
|
+ .OrderByDescending(v => v.Priority)
|
|
|
+ .OrderByDescending(v => v.Floor == floor ? 1 : 0)
|
|
|
+ .First() ?? throw new KnownException($"{obj.Entity.Code}未找到出库任务", LogLevelEnum.High);
|
|
|
+
|
|
|
+ addrFrom = task.AddrFrom.Split("-");
|
|
|
+ task.Status = TaskStatus.StackerExecution;
|
|
|
+ task.LastInteractionPoint = task.Device;
|
|
|
+ task.EditWho = "WCS";
|
|
|
+ task.AddWCS_TASK_DTL(db, task.Device, task.SrmStation, "任务下发堆垛机执行");
|
|
|
+ db.Default.Updateable(task).AddQueue();
|
|
|
+ taskInfo = task;
|
|
|
+ db.Default.SaveQueues();
|
|
|
+ });
|
|
|
|
|
|
- addrFrom = task.AddrFrom.Split("-");
|
|
|
- task.Status = TaskStatus.StackerExecution;
|
|
|
- task.LastInteractionPoint = task.Device;
|
|
|
- task.EditWho = "WCS";
|
|
|
- task.AddWCS_TASK_DTL(db, task.Device, task.SrmStation, "任务下发堆垛机执行");
|
|
|
- db.Default.Updateable(task).AddQueue();
|
|
|
- taskInfo = task;
|
|
|
- db.Default.SaveQueues();
|
|
|
- });
|
|
|
if (taskInfo == null || !result) throw new KnownException("数据更新错误", LogLevelEnum.High);
|
|
|
+
|
|
|
obj.Data.TaskNumber = taskInfo.ID;
|
|
|
+
|
|
|
obj.Data.SLine = addrFrom[0].ToShort();
|
|
|
+
|
|
|
obj.Data.SCol = addrFrom[1].ToShort();
|
|
|
+
|
|
|
obj.Data.SLayer = addrFrom[2].ToShort();
|
|
|
+
|
|
|
obj.Data.ELine = taskInfo.SrmStation.ToShort();
|
|
|
obj.Data.ECol = taskInfo.AddrNext.ToShort();
|
|
|
obj.Data.VoucherNo++;
|
|
|
@@ -286,7 +314,8 @@ namespace WCS.WorkEngineering.Systems
|
|
|
|
|
|
public override bool Select(Device dev)
|
|
|
{
|
|
|
- return dev.Code.Contains("SRM3");
|
|
|
+ return dev.Code == "SRM3";
|
|
|
+ //return dev.HasProtocol(typeof(ISRM520));
|
|
|
}
|
|
|
}
|
|
|
}
|