|  | @@ -1,4 +1,5 @@
 | 
	
		
			
				|  |  |  using PlcSiemens.Core.Extension;
 | 
	
		
			
				|  |  | +using ServiceCenter.Redis;
 | 
	
		
			
				|  |  |  using ServiceCenter.SqlSugars;
 | 
	
		
			
				|  |  |  using System.ComponentModel;
 | 
	
		
			
				|  |  |  using WCS.Core;
 | 
	
	
		
			
				|  | @@ -7,6 +8,7 @@ using WCS.WorkEngineering.Extensions;
 | 
	
		
			
				|  |  |  using WCS.WorkEngineering.WebApi.Controllers;
 | 
	
		
			
				|  |  |  using WCS.WorkEngineering.WebApi.Models.AGV.Response;
 | 
	
		
			
				|  |  |  using WCS.WorkEngineering.Worlds;
 | 
	
		
			
				|  |  | +using WCS.WorkEngineering.Worlds.Logs;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  namespace WCS.WorkEngineering.Systems
 | 
	
		
			
				|  |  |  {
 | 
	
	
		
			
				|  | @@ -27,184 +29,153 @@ namespace WCS.WorkEngineering.Systems
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          public override void Do(Station obj)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            #region 处理所有的新增任务
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +            var key = $"WCS:Lock:无交互系统{obj.Entity.Code}";
 | 
	
		
			
				|  |  |              try
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                SqlSugarHelper.Do(db =>
 | 
	
		
			
				|  |  | +                if (RedisHub.Default.Get(key) != null)
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    throw new KnownException($"[{obj.Entity.Code}]--触发并发管控", LogLevelEnum.High);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                RedisHub.Default.Set(key, obj.Entity.Code);
 | 
	
		
			
				|  |  | +                #region 处理所有的新增任务
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                try
 | 
	
		
			
				|  |  |                  {
 | 
	
		
			
				|  |  | -                    var tasks = db.Default.Queryable<WCS_TaskInfo>().Where(t => t.Status == Entity.TaskStatus.NewBuild).ToList();
 | 
	
		
			
				|  |  | -                    if (!tasks.Any()) return;
 | 
	
		
			
				|  |  | -                    tasks.ForEach(task =>
 | 
	
		
			
				|  |  | +                    SqlSugarHelper.Do(db =>
 | 
	
		
			
				|  |  |                      {
 | 
	
		
			
				|  |  | -                        switch (task.Type)
 | 
	
		
			
				|  |  | +                        var tasks = db.Default.Queryable<WCS_TaskInfo>().Where(t => t.Status == Entity.TaskStatus.NewBuild).ToList();
 | 
	
		
			
				|  |  | +                        if (!tasks.Any()) return;
 | 
	
		
			
				|  |  | +                        tasks.ForEach(task =>
 | 
	
		
			
				|  |  |                          {
 | 
	
		
			
				|  |  | -                            case TaskType.SetPlate:
 | 
	
		
			
				|  |  | -                                break;
 | 
	
		
			
				|  |  | +                            switch (task.Type)
 | 
	
		
			
				|  |  | +                            {
 | 
	
		
			
				|  |  | +                                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.Floor == 2)
 | 
	
		
			
				|  |  | -                                {  //创建AGV任务
 | 
	
		
			
				|  |  | -                                    agvTask = new WCS_AgvTaskInfo()
 | 
	
		
			
				|  |  | +                                case TaskType.EnterDepot:
 | 
	
		
			
				|  |  | +                                    //创建AGV任务
 | 
	
		
			
				|  |  | +                                    var agvTask = new WCS_AgvTaskInfo()
 | 
	
		
			
				|  |  |                                      {
 | 
	
		
			
				|  |  |                                          ID = db.GetAGVTaskId(),
 | 
	
		
			
				|  |  | -                                        TaskType = AGVTaskType.CallMaterial,
 | 
	
		
			
				|  |  | +                                        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;
 | 
	
		
			
				|  |  | -                                }
 | 
	
		
			
				|  |  | -                                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;
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                    });
 | 
	
		
			
				|  |  | -                });
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            catch (Exception ex)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                World.Log(ex.Message, Worlds.Logs.LogLevelEnum.Mid);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            #endregion 处理所有的新增任务
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            #region 下发入库AGV任务
 | 
	
		
			
				|  |  | +                                    db.Default.Updateable(task).ExecuteCommand();
 | 
	
		
			
				|  |  | +                                    task.AddWCS_TASK_DTL(db, task.Device, $"初始化入库任务信息,并创建AGV任务中间表");
 | 
	
		
			
				|  |  | +                                    break;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            SqlSugarHelper.Do(db =>
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                var agvTasks = db.Default.Queryable<WCS_AgvTaskInfo>().Where(t => t.Status == AGVTaskStatus.NewBuild && t.TaskType == AGVTaskType.EnterDepot).SplitTable(v => v.Take(2)).ToList();
 | 
	
		
			
				|  |  | +                                case TaskType.OutDepot:
 | 
	
		
			
				|  |  | +                                    if (task.Floor == 2)
 | 
	
		
			
				|  |  | +                                    {  //创建AGV任务
 | 
	
		
			
				|  |  | +                                        agvTask = new WCS_AgvTaskInfo()
 | 
	
		
			
				|  |  | +                                        {
 | 
	
		
			
				|  |  | +                                            ID = db.GetAGVTaskId(),
 | 
	
		
			
				|  |  | +                                            TaskType = AGVTaskType.CallMaterial,
 | 
	
		
			
				|  |  | +                                            Status = AGVTaskStatus.NewBuild,
 | 
	
		
			
				|  |  | +                                            Station = task.WorkBench,
 | 
	
		
			
				|  |  | +                                            AddWho = "WCS"
 | 
	
		
			
				|  |  | +                                        };
 | 
	
		
			
				|  |  | +                                        db.Default.Insertable(agvTask).SplitTable().ExecuteCommand();
 | 
	
		
			
				|  |  | +                                        task.AgvTaskID = agvTask.ID;
 | 
	
		
			
				|  |  | +                                    }
 | 
	
		
			
				|  |  | +                                    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;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                if (agvTasks.Count > 0)
 | 
	
		
			
				|  |  | -                {
 | 
	
		
			
				|  |  | -                    foreach (var agv in agvTasks)
 | 
	
		
			
				|  |  | -                    {
 | 
	
		
			
				|  |  | -                        //开始处理
 | 
	
		
			
				|  |  | -                        try
 | 
	
		
			
				|  |  | -                        {
 | 
	
		
			
				|  |  | -                            //获取对应wcs任务
 | 
	
		
			
				|  |  | -                            var wcs = db.Default.Queryable<WCS_TaskInfo>().Where(t => t.AgvTaskID == agv.ID && t.Status == Entity.TaskStatus.WaitingToExecute).First();
 | 
	
		
			
				|  |  | +                                case TaskType.TransferDepot:
 | 
	
		
			
				|  |  | +                                    break;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                            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();
 | 
	
		
			
				|  |  | +                                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 2:
 | 
	
		
			
				|  |  | -                                    var agvRes = IwmsApi.空轮回库(wcs.MatCode, wcs.SrmStation, wcs.IsSurplus, wcs.IsRework, agv.ID, wcs.BarCode);
 | 
	
		
			
				|  |  | -                                    agv.Status = AGVTaskStatus.Confirm;
 | 
	
		
			
				|  |  | -                                    agv.AgvID = agvRes.data;
 | 
	
		
			
				|  |  | -                                    db.Default.Updateable(agv).SplitTable().ExecuteCommand();
 | 
	
		
			
				|  |  | +                                case TaskType.EmptyInit:
 | 
	
		
			
				|  |  | +                                    //更新任务状态
 | 
	
		
			
				|  |  | +                                    task.Status = Entity.TaskStatus.WaitingToExecute;
 | 
	
		
			
				|  |  | +                                    db.Default.Updateable(task).ExecuteCommand();
 | 
	
		
			
				|  |  | +                                    task.AddWCS_TASK_DTL(db, task.Device, $"初始化任务信息");
 | 
	
		
			
				|  |  |                                      break;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                                  default:
 | 
	
		
			
				|  |  |                                      break;
 | 
	
		
			
				|  |  |                              }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                            //更新WCS数据
 | 
	
		
			
				|  |  | -                            wcs.Status = Entity.TaskStatus.AGVExecution;
 | 
	
		
			
				|  |  | -                            db.Default.Updateable(wcs).ExecuteCommand();
 | 
	
		
			
				|  |  | -                            wcs.AddWCS_TASK_DTL(db, wcs.Device, $"任务下发至AGV-AGV任务ID{agv.AgvID}");
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                        catch (Exception ex)
 | 
	
		
			
				|  |  | -                        {
 | 
	
		
			
				|  |  | -                            World.Log(ex.Message, Worlds.Logs.LogLevelEnum.Mid);
 | 
	
		
			
				|  |  | -                            continue;
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | +                        });
 | 
	
		
			
				|  |  | +                    });
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                catch (Exception ex)
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    World.Log(ex.Message, Worlds.Logs.LogLevelEnum.Mid);
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  | -            });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            #endregion 下发入库AGV任务
 | 
	
		
			
				|  |  | +                #endregion 处理所有的新增任务
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            #region 移动任务处理
 | 
	
		
			
				|  |  | +                #region 下发入库AGV任务
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            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();
 | 
	
		
			
				|  |  | +                    var agvTasks = db.Default.Queryable<WCS_AgvTaskInfo>().Where(t => t.Status == AGVTaskStatus.NewBuild && t.TaskType == AGVTaskType.EnterDepot).SplitTable(v => v.Take(2)).ToList();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                      if (agvTasks.Count > 0)
 | 
	
		
			
				|  |  |                      {
 | 
	
		
			
				|  |  |                          foreach (var agv in agvTasks)
 | 
	
		
			
				|  |  |                          {
 | 
	
		
			
				|  |  |                              //开始处理
 | 
	
		
			
				|  |  | -                            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.机台补空(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:
 | 
	
		
			
				|  |  | +                                        var agvRes = IwmsApi.空轮回库(wcs.MatCode, wcs.SrmStation, wcs.IsSurplus, wcs.IsRework, agv.ID, wcs.BarCode);
 | 
	
		
			
				|  |  | +                                        agv.Status = AGVTaskStatus.Confirm;
 | 
	
		
			
				|  |  | +                                        agv.AgvID = agvRes.data;
 | 
	
		
			
				|  |  | +                                        db.Default.Updateable(agv).SplitTable().ExecuteCommand();
 | 
	
		
			
				|  |  | +                                        break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                                    default:
 | 
	
		
			
				|  |  | +                                        break;
 | 
	
		
			
				|  |  | +                                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                                //更新WCS数据
 | 
	
		
			
				|  |  |                                  wcs.Status = Entity.TaskStatus.AGVExecution;
 | 
	
		
			
				|  |  |                                  db.Default.Updateable(wcs).ExecuteCommand();
 | 
	
		
			
				|  |  | -                                wcs.AddWCS_TASK_DTL(db, wcs.Device, $"任务下发至AGV,AGV任务号:{res.data}");
 | 
	
		
			
				|  |  | +                                wcs.AddWCS_TASK_DTL(db, wcs.Device, $"任务下发至AGV-AGV任务ID{agv.AgvID}");
 | 
	
		
			
				|  |  |                              }
 | 
	
		
			
				|  |  |                              catch (Exception ex)
 | 
	
		
			
				|  |  |                              {
 | 
	
	
		
			
				|  | @@ -214,10 +185,54 @@ namespace WCS.WorkEngineering.Systems
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  });
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            catch { }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            #endregion 移动任务处理
 | 
	
		
			
				|  |  | +                #endregion 下发入库AGV任务
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                #region 移动任务处理
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                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();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        if (agvTasks.Count > 0)
 | 
	
		
			
				|  |  | +                        {
 | 
	
		
			
				|  |  | +                            foreach (var agv in agvTasks)
 | 
	
		
			
				|  |  | +                            {
 | 
	
		
			
				|  |  | +                                //开始处理
 | 
	
		
			
				|  |  | +                                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.机台补空(agv.Station, Guid.NewGuid().ToString().Replace("-", ""), "1");
 | 
	
		
			
				|  |  | +                                    agv.Status = AGVTaskStatus.Confirm;
 | 
	
		
			
				|  |  | +                                    agv.AgvID = res.data;
 | 
	
		
			
				|  |  | +                                    db.Default.Updateable(agv).SplitTable().ExecuteCommand();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                                    wcs.Status = Entity.TaskStatus.AGVExecution;
 | 
	
		
			
				|  |  | +                                    db.Default.Updateable(wcs).ExecuteCommand();
 | 
	
		
			
				|  |  | +                                    wcs.AddWCS_TASK_DTL(db, wcs.Device, $"任务下发至AGV,AGV任务号:{res.data}");
 | 
	
		
			
				|  |  | +                                }
 | 
	
		
			
				|  |  | +                                catch (Exception ex)
 | 
	
		
			
				|  |  | +                                {
 | 
	
		
			
				|  |  | +                                    World.Log(ex.Message, Worlds.Logs.LogLevelEnum.Mid);
 | 
	
		
			
				|  |  | +                                    continue;
 | 
	
		
			
				|  |  | +                                }
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                    });
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                catch { }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                #endregion 移动任务处理
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            finally
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                RedisHub.Default.Del(key);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          public override bool Select(Device dev)
 |