|
@@ -27,120 +27,90 @@ namespace WCS.WorkEngineering.Systems
|
|
|
|
|
|
public override void Do(Station obj)
|
|
|
{
|
|
|
- #region 处理所有的新增入库任务
|
|
|
+ #region 处理所有的新增任务
|
|
|
|
|
|
- SqlSugarHelper.Do(db =>
|
|
|
- {
|
|
|
- List<WCS_TaskInfo> tasks = new List<WCS_TaskInfo>();
|
|
|
-
|
|
|
- tasks = db.Default.Queryable<WCS_TaskInfo>().Where(t => t.Status == Entity.TaskStatus.NewBuild && t.Type == TaskType.EnterDepot).ToList();
|
|
|
-
|
|
|
- if (tasks.Count > 0)
|
|
|
- {
|
|
|
- tasks.ForEach(task =>
|
|
|
- {
|
|
|
- //开始处理
|
|
|
- task.Status = Entity.TaskStatus.WaitingToExecute;
|
|
|
- task.AddWCS_TASK_DTL(db, task.Device, $"初始化入库任务信息,并创建AGV任务中间表");
|
|
|
- var agvTask = new WCS_AgvTaskInfo()
|
|
|
- {
|
|
|
- ID = db.GetAGVTaskId(),
|
|
|
- TaskType = AGVTaskType.EnterDepot,
|
|
|
- Status = AGVTaskStatus.NewBuild,
|
|
|
- Station = task.WorkBench,
|
|
|
- AddWho = "WCS"
|
|
|
- };
|
|
|
- db.Default.Insertable(agvTask).SplitTable().ExecuteCommand();
|
|
|
- task.AgvTaskID = agvTask.ID;
|
|
|
- db.Default.Updateable(task).ExecuteCommand();
|
|
|
- });
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- #endregion 处理所有的新增入库任务
|
|
|
-
|
|
|
- #region 处理所有的新增初始化入库任务
|
|
|
-
|
|
|
- SqlSugarHelper.Do(db =>
|
|
|
+ try
|
|
|
{
|
|
|
- List<WCS_TaskInfo> tasks = new List<WCS_TaskInfo>();
|
|
|
-
|
|
|
- tasks = db.Default.Queryable<WCS_TaskInfo>().Where(t => t.Status == Entity.TaskStatus.NewBuild && t.Type == TaskType.EmptyInit).ToList();
|
|
|
-
|
|
|
- if (tasks.Count > 0)
|
|
|
- {
|
|
|
- tasks.ForEach(task =>
|
|
|
- {
|
|
|
- //开始处理
|
|
|
- task.Status = Entity.TaskStatus.WaitingToExecute;
|
|
|
- task.AddWCS_TASK_DTL(db, task.Device, $"初始化任务信息");
|
|
|
- db.Default.Updateable(task).ExecuteCommand();
|
|
|
- });
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- #endregion 处理所有的新增初始化入库任务
|
|
|
-
|
|
|
- #region 处理所有新建出库任务
|
|
|
-
|
|
|
- SqlSugarHelper.Do(db =>
|
|
|
- {
|
|
|
- List<WCS_TaskInfo> tasks = new List<WCS_TaskInfo>();
|
|
|
-
|
|
|
- //获取所有新建状态的出库任务
|
|
|
- tasks = db.Default.Queryable<WCS_TaskInfo>().Where(t => t.Status == Entity.TaskStatus.NewBuild && t.Type == TaskType.OutDepot).ToList();
|
|
|
- if (tasks.Count > 0)
|
|
|
+ SqlSugarHelper.Do(db =>
|
|
|
{
|
|
|
+ var tasks = db.Default.Queryable<WCS_TaskInfo>().Where(t => t.Status == Entity.TaskStatus.NewBuild).ToList();
|
|
|
+ if (!tasks.Any()) return;
|
|
|
tasks.ForEach(task =>
|
|
|
{
|
|
|
- //获取堆垛机到目标地址的路径信息
|
|
|
- var ty = DevicePath.GetPath(task.Device, task.AddrTo);
|
|
|
- //开始处理
|
|
|
- if (task.SrmStation.IsNullOrEmpty())
|
|
|
+ switch (task.Type)
|
|
|
{
|
|
|
- task.SrmStation = ty.Points[1].Code;
|
|
|
+ case TaskType.SetPlate:
|
|
|
+ break;
|
|
|
+
|
|
|
+ case TaskType.EnterDepot:
|
|
|
+ //创建AGV任务
|
|
|
+ var agvTask = new WCS_AgvTaskInfo()
|
|
|
+ {
|
|
|
+ ID = db.GetAGVTaskId(),
|
|
|
+ TaskType = AGVTaskType.EnterDepot,
|
|
|
+ Status = AGVTaskStatus.NewBuild,
|
|
|
+ Station = task.WorkBench,
|
|
|
+ AddWho = "WCS"
|
|
|
+ };
|
|
|
+ db.Default.Insertable(agvTask).SplitTable().ExecuteCommand();
|
|
|
+ //更新任务状态
|
|
|
+ task.Status = Entity.TaskStatus.WaitingToExecute;
|
|
|
+ task.AgvTaskID = agvTask.ID;
|
|
|
+ db.Default.Updateable(task).ExecuteCommand();
|
|
|
+ task.AddWCS_TASK_DTL(db, task.Device, $"初始化入库任务信息,并创建AGV任务中间表");
|
|
|
+ break;
|
|
|
+
|
|
|
+ case TaskType.OutDepot:
|
|
|
+ if (task.SrmStation.IsNullOrEmpty())
|
|
|
+ {
|
|
|
+ //获取堆垛机到目标地址的路径信息
|
|
|
+ var path = DevicePath.GetPath(task.Device, task.AddrTo);
|
|
|
+ task.SrmStation = path.Points[1].Code;
|
|
|
+ }
|
|
|
+ task.Status = Entity.TaskStatus.WaitingToExecute;
|
|
|
+ db.Default.Updateable(task).ExecuteCommand();
|
|
|
+ task.AddWCS_TASK_DTL(db, task.Device, $"初始化出库任务信息,放货站台:{task.SrmStation}");
|
|
|
+ break;
|
|
|
+
|
|
|
+ case TaskType.TransferDepot:
|
|
|
+ break;
|
|
|
+
|
|
|
+ case TaskType.Delivery:
|
|
|
+ var agv = new WCS_AgvTaskInfo()
|
|
|
+ {
|
|
|
+ ID = db.GetAGVTaskId(),
|
|
|
+ TaskType = AGVTaskType.ForkliftFilling,
|
|
|
+ Status = AGVTaskStatus.NewBuild,
|
|
|
+ Station = task.WorkBench,
|
|
|
+ AddWho = "WCS"
|
|
|
+ };
|
|
|
+ db.Default.Insertable(agv).SplitTable().ExecuteCommand();
|
|
|
+ //更新WCS数据
|
|
|
+ task.Status = Entity.TaskStatus.WaitingToExecute;
|
|
|
+ task.AgvTaskID = agv.ID;
|
|
|
+ db.Default.Updateable(task).ExecuteCommand();
|
|
|
+ task.AddWCS_TASK_DTL(db, task.Device, $"初始化搬运任务信息,并创建AGV任务");
|
|
|
+ break;
|
|
|
+
|
|
|
+ case TaskType.EmptyInit:
|
|
|
+ //更新任务状态
|
|
|
+ task.Status = Entity.TaskStatus.WaitingToExecute;
|
|
|
+ db.Default.Updateable(task).ExecuteCommand();
|
|
|
+ task.AddWCS_TASK_DTL(db, task.Device, $"初始化任务信息");
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ break;
|
|
|
}
|
|
|
- //task.AddrNext = path[2];
|
|
|
- task.Status = Entity.TaskStatus.WaitingToExecute;
|
|
|
- task.AddWCS_TASK_DTL(db, task.Device, $"初始化出库任务信息,放货站台:{task.SrmStation}");
|
|
|
- db.Default.Updateable(task).ExecuteCommand();
|
|
|
});
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- #endregion 处理所有新建出库任务
|
|
|
-
|
|
|
- #region 处理所有的搬运任务
|
|
|
-
|
|
|
- SqlSugarHelper.Do(db =>
|
|
|
+ });
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
{
|
|
|
- List<WCS_TaskInfo> tasks = new List<WCS_TaskInfo>();
|
|
|
-
|
|
|
- tasks = db.Default.Queryable<WCS_TaskInfo>().Where(t => t.Status == Entity.TaskStatus.NewBuild && t.Type == TaskType.Delivery).ToList();
|
|
|
-
|
|
|
- if (tasks.Count > 0)
|
|
|
- {
|
|
|
- tasks.ForEach(task =>
|
|
|
- {
|
|
|
- //开始处理
|
|
|
- task.Status = Entity.TaskStatus.WaitingToExecute;
|
|
|
- task.AddWCS_TASK_DTL(db, task.Device, $"初始化搬运任务信息,并创建AGV任务中间表");
|
|
|
- var agv = new WCS_AgvTaskInfo()
|
|
|
- {
|
|
|
- ID = db.GetAGVTaskId(),
|
|
|
- TaskType = AGVTaskType.ForkliftFilling,
|
|
|
- Status = AGVTaskStatus.NewBuild,
|
|
|
- Station = task.WorkBench,
|
|
|
- AddWho = "WCS"
|
|
|
- };
|
|
|
- db.Default.Insertable(agv).SplitTable().ExecuteCommand();
|
|
|
- task.AgvTaskID = agv.ID;
|
|
|
- db.Default.Updateable(task).ExecuteCommand();
|
|
|
- });
|
|
|
- }
|
|
|
- });
|
|
|
+ World.Log(ex.Message, Worlds.Logs.LogLevelEnum.Mid);
|
|
|
+ }
|
|
|
|
|
|
- #endregion 处理所有的搬运任务
|
|
|
+ #endregion 处理所有的新增任务
|
|
|
|
|
|
#region 下发入库AGV任务
|
|
|
|
|
@@ -152,20 +122,33 @@ namespace WCS.WorkEngineering.Systems
|
|
|
{
|
|
|
foreach (var agv in agvTasks)
|
|
|
{
|
|
|
- //开始处理
|
|
|
- GenAgvSchedulingTaskResponse res = new GenAgvSchedulingTaskResponse();
|
|
|
+ ////开始处理
|
|
|
+ //GenAgvSchedulingTaskResponse res = new GenAgvSchedulingTaskResponse();
|
|
|
try
|
|
|
{
|
|
|
//获取对应wcs任务
|
|
|
var wcs = db.Default.Queryable<WCS_TaskInfo>().Where(t => t.AgvTaskID == agv.ID && t.Status == Entity.TaskStatus.WaitingToExecute).First();
|
|
|
- //下发AGV任务
|
|
|
- res = AgvApi.满轮入库(wcs.BarCode, agv.Station, Guid.NewGuid().ToString().Replace("-", ""), "1");
|
|
|
- agv.Status = AGVTaskStatus.Confirm;
|
|
|
- agv.AgvID = res.data;
|
|
|
- db.Default.Updateable(agv).SplitTable().ExecuteCommand();
|
|
|
+
|
|
|
+ switch (wcs.Floor)
|
|
|
+ {
|
|
|
+ case 1: //一楼下发AGV任务
|
|
|
+ var res = AgvApi.满轮入库(wcs.BarCode, agv.Station, Guid.NewGuid().ToString().Replace("-", ""), "1");
|
|
|
+ agv.Status = AGVTaskStatus.Confirm;
|
|
|
+ agv.AgvID = res.data;
|
|
|
+ db.Default.Updateable(agv).SplitTable().ExecuteCommand();
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 2: //二楼下发AGV任务
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ //更新WCS数据
|
|
|
wcs.Status = Entity.TaskStatus.AGVExecution;
|
|
|
- wcs.AddWCS_TASK_DTL(db, wcs.Device, $"任务下发至AGV,AGV任务号:{res.data}");
|
|
|
db.Default.Updateable(wcs).ExecuteCommand();
|
|
|
+ wcs.AddWCS_TASK_DTL(db, wcs.Device, $"任务下发至AGV");
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
@@ -178,9 +161,12 @@ namespace WCS.WorkEngineering.Systems
|
|
|
|
|
|
#endregion 下发入库AGV任务
|
|
|
|
|
|
+ Thread.Sleep(1000);
|
|
|
+
|
|
|
#region 移动任务处理
|
|
|
|
|
|
- try{
|
|
|
+ try
|
|
|
+ {
|
|
|
SqlSugarHelper.Do(db =>
|
|
|
{
|
|
|
var agvTasks = db.Default.Queryable<WCS_AgvTaskInfo>().Where(t => t.Status == AGVTaskStatus.NewBuild && t.TaskType == AGVTaskType.ForkliftFilling).SplitTable(v => v.Take(2)).ToList();
|
|
@@ -200,9 +186,10 @@ namespace WCS.WorkEngineering.Systems
|
|
|
agv.Status = AGVTaskStatus.Confirm;
|
|
|
agv.AgvID = res.data;
|
|
|
db.Default.Updateable(agv).SplitTable().ExecuteCommand();
|
|
|
+
|
|
|
wcs.Status = Entity.TaskStatus.AGVExecution;
|
|
|
- wcs.AddWCS_TASK_DTL(db, wcs.Device, $"任务下发至AGV,AGV任务号:{res.data}");
|
|
|
db.Default.Updateable(wcs).ExecuteCommand();
|
|
|
+ wcs.AddWCS_TASK_DTL(db, wcs.Device, $"任务下发至AGV,AGV任务号:{res.data}");
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|