Quellcode durchsuchen

调整考试接口

guqiang vor 2 Wochen
Ursprung
Commit
28419ff4ed

+ 24 - 20
src/Hotline.Api/Controllers/Bigscreen/JudicialManagementScreenController.cs

@@ -160,7 +160,8 @@ namespace Hotline.Api.Controllers.Bigscreen
                 .Select((it, o) => new
                 {
                     it.Id,
-                    Name = o.AreaName
+                    Name = o.AreaName,
+                    ParentId = o.ParentId
                 })
                 .ToListAsync();
 
@@ -176,25 +177,28 @@ namespace Hotline.Api.Controllers.Bigscreen
                     AreaName = item.Name
                 };
 
-                var data = await _judicialManagementOrdersRepository.Queryable()
-                .Where(o => o.CreationTime >= StartTime && o.CreationTime <= EndTime && o.AreaCode.StartsWith(item.Id)&&o.IsItCounted==true)
-                .Select(o => new
-                {
-                    o.Id,
-                    o.IsEnforcementOrder,
-                    o.IsTheClueTrue,
-                    o.IsPassTheBuckOrder
-                })
-                .MergeTable()
-                .Select(d => new OrderModuleDto
-                {
-                    OrderCountNum = SqlFunc.AggregateSum(SqlFunc.IIF(d.Id != null, 1, 0)),
-                    EnforcementOrderNum = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsEnforcementOrder.HasValue && d.IsEnforcementOrder.Value == true, 1, 0)),
-                    TheClueIsTrueNum = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsTheClueTrue.HasValue && d.IsTheClueTrue.Value == true, 1, 0)),
-                    TheClueIsNotTrueNum = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsTheClueTrue.HasValue && d.IsTheClueTrue.Value == false, 1, 0)),
-                    PassTheBuckOrderNum = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsPassTheBuckOrder == true, 1, 0))
-                })
-                .ToListAsync();
+                var data = await _judicialManagementOrdersRepository.Queryable().
+                 LeftJoin<Order>((o, t) => o.Id == t.Id)
+                 .Where((o, t) => o.CreationTime >= StartTime && o.CreationTime <= EndTime && o.IsItCounted == true)
+                 .WhereIF(!string.IsNullOrEmpty(item.ParentId), (o, t) => o.AreaCode != null && o.AreaCode.StartsWith(item.ParentId))
+                 .Select((o, t) => new
+                 {
+                     o.Id,
+                     o.IsEnforcementOrder,
+                     o.IsTheClueTrue,
+                     o.IsPassTheBuckOrder
+                 })
+                 .MergeTable()
+                 .Select(d => new OrderModuleDto
+                 {
+                     OrderCountNum = SqlFunc.AggregateSum(SqlFunc.IIF(d.Id != null, 1, 0)),
+                     EnforcementOrderNum = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsEnforcementOrder.HasValue && d.IsEnforcementOrder.Value == true, 1, 0)),
+                     TheClueIsTrueNum = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsTheClueTrue.HasValue && d.IsTheClueTrue.Value == true, 1, 0)),
+                     TheClueIsNotTrueNum = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsTheClueTrue.HasValue && d.IsTheClueTrue.Value == false, 1, 0)),
+                     PassTheBuckOrderNum = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsPassTheBuckOrder == true, 1, 0)),
+                     ToBeVerifiedOrderCount = SqlFunc.AggregateCount(SqlFunc.IIF(d.IsEnforcementOrder == null, 1, 0))
+                 })
+                 .ToListAsync();
                 if (data != null && data.Count > 0)
                 {
                     dto.OrderCountNum = data[0].OrderCountNum;

+ 13 - 2
src/Hotline.Api/Controllers/Exam/TrainRecordController.cs

@@ -1,4 +1,5 @@
 using DocumentFormat.OpenXml.Office2010.ExcelAc;
+using Exam.Infrastructure.Data.Entity;
 using Exam.Share.Dtos.Trains;
 using Exam.Share.ViewResponses.Train;
 using Hotline.Application.Exam.Constants.ApiRoutes;
@@ -40,9 +41,9 @@ namespace Hotline.Api.Controllers.Exam
         /// <param name="cancellationToken"></param>
         /// <returns></returns>
         [HttpPost(TrainRecordApiRoute.Train)]
-        public async Task<TrainPracticeDto> Train([FromBody] AddTrainDto addTrainDto, CancellationToken cancellationToken)
+        public async Task Train([FromBody] AddTrainDto addTrainDto, CancellationToken cancellationToken)
         {
-            return await _trainRecordService.TrainAsync(addTrainDto, cancellationToken);
+            await _trainRecordService.TrainAsync(addTrainDto, cancellationToken);
         }
 
         /// <summary>
@@ -99,5 +100,15 @@ namespace Hotline.Api.Controllers.Exam
         {
             return await _trainRecordService.CalcuteAnalysisRate(trainResultReportPagedRequest);
         }
+
+        /// <summary>
+        /// 获取培训记录
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet(TrainRecordApiRoute.Get)]
+        public async Task<TrainRecordDto> GetAsync([FromQuery] EntityQueryRequest entityQueryRequest)
+        {
+            return await _trainRecordService.GetAsync(entityQueryRequest);
+        }
     }
 }

