|
@@ -1,9 +1,6 @@
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
-using Newtonsoft.Json;
|
|
|
-using ServiceCenter.Logs;
|
|
|
using ServiceCenter.Redis;
|
|
|
using ServiceCenter.SqlSugars;
|
|
|
-using WCS.Core;
|
|
|
using WCS.Entity;
|
|
|
using WCS.WorkEngineering.WebApi.Models.AGV;
|
|
|
using WCS.WorkEngineering.WebApi.Models.AGV.Request;
|
|
@@ -54,113 +51,6 @@ namespace WCS.WorkEngineering.WebApi.Controllers
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /// <summary>
|
|
|
- /// 背负式AGV请求出库任务
|
|
|
- /// </summary>
|
|
|
- /// <param name="reqDto">请求参数</param>
|
|
|
- /// <returns></returns>
|
|
|
- [HttpPost]
|
|
|
- public ApplyEmptySpoolResponse ApplyEmptySpool([FromBody] AgvFillEmptySpaceRequest reqDto)
|
|
|
- {
|
|
|
- var key = $"WCS:Lock:AGV:{nameof(ApplyEmptySpool)}";
|
|
|
- var agvFill = new ApplyEmptySpoolResponse();
|
|
|
- try
|
|
|
- {
|
|
|
- if (RedisHub.Default.Get(key) != null)
|
|
|
- {
|
|
|
- agvFill.ResCode = Models.WMS.Response.ResponseStatusCodeEnum.DataSaveErr;
|
|
|
- agvFill.ResMsg = $"[{nameof(ApplyEmptySpool)}]--触发并发管控";
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- RedisHub.Default.Set(key, nameof(ApplyEmptySpool));
|
|
|
- LogHub.InterfacePublish(nameof(ApplyEmptySpool), $"传入参数--{JsonConvert.SerializeObject(reqDto)}");
|
|
|
-
|
|
|
- try
|
|
|
- {
|
|
|
- agvFill.ResCode = Models.WMS.Response.ResponseStatusCodeEnum.DataSaveErr;
|
|
|
- if (!World.IsStart)
|
|
|
- {
|
|
|
- agvFill.ResCode = Models.WMS.Response.ResponseStatusCodeEnum.DataSaveErr;
|
|
|
- agvFill.ResMsg = "WCS初始化中";
|
|
|
- return agvFill;
|
|
|
- }
|
|
|
- //var obj = World.GetSystemInstance<GetDeviceSystem>().Invoke("输送机") as List<Station>;
|
|
|
-
|
|
|
- //// 检测三个站台是否有货
|
|
|
- //obj = obj.Where(v => v.Entity.Code is "1012" or "1014" or "1016").Where(v => v.Data3.Status.HasFlag(StationStatus.PH_Status)).ToList();
|
|
|
- //if (!obj.Any())
|
|
|
- //{
|
|
|
- // agvFill.ResCode = Models.WMS.Response.ResponseStatusCodeEnum.DataSaveErr;
|
|
|
- // agvFill.ResMsg = "无空轮";
|
|
|
- // return agvFill;
|
|
|
- //}
|
|
|
- SqlSugarHelper.Do(db =>
|
|
|
- {
|
|
|
- //var res = WmsApi.GetTunnelEmptyConCount();
|
|
|
-
|
|
|
- var agvStations = db.Default.Queryable<WCS_AgvTaskInfo>().SplitTable(tabs => tabs.Take(2))
|
|
|
- .Where(v => v.Status < AGVTaskStatus.Complete3 && v.TaskType == AGVTaskType.CallForMaterial).Select(v => v.Station).ToList();
|
|
|
- //obj = obj.Where(v => !agvStations.Contains(v.Entity.Code)).ToList();
|
|
|
- //if (!obj.Any())
|
|
|
- //{
|
|
|
- // agvFill.ResCode = Models.WMS.Response.ResponseStatusCodeEnum.DataSaveErr;
|
|
|
- // agvFill.ResMsg = "无可用取货站点";
|
|
|
- // return;
|
|
|
- //}
|
|
|
-
|
|
|
- //foreach (var item in res.ResDataList)
|
|
|
- //{
|
|
|
- // var station = Device.All.Where(v => v.Code == "TY" + item.Tunnel.ToString())
|
|
|
- // .Select(v => v.Targets).SelectMany(v => v)
|
|
|
- // .Where(v => v.HasProtocol(typeof(IStation520)))
|
|
|
- // .Where(v => v.Code is "1012" or "1014" or "1016")
|
|
|
- // .FirstOrDefault();
|
|
|
- // item.Tunnel = station.ToInt();
|
|
|
- //}
|
|
|
- //var stationNo = res.ResDataList.OrderBy(v => v.Count).Select(v => v.Tunnel.ToString()).ToList();
|
|
|
- //var dev = obj.MinBy(v => stationNo.IndexOf(v.Entity.Code));
|
|
|
- //var task = db.Default.Queryable<WCS_TaskInfo>().First(v => v.ID == dev.Data.TaskNumber) ?? throw new Exception("无有效任务");
|
|
|
- //var id = db.GetAGVTaskId();
|
|
|
- //var agv = new WCS_AgvTaskInfo()
|
|
|
- //{
|
|
|
- // ID = id,
|
|
|
- // AgvID = $"HJBK{id}{task.ID}",
|
|
|
- // TaskType = AGVTaskType.CallForMaterial,
|
|
|
- // Status = AGVTaskStatus.NewBuild,
|
|
|
- // Station = dev.Entity.Code,
|
|
|
- // AddWho = "WCS"
|
|
|
- //};
|
|
|
- ////创建对应的AGV任务
|
|
|
- //db.Default.Insertable(agv).SplitTable().ExecuteCommand();
|
|
|
-
|
|
|
- //task.AgvTaskID = agv.ID;
|
|
|
- //task.Status = Entity.TaskStatus.AGVExecution;
|
|
|
- //db.Default.Updateable(task).ExecuteCommand();
|
|
|
- //task.AddWCS_TASK_DTL(db, dev.Entity.Code, "AGV", "agv执行中");
|
|
|
-
|
|
|
- //agvFill.LocCode = dev.Entity.Code;
|
|
|
- //agvFill.SpoolType = "4";
|
|
|
- //agvFill.ResMsg = "";
|
|
|
- //agvFill.ResCode = Models.WMS.Response.ResponseStatusCodeEnum.Sucess;
|
|
|
- //agvFill.TaskCode = agv.AgvID;
|
|
|
- });
|
|
|
- }
|
|
|
- catch (Exception ex)
|
|
|
- {
|
|
|
- agvFill.ResCode = Models.WMS.Response.ResponseStatusCodeEnum.DataSaveErr;
|
|
|
- agvFill.ResMsg = ex.Message;
|
|
|
- }
|
|
|
- LogHub.InterfacePublish(nameof(ApplyEmptySpool), $"返回参数{JsonConvert.SerializeObject(agvFill)}");
|
|
|
- }
|
|
|
- }
|
|
|
- finally
|
|
|
- {
|
|
|
- RedisHub.Default.Del(key);
|
|
|
- }
|
|
|
- return agvFill;
|
|
|
- }
|
|
|
-
|
|
|
/// <summary>
|
|
|
/// AGV执行回调
|
|
|
/// </summary>
|
|
@@ -174,67 +64,62 @@ namespace WCS.WorkEngineering.WebApi.Controllers
|
|
|
|
|
|
try
|
|
|
{
|
|
|
- if (RedisHub.Default.Exists(key))
|
|
|
- {
|
|
|
- res.code = AgvResponseCode.Error;
|
|
|
- res.message = $"[{nameof(AgvCallback)}]--触发并发管控";
|
|
|
- return res;
|
|
|
- }
|
|
|
- RedisHub.Default.Expire(key, 60);
|
|
|
-
|
|
|
- SqlSugarHelper.Do(db =>
|
|
|
+ RedisHub.Do(key, redis =>
|
|
|
{
|
|
|
- //跟据AGVid找到对应的AGV任务
|
|
|
- var agvTask = db.Default.Queryable<WCS_AgvTaskInfo>().SplitTable(tabs => tabs.Take(2))
|
|
|
- .First(v => v.AgvID == reqDto.taskCode && v.Status < AGVTaskStatus.MissionCompleted);
|
|
|
- if (agvTask == null)
|
|
|
- {
|
|
|
- res.code = AgvResponseCode.Fail;
|
|
|
- res.message = "未找到对应的AGV任务";
|
|
|
- return;
|
|
|
- }
|
|
|
- switch (reqDto.method)
|
|
|
+ SqlSugarHelper.Do(db =>
|
|
|
{
|
|
|
- case "applyContinue": //表示请求巷道
|
|
|
- agvTask.AgvStatus = AGVTaskStatus.RequestOrPermission1;
|
|
|
- break;
|
|
|
+ //跟据AGVid找到对应的AGV任务
|
|
|
+ var agvTask = db.Default.Queryable<WCS_AgvTaskInfo>().SplitTable(tabs => tabs.Take(2))
|
|
|
+ .First(v => v.AgvID == reqDto.taskCode && v.Status < AGVTaskStatus.MissionCompleted);
|
|
|
+ if (agvTask == null)
|
|
|
+ {
|
|
|
+ res.code = AgvResponseCode.Fail;
|
|
|
+ res.message = "未找到对应的AGV任务";
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ switch (reqDto.method)
|
|
|
+ {
|
|
|
+ case "applyContinue": //表示请求巷道
|
|
|
+ agvTask.AgvStatus = AGVTaskStatus.RequestOrPermission1;
|
|
|
+ break;
|
|
|
|
|
|
- case "applySecurity": //表示请求放货或取货
|
|
|
- agvTask.AgvStatus = AGVTaskStatus.RequestOrPermission2;
|
|
|
- break;
|
|
|
+ case "applySecurity": //表示请求放货或取货
|
|
|
+ agvTask.AgvStatus = AGVTaskStatus.RequestOrPermission2;
|
|
|
+ break;
|
|
|
|
|
|
- case "hjend_2": //补空任务完成
|
|
|
- agvTask.AgvStatus = AGVTaskStatus.MissionCompleted;
|
|
|
- break;
|
|
|
+ case "hjend_2": //补空任务完成
|
|
|
+ agvTask.AgvStatus = AGVTaskStatus.MissionCompleted;
|
|
|
+ break;
|
|
|
|
|
|
- case "endhjBM": //取满任务完成
|
|
|
- agvTask.AgvStatus = AGVTaskStatus.MissionCompleted;
|
|
|
- break;
|
|
|
+ case "endhjBM": //取满任务完成
|
|
|
+ agvTask.AgvStatus = AGVTaskStatus.MissionCompleted;
|
|
|
+ break;
|
|
|
|
|
|
- case "end": //二楼出满任务完成
|
|
|
- agvTask.AgvStatus = AGVTaskStatus.MissionCompleted;
|
|
|
- break;
|
|
|
+ case "end": //二楼出满任务完成
|
|
|
+ agvTask.AgvStatus = AGVTaskStatus.MissionCompleted;
|
|
|
+ break;
|
|
|
|
|
|
- case "tcEnd": //机台补空任务完成
|
|
|
- agvTask.AgvStatus = AGVTaskStatus.MissionCompleted;
|
|
|
- break;
|
|
|
+ case "tcEnd": //机台补空任务完成
|
|
|
+ agvTask.AgvStatus = AGVTaskStatus.MissionCompleted;
|
|
|
+ break;
|
|
|
|
|
|
- case "exc_end": //异常信息上抛-值不匹配
|
|
|
- agvTask.AgvStatus = AGVTaskStatus.MissionCompleted;
|
|
|
- break;
|
|
|
+ case "exc_end": //异常信息上抛-值不匹配
|
|
|
+ agvTask.AgvStatus = AGVTaskStatus.MissionCompleted;
|
|
|
+ break;
|
|
|
|
|
|
- case "outbin": //小车退出取货位
|
|
|
- agvTask.AgvStatus = AGVTaskStatus.Complete3;
|
|
|
- break;
|
|
|
+ case "outbin": //小车退出取货位
|
|
|
+ agvTask.AgvStatus = AGVTaskStatus.LeaveGet;
|
|
|
+ break;
|
|
|
|
|
|
- case "cancel": //取消任务
|
|
|
- //agvTask.AgvStatus = AGVTaskStatus.Cancel;
|
|
|
- break;
|
|
|
- }
|
|
|
+ case "cancel": //取消任务
|
|
|
+ //agvTask.AgvStatus = AGVTaskStatus.Cancel;
|
|
|
+ break;
|
|
|
+ }
|
|
|
|
|
|
- db.Default.Updateable(agvTask).SplitTable().ExecuteCommand();
|
|
|
- res.code = AgvResponseCode.Success;
|
|
|
- res.message = "成功";
|
|
|
+ db.Default.Updateable(agvTask).SplitTable().ExecuteCommand();
|
|
|
+ res.code = AgvResponseCode.Success;
|
|
|
+ res.message = "成功";
|
|
|
+ });
|
|
|
});
|
|
|
}
|
|
|
catch (Exception ex)
|
|
@@ -242,10 +127,6 @@ namespace WCS.WorkEngineering.WebApi.Controllers
|
|
|
res.code = AgvResponseCode.Error;
|
|
|
res.message = ex.Message;
|
|
|
}
|
|
|
- finally
|
|
|
- {
|
|
|
- RedisHub.Default.Del(key);
|
|
|
- }
|
|
|
|
|
|
return res;
|
|
|
}
|