using Ao.Lang; 
using CMS.Extensions.Abp.AspNetCore.Mvc.Filters; 
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockRecord; 
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 
{ 
    ///  
    /// 出入库记录表服务 
    ///  
    [ApiController] 
    [TypeFilter(typeof(CMSLanguageFilter))] 
    [TypeFilter(typeof(CMSUowActionFilter))] 
    [TypeFilter(typeof(CMSAuditActionFilter))] 
    [TypeFilter(typeof(CMSExceptionFilter))] 
    [Route("api/v{version:apiVersion}/HIAWms/[controller]")] 
    public class WmsInOutStockRecordController : ControllerBase 
    { 
        private readonly IWmsInOutStockRecordAppService _wmsInOutStockRecordAppService; 
 
        ///  
        /// Initializes a new instance of the  class. 
        ///  
        /// The wmsInOutStockRecord application service. 
        public WmsInOutStockRecordController(IWmsInOutStockRecordAppService wmsInOutStockRecordAppService) 
        { 
            _wmsInOutStockRecordAppService = wmsInOutStockRecordAppService; 
        } 
 
        ///  
        /// 获取出入库记录表 
        ///  
        /// 标识符. 
        ///  
        [HttpGet] 
        [Route("{id}")] 
        public virtual Task GetAsync(Guid id) 
        { 
            return _wmsInOutStockRecordAppService.GetAsync(id); 
        } 
 
        ///  
        /// 分页获取出入库记录表的列表. 
        ///  
        /// 输入. 
        ///  
        [HttpGet] 
        [Route("Page")] 
        public virtual Task> GetListAsync([FromQuery] GetWmsInOutStockRecordInput input) 
        { 
            return _wmsInOutStockRecordAppService.GetListAsync(input); 
        } 
 
        ///  
        /// 创建出入库记录表 
        ///  
        /// 输入. 
        ///  
        //[Authorize] 
        [HttpPost] 
        public virtual Task CreateAsync(WmsInOutStockRecordCreateDto input) 
        { 
            return _wmsInOutStockRecordAppService.CreateAsync(input); 
        } 
 
        ///  
        /// 更新出入库记录表 
        ///  
        /// 标识符. 
        /// 输入. 
        ///  
        //[Authorize] 
        [HttpPut] 
        [Route("{id}")] 
        public virtual Task UpdateAsync(Guid id, WmsInOutStockRecordUpdateDto input) 
        { 
            return _wmsInOutStockRecordAppService.UpdateAsync(id, input); 
        } 
 
        ///  
        /// 克隆出入库记录表 
        ///  
        /// Id集合. 
        ///  
        //[Authorize] 
        [HttpPost] 
        [Route("Clone")] 
        public virtual Task> CloneAsync([FromBody] IEnumerable ids) 
        { 
            return _wmsInOutStockRecordAppService.CloneAsync(ids); 
        } 
 
        ///  
        /// 删除出入库记录表 
        ///  
        /// 标识符. 
        ///  
        //[Authorize] 
        [HttpDelete] 
        [Route("{id}")] 
        public virtual Task DeleteAsync(Guid id) 
        { 
            return _wmsInOutStockRecordAppService.DeleteAsync(id); 
        } 
 
        ///  
        /// 批量删除出入库记录表 
        ///  
        /// The ids. 
        ///  
        //[Authorize] 
        [HttpDelete] 
        public virtual Task DeleteAsync([FromBody] IEnumerable ids) 
        { 
            return _wmsInOutStockRecordAppService.DeleteManyAsync(ids); 
        } 
 
        ///  
        /// 调整排序出入库记录表 
        ///  
        /// 标识符. 
        ///  
        [HttpPut] 
        [Route("{id}/AdjustSort/{sort}")] 
        public virtual Task AdjustSortAsync(Guid id, int sort) 
        { 
            return _wmsInOutStockRecordAppService.AdjustSortAsync(id, sort); 
        } 
 
        ///  
        /// 导入出入库记录表 
        ///  
        ///  
        [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 wmsInOutStockRecordRows = sheetNames.Contains("配置") ? MiniExcel.Query(stream, sheetName: "配置").ToList() : new(); 
 
            if (!wmsInOutStockRecordRows.Any()) 
            { 
                throw new UserFriendlyException("请检查导入的表格"); 
            } 
 
            await _wmsInOutStockRecordAppService.ImportAsync(new WmsInOutStockRecordsImportModel 
            { 
                WmsInOutStockRecords = wmsInOutStockRecordRows, 
            }); 
 
            return Ok(); 
        } 
 
        ///  
        /// 导出出入库记录表 
        ///  
        ///  
        [HttpGet] 
        [Route("Export")] 
        public virtual async Task ExportAsync([FromQuery] GetWmsInOutStockRecordInput input) 
        { 
            input.MaxResultCount = int.MaxValue; 
            var exportData = await _wmsInOutStockRecordAppService.ExportAsync(input); 
            var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Resources/Templates/WmsInOutStockRecord导出模板.xlsx"); 
            if (!System.IO.File.Exists(templatePath)) 
            { 
                templatePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty, $"Resources/Templates/WmsInOutStockRecord导出模板.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" }; 
        } 
    } 
}