diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index b15ff619e..eaf13411d 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -10053,6 +10053,12 @@ + + + 维护临床数据 --一定要在同步表前同步数据才行 + + + Reviewer 列表查询参数 diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs index d73c125bb..8626eafd7 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs @@ -98,7 +98,7 @@ namespace IRaCIS.Core.Application.Service var trialReadingCriterionConfig = await _trialReadingCriterionRepository.Where(t => t.Id == confirmedTrialReadingCriterionId).Select(t => new { TrialReadingCriterionId = t.Id, t.ReadingTool, t.ReadingType, t.IsReadingTaskViewInOrder, t.IsFollowVisitAutoAssign, t.IsFollowGlobalVisitAutoAssign, t.FollowGlobalVisitAutoAssignDefaultState, t.FollowVisitAutoAssignDefaultState, t.TaskAllocateObjEnum, t.CriterionType }).FirstOrDefaultAsync(); //获取确认的临床数据配置 - var clinicalDataConfirmList = _trialClinicalDataSetRepository.Where(t => t.TrialId == trialId && t.IsConfirm).ToList(); + var clinicalDataConfirmList = _trialClinicalDataSetRepository.Where(t => t.TrialId == trialId && t.IsConfirm).Include(t=>t.TrialClinicalDataSetCriteriaList).ToList(); var visitBlindConfig = _trialRepository.Where(t => t.Id == trialId).Select(t => new { t.BlindBaseLineName, t.BlindFollowUpPrefix }).FirstOrDefault(); @@ -122,8 +122,8 @@ namespace IRaCIS.Core.Application.Service { var blindTaskName = string.Empty; - var isNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList); - var isClinicalDataSign = IsClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList, subjectVisit.Id, trialId); + var isNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.TrialReadingCriterionId, clinicalDataConfirmList); + var isClinicalDataSign = IsClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.TrialReadingCriterionId, clinicalDataConfirmList, subjectVisit.Id, trialId); if (visitNumList.IndexOf(subjectVisit.VisitNum) == 0) { @@ -291,7 +291,7 @@ namespace IRaCIS.Core.Application.Service - private bool IsNeedClinicalDataSign(ReadingCategory readingCategory, bool isbaseLine, CriterionType criterionType, List trialClinicalDataSetList) + private bool IsNeedClinicalDataSign(ReadingCategory readingCategory, bool isbaseLine, Guid trialReadingCriterionId, List trialClinicalDataSetList) { //访视 if (readingCategory == ReadingCategory.Visit) @@ -300,11 +300,11 @@ namespace IRaCIS.Core.Application.Service { //return trialClinicalDataSetList.Where(t=>t.CriterionEnumList.Any(c=>c==(int)criterionType) && (t.ClinicalDataLevel == ClinicalLevel.Subject || t.ClinicalDataLevel == ClinicalLevel.SubjectVisit)).Count()> 0; - return trialClinicalDataSetList.Any(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && (t.ClinicalDataLevel == ClinicalLevel.Subject || t.ClinicalDataLevel == ClinicalLevel.SubjectVisit)); + return trialClinicalDataSetList.Any(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCriterionId) && (t.ClinicalDataLevel == ClinicalLevel.Subject || t.ClinicalDataLevel == ClinicalLevel.SubjectVisit)); } else { - return trialClinicalDataSetList.Any(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && t.ClinicalDataLevel == ClinicalLevel.SubjectVisit); + return trialClinicalDataSetList.Any(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCriterionId) && t.ClinicalDataLevel == ClinicalLevel.SubjectVisit); } } @@ -315,12 +315,12 @@ namespace IRaCIS.Core.Application.Service //阅片期 else if (readingCategory == ReadingCategory.Global) { - return trialClinicalDataSetList.Any(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && t.ClinicalDataLevel == ClinicalLevel.ImageRead); + return trialClinicalDataSetList.Any(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCriterionId) && t.ClinicalDataLevel == ClinicalLevel.ImageRead); } // 肿瘤学 else if (readingCategory == ReadingCategory.Oncology) { - return trialClinicalDataSetList.Any(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && t.ClinicalDataLevel == ClinicalLevel.OncologyRead); + return trialClinicalDataSetList.Any(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCriterionId) && t.ClinicalDataLevel == ClinicalLevel.OncologyRead); } else { @@ -331,15 +331,15 @@ namespace IRaCIS.Core.Application.Service // 有可能在任务生成之前 就签名完了临床数据 - private bool IsClinicalDataSign(ReadingCategory readingCategory, bool isbaseLine, CriterionType criterionType, List trialClinicalDataSetList, Guid readingId, Guid trialId) + private bool IsClinicalDataSign(ReadingCategory readingCategory, bool isbaseLine, Guid trialReadingCriterionId, List trialClinicalDataSetList, Guid readingId, Guid trialId) { //不需要签名的 直接返回 - if (IsNeedClinicalDataSign(readingCategory, isbaseLine, criterionType, trialClinicalDataSetList) == false) + if (IsNeedClinicalDataSign(readingCategory, isbaseLine, trialReadingCriterionId, trialClinicalDataSetList) == false) { return false; } - + var isClinicalDataSign = false; @@ -355,11 +355,11 @@ namespace IRaCIS.Core.Application.Service if (isbaseLine) { //CRC 的自动签名 不用管 只用处理PM 的就好 - needSignCount = trialClinicalDataSetList.Where(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && (t.ClinicalDataLevel == ClinicalLevel.Subject || t.ClinicalDataLevel == ClinicalLevel.SubjectVisit) && t.UploadRole == UploadRole.PM).Count(); + needSignCount = trialClinicalDataSetList.Where(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCriterionId) && (t.ClinicalDataLevel == ClinicalLevel.Subject || t.ClinicalDataLevel == ClinicalLevel.SubjectVisit) && t.UploadRole == UploadRole.PM).Count(); } else { - needSignCount = trialClinicalDataSetList.Where(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && t.ClinicalDataLevel == ClinicalLevel.SubjectVisit && t.UploadRole == UploadRole.PM).Count(); + needSignCount = trialClinicalDataSetList.Where(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCriterionId) && t.ClinicalDataLevel == ClinicalLevel.SubjectVisit && t.UploadRole == UploadRole.PM).Count(); } } @@ -371,17 +371,17 @@ namespace IRaCIS.Core.Application.Service //阅片期 else if (readingCategory == ReadingCategory.Global) { - needSignCount = trialClinicalDataSetList.Where(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && t.ClinicalDataLevel == ClinicalLevel.ImageRead && t.UploadRole == UploadRole.PM).Count(); + needSignCount = trialClinicalDataSetList.Where(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCriterionId) && t.ClinicalDataLevel == ClinicalLevel.ImageRead && t.UploadRole == UploadRole.PM).Count(); } // 肿瘤学 else if (readingCategory == ReadingCategory.Oncology) { - return trialClinicalDataSetList.Any(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && t.ClinicalDataLevel == ClinicalLevel.OncologyRead); + return trialClinicalDataSetList.Any(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCriterionId) && t.ClinicalDataLevel == ClinicalLevel.OncologyRead); } else { - needSignCount = trialClinicalDataSetList.Where(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && t.ClinicalDataLevel == ClinicalLevel.OncologyRead && t.UploadRole == UploadRole.PM).Count(); + needSignCount = trialClinicalDataSetList.Where(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCriterionId) && t.ClinicalDataLevel == ClinicalLevel.OncologyRead && t.UploadRole == UploadRole.PM).Count(); } //可能仅仅CRC 基线 没有PM @@ -410,7 +410,7 @@ namespace IRaCIS.Core.Application.Service var visitBlindConfig = _trialRepository.Where(t => t.Id == trialId).Select(t => new { t.BlindBaseLineName, t.BlindFollowUpPrefix }).FirstOrDefault(); //获取确认的临床数据配置 - var clinicalDataConfirmList = _trialClinicalDataSetRepository.Where(t => t.TrialId == trialId && t.IsConfirm).ToList(); + var clinicalDataConfirmList = _trialClinicalDataSetRepository.Where(t => t.TrialId == trialId && t.IsConfirm).Include(t => t.TrialClinicalDataSetCriteriaList).ToList(); var dbMaxCode = _visitTaskRepository.Where(t => t.TrialId == trialId).Select(t => t.Code).DefaultIfEmpty().Max(); @@ -443,8 +443,8 @@ namespace IRaCIS.Core.Application.Service var blindTaskName = string.Empty; - var isNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList); - var isClinicalDataSign = IsClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList, subjectVisit.Id, trialId); + var isNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.TrialReadingCriterionId, clinicalDataConfirmList); + var isClinicalDataSign = IsClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.TrialReadingCriterionId, clinicalDataConfirmList, subjectVisit.Id, trialId); if (visitNumList.IndexOf(subjectVisit.VisitNum) == 0) @@ -1229,7 +1229,7 @@ namespace IRaCIS.Core.Application.Service var originalTaskInfo = await _visitTaskRepository.Where(x => x.Id == generateTaskCommand.OriginalVisitId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync(); - var criterionType = await _trialReadingCriterionRepository.Where(t => t.Id == originalTaskInfo.TrialReadingCriterionId).Select(t => t.CriterionType).FirstOrDefaultAsync(); + //var criterionType = await _trialReadingCriterionRepository.Where(t => t.Id == originalTaskInfo.TrialReadingCriterionId).Select(t => t.CriterionType).FirstOrDefaultAsync(); // 需要添加全局任务再添加 if (originalTaskInfo.TrialReadingCriterion.IsGlobalReading) @@ -1258,8 +1258,8 @@ namespace IRaCIS.Core.Application.Service ReadingCategory = item.ReadingCategory, TrialReadingCriterionId = originalTaskInfo.TrialReadingCriterionId, - IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Global, false, criterionType, clinicalDataConfirmList), - IsClinicalDataSign = IsClinicalDataSign(ReadingCategory.Global, false, criterionType, clinicalDataConfirmList, item.ReadModuleId, trialId) + IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Global, false, originalTaskInfo.TrialReadingCriterionId, clinicalDataConfirmList), + IsClinicalDataSign = IsClinicalDataSign(ReadingCategory.Global, false, originalTaskInfo.TrialReadingCriterionId, clinicalDataConfirmList, item.ReadModuleId, trialId) }); currentMaxCodeInt = currentMaxCodeInt + 1; @@ -1273,7 +1273,7 @@ namespace IRaCIS.Core.Application.Service originalTaskInfo = await _visitTaskRepository.Where(x => x.Id == generateTaskCommand.OriginalVisitId).FirstNotNullAsync(); - criterionType = await _trialReadingCriterionRepository.Where(t => t.Id == originalTaskInfo.TrialReadingCriterionId).Select(t => t.CriterionType).FirstOrDefaultAsync(); + //criterionType = await _trialReadingCriterionRepository.Where(t => t.Id == originalTaskInfo.TrialReadingCriterionId).Select(t => t.CriterionType).FirstOrDefaultAsync(); foreach (var item in generateTaskCommand.ReadingGenerataTaskList) { @@ -1306,8 +1306,8 @@ namespace IRaCIS.Core.Application.Service TrialReadingCriterionId = originalTaskInfo.TrialReadingCriterionId, - IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Oncology, false, criterionType, clinicalDataConfirmList), - IsClinicalDataSign = IsClinicalDataSign(ReadingCategory.Oncology, false, criterionType, clinicalDataConfirmList, item.ReadModuleId, trialId) + IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Oncology, false, originalTaskInfo.TrialReadingCriterionId, clinicalDataConfirmList), + IsClinicalDataSign = IsClinicalDataSign(ReadingCategory.Oncology, false, originalTaskInfo.TrialReadingCriterionId, clinicalDataConfirmList, item.ReadModuleId, trialId) }); diff --git a/IRaCIS.Core.Application/Service/Management/UserTypeService.cs b/IRaCIS.Core.Application/Service/Management/UserTypeService.cs index 2b99cd9be..8bc59d51e 100644 --- a/IRaCIS.Core.Application/Service/Management/UserTypeService.cs +++ b/IRaCIS.Core.Application/Service/Management/UserTypeService.cs @@ -125,7 +125,7 @@ namespace IRaCIS.Core.Application.Contracts if (userTypeSelectEnum == UserTypeSelectEnum.EnrollOrPD_EMailCopy) { - userTypeEnums = new List() { UserTypeEnum.CPM, UserTypeEnum.SPM, UserTypeEnum.SMM, UserTypeEnum.CMM }; + userTypeEnums = new List() { UserTypeEnum.ProjectManager, UserTypeEnum.APM, UserTypeEnum.CPM, UserTypeEnum.SPM, UserTypeEnum.SMM, UserTypeEnum.CMM }; } diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs index fd1ea5c6f..9b2dd9dff 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs @@ -1,6 +1,7 @@ using Microsoft.AspNetCore.Mvc; using IRaCIS.Core.Application.Service.Reading.Dto; using MassTransit; +using IRaCIS.Core.Domain.Models; namespace IRaCIS.Application.Services { @@ -130,22 +131,22 @@ namespace IRaCIS.Application.Services return ResponseOutput.NotOk("存在同类型的临床数据,操作失败"); } - indto.CriterionEnumListStr = $"|{String.Join('|', indto.CriterionEnumList)}|"; + //indto.CriterionEnumListStr = $"|{String.Join('|', indto.CriterionEnumList)}|"; var entity = await _clinicalDataTrialSetRepository.InsertOrUpdateAsync(indto, true); - //entity.TrialClinicalDataCriterionList = indto.TrialCriterionIdList.Select(t => new TrialClinicalDataCriterion() - //{ - // TrialClinicalDataSetId = entity.Id, - // TrialReadingCriterionId = t - //}).ToList(); + entity.TrialClinicalDataSetCriteriaList = indto.TrialCriterionIdList.Select(t => new TrialClinicalDataSetCriterion() + { + TrialClinicalDataSetId = entity.Id, + TrialReadingCriterionId = t + }).ToList(); - //if (indto.Id != null) - //{ - // await _trialClinicalDataCriterionRepository.BatchDeleteNoTrackingAsync(t => t.TrialClinicalDataSetId == entity.Id); + if (indto.Id != null) + { + await _repository.BatchDeleteAsync(t => t.TrialClinicalDataSetId == entity.Id); - // await _trialClinicalDataCriterionRepository.AddRangeAsync(entity.TrialClinicalDataCriterionList); - //} + await _repository.AddRangeAsync(entity.TrialClinicalDataSetCriteriaList); + } @@ -248,10 +249,10 @@ namespace IRaCIS.Application.Services #region MyRegion - + //不存在的时候,就将系统数据同步到项目临床数据配置 if (!await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == trialId && x.SystemClinicalDataSetId != null)) { - var systemClinicalDataList = await _clinicalDataSystemSetRepository.AsQueryable()/*.Include(t => t.SystemClinicalDataCriterionList)*/.ToListAsync(); + var systemClinicalDataList = await _clinicalDataSystemSetRepository.AsQueryable().ToListAsync(); var systemIds = systemClinicalDataList.Select(x => x.Id).ToList(); var trialSystemClinicalDataSetIds = await _clinicalDataTrialSetRepository.Where(x => x.TrialId == trialId && x.SystemClinicalDataSetId != null).Select(x => x.SystemClinicalDataSetId.Value).ToListAsync(); @@ -261,7 +262,7 @@ namespace IRaCIS.Application.Services var systemDataList = systemClinicalDataList.Where(x => needAddids.Contains(x.Id)).ToList(); var readingCriterionList = _repository.Where(t => t.TrialId == trialId).Where(t => t.ReadingQuestionCriterionSystemId != null) - .Select(t => new { t.ReadingQuestionCriterionSystemId, TrialReadingCriterionId = t.Id }).ToList(); + .Select(t => new { t.ReadingQuestionCriterionSystemId, TrialReadingCriterionId = t.Id ,t.CriterionType}).ToList(); List dataSets = systemDataList.Select(x => new ClinicalDataTrialSet() @@ -276,10 +277,11 @@ namespace IRaCIS.Application.Services Path = x.Path, TrialId = trialId, - CriterionEnumListStr=x.CriterionEnumListStr + //项目不采用 标准枚举字符串的方式 + //CriterionEnumListStr=x.CriterionEnumListStr - //TrialClinicalDataCriterionList = readingCriterionList.Where(t => x.SystemClinicalDataCriterionList.Select(c => (Guid?)c.SystemReadingCriterionId).ToList().Contains(t.ReadingQuestionCriterionSystemId)).Select(c => - //new TrialClinicalDataCriterion() { TrialReadingCriterionId = c.TrialReadingCriterionId }).ToList() + TrialClinicalDataSetCriteriaList = readingCriterionList.Where(t => x.CriterionEnumList.Contains( (int )t.CriterionType)).Select(c => + new TrialClinicalDataSetCriterion() { TrialReadingCriterionId = c.TrialReadingCriterionId }).ToList() }).ToList(); diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index 4cb21d06d..cff273466 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -669,14 +669,14 @@ namespace IRaCIS.Application.Services public async Task> GetReadingClinicalList(GetReadingClinicalDataListIndto inDto) { - var criterionType = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == inDto.TrialReadingCriterionId).Select(x => x.CriterionType).FirstNotNullAsync(); + //var criterionType = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == inDto.TrialReadingCriterionId).Select(x => x.CriterionType).FirstNotNullAsync(); var resultQuery = _readingClinicalDataRepository.Where(x => x.SubjectId == inDto.SubjectId) .Where(x => x.ReadingId == inDto.ReadingId || (x.SubjectId == inDto.SubjectId && x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Subject)) //.WhereIf(inDto.UploadRole == UploadRole.CRC, x => x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC) - .Where(x => x.ClinicalDataTrialSet.CriterionEnumListStr.Contains($"|{((int)criterionType).ToString()}|")) + .Where(x => x.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList.Any(t=>t.TrialReadingCriterionId==inDto.TrialReadingCriterionId)) .Select(x => new GetReadingClinicalDataListOutDto() { ClinicalDataLevel = x.ClinicalDataTrialSet.ClinicalDataLevel, diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalDataServiceViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalDataServiceViewModel.cs index f76254b8e..db77c367c 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalDataServiceViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalDataServiceViewModel.cs @@ -61,11 +61,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public string Path { get; set; } - //public List TrialCriterionIdList { get; set; } + public List TrialCriterionIdList { get; set; } - public string CriterionEnumListStr { get; set; } = String.Empty; + //public string CriterionEnumListStr { get; set; } = String.Empty; - public List CriterionEnumList { get; set; } + //public List CriterionEnumList { get; set; } } public class ClinicalDataSystemSetAddOrEdit @@ -129,8 +129,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public class ClinicalDataTrialSetView: ClinicalDataTrialSetAddOrEdit { - //public List TrialCriterionNameList { get; set; } - + public List TrialCriterionNameList { get; set; } + /// /// 创建时间 diff --git a/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs b/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs index f3e1a3ce0..97c585036 100644 --- a/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs @@ -57,8 +57,8 @@ namespace IRaCIS.Core.Application.Service CreateMap().ReverseMap(); CreateMap() - //.ForMember(t => t.TrialCriterionNameList, u => u.MapFrom(c => c.TrialClinicalDataCriterionList.Select(t => t.TrialReadingCriterion.CriterionName))) - //.ForMember(t => t.TrialCriterionIdList, u => u.MapFrom(c => c.TrialClinicalDataCriterionList.Select(t => t.TrialReadingCriterion.Id))) + .ForMember(t => t.TrialCriterionNameList, u => u.MapFrom(c => c.TrialClinicalDataSetCriteriaList.Select(t => t.TrialReadingCriterion.CriterionName))) + .ForMember(t => t.TrialCriterionIdList, u => u.MapFrom(c => c.TrialClinicalDataSetCriteriaList.Select(t => t.TrialReadingCriterion.Id))) .ForMember(d => d.IsUsed, u => u.MapFrom(s => s.ReadingClinicalDataList.Count()>0)); CreateMap(); diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs index 0e4df4a07..02ba57fe7 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs @@ -117,10 +117,10 @@ namespace IRaCIS.Application.Services //之前已经选择的用户 不放在列表中,现在又要改回去 废弃 var query = _repository.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)) diff --git a/IRaCIS.Core.Application/TestService.cs b/IRaCIS.Core.Application/TestService.cs index 3cda7135e..131a6b663 100644 --- a/IRaCIS.Core.Application/TestService.cs +++ b/IRaCIS.Core.Application/TestService.cs @@ -117,9 +117,9 @@ namespace IRaCIS.Application.Services //await _visitTaskRepositoryy.UpdatePartialFromQueryAsync( Guid.Parse("78360000-3E2C-0016-9B53-08DA6A002040"), c => new VisitTask() { UpdateTime = DateTime.Now.AddMinutes(1) }); - var a= _userInfo.IsTestUser; + var a = _userInfo.IsTestUser; - var list1 = await _repository.Where().Select(t => t.TranslateValue(t.Value, t.ValueCN,true)).ToListAsync(); + var list1 = await _repository.Where().Select(t => t.TranslateValue(t.Value, t.ValueCN, true)).ToListAsync(); var list2 = await _repository.Where().Select(t => t.TranslateValue(t.Value, t.ValueCN, false)).ToListAsync(); await _repository.SaveChangesAsync(); @@ -146,7 +146,7 @@ namespace IRaCIS.Application.Services } [AllowAnonymous] - public async Task GetEnvironmentName( [FromServices] IWebHostEnvironment env) + public async Task GetEnvironmentName([FromServices] IWebHostEnvironment env) { @@ -241,7 +241,45 @@ namespace IRaCIS.Application.Services public string PostData(TestModel testModelList) { - return String.Empty ; + return String.Empty; + } + + /// + /// 维护临床数据 --一定要在同步表前同步数据才行 + /// + /// + + public async Task ModifyClinicalDataTable() + { + var needAddList = _repository.Where(t => t.CriterionEnumListStr != String.Empty && t.TrialClinicalDataSetCriteriaList.Count() == 0).ToList(); + + + //遍历项目 + foreach (var needAddTrialGroup in needAddList.GroupBy(t => t.TrialId)) + { + //找到项目存在的项目标准 + + var trialCritrialList = _repository.Where(t => t.TrialId == needAddTrialGroup.Key).ToList(); + + //遍历项目下的临床数据 + foreach (var needAddTrial in needAddTrialGroup) + { + + //遍历每条临床数据配置的标准 + + foreach (var item in needAddTrial.CriterionEnumList) + { + var find = trialCritrialList.Where(t => (int)t.CriterionType == item).FirstOrDefault(); + + if (find != null) + { + await _repository.AddAsync(new TrialClinicalDataSetCriterion() { TrialClinicalDataSetId = needAddTrial.Id, TrialReadingCriterionId = find.Id }); + } + } + } + } + await _repository.SaveChangesAsync(); + return ResponseOutput.Ok(); } } diff --git a/IRaCIS.Core.Domain/Reading/ClinicalData/ClinicalDataTrialSet.cs b/IRaCIS.Core.Domain/Reading/ClinicalData/ClinicalDataTrialSet.cs index f288d0aa4..d1e8209e1 100644 --- a/IRaCIS.Core.Domain/Reading/ClinicalData/ClinicalDataTrialSet.cs +++ b/IRaCIS.Core.Domain/Reading/ClinicalData/ClinicalDataTrialSet.cs @@ -9,90 +9,95 @@ using System.Linq; namespace IRaCIS.Core.Domain.Models { - /// - /// 临床资料项目配置 - /// - [Table("ClinicalDataTrialSet")] - public class ClinicalDataTrialSet : Entity, IAuditAdd - { + /// + /// 临床资料项目配置 + /// + [Table("ClinicalDataTrialSet")] + public class ClinicalDataTrialSet : Entity, IAuditAdd + { - /// - /// 项目ID - /// - public Guid TrialId { get; set; } + /// + /// 项目ID + /// + public Guid TrialId { get; set; } - /// - /// 名称 - /// - public string ClinicalDataSetName { get; set; } + /// + /// 名称 + /// + public string ClinicalDataSetName { get; set; } - /// - /// 临床级别 - /// - public ClinicalLevel ClinicalDataLevel { get; set; } + /// + /// 临床级别 + /// + public ClinicalLevel ClinicalDataLevel { get; set; } - /// - /// 上传方式 - /// - public ClinicalUploadType ClinicalUploadType { get; set; } + /// + /// 上传方式 + /// + public ClinicalUploadType ClinicalUploadType { get; set; } - /// - /// 系统的ClinicalDataSetId - /// - public Guid? SystemClinicalDataSetId { get; set; } + /// + /// 系统的ClinicalDataSetId + /// + public Guid? SystemClinicalDataSetId { get; set; } - /// - /// 创建时间 - /// - public DateTime CreateTime { get; set; } + /// + /// 创建时间 + /// + public DateTime CreateTime { get; set; } - /// - /// 创建人 - /// - public Guid CreateUserId { get; set; } + /// + /// 创建人 + /// + public Guid CreateUserId { get; set; } - /// - /// 是否确认 - /// - public bool IsConfirm { get; set; } + /// + /// 是否确认 + /// + public bool IsConfirm { get; set; } - /// - /// 上传角色 - /// - public UploadRole UploadRole { get; set; } + /// + /// 上传角色 + /// + public UploadRole UploadRole { get; set; } - /// - /// 模板文件名称 - /// - public string FileName { get; set; } + /// + /// 模板文件名称 + /// + public string FileName { get; set; } - /// - /// 文件路径 - /// - public string Path { get; set; } + /// + /// 文件路径 + /// + public string Path { get; set; } [JsonIgnore] - /// - /// - /// - public List ReadingClinicalDataList { get; set; } + /// + /// + /// + public List ReadingClinicalDataList { get; set; } [JsonIgnore] - [ForeignKey("TrialId")] - public Trial Trial { get; set; } + [ForeignKey("TrialId")] + public Trial Trial { get; set; } - public string CriterionEnumListStr { get; set; } = String.Empty; - public List CriterionEnumList => CriterionEnumListStr.Split('|', StringSplitOptions.RemoveEmptyEntries).Where(t => !string.IsNullOrEmpty(t) && int.TryParse(t.Trim(), out var s)).Select(t => int.Parse(t.Trim())).ToList(); - - } + [JsonIgnore] + public List TrialClinicalDataSetCriteriaList { get; set; } + + + public string CriterionEnumListStr { get; set; } = String.Empty; + + public List CriterionEnumList => CriterionEnumListStr.Split('|', StringSplitOptions.RemoveEmptyEntries).Where(t => !string.IsNullOrEmpty(t) && int.TryParse(t.Trim(), out var s)).Select(t => int.Parse(t.Trim())).ToList(); + + } + - diff --git a/IRaCIS.Core.Domain/Reading/ClinicalData/TrialClinicalDataSetCriterion.cs b/IRaCIS.Core.Domain/Reading/ClinicalData/TrialClinicalDataSetCriterion.cs new file mode 100644 index 000000000..0ee1571a9 --- /dev/null +++ b/IRaCIS.Core.Domain/Reading/ClinicalData/TrialClinicalDataSetCriterion.cs @@ -0,0 +1,64 @@ + +//-------------------------------------------------------------------- +// 此代码由T4模板自动生成 byzhouhang 20210918 +// 生成时间 2023-01-29 13:40:06 +// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 +using System; +using IRaCIS.Core.Domain.Share; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +namespace IRaCIS.Core.Domain.Models +{ + /// + ///TrialClinicalDataSetCriterion + /// + [Table("TrialClinicalDataSetCriterion")] + public class TrialClinicalDataSetCriterion : Entity, IAuditUpdate, IAuditAdd + { + + /// + /// TrialClinicalDataSetId + /// + [Required] + public Guid TrialClinicalDataSetId { get; set; } + + /// + /// TrialReadingCriterionId + /// + [Required] + public Guid TrialReadingCriterionId { get; set; } + + /// + /// CreateUserId + /// + [Required] + public Guid CreateUserId { get; set; } + + /// + /// CreateTime + /// + [Required] + public DateTime CreateTime { get; set; } + + /// + /// UpdateTime + /// + [Required] + public DateTime UpdateTime { get; set; } + + /// + /// UpdateUserId + /// + [Required] + public Guid UpdateUserId { get; set; } + + + [ForeignKey("TrialClinicalDataSetId")] + public ClinicalDataTrialSet TrialClinicalDataSet { get; set; } + + [ForeignKey("TrialReadingCriterionId")] + public ReadingQuestionCriterionTrial TrialReadingCriterion { get; set; } + + } + +} diff --git a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs index 62db6efb0..94bc03773 100644 --- a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs +++ b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs @@ -261,6 +261,9 @@ namespace IRaCIS.Core.Infra.EFCore public virtual DbSet TumorAssessment { get; set; } + public virtual DbSet TrialClinicalDataSetCriterion { get; set; } + + //public virtual DbSet TrialClinicalDataCriterion { get; set; } //public virtual DbSet SystemClinicalDataCriterion { get; set; } diff --git a/IRaCIS.Core.Test/DbHelper.ttinclude b/IRaCIS.Core.Test/DbHelper.ttinclude index 248bd742b..94175bd75 100644 --- a/IRaCIS.Core.Test/DbHelper.ttinclude +++ b/IRaCIS.Core.Test/DbHelper.ttinclude @@ -4,7 +4,7 @@ public static readonly string ConnectionString = "Server=123.56.94.154,1433\\MSSQLSERVER;Database=IRaCIS_New_Tet;User ID=sa;Password=dev123456DEV;TrustServerCertificate=true"; public static readonly string DbDatabase = "IRaCIS_New_Tet"; //ַ,ƴ - public static readonly string TableName = "DoctorCriterionFile"; + public static readonly string TableName = "TrialClinicalDataSetCriterion"; //ļ service Ƿҳ } #>