148 lines
5.2 KiB
C#
148 lines
5.2 KiB
C#
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]")]
|
||
|
|
/// <summary>
|
||
|
|
/// 提供 AGV 任务查询和报警处理相关的 HTTP 接口。
|
||
|
|
/// </summary>
|
||
|
|
public class AgvTaskController : ControllerBase
|
||
|
|
{
|
||
|
|
private IAGVTaskService _agvTaskService;
|
||
|
|
private IRcsCallBackService _rcsCallBackService;
|
||
|
|
/// <summary>创建 AGV 任务控制器。</summary>
|
||
|
|
/// <param name="agvTaskService">AGV 任务查询服务。</param>
|
||
|
|
/// <param name="rcsCallBackService">RCS 回调及报警处理服务。</param>
|
||
|
|
public AgvTaskController(
|
||
|
|
IAGVTaskService agvTaskService,
|
||
|
|
IRcsCallBackService rcsCallBackService)
|
||
|
|
{
|
||
|
|
_agvTaskService = agvTaskService;
|
||
|
|
_rcsCallBackService = rcsCallBackService;
|
||
|
|
}
|
||
|
|
|
||
|
|
[HttpGet]
|
||
|
|
/// <summary>
|
||
|
|
/// 查询指定条件下最近创建的 AGV 任务。
|
||
|
|
/// </summary>
|
||
|
|
/// <returns>按创建时间倒序返回 AGV 任务列表。</returns>
|
||
|
|
public async Task<ApiResult<List<AGVTaskDto>>> GetAll()
|
||
|
|
{
|
||
|
|
List<AGVTaskDto> agvTaska = await _agvTaskService.GetListByExpression(p =>
|
||
|
|
p.Floor == 10 && p.TaskType == 2,
|
||
|
|
nameof(AGVTaskDto.CreationTime),
|
||
|
|
OrderByType.Desc);
|
||
|
|
|
||
|
|
return new ApiResult<List<AGVTaskDto>>
|
||
|
|
{
|
||
|
|
ResultCode = "200",
|
||
|
|
Data = agvTaska
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
[HttpPost]
|
||
|
|
/// <summary>查询指定 ERP 任务关联的 AGV 任务。</summary>
|
||
|
|
/// <param name="erpTaskId">ERP 任务标识。</param>
|
||
|
|
/// <returns>按创建时间升序返回关联任务。</returns>
|
||
|
|
public async Task<ApiResult<List<AGVTaskDto>>> GetAgvTasksRelatedToErpTask(Guid erpTaskId)
|
||
|
|
{
|
||
|
|
List<AGVTaskDto> agvTaska = await _agvTaskService.GetListByExpression(p =>
|
||
|
|
p.ErpTaskId == erpTaskId,nameof(AGVTaskDto.CreationTime),OrderByType.Asc);
|
||
|
|
|
||
|
|
return new ApiResult<List<AGVTaskDto>>
|
||
|
|
{
|
||
|
|
ResultCode = "200",
|
||
|
|
Data = agvTaska
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// 获取所有agv小车报警信息
|
||
|
|
/// </summary>
|
||
|
|
/// <returns></returns>
|
||
|
|
[HttpGet]
|
||
|
|
public ApiResult<List<AgvTaskFailedAlarmInfo>> GetAlarmInfoes()
|
||
|
|
{
|
||
|
|
//return new ApiResult<List<AgvTaskFailedAlarmInfo>>
|
||
|
|
//{
|
||
|
|
// ResultCode="200",
|
||
|
|
// Data =
|
||
|
|
// [
|
||
|
|
// new AgvTaskFailedAlarmInfo{ AgvTaskId=Guid.NewGuid(),Operation="请把把托盘放到提升机入库口1"},
|
||
|
|
// new AgvTaskFailedAlarmInfo{AgvTaskId=Guid.NewGuid(),Operation="请把把托盘放到提升机入库口2" }
|
||
|
|
// ]
|
||
|
|
//};
|
||
|
|
|
||
|
|
return new ApiResult<List<AgvTaskFailedAlarmInfo>>
|
||
|
|
{
|
||
|
|
ResultCode = "200",
|
||
|
|
Data = GlobalAgvTaskFailedAlarmInfo.GetAlarmInfoes()
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// 上传报警处理结果
|
||
|
|
/// </summary>
|
||
|
|
/// <param name="agvTaskId"></param>
|
||
|
|
/// <returns></returns>
|
||
|
|
[HttpPost]
|
||
|
|
public async Task<ApiResult<bool>> PostAlarmHandleResult(Guid agvTaskId)
|
||
|
|
{
|
||
|
|
LogHelper.Warn($"PDA上传报警处理,AgvTaskId {agvTaskId}");
|
||
|
|
|
||
|
|
bool bRet = await _rcsCallBackService.DealWithAlarmHandleResult(agvTaskId);
|
||
|
|
|
||
|
|
return new ApiResult<bool> { ResultCode = bRet ? "200" : "500", Data = bRet };
|
||
|
|
}
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// 获取搬运物料的AgvTask
|
||
|
|
/// </summary>
|
||
|
|
/// <returns></returns>
|
||
|
|
[HttpGet]
|
||
|
|
public async Task<ApiResult<List<AGVTaskDto>>> GetCarryAgvTask()
|
||
|
|
{
|
||
|
|
List<AGVTaskDto> agvTaska = await _agvTaskService.GetListByExpression(p =>
|
||
|
|
p.TaskType == 6 && p.CreationTime >= DateTime.Now.AddHours(-4),
|
||
|
|
nameof(AGVTaskDto.CreationTime),
|
||
|
|
OrderByType.Desc);
|
||
|
|
|
||
|
|
return new ApiResult<List<AGVTaskDto>>
|
||
|
|
{
|
||
|
|
ResultCode = "200",
|
||
|
|
Data = agvTaska
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// 判断是否重复入库(30分钟内同一库位存在入库任务,则弹窗提示二次确认)
|
||
|
|
/// </summary>
|
||
|
|
/// <returns></returns>
|
||
|
|
[HttpPost]
|
||
|
|
public async Task<ApiResult<bool>> 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<bool>
|
||
|
|
{
|
||
|
|
ResultCode="200",
|
||
|
|
Data=exist
|
||
|
|
};
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|