333
schangxiang@126.com
2025-05-16 9796651f30deb9eee38c9d846255b293fbba15eb
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkPlanController.cs
@@ -1,188 +1,214 @@
using Ao.Lang;
using CMS.Extensions.Abp.AspNetCore.Mvc.Filters;
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;
namespace CMS.Plugin.PipeLineLems.Controller
{
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;
namespace CMS.Plugin.PipeLineLems.Controller
{
    /// <summary> 
    /// 作业计划表服务 
    /// </summary> 
    [ApiController]
    [TypeFilter(typeof(CMSLanguageFilter))]
    [TypeFilter(typeof(CMSUowActionFilter))]
    [TypeFilter(typeof(CMSAuditActionFilter))]
    [TypeFilter(typeof(CMSExceptionFilter))]
    [Route("api/v{version:apiVersion}/PipeLineLems/[controller]")]
    public class WorkPlanController : ControllerBase
    {
        private readonly IWorkPlanAppService _workPlanAppService;
    [ApiController]
    [TypeFilter(typeof(CMSLanguageFilter))]
    [TypeFilter(typeof(CMSUowActionFilter))]
    [TypeFilter(typeof(CMSAuditActionFilter))]
    [TypeFilter(typeof(CMSExceptionFilter))]
    [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="WorkPlanController"/> class. 
        /// </summary> 
        /// <param name="workPlanAppService">The workPlan application service.</param> 
        public WorkPlanController(IWorkPlanAppService workPlanAppService)
        {
            _workPlanAppService = workPlanAppService;
        }
        public WorkPlanController(IWorkPlanAppService workPlanAppService, ICurrentUser currentUser)
        {
            _workPlanAppService = workPlanAppService;
            _currentUser = currentUser;
        }
        /// <summary> 
        /// 获取作业计划表 
        /// </summary> 
        /// <param name="id">标识符.</param>
        /// <param name="id">主键ID</param>
        /// <returns></returns> 
        [HttpGet]
        [Route("{id}")]
        public virtual Task<WorkPlanDto> GetAsync(Guid id)
        {
            return _workPlanAppService.GetAsync(id);
        }
        [HttpGet]
        [Route("{id}")]
        public virtual Task<WorkPlanDto> GetAsync(Guid id)
        {
            return _workPlanAppService.GetAsync(id);
        }
        /// <summary> 
        /// 分页获取作业计划表的列表. 
        /// </summary> 
        /// <param name="input">输入.</param>
        /// <param name="input">查询参数</param>
        /// <returns></returns> 
        [HttpGet]
        [Route("Page")]
        public virtual Task<PagedResultDto<WorkPlanDto>> GetListAsync([FromQuery] GetWorkPlanInput input)
        {
            return _workPlanAppService.GetListAsync(input);
        }
        [HttpGet]
        [Route("Page")]
        public virtual Task<PagedResultDto<WorkPlanDto>> GetListAsync([FromQuery] GetWorkPlanInput input)
        {
            return _workPlanAppService.GetListAsync(input);
        }
        /// <summary> 
        /// 创建作业计划表 
        /// </summary> 
        /// <param name="input">输入.</param>
        /// <param name="input">创建参数</param>
        /// <returns></returns> 
        //[Authorize]
        [HttpPost]
        public virtual Task<WorkPlanDto> CreateAsync(WorkPlanCreateDto input)
        {
            return _workPlanAppService.CreateAsync(input);
        }
        [Authorize]
        [HttpPost]
        public virtual Task<WorkPlanDto> CreateAsync(WorkPlanCreateDto input)
        {
            input.CreatorName = _currentUser.UserAccount;//创建人
            return _workPlanAppService.CreateAsync(input);
        }
        /// <summary> 
        /// 更新作业计划表 
        /// </summary> 
        /// <param name="id">标识符.</param>
        /// <param name="input">输入.</param>
        /// <param name="id">主键ID</param>
        /// <param name="input">更新参数</param>
        /// <returns></returns> 
        //[Authorize]
        [HttpPut]
        [Route("{id}")]
        public virtual Task<WorkPlanDto> UpdateAsync(Guid id, WorkPlanUpdateDto input)
        {
            return _workPlanAppService.UpdateAsync(id, input);
        }
        [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>
        /// <param name="ids">Id集合</param>
        /// <returns></returns> 
        //[Authorize]
        [HttpPost]
        [Route("Clone")]
        public virtual Task<List<WorkPlanDto>> CloneAsync([FromBody] IEnumerable<Guid> ids)
        {
            return _workPlanAppService.CloneAsync(ids);
        }
        [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">标识符.</param>
        /// <param name="id">主键ID</param>
        /// <returns></returns> 
        //[Authorize]
        [HttpDelete]
        [Route("{id}")]
        public virtual Task DeleteAsync(Guid id)
        {
            return _workPlanAppService.DeleteAsync(id);
        }
        [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">The ids.</param>
        /// <param name="ids">主键ID集合</param>
        /// <returns></returns> 
        //[Authorize]
        [HttpDelete]
        public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids)
        {
            return _workPlanAppService.DeleteManyAsync(ids);
        }
        [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">标识符.</param>
        /// <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);
        }
        [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("请检查导入的表格");
            }
            await _workPlanAppService.ImportAsync(new WorkPlansImportModel
            {
                WorkPlans = workPlanRows,
            });
            return Ok();
        }
        [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" };
        }
    }
}
        [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" };
        }
    }
}