项目中心人员修改
continuous-integration/drone/push Build is passing Details

Uat_IRC_Net8
hang 2024-12-25 12:27:48 +08:00
parent a6080b76b1
commit 0b3fe111b7
23 changed files with 18688 additions and 98 deletions

View File

@ -690,7 +690,7 @@
<returns></returns> <returns></returns>
<exception cref="T:System.Exception"></exception> <exception cref="T:System.Exception"></exception>
</member> </member>
<member name="M:IRaCIS.Core.Application.Service.Common.ExcelExportService.TrialSiteUserListExport(IRaCIS.Core.Application.Contracts.DTO.SiteCRCExportQueryDTO,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.CommonDocument},IRaCIS.Application.Interfaces.IDictionaryService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialSiteUser})"> <member name="M:IRaCIS.Core.Application.Service.Common.ExcelExportService.TrialSiteUserListExport(IRaCIS.Core.Application.Contracts.DTO.SiteCRCExportQueryDTO,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.CommonDocument},IRaCIS.Application.Interfaces.IDictionaryService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialSiteUserRole})">
<summary> <summary>
Site用户列表导出 Site用户列表导出
</summary> </summary>
@ -698,7 +698,7 @@
<param name="_commonDocumentRepository"></param> <param name="_commonDocumentRepository"></param>
<param name="_dictionaryService"></param> <param name="_dictionaryService"></param>
<param name="_trialRepository"></param> <param name="_trialRepository"></param>
<param name="_trialSiteUserRepository"></param> <param name="_trialSiteUserRoleRepository"></param>
<returns></returns> <returns></returns>
<exception cref="T:System.Exception"></exception> <exception cref="T:System.Exception"></exception>
</member> </member>
@ -13474,7 +13474,7 @@
QC 影像质疑 QC 影像质疑
</summary> </summary>
</member> </member>
<member name="M:IRaCIS.Core.Application.MassTransit.Consumer.QCImageQuestionRecurringEventConsumer.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialEmailNoticeConfig},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialUserRole},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitTask},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialSiteUser},Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.SystemEmailSendConfig})"> <member name="M:IRaCIS.Core.Application.MassTransit.Consumer.QCImageQuestionRecurringEventConsumer.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialEmailNoticeConfig},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialUserRole},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitTask},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialSiteUserRole},Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.SystemEmailSendConfig})">
<summary> <summary>
QC 影像质疑 QC 影像质疑
</summary> </summary>
@ -13484,7 +13484,7 @@
CRC 影像质疑 CRC 影像质疑
</summary> </summary>
</member> </member>
<member name="M:IRaCIS.Core.Application.MassTransit.Consumer.CRCImageQuestionRecurringEventConsumer.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialEmailNoticeConfig},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialUserRole},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitTask},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialSiteUser},Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.SystemEmailSendConfig})"> <member name="M:IRaCIS.Core.Application.MassTransit.Consumer.CRCImageQuestionRecurringEventConsumer.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialEmailNoticeConfig},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialUserRole},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitTask},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialSiteUserRole},Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.SystemEmailSendConfig})">
<summary> <summary>
CRC 影像质疑 CRC 影像质疑
</summary> </summary>
@ -13494,7 +13494,7 @@
影像质控 发送给QC的 影像质控 发送给QC的
</summary> </summary>
</member> </member>
<member name="M:IRaCIS.Core.Application.MassTransit.Consumer.ImageQCRecurringEventConsumer.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialEmailNoticeConfig},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialUserRole},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitTask},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialSiteUser},Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.SystemEmailSendConfig})"> <member name="M:IRaCIS.Core.Application.MassTransit.Consumer.ImageQCRecurringEventConsumer.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialEmailNoticeConfig},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialUserRole},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitTask},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialSiteUserRole},Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.SystemEmailSendConfig})">
<summary> <summary>
影像质控 发送给QC的 影像质控 发送给QC的
</summary> </summary>
@ -15425,7 +15425,7 @@
TrialSiteSurveyService TrialSiteSurveyService
</summary> </summary>
</member> </member>
<member name="M:IRaCIS.Core.Application.Contracts.TrialSiteSurveyService.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialSiteSurvey},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialSiteUserSurvey},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.UserRole},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialSite},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Doctor},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VerificationCode},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialUserRole},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialSiteUser},Medallion.Threading.IDistributedLockProvider,IRaCIS.Core.Application.Auth.ITokenService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.UserType},IRaCIS.Core.Application.Service.IMailVerificationService,Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.SystemEmailSendConfig},AutoMapper.IMapper,IRaCIS.Core.Domain.Share.IUserInfo,Microsoft.Extensions.Localization.IStringLocalizer)"> <member name="M:IRaCIS.Core.Application.Contracts.TrialSiteSurveyService.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialSiteSurvey},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialSiteUserSurvey},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.UserRole},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialSite},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Doctor},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VerificationCode},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialUserRole},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialSiteUserRole},Medallion.Threading.IDistributedLockProvider,IRaCIS.Core.Application.Auth.ITokenService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.UserType},IRaCIS.Core.Application.Service.IMailVerificationService,Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.SystemEmailSendConfig},AutoMapper.IMapper,IRaCIS.Core.Domain.Share.IUserInfo,Microsoft.Extensions.Localization.IStringLocalizer)">
<summary> <summary>
TrialSiteSurveyService TrialSiteSurveyService
</summary> </summary>
@ -16202,15 +16202,15 @@
<summary> 指定资源Id渲染Dicom序列的Jpeg预览图像 </summary> <summary> 指定资源Id渲染Dicom序列的Jpeg预览图像 </summary>
<param name="seriesId"> Dicom序列的Id </param> <param name="seriesId"> Dicom序列的Id </param>
</member> </member>
<member name="M:IRaCIS.Core.Application.Services.TrialMaintenanceService.GetTrialSiteCRCList(System.Guid,System.Guid)">
<summary>获取某一Site下面的负责的CRC列表</summary>
</member>
<member name="M:IRaCIS.Core.Application.Services.TrialMaintenanceService.GetSiteCRCList(IRaCIS.Core.Application.Contracts.DTO.SiteCrcQueryDTO)"> <member name="M:IRaCIS.Core.Application.Services.TrialMaintenanceService.GetSiteCRCList(IRaCIS.Core.Application.Contracts.DTO.SiteCrcQueryDTO)">
<summary>Pannel 进去 SiteTab </summary> <summary>Pannel 进去 SiteTab </summary>
</member> </member>
<member name="M:IRaCIS.Core.Application.Services.TrialMaintenanceService.GetSiteCRCSimpleList(IRaCIS.Core.Application.Contracts.DTO.SiteCrcQueryDTO)"> <member name="M:IRaCIS.Core.Application.Services.TrialMaintenanceService.GetSiteCRCSimpleList(IRaCIS.Core.Application.Contracts.DTO.SiteCrcQueryDTO)">
<summary>[new] setting页面Site列表和getSiteCRCList对比 没有统计数据增加了一些site信息 </summary> <summary>[new] setting页面Site列表和getSiteCRCList对比 没有统计数据增加了一些site信息 </summary>
</member> </member>
<member name="M:IRaCIS.Core.Application.Services.TrialMaintenanceService.GetTrialSiteCRCList(System.Guid,System.Guid)">
<summary>获取某一Site下面的负责的CRC列表</summary>
</member>
<member name="M:IRaCIS.Core.Application.Services.TrialMaintenanceService.GetTrialSiteScreeningList(IRaCIS.Core.Application.Contracts.DTO.TrialSiteQuery)"> <member name="M:IRaCIS.Core.Application.Services.TrialMaintenanceService.GetTrialSiteScreeningList(IRaCIS.Core.Application.Contracts.DTO.TrialSiteQuery)">
<summary>[new] Setting页面 Site勾选列表 </summary> <summary>[new] Setting页面 Site勾选列表 </summary>
</member> </member>

