Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing Details

Uat_IRC_Net8
he 2025-01-02 14:18:15 +08:00
commit 461a59b678
10 changed files with 219 additions and 83 deletions

View File

@ -12914,9 +12914,6 @@
<member name="M:IRaCIS.Core.Application.Service.TrialMaintenanceService.GetSiteCRCScreeningList(IRaCIS.Application.Contracts.SiteCRCQuery)">
<summary> Setting页面 为 site 勾选CRC用户列表</summary>
</member>
<member name="M:IRaCIS.Core.Application.Service.TrialMaintenanceService.DeleteMaintenanceUser(System.Guid,System.Boolean)">
<summary> 项目参与人员退出 其中IQC退出 回去释放工作量 </summary>
</member>
<member name="M:IRaCIS.Core.Application.Service.TrialService.GetTrialList(IRaCIS.Application.Contracts.TrialQueryDTO)">
<summary>
分页获取临床项目列表 默认后台加急状态为3 查所有的
@ -17100,6 +17097,32 @@
<param name="_qcChallengeRepository"></param>
<param name="_subjectVisitRepository"></param>
</member>
<member name="T:IRaCIS.Core.Application.Triggers.AfterSaveTrigger.IdenttiyUserRoleInfoTrigger">
<summary>
维护用户角色表中的账户信息
</summary>
<param name="_identityUserRepository"></param>
<param name="_userRoleRepository"></param>
</member>
<member name="M:IRaCIS.Core.Application.Triggers.AfterSaveTrigger.IdenttiyUserRoleInfoTrigger.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.IdentityUser},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.UserRole})">
<summary>
维护用户角色表中的账户信息
</summary>
<param name="_identityUserRepository"></param>
<param name="_userRoleRepository"></param>
</member>
<member name="T:IRaCIS.Core.Application.Triggers.AfterSaveTrigger.UserLogAfterTrigger">
<summary>
账户日志 记录账户每次操作的信息
</summary>
<param name="_identityUserRepository"></param>
</member>
<member name="M:IRaCIS.Core.Application.Triggers.AfterSaveTrigger.UserLogAfterTrigger.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.IdentityUser})">
<summary>
账户日志 记录账户每次操作的信息
</summary>
<param name="_identityUserRepository"></param>
</member>
<member name="T:IRaCIS.Core.Application.Triggers.TrialCriterionSignTrigger">
<summary>
因为可能先一致性核查通过,生成其他标准的任务了,新签名的标准也需要产生任务

View File

