|
@@ -9,6 +9,13 @@ using XF.Domain.Exceptions;
|
|
|
using XF.Domain.Repository;
|
|
|
using Hotline.Caching.Interfaces;
|
|
|
using Microsoft.AspNetCore.Authorization;
|
|
|
+using DocumentFormat.OpenXml.Presentation;
|
|
|
+using Hotline.File;
|
|
|
+using NPOI.HPSF;
|
|
|
+using Hotline.Share.Requests;
|
|
|
+using SqlSugar;
|
|
|
+using Hotline.Tools;
|
|
|
+using Hotline.Share.Dtos.Order;
|
|
|
|
|
|
namespace Hotline.Api.Controllers
|
|
|
{
|
|
@@ -19,20 +26,24 @@ namespace Hotline.Api.Controllers
|
|
|
private readonly ISystemDicDataCacheManager _sysDicDataCacheManager;
|
|
|
private readonly IRepository<File.File> _fileRepository;
|
|
|
private readonly ILogger<FileController> _logger;
|
|
|
+ private readonly IRepository<UploadAudioFiles> _uploadAudioFilesRepository;
|
|
|
|
|
|
public FileController(
|
|
|
ISessionContext sessionContext,
|
|
|
IMapper mapper,
|
|
|
ISystemDicDataCacheManager sysDicDataCacheManager,
|
|
|
IRepository<File.File> fileRepository,
|
|
|
- ILogger<FileController> logger)
|
|
|
+ ILogger<FileController> logger,
|
|
|
+ IRepository<UploadAudioFiles> uploadAudioFilesRepository)
|
|
|
{
|
|
|
_sessionContext = sessionContext;
|
|
|
_mapper = mapper;
|
|
|
_sysDicDataCacheManager = sysDicDataCacheManager;
|
|
|
_fileRepository = fileRepository;
|
|
|
_logger = logger;
|
|
|
+ _uploadAudioFilesRepository = uploadAudioFilesRepository;
|
|
|
}
|
|
|
+
|
|
|
#region 附件管理
|
|
|
/// <summary>
|
|
|
/// 新增附件
|
|
@@ -148,11 +159,128 @@ namespace Hotline.Api.Controllers
|
|
|
[HttpGet("download-proxy")]
|
|
|
public async Task<IActionResult> DownloadProxy([FromServices] IHttpClientFactory clientFactory, string path)
|
|
|
{
|
|
|
- using var client = clientFactory.CreateClient();
|
|
|
- var responseMessage = await client.GetAsync(path, HttpContext.RequestAborted);
|
|
|
- responseMessage.EnsureSuccessStatusCode();
|
|
|
- var stream = await responseMessage.Content.ReadAsStreamAsync(HttpContext.RequestAborted);
|
|
|
- return File(stream, responseMessage?.Content?.Headers?.ContentType?.MediaType);
|
|
|
+ using var client = clientFactory.CreateClient();
|
|
|
+ var responseMessage = await client.GetAsync(path, HttpContext.RequestAborted);
|
|
|
+ responseMessage.EnsureSuccessStatusCode();
|
|
|
+ var stream = await responseMessage.Content.ReadAsStreamAsync(HttpContext.RequestAborted);
|
|
|
+ return File(stream, responseMessage?.Content?.Headers?.ContentType?.MediaType);
|
|
|
+ }
|
|
|
+
|
|
|
+ #region 录音上传
|
|
|
+ /// <summary>
|
|
|
+ /// 上传录音保存
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dtos"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("adduploadaudiofiles")]
|
|
|
+ public async Task<object> AddUploadAudioFiles([FromBody] List<FileDto> dtos)
|
|
|
+ {
|
|
|
+ if (dtos == null || dtos.Count == 0)
|
|
|
+ throw UserFriendlyException.SameMessage("请上传附件");
|
|
|
+ var successNum = 0;
|
|
|
+ var errorNum = 0;
|
|
|
+ foreach (var item in dtos)
|
|
|
+ {
|
|
|
+ var fileName = item.FileName;
|
|
|
+ string strSuffix = fileName.LastIndexOf(".") > 0 ? fileName.Substring(fileName.LastIndexOf(".") + 1) : "";
|
|
|
+ string strSubFileName = fileName.LastIndexOf(".") > 0 ? fileName.Substring(0, fileName.LastIndexOf(".")) : fileName;
|
|
|
+ UploadAudioFiles audioFiles = new UploadAudioFiles()
|
|
|
+ {
|
|
|
+ FileId = item.Additions,
|
|
|
+ FileName = item.FileName,
|
|
|
+ Name = strSubFileName,
|
|
|
+ Type = strSuffix,
|
|
|
+ Path = item.Path,
|
|
|
+ AllPath = item.AllPath
|
|
|
+ };
|
|
|
+ var id = await _uploadAudioFilesRepository.AddAsync(audioFiles, HttpContext.RequestAborted);
|
|
|
+ if (!string.IsNullOrEmpty(id))
|
|
|
+ successNum++;
|
|
|
+ else
|
|
|
+ errorNum++;
|
|
|
+
|
|
|
+ }
|
|
|
+ return new
|
|
|
+ {
|
|
|
+ successNum = successNum,
|
|
|
+ errorNum = errorNum
|
|
|
+ };
|
|
|
}
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 删除
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="Ids"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("deleteuploadaudiofiles")]
|
|
|
+ public async Task DeleteUploadAudioFiles([FromQuery] List<string> Ids)
|
|
|
+ {
|
|
|
+ if (Ids == null || Ids.Count == 0)
|
|
|
+ throw UserFriendlyException.SameMessage("请选择需要删除的数据");
|
|
|
+ foreach (var item in Ids)
|
|
|
+ {
|
|
|
+ await _uploadAudioFilesRepository.RemoveAsync(p => p.Id == item, true, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 查询列表
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("getaudiofileslist")]
|
|
|
+ public async Task<PagedDto<UploadAudioFilesRequestDto>> GetAudioFilesList([FromQuery] PagedKeywordRequest dto)
|
|
|
+ {
|
|
|
+ var (total, items) = await _uploadAudioFilesRepository.Queryable()
|
|
|
+ .Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Keyword), p => p.Name.Contains(dto.Keyword))
|
|
|
+ .OrderByIF(dto is { SortField: "creationTime", SortRule: 0 }, d => d.CreationTime, OrderByType.Asc) //创建时间升序
|
|
|
+ .OrderByIF(dto is { SortField: "creationTime", SortRule: 1 }, d => d.CreationTime, OrderByType.Desc) //创建时间降序
|
|
|
+ .ToPagedListAsync(dto, HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ return new PagedDto<UploadAudioFilesRequestDto>(total, _mapper.Map<IReadOnlyList<UploadAudioFilesRequestDto>>(items));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 查询列表导出
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("getaudiofileslist/export")]
|
|
|
+ public async Task<FileStreamResult> ExportGetAudioFilesList([FromQuery] ExportExcelDto<PagedKeywordRequest> dto)
|
|
|
+ {
|
|
|
+ var query = _uploadAudioFilesRepository.Queryable()
|
|
|
+ .Where(p => p.CreationTime >= dto.QueryDto.StartTime && p.CreationTime <= dto.QueryDto.EndTime)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.QueryDto.Keyword), p => p.Name.Contains(dto.QueryDto.Keyword))
|
|
|
+ .OrderByIF(dto.QueryDto is { SortField: "creationTime", SortRule: 0 }, d => d.CreationTime, OrderByType.Asc) //创建时间升序
|
|
|
+ .OrderByIF(dto.QueryDto is { SortField: "creationTime", SortRule: 1 }, d => d.CreationTime, OrderByType.Desc);//创建时间降序
|
|
|
+
|
|
|
+ List<UploadAudioFiles> lists;
|
|
|
+ if (dto.IsExportAll)
|
|
|
+ {
|
|
|
+ lists = await query.ToListAsync(HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
|
|
|
+ lists = items;
|
|
|
+ }
|
|
|
+
|
|
|
+ var listDtos = _mapper.Map<ICollection<UploadAudioFilesRequestDto>>(lists);
|
|
|
+
|
|
|
+ dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
|
|
|
+
|
|
|
+ var dtos = listDtos
|
|
|
+ .Select(stu => _mapper.Map(stu, typeof(UploadAudioFilesRequestDto), dynamicClass))
|
|
|
+ .Cast<object>()
|
|
|
+ .ToList();
|
|
|
+
|
|
|
+ var stream = ExcelHelper.CreateStream(dtos);
|
|
|
+
|
|
|
+ return ExcelStreamResult(stream, "录音上传数据导出");
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
}
|
|
|
}
|