View File

@ -24,7 +24,7 @@ public static class OldRecurringEmailHelper
IRepository<Trial> _trialRepository, IRepository<Trial> _trialRepository,
IRepository<TrialUserRole> _trialUserRepository, IRepository<TrialUserRole> _trialUserRepository,
IRepository<VisitTask> _visitTaskRepository, IRepository<VisitTask> _visitTaskRepository,
IRepository<TrialSiteUser> _trialSiteUserRepository, IRepository<TrialSiteUserRole> _trialSiteUserRoleRepository,
Guid trialId, EmailBusinessScenario businessScenario, Guid trialId, EmailBusinessScenario businessScenario,
Func<TrialEmailNoticeConfig, (string topicStr, string htmlBodyStr, bool isEn_us, Guid? onlyToUserId)> topicAndHtmlFunc, Func<TrialEmailNoticeConfig, (string topicStr, string htmlBodyStr, bool isEn_us, Guid? onlyToUserId)> topicAndHtmlFunc,
@ -72,7 +72,7 @@ public static class OldRecurringEmailHelper
} }
if (trialSiteId != null && toUserTypeEnumList.Any(t => t == UserTypeEnum.ClinicalResearchCoordinator || t == UserTypeEnum.CRA)) if (trialSiteId != null && toUserTypeEnumList.Any(t => t == UserTypeEnum.ClinicalResearchCoordinator || t == UserTypeEnum.CRA))
{ {
var curentSiteUserIdList = _trialSiteUserRepository.Where(t => t.TrialId == trialId && t.TrialSiteId == trialSiteId).Select(t => t.UserId).ToList(); var curentSiteUserIdList = _trialSiteUserRoleRepository.Where(t => t.TrialId == trialId && t.TrialSiteId == trialSiteId).Select(t => t.UserId).ToList();
toUserList = toUserList.Where(t => (t.UserTypeEnum != UserTypeEnum.CRA && t.UserTypeEnum != UserTypeEnum.ClinicalResearchCoordinator) || curentSiteUserIdList.Contains(t.UserId)).ToList(); toUserList = toUserList.Where(t => (t.UserTypeEnum != UserTypeEnum.CRA && t.UserTypeEnum != UserTypeEnum.ClinicalResearchCoordinator) || curentSiteUserIdList.Contains(t.UserId)).ToList();
} }
@ -86,7 +86,7 @@ public static class OldRecurringEmailHelper
if (trialSiteId != null && copyUserTypeEnumList.Any(t => t == UserTypeEnum.ClinicalResearchCoordinator || t == UserTypeEnum.CRA)) if (trialSiteId != null && copyUserTypeEnumList.Any(t => t == UserTypeEnum.ClinicalResearchCoordinator || t == UserTypeEnum.CRA))
{ {
var curentSiteUserIdList = _trialSiteUserRepository.Where(t => t.TrialId == trialId && t.TrialSiteId == trialSiteId).Select(t => t.UserId).ToList(); var curentSiteUserIdList = _trialSiteUserRoleRepository.Where(t => t.TrialId == trialId && t.TrialSiteId == trialSiteId).Select(t => t.UserId).ToList();
copyUserList = copyUserList.Where(t => (t.UserTypeEnum != UserTypeEnum.CRA && t.UserTypeEnum != UserTypeEnum.ClinicalResearchCoordinator) || curentSiteUserIdList.Contains(t.UserId)).ToList(); copyUserList = copyUserList.Where(t => (t.UserTypeEnum != UserTypeEnum.CRA && t.UserTypeEnum != UserTypeEnum.ClinicalResearchCoordinator) || curentSiteUserIdList.Contains(t.UserId)).ToList();
} }

View File

@ -25,7 +25,7 @@ public class QCImageQuestionRecurringEventConsumer(IRepository<Trial> _trialRepo
IRepository<TrialEmailNoticeConfig> _trialEmailNoticeConfigRepository, IRepository<TrialEmailNoticeConfig> _trialEmailNoticeConfigRepository,
IRepository<TrialUserRole> _trialUserRepository, IRepository<TrialUserRole> _trialUserRepository,
IRepository<VisitTask> _visitTaskRepository, IRepository<VisitTask> _visitTaskRepository,
IRepository<TrialSiteUser> _trialSiteUserRepository, IRepository<TrialSiteUserRole> _trialSiteUserRoleRepository,
IOptionsMonitor<SystemEmailSendConfig> _SystemEmailSendConfig) : IConsumer<QCImageQuestionRecurringEvent> IOptionsMonitor<SystemEmailSendConfig> _SystemEmailSendConfig) : IConsumer<QCImageQuestionRecurringEvent>
{ {
public async Task Consume(ConsumeContext<QCImageQuestionRecurringEvent> context) public async Task Consume(ConsumeContext<QCImageQuestionRecurringEvent> context)
@ -75,7 +75,7 @@ public class QCImageQuestionRecurringEventConsumer(IRepository<Trial> _trialRepo
_trialRepository, _trialRepository,
_trialUserRepository, _trialUserRepository,
_visitTaskRepository, _visitTaskRepository,
_trialSiteUserRepository, _trialSiteUserRoleRepository,
trialId, EmailBusinessScenario.QCToCRCImageQuestion, topicAndHtmlFunc); trialId, EmailBusinessScenario.QCToCRCImageQuestion, topicAndHtmlFunc);
} }
} }
@ -90,7 +90,7 @@ public class CRCImageQuestionRecurringEventConsumer(IRepository<Trial> _trialRep
IRepository<TrialEmailNoticeConfig> _trialEmailNoticeConfigRepository, IRepository<TrialEmailNoticeConfig> _trialEmailNoticeConfigRepository,
IRepository<TrialUserRole> _trialUserRepository, IRepository<TrialUserRole> _trialUserRepository,
IRepository<VisitTask> _visitTaskRepository, IRepository<VisitTask> _visitTaskRepository,
IRepository<TrialSiteUser> _trialSiteUserRepository, IRepository<TrialSiteUserRole> _trialSiteUserRoleRepository,
IOptionsMonitor<SystemEmailSendConfig> _SystemEmailSendConfig) : IConsumer<CRCImageQuestionRecurringEvent> IOptionsMonitor<SystemEmailSendConfig> _SystemEmailSendConfig) : IConsumer<CRCImageQuestionRecurringEvent>
{ {
public async Task Consume(ConsumeContext<CRCImageQuestionRecurringEvent> context) public async Task Consume(ConsumeContext<CRCImageQuestionRecurringEvent> context)
@ -143,7 +143,7 @@ public class CRCImageQuestionRecurringEventConsumer(IRepository<Trial> _trialRep
_trialRepository, _trialRepository,
_trialUserRepository, _trialUserRepository,
_visitTaskRepository, _visitTaskRepository,
_trialSiteUserRepository, _trialSiteUserRoleRepository,
trialId, EmailBusinessScenario.CRCToQCQuestion, topicAndHtmlFunc); trialId, EmailBusinessScenario.CRCToQCQuestion, topicAndHtmlFunc);
} }
} }
@ -157,7 +157,7 @@ public class ImageQCRecurringEventConsumer(IRepository<Trial> _trialRepository,
IRepository<TrialEmailNoticeConfig> _trialEmailNoticeConfigRepository, IRepository<TrialEmailNoticeConfig> _trialEmailNoticeConfigRepository,
IRepository<TrialUserRole> _trialUserRepository, IRepository<TrialUserRole> _trialUserRepository,
IRepository<VisitTask> _visitTaskRepository, IRepository<VisitTask> _visitTaskRepository,
IRepository<TrialSiteUser> _trialSiteUserRepository, IRepository<TrialSiteUserRole> _trialSiteUserRoleRepository,
IOptionsMonitor<SystemEmailSendConfig> _SystemEmailSendConfig) : IConsumer<ImageQCRecurringEvent> IOptionsMonitor<SystemEmailSendConfig> _SystemEmailSendConfig) : IConsumer<ImageQCRecurringEvent>
{ {
public async Task Consume(ConsumeContext<ImageQCRecurringEvent> context) public async Task Consume(ConsumeContext<ImageQCRecurringEvent> context)
@ -211,7 +211,7 @@ public class ImageQCRecurringEventConsumer(IRepository<Trial> _trialRepository,
_trialRepository, _trialRepository,
_trialUserRepository, _trialUserRepository,
_visitTaskRepository, _visitTaskRepository,
_trialSiteUserRepository, _trialSiteUserRoleRepository,
trialId, EmailBusinessScenario.QCTask, topicAndHtmlFunc); trialId, EmailBusinessScenario.QCTask, topicAndHtmlFunc);
} }
} }

