Ver Fonte

增加导出接口

guqiang há 6 dias atrás
pai
commit
496c925f16

+ 37 - 1
src/Hotline.Api/Controllers/Exam/TrainRecordController.cs

@@ -1,13 +1,17 @@
 using DocumentFormat.OpenXml.Office2010.ExcelAc;
 using Exam.Infrastructure.Data.Entity;
 using Exam.Share.Dtos.Trains;
+using Exam.Share.ViewResponses.Exam;
 using Exam.Share.ViewResponses.Train;
 using Hotline.Application.Exam.Constants.ApiRoutes;
 using Hotline.Application.Exam.Interface.Train;
+using Hotline.Share.Dtos.Order;
 using Hotline.Share.Dtos.Trains;
 using Hotline.Share.Requests.Exam;
 using Hotline.Share.Requests.Train;
 using Hotline.Share.ViewResponses.Trains;
+using Hotline.Tools;
+using MapsterMapper;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
 using Train.Application.Interface.Train;
@@ -17,10 +21,12 @@ namespace Hotline.Api.Controllers.Exam
     public class TrainRecordController : BaseController
     {
         private readonly ITrainRecordService _trainRecordService;
+        private readonly IMapper _mapper;
 
-        public TrainRecordController(ITrainRecordService trainRecordService)
+        public TrainRecordController(ITrainRecordService trainRecordService,IMapper mapper)
         {
             this._trainRecordService = trainRecordService;
+            this._mapper = mapper;
         }
 
         /// <summary>
@@ -102,6 +108,36 @@ namespace Hotline.Api.Controllers.Exam
             return await _trainRecordService.AnalysisTrainResult(trainResultReportPagedRequest);
         }
 
+        /// <summary>
+        /// 导出培训结果统计
+        /// </summary>
+        /// <param name="exportExcelDto"></param>
+        /// <returns></returns>
+        [HttpPost(TrainRecordApiRoute.ExportTrainResult)]
+        public async Task<FileStreamResult> ExportTrainResult([FromBody] ExportExcelDto<TrainResultReportPagedRequest> exportExcelDto)
+        {
+            if (exportExcelDto.IsExportAll)
+            {
+                exportExcelDto.QueryDto.IsPaged = false;
+            }
+
+            var result = await _trainRecordService.AnalysisTrainResult(exportExcelDto.QueryDto);
+
+            var items = result.Items;
+
+            dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass<TrainResultViewResponse>(exportExcelDto.ColumnInfos ?? new List<ColumnInfo>());
+
+            var dtos = items
+                .Select(stu => _mapper.Map(stu, typeof(TrainResultViewResponse), dynamicClass))
+                .Cast<object>()
+                .ToList();
+
+            var stream = ExcelHelper.CreateStream(dtos);
+
+            return ExcelStreamResult(stream, "导出培训结果统计");
+
+        }
+
         /// <summary>
         /// 计算培训结果比例
         /// </summary>

+ 71 - 2
src/Hotline.Api/Controllers/Exam/UserExamController.cs

@@ -11,6 +11,9 @@ using Microsoft.AspNetCore.Mvc;
 using System.ComponentModel;
 using Hotline.Application.Exam.Interface.ExamManages;
 using Exam.Infrastructure.Data.Entity;
