diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index 88206247a..12f0cc3b5 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -12914,9 +12914,6 @@
Setting页面 为 site 勾选CRC用户列表
-
- 项目参与人员退出 其中IQC退出 回去释放工作量
-
分页获取临床项目列表 默认后台加急状态为3 查所有的
@@ -17100,6 +17097,32 @@
+
+
+ 维护用户角色表中的账户信息
+
+
+
+
+
+
+ 维护用户角色表中的账户信息
+
+
+
+
+
+
+ 账户日志 记录账户每次操作的信息
+
+
+
+
+
+ 账户日志 记录账户每次操作的信息
+
+
+
因为可能先一致性核查通过,生成其他标准的任务了,新签名的标准也需要产生任务
diff --git a/IRaCIS.Core.Application/Service/Common/MailService.cs b/IRaCIS.Core.Application/Service/Common/MailService.cs
index 8d57b1160..665d2dc4f 100644
--- a/IRaCIS.Core.Application/Service/Common/MailService.cs
+++ b/IRaCIS.Core.Application/Service/Common/MailService.cs
@@ -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 _visitTaskRepository,
IRepository _trialSiteRepository,
IRepository _userRoleRepository,
+ IRepository _userLogRepository,
IRepository _identityUserRepository,
IRepository _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);
}
diff --git a/IRaCIS.Core.Application/Service/Management/UserService.cs b/IRaCIS.Core.Application/Service/Management/UserService.cs
index f47188a63..dc43fb811 100644
--- a/IRaCIS.Core.Application/Service/Management/UserService.cs
+++ b/IRaCIS.Core.Application/Service/Management/UserService.cs
@@ -503,8 +503,11 @@ namespace IRaCIS.Core.Application.Service
var user = await _identityUserRepository.Where(t => t.Id == identityUserId).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
- user.AccountList = await _userRoleRepository.Where(t => t.IdentityUserId == identityUserId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+ if (user != null)
+ {
+ user.AccountList = await _userRoleRepository.Where(t => t.IdentityUserId == identityUserId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+ }
return user;
}
diff --git a/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs b/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs
index 03a1a5fbf..83a40e9a1 100644
--- a/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs
+++ b/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs
@@ -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(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() { };
@@ -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(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() { };
@@ -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();
diff --git a/IRaCIS.Core.Application/Service/SiteSurvey/_MapConfig.cs b/IRaCIS.Core.Application/Service/SiteSurvey/_MapConfig.cs
index 80b34555b..b7353328d 100644
--- a/IRaCIS.Core.Application/Service/SiteSurvey/_MapConfig.cs
+++ b/IRaCIS.Core.Application/Service/SiteSurvey/_MapConfig.cs
@@ -93,8 +93,11 @@ namespace IRaCIS.Core.Application.AutoMapper
.ForMember(d => d.UserTypeEnum, u => u.MapFrom(s => s.UserTypeRole.UserTypeEnum));
+ CreateMap();
+ CreateMap();
+
}
}
}
\ No newline at end of file
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialExternalUserService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialExternalUserService.cs
index 27f02712a..f77d0e177 100644
--- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialExternalUserService.cs
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialExternalUserService.cs
@@ -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() { };
@@ -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);
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs
index 185c13a10..2242e9d92 100644
--- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs
@@ -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
-
-
-
-
-
-
-
- /// 项目参与人员退出 其中IQC退出 回去释放工作量
- //[TrialAudit(AuditType.TrialAudit, AuditOptType.DeleteTrailStaff)]
- [HttpDelete, Route("{id:guid}/{trialId:guid}/{isDelete:bool}")]
- [TrialGlobalLimit("AfterStopCannNotOpt")]
- [UnitOfWork]
- [Obsolete]
- public async Task 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();
- }
-
-
-
}
}
diff --git a/IRaCIS.Core.Application/Service/WorkLoad/EnrollService.cs b/IRaCIS.Core.Application/Service/WorkLoad/EnrollService.cs
index 826936f48..0a4ece20c 100644
--- a/IRaCIS.Core.Application/Service/WorkLoad/EnrollService.cs
+++ b/IRaCIS.Core.Application/Service/WorkLoad/EnrollService.cs
@@ -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() { 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 });
diff --git a/IRaCIS.Core.Application/Triggers/AfterSaveTrigger/IdenttiyUserRoleInfoTrigger.cs b/IRaCIS.Core.Application/Triggers/AfterSaveTrigger/IdenttiyUserRoleInfoTrigger.cs
index 9df9f4542..eee6976d3 100644
--- a/IRaCIS.Core.Application/Triggers/AfterSaveTrigger/IdenttiyUserRoleInfoTrigger.cs
+++ b/IRaCIS.Core.Application/Triggers/AfterSaveTrigger/IdenttiyUserRoleInfoTrigger.cs
@@ -8,7 +8,11 @@ using System.Threading.Tasks;
namespace IRaCIS.Core.Application.Triggers.AfterSaveTrigger
{
-
+ ///
+ /// 维护用户角色表中的账户信息
+ ///
+ ///
+ ///
public class IdenttiyUserRoleInfoTrigger(IRepository _identityUserRepository, IRepository _userRoleRepository) : IAfterSaveTrigger
{
public async Task AfterSave(ITriggerContext context, CancellationToken cancellationToken)
@@ -25,4 +29,7 @@ namespace IRaCIS.Core.Application.Triggers.AfterSaveTrigger
});
}
}
+
+
+
}
diff --git a/IRaCIS.Core.Application/Triggers/AfterSaveTrigger/UserLogAfterTrigger.cs b/IRaCIS.Core.Application/Triggers/AfterSaveTrigger/UserLogAfterTrigger.cs
index ce19b7e24..48c0017e0 100644
--- a/IRaCIS.Core.Application/Triggers/AfterSaveTrigger/UserLogAfterTrigger.cs
+++ b/IRaCIS.Core.Application/Triggers/AfterSaveTrigger/UserLogAfterTrigger.cs
@@ -8,6 +8,10 @@ using System.Threading.Tasks;
namespace IRaCIS.Core.Application.Triggers.AfterSaveTrigger
{
+ ///
+ /// 账户日志 记录账户每次操作的信息
+ ///
+ ///
public class UserLogAfterTrigger(IRepository _identityUserRepository) : IAfterSaveTrigger
{
public async Task AfterSave(ITriggerContext context, CancellationToken cancellationToken)
@@ -58,4 +62,7 @@ namespace IRaCIS.Core.Application.Triggers.AfterSaveTrigger
}
}
}
+
+
+
}