View File

@ -98,7 +98,7 @@ namespace IRaCIS.Core.Application.Service.Common
/// <param name="_commonDocumentRepository"></param> /// <param name="_commonDocumentRepository"></param>
/// <param name="_dictionaryService"></param> /// <param name="_dictionaryService"></param>
/// <param name="_trialRepository"></param> /// <param name="_trialRepository"></param>
/// <param name="_trialSiteUserRepository"></param> /// <param name="_trialSiteUserRoleRepository"></param>
/// <returns></returns> /// <returns></returns>
/// <exception cref="Exception"></exception> /// <exception cref="Exception"></exception>
[HttpPost] [HttpPost]
@ -107,14 +107,14 @@ namespace IRaCIS.Core.Application.Service.Common
[FromServices] IRepository<CommonDocument> _commonDocumentRepository, [FromServices] IRepository<CommonDocument> _commonDocumentRepository,
[FromServices] IDictionaryService _dictionaryService, [FromServices] IDictionaryService _dictionaryService,
[FromServices] IRepository<Trial> _trialRepository, [FromServices] IRepository<Trial> _trialRepository,
[FromServices] IRepository<TrialSiteUser> _trialSiteUserRepository [FromServices] IRepository<TrialSiteUserRole> _trialSiteUserRoleRepository
) )
{ {
var exportInfo = (await _trialRepository.Where(t => t.Id == param.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException(); var exportInfo = (await _trialRepository.Where(t => t.Id == param.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
var list = await _trialSiteUserRepository.Where(t => t.TrialId == param.TrialId).IgnoreQueryFilters() var list = await _trialSiteUserRoleRepository.Where(t => t.TrialId == param.TrialId).IgnoreQueryFilters()
.WhereIf(param.IsDeleted != null, t => t.IsDeleted == param.IsDeleted) .WhereIf(param.IsDeleted != null, t => t.IsDeleted == param.IsDeleted)
.WhereIf(!string.IsNullOrWhiteSpace(param.SiteName), t => t.TrialSite.TrialSiteName.Contains(param.SiteName) || t.TrialSite.TrialSiteAliasName.Contains(param.SiteName)) .WhereIf(!string.IsNullOrWhiteSpace(param.SiteName), t => t.TrialSite.TrialSiteName.Contains(param.SiteName) || t.TrialSite.TrialSiteAliasName.Contains(param.SiteName))
.WhereIf(!string.IsNullOrWhiteSpace(param.TrialSiteAliasName), .WhereIf(!string.IsNullOrWhiteSpace(param.TrialSiteAliasName),

View File

@ -17,7 +17,7 @@ namespace IRaCIS.Core.Application.Service
IRepository<Trial> _trialRepository, IRepository<Trial> _trialRepository,
IRepository<TrialUserRole> _trialUserRepository, IRepository<TrialUserRole> _trialUserRepository,
IRepository<VisitTask> _visitTaskRepository, IRepository<VisitTask> _visitTaskRepository,
IRepository<TrialSiteUser> _trialSiteUserRepository, IRepository<TrialSiteUserRole> _trialSiteUserRoleRepository,
IOptionsMonitor<SystemEmailSendConfig> _SystemEmailSendConfig, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, IEmailSendService IOptionsMonitor<SystemEmailSendConfig> _SystemEmailSendConfig, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, IEmailSendService
{ {
@ -157,7 +157,7 @@ namespace IRaCIS.Core.Application.Service
} }
if (trialSiteId != null && toUserTypeEnumList.Any(t => t == UserTypeEnum.ClinicalResearchCoordinator || t == UserTypeEnum.CRA)) if (trialSiteId != null && toUserTypeEnumList.Any(t => t == UserTypeEnum.ClinicalResearchCoordinator || t == UserTypeEnum.CRA))
{ {
var curentSiteUserIdList = _trialSiteUserRepository.Where(t => t.TrialId == trialId && t.TrialSiteId == trialSiteId).Select(t => t.UserId).ToList(); var curentSiteUserIdList = _trialSiteUserRoleRepository.Where(t => t.TrialId == trialId && t.TrialSiteId == trialSiteId).Select(t => t.UserId).ToList();
toUserList = toUserList.Where(t => (t.UserTypeEnum != UserTypeEnum.CRA && t.UserTypeEnum != UserTypeEnum.ClinicalResearchCoordinator) || curentSiteUserIdList.Contains(t.UserId)).ToList(); toUserList = toUserList.Where(t => (t.UserTypeEnum != UserTypeEnum.CRA && t.UserTypeEnum != UserTypeEnum.ClinicalResearchCoordinator) || curentSiteUserIdList.Contains(t.UserId)).ToList();
} }
@ -171,7 +171,7 @@ namespace IRaCIS.Core.Application.Service
if (trialSiteId != null && copyUserTypeEnumList.Any(t => t == UserTypeEnum.ClinicalResearchCoordinator || t == UserTypeEnum.CRA)) if (trialSiteId != null && copyUserTypeEnumList.Any(t => t == UserTypeEnum.ClinicalResearchCoordinator || t == UserTypeEnum.CRA))
{ {
var curentSiteUserIdList = _trialSiteUserRepository.Where(t => t.TrialId == trialId && t.TrialSiteId == trialSiteId).Select(t => t.UserId).ToList(); var curentSiteUserIdList = _trialSiteUserRoleRepository.Where(t => t.TrialId == trialId && t.TrialSiteId == trialSiteId).Select(t => t.UserId).ToList();
copyUserList = copyUserList.Where(t => (t.UserTypeEnum != UserTypeEnum.CRA && t.UserTypeEnum != UserTypeEnum.ClinicalResearchCoordinator) || curentSiteUserIdList.Contains(t.UserId)).ToList(); copyUserList = copyUserList.Where(t => (t.UserTypeEnum != UserTypeEnum.CRA && t.UserTypeEnum != UserTypeEnum.ClinicalResearchCoordinator) || curentSiteUserIdList.Contains(t.UserId)).ToList();
} }

View File

@ -9,7 +9,7 @@ namespace IRaCIS.Core.Application.Service
{ {
[ApiExplorerSettings(GroupName = "Institution")] [ApiExplorerSettings(GroupName = "Institution")]
public class SiteService(IRepository<Site> _siteRepository, public class SiteService(IRepository<Site> _siteRepository,
IRepository<TrialSiteUser> _trialSiteUserRepository, IRepository<TrialSiteUserRole> _trialSiteUserRoleRepository,
IDistributedLockProvider _distributedLockProvider, IDistributedLockProvider _distributedLockProvider,
IRepository<TrialSite> _trialSiteRepository, IRepository<TrialSite> _trialSiteRepository,
IRepository<Hospital> _hospitalRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, ISiteService IRepository<Hospital> _hospitalRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, ISiteService
@ -114,7 +114,7 @@ namespace IRaCIS.Core.Application.Service
public async Task<IResponseOutput> DeleteSite(Guid siteId) public async Task<IResponseOutput> DeleteSite(Guid siteId)
{ {
if (await _trialSiteUserRepository.AnyAsync(t => t.TrialSite.SiteId == siteId)) if (await _trialSiteUserRoleRepository.AnyAsync(t => t.TrialSite.SiteId == siteId))
{ {
//---该中心已经加入项目,不可以被删除。 //---该中心已经加入项目,不可以被删除。
return ResponseOutput.NotOk(_localizer["Site_InProject"]); return ResponseOutput.NotOk(_localizer["Site_InProject"]);

View File

@ -47,7 +47,7 @@ namespace IRaCIS.Application.Contracts
public Guid UserTypeId { get; set; } public Guid UserTypeId { get; set; }
public UserTypeEnum UserType { get; set; } public UserTypeEnum UserTypeEnum { get; set; }
public string UserTypeShortName { get; set; } public string UserTypeShortName { get; set; }

View File

@ -37,7 +37,7 @@ namespace IRaCIS.Core.Application.Contracts
IRepository<Doctor> _doctorRepository, IRepository<Doctor> _doctorRepository,
IRepository<VerificationCode> _verificationCodeRepository, IRepository<VerificationCode> _verificationCodeRepository,
IRepository<TrialUserRole> _trialUserRepository, IRepository<TrialUserRole> _trialUserRepository,
IRepository<TrialSiteUser> _trialSiteUserRepository, IRepository<TrialSiteUserRole> _trialSiteUserRoleRepository,
IDistributedLockProvider _distributedLockProvider, IDistributedLockProvider _distributedLockProvider,
ITokenService _tokenService, ITokenService _tokenService,
IRepository<UserType> _userTypeRepository, IRepository<UserType> _userTypeRepository,
@ -311,7 +311,7 @@ namespace IRaCIS.Core.Application.Contracts
TrialSiteSurvey? currentEntity = null; TrialSiteSurvey? currentEntity = null;
var userList = await _trialSiteUserRepository.Where(t => t.TrialId == userInfo.TrialId && t.TrialSiteId == userInfo.TrialSiteId, false, true).ProjectTo<TrialSiteUserSurvey>(_mapper.ConfigurationProvider).ToListAsync(); var userList = await _trialSiteUserRoleRepository.Where(t => t.TrialId == userInfo.TrialId && t.TrialSiteId == userInfo.TrialSiteId, false, true).ProjectTo<TrialSiteUserSurvey>(_mapper.ConfigurationProvider).ToListAsync();
//普通登录 //普通登录
@ -489,7 +489,7 @@ namespace IRaCIS.Core.Application.Contracts
if (find.State != TrialSiteSurveyEnum.PMCreatedAndLock && find.IsDeleted != true) if (find.State != TrialSiteSurveyEnum.PMCreatedAndLock && find.IsDeleted != true)
{ {
var userList = await _trialSiteUserRepository.Where(t => t.TrialId == find.TrialId && t.TrialSiteId == find.TrialSiteId, false, true).ProjectTo<TrialSiteUserSurvey>(_mapper.ConfigurationProvider).ToListAsync(); var userList = await _trialSiteUserRoleRepository.Where(t => t.TrialId == find.TrialId && t.TrialSiteId == find.TrialSiteId, false, true).ProjectTo<TrialSiteUserSurvey>(_mapper.ConfigurationProvider).ToListAsync();
await UnlockSyncSiteUserAsync(find.TrialId, find.TrialSiteId, find.Id, userList); await UnlockSyncSiteUserAsync(find.TrialId, find.TrialSiteId, find.Id, userList);
@ -970,11 +970,11 @@ namespace IRaCIS.Core.Application.Contracts
await _mailVerificationService.SiteSurveyUserJoinEmail(trialId, userId, joinCommand.BaseUrl, joinCommand.RouteUrl); await _mailVerificationService.SiteSurveyUserJoinEmail(trialId, userId, joinCommand.BaseUrl, joinCommand.RouteUrl);
} }
var findTrialSiteUser = await _trialSiteUserRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.UserId == userId && t.TrialSiteId == trialSiteId, true); var findTrialSiteUser = await _trialSiteUserRoleRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.UserId == userId && t.TrialSiteId == trialSiteId, true);
if (findTrialSiteUser == null) if (findTrialSiteUser == null)
{ {
await _trialSiteUserRepository.AddAsync(new TrialSiteUser() { TrialId = trialId, TrialSiteId = trialSiteId, UserId = userId }); await _trialSiteUserRoleRepository.AddAsync(new TrialSiteUserRole() { TrialId = trialId, TrialSiteId = trialSiteId, UserId = userId });
} }
else else
@ -1005,14 +1005,14 @@ namespace IRaCIS.Core.Application.Contracts
var userIdList = list.Select(t => t.SystemUserId).ToList(); var userIdList = list.Select(t => t.SystemUserId).ToList();
await _trialSiteUserRepository.UpdatePartialFromQueryAsync(t => t.TrialId == trialId && t.TrialSiteId == siteId && userIdList.Contains(t.UserId), c => new TrialSiteUser() await _trialSiteUserRoleRepository.UpdatePartialFromQueryAsync(t => t.TrialId == trialId && t.TrialSiteId == siteId && userIdList.Contains(t.UserId), c => new TrialSiteUserRole()
{ {
IsDeleted = true, IsDeleted = true,
DeletedTime = DateTime.Now, DeletedTime = DateTime.Now,
}); });
await _trialSiteUserRepository.SaveChangesAsync(); await _trialSiteUserRoleRepository.SaveChangesAsync();
} }
@ -1091,11 +1091,11 @@ namespace IRaCIS.Core.Application.Contracts
} }
var findTrialSiteUser = await _trialSiteUserRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.UserId == userId && t.TrialSiteId == trialSiteId, true); var findTrialSiteUser = await _trialSiteUserRoleRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.UserId == userId && t.TrialSiteId == trialSiteId, true);
if (findTrialSiteUser == null) if (findTrialSiteUser == null)
{ {
await _trialSiteUserRepository.AddAsync(new TrialSiteUser() { TrialId = trialId, TrialSiteId = trialSiteId, UserId = userId }); await _trialSiteUserRoleRepository.AddAsync(new TrialSiteUserRole() { TrialId = trialId, TrialSiteId = trialSiteId, UserId = userId });
} }
else else
@ -1106,7 +1106,7 @@ namespace IRaCIS.Core.Application.Contracts
await _userRoleRepository.BatchUpdateNoTrackingAsync(t => t.Id == userId, u => new UserRole() { Status = UserStateEnum.Enable }); await _userRoleRepository.BatchUpdateNoTrackingAsync(t => t.Id == userId, u => new UserRole() { Status = UserStateEnum.Enable });
await _trialSiteUserRepository.SaveChangesAsync(); await _trialSiteUserRoleRepository.SaveChangesAsync();
} }

View File

@ -20,7 +20,7 @@ namespace IRaCIS.Core.Application.AutoMapper
CreateMap<LoginDto, TrialSiteSurvey>().ForMember(d => d.Email, t => t.MapFrom(t => t.EmailOrPhone)); CreateMap<LoginDto, TrialSiteSurvey>().ForMember(d => d.Email, t => t.MapFrom(t => t.EmailOrPhone));
CreateMap<TrialSiteUser, TrialSiteUserSurvey>() CreateMap<TrialSiteUserRole, TrialSiteUserSurvey>()
.ForMember(d => d.Id, u => u.Ignore()) .ForMember(d => d.Id, u => u.Ignore())
.ForMember(d => d.Phone, u => u.MapFrom(c => c.UserRole.Phone)) .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.Email, u => u.MapFrom(c => c.UserRole.EMail))

View File

@ -11,7 +11,10 @@ namespace IRaCIS.Application.Contracts
{ {
public class TrialSiteCRCListDTO
{
}
public class UserTrialDTO : UserTrialCommand public class UserTrialDTO : UserTrialCommand
{ {

View File

@ -10,7 +10,7 @@ namespace IRaCIS.Core.Application.Service
[ApiExplorerSettings(GroupName = "Trial")] [ApiExplorerSettings(GroupName = "Trial")]
public class TrialMaintenanceService(IRepository<TrialUserRole> _trialUseRoleRepository, IRepository<TrialIdentityUser> _trialIdentityUserRepository, public class TrialMaintenanceService(IRepository<TrialUserRole> _trialUseRoleRepository, IRepository<TrialIdentityUser> _trialIdentityUserRepository,
IRepository<UserRole> _userRoleRepository, IRepository<UserRole> _userRoleRepository,
IRepository<TrialSiteUser> _trialSiteUserRepository, IRepository<TrialSiteUserRole> _trialSiteUserRoleRepository,
IRepository<SubjectVisit> _subjectVisitRepository, IRepository<SubjectVisit> _subjectVisitRepository,
IRepository<Trial> _trialRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, ITrialMaintenanceService IRepository<Trial> _trialRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, ITrialMaintenanceService
{ {
@ -56,7 +56,7 @@ namespace IRaCIS.Core.Application.Service
if (updateTrialUserCommand.IsDeleted) if (updateTrialUserCommand.IsDeleted)
{ {
if (await _trialSiteUserRepository.AnyAsync(t => t.UserRole.IdentityUserId == trialUser.IdentityUserId && t.TrialId == trialUser.TrialId)) if (await _trialSiteUserRoleRepository.AnyAsync(t => t.UserRole.IdentityUserId == trialUser.IdentityUserId && t.TrialId == trialUser.TrialId))
{ {
// ----人员已加入现场维护 // ----人员已加入现场维护
return ResponseOutput.NotOk(_localizer["TrialMaint_PersonnelJoined"]); return ResponseOutput.NotOk(_localizer["TrialMaint_PersonnelJoined"]);
@ -145,17 +145,20 @@ namespace IRaCIS.Core.Application.Service
{ {
var currentUserRoleList = item.ToList(); var currentUserRoleList = item.ToList();
var addArray = _mapper.Map<TrialIdentityUser[]>(currentUserRoleList); var first = currentUserRoleList.FirstOrDefault();
var trialUsers = await _trialIdentityUserRepository.AddRangeAsync(addArray); var currentUser = new TrialIdentityUser()
foreach (var trialUser in trialUsers)
{ {
trialUser.JoinTime = DateTime.Now; TrialId = first.TrialId,
} IdentityUserId = item.Key,
JoinTime = DateTime.Now,
TrialUserRoleList = currentUserRoleList.Select(t => new TrialUserRole() { UserId = t.UserId, TrialId = t.TrialId }).ToList()
};
var success = await _trialUseRoleRepository.SaveChangesAsync(); await _trialIdentityUserRepository.AddAsync(currentUser);
var success = await _trialIdentityUserRepository.SaveChangesAsync();
} }
@ -207,7 +210,7 @@ namespace IRaCIS.Core.Application.Service
if (trialUser == null) return Null404NotFound(trialUser); if (trialUser == null) return Null404NotFound(trialUser);
if (await _trialSiteUserRepository.AnyAsync(t => t.UserId == trialUser.UserId && t.TrialId == trialUser.TrialId)) if (await _trialSiteUserRoleRepository.AnyAsync(t => t.UserId == trialUser.UserId && t.TrialId == trialUser.TrialId))
{ {
//---人员已加入现场维护 //---人员已加入现场维护
return ResponseOutput.NotOk(_localizer["TrialMaint_PersonnelJoined"]); return ResponseOutput.NotOk(_localizer["TrialMaint_PersonnelJoined"]);

View File

@ -551,7 +551,7 @@ namespace IRaCIS.Core.Application.Service
await _repository.BatchDeleteNoTrackingAsync<TrialSiteEquipmentSurvey>(t => t.TrialSiteSurvey.TrialId == trialId); await _repository.BatchDeleteNoTrackingAsync<TrialSiteEquipmentSurvey>(t => t.TrialSiteSurvey.TrialId == trialId);
await _repository.BatchDeleteNoTrackingAsync<TrialUserRole>(t => t.TrialId == trialId); await _repository.BatchDeleteNoTrackingAsync<TrialUserRole>(t => t.TrialId == trialId);
await _repository.BatchDeleteNoTrackingAsync<TrialSiteUser>(t => t.TrialId == trialId); await _repository.BatchDeleteNoTrackingAsync<TrialSiteUserRole>(t => t.TrialId == trialId);
await _repository.BatchDeleteNoTrackingAsync<VisitStage>(t => t.TrialId == trialId); await _repository.BatchDeleteNoTrackingAsync<VisitStage>(t => t.TrialId == trialId);
await _repository.BatchDeleteNoTrackingAsync<VisitPlanInfluenceStat>(t => t.TrialId == trialId); await _repository.BatchDeleteNoTrackingAsync<VisitPlanInfluenceStat>(t => t.TrialId == trialId);
await _repository.BatchDeleteNoTrackingAsync<VisitPlanInfluenceStudy>(t => t.TrialId == trialId); await _repository.BatchDeleteNoTrackingAsync<VisitPlanInfluenceStudy>(t => t.TrialId == trialId);

View File

@ -10,15 +10,30 @@ namespace IRaCIS.Core.Application.Services
{ {
[ApiExplorerSettings(GroupName = "Trial")] [ApiExplorerSettings(GroupName = "Trial")]
public class TrialMaintenanceService(IRepository<TrialSite> _trialSiteRepository, public class TrialMaintenanceService(IRepository<TrialSite> _trialSiteRepository,
IRepository<TrialSiteUser> _trialSiteUserRepository, IRepository<TrialSiteUserRole> _trialSiteUserRoleRepository,
IRepository<Site> _siteRepository, IRepository<Site> _siteRepository,
IRepository<Subject> _subjectRepository, IRepository<Subject> _subjectRepository,
IRepository<VisitTask> _visitTaskRepository, IRepository<VisitTask> _visitTaskRepository,
IRepository<Trial> _trialRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, ITrialSiteService IRepository<Trial> _trialRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, ITrialSiteService
{ {
#region 账户修改已维护
/// <summary>获取某一Site下面的负责的CRC列表</summary>
[HttpGet, Route("{trialId:guid}/{siteId:guid}")]
public async Task<List<UserTrialDTO>> GetTrialSiteCRCList(Guid trialId, Guid siteId)
{
var query = _trialSiteUserRoleRepository.Where(t => t.TrialId == trialId && t.TrialSiteId == siteId).IgnoreQueryFilters()
.ProjectTo<UserTrialDTO>(_mapper.ConfigurationProvider);
return await query.ToListAsync();
}
#endregion
/// <summary>Pannel 进去 SiteTab </summary> /// <summary>Pannel 进去 SiteTab </summary>
[HttpPost] [HttpPost]
@ -65,16 +80,6 @@ namespace IRaCIS.Core.Application.Services
} }
/// <summary>获取某一Site下面的负责的CRC列表</summary>
[HttpGet, Route("{trialId:guid}/{siteId:guid}")]
public async Task<List<UserTrialDTO>> GetTrialSiteCRCList(Guid trialId, Guid siteId)
{
var query = _trialSiteUserRepository.Where(t => t.TrialId == trialId && t.TrialSiteId == siteId).IgnoreQueryFilters()
.ProjectTo<UserTrialDTO>(_mapper.ConfigurationProvider);
return await query.ToListAsync();
}
/// <summary>[new] Setting页面 Site勾选列表 </summary> /// <summary>[new] Setting页面 Site勾选列表 </summary>
[HttpPost] [HttpPost]
@ -111,7 +116,7 @@ namespace IRaCIS.Core.Application.Services
[HttpPost] [HttpPost]
[UnitOfWork] [UnitOfWork]
//[Authorize(Policy = IRaCISPolicy.PM_APM)] //[Authorize(Policy = IRaCISPolicy.PM_APM)]
[TrialGlobalLimit( "AfterStopCannNotOpt" )] [TrialGlobalLimit("AfterStopCannNotOpt")]
public async Task<IResponseOutput> AddTrialSites(List<TrialSiteCommand> trialSites) public async Task<IResponseOutput> AddTrialSites(List<TrialSiteCommand> trialSites)
{ {
var addArray = _mapper.Map<List<TrialSite>>(trialSites); var addArray = _mapper.Map<List<TrialSite>>(trialSites);
@ -152,7 +157,7 @@ namespace IRaCIS.Core.Application.Services
if (editTrialSiteCommand.IsDeleted) if (editTrialSiteCommand.IsDeleted)
{ {
if (await _trialSiteUserRepository.AnyAsync(t => t.TrialId == trialId && t.TrialSiteId == trialSiteId)) if (await _trialSiteUserRoleRepository.AnyAsync(t => t.TrialId == trialId && t.TrialSiteId == trialSiteId))
{ {
//---The site has been associated with CRC, and couldn't be deleted. //---The site has been associated with CRC, and couldn't be deleted.
return ResponseOutput.NotOk(_localizer["TrialSite_CannotDeleteAssociatedCRC"]); return ResponseOutput.NotOk(_localizer["TrialSite_CannotDeleteAssociatedCRC"]);
@ -205,36 +210,36 @@ namespace IRaCIS.Core.Application.Services
/// <summary> 批量添加Site下 CRC的负责人 </summary> /// <summary> 批量添加Site下 CRC的负责人 </summary>
[HttpPost] [HttpPost]
[TrialGlobalLimit( "AfterStopCannNotOpt" )] [TrialGlobalLimit("AfterStopCannNotOpt")]
//[Authorize(Policy = IRaCISPolicy.PM_APM)] //[Authorize(Policy = IRaCISPolicy.PM_APM)]
public async Task<IResponseOutput> AssignSiteCRC(List<AssginSiteCRCCommand> trialSiteCRCList) public async Task<IResponseOutput> AssignSiteCRC(List<AssginSiteCRCCommand> trialSiteCRCList)
{ {
var addArray = _mapper.Map<List<TrialSiteUser>>(trialSiteCRCList); var addArray = _mapper.Map<List<TrialSiteUserRole>>(trialSiteCRCList);
await _trialSiteUserRepository.AddRangeAsync(addArray); await _trialSiteUserRoleRepository.AddRangeAsync(addArray);
await _trialSiteUserRepository.SaveChangesAsync(); await _trialSiteUserRoleRepository.SaveChangesAsync();
return ResponseOutput.Result(true); return ResponseOutput.Result(true);
} }
/// <summary> 删除CRC人员</summary> /// <summary> 删除CRC人员</summary>
[HttpDelete, Route("{id:guid}/{trialId:guid}/{isDelete:bool}")] [HttpDelete, Route("{id:guid}/{trialId:guid}/{isDelete:bool}")]
[TrialGlobalLimit( "AfterStopCannNotOpt" )] [TrialGlobalLimit("AfterStopCannNotOpt")]
//[Authorize(Policy = IRaCISPolicy.PM_APM)] //[Authorize(Policy = IRaCISPolicy.PM_APM)]
public async Task<IResponseOutput> DeleteSiteCRC(Guid id, bool isDelete) public async Task<IResponseOutput> DeleteSiteCRC(Guid id, bool isDelete)
{ {
await _trialSiteUserRepository.UpdatePartialFromQueryAsync(t => t.Id == id, u => new TrialSiteUser() { IsDeleted = isDelete, DeletedTime = isDelete ? DateTime.Now : null }, true, true); await _trialSiteUserRoleRepository.UpdatePartialFromQueryAsync(t => t.Id == id, u => new TrialSiteUserRole() { IsDeleted = isDelete, DeletedTime = isDelete ? DateTime.Now : null }, true, true);
//删除又启用改授权时间 //删除又启用改授权时间
if (isDelete == false) if (isDelete == false)
{ {
await _trialSiteUserRepository.BatchUpdateNoTrackingAsync(t => t.Id == id, u => new TrialSiteUser() { CreateTime = DateTime.Now }); await _trialSiteUserRoleRepository.BatchUpdateNoTrackingAsync(t => t.Id == id, u => new TrialSiteUserRole() { CreateTime = DateTime.Now });
} }
////不跟踪 ////不跟踪
//await _trialSiteUserRepository.ExecuteUpdateAsync(t => t.Id == id, s=>s.SetProperty(t=>t.IsDeleted,u=>isDelete) //await _trialSiteUserRoleRepository.ExecuteUpdateAsync(t => t.Id == id, s=>s.SetProperty(t=>t.IsDeleted,u=>isDelete)
// .SetProperty(t=>t.DeletedTime,u=> isDelete ? DateTime.Now : null) // .SetProperty(t=>t.DeletedTime,u=> isDelete ? DateTime.Now : null)
// .SetProperty(t=>t.CreateTime,u=>isDelete?u.CreateTime:DateTime.Now)); // .SetProperty(t=>t.CreateTime,u=>isDelete?u.CreateTime:DateTime.Now));
@ -280,7 +285,7 @@ namespace IRaCIS.Core.Application.Services
/// <summary>删除 项目 下某一site </summary> /// <summary>删除 项目 下某一site </summary>
[HttpDelete("{id:guid}/{trialId:guid}")] [HttpDelete("{id:guid}/{trialId:guid}")]
[TrialGlobalLimit( "AfterStopCannNotOpt" )] [TrialGlobalLimit("AfterStopCannNotOpt")]
[Obsolete] [Obsolete]
public async Task<IResponseOutput> DeleteTrialSite(Guid id) public async Task<IResponseOutput> DeleteTrialSite(Guid id)
{ {
@ -291,7 +296,7 @@ namespace IRaCIS.Core.Application.Services
var trialId = relation.TrialId; var trialId = relation.TrialId;
var trialSiteId = relation.Id; var trialSiteId = relation.Id;
if (await _trialSiteUserRepository.AnyAsync(t => t.TrialId == trialId && t.TrialSiteId == trialSiteId)) if (await _trialSiteUserRoleRepository.AnyAsync(t => t.TrialId == trialId && t.TrialSiteId == trialSiteId))
{ {
//---The site has been associated with CRC, and couldn't be deleted. //---The site has been associated with CRC, and couldn't be deleted.
return ResponseOutput.NotOk(_localizer["TrialSite_CannotDeleteAssociatedCRC"]); return ResponseOutput.NotOk(_localizer["TrialSite_CannotDeleteAssociatedCRC"]);
@ -305,7 +310,7 @@ namespace IRaCIS.Core.Application.Services
await _trialSiteRepository.DeleteAsync(relation); await _trialSiteRepository.DeleteAsync(relation);
return ResponseOutput.Result(await _trialSiteUserRepository.SaveChangesAsync()); return ResponseOutput.Result(await _trialSiteUserRoleRepository.SaveChangesAsync());
} }

View File

@ -149,7 +149,7 @@ namespace IRaCIS.Core.Application.Service
CreateMap<TrialSiteUser, UserTrialDTO>().IncludeMembers(t => t.UserRole) CreateMap<TrialSiteUserRole, UserTrialDTO>().IncludeMembers(t => t.UserRole)
.ForMember(d => d.UserType, u => u.MapFrom(s => s.UserRole.UserTypeRole.UserTypeShortName)) .ForMember(d => d.UserType, u => u.MapFrom(s => s.UserRole.UserTypeRole.UserTypeShortName))
.ForMember(d => d.UserRealName, u => u.MapFrom(s => s.UserRole.FullName)); .ForMember(d => d.UserRealName, u => u.MapFrom(s => s.UserRole.FullName));
CreateMap<UserRole, UserTrialDTO>(); CreateMap<UserRole, UserTrialDTO>();
@ -157,7 +157,7 @@ namespace IRaCIS.Core.Application.Service
CreateMap<AssginSiteCRCCommand, TrialSiteUser>(); CreateMap<AssginSiteCRCCommand, TrialSiteUserRole>();
CreateMap<Domain.Models.Trial, TrialConfigDTO>().ForMember(t => t.TrialId, u => u.MapFrom(c => c.Id)) CreateMap<Domain.Models.Trial, TrialConfigDTO>().ForMember(t => t.TrialId, u => u.MapFrom(c => c.Id))
@ -266,7 +266,7 @@ namespace IRaCIS.Core.Application.Service
CreateMap<Trial, TrialSiteUserExportDto>() CreateMap<Trial, TrialSiteUserExportDto>()
.ForMember(t => t.TrialSiteUserList, u => u.Ignore()); .ForMember(t => t.TrialSiteUserList, u => u.Ignore());
CreateMap<TrialSiteUser, SiteUserExportDTO>().IncludeMembers(t => t.UserRole) CreateMap<TrialSiteUserRole, SiteUserExportDTO>().IncludeMembers(t => t.UserRole)
.ForMember(t => t.TrialSiteCode, u => u.MapFrom(c => c.TrialSite.TrialSiteCode)) .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.TrialSiteAliasName, u => u.MapFrom(c => c.TrialSite.TrialSiteAliasName))
.ForMember(t => t.UserRealName, u => u.MapFrom(c => c.UserRole.FullName)) .ForMember(t => t.UserRealName, u => u.MapFrom(c => c.UserRole.FullName))

View File

@ -59,7 +59,6 @@ namespace IRaCIS.Core.Application.Service
CreateMap<TrialUserRole, TrialIdentityUserRoleDto>(); CreateMap<TrialUserRole, TrialIdentityUserRoleDto>();
CreateMap<TrialUserAddCommand, TrialIdentityUser>();

View File

@ -50,7 +50,7 @@ public partial class Trial : BaseFullDeleteAuditEntity
[JsonIgnore] [JsonIgnore]
public List<TrialSite> TrialSiteList { get; set; } = new List<TrialSite>(); public List<TrialSite> TrialSiteList { get; set; } = new List<TrialSite>();
[JsonIgnore] [JsonIgnore]
public List<TrialSiteUser> TrialSiteUserList { get; set; } = new List<TrialSiteUser>(); public List<TrialSiteUserRole> TrialSiteUserList { get; set; } = new List<TrialSiteUserRole>();
[JsonIgnore] [JsonIgnore]
public List<ReadModule> ReadModuleList { get; set; } = new List<ReadModule>(); public List<ReadModule> ReadModuleList { get; set; } = new List<ReadModule>();
[JsonIgnore] [JsonIgnore]

View File

@ -21,7 +21,7 @@ public class TrialSite : BaseFullDeleteAuditEntity
public List<TrialSiteSurvey> TrialSiteSurveyList { get; set; } public List<TrialSiteSurvey> TrialSiteSurveyList { get; set; }
[Comment("Site 由多个人负责")] [Comment("Site 由多个人负责")]
[JsonIgnore] [JsonIgnore]
public List<TrialSiteUser> CRCUserList { get; set; } public List<TrialSiteUserRole> CRCUserList { get; set; }
[JsonIgnore] [JsonIgnore]
public List<Subject> SubjectList { get; set; } public List<Subject> SubjectList { get; set; }

View File

@ -1,8 +1,8 @@
namespace IRaCIS.Core.Domain.Models; namespace IRaCIS.Core.Domain.Models;
[Comment("项目 - 项目中心用户关系表")] [Comment("项目 - 项目中心用户角色关系表")]
[Table("TrialSiteUser")] [Table("TrialSiteUser")]
public class TrialSiteUser : BaseFullDeleteAuditEntity public class TrialSiteUserRole : BaseFullDeleteAuditEntity
{ {
#region 导航属性 #region 导航属性

View File

@ -63,7 +63,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
{ {
typeof(TrialUserRole), typeof(TrialUserRole),
typeof(TrialSiteSurvey), typeof(TrialSiteSurvey),
typeof(TrialSiteUser), typeof(TrialSiteUserRole),
typeof(VisitStage), typeof(VisitStage),
typeof(TrialSite) typeof(TrialSite)
}; };
@ -1736,12 +1736,12 @@ namespace IRaCIS.Core.Infra.EFCore.Common
// 项目中心人员 // 项目中心人员
foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(TrialSiteUser))) foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(TrialSiteUserRole)))
{ {
var type = GetEntityAuditOpt(item); var type = GetEntityAuditOpt(item);
var entity = item.Entity as TrialSiteUser; var entity = item.Entity as TrialSiteUserRole;
if (entity.TrialSite == null) if (entity.TrialSite == null)
@ -1749,7 +1749,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
entity.TrialSite = await _dbContext.TrialSite.Where(x => x.Id == entity.TrialSiteId).IgnoreQueryFilters().FirstOrDefaultAsync(); entity.TrialSite = await _dbContext.TrialSite.Where(x => x.Id == entity.TrialSiteId).IgnoreQueryFilters().FirstOrDefaultAsync();
} }
await InsertInspection<TrialSiteUser>(item.Entity as TrialSiteUser, type, x => new InspectionConvertDTO await InsertInspection<TrialSiteUserRole>(item.Entity as TrialSiteUserRole, type, x => new InspectionConvertDTO
{ {
IsDistinctionInterface = type == AuditOpt.Update ? true : false, IsDistinctionInterface = type == AuditOpt.Update ? true : false,
TrialId = x.TrialId, TrialId = x.TrialId,
@ -1926,8 +1926,9 @@ namespace IRaCIS.Core.Infra.EFCore.Common
await InsertInspection<TaskStudy>(item.Entity as TaskStudy, type, x => new InspectionConvertDTO() await InsertInspection<TaskStudy>(item.Entity as TaskStudy, type, x => new InspectionConvertDTO()
{ {
ObjectRelationParentId = x.VisitTaskId, ObjectRelationParentId = x.VisitTaskId,
},new { }, new
ArmEnum= armEnum, {
ArmEnum = armEnum,
}); });
} }
@ -1980,7 +1981,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
var extraIdentification = string.Empty; var extraIdentification = string.Empty;
Arm armEnum = Arm.SingleReadingArm; Arm armEnum = Arm.SingleReadingArm;
if (entity.VisitTaskId!=null) if (entity.VisitTaskId != null)
{ {
extraIdentification = "/VisitTask"; extraIdentification = "/VisitTask";
armEnum = await _dbContext.VisitTask.Where(x => x.Id == entity.VisitTaskId).Select(x => x.ArmEnum).FirstOrDefaultAsync(); armEnum = await _dbContext.VisitTask.Where(x => x.Id == entity.VisitTaskId).Select(x => x.ArmEnum).FirstOrDefaultAsync();
@ -1991,7 +1992,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
await InsertInspection<NoneDicomStudyFile>(item.Entity as NoneDicomStudyFile, type, x => new InspectionConvertDTO() await InsertInspection<NoneDicomStudyFile>(item.Entity as NoneDicomStudyFile, type, x => new InspectionConvertDTO()
{ {
TrialId= trialid, TrialId = trialid,
ObjectRelationParentId = x.VisitTaskId, ObjectRelationParentId = x.VisitTaskId,
ExtraIndentification = extraIdentification ExtraIndentification = extraIdentification
}, new }, new
@ -3718,7 +3719,10 @@ namespace IRaCIS.Core.Infra.EFCore.Common
/// <returns></returns> /// <returns></returns>
public string GetInspectionRecordIdentification<T>(T entityObj, string type, bool IsDistinctionInterface = true, bool isSelfDefine = false) public string GetInspectionRecordIdentification<T>(T entityObj, string type, bool IsDistinctionInterface = true, bool isSelfDefine = false)
{ {
var entityTypeName = entityObj.GetType().Name; var entityType = _dbContext.Model.FindEntityType(entityObj.GetType());
var tableName = entityType.GetTableName();
var entityTypeName = tableName.IsNotNullOrEmpty() ? tableName : entityObj.GetType().Name;
//文档签署这块,不区分系统和项目的 需要处理为同一个标识 //文档签署这块,不区分系统和项目的 需要处理为同一个标识
if (typeof(T) == typeof(TrialDocConfirmedUser) || typeof(T) == typeof(SystemDocConfirmedUser)) if (typeof(T) == typeof(TrialDocConfirmedUser) || typeof(T) == typeof(SystemDocConfirmedUser))

View File

@ -451,7 +451,7 @@ public class IRaCISDBContext : DbContext
public virtual DbSet<TrialDictionary> ProjectDictionary { get; set; } public virtual DbSet<TrialDictionary> ProjectDictionary { get; set; }
public virtual DbSet<TrialSiteUser> UserTrialSite { get; set; } public virtual DbSet<TrialSiteUserRole> UserTrialSite { get; set; }
public virtual DbSet<TrialSite> TrialSite { get; set; } public virtual DbSet<TrialSite> TrialSite { get; set; }
public virtual DbSet<Site> Site { get; set; } public virtual DbSet<Site> Site { get; set; }

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,61 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace IRaCIS.Core.Infra.EFCore.Migrations
{
/// <inheritdoc />
public partial class TrialSiteUserRoleModify : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterTable(
name: "TrialSiteUser",
comment: "项目 - 项目中心用户角色关系表",
oldComment: "项目 - 项目中心用户关系表");
migrationBuilder.AddColumn<Guid>(
name: "TrialUserId",
table: "TrialUser",
type: "uniqueidentifier",
nullable: false,
defaultValue: new Guid("00000000-0000-0000-0000-000000000000"));
migrationBuilder.CreateIndex(
name: "IX_TrialUser_TrialUserId",
table: "TrialUser",
column: "TrialUserId");
migrationBuilder.AddForeignKey(
name: "FK_TrialUser_TrialIdentityUser_TrialUserId",
table: "TrialUser",
column: "TrialUserId",
principalTable: "TrialIdentityUser",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_TrialUser_TrialIdentityUser_TrialUserId",
table: "TrialUser");
migrationBuilder.DropIndex(
name: "IX_TrialUser_TrialUserId",
table: "TrialUser");
migrationBuilder.DropColumn(
name: "TrialUserId",
table: "TrialUser");
migrationBuilder.AlterTable(
name: "TrialSiteUser",
comment: "项目 - 项目中心用户关系表",
oldComment: "项目 - 项目中心用户角色关系表");
}
}
}

View File

@ -12466,7 +12466,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
}); });
}); });
modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialSiteUser", b => modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialSiteUserRole", b =>
{ {
b.Property<Guid>("Id") b.Property<Guid>("Id")
.HasColumnType("uniqueidentifier"); .HasColumnType("uniqueidentifier");
@ -12513,7 +12513,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.ToTable("TrialSiteUser", t => b.ToTable("TrialSiteUser", t =>
{ {
t.HasComment("项目 - 项目中心用户关系表"); t.HasComment("项目 - 项目中心用户角色关系表");
}); });
}); });
@ -12713,6 +12713,9 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.Property<Guid>("TrialId") b.Property<Guid>("TrialId")
.HasColumnType("uniqueidentifier"); .HasColumnType("uniqueidentifier");
b.Property<Guid>("TrialUserId")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("UpdateTime") b.Property<DateTime>("UpdateTime")
.HasColumnType("datetime2"); .HasColumnType("datetime2");
@ -12728,6 +12731,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.HasIndex("TrialId"); b.HasIndex("TrialId");
b.HasIndex("TrialUserId");
b.HasIndex("UserId"); b.HasIndex("UserId");
b.ToTable("TrialUser", t => b.ToTable("TrialUser", t =>
@ -17538,7 +17543,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.Navigation("TrialSite"); b.Navigation("TrialSite");
}); });
modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialSiteUser", b => modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialSiteUserRole", b =>
{ {
b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole")
.WithMany() .WithMany()
@ -17558,7 +17563,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
.OnDelete(DeleteBehavior.Cascade) .OnDelete(DeleteBehavior.Cascade)
.IsRequired(); .IsRequired();
b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "User") b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "UserRole")
.WithMany() .WithMany()
.HasForeignKey("UserId") .HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade) .OnDelete(DeleteBehavior.Cascade)
@ -17570,7 +17575,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.Navigation("TrialSite"); b.Navigation("TrialSite");
b.Navigation("User"); b.Navigation("UserRole");
}); });
modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialSiteUserSurvey", b => modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialSiteUserSurvey", b =>
@ -17650,8 +17655,14 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
.OnDelete(DeleteBehavior.Cascade) .OnDelete(DeleteBehavior.Cascade)
.IsRequired(); .IsRequired();
b.HasOne("IRaCIS.Core.Domain.Models.TrialIdentityUser", "TrialUser")
.WithMany("TrialUserRoleList")
.HasForeignKey("TrialUserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "UserRole") b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "UserRole")
.WithMany("UserTrials") .WithMany("UserRoleTrials")
.HasForeignKey("UserId") .HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade) .OnDelete(DeleteBehavior.Cascade)
.IsRequired(); .IsRequired();
@ -17660,6 +17671,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.Navigation("Trial"); b.Navigation("Trial");
b.Navigation("TrialUser");
b.Navigation("UserRole"); b.Navigation("UserRole");
}); });
@ -18400,6 +18413,11 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.Navigation("ExperienceCriteriaList"); b.Navigation("ExperienceCriteriaList");
}); });
modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialIdentityUser", b =>
{
b.Navigation("TrialUserRoleList");
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialQCQuestion", b => modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialQCQuestion", b =>
{ {
b.Navigation("TrialQCQuestionAnswerList"); b.Navigation("TrialQCQuestionAnswerList");
@ -18429,7 +18447,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
{ {
b.Navigation("SystemDocConfirmedList"); b.Navigation("SystemDocConfirmedList");
b.Navigation("UserTrials"); b.Navigation("UserRoleTrials");
b.Navigation("VisitTaskList"); b.Navigation("VisitTaskList");
}); });