增加用户基本信息修改接口
continuous-integration/drone/push Build is passing Details

Uat_IRC_Net8
hang 2024-12-25 17:36:04 +08:00
parent 2eaf2d5c69
commit 473e218b2b
5 changed files with 388 additions and 357 deletions

View File

@ -15465,6 +15465,45 @@
<param name="userInfo"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Contracts.TrialSiteSurveyService.GetTrialSurveyInitInfo(System.Guid)">
<summary>
初始登陆界面 项目基本信息+下拉框数据
</summary>
<param name="trialId"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Contracts.TrialSiteSurveyService.AddOrUpdateTrialSiteSurvey(IRaCIS.Core.Application.Contracts.TrialSiteSurveyAddOrEdit)">
<summary>
实际这里只会是更新 添加在login的时候做了
</summary>
<param name="addOrEditTrialSiteSurvey"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Contracts.TrialSiteSurveyService.TrialSiteSurveyUserList(IRaCIS.Core.Application.Contracts.TrialSiteUserSurveyAllQuery)">
<summary>
项目Site调研用户列表 所有site的调研用户 最新的调研表的记录的用户 new
</summary>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Contracts.TrialSiteSurveyService.GetTrialSiteSurveyList(IRaCIS.Core.Application.Contracts.TrialSiteSurveyQueryDTO)">
<summary>
获取 项目 site的调研记录 New
</summary>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Contracts.TrialSiteSurveyService.SubmissionRejection(IRaCIS.Core.Application.Contracts.TrialSiteSubmitBackCommand,IRaCIS.Core.Application.Service.IMailVerificationService)">
<summary>
驳回 New
</summary>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Contracts.TrialSiteSurveyService.AbandonSiteSurvey(System.Guid)">
<summary>
调研表废除
</summary>
<param name="trialSiteSurveyId"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Contracts.TrialSiteSurveyService.VerifySendCode(IRaCIS.Core.Application.Contracts.LoginDto,IRaCIS.Core.Application.Auth.ITokenService)">
<summary>
验证后 如果数据库该项目不存在该邮箱 那么就插入记录 存在
@ -15480,45 +15519,6 @@
</summary>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Contracts.TrialSiteSurveyService.AddOrUpdateTrialSiteSurvey(IRaCIS.Core.Application.Contracts.TrialSiteSurveyAddOrEdit)">
<summary>
实际这里只会是更新 添加在login的时候做了
</summary>
<param name="addOrEditTrialSiteSurvey"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Contracts.TrialSiteSurveyService.DeleteTrialSiteSurvey(System.Guid)">
<summary>
删除调研表
</summary>
<param name="trialSiteSurveyId"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Contracts.TrialSiteSurveyService.GetTrialSiteSurveyList(IRaCIS.Core.Application.Contracts.TrialSiteSurveyQueryDTO)">
<summary>
获取 项目 site的调研记录 New
</summary>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Contracts.TrialSiteSurveyService.TrialSiteSurveyUserList(IRaCIS.Core.Application.Contracts.TrialSiteUserSurveyAllQuery)">
<summary>
项目Site调研用户列表 所有site的调研用户 最新的调研表的记录的用户 new
</summary>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Contracts.TrialSiteSurveyService.GetTrialSurveyInitInfo(System.Guid)">
<summary>
初始登陆界面 项目基本信息+下拉框数据
</summary>
<param name="trialId"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Contracts.TrialSiteSurveyService.SubmissionRejection(IRaCIS.Core.Application.Contracts.TrialSiteSubmitBackCommand,IRaCIS.Core.Application.Service.IMailVerificationService)">
<summary>
驳回 New
</summary>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Contracts.TrialSiteSurveyService.TrialSurveySubmit(IRaCIS.Core.Application.Contracts.TrialSiteSurvyeSubmitDTO)">
<summary>
提交 后台自动识别是谁提交

View File

@ -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

View File

@ -479,47 +479,6 @@ namespace IRaCIS.Core.Application.Service
.WhereIf(inQuery.IsZhiZhun != null, t => t.IsZhiZhun == inQuery.IsZhiZhun)
.ProjectTo<UserListDTO>(_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<IResponseOutput> 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();
}
///// <summary>
///// 禁用或者启用账户
@ -1134,7 +1108,7 @@ namespace IRaCIS.Core.Application.Service
{
var jwt = _tokenService.GetToken(userTokenInfo);
return jwt;
}

View File

