From a6080b76b1987d28ba87f09a67fa42847b0f8713 Mon Sep 17 00:00:00 2001
From: hang <872297557@qq.com>
Date: Wed, 25 Dec 2024 11:25:45 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=94=A8=E6=88=B7=E4=B8=B4?=
=?UTF-8?q?=E6=97=B6=E6=8F=90=E4=BA=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../IRaCIS.Core.Application.xml | 6 +-
.../Service/Common/ExcelExportService.cs | 4 +-
.../Service/Common/MailService.cs | 2 +-
.../Service/Document/TrialDocumentService.cs | 2 +-
.../Service/Management/UserService.cs | 6 +-
.../Service/SiteSurvey/_MapConfig.cs | 12 +-
.../TrialSiteUser/DTO/UserTrialViewModel.cs | 82 +++++-
.../Interface/ITrialMaintenanceService.cs | 10 +-
.../TrialSiteUser/TrialMaintenanceService.cs | 235 ++++++++++--------
.../Service/TrialSiteUser/TrialSiteService.cs | 8 +-
.../Service/TrialSiteUser/_MapConfig.cs | 19 +-
.../Service/TrialSiteUser/_MapConfig2.cs | 10 +
IRaCIS.Core.Application/TestService.cs | 13 +-
IRaCIS.Core.Domain/Management/User.cs | 2 +-
.../TrialSiteUser/TrialSiteUser.cs | 2 +-
IRaCIS.Core.Domain/TrialSiteUser/TrialUser.cs | 18 +-
.../EntityConfigration/SubjectConfigration.cs | 18 +-
17 files changed, 297 insertions(+), 152 deletions(-)
diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index dd1f29caf..07c9d9684 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -12853,9 +12853,6 @@
-
- Setting页面 为 site 勾选CRC用户列表
-
Setting页面 项目参与人员勾选列表
@@ -12866,6 +12863,9 @@
+
+ Setting页面 为 site 勾选CRC用户列表
+
项目参与人员退出 其中IQC退出 回去释放工作量
diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs
index 7e33870a2..99fd14535 100644
--- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs
+++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs
@@ -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(_mapper.ConfigurationProvider).ToListAsync();
diff --git a/IRaCIS.Core.Application/Service/Common/MailService.cs b/IRaCIS.Core.Application/Service/Common/MailService.cs
index 7041e3768..1d5b9ea24 100644
--- a/IRaCIS.Core.Application/Service/Common/MailService.cs
+++ b/IRaCIS.Core.Application/Service/Common/MailService.cs
@@ -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)
diff --git a/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs b/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs
index dc9ece118..bf0315a1d 100644
--- a/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs
+++ b/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs
@@ -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()
diff --git a/IRaCIS.Core.Application/Service/Management/UserService.cs b/IRaCIS.Core.Application/Service/Management/UserService.cs
index b3864a38d..37d34c154 100644
--- a/IRaCIS.Core.Application/Service/Management/UserService.cs
+++ b/IRaCIS.Core.Application/Service/Management/UserService.cs
@@ -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(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
+ var user = await _identityUserRepository.Where(t => t.Id == identityUserId).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
- user.AccountList = await _userRoleRepository.Where(t => t.IdentityUserId == _userInfo.IdentityUserId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+ user.AccountList = await _userRoleRepository.Where(t => t.IdentityUserId == identityUserId).ProjectTo(_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)
diff --git a/IRaCIS.Core.Application/Service/SiteSurvey/_MapConfig.cs b/IRaCIS.Core.Application/Service/SiteSurvey/_MapConfig.cs
index 38de835b5..2c56f3450 100644
--- a/IRaCIS.Core.Application/Service/SiteSurvey/_MapConfig.cs
+++ b/IRaCIS.Core.Application/Service/SiteSurvey/_MapConfig.cs
@@ -22,15 +22,15 @@ namespace IRaCIS.Core.Application.AutoMapper
CreateMap()
.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))
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/UserTrialViewModel.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/UserTrialViewModel.cs
index 53d4b2376..7990e4ce0 100644
--- a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/UserTrialViewModel.cs
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/UserTrialViewModel.cs
@@ -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 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
///
/// 数据
///
- public object Data { get; set; }
+ public object Data { get; set; }
}
public class ExportTemplateServiceDto : ExportTemplateAsyncDto
{
public IRepository 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; }
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/Interface/ITrialMaintenanceService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/Interface/ITrialMaintenanceService.cs
index 99668f051..05dcd4675 100644
--- a/IRaCIS.Core.Application/Service/TrialSiteUser/Interface/ITrialMaintenanceService.cs
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/Interface/ITrialMaintenanceService.cs
@@ -5,10 +5,10 @@ namespace IRaCIS.Application.Interfaces
{
public interface ITrialMaintenanceService
{
- Task AddTrialUsers(TrialUserAddCommand[] userTrialCommands);
- Task DeleteMaintenanceUser(Guid id, bool isDelete);
- Task> GetMaintenanceUserList(TrialMaintenanceQuery param);
- Task> GetSiteCRCScreeningList(SiteCRCQuery param);
- Task> GetTrialUserScreeningList(TrialUserQuery trialUserQuery);
+ //Task AddTrialUsers(TrialUserAddCommand[] userTrialCommands);
+ //Task DeleteMaintenanceUser(Guid id, bool isDelete);
+ //Task> GetMaintenanceUserList(TrialMaintenanceQuery param);
+ //Task> GetSiteCRCScreeningList(SiteCRCQuery param);
+ //Task> GetTrialUserScreeningList(TrialUserQuery trialUserQuery);
}
}
\ No newline at end of file
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs
index 841bb78d4..4ef40427f 100644
--- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs
@@ -8,7 +8,7 @@ using Microsoft.AspNetCore.Mvc;
namespace IRaCIS.Core.Application.Service
{
[ApiExplorerSettings(GroupName = "Trial")]
- public class TrialMaintenanceService(IRepository _trialUseRoleRepository,
+ public class TrialMaintenanceService(IRepository _trialUseRoleRepository, IRepository _trialIdentityUserRepository,
IRepository _userRoleRepository,
IRepository _trialSiteUserRepository,
IRepository _subjectVisitRepository,
@@ -23,25 +23,143 @@ namespace IRaCIS.Core.Application.Service
.ToListAsync();
}
+ #region 多账户调整已修改
///
/// Setting页面 获取项目参与人员列表
///
///
///
[HttpPost]
- public async Task> GetMaintenanceUserList(TrialMaintenanceQuery inQuery)
+ public async Task> 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(_mapper.ConfigurationProvider);
+
+ return await query.ToPagedListAsync(inQuery, nameof(TrialIdentityUserDto.UpdateTime));
+ }
+
+ [TrialGlobalLimit("AfterStopCannNotOpt")]
+ //[Authorize(Policy = IRaCISPolicy.PM_APM)]
+ [HttpPut]
+ public async Task 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();
+
+
+ }
+
+
+ /// Setting页面 项目参与人员勾选列表
+ [HttpPost]
+ public async Task> GetTrialUserScreeningList(TrialUserQuery inQuery)
+ {
+ var trialType = _trialRepository.Where(t => t.Id == inQuery.TrialId).Select(t => t.TrialType).FirstOrDefault();
+
+ var userTypeEnums = new List() { 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
+
+
+ ///
+ /// Setting页面 批量添加项目参与人员
+ ///
+ ///
+ ///
+ //[TrialAudit(AuditType.TrialAudit, AuditOptType.AddTrialStaff)]
+ [HttpPost]
+ [TrialGlobalLimit("AfterStopCannNotOpt")]
+ //[Authorize(Policy = IRaCISPolicy.PM_APM)]
+ public async Task 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(_mapper.ConfigurationProvider);
+ var addArray = _mapper.Map(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
}
- /// Setting页面 项目参与人员勾选列表
- [HttpPost]
- public async Task> GetTrialUserScreeningList(TrialUserQuery inQuery)
- {
- var trialType = _trialRepository.Where(t => t.Id == inQuery.TrialId).Select(t => t.TrialType).FirstOrDefault();
-
- var userTypeEnums = new List() { 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(_mapper.ConfigurationProvider, new { trialId = inQuery.TrialId });
-
- return await query.ToPagedListAsync(inQuery);
-
- }
-
-
- ///
- /// Setting页面 批量添加项目参与人员
- ///
- ///
- ///
- //[TrialAudit(AuditType.TrialAudit, AuditOptType.AddTrialStaff)]
- [HttpPost]
- [TrialGlobalLimit( "AfterStopCannNotOpt" )]
- //[Authorize(Policy = IRaCISPolicy.PM_APM)]
- public async Task AddTrialUsers(TrialUserAddCommand[] userTrialCommands)
- {
-
- var addArray = _mapper.Map(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 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();
- }
/// 项目参与人员退出 其中IQC退出 回去释放工作量
//[TrialAudit(AuditType.TrialAudit, AuditOptType.DeleteTrailStaff)]
[HttpDelete, Route("{id:guid}/{trialId:guid}/{isDelete:bool}")]
- [TrialGlobalLimit( "AfterStopCannNotOpt" )]
+ [TrialGlobalLimit("AfterStopCannNotOpt")]
[UnitOfWork]
[Obsolete]
public async Task DeleteMaintenanceUser(Guid id, bool isDelete)
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs
index 2b5c7a822..e34b7cf42 100644
--- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs
@@ -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(_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(_mapper.ConfigurationProvider, new { isEn_Us = _userInfo.IsEn_Us });
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/_MapConfig.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/_MapConfig.cs
index c0a1fad9a..934957d47 100644
--- a/IRaCIS.Core.Application/Service/TrialSiteUser/_MapConfig.cs
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/_MapConfig.cs
@@ -100,12 +100,13 @@ namespace IRaCIS.Core.Application.Service
CreateMap();
var trialId = Guid.Empty;
+
CreateMap()
.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()
@@ -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();
- CreateMap().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().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();
#endregion
@@ -265,11 +266,11 @@ namespace IRaCIS.Core.Application.Service
CreateMap()
.ForMember(t => t.TrialSiteUserList, u => u.Ignore());
- CreateMap().IncludeMembers(t => t.User)
+ CreateMap().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();
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/_MapConfig2.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/_MapConfig2.cs
index b6042bd4e..f65511ce3 100644
--- a/IRaCIS.Core.Application/Service/TrialSiteUser/_MapConfig2.cs
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/_MapConfig2.cs
@@ -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();
+
+
+ CreateMap();
+
+ CreateMap();
+
+
+ CreateMap();
+
}
}
diff --git a/IRaCIS.Core.Application/TestService.cs b/IRaCIS.Core.Application/TestService.cs
index e99543dfe..6b78f601a 100644
--- a/IRaCIS.Core.Application/TestService.cs
+++ b/IRaCIS.Core.Application/TestService.cs
@@ -189,27 +189,34 @@ namespace IRaCIS.Core.Application.Service
///
public async Task UserTrialUser([FromServices] IRepository _trialIdentityUserRepository, [FromServices] IRepository _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();
diff --git a/IRaCIS.Core.Domain/Management/User.cs b/IRaCIS.Core.Domain/Management/User.cs
index be1ef9cb4..bb10f9ffb 100644
--- a/IRaCIS.Core.Domain/Management/User.cs
+++ b/IRaCIS.Core.Domain/Management/User.cs
@@ -22,7 +22,7 @@ public class UserRole : BaseFullAuditEntity
public List SystemDocConfirmedList { get; set; }
[JsonIgnore]
- public List UserTrials { get; set; } = new List();
+ public List UserRoleTrials { get; set; } = new List();
[JsonIgnore]
public List VisitTaskList { get; set; }
diff --git a/IRaCIS.Core.Domain/TrialSiteUser/TrialSiteUser.cs b/IRaCIS.Core.Domain/TrialSiteUser/TrialSiteUser.cs
index 9a6033296..cb2113b78 100644
--- a/IRaCIS.Core.Domain/TrialSiteUser/TrialSiteUser.cs
+++ b/IRaCIS.Core.Domain/TrialSiteUser/TrialSiteUser.cs
@@ -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; }
diff --git a/IRaCIS.Core.Domain/TrialSiteUser/TrialUser.cs b/IRaCIS.Core.Domain/TrialSiteUser/TrialUser.cs
index 54d57d6dd..e31e9ded0 100644
--- a/IRaCIS.Core.Domain/TrialSiteUser/TrialUser.cs
+++ b/IRaCIS.Core.Domain/TrialSiteUser/TrialUser.cs
@@ -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 TrialUserRoleList { get; set; }
+
#endregion
diff --git a/IRaCIS.Core.Infra.EFCore/EntityConfigration/SubjectConfigration.cs b/IRaCIS.Core.Infra.EFCore/EntityConfigration/SubjectConfigration.cs
index 2b4260efc..f9b5de915 100644
--- a/IRaCIS.Core.Infra.EFCore/EntityConfigration/SubjectConfigration.cs
+++ b/IRaCIS.Core.Infra.EFCore/EntityConfigration/SubjectConfigration.cs
@@ -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
+ {
+ //当一个实体,针对同一个类,有两个一对一导航属性,但是是不同的外键,一个外键是一对一,一个是一对多,那么需要显示配置一对多的关系
+ public void Configure(EntityTypeBuilder builder)
+ {
+ builder.HasMany(s => s.TrialUserRoleList)
+ .WithOne(t => t.TrialUser)
+ .HasForeignKey(s => s.TrialUserId);
+ }
+ }
+
+
}