@ -30,7 +30,7 @@ namespace IRaCIS.Core.Application.Service
Task AdminResetPwdSendEmailAsync(Guid userId, string pwdNotMd5 = "123456");
Task SiteSurveyUserJoinEmail(Guid trialId, Guid userId, string baseUrl, string rootUrl);
Task SiteSurveyUserJoinEmail(Guid trialId, Guid userId, string userTypes, string baseUrl, string rootUrl);
Task ExternalUserJoinEmail(Guid trialId, Guid userId, string userTypes, string baseUrl, string rootUrl);
@ -44,6 +44,7 @@ namespace IRaCIS.Core.Application.Service
IRepository<VisitTask> _visitTaskRepository,
IRepository<TrialSite> _trialSiteRepository,
IRepository<UserRole> _userRoleRepository,
IRepository<UserLog> _userLogRepository,
IRepository<IdentityUser> _identityUserRepository,
IRepository<UserFeedBack> _userFeedBackRepository,
ITokenService _tokenService,
@ -301,8 +302,8 @@ namespace IRaCIS.Core.Application.Service
var htmlBodyStr = string.Format(ReplaceCompanyName(input.htmlBodyStr),
sysUserInfo.FullName,
sysUserInfo.UserName,
string.Join(',', sysUserInfo.UserRoleList.Select(t => t.UserTypeRole.UserTypeShortName)),
sysUserInfo.EMail,
//string.Join(',', sysUserInfo.UserRoleList.Select(t => t.UserTypeRole.UserTypeShortName)),
redirectUrl
);
@ -339,7 +340,7 @@ namespace IRaCIS.Core.Application.Service
sysUserInfo.FullName,
sysUserInfo.UserName,
string.Join(',', sysUserInfo.UserRoleList.Select(t => t.UserTypeRole.UserTypeShortName)),
//string.Join(',', sysUserInfo.UserRoleList.Select(t => t.UserTypeRole.UserTypeShortName)),
pwdNotMd5
);
@ -470,7 +471,7 @@ namespace IRaCIS.Core.Application.Service
trialInfo.ExperimentName,
trialInfo.ResearchProgramNo,
trialInfo.TrialCode,
sysUserInfo.UserName,
sysUserInfo.IsFirstAdd ? sysUserInfo.EMail : sysUserInfo.UserName,
userTypes,
sysUserInfo.IsFirstAdd ? redirectUrl : baseUrl
);
@ -484,15 +485,16 @@ namespace IRaCIS.Core.Application.Service
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig, null);
await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, ActionIdentityUserId = _userInfo.IdentityUserId, ActionUserName = _userInfo.UserName, TargetIdentityUserId = userId, OptType = UserOptType.UpdateUserRole }, true);
}
//Site调研 用户加入项目
public async Task SiteSurveyUserJoinEmail(Guid trialId, Guid userId, string baseUrl, string rootUrl)
public async Task SiteSurveyUserJoinEmail(Guid trialId, Guid userId, string userTypes, string baseUrl, string rootUrl)
{
var sysUserInfo = (await _identityUserRepository.Where(t => t.Id == userId).FirstOrDefaultAsync()).IfNullThrowException();
var userTypes = await _userRoleRepository.Where(t => t.IdentityUserId == sysUserInfo.Id).Select(t => t.UserTypeRole.UserTypeShortName).ToListAsync();
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialId);
@ -531,8 +533,8 @@ namespace IRaCIS.Core.Application.Service
trialInfo.ExperimentName,
trialInfo.ResearchProgramNo,
trialInfo.TrialCode,
sysUserInfo.UserName,
string.Join(',', userTypes),
sysUserInfo.IsFirstAdd ? sysUserInfo.EMail : sysUserInfo.UserName,
userTypes,
sysUserInfo.IsFirstAdd ? redirectUrl : baseUrl
);
@ -545,6 +547,7 @@ namespace IRaCIS.Core.Application.Service
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig);
await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, ActionIdentityUserId = _userInfo.IdentityUserId, ActionUserName = _userInfo.UserName, TargetIdentityUserId = userId, OptType = UserOptType.UpdateUserRole }, true);
}
@ -596,13 +599,30 @@ namespace IRaCIS.Core.Application.Service
await _userRoleRepository.SaveChangesAsync();
}
else
{
sysUserInfo = (await _identityUserRepository.Where(t => t.UserRoleList.Any(t => t.DoctorId == doctorId || t.IdentityUser.EMail == doctor.EMail)).Include(t => t.UserRoleList).FirstOrDefaultAsync()).IfNullThrowException();
sysUserInfo = (await _identityUserRepository.Where(t => t.UserRoleList.Any(t => t.DoctorId == doctorId || t.IdentityUser.EMail == doctor.EMail), true).Include(t => t.UserRoleList).FirstOrDefaultAsync()).IfNullThrowException();
var findRole = sysUserInfo.UserRoleList.FirstOrDefault(t => t.UserTypeId == userType.Id);
//不存在该角色,那么就加入该角色
if (findRole == null)
{
sysUserInfo.UserRoleList.Add(new UserRole() { DoctorId = doctorId, UserTypeEnum = UserTypeEnum.IndependentReviewer, UserTypeId = userType.Id });
}
else
{
findRole.IsUserRoleDisabled = false;
}
sysUserInfo.Status = UserStateEnum.Enable;
}
//保证能有userRoleId
await _userRoleRepository.SaveChangesAsync();
}
@ -645,8 +665,8 @@ namespace IRaCIS.Core.Application.Service
trialInfo.ExperimentName,
trialInfo.ResearchProgramNo,
trialInfo.TrialCode,
sysUserInfo.UserName,
userType.UserTypeShortName,
sysUserInfo.IsFirstAdd ? sysUserInfo.EMail : sysUserInfo.UserName,
$"{userType.UserTypeShortName} ({userType.UserTypeName})",
sysUserInfo.IsFirstAdd ? redirectUrl : baseUrl
);
@ -659,6 +679,9 @@ namespace IRaCIS.Core.Application.Service
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig, null);
await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, ActionIdentityUserId = _userInfo.IdentityUserId, ActionUserName = _userInfo.UserName, TargetIdentityUserId = sysUserInfo.Id, OptType = UserOptType.UpdateUserRole }, true);
return (sysUserInfo.Id, sysUserInfo.UserRoleList.First(t => t.UserTypeEnum == UserTypeEnum.IndependentReviewer).Id);
}

View File

@ -503,8 +503,11 @@ namespace IRaCIS.Core.Application.Service
var user = await _identityUserRepository.Where(t => t.Id == identityUserId).ProjectTo<UserDetailDTO>(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
user.AccountList = await _userRoleRepository.Where(t => t.IdentityUserId == identityUserId).ProjectTo<UserAccountInfo>(_mapper.ConfigurationProvider).ToListAsync();
if (user != null)
{
user.AccountList = await _userRoleRepository.Where(t => t.IdentityUserId == identityUserId).ProjectTo<UserAccountInfo>(_mapper.ConfigurationProvider).ToListAsync();
}
return user;
}

View File

@ -30,6 +30,8 @@ using IdentityModel;
using Microsoft.AspNetCore.Components.Routing;
using IRaCIS.Core.Application.ViewModel;
using Microsoft.AspNetCore.Identity;
using NPOI.SS.Formula.Functions;
using System.Security.Policy;
namespace IRaCIS.Core.Application.Contracts
{
@ -522,7 +524,7 @@ namespace IRaCIS.Core.Application.Contracts
}
else if (verifyRecord.ExpirationTime < DateTime.Now)
{
return ResponseOutput.NotOk(_localizer["TrialSiteSurvey_WrongVerificationCode"]);
return ResponseOutput.NotOk(_localizer["TrialSiteSurvey_ExpiredVerificationCode"]);
}
else
{
@ -873,6 +875,7 @@ namespace IRaCIS.Core.Application.Contracts
{
//不存在该角色,那么就添加
var addRole = _mapper.Map<UserRole>(existSysUser);
addRole.Id = NewId.NextSequentialGuid();
addRole.UserTypeEnum = _userTypeRepository.Where(t => t.Id == userTypeId).Select(t => t.UserTypeEnum).First();
addRole.UserTypeId = userTypeId.Value;
addRole.IsUserRoleDisabled = false;
@ -893,6 +896,7 @@ namespace IRaCIS.Core.Application.Contracts
generateUser.IsTestUser = true;
}
generateUser.Id = NewId.NextSequentialGuid();
// 外部人员生成账号 都是外部的
generateUser.IsZhiZhun = false;
@ -905,7 +909,7 @@ namespace IRaCIS.Core.Application.Contracts
generateUser.Password = MD5Helper.Md5(IRCEmailPasswordHelper.GenerateRandomPassword(10));
generateUser.Status = UserStateEnum.Disable;
generateUser.Status = UserStateEnum.Enable;
generateUser.UserRoleList = new List<UserRole>() { };
@ -935,7 +939,7 @@ namespace IRaCIS.Core.Application.Contracts
var identityUserId = existSysUser.Id;
var findTrialUser = await _trialIdentityUserRepository.Where(t => t.TrialId == trialId && t.IdentityUserId == identityUserId, true).Include(t => t.TrialUserRoleList).ThenInclude(t => t.UserRole).FirstOrDefaultAsync();
var findTrialUser = await _trialIdentityUserRepository.Where(t => t.TrialId == trialId && t.IdentityUserId == identityUserId, true, true).Include(t => t.TrialUserRoleList).ThenInclude(t => t.UserRole).FirstOrDefaultAsync();
var isNeedSendEmail = false;
@ -964,6 +968,16 @@ namespace IRaCIS.Core.Application.Contracts
//有该人员
//是否有该角色
if (findTrialUser.IsDeleted == true)
{
findTrialUser.IsDeleted = false;
findTrialUser.DeletedTime = null;
findTrialUser.RemoveTime = null;
findTrialUser.JoinTime = DateTime.Now;
}
foreach (var userTypeId in userTypeIdList)
{
var findTrialUserRole = findTrialUser.TrialUserRoleList.Where(t => t.UserRole.UserTypeId == userTypeId).FirstOrDefault();
@ -991,7 +1005,12 @@ namespace IRaCIS.Core.Application.Contracts
if (isNeedSendEmail)
{
await _mailVerificationService.SiteSurveyUserJoinEmail(trialId, identityUserId, baseUrl, routeUrl);
var dbUserType = _userTypeRepository.Where(t => userTypeIdList.Contains(t.Id)).ToList();
var usertyps = string.Join(',', dbUserType.Select(t => t.UserTypeName));
await _mailVerificationService.SiteSurveyUserJoinEmail(trialId, identityUserId, usertyps, baseUrl, routeUrl);
}
var userJoinIdList = item.Select(t => t.Id).ToList();
@ -1061,6 +1080,7 @@ namespace IRaCIS.Core.Application.Contracts
{
//不存在该角色,那么就添加
var addRole = _mapper.Map<UserRole>(existSysUser);
addRole.Id = NewId.NextSequentialGuid();
addRole.UserTypeEnum = _userTypeRepository.Where(t => t.Id == userTypeId).Select(t => t.UserTypeEnum).First();
addRole.UserTypeId = userTypeId;
addRole.IsUserRoleDisabled = false;
@ -1081,6 +1101,8 @@ namespace IRaCIS.Core.Application.Contracts
generateUser.IsTestUser = true;
}
generateUser.Id = NewId.NextSequentialGuid();
// 外部人员生成账号 都是外部的
generateUser.IsZhiZhun = false;
@ -1090,10 +1112,9 @@ namespace IRaCIS.Core.Application.Contracts
//generateUser.UserName = generateUser.UserCode;
generateUser.Password = MD5Helper.Md5(IRCEmailPasswordHelper.GenerateRandomPassword(10));
generateUser.Status = UserStateEnum.Disable;
generateUser.Status = UserStateEnum.Enable;
generateUser.UserRoleList = new List<UserRole>() { };
@ -1123,7 +1144,7 @@ namespace IRaCIS.Core.Application.Contracts
var identityUserId = existSysUser.Id;
var findTrialUser = await _trialIdentityUserRepository.Where(t => t.TrialId == trialId && t.IdentityUserId == identityUserId, true).Include(t => t.TrialUserRoleList).ThenInclude(t => t.UserRole).FirstOrDefaultAsync();
var findTrialUser = await _trialIdentityUserRepository.Where(t => t.TrialId == trialId && t.IdentityUserId == identityUserId, true, true).Include(t => t.TrialUserRoleList).ThenInclude(t => t.UserRole).FirstOrDefaultAsync();
var isNeedSendEmail = false;
@ -1152,6 +1173,16 @@ namespace IRaCIS.Core.Application.Contracts
//有该人员
//是否有该角色
if (findTrialUser.IsDeleted == true)
{
findTrialUser.IsDeleted = false;
findTrialUser.DeletedTime = null;
findTrialUser.RemoveTime = null;
findTrialUser.JoinTime = DateTime.Now;
}
foreach (var userTypeId in userTypeIdList)
{
var findTrialUserRole = findTrialUser.TrialUserRoleList.Where(t => t.UserRole.UserTypeId == userTypeId).FirstOrDefault();
@ -1177,9 +1208,46 @@ namespace IRaCIS.Core.Application.Contracts
}
//加入到Site CRC
foreach (var trialsSiteItem in addUserRoleList.GroupBy(t => t.TrialSiteId))
{
var siteUserRoleList = trialsSiteItem.ToList();
foreach (var siteUserRole in siteUserRoleList)
{
var findUserRole = existSysUser.UserRoleList.Where(t => t.UserTypeId == siteUserRole.UserTypeId).FirstOrDefault();
if (findUserRole != null)
{
var findTrialSiteUserRole = await _trialSiteUserRoleRepository.Where(t => t.TrialId == trialId && t.TrialSiteId == trialsSiteItem.Key && t.UserId == findUserRole.Id, true, true).FirstOrDefaultAsync();
if (findTrialSiteUserRole != null)
{
findTrialSiteUserRole.IsDeleted = false;
findTrialSiteUserRole.DeletedTime = null;
}
else
{
await _trialSiteUserRoleRepository.AddAsync(new TrialSiteUserRole() { TrialId = trialId, TrialSiteId = trialsSiteItem.Key, UserId = findUserRole.Id });
}
}
else
{
throw new BusinessValidationFailedException("database dirty data ,pleasse check");
}
}
}
if (isNeedSendEmail)
{
await _mailVerificationService.SiteSurveyUserJoinEmail(trialId, identityUserId, baseUrl, routeUrl);
var dbUserType = _userTypeRepository.Where(t => userTypeIdList.Contains(t.Id)).ToList();
var usertyps = string.Join(',', dbUserType.Select(t => t.UserTypeName));
await _mailVerificationService.SiteSurveyUserJoinEmail(trialId, identityUserId, usertyps, baseUrl, routeUrl);
}
await _trialSiteUserRoleRepository.SaveChangesAsync();

View File

@ -93,8 +93,11 @@ namespace IRaCIS.Core.Application.AutoMapper
.ForMember(d => d.UserTypeEnum, u => u.MapFrom(s => s.UserTypeRole.UserTypeEnum));
CreateMap<TrialSiteUserSurveyView, IdentityUser>();
CreateMap<SiteSurveyUserImportDto, IdentityUser>();
}
}
}

View File

@ -277,7 +277,7 @@ namespace IRaCIS.Core.Application.Service
generateUser.Password = MD5Helper.Md5(IRCEmailPasswordHelper.GenerateRandomPassword(10));
generateUser.Status = UserStateEnum.Disable;
generateUser.Status = UserStateEnum.Enable;
generateUser.UserRoleList = new List<UserRole>() { };
@ -294,6 +294,10 @@ namespace IRaCIS.Core.Application.Service
var newAddUser = await _identityUserRepository.AddAsync(generateUser);
existSysUser = newAddUser;
await _trialExternalUseRepository.BatchUpdateNoTrackingAsync(t => externalIdList.Contains(t.Id), u => new TrialExternalUser()
{
IsSystemUser = false,
@ -304,8 +308,6 @@ namespace IRaCIS.Core.Application.Service
Phone = existSysUser.Phone,
});
existSysUser = newAddUser;
}
await _identityUserRepository.SaveChangesAsync();
@ -314,7 +316,7 @@ namespace IRaCIS.Core.Application.Service
var identityUserId = existSysUser.Id;
var userTypeList = await _identityUserRepository.Where(t => t.Id == identityUserId).SelectMany(t => t.UserRoleList).Select(t => new { t.UserTypeId, t.UserTypeRole.UserTypeShortName }).ToListAsync();
var userTypeList = await _identityUserRepository.Where(t => t.Id == identityUserId).SelectMany(t => t.UserRoleList).Select(t => new { t.UserTypeId, t.UserTypeRole.UserTypeName, t.UserTypeRole.UserTypeShortName }).ToListAsync();
var userHaveUserTypeIdList = userTypeList.Select(t => t.UserTypeId).ToList();
@ -323,7 +325,7 @@ namespace IRaCIS.Core.Application.Service
return ResponseOutput.NotOk("database dirty data ");
}
var findTrialUser = await _trialIdentityUserRepository.Where(t => t.TrialId == trialId && t.IdentityUserId == identityUserId, true).Include(t => t.TrialUserRoleList).ThenInclude(t => t.UserRole).FirstOrDefaultAsync();
var findTrialUser = await _trialIdentityUserRepository.Where(t => t.TrialId == trialId && t.IdentityUserId == identityUserId, true, true).Include(t => t.TrialUserRoleList).ThenInclude(t => t.UserRole).FirstOrDefaultAsync();
if (findTrialUser == null)
{
@ -346,6 +348,14 @@ namespace IRaCIS.Core.Application.Service
{
//有该人员
if (findTrialUser.IsDeleted == true)
{
findTrialUser.IsDeleted = false;
findTrialUser.DeletedTime = null;
findTrialUser.RemoveTime = null;
findTrialUser.JoinTime = DateTime.Now;
}
//是否有该角色
foreach (var userTypeId in userTypeIdList)
@ -373,7 +383,8 @@ namespace IRaCIS.Core.Application.Service
await _trialIdentityUserRepository.SaveChangesAsync();
var usertyps = string.Join(',', userTypeList.Where(t => userTypeIdList.Contains(t.UserTypeId)).Select(t => t.UserTypeShortName));
var usertyps = string.Join(',', userTypeList.Where(t => userTypeIdList.Contains(t.UserTypeId)).Select(t => t.UserTypeName));
await _mailVerificationService.ExternalUserJoinEmail(trialId, identityUserId, usertyps, sendEmail.BaseUrl, sendEmail.RouteUrl);

View File

@ -132,7 +132,7 @@ namespace IRaCIS.Core.Application.Service
//之前已经选择的用户 不放在列表中,现在又要改回去 废弃
var query = _userRoleRepository.Where(t => t.UserTypeEnum != UserTypeEnum.SuperAdmin)
var query = _userRoleRepository.Where(t => t.UserTypeEnum != UserTypeEnum.SuperAdmin && t.IdentityUser.Status == UserStateEnum.Enable)
//正式或者培训的项目 不能允许测试用户(必须正式用户) 同时必须是内部的用户
.WhereIf(trialType == TrialType.OfficialTrial || trialType == TrialType.Training, t => t.IdentityUser.IsTestUser == false && t.IdentityUser.IsZhiZhun)
@ -184,7 +184,7 @@ namespace IRaCIS.Core.Application.Service
var first = currentUserRoleList.FirstOrDefault();
var findTrialuser = await _trialIdentityUserRepository.Where(t => t.TrialId == first.TrialId && t.IdentityUserId == item.Key, true).Include(t => t.TrialUserRoleList).FirstOrDefaultAsync();
var findTrialuser = await _trialIdentityUserRepository.Where(t => t.TrialId == first.TrialId && t.IdentityUserId == item.Key, true, true).Include(t => t.TrialUserRoleList).FirstOrDefaultAsync();
if (findTrialuser == null)
{
@ -201,6 +201,14 @@ namespace IRaCIS.Core.Application.Service
}
else
{
if (findTrialuser.IsDeleted = true)
{
findTrialuser.IsDeleted = false;
findTrialuser.DeletedTime = null;
findTrialuser.JoinTime = DateTime.Now;
findTrialuser.RemoveTime = null;
}
findTrialuser.TrialUserRoleList.AddRange(currentUserRoleList.Select(t => new TrialUserRole() { UserId = t.UserId, TrialId = t.TrialId, TrialUserId = findTrialuser.Id }).ToList());
}
@ -238,45 +246,5 @@ namespace IRaCIS.Core.Application.Service
/// <summary> 项目参与人员退出 其中IQC退出 回去释放工作量 </summary>
//[TrialAudit(AuditType.TrialAudit, AuditOptType.DeleteTrailStaff)]
[HttpDelete, Route("{id:guid}/{trialId:guid}/{isDelete:bool}")]
[TrialGlobalLimit("AfterStopCannNotOpt")]
[UnitOfWork]
[Obsolete]
public async Task<IResponseOutput> DeleteMaintenanceUser(Guid id, bool isDelete)
{
var trialUser = await _trialUseRoleRepository.AsQueryable().IgnoreQueryFilters().FirstOrDefaultAsync(t => t.Id == id);
if (trialUser == null) return Null404NotFound(trialUser);
if (await _trialSiteUserRoleRepository.AnyAsync(t => t.UserId == trialUser.UserId && t.TrialId == trialUser.TrialId))
{
//---人员已加入现场维护
return ResponseOutput.NotOk(_localizer["TrialMaint_PersonnelJoined"]);
}
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC && isDelete)
{
await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.CurrentActionUserId == trialUser.UserId && t.TrialId == trialUser.TrialId && t.IsTake, u => new SubjectVisit() { CurrentActionUserId = null, CurrentActionUserExpireTime = null, IsTake = false });
}
await _trialUseRoleRepository.BatchUpdateNoTrackingAsync(t => t.Id == id, u => new TrialUserRole() { IsDeleted = isDelete, RemoveTime = isDelete ? DateTime.Now : null });
await _trialUseRoleRepository.SaveChangesAsync();
return ResponseOutput.Ok();
}
}
}

