合并
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
commit
77b45e80fe
|
@ -254,7 +254,7 @@ namespace IRaCIS.Api.Controllers
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//正常登录才发送邮件
|
//正常登录才发送邮件
|
||||||
await _userService.SendMFAEmail(userId);
|
await _userService.SendMFAEmail(new Core.Application.ViewModel.SendMfaCommand() { IdentityUserId= userId });
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -489,14 +489,6 @@
|
||||||
<param name="applyReReadingCommand"></param>
|
<param name="applyReReadingCommand"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Service.Allocation.VisitTaskService.ReReadingTaskTrackingDeal(IRaCIS.Core.Domain.Models.VisitTask,IRaCIS.Core.Application.ViewModel.ConfirmReReadingCommand)">
|
|
||||||
<summary>
|
|
||||||
重阅原任务跟踪处理
|
|
||||||
</summary>
|
|
||||||
<param name="origenalTask"></param>
|
|
||||||
<param name="agreeReReadingCommand"></param>
|
|
||||||
<exception cref="T:IRaCIS.Core.Infrastructure.BusinessValidationFailedException"></exception>
|
|
||||||
</member>
|
|
||||||
<member name="M:IRaCIS.Core.Application.Service.Allocation.VisitTaskService.PMReReadingConfirmOrBackInfluenceAnalysisAsync(System.Guid)">
|
<member name="M:IRaCIS.Core.Application.Service.Allocation.VisitTaskService.PMReReadingConfirmOrBackInfluenceAnalysisAsync(System.Guid)">
|
||||||
<summary>
|
<summary>
|
||||||
PM 申请重阅 被同意 或者 PM 直接退回的时候影响
|
PM 申请重阅 被同意 或者 PM 直接退回的时候影响
|
||||||
|
@ -2269,19 +2261,16 @@
|
||||||
<param name="model"></param>
|
<param name="model"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Service.UserService.SendMFAEmail(System.Guid,IRaCIS.Core.Domain.Share.UserMFAType)">
|
<member name="M:IRaCIS.Core.Application.Service.UserService.SendMFAEmail(IRaCIS.Core.Application.ViewModel.SendMfaCommand)">
|
||||||
<summary>
|
<summary>
|
||||||
发送MFA 验证邮件
|
发送MFA 验证邮件
|
||||||
</summary>
|
</summary>
|
||||||
<param name="identityUserId"></param>
|
|
||||||
<param name="mfaType"></param>
|
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Service.UserService.VerifyMFACodeAsync(System.Guid,System.String)">
|
<member name="M:IRaCIS.Core.Application.Service.UserService.VerifyMFACodeAsync(System.String)">
|
||||||
<summary>
|
<summary>
|
||||||
验证MFA 邮件
|
验证MFA 邮件
|
||||||
</summary>
|
</summary>
|
||||||
<param name="identityUserId"></param>
|
|
||||||
<param name="Code"></param>
|
<param name="Code"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
<exception cref="T:IRaCIS.Core.Infrastructure.BusinessValidationFailedException"></exception>
|
<exception cref="T:IRaCIS.Core.Infrastructure.BusinessValidationFailedException"></exception>
|
||||||
|
@ -16129,7 +16118,7 @@
|
||||||
SystemDocumentService
|
SystemDocumentService
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Services.SystemDocumentService.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SystemDocument},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.UserRole},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SystemDocConfirmedIdentityUser},AutoMapper.IMapper,IRaCIS.Core.Domain.Share.IUserInfo,Microsoft.Extensions.Localization.IStringLocalizer)">
|
<member name="M:IRaCIS.Core.Application.Services.SystemDocumentService.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SystemDocument},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.UserRole},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.IdentityUser},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SystemDocConfirmedIdentityUser},AutoMapper.IMapper,IRaCIS.Core.Domain.Share.IUserInfo,Microsoft.Extensions.Localization.IStringLocalizer)">
|
||||||
<summary>
|
<summary>
|
||||||
SystemDocumentService
|
SystemDocumentService
|
||||||
</summary>
|
</summary>
|
||||||
|
|
|
@ -1325,6 +1325,16 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
|
||||||
var criterionConfig = (await _trialReadingCriterionRepository.Where(x => x.Id == trialReadingCriterionId).Select(x => new { x.ReadingTool, x.IsAutoCreate, x.IsReadingTaskViewInOrder }).FirstOrDefaultAsync()).IfNullThrowException();
|
var criterionConfig = (await _trialReadingCriterionRepository.Where(x => x.Id == trialReadingCriterionId).Select(x => new { x.ReadingTool, x.IsAutoCreate, x.IsReadingTaskViewInOrder }).FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
|
|
||||||
|
var isSPMJoinReReadingApproval = _trialRepository.Any(t => t.Id == trialId && t.IsSPMJoinReReadingApproval);
|
||||||
|
|
||||||
|
var hasSPMOrCPM = await _trialRepository.Where(t => t.Id == trialId).SelectMany(t => t.TrialIdentityUserList).AnyAsync(t => t.TrialUserRoleList.Any(t =>
|
||||||
|
t.UserRole.IdentityUser.Status == UserStateEnum.Enable
|
||||||
|
&& t.UserRole.IsUserRoleDisabled == false
|
||||||
|
&& (t.UserRole.UserTypeEnum == UserTypeEnum.SPM || t.UserRole.UserTypeEnum == UserTypeEnum.CPM)
|
||||||
|
));
|
||||||
|
|
||||||
|
var isSPMjoin = isSPMJoinReReadingApproval && hasSPMOrCPM;
|
||||||
|
|
||||||
foreach (var task in taskList)
|
foreach (var task in taskList)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -1486,7 +1496,18 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//pm 申请重阅,并且SPM不参与,那么不增加申请记录,直接退回
|
||||||
|
if (!isSPMjoin && IsPMOrAPm())
|
||||||
|
{
|
||||||
|
//不想看到申请记录
|
||||||
|
foreach (var item in applyReReadingCommand.TaskIdList)
|
||||||
|
{
|
||||||
|
await AgreeReReading(item, RequestReReadingType.TrialGroupApply, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
var rootReReadingTaskId = _visitTaskReReadingRepository.Where(t => t.NewReReadingTaskId == task.Id).Select(u => u.RootReReadingTaskId).FirstOrDefault();
|
var rootReReadingTaskId = _visitTaskReReadingRepository.Where(t => t.NewReReadingTaskId == task.Id).Select(u => u.RootReReadingTaskId).FirstOrDefault();
|
||||||
|
|
||||||
//添加申请记录
|
//添加申请记录
|
||||||
|
@ -1506,56 +1527,17 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
await _visitTaskRepository.SaveChangesAsync();
|
|
||||||
|
|
||||||
#region 处理SPM 是否参与审批流程
|
|
||||||
|
|
||||||
var isSPMJoinReReadingApproval = _trialRepository.Any(t => t.Id == trialId && t.IsSPMJoinReReadingApproval);
|
|
||||||
|
|
||||||
var hasSPMOrCPM = await _trialRepository.Where(t => t.Id == trialId).SelectMany(t => t.TrialIdentityUserList).AnyAsync(t => t.TrialUserRoleList.Any(t => t.UserRole.UserTypeEnum == UserTypeEnum.SPM || t.UserRole.UserTypeEnum == UserTypeEnum.CPM));
|
|
||||||
|
|
||||||
var isSPMjoin = isSPMJoinReReadingApproval && hasSPMOrCPM;
|
|
||||||
|
|
||||||
if (!isSPMjoin && IsPMOrAPm())
|
|
||||||
{
|
|
||||||
var requestRecordList = await _visitTaskReReadingRepository.Where(t => applyReReadingCommand.TaskIdList.Contains(t.OriginalReReadingTaskId) && t.RequestReReadingUserId == _userInfo.UserRoleId).ToListAsync();
|
|
||||||
|
|
||||||
await ConfirmReReading(new ConfirmReReadingCommand()
|
|
||||||
{
|
|
||||||
TrialId = trialId,
|
|
||||||
RequestReReadingResultEnum = RequestReReadingResult.Agree,
|
|
||||||
ConfirmReReadingList = requestRecordList.Select(t => new ConfirmReReadingDTO() { Id = t.Id, OriginalReReadingTaskId = t.OriginalReReadingTaskId }).ToList()
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
|
await _visitTaskRepository.SaveChangesAsync();
|
||||||
|
|
||||||
|
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 重阅原任务跟踪处理
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="origenalTask"></param>
|
|
||||||
/// <param name="agreeReReadingCommand"></param>
|
|
||||||
/// <exception cref="BusinessValidationFailedException"></exception>
|
|
||||||
private void ReReadingTaskTrackingDeal(VisitTask origenalTask, ConfirmReReadingCommand agreeReReadingCommand)
|
|
||||||
{
|
|
||||||
if (origenalTask.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed || origenalTask.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed)
|
|
||||||
{
|
|
||||||
origenalTask.ReReadingApplyState = agreeReReadingCommand.RequestReReadingResultEnum == RequestReReadingResult.Agree ? ReReadingApplyState.Agree : ReReadingApplyState.Reject;
|
|
||||||
origenalTask.TaskState = agreeReReadingCommand.RequestReReadingResultEnum == RequestReReadingResult.Agree ? TaskState.HaveReturned : origenalTask.TaskState;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//---当前重阅任务状态不为已申请状态,不允许进行处理,请刷新页面
|
|
||||||
throw new BusinessValidationFailedException(_localizer["VisitTask_InvalidReapplyStatus"]);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task SetMedicalReviewInvalidAsync(List<VisitTask> influenceTaskList, bool isPMApply = true)
|
private async Task SetMedicalReviewInvalidAsync(List<VisitTask> influenceTaskList, bool isPMApply = true)
|
||||||
{
|
{
|
||||||
|
@ -1626,12 +1608,9 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
|
||||||
await _visitTaskReReadingRepository.BatchUpdateNoTrackingAsync(t => t.Id == item.Id, u => new VisitTaskReReading() { RequestReReadingConfirmUserId = _userInfo.UserRoleId, RequestReReadingResultEnum = RequestReReadingResult.Invalid });
|
await _visitTaskReReadingRepository.BatchUpdateNoTrackingAsync(t => t.Id == item.Id, u => new VisitTaskReReading() { RequestReReadingConfirmUserId = _userInfo.UserRoleId, RequestReReadingResultEnum = RequestReReadingResult.Invalid });
|
||||||
|
|
||||||
//---当前申请重阅任务的状态,已被其他任务重阅已影响,不允许对该状态下的任务进行重阅同意与否操作
|
//---当前申请重阅任务的状态,已被其他任务重阅已影响,不允许对该状态下的任务进行重阅同意与否操作
|
||||||
return ResponseOutput.Ok(string.Empty, msg: _localizer["VisitTask_ReapplyStatusConflict"]);
|
throw new BusinessValidationFailedException(_localizer["VisitTask_ReapplyStatusConflict"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var criterionConfig = await _trialReadingCriterionRepository.Where(x => x.Id == origenalTask.TrialReadingCriterionId).Select(x => new { x.ReadingTool, x.CriterionType, x.IsAdditionalAssessment, x.IsReadingTaskViewInOrder }).FirstOrDefaultAsync();
|
|
||||||
|
|
||||||
//更新申请信息
|
//更新申请信息
|
||||||
var visitTaskReReadingAppply = await _visitTaskReReadingRepository.FirstOrDefaultAsync(t => t.Id == item.Id);
|
var visitTaskReReadingAppply = await _visitTaskReReadingRepository.FirstOrDefaultAsync(t => t.Id == item.Id);
|
||||||
visitTaskReReadingAppply.RequestReReadingConfirmUserId = _userInfo.UserRoleId;
|
visitTaskReReadingAppply.RequestReReadingConfirmUserId = _userInfo.UserRoleId;
|
||||||
|
@ -1639,7 +1618,73 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
|
||||||
visitTaskReReadingAppply.RequestReReadingRejectReason = agreeReReadingCommand.RequestReReadingRejectReason;
|
visitTaskReReadingAppply.RequestReReadingRejectReason = agreeReReadingCommand.RequestReReadingRejectReason;
|
||||||
|
|
||||||
|
|
||||||
Expression<Func<VisitTask, bool>> filterExpression = t => t.TrialId == trialId && t.SubjectId == origenalTask.SubjectId && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze) && t.TaskAllocationState == TaskAllocationState.Allocated;
|
|
||||||
|
|
||||||
|
if (agreeReReadingCommand.RequestReReadingResultEnum == RequestReReadingResult.Agree)
|
||||||
|
{
|
||||||
|
|
||||||
|
await AgreeReReading(origenalTask.Id, visitTaskReReadingAppply.RequestReReadingType, visitTaskReReadingAppply);
|
||||||
|
|
||||||
|
//找到跟踪的实体
|
||||||
|
var influenceTask = await _visitTaskRepository.FindAsync(origenalTask.Id);
|
||||||
|
|
||||||
|
if (origenalTask.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed || origenalTask.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed)
|
||||||
|
{
|
||||||
|
influenceTask.ReReadingApplyState = agreeReReadingCommand.RequestReReadingResultEnum == RequestReReadingResult.Agree ? ReReadingApplyState.Agree : ReReadingApplyState.Reject;
|
||||||
|
influenceTask.TaskState = agreeReReadingCommand.RequestReReadingResultEnum == RequestReReadingResult.Agree ? TaskState.HaveReturned : origenalTask.TaskState;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//---当前重阅任务状态不为已申请状态,不允许进行处理,请刷新页面
|
||||||
|
throw new BusinessValidationFailedException(_localizer["VisitTask_InvalidReapplyStatus"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (agreeReReadingCommand.RequestReReadingResultEnum == RequestReReadingResult.Reject)
|
||||||
|
{
|
||||||
|
if (origenalTask.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed || origenalTask.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed)
|
||||||
|
{
|
||||||
|
await _visitTaskRepository.UpdatePartialFromQueryAsync(t => t.Id == origenalTask.Id, u => new VisitTask()
|
||||||
|
{
|
||||||
|
ReReadingApplyState = ReReadingApplyState.Reject
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//---当前重阅任务状态不为已申请状态,不允许进行处理,请刷新页面
|
||||||
|
throw new BusinessValidationFailedException(_localizer["VisitTask_InvalidReapplyStatus"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
await _visitTaskRepository.SaveChangesAsync();
|
||||||
|
|
||||||
|
return ResponseOutput.Ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task AgreeReReading(Guid visiTaskId, RequestReReadingType requestReReadingType, VisitTaskReReading? visitTaskReReadingAppply = null)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
var origenalTask = (await _visitTaskRepository.Where(t => t.Id == visiTaskId).FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
var trialId = origenalTask.TrialId;
|
||||||
|
|
||||||
|
|
||||||
|
var criterionConfig = await _trialReadingCriterionRepository.Where(x => x.Id == origenalTask.TrialReadingCriterionId).Select(x => new { x.ReadingTool, x.CriterionType, x.IsAdditionalAssessment, x.IsReadingTaskViewInOrder }).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
|
||||||
|
Expression<Func<VisitTask, bool>> filterExpression = t => t.TrialId == trialId && t.SubjectId == origenalTask.SubjectId && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze) /*&& t.TaskAllocationState == TaskAllocationState.Allocated*/;
|
||||||
|
|
||||||
//是否是一致性分析任务 正常申请 会影响一致性分析任务
|
//是否是一致性分析任务 正常申请 会影响一致性分析任务
|
||||||
filterExpression = filterExpression.And(t => t.IsAnalysisCreate == origenalTask.IsAnalysisCreate);
|
filterExpression = filterExpression.And(t => t.IsAnalysisCreate == origenalTask.IsAnalysisCreate);
|
||||||
|
@ -1653,7 +1698,7 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
|
||||||
if (criterionConfig.CriterionType == CriterionType.RECIST1Point1 && criterionConfig.IsAdditionalAssessment)
|
if (criterionConfig.CriterionType == CriterionType.RECIST1Point1 && criterionConfig.IsAdditionalAssessment)
|
||||||
{
|
{
|
||||||
// PM申请 SPM / CPM审批
|
// PM申请 SPM / CPM审批
|
||||||
if (visitTaskReReadingAppply.RequestReReadingType == RequestReReadingType.TrialGroupApply)
|
if (requestReReadingType == RequestReReadingType.TrialGroupApply)
|
||||||
{
|
{
|
||||||
filterExpression = filterExpression.And(t => t.TrialReadingCriterionId == origenalTask.TrialReadingCriterionId || t.TrialReadingCriterion.CriterionType == CriterionType.RECIST1Pointt1_MB);
|
filterExpression = filterExpression.And(t => t.TrialReadingCriterionId == origenalTask.TrialReadingCriterionId || t.TrialReadingCriterion.CriterionType == CriterionType.RECIST1Pointt1_MB);
|
||||||
}
|
}
|
||||||
|
@ -1681,11 +1726,8 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
|
||||||
filterExpression = filterExpression.And(t => t.TrialReadingCriterionId == origenalTask.TrialReadingCriterionId);
|
filterExpression = filterExpression.And(t => t.TrialReadingCriterionId == origenalTask.TrialReadingCriterionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (agreeReReadingCommand.RequestReReadingResultEnum == RequestReReadingResult.Agree)
|
|
||||||
{
|
|
||||||
//PM申请 SPM / CPM审批 回退访视,因此这里不生成访视任务 影响多个标准的任务
|
//PM申请 SPM / CPM审批 回退访视,因此这里不生成访视任务 影响多个标准的任务
|
||||||
if (visitTaskReReadingAppply.RequestReReadingType == RequestReReadingType.TrialGroupApply)
|
if (requestReReadingType == RequestReReadingType.TrialGroupApply)
|
||||||
{
|
{
|
||||||
|
|
||||||
// 不管有序 无序 都会 回退访视
|
// 不管有序 无序 都会 回退访视
|
||||||
|
@ -1723,7 +1765,6 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
|
||||||
//处理申请的任务
|
//处理申请的任务
|
||||||
if (influenceTask.Id == origenalTask.Id)
|
if (influenceTask.Id == origenalTask.Id)
|
||||||
{
|
{
|
||||||
ReReadingTaskTrackingDeal(influenceTask, agreeReReadingCommand);
|
|
||||||
|
|
||||||
await InfluenceAddtioncalEvaluationCritrionAsync(origenalTask, influenceTaskList.Where(t => t.Id != origenalTask.Id).Where(t => t.SourceSubjectVisitId != null).Select(t => t.SourceSubjectVisitId!.Value).Distinct().ToList());
|
await InfluenceAddtioncalEvaluationCritrionAsync(origenalTask, influenceTaskList.Where(t => t.Id != origenalTask.Id).Where(t => t.SourceSubjectVisitId != null).Select(t => t.SourceSubjectVisitId!.Value).Distinct().ToList());
|
||||||
|
|
||||||
|
@ -1773,7 +1814,6 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
|
||||||
//处理申请的任务
|
//处理申请的任务
|
||||||
if (influenceTask.Id == origenalTask.Id)
|
if (influenceTask.Id == origenalTask.Id)
|
||||||
{
|
{
|
||||||
ReReadingTaskTrackingDeal(influenceTask, agreeReReadingCommand);
|
|
||||||
|
|
||||||
|
|
||||||
await PMReReadingConfirmOrBackInfluenceAnalysisAsync(origenalTask.SubjectId);
|
await PMReReadingConfirmOrBackInfluenceAnalysisAsync(origenalTask.SubjectId);
|
||||||
|
@ -1805,7 +1845,7 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
|
||||||
|
|
||||||
}
|
}
|
||||||
//IR申请 PM 审批 注意这里有一致性分析的申请同意 不会回退访视,在此要生成影响的访视任务
|
//IR申请 PM 审批 注意这里有一致性分析的申请同意 不会回退访视,在此要生成影响的访视任务
|
||||||
else if (visitTaskReReadingAppply.RequestReReadingType == RequestReReadingType.DocotorApply && (IsPMOrAPm() || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.AIR))
|
else if (requestReReadingType == RequestReReadingType.DocotorApply && (IsPMOrAPm() || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.AIR))
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
@ -1924,7 +1964,6 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
|
||||||
//处理申请的任务
|
//处理申请的任务
|
||||||
if (influenceTask.Id == origenalTask.Id)
|
if (influenceTask.Id == origenalTask.Id)
|
||||||
{
|
{
|
||||||
ReReadingTaskTrackingDeal(influenceTask, agreeReReadingCommand);
|
|
||||||
|
|
||||||
|
|
||||||
await SetMedicalReviewInvalidAsync(influenceTaskList, false);
|
await SetMedicalReviewInvalidAsync(influenceTaskList, false);
|
||||||
|
@ -1991,8 +2030,7 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
|
||||||
//同步才可以
|
//同步才可以
|
||||||
Action = (newTask) =>
|
Action = (newTask) =>
|
||||||
{
|
{
|
||||||
//申请表 设置新任务Id
|
|
||||||
visitTaskReReadingAppply.NewReReadingTaskId = newTask.Id;
|
|
||||||
|
|
||||||
//生成的任务分配给原始医生
|
//生成的任务分配给原始医生
|
||||||
newTask.DoctorUserId = origenalTask.DoctorUserId;
|
newTask.DoctorUserId = origenalTask.DoctorUserId;
|
||||||
|
@ -2000,6 +2038,11 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
|
||||||
newTask.AllocateTime = DateTime.Now;
|
newTask.AllocateTime = DateTime.Now;
|
||||||
newTask.SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget);
|
newTask.SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget);
|
||||||
|
|
||||||
|
if (visitTaskReReadingAppply != null)
|
||||||
|
{
|
||||||
|
//申请表 设置新任务Id
|
||||||
|
visitTaskReReadingAppply.NewReReadingTaskId = newTask.Id;
|
||||||
|
|
||||||
//拷贝原始表单
|
//拷贝原始表单
|
||||||
if (visitTaskReReadingAppply.IsCopyOrigenalForms && influenceTask.Id == origenalTask.Id)
|
if (visitTaskReReadingAppply.IsCopyOrigenalForms && influenceTask.Id == origenalTask.Id)
|
||||||
{
|
{
|
||||||
|
@ -2021,6 +2064,7 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -2056,7 +2100,6 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
|
||||||
//申请原任务处理
|
//申请原任务处理
|
||||||
if (influenceTask.Id == origenalTask.Id)
|
if (influenceTask.Id == origenalTask.Id)
|
||||||
{
|
{
|
||||||
ReReadingTaskTrackingDeal(influenceTask, agreeReReadingCommand);
|
|
||||||
|
|
||||||
await SetMedicalReviewInvalidAsync(influenceTaskList, false);
|
await SetMedicalReviewInvalidAsync(influenceTaskList, false);
|
||||||
|
|
||||||
|
@ -2093,8 +2136,7 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
|
||||||
//同步才可以
|
//同步才可以
|
||||||
Action = (newTask) =>
|
Action = (newTask) =>
|
||||||
{
|
{
|
||||||
//申请表 设置新任务Id
|
|
||||||
visitTaskReReadingAppply.NewReReadingTaskId = newTask.Id;
|
|
||||||
|
|
||||||
////生成的任务分配给原始医生
|
////生成的任务分配给原始医生
|
||||||
newTask.DoctorUserId = origenalTask.DoctorUserId;
|
newTask.DoctorUserId = origenalTask.DoctorUserId;
|
||||||
|
@ -2105,6 +2147,10 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
|
||||||
|
|
||||||
//裁判任务 需要进行特殊处理 在重阅逻辑里面处理
|
//裁判任务 需要进行特殊处理 在重阅逻辑里面处理
|
||||||
|
|
||||||
|
if (visitTaskReReadingAppply != null)
|
||||||
|
{
|
||||||
|
//申请表 设置新任务Id
|
||||||
|
visitTaskReReadingAppply.NewReReadingTaskId = newTask.Id;
|
||||||
|
|
||||||
if (visitTaskReReadingAppply.IsCopyOrigenalForms && influenceTask.Id == origenalTask.Id)
|
if (visitTaskReReadingAppply.IsCopyOrigenalForms && influenceTask.Id == origenalTask.Id)
|
||||||
{
|
{
|
||||||
|
@ -2125,8 +2171,7 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -2143,37 +2188,6 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
|
||||||
//---不符合 PM申请 SPM / CPM审批 | IR申请 PM 审批
|
//---不符合 PM申请 SPM / CPM审批 | IR申请 PM 审批
|
||||||
throw new BusinessValidationFailedException(_localizer["VisitTask_ReReadTaskAlreadyAffected"]);
|
throw new BusinessValidationFailedException(_localizer["VisitTask_ReReadTaskAlreadyAffected"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
else if (agreeReReadingCommand.RequestReReadingResultEnum == RequestReReadingResult.Reject)
|
|
||||||
{
|
|
||||||
if (origenalTask.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed || origenalTask.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed)
|
|
||||||
{
|
|
||||||
await _visitTaskRepository.UpdatePartialFromQueryAsync(t => t.Id == origenalTask.Id, u => new VisitTask()
|
|
||||||
{
|
|
||||||
ReReadingApplyState = ReReadingApplyState.Reject
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//---当前重阅任务状态不为已申请状态,不允许进行处理,请刷新页面
|
|
||||||
throw new BusinessValidationFailedException(_localizer["VisitTask_InvalidReapplyStatus"]);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
await _visitTaskRepository.SaveChangesAsync();
|
|
||||||
|
|
||||||
return ResponseOutput.Ok();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CopyForms(VisitTask newTask, VisitTask origenalTask)
|
private void CopyForms(VisitTask newTask, VisitTask origenalTask)
|
||||||
|
@ -2602,7 +2616,7 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
|
||||||
|
|
||||||
var criterionConfig = (await _trialReadingCriterionRepository.Where(x => x.Id == filterObj.TrialReadingCriterionId).Select(x => new { x.ReadingTool, x.CriterionType, x.IsAdditionalAssessment, x.IsReadingTaskViewInOrder }).FirstOrDefaultAsync()).IfNullThrowException();
|
var criterionConfig = (await _trialReadingCriterionRepository.Where(x => x.Id == filterObj.TrialReadingCriterionId).Select(x => new { x.ReadingTool, x.CriterionType, x.IsAdditionalAssessment, x.IsReadingTaskViewInOrder }).FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
Expression<Func<VisitTask, bool>> filterExpression = t => t.TrialId == trialId && t.SubjectId == filterObj.SubjectId && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze) && t.TaskAllocationState == TaskAllocationState.Allocated;
|
Expression<Func<VisitTask, bool>> filterExpression = t => t.TrialId == trialId && t.SubjectId == filterObj.SubjectId && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze) /*&& t.TaskAllocationState == TaskAllocationState.Allocated*/;
|
||||||
|
|
||||||
//是否是一致性分析任务 (一致性分析的任务 不会产生裁判 肿瘤学 仅仅有生成的访视和全局)
|
//是否是一致性分析任务 (一致性分析的任务 不会产生裁判 肿瘤学 仅仅有生成的访视和全局)
|
||||||
|
|
||||||
|
|
|
@ -706,8 +706,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
var userTypeEnumList = emailConfigInfo.EmailNoticeUserTypeList.Where(t => t.EmailUserType == EmailUserType.To).Select(t => t.UserType).ToList();
|
var userTypeEnumList = emailConfigInfo.EmailNoticeUserTypeList.Where(t => t.EmailUserType == EmailUserType.To).Select(t => t.UserType).ToList();
|
||||||
|
|
||||||
var emailList = await _userRoleRepository.Where(t => userTypeEnumList.Contains(t.UserTypeEnum) &&
|
var emailList = await _userRoleRepository.Where(t => userTypeEnumList.Contains(t.UserTypeEnum) && t.IsUserRoleDisabled == false && t.IdentityUser.Status == UserStateEnum.Enable &&
|
||||||
(isHaveTrialId ? t.UserRoleTrials.Any(t => t.TrialId == feedBack.TrialId) : true)).Select(t => new { t.IdentityUser.EMail, t.UserTypeEnum, t.IdentityUser.FullName }).ToListAsync();
|
(isHaveTrialId ? t.IdentityUser.UserTrialList.Any(t => t.TrialId == feedBack.TrialId && t.TrialUserRoleList.Any(c => userTypeEnumList.Contains(c.UserRole.UserTypeEnum))) : true)).Select(t => new { t.IdentityUser.EMail, t.UserTypeEnum, t.IdentityUser.FullName }).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
foreach (var email in emailList)
|
foreach (var email in emailList)
|
||||||
|
|
|
@ -16,6 +16,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
[ApiExplorerSettings(GroupName = "Trial")]
|
[ApiExplorerSettings(GroupName = "Trial")]
|
||||||
public class SystemDocumentService(IRepository<SystemDocument> _systemDocumentRepository,
|
public class SystemDocumentService(IRepository<SystemDocument> _systemDocumentRepository,
|
||||||
IRepository<UserRole> _userRoleRepository,
|
IRepository<UserRole> _userRoleRepository,
|
||||||
|
IRepository<IdentityUser> _identityUserRepository,
|
||||||
IRepository<SystemDocConfirmedIdentityUser> _systemDocConfirmedUserRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, ISystemDocumentService
|
IRepository<SystemDocConfirmedIdentityUser> _systemDocConfirmedUserRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, ISystemDocumentService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -154,7 +155,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
join confirm in _systemDocConfirmedUserRepository.Where() on new { ConfirmUserId = _userInfo.IdentityUserId, SystemDocumentId = sysDoc.Id } equals new { confirm.ConfirmUserId, confirm.SystemDocumentId } into cc
|
join confirm in _systemDocConfirmedUserRepository.Where() on new { ConfirmUserId = _userInfo.IdentityUserId, SystemDocumentId = sysDoc.Id } equals new { confirm.ConfirmUserId, confirm.SystemDocumentId } into cc
|
||||||
from confirm in cc.DefaultIfEmpty()
|
from confirm in cc.DefaultIfEmpty()
|
||||||
|
|
||||||
join user in _userRoleRepository.Where() on _userInfo.UserRoleId equals user.Id
|
join user in _identityUserRepository.Where() on _userInfo.IdentityUserId equals user.Id
|
||||||
|
|
||||||
select new UnionDocumentWithConfirmInfoView()
|
select new UnionDocumentWithConfirmInfoView()
|
||||||
{
|
{
|
||||||
|
@ -180,11 +181,14 @@ namespace IRaCIS.Core.Application.Services
|
||||||
//UserTypeShortName = user.UserTypeRole.UserTypeShortName
|
//UserTypeShortName = user.UserTypeRole.UserTypeShortName
|
||||||
};
|
};
|
||||||
|
|
||||||
return await query.WhereIf(inQuery.IsSigned == true, t => t.ConfirmTime != null)
|
var list = await query.WhereIf(inQuery.IsSigned == true, t => t.ConfirmTime != null)
|
||||||
.WhereIf(inQuery.IsSigned == false, t => t.ConfirmTime == null)
|
.WhereIf(inQuery.IsSigned == false, t => t.ConfirmTime == null)
|
||||||
.ToPagedListAsync(inQuery);
|
.ToPagedListAsync(inQuery);
|
||||||
|
|
||||||
|
|
||||||
|
return list;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -228,7 +228,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
#region 统一用户修改
|
#region 统一用户修改
|
||||||
|
|
||||||
var systemDocQuery =
|
var systemDocQuery =
|
||||||
from sysDoc in _systemDocumentRepository.AsQueryable(false).Where(t => t.NeedConfirmedUserTypeList.Any(c => c.NeedConfirmUserTypeId == _userInfo.UserTypeId))
|
from sysDoc in _systemDocumentRepository.AsQueryable(true).Where(t => t.NeedConfirmedUserTypeList.Any(c => c.NeedConfirmUserTypeId == _userInfo.UserTypeId))
|
||||||
from trialUser in _trialIdentityUserRepository.AsQueryable(false)
|
from trialUser in _trialIdentityUserRepository.AsQueryable(false)
|
||||||
.Where(t => t.TrialId == inQuery.TrialId && t.IdentityUserId == _userInfo.IdentityUserId
|
.Where(t => t.TrialId == inQuery.TrialId && t.IdentityUserId == _userInfo.IdentityUserId
|
||||||
&& t.TrialUserRoleList.Any(t => sysDoc.NeedConfirmedUserTypeList.Any(c => c.NeedConfirmUserTypeId == t.UserRole.UserTypeId)))
|
&& t.TrialUserRoleList.Any(t => sysDoc.NeedConfirmedUserTypeList.Any(c => c.NeedConfirmUserTypeId == t.UserRole.UserTypeId)))
|
||||||
|
@ -266,7 +266,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
//项目文档查询
|
//项目文档查询
|
||||||
var trialDocQuery =
|
var trialDocQuery =
|
||||||
from trialDoc in _trialDocumentRepository.AsQueryable(false).Where(t => t.TrialId == inQuery.TrialId)
|
from trialDoc in _trialDocumentRepository.AsQueryable(true).Where(t => t.TrialId == inQuery.TrialId).Where(t => t.NeedConfirmedUserTypeList.Any(c => c.NeedConfirmUserTypeId == _userInfo.UserTypeId))
|
||||||
from trialUser in _trialIdentityUserRepository.AsQueryable(false).Where(t => t.TrialId == inQuery.TrialId && t.IdentityUserId == _userInfo.IdentityUserId
|
from trialUser in _trialIdentityUserRepository.AsQueryable(false).Where(t => t.TrialId == inQuery.TrialId && t.IdentityUserId == _userInfo.IdentityUserId
|
||||||
&& t.TrialUserRoleList.Any(t => trialDoc.NeedConfirmedUserTypeList.Any(c => c.NeedConfirmUserTypeId == t.UserRole.UserTypeId)))
|
&& t.TrialUserRoleList.Any(t => trialDoc.NeedConfirmedUserTypeList.Any(c => c.NeedConfirmUserTypeId == t.UserRole.UserTypeId)))
|
||||||
|
|
||||||
|
@ -396,6 +396,8 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
|
|
||||||
var unionQuery = systemDocQuery.Concat(trialDocQuery)
|
var unionQuery = systemDocQuery.Concat(trialDocQuery)
|
||||||
|
//过滤掉删除的,并且没有签名的
|
||||||
|
.Where(t=>!(t.IsDeleted == true && t.ConfirmTime==null))
|
||||||
.WhereIf(!string.IsNullOrEmpty(inQuery.Name), t => t.Name.Contains(inQuery.Name))
|
.WhereIf(!string.IsNullOrEmpty(inQuery.Name), t => t.Name.Contains(inQuery.Name))
|
||||||
.WhereIf(inQuery.FileTypeId != null, t => t.FileTypeId == inQuery.FileTypeId)
|
.WhereIf(inQuery.FileTypeId != null, t => t.FileTypeId == inQuery.FileTypeId)
|
||||||
.WhereIf(inQuery.IsSign == true, t => t.ConfirmTime != null)
|
.WhereIf(inQuery.IsSign == true, t => t.ConfirmTime != null)
|
||||||
|
@ -433,7 +435,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
.CountAsync();
|
.CountAsync();
|
||||||
|
|
||||||
|
|
||||||
var needSignSystemDocCount = await _systemDocumentRepository
|
var needSignSystemDocCount = await _systemDocumentRepository.AsQueryable(true)
|
||||||
.Where(t => t.IsDeleted == false && !t.SystemDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.IdentityUserId && t.ConfirmTime != null) && t.NeedConfirmedUserTypeList.Any(u => u.NeedConfirmUserTypeId == _userInfo.UserTypeId))
|
.Where(t => t.IsDeleted == false && !t.SystemDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.IdentityUserId && t.ConfirmTime != null) && t.NeedConfirmedUserTypeList.Any(u => u.NeedConfirmUserTypeId == _userInfo.UserTypeId))
|
||||||
.CountAsync();
|
.CountAsync();
|
||||||
|
|
||||||
|
@ -868,9 +870,9 @@ namespace IRaCIS.Core.Application.Services
|
||||||
var success = false;
|
var success = false;
|
||||||
if (isSystemDoc)
|
if (isSystemDoc)
|
||||||
{
|
{
|
||||||
if (!await _systemDocConfirmedUserRepository.AnyAsync(t => t.SystemDocumentId == documentId && t.ConfirmUserId == _userInfo.UserRoleId))
|
if (!await _systemDocConfirmedUserRepository.AnyAsync(t => t.SystemDocumentId == documentId && t.ConfirmUserId == _userInfo.IdentityUserId))
|
||||||
{
|
{
|
||||||
await _systemDocConfirmedUserRepository.AddAsync(new SystemDocConfirmedIdentityUser() { SystemDocumentId = documentId, ConfirmUserId = _userInfo.UserRoleId, SignFirstViewTime = DateTime.Now });
|
await _systemDocConfirmedUserRepository.AddAsync(new SystemDocConfirmedIdentityUser() { SystemDocumentId = documentId, ConfirmUserId = _userInfo.IdentityUserId, SignFirstViewTime = DateTime.Now });
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -878,10 +880,10 @@ namespace IRaCIS.Core.Application.Services
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!await _trialDocConfirmedUserRepository.AnyAsync(t => t.TrialDocumentId == documentId && t.ConfirmUserId == _userInfo.UserRoleId))
|
if (!await _trialDocConfirmedUserRepository.AnyAsync(t => t.TrialDocumentId == documentId && t.ConfirmUserId == _userInfo.IdentityUserId))
|
||||||
{
|
{
|
||||||
|
|
||||||
await _trialDocConfirmedUserRepository.AddAsync(new TrialDocConfirmedIdentityUser() { TrialDocumentId = documentId, ConfirmUserId = _userInfo.UserRoleId, SignFirstViewTime = DateTime.Now });
|
await _trialDocConfirmedUserRepository.AddAsync(new TrialDocConfirmedIdentityUser() { TrialDocumentId = documentId, ConfirmUserId = _userInfo.IdentityUserId, SignFirstViewTime = DateTime.Now });
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -896,9 +898,9 @@ namespace IRaCIS.Core.Application.Services
|
||||||
[HttpPut("{documentId:guid}")]
|
[HttpPut("{documentId:guid}")]
|
||||||
public async Task<IResponseOutput> SetSystemDocFirstViewTime(Guid documentId)
|
public async Task<IResponseOutput> SetSystemDocFirstViewTime(Guid documentId)
|
||||||
{
|
{
|
||||||
if (!await _systemDocConfirmedUserRepository.AnyAsync(t => t.SystemDocumentId == documentId && t.ConfirmUserId == _userInfo.UserRoleId))
|
if (!await _systemDocConfirmedUserRepository.AnyAsync(t => t.SystemDocumentId == documentId && t.ConfirmUserId == _userInfo.IdentityUserId))
|
||||||
{
|
{
|
||||||
await _systemDocConfirmedUserRepository.AddAsync(new SystemDocConfirmedIdentityUser() { SystemDocumentId = documentId, ConfirmUserId = _userInfo.UserRoleId, SignFirstViewTime = DateTime.Now });
|
await _systemDocConfirmedUserRepository.AddAsync(new SystemDocConfirmedIdentityUser() { SystemDocumentId = documentId, ConfirmUserId = _userInfo.IdentityUserId, SignFirstViewTime = DateTime.Now });
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -913,7 +915,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
if (!await _trialDocConfirmedUserRepository.AnyAsync(t => t.TrialDocumentId == documentId && t.ConfirmUserId == _userInfo.IdentityUserId))
|
if (!await _trialDocConfirmedUserRepository.AnyAsync(t => t.TrialDocumentId == documentId && t.ConfirmUserId == _userInfo.IdentityUserId))
|
||||||
{
|
{
|
||||||
|
|
||||||
await _trialDocConfirmedUserRepository.AddAsync(new TrialDocConfirmedIdentityUser() { TrialDocumentId = documentId, ConfirmUserId = _userInfo.UserRoleId, SignFirstViewTime = DateTime.Now });
|
await _trialDocConfirmedUserRepository.AddAsync(new TrialDocConfirmedIdentityUser() { TrialDocumentId = documentId, ConfirmUserId = _userInfo.IdentityUserId, SignFirstViewTime = DateTime.Now });
|
||||||
|
|
||||||
}
|
}
|
||||||
var success = await _trialDocConfirmedUserRepository.SaveChangesAsync();
|
var success = await _trialDocConfirmedUserRepository.SaveChangesAsync();
|
||||||
|
@ -932,7 +934,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
if (userConfirmCommand.isSystemDoc)
|
if (userConfirmCommand.isSystemDoc)
|
||||||
{
|
{
|
||||||
|
|
||||||
var sysDocConfirm = await _systemDocConfirmedUserRepository.FirstOrDefaultAsync(t => t.SystemDocumentId == userConfirmCommand.DocumentId && t.ConfirmUserId == _userInfo.UserRoleId, true);
|
var sysDocConfirm = await _systemDocConfirmedUserRepository.FirstOrDefaultAsync(t => t.SystemDocumentId == userConfirmCommand.DocumentId && t.ConfirmUserId == _userInfo.IdentityUserId, true);
|
||||||
|
|
||||||
if (sysDocConfirm.ConfirmTime != null)
|
if (sysDocConfirm.ConfirmTime != null)
|
||||||
{
|
{
|
||||||
|
|
|
@ -321,6 +321,16 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//项目配置的影像部位
|
||||||
|
var trialBodyPartList = _trialRepository.Where(t => t.Id == trialId).SelectMany(t => t.TrialBodyPartList).ToList();
|
||||||
|
|
||||||
|
if (trialBodyPartList.Count() == 1)
|
||||||
|
{
|
||||||
|
var first = trialBodyPartList.First();
|
||||||
|
findStudy.BodyPartForEdit = first.Code;
|
||||||
|
}
|
||||||
|
|
||||||
var @lock2 = _distributedLockProvider.CreateLock($"StudyCommit");
|
var @lock2 = _distributedLockProvider.CreateLock($"StudyCommit");
|
||||||
|
|
||||||
using (await @lock2.AcquireAsync())
|
using (await @lock2.AcquireAsync())
|
||||||
|
|
|
@ -30,6 +30,13 @@ namespace IRaCIS.Core.Application.ViewModel
|
||||||
public string IPRegion { get; set; }
|
public string IPRegion { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class SendMfaCommand
|
||||||
|
{
|
||||||
|
public Guid IdentityUserId { get; set; }
|
||||||
|
|
||||||
|
public UserMFAType MFAType { get; set; } = UserMFAType.Login;
|
||||||
|
}
|
||||||
|
|
||||||
///<summary>UserLogQuery 列表查询参数模型</summary>
|
///<summary>UserLogQuery 列表查询参数模型</summary>
|
||||||
public class UserLogQuery : PageInput
|
public class UserLogQuery : PageInput
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using IRaCIS.Application.Contracts;
|
using IRaCIS.Application.Contracts;
|
||||||
|
using IRaCIS.Core.Application.ViewModel;
|
||||||
using IRaCIS.Core.Domain.Share;
|
using IRaCIS.Core.Domain.Share;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Service
|
namespace IRaCIS.Core.Application.Service
|
||||||
|
@ -10,9 +11,9 @@ namespace IRaCIS.Core.Application.Service
|
||||||
//Task<UserDetailDTO> GetUser(Guid id);
|
//Task<UserDetailDTO> GetUser(Guid id);
|
||||||
Task<PageOutput<UserListDTO>> GetUserList(UserListQueryDTO param);
|
Task<PageOutput<UserListDTO>> GetUserList(UserListQueryDTO param);
|
||||||
Task<IResponseOutput<LoginReturnDTO>> Login(string userName, string password);
|
Task<IResponseOutput<LoginReturnDTO>> Login(string userName, string password);
|
||||||
Task<IResponseOutput> VerifyMFACodeAsync(Guid userId, string Code);
|
Task<IResponseOutput> VerifyMFACodeAsync(string Code);
|
||||||
|
|
||||||
Task<IResponseOutput> SendMFAEmail(Guid userId, UserMFAType mfaType = 0);
|
Task<IResponseOutput> SendMFAEmail(SendMfaCommand sendMfa);
|
||||||
Task<UserBasicInfo> GetUserBasicInfo(Guid userId, string pwd);
|
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);
|
||||||
|
|
|
@ -61,8 +61,10 @@ namespace IRaCIS.Core.Application.Service
|
||||||
throw new BusinessValidationFailedException("Id 或者VisitTaskId 必传一个");
|
throw new BusinessValidationFailedException("Id 或者VisitTaskId 必传一个");
|
||||||
}
|
}
|
||||||
|
|
||||||
var result = await _userFeedBackRepository.WhereIf(inQuery.Id == null, t => t.VisitTaskId == inQuery.VisitTaskId)
|
var result = await _userFeedBackRepository
|
||||||
.WhereIf(inQuery.VisitTaskId == null, t => t.Id == inQuery.Id).ProjectTo<UserFeedBackView>(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
|
.WhereIf(inQuery.Id != null, t => t.Id == inQuery.Id)
|
||||||
|
.WhereIf(inQuery.VisitTaskId != null, t => t.VisitTaskId == inQuery.VisitTaskId)
|
||||||
|
.ProjectTo<UserFeedBackView>(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -735,17 +735,16 @@ namespace IRaCIS.Core.Application.Service
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 发送MFA 验证邮件
|
/// 发送MFA 验证邮件
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="identityUserId"></param>
|
|
||||||
/// <param name="mfaType"></param>
|
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[AllowAnonymous]
|
public async Task<IResponseOutput> SendMFAEmail(SendMfaCommand sendMfa)
|
||||||
public async Task<IResponseOutput> SendMFAEmail(Guid identityUserId, UserMFAType mfaType)
|
|
||||||
{
|
{
|
||||||
|
var identityUserId = sendMfa.IdentityUserId == Guid.Empty ? _userInfo.IdentityUserId : sendMfa.IdentityUserId;
|
||||||
var userInfo = await _identityUserRepository.Where(u => u.Id == identityUserId).Select(t => new { t.FullName, t.EMail }).FirstOrDefaultAsync();
|
var userInfo = await _identityUserRepository.Where(u => u.Id == identityUserId).Select(t => new { t.FullName, t.EMail }).FirstOrDefaultAsync();
|
||||||
|
|
||||||
int verificationCode = new Random().Next(100000, 1000000);
|
int verificationCode = new Random().Next(100000, 1000000);
|
||||||
|
|
||||||
await _mailVerificationService.SenMFAVerifyEmail(identityUserId, userInfo.FullName, userInfo.EMail, verificationCode, (UserMFAType)mfaType);
|
await _mailVerificationService.SenMFAVerifyEmail(identityUserId, userInfo.FullName, userInfo.EMail, verificationCode, sendMfa.MFAType);
|
||||||
|
|
||||||
var hiddenEmail = IRCEmailPasswordHelper.MaskEmail(userInfo.EMail);
|
var hiddenEmail = IRCEmailPasswordHelper.MaskEmail(userInfo.EMail);
|
||||||
return ResponseOutput.Ok(hiddenEmail);
|
return ResponseOutput.Ok(hiddenEmail);
|
||||||
|
@ -754,12 +753,13 @@ namespace IRaCIS.Core.Application.Service
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 验证MFA 邮件
|
/// 验证MFA 邮件
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="identityUserId"></param>
|
|
||||||
/// <param name="Code"></param>
|
/// <param name="Code"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="BusinessValidationFailedException"></exception>
|
/// <exception cref="BusinessValidationFailedException"></exception>
|
||||||
public async Task<IResponseOutput> VerifyMFACodeAsync(Guid identityUserId, string Code)
|
public async Task<IResponseOutput> VerifyMFACodeAsync(string Code)
|
||||||
{
|
{
|
||||||
|
var identityUserId = _userInfo.IdentityUserId;
|
||||||
|
|
||||||
var verificationRecord = await _verificationCodeRepository.Where(t => t.UserId == identityUserId && t.Code == Code && t.CodeType == VerifyType.Email).OrderByDescending(x => x.ExpirationTime).FirstOrDefaultAsync();
|
var verificationRecord = await _verificationCodeRepository.Where(t => t.UserId == identityUserId && t.Code == Code && t.CodeType == VerifyType.Email).OrderByDescending(x => x.ExpirationTime).FirstOrDefaultAsync();
|
||||||
VerifyEmialGetDoctorInfoOutDto result = new VerifyEmialGetDoctorInfoOutDto();
|
VerifyEmialGetDoctorInfoOutDto result = new VerifyEmialGetDoctorInfoOutDto();
|
||||||
|
|
||||||
|
@ -778,13 +778,9 @@ namespace IRaCIS.Core.Application.Service
|
||||||
await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, ActionUserName = _userInfo.UserName, TargetIdentityUserId = identityUserId, OptType = UserOptType.MFALoginFail }, true);
|
await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, ActionUserName = _userInfo.UserName, TargetIdentityUserId = identityUserId, OptType = UserOptType.MFALoginFail }, true);
|
||||||
//---验证码已经过期。
|
//---验证码已经过期。
|
||||||
throw new BusinessValidationFailedException(_localizer["TrialSiteSurvey_ExpiredVerificationCode"]);
|
throw new BusinessValidationFailedException(_localizer["TrialSiteSurvey_ExpiredVerificationCode"]);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else //验证码正确 并且 没有超时
|
else //验证码正确 并且 没有超时
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
//删除验证码历史记录
|
//删除验证码历史记录
|
||||||
await _verificationCodeRepository.BatchDeleteNoTrackingAsync(t => t.Id == verificationRecord.Id);
|
await _verificationCodeRepository.BatchDeleteNoTrackingAsync(t => t.Id == verificationRecord.Id);
|
||||||
await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, ActionUserName = _userInfo.UserName, TargetIdentityUserId = identityUserId, OptType = UserOptType.MFALogin }, true);
|
await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, ActionUserName = _userInfo.UserName, TargetIdentityUserId = identityUserId, OptType = UserOptType.MFALogin }, true);
|
||||||
|
@ -1090,7 +1086,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//正常登录才发送邮件
|
//正常登录才发送邮件
|
||||||
await SendMFAEmail(identityUserId, UserMFAType.Login);
|
await SendMFAEmail(new SendMfaCommand() { IdentityUserId = identityUserId, MFAType = UserMFAType.Login });
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -441,7 +441,11 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
{
|
{
|
||||||
var isTrialSPMJoin = await _trialRepository.AnyAsync(t => t.Id == trialSiteSubmitBackCommand.TrialId && t.IsSPMJoinSiteSurvey);
|
var isTrialSPMJoin = await _trialRepository.AnyAsync(t => t.Id == trialSiteSubmitBackCommand.TrialId && t.IsSPMJoinSiteSurvey);
|
||||||
|
|
||||||
var hasSPMOrCPM = await _trialSiteSurveyRepository.AnyAsync(t => t.TrialId == trialSiteSubmitBackCommand.TrialId && t.Trial.TrialIdentityUserList.Any(u => u.TrialUserRoleList.Any(u => u.UserRole.UserTypeEnum == UserTypeEnum.SPM || u.UserRole.UserTypeEnum == UserTypeEnum.CPM)));
|
var hasSPMOrCPM = await _trialRepository.Where(t => t.Id == trialSiteSubmitBackCommand.TrialId).AnyAsync(t => t.TrialIdentityUserList.SelectMany(t => t.TrialUserRoleList).Any(t =>
|
||||||
|
t.UserRole.IdentityUser.Status == UserStateEnum.Enable
|
||||||
|
&& t.UserRole.IsUserRoleDisabled == false
|
||||||
|
&& (t.UserRole.UserTypeEnum == UserTypeEnum.SPM || t.UserRole.UserTypeEnum == UserTypeEnum.CPM))
|
||||||
|
);
|
||||||
|
|
||||||
var isSPMjoin = isTrialSPMJoin && hasSPMOrCPM;
|
var isSPMjoin = isTrialSPMJoin && hasSPMOrCPM;
|
||||||
|
|
||||||
|
@ -792,7 +796,11 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.Undefined || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator)
|
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.Undefined || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator)
|
||||||
{
|
{
|
||||||
var hasSPMOrCPM = await _trialSiteSurveyRepository.AnyAsync(t => t.TrialId == trialId && t.Trial.TrialIdentityUserList.Any(u => u.TrialUserRoleList.Any(u => u.UserRole.UserTypeEnum == UserTypeEnum.SPM || u.UserRole.UserTypeEnum == UserTypeEnum.CPM)));
|
var hasSPMOrCPM = await _trialRepository.Where(t => t.Id == trialId).AnyAsync(t => t.TrialIdentityUserList.SelectMany(t => t.TrialUserRoleList).Any(t =>
|
||||||
|
t.UserRole.IdentityUser.Status == UserStateEnum.Enable
|
||||||
|
&& t.UserRole.IsUserRoleDisabled == false
|
||||||
|
&& (t.UserRole.UserTypeEnum == UserTypeEnum.SPM || t.UserRole.UserTypeEnum == UserTypeEnum.CPM))
|
||||||
|
);
|
||||||
|
|
||||||
var isTrialSPMJoin = await _trialRepository.AnyAsync(t => t.Id == trialId && t.IsSPMJoinSiteSurvey);
|
var isTrialSPMJoin = await _trialRepository.AnyAsync(t => t.Id == trialId && t.IsSPMJoinSiteSurvey);
|
||||||
|
|
||||||
|
|
|
@ -171,7 +171,7 @@ namespace IRaCIS.Application.Contracts
|
||||||
|
|
||||||
public bool IsDeleted { get; set; }
|
public bool IsDeleted { get; set; }
|
||||||
|
|
||||||
|
public UserStateEnum Status { get; set; }
|
||||||
|
|
||||||
public DateTime CreateTime { get; set; }
|
public DateTime CreateTime { get; set; }
|
||||||
public DateTime UpdateTime { get; set; }
|
public DateTime UpdateTime { get; set; }
|
||||||
|
@ -223,6 +223,7 @@ namespace IRaCIS.Application.Contracts
|
||||||
|
|
||||||
public UserTypeEnum UserTypeEnum { get; set; }
|
public UserTypeEnum UserTypeEnum { get; set; }
|
||||||
|
|
||||||
|
public bool IsUserRoleDisabled { get; set; }
|
||||||
|
|
||||||
public bool IsDeleted { get; set; }
|
public bool IsDeleted { get; set; }
|
||||||
|
|
||||||
|
|
|
@ -71,9 +71,11 @@ namespace IRaCIS.Core.Application
|
||||||
{
|
{
|
||||||
var trialDocStat = await _trialRepository.Where(t => t.TrialStatusStr == StaticData.TrialState.TrialOngoing)
|
var trialDocStat = await _trialRepository.Where(t => t.TrialStatusStr == StaticData.TrialState.TrialOngoing)
|
||||||
.Where(t => t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId))
|
.Where(t => t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId))
|
||||||
.WhereIf(!_userInfo.IsAdmin, c => c.TrialDocumentList.Where(t => t.IsDeleted == false && t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId) && !t.TrialDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.UserRoleId && t.ConfirmTime != null))
|
.WhereIf(!_userInfo.IsAdmin, c => c.TrialDocumentList.Where(t => t.IsDeleted == false &&
|
||||||
.Count() > 0)
|
t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId)
|
||||||
.ProjectTo<DocSignStat>(_mapper.ConfigurationProvider, new { userTypeEnumInt = _userInfo.UserTypeEnumInt, userId = _userInfo.UserRoleId, userTypeId = _userInfo.UserTypeId })
|
&& !t.TrialDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.IdentityUserId && t.ConfirmTime != null)).Count() > 0
|
||||||
|
)
|
||||||
|
.ProjectTo<DocSignStat>(_mapper.ConfigurationProvider, new { userTypeEnumInt = _userInfo.UserTypeEnumInt, userId = _userInfo.IdentityUserId, userTypeId = _userInfo.UserTypeId })
|
||||||
.OrderByDescending(t => t.WaitSignCount)
|
.OrderByDescending(t => t.WaitSignCount)
|
||||||
.ToPagedListAsync(inQuery);
|
.ToPagedListAsync(inQuery);
|
||||||
|
|
||||||
|
@ -1117,10 +1119,10 @@ namespace IRaCIS.Core.Application
|
||||||
var needSignTrialCount = await _trialRepository.Where(t => t.TrialStatusStr != StaticData.TrialState.TrialStopped)
|
var needSignTrialCount = await _trialRepository.Where(t => t.TrialStatusStr != StaticData.TrialState.TrialStopped)
|
||||||
.Where(t => t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId))
|
.Where(t => t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId))
|
||||||
.Where(c => c.TrialDocumentList.Where(t => t.IsDeleted == false && t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId)
|
.Where(c => c.TrialDocumentList.Where(t => t.IsDeleted == false && t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId)
|
||||||
&& !t.TrialDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.UserRoleId && t.ConfirmTime != null)).Count() > 0).CountAsync();
|
&& !t.TrialDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.IdentityUserId && t.ConfirmTime != null)).Count() > 0).CountAsync();
|
||||||
|
|
||||||
var needSignSysDocCont = await _systemDocumentRepository
|
var needSignSysDocCont = await _systemDocumentRepository
|
||||||
.Where(t => t.IsDeleted == false && !t.SystemDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.UserRoleId && t.ConfirmTime != null))
|
.Where(t => t.IsDeleted == false && !t.SystemDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.IdentityUserId && t.ConfirmTime != null))
|
||||||
//外部人员 只签署 文档类型枚举值有值的
|
//外部人员 只签署 文档类型枚举值有值的
|
||||||
.WhereIf(isInternal == false, t => t.DocUserSignType == DocUserSignType.InnerAndOuter)
|
.WhereIf(isInternal == false, t => t.DocUserSignType == DocUserSignType.InnerAndOuter)
|
||||||
.SelectMany(t => t.NeedConfirmedUserTypeList)
|
.SelectMany(t => t.NeedConfirmedUserTypeList)
|
||||||
|
@ -1129,10 +1131,10 @@ namespace IRaCIS.Core.Application
|
||||||
var signedTrialCount = await _trialDocumentRepository.AsQueryable(true)
|
var signedTrialCount = await _trialDocumentRepository.AsQueryable(true)
|
||||||
.Where(t => t.Trial.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId))
|
.Where(t => t.Trial.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId))
|
||||||
.Where(t => t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId))
|
.Where(t => t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId))
|
||||||
.Where(t => t.TrialDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.UserRoleId && t.ConfirmTime != null)).CountAsync();
|
.Where(t => t.TrialDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.IdentityUserId && t.ConfirmTime != null)).CountAsync();
|
||||||
|
|
||||||
var signedSysDocCont = await _systemDocumentRepository
|
var signedSysDocCont = await _systemDocumentRepository
|
||||||
.Where(t => t.IsDeleted == false && t.SystemDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.UserRoleId && t.ConfirmTime != null))
|
.Where(t => t.IsDeleted == false && t.SystemDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.IdentityUserId && t.ConfirmTime != null))
|
||||||
.SelectMany(t => t.NeedConfirmedUserTypeList)
|
.SelectMany(t => t.NeedConfirmedUserTypeList)
|
||||||
.CountAsync(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId);
|
.CountAsync(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId);
|
||||||
|
|
||||||
|
|
|
@ -57,10 +57,12 @@ namespace IRaCIS.Core.Application.Service
|
||||||
UpdateTime = t.UpdateTime,
|
UpdateTime = t.UpdateTime,
|
||||||
UserName = t.IdentityUser.UserName,
|
UserName = t.IdentityUser.UserName,
|
||||||
RemoveTime = t.RemoveTime,
|
RemoveTime = t.RemoveTime,
|
||||||
|
Status = t.IdentityUser.Status,
|
||||||
TrialUserRoleList = t.TrialUserRoleList.Select(ur => new TrialIdentityUserRoleDto()
|
TrialUserRoleList = t.TrialUserRoleList.Select(ur => new TrialIdentityUserRoleDto()
|
||||||
{
|
{
|
||||||
Id = ur.Id,
|
Id = ur.Id,
|
||||||
UserTypeShortName = ur.UserRole.UserTypeRole.UserTypeShortName,
|
UserTypeShortName = ur.UserRole.UserTypeRole.UserTypeShortName,
|
||||||
|
IsUserRoleDisabled = ur.UserRole.IsUserRoleDisabled,
|
||||||
IsDeleted = ur.IsDeleted,
|
IsDeleted = ur.IsDeleted,
|
||||||
CreateTime = ur.CreateTime,
|
CreateTime = ur.CreateTime,
|
||||||
UserTypeEnum = ur.UserRole.UserTypeEnum,
|
UserTypeEnum = ur.UserRole.UserTypeEnum,
|
||||||
|
@ -111,7 +113,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
[HttpPut]
|
[HttpPut]
|
||||||
public async Task<IResponseOutput> UpdateTrialUserRole(UpdateTrialUserRoleCommand updateCommand)
|
public async Task<IResponseOutput> UpdateTrialUserRole(UpdateTrialUserRoleCommand updateCommand)
|
||||||
{
|
{
|
||||||
await _trialUseRoleRepository.UpdatePartialFromQueryAsync(t => updateCommand.IdList.Contains(t.Id), u => new TrialUserRole() { IsDeleted = updateCommand.IsDeleted }, true);
|
await _trialUseRoleRepository.UpdatePartialFromQueryAsync(t => updateCommand.IdList.Contains(t.Id), u => new TrialUserRole() { IsDeleted = updateCommand.IsDeleted }, true, true);
|
||||||
|
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
}
|
}
|
||||||
|
@ -132,7 +134,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
|
|
||||||
//之前已经选择的用户 不放在列表中,现在又要改回去 废弃
|
//之前已经选择的用户 不放在列表中,现在又要改回去 废弃
|
||||||
var query = _userRoleRepository.Where(t => t.UserTypeEnum != UserTypeEnum.SuperAdmin && t.IdentityUser.Status == UserStateEnum.Enable)
|
var query = _userRoleRepository.Where(t => t.UserTypeEnum != UserTypeEnum.SuperAdmin && t.IdentityUser.Status == UserStateEnum.Enable).IgnoreQueryFilters()
|
||||||
|
|
||||||
//正式或者培训的项目 不能允许测试用户(必须正式用户) 同时必须是内部的用户
|
//正式或者培训的项目 不能允许测试用户(必须正式用户) 同时必须是内部的用户
|
||||||
.WhereIf(trialType == TrialType.OfficialTrial || trialType == TrialType.Training, t => t.IdentityUser.IsTestUser == false && t.IdentityUser.IsZhiZhun)
|
.WhereIf(trialType == TrialType.OfficialTrial || trialType == TrialType.Training, t => t.IdentityUser.IsTestUser == false && t.IdentityUser.IsZhiZhun)
|
||||||
|
|
|
@ -175,7 +175,11 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
var trial = await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialId);
|
var trial = await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialId);
|
||||||
|
|
||||||
var hasSPMOrCPM = await _trialUserRoleRepository.Where(t => t.TrialId == trialId).AnyAsync(t => t.UserRole.UserTypeEnum == UserTypeEnum.SPM || t.UserRole.UserTypeEnum == UserTypeEnum.CPM);
|
var hasSPMOrCPM = await _trialRepository.Where(t => t.Id == trialId).AnyAsync(t => t.TrialIdentityUserList.SelectMany(t => t.TrialUserRoleList).Any(t =>
|
||||||
|
t.UserRole.IdentityUser.Status==UserStateEnum.Enable
|
||||||
|
&& t.UserRole.IsUserRoleDisabled==false
|
||||||
|
&& (t.UserRole.UserTypeEnum == UserTypeEnum.SPM || t.UserRole.UserTypeEnum == UserTypeEnum.CPM) )
|
||||||
|
);
|
||||||
|
|
||||||
var isSPMjoin = trial.IsSPMJoinReviewerSelect && hasSPMOrCPM;
|
var isSPMjoin = trial.IsSPMJoinReviewerSelect && hasSPMOrCPM;
|
||||||
|
|
||||||
|
|
|
@ -167,7 +167,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
{
|
{
|
||||||
var userList = _userRoleRepository.Where().ToList();
|
var userList = _userRoleRepository.Where().ToList();
|
||||||
|
|
||||||
foreach (var item in userList.GroupBy(t => t.EMail.Trim()))
|
foreach (var item in userList.GroupBy(t => t.EMail.Trim().ToLower()))
|
||||||
{
|
{
|
||||||
var emailUserIdList = item.Select(t => t.Id).ToList();
|
var emailUserIdList = item.Select(t => t.Id).ToList();
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ namespace IRaCIS.Core.Domain.Models;
|
||||||
|
|
||||||
[Comment("项目用户角色表")]
|
[Comment("项目用户角色表")]
|
||||||
[Table("TrialUser")]
|
[Table("TrialUser")]
|
||||||
public class TrialUserRole : BaseFullAuditEntity
|
public class TrialUserRole : BaseFullDeleteAuditEntity
|
||||||
{
|
{
|
||||||
#region 导航属性
|
#region 导航属性
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
|
@ -27,10 +27,6 @@ public class TrialUserRole : BaseFullAuditEntity
|
||||||
public DateTime? JoinTime { get; set; }
|
public DateTime? JoinTime { get; set; }
|
||||||
|
|
||||||
|
|
||||||
public Guid? DeleteUserId { get; set; }
|
|
||||||
public bool IsDeleted { get; set; }
|
|
||||||
public DateTime? DeletedTime { get; set; }
|
|
||||||
|
|
||||||
public Guid TrialUserId { get; set; }
|
public Guid TrialUserId { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3003,7 +3003,8 @@ namespace IRaCIS.Core.Infra.EFCore.Common
|
||||||
|
|
||||||
ObjectRelationParentId = entity.VisitTaskId,
|
ObjectRelationParentId = entity.VisitTaskId,
|
||||||
|
|
||||||
},new {
|
}, new
|
||||||
|
{
|
||||||
Answer = answer,
|
Answer = answer,
|
||||||
LiverSegmentation = liverSegmentation,
|
LiverSegmentation = liverSegmentation,
|
||||||
});
|
});
|
||||||
|
@ -3331,36 +3332,42 @@ namespace IRaCIS.Core.Infra.EFCore.Common
|
||||||
UserRealName = userRealName,
|
UserRealName = userRealName,
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var extraIdentification = string.Empty;
|
||||||
|
var isDistinctionInterface = true ;
|
||||||
#region 标识区分
|
#region 标识区分
|
||||||
|
|
||||||
if (type == AuditOpt.Add)
|
if (type == AuditOpt.Add)
|
||||||
{
|
{
|
||||||
|
isDistinctionInterface = false;
|
||||||
|
|
||||||
//生成一致性分析任务
|
//生成一致性分析任务
|
||||||
if (entity.IsSelfAnalysis == true)
|
if (entity.IsSelfAnalysis == true)
|
||||||
{
|
{
|
||||||
type = type + "/" + "SelfAnalysis";
|
extraIdentification = "/SelfAnalysis";
|
||||||
}
|
}
|
||||||
else if (entity.IsSelfAnalysis == false)
|
else if (entity.IsSelfAnalysis == false)
|
||||||
{
|
{
|
||||||
type = type + "/" + "GroupAnalysis";
|
extraIdentification = "/GroupAnalysis";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
type = type + "/" + "NotAnalysis";
|
extraIdentification = "/NotAnalysis";
|
||||||
}
|
}
|
||||||
|
|
||||||
//区分任务类型
|
//区分任务类型
|
||||||
type = type + "/" + (int)entity.ReadingCategory;
|
extraIdentification = extraIdentification + "/" + (int)entity.ReadingCategory;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
isDistinctionInterface = false;
|
||||||
switch (_userInfo.RequestUrl)
|
switch (_userInfo.RequestUrl)
|
||||||
{
|
{
|
||||||
//申请重阅
|
//申请重阅
|
||||||
case "VisitTask/applyReReading":
|
case "VisitTask/applyReReading":
|
||||||
type = type + "/" + (int)entity.ReReadingApplyState;
|
extraIdentification = "/" + (int)entity.ReReadingApplyState;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
@ -3369,12 +3376,12 @@ namespace IRaCIS.Core.Infra.EFCore.Common
|
||||||
|
|
||||||
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.APM)
|
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.APM)
|
||||||
{
|
{
|
||||||
type = type + "/" + 1;
|
extraIdentification = "/" + 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
type = type + "/" + 2;
|
extraIdentification = "/" + 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -3510,7 +3517,9 @@ namespace IRaCIS.Core.Infra.EFCore.Common
|
||||||
{
|
{
|
||||||
VisitTaskId = x.Id,
|
VisitTaskId = x.Id,
|
||||||
|
|
||||||
IsDistinctionInterface = type == AuditOpt.Update ? true : false,
|
IsDistinctionInterface = isDistinctionInterface,
|
||||||
|
|
||||||
|
ExtraIndentification = extraIdentification,
|
||||||
|
|
||||||
ObjectRelationParentId = entity.SourceSubjectVisitId != null ? entity.SourceSubjectVisitId : entity.SouceReadModuleId,
|
ObjectRelationParentId = entity.SourceSubjectVisitId != null ? entity.SourceSubjectVisitId : entity.SouceReadModuleId,
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue