Parcourir la source

自贡任务 228 【标书】新增【录音上传】功能

tangjiang il y a 4 mois
Parent
commit
0a7f49ae58

+ 134 - 6
src/Hotline.Api/Controllers/FileController.cs

@@ -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
     }
 }

+ 1 - 1
src/Hotline.Api/Controllers/WebPortalController.cs

@@ -841,7 +841,7 @@ namespace Hotline.Api.Controllers
                             FlowPurTypeName = p.AcceptTypeCode,
                             ConTypeName = p.HotspotName,
                             FlowAddDate = p.CreationTime,
-                            PubDate = p.CreationTime,
+                            PubDate = p.PubDate,
                             RSFlagName = p.State == "1" ? "办理完成" : "办理中"
                         });
 

+ 35 - 0
src/Hotline.Share/Dtos/File/UploadAudioFilesRequestDto.cs

@@ -0,0 +1,35 @@
+namespace Hotline.Share.Dtos.File
+{
+    public class UploadAudioFilesRequestDto
+    {
+        /// <summary>
+        /// 附件Id
+        /// </summary>
+        public string FileId { get; set; }
+
+        /// <summary>
+		/// 附件全称
+		/// </summary>
+        public string FileName { get; set; }
+
+        /// <summary>
+        /// 附件名称
+        /// </summary>
+        public string? Name { get; set; }
+
+        /// <summary>
+		/// 附件类型
+		/// </summary>
+        public string? Type { get; set; }
+
+        /// <summary>
+        /// 附件路径
+        /// </summary>
+        public string Path { get; set; }
+
+        /// <summary>
+        /// 完整附件路径
+        /// </summary>
+        public string? AllPath { get; set; }
+    }
+}

+ 46 - 0
src/Hotline/File/UploadAudioFiles.cs

@@ -0,0 +1,46 @@
+using SqlSugar;
+using System.ComponentModel;
+using XF.Domain.Repository;
+
+namespace Hotline.File
+{
+    [Description("录音上传")]
+    public class UploadAudioFiles : FullStateEntity
+    {
+        /// <summary>
+        /// 附件Id
+        /// </summary>
+        [SugarColumn(ColumnDescription = "附件Id")]
+        public string FileId { get; set; }
+
+        /// <summary>
+		/// 附件全称
+		/// </summary>
+		[SugarColumn(ColumnDescription = "附件全称")]
+        public string FileName { get; set; }
+
+        /// <summary>
+        /// 附件名称
+        /// </summary>
+        [SugarColumn(ColumnDescription = "附件名称")]
+        public string? Name { get; set; }
+
+        /// <summary>
+		/// 附件类型
+		/// </summary>
+		[SugarColumn(ColumnDescription = "附件类型")]
+        public string? Type { get; set; }
+
+        /// <summary>
+        /// 附件路径
+        /// </summary>
+        [SugarColumn(ColumnDescription = "附件路径", ColumnDataType = "varchar(500)")]
+        public string Path { get; set; }
+
+        /// <summary>
+        /// 完整附件路径
+        /// </summary>
+		[SugarColumn(ColumnDescription = "完整附件路径")]
+        public string? AllPath { get; set; }
+    }
+}