From b3697c1e21c27e30a14e5c1a488729ad8a5d22e2 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 5 Jul 2023 12:57:59 +0800 Subject: [PATCH 01/29] =?UTF-8?q?S-006=20=E4=B8=B4=E5=BA=8A=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../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 5ee443924..6bf41c01a 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -556,7 +556,7 @@ namespace IRaCIS.Core.Application.Service public async Task> GetClinicalTableList(GetClinicalTableListInDto inDto) { - var readModule=await _readModuleRepository.Where(x => x.Id == inDto.ReadModuleId).FirstNotNullAsync(): + var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadModuleId).FirstNotNullAsync(); var confirmList = (await this.GetCRCConfirmList(new GetCRCConfirmListInDto() { From 560f58a7b37cefe3f8ca814608ececc39a06419f Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 5 Jul 2023 13:51:32 +0800 Subject: [PATCH 02/29] S-007 --- .../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 6bf41c01a..3b2d051fa 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -556,7 +556,7 @@ namespace IRaCIS.Core.Application.Service public async Task> GetClinicalTableList(GetClinicalTableListInDto inDto) { - var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadModuleId).FirstNotNullAsync(); + var readModule=await _readModuleRepository.Where(x => x.Id == inDto.ReadModuleId).FirstNotNullAsync(); var confirmList = (await this.GetCRCConfirmList(new GetCRCConfirmListInDto() { @@ -591,7 +591,7 @@ namespace IRaCIS.Core.Application.Service var ClinicalFormIds= answers.Where(y => y.ClinicalDataTrialSetId == x).OrderBy(x => x.CheckDate).Select(x => x.ClinicalFormId).Distinct().ToList(); ClinicalFormIds.ForEach(z => { - var dic = answers.Where(y => y.ClinicalDataTrialSetId == x).OrderBy(y => y.CheckDate).ToDictionary(x => x.QuestionId.ToString(), x => x.Answer); + var dic = answers.Where(y => y.ClinicalFormId == z).OrderBy(y => y.CheckDate).ToDictionary(x => x.QuestionId.ToString(), x => x.Answer); dic.Add("ClinicalFormId", z.ToString()); dic.Add("TrialId", inDto.TrialId.ToString()); dic.Add("SubjectId", readModule.SubjectId.ToString()); From 5354d3b9dc7f3976b4e494428b1d9177485ed96c Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 5 Jul 2023 14:49:19 +0800 Subject: [PATCH 03/29] S-008 --- .../ClinicalData/ClinicalAnswerService.cs | 21 ++++++++++++------- .../Service/Reading/Dto/ClinicalAnswerDto.cs | 14 +++++++++++-- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index 3b2d051fa..9e362604b 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -449,6 +449,7 @@ namespace IRaCIS.Core.Application.Service IsPMConfirm = x.IsPMConfirm, SubjectCode = x.Subject.Code, ReadModuleId = x.Id, + ModuleName=x.ModuleName, }); @@ -553,7 +554,7 @@ namespace IRaCIS.Core.Application.Service /// /// [HttpPost] - public async Task> GetClinicalTableList(GetClinicalTableListInDto inDto) + public async Task<(List,object)> GetClinicalTableList(GetClinicalTableListInDto inDto) { var readModule=await _readModuleRepository.Where(x => x.Id == inDto.ReadModuleId).FirstNotNullAsync(); @@ -585,6 +586,7 @@ namespace IRaCIS.Core.Application.Service List result = new List(); clinicalDataTrialSetIds.ForEach(x => { GetClinicalTableListOutDto dto = new GetClinicalTableListOutDto(); + dto.ModuleName = readModule.ModuleName; dto.ClinicalDataSetName = confirmList.Where(y => y.ClinicalDataTrialSetId == x).Select(y => y.ClinicalDataSetName).First(); dto.QuestionList = questionList.Where(y => y.TrialClinicalId == x).OrderBy(y => y.ShowOrder).ToList(); dto.AnswerList = new List>(); @@ -602,9 +604,12 @@ namespace IRaCIS.Core.Application.Service }); result.Add(dto); }); - return result; + return (result, new + { + readModule.ModuleName, + }); - } + } /// @@ -613,9 +618,10 @@ namespace IRaCIS.Core.Application.Service /// /// [HttpPost] - public async Task> GetClinicalDateList(GetCRCBeConfirmListInDto inDto) + public async Task<(List,object)> GetClinicalDateList(GetCRCBeConfirmListInDto inDto) { - var confirmList = (await this.GetCRCConfirmList(new GetCRCConfirmListInDto() + var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadModuleId).FirstNotNullAsync(); + var confirmList = (await this.GetCRCConfirmList(new GetCRCConfirmListInDto() { ReadModuleId = inDto.ReadModuleId, TrialId = inDto.TrialId, @@ -633,7 +639,6 @@ namespace IRaCIS.Core.Application.Service result.Add(new GetClinicalDateListOutDto() { - ClinicalDataSetName = confirmList.Where(y => y.ClinicalDataTrialSetId == x).Select(y => y.ClinicalDataSetName).First(), DateList = confirmList.Where(y => y.ClinicalDataTrialSetId == x).ToList() @@ -641,7 +646,9 @@ namespace IRaCIS.Core.Application.Service }); - return result; + return (result,new { + readModule.ModuleName, + }); } /// diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs index f94ede42a..df49631cd 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs @@ -145,7 +145,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public class GetClinicalTableListOutDto: GetClinicalQuestionAnswerListOutDto { public string ClinicalDataSetName { get; set; } - } + + /// + /// 模块名称 + /// + public string ModuleName { get; set; } + } public class GetCRCBeConfirm: GetCRCBeConfirmListOutDto @@ -210,7 +215,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public Guid SubjectId { get; set; } public Guid ReadModuleId { get; set; } - public bool IsPMConfirm { get; set; } + /// + /// 模块名称 + /// + public string ModuleName { get; set; } + + public bool IsPMConfirm { get; set; } public ReadingSetType ReadingSetType { get; set; } From 274e4fdccef6b2fee20449ce741c4ef203fe6c6e Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 5 Jul 2023 14:49:53 +0800 Subject: [PATCH 04/29] S-009 --- IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs index df49631cd..032abb073 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs @@ -122,6 +122,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto { public string ClinicalDataSetName { get; set; } + public List DateList { get; set; } } From 8364b00d3fb91859d1e5a8c57f511061d2b5e29d Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 5 Jul 2023 15:34:14 +0800 Subject: [PATCH 05/29] S-010 --- .../ClinicalData/ClinicalAnswerService.cs | 19 +++++++++++++++++-- .../Service/Reading/Dto/ClinicalAnswerDto.cs | 18 ++++++++++++------ .../ClinicalQuestionAnswer/ClinicalForm.cs | 5 ----- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index 9e362604b..8149f0f61 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -199,7 +199,10 @@ namespace IRaCIS.Core.Application.Service SubjectId=x.SubjectId, SubjectCode=x.Subject.Code, TrialId=inDto.TrialId, - ClinicalDataTrialSetId = x.ClinicalDataTrialSet.Id, + ClinicalDataLevel= x.ClinicalDataTrialSet.ClinicalDataLevel, + ClinicalUploadType= x.ClinicalDataTrialSet.ClinicalUploadType, + + ClinicalDataTrialSetId = x.ClinicalDataTrialSet.Id, ClinicalDataSetEnName= x.ClinicalDataTrialSet.ClinicalDataSetEnName, ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName, }); @@ -320,8 +323,20 @@ namespace IRaCIS.Core.Application.Service TrialId= inDto.TrialId, Id = inDto.ClinicalFormId ?? NewId.NextGuid(), ReadingId = inDto.ReadingId, - VisitId = inDto.VisitId, }; + + + var existsClinical = await _clinicalFormRepository.Where(x => + 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(); + + if (existsClinical) + { + throw new BusinessValidationFailedException("已经添加过临床数据,不允许多次添加!"); + } try { var checkDateQuestionId = await _trialClinicalQuestionRepository.Where(x => x.TrialClinicalId == inDto.ClinicalDataTrialSetId && x.IsCheckDate).Select(x => x.Id).FirstNotNullAsync(); diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs index 032abb073..135fbd8f3 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs @@ -30,7 +30,18 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public Guid TrialId { get; set; } - public string SubjectCode { get; set; } + /// + /// 临床级别 + /// + public ClinicalLevel ClinicalDataLevel { get; set; } + + + /// + /// 上传方式 + /// + public ClinicalUploadType ClinicalUploadType { get; set; } + + public string SubjectCode { get; set; } public Guid ClinicalDataTrialSetId { get; set; } public string ClinicalDataSetName { get; set; } @@ -259,11 +270,6 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto } public class SubmitClinicalFormInDto { - /// - /// VisitId - /// - public Guid? VisitId { get; set; } - /// /// VisitId /// diff --git a/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalForm.cs b/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalForm.cs index f41eb924f..1d052b9f9 100644 --- a/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalForm.cs +++ b/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalForm.cs @@ -44,11 +44,6 @@ namespace IRaCIS.Core.Domain.Models /// public Guid ClinicalDataTrialSetId { get; set; } - /// - /// VisitId - /// - public Guid? VisitId { get; set; } - /// /// VisitId /// From 13abd86be05990630a2d6056efbecf1798b7fa80 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 5 Jul 2023 15:51:41 +0800 Subject: [PATCH 06/29] S-011 --- .../Service/Reading/ClinicalData/ClinicalAnswerService.cs | 2 +- .../Service/Reading/Dto/ClinicalAnswerDto.cs | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index 8149f0f61..220f7e036 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -201,7 +201,7 @@ namespace IRaCIS.Core.Application.Service TrialId=inDto.TrialId, ClinicalDataLevel= x.ClinicalDataTrialSet.ClinicalDataLevel, ClinicalUploadType= x.ClinicalDataTrialSet.ClinicalUploadType, - + BaseLineVisitId= x.Subject.SubjectVisitList.Where(x=>x.IsBaseLine).Select(x=>x.Id).FirstOrDefault(), ClinicalDataTrialSetId = x.ClinicalDataTrialSet.Id, ClinicalDataSetEnName= x.ClinicalDataTrialSet.ClinicalDataSetEnName, ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName, diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs index 135fbd8f3..d6cbd9132 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs @@ -36,6 +36,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public ClinicalLevel ClinicalDataLevel { get; set; } + public Guid? BaseLineVisitId { get; set; } + /// /// 上传方式 /// From e2cdbb7580a408b68155b80ec8ab873d6b283bc1 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 5 Jul 2023 16:33:27 +0800 Subject: [PATCH 07/29] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/InspectionController.cs | 22 +++++++++++++++++++ .../ClinicalData/ClinicalAnswerService.cs | 19 ++++++++++++++++ .../Service/Reading/Dto/ClinicalAnswerDto.cs | 9 +++++++- .../Interface/IClinicalAnswerService.cs | 4 +++- 4 files changed, 52 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.API/Controllers/InspectionController.cs b/IRaCIS.Core.API/Controllers/InspectionController.cs index defe64133..643b0b1a1 100644 --- a/IRaCIS.Core.API/Controllers/InspectionController.cs +++ b/IRaCIS.Core.API/Controllers/InspectionController.cs @@ -11,6 +11,7 @@ using IRaCIS.Core.Application.Service; using IRaCIS.Core.Application.Service.Inspection.DTO; using IRaCIS.Core.Application.Service.Inspection.Interface; using IRaCIS.Core.Application.Service.Reading.Dto; +using IRaCIS.Core.Application.Service.Reading.Interface; using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Share; @@ -36,6 +37,7 @@ namespace IRaCIS.Core.API.Controllers private readonly IHttpContextAccessor _httpContext; private readonly ITrialConfigService _trialConfigService; private readonly INoneDicomStudyService _noneDicomStudyService; + private readonly IClinicalAnswerService _clinicalAnswerService; private readonly ISubjectService _subjectService; private readonly IReadingClinicalDataService _readingClinicalDataService; private readonly ISubjectVisitService _subjectVisitService; @@ -62,6 +64,7 @@ namespace IRaCIS.Core.API.Controllers IReadingMedicineQuestionService readingMedicineQuestionService, ITrialConfigService _trialConfigService, INoneDicomStudyService noneDicomStudyService, + IClinicalAnswerService clinicalAnswerService, ISubjectService _subjectService, IReadingClinicalDataService _readingClinicalDataService, ISubjectVisitService subjectVisitService, @@ -82,6 +85,7 @@ namespace IRaCIS.Core.API.Controllers this._httpContext = httpContext; this._trialConfigService = _trialConfigService; this._noneDicomStudyService = noneDicomStudyService; + this._clinicalAnswerService = clinicalAnswerService; this._subjectService = _subjectService; this._readingClinicalDataService = _readingClinicalDataService; this._subjectVisitService = subjectVisitService; @@ -233,6 +237,24 @@ namespace IRaCIS.Core.API.Controllers } + /// + /// CRC签名临床数据 + /// + /// + /// + [HttpPost, Route("Inspection/ClinicalAnswer/CRCSignClinicalData")] + [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] + + [UnitOfWork] + public async Task CRCSignClinicalData(DataInspectionDto opt) + { + var singid = await _inspectionService.RecordSing(opt.SignInfo); + var result = await _clinicalAnswerService.CRCSignClinicalData(opt.Data); + await _inspectionService.CompletedSign(singid, result); + return result; + } + + /// /// 提交阅片裁判问题 /// diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index 220f7e036..24e53968a 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -87,6 +87,25 @@ namespace IRaCIS.Core.Application.Service _iClinicalQuestionService = iClinicalQuestionService; } + /// + /// CRC签名临床数据 + /// + /// + /// + [HttpPost] + public async Task CRCSignClinicalData(CRCSignClinicalDataInDto inDto) + { + + await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(x =>x.Id==inDto.ReadingClinicalDataId, x => new ReadingClinicalData() + { + IsSign = true, + ReadingClinicalDataState = ReadingClinicalDataStatus.HaveSigned + }); + + await _readingClinicalDataRepository.SaveChangesAsync(); + return ResponseOutput.Ok(true); + } + /// /// 自动添加CRC临床数据 /// diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs index d6cbd9132..aac6cfa29 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs @@ -8,6 +8,10 @@ using System.Threading.Tasks; namespace IRaCIS.Core.Application.Service.Reading.Dto { + public class CRCSignClinicalDataInDto + { + public Guid ReadingClinicalDataId { get; set; } + } public class AutoAddClinicalInDto { public Guid? SubjectId { get; set; } @@ -28,7 +32,10 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto { public Guid SubjectId { get; set; } - public Guid TrialId { get; set; } + public Guid ReadingClinicalDataId { get; set; } + + + public Guid TrialId { get; set; } /// /// 临床级别 diff --git a/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs index 29775bb1f..2d251a4da 100644 --- a/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs @@ -9,6 +9,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Interface { public interface IClinicalAnswerService { - Task AutoAddCRCClinical(AutoAddClinicalInDto inDto); + Task CRCSignClinicalData(CRCSignClinicalDataInDto inDto); + + Task AutoAddCRCClinical(AutoAddClinicalInDto inDto); } } From 4c6315f2a5055982a7c20d72a0aada2290d8b539 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 5 Jul 2023 16:51:11 +0800 Subject: [PATCH 08/29] S-13 --- .../Service/Reading/ClinicalData/ClinicalAnswerService.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index 24e53968a..68fef00a2 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -218,7 +218,8 @@ namespace IRaCIS.Core.Application.Service SubjectId=x.SubjectId, SubjectCode=x.Subject.Code, TrialId=inDto.TrialId, - ClinicalDataLevel= x.ClinicalDataTrialSet.ClinicalDataLevel, + ReadingClinicalDataId=x.Id, + ClinicalDataLevel = x.ClinicalDataTrialSet.ClinicalDataLevel, ClinicalUploadType= x.ClinicalDataTrialSet.ClinicalUploadType, BaseLineVisitId= x.Subject.SubjectVisitList.Where(x=>x.IsBaseLine).Select(x=>x.Id).FirstOrDefault(), ClinicalDataTrialSetId = x.ClinicalDataTrialSet.Id, From 6dbfda36eecd373f8816eb9ee3fc969d1bad0e6c Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 5 Jul 2023 17:50:31 +0800 Subject: [PATCH 09/29] S_014 --- .../ClinicalData/ClinicalAnswerService.cs | 38 +++++++++++++++---- .../Service/Reading/Dto/ClinicalAnswerDto.cs | 13 ++++++- .../DTO/PersonalWorkstationViewModel.cs | 4 ++ .../TrialSiteUser/PersonalWorkstation.cs | 27 +++++++++++++ .../Reading/ReadingPeriod/ReadModule.cs | 12 ++++-- IRaCIS.Core.Domain/Trial/Trial.cs | 2 + 6 files changed, 84 insertions(+), 12 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index 68fef00a2..be0fdf01a 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -462,17 +462,41 @@ namespace IRaCIS.Core.Application.Service return ResponseOutput.Ok(true); } - /// - /// 获取CRC确认列表 - /// - /// - /// - [HttpPost] + /// + /// 获取PM待确认列表 + /// + /// + /// + [HttpPost] + public async Task> GetPMConfirmList(GetPMConfirmListInDto inDto) + { + return await GetCRCConfirmList(new GetCRCConfirmListInDto() + { + TrialId = inDto.TrialId, + IsCRCConfirm = true, + IsPMConfirm = false, + PageIndex = inDto.PageIndex, + PageSize = inDto.PageSize, + Asc = inDto.Asc, + SortField = inDto.SortField, + TrialReadingCriterionId = inDto.TrialReadingCriterionId + + }); + } + + /// + /// 获取CRC确认列表 + /// + /// + /// + [HttpPost] public async Task> GetCRCConfirmList(GetCRCConfirmListInDto inDto) { var query = _readModuleRepository.Where(x => x.TrialId == inDto.TrialId) .WhereIf(inDto.ReadModuleId != null, x => x.Id == inDto.ReadModuleId) - .WhereIf(inDto.TrialReadingCriterionId != null, x => x.TrialReadingCriterionId == inDto.TrialReadingCriterionId) + .WhereIf(inDto.IsCRCConfirm != null, x => x.IsCRCConfirm == inDto.IsCRCConfirm) + .WhereIf(inDto.IsPMConfirm != null, x => x.IsCRCConfirm == inDto.IsPMConfirm) + .WhereIf(inDto.TrialReadingCriterionId != null, x => x.TrialReadingCriterionId == inDto.TrialReadingCriterionId) .WhereIf(inDto.SubjectId != null, x => x.SubjectId == inDto.SubjectId) .Select(x => new GetCRCConfirmListOutDto() { diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs index aac6cfa29..e8e10dee6 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs @@ -119,10 +119,21 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public string Answer { get; set; } = string.Empty; } + public class GetPMConfirmListInDto: PageInput + { + public Guid TrialId { get; set; } + + public Guid TrialReadingCriterionId { get; set; } + } + public class GetCRCConfirmListInDto:PageInput { - public Guid? TrialReadingCriterionId { get; set; } + public bool? IsCRCConfirm { get; set; } + + public bool? IsPMConfirm { get; set; } + + public Guid? TrialReadingCriterionId { get; set; } public Guid? SubjectId { get; set; } diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs index 5f446672e..e7022b3b6 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs @@ -105,6 +105,10 @@ namespace IRaCIS.Core.Application.Contracts public int? ToBeApprovalCount { get; set; } } + public class GetPMClinicalDataToBeDoneListOutDto: TrialBaseInfoDto + { + public int? ToBeApprovalCount { get; set; } + } public class ReviewerSelectToBeDoneQuery : PageInput { diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs index a5e088ad0..881156a8f 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs @@ -294,6 +294,33 @@ namespace IRaCIS.Core.Application } + /// + /// 获取PM核对临床数据 + /// + /// + /// + [HttpPost] + public async Task>> GetPMClinicalDataToBeDoneList(ReviewerSelectToBeDoneQuery inQuery) + { + var query = _trialRepository + .Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id)) + .Select(t => new GetPMClinicalDataToBeDoneListOutDto() + { + TrialId = t.Id, + ResearchProgramNo = t.ResearchProgramNo, + ExperimentName = t.ExperimentName, + TrialCode = t.TrialCode, + + + ToBeApprovalCount = t.ReadModuleList.Where(u => u.IsCRCConfirm&&!u.IsPMConfirm).Count() + }); + + var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrEmpty(inQuery.SortField) ? nameof(ReviewerSelectToBeDoneDto.TrialId) : inQuery.SortField, inQuery.Asc); + + + return ResponseOutput.Ok(result, new { ToBeApprovalCount = query.Sum(x=>x.ToBeApprovalCount) }); ; + } + #endregion diff --git a/IRaCIS.Core.Domain/Reading/ReadingPeriod/ReadModule.cs b/IRaCIS.Core.Domain/Reading/ReadingPeriod/ReadModule.cs index fba287340..1be9cb363 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingPeriod/ReadModule.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingPeriod/ReadModule.cs @@ -119,11 +119,15 @@ namespace IRaCIS.Core.Domain.Models [ForeignKey("SubjectVisitId")] public SubjectVisit SubjectVisit { get; set; } + [JsonIgnore] + [ForeignKey("TrialId")] + public Trial Trial { get; set; } - /// - /// 阅片配置的类型 - /// - public ReadingSetType ReadingSetType { get; set; } + + /// + /// 阅片配置的类型 + /// + public ReadingSetType ReadingSetType { get; set; } diff --git a/IRaCIS.Core.Domain/Trial/Trial.cs b/IRaCIS.Core.Domain/Trial/Trial.cs index 86afacb29..bc38a6392 100644 --- a/IRaCIS.Core.Domain/Trial/Trial.cs +++ b/IRaCIS.Core.Domain/Trial/Trial.cs @@ -53,6 +53,8 @@ namespace IRaCIS.Core.Domain.Models public List TrialSiteList { get; set; } = new List(); [JsonIgnore] public List TrialSiteUserList { get; set; } = new List(); + [JsonIgnore] + public List ReadModuleList { get; set; } = new List(); public Guid IndicationTypeId { get; set; } = Guid.Empty; From 090868b2997de1e768ad45be0ada2ccc10657364 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 5 Jul 2023 18:31:09 +0800 Subject: [PATCH 10/29] S-15 --- IRaCIS.Core.API/IRaCIS.Core.API.xml | 7 +++ .../IRaCIS.Core.Application.xml | 60 +++++++++++++++++-- .../DTO/PersonalWorkstationViewModel.cs | 1 - .../TrialSiteUser/PersonalWorkstation.cs | 22 +++++-- 4 files changed, 80 insertions(+), 10 deletions(-) diff --git a/IRaCIS.Core.API/IRaCIS.Core.API.xml b/IRaCIS.Core.API/IRaCIS.Core.API.xml index 045a819ce..2b021e5a2 100644 --- a/IRaCIS.Core.API/IRaCIS.Core.API.xml +++ b/IRaCIS.Core.API/IRaCIS.Core.API.xml @@ -139,6 +139,13 @@ + + + CRC签名临床数据 + + + + 提交阅片裁判问题 diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 8ec9ae1cf..09ffad060 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -2499,6 +2499,13 @@ 临床答案 + + + CRC签名临床数据 + + + + 自动添加CRC临床数据 @@ -2542,6 +2549,13 @@ + + + 获取PM待确认列表 + + + + 获取CRC确认列表 @@ -2556,6 +2570,20 @@ + + + 获取临床数据表格信息 查看没有表格问题的列表 + + + + + + + 获取临床数据表格信息 查看有表格问题的列表 + + + + CRC 确认临床数据 @@ -2738,6 +2766,21 @@ + + + 临床级别 + + + + + 上传方式 + + + + + 模块名称 + + 临床级别 @@ -2748,16 +2791,16 @@ 受试者ID + + + 模块名称 + + 最晚拍片日期 - - - VisitId - - VisitId @@ -10687,6 +10730,13 @@ vvv + + + 获取PM核对临床数据 + + + + SPM 阅片人筛选 diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs index e7022b3b6..33ccd99e4 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs @@ -112,7 +112,6 @@ namespace IRaCIS.Core.Application.Contracts public class ReviewerSelectToBeDoneQuery : PageInput { - } public class ReviewerSelectToBeDoneDto : TrialBaseInfoDto diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs index 881156a8f..e58ce76c2 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs @@ -21,15 +21,19 @@ namespace IRaCIS.Core.Application private readonly IRepository _trialUserRepository; private readonly IRepository _trialDocumentRepository; private readonly IRepository _systemDocumentRepository; + private readonly IRepository _readModuleRepository; private readonly IRepository _systemNoticeRepository; public PersonalWorkstation(IRepository trialRepository, IRepository trialUserRepository, IRepository trialDocumentRepository, - IRepository systemDocumentRepository, IRepository systemNoticeRepository) + IRepository systemDocumentRepository, + IRepository readModuleRepository, + IRepository systemNoticeRepository) { _trialRepository = trialRepository; _trialUserRepository = trialUserRepository; _trialDocumentRepository = trialDocumentRepository; _systemDocumentRepository = systemDocumentRepository; + this._readModuleRepository = readModuleRepository; _systemNoticeRepository = systemNoticeRepository; } @@ -302,8 +306,9 @@ namespace IRaCIS.Core.Application [HttpPost] public async Task>> GetPMClinicalDataToBeDoneList(ReviewerSelectToBeDoneQuery inQuery) { + var query = _trialRepository - .Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id)) + .Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id)) .Select(t => new GetPMClinicalDataToBeDoneListOutDto() { TrialId = t.Id, @@ -317,8 +322,17 @@ namespace IRaCIS.Core.Application var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrEmpty(inQuery.SortField) ? nameof(ReviewerSelectToBeDoneDto.TrialId) : inQuery.SortField, inQuery.Asc); - - return ResponseOutput.Ok(result, new { ToBeApprovalCount = query.Sum(x=>x.ToBeApprovalCount) }); ; + + var all =await _trialRepository + .Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id)) + .Select(t => new GetPMClinicalDataToBeDoneListOutDto() + { + + + ToBeApprovalCount = t.ReadModuleList.Where(u => u.IsCRCConfirm && !u.IsPMConfirm).Count() + }).ToListAsync(); + + return ResponseOutput.Ok(result, new { ToBeApprovalCount = all.Sum(x=>x.ToBeApprovalCount) }); ; } #endregion From 24d7912f1fb06da655f9ef3055ba241c1f260b47 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 6 Jul 2023 09:16:16 +0800 Subject: [PATCH 11/29] S-16 --- .../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 be0fdf01a..1ec1da009 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -495,7 +495,7 @@ namespace IRaCIS.Core.Application.Service var query = _readModuleRepository.Where(x => x.TrialId == inDto.TrialId) .WhereIf(inDto.ReadModuleId != null, x => x.Id == inDto.ReadModuleId) .WhereIf(inDto.IsCRCConfirm != null, x => x.IsCRCConfirm == inDto.IsCRCConfirm) - .WhereIf(inDto.IsPMConfirm != null, x => x.IsCRCConfirm == inDto.IsPMConfirm) + .WhereIf(inDto.IsPMConfirm != null, x => x.IsPMConfirm == inDto.IsPMConfirm) .WhereIf(inDto.TrialReadingCriterionId != null, x => x.TrialReadingCriterionId == inDto.TrialReadingCriterionId) .WhereIf(inDto.SubjectId != null, x => x.SubjectId == inDto.SubjectId) .Select(x => new GetCRCConfirmListOutDto() From 48f386546e691b05d60e3bea7c45ef0da3fcc9a5 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 6 Jul 2023 09:38:05 +0800 Subject: [PATCH 12/29] S-17 --- .../Controllers/InspectionController.cs | 17 +++++++++++++++++ .../Reading/Interface/IClinicalAnswerService.cs | 5 ++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.API/Controllers/InspectionController.cs b/IRaCIS.Core.API/Controllers/InspectionController.cs index 643b0b1a1..33736e5b7 100644 --- a/IRaCIS.Core.API/Controllers/InspectionController.cs +++ b/IRaCIS.Core.API/Controllers/InspectionController.cs @@ -254,6 +254,23 @@ namespace IRaCIS.Core.API.Controllers return result; } + /// + /// PM确认临床数据 + /// + /// + /// + [HttpPost, Route("Inspection/ClinicalAnswer/PMConfirmClinical")] + [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] + + [UnitOfWork] + public async Task PMConfirmClinical(DataInspectionDto opt) + { + var singid = await _inspectionService.RecordSing(opt.SignInfo); + var result = await _clinicalAnswerService.PMConfirmClinical(opt.Data); + await _inspectionService.CompletedSign(singid, result); + return result; + } + /// /// 提交阅片裁判问题 diff --git a/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs index 2d251a4da..bcb350355 100644 --- a/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs @@ -12,5 +12,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Interface Task CRCSignClinicalData(CRCSignClinicalDataInDto inDto); Task AutoAddCRCClinical(AutoAddClinicalInDto inDto); - } + + Task PMConfirmClinical(CRCConfirmClinicalInDto inDto); + + } } From 8a174711f4fb45784fc117da6bf3bcf0471234bb Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 6 Jul 2023 10:11:23 +0800 Subject: [PATCH 13/29] S-18 --- .../Reading/ClinicalData/ClinicalAnswerService.cs | 1 + .../Service/Reading/Dto/ClinicalAnswerDto.cs | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index 1ec1da009..1bc32c7dc 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -503,6 +503,7 @@ namespace IRaCIS.Core.Application.Service SubjectId = x.SubjectId, IsCRCConfirm = x.IsCRCConfirm, + VisitBlindName=x.SubjectVisit.BlindName, LatestScanDate = x.SubjectVisit.LatestScanDate, ReadingSetType = x.ReadingSetType, IsPMConfirm = x.IsPMConfirm, diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs index e8e10dee6..ac6517903 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs @@ -252,6 +252,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// public string ModuleName { get; set; } + public string VisitBlindName { get; set; } + public bool IsPMConfirm { get; set; } public ReadingSetType ReadingSetType { get; set; } @@ -272,8 +274,16 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// public DateTime? LatestScanDate { get; set; } + public List ClinicalNameList + { + get + { + return this.ClinicalFormList.Select(x => x.ClinicalDataSetName).Distinct().ToList() + } + } - public List ClinicalFormList { get; set; } + + public List ClinicalFormList { get; set; } public int FormCount { From d90a98c1eff8b6a7aa1dc29685a4b71d71239f83 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 6 Jul 2023 13:20:02 +0800 Subject: [PATCH 14/29] S-19 --- .../ReadingClinicalDataService.cs | 54 ++++++++++++++++++- .../Reading/Dto/ReadingClinicalDataDto.cs | 12 +++-- 2 files changed, 61 insertions(+), 5 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index 967d63a51..d0366ffb1 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -24,6 +24,7 @@ namespace IRaCIS.Application.Services private readonly IRepository _subjectVisitRepository; private readonly IRepository _previousHistoryRepository; + private readonly IRepository _readModuleCriterionFromRepository; private readonly IRepository _previousOtherRepository; private readonly IRepository _previousSurgeryRepository; private readonly IRepository _readingQuestionCriterionTrialRepository; @@ -37,7 +38,7 @@ namespace IRaCIS.Application.Services IRepository previousPDFRepository, IRepository subjectVisitRepository, IRepository previousHistoryRepository, - + IRepository readModuleCriterionFromRepository, IRepository previousOtherRepository, IRepository previousSurgeryRepository, IRepository readingQuestionCriterionTrialRepository, @@ -53,6 +54,7 @@ namespace IRaCIS.Application.Services this._previousPDFRepository = previousPDFRepository; this._subjectVisitRepository = subjectVisitRepository; this._previousHistoryRepository = previousHistoryRepository; + this._readModuleCriterionFromRepository = readModuleCriterionFromRepository; this._previousOtherRepository = previousOtherRepository; this._previousSurgeryRepository = previousSurgeryRepository; this._readingQuestionCriterionTrialRepository = readingQuestionCriterionTrialRepository; @@ -750,6 +752,56 @@ namespace IRaCIS.Application.Services }); var result = await resultQuery.ToListAsync(); + + // 这里处理CRC上传 阅片期的临床数据 + var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadingId).FirstOrDefaultAsync(); + if (readModule != null && readModule.IsCRCConfirm) + { + var clinicalDataTrialSetIds =await _readModuleCriterionFromRepository.Where(x=>x.ReadModuleId== readModule.Id).Select(x=>x.ClinicalForm.ClinicalDataTrialSetId).ToListAsync(): + + var setIds = clinicalDataTrialSetIds.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() { + + ClinicalDataLevel = x.ClinicalDataLevel, + SubjectId = inDto.SubjectId, + ReadingId = default(Guid), + ClinicalDataSetName = x.ClinicalDataSetName.LanguageName(x.ClinicalDataSetEnName, _userInfo.IsEn_Us), + ClinicalDataSetEnName = x.ClinicalDataSetEnName, + ClinicalDataTrialSetId = x.Id, + IsSign = readModule.IsPMConfirm, + ClinicalUploadType = x.ClinicalUploadType, + Id = default(Guid), + UploadRole = x.UploadRole, + IsCRCUpload = x.UploadRole == UploadRole.CRC, + IsNeedMerge=true, + ReadModuleId= readModule.Id, + //FileCount = x.FileCount, + + //ReadingClinicalDataState = x.ReadingClinicalDataState, + + //FileList = x.ReadingClinicalDataPDFList.Select(y => new GetFileDto() + //{ + // Id = y.Id, + // FileName = y.FileName, + // Path = y.Path, + // CreateTime = y.CreateTime, + //}).ToList() + + }).ToListAsync(); + + clinicalresult.ForEach(x => { + x.FileCount = setIds.Where(y => y == x.ClinicalDataTrialSetId).Count(); + 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(); return result; } diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs index 85a126ec2..a26a7c106 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs @@ -363,11 +363,15 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// public bool IsCRCUpload { get; set; } + public bool IsNeedMerge { get; set; } = false; - /// - /// 是否签名 - /// - public bool IsSign { get; set; } + public Guid ReadModuleId { get; set; } + + + /// + /// 是否签名 + /// + public bool IsSign { get; set; } /// From 7da1b40a5c0638a6ce69b55d5fb3af887dea0f41 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 6 Jul 2023 13:41:22 +0800 Subject: [PATCH 15/29] S-20 --- .../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 1bc32c7dc..789b5fa9d 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -826,7 +826,7 @@ namespace IRaCIS.Core.Application.Service await _readModuleRepository.UpdatePartialFromQueryAsync(x => inDto.ReadModuleId == x.Id, x => new ReadModule() { - IsPMConfirm = false + IsPMConfirm = true }); await _readModuleRepository.SaveChangesAsync(); From 6b318f94fd576db3e88c8739ce200acc12820cf3 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 6 Jul 2023 14:21:17 +0800 Subject: [PATCH 16/29] S-21 --- .../Controllers/InspectionController.cs | 17 +++++++++++++++++ .../ClinicalData/ClinicalAnswerService.cs | 8 +++++++- .../Reading/Interface/IClinicalAnswerService.cs | 2 ++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.API/Controllers/InspectionController.cs b/IRaCIS.Core.API/Controllers/InspectionController.cs index 33736e5b7..8018bc159 100644 --- a/IRaCIS.Core.API/Controllers/InspectionController.cs +++ b/IRaCIS.Core.API/Controllers/InspectionController.cs @@ -272,6 +272,23 @@ namespace IRaCIS.Core.API.Controllers } + /// + /// 提交结构化录入并签名 + /// + /// + /// + [HttpPost, Route("Inspection/ClinicalAnswer/SubmitClinicalFormAndSign")] + [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] + + [UnitOfWork] + public async Task SubmitClinicalFormAndSign(DataInspectionDto opt) + { + var singid = await _inspectionService.RecordSing(opt.SignInfo); + var result = await _clinicalAnswerService.SubmitClinicalForm(opt.Data); + await _inspectionService.CompletedSign(singid, result); + return result; + } + /// /// 提交阅片裁判问题 /// diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index 789b5fa9d..9baaa781f 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -431,7 +431,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 + }); + } await _clinicalFormRepository.AddAsync(clinicalForm); await _clinicalQuestionAnswerRepository.AddRangeAsync(clinicalQuestionAnswers); await _clinicalAnswerRowInfoRepository.AddRangeAsync(clinicalAnswerRowInfos); diff --git a/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs index bcb350355..f2f803ee9 100644 --- a/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs @@ -15,5 +15,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Interface Task PMConfirmClinical(CRCConfirmClinicalInDto inDto); + Task SubmitClinicalForm(SubmitClinicalFormInDto inDto); + } } From 7b27009d3125d8821783082e875c3969c3ea038b Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 6 Jul 2023 14:55:07 +0800 Subject: [PATCH 17/29] S-22 --- .../Service/Reading/ClinicalData/ClinicalAnswerService.cs | 3 ++- .../Service/Reading/Dto/ClinicalAnswerDto.cs | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index 9baaa781f..c02cd59c7 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -219,7 +219,8 @@ namespace IRaCIS.Core.Application.Service SubjectCode=x.Subject.Code, TrialId=inDto.TrialId, ReadingClinicalDataId=x.Id, - ClinicalDataLevel = x.ClinicalDataTrialSet.ClinicalDataLevel, + UploadRole = x.ClinicalDataTrialSet.UploadRole, + ClinicalDataLevel = x.ClinicalDataTrialSet.ClinicalDataLevel, ClinicalUploadType= x.ClinicalDataTrialSet.ClinicalUploadType, BaseLineVisitId= x.Subject.SubjectVisitList.Where(x=>x.IsBaseLine).Select(x=>x.Id).FirstOrDefault(), ClinicalDataTrialSetId = x.ClinicalDataTrialSet.Id, diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs index ac6517903..c586155d2 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs @@ -34,8 +34,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public Guid ReadingClinicalDataId { get; set; } - - public Guid TrialId { get; set; } + /// + /// 上传角色 + /// + public UploadRole UploadRole { get; set; } + public Guid TrialId { get; set; } /// /// 临床级别 From 313e07de435fb3c3f66abe784ca2a7d169350ea2 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 6 Jul 2023 14:58:06 +0800 Subject: [PATCH 18/29] S-23 --- .../Service/Reading/ClinicalData/ReadingClinicalDataService.cs | 2 +- .../Service/Reading/Dto/ClinicalAnswerDto.cs | 2 +- 2 files 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 d0366ffb1..c6a0f8d26 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -757,7 +757,7 @@ namespace IRaCIS.Application.Services var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadingId).FirstOrDefaultAsync(); if (readModule != null && readModule.IsCRCConfirm) { - var clinicalDataTrialSetIds =await _readModuleCriterionFromRepository.Where(x=>x.ReadModuleId== readModule.Id).Select(x=>x.ClinicalForm.ClinicalDataTrialSetId).ToListAsync(): + var clinicalDataTrialSetIds = await _readModuleCriterionFromRepository.Where(x => x.ReadModuleId == readModule.Id).Select(x => x.ClinicalForm.ClinicalDataTrialSetId).ToListAsync(); var setIds = clinicalDataTrialSetIds.Distinct().ToList(); var clinicalresult = await _clinicalDataTrialSetRepository.Where(x => x.UploadRole == UploadRole.CRC && (x.ClinicalDataLevel == ClinicalLevel.OncologyRead || x.ClinicalDataLevel == ClinicalLevel.ImageRead)) diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs index c586155d2..47829d49b 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs @@ -281,7 +281,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto { get { - return this.ClinicalFormList.Select(x => x.ClinicalDataSetName).Distinct().ToList() + return this.ClinicalFormList.Select(x => x.ClinicalDataSetName).Distinct().ToList(); } } From 790b69d0a6c4dae1f04a5ca28d84645e839e9ee8 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 6 Jul 2023 15:13:58 +0800 Subject: [PATCH 19/29] S-24 --- .../Service/Reading/ClinicalData/ClinicalDataSetService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs index 75207345c..11f0d3e12 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs @@ -67,7 +67,7 @@ namespace IRaCIS.Application.Services ); - if (_systemClinicalQuestionRepository.Where(x => isNeedVerify&& x.SystemClinicalId == inDto.SystemClinicalId && x.IsCheckDate).Count() != 1) + if (isNeedVerify&&_systemClinicalQuestionRepository.Where(x => x.SystemClinicalId == inDto.SystemClinicalId && x.IsCheckDate).Count() != 1) { throw new BusinessValidationFailedException(_localizer["ClinicalDataSet_Apply"]); @@ -98,7 +98,7 @@ namespace IRaCIS.Application.Services && x.ClinicalUploadType == ClinicalUploadType.Structuring && x.UploadRole == UploadRole.CRC ); - if (_trialClinicalQuestionRepository.Where(x => isNeedVerify&& x.TrialClinicalId == inDto.TrialClinicalId && x.IsCheckDate).Count() != 1) + if (isNeedVerify&&_trialClinicalQuestionRepository.Where(x => x.TrialClinicalId == inDto.TrialClinicalId && x.IsCheckDate).Count() != 1) { throw new BusinessValidationFailedException(_localizer["ClinicalDataSet_Apply"]); From 5ffcc219172d6df25ac668512821f2c33976b102 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 6 Jul 2023 15:57:05 +0800 Subject: [PATCH 20/29] S-25 --- .../Reading/ClinicalData/ClinicalAnswerService.cs | 1 + .../Service/Reading/Dto/ClinicalAnswerDto.cs | 13 +++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index c02cd59c7..6b4c1cc33 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -218,6 +218,7 @@ namespace IRaCIS.Core.Application.Service SubjectId=x.SubjectId, SubjectCode=x.Subject.Code, TrialId=inDto.TrialId, + ReadingId= x.ReadingId, ReadingClinicalDataId=x.Id, UploadRole = x.ClinicalDataTrialSet.UploadRole, ClinicalDataLevel = x.ClinicalDataTrialSet.ClinicalDataLevel, diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs index 47829d49b..c5bb64669 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs @@ -40,10 +40,15 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public UploadRole UploadRole { get; set; } public Guid TrialId { get; set; } - /// - /// 临床级别 - /// - public ClinicalLevel ClinicalDataLevel { get; set; } + /// + /// 访视Id 或者模块Id + /// + public Guid ReadingId { get; set; } + + /// + /// 临床级别 + /// + public ClinicalLevel ClinicalDataLevel { get; set; } public Guid? BaseLineVisitId { get; set; } From c1bfa55ea6094dbf567c7784954af3c3a69dccc9 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 6 Jul 2023 16:40:57 +0800 Subject: [PATCH 21/29] S-26 --- .../Reading/ClinicalData/ClinicalDataSetService.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs index 11f0d3e12..110f6c134 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs @@ -66,7 +66,10 @@ namespace IRaCIS.Application.Services && x.ClinicalUploadType == ClinicalUploadType.Structuring && x.UploadRole == UploadRole.CRC ); - + if (_systemClinicalQuestionRepository.Where(x => x.SystemClinicalId == inDto.SystemClinicalId).Count() == 0) + { + throw new BusinessValidationFailedException("当前临床数据未配置问题,请先配置问题之后再应用"); + } if (isNeedVerify&&_systemClinicalQuestionRepository.Where(x => x.SystemClinicalId == inDto.SystemClinicalId && x.IsCheckDate).Count() != 1) { throw new BusinessValidationFailedException(_localizer["ClinicalDataSet_Apply"]); @@ -98,6 +101,11 @@ namespace IRaCIS.Application.Services && x.ClinicalUploadType == ClinicalUploadType.Structuring && x.UploadRole == UploadRole.CRC ); + if (_trialClinicalQuestionRepository.Where(x => x.TrialClinicalId == inDto.TrialClinicalId).Count() == 0) + { + throw new BusinessValidationFailedException("当前临床数据未配置问题,请先配置问题之后再应用"); + } + if (isNeedVerify&&_trialClinicalQuestionRepository.Where(x => x.TrialClinicalId == inDto.TrialClinicalId && x.IsCheckDate).Count() != 1) { throw new BusinessValidationFailedException(_localizer["ClinicalDataSet_Apply"]); From 163af3b269ccdea9fb31cebcfc8f32293f5358e2 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 6 Jul 2023 17:06:20 +0800 Subject: [PATCH 22/29] S-27 --- .../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 6b4c1cc33..c6b295612 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -372,7 +372,7 @@ namespace IRaCIS.Core.Application.Service if (clinicalForm.CheckDate != null) { - if (await _readModuleRepository.AnyAsync(x => x.SubjectVisit.LatestScanDate <= clinicalForm.CheckDate && x.IsCRCConfirm)) + if (await _readModuleRepository.AnyAsync(x =>x.SubjectId== inDto.SubjectId&& x.SubjectVisit.LatestScanDate <= clinicalForm.CheckDate && x.IsCRCConfirm)) { throw new BusinessValidationFailedException("无法添加和修改当前日期的临床数据,因为CRC已经确认!"); } From 5e383cb7b580678d5d357216ff132fbafe87fd7d Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 6 Jul 2023 17:36:10 +0800 Subject: [PATCH 23/29] S-28 --- .../Service/Reading/ClinicalData/ClinicalAnswerService.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index c6b295612..789a32635 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -537,7 +537,9 @@ namespace IRaCIS.Core.Application.Service ClinicalDataSetEnName=x.ClinicalDataTrialSet.ClinicalDataSetEnName, IsHaveTableQuestion=x.ClinicalDataTrialSet.TrialClinicalQuestionList.Any(y=>y.ClinicalQuestionType== ReadingQestionType.Table), }).ToListAsync(); - var confirmList = await _readModuleCriterionFromRepository.Where(x => x.TrialId == inDto.TrialId) + var confirmList = await _readModuleCriterionFromRepository.Where(x => x.TrialId == inDto.TrialId + &&x.ClinicalForm.ClinicalDataTrialSet.UploadRole== UploadRole.CRC + &&(x.ClinicalForm.ClinicalDataTrialSet.ClinicalDataLevel==ClinicalLevel.ImageRead|| x.ClinicalForm.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.OncologyRead)) .Select(x => new GetCRCBeConfirm { CheckDate = x.ClinicalForm.CheckDate ?? default(DateTime), From 63e5880154d26bf00df3a6093f67c2029b70c3e7 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 6 Jul 2023 17:51:41 +0800 Subject: [PATCH 24/29] S-29 --- IRaCIS.Core.API/IRaCIS.Core.API.xml | 14 ++++++++++++++ .../IRaCIS.Core.Application.xml | 10 ++++++++++ .../Reading/ClinicalData/ClinicalAnswerService.cs | 6 ++++-- .../Service/Reading/Dto/ClinicalAnswerDto.cs | 4 ++++ 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.API/IRaCIS.Core.API.xml b/IRaCIS.Core.API/IRaCIS.Core.API.xml index 2b021e5a2..7e6ee7ae3 100644 --- a/IRaCIS.Core.API/IRaCIS.Core.API.xml +++ b/IRaCIS.Core.API/IRaCIS.Core.API.xml @@ -146,6 +146,20 @@ + + + PM确认临床数据 + + + + + + + 提交结构化录入并签名 + + + + 提交阅片裁判问题 diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 09ffad060..cdc61864c 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -2766,6 +2766,16 @@ + + + 上传角色 + + + + + 访视Id 或者模块Id + + 临床级别 diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index 789a32635..1c28eb9e4 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -529,6 +529,7 @@ namespace IRaCIS.Core.Application.Service .Include(x=>x.ClinicalDataTrialSet) .Select(x => new CRCClinicalForm { + SubjectId=x.SubjectId, CheckDate = x.CheckDate, ClinicalDataLevel = x.ClinicalDataTrialSet.ClinicalDataLevel, ClinicalFormId = x.Id, @@ -569,7 +570,8 @@ namespace IRaCIS.Core.Application.Service { if (x.ReadingSetType == ReadingSetType.ImageReading) { - x.ClinicalFormList = formList.Where(y => y.ClinicalDataLevel == ClinicalLevel.ImageRead&&y.CheckDate <= x.LatestScanDate) + x.ClinicalFormList = formList.Where(y => y.ClinicalDataLevel == ClinicalLevel.ImageRead&&y.CheckDate <= x.LatestScanDate&&y.SubjectId==x.SubjectId) + .Select(y => new GetCRCBeConfirmListOutDto() { CheckDate = y.CheckDate ?? default(DateTime), @@ -582,7 +584,7 @@ namespace IRaCIS.Core.Application.Service } else { - x.ClinicalFormList = formList.Where(y => y.ClinicalDataLevel == ClinicalLevel.OncologyRead&&y.CheckDate <= x.LatestScanDate) + x.ClinicalFormList = formList.Where(y => y.ClinicalDataLevel == ClinicalLevel.OncologyRead&&y.CheckDate <= x.LatestScanDate && y.SubjectId == x.SubjectId) .Select(y => new GetCRCBeConfirmListOutDto() { CheckDate = y.CheckDate ?? default(DateTime), diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs index c5bb64669..8d3fff220 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs @@ -226,6 +226,10 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public class CRCClinicalForm { + /// + /// 受试者Id + /// + public Guid SubjectId { get; set; } public DateTime? CheckDate { get; set; } public Guid ClinicalFormId { get; set; } From 64633a1d638cf4c19f51466e6c6640e50ff5400b Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Fri, 7 Jul 2023 09:24:20 +0800 Subject: [PATCH 25/29] S-30 --- .../ReadingClinicalDataService.cs | 57 ++++++++++++++++++- 1 file changed, 55 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index c6a0f8d26..d4245e786 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -678,9 +678,62 @@ namespace IRaCIS.Application.Services }); + var result = await resultQuery.ToListAsync(); - // 根据标准 - if (inDto.VisitTaskId != null) + + + + // 这里处理CRC上传 阅片期的临床数据 + var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadingId).FirstOrDefaultAsync(); + if (readModule != null && readModule.IsCRCConfirm) + { + var clinicalDataTrialSetIds = await _readModuleCriterionFromRepository.Where(x => x.ReadModuleId == readModule.Id).Select(x => x.ClinicalForm.ClinicalDataTrialSetId).ToListAsync(); + + var setIds = clinicalDataTrialSetIds.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() + { + + ClinicalDataLevel = x.ClinicalDataLevel, + SubjectId = inDto.SubjectId, + ReadingId = default(Guid), + ClinicalDataSetName = x.ClinicalDataSetName.LanguageName(x.ClinicalDataSetEnName, _userInfo.IsEn_Us), + ClinicalDataSetEnName = x.ClinicalDataSetEnName, + ClinicalDataTrialSetId = x.Id, + IsSign = readModule.IsPMConfirm, + ClinicalUploadType = x.ClinicalUploadType, + Id = default(Guid), + UploadRole = x.UploadRole, + IsCRCUpload = x.UploadRole == UploadRole.CRC, + IsNeedMerge = true, + ReadModuleId = readModule.Id, + //FileCount = x.FileCount, + + //ReadingClinicalDataState = x.ReadingClinicalDataState, + + //FileList = x.ReadingClinicalDataPDFList.Select(y => new GetFileDto() + //{ + // Id = y.Id, + // FileName = y.FileName, + // Path = y.Path, + // CreateTime = y.CreateTime, + //}).ToList() + + }).ToListAsync(); + + clinicalresult.ForEach(x => + { + x.FileCount = setIds.Where(y => y == x.ClinicalDataTrialSetId).Count(); + x.ReadingClinicalDataState = readModule.IsPMConfirm ? ReadingClinicalDataStatus.HaveSigned : ReadingClinicalDataStatus.HaveChecked; + + }); + } + + + + // 根据标准 + if (inDto.VisitTaskId != null) { var visitTaskInfo = await _visitTaskRepository.FirstOrDefaultAsync(x => x.Id == inDto.VisitTaskId); From cee382651b370804c106d8d12caaba3e0e0f8564 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Fri, 7 Jul 2023 10:43:32 +0800 Subject: [PATCH 26/29] S-31 --- .../Reading/ClinicalData/ReadingClinicalDataService.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index d4245e786..7116b10a2 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -684,8 +684,11 @@ namespace IRaCIS.Application.Services // 这里处理CRC上传 阅片期的临床数据 - var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadingId).FirstOrDefaultAsync(); - if (readModule != null && readModule.IsCRCConfirm) + var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadingId) + .WhereIf(inDto.SelectIsSign,x=>x.IsPMConfirm) + .WhereIf(!inDto.SelectIsSign, x => x.IsCRCConfirm) + .FirstOrDefaultAsync(); + if (readModule != null) { var clinicalDataTrialSetIds = await _readModuleCriterionFromRepository.Where(x => x.ReadModuleId == readModule.Id).Select(x => x.ClinicalForm.ClinicalDataTrialSetId).ToListAsync(); From aacce0b45302b3d7a4beaa1b8f25e6ab6a5e4a65 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Fri, 7 Jul 2023 11:16:23 +0800 Subject: [PATCH 27/29] S-32 --- IRaCIS.Core.Application/IRaCIS.Core.Application.xml | 5 +++++ .../Reading/ClinicalData/ReadingClinicalDataService.cs | 4 +++- IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs | 3 +++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index cdc61864c..36cf82d1c 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -2791,6 +2791,11 @@ 模块名称 + + + 受试者Id + + 临床级别 diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index 7116b10a2..e2c3e06f7 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -731,7 +731,9 @@ namespace IRaCIS.Application.Services x.ReadingClinicalDataState = readModule.IsPMConfirm ? ReadingClinicalDataStatus.HaveSigned : ReadingClinicalDataStatus.HaveChecked; }); - } + + result.AddRange(clinicalresult); + } diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs index 3608eb7fa..243e765b6 100644 --- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs +++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs @@ -1924,6 +1924,9 @@ namespace IRaCIS.Core.Domain.Share HaveUploaded = 1, + /// + /// 待核查 + /// HaveChecked = 2, HaveSigned = 3 From fb118d88f14f60acbee33541c3ac5c5a3ae07b1c Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Fri, 7 Jul 2023 11:32:38 +0800 Subject: [PATCH 28/29] S-33 --- .../ReadingClinicalDataService.cs | 112 +++++++++++------- .../Reading/Dto/ReadingClinicalDataDto.cs | 45 ++++--- 2 files changed, 101 insertions(+), 56 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index e2c3e06f7..3a4bc14ae 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -690,9 +690,15 @@ namespace IRaCIS.Application.Services .FirstOrDefaultAsync(); if (readModule != null) { - var clinicalDataTrialSetIds = await _readModuleCriterionFromRepository.Where(x => x.ReadModuleId == readModule.Id).Select(x => x.ClinicalForm.ClinicalDataTrialSetId).ToListAsync(); + var moduleCriterionFromList = await _readModuleCriterionFromRepository.Where(x => x.ReadModuleId == readModule.Id).Select(x => new{ + ClinicalFormId= x.ClinicalFormId, + CheckDate= x.ClinicalForm.CheckDate, + ClinicalDataTrialSetId= x.ClinicalForm.ClinicalDataTrialSetId + + + }).ToListAsync(); - var setIds = clinicalDataTrialSetIds.Distinct().ToList(); + 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() @@ -727,8 +733,15 @@ namespace IRaCIS.Application.Services clinicalresult.ForEach(x => { - x.FileCount = setIds.Where(y => y == x.ClinicalDataTrialSetId).Count(); - x.ReadingClinicalDataState = readModule.IsPMConfirm ? ReadingClinicalDataStatus.HaveSigned : ReadingClinicalDataStatus.HaveChecked; + x.FileCount = moduleCriterionFromList.Where(y => y.ClinicalDataTrialSetId == x.ClinicalDataTrialSetId).Count(); + x.ClinicalFromList = moduleCriterionFromList.Where(y => y.ClinicalDataTrialSetId == x.ClinicalDataTrialSetId).OrderBy(y => y.CheckDate).Select(x => new ClinicalFromData + { + CheckDate = x.CheckDate, + ClinicalFormId = x.ClinicalFormId + + }).ToList(); + + x.ReadingClinicalDataState = readModule.IsPMConfirm ? ReadingClinicalDataStatus.HaveSigned : ReadingClinicalDataStatus.HaveChecked; }); @@ -812,51 +825,68 @@ namespace IRaCIS.Application.Services var result = await resultQuery.ToListAsync(); // 这里处理CRC上传 阅片期的临床数据 - var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadingId).FirstOrDefaultAsync(); - if (readModule != null && readModule.IsCRCConfirm) - { - var clinicalDataTrialSetIds = await _readModuleCriterionFromRepository.Where(x => x.ReadModuleId == readModule.Id).Select(x => x.ClinicalForm.ClinicalDataTrialSetId).ToListAsync(); + var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadingId&&x.IsCRCConfirm) - var setIds = clinicalDataTrialSetIds.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() { + .FirstOrDefaultAsync(); + if (readModule != null) + { + var moduleCriterionFromList = await _readModuleCriterionFromRepository.Where(x => x.ReadModuleId == readModule.Id).Select(x => new { + ClinicalFormId = x.ClinicalFormId, + CheckDate = x.ClinicalForm.CheckDate, + ClinicalDataTrialSetId = x.ClinicalForm.ClinicalDataTrialSetId - ClinicalDataLevel = x.ClinicalDataLevel, - SubjectId = inDto.SubjectId, - ReadingId = default(Guid), - ClinicalDataSetName = x.ClinicalDataSetName.LanguageName(x.ClinicalDataSetEnName, _userInfo.IsEn_Us), - ClinicalDataSetEnName = x.ClinicalDataSetEnName, - ClinicalDataTrialSetId = x.Id, - IsSign = readModule.IsPMConfirm, - ClinicalUploadType = x.ClinicalUploadType, - Id = default(Guid), - UploadRole = x.UploadRole, - IsCRCUpload = x.UploadRole == UploadRole.CRC, - IsNeedMerge=true, - ReadModuleId= readModule.Id, - //FileCount = x.FileCount, - //ReadingClinicalDataState = x.ReadingClinicalDataState, + }).ToListAsync(); - //FileList = x.ReadingClinicalDataPDFList.Select(y => new GetFileDto() - //{ - // Id = y.Id, - // FileName = y.FileName, - // Path = y.Path, - // CreateTime = y.CreateTime, - //}).ToList() + 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() + { - }).ToListAsync(); + ClinicalDataLevel = x.ClinicalDataLevel, + SubjectId = inDto.SubjectId, + ReadingId = default(Guid), + ClinicalDataSetName = x.ClinicalDataSetName.LanguageName(x.ClinicalDataSetEnName, _userInfo.IsEn_Us), + ClinicalDataSetEnName = x.ClinicalDataSetEnName, + ClinicalDataTrialSetId = x.Id, + IsSign = readModule.IsPMConfirm, + ClinicalUploadType = x.ClinicalUploadType, + Id = default(Guid), + UploadRole = x.UploadRole, + IsCRCUpload = x.UploadRole == UploadRole.CRC, + IsNeedMerge = true, + ReadModuleId = readModule.Id, + //FileCount = x.FileCount, - clinicalresult.ForEach(x => { - x.FileCount = setIds.Where(y => y == x.ClinicalDataTrialSetId).Count(); - x.ReadingClinicalDataState = readModule.IsPMConfirm ? ReadingClinicalDataStatus.HaveSigned : ReadingClinicalDataStatus.HaveChecked; + //ReadingClinicalDataState = x.ReadingClinicalDataState, - }); + //FileList = x.ReadingClinicalDataPDFList.Select(y => new GetFileDto() + //{ + // Id = y.Id, + // FileName = y.FileName, + // Path = y.Path, + // CreateTime = y.CreateTime, + //}).ToList() - result.AddRange(clinicalresult); - } + }).ToListAsync(); + + clinicalresult.ForEach(x => + { + x.FileCount = moduleCriterionFromList.Where(y => y.ClinicalDataTrialSetId == x.ClinicalDataTrialSetId).Count(); + x.ClinicalFromList = moduleCriterionFromList.Where(y => y.ClinicalDataTrialSetId == x.ClinicalDataTrialSetId).OrderBy(y => y.CheckDate).Select(x => new ClinicalFromData + { + CheckDate = x.CheckDate, + ClinicalFormId = x.ClinicalFormId + + }).ToList(); + + x.ReadingClinicalDataState = readModule.IsPMConfirm ? ReadingClinicalDataStatus.HaveSigned : ReadingClinicalDataStatus.HaveChecked; + + }); + + result.AddRange(clinicalresult); + } diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs index a26a7c106..9cf83bbc3 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs @@ -10,8 +10,8 @@ using System.Threading.Tasks; namespace IRaCIS.Core.Application.Service.Reading.Dto { - public class AddOrUpdateReadingClinicalDataDto - { + public class AddOrUpdateReadingClinicalDataDto + { public Guid? Id { get; set; } @@ -127,9 +127,9 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public List PreviousOtherList { get; set; } - public List PreviousSurgeryList{ get; set; } + public List PreviousSurgeryList { get; set; } + - } @@ -137,7 +137,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public class GetCRCClinicalDataInDto { [NotDefault] - public Guid SubjectVisitId { get; set; } + public Guid SubjectVisitId { get; set; } [NotDefault] public Guid TrialId { get; set; } @@ -163,7 +163,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// /// 文件名称 /// - public string FileName { get; set; } + public string FileName { get; set; } /// /// 路径 @@ -195,9 +195,9 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// /// 获取访视列表 /// - public class GetReadingClinicalDataListIndto + public class GetReadingClinicalDataListIndto { - [NotDefault] + [NotDefault] public Guid SubjectId { get; set; } [NotDefault] public Guid ReadingId { get; set; } @@ -220,7 +220,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public bool IsBaseLine { get; set; } } - public class GetReadingClinicalDataPDFListIndto:PageInput + public class GetReadingClinicalDataPDFListIndto : PageInput { public Guid ReadingClinicalDataId { get; set; } } @@ -283,7 +283,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public class PMClinicalDataConfirmCommand - { + { public Guid Id { get; set; } /// @@ -365,13 +365,13 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public bool IsNeedMerge { get; set; } = false; - public Guid ReadModuleId { get; set; } + public Guid ReadModuleId { get; set; } - /// - /// 是否签名 - /// - public bool IsSign { get; set; } + /// + /// 是否签名 + /// + public bool IsSign { get; set; } /// @@ -399,6 +399,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto // } //} + public List ClinicalFromList { get; set; } + public List FileList { get; set; } = new List(); @@ -408,6 +410,19 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto } + public class ClinicalFromData + { + /// + /// 表单Id + /// + public Guid ClinicalFormId { get; set; } + + /// + /// 检查日期 + /// + public DateTime? CheckDate { get; set; } + } + public class GetFileDto { From bfeb41fea9d737ed3bfd535dc63c728974f9a544 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Fri, 7 Jul 2023 13:48:47 +0800 Subject: [PATCH 29/29] S-34 --- IRaCIS.Core.API/_ServiceExtensions/EFSetup.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/IRaCIS.Core.API/_ServiceExtensions/EFSetup.cs b/IRaCIS.Core.API/_ServiceExtensions/EFSetup.cs index 8e737a5a2..c1d2c31cc 100644 --- a/IRaCIS.Core.API/_ServiceExtensions/EFSetup.cs +++ b/IRaCIS.Core.API/_ServiceExtensions/EFSetup.cs @@ -37,6 +37,7 @@ namespace IRaCIS.Core.API triggerOptions.AddTrigger(); triggerOptions.AddTrigger(); triggerOptions.AddTrigger(); + triggerOptions.AddTrigger(); triggerOptions.AddTrigger(); triggerOptions.AddTrigger(); triggerOptions.AddTrigger();