+using Hotline.Share.Dtos.Order;
+using Hotline.Tools;
+using MapsterMapper;
 
 namespace Hotline.Api.Controllers.Exam
 {
@@ -18,11 +21,13 @@ namespace Hotline.Api.Controllers.Exam
     {
         private readonly IUserExamService _userExamService;
         private readonly IExamManageService _examManageService;
+        private readonly IMapper _mapper;
 
-        public UserExamController(IUserExamService userExamService,IExamManageService examManageService)
+        public UserExamController(IUserExamService userExamService,IExamManageService examManageService,IMapper mapper)
         {
             this._userExamService = userExamService;
             this._examManageService = examManageService;
+            this._mapper = mapper;
         }
 
         /// <summary>
@@ -190,7 +195,38 @@ namespace Hotline.Api.Controllers.Exam
         [HttpPost(UserExamApiRoute.GetUnExamUsers)]
         public async Task<UnExamUserPageViewResponse> GetUnExamUsers([FromBody] UnExamUserReportPagedRequest unExamUserReportPagedRequest)
         {
-            return await _userExamService.GetUnExamUsers(unExamUserReportPagedRequest);
+            return await _userExamService.GetUnExamUsersPaged(unExamUserReportPagedRequest);
+        }
+
+        /// <summary>
+        /// 导出未考试的考生信息
+        /// </summary>
+        /// <param name="exportExcelDto"></param>
+        /// <returns></returns>
+        [HttpPost(UserExamApiRoute.ExportUnExamUsers)]
+        public async Task<FileStreamResult> ExportUnExamUsers([FromBody] ExportExcelDto<UnExamUserReportPagedRequest> exportExcelDto)
+        {
+            if (exportExcelDto.IsExportAll)
+            {
+                exportExcelDto.QueryDto.IsPaged = false;
+            }
+            var result = await _userExamService.GetUnExamUsersPaged(exportExcelDto.QueryDto);
+
+            var items = result.Items;
+
+            var viewResponses = _mapper.Map<ICollection<UnExamUserViewResponse>>(items);
+
+            dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass<UnExamUserViewResponse>(exportExcelDto.ColumnInfos??new List<ColumnInfo>());
+
+            var dtos = viewResponses
+                .Select(stu => _mapper.Map(stu, typeof(UnExamUserViewResponse), dynamicClass))
+                .Cast<object>()
+                .ToList();
+
+            var stream = ExcelHelper.CreateStream(dtos);
+
+            return ExcelStreamResult(stream, "未考试的考生信息");
+
         }
 
         /// <summary>
@@ -205,6 +241,39 @@ namespace Hotline.Api.Controllers.Exam
             return await _userExamService.GetUserExamResults(userExamResultReportPagedRequest); 
         }
 
+
+        /// <summary>
+        /// 导出成绩统计分析
+        /// </summary>
+        /// <param name="exportExcelDto"></param>
+        /// <returns></returns>
+
+        [HttpPost(UserExamApiRoute.ExportUserExamResults)]
+        public async Task<FileStreamResult> ExportUserExamResults([FromBody] ExportExcelDto<UserExamResultReportPagedRequest> exportExcelDto)
+        {
+            if (exportExcelDto.IsExportAll)
+            {
+                exportExcelDto.QueryDto.IsPaged = false;
+            }
+
+            var result = await _userExamService.GetUserExamResults(exportExcelDto.QueryDto);
+
+            var items = result.Items;
+
+            dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass<UserExamResultViewResponse>(exportExcelDto.ColumnInfos ?? new List<ColumnInfo>());
+
+            var dtos = items
+                .Select(stu => _mapper.Map(stu, typeof(UserExamResultViewResponse), dynamicClass))
+                .Cast<object>()
+                .ToList();
+
+            var stream = ExcelHelper.CreateStream(dtos);
+
+            return ExcelStreamResult(stream, "成绩统计分析");
+        }
+
+
+
         /// <summary>
         /// 查看考试试题
         /// </summary>

+ 2 - 0
src/Hotline.Application/Exam/Constants/ApiRoutes/TrainRecordApiRoute.cs

@@ -20,5 +20,7 @@ namespace Hotline.Application.Exam.Constants.ApiRoutes
         public const string AnalysisTrainResult = "AnalysisTrainResult";
 
         public const string CalcuteAnalysisRate = "CalcuteAnalysisRate";
+
+        public const string ExportTrainResult = "ExportTrainResult";
     }
 }

+ 4 - 0
src/Hotline.Application/Exam/Constants/ApiRoutes/UserExamApiRoute.cs

@@ -42,5 +42,9 @@ namespace Hotline.Application.Exam.Constants.ApiRoutes
         public const string GetGradingPagedList = "GetGradingPagedList";
 
         public const string GetUserList = "GetUserList";
+
+        public const string ExportUnExamUsers = "ExportUnExamUsers";
+
+        public const string ExportUserExamResults = "ExportUserExamResults";
     }
 }

+ 8 - 1
src/Hotline.Application/Exam/Interface/ExamManages/IUserExamService.cs

@@ -92,7 +92,14 @@ namespace Hotline.Application.Exam.Interface.ExamManages
         /// </summary>
         /// <param name="unExamUserReportPagedRequest"></param>
         /// <returns></returns>
-        Task<UnExamUserPageViewResponse> GetUnExamUsers(UnExamUserReportPagedRequest unExamUserReportPagedRequest);
+        Task<UnExamUserPageViewResponse> GetUnExamUsersPaged(UnExamUserReportPagedRequest unExamUserReportPagedRequest);
+
+        /// <summary>
+        /// 获取缺考考生名单(不分页)
+        /// </summary>
+        /// <param name="unExamUserReportPagedRequest"></param>
+        /// <returns></returns>
+        Task<List<UnExamUserViewResponse>> GetUnExamUsers(UnExamUserReportPagedRequest unExamUserReportPagedRequest);
 
         /// <summary>
         /// 获取用户考试成绩

+ 34 - 14
src/Hotline.Application/Exam/Service/ExamManages/UserExamService.cs

@@ -698,7 +698,34 @@ namespace Hotline.Application.Exam.Service.ExamManages
         }
 
 
