using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WIDESEA_DTO.Agv;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Enums;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_IBasicInfoRepository;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_Tasks;
namespace WIDESEAWCS_Server.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class PP_AGVController : ControllerBase
{
private readonly IStationMangerRepository _stationMangerRepository;
private readonly ITaskService _taskService;
private readonly ITaskRepository _taskRepository;
public PP_AGVController(IStationMangerRepository stationMangerRepository, ITaskService taskService, ITaskRepository taskRepository)
{
_stationMangerRepository = stationMangerRepository;
_taskService = taskService;
_taskRepository = taskRepository;
}
///
/// AGV任务更新/完成
///
///
///
[HttpPost, HttpGet, Route("AgvCallback"), AllowAnonymous]
public AgvResponseContent AgvUpdateTask([FromBody] AgvUpdateDTO agvUpdateModel)
{
AgvResponseContent agvResponseContent = new AgvResponseContent();
try
{
if (agvUpdateModel == null) throw new Exception("未获取到请求参数");
agvResponseContent.ReqCode = agvUpdateModel.ReqCode;
var task = _taskRepository.QueryFirst(x => agvUpdateModel.TaskCode == x.AgvTaskNum);
if (task == null && agvUpdateModel.Method != "begin") throw new Exception($"未找到任务,任务号【{agvUpdateModel.TaskCode}】");
switch (agvUpdateModel.Method)
{
case "start":
break;
case "begin":
break;
case "outbin"://出库根据这个信号判断取货完成
if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
{
task.TaskState = TaskStatusEnum.AGV_Finish.ObjToInt();
var up = _taskRepository.DeleteAndMoveIntoHty(task, OperateTypeEnum.自动完成);
_taskService.TaskCompleted(task.TaskNum);
agvResponseContent.Code = up ? "0" : "1";
agvResponseContent.Message = up ? "成功" : "失败";
return agvResponseContent;
}
break;
case "getSafetySignal"://安全信号申请
{
break;
}
case "end"://入库根据这个信号判断放货完成
if (task.TaskType != TaskTypeEnum.Outbound.ObjToInt())
{
task.TaskState = TaskStatusEnum.AGV_Finish.ObjToInt();
var up = _taskRepository.DeleteAndMoveIntoHty(task, OperateTypeEnum.自动完成);
_taskService.TaskCompleted(task.TaskNum);
agvResponseContent.Code = up ? "0" : "1";
agvResponseContent.Message = up ? "成功" : "失败";
return agvResponseContent;
}
break;
case "cancel":
task.TaskState = TaskStatusEnum.Cancel.ObjToInt();
_taskRepository.UpdateData(task);
break;
default:
throw new Exception($"未定义方法名【{agvUpdateModel.Method}】");
}
agvResponseContent.Code = "0";
agvResponseContent.Message = "成功";
}
catch (Exception ex)
{
agvResponseContent.Code = "1";
agvResponseContent.Message = ex.Message;
}
return agvResponseContent;
//return _taskService.AgvUpdateTask(agvUpdateModel);
}
}
}