From 03c07cf969c780f2a2cccdaf929cabbf20ff3639 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Mon, 10 Jul 2023 09:14:33 +0800 Subject: [PATCH 01/33] S-35 --- .../ClinicalData/ReadingClinicalDataService.cs | 13 ++++++++----- .../Service/Reading/Dto/ReadingClinicalDataDto.cs | 9 +++++++-- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index 3a4bc14ae..bcfedcfd5 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -658,13 +658,13 @@ namespace IRaCIS.Application.Services ClinicalDataLevel = x.ClinicalDataTrialSet.ClinicalDataLevel, SubjectId = x.SubjectId, ReadingId = x.ReadingId, - ClinicalDataSetEnName=x.ClinicalDataTrialSet.ClinicalDataSetEnName, + ClinicalDataSetEnName = x.ClinicalDataTrialSet.ClinicalDataSetEnName, ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName.LanguageName(x.ClinicalDataTrialSet.ClinicalDataSetEnName, _userInfo.IsEn_Us), ClinicalDataTrialSetId = x.ClinicalDataTrialSetId, IsSign = x.IsSign, ClinicalUploadType = x.ClinicalDataTrialSet.ClinicalUploadType, CriterionEnumList = x.ClinicalDataTrialSet.CriterionEnumList, - TrialClinicalDataSetCriteriaList=x.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList, + TrialClinicalDataSetCriteriaList = x.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList, Id = x.Id, UploadRole = x.ClinicalDataTrialSet.UploadRole, IsCRCUpload = x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC, @@ -677,9 +677,12 @@ namespace IRaCIS.Application.Services }).ToList() }); - - - var result = await resultQuery.ToListAsync(); + var result = new List(); + if (!inDto.IsOnlyGetCRCReadModule) + { + result = await resultQuery.ToListAsync(); + } + diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs index 9cf83bbc3..fa2660ab5 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs @@ -187,9 +187,14 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public Guid? ReadingClinicalDataId { get; set; } /// - /// 只查询已经签名的临床数据 + /// 只获取CRC上传的阅片模块结构化录入 /// - public bool SelectIsSign { get; set; } = true; + public bool IsOnlyGetCRCReadModule { get; set; } = false; + + /// + /// 只查询已经签名的临床数据 + /// + public bool SelectIsSign { get; set; } = true; } /// From 65da0b877b0345e2642b887192165ff846f70a78 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Mon, 10 Jul 2023 14:46:23 +0800 Subject: [PATCH 02/33] S-36 --- .../ReadingClinicalDataService.cs | 7 ++++- .../Reading/Dto/ReadingClinicalDataDto.cs | 6 +++-- .../ClinicalData/ReadingClinicalData.cs | 8 +++++- .../ClinicalQuestionAnswer/ClinicalForm.cs | 6 ++++- .../ClinicalFromConfigration.cs | 27 +++++++++++++++++++ 5 files changed, 49 insertions(+), 5 deletions(-) create mode 100644 IRaCIS.Core.Infra.EFCore/EntityConfigration/ClinicalFromConfigration.cs diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index bcfedcfd5..28ec4830b 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -203,13 +203,18 @@ namespace IRaCIS.Application.Services Path = x.ClinicalDataTrialSet.Path, IsBlind = x.IsBlind, IsComplete = x.IsComplete, + ClinicalFromList=x.ClinicalFormList.Select(y=> new ClinicalFromData() { + CheckDate=y.CheckDate, + ClinicalFormId=y.Id + }).ToList(), PDFFileList = x.ReadingClinicalDataPDFList.Select(y => new GetFileDto() { Id = y.Id, FileName = y.FileName, Path = y.Path, CreateTime = y.CreateTime, - }).ToList() + }).ToList(), + }).ToListAsync(); List clinicalData = (await this.GetReadingClinicalDataList(new GetReadingClinicalDataListIndto() diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs index fa2660ab5..a03e15f41 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs @@ -113,9 +113,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// public bool? IsComplete { get; set; } - //public List ReadingClinicalDataList { get; set; } + public List ClinicalFromList { get; set; } - public List PDFFileList { get; set; } = new List(); + //public List ReadingClinicalDataList { get; set; } + + public List PDFFileList { get; set; } = new List(); public ClinicalDataTable ClinicalTableData { get; set; } } diff --git a/IRaCIS.Core.Domain/Reading/ClinicalData/ReadingClinicalData.cs b/IRaCIS.Core.Domain/Reading/ClinicalData/ReadingClinicalData.cs index db9e8f70a..ce3380c9b 100644 --- a/IRaCIS.Core.Domain/Reading/ClinicalData/ReadingClinicalData.cs +++ b/IRaCIS.Core.Domain/Reading/ClinicalData/ReadingClinicalData.cs @@ -96,8 +96,14 @@ namespace IRaCIS.Core.Domain.Models [JsonIgnore] public List ReadingClinicalDataPDFList { get; set; } + /// + /// 临床数据表单 + /// + [JsonIgnore] + public List ClinicalFormList { get; set; } - } + + } diff --git a/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalForm.cs b/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalForm.cs index 1d052b9f9..294097af3 100644 --- a/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalForm.cs +++ b/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalForm.cs @@ -54,6 +54,10 @@ namespace IRaCIS.Core.Domain.Models [ForeignKey("ClinicalDataTrialSetId")] public ClinicalDataTrialSet ClinicalDataTrialSet { get; set; } - } + [JsonIgnore] + + public ReadingClinicalData ReadingClinicalData { get; set; } + + } } diff --git a/IRaCIS.Core.Infra.EFCore/EntityConfigration/ClinicalFromConfigration.cs b/IRaCIS.Core.Infra.EFCore/EntityConfigration/ClinicalFromConfigration.cs new file mode 100644 index 000000000..e8c5b5d15 --- /dev/null +++ b/IRaCIS.Core.Infra.EFCore/EntityConfigration/ClinicalFromConfigration.cs @@ -0,0 +1,27 @@ +using IRaCIS.Core.Domain.Models; +using Microsoft.EntityFrameworkCore.Metadata.Builders; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace IRaCIS.Core.Infra.EFCore.EntityConfigration +{ + public class ClinicalFromConfigration : IEntityTypeConfiguration + { + + + public void Configure(EntityTypeBuilder builder) + { + builder + .HasOne(s => s.ReadingClinicalData) + .WithMany(c => c.ClinicalFormList) + .HasForeignKey(s => new { s.SubjectId, s.ReadingId }) + .HasPrincipalKey(c => new { c.Subject, c.ReadingId }); + } + + + } +} From 581f7fcbf3ff07a941070263128c14ad7767d9c2 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Mon, 10 Jul 2023 14:52:40 +0800 Subject: [PATCH 03/33] S-37 --- .../IRaCIS.Core.Application.xml | 15 +++++++++++++++ .../ClinicalFromConfigration.cs | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 36cf82d1c..002ee0182 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -3886,6 +3886,11 @@ 路径 + + + 只获取CRC上传的阅片模块结构化录入 + + 只查询已经签名的临床数据 @@ -4031,6 +4036,16 @@ 文件数量 + + + 表单Id + + + + + 检查日期 + + Id diff --git a/IRaCIS.Core.Infra.EFCore/EntityConfigration/ClinicalFromConfigration.cs b/IRaCIS.Core.Infra.EFCore/EntityConfigration/ClinicalFromConfigration.cs index e8c5b5d15..cd87fd662 100644 --- a/IRaCIS.Core.Infra.EFCore/EntityConfigration/ClinicalFromConfigration.cs +++ b/IRaCIS.Core.Infra.EFCore/EntityConfigration/ClinicalFromConfigration.cs @@ -19,7 +19,7 @@ namespace IRaCIS.Core.Infra.EFCore.EntityConfigration .HasOne(s => s.ReadingClinicalData) .WithMany(c => c.ClinicalFormList) .HasForeignKey(s => new { s.SubjectId, s.ReadingId }) - .HasPrincipalKey(c => new { c.Subject, c.ReadingId }); + .HasPrincipalKey(c => new { c.SubjectId, c.ReadingId }); } From 52e71661777faae29709dafd30a656b10fd8a5c4 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Mon, 10 Jul 2023 16:50:46 +0800 Subject: [PATCH 04/33] S-38 --- .../ReadingClinicalDataService.cs | 48 ++++++++----------- .../Reading/Dto/ReadingClinicalDataDto.cs | 9 ++-- 2 files changed, 26 insertions(+), 31 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index 28ec4830b..b0d80ad4d 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -181,12 +181,6 @@ namespace IRaCIS.Application.Services [HttpPost] public async Task> GetCRCClinicalData(GetCRCClinicalDataInDto inDto) { - //if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator) - //{ - // await this.AddCRCClinicalData(inDto); - //} - - List cRCClinicalDataList = await _readingClinicalDataRepository.Where(x => x.ReadingId == inDto.SubjectVisitId) .WhereIf(inDto.IsBaseline, x => x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Subject || x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit) .WhereIf(!inDto.IsBaseline, x => x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit) @@ -217,20 +211,12 @@ namespace IRaCIS.Application.Services }).ToListAsync(); - List clinicalData = (await this.GetReadingClinicalDataList(new GetReadingClinicalDataListIndto() - { - SubjectId = inDto.SubjectId, - ReadingId = inDto.SubjectVisitId, - TrialId = inDto.TrialId, - })).Item1; - var previousHistoryList = await _previousHistoryRepository.Where(x => x.SubjectVisitId == inDto.SubjectVisitId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); var previousOtherList = await _previousOtherRepository.Where(x => x.SubjectVisitId == inDto.SubjectVisitId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); var previousSurgeryList = await _previousSurgeryRepository.Where(x => x.SubjectVisitId == inDto.SubjectVisitId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); foreach (var item in cRCClinicalDataList) { - //item.PDFFileList = clinicalData.Where(y => y.ClinicalDataTrialSetId == item.ClinicalDataTrialSetId).SelectMany(x => x.FileList).ToList(); item.ClinicalTableData = new ClinicalDataTable() { PreviousHistoryList = previousHistoryList.Where(x => x.ClinicalDataTrialSetId == item.ClinicalDataTrialSetId).ToList(), @@ -613,10 +599,6 @@ namespace IRaCIS.Application.Services var clinicalDataList = await this.GetTrialClinicalDataSelect(getTrialClinicalDataSelectIndto); - if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC) - { - inDto.UploadRole = UploadRole.CRC; - } var isBaseLine = await _subjectVisitRepository.AnyAsync(x => x.Id == inDto.ReadingId && x.IsBaseLine); @@ -793,14 +775,8 @@ namespace IRaCIS.Application.Services [NonDynamicMethod] public async Task> GetReadingClinicalList(GetReadingClinicalDataListIndto inDto) { - - //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.ReadingId == inDto.ReadingId) .Where(x => x.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList.Any(t=>t.TrialReadingCriterionId==inDto.TrialReadingCriterionId)) .Select(x => new GetReadingClinicalDataListOutDto() { @@ -889,16 +865,32 @@ namespace IRaCIS.Application.Services }).ToList(); - x.ReadingClinicalDataState = readModule.IsPMConfirm ? ReadingClinicalDataStatus.HaveSigned : ReadingClinicalDataStatus.HaveChecked; + x.IsSign = readModule.IsPMConfirm ?true : false; + x.ReadingClinicalDataState = readModule.IsPMConfirm ? ReadingClinicalDataStatus.HaveSigned : ReadingClinicalDataStatus.HaveChecked; }); result.AddRange(clinicalresult); } - - //result = result.Where(x => !(x.UploadRole == UploadRole.CRC && x.ClinicalUploadType == ClinicalUploadType.PDF && x.FileList.Count() == 0)).ToList(); + if (inDto.GetClinicalType != null) + { + switch (inDto.GetClinicalType) + { + case 1: + result = result.Where(x => x.UploadRole == UploadRole.PM).ToList(); + break; + case 2: + result = result.Where(x => x.UploadRole == UploadRole.CRC).ToList(); + break; + case 3: + result = result.Where(x => x.IsSign).ToList(); + break; + } + } + + return result; } diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs index a03e15f41..557a9af8c 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs @@ -208,10 +208,13 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public Guid SubjectId { get; set; } [NotDefault] public Guid ReadingId { get; set; } + + /// + /// 1 PM上传的所有的 2CRC上传的所有已确认的 3 所有已经签名的 + /// + public int? GetClinicalType { get; set; } - public UploadRole? UploadRole { get; set; } - - [NotDefault] + [NotDefault] public Guid TrialReadingCriterionId { get; set; } public Guid TrialId { get; set; } From a4819c40167fbe0248e3c8fcc3d20ba791d66d19 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Tue, 11 Jul 2023 10:10:07 +0800 Subject: [PATCH 05/33] S-39 --- .../ReadingClinicalDataService.cs | 59 ++++++++++++------- .../Reading/Dto/ReadingClinicalDataDto.cs | 9 ++- .../ReadingImageTaskService.cs | 1 + IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs | 22 +++++++ 4 files changed, 68 insertions(+), 23 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index b0d80ad4d..900d57eff 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -730,8 +730,8 @@ namespace IRaCIS.Application.Services ClinicalFormId = x.ClinicalFormId }).ToList(); - - x.ReadingClinicalDataState = readModule.IsPMConfirm ? ReadingClinicalDataStatus.HaveSigned : ReadingClinicalDataStatus.HaveChecked; + x.IsSign = readModule.IsPMConfirm ? true : false; + x.ReadingClinicalDataState = readModule.IsPMConfirm ? ReadingClinicalDataStatus.HaveSigned : ReadingClinicalDataStatus.HaveChecked; }); @@ -740,30 +740,47 @@ namespace IRaCIS.Application.Services - // 根据标准 - if (inDto.VisitTaskId != null) + // 根据标准 + if (inDto.VisitTaskId != null) { var visitTaskInfo = await _visitTaskRepository.FirstOrDefaultAsync(x => x.Id == inDto.VisitTaskId); - - result = result.Where(x => x.TrialClinicalDataSetCriteriaList.Any(z=>z.TrialReadingCriterionId==visitTaskInfo.TrialReadingCriterionId)).ToList(); + + result = result.Where(x => x.TrialClinicalDataSetCriteriaList.Any(z => z.TrialReadingCriterionId == visitTaskInfo.TrialReadingCriterionId)).ToList(); } - result = result.Where(x => !(x.ClinicalUploadType == ClinicalUploadType.PDF && x.FileList.Count() == 0)).ToList(); - // 需要排除表格为空的数据 - - - var readingIds = result.Select(x => x.ReadingId).ToList(); - - var tablecount = (await _previousHistoryRepository.Where(x => readingIds.Contains(x.SubjectVisitId)).CountAsync()) + - (await _previousOtherRepository.Where(x => readingIds.Contains(x.SubjectVisitId)).CountAsync()) + - (await _previousSurgeryRepository.Where(x => readingIds.Contains(x.SubjectVisitId)).CountAsync()); - - if (tablecount == 0) + if (inDto.GetClinicalType != null) { - result = result.Where(x => x.ClinicalUploadType != ClinicalUploadType.Table).ToList(); + switch (inDto.GetClinicalType) + { + case GetClinicalType.PMUpload: + result = result.Where(x => x.UploadRole == UploadRole.PM).ToList(); + break; + case GetClinicalType.CRCConfirm: + result = result.Where(x => x.UploadRole == UploadRole.CRC).ToList(); + break; + case GetClinicalType.HasSign: + result = result.Where(x => x.IsSign).ToList(); + break; + } } + + //result = result.Where(x => !(x.ClinicalUploadType == ClinicalUploadType.PDF && x.FileList.Count() == 0)).ToList(); + //// 需要排除表格为空的数据 + + + //var readingIds = result.Select(x => x.ReadingId).ToList(); + + //var tablecount = (await _previousHistoryRepository.Where(x => readingIds.Contains(x.SubjectVisitId)).CountAsync()) + + // (await _previousOtherRepository.Where(x => readingIds.Contains(x.SubjectVisitId)).CountAsync()) + + // (await _previousSurgeryRepository.Where(x => readingIds.Contains(x.SubjectVisitId)).CountAsync()); + + //if (tablecount == 0) + //{ + // result = result.Where(x => x.ClinicalUploadType != ClinicalUploadType.Table).ToList(); + //} + return result; } @@ -878,13 +895,13 @@ namespace IRaCIS.Application.Services { switch (inDto.GetClinicalType) { - case 1: + case GetClinicalType.PMUpload: result = result.Where(x => x.UploadRole == UploadRole.PM).ToList(); break; - case 2: + case GetClinicalType.CRCConfirm: result = result.Where(x => x.UploadRole == UploadRole.CRC).ToList(); break; - case 3: + case GetClinicalType.HasSign: result = result.Where(x => x.IsSign).ToList(); break; } diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs index 557a9af8c..6825d0851 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs @@ -186,7 +186,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public Guid? VisitTaskId { get; set; } - public Guid? ReadingClinicalDataId { get; set; } + /// + /// 1 PM上传的所有的 2CRC上传的所有已确认的 3 所有已经签名的 + /// + public GetClinicalType? GetClinicalType { get; set; } + + public Guid? ReadingClinicalDataId { get; set; } /// /// 只获取CRC上传的阅片模块结构化录入 @@ -212,7 +217,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// /// 1 PM上传的所有的 2CRC上传的所有已确认的 3 所有已经签名的 /// - public int? GetClinicalType { get; set; } + public GetClinicalType? GetClinicalType { get; set; } [NotDefault] public Guid TrialReadingCriterionId { get; set; } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index aa85c41ab..18cfbca90 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -2211,6 +2211,7 @@ namespace IRaCIS.Application.Services SubjectId = taskInfo.SubjectId, TrialId = taskInfo.TrialId, VisitTaskId = taskInfo.Id, + }); var isBaseLine = false; diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs index 243e765b6..573971d63 100644 --- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs +++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs @@ -16,6 +16,28 @@ namespace IRaCIS.Core.Domain.Share public static readonly string Group = "group"; } + /// + /// GetClinicalType + /// + public enum GetClinicalType + { + + /// + /// PM上传 + /// + PMUpload = 1, + + /// + /// CRC 上传 过确认 + /// + CRCConfirm = 2, + + /// + /// 已审核 + /// + HasSign = 3 + } + /// /// 临床表格问题标识 /// From 2c262f27ad91fe5803c399f564c968794ccd1983 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Tue, 11 Jul 2023 11:49:48 +0800 Subject: [PATCH 06/33] S-40 --- .../ClinicalData/ReadingClinicalDataService.cs | 7 ++++++- .../Service/Reading/Dto/ReadingClinicalDataDto.cs | 15 ++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index 900d57eff..05dbab942 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -691,6 +691,7 @@ namespace IRaCIS.Application.Services var setIds = moduleCriterionFromList.Select(x=>x.ClinicalDataTrialSetId).Distinct().ToList(); var clinicalresult = await _clinicalDataTrialSetRepository.Where(x => x.UploadRole == UploadRole.CRC && (x.ClinicalDataLevel == ClinicalLevel.OncologyRead || x.ClinicalDataLevel == ClinicalLevel.ImageRead)) .Where(x => setIds.Contains(x.Id)) + .Select(x => new GetReadingClinicalDataListOutDto() { @@ -794,6 +795,7 @@ namespace IRaCIS.Application.Services { var resultQuery = _readingClinicalDataRepository.Where(x => x.SubjectId == inDto.SubjectId) .Where(x => x.ReadingId == inDto.ReadingId) + .WhereIf(inDto.ClinicalDataTrialSetId!=null, x=>x.ClinicalDataTrialSetId==inDto.TrialReadingCriterionId) .Where(x => x.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList.Any(t=>t.TrialReadingCriterionId==inDto.TrialReadingCriterionId)) .Select(x => new GetReadingClinicalDataListOutDto() { @@ -831,7 +833,10 @@ namespace IRaCIS.Application.Services .FirstOrDefaultAsync(); if (readModule != null) { - var moduleCriterionFromList = await _readModuleCriterionFromRepository.Where(x => x.ReadModuleId == readModule.Id).Select(x => new { + var moduleCriterionFromList = await _readModuleCriterionFromRepository.Where(x => x.ReadModuleId == readModule.Id) + + .WhereIf(inDto.ClinicalDataTrialSetId != null, x => x.ClinicalForm.ClinicalDataTrialSetId == inDto.TrialReadingCriterionId) + .Select(x => new { ClinicalFormId = x.ClinicalFormId, CheckDate = x.ClinicalForm.CheckDate, ClinicalDataTrialSetId = x.ClinicalForm.ClinicalDataTrialSetId diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs index 6825d0851..c20cff244 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs @@ -213,11 +213,16 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public Guid SubjectId { get; set; } [NotDefault] public Guid ReadingId { get; set; } - - /// - /// 1 PM上传的所有的 2CRC上传的所有已确认的 3 所有已经签名的 - /// - public GetClinicalType? GetClinicalType { get; set; } + + /// + /// 临床数据类型Id + /// + public Guid? ClinicalDataTrialSetId { get; set; } + + /// + /// 1 PM上传的所有的 2CRC上传的所有已确认的 3 所有已经签名的 + /// + public GetClinicalType? GetClinicalType { get; set; } [NotDefault] public Guid TrialReadingCriterionId { get; set; } From f0a7af4af1cc9498cddf00c2451f21fdb076fcfa Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Tue, 11 Jul 2023 12:42:43 +0800 Subject: [PATCH 07/33] S-41 --- .../IRaCIS.Core.Application.xml | 15 +++++++++++++++ .../ClinicalData/ReadingClinicalDataService.cs | 5 ++++- .../Service/Reading/Dto/ReadingClinicalDataDto.cs | 7 ++++++- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 002ee0182..14728138f 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -3886,6 +3886,11 @@ 路径 + + + 1 PM上传的所有的 2CRC上传的所有已确认的 3 所有已经签名的 + + 只获取CRC上传的阅片模块结构化录入 @@ -3901,6 +3906,16 @@ 获取访视列表 + + + 临床数据类型Id + + + + + 1 PM上传的所有的 2CRC上传的所有已确认的 3 所有已经签名的 + + 是否是访视 diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index 05dbab942..797dcbd51 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -638,6 +638,7 @@ namespace IRaCIS.Application.Services var resultQuery = _readingClinicalDataRepository.Where(x => x.SubjectId == inDto.SubjectId) .WhereIf(inDto.ReadingClinicalDataId != null, x => x.Id == inDto.ReadingClinicalDataId) + .WhereIf(inDto.ClinicalDataTrialSetId != null, x => x.ClinicalDataTrialSetId == inDto.ClinicalDataTrialSetId) .WhereIf(inDto.SelectIsSign, x => x.IsSign == true) .Where(x => x.ReadingId == inDto.ReadingId || (x.SubjectId == inDto.SubjectId && x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Subject)) .Select(x => new GetReadingClinicalDataListOutDto() @@ -680,7 +681,9 @@ namespace IRaCIS.Application.Services .FirstOrDefaultAsync(); if (readModule != null) { - var moduleCriterionFromList = await _readModuleCriterionFromRepository.Where(x => x.ReadModuleId == readModule.Id).Select(x => new{ + var moduleCriterionFromList = await _readModuleCriterionFromRepository + .WhereIf(inDto.ClinicalDataTrialSetId != null, x => x.ClinicalForm.ClinicalDataTrialSetId == inDto.ClinicalDataTrialSetId) + .Where(x => x.ReadModuleId == readModule.Id).Select(x => new{ ClinicalFormId= x.ClinicalFormId, CheckDate= x.ClinicalForm.CheckDate, ClinicalDataTrialSetId= x.ClinicalForm.ClinicalDataTrialSetId diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs index c20cff244..d4f8761d6 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs @@ -184,7 +184,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public Guid? ReadingId { get; set; } - public Guid? VisitTaskId { get; set; } + /// + /// 临床数据类型Id + /// + public Guid? ClinicalDataTrialSetId { get; set; } + + public Guid? VisitTaskId { get; set; } /// /// 1 PM上传的所有的 2CRC上传的所有已确认的 3 所有已经签名的 From 8e9b9c54fde7bdd22986cedcc0a4f5bc05832bf0 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Tue, 11 Jul 2023 15:39:07 +0800 Subject: [PATCH 08/33] S-42 --- .../Controllers/InspectionController.cs | 18 ++++++++++++++++++ .../Interface/IClinicalAnswerService.cs | 2 ++ 2 files changed, 20 insertions(+) diff --git a/IRaCIS.Core.API/Controllers/InspectionController.cs b/IRaCIS.Core.API/Controllers/InspectionController.cs index 8018bc159..8ef86050d 100644 --- a/IRaCIS.Core.API/Controllers/InspectionController.cs +++ b/IRaCIS.Core.API/Controllers/InspectionController.cs @@ -254,6 +254,24 @@ namespace IRaCIS.Core.API.Controllers return result; } + /// + /// CRC撤销临床数据 + /// + /// + /// + [HttpPost, Route("Inspection/ClinicalAnswer/CRCCancelConfirmClinical")] + [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] + + [UnitOfWork] + public async Task CRCCancelConfirmClinical(DataInspectionDto opt) + { + var singid = await _inspectionService.RecordSing(opt.SignInfo); + var result = await _clinicalAnswerService.CRCCancelConfirmClinical(opt.Data); + await _inspectionService.CompletedSign(singid, result); + return result; + } + + /// /// PM确认临床数据 /// diff --git a/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs index f2f803ee9..802c97fa7 100644 --- a/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs @@ -17,5 +17,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Interface Task SubmitClinicalForm(SubmitClinicalFormInDto inDto); + Task CRCCancelConfirmClinical(CRCCancelConfirmClinicalInDto inDto); + } } From c2cbbba637aa9fdecdddc410331bd930c89a508d Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Tue, 11 Jul 2023 16:30:50 +0800 Subject: [PATCH 09/33] S-43 --- .../ClinicalData/ReadingClinicalDataService.cs | 11 ++++++++--- .../Service/Reading/Dto/ReadingClinicalDataDto.cs | 11 +++++++---- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index 797dcbd51..d6c950c55 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -701,6 +701,8 @@ namespace IRaCIS.Application.Services ClinicalDataLevel = x.ClinicalDataLevel, SubjectId = inDto.SubjectId, ReadingId = default(Guid), + IsCRCConfirm= readModule.IsCRCConfirm, + IsPMConfirm= readModule.IsPMConfirm, ClinicalDataSetName = x.ClinicalDataSetName.LanguageName(x.ClinicalDataSetEnName, _userInfo.IsEn_Us), ClinicalDataSetEnName = x.ClinicalDataSetEnName, ClinicalDataTrialSetId = x.Id, @@ -761,7 +763,7 @@ namespace IRaCIS.Application.Services result = result.Where(x => x.UploadRole == UploadRole.PM).ToList(); break; case GetClinicalType.CRCConfirm: - result = result.Where(x => x.UploadRole == UploadRole.CRC).ToList(); + result = result.Where(x => x.UploadRole == UploadRole.CRC&&x.IsCRCConfirm&&!x.IsPMConfirm).ToList(); break; case GetClinicalType.HasSign: result = result.Where(x => x.IsSign).ToList(); @@ -856,7 +858,10 @@ namespace IRaCIS.Application.Services ClinicalDataLevel = x.ClinicalDataLevel, SubjectId = inDto.SubjectId, ReadingId = default(Guid), - ClinicalDataSetName = x.ClinicalDataSetName.LanguageName(x.ClinicalDataSetEnName, _userInfo.IsEn_Us), + IsCRCConfirm= readModule.IsCRCConfirm, + IsPMConfirm=readModule.IsPMConfirm, + + ClinicalDataSetName = x.ClinicalDataSetName.LanguageName(x.ClinicalDataSetEnName, _userInfo.IsEn_Us), ClinicalDataSetEnName = x.ClinicalDataSetEnName, ClinicalDataTrialSetId = x.Id, IsSign = readModule.IsPMConfirm, @@ -907,7 +912,7 @@ namespace IRaCIS.Application.Services result = result.Where(x => x.UploadRole == UploadRole.PM).ToList(); break; case GetClinicalType.CRCConfirm: - result = result.Where(x => x.UploadRole == UploadRole.CRC).ToList(); + result = result.Where(x => x.UploadRole == UploadRole.CRC&&x.IsCRCConfirm&&!x.IsPMConfirm).ToList(); break; case GetClinicalType.HasSign: result = result.Where(x => x.IsSign).ToList(); diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs index d4f8761d6..85e149f43 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs @@ -335,11 +335,14 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// public Guid ReadingId { get; set; } + public bool IsCRCConfirm { get; set; } = false; - /// - /// 项目配置临床类型Name - /// - public string ClinicalDataSetName { get; set; } + public bool IsPMConfirm { get; set; } = false; + + /// + /// 项目配置临床类型Name + /// + public string ClinicalDataSetName { get; set; } /// /// 英文名称 From 18f5bcd62fe7f21e9c794285b0a541f60a23b191 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Tue, 11 Jul 2023 18:02:37 +0800 Subject: [PATCH 10/33] S-44 --- IRaCIS.Core.API/IRaCIS.Core.API.xml | 7 +++ .../IRaCIS.Core.Application.xml | 5 +++ .../ReadingClinicalDataService.cs | 1 - .../SubjectVisitCheckPassedTrigger.cs | 44 +++++++++---------- 4 files changed, 34 insertions(+), 23 deletions(-) diff --git a/IRaCIS.Core.API/IRaCIS.Core.API.xml b/IRaCIS.Core.API/IRaCIS.Core.API.xml index 7e6ee7ae3..eec56cc64 100644 --- a/IRaCIS.Core.API/IRaCIS.Core.API.xml +++ b/IRaCIS.Core.API/IRaCIS.Core.API.xml @@ -146,6 +146,13 @@ + + + CRC撤销临床数据 + + + + PM确认临床数据 diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 14728138f..fb04dbcfd 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -3886,6 +3886,11 @@ 路径 + + + 临床数据类型Id + + 1 PM上传的所有的 2CRC上传的所有已确认的 3 所有已经签名的 diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index d6c950c55..00e3e559d 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -834,7 +834,6 @@ namespace IRaCIS.Application.Services // 这里处理CRC上传 阅片期的临床数据 var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadingId&&x.IsCRCConfirm) - .FirstOrDefaultAsync(); if (readModule != null) { diff --git a/IRaCIS.Core.Application/Triggers/SubjectVisitCheckPassedTrigger.cs b/IRaCIS.Core.Application/Triggers/SubjectVisitCheckPassedTrigger.cs index 7155d8ed6..94463c240 100644 --- a/IRaCIS.Core.Application/Triggers/SubjectVisitCheckPassedTrigger.cs +++ b/IRaCIS.Core.Application/Triggers/SubjectVisitCheckPassedTrigger.cs @@ -98,36 +98,36 @@ namespace IRaCIS.Core.Application.Triggers } // 触发临床数据 - if (context.ChangeType == ChangeType.Added) - { - var cRCClinicalDatas = await _clinicalDataTrialSetRepository.Where(x => x.TrialId == context.Entity.TrialId && x.UploadRole == UploadRole.CRC && x.IsConfirm) + //if (context.ChangeType == ChangeType.Added) + //{ + // var cRCClinicalDatas = await _clinicalDataTrialSetRepository.Where(x => x.TrialId == context.Entity.TrialId && x.UploadRole == UploadRole.CRC && x.IsConfirm) - .Select(x => new - { - x.Id, - x.ClinicalDataLevel, - }).ToListAsync(); + // .Select(x => new + // { + // x.Id, + // x.ClinicalDataLevel, + // }).ToListAsync(); - List readingClinicals = new List(); - readingClinicals.AddRange( + // List readingClinicals = new List(); + // readingClinicals.AddRange( - cRCClinicalDatas.WhereIf(!context.Entity.IsBaseLine, x => x.ClinicalDataLevel == ClinicalLevel.SubjectVisit).Select(x => new ReadingClinicalData() - { - ClinicalDataTrialSetId = x.Id, - IsVisit = true, - SubjectId = context.Entity.SubjectId, - ReadingId = context.Entity.Id, - TrialId = context.Entity.TrialId + // cRCClinicalDatas.WhereIf(!context.Entity.IsBaseLine, x => x.ClinicalDataLevel == ClinicalLevel.SubjectVisit).Select(x => new ReadingClinicalData() + // { + // ClinicalDataTrialSetId = x.Id, + // IsVisit = true, + // SubjectId = context.Entity.SubjectId, + // ReadingId = context.Entity.Id, + // TrialId = context.Entity.TrialId - }).ToList() + // }).ToList() - ); + // ); - await _readingClinicalDataRepository.AddRangeAsync(readingClinicals); - await _readingClinicalDataRepository.SaveChangesAsync(); + // await _readingClinicalDataRepository.AddRangeAsync(readingClinicals); + // await _readingClinicalDataRepository.SaveChangesAsync(); - } + //} } From a10a9a225585ac804e1cd3a60fe856f5b6216d4c Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 12 Jul 2023 10:31:58 +0800 Subject: [PATCH 11/33] S-45 --- .../ClinicalData/ClinicalAnswerService.cs | 17 +++++++++----- .../ReadingClinicalDataService.cs | 2 +- .../ClinicalData/ReadingClinicalData.cs | 6 +---- .../ClinicalQuestionAnswer/ClinicalForm.cs | 4 ++-- IRaCIS.Core.Domain/Visit/Subject.cs | 2 ++ .../ClinicalFromConfigration.cs | 22 +++++++++---------- 6 files changed, 29 insertions(+), 24 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index 1c28eb9e4..24d4bc267 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -128,7 +128,14 @@ namespace IRaCIS.Core.Application.Service var clinicalDataList =await _readingClinicalDataRepository .WhereIf(inDto.SubjectId != null, x => x.SubjectId == inDto.SubjectId) - .Where(x =>x.TrialId==inDto.TrialId&&x.ClinicalDataTrialSet.UploadRole== UploadRole.CRC).IgnoreAutoIncludes().ToListAsync(); + .Where(x =>x.TrialId==inDto.TrialId&&x.ClinicalDataTrialSet.UploadRole== UploadRole.CRC) + .Select(x=>new + { + ClinicalDataTrialSetId=x.ClinicalDataTrialSetId, + SubjectId=x.SubjectId, + x.ReadingId, + + }).ToListAsync(); List readingClinicalDatas = new List(); @@ -184,12 +191,12 @@ namespace IRaCIS.Core.Application.Service }).ToList()); }); - await _readingClinicalDataRepository.AddRangeAsync(readingClinicalDatas); - - await _readingClinicalDataRepository.SaveChangesAsync(); + + await _readingClinicalDataRepository.AddRangeAsync(readingClinicalDatas); + await _readingClinicalDataRepository.SaveChangesAsync(); - } + } /// /// 获取CRC受试者临床数据 diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index 00e3e559d..ab142f525 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -197,7 +197,7 @@ namespace IRaCIS.Application.Services Path = x.ClinicalDataTrialSet.Path, IsBlind = x.IsBlind, IsComplete = x.IsComplete, - ClinicalFromList=x.ClinicalFormList.Select(y=> new ClinicalFromData() { + ClinicalFromList=x.Subject.ClinicalFormList.Where(y=>y.ReadingId==x.ReadingId).Select(y=> new ClinicalFromData() { CheckDate=y.CheckDate, ClinicalFormId=y.Id }).ToList(), diff --git a/IRaCIS.Core.Domain/Reading/ClinicalData/ReadingClinicalData.cs b/IRaCIS.Core.Domain/Reading/ClinicalData/ReadingClinicalData.cs index ce3380c9b..2c6ba3b0f 100644 --- a/IRaCIS.Core.Domain/Reading/ClinicalData/ReadingClinicalData.cs +++ b/IRaCIS.Core.Domain/Reading/ClinicalData/ReadingClinicalData.cs @@ -96,11 +96,7 @@ namespace IRaCIS.Core.Domain.Models [JsonIgnore] public List ReadingClinicalDataPDFList { get; set; } - /// - /// 临床数据表单 - /// - [JsonIgnore] - public List ClinicalFormList { get; set; } + } diff --git a/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalForm.cs b/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalForm.cs index 294097af3..b59d1374d 100644 --- a/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalForm.cs +++ b/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalForm.cs @@ -55,8 +55,8 @@ namespace IRaCIS.Core.Domain.Models public ClinicalDataTrialSet ClinicalDataTrialSet { get; set; } [JsonIgnore] - - public ReadingClinicalData ReadingClinicalData { get; set; } + [ForeignKey("SubjectId")] + public Subject Subject { get; set; } } diff --git a/IRaCIS.Core.Domain/Visit/Subject.cs b/IRaCIS.Core.Domain/Visit/Subject.cs index 0ad19bb43..fa8a7c166 100644 --- a/IRaCIS.Core.Domain/Visit/Subject.cs +++ b/IRaCIS.Core.Domain/Visit/Subject.cs @@ -121,6 +121,8 @@ namespace IRaCIS.Core.Domain.Models public Guid? DeleteUserId { get; set; } public bool IsReReadingOrBackInfluenceAnalysis { get; set; } + [JsonIgnore] + public List ClinicalFormList { get; set; } //是否分配了读片医生 diff --git a/IRaCIS.Core.Infra.EFCore/EntityConfigration/ClinicalFromConfigration.cs b/IRaCIS.Core.Infra.EFCore/EntityConfigration/ClinicalFromConfigration.cs index cd87fd662..98b711e7a 100644 --- a/IRaCIS.Core.Infra.EFCore/EntityConfigration/ClinicalFromConfigration.cs +++ b/IRaCIS.Core.Infra.EFCore/EntityConfigration/ClinicalFromConfigration.cs @@ -9,19 +9,19 @@ using System.Threading.Tasks; namespace IRaCIS.Core.Infra.EFCore.EntityConfigration { - public class ClinicalFromConfigration : IEntityTypeConfiguration - { + //public class ClinicalFromConfigration : IEntityTypeConfiguration + //{ - public void Configure(EntityTypeBuilder builder) - { - builder - .HasOne(s => s.ReadingClinicalData) - .WithMany(c => c.ClinicalFormList) - .HasForeignKey(s => new { s.SubjectId, s.ReadingId }) - .HasPrincipalKey(c => new { c.SubjectId, c.ReadingId }); - } + // public void Configure(EntityTypeBuilder builder) + // { + // builder + // .HasOne(s => s.ReadingClinicalData) + // .WithMany(c => c.ClinicalFormList) + // .HasForeignKey(s => new { s.SubjectId, s.ReadingId }) + // .HasPrincipalKey(c => new { c.SubjectId, c.ReadingId }); + // } - } + //} } From b5e4b7db86bfe4191105a6ee4c8f1c0dcadcd881 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 12 Jul 2023 11:41:49 +0800 Subject: [PATCH 12/33] S-46 --- .../Reading/ClinicalData/ClinicalAnswerService.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index 24d4bc267..51348788a 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -440,13 +440,13 @@ namespace IRaCIS.Core.Application.Service await _clinicalAnswerRowInfoRepository.BatchDeleteNoTrackingAsync(x => x.ClinicalFormId == inDto.ClinicalFormId); await _clinicalTableAnswerRepository.BatchDeleteNoTrackingAsync(x => x.ClinicalFormId == inDto.ClinicalFormId); } - if(inDto.ReadingId!=null) - { - await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(x => x.ReadingId == inDto.ReadingId && x.ClinicalDataTrialSetId == inDto.ClinicalDataTrialSetId, x => new ReadingClinicalData() - { - IsSign = true - }); - } + //if(inDto.ReadingId!=null) + //{ + // await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(x => x.ReadingId == inDto.ReadingId && x.ClinicalDataTrialSetId == inDto.ClinicalDataTrialSetId, x => new ReadingClinicalData() + // { + // IsSign = true + // }); + //} await _clinicalFormRepository.AddAsync(clinicalForm); await _clinicalQuestionAnswerRepository.AddRangeAsync(clinicalQuestionAnswers); await _clinicalAnswerRowInfoRepository.AddRangeAsync(clinicalAnswerRowInfos); From 98cc35e6144e2ba1fbed241ab45c8a3d0556806c Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 12 Jul 2023 13:55:45 +0800 Subject: [PATCH 13/33] S-47 --- .../ClinicalData/ClinicalAnswerService.cs | 40 +++++++++++++++---- .../ReadingClinicalDataService.cs | 4 +- .../Service/Reading/Dto/ClinicalAnswerDto.cs | 11 ++++- .../Reading/Dto/ReadingClinicalDataDto.cs | 4 ++ IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs | 1 + .../Reading/ReadingPeriod/ReadModule.cs | 7 +++- 6 files changed, 57 insertions(+), 10 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index 51348788a..f818ab1df 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -518,6 +518,7 @@ namespace IRaCIS.Core.Application.Service SubjectId = x.SubjectId, IsCRCConfirm = x.IsCRCConfirm, + IsCRCApplicationRevoke=x.IsCRCApplicationRevoke, VisitBlindName=x.SubjectVisit.BlindName, LatestScanDate = x.SubjectVisit.LatestScanDate, ReadingSetType = x.ReadingSetType, @@ -818,10 +819,10 @@ namespace IRaCIS.Core.Application.Service await _readModuleRepository.UpdatePartialFromQueryAsync(x => presentData.ReadModuleId==x.Id, x => new ReadModule() { - IsCRCConfirm = false + IsCRCApplicationRevoke = true }); - await _readModuleCriterionFromRepository.BatchDeleteNoTrackingAsync(x=>x.ReadModuleId== presentData.ReadModuleId); + //await _readModuleCriterionFromRepository.BatchDeleteNoTrackingAsync(x=>x.ReadModuleId== presentData.ReadModuleId); await _readModuleCriterionFromRepository.SaveChangesAsync(); @@ -840,13 +841,38 @@ namespace IRaCIS.Core.Application.Service var readModuleData = await _readModuleRepository.Where(x => x.Id == inDto.ReadModuleId).FirstNotNullAsync(); if (!readModuleData.IsCRCConfirm) { - throw new BusinessValidationFailedException("CRC还未确认数据,PM无法确认"); + throw new BusinessValidationFailedException("CRC还未确认数据,PM无法操作"); } - await _readModuleRepository.UpdatePartialFromQueryAsync(x => inDto.ReadModuleId == x.Id, x => new ReadModule() - { - IsPMConfirm = true - }); + if (readModuleData.IsCRCApplicationRevoke && inDto.IsConfirm) + { + throw new BusinessValidationFailedException("CRC正在申请退回,PM无法确认"); + } + + if (!readModuleData.IsCRCApplicationRevoke && !inDto.IsConfirm) + { + throw new BusinessValidationFailedException("CRC未申请退回,PM无法撤销"); + } + + if (inDto.IsConfirm) + { + await _readModuleRepository.UpdatePartialFromQueryAsync(x => inDto.ReadModuleId == x.Id, x => new ReadModule() + { + IsPMConfirm = true + }); + } + else + { + await _readModuleRepository.UpdatePartialFromQueryAsync(x => inDto.ReadModuleId == x.Id, x => new ReadModule() + { + IsCRCConfirm = false, + IsCRCApplicationRevoke=false, + }); + await _readModuleCriterionFromRepository.BatchDeleteNoTrackingAsync(x=>x.ReadModuleId== presentData.ReadModuleId); + + + } + await _readModuleRepository.SaveChangesAsync(); diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index ab142f525..5a98ee91a 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -701,6 +701,7 @@ namespace IRaCIS.Application.Services ClinicalDataLevel = x.ClinicalDataLevel, SubjectId = inDto.SubjectId, ReadingId = default(Guid), + IsCRCApplicationRevoke=readModule.IsCRCApplicationRevoke, IsCRCConfirm= readModule.IsCRCConfirm, IsPMConfirm= readModule.IsPMConfirm, ClinicalDataSetName = x.ClinicalDataSetName.LanguageName(x.ClinicalDataSetEnName, _userInfo.IsEn_Us), @@ -857,7 +858,8 @@ namespace IRaCIS.Application.Services ClinicalDataLevel = x.ClinicalDataLevel, SubjectId = inDto.SubjectId, ReadingId = default(Guid), - IsCRCConfirm= readModule.IsCRCConfirm, + IsCRCApplicationRevoke= readModule.IsCRCApplicationRevoke, + IsCRCConfirm = readModule.IsCRCConfirm, IsPMConfirm=readModule.IsPMConfirm, ClinicalDataSetName = x.ClinicalDataSetName.LanguageName(x.ClinicalDataSetEnName, _userInfo.IsEn_Us), diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs index 8d3fff220..22c2b30fe 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs @@ -221,7 +221,10 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public Guid SubjectId { get; set; } public Guid ReadModuleId { get; set; } - } + + public bool IsConfirm { get; set; } + + } public class CRCClinicalForm @@ -272,6 +275,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public bool IsCRCConfirm { get; set; } = false; + + /// + /// CRC是否正在申请撤回 + /// + public bool IsCRCApplicationRevoke { get; set; } = false; + public string SubjectCode { get; set; } public bool IsHaveTableQuestion diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs index 85e149f43..cd3713b1f 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs @@ -335,6 +335,10 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// public Guid ReadingId { get; set; } + /// + /// CRC是否正在申请撤回 + /// + public bool IsCRCApplicationRevoke { get; set; } = false; public bool IsCRCConfirm { get; set; } = false; public bool IsPMConfirm { get; set; } = false; diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs index 573971d63..99889d0b2 100644 --- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs +++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs @@ -16,6 +16,7 @@ namespace IRaCIS.Core.Domain.Share public static readonly string Group = "group"; } + /// /// GetClinicalType /// diff --git a/IRaCIS.Core.Domain/Reading/ReadingPeriod/ReadModule.cs b/IRaCIS.Core.Domain/Reading/ReadingPeriod/ReadModule.cs index 1be9cb363..647451fc7 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingPeriod/ReadModule.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingPeriod/ReadModule.cs @@ -79,7 +79,12 @@ namespace IRaCIS.Core.Domain.Models public bool IsCRCConfirm { get; set; } = false; public bool IsPMConfirm { get; set; } = false; - public bool IsDeleted { get; set; } + + /// + /// CRC是否正在申请撤回 + /// + public bool IsCRCApplicationRevoke { get; set; } = false; + public bool IsDeleted { get; set; } public DateTime? DeletedTime { get; set; } From a08cc44cd04b072b6c69e3751d8d488370b4f93e Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 12 Jul 2023 14:03:40 +0800 Subject: [PATCH 14/33] S-48 --- .../Service/Reading/ClinicalData/ClinicalAnswerService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index f818ab1df..06da45ebb 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -868,7 +868,7 @@ namespace IRaCIS.Core.Application.Service IsCRCConfirm = false, IsCRCApplicationRevoke=false, }); - await _readModuleCriterionFromRepository.BatchDeleteNoTrackingAsync(x=>x.ReadModuleId== presentData.ReadModuleId); + await _readModuleCriterionFromRepository.BatchDeleteNoTrackingAsync(x=>x.ReadModuleId== x.Id); } From 260e29989c139d8cda4230795d7a97a175ef4fb1 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 12 Jul 2023 15:13:26 +0800 Subject: [PATCH 15/33] =?UTF-8?q?S-49=20=E4=BB=BB=E5=8A=A1=E7=9A=84?= =?UTF-8?q?=E4=B8=B4=E5=BA=8A=E7=8A=B6=E6=80=81=E7=BB=B4=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ClinicalData/ClinicalAnswerService.cs | 18 ++++++++--- .../ReadingClinicalDataService.cs | 32 ++++++++++++++++--- .../Interface/IReadingClinicalDataService.cs | 2 ++ 3 files changed, 43 insertions(+), 9 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index 06da45ebb..f5f4f6424 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -15,6 +15,7 @@ using IRaCIS.Core.Infrastructure; using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Infrastructure.Extention; using IRaCIS.Core.Application.Service.Reading.Interface; +using IRaCIS.Core.Application.Contracts; namespace IRaCIS.Core.Application.Service { @@ -51,6 +52,8 @@ namespace IRaCIS.Core.Application.Service private readonly IClinicalQuestionService _iClinicalQuestionService; + private readonly IReadingClinicalDataService _iReadingClinicalDataService; + public ClinicalAnswerService(IRepository trialClinicalQuestionRepository, IRepository systemClinicalTableQuestionRepository, @@ -58,7 +61,8 @@ namespace IRaCIS.Core.Application.Service IRepository readingClinicalDataRepository, IRepository clinicalFormRepository, IRepository subjectRepository, - IRepository readModuleCriterionFromRepository, + IReadingClinicalDataService iReadingClinicalDataService + IRepository readModuleCriterionFromRepository, IRepository readModuleRepository, IRepository subjectVisitRepository, IRepository clinicalTableAnswerRepository, @@ -78,8 +82,8 @@ namespace IRaCIS.Core.Application.Service _trialClinicalTableQuestionRepository = trialClinicalTableQuestionRepository; _systemClinicalQuestionRepository = systemClinicalQuestionRepository; _clinicalDataTrialSetRepository = clinicalDataTrialSetRepository; - - _clinicalFormRepository = clinicalFormRepository; + _iReadingClinicalDataService = iReadingClinicalDataService; + _clinicalFormRepository = clinicalFormRepository; this._subjectRepository = subjectRepository; this._readModuleCriterionFromRepository = readModuleCriterionFromRepository; this._readModuleRepository = readModuleRepository; @@ -860,6 +864,8 @@ namespace IRaCIS.Core.Application.Service { IsPMConfirm = true }); + await _readModuleRepository.SaveChangesAsync(); + await _iReadingClinicalDataService.DealVisiTaskClinicalDataSignedAsync(inDto.TrialId, inDto.SubjectId, inDto.ReadModuleId, false, readModuleData.TrialReadingCriterionId); } else { @@ -870,11 +876,13 @@ namespace IRaCIS.Core.Application.Service }); await _readModuleCriterionFromRepository.BatchDeleteNoTrackingAsync(x=>x.ReadModuleId== x.Id); - + await _readModuleRepository.SaveChangesAsync(); + + } - await _readModuleRepository.SaveChangesAsync(); + return ResponseOutput.Ok(true); } diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index 5a98ee91a..db3ea8f62 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -303,7 +303,7 @@ namespace IRaCIS.Application.Services } //处理 任务 临床数据是否签名 - private async Task DealVisiTaskClinicalDataSignedAsync(Guid trialId, Guid subjectId, Guid readingId, bool isVisit, Guid trialReadingCritrialId) + public async Task DealVisiTaskClinicalDataSignedAsync(Guid trialId, Guid subjectId, Guid readingId, bool isVisit, Guid trialReadingCritrialId) { //获取确认的临床数据配置 var trialClinicalDataSetList = _clinicalDataTrialSetRepository.Where(t => t.TrialId == trialId && t.IsConfirm).Include(t => t.TrialClinicalDataSetCriteriaList).ToList(); @@ -321,6 +321,8 @@ namespace IRaCIS.Application.Services { var isBaseLine = await _subjectVisitRepository.Where(t => t.Id == readingId).Select(t => t.IsBaseLine).FirstOrDefaultAsync(); + + //判断是否基线 if (isBaseLine) { @@ -349,21 +351,43 @@ namespace IRaCIS.Application.Services else { //判断是影像学 还是肿瘤学阅片 - var readingSetType = await _readModuleRepository.Where(t => t.Id == readingId).Select(t => t.ReadingSetType).FirstOrDefaultAsync(); + var readModule = await _readModuleRepository.Where(t => t.Id == readingId).FirstNotNullAsync(); + + //CRC 阅片期自定义结构化录入是否签名 + bool crcReadModuleSign = true; //影像学 - if (readingSetType == ReadingSetType.ImageReading) + if (readModule.ReadingSetType == ReadingSetType.ImageReading) { needSignCount = trialClinicalDataSetList.Where(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCritrialId) && t.ClinicalDataLevel == ClinicalLevel.ImageRead).Count(); + + // 不存在需要CRC上传的临床数据 或者 PM已确认 + crcReadModuleSign = + !trialClinicalDataSetList.Any(x => + x.UploadRole == UploadRole.CRC + && x.ClinicalDataLevel == ClinicalLevel.ImageRead + && x.ClinicalUploadType == ClinicalUploadType.Structuring + && x.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCritrialId)) || readModule.IsPMConfirm; + + } //肿瘤学 else { needSignCount = trialClinicalDataSetList.Where(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCritrialId) && t.ClinicalDataLevel == ClinicalLevel.OncologyRead).Count(); + + // 不存在需要CRC上传的临床数据 或者 PM已确认 + crcReadModuleSign = + !trialClinicalDataSetList.Any(x => + x.UploadRole == UploadRole.CRC + && x.ClinicalDataLevel == ClinicalLevel.OncologyRead + && x.ClinicalUploadType == ClinicalUploadType.Structuring + && x.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCritrialId)) || readModule.IsPMConfirm; + } //可能仅仅CRC 基线 没有PM - if (needSignCount == haveSignedCount /*&& needSignCount != 0*/) + if (needSignCount == haveSignedCount && crcReadModuleSign/*&& needSignCount != 0*/) { //将该标准 该subject 该阅片期|肿瘤学 任务临床数据状态变更 await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == trialId && t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCritrialId && t.SouceReadModuleId == readingId, u => new VisitTask() diff --git a/IRaCIS.Core.Application/Service/Reading/Interface/IReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingClinicalDataService.cs index 1d1f3f62d..94705f59a 100644 --- a/IRaCIS.Core.Application/Service/Reading/Interface/IReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingClinicalDataService.cs @@ -23,5 +23,7 @@ namespace IRaCIS.Core.Application.Contracts // Task<(List, object)> GetReadingClinicalDataList(GetReadingClinicalDataListIndto inDto); Task> GetReadingClinicalList(GetReadingClinicalDataListIndto inDto); + + Task DealVisiTaskClinicalDataSignedAsync(Guid trialId, Guid subjectId, Guid readingId, bool isVisit, Guid trialReadingCritrialId); } } \ No newline at end of file From 3dd7da5a395191c19025daaf37fd967251de8a0f Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 12 Jul 2023 15:19:18 +0800 Subject: [PATCH 16/33] S-50 --- IRaCIS.Core.Application/IRaCIS.Core.Application.xml | 10 ++++++++++ .../Reading/ClinicalData/ClinicalAnswerService.cs | 10 +++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index fb04dbcfd..6a15dec63 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -2811,6 +2811,11 @@ 模块名称 + + + CRC是否正在申请撤回 + + 最晚拍片日期 @@ -3986,6 +3991,11 @@ 访视Id 或者模块Id + + + CRC是否正在申请撤回 + + 项目配置临床类型Name diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index f5f4f6424..7da5e6f75 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -61,7 +61,7 @@ namespace IRaCIS.Core.Application.Service IRepository readingClinicalDataRepository, IRepository clinicalFormRepository, IRepository subjectRepository, - IReadingClinicalDataService iReadingClinicalDataService + IReadingClinicalDataService iReadingClinicalDataService, IRepository readModuleCriterionFromRepository, IRepository readModuleRepository, IRepository subjectVisitRepository, @@ -853,10 +853,10 @@ namespace IRaCIS.Core.Application.Service throw new BusinessValidationFailedException("CRC正在申请退回,PM无法确认"); } - if (!readModuleData.IsCRCApplicationRevoke && !inDto.IsConfirm) - { - throw new BusinessValidationFailedException("CRC未申请退回,PM无法撤销"); - } + //if (!readModuleData.IsCRCApplicationRevoke && !inDto.IsConfirm) + //{ + // throw new BusinessValidationFailedException("CRC未申请退回,PM无法撤销"); + //} if (inDto.IsConfirm) { From d84e246b23ef41d3bb1f9e5eee3222330ff0d74a Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 12 Jul 2023 15:19:39 +0800 Subject: [PATCH 17/33] S-50 --- .../Service/Reading/ClinicalData/ClinicalAnswerService.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index 7da5e6f75..13861ebc7 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -853,10 +853,10 @@ namespace IRaCIS.Core.Application.Service throw new BusinessValidationFailedException("CRC正在申请退回,PM无法确认"); } - //if (!readModuleData.IsCRCApplicationRevoke && !inDto.IsConfirm) - //{ - // throw new BusinessValidationFailedException("CRC未申请退回,PM无法撤销"); - //} + if (!readModuleData.IsCRCApplicationRevoke && !inDto.IsConfirm) + { + throw new BusinessValidationFailedException("CRC未申请退回,PM无法撤销"); + } if (inDto.IsConfirm) { From 8b96163e37959e48ffc61220d5411c8e37b66332 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 12 Jul 2023 15:55:20 +0800 Subject: [PATCH 18/33] S-51 --- .../Service/Reading/ClinicalData/ClinicalAnswerService.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index 13861ebc7..ea5ac7270 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -653,11 +653,13 @@ namespace IRaCIS.Core.Application.Service })).CurrentPageData.SelectMany(x => x.ClinicalFormList).ToList(); var clinicalDataTrialSetIds = confirmList.Select(x => x.ClinicalDataTrialSetId).Distinct().ToList(); - var questionList = await _trialClinicalQuestionRepository.Where(x => clinicalDataTrialSetIds.Contains( x.TrialClinicalId) + var clinicalFormIds = confirmList.Select(x => x.ClinicalFormId).ToList(); + + var questionList = await _trialClinicalQuestionRepository.Where(x => clinicalDataTrialSetIds.Contains( x.TrialClinicalId) && x.ClinicalQuestionType != ReadingQestionType.Group && x.ClinicalQuestionType != ReadingQestionType.Table).OrderBy(x=>x.TrialClinicalId).ThenBy(x => x.ShowOrder) .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); - var answers = await _clinicalQuestionAnswerRepository.Where(x => x.SubjectId == readModule.SubjectId && clinicalDataTrialSetIds.Contains( x.ClinicalDataTrialSetId)) + var answers = await _clinicalQuestionAnswerRepository.Where(x => clinicalFormIds.Contains(x.ClinicalFormId)) .Select(x => new { x.ClinicalDataTrialSetId, From 61cdb2fadaca2f240ca6c6261799267ec27f298f Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 12 Jul 2023 16:06:52 +0800 Subject: [PATCH 19/33] S-52 --- .../Reading/ClinicalData/ClinicalAnswerService.cs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index ea5ac7270..75ae1d425 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -748,19 +748,18 @@ namespace IRaCIS.Core.Application.Service var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadModuleId).FirstNotNullAsync(); - var dataList =(await this.GetCRCConfirmList(new GetCRCConfirmListInDto() + var confirmlist = (await this.GetCRCConfirmList(new GetCRCConfirmListInDto() { TrialId = inDto.TrialId, SubjectId= readModule.SubjectId, - TrialReadingCriterionId= readModule.TrialReadingCriterionId, + ReadModuleId= inDto.ReadModuleId, + TrialReadingCriterionId = readModule.TrialReadingCriterionId, PageIndex=1, PageSize=9999, })).CurrentPageData; - var presentData = dataList.Where(x => x.ReadModuleId == inDto.ReadModuleId).First(); - var confirmlist= dataList.Where(x =>(x.LatestScanDate < presentData.LatestScanDate && x.ReadingSetType == presentData.ReadingSetType) - || x.ReadModuleId == presentData.ReadModuleId).Where(x => !x.IsCRCConfirm).ToList(); + await _readModuleCriterionFromRepository.BatchDeleteNoTrackingAsync(x=>x.ReadModuleId== inDto.ReadModuleId); List needAddList = new List() { From a23325584b3e0d1b0df43f51dc335b9dfe5f2eac Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 12 Jul 2023 17:12:28 +0800 Subject: [PATCH 20/33] S-53 --- .../ReadingClinicalDataService.cs | 35 ++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index db3ea8f62..86afe83b0 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -25,6 +25,7 @@ namespace IRaCIS.Application.Services private readonly IRepository _subjectVisitRepository; private readonly IRepository _previousHistoryRepository; private readonly IRepository _readModuleCriterionFromRepository; + private readonly IRepository _clinicalFormRepository; private readonly IRepository _previousOtherRepository; private readonly IRepository _previousSurgeryRepository; private readonly IRepository _readingQuestionCriterionTrialRepository; @@ -39,6 +40,7 @@ namespace IRaCIS.Application.Services IRepository subjectVisitRepository, IRepository previousHistoryRepository, IRepository readModuleCriterionFromRepository, + IRepository clinicalFormRepository, IRepository previousOtherRepository, IRepository previousSurgeryRepository, IRepository readingQuestionCriterionTrialRepository, @@ -55,6 +57,7 @@ namespace IRaCIS.Application.Services this._subjectVisitRepository = subjectVisitRepository; this._previousHistoryRepository = previousHistoryRepository; this._readModuleCriterionFromRepository = readModuleCriterionFromRepository; + this._clinicalFormRepository = clinicalFormRepository; this._previousOtherRepository = previousOtherRepository; this._previousSurgeryRepository = previousSurgeryRepository; this._readingQuestionCriterionTrialRepository = readingQuestionCriterionTrialRepository; @@ -659,7 +662,6 @@ namespace IRaCIS.Application.Services inDto.ReadingId = visitTask.SouceReadModuleId ?? visitTask.SourceSubjectVisitId; } - var resultQuery = _readingClinicalDataRepository.Where(x => x.SubjectId == inDto.SubjectId) .WhereIf(inDto.ReadingClinicalDataId != null, x => x.Id == inDto.ReadingClinicalDataId) .WhereIf(inDto.ClinicalDataTrialSetId != null, x => x.ClinicalDataTrialSetId == inDto.ClinicalDataTrialSetId) @@ -694,12 +696,22 @@ namespace IRaCIS.Application.Services { result = await resultQuery.ToListAsync(); } - + + var readingIds = result.Select(x => x.ReadingId).ToList(); + var clinical = await _clinicalFormRepository.Where(x => readingIds.Contains(x.ReadingId??default(Guid))).ToListAsync(); + result.Where(x => x.ClinicalUploadType == ClinicalUploadType.Structuring).ForEach(x => { + + x.ClinicalFromList = clinical.Where(y => y.ReadingId == x.ReadingId).Select(y => new ClinicalFromData() + { + CheckDate = y.CheckDate, + ClinicalFormId = y.Id + }).ToList(); + x.FileCount = x.ClinicalFromList.Count(); + }); - - // 这里处理CRC上传 阅片期的临床数据 - var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadingId) + // 这里处理CRC上传 阅片期的临床数据 + var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadingId) .WhereIf(inDto.SelectIsSign,x=>x.IsPMConfirm) .WhereIf(!inDto.SelectIsSign, x => x.IsCRCConfirm) .FirstOrDefaultAsync(); @@ -857,6 +869,19 @@ namespace IRaCIS.Application.Services var result = await resultQuery.ToListAsync(); + + var readingIds = result.Select(x => x.ReadingId).ToList(); + var clinical = await _clinicalFormRepository.Where(x => readingIds.Contains(x.ReadingId ?? default(Guid))).ToListAsync(); + result.Where(x => x.ClinicalUploadType == ClinicalUploadType.Structuring).ForEach(x => { + + x.ClinicalFromList = clinical.Where(y => y.ReadingId == x.ReadingId).Select(y => new ClinicalFromData() + { + CheckDate = y.CheckDate, + ClinicalFormId = y.Id + }).ToList(); + x.FileCount = x.ClinicalFromList.Count(); + }); + // 这里处理CRC上传 阅片期的临床数据 var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadingId&&x.IsCRCConfirm) .FirstOrDefaultAsync(); From 79a4ad8cfdf7e4296a5516bbeb9395499ea1f4ae Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 12 Jul 2023 17:53:00 +0800 Subject: [PATCH 21/33] S-54 --- .../Service/Reading/ClinicalData/ClinicalAnswerService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index 75ae1d425..d995b1c1e 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -363,8 +363,8 @@ namespace IRaCIS.Core.Application.Service x.SubjectId == inDto.SubjectId && x.ClinicalDataTrialSetId == inDto.ClinicalDataTrialSetId ).WhereIf(inDto.ReadingId != null, x => x.ReadingId == inDto.ReadingId) - .Where(x => x.ClinicalDataTrialSet.UploadRole != UploadRole.CRC && (x.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.ImageRead - || x.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.OncologyRead)).AnyAsync(); + .Where(x => x.ClinicalDataTrialSet.UploadRole != UploadRole.CRC && !(x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.ImageRead + || x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.OncologyRead)).AnyAsync(); if (existsClinical) { From 5511d6339edd4afb791fa4c71f7051eab440b98f Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 12 Jul 2023 18:11:18 +0800 Subject: [PATCH 22/33] S-55 --- .../Reading/ClinicalData/ReadingClinicalDataService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index 86afe83b0..b378c0d9d 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -701,7 +701,7 @@ namespace IRaCIS.Application.Services var clinical = await _clinicalFormRepository.Where(x => readingIds.Contains(x.ReadingId??default(Guid))).ToListAsync(); result.Where(x => x.ClinicalUploadType == ClinicalUploadType.Structuring).ForEach(x => { - x.ClinicalFromList = clinical.Where(y => y.ReadingId == x.ReadingId).Select(y => new ClinicalFromData() + x.ClinicalFromList = clinical.Where(y => y.ReadingId == x.ReadingId&&y.ClinicalDataTrialSetId==x.ClinicalDataTrialSetId).Select(y => new ClinicalFromData() { CheckDate = y.CheckDate, ClinicalFormId = y.Id @@ -874,7 +874,7 @@ namespace IRaCIS.Application.Services var clinical = await _clinicalFormRepository.Where(x => readingIds.Contains(x.ReadingId ?? default(Guid))).ToListAsync(); result.Where(x => x.ClinicalUploadType == ClinicalUploadType.Structuring).ForEach(x => { - x.ClinicalFromList = clinical.Where(y => y.ReadingId == x.ReadingId).Select(y => new ClinicalFromData() + x.ClinicalFromList = clinical.Where(y => y.ReadingId == x.ReadingId && y.ClinicalDataTrialSetId == x.ClinicalDataTrialSetId).Select(y => new ClinicalFromData() { CheckDate = y.CheckDate, ClinicalFormId = y.Id From 27b51e7ede69d8b7db7df3e47edd2e3ee34e3978 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 13 Jul 2023 10:55:59 +0800 Subject: [PATCH 23/33] S-56 --- .../Service/Reading/ClinicalData/ClinicalAnswerService.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index d995b1c1e..10c10b707 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -358,6 +358,10 @@ namespace IRaCIS.Core.Application.Service ReadingId = inDto.ReadingId, }; + if (await _readModuleCriterionFromRepository.AnyAsync(x => x.ClinicalFormId == inDto.ClinicalFormId?default(Guid))) + { + throw new BusinessValidationFailedException("当前表单已确认,无法修改!"); + } var existsClinical = await _clinicalFormRepository.Where(x => x.SubjectId == inDto.SubjectId From fc71dea8e951c3f838c1fbe0091ca44487a04b13 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 13 Jul 2023 11:37:51 +0800 Subject: [PATCH 24/33] S-57 --- .../Service/Reading/Dto/ClinicalQuestionDto.cs | 5 +++++ .../Reading/ClinicalQuestion/SystemClinicalQuestion.cs | 5 +++++ .../Reading/ClinicalQuestion/TrialClinicalQuestion.cs | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs index f38dd1bca..5c3db69d5 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs @@ -181,6 +181,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// public int? MaxAnswerLength { get; set; } + /// + /// 最大行数 + /// + public int? MaxRow { get; set; } + /// /// 临床数据选项类型(无,自定义) /// diff --git a/IRaCIS.Core.Domain/Reading/ClinicalQuestion/SystemClinicalQuestion.cs b/IRaCIS.Core.Domain/Reading/ClinicalQuestion/SystemClinicalQuestion.cs index 539c62c0d..f1a884f6e 100644 --- a/IRaCIS.Core.Domain/Reading/ClinicalQuestion/SystemClinicalQuestion.cs +++ b/IRaCIS.Core.Domain/Reading/ClinicalQuestion/SystemClinicalQuestion.cs @@ -48,6 +48,11 @@ namespace IRaCIS.Core.Domain.Models /// public int? MaxAnswerLength { get; set; } + /// + /// 最大行数 + /// + public int? MaxRow { get; set; } + /// /// 临床数据选项类型(无,自定义) /// diff --git a/IRaCIS.Core.Domain/Reading/ClinicalQuestion/TrialClinicalQuestion.cs b/IRaCIS.Core.Domain/Reading/ClinicalQuestion/TrialClinicalQuestion.cs index 40e757e4a..1ffe4a970 100644 --- a/IRaCIS.Core.Domain/Reading/ClinicalQuestion/TrialClinicalQuestion.cs +++ b/IRaCIS.Core.Domain/Reading/ClinicalQuestion/TrialClinicalQuestion.cs @@ -47,6 +47,11 @@ namespace IRaCIS.Core.Domain.Models /// 最大长度 /// public int? MaxAnswerLength { get; set; } + + /// + /// 最大行数 + /// + public int? MaxRow { get; set; } /// /// 临床数据选项类型(无,自定义) From 2526ac32fab4898e1fd7c830040b77d76c7b8af1 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 13 Jul 2023 11:40:30 +0800 Subject: [PATCH 25/33] S-58 --- .../Service/Reading/Dto/ClinicalQuestionDto.cs | 2 +- .../Reading/ClinicalQuestion/SystemClinicalQuestion.cs | 2 +- .../Reading/ClinicalQuestion/TrialClinicalQuestion.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs index 5c3db69d5..d4e381ad3 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs @@ -184,7 +184,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// /// 最大行数 /// - public int? MaxRow { get; set; } + public int? MaxQuestionCount { get; set; } /// /// 临床数据选项类型(无,自定义) diff --git a/IRaCIS.Core.Domain/Reading/ClinicalQuestion/SystemClinicalQuestion.cs b/IRaCIS.Core.Domain/Reading/ClinicalQuestion/SystemClinicalQuestion.cs index f1a884f6e..0905c294e 100644 --- a/IRaCIS.Core.Domain/Reading/ClinicalQuestion/SystemClinicalQuestion.cs +++ b/IRaCIS.Core.Domain/Reading/ClinicalQuestion/SystemClinicalQuestion.cs @@ -51,7 +51,7 @@ namespace IRaCIS.Core.Domain.Models /// /// 最大行数 /// - public int? MaxRow { get; set; } + public int? MaxQuestionCount { get; set; } /// /// 临床数据选项类型(无,自定义) diff --git a/IRaCIS.Core.Domain/Reading/ClinicalQuestion/TrialClinicalQuestion.cs b/IRaCIS.Core.Domain/Reading/ClinicalQuestion/TrialClinicalQuestion.cs index 1ffe4a970..931484b8c 100644 --- a/IRaCIS.Core.Domain/Reading/ClinicalQuestion/TrialClinicalQuestion.cs +++ b/IRaCIS.Core.Domain/Reading/ClinicalQuestion/TrialClinicalQuestion.cs @@ -51,7 +51,7 @@ namespace IRaCIS.Core.Domain.Models /// /// 最大行数 /// - public int? MaxRow { get; set; } + public int? MaxQuestionCount { get; set; } /// /// 临床数据选项类型(无,自定义) From b4bc39f0d94a9e6e64879519d81285122b83be58 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 13 Jul 2023 13:53:11 +0800 Subject: [PATCH 26/33] S-59 --- .../ClinicalData/ClinicalQuestionService.cs | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs index 93b92894a..95220eb33 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs @@ -233,6 +233,11 @@ namespace IRaCIS.Core.Application.Service return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]); } + if (await _trialClinicalQuestionRepository.AnyAsync(x => x.TrialClinicalId == inDto.TrialClinicalId && x.Id != inDto.Id && x.ShowOrder == inDto.ShowOrder)) + { + return ResponseOutput.NotOk("问题序号存在重复!"); + } + var entity = await _trialClinicalQuestionRepository.InsertOrUpdateAsync(inDto, true); return ResponseOutput.Ok(entity.Id.ToString()); @@ -315,6 +320,11 @@ namespace IRaCIS.Core.Application.Service { return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]); } + + if (await _systemClinicalQuestionRepository.AnyAsync(x => x.SystemClinicalId == inDto.SystemClinicalId && x.Id != inDto.Id && x.ShowOrder == inDto.ShowOrder)) + { + return ResponseOutput.NotOk("问题序号存在重复!"); + } var entity = await _systemClinicalQuestionRepository.InsertOrUpdateAsync(inDto, true); return ResponseOutput.Ok(entity.Id.ToString()); @@ -401,6 +411,11 @@ namespace IRaCIS.Core.Application.Service return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]); } + if (await _systemClinicalTableQuestionRepository.AnyAsync(x => x.QuestionId == inDto.QuestionId && x.Id != inDto.Id && x.ShowOrder == inDto.ShowOrder)) + { + return ResponseOutput.NotOk("问题序号存在重复!"); + } + var entity = await _systemClinicalTableQuestionRepository.InsertOrUpdateAsync(inDto, true); return ResponseOutput.Ok(entity.Id.ToString()); @@ -455,6 +470,11 @@ namespace IRaCIS.Core.Application.Service { return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]); } + + if (await _trialClinicalTableQuestionRepository.AnyAsync(x => x.QuestionId == inDto.QuestionId && x.Id != inDto.Id && x.ShowOrder == inDto.ShowOrder)) + { + return ResponseOutput.NotOk("问题序号存在重复!"); + } var entity = await _trialClinicalTableQuestionRepository.InsertOrUpdateAsync(inDto, true); return ResponseOutput.Ok(entity.Id.ToString()); From 3a79251b91b0be1a272a8eeb8aee0210e51340c5 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 13 Jul 2023 14:06:56 +0800 Subject: [PATCH 27/33] =?UTF-8?q?S-60=20VisitHelper=20=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E4=B8=B4=E5=BA=8A=E7=8A=B6=E6=80=81=E7=BB=B4=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Allocation/VisitTaskHelpeService.cs | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs index 75fdb7488..0a151eda4 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs @@ -459,6 +459,13 @@ namespace IRaCIS.Core.Application.Service var haveSignedCount = _readingClinicalDataRepository .Where(t => t.TrialId == trialId && t.IsSign && t.ReadingClinicalDataState == ReadingClinicalDataStatus.HaveSigned && t.ReadingId == readingId && t.ClinicalDataTrialSet.UploadRole == UploadRole.PM).Count(); + + var readModule = _readModuleRepository.Where(t => t.Id == readingId).FirstOrDefault(); + //CRC 阅片期自定义结构化录入是否签名 + bool crcReadModuleSign = true; + + + //访视 if (readingCategory == ReadingCategory.Visit) { @@ -478,16 +485,37 @@ namespace IRaCIS.Core.Application.Service { } + //阅片期 else if (readingCategory == ReadingCategory.Global) { needSignCount = trialClinicalDataSetList.Where(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCriterionId) && t.ClinicalDataLevel == ClinicalLevel.ImageRead && t.UploadRole == UploadRole.PM).Count(); + if (readModule != null) + { + // 不存在需要CRC上传的临床数据 或者 PM已确认 + crcReadModuleSign = + !trialClinicalDataSetList.Any(x => + x.UploadRole == UploadRole.CRC + && x.ClinicalDataLevel == ClinicalLevel.ImageRead + && x.ClinicalUploadType == ClinicalUploadType.Structuring + && x.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCriterionId)) || readModule.IsPMConfirm; + } } // 肿瘤学 else if (readingCategory == ReadingCategory.Oncology) { - return trialClinicalDataSetList.Any(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCriterionId) && t.ClinicalDataLevel == ClinicalLevel.OncologyRead); + needSignCount= trialClinicalDataSetList.Where(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCriterionId) && t.ClinicalDataLevel == ClinicalLevel.OncologyRead && t.UploadRole == UploadRole.PM).Count(); + if (readModule != null) + { + // 不存在需要CRC上传的临床数据 或者 PM已确认 + crcReadModuleSign = + !trialClinicalDataSetList.Any(x => + x.UploadRole == UploadRole.CRC + && x.ClinicalDataLevel == ClinicalLevel.OncologyRead + && x.ClinicalUploadType == ClinicalUploadType.Structuring + && x.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCriterionId)) || readModule.IsPMConfirm; + } } else { @@ -495,7 +523,7 @@ namespace IRaCIS.Core.Application.Service } //可能仅仅CRC 基线 没有PM - if (needSignCount == haveSignedCount /*&& needSignCount != 0*/) + if (needSignCount == haveSignedCount && crcReadModuleSign ) { isClinicalDataSign = true; From 9f4582bf271b43774c330a58a2ee717013b2a921 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 13 Jul 2023 17:18:38 +0800 Subject: [PATCH 28/33] S-61 --- .../Service/Reading/ClinicalData/ReadingClinicalDataService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index b378c0d9d..9a58f9658 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -200,7 +200,7 @@ namespace IRaCIS.Application.Services Path = x.ClinicalDataTrialSet.Path, IsBlind = x.IsBlind, IsComplete = x.IsComplete, - ClinicalFromList=x.Subject.ClinicalFormList.Where(y=>y.ReadingId==x.ReadingId).Select(y=> new ClinicalFromData() { + ClinicalFromList=x.Subject.ClinicalFormList.Where(y=>y.ReadingId==x.ReadingId&&y.ClinicalDataTrialSetId==x.ClinicalDataTrialSetId).Select(y=> new ClinicalFromData() { CheckDate=y.CheckDate, ClinicalFormId=y.Id }).ToList(), From b03d539578cf30a3b66c467fb56f208d2678f079 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Fri, 14 Jul 2023 10:59:05 +0800 Subject: [PATCH 29/33] S-62 --- .../Reading/ClinicalData/ClinicalQuestionService.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs index 95220eb33..a7110f446 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs @@ -238,6 +238,11 @@ namespace IRaCIS.Core.Application.Service return ResponseOutput.NotOk("问题序号存在重复!"); } + if (await _trialClinicalQuestionRepository.AnyAsync(x => x.TrialClinicalId == inDto.TrialClinicalId && x.Id != inDto.Id && x.IsCheckDate == inDto.IsCheckDate&&inDto.IsCheckDate)) + { + return ResponseOutput.NotOk("已经添加过类型为检查日期的问题!"); + } + var entity = await _trialClinicalQuestionRepository.InsertOrUpdateAsync(inDto, true); return ResponseOutput.Ok(entity.Id.ToString()); @@ -325,6 +330,10 @@ namespace IRaCIS.Core.Application.Service { return ResponseOutput.NotOk("问题序号存在重复!"); } + if (await _systemClinicalQuestionRepository.AnyAsync(x => x.SystemClinicalId == inDto.SystemClinicalId && x.Id != inDto.Id && x.IsCheckDate == inDto.IsCheckDate && inDto.IsCheckDate)) + { + return ResponseOutput.NotOk("已经添加过类型为检查日期的问题!"); + } var entity = await _systemClinicalQuestionRepository.InsertOrUpdateAsync(inDto, true); return ResponseOutput.Ok(entity.Id.ToString()); From fb94e1cf6c646afe3ea5f6bf550a4ad194c566e7 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Fri, 14 Jul 2023 11:21:59 +0800 Subject: [PATCH 30/33] S-63 --- .../Service/Reading/ClinicalData/ClinicalAnswerService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index 10c10b707..261ca8a12 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -358,7 +358,7 @@ namespace IRaCIS.Core.Application.Service ReadingId = inDto.ReadingId, }; - if (await _readModuleCriterionFromRepository.AnyAsync(x => x.ClinicalFormId == inDto.ClinicalFormId?default(Guid))) + if (inDto.ClinicalFormId!=null&&(await _readModuleCriterionFromRepository.AnyAsync(x => x.ClinicalFormId == inDto.ClinicalFormId.Value))) { throw new BusinessValidationFailedException("当前表单已确认,无法修改!"); } From fd1376901033295fa16b1aee1e2e1503f0a8c63a Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Fri, 14 Jul 2023 13:40:02 +0800 Subject: [PATCH 31/33] S-64 --- IRaCIS.Core.API/wwwroot/swagger/ui/abp.swagger.js | 4 ++-- IRaCIS.Core.Application/IRaCIS.Core.Application.xml | 5 +++++ .../Service/Reading/ClinicalData/ClinicalDataSetService.cs | 2 ++ .../Service/Reading/ClinicalData/ClinicalQuestionService.cs | 1 + 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.API/wwwroot/swagger/ui/abp.swagger.js b/IRaCIS.Core.API/wwwroot/swagger/ui/abp.swagger.js index eb708cbbd..30ec9c833 100644 --- a/IRaCIS.Core.API/wwwroot/swagger/ui/abp.swagger.js +++ b/IRaCIS.Core.API/wwwroot/swagger/ui/abp.swagger.js @@ -414,8 +414,8 @@ var abp = abp || {}; //Inputs createInput(modalUxContent, 'tenancyName', 'Tenancy Name (Leave empty for Host)'); - createInput(modalUxContent, 'userName', 'Username or email address','text','admin'); - createInput(modalUxContent, 'password', 'Password','password'); + createInput(modalUxContent, 'userName', 'Username or email address','text','cyldev'); + createInput(modalUxContent, 'password', 'Password','password','123456'); //Buttons var authBtnWrapper = document.createElement('div'); diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 6a15dec63..68e3841c2 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -3166,6 +3166,11 @@ 最大长度 + + + 最大行数 + + 临床数据选项类型(无,自定义) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs index 110f6c134..82ca5b6c0 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs @@ -144,6 +144,8 @@ namespace IRaCIS.Application.Services .WhereIf(indto.Id != null, x => x.Id != indto.Id) .Where(x => x.ClinicalDataSetName == indto.ClinicalDataSetName||x.ClinicalDataSetEnName==indto.ClinicalDataSetEnName); + + if (await existsQuery.AnyAsync()) { //---存在同类型的临床数据,操作失败 diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs index a7110f446..cfab3edde 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs @@ -303,6 +303,7 @@ namespace IRaCIS.Core.Application.Service { var systemClinicalQuestionQueryable = _systemClinicalQuestionRepository + .Where(x=>x.SystemClinicalId==inQuery.SystemClinicalId) .WhereIf(!inQuery.QuestionName.IsNullOrEmpty(), x => x.QuestionName.Contains(inQuery.QuestionName) || x.QuestionEnName.Contains(inQuery.QuestionName)) .ProjectTo(_mapper.ConfigurationProvider); var pageList = await systemClinicalQuestionQueryable From 4f5d817789b734b221038d49d1df131b10a3b933 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Fri, 14 Jul 2023 16:19:17 +0800 Subject: [PATCH 32/33] =?UTF-8?q?S-65=20=E7=A1=AE=E8=AE=A4=E5=B0=B1?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E6=A0=87=E5=87=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/TrialSiteUser/TrialConfigService.cs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs index 8298f8838..f55a50abf 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs @@ -203,6 +203,7 @@ namespace IRaCIS.Core.Application [HttpPost] public async Task AsyncTrialCriterionDictionary(AsyncTrialCriterionDictionaryInDto inDto) { + var trialCriterion = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == inDto.TrialReadingCriterionId).FirstNotNullAsync(); if (trialCriterion.ReadingQuestionCriterionSystemId != null) @@ -1041,9 +1042,17 @@ namespace IRaCIS.Core.Application //}); ; + var result = await _repository.SaveChangesAsync(); - - return ResponseOutput.Ok(await _repository.SaveChangesAsync()); + var criterionTrialList = await _readingQuestionCriterionTrialRepository.Where(x => x.TrialId == trialConfig.TrialId&&x.ReadingQuestionCriterionSystemId!=null&&x.SynchronizeOriginalTime==null).ToListAsync(); + foreach (var item in criterionTrialList) + { + await AsyncTrialCriterionDictionary(new AsyncTrialCriterionDictionaryInDto() + { + TrialReadingCriterionId = item.Id + }); + } + return ResponseOutput.Ok(result); } /// From b44f79ab6093da9fa6fb5f5a18438ccd002f8122 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Fri, 14 Jul 2023 16:20:19 +0800 Subject: [PATCH 33/33] =?UTF-8?q?S-66=20=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/TrialSiteUser/TrialConfigService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs index f55a50abf..4ef7ba51a 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs @@ -1044,7 +1044,7 @@ namespace IRaCIS.Core.Application var result = await _repository.SaveChangesAsync(); - var criterionTrialList = await _readingQuestionCriterionTrialRepository.Where(x => x.TrialId == trialConfig.TrialId&&x.ReadingQuestionCriterionSystemId!=null&&x.SynchronizeOriginalTime==null).ToListAsync(); + var criterionTrialList = await _readingQuestionCriterionTrialRepository.Where(x =>x.IsConfirm&& x.TrialId == trialConfig.TrialId&&x.ReadingQuestionCriterionSystemId!=null&&x.SynchronizeOriginalTime==null).ToListAsync(); foreach (var item in criterionTrialList) { await AsyncTrialCriterionDictionary(new AsyncTrialCriterionDictionaryInDto()