-        public async Task<UnExamUserPageViewResponse> GetUnExamUsers(UnExamUserReportPagedRequest unExamUserReportPagedRequest)
+        public async Task<UnExamUserPageViewResponse> GetUnExamUsersPaged(UnExamUserReportPagedRequest unExamUserReportPagedRequest)
+        {
+            ISugarQueryable<UnExamUserViewResponse> queryResult = GEtUnExamUserQueryable(unExamUserReportPagedRequest);
+
+            var total = await queryResult.CountAsync();
+
+            var items = unExamUserReportPagedRequest.IsPaged ?
+                await queryResult.ToPageListAsync(unExamUserReportPagedRequest.PageIndex, unExamUserReportPagedRequest.PageSize)
+                : await queryResult.ToListAsync();
+
+            return new UnExamUserPageViewResponse
+            {
+                Items = items,
+                Pagination = new Pagination(unExamUserReportPagedRequest.PageIndex, unExamUserReportPagedRequest.PageSize, total)
+            };
+
+        }
+
+        public async Task<List<UnExamUserViewResponse>> GetUnExamUsers(UnExamUserReportPagedRequest unExamUserReportPagedRequest)
+        {
+            ISugarQueryable<UnExamUserViewResponse> queryResult = GEtUnExamUserQueryable(unExamUserReportPagedRequest);
+
+            var items = await queryResult.ToListAsync();
+
+            return items;
+        }
+
+        private ISugarQueryable<UnExamUserViewResponse> GEtUnExamUserQueryable(UnExamUserReportPagedRequest unExamUserReportPagedRequest)
         {
             if (unExamUserReportPagedRequest.EndTime == null)
                 unExamUserReportPagedRequest.ResolveEndTime();
@@ -722,18 +749,8 @@ namespace Hotline.Application.Exam.Service.ExamManages
                 })
                 .MergeTable()
                 .OrderByPropertyNameIF(!string.IsNullOrEmpty(unExamUserReportPagedRequest.SortField), unExamUserReportPagedRequest.SortField, (OrderByType)(unExamUserReportPagedRequest.SortRule ?? 0));
-
-            var total = await queryResult.CountAsync();
-            var items = await queryResult.ToPageListAsync(unExamUserReportPagedRequest.PageIndex, unExamUserReportPagedRequest.PageSize);
-
-            return new UnExamUserPageViewResponse
-            {
-                Items = items,
-                Pagination = new Pagination(unExamUserReportPagedRequest.PageIndex, unExamUserReportPagedRequest.PageSize, total)
-            };
-
+            return queryResult;
         }
-
         public async Task<UserExamResultPageViewResponse> GetUserExamResults(UserExamResultReportPagedRequest userExamResultReportPagedRequest)
         {
             if (userExamResultReportPagedRequest.EndTime == null)
@@ -764,9 +781,12 @@ namespace Hotline.Application.Exam.Service.ExamManages
                .OrderByPropertyNameIF(!string.IsNullOrEmpty(userExamResultReportPagedRequest.SortField), userExamResultReportPagedRequest.SortField, (OrderByType)(userExamResultReportPagedRequest.SortRule ?? 0))
                 .OrderByDescending(x => x.Score)
       ;
-
+            
             var total = await queryResult.CountAsync();
-            var items = await queryResult.ToPageListAsync(userExamResultReportPagedRequest.PageIndex, userExamResultReportPagedRequest.PageSize);
+            var items = userExamResultReportPagedRequest.IsPaged ?
+                await queryResult.ToPageListAsync(userExamResultReportPagedRequest.PageIndex, userExamResultReportPagedRequest.PageSize)
+                : await queryResult.ToListAsync();
+                ;
 
             return new UserExamResultPageViewResponse
             {

+ 4 - 1
src/Hotline.Application/Exam/Service/Trains/TrainRecordService.cs

@@ -243,7 +243,10 @@ namespace Hotline.Application.Exam.Service.Trains
 
             var total = await queryResult.CountAsync();
 
-            var items = await queryResult.ToPageListAsync(trainResultReportPagedRequest.PageIndex, trainResultReportPagedRequest.PageSize);
+            var items = trainResultReportPagedRequest.IsPaged ?
+                await queryResult.ToPageListAsync(trainResultReportPagedRequest.PageIndex, trainResultReportPagedRequest.PageSize)
+                : await queryResult.ToListAsync();
+                ;
 
             return new TrainResultPagedViewResponse
             {

+ 13 - 0
src/Hotline.Application/Mappers/ExamMapperConfigs.cs

@@ -0,0 +1,13 @@
+using Mapster;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hotline.Application.Mappers
+{
+    public partial class MapperConfigs : IRegister
+    {
+    }
+}

+ 2 - 0
src/Hotline.Share/Requests/Exam/AnalysisReportRequest.cs

@@ -6,5 +6,7 @@ namespace Hotline.Share.Requests.Exam
     public record AnalysisReportRequest : ReportPagedRequest,IQueryRequest
     {
         public EAnlysisType AnlysisType { get; set; }
+
+        public bool IsPaged { get; set; } = true;
     }
 }