diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index c3d841284..c6e7bd631 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -15465,6 +15465,45 @@
+
+
+ 初始登陆界面 项目基本信息+下拉框数据
+
+
+
+
+
+
+ 实际这里只会是更新 添加在login的时候做了
+
+
+
+
+
+
+ 项目Site调研用户列表 所有site的调研用户 最新的调研表的记录的用户 new
+
+
+
+
+
+ 获取 项目 site的调研记录 New
+
+
+
+
+
+ 驳回 New
+
+
+
+
+
+ 调研表废除
+
+
+
+
验证后 如果数据库该项目不存在该邮箱 那么就插入记录 存在
@@ -15480,45 +15519,6 @@
-
-
- 实际这里只会是更新 添加在login的时候做了
-
-
-
-
-
-
- 删除调研表
-
-
-
-
-
-
- 获取 项目 site的调研记录 New
-
-
-
-
-
- 项目Site调研用户列表 所有site的调研用户 最新的调研表的记录的用户 new
-
-
-
-
-
- 初始登陆界面 项目基本信息+下拉框数据
-
-
-
-
-
-
- 驳回 New
-
-
-
提交 后台自动识别是谁提交
diff --git a/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs b/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs
index 4bd6c214b..c402e1f3d 100644
--- a/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs
+++ b/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs
@@ -206,6 +206,11 @@ namespace IRaCIS.Application.Contracts
}
+ public class UserBasicInfoCommand : UserInfo
+ {
+ public Guid Id { get; set; }
+ }
+
public class UserCommand : UserInfo
{
public Guid? Id { get; set; }
@@ -218,7 +223,7 @@ namespace IRaCIS.Application.Contracts
}
- public class IdentityUserTypeDTO: UserAddUserType
+ public class IdentityUserTypeDTO : UserAddUserType
{
public Guid Id { get; set; }
public string UserTypeShortName { get; set; }
@@ -237,7 +242,7 @@ namespace IRaCIS.Application.Contracts
public bool IsUserRoleDisabled { get; set; }
-
+
}
public class EditPasswordCommand
diff --git a/IRaCIS.Core.Application/Service/Management/UserService.cs b/IRaCIS.Core.Application/Service/Management/UserService.cs
index ecbc4d59a..edda8af69 100644
--- a/IRaCIS.Core.Application/Service/Management/UserService.cs
+++ b/IRaCIS.Core.Application/Service/Management/UserService.cs
@@ -479,47 +479,6 @@ namespace IRaCIS.Core.Application.Service
.WhereIf(inQuery.IsZhiZhun != null, t => t.IsZhiZhun == inQuery.IsZhiZhun)
.ProjectTo(_mapper.ConfigurationProvider);
-
- //var userQueryable = _identityUserRepository.Where(x => x.UserTypeEnum != UserTypeEnum.SuperAdmin)
- // .WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserName), t => t.UserName.Contains(inQuery.UserName))
- // .WhereIf(!string.IsNullOrWhiteSpace(inQuery.RealName), t => t.FullName.Contains(inQuery.RealName))
- // .WhereIf(!string.IsNullOrWhiteSpace(inQuery.Phone), t => t.Phone.Contains(inQuery.Phone))
- // .WhereIf(!string.IsNullOrWhiteSpace(inQuery.OrganizationName), t => t.OrganizationName.Contains(inQuery.OrganizationName))
- // .WhereIf(!string.IsNullOrWhiteSpace(inQuery.EMail), t => t.EMail.Contains(inQuery.EMail))
- // .WhereIf(inQuery.BeginCreateTime != null, t => t.CreateTime >= inQuery.BeginCreateTime)
- // .WhereIf(inQuery.EndCreateTime != null, t => t.CreateTime <= inQuery.EndCreateTime)
- // .WhereIf(inQuery.BeginLastLoginTime != null, t => t.LastLoginTime >= inQuery.BeginLastLoginTime)
- // .WhereIf(inQuery.EndLastLoginTime != null, t => t.LastLoginTime <= inQuery.EndLastLoginTime)
- // .WhereIf(inQuery.UserType != null, t => t.UserTypeId == inQuery.UserType)
- // .WhereIf(inQuery.UserState != null, t => t.Status == inQuery.UserState)
- // .WhereIf(inQuery.IsTestUser != null, t => t.IsTestUser == inQuery.IsTestUser)
- // .WhereIf(inQuery.IsZhiZhun != null, t => t.IsZhiZhun == inQuery.IsZhiZhun)
- // .GroupBy(t => t.IdentityUserId).Select(g => new UserListDTO()
- // {
- // IdentityUserId = g.Key,
- // UserRoleList = g.Select(c => new UserAddUserType()
- // {
- // UserTypeEnum = c.UserTypeEnum,
- // UserTypeId = c.UserTypeId,
- // }).ToList(),
-
- // UserCode = g.FirstOrDefault().UserCode,
- // DepartmentName = g.FirstOrDefault().DepartmentName,
- // CreateTime = g.FirstOrDefault().CreateTime,
- // EMail = g.FirstOrDefault().EMail,
- // FirstName = g.FirstOrDefault().FirstName,
- // IsTestUser = g.FirstOrDefault().IsTestUser,
- // IsZhiZhun = g.FirstOrDefault().IsZhiZhun,
- // LastName = g.FirstOrDefault().LastName,
- // OrganizationName = g.FirstOrDefault().OrganizationName,
- // FullName = g.FirstOrDefault().FullName,
- // Phone = g.FirstOrDefault().Phone,
- // PositionName = g.FirstOrDefault().PositionName,
- // Sex = g.FirstOrDefault().Sex,
- // Status = g.FirstOrDefault().Status,
- // UserName = g.FirstOrDefault().UserName,
- // });
-
return await userQueryable.ToPagedListAsync(inQuery);
}
@@ -671,7 +630,7 @@ namespace IRaCIS.Core.Application.Service
{
var find = user.UserRoleList.FirstOrDefault(t => t.UserTypeEnum == role.UserTypeEnum && t.UserTypeId == role.UserTypeId);
- if (find != null )
+ if (find != null)
{
find.IsUserRoleDisabled = role.IsUserRoleDisabled;
}
@@ -696,6 +655,21 @@ namespace IRaCIS.Core.Application.Service
}
+ [HttpPut]
+ public async Task UpdateUserBasicInfo(UserBasicInfoCommand command)
+ {
+
+ var user = await _identityUserRepository.Where(t => t.Id == command.Id, true).FirstOrDefaultAsync();
+
+ if (user == null) return Null404NotFound(user);
+
+ _mapper.Map(command, user);
+
+ await _identityUserRepository.SaveChangesAsync();
+
+ return ResponseOutput.Ok();
+
+ }
/////
///// 禁用或者启用账户
@@ -1134,7 +1108,7 @@ namespace IRaCIS.Core.Application.Service
{
var jwt = _tokenService.GetToken(userTokenInfo);
-
+
return jwt;
}
diff --git a/IRaCIS.Core.Application/Service/SiteSurvey/Interface/ITrialSiteSurveyService.cs b/IRaCIS.Core.Application/Service/SiteSurvey/Interface/ITrialSiteSurveyService.cs
index 211a5d897..28c0ac131 100644
--- a/IRaCIS.Core.Application/Service/SiteSurvey/Interface/ITrialSiteSurveyService.cs
+++ b/IRaCIS.Core.Application/Service/SiteSurvey/Interface/ITrialSiteSurveyService.cs
@@ -11,7 +11,7 @@ namespace IRaCIS.Core.Application.Contracts
public interface ITrialSiteSurveyService
{
Task AddOrUpdateTrialSiteSurvey(TrialSiteSurveyAddOrEdit addOrEditTrialSiteSurvey);
- Task DeleteTrialSiteSurvey(Guid trialSiteSurveyId);
+ //Task DeleteTrialSiteSurvey(Guid trialSiteSurveyId);
Task GetSiteSurveyInfo(Guid trialSiteSurveyId, Guid trialId);
Task> GetTrialSiteSurveyList(TrialSiteSurveyQueryDTO surveyQueryDTO);
Task GetTrialSurveyInitInfo(Guid trialId);
diff --git a/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs b/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs
index 099c4e1e9..fd06ada9f 100644
--- a/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs
+++ b/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs
@@ -26,6 +26,8 @@ using MassTransit;
using DocumentFormat.OpenXml.Spreadsheet;
using StackExchange.Redis;
using Panda.DynamicWebApi.Attributes;
+using IdentityModel;
+using Microsoft.AspNetCore.Components.Routing;
namespace IRaCIS.Core.Application.Contracts
{
@@ -78,6 +80,9 @@ namespace IRaCIS.Core.Application.Contracts
return ResponseOutput.Ok();
}
+
+ #region 多账户需要修改
+
///
/// 通过UserId获取Doctorid
///
@@ -172,6 +177,10 @@ namespace IRaCIS.Core.Application.Contracts
}
}
+ #endregion
+
+
+
///
/// 验证邮箱验证码 获取医生信息Id
///
@@ -279,6 +288,211 @@ namespace IRaCIS.Core.Application.Contracts
}
+
+
+
+ #region 中心调研修改
+
+ ///
+ /// 初始登陆界面 项目基本信息+下拉框数据
+ ///
+ ///
+ ///
+ [AllowAnonymous]
+ [HttpGet("{trialId:guid}")]
+ public async Task GetTrialSurveyInitInfo(Guid trialId)
+ {
+ var info = await _trialRepository.Where(t => t.Id == trialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync().IfNullThrowException();
+
+ return info;
+ }
+
+ ///
+ /// 实际这里只会是更新 添加在login的时候做了
+ ///
+ ///
+ ///
+ [TrialGlobalLimit("AfterStopCannNotOpt")]
+ public async Task AddOrUpdateTrialSiteSurvey(TrialSiteSurveyAddOrEdit addOrEditTrialSiteSurvey)
+ {
+
+ if (addOrEditTrialSiteSurvey.Id != null)
+ {
+ if (await _trialSiteSurveyRepository.AnyAsync(t => t.Id == addOrEditTrialSiteSurvey.Id && t.State == TrialSiteSurveyEnum.PMCreatedAndLock))
+ {
+ //---中心调研已锁定,不允许操作。
+ return ResponseOutput.NotOk(_localizer["TrialSiteSurvey_Locked"]);
+ }
+ }
+
+
+ if (addOrEditTrialSiteSurvey.Id == null)
+ {
+ var entity = _mapper.Map(addOrEditTrialSiteSurvey);
+ await _trialSiteSurveyRepository.AddAsync(entity, true);
+ return ResponseOutput.Ok(entity.Id.ToString());
+ }
+ else
+ {
+
+ var entity = await _trialSiteSurveyRepository.Where(t => t.Id == addOrEditTrialSiteSurvey.Id, true).Include(x => x.ReviewerUser).Include(x => x.PreliminaryUser).FirstOrDefaultAsync();
+ _mapper.Map(addOrEditTrialSiteSurvey, entity);
+ await _trialSiteSurveyRepository.SaveChangesAsync();
+
+ }
+ return ResponseOutput.Ok(true);
+ }
+
+
+ ///
+ /// 项目Site调研用户列表 所有site的调研用户 最新的调研表的记录的用户 new
+ ///
+ ///
+ public async Task> TrialSiteSurveyUserList(TrialSiteUserSurveyAllQuery inQuery)
+ {
+
+ //找到该中心最新的调研记录
+ var groupSelectIdQuery =
+ _trialSiteSurveyRepository.Where(t => t.TrialId == inQuery.TrialId)
+ .WhereIf(inQuery.TrialSiteId != null, t => t.TrialSiteId == inQuery.TrialSiteId)
+
+ .WhereIf(!string.IsNullOrEmpty(inQuery.FormWriterKeyInfo), t => (t.UserName).Contains(inQuery.FormWriterKeyInfo) || t.Email.Contains(inQuery.FormWriterKeyInfo) || t.Phone.Contains(inQuery.FormWriterKeyInfo))
+ .GroupBy(t => t.TrialSiteId)
+ .Select(g => g.OrderByDescending(u => u.CreateTime).Select(t => t.Id).First());
+
+
+ var query = _trialSiteUserSurveyRepository
+ .Where(t => groupSelectIdQuery.Contains(t.TrialSiteSurveyId))
+ .WhereIf(inQuery.TrialRoleCode != null, t => t.TrialRoleCode == inQuery.TrialRoleCode)
+ .WhereIf(inQuery.UserTypeId != null, t => t.UserTypeId == inQuery.UserTypeId)
+ .WhereIf(inQuery.IsGenerateAccount != null, t => t.IsGenerateAccount == inQuery.IsGenerateAccount)
+ .WhereIf(inQuery.State != null && inQuery.State != TrialSiteUserStateEnum.OverTime, t => t.InviteState == inQuery.State)
+ .WhereIf(!string.IsNullOrEmpty(inQuery.UserName), t => (t.LastName + " / " + t.FirstName).Contains(inQuery.UserName))
+ .WhereIf(!string.IsNullOrEmpty(inQuery.OrganizationName), t => t.OrganizationName.Contains(inQuery.OrganizationName))
+
+ .ProjectTo(_mapper.ConfigurationProvider);
+
+ return await query.ToPagedListAsync(inQuery);
+
+ }
+
+ ///
+ /// 获取 项目 site的调研记录 New
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetTrialSiteSurveyList(TrialSiteSurveyQueryDTO inQuery)
+ {
+ var trialSiteSurveyQueryable = _trialSiteSurveyRepository.Where(t => t.TrialId == inQuery.TrialId).IgnoreQueryFilters()
+ .WhereIf(inQuery.TrialSiteId != null, t => t.TrialSiteId == inQuery.TrialSiteId)
+ .WhereIf(inQuery.IsDeleted != null, t => t.IsDeleted == inQuery.IsDeleted)
+ .WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserKeyInfo), t => t.UserName.Contains(inQuery.UserKeyInfo) || t.Phone.Contains(inQuery.UserKeyInfo) || t.Email.Contains(inQuery.UserKeyInfo))
+ .WhereIf(inQuery.State != null, t => t.State == inQuery.State)
+ .WhereIf(inQuery.UpdateTimeBegin != null, t => t.UpdateTime >= inQuery.UpdateTimeBegin)
+ .WhereIf(inQuery.UpdateTimeEnd != null, t => t.UpdateTime <= inQuery.UpdateTimeEnd)
+
+ .ProjectTo(_mapper.ConfigurationProvider, new { isEn_Us = _userInfo.IsEn_Us })
+ .WhereIf(!string.IsNullOrWhiteSpace(inQuery.PreliminaryUserName), t => t.PreliminaryUser.RealName.Contains(inQuery.PreliminaryUserName))
+ .WhereIf(!string.IsNullOrWhiteSpace(inQuery.ReviewerUserName), t => t.ReviewerUser.RealName.Contains(inQuery.ReviewerUserName))
+ ;
+
+ return await trialSiteSurveyQueryable.ToPagedListAsync(inQuery);
+ }
+
+ [HttpPost]
+ public async Task> GetTrialSiteSurveySelectList(TrialSiteSurveySelectquery inQuery)
+ {
+ var trialSiteSurveyQueryable = _trialSiteSurveyRepository
+ .Where(t => t.Id != inQuery.TrialSiteSurveyId)
+ .Where(t => t.TrialId == inQuery.TrialId && t.TrialSiteId == inQuery.TrialSiteId).IgnoreQueryFilters()
+ .ProjectTo(_mapper.ConfigurationProvider);
+
+ return await trialSiteSurveyQueryable.ToListAsync();
+ }
+ ///
+ /// 驳回 New
+ ///
+ ///
+ [TrialGlobalLimit("AfterStopCannNotOpt")]
+
+ public async Task SubmissionRejection(TrialSiteSubmitBackCommand trialSiteSubmitBackCommand, [FromServices] IMailVerificationService _IMailVerificationService)
+ {
+ var trialSiteSurveyId = trialSiteSubmitBackCommand.TrialSiteSurveyId;
+
+ var survey = await _trialSiteSurveyRepository.FirstOrDefaultAsync(t => t.Id == trialSiteSurveyId);
+
+ survey.LatestBackReason = trialSiteSubmitBackCommand.LatestBackReason;
+
+
+ if (await _trialSiteSurveyRepository.AnyAsync(t => t.State == TrialSiteSurveyEnum.PMCreatedAndLock && t.Id == trialSiteSurveyId))
+ {
+ //---中心调研已锁定,不允许操作。
+ return ResponseOutput.NotOk(_localizer["TrialSiteSurvey_Locked"]);
+ }
+ if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CPM)
+ {
+ survey.State = TrialSiteSurveyEnum.ToSubmit;
+ }
+ else if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.APM)
+ {
+ var isTrialSPMJoin = await _trialRepository.AnyAsync(t => t.Id == trialSiteSubmitBackCommand.TrialId && t.IsSPMJoinSiteSurvey);
+ var hasSPMOrCPM = await _trialSiteSurveyRepository.AnyAsync(t => t.TrialId == trialSiteSubmitBackCommand.TrialId && t.Trial.TrialUserList.Any(u => u.UserRole.UserTypeEnum == UserTypeEnum.SPM || u.UserRole.UserTypeEnum == UserTypeEnum.CPM));
+
+ var isSPMjoin = isTrialSPMJoin && hasSPMOrCPM;
+
+ if (isSPMjoin)
+ {
+ survey.State = TrialSiteSurveyEnum.CRCSubmitted;
+
+ survey.ReviewerUserId = null;
+ survey.ReviewerTime = null;
+ }
+ else
+ {
+ survey.State = TrialSiteSurveyEnum.ToSubmit;
+
+ survey.PreliminaryUserId = null;
+ survey.ReviewerUserId = null;
+ survey.PreliminaryTime = null;
+ survey.ReviewerTime = null;
+
+
+ }
+ }
+
+ await _trialSiteSurveyRepository.SaveChangesAsync();
+
+ return ResponseOutput.Ok();
+ }
+
+ ///
+ /// 调研表废除
+ ///
+ ///
+ ///
+ [HttpPut("{trialId:guid}/{trialSiteSurveyId:guid}")]
+ [TrialGlobalLimit("AfterStopCannNotOpt")]
+
+ public async Task AbandonSiteSurvey(Guid trialSiteSurveyId)
+ {
+ var survey = (await _trialSiteSurveyRepository.FirstOrDefaultAsync(t => t.Id == trialSiteSurveyId, true)).IfNullThrowException();
+
+ if (survey.State != TrialSiteSurveyEnum.ToSubmit)
+ {
+ //---只允许废除未提交的记录。
+ return ResponseOutput.NotOk(_localizer["TrialSiteSurvey_CancelUnsubmittedRecord"]);
+ }
+
+ survey.IsDeleted = true;
+
+ await _trialSiteSurveyRepository.SaveChangesAsync();
+
+ return ResponseOutput.Ok();
+
+ }
+
+ #endregion
+
///
/// 验证后 如果数据库该项目不存在该邮箱 那么就插入记录 存在
///
@@ -465,6 +679,7 @@ namespace IRaCIS.Core.Application.Contracts
foreach (var item in userList)
{
var find = existList.FirstOrDefault(t => t.SystemUserId == item.SystemUserId);
+
//不存在就加入
if (find == null)
{
@@ -512,252 +727,7 @@ namespace IRaCIS.Core.Application.Contracts
}
- ///
- /// 实际这里只会是更新 添加在login的时候做了
- ///
- ///
- ///
- [TrialGlobalLimit("AfterStopCannNotOpt")]
- public async Task AddOrUpdateTrialSiteSurvey(TrialSiteSurveyAddOrEdit addOrEditTrialSiteSurvey)
- {
- if (addOrEditTrialSiteSurvey.Id != null)
- {
- if (await _trialSiteSurveyRepository.AnyAsync(t => t.Id == addOrEditTrialSiteSurvey.Id && t.State == TrialSiteSurveyEnum.PMCreatedAndLock))
- {
- //---中心调研已锁定,不允许操作。
- return ResponseOutput.NotOk(_localizer["TrialSiteSurvey_Locked"]);
- }
- }
-
-
- if (addOrEditTrialSiteSurvey.Id == null)
- {
- var entity = _mapper.Map(addOrEditTrialSiteSurvey);
- await _trialSiteSurveyRepository.AddAsync(entity, true);
- return ResponseOutput.Ok(entity.Id.ToString());
- }
- else
- {
-
- var entity = await _trialSiteSurveyRepository.Where(t => t.Id == addOrEditTrialSiteSurvey.Id, true).Include(x => x.ReviewerUser).Include(x => x.PreliminaryUser).FirstOrDefaultAsync();
- _mapper.Map(addOrEditTrialSiteSurvey, entity);
- await _trialSiteSurveyRepository.SaveChangesAsync();
-
- }
- return ResponseOutput.Ok(true);
- }
-
-
- ///
- /// 删除调研表
- ///
- ///
- ///
- [HttpDelete("{trialSiteSurveyId:guid}/{trialId:guid}")]
- public async Task DeleteTrialSiteSurvey(Guid trialSiteSurveyId)
- {
-
- if (await _trialSiteSurveyRepository.AnyAsync(t => t.Id == trialSiteSurveyId && t.State == TrialSiteSurveyEnum.PMCreatedAndLock))
- {
- //---中心调研已锁定,不允许操作。
- return ResponseOutput.NotOk(_localizer["TrialSiteSurvey_Locked"]);
- }
-
- var success = await _trialSiteSurveyRepository.BatchDeleteNoTrackingAsync(t => t.Id == trialSiteSurveyId);
-
- return ResponseOutput.Result(success);
- }
-
-
- ///
- /// 获取 项目 site的调研记录 New
- ///
- ///
- [HttpPost]
- public async Task> GetTrialSiteSurveyList(TrialSiteSurveyQueryDTO inQuery)
- {
- var trialSiteSurveyQueryable = _trialSiteSurveyRepository.Where(t => t.TrialId == inQuery.TrialId).IgnoreQueryFilters()
- .WhereIf(inQuery.TrialSiteId != null, t => t.TrialSiteId == inQuery.TrialSiteId)
- .WhereIf(inQuery.IsDeleted != null, t => t.IsDeleted == inQuery.IsDeleted)
- .WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserKeyInfo), t => t.UserName.Contains(inQuery.UserKeyInfo) || t.Phone.Contains(inQuery.UserKeyInfo) || t.Email.Contains(inQuery.UserKeyInfo))
- .WhereIf(inQuery.State != null, t => t.State == inQuery.State)
- .WhereIf(inQuery.UpdateTimeBegin != null, t => t.UpdateTime >= inQuery.UpdateTimeBegin)
- .WhereIf(inQuery.UpdateTimeEnd != null, t => t.UpdateTime <= inQuery.UpdateTimeEnd)
-
- .ProjectTo(_mapper.ConfigurationProvider, new { isEn_Us = _userInfo.IsEn_Us })
- .WhereIf(!string.IsNullOrWhiteSpace(inQuery.PreliminaryUserName), t => t.PreliminaryUser.RealName.Contains(inQuery.PreliminaryUserName))
- .WhereIf(!string.IsNullOrWhiteSpace(inQuery.ReviewerUserName), t => t.ReviewerUser.RealName.Contains(inQuery.ReviewerUserName))
- ;
-
- return await trialSiteSurveyQueryable.ToPagedListAsync(inQuery);
- }
-
- [HttpPost]
- public async Task> GetTrialSiteSurveySelectList(TrialSiteSurveySelectquery inQuery)
- {
- var trialSiteSurveyQueryable = _trialSiteSurveyRepository
- .Where(t => t.Id != inQuery.TrialSiteSurveyId)
- .Where(t => t.TrialId == inQuery.TrialId && t.TrialSiteId == inQuery.TrialSiteId).IgnoreQueryFilters()
- .ProjectTo(_mapper.ConfigurationProvider);
-
- return await trialSiteSurveyQueryable.ToListAsync();
- }
-
- ///
- /// 项目Site调研用户列表 所有site的调研用户 最新的调研表的记录的用户 new
- ///
- ///
- public async Task> TrialSiteSurveyUserList(TrialSiteUserSurveyAllQuery inQuery)
- {
-
-
- var groupSelectIdQuery =
- _trialSiteSurveyRepository.Where(t => t.TrialId == inQuery.TrialId)
- .WhereIf(inQuery.TrialSiteId != null, t => t.TrialSiteId == inQuery.TrialSiteId)
-
- .WhereIf(!string.IsNullOrEmpty(inQuery.FormWriterKeyInfo), t => (t.UserName).Contains(inQuery.FormWriterKeyInfo) || t.Email.Contains(inQuery.FormWriterKeyInfo) || t.Phone.Contains(inQuery.FormWriterKeyInfo))
- .GroupBy(t => t.TrialSiteId)
- .Select(g => g.OrderByDescending(u => u.CreateTime).Select(t => t.Id).First());
-
-
- var query = _trialSiteUserSurveyRepository
- .Where(t => groupSelectIdQuery.Contains(t.TrialSiteSurveyId))
- .WhereIf(inQuery.TrialRoleCode != null, t => t.TrialRoleCode == inQuery.TrialRoleCode)
- .WhereIf(inQuery.UserTypeId != null, t => t.UserTypeId == inQuery.UserTypeId)
- .WhereIf(inQuery.IsGenerateAccount != null, t => t.IsGenerateAccount == inQuery.IsGenerateAccount)
- .WhereIf(inQuery.State != null && inQuery.State != TrialSiteUserStateEnum.OverTime, t => t.InviteState == inQuery.State)
- .WhereIf(!string.IsNullOrEmpty(inQuery.UserName), t => (t.LastName + " / " + t.FirstName).Contains(inQuery.UserName))
- .WhereIf(!string.IsNullOrEmpty(inQuery.OrganizationName), t => t.OrganizationName.Contains(inQuery.OrganizationName))
-
- .ProjectTo(_mapper.ConfigurationProvider);
-
-
- return await query.ToPagedListAsync(inQuery);
-
-
-
-
- //return await query.ToPagedListAsync(queryParam.PageIndex, queryParam.PageSize, queryParam.SortField, queryParam.Asc);
- }
-
-
-
- ///
- /// 初始登陆界面 项目基本信息+下拉框数据
- ///
- ///
- ///
- [AllowAnonymous]
- [HttpGet("{trialId:guid}")]
- public async Task GetTrialSurveyInitInfo(Guid trialId)
- {
- var info = await _trialRepository.Where(t => t.Id == trialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync().IfNullThrowException();
-
- return info;
- }
-
-
- ///
- /// 驳回 New
- ///
- ///
- [TrialGlobalLimit("AfterStopCannNotOpt")]
-
- public async Task SubmissionRejection(TrialSiteSubmitBackCommand trialSiteSubmitBackCommand, [FromServices] IMailVerificationService _IMailVerificationService)
- {
- var trialSiteSurveyId = trialSiteSubmitBackCommand.TrialSiteSurveyId;
-
- var survey = await _trialSiteSurveyRepository.FirstOrDefaultAsync(t => t.Id == trialSiteSurveyId);
-
- survey.LatestBackReason = trialSiteSubmitBackCommand.LatestBackReason;
-
- //User? user = null;
-
- //var messageToSend = new MimeMessage();
-
-
- if (await _trialSiteSurveyRepository.AnyAsync(t => t.State == TrialSiteSurveyEnum.PMCreatedAndLock && t.Id == trialSiteSurveyId))
- {
- //---中心调研已锁定,不允许操作。
- return ResponseOutput.NotOk(_localizer["TrialSiteSurvey_Locked"]);
- }
- if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CPM)
- {
-
- ////SPM 给填表人发
- //messageToSend.To.Add(new MailboxAddress(String.Empty, survey.Email));
-
- survey.State = TrialSiteSurveyEnum.ToSubmit;
- }
- else if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.APM)
- {
- var isTrialSPMJoin = await _trialRepository.AnyAsync(t => t.Id == trialSiteSubmitBackCommand.TrialId && t.IsSPMJoinSiteSurvey);
- var hasSPMOrCPM = await _trialSiteSurveyRepository.AnyAsync(t => t.TrialId == trialSiteSubmitBackCommand.TrialId && t.Trial.TrialUserList.Any(u => u.UserRole.UserTypeEnum == UserTypeEnum.SPM || u.UserRole.UserTypeEnum == UserTypeEnum.CPM));
-
- var isSPMjoin = isTrialSPMJoin && hasSPMOrCPM;
-
- if (isSPMjoin)
- {
-
- ////PM 给SPM发 (初审人)
- //user = await _userRoleRepository.FirstOrDefaultAsync(t => t.Id == survey.PreliminaryUserId);
-
- //messageToSend.To.Add(new MailboxAddress(String.Empty, survey.PreliminaryUserId == null ? survey.Email : user.EMail));
-
- survey.State = TrialSiteSurveyEnum.CRCSubmitted;
-
- survey.ReviewerUserId = null;
- survey.ReviewerTime = null;
- }
- else
- {
-
- ////没有SPM 给填表人发
- //messageToSend.To.Add(new MailboxAddress(String.Empty, survey.Email));
-
- survey.State = TrialSiteSurveyEnum.ToSubmit;
-
- survey.PreliminaryUserId = null;
- survey.ReviewerUserId = null;
- survey.PreliminaryTime = null;
- survey.ReviewerTime = null;
-
-
- }
- }
-
- //await _IMailVerificationService.SiteSurveyRejectEmail(messageToSend, survey, trialSiteSubmitBackCommand.RouteUrl, user);
-
- await _trialSiteSurveyRepository.SaveChangesAsync();
-
- return ResponseOutput.Ok();
- }
-
-
-
-
-
- [HttpPut("{trialId:guid}/{trialSiteSurveyId:guid}")]
- [TrialGlobalLimit("AfterStopCannNotOpt")]
-
- public async Task AbandonSiteSurvey(Guid trialSiteSurveyId)
- {
- var survey = (await _trialSiteSurveyRepository.FirstOrDefaultAsync(t => t.Id == trialSiteSurveyId, true)).IfNullThrowException();
-
- if (survey.State != TrialSiteSurveyEnum.ToSubmit)
- {
- //---只允许废除未提交的记录。
- return ResponseOutput.NotOk(_localizer["TrialSiteSurvey_CancelUnsubmittedRecord"]);
- }
-
- survey.IsDeleted = true;
-
- await _trialSiteSurveyRepository.SaveChangesAsync();
-
- return ResponseOutput.Ok();
-
- }
@@ -875,11 +845,13 @@ namespace IRaCIS.Core.Application.Contracts
{
var trialType = _trialRepository.Where(t => t.Id == trialId).Select(t => t.TrialType).FirstOrDefault();
- foreach (var item in needGenerateList)
+ foreach (var item in needGenerateList.GroupBy(t => t.Email))
{
+ var addUserRoleList = item.ToList();
+
//找下系统中是否存在该用户类型的 并且邮箱 或者手机的账户
- var sysUserInfo = await _userRoleRepository.Where(t => t.UserTypeId == item.UserTypeId && t.EMail == item.Email).Include(t => t.UserTypeRole).FirstOrDefaultAsync();
+ var sysUserInfo = await _identityUserRepository.Where(t => t.EMail == item.Key, true).Include(t => t.UserRoleList).FirstOrDefaultAsync();
if (sysUserInfo == null)
@@ -889,7 +861,7 @@ namespace IRaCIS.Core.Application.Contracts
using (await @lock.AcquireAsync())
{
- var saveItem = _mapper.Map(item);
+ var saveItem = _mapper.Map(item);
if (trialType == TrialType.NoneOfficial)
@@ -907,26 +879,81 @@ namespace IRaCIS.Core.Application.Contracts
saveItem.Password = MD5Helper.Md5(IRCEmailPasswordHelper.GenerateRandomPassword(10));
- saveItem.UserTypeEnum = _userTypeRepository.Where(t => t.Id == saveItem.UserTypeId).Select(t => t.UserTypeEnum).First();
+
+ var userTypeIds = addUserRoleList.Select(t => t.UserTypeId).ToList();
+
+ var userTypeList = _userTypeRepository.Where(t => userTypeIds.Contains(t.Id)).Select(t => new { t.UserTypeEnum, UserTypeId = t.Id }).ToList();
+
+ saveItem.UserRoleList = new List();
+
+ foreach (var addUserRole in addUserRoleList)
+ {
- var newUser = _userRoleRepository.AddAsync(saveItem).Result;
+ var addRole = _mapper.Map(saveItem);
+
+ addRole.UserTypeEnum = userTypeList.First(t => t.UserTypeId == addRole.UserTypeId).UserTypeEnum;
+ addRole.UserTypeId = (Guid)addUserRole.UserTypeId;
+
+ saveItem.UserRoleList.Add(addRole);
+
+ }
- _ = _userRoleRepository.SaveChangesAsync().Result;
+ var newUser = await _identityUserRepository.AddAsync(saveItem);
+ await _identityUserRepository.SaveChangesAsync();
sysUserInfo = newUser;
+ foreach (var addUserRole in addUserRoleList)
+ {
+ //发送邮件的时候需要用到该字段
+ addUserRole.SystemUserId = sysUserInfo.Id;
+ }
+
}
- await _trialSiteUserSurveyRepository.BatchUpdateNoTrackingAsync(t => t.Id == item.Id, u => new TrialSiteUserSurvey() { IsGenerateSuccess = true, SystemUserId = sysUserInfo.Id });
+ var trialSiteUserIdList = addUserRoleList.Select(t => t.Id).ToList();
+
+ await _trialSiteUserSurveyRepository.BatchUpdateNoTrackingAsync(t => trialSiteUserIdList.Contains(t.Id), u => new TrialSiteUserSurvey() { IsGenerateSuccess = true, SystemUserId = sysUserInfo.Id });
+
+ }
+ else
+ {
+
+ var userTypeIds = addUserRoleList.Select(t => t.UserTypeId).ToList();
+
+ var userTypeList = _userTypeRepository.Where(t => userTypeIds.Contains(t.Id)).Select(t => new { t.UserTypeEnum, UserTypeId = t.Id }).ToList();
+
+ foreach (var addUserRole in addUserRoleList)
+ {
+ var find = sysUserInfo.UserRoleList.FirstOrDefault(t => t.UserTypeId == addUserRole.UserTypeId);
+
+ if (find != null && find.IsUserRoleDisabled == true)
+ {
+ find.IsUserRoleDisabled = false;
+
+ }
+ else
+ {
+ var addRole = _mapper.Map(sysUserInfo);
+
+ addRole.Id = NewId.NextSequentialGuid();
+ addRole.IdentityUserId = sysUserInfo.Id;
+ addRole.UserTypeEnum = userTypeList.First(t => t.UserTypeId == addRole.UserTypeId).UserTypeEnum;
+ addRole.UserTypeId = (Guid)addUserRole.UserTypeId;
+
+ sysUserInfo.UserRoleList.Add(addRole);
+ }
+ }
+
+ await _identityUserRepository.SaveChangesAsync();
}
- //发送邮件的时候需要用到该字段
- item.SystemUserId = sysUserInfo.Id;
+
}
@@ -939,34 +966,46 @@ namespace IRaCIS.Core.Application.Contracts
var trialSiteSurvey = await _trialSiteSurveyRepository.FirstAsync(t => t.Id == joinCommand.TrialSiteSurveyId);
- foreach (var userInfo in joinCommand.UserList)
+ foreach (var item in joinCommand.UserList.GroupBy(t => t.SystemUserId))
{
- if (userInfo.SystemUserId == null)
+ var userRoleList = item.ToList();
+
+ var first = userRoleList.First();
+
+ if (userRoleList.Any(t => t.SystemUserId == null))
{
//---生成账户Id 未取到值,请排查
throw new BusinessValidationFailedException(_localizer["TrialSiteSurvey_FailedToGenerateAccountId"]);
}
var trialId = joinCommand.TrialId;
- var userId = (Guid)userInfo.SystemUserId;
+ var userId = (Guid)item.Key;
var trialSiteId = trialSiteSurvey.TrialSiteId;
+ var sysUserInfo = await _identityUserRepository.Where(t => t.Id == userId, true).Include(t => t.UserRoleList).FirstOrDefaultAsync();
+
+ //判断是否加入到项目
+ var findTrialUser = await _trialIdentityUserRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.IdentityUserId == userId, true);
- //判断TrialUser中是否存在 不存在就插入
-
- var findTrialUser = await _trialUserRoleRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.UserId == userId, true);
if (findTrialUser == null)
{
- await _trialUserRoleRepository.AddAsync(new TrialUserRole() { TrialId = trialId, UserId = userId, JoinTime = DateTime.Now });
+ await _trialIdentityUserRepository.AddAsync(new TrialIdentityUser()
+ {
+ TrialId = trialId,
+ IdentityUserId = userId,
+ JoinTime = DateTime.Now,
+ TrialUserRoleList =
+ userRoleList.Select(t => new TrialUserRole() { TrialId = trialId, UserId = sysUserInfo.UserRoleList.Where(u => u.UserTypeId == t.UserTypeId).Select(t => t.Id).First() }).ToList()
+ });
await _mailVerificationService.SiteSurveyUserJoinEmail(trialId, userId, joinCommand.BaseUrl, joinCommand.RouteUrl);
}
else if (findTrialUser.IsDeleted == true)
{
- await _trialUserRoleRepository.UpdatePartialFromQueryAsync(t => t.TrialId == trialId && t.UserId == userId, c => new TrialUserRole()
+ await _trialIdentityUserRepository.UpdatePartialFromQueryAsync(t => t.TrialId == trialId && t.IdentityUserId == userId, c => new TrialIdentityUser()
{
IsDeleted = false,
DeletedTime = null,
@@ -976,23 +1015,36 @@ namespace IRaCIS.Core.Application.Contracts
await _mailVerificationService.SiteSurveyUserJoinEmail(trialId, userId, joinCommand.BaseUrl, joinCommand.RouteUrl);
}
- var findTrialSiteUser = await _trialSiteUserRoleRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.UserId == userId && t.TrialSiteId == trialSiteId, true);
- if (findTrialSiteUser == null)
+ foreach (var userSuvey in userRoleList)
{
- await _trialSiteUserRoleRepository.AddAsync(new TrialSiteUserRole() { TrialId = trialId, TrialSiteId = trialSiteId, UserId = userId });
+ var userRoleId = sysUserInfo.UserRoleList.Where(t => t.UserTypeId == userSuvey.UserTypeId).First().Id;
+
+ var findTrialSiteUser = await _trialSiteUserRoleRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.UserId == userRoleId && t.TrialSiteId == trialSiteId, true);
+ if (findTrialSiteUser == null)
+ {
+ await _trialSiteUserRoleRepository.AddAsync(new TrialSiteUserRole() { TrialId = trialId, TrialSiteId = trialSiteId, UserId = userRoleId });
+
+ }
+ else
+ {
+ findTrialSiteUser.IsDeleted = false;
+ findTrialSiteUser.DeletedTime = null;
+ }
- }
- else
- {
findTrialSiteUser.IsDeleted = false;
- findTrialSiteUser.DeletedTime = null;
+
+ await _trialSiteUserSurveyRepository.UpdatePartialFromQueryAsync(t => t.Id == userSuvey.Id, u => new TrialSiteUserSurvey() { IsJoin = true });
}
- await _userRoleRepository.BatchUpdateNoTrackingAsync(t => t.Id == userId, u => new UserRole() { Status = UserStateEnum.Enable });
+ await _identityUserRepository.BatchUpdateNoTrackingAsync(t => t.Id == userId, u => new Domain.Models.IdentityUser() { Status = UserStateEnum.Enable });
+
+ await _trialSiteUserRoleRepository.SaveChangesAsync();
+
+
+
- await _trialSiteUserSurveyRepository.UpdatePartialFromQueryAsync(t => t.Id == userInfo.Id, u => new TrialSiteUserSurvey() { IsJoin = true });
}
await _trialSiteSurveyRepository.UpdatePartialFromQueryAsync(t => t.Id == trialSiteSurvey.Id && t.State == TrialSiteSurveyEnum.SPMApproved, u => new TrialSiteSurvey() { State = TrialSiteSurveyEnum.PMCreatedAndLock, ReviewerUserId = _userInfo.UserRoleId, ReviewerTime = DateTime.Now });
@@ -1011,7 +1063,7 @@ namespace IRaCIS.Core.Application.Contracts
var userIdList = list.Select(t => t.SystemUserId).ToList();
- await _trialSiteUserRoleRepository.UpdatePartialFromQueryAsync(t => t.TrialId == trialId && t.TrialSiteId == siteId && userIdList.Contains(t.UserId), c => new TrialSiteUserRole()
+ await _trialSiteUserRoleRepository.UpdatePartialFromQueryAsync(t => t.TrialId == trialId && t.TrialSiteId == siteId && userIdList.Contains(t.UserRole.IdentityUserId), c => new TrialSiteUserRole()
{
IsDeleted = true,
DeletedTime = DateTime.Now,