using Ao.Lang;
using CMS.Extensions.Abp.AspNetCore.Mvc.Filters;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsTask;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using MiniExcelLibs;
using System.Reflection;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Controller
{
///
/// Wms任务管理服务
///
[ApiController]
[TypeFilter(typeof(CMSLanguageFilter))]
[TypeFilter(typeof(CMSUowActionFilter))]
[TypeFilter(typeof(CMSAuditActionFilter))]
[TypeFilter(typeof(CMSExceptionFilter))]
[Route("api/v{version:apiVersion}/HIAWms/[controller]")]
public class WmsTaskController : ControllerBase
{
private readonly IWmsTaskAppService _wmsTaskAppService;
///
/// Initializes a new instance of the class.
///
/// The wmsTask application service.
public WmsTaskController(IWmsTaskAppService wmsTaskAppService)
{
_wmsTaskAppService = wmsTaskAppService;
}
///
/// 获取Wms任务管理
///
/// 标识符.
///
[HttpGet]
[Route("{id}")]
public virtual Task GetAsync(Guid id)
{
return _wmsTaskAppService.GetAsync(id);
}
///
/// 分页获取Wms任务管理的列表.
///
/// 输入.
///
[HttpGet]
[Route("Page")]
public virtual Task> GetListAsync([FromQuery] GetWmsTaskInput input)
{
return _wmsTaskAppService.GetListAsync(input);
}
///
/// 创建Wms任务管理
///
/// 输入.
///
[Authorize]
[HttpPost]
public virtual Task CreateAsync(WmsTaskCreateDto input)
{
return _wmsTaskAppService.CreateAsync(input);
}
///
/// 更新Wms任务管理
///
/// 标识符.
/// 输入.
///
[Authorize]
[HttpPut]
[Route("{id}")]
public virtual Task UpdateAsync(Guid id, WmsTaskUpdateDto input)
{
return _wmsTaskAppService.UpdateAsync(id, input);
}
///
/// 克隆Wms任务管理
///
/// Id集合.
///
[Authorize]
[HttpPost]
[Route("Clone")]
public virtual Task> CloneAsync([FromBody] IEnumerable ids)
{
return _wmsTaskAppService.CloneAsync(ids);
}
///
/// 删除Wms任务管理
///
/// 标识符.
///
[Authorize]
[HttpDelete]
[Route("{id}")]
public virtual Task DeleteAsync(Guid id)
{
return _wmsTaskAppService.DeleteAsync(id);
}
///
/// 批量删除Wms任务管理
///
/// The ids.
///
[Authorize]
[HttpDelete]
public virtual Task DeleteAsync([FromBody] IEnumerable ids)
{
return _wmsTaskAppService.DeleteManyAsync(ids);
}
///
/// 调整排序Wms任务管理
///
/// 标识符.
///
[HttpPut]
[Route("{id}/AdjustSort/{sort}")]
public virtual Task AdjustSortAsync(Guid id, int sort)
{
return _wmsTaskAppService.AdjustSortAsync(id, sort);
}
///
/// 导入Wms任务管理
///
///
[Authorize]
[HttpPost]
[Route("Import")]
public virtual async Task ImportAsync(IFormFile file)
{
using var stream = new MemoryStream();
await file.CopyToAsync(stream);
stream.Seek(0L, SeekOrigin.Begin);
var sheetNames = stream.GetSheetNames();
var wmsTaskRows = sheetNames.Contains("配置") ? MiniExcel.Query(stream, sheetName: "配置").ToList() : new();
if (!wmsTaskRows.Any())
{
throw new UserFriendlyException("请检查导入的表格");
}
await _wmsTaskAppService.ImportAsync(new WmsTasksImportModel
{
WmsTasks = wmsTaskRows,
});
return Ok();
}
///
/// 导出Wms任务管理
///
///
[HttpGet]
[Route("Export")]
public virtual async Task ExportAsync([FromQuery] GetWmsTaskInput input)
{
input.MaxResultCount = int.MaxValue;
var exportData = await _wmsTaskAppService.ExportAsync(input);
var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Resources/Templates/WmsTask导出模板.xlsx");
if (!System.IO.File.Exists(templatePath))
{
templatePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty, $"Resources/Templates/WmsTask导出模板.xlsx");
}
var memoryStream = new MemoryStream();
await memoryStream.SaveAsByTemplateAsync(templatePath, exportData.Sheets);
memoryStream.Seek(0L, SeekOrigin.Begin);
return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = $"{exportData.FileName}_{DateTime.Now:yyyyMMddhhmmss}.xlsx" };
}
///
/// 强制完成任务
///
///
///
[HttpPost]
[Route("FinishTask")]
public async Task FinishTaskAsync(WmsTaskStatusDto input)
{
return await _wmsTaskAppService.FinishTaskAsync(input);
}
///
/// 取消任务
///
///
///
[HttpPost]
[Route("CancelTask")]
public async Task CancelTaskAsync(WmsTaskStatusDto input)
{
await _wmsTaskAppService.CancelTaskAysnc(input);
}
///
/// 修改任务目标库位
///
///
///
[HttpPost]
[Route("ChangeTaskToPlace")]
public async Task ChangeTaskToPlaceAsync(ChangeTaskToPlaceInput input)
{
await _wmsTaskAppService.ChangeTaskToPlaceAsync(input);
}
///
/// 获取需要执行的堆垛机任务
///
///
///
[HttpPost]
[Route("GetExecuteTask")]
public async Task GetToExecuteTaskAsync(QueryTaskTypeInput input)
{
return await _wmsTaskAppService.GetToExecuteTaskAsync(input);
}
///
/// 更新任务为执行中
///
///
///
[HttpPost]
[Route("ToExecuteTask")]
public async Task StartExecuteTaskAsync(ExcecuteTaskInput input)
{
return await _wmsTaskAppService.StartExecuteTaskAsync(input);
}
}
}