@ -11,7 +11,7 @@ namespace IRaCIS.Core.Application.Contracts
public interface ITrialSiteSurveyService
{
Task<IResponseOutput> AddOrUpdateTrialSiteSurvey(TrialSiteSurveyAddOrEdit addOrEditTrialSiteSurvey);
Task<IResponseOutput> DeleteTrialSiteSurvey(Guid trialSiteSurveyId);
//Task<IResponseOutput> DeleteTrialSiteSurvey(Guid trialSiteSurveyId);
Task<LoginReturnDTO> GetSiteSurveyInfo(Guid trialSiteSurveyId, Guid trialId);
Task<PageOutput<TrialSiteSurveyView>> GetTrialSiteSurveyList(TrialSiteSurveyQueryDTO surveyQueryDTO);
Task<TrialSurveyInitInfo> GetTrialSurveyInitInfo(Guid trialId);

View File

@ -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 多账户需要修改
/// <summary>
/// 通过UserId获取Doctorid
/// </summary>
@ -172,6 +177,10 @@ namespace IRaCIS.Core.Application.Contracts
}
}
#endregion
/// <summary>
/// 验证邮箱验证码 获取医生信息Id
/// </summary>
@ -279,6 +288,211 @@ namespace IRaCIS.Core.Application.Contracts
}
#region 中心调研修改
/// <summary>
/// 初始登陆界面 项目基本信息+下拉框数据
/// </summary>
/// <param name="trialId"></param>
/// <returns></returns>
[AllowAnonymous]
[HttpGet("{trialId:guid}")]
public async Task<TrialSurveyInitInfo> GetTrialSurveyInitInfo(Guid trialId)
{
var info = await _trialRepository.Where(t => t.Id == trialId).IgnoreQueryFilters().ProjectTo<TrialSurveyInitInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync().IfNullThrowException();
return info;
}
/// <summary>
/// 实际这里只会是更新 添加在login的时候做了
/// </summary>
/// <param name="addOrEditTrialSiteSurvey"></param>
/// <returns></returns>
[TrialGlobalLimit("AfterStopCannNotOpt")]
public async Task<IResponseOutput> 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<TrialSiteSurvey>(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);
}
/// <summary>
/// 项目Site调研用户列表 所有site的调研用户 最新的调研表的记录的用户 new
/// </summary>
/// <returns></returns>
public async Task<PageOutput<TrialSiteUserSurveyAllDTO>> 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<TrialSiteUserSurveyAllDTO>(_mapper.ConfigurationProvider);
return await query.ToPagedListAsync(inQuery);
}
/// <summary>
/// 获取 项目 site的调研记录 New
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<PageOutput<TrialSiteSurveyView>> 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<TrialSiteSurveyView>(_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<List<TrialSiteSurveySelectView>> GetTrialSiteSurveySelectList(TrialSiteSurveySelectquery inQuery)
{
var trialSiteSurveyQueryable = _trialSiteSurveyRepository
.Where(t => t.Id != inQuery.TrialSiteSurveyId)
.Where(t => t.TrialId == inQuery.TrialId && t.TrialSiteId == inQuery.TrialSiteId).IgnoreQueryFilters()
.ProjectTo<TrialSiteSurveySelectView>(_mapper.ConfigurationProvider);
return await trialSiteSurveyQueryable.ToListAsync();
}
/// <summary>
/// 驳回 New
/// </summary>
/// <returns></returns>
[TrialGlobalLimit("AfterStopCannNotOpt")]
public async Task<IResponseOutput> 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();
}
/// <summary>
/// 调研表废除
/// </summary>
/// <param name="trialSiteSurveyId"></param>
/// <returns></returns>
[HttpPut("{trialId:guid}/{trialSiteSurveyId:guid}")]
[TrialGlobalLimit("AfterStopCannNotOpt")]
public async Task<IResponseOutput> 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
/// <summary>
/// 验证后 如果数据库该项目不存在该邮箱 那么就插入记录 存在
/// </summary>
@ -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
}
/// <summary>
/// 实际这里只会是更新 添加在login的时候做了
/// </summary>
/// <param name="addOrEditTrialSiteSurvey"></param>
/// <returns></returns>
[TrialGlobalLimit("AfterStopCannNotOpt")]
public async Task<IResponseOutput> 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<TrialSiteSurvey>(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);
}
/// <summary>
/// 删除调研表
/// </summary>
/// <param name="trialSiteSurveyId"></param>
/// <returns></returns>
[HttpDelete("{trialSiteSurveyId:guid}/{trialId:guid}")]
public async Task<IResponseOutput> 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);
}
/// <summary>
/// 获取 项目 site的调研记录 New
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<PageOutput<TrialSiteSurveyView>> 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<TrialSiteSurveyView>(_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<List<TrialSiteSurveySelectView>> GetTrialSiteSurveySelectList(TrialSiteSurveySelectquery inQuery)
{
var trialSiteSurveyQueryable = _trialSiteSurveyRepository
.Where(t => t.Id != inQuery.TrialSiteSurveyId)
.Where(t => t.TrialId == inQuery.TrialId && t.TrialSiteId == inQuery.TrialSiteId).IgnoreQueryFilters()
.ProjectTo<TrialSiteSurveySelectView>(_mapper.ConfigurationProvider);
return await trialSiteSurveyQueryable.ToListAsync();
}
/// <summary>
/// 项目Site调研用户列表 所有site的调研用户 最新的调研表的记录的用户 new
/// </summary>
/// <returns></returns>
public async Task<PageOutput<TrialSiteUserSurveyAllDTO>> 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<TrialSiteUserSurveyAllDTO>(_mapper.ConfigurationProvider);
return await query.ToPagedListAsync(inQuery);
//return await query.ToPagedListAsync(queryParam.PageIndex, queryParam.PageSize, queryParam.SortField, queryParam.Asc);
}
/// <summary>
/// 初始登陆界面 项目基本信息+下拉框数据
/// </summary>
/// <param name="trialId"></param>
/// <returns></returns>
[AllowAnonymous]
[HttpGet("{trialId:guid}")]
public async Task<TrialSurveyInitInfo> GetTrialSurveyInitInfo(Guid trialId)
{
var info = await _trialRepository.Where(t => t.Id == trialId).IgnoreQueryFilters().ProjectTo<TrialSurveyInitInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync().IfNullThrowException();
return info;
}
/// <summary>
/// 驳回 New
/// </summary>
/// <returns></returns>
[TrialGlobalLimit("AfterStopCannNotOpt")]
public async Task<IResponseOutput> 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<IResponseOutput> 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<UserRole>(item);
var saveItem = _mapper.Map<IdentityUser>(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<UserRole>();
foreach (var addUserRole in addUserRoleList)
{
var newUser = _userRoleRepository.AddAsync(saveItem).Result;
var addRole = _mapper.Map<UserRole>(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<UserRole>(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,