using Microsoft.AspNetCore.Mvc;
using NetTaste;
using Newtonsoft.Json;
using PlcSiemens.Core.Extension;
using ServiceCenter.Attributes;
using ServiceCenter.Logs;
using ServiceCenter.Redis;
using ServiceCenter.SqlSugars;
using WCS.Core;
using WCS.Entity;
using WCS.WorkEngineering.Extensions;
using WCS.WorkEngineering.Protocol.Station;
using WCS.WorkEngineering.Systems;
using WCS.WorkEngineering.WebApi.Models.AGV;
using WCS.WorkEngineering.WebApi.Models.AGV.Request;
using WCS.WorkEngineering.WebApi.Models.AGV.Response;
namespace WCS.WorkEngineering.WebApi.Controllers
{
///
/// AGV相关接口控制器
///
[ApiController]
[Route("api/[controller]/[action]")]
public class AgvController : ControllerBase
{
///
/// AGV任务下发
///
/// 任务类型
/// agv任务号
/// 起始位置
/// 目标位置
/// 下个位置
/// 容器编码
///
[HttpPost]
public string AgvDebug(int type, string code, string startPos,string endPos,string nextPos,string barCode)
{
try
{
switch (type)
{
case 1:
AgvApi.盘条入库(startPos,nextPos,endPos,barCode, code, "1");
break;
//case 2:
//AgvApi.机台补满();
//break;
case 3:
AgvApi.ContinueTask(code, nextPos);
break;
case 4:
AgvApi.搬运(barCode,startPos,endPos,code, "1");
break;
case 5:
AgvApi.搬运_wmsStart(barCode, startPos,endPos, code, "1");
break;
case 6:
AgvApi.出库搬运_wms(barCode, startPos, endPos, code, "1");
break;
default:
break;
}
return "成功";
}
catch (Exception ex)
{
return $"Error-----" +
$"{ex.Message}------" +
$"{ex.StackTrace}";
}
}
///
/// AGV执行回调
///
///
///
[HttpPost]
public AgvCallbackResponse AgvCallback([FromBody] AgvCallbackRequest reqDto)
{
var key = $"WCS:Lock:AGV:{nameof(AgvCallback)}";
var res = new AgvCallbackResponse() { code = AgvResponseCode.Fail, message = "失败" };
try
{
if (RedisHub.Default.Get(key) != null)
{
res.code = AgvResponseCode.Error;
res.message = $"[{nameof(AgvCallback)}]--触发并发管控";
}
else
{
RedisHub.Default.Set(key, nameof(AgvCallback));
WCS_TaskInfo taskInfo = null;
try
{
SqlSugarHelper.Do(db =>
{
//跟据AGVid找到对应的AGV任务
var agvTask = db.Default.Queryable().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任务";
}
else
{
switch (reqDto.method)
{
//case "start": //表示请求巷道
// agvTask.Status = AGVTaskStatus.RequestOrPermission1;
// break;
//case "end": //表示请求巷道
// agvTask.Status = AGVTaskStatus.RequestOrPermission1;
// break;
//入库任务、叫料任务、搬运任务
case "outbin": //入库小车取货后退出取货位
agvTask.AgvStatus = AGVTaskStatus.LeaveGet;
break;
case "applyContinue": //表示请求巷道
agvTask.AgvStatus = AGVTaskStatus.RequestOrPermission1;
break;
case "applyQuqGet": //表示请求取货
agvTask.AgvStatus = AGVTaskStatus.RequestOrPermission2;
break;
case "applyQuqPut": //表示请求放货
agvTask.AgvStatus = AGVTaskStatus.PutRequestOrPermission;
break;
case "finishIn": //入库任务完成
agvTask.AgvStatus = AGVTaskStatus.MissionCompleted;
break;
case "finishOut": //出库任务完成
agvTask.AgvStatus = AGVTaskStatus.MissionCompleted;
break;
case "finishMove": //搬运任务完成
agvTask.AgvStatus = AGVTaskStatus.MissionCompleted;
break;
case "tcEnd": //机台补空任务完成
agvTask.AgvStatus = AGVTaskStatus.MissionCompleted;
break;
case "exc_end": //异常信息上抛-值不匹配
agvTask.AgvStatus = AGVTaskStatus.MissionCompleted;
break;
case "cancel": //取消任务
//agvTask.AgvStatus = AGVTaskStatus.Cancel;
break;
default:
break;
}
db.Default.Updateable(agvTask).SplitTable().ExecuteCommand();
res.code = AgvResponseCode.Success;
res.message = "成功";
}
});
}
catch (Exception ex)
{
res.code = AgvResponseCode.Error;
res.message = ex.Message;
}
}
}
finally
{
RedisHub.Default.Del(key);
}
return res;
}
}
}