diff --git a/Src/CodeSpirit.ExamApi/Controllers/StudentGroupsController.cs b/Src/CodeSpirit.ExamApi/Controllers/StudentGroupsController.cs index a0e7659edf9387fd1339d8becccfd7df9ec64429..8171a685894fcda99dab187fbf83ecb0c07ffc86 100644 --- a/Src/CodeSpirit.ExamApi/Controllers/StudentGroupsController.cs +++ b/Src/CodeSpirit.ExamApi/Controllers/StudentGroupsController.cs @@ -1,9 +1,11 @@ using CodeSpirit.Core.Attributes; using CodeSpirit.Core.Dtos; +using CodeSpirit.ExamApi.Data.Models; using CodeSpirit.ExamApi.Dtos.StudentGroup; using CodeSpirit.ExamApi.Services.Interfaces; using CodeSpirit.Shared.Dtos.Common; using Microsoft.AspNetCore.Mvc; +using System.Linq.Expressions; namespace CodeSpirit.ExamApi.Controllers; @@ -41,7 +43,13 @@ public class StudentGroupsController : ApiControllerBase [HttpGet] public async Task>>> GetStudentGroups([FromQuery] StudentGroupQueryDto queryDto) { - PageList groups = await _studentGroupService.GetPagedListAsync(queryDto); + Expression> predicate = null; + if (!string.IsNullOrWhiteSpace(queryDto.Keywords)) + { + predicate = x => x.Name.Contains(queryDto.Keywords) || x.Description.Contains(queryDto.Keywords); + } + + PageList groups = await _studentGroupService.GetPagedListAsync(queryDto, predicate); return SuccessResponse(groups); } diff --git a/Src/CodeSpirit.ExamApi/Dtos/StudentGroup/StudentGroupBatchImportDto.cs b/Src/CodeSpirit.ExamApi/Dtos/StudentGroup/StudentGroupBatchImportDto.cs index 7e13b27b83e6d38558f64790fa1d5e5c10be4943..fe61d31004127687ef428395d0fec748fe0c6e17 100644 --- a/Src/CodeSpirit.ExamApi/Dtos/StudentGroup/StudentGroupBatchImportDto.cs +++ b/Src/CodeSpirit.ExamApi/Dtos/StudentGroup/StudentGroupBatchImportDto.cs @@ -1,3 +1,4 @@ +using Newtonsoft.Json; using System.ComponentModel; using System.ComponentModel.DataAnnotations; @@ -14,6 +15,7 @@ public class StudentGroupBatchImportDto [Required(ErrorMessage = "分组名称不能为空")] [StringLength(100, ErrorMessage = "分组名称最大长度为100")] [DisplayName("分组名称")] + [JsonProperty("分组名称")] public string Name { get; set; } = string.Empty; /// @@ -21,5 +23,6 @@ public class StudentGroupBatchImportDto /// [StringLength(500, ErrorMessage = "分组描述最大长度为500")] [DisplayName("描述")] + [JsonProperty("描述")] public string? Description { get; set; } } \ No newline at end of file diff --git a/Src/CodeSpirit.ExamApi/Mappings/StudentGroupProfile.cs b/Src/CodeSpirit.ExamApi/Mappings/StudentGroupProfile.cs index baefc1a6700b7ac9367835d2063b4263da388c4a..3d59d44544dffca83285422e25302a8127220da6 100644 --- a/Src/CodeSpirit.ExamApi/Mappings/StudentGroupProfile.cs +++ b/Src/CodeSpirit.ExamApi/Mappings/StudentGroupProfile.cs @@ -18,5 +18,7 @@ public class StudentGroupProfile : Profile // 添加 PageList 映射配置 CreateMap, PageList>(); + + CreateMap(); } } \ No newline at end of file diff --git a/Src/CodeSpirit.ExamApi/Services/Implementations/StudentGroupService.cs b/Src/CodeSpirit.ExamApi/Services/Implementations/StudentGroupService.cs index 60b025e2c0d6be56667f7390d18b167ec3ead951..cf505818413fdeee01d51a327d4fcf2a3871c860 100644 --- a/Src/CodeSpirit.ExamApi/Services/Implementations/StudentGroupService.cs +++ b/Src/CodeSpirit.ExamApi/Services/Implementations/StudentGroupService.cs @@ -168,6 +168,16 @@ public class StudentGroupService : BaseCRUDIService !existingNames.Contains(i.Name)); } + protected override Task OnImporting(StudentGroup entity) + { + base.OnImporting(entity); + + if(entity.Id == default) + entity.Id = _idGenerator.NewId(); + + return Task.CompletedTask; + } + /// /// 添加考生到分组 /// diff --git a/Src/CodeSpirit.ExamApi/Services/Implementations/StudentService.cs b/Src/CodeSpirit.ExamApi/Services/Implementations/StudentService.cs index 54093c53bdae3145a84df626f030893368cdf038..31f1587dbc6102287eb6700907e6f70300a6b842 100644 --- a/Src/CodeSpirit.ExamApi/Services/Implementations/StudentService.cs +++ b/Src/CodeSpirit.ExamApi/Services/Implementations/StudentService.cs @@ -357,6 +357,25 @@ public class StudentService : BaseCRUDIService(); var failedItems = new List(); + var studentNumberRepetition = importList.GroupBy(x => x.StudentNumber).Select(s => new { studentNumber = s.Key, count = s.Count() }); + if (studentNumberRepetition.Any(x => x.count > 1)) + { + var error = string.Join(",", studentNumberRepetition.Where(x => x.count > 1).Select(x => x.studentNumber)); + failedItems.Add($"导入数据中出现重复的学号:{error}"); + } + var idNoRepetition = importList.GroupBy(x => x.IdNo).Select(s => new { idNo = s.Key, count = s.Count() }); + if (idNoRepetition.Any(x => x.count > 1)) + { + var error = string.Join(",", idNoRepetition.Where(x => x.count > 1).Select(x => x.idNo)); + failedItems.Add($"导入数据中出现重复的身份证:{error}"); + } + var admissionTicketRepetition = importList.GroupBy(x => x.AdmissionTicket).Select(s => new { admissionTicket = s.Key, count = s.Count() }); + if (admissionTicketRepetition.Any(x => x.count > 1)) + { + var error = string.Join(",", admissionTicketRepetition.Where(x => x.count > 1).Select(x => x.admissionTicket)); + failedItems.Add($"导入数据中出现重复的准考证:{error}"); + } + var checkDatas = await Repository.CreateQuery().Where(x => importList.Select(x => x.StudentNumber).Contains(x.StudentNumber) || importList.Select(x => x.IdNo).Contains(x.IdNo) || importList.Select(x => x.AdmissionTicket).Contains(x.AdmissionTicket))