using JSMachine.WMS.App.Dto; using JSMachine.WMS.App.Dto.Enum; using JSMachine.WMS.App.IService; using JSMachine.WMS.Business.RcsCallBack.IService; using JSMachine.WMS.Common.Dto.Business; using JSMachine.WMS.Infrastructure.Helper; using JSMachine.WMS.RPC.ErpRPC.Dto.Out; using Microsoft.AspNetCore.Mvc; using NLog.Web.LayoutRenderers; using NPOI.POIFS.Crypt.Agile; using SqlSugar; namespace JSMachine.WMS.WebHost.Controllers { [Route("api/[controller]/[action]")] /// /// 提供 AGV 任务查询和报警处理相关的 HTTP 接口。 /// public class AgvTaskController : ControllerBase { private IAGVTaskService _agvTaskService; private IRcsCallBackService _rcsCallBackService; /// 创建 AGV 任务控制器。 /// AGV 任务查询服务。 /// RCS 回调及报警处理服务。 public AgvTaskController( IAGVTaskService agvTaskService, IRcsCallBackService rcsCallBackService) { _agvTaskService = agvTaskService; _rcsCallBackService = rcsCallBackService; } [HttpGet] /// /// 查询指定条件下最近创建的 AGV 任务。 /// /// 按创建时间倒序返回 AGV 任务列表。 public async Task>> GetAll() { List agvTaska = await _agvTaskService.GetListByExpression(p => p.Floor == 10 && p.TaskType == 2, nameof(AGVTaskDto.CreationTime), OrderByType.Desc); return new ApiResult> { ResultCode = "200", Data = agvTaska }; } [HttpPost] /// 查询指定 ERP 任务关联的 AGV 任务。 /// ERP 任务标识。 /// 按创建时间升序返回关联任务。 public async Task>> GetAgvTasksRelatedToErpTask(Guid erpTaskId) { List agvTaska = await _agvTaskService.GetListByExpression(p => p.ErpTaskId == erpTaskId,nameof(AGVTaskDto.CreationTime),OrderByType.Asc); return new ApiResult> { ResultCode = "200", Data = agvTaska }; } /// /// 获取所有agv小车报警信息 /// /// [HttpGet] public ApiResult> GetAlarmInfoes() { //return new ApiResult> //{ // ResultCode="200", // Data = // [ // new AgvTaskFailedAlarmInfo{ AgvTaskId=Guid.NewGuid(),Operation="请把把托盘放到提升机入库口1"}, // new AgvTaskFailedAlarmInfo{AgvTaskId=Guid.NewGuid(),Operation="请把把托盘放到提升机入库口2" } // ] //}; return new ApiResult> { ResultCode = "200", Data = GlobalAgvTaskFailedAlarmInfo.GetAlarmInfoes() }; } /// /// 上传报警处理结果 /// /// /// [HttpPost] public async Task> PostAlarmHandleResult(Guid agvTaskId) { LogHelper.Warn($"PDA上传报警处理,AgvTaskId {agvTaskId}"); bool bRet = await _rcsCallBackService.DealWithAlarmHandleResult(agvTaskId); return new ApiResult { ResultCode = bRet ? "200" : "500", Data = bRet }; } /// /// 获取搬运物料的AgvTask /// /// [HttpGet] public async Task>> GetCarryAgvTask() { List agvTaska = await _agvTaskService.GetListByExpression(p => p.TaskType == 6 && p.CreationTime >= DateTime.Now.AddHours(-4), nameof(AGVTaskDto.CreationTime), OrderByType.Desc); return new ApiResult> { ResultCode = "200", Data = agvTaska }; } /// /// 判断是否重复入库(30分钟内同一库位存在入库任务,则弹窗提示二次确认) /// /// [HttpPost] public async Task> IsReStockIn(string wareHouse) { bool exist = await _agvTaskService.Exist(p => p.CreationTime >= DateTime.Now.AddMinutes(-30) && p.StartPositionCode == wareHouse && (p.TaskType == TaskTypeEnum.PdaIn || p.TaskType == TaskTypeEnum.TailIn) ); return new ApiResult { ResultCode="200", Data=exist }; } } }