Explorar el Código

验证编码重复

guqiang hace 1 mes
padre
commit
8540a44415

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

@@ -280,9 +280,9 @@ namespace Hotline.Application.Exam.Service.Trains
 
                 trainPracticeDtos.ForEach(item =>
                 {
-                trainPractices.Add(_mapper.Map<TrainRecord>(trainPracticeDtos));
+                    trainPractices.Add(_mapper.Map<TrainRecord>(item));
                 });
-               
+
                 trainPractices.ToInsert(_sessionContext);
 
                 await _trainRecordRepository.ValidateAddAsync(trainPractices, cancellationToken);
@@ -374,7 +374,7 @@ namespace Hotline.Application.Exam.Service.Trains
 
         private async Task DeleteTrainRecordsAsync(EntityQueryRequest entityQueryRequest, CancellationToken cancellationToken)
         {
-            await _trainPlanTemplateRepository.DeleteWithValidateAsync(entityQueryRequest, cancellationToken);
+            await _trainRecordRepository.DeleteWithValidateAsync(entityQueryRequest, cancellationToken);
         }
 
         private async Task<List<TrainRecord>> UpdateTrainRecordsAsync(UpdateTrainPlanDto actionRequest, CancellationToken cancellationToken)
@@ -399,7 +399,7 @@ namespace Hotline.Application.Exam.Service.Trains
         
         private async Task<string> GenerateCode(string codePrefix, int length)
         {
-            var trainPlan = await _repository.Queryable().Where(x => x.CreationTime.Date == DateTime.Now).FirstAsync();
+            var trainPlan = await _repository.Queryable().Where(x => x.CreationTime.Date == DateTime.Now.Date).OrderByDescending(x => x.CreationTime).FirstAsync();
 
 
             var code = string.Empty;

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

@@ -596,7 +596,7 @@ namespace Hotline.Application.Exam.Service.Trains
 
         private async Task<string> GenerateCode(string codePrefix, int length)
         {
-            var trainTemplate = await _repository.Queryable().Where(x => x.CreationTime.Date == DateTime.Now).FirstAsync();
+            var trainTemplate = await _repository.Queryable().Where(x => x.CreationTime.Date == DateTime.Now.Date).OrderByDescending(x=>x.CreationTime).FirstAsync();
 
             var code = string.Empty;
             if (trainTemplate != null)

+ 1 - 1
src/Hotline.Repository.SqlSugar/Exam/Repositories/Trains/TrainPlanRepository.cs

@@ -17,7 +17,7 @@ namespace Exam.Repository.Sqlsugar.Repositories.Trains
     {
         public TrainPlanRepository(ISugarUnitOfWork<HotlineDbContext> uow, IDataPermissionFilterBuilder dataPermissionFilterBuilder, IServiceProvider serviceProvider) : base(uow, dataPermissionFilterBuilder, serviceProvider)
         {
-            Validator = new TrainPlanValidator();
+            Validator = new TrainPlanValidator(this);
         }
     }
 }

+ 1 - 1
src/Hotline.Repository.SqlSugar/Exam/Repositories/Trains/TrainTemplateRepository.cs

@@ -17,7 +17,7 @@ namespace Exam.Repository.Sqlsugar.Repositories.Trains
     {
         public TrainTemplateRepository(ISugarUnitOfWork<HotlineDbContext> uow, IDataPermissionFilterBuilder dataPermissionFilterBuilder, IServiceProvider serviceProvider) : base(uow, dataPermissionFilterBuilder, serviceProvider)
         {
-            Validator = new TrainTemplateValidator();
+            Validator = new TrainTemplateValidator(this);
         }
     }
 }

+ 11 - 1
src/Hotline.Repository.SqlSugar/Exam/Validators/Trains/TrainPlanValidator.cs

@@ -2,13 +2,16 @@ using Exam.Infrastructure.Extensions;
 using Exam.Infrastructure.Validation.Validation;
 using Exam.Trains;
 using FluentValidation;
+using Hotline.Repository.SqlSugar.Exam.Interfaces.Trains;
 using Hotline.Repository.SqlSugar.Validate;
 
 namespace Exam.Repository.Sqlsugar.Validators.Trains
 {
     public class TrainPlanValidator:BaseValidator<TrainPlan>
     {
-        public TrainPlanValidator()
+        private readonly ITrainPlanRepository _trainPlanRepository;
+
+        public TrainPlanValidator(ITrainPlanRepository trainPlanRepository)
         {
             RuleSet(ValidatorTypeConstants.Create, () =>
             {
@@ -23,6 +26,7 @@ namespace Exam.Repository.Sqlsugar.Validators.Trains
 
                 ValidateRuleWithModify();
             });
+            this._trainPlanRepository = trainPlanRepository;
         }
 
         protected override void BaseValidateRule()
@@ -34,12 +38,18 @@ namespace Exam.Repository.Sqlsugar.Validators.Trains
         {
             base.ValidateRuleWithAdd();
             RuleFor(m => m.CreationTime).NotEmpty().WithMessage(x => string.Format(ErrorMessage.IsRequired, x.GetType().GetDescription(nameof(TrainPlan.CreationTime))));
+            RuleFor(m => m.Name).Must((t, v) => !_trainPlanRepository.Queryable().Any(x => x.Name == v && x.Id != t.Id)).WithMessage(x => string.Format(ErrorMessage.IsRepeat, x.GetType().GetDescription(nameof(TrainPlan.Name))));
+
+            RuleFor(m=>m.Code).Must(v =>!_trainPlanRepository.Queryable().Any(x=>x.Code == v)).WithMessage(x => string.Format(ErrorMessage.IsRepeat, x.GetType().GetDescription(nameof(TrainPlan.Code))));
         }
 
         protected override void ValidateRuleWithModify()
         {
             base.ValidateRuleWithModify();
             RuleFor(m => m.LastModificationTime).NotEmpty().WithMessage(x => string.Format(ErrorMessage.IsRequired, x.GetType().GetDescription(nameof(TrainPlan.LastModificationTime))));
+            RuleFor(m => m.Name).Must((t, v) => !_trainPlanRepository.Queryable().Any(x => x.Name == v && x.Id != t.Id)).WithMessage(x => string.Format(ErrorMessage.IsRepeat, x.GetType().GetDescription(nameof(TrainPlan.Name))));
+
+            RuleFor(m => m.Code).Must((t,v) => !_trainPlanRepository.Queryable().Any(x => x.Code == v && x.Id!=t.Id)).WithMessage(x => string.Format(ErrorMessage.IsRepeat, x.GetType().GetDescription(nameof(TrainPlan.Code))));
 
         }
 

+ 10 - 1
src/Hotline.Repository.SqlSugar/Exam/Validators/Trains/TrainTemplateValidator.cs

@@ -1,14 +1,18 @@
 using Exam.Infrastructure.Extensions;
 using Exam.Infrastructure.Validation.Validation;
+using Exam.Repository.Sqlsugar.Repositories.Trains;
 using Exam.Trains;
 using FluentValidation;
+using Hotline.Repository.SqlSugar.Exam.Interfaces.Trains;
 using Hotline.Repository.SqlSugar.Validate;
 
 namespace Exam.Repository.Sqlsugar.Validators.Trains
 {
     public class TrainTemplateValidator:BaseValidator<TrainTemplate>
     {
-        public TrainTemplateValidator()
+        private readonly ITrainTemplateRepository _trainTemplateRepository;
+
+        public TrainTemplateValidator(ITrainTemplateRepository trainTemplateRepository)
         {
             RuleSet(ValidatorTypeConstants.Create, () =>
             {
@@ -23,6 +27,7 @@ namespace Exam.Repository.Sqlsugar.Validators.Trains
 
                 ValidateRuleWithModify();
             });
+            this._trainTemplateRepository = trainTemplateRepository;
         }
 
         protected override void BaseValidateRule()
@@ -34,12 +39,16 @@ namespace Exam.Repository.Sqlsugar.Validators.Trains
         {
             base.ValidateRuleWithAdd();
             RuleFor(m => m.CreationTime).NotEmpty().WithMessage(x => string.Format(ErrorMessage.IsRequired, x.GetType().GetDescription(nameof(TrainTemplate.CreationTime))));
+            RuleFor(m => m.Name).Must(v => !_trainTemplateRepository.Queryable().Any(x => x.Name == v)).WithMessage(x => string.Format(ErrorMessage.IsRepeat, x.GetType().GetDescription(nameof(TrainPlan.Name))));
+            RuleFor(m => m.Code).Must(v => !_trainTemplateRepository.Queryable().Any(x => x.Code == v)).WithMessage(x => string.Format(ErrorMessage.IsRepeat, x.GetType().GetDescription(nameof(TrainPlan.Code))));
         }
 
         protected override void ValidateRuleWithModify()
         {
             base.ValidateRuleWithModify();
             RuleFor(m => m.LastModificationTime).NotEmpty().WithMessage(x => string.Format(ErrorMessage.IsRequired, x.GetType().GetDescription(nameof(TrainTemplate.LastModificationTime))));
+            RuleFor(m => m.Name).Must((t, v) => !_trainTemplateRepository.Queryable().Any(x => x.Name == v && x.Id != t.Id)).WithMessage(x => string.Format(ErrorMessage.IsRepeat, x.GetType().GetDescription(nameof(TrainPlan.Name))));
+            RuleFor(m => m.Code).Must((t, v) => !_trainTemplateRepository.Queryable().Any(x => x.Code == v && x.Id != t.Id)).WithMessage(x => string.Format(ErrorMessage.IsRepeat, x.GetType().GetDescription(nameof(TrainPlan.Code))));
 
         }