+ 7 - 5
src/Hotline.Application/Exam/Service/Practices/PracticeService.cs

@@ -218,9 +218,11 @@ namespace Hotline.Application.Exam.Service.Practices
 
         public async Task<ViewPracticeQuestionDto> ViewPracticeQuestion(PracticeQuestionRequest practiceQuestionRequest)
         {
-            ViewPracticeQuestionDto practiceQuestionDto = (await QueryPracticeQuestion(practiceQuestionRequest)) as ViewPracticeQuestionDto;
+            var practiceQuestionDto = await QueryPracticeQuestion(practiceQuestionRequest);
 
-            if (practiceQuestionDto != null)
+            var viewPracticeQuestionDto = _mapper.Map<ViewPracticeQuestionDto>(practiceQuestionDto);
+
+            if (viewPracticeQuestionDto != null)
             {
                 var practiceResultItemTable = _practiceResultItemRepository.Queryable();
                 var practiceResultTable = _practiceResultRepository.Queryable().Where(x => x.PracticeQuestionId == practiceQuestionRequest.PracticeQuestionId);
@@ -229,17 +231,17 @@ namespace Hotline.Application.Exam.Service.Practices
 
                 var practiceAnswers = await _practiceAnswerRepository.Queryable().Where(x => x.PracticeQuestionId == practiceQuestionRequest.PracticeQuestionId).ToListAsync();
 
-                practiceQuestionDto.PracticeQuestionOptionsDtos.ForEach(item =>
+                viewPracticeQuestionDto.PracticeQuestionOptionsDtos.ForEach(item =>
                 {
                     item.IsSelected = practiceResultItems.Any(x => x.QuestionOptionId == item.QuestionOptionId);
 
                     item.IsAnswer = practiceAnswers.Any(x => x.PracticeOptionId == item.QuestionOptionId);
                 });
 
-                practiceQuestionDto.Answer = string.Join(",", practiceQuestionDto.PracticeQuestionOptionsDtos.Where(x => x.IsAnswer).Select(m => m.Label));
+                viewPracticeQuestionDto.Answer = string.Join(",", viewPracticeQuestionDto.PracticeQuestionOptionsDtos.Where(x => x.IsAnswer).Select(m => m.Label));
             }
 
-            return practiceQuestionDto;
+            return viewPracticeQuestionDto;
         }
 
         public async Task<PracticeQuestionDto> Practice(SubmitPracticeDto submitPracticeDto, CancellationToken cancellationToken)

+ 26 - 6
src/Hotline.Application/Exam/Service/Trains/TrainRecordService.cs

@@ -27,6 +27,7 @@ using XF.Domain.Authentications;
 using XF.Domain.Dependency;
 using XF.Domain.Exceptions;
 using Hotline.Share.Exams.Extensions;
+using NPOI.SS.Formula.Functions;
 
 namespace Hotline.Application.Exam.Service.Trains
 {
@@ -123,10 +124,11 @@ namespace Hotline.Application.Exam.Service.Trains
 
             await AddTrainRecordAnswer(addTrainDto, cancellationToken);
 
-            var trainPracticeOptionsDtos = await GetTrainQuestionOptions(addTrainDto);
+            //var trainPracticeOptionsDtos = await GetTrainQuestionOptions(addTrainDto);
 
-            return trainPracticeOptionsDtos;
+            return null;
         }
+
         public async Task<TrainPracticeDto> GetTrainPracticeAsync(TrainPracticeRequest trainPracticeRequest)
         {
             var trainPracticeRepostitory = new TrainPracticeRepository(_uow, _dataPermissionFilterBuilder, _serviceProvider);
@@ -313,15 +315,20 @@ namespace Hotline.Application.Exam.Service.Trains
 
         private async Task AddTrainRecordAnswer(AddTrainDto addTrainRecordDto, CancellationToken cancellationToken)
         {
-            if (addTrainRecordDto.AddTrainRecordAnswerDtos == null) return;
+            if (addTrainRecordDto.AddTrainRecordOptionDtos == null && addTrainRecordDto.AddTrainRecordAnswerDto == null) return;
 
             var trainRecordAnswers = new List<TrainRecordAnswer>();
 
-            addTrainRecordDto.AddTrainRecordAnswerDtos.ForEach(item =>
+            addTrainRecordDto.AddTrainRecordOptionDtos?.ForEach(item =>
             {
                 trainRecordAnswers.Add(_mapper.Map<TrainRecordAnswer>(item));
             });
 
+            if (addTrainRecordDto.AddTrainRecordAnswerDto != null)
+            {
+                trainRecordAnswers.Add(_mapper.Map<TrainRecordAnswer>(addTrainRecordDto.AddTrainRecordAnswerDto));
+            }
+
             trainRecordAnswers.ToInsert(_sessionContext);
 
             await _trainRecordAnswerRepository.ValidateAddAsync(trainRecordAnswers,cancellationToken);
@@ -354,14 +361,27 @@ namespace Hotline.Application.Exam.Service.Trains
         private async Task<List<SimpleTrainPracticeOptionsDto>> GetTrainQuestionOptions(TrainPracticeRequest trainPracticeRequest)
         {
             var trainPracticeRepository = new ExamRepository<TrainPracticeOptions>(_uow, _dataPermissionFilterBuilder, _serviceProvider);
+            var trainRecordAnswerRepository = new ExamRepository<TrainRecordAnswer>(_uow, _dataPermissionFilterBuilder, _serviceProvider);
             // TODO: 获取未阅卷的第一道题
             var trainPracticeOptions = trainPracticeRepository.Queryable().Where(x => x.TrainPracticeId == trainPracticeRequest.TrainPracticeId);
 
+            var trainRecordOptions = await trainRecordAnswerRepository.Queryable()
+                .InnerJoin<TrainRecord>((t,x)=>t.TrainRecordId == x.Id)
+                .InnerJoin<TrainPlanTemplate>((t,x,p)=> x.TrainPlanId == p.TrainPlanId)
+                .InnerJoin<TrainPractice>((t,x,p,tp)=> x.Id == tp.TrainTemplateId)
+                .Where((t, x, p, tp) => tp.Id == trainPracticeRequest.TrainPracticeId)
+                .Select((t, x, p, tp) => t)
+                .ToListAsync();
+
             var trainPracticeOptionsDtos = new List<SimpleTrainPracticeOptionsDto>();
 
             trainPracticeOptions.ForEach(x =>
-            {
-                trainPracticeOptionsDtos.Add(_mapper.Map<SimpleTrainPracticeOptionsDto>(x));
+            {              
+                var trainPracticeOptionsDto = _mapper.Map<SimpleTrainPracticeOptionsDto>(x);
+
+                trainPracticeOptionsDto.IsSelected = trainRecordOptions.Any(m => m.QuestionOptionId == x.QuestionOptionId);
+
+                trainPracticeOptionsDtos.Add(trainPracticeOptionsDto);
             });
 
             return trainPracticeOptionsDtos;

+ 4 - 4
src/Hotline.Application/JudicialManagement/EnforcementApplication.cs

@@ -403,6 +403,7 @@ namespace Hotline.Application.JudicialManagement
                {
                    IndustryName = s.IndustryName,
                    Rate = SqlFunc.AggregateCount(SqlFunc.IIF(o.IsEnforcementOrder.HasValue && o.IsEnforcementOrder == true, 1, 0))/ SqlFunc.AggregateCount(o.Id),
+                   Count = SqlFunc.AggregateCount(SqlFunc.IIF(o.IsEnforcementOrder.HasValue && o.IsEnforcementOrder == true, 1, 0))
                });
 
             var result = await queryable.ToListAsync();
@@ -418,11 +419,10 @@ namespace Hotline.Application.JudicialManagement
                 .WhereIF(string.IsNullOrEmpty(queryEventTypeOrderStaticsRequest.AreaCode), (x, o) => o.AreaCode!=null && o.AreaCode.StartsWith(queryEventTypeOrderStaticsRequest.AreaCode));
 
             var queryable = judicialManagementOrderTable
-               .LeftJoin<JudicialComplaintsEventType>((x, o, s) => x.EventTypeOneLevelId == s.Id)
-               .GroupBy((x, o, s) => s.EventTypeName)
-               .Select((x, o, s) => new EventTypeOrderStaticsDto
+               .GroupBy((x, o) => x.EventTypeName)
+               .Select((x, o) => new EventTypeOrderStaticsDto
                {
-                   EventTypeName = s.EventTypeName,
+                   EventTypeName = x.EventTypeName,
                    Count =  SqlFunc.AggregateCount(o.Id),
                });
 

+ 6 - 0
src/Hotline.Share/Dtos/JudicialManagement/EmDepartmentalProcessingStatisticsDto.cs

@@ -71,6 +71,12 @@ namespace Hotline.Share.Dtos.JudicialManagement
         /// </summary>
         [Description("占比")]
         public decimal Rate { get; set; }
+
+        /// <summary>
+        /// 数量
+        /// </summary>
+        [Description("数量")]
+        public int Count { get; set; }
     }
 
     /// <summary>

+ 1 - 1
src/Hotline.Share/Dtos/JudicialManagement/EnforcementBigscreenDto.cs

@@ -19,7 +19,7 @@ namespace Hotline.Share.Dtos.JudicialManagement
         public int TheClueIsTrueNum { get; set; }
 
         /// <summary>
-        /// 线索不属实
+        /// 非执法工单
         /// </summary>
         public int TheClueIsNotTrueNum { get; set; }
 

+ 6 - 0
src/Hotline.Share/Dtos/Trains/TrainPracticeOptionsDto.cs

@@ -74,5 +74,11 @@ namespace Hotline.Share.Dtos.Trains
         [Description("选项")]
         public string Content { get; set; }
 
+        /// <summary>
+        /// 是否选择
+        /// </summary>
+        [Description("是否选择")]
+        public bool IsSelected { get; set; }
+
     }
 }

+ 34 - 3
src/Hotline.Share/Dtos/Trains/TrainRecordAnswerDto.cs

@@ -10,7 +10,7 @@ namespace Hotline.Share.Dtos.Trains
     /// 培训记录答案
     /// </summary>
     [Description("培训记录答案")]
-    public class TrainRecordAnswerDto:UpdateTrainRecordAnswerDto
+    public class TrainRecordOptionDto:UpdateTrainRecordOptionDto
     {
         
     }
@@ -19,7 +19,7 @@ namespace Hotline.Share.Dtos.Trains
     /// 培训记录答案
     /// </summary>
     [Description("培训记录答案")]
-    public class AddTrainRecordAnswerDto : IAddRequest,IOperationStatus
+    public class AddTrainRecordOptionDto : IAddRequest,IOperationStatus
     {
         /// <summary>
         /// 培训记录Id
@@ -38,13 +38,14 @@ namespace Hotline.Share.Dtos.Trains
         /// </summary>
         [Description("操作状态")]
         public EEOperationStatus OperationStatus { get; set; }
+
     }
 
     /// <summary>
     /// 培训记录答案
     /// </summary>
     [Description("培训记录答案")]
-    public class UpdateTrainRecordAnswerDto : AddTrainRecordAnswerDto,IActionRequest
+    public class UpdateTrainRecordOptionDto : AddTrainRecordOptionDto, IActionRequest
     {
 
         /// <summary>
@@ -53,4 +54,34 @@ namespace Hotline.Share.Dtos.Trains
         [Description("主键")]
         public string Id { get; set; }
     }
+
+    public class AddTrainRecordAnswerDto : IAddRequest, IOperationStatus
+    {
+        /// <summary>
+        /// 培训记录Id
+        /// </summary>
+        [Description("培训记录Id")]
+        public string TrainRecordId { get; set; }
+
+        /// <summary>
+        /// 答案
+        /// </summary>
+        [Description("答案")]
+        public string Answer { get; set; }
+
+        /// <summary>
+        /// 操作状态        
+        /// </summary>
+        [Description("操作状态")]
+        public EEOperationStatus OperationStatus { get; set; }
+    }
+
+    public class UpdateTrainRecordAnswerDto : AddTrainRecordAnswerDto, IActionRequest
+    {
+        /// <summary>
+        /// 主键
+        /// </summary>
+        [Description("主键")]
+        public string Id { get; set; }
+    }
 }

+ 6 - 1
src/Hotline.Share/Dtos/Trains/TrainRecordDto.cs

@@ -101,7 +101,12 @@ namespace Hotline.Share.Dtos.Trains
         /// 培训习题答案
         /// </summary>
         [Description("培训习题答案")]
-        public List<AddTrainRecordAnswerDto> AddTrainRecordAnswerDtos { get; set; }
+        public List<AddTrainRecordOptionDto> AddTrainRecordOptionDtos { get; set; }
+
+        /// <summary>
+        /// 答案
+        /// </summary>
+        public AddTrainRecordAnswerDto AddTrainRecordAnswerDto { get; set; }
 
         /// <summary>
         /// 知识Id

+ 8 - 1
src/Hotline/Exams/Trains/TrainRecordAnswer.cs

@@ -29,6 +29,13 @@ namespace Exam.Trains
         /// </summary>
         [SugarColumn(ColumnDescription ="试题选项Id")]
         [Description("试题选项Id")]
-        public string QuestionOptionId { get; set; }
+        public string? QuestionOptionId { get; set; }
+
+        /// <summary>
+        /// 试题答案
+        /// </summary>
+        [SugarColumn(ColumnDescription = "试题答案")]
+        [Description("试题答案")]
+        public string? Answer { get; set; }
     }
 }