修改登录逻辑
continuous-integration/drone/push Build is passing Details

IRC_NewDev
hang 2024-06-12 10:50:18 +08:00
parent f324d207dd
commit c49cf0ed12
5 changed files with 51 additions and 18 deletions

View File

@ -108,15 +108,16 @@ namespace IRaCIS.Api.Controllers
{ {
//MFA 邮箱验证 前端传递用户Id 和MFACode //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; 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<UserBasicInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
var basicInfo = await _userService.GetUserBasicInfo(userId); var basicInfo = await _userService.GetUserBasicInfo(userId, loginUser.Password);
var loginReturn = new LoginReturnDTO() { BasicInfo = basicInfo }; var loginReturn = new LoginReturnDTO() { BasicInfo = basicInfo };

View File

@ -29,12 +29,13 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
{ {
private readonly IEasyCachingProvider _provider; private readonly IEasyCachingProvider _provider;
private readonly IRepository<SystemAnonymization> _systemAnonymizationRepository; private readonly IRepository<SystemAnonymization> _systemAnonymizationRepository;
private readonly IRepository<VisitTask> _visitTaskRepository;
private readonly IRepository<SubjectVisit> _subjectVisitRepository; private readonly IRepository<SubjectVisit> _subjectVisitRepository;
private readonly IOSSService _oSSService; private readonly IOSSService _oSSService;
private readonly IRepository<StudyMonitor> _studyMonitorRepository; private readonly IRepository<StudyMonitor> _studyMonitorRepository;
private readonly IDistributedLockProvider _distributedLockProvider; private readonly IDistributedLockProvider _distributedLockProvider;
public DownloadAndUploadService(IEasyCachingProvider provider, IRepository<SystemAnonymization> systemAnonymizationRepository, IRepository<SubjectVisit> subjectVisitRepository, IOSSService oSSService, public DownloadAndUploadService(IEasyCachingProvider provider, IRepository<SystemAnonymization> systemAnonymizationRepository, IRepository<SubjectVisit> subjectVisitRepository, IOSSService oSSService,
IRepository<StudyMonitor> studyMonitorRepository, IDistributedLockProvider distributedLockProvider) IRepository<StudyMonitor> studyMonitorRepository, IDistributedLockProvider distributedLockProvider, IRepository<VisitTask> visitTaskRepository)
{ {
_systemAnonymizationRepository = systemAnonymizationRepository; _systemAnonymizationRepository = systemAnonymizationRepository;
@ -44,6 +45,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
_studyMonitorRepository = studyMonitorRepository; _studyMonitorRepository = studyMonitorRepository;
_distributedLockProvider = distributedLockProvider; _distributedLockProvider = distributedLockProvider;
_provider = provider; _provider = provider;
_visitTaskRepository = visitTaskRepository;
} }
/// <summary> /// <summary>
@ -52,9 +54,39 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
/// 根据当前受试者该标准已阅任务数量(生效失效的任务都算,考虑重阅,最后编号不重复) 第一个就是TimePoint Ran1后面依次随机挑选出来的阅片序号依次递增 /// 根据当前受试者该标准已阅任务数量(生效失效的任务都算,考虑重阅,最后编号不重复) 第一个就是TimePoint Ran1后面依次随机挑选出来的阅片序号依次递增
/// </summary> /// </summary>
/// <param name="subjectId"></param> /// <param name="subjectId"></param>
/// <param name="trialReadingCriterionId"></param>
/// <returns></returns> /// <returns></returns>
public async Task<IResponseOutput> SubejctRandomReadingTaskNameDeal(Guid subjectId) public async Task<IResponseOutput> 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<int> 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(); return ResponseOutput.Ok();
} }
@ -62,10 +94,11 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
/// 获取该受试者任务上传列表(展示已上传情况) /// 获取该受试者任务上传列表(展示已上传情况)
/// </summary> /// </summary>
/// <param name="subjectId"></param> /// <param name="subjectId"></param>
/// <param name="trialReadingCriterionId"></param>
/// <returns></returns> /// <returns></returns>
public async Task<IResponseOutput<List<SubjectImageUploadDTO>>> GetSubjectImageUploadList(Guid subjectId) public async Task<IResponseOutput<List<SubjectImageUploadDTO>>> GetSubjectImageUploadList(Guid subjectId,Guid trialReadingCriterionId)
{ {
var query = _repository.Where<VisitTask>(t => t.SubjectId == subjectId && t.SourceSubjectVisitId != null && t.DoctorUserId == _userInfo.Id) var query = _repository.Where<VisitTask>(t => t.SubjectId == subjectId &&t.TrialReadingCriterionId== trialReadingCriterionId && t.SourceSubjectVisitId != null && t.DoctorUserId == _userInfo.Id)
.Select(u => new SubjectImageUploadDTO() .Select(u => new SubjectImageUploadDTO()
{ {
VisitTaskId = u.Id, VisitTaskId = u.Id,

View File

@ -23,7 +23,6 @@ namespace IRaCIS.Application.Contracts
public string Password { get; set; } = string.Empty; public string Password { get; set; } = string.Empty;
public Guid? UserId { get; set; } public Guid? UserId { get; set; }
public string MFACode { get; set; } = string.Empty;
} }
public class LoginReturnDTO public class LoginReturnDTO

View File

@ -13,7 +13,7 @@ namespace IRaCIS.Application.Services
Task<IResponseOutput> VerifyMFACodeAsync(Guid userId, string Code); Task<IResponseOutput> VerifyMFACodeAsync(Guid userId, string Code);
Task<IResponseOutput> SendMFAEmail(Guid userId); Task<IResponseOutput> SendMFAEmail(Guid userId);
Task<UserBasicInfo> GetUserBasicInfo(Guid userId); Task<UserBasicInfo> GetUserBasicInfo(Guid userId,string pwd);
Task<IResponseOutput> ModifyPassword(EditPasswordCommand editPwModel); Task<IResponseOutput> ModifyPassword(EditPasswordCommand editPwModel);
Task<IResponseOutput> ResetPassword(Guid userId); Task<IResponseOutput> ResetPassword(Guid userId);

View File

@ -642,9 +642,9 @@ namespace IRaCIS.Application.Services
} }
public async Task<UserBasicInfo> GetUserBasicInfo(Guid userId) public async Task<UserBasicInfo> GetUserBasicInfo(Guid userId, string pwd)
{ {
var info = await _userRepository.Where(u => u.Id == userId).ProjectTo<UserBasicInfo>(_mapper.ConfigurationProvider).FirstNotNullAsync(); var info = await _userRepository.Where(u => u.Id == userId && u.Password==pwd).ProjectTo<UserBasicInfo>(_mapper.ConfigurationProvider).FirstNotNullAsync();
return info; return info;
} }