View File

@ -1,6 +1,7 @@
using DocumentFormat.OpenXml.Vml.Spreadsheet;
using IRaCIS.Core.Application.Filter;
using IRaCIS.Core.Application.Service.WorkLoad.DTO;
using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infra.EFCore.Common;
using Microsoft.AspNetCore.Mvc;
@ -411,29 +412,51 @@ namespace IRaCIS.Core.Application.Service
var (identityUserId, userRoleId) = await _mailVerificationService.DoctorJoinTrialEmail(trialId, intoGroupItem.DoctorId, confirmReviewerCommand.BaseUrl, confirmReviewerCommand.RouteUrl);
var findTrialUser = await _trialIdentityUserRepository.FirstOrDefaultAsync(t => t.IdentityUserId == identityUserId);
//项目中不存在
var findTrialUser = await _trialIdentityUserRepository.Where(t => t.TrialId == trialId && t.IdentityUserId == identityUserId, true, true).Include(t => t.TrialUserRoleList).ThenInclude(t => t.UserRole).FirstOrDefaultAsync();
if (findTrialUser == null)
{
await _trialIdentityUserRepository.AddAsync(new TrialIdentityUser()
//没有项目参与人员
findTrialUser = await _trialIdentityUserRepository.AddAsync(new TrialIdentityUser()
{
TrialId = trialId,
IdentityUserId = identityUserId,
TrialId = trialId,
JoinTime = DateTime.Now,
TrialUserRoleList = new List<TrialUserRole>() { new TrialUserRole() { TrialId = trialId, UserId = userRoleId } }
});
}
else
{
if (!await _trialUserRoleRepository.AnyAsync(t => t.TrialId == trialId && t.UserId == userRoleId, true))
if (findTrialUser.IsDeleted == true)
{
await _trialUserRoleRepository.AddAsync(new TrialUserRole() { TrialId = trialId, UserId = userRoleId, TrialUserId = findTrialUser.Id });
findTrialUser.IsDeleted = false;
findTrialUser.DeletedTime = null;
findTrialUser.RemoveTime = null;
findTrialUser.JoinTime = DateTime.Now;
}
var findTrialUserRole = findTrialUser.TrialUserRoleList.Where(t => t.UserRole.UserTypeId == userRoleId).FirstOrDefault();
if (findTrialUserRole == null)
{
//添加该角色
findTrialUser.TrialUserRoleList.Add(new TrialUserRole() { TrialUserId = findTrialUser.Id, TrialId = trialId, UserId = userRoleId });
}
else
{
//如果禁用,那么启用
if (findTrialUserRole.IsDeleted == true)
{
findTrialUserRole.IsDeleted = false;
findTrialUser.DeletedTime = null;
}
}
}
await _userRoleRepository.BatchUpdateNoTrackingAsync(t => t.Id == userRoleId, u => new UserRole() { DoctorId = intoGroupItem.DoctorId });
await _enrollRepository.BatchUpdateNoTrackingAsync(t => t.Id == intoGroupItem.Id, u => new Enroll() { DoctorUserId = userRoleId });

View File

@ -8,7 +8,11 @@ using System.Threading.Tasks;
namespace IRaCIS.Core.Application.Triggers.AfterSaveTrigger
{
/// <summary>
/// 维护用户角色表中的账户信息
/// </summary>
/// <param name="_identityUserRepository"></param>
/// <param name="_userRoleRepository"></param>
public class IdenttiyUserRoleInfoTrigger(IRepository<IdentityUser> _identityUserRepository, IRepository<UserRole> _userRoleRepository) : IAfterSaveTrigger<IdentityUser>
{
public async Task AfterSave(ITriggerContext<IdentityUser> context, CancellationToken cancellationToken)
@ -25,4 +29,7 @@ namespace IRaCIS.Core.Application.Triggers.AfterSaveTrigger
});
}
}
}

View File

@ -8,6 +8,10 @@ using System.Threading.Tasks;
namespace IRaCIS.Core.Application.Triggers.AfterSaveTrigger
{
/// <summary>
/// 账户日志 记录账户每次操作的信息
/// </summary>
/// <param name="_identityUserRepository"></param>
public class UserLogAfterTrigger(IRepository<IdentityUser> _identityUserRepository) : IAfterSaveTrigger<UserLog>
{
public async Task AfterSave(ITriggerContext<UserLog> context, CancellationToken cancellationToken)
@ -58,4 +62,7 @@ namespace IRaCIS.Core.Application.Triggers.AfterSaveTrigger
}
}
}
}