From c49cf0ed1292343ebfc2a00c2e68c3128a968224 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 12 Jun 2024 10:50:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=99=BB=E5=BD=95=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/ExtraController.cs | 9 ++-- .../ImageAndDoc/DownloadAndUploadService.cs | 53 +++++++++++++++---- .../Service/Management/DTO/UserModel.cs | 1 - .../Management/Interface/IUserService.cs | 2 +- .../Service/Management/UserService.cs | 4 +- 5 files changed, 51 insertions(+), 18 deletions(-) diff --git a/IRaCIS.Core.API/Controllers/ExtraController.cs b/IRaCIS.Core.API/Controllers/ExtraController.cs index eef01245d..7e8c111be 100644 --- a/IRaCIS.Core.API/Controllers/ExtraController.cs +++ b/IRaCIS.Core.API/Controllers/ExtraController.cs @@ -108,15 +108,16 @@ namespace IRaCIS.Api.Controllers { //MFA 邮箱验证 前端传递用户Id 和MFACode - if (loginUser.UserId != null && !string.IsNullOrEmpty(loginUser.MFACode) && _verifyConfig.CurrentValue.OpenLoginMFA) + if (loginUser.UserId != null && _verifyConfig.CurrentValue.OpenLoginMFA) { Guid userId = (Guid)loginUser.UserId; - //验证MFA 编码是否有问题 + //验证MFA 编码是否有问题 ,前端要拆开,自己调用验证的逻辑 + //await _userService.VerifyMFACodeAsync(userId, loginUser.MFACode); - await _userService.VerifyMFACodeAsync(userId, loginUser.MFACode); + //var loginUser = await _userRepository.Where(u => u.UserName.Equals(userName) && u.Password == password).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync(); - var basicInfo = await _userService.GetUserBasicInfo(userId); + var basicInfo = await _userService.GetUserBasicInfo(userId, loginUser.Password); var loginReturn = new LoginReturnDTO() { BasicInfo = basicInfo }; diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index d480600f4..ed2537a08 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -29,12 +29,13 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc { private readonly IEasyCachingProvider _provider; private readonly IRepository _systemAnonymizationRepository; + private readonly IRepository _visitTaskRepository; private readonly IRepository _subjectVisitRepository; private readonly IOSSService _oSSService; private readonly IRepository _studyMonitorRepository; private readonly IDistributedLockProvider _distributedLockProvider; public DownloadAndUploadService(IEasyCachingProvider provider, IRepository systemAnonymizationRepository, IRepository subjectVisitRepository, IOSSService oSSService, - IRepository studyMonitorRepository, IDistributedLockProvider distributedLockProvider) + IRepository studyMonitorRepository, IDistributedLockProvider distributedLockProvider, IRepository visitTaskRepository) { _systemAnonymizationRepository = systemAnonymizationRepository; @@ -44,6 +45,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc _studyMonitorRepository = studyMonitorRepository; _distributedLockProvider = distributedLockProvider; _provider = provider; + _visitTaskRepository = visitTaskRepository; } /// @@ -52,9 +54,39 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc /// 根据当前受试者该标准已阅任务数量(生效失效的任务都算,考虑重阅,最后编号不重复) 第一个就是TimePoint Ran1,后面依次随机挑选出来的阅片序号依次递增 /// /// + /// /// - public async Task SubejctRandomReadingTaskNameDeal(Guid subjectId) + public async Task SubejctRandomReadingTaskNameDeal(Guid subjectId, Guid trialReadingCriterionId) { + //subject 随机阅片 才处理任务编号 + if (_visitTaskRepository.Any(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.TrialReadingCriterion.IsReadingTaskViewInOrder == ReadingOrder.SubjectRandom)) + { + //找到 非一致性分析,未签名,状态正常的 并且任务名称不是TimePoint的 任务 + var needDealTaskList = await _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == false + && t.ReadingTaskState != ReadingTaskState.HaveSigned && t.TaskBlindName != "Timepoint" && t.ReadingCategory == ReadingCategory.Visit + && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze), true).ToListAsync(); + + if (needDealTaskList.Count>0) + { + //已完成的访视任务数量(包含重阅的) + var haveFinishedTaskCount = await _visitTaskRepository.CountAsync(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == false + && t.ReadingTaskState == ReadingTaskState.HaveSigned && t.ReadingCategory == ReadingCategory.Visit); + + //随机赋值编号 比如要处理5个任务,实例化一个包含1-5的数组,每次随机取出一个 + + List availableNumbers = Enumerable.Range(haveFinishedTaskCount + 1, needDealTaskList.Count).ToList(); + Random rng = new Random(); + foreach (var visitTask in needDealTaskList) + { + int randomIndex = rng.Next(availableNumbers.Count); + + visitTask.TaskBlindName = $"Timepoint Ran {availableNumbers[randomIndex]}"; + + availableNumbers.RemoveAt(randomIndex); + } + await _visitTaskRepository.SaveChangesAsync(); + } + } return ResponseOutput.Ok(); } @@ -62,10 +94,11 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc /// 获取该受试者任务上传列表(展示已上传情况) /// /// + /// /// - public async Task>> GetSubjectImageUploadList(Guid subjectId) + public async Task>> GetSubjectImageUploadList(Guid subjectId,Guid trialReadingCriterionId) { - var query = _repository.Where(t => t.SubjectId == subjectId && t.SourceSubjectVisitId != null && t.DoctorUserId == _userInfo.Id) + var query = _repository.Where(t => t.SubjectId == subjectId &&t.TrialReadingCriterionId== trialReadingCriterionId && t.SourceSubjectVisitId != null && t.DoctorUserId == _userInfo.Id) .Select(u => new SubjectImageUploadDTO() { VisitTaskId = u.Id, @@ -76,11 +109,11 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc TrialSiteId = u.Subject.TrialSiteId, - IsImageFilter=u.TrialReadingCriterion.IsImageFilter, + IsImageFilter = u.TrialReadingCriterion.IsImageFilter, - CriterionModalitys= u.TrialReadingCriterion.CriterionModalitys, + CriterionModalitys = u.TrialReadingCriterion.CriterionModalitys, - SubjectCode = u.IsSelfAnalysis == true ? u.BlindSubjectCode : u.Subject.Code , + SubjectCode = u.IsSelfAnalysis == true ? u.BlindSubjectCode : u.Subject.Code, TaskBlindName = u.TaskBlindName, TaskName = u.TaskName, @@ -328,7 +361,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc else { - var studyId = IdentifierHelper.CreateGuid(incommand.Study.StudyInstanceUid, incommand.TrialId.ToString(), findOriginStudy.VisitTaskId.ToString()); + var studyId = IdentifierHelper.CreateGuid(incommand.Study.StudyInstanceUid, incommand.TrialId.ToString(), findOriginStudy.VisitTaskId.ToString()); var study = await _repository.FirstOrDefaultAsync(t => t.Id == studyId); @@ -339,7 +372,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc //特殊处理逻辑 study.Modalities = string.Join("、", incommand.Study.SeriesList.Select(t => t.Modality).Union(study.Modalities.Split("、", StringSplitOptions.RemoveEmptyEntries)).Distinct()); SpecialArchiveStudyDeal(study); - modalitys = study.Modalities; + modalitys = study.Modalities; // 少了整个序列 @@ -552,7 +585,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc { //受试者随机阅片,需要匿名化检查时间 DicomFile dicomFile = await DicomFile.OpenAsync(destinationPath, Encoding.Default); - DicomDataset dataset = dicomFile.Dataset; + DicomDataset dataset = dicomFile.Dataset; dataset.AddOrUpdate(DicomTag.StudyDate, string.Empty); dataset.AddOrUpdate(DicomTag.StudyTime, string.Empty); diff --git a/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs b/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs index 83adc07d9..a54ec9ad4 100644 --- a/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs +++ b/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs @@ -23,7 +23,6 @@ namespace IRaCIS.Application.Contracts public string Password { get; set; } = string.Empty; public Guid? UserId { get; set; } - public string MFACode { get; set; } = string.Empty; } public class LoginReturnDTO diff --git a/IRaCIS.Core.Application/Service/Management/Interface/IUserService.cs b/IRaCIS.Core.Application/Service/Management/Interface/IUserService.cs index ddf76bd63..873fced43 100644 --- a/IRaCIS.Core.Application/Service/Management/Interface/IUserService.cs +++ b/IRaCIS.Core.Application/Service/Management/Interface/IUserService.cs @@ -13,7 +13,7 @@ namespace IRaCIS.Application.Services Task VerifyMFACodeAsync(Guid userId, string Code); Task SendMFAEmail(Guid userId); - Task GetUserBasicInfo(Guid userId); + Task GetUserBasicInfo(Guid userId,string pwd); Task ModifyPassword(EditPasswordCommand editPwModel); Task ResetPassword(Guid userId); diff --git a/IRaCIS.Core.Application/Service/Management/UserService.cs b/IRaCIS.Core.Application/Service/Management/UserService.cs index 972ffcc93..ab4a221c2 100644 --- a/IRaCIS.Core.Application/Service/Management/UserService.cs +++ b/IRaCIS.Core.Application/Service/Management/UserService.cs @@ -642,9 +642,9 @@ namespace IRaCIS.Application.Services } - public async Task GetUserBasicInfo(Guid userId) + public async Task GetUserBasicInfo(Guid userId, string pwd) { - var info = await _userRepository.Where(u => u.Id == userId).ProjectTo(_mapper.ConfigurationProvider).FirstNotNullAsync(); + var info = await _userRepository.Where(u => u.Id == userId && u.Password==pwd).ProjectTo(_mapper.ConfigurationProvider).FirstNotNullAsync(); return info; }