| | |
| | | using Ao.Lang; |
| | | using CMS.Extensions.Abp.AspNetCore.Mvc.Filters; |
| | | using CMS.Framework.AspNetCore.Users; |
| | | using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkPlan; |
| | | using CMS.Plugin.PipeLineLems.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; |
| | | using CmsQueryExtensions.Entitys; |
| | | using CMS.Plugin.PipeLineLems.Domain.WorkPlan; |
| | | using System.Linq.Expressions; |
| | | |
| | | namespace CMS.Plugin.PipeLineLems.Controller |
| | | { |
| | | /// <summary> |
| | | /// 作业计划服务 |
| | | /// </summary> |
| | | /// <summary> |
| | | /// 作业计划表服务 |
| | | /// </summary> |
| | | [ApiController] |
| | | [TypeFilter(typeof(CMSLanguageFilter))] |
| | | [TypeFilter(typeof(CMSUowActionFilter))] |
| | |
| | | [Route("api/v{version:apiVersion}/PipeLineLems/[controller]")] |
| | | public class WorkPlanController : ControllerBase |
| | | { |
| | | private readonly IWorkPlanAppService _workPlanAppService; |
| | | private readonly ICurrentUser _currentUser; |
| | | |
| | | |
| | | /// <summary> |
| | | /// Initializes a new instance of the <see cref="TestEntityNameController"/> class. |
| | | /// </summary> |
| | | /// <param name="testentitynameAppService">The testentityname application service.</param> |
| | | public WorkPlanController() |
| | | /// <summary> |
| | | /// Initializes a new instance of the <see cref="WorkPlanController"/> class. |
| | | /// </summary> |
| | | /// <param name="workPlanAppService">The workPlan application service.</param> |
| | | public WorkPlanController(IWorkPlanAppService workPlanAppService, ICurrentUser currentUser) |
| | | { |
| | | |
| | | _workPlanAppService = workPlanAppService; |
| | | _currentUser = currentUser; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取生产计划. |
| | | /// </summary> |
| | | /// <param name="input">标识符.</param> |
| | | /// <returns></returns> |
| | | /// <summary> |
| | | /// 获取作业计划表 |
| | | /// </summary> |
| | | /// <param name="id">主键ID</param> |
| | | /// <returns></returns> |
| | | [HttpGet] |
| | | public virtual Task GetWorkPlanAsync([FromQuery] List<WorkPlanInput> input) |
| | | [Route("{id}")] |
| | | public virtual Task<WorkPlanDto> GetAsync(Guid id) |
| | | { |
| | | // 内部业务逻辑暂时为空 |
| | | return null; |
| | | return _workPlanAppService.GetAsync(id); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 分页获取作业计划表的列表. |
| | | /// </summary> |
| | | /// <param name="input">查询参数</param> |
| | | /// <returns></returns> |
| | | [HttpGet] |
| | | [Route("Page")] |
| | | public virtual Task<PagedResultDto<WorkPlanDto>> GetListAsync([FromQuery] GetWorkPlanInput input) |
| | | { |
| | | return _workPlanAppService.GetListAsync(input); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据条件获取作业计划表列表 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | [Route("FindListByFilter")] |
| | | public virtual async Task<List<WorkPlanDto>> FindListByFilterAsync(GetWorkPlanInput input) |
| | | { |
| | | return await _workPlanAppService.FindListByFilterAsync(input); |
| | | } |
| | | /// <summary> |
| | | /// 根据条件获取单个作业计划表 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | [Route("FindSingleByFilter")] |
| | | public virtual async Task<WorkPlanDto> FindSingleByFilterAsync(GetWorkPlanInput input) |
| | | { |
| | | |
| | | return await _workPlanAppService.FindSingleByFilterAsync(input); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 创建作业计划表 |
| | | /// </summary> |
| | | /// <param name="input">创建参数</param> |
| | | /// <returns></returns> |
| | | [Authorize] |
| | | [HttpPost] |
| | | public virtual Task<WorkPlanDto> CreateAsync(WorkPlanCreateDto input) |
| | | { |
| | | input.CreatorName = _currentUser.UserAccount;//创建人 |
| | | return _workPlanAppService.CreateAsync(input); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 更新作业计划表 |
| | | /// </summary> |
| | | /// <param name="id">主键ID</param> |
| | | /// <param name="input">更新参数</param> |
| | | /// <returns></returns> |
| | | [Authorize] |
| | | [HttpPut] |
| | | [Route("{id}")] |
| | | public virtual Task<WorkPlanDto> UpdateAsync(Guid id, WorkPlanUpdateDto input) |
| | | { |
| | | input.LastModifierName = _currentUser.UserAccount;//修改人 |
| | | return _workPlanAppService.UpdateAsync(id, input); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 克隆作业计划表 |
| | | /// </summary> |
| | | /// <param name="ids">Id集合</param> |
| | | /// <returns></returns> |
| | | [Authorize] |
| | | [HttpPost] |
| | | [Route("Clone")] |
| | | public virtual Task<List<WorkPlanDto>> CloneAsync([FromBody] IEnumerable<Guid> ids) |
| | | { |
| | | MyCurrentUser myCurrentUser = new MyCurrentUser() |
| | | { |
| | | UserAccount = _currentUser.UserAccount, |
| | | UserId = _currentUser.UserId |
| | | }; |
| | | return _workPlanAppService.CloneAsync(ids); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 删除作业计划表 |
| | | /// </summary> |
| | | /// <param name="id">主键ID</param> |
| | | /// <returns></returns> |
| | | [Authorize] |
| | | [HttpDelete] |
| | | [Route("{id}")] |
| | | public virtual Task DeleteAsync(Guid id) |
| | | { |
| | | MyCurrentUser myCurrentUser = new MyCurrentUser() |
| | | { |
| | | UserAccount = _currentUser.UserAccount, |
| | | UserId = _currentUser.UserId |
| | | }; |
| | | return _workPlanAppService.DeleteAsync(id);//逻辑删除 |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 批量删除作业计划表 |
| | | /// </summary> |
| | | /// <param name="ids">主键ID集合</param> |
| | | /// <returns></returns> |
| | | [Authorize] |
| | | [HttpDelete] |
| | | public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids) |
| | | { |
| | | MyCurrentUser myCurrentUser = new MyCurrentUser() |
| | | { |
| | | UserAccount = _currentUser.UserAccount, |
| | | UserId = _currentUser.UserId |
| | | }; |
| | | return _workPlanAppService.DeleteManyAsync(ids);//逻辑删除 |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 调整排序作业计划表 |
| | | /// </summary> |
| | | /// <param name="id">主键ID</param> |
| | | /// <returns></returns> |
| | | [HttpPut] |
| | | [Route("{id}/AdjustSort/{sort}")] |
| | | public virtual Task AdjustSortAsync(Guid id, int sort) |
| | | { |
| | | return _workPlanAppService.AdjustSortAsync(id, sort); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 导入作业计划表 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | [Authorize] |
| | | [HttpPost] |
| | | [Route("Import")] |
| | | public virtual async Task<IActionResult> ImportAsync(IFormFile file) |
| | | { |
| | | using var stream = new MemoryStream(); |
| | | await file.CopyToAsync(stream); |
| | | stream.Seek(0L, SeekOrigin.Begin); |
| | | |
| | | var sheetNames = stream.GetSheetNames(); |
| | | var workPlanRows = sheetNames.Contains("配置") ? MiniExcel.Query<WorkPlansImportModel.WorkPlanImportModel>(stream, sheetName: "配置").ToList() : new(); |
| | | |
| | | if (!workPlanRows.Any()) |
| | | { |
| | | throw new UserFriendlyException("请检查导入的表格"); |
| | | } |
| | | |
| | | MyCurrentUser myCurrentUser = new MyCurrentUser() |
| | | { |
| | | UserAccount = _currentUser.UserAccount, |
| | | UserId = _currentUser.UserId |
| | | }; |
| | | await _workPlanAppService.ImportAsync(new WorkPlansImportModel |
| | | { |
| | | WorkPlans = workPlanRows, |
| | | }, myCurrentUser); |
| | | |
| | | return Ok(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 导出作业计划表 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | [HttpGet] |
| | | [Route("Export")] |
| | | public virtual async Task<IActionResult> ExportAsync([FromQuery] GetWorkPlanInput input) |
| | | { |
| | | input.MaxResultCount = int.MaxValue; |
| | | var exportData = await _workPlanAppService.ExportAsync(input); |
| | | var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Resources/Templates/WorkPlan导出模板.xlsx"); |
| | | if (!System.IO.File.Exists(templatePath)) |
| | | { |
| | | templatePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty, $"Resources/Templates/WorkPlan导出模板.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" }; |
| | | } |
| | | } |
| | | } |