修改用户临时提交
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
26cba15742
commit
a6080b76b1
|
@ -12853,9 +12853,6 @@
|
|||
<param name="inQuery"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<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.GetTrialUserScreeningList(IRaCIS.Application.Contracts.TrialUserQuery)">
|
||||
<summary> Setting页面 项目参与人员勾选列表 </summary>
|
||||
</member>
|
||||
|
@ -12866,6 +12863,9 @@
|
|||
<param name="userTrialCommands"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<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>
|
||||
|
|
|
@ -123,8 +123,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
|||
t => t.TrialSite.TrialSiteCode.Contains(param.TrialSiteCode))
|
||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator,
|
||||
t => t.UserId == _userInfo.UserRoleId)
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(param.UserKeyInfo), t => (t.User.FullName).Contains(param.UserKeyInfo)
|
||||
|| t.User.UserName.Contains(param.UserKeyInfo) || t.User.EMail.Contains(param.UserKeyInfo))
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(param.UserKeyInfo), t => (t.UserRole.FullName).Contains(param.UserKeyInfo)
|
||||
|| t.UserRole.UserName.Contains(param.UserKeyInfo) || t.UserRole.EMail.Contains(param.UserKeyInfo))
|
||||
|
||||
.ProjectTo<SiteUserExportDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||||
|
||||
|
|
|
@ -686,7 +686,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
var userTypeEnumList = emailConfigInfo.EmailNoticeUserTypeList.Where(t => t.EmailUserType == EmailUserType.To).Select(t => t.UserType).ToList();
|
||||
|
||||
var emailList = await _userRoleRepository.Where(t => userTypeEnumList.Contains(t.UserTypeEnum) &&
|
||||
(isHaveTrialId ? t.UserTrials.Any(t => t.TrialId == feedBack.TrialId) : true)).Select(t => new { t.EMail, t.UserTypeEnum, t.FullName }).ToListAsync();
|
||||
(isHaveTrialId ? t.UserRoleTrials.Any(t => t.TrialId == feedBack.TrialId) : true)).Select(t => new { t.EMail, t.UserTypeEnum, t.FullName }).ToListAsync();
|
||||
|
||||
|
||||
foreach (var email in emailList)
|
||||
|
|
|
@ -820,7 +820,7 @@ namespace IRaCIS.Core.Application.Services
|
|||
DocumentConfirmedUserCount = t.SystemDocConfirmedUserList.Count(),
|
||||
|
||||
//DocumentUserCount= _trialUserRepository.Where(tu=>tu.TrialId== querySystemDocument.TrialId).Count(u=>t.NeedConfirmedUserTypeList.Any(cc=>cc.NeedConfirmUserTypeId== u.User.UserTypeId ))
|
||||
DocumentUserCount = t.NeedConfirmedUserTypeList.SelectMany(u => u.UserTypeRole.UserList.SelectMany(b => b.UserTrials.Where(r => r.TrialId == inQuery.TrialId))).Count()
|
||||
DocumentUserCount = t.NeedConfirmedUserTypeList.SelectMany(u => u.UserTypeRole.UserList.SelectMany(b => b.UserRoleTrials.Where(r => r.TrialId == inQuery.TrialId))).Count()
|
||||
});
|
||||
|
||||
var trialDocQueryable = _trialDocumentRepository.Where(t => t.TrialId == inQuery.TrialId).Select(t => new DocumentUnionWithUserStatView()
|
||||
|
|
|
@ -534,9 +534,9 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
identityUserId = identityUserId != Guid.Empty ? identityUserId : _userInfo.IdentityUserId;
|
||||
|
||||
var user = await _identityUserRepository.Where(t => t.Id == _userInfo.IdentityUserId).ProjectTo<UserDetailDTO>(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
|
||||
var user = await _identityUserRepository.Where(t => t.Id == identityUserId).ProjectTo<UserDetailDTO>(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
|
||||
|
||||
user.AccountList = await _userRoleRepository.Where(t => t.IdentityUserId == _userInfo.IdentityUserId).ProjectTo<UserAccountInfo>(_mapper.ConfigurationProvider).ToListAsync();
|
||||
user.AccountList = await _userRoleRepository.Where(t => t.IdentityUserId == identityUserId).ProjectTo<UserAccountInfo>(_mapper.ConfigurationProvider).ToListAsync();
|
||||
|
||||
return user;
|
||||
}
|
||||
|
@ -906,7 +906,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
var userLogQueryable =
|
||||
_userLogRepository.AsQueryable().IgnoreQueryFilters()
|
||||
.WhereIf(inQuery.TrialId != null, t => t.LoginUser.UserTrials.Any(c => c.TrialId == inQuery.TrialId && (c.UserId == t.LoginUserId || c.UserId == t.OptUserId)))
|
||||
.WhereIf(inQuery.TrialId != null, t => t.LoginUser.UserRoleTrials.Any(c => c.TrialId == inQuery.TrialId && (c.UserId == t.LoginUserId || c.UserId == t.OptUserId)))
|
||||
.WhereIf(trialCreateTime != null, t => t.CreateTime >= trialCreateTime)
|
||||
.WhereIf(inQuery.OptType != null, t => t.OptType == inQuery.OptType)
|
||||
.WhereIf(inQuery.UserId != null, t => t.LoginUserId == inQuery.UserId)
|
||||
|
|
|
@ -22,15 +22,15 @@ namespace IRaCIS.Core.Application.AutoMapper
|
|||
|
||||
CreateMap<TrialSiteUser, TrialSiteUserSurvey>()
|
||||
.ForMember(d => d.Id, u => u.Ignore())
|
||||
.ForMember(d => d.Phone, u => u.MapFrom(c => c.User.Phone))
|
||||
.ForMember(d => d.Email, u => u.MapFrom(c => c.User.EMail))
|
||||
.ForMember(d => d.OrganizationName, u => u.MapFrom(c => c.User.OrganizationName))
|
||||
.ForMember(d => d.UserTypeId, u => u.MapFrom(c => c.User.UserTypeId))
|
||||
.ForMember(d => d.Phone, u => u.MapFrom(c => c.UserRole.Phone))
|
||||
.ForMember(d => d.Email, u => u.MapFrom(c => c.UserRole.EMail))
|
||||
.ForMember(d => d.OrganizationName, u => u.MapFrom(c => c.UserRole.OrganizationName))
|
||||
.ForMember(d => d.UserTypeId, u => u.MapFrom(c => c.UserRole.UserTypeId))
|
||||
.ForMember(d => d.IsHistoryUser, u => u.MapFrom(c => true))
|
||||
.ForMember(d => d.IsHistoryUserOriginDeleted, u => u.MapFrom(c => c.IsDeleted))
|
||||
.ForMember(d => d.IsHistoryUserDeleted, u => u.MapFrom(c => c.IsDeleted))
|
||||
.ForMember(d => d.FirstName, u => u.MapFrom(c => c.User.FirstName))
|
||||
.ForMember(d => d.LastName, u => u.MapFrom(c => c.User.LastName))
|
||||
.ForMember(d => d.FirstName, u => u.MapFrom(c => c.UserRole.FirstName))
|
||||
.ForMember(d => d.LastName, u => u.MapFrom(c => c.UserRole.LastName))
|
||||
.ForMember(d => d.IsGenerateAccount, u => u.MapFrom(c => true))
|
||||
.ForMember(d => d.IsGenerateSuccess, u => u.MapFrom(c => true))
|
||||
.ForMember(d => d.SystemUserId, u => u.MapFrom(c => c.UserId))
|
||||
|
|
|
@ -88,7 +88,7 @@ namespace IRaCIS.Application.Contracts
|
|||
[ExcelFormat("yyyy-MM-dd")]
|
||||
public DateTime? RemoveTime { get; set; }
|
||||
|
||||
public string RemoveTimeStr=> RemoveTime?.ToString("yyyy-MM-dd") ?? string.Empty;
|
||||
public string RemoveTimeStr => RemoveTime?.ToString("yyyy-MM-dd") ?? string.Empty;
|
||||
|
||||
|
||||
//[ExporterHeader(Format = "yyyy-mm-DD")]
|
||||
|
@ -122,6 +122,75 @@ namespace IRaCIS.Application.Contracts
|
|||
|
||||
}
|
||||
|
||||
public class TrialIdentityUserDto
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
|
||||
public Guid TrialId { get; set; }
|
||||
|
||||
public Guid IdentityUserId { get; set; }
|
||||
|
||||
public string Phone { get; set; } = String.Empty;
|
||||
|
||||
public string EMail { get; set; } = string.Empty;
|
||||
|
||||
public string OrganizationName { get; set; } = String.Empty;
|
||||
|
||||
public string UserName { get; set; } = String.Empty;
|
||||
|
||||
public string FullName { get; set; } = String.Empty;
|
||||
|
||||
public bool IsDeleted { get; set; }
|
||||
|
||||
|
||||
|
||||
public DateTime CreateTime { get; set; }
|
||||
public DateTime UpdateTime { get; set; }
|
||||
|
||||
[ExcelFormat("yyyy-MM-dd")]
|
||||
public DateTime? RemoveTime { get; set; }
|
||||
|
||||
[ExcelFormat("yyyy-MM-dd")]
|
||||
public DateTime? JoinTime { get; set; }
|
||||
|
||||
public string JoinTimeStr => JoinTime?.ToString("yyyy-MM-dd") ?? string.Empty;
|
||||
public string RemoveTimeStr => RemoveTime?.ToString("yyyy-MM-dd") ?? string.Empty;
|
||||
|
||||
|
||||
public List<TrialIdentityUserRoleDto> TrialUserRoleList { get; set; }
|
||||
|
||||
}
|
||||
|
||||
|
||||
public class TrialUserRoleScreeningDto
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
|
||||
public Guid IdentityUserId { get; set; }
|
||||
|
||||
public string Phone { get; set; } = String.Empty;
|
||||
|
||||
public string EMail { get; set; } = string.Empty;
|
||||
|
||||
public string OrganizationName { get; set; } = String.Empty;
|
||||
|
||||
public string UserName { get; set; } = String.Empty;
|
||||
|
||||
public string FullName { get; set; } = String.Empty;
|
||||
|
||||
public bool IsSelect { get; set; }
|
||||
}
|
||||
|
||||
public class TrialIdentityUserRoleDto
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
|
||||
public bool IsDeleted { get; set; }
|
||||
|
||||
public DateTime CreateTime { get; set; }
|
||||
public DateTime UpdateTime { get; set; }
|
||||
}
|
||||
|
||||
|
||||
public class TrialCRCUploadImageList_Export : ExcelExportInfo
|
||||
{
|
||||
|
@ -150,19 +219,19 @@ namespace IRaCIS.Application.Contracts
|
|||
/// <summary>
|
||||
/// 数据
|
||||
/// </summary>
|
||||
public object Data { get; set; }
|
||||
public object Data { get; set; }
|
||||
}
|
||||
|
||||
public class ExportTemplateServiceDto : ExportTemplateAsyncDto
|
||||
{
|
||||
public IRepository<CommonDocument> commonDocumentRepository { get; set; }
|
||||
|
||||
public IWebHostEnvironment hostEnvironment { get; set; }
|
||||
public IWebHostEnvironment hostEnvironment { get; set; }
|
||||
|
||||
public bool IsEnglish { get; set; }
|
||||
}
|
||||
|
||||
public class VisitJudgeExportInfo: ExcelExportInfo
|
||||
public class VisitJudgeExportInfo : ExcelExportInfo
|
||||
{
|
||||
public int VisitCount { get; set; }
|
||||
|
||||
|
@ -409,8 +478,13 @@ namespace IRaCIS.Application.Contracts
|
|||
|
||||
public class TrialUserAddCommand
|
||||
{
|
||||
[NotDefault]
|
||||
public Guid IdentityUserId { get; set; }
|
||||
|
||||
[NotDefault]
|
||||
public Guid UserId { get; set; }
|
||||
|
||||
[NotDefault]
|
||||
public Guid TrialId { get; set; }
|
||||
|
||||
|
||||
|
|
|
@ -5,10 +5,10 @@ namespace IRaCIS.Application.Interfaces
|
|||
{
|
||||
public interface ITrialMaintenanceService
|
||||
{
|
||||
Task<IResponseOutput> AddTrialUsers(TrialUserAddCommand[] userTrialCommands);
|
||||
Task<IResponseOutput> DeleteMaintenanceUser(Guid id, bool isDelete);
|
||||
Task<PageOutput<TrialMaintenanceDTO>> GetMaintenanceUserList(TrialMaintenanceQuery param);
|
||||
Task<PageOutput<AssginSiteCRCListDTO>> GetSiteCRCScreeningList(SiteCRCQuery param);
|
||||
Task<PageOutput<TrialUserScreeningDTO>> GetTrialUserScreeningList(TrialUserQuery trialUserQuery);
|
||||
//Task<IResponseOutput> AddTrialUsers(TrialUserAddCommand[] userTrialCommands);
|
||||
//Task<IResponseOutput> DeleteMaintenanceUser(Guid id, bool isDelete);
|
||||
//Task<PageOutput<TrialMaintenanceDTO>> GetMaintenanceUserList(TrialMaintenanceQuery param);
|
||||
//Task<PageOutput<AssginSiteCRCListDTO>> GetSiteCRCScreeningList(SiteCRCQuery param);
|
||||
//Task<PageOutput<TrialUserScreeningDTO>> GetTrialUserScreeningList(TrialUserQuery trialUserQuery);
|
||||
}
|
||||
}
|
|
@ -8,7 +8,7 @@ using Microsoft.AspNetCore.Mvc;
|
|||
namespace IRaCIS.Core.Application.Service
|
||||
{
|
||||
[ApiExplorerSettings(GroupName = "Trial")]
|
||||
public class TrialMaintenanceService(IRepository<TrialUserRole> _trialUseRoleRepository,
|
||||
public class TrialMaintenanceService(IRepository<TrialUserRole> _trialUseRoleRepository, IRepository<TrialIdentityUser> _trialIdentityUserRepository,
|
||||
IRepository<UserRole> _userRoleRepository,
|
||||
IRepository<TrialSiteUser> _trialSiteUserRepository,
|
||||
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||
|
@ -23,25 +23,143 @@ namespace IRaCIS.Core.Application.Service
|
|||
.ToListAsync();
|
||||
}
|
||||
|
||||
#region 多账户调整已修改
|
||||
/// <summary>
|
||||
/// Setting页面 获取项目参与人员列表
|
||||
/// </summary>
|
||||
/// <param name="inQuery"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<PageOutput<TrialMaintenanceDTO>> GetMaintenanceUserList(TrialMaintenanceQuery inQuery)
|
||||
public async Task<PageOutput<TrialIdentityUserDto>> GetMaintenanceUserList(TrialMaintenanceQuery inQuery)
|
||||
{
|
||||
var query = _trialIdentityUserRepository.Where(t => t.TrialId == inQuery.TrialId).IgnoreQueryFilters()
|
||||
.WhereIf(inQuery.UserTypeId != null, t => t.TrialUserRoleList.Any(t => t.UserRole.UserTypeId == inQuery.UserTypeId))
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserName), t => t.IdentityUser.UserName.Contains(inQuery.UserName))
|
||||
|
||||
.WhereIf(inQuery.IsDeleted != null, t => t.IsDeleted == inQuery.IsDeleted)
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.OrganizationName), t => t.IdentityUser.OrganizationName.Contains(inQuery.OrganizationName))
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserRealName), t => (t.IdentityUser.FullName).Contains(inQuery.UserRealName))
|
||||
.ProjectTo<TrialIdentityUserDto>(_mapper.ConfigurationProvider);
|
||||
|
||||
return await query.ToPagedListAsync(inQuery, nameof(TrialIdentityUserDto.UpdateTime));
|
||||
}
|
||||
|
||||
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||
//[Authorize(Policy = IRaCISPolicy.PM_APM)]
|
||||
[HttpPut]
|
||||
public async Task<IResponseOutput> UpdateTrialUser(UpdateTrialUserCommand updateTrialUserCommand)
|
||||
{
|
||||
var trialUser = await _trialIdentityUserRepository.Where(t => t.Id == updateTrialUserCommand.Id, true, true).FirstOrDefaultAsync();
|
||||
|
||||
if (trialUser == null) return Null404NotFound(trialUser);
|
||||
|
||||
|
||||
if (updateTrialUserCommand.IsDeleted)
|
||||
{
|
||||
if (await _trialSiteUserRepository.AnyAsync(t => t.UserRole.IdentityUserId == trialUser.IdentityUserId && t.TrialId == trialUser.TrialId))
|
||||
{
|
||||
// ----人员已加入现场维护
|
||||
return ResponseOutput.NotOk(_localizer["TrialMaint_PersonnelJoined"]);
|
||||
}
|
||||
|
||||
var findQC = await _trialUseRoleRepository.FirstOrDefaultAsync(t => t.UserRole.IdentityUserId == trialUser.IdentityUserId && t.UserRole.UserTypeEnum == UserTypeEnum.IQC);
|
||||
|
||||
if (findQC != null)
|
||||
{
|
||||
await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.CurrentActionUserId == findQC.Id && t.TrialId == trialUser.TrialId && t.IsTake, u => new SubjectVisit() { CurrentActionUserId = null, CurrentActionUserExpireTime = null, IsTake = false });
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_mapper.Map(updateTrialUserCommand, trialUser);
|
||||
|
||||
await _trialUseRoleRepository.SaveChangesAsync();
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// <summary> Setting页面 项目参与人员勾选列表 </summary>
|
||||
[HttpPost]
|
||||
public async Task<PageOutput<TrialUserRoleScreeningDto>> GetTrialUserScreeningList(TrialUserQuery inQuery)
|
||||
{
|
||||
var trialType = _trialRepository.Where(t => t.Id == inQuery.TrialId).Select(t => t.TrialType).FirstOrDefault();
|
||||
|
||||
var userTypeEnums = new List<UserTypeEnum>() { UserTypeEnum.ClinicalResearchCoordinator, UserTypeEnum.CRA, UserTypeEnum.IQC, UserTypeEnum.APM, UserTypeEnum.MIM, UserTypeEnum.QA, UserTypeEnum.MW, UserTypeEnum.MC };
|
||||
|
||||
//if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin)
|
||||
{
|
||||
userTypeEnums.Add(UserTypeEnum.ProjectManager);
|
||||
}
|
||||
|
||||
|
||||
//之前已经选择的用户 不放在列表中,现在又要改回去 废弃
|
||||
var query = _userRoleRepository.Where(t => t.UserTypeEnum != UserTypeEnum.SuperAdmin)
|
||||
|
||||
//正式或者培训的项目 不能允许测试用户(必须正式用户) 同时必须是内部的用户
|
||||
.WhereIf(trialType == TrialType.OfficialTrial || trialType == TrialType.Training, t => t.IsTestUser == false && t.IsZhiZhun)
|
||||
|
||||
//测试项目 可以加入 测试用户 或者内部正式用户
|
||||
.WhereIf(trialType == TrialType.NoneOfficial, t => t.IsTestUser == true || (t.IsTestUser == false && t.IsZhiZhun))
|
||||
.Where(t => userTypeEnums.Contains(t.UserTypeEnum))
|
||||
.WhereIf(inQuery.UserTypeEnum != null, t => t.UserTypeEnum == inQuery.UserTypeEnum)
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserRealName), t => t.IdentityUser.FullName.Contains(inQuery.UserRealName))
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserName), t => t.IdentityUser.UserName.Contains(inQuery.UserName))
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.OrganizationName), t => t.IdentityUser.OrganizationName.Contains(inQuery.OrganizationName))
|
||||
.Select(t => new TrialUserRoleScreeningDto()
|
||||
{
|
||||
Id = t.Id,
|
||||
IdentityUserId = t.IdentityUserId,
|
||||
EMail = t.IdentityUser.EMail,
|
||||
FullName = t.IdentityUser.FullName,
|
||||
OrganizationName = t.IdentityUser.OrganizationName,
|
||||
Phone = t.IdentityUser.Phone,
|
||||
UserName = t.IdentityUser.UserName,
|
||||
|
||||
IsSelect = t.UserRoleTrials.Any(t => t.TrialId == inQuery.TrialId),
|
||||
});
|
||||
|
||||
|
||||
return await query.ToPagedListAsync(inQuery);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Setting页面 批量添加项目参与人员
|
||||
/// </summary>
|
||||
/// <param name="userTrialCommands"></param>
|
||||
/// <returns></returns>
|
||||
//[TrialAudit(AuditType.TrialAudit, AuditOptType.AddTrialStaff)]
|
||||
[HttpPost]
|
||||
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||
//[Authorize(Policy = IRaCISPolicy.PM_APM)]
|
||||
public async Task<IResponseOutput> AddTrialUsers(TrialUserAddCommand[] userTrialCommands)
|
||||
{
|
||||
|
||||
var query = _trialUseRoleRepository.Where(t => t.TrialId == inQuery.TrialId).IgnoreQueryFilters()
|
||||
.WhereIf(inQuery.UserTypeId != null, t => t.UserRole.UserTypeId == inQuery.UserTypeId)
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserName), t => t.UserRole.UserName.Contains(inQuery.UserName))
|
||||
foreach (var item in userTrialCommands.GroupBy(t => t.IdentityUserId))
|
||||
{
|
||||
var currentUserRoleList = item.ToList();
|
||||
|
||||
.WhereIf(inQuery.IsDeleted != null, t => t.IsDeleted == inQuery.IsDeleted)
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.OrganizationName), t => t.UserRole.OrganizationName.Contains(inQuery.OrganizationName))
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserRealName), t => (t.UserRole.FullName).Contains(inQuery.UserRealName))
|
||||
.ProjectTo<TrialMaintenanceDTO>(_mapper.ConfigurationProvider);
|
||||
var addArray = _mapper.Map<TrialIdentityUser[]>(currentUserRoleList);
|
||||
|
||||
return await query.ToPagedListAsync(inQuery, nameof(TrialMaintenanceDTO.UpdateTime));
|
||||
var trialUsers = await _trialIdentityUserRepository.AddRangeAsync(addArray);
|
||||
|
||||
foreach (var trialUser in trialUsers)
|
||||
{
|
||||
trialUser.JoinTime = DateTime.Now;
|
||||
}
|
||||
|
||||
|
||||
var success = await _trialUseRoleRepository.SaveChangesAsync();
|
||||
|
||||
}
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
|
||||
}
|
||||
|
||||
|
@ -67,114 +185,19 @@ namespace IRaCIS.Core.Application.Service
|
|||
}
|
||||
|
||||
|
||||
/// <summary> Setting页面 项目参与人员勾选列表 </summary>
|
||||
[HttpPost]
|
||||
public async Task<PageOutput<TrialUserScreeningDTO>> GetTrialUserScreeningList(TrialUserQuery inQuery)
|
||||
{
|
||||
var trialType = _trialRepository.Where(t => t.Id == inQuery.TrialId).Select(t => t.TrialType).FirstOrDefault();
|
||||
|
||||
var userTypeEnums = new List<UserTypeEnum>() { UserTypeEnum.ClinicalResearchCoordinator, UserTypeEnum.CRA, UserTypeEnum.IQC, UserTypeEnum.APM, UserTypeEnum.MIM, UserTypeEnum.QA, UserTypeEnum.MW, UserTypeEnum.MC };
|
||||
|
||||
//if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin)
|
||||
{
|
||||
userTypeEnums.Add(UserTypeEnum.ProjectManager);
|
||||
}
|
||||
|
||||
|
||||
//之前已经选择的用户 不放在列表中,现在又要改回去 废弃
|
||||
var query = _userRoleRepository.Where(t => t.UserTypeEnum != UserTypeEnum.SuperAdmin)
|
||||
|
||||
//正式或者培训的项目 不能允许测试用户(必须正式用户) 同时必须是内部的用户
|
||||
.WhereIf(trialType == TrialType.OfficialTrial || trialType == TrialType.Training, t => t.IsTestUser == false && t.IsZhiZhun)
|
||||
|
||||
//测试项目 可以加入 测试用户 或者内部正式用户
|
||||
.WhereIf(trialType == TrialType.NoneOfficial, t => t.IsTestUser == true || (t.IsTestUser == false && t.IsZhiZhun))
|
||||
|
||||
|
||||
.Where(t => userTypeEnums.Contains(t.UserTypeEnum))
|
||||
|
||||
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserRealName), t => (t.FullName).Contains(inQuery.UserRealName))
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserName), t => t.UserName.Contains(inQuery.UserName))
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.OrganizationName), t => t.OrganizationName.Contains(inQuery.OrganizationName))
|
||||
.WhereIf(inQuery.UserTypeEnum != null, t => t.UserTypeEnum == inQuery.UserTypeEnum)
|
||||
//.WhereIf(_userInfo.IsAdmin, t => t.UserTypeRole.Type == UserTypeGroup.TrialUser)
|
||||
//.WhereIf(!_userInfo.IsAdmin, t => t.UserTypeRole.Type == UserTypeGroup.TrialUser || t.UserTypeEnum != UserTypeEnum.ProjectManager)
|
||||
.ProjectTo<TrialUserScreeningDTO>(_mapper.ConfigurationProvider, new { trialId = inQuery.TrialId });
|
||||
|
||||
return await query.ToPagedListAsync(inQuery);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Setting页面 批量添加项目参与人员
|
||||
/// </summary>
|
||||
/// <param name="userTrialCommands"></param>
|
||||
/// <returns></returns>
|
||||
//[TrialAudit(AuditType.TrialAudit, AuditOptType.AddTrialStaff)]
|
||||
[HttpPost]
|
||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
||||
//[Authorize(Policy = IRaCISPolicy.PM_APM)]
|
||||
public async Task<IResponseOutput> AddTrialUsers(TrialUserAddCommand[] userTrialCommands)
|
||||
{
|
||||
|
||||
var addArray = _mapper.Map<TrialUserRole[]>(userTrialCommands);
|
||||
|
||||
var trialUsers = await _trialUseRoleRepository.AddRangeAsync(addArray);
|
||||
|
||||
foreach (var item in trialUsers)
|
||||
{
|
||||
item.JoinTime = DateTime.Now;
|
||||
}
|
||||
|
||||
|
||||
var success = await _trialUseRoleRepository.SaveChangesAsync();
|
||||
|
||||
return ResponseOutput.Result(success);
|
||||
}
|
||||
|
||||
|
||||
|
||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
||||
//[Authorize(Policy = IRaCISPolicy.PM_APM)]
|
||||
[HttpPut]
|
||||
public async Task<IResponseOutput> UpdateTrialUser(UpdateTrialUserCommand updateTrialUserCommand)
|
||||
{
|
||||
var trialUser = await _trialUseRoleRepository.Where(t => t.Id == updateTrialUserCommand.Id, true, true).FirstOrDefaultAsync();
|
||||
|
||||
if (trialUser == null) return Null404NotFound(trialUser);
|
||||
|
||||
|
||||
if (updateTrialUserCommand.IsDeleted)
|
||||
{
|
||||
if (await _trialSiteUserRepository.AnyAsync(t => t.UserId == trialUser.UserId && t.TrialId == trialUser.TrialId))
|
||||
{
|
||||
// ----人员已加入现场维护
|
||||
return ResponseOutput.NotOk(_localizer["TrialMaint_PersonnelJoined"]);
|
||||
}
|
||||
|
||||
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC)
|
||||
{
|
||||
await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.CurrentActionUserId == trialUser.UserId && t.TrialId == trialUser.TrialId && t.IsTake, u => new SubjectVisit() { CurrentActionUserId = null, CurrentActionUserExpireTime = null, IsTake = false });
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_mapper.Map(updateTrialUserCommand, trialUser);
|
||||
|
||||
await _trialUseRoleRepository.SaveChangesAsync();
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// <summary> 项目参与人员退出 其中IQC退出 回去释放工作量 </summary>
|
||||
//[TrialAudit(AuditType.TrialAudit, AuditOptType.DeleteTrailStaff)]
|
||||
[HttpDelete, Route("{id:guid}/{trialId:guid}/{isDelete:bool}")]
|
||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
||||
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||
[UnitOfWork]
|
||||
[Obsolete]
|
||||
public async Task<IResponseOutput> DeleteMaintenanceUser(Guid id, bool isDelete)
|
||||
|
|
|
@ -31,8 +31,8 @@ namespace IRaCIS.Core.Application.Services
|
|||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.TrialSiteAliasName), t => t.TrialSiteAliasName.Contains(inQuery.TrialSiteAliasName))
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.TrialSiteCode), t => t.TrialSiteCode.Contains(inQuery.TrialSiteCode))
|
||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator, t => t.CRCUserList.Any(k => k.UserId == _userInfo.UserRoleId))
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserKeyInfo), t => t.CRCUserList.Any(k => (k.User.FullName).Contains(inQuery.UserKeyInfo)
|
||||
|| k.User.UserName.Contains(inQuery.UserKeyInfo) || k.User.EMail.Contains(inQuery.UserKeyInfo)))
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserKeyInfo), t => t.CRCUserList.Any(k => (k.UserRole.FullName).Contains(inQuery.UserKeyInfo)
|
||||
|| k.UserRole.UserName.Contains(inQuery.UserKeyInfo) || k.UserRole.EMail.Contains(inQuery.UserKeyInfo)))
|
||||
|
||||
.ProjectTo<SiteStatDTO>(_mapper.ConfigurationProvider);
|
||||
|
||||
|
@ -53,8 +53,8 @@ namespace IRaCIS.Core.Application.Services
|
|||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.TrialSiteAliasName), t => t.TrialSiteAliasName.Contains(inQuery.TrialSiteAliasName))
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.TrialSiteCode), t => t.TrialSiteCode.Contains(inQuery.TrialSiteCode))
|
||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator, t => t.CRCUserList.Any(k => k.UserId == _userInfo.UserRoleId))
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserKeyInfo), t => t.CRCUserList.Any(k => (k.User.FullName).Contains(inQuery.UserKeyInfo)
|
||||
|| k.User.UserName.Contains(inQuery.UserKeyInfo) || k.User.EMail.Contains(inQuery.UserKeyInfo)))
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserKeyInfo), t => t.CRCUserList.Any(k => (k.UserRole.FullName).Contains(inQuery.UserKeyInfo)
|
||||
|| k.UserRole.UserName.Contains(inQuery.UserKeyInfo) || k.UserRole.EMail.Contains(inQuery.UserKeyInfo)))
|
||||
|
||||
.ProjectTo<SiteStatSimpleDTO>(_mapper.ConfigurationProvider, new { isEn_Us = _userInfo.IsEn_Us });
|
||||
|
||||
|
|
|
@ -100,12 +100,13 @@ namespace IRaCIS.Core.Application.Service
|
|||
CreateMap<UserRole, AssginSiteCRCListDTO>();
|
||||
|
||||
var trialId = Guid.Empty;
|
||||
|
||||
CreateMap<UserRole, TrialUserScreeningDTO>()
|
||||
.ForMember(d => d.UserRealName, u => u.MapFrom(s => s.FullName))
|
||||
.ForMember(d => d.UserType, u => u.MapFrom(s => s.UserTypeRole.UserTypeShortName))
|
||||
.ForMember(d => d.UserId, u => u.MapFrom(s => s.Id))
|
||||
.ForMember(d => d.TrialId, u => u.MapFrom(s => trialId))
|
||||
.ForMember(d => d.IsSelect, u => u.MapFrom(t => t.UserTrials.Any(t => t.TrialId == trialId)));
|
||||
.ForMember(d => d.IsSelect, u => u.MapFrom(t => t.UserRoleTrials.Any(t => t.TrialId == trialId)));
|
||||
|
||||
|
||||
CreateMap<Site, SiteSelectDTO>()
|
||||
|
@ -126,7 +127,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
.ForMember(d => d.VisitCount, u => u.MapFrom(s => s.SubjectVisitList.Count()))
|
||||
.ForMember(d => d.SubjectCount, u => u.MapFrom(s => s.SubjectList.Count()))
|
||||
.ForMember(d => d.UserCount, u => u.MapFrom(s => s.CRCUserList.Count()))
|
||||
.ForMember(d => d.UserNameList, u => u.MapFrom(s => s.CRCUserList.Where(t => t.IsDeleted == false).Select(u => u.User.FullName)));
|
||||
.ForMember(d => d.UserNameList, u => u.MapFrom(s => s.CRCUserList.Where(t => t.IsDeleted == false).Select(u => u.UserRole.FullName)));
|
||||
#endregion
|
||||
|
||||
|
||||
|
@ -142,15 +143,15 @@ namespace IRaCIS.Core.Application.Service
|
|||
.ForMember(d => d.UserCount, u => u.MapFrom(s => s.CRCUserList.Count()))
|
||||
.ForMember(d => d.VisitCount, u => u.MapFrom(s => s.SubjectVisitList.Count()))
|
||||
.ForMember(d => d.SubjectCount, u => u.MapFrom(s => s.SubjectList.Count()))
|
||||
.ForMember(d => d.UserNameList, u => u.MapFrom(s => s.CRCUserList.Where(t => t.IsDeleted == false).Select(u => u.User.FullName)))
|
||||
.ForMember(d => d.UserNameList, u => u.MapFrom(s => s.CRCUserList.Where(t => t.IsDeleted == false).Select(u => u.UserRole.FullName)))
|
||||
.ForMember(d => d.CallingAEList, u => u.MapFrom(s => s.TrialSiteDicomAEList.Select(u => u.CallingAE)));
|
||||
//CreateMap<Site, SiteStatSimpleDTO>();
|
||||
|
||||
|
||||
|
||||
CreateMap<TrialSiteUser, UserTrialDTO>().IncludeMembers(t => t.User)
|
||||
.ForMember(d => d.UserType, u => u.MapFrom(s => s.User.UserTypeRole.UserTypeShortName))
|
||||
.ForMember(d => d.UserRealName, u => u.MapFrom(s => s.User.FullName));
|
||||
CreateMap<TrialSiteUser, UserTrialDTO>().IncludeMembers(t => t.UserRole)
|
||||
.ForMember(d => d.UserType, u => u.MapFrom(s => s.UserRole.UserTypeRole.UserTypeShortName))
|
||||
.ForMember(d => d.UserRealName, u => u.MapFrom(s => s.UserRole.FullName));
|
||||
CreateMap<UserRole, UserTrialDTO>();
|
||||
#endregion
|
||||
|
||||
|
@ -265,11 +266,11 @@ namespace IRaCIS.Core.Application.Service
|
|||
CreateMap<Trial, TrialSiteUserExportDto>()
|
||||
.ForMember(t => t.TrialSiteUserList, u => u.Ignore());
|
||||
|
||||
CreateMap<TrialSiteUser, SiteUserExportDTO>().IncludeMembers(t => t.User)
|
||||
CreateMap<TrialSiteUser, SiteUserExportDTO>().IncludeMembers(t => t.UserRole)
|
||||
.ForMember(t => t.TrialSiteCode, u => u.MapFrom(c => c.TrialSite.TrialSiteCode))
|
||||
.ForMember(t => t.TrialSiteAliasName, u => u.MapFrom(c => c.TrialSite.TrialSiteAliasName))
|
||||
.ForMember(t => t.UserRealName, u => u.MapFrom(c => c.User.FullName))
|
||||
.ForMember(t => t.UserType, u => u.MapFrom(c => c.User.UserTypeRole.UserTypeShortName));
|
||||
.ForMember(t => t.UserRealName, u => u.MapFrom(c => c.UserRole.FullName))
|
||||
.ForMember(t => t.UserType, u => u.MapFrom(c => c.UserRole.UserTypeRole.UserTypeShortName));
|
||||
CreateMap<UserRole, SiteUserExportDTO>();
|
||||
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
using AutoMapper;
|
||||
using IRaCIS.Application.Contracts;
|
||||
using IRaCIS.Core.Application.Contracts;
|
||||
using IRaCIS.Core.Application.ViewModel;
|
||||
using IRaCIS.Core.Domain.Share;
|
||||
|
@ -51,8 +52,17 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
|
||||
CreateMap<TrialSPMConfigCommand, Trial>();
|
||||
|
||||
|
||||
CreateMap<TrialIdentityUser, TrialIdentityUserDto>();
|
||||
|
||||
CreateMap<TrialUserRole, TrialIdentityUserRoleDto>();
|
||||
|
||||
|
||||
CreateMap<TrialUserAddCommand, TrialIdentityUser>();
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -189,27 +189,34 @@ namespace IRaCIS.Core.Application.Service
|
|||
/// <returns></returns>
|
||||
public async Task<IResponseOutput> UserTrialUser([FromServices] IRepository<TrialIdentityUser> _trialIdentityUserRepository, [FromServices] IRepository<TrialUserRole> _trialUserRoleReposiotry)
|
||||
{
|
||||
var list = _trialUserRoleReposiotry.Where().Select(t => new { t.TrialId, t.UserRole.IdentityUserId, t.JoinTime, t.RemoveTime }).ToList();
|
||||
var list = _trialUserRoleReposiotry.Where().Select(t => new { t.TrialId, t.UserRole.IdentityUserId, t.UserId, t.JoinTime, t.RemoveTime }).ToList();
|
||||
|
||||
|
||||
foreach (var item in list.GroupBy(t => new { t.IdentityUserId, t.TrialId }))
|
||||
{
|
||||
|
||||
var id = NewId.NextSequentialGuid();
|
||||
|
||||
var userRoleList = item.ToList();
|
||||
|
||||
var userIdList = item.Select(t => t.UserId).ToList();
|
||||
|
||||
var first = userRoleList.First();
|
||||
|
||||
var haveJoin = userRoleList.Any(t => t.JoinTime != null);
|
||||
|
||||
if (haveJoin)
|
||||
{
|
||||
await _trialIdentityUserRepository.AddAsync(new TrialIdentityUser() { IdentityUserId = item.Key.IdentityUserId, TrialId = item.Key.TrialId, JoinTime = userRoleList.Min(t => t.JoinTime) });
|
||||
await _trialIdentityUserRepository.AddAsync(new TrialIdentityUser() { Id = id, IdentityUserId = item.Key.IdentityUserId, TrialId = item.Key.TrialId, JoinTime = userRoleList.Min(t => t.JoinTime) });
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
await _trialIdentityUserRepository.AddAsync(new TrialIdentityUser() { IdentityUserId = item.Key.IdentityUserId, TrialId = item.Key.TrialId, RemoveTime = userRoleList.Max(t => t.RemoveTime) });
|
||||
await _trialIdentityUserRepository.AddAsync(new TrialIdentityUser() { Id = id, IdentityUserId = item.Key.IdentityUserId, TrialId = item.Key.TrialId, RemoveTime = userRoleList.Max(t => t.RemoveTime) });
|
||||
}
|
||||
|
||||
await _trialUserRoleReposiotry.BatchUpdateNoTrackingAsync(t => t.TrialId == item.Key.TrialId && userIdList.Contains(t.UserId), u => new TrialUserRole() { TrialUserId = id });
|
||||
|
||||
}
|
||||
|
||||
await _trialIdentityUserRepository.SaveChangesAsync();
|
||||
|
|
|
@ -22,7 +22,7 @@ public class UserRole : BaseFullAuditEntity
|
|||
public List<SystemDocConfirmedUser> SystemDocConfirmedList { get; set; }
|
||||
|
||||
[JsonIgnore]
|
||||
public List<TrialUserRole> UserTrials { get; set; } = new List<TrialUserRole>();
|
||||
public List<TrialUserRole> UserRoleTrials { get; set; } = new List<TrialUserRole>();
|
||||
|
||||
[JsonIgnore]
|
||||
public List<VisitTask> VisitTaskList { get; set; }
|
||||
|
|
|
@ -8,7 +8,7 @@ public class TrialSiteUser : BaseFullDeleteAuditEntity
|
|||
#region 导航属性
|
||||
[JsonIgnore]
|
||||
[ForeignKey("UserId")]
|
||||
public UserRole User { get; set; }
|
||||
public UserRole UserRole { get; set; }
|
||||
[JsonIgnore]
|
||||
[ForeignKey("TrialId")]
|
||||
public Trial Trial { get; set; }
|
||||
|
|
|
@ -3,7 +3,7 @@ namespace IRaCIS.Core.Domain.Models;
|
|||
|
||||
[Comment("项目用户角色表")]
|
||||
[Table("TrialUser")]
|
||||
public class TrialUserRole : BaseFullDeleteAuditEntity
|
||||
public class TrialUserRole : BaseFullAuditEntity
|
||||
{
|
||||
#region 导航属性
|
||||
[JsonIgnore]
|
||||
|
@ -12,6 +12,11 @@ public class TrialUserRole : BaseFullDeleteAuditEntity
|
|||
[JsonIgnore]
|
||||
[ForeignKey("UserId")]
|
||||
public UserRole UserRole { get; set; }
|
||||
|
||||
[JsonIgnore]
|
||||
[ForeignKey("TrialUserId")]
|
||||
public TrialIdentityUser TrialUser { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
public Guid UserId { get; set; }
|
||||
|
@ -20,6 +25,13 @@ public class TrialUserRole : BaseFullDeleteAuditEntity
|
|||
public DateTime? RemoveTime { get; set; }
|
||||
|
||||
public DateTime? JoinTime { get; set; }
|
||||
|
||||
|
||||
public Guid? DeleteUserId { get; set; }
|
||||
public bool IsDeleted { get; set; }
|
||||
public DateTime? DeletedTime { get; set; }
|
||||
|
||||
public Guid TrialUserId { get; set; }
|
||||
}
|
||||
|
||||
|
||||
|
@ -37,6 +49,10 @@ public class TrialIdentityUser : BaseFullDeleteAuditEntity
|
|||
[ForeignKey("IdentityUserId")]
|
||||
public IdentityUser IdentityUser { get; set; }
|
||||
|
||||
[JsonIgnore]
|
||||
|
||||
public List<TrialUserRole> TrialUserRoleList { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
|
|
@ -82,7 +82,7 @@ namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
|
|||
{
|
||||
//TrialUser 和User 之间 一对多 (一个用户可以参与多个项目)
|
||||
builder.HasOne(s => s.UserRole)
|
||||
.WithMany(t => t.UserTrials)
|
||||
.WithMany(t => t.UserRoleTrials)
|
||||
.HasForeignKey(s => s.UserId);
|
||||
|
||||
//TrialUser User 一对一 创建人
|
||||
|
@ -98,8 +98,22 @@ namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
|
|||
.WithOne(t => t.IdentityUser)
|
||||
.HasForeignKey(s => s.IdentityUserId);
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class TrialIdentityUserConfigration : IEntityTypeConfiguration<TrialIdentityUser>
|
||||
{
|
||||
//当一个实体,针对同一个类,有两个一对一导航属性,但是是不同的外键,一个外键是一对一,一个是一对多,那么需要显示配置一对多的关系
|
||||
public void Configure(EntityTypeBuilder<TrialIdentityUser> builder)
|
||||
{
|
||||
builder.HasMany(s => s.TrialUserRoleList)
|
||||
.WithOne(t => t.TrialUser)
|
||||
.HasForeignKey(s => s.TrialUserId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue