From bed277f899caa336b92c7f7df96ca77d27f0140e Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Tue, 17 Oct 2023 09:39:52 +0800 Subject: [PATCH 01/52] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReadingCalculate/LuganoCalculateService.cs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index 5e816b314..1936d5482 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -517,6 +517,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate // SUVmax所在病灶 new ReadingCalculateData (){QuestionType=QuestionType.SUVmaxLesion,GetStringFun=GetSuvMaxFocus}, + + //获取肝脏评估 + new ReadingCalculateData (){QuestionType=QuestionType.LiverAssessment,GetStringFun=GetLiverAssessment}, ////靶病灶径线之和(SOD) //new ReadingCalculateData (){QuestionType=QuestionType.SOD,GetDecimalNullFun=GetSODData}, @@ -1978,6 +1981,19 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate #endregion + + #region 肝脏评估 + /// + /// 获取肝脏评估 + /// + /// + /// + public async Task GetLiverAssessment(ReadingCalculateDto inDto) + { + return inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LiverState).Select(x => x.Answer).FirstIsNullReturnEmpty(); + } + #endregion + #region SuvMax所在病灶 /// From 367a096b8a9805d69333994209fd37d0fd93aa39 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Tue, 17 Oct 2023 10:38:41 +0800 Subject: [PATCH 02/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Reading/ReadingImageTask/ReadingImageTaskService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index df466c762..5063f47bb 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -1767,7 +1767,7 @@ namespace IRaCIS.Application.Services } } var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync(); - + inDto.BlindName = taskinfo.TaskBlindName; switch (taskinfo.TrialReadingCriterion.CriterionType) { // 对于非靶病灶,如果状态选择为显著增大,请验证: From a313f977362f0b5d1fd5dce769517e552874f729 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Tue, 17 Oct 2023 11:06:39 +0800 Subject: [PATCH 03/52] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Reading/Dto/ReadingImageTaskViewModel.cs | 2 +- .../Service/Reading/ReadingImageTask/ReadingImageTaskService.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs index 257dbc73f..bb26b4704 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs @@ -1923,7 +1923,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public int? NumberOfFrames { get; set; } - public string? FromMark { get; set; } + public string? FromMark { get; set; } public string? ReportMark { get; set; } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index 5063f47bb..68cf6034e 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -2071,7 +2071,7 @@ namespace IRaCIS.Application.Services rowInfo.FristAddTaskId = inDto.RowId == null ? inDto.VisitTaskId : rowInfo.FristAddTaskId; if (inDto.RowId == null) { - + rowInfo.FromMark = inDto.FromMark == null ? string.Empty : inDto.FromMark.Value; //await _readingTableAnswerRowInfoRepository.BatchDeleteNoTrackingAsync(x => x.VisitTaskId == inDto.VisitTaskId && x.RowIndex == inDto.RowIndex && x.QuestionId == inDto.QuestionId); List answerList = inDto.AnswerList.Select(x => new ReadingTableQuestionAnswer() From a0880719144d3a95e8e2bbaa8ea2a269d8c82174 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Tue, 17 Oct 2023 11:07:44 +0800 Subject: [PATCH 04/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Reading/ReadingImageTask/ReadingImageTaskService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index 68cf6034e..c8a2307a1 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -2071,7 +2071,7 @@ namespace IRaCIS.Application.Services rowInfo.FristAddTaskId = inDto.RowId == null ? inDto.VisitTaskId : rowInfo.FristAddTaskId; if (inDto.RowId == null) { - rowInfo.FromMark = inDto.FromMark == null ? string.Empty : inDto.FromMark.Value; + rowInfo.FromMark = inDto.FromMark ?? string.Empty; //await _readingTableAnswerRowInfoRepository.BatchDeleteNoTrackingAsync(x => x.VisitTaskId == inDto.VisitTaskId && x.RowIndex == inDto.RowIndex && x.QuestionId == inDto.QuestionId); List answerList = inDto.AnswerList.Select(x => new ReadingTableQuestionAnswer() From 08f592a9cb396aa6c20950d2b2870ef997000cb2 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Tue, 17 Oct 2023 11:17:36 +0800 Subject: [PATCH 05/52] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reading/ReadingImageTask/ReadingImageTaskService.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index c8a2307a1..495dbc433 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -2072,6 +2072,10 @@ namespace IRaCIS.Application.Services if (inDto.RowId == null) { rowInfo.FromMark = inDto.FromMark ?? string.Empty; + rowInfo.ReportMark = inDto.ReportMark ?? string.Empty; + rowInfo.MarkTool = inDto.MarkTool ?? string.Empty; + rowInfo.PicturePath = inDto.PicturePath ?? string.Empty; + rowInfo.MeasureData = inDto.MeasureData ?? string.Empty; //await _readingTableAnswerRowInfoRepository.BatchDeleteNoTrackingAsync(x => x.VisitTaskId == inDto.VisitTaskId && x.RowIndex == inDto.RowIndex && x.QuestionId == inDto.QuestionId); List answerList = inDto.AnswerList.Select(x => new ReadingTableQuestionAnswer() From 8bde83bb7b0ee6a3f4e4df2ae6188e8a0e93be75 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 17 Oct 2023 13:37:15 +0800 Subject: [PATCH 06/52] =?UTF-8?q?=E8=B6=85=E5=A3=B0=E5=AF=B9=E6=8E=A5?= =?UTF-8?q?=E5=87=86=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/ExtraController.cs | 2 +- .../IRaCIS.Core.Application.xml | 7 ++ .../DTO/UltrasonicDicomViewModel.cs | 11 +++ .../UltrasonicDicomService.cs | 80 +++++++++++++++++++ .../Service/Third-partyProject/_MapConfig.cs | 22 +++++ 5 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs create mode 100644 IRaCIS.Core.Application/Service/Third-partyProject/UltrasonicDicomService.cs create mode 100644 IRaCIS.Core.Application/Service/Third-partyProject/_MapConfig.cs diff --git a/IRaCIS.Core.API/Controllers/ExtraController.cs b/IRaCIS.Core.API/Controllers/ExtraController.cs index ca49c5e0b..5d43d4a61 100644 --- a/IRaCIS.Core.API/Controllers/ExtraController.cs +++ b/IRaCIS.Core.API/Controllers/ExtraController.cs @@ -208,7 +208,7 @@ namespace IRaCIS.Api.Controllers [HttpGet("user/GenerateSTS")] - public IResponseOutput GenerateSTS(IOptionsMonitor options ) + public IResponseOutput GenerateSTS([FromServices]IOptionsMonitor options ) { var ossOptions = options.CurrentValue; diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 9724e186a..17ad2fafd 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -1946,6 +1946,13 @@ + + + 获取肝脏评估 + + + + SuvMax所在病灶 diff --git a/IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs b/IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs new file mode 100644 index 000000000..109e353bf --- /dev/null +++ b/IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace IRaCIS.Core.Application.Service.Third_partyProject.DTO +{ + + +} diff --git a/IRaCIS.Core.Application/Service/Third-partyProject/UltrasonicDicomService.cs b/IRaCIS.Core.Application/Service/Third-partyProject/UltrasonicDicomService.cs new file mode 100644 index 000000000..3d79a14af --- /dev/null +++ b/IRaCIS.Core.Application/Service/Third-partyProject/UltrasonicDicomService.cs @@ -0,0 +1,80 @@ +using IRaCIS.Application.Contracts; +using IRaCIS.Core.Application.Contracts; +using IRaCIS.Core.Domain.Share; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Text; +using System.Threading.Tasks; + +namespace IRaCIS.Core.Application.Service.Third_partyProject +{ + + [ApiExplorerSettings(GroupName = "Trial")] + public class UltrasonicDicomService:BaseService + { + public readonly IRepository _trialRepository; + + public UltrasonicDicomService(IRepository trialRepository) + { + _trialRepository = trialRepository; + } + + + + + [HttpPost] + public async Task>> GetTrialToBeDoneList(TrialToBeDoneQuery inQuery, + [FromServices] IRepository _taskMedicalReviewRepository) + { + + var isPM = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.APM; + var isCRC = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator; + var isIQC = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC; + var isMIM = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.MIM; + var isSPMOrCPM = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CPM; + + + var query = _trialRepository.AsQueryable().IgnoreQueryFilters() + + .WhereIf(inQuery.SponsorId != null, o => o.SponsorId == inQuery.SponsorId) + .WhereIf(!string.IsNullOrEmpty(inQuery.Code), o => o.TrialCode.Contains(inQuery.Code)) + .WhereIf(!string.IsNullOrEmpty(inQuery.ResearchProgramNo), o => o.ResearchProgramNo.Contains(inQuery.ResearchProgramNo)) + .WhereIf(!string.IsNullOrWhiteSpace(inQuery.ExperimentName), o => o.ExperimentName.Contains(inQuery.ExperimentName)) + .WhereIf(_userInfo.UserTypeEnumInt != (int)UserTypeEnum.SuperAdmin, t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id && t.IsDeleted == false) && t.IsDeleted == false) + .Select(t => new TrialToBeDoneDto() + { + TrialId = t.Id, + ResearchProgramNo = t.ResearchProgramNo, + ExperimentName = t.ExperimentName, + TrialCode = t.TrialCode, + CreateTime = t.CreateTime, + Sponsor = _userInfo.IsEn_Us ? t.Sponsor.SponsorName : t.Sponsor.SponsorNameCN, + TrialStatusStr = t.TrialStatusStr, + + ExpetiedTaskCount = isPM ? t.VisitTaskList.Where(t => t.IsUrgent).Count() : 0, + + ReReadingApprovalCount = isPM ? t.VisitTaskReReadingList.Where(t => t.OriginalReReadingTask.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed).Count() : 0, + + PendingReconciliationCount = isPM ? t.SubjectVisitList.Where(t => t.CheckState == CheckStateEnum.ToCheck).Count() : 0, + + PendingResponseCount = isPM ? t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.CVIng && + u.CheckChallengeDialogList.OrderByDescending(t => t.CreateTime).First().UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count() : 0 + + + + }); + + + + //.ProjectTo(_mapper.ConfigurationProvider, new { userTypeEnumInt = _userInfo.UserTypeEnumInt, userId = _userInfo.Id }); + + var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrWhiteSpace(inQuery.SortField) ? "CreateTime" : inQuery.SortField, inQuery.Asc); + + return ResponseOutput.Ok(result); + } + + } +} diff --git a/IRaCIS.Core.Application/Service/Third-partyProject/_MapConfig.cs b/IRaCIS.Core.Application/Service/Third-partyProject/_MapConfig.cs new file mode 100644 index 000000000..0cbd714ec --- /dev/null +++ b/IRaCIS.Core.Application/Service/Third-partyProject/_MapConfig.cs @@ -0,0 +1,22 @@ +using AutoMapper; +using AutoMapper.EquivalencyExpression; +using DocumentFormat.OpenXml.Spreadsheet; +using IRaCIS.Application.Contracts; +using IRaCIS.Core.Application.Contracts; +using IRaCIS.Core.Application.Contracts.DTO; +using IRaCIS.Core.Application.ViewModel; +using IRaCIS.Core.Domain.Models; +using IRaCIS.Core.Domain.Share; + +namespace IRaCIS.Core.Application.Service +{ + public class UltrasonicDicomConfig : Profile + { + public UltrasonicDicomConfig() + { + + + } + } + +} From d859def7d6e5969d39afa5cf8a6696d02f2c9a73 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Tue, 17 Oct 2023 13:48:28 +0800 Subject: [PATCH 07/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LuganoCalculateService.cs | 109 +++++++++--------- 1 file changed, 56 insertions(+), 53 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index 1936d5482..95b9ad554 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -1716,66 +1716,69 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate /// public async Task GetSplenicEvaluation(ReadingCalculateDto inDto) { - if (inDto.IsBaseLine) - { - return SpleenAssessment.Stabilization.GetEnumInt(); - } - var result = SpleenAssessment.Stabilization; + return inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SplenicStatus).Select(x => x.Answer).FirstIsNullReturnEmpty(); + + //if (inDto.IsBaseLine) + //{ + // return SpleenAssessment.Stabilization.GetEnumInt(); + //} + + //var result = SpleenAssessment.Stabilization; - var presentSpd = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SpleenLength).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0(); - var baseLineSpleenLength = await GetBaseLineSpleenLength(inDto); + //var presentSpd = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SpleenLength).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0(); + //var baseLineSpleenLength = await GetBaseLineSpleenLength(inDto); - var baseLineTaskId = await GetBaseLineTaskId(inDto); - var baseLineState= await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == baseLineTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.SplenicStatus).Select(x => x.Answer).FirstOrDefaultAsync(); + //var baseLineTaskId = await GetBaseLineTaskId(inDto); + //var baseLineState= await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == baseLineTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.SplenicStatus).Select(x => x.Answer).FirstOrDefaultAsync(); - var differenceValue = presentSpd - baseLineSpleenLength; - decimal percentage = 0; - if (baseLineSpleenLength != 0) - { - percentage = differenceValue*100 / baseLineSpleenLength; - } + //var differenceValue = presentSpd - baseLineSpleenLength; + //decimal percentage = 0; + //if (baseLineSpleenLength != 0) + //{ + // percentage = differenceValue*100 / baseLineSpleenLength; + //} - // 1、基线 垂直径> 130 mm - //2、与基线相比脾垂直径变化值≥10 mm - //与基线相比脾肿大增加的百分比 > 50% - if (baseLineSpleenLength > 130 && differenceValue >= 10 && percentage > 50) - { - result = SpleenAssessment.Increase; - } - //1、基线垂直径≤130mm - //2、与基线相比脾垂直径变化值≥20 mm - //当前垂直径 > 130 mm - else if (baseLineSpleenLength <= 130 && differenceValue >= 20 && presentSpd > 130) - { - result = SpleenAssessment.Increase; - } - //1、基线 垂直径> 130 mm - //2、当前访视的前面访视中 存在垂直径≤130mm - //3、与最低点相比脾脏垂直径的增加值≥20 mm - //4、当前垂直径 > 130 mm - else if (baseLineSpleenLength > 130 && presentSpd <= 130 && differenceValue >= 20 && presentSpd > 130) - { - result = SpleenAssessment.Increase; - } - // 基线垂直径≤130mm - else if (baseLineSpleenLength <= 130) - { - result = SpleenAssessment.Normal; - } - //1、基线期 状态为“肿大” - //与基线相比脾肿大增加的百分比 > 50% - else if (baseLineState.EqEnum(SpleenState.Swelling) && percentage > 50) - { - result = SpleenAssessment.Remission; - } - else - { - result = SpleenAssessment.Remission; - } - return result.GetEnumInt(); + //// 1、基线 垂直径> 130 mm + ////2、与基线相比脾垂直径变化值≥10 mm + ////与基线相比脾肿大增加的百分比 > 50% + //if (baseLineSpleenLength > 130 && differenceValue >= 10 && percentage > 50) + //{ + // result = SpleenAssessment.Increase; + //} + ////1、基线垂直径≤130mm + ////2、与基线相比脾垂直径变化值≥20 mm + ////当前垂直径 > 130 mm + //else if (baseLineSpleenLength <= 130 && differenceValue >= 20 && presentSpd > 130) + //{ + // result = SpleenAssessment.Increase; + //} + ////1、基线 垂直径> 130 mm + ////2、当前访视的前面访视中 存在垂直径≤130mm + ////3、与最低点相比脾脏垂直径的增加值≥20 mm + ////4、当前垂直径 > 130 mm + //else if (baseLineSpleenLength > 130 && presentSpd <= 130 && differenceValue >= 20 && presentSpd > 130) + //{ + // result = SpleenAssessment.Increase; + //} + //// 基线垂直径≤130mm + //else if (baseLineSpleenLength <= 130) + //{ + // result = SpleenAssessment.Normal; + //} + ////1、基线期 状态为“肿大” + ////与基线相比脾肿大增加的百分比 > 50% + //else if (baseLineState.EqEnum(SpleenState.Swelling) && percentage > 50) + //{ + // result = SpleenAssessment.Remission; + //} + //else + //{ + // result = SpleenAssessment.Remission; + //} + //return result.GetEnumInt(); } #endregion From b926519424590c3d19e0def3f96e75d9b3d1eb19 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Tue, 17 Oct 2023 14:11:38 +0800 Subject: [PATCH 08/52] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LuganoCalculateService.cs | 86 ++++++++++++++++++- 1 file changed, 83 insertions(+), 3 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index 95b9ad554..a94df81aa 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -1707,6 +1707,83 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate } #endregion + #region 获取脾脏状态 + + /// + /// 获取脾脏状态 + /// + /// + /// + /// + [HttpPost] + public async Task GetSplenicState(Guid visitTaskId,decimal spleenLength) + { + + ReadingCalculateDto inDto = await _generalCalculateService.GetReadingCalculateDto(visitTaskId); + + if (inDto.IsBaseLine) + { + return SpleenAssessment.Stabilization.GetEnumInt(); + } + + var result = SpleenAssessment.Stabilization; + + + var presentSpd = spleenLength; + var baseLineSpleenLength = await GetBaseLineSpleenLength(inDto); + + var baseLineTaskId = await GetBaseLineTaskId(inDto); + var baseLineState = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == baseLineTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.SplenicStatus).Select(x => x.Answer).FirstOrDefaultAsync(); + + + var differenceValue = presentSpd - baseLineSpleenLength; + decimal percentage = 0; + if (baseLineSpleenLength != 0) + { + percentage = differenceValue * 100 / baseLineSpleenLength; + } + + // 1、基线 垂直径> 130 mm + //2、与基线相比脾垂直径变化值≥10 mm + //与基线相比脾肿大增加的百分比 > 50% + if (baseLineSpleenLength > 130 && differenceValue >= 10 && percentage > 50) + { + result = SpleenAssessment.Increase; + } + //1、基线垂直径≤130mm + //2、与基线相比脾垂直径变化值≥20 mm + //当前垂直径 > 130 mm + else if (baseLineSpleenLength <= 130 && differenceValue >= 20 && presentSpd > 130) + { + result = SpleenAssessment.Increase; + } + //1、基线 垂直径> 130 mm + //2、当前访视的前面访视中 存在垂直径≤130mm + //3、与最低点相比脾脏垂直径的增加值≥20 mm + //4、当前垂直径 > 130 mm + else if (baseLineSpleenLength > 130 && presentSpd <= 130 && differenceValue >= 20 && presentSpd > 130) + { + result = SpleenAssessment.Increase; + } + // 基线垂直径≤130mm + else if (baseLineSpleenLength <= 130) + { + result = SpleenAssessment.Normal; + } + //1、基线期 状态为“肿大” + //与基线相比脾肿大增加的百分比 > 50% + else if (baseLineState.EqEnum(SpleenState.Swelling) && percentage > 50) + { + result = SpleenAssessment.Remission; + } + else + { + result = SpleenAssessment.Remission; + } + return result.GetEnumInt(); + } + #endregion + #region 获取脾脏评估 /// @@ -1717,7 +1794,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate public async Task GetSplenicEvaluation(ReadingCalculateDto inDto) { - return inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SplenicStatus).Select(x => x.Answer).FirstIsNullReturnEmpty(); + return inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SplenicStatus).Select(x => x.Answer).FirstIsNullReturnEmpty(); //if (inDto.IsBaseLine) //{ @@ -1731,14 +1808,14 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate //var baseLineSpleenLength = await GetBaseLineSpleenLength(inDto); //var baseLineTaskId = await GetBaseLineTaskId(inDto); - //var baseLineState= await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == baseLineTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.SplenicStatus).Select(x => x.Answer).FirstOrDefaultAsync(); + //var baseLineState = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == baseLineTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.SplenicStatus).Select(x => x.Answer).FirstOrDefaultAsync(); //var differenceValue = presentSpd - baseLineSpleenLength; //decimal percentage = 0; //if (baseLineSpleenLength != 0) //{ - // percentage = differenceValue*100 / baseLineSpleenLength; + // percentage = differenceValue * 100 / baseLineSpleenLength; //} //// 1、基线 垂直径> 130 mm @@ -1779,9 +1856,12 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate // result = SpleenAssessment.Remission; //} //return result.GetEnumInt(); + + } #endregion + #region PET 5PS /// From 2ea9c49b2ed6d13ccdf58abd2655b99c604e5604 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Tue, 17 Oct 2023 15:19:49 +0800 Subject: [PATCH 09/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ReadingCalculate/LuganoCalculateService.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index a94df81aa..3058eb539 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -1723,7 +1723,15 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate if (inDto.IsBaseLine) { - return SpleenAssessment.Stabilization.GetEnumInt(); + if (spleenLength <= 130) + { + return SpleenAssessment.Normal.GetEnumInt(); + } + else + { + return SpleenAssessment.Swelling.GetEnumInt(); + } + } var result = SpleenAssessment.Stabilization; From 21bd7814680984e55356ed953f9c32e1379e680a Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 17 Oct 2023 15:49:24 +0800 Subject: [PATCH 10/52] =?UTF-8?q?=E8=B6=85=E5=A3=B0=E5=AF=B9=E6=8E=A5?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=88=9D=E6=AD=A5=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IRaCIS.Core.Application.xml | 53 +++ .../ImageAndDoc/DTO/UnionStudyViewDodel.cs | 4 +- .../DTO/UltrasonicDicomViewModel.cs | 99 ++++- .../UltrasonicDicomService.cs | 414 ++++++++++++++++-- .../Service/Third-partyProject/_MapConfig.cs | 7 +- IRaCIS.Core.Domain/Allocation/VisitTask.cs | 3 + IRaCIS.Core.Domain/Image/DicomSeries.cs | 2 + 7 files changed, 553 insertions(+), 29 deletions(-) diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 17ad2fafd..1a0dd5f22 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -8578,6 +8578,59 @@ + + + 项目列表 + + + + + + + 任务列表 第一层级 + + + + + + + 检查列表 第二层级 + + + + + + 修改任务上的 影像上传状态 + + + + + + + 通过任务Id 获取检查模态下拉框 + + + + + + 通过选择的序列Id 数组,获取下面的Instance 路径 + + + + + + + + 归档接口 -new 一份 序列层级增加了一个参数VisitTaskId 用于绑定从TomTec拉取来的序列(两个人公用的影像,不应该绑定) + + + + + + + + + 项目外部人员 录入流程相关 diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs index 42c9c3a71..4b08c12d0 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs @@ -173,6 +173,8 @@ namespace IRaCIS.Core.Application.Contracts public string[]? VisitPlanArray { get; set; } + public Guid? VisitTaskId { get; set; } + } @@ -283,7 +285,7 @@ namespace IRaCIS.Core.Application.Contracts public string IamgeResizePath { get; set; }=string.Empty; public List InstanceList { get; set; } - + public Guid? VisitTaskId { get; set; } } diff --git a/IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs b/IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs index 109e353bf..0068f91db 100644 --- a/IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs +++ b/IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs @@ -1,5 +1,8 @@ -using System; +using IRaCIS.Core.Application.Contracts; +using IRaCIS.Core.Domain.Share; +using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -7,5 +10,99 @@ using System.Threading.Tasks; namespace IRaCIS.Core.Application.Service.Third_partyProject.DTO { + public class TrialListDTO_UltrasonicDicom: TrialBaseInfoDto + { + public DateTime CreateTime { get; set; } + + public string Sponsor { get; set; } + public string TrialStatusStr { get; set; } + } + + public class VisitTaskQuery_UltrasonicDicom : PageInput + { + [NotDefault] + public Guid TrialId { get; set; } + + public Guid? SiteId { get; set; } + + public Guid? SubjectId { get; set; } + + public string SubjectCode { get; set; } = String.Empty; + + public bool? IsUrgent { get; set; } + + public string TaskName { get; set; } = String.Empty; + + public Guid? DoctorUserId { get; set; } + + public string? TaskCode { get; set; } + + public String? TrialSiteCode { get; set; } + + public Arm? ArmEnum { get; set; } + + public Guid? TrialReadingCriterionId { get; set; } + + + + } + public class VisitTaskDTO_UltrasonicDicom + { + public Guid Id { get;set; } + public String TrialSiteCode { get; set; } = String.Empty; + public string SubjectCode { get; set; } = String.Empty; + public string UserName { get; set; } + public string FullName { get; set; } + public Arm ArmEnum { get; set; } + public Guid? DoctorUserId { get; set; } + public string TaskCode { get; set; } + public string TaskName { get; set; } + public string TaskBlindName { get; set; } + + public decimal VisitTaskNum { get; set; } + + public int ImageStudyState { get; set; } + } + + public class UpdateTaskImageStateCommand + { + [NotDefault] + public Guid VisitTaskId { get; set; } + public int ImageStudyState { get; set; } + } + + + public class StudyDTO_UltrasonicDicom : UnionStudyViewModel + { + + } + + public class StudySeriesModality + { + public Guid StudyId { get; set; } + + public int SeriesCount { get; set; } + + public string StudyCode { get; set; } + + public List SeriesModalityList { get; set; } + + } + + public class StudySeriesModalitySelectDTO + { + public Guid StudyId { get; set; } + + public List SeriesIdList { get; set; } + } + + public class SeriesModality + { + public Guid SeriesId { get; set; } + + public string Modality { get; set; } + } + + } diff --git a/IRaCIS.Core.Application/Service/Third-partyProject/UltrasonicDicomService.cs b/IRaCIS.Core.Application/Service/Third-partyProject/UltrasonicDicomService.cs index 3d79a14af..f2d496d29 100644 --- a/IRaCIS.Core.Application/Service/Third-partyProject/UltrasonicDicomService.cs +++ b/IRaCIS.Core.Application/Service/Third-partyProject/UltrasonicDicomService.cs @@ -1,7 +1,14 @@ -using IRaCIS.Application.Contracts; +using EasyCaching.Core; +using IRaCIS.Application.Contracts; using IRaCIS.Core.Application.Contracts; +using IRaCIS.Core.Application.Filter; +using IRaCIS.Core.Application.Service.Third_partyProject.DTO; +using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Domain.Share; +using IRaCIS.Core.Infrastructure; +using Medallion.Threading; using Microsoft.AspNetCore.Mvc; +using OfficeOpenXml.FormulaParsing.Utilities; using System; using System.Collections.Generic; using System.Linq; @@ -13,21 +20,30 @@ namespace IRaCIS.Core.Application.Service.Third_partyProject { [ApiExplorerSettings(GroupName = "Trial")] - public class UltrasonicDicomService:BaseService + public class UltrasonicDicomService : BaseService { public readonly IRepository _trialRepository; + public readonly IRepository _studyRepository; + private readonly IRepository _dictionaryRepository; + public readonly IRepository _visitTaskRepository; - public UltrasonicDicomService(IRepository trialRepository) + + public UltrasonicDicomService(IRepository trialRepository, IRepository studyRepository, IRepository visitTaskRepository, IRepository dictionaryRepository) { _trialRepository = trialRepository; + _studyRepository = studyRepository; + _visitTaskRepository = visitTaskRepository; + _dictionaryRepository = dictionaryRepository; } - - + /// + /// 项目列表 + /// + /// + /// [HttpPost] - public async Task>> GetTrialToBeDoneList(TrialToBeDoneQuery inQuery, - [FromServices] IRepository _taskMedicalReviewRepository) + public async Task>> GetTrialList(TrialToBeDoneQuery inQuery) { var isPM = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.APM; @@ -44,7 +60,7 @@ namespace IRaCIS.Core.Application.Service.Third_partyProject .WhereIf(!string.IsNullOrEmpty(inQuery.ResearchProgramNo), o => o.ResearchProgramNo.Contains(inQuery.ResearchProgramNo)) .WhereIf(!string.IsNullOrWhiteSpace(inQuery.ExperimentName), o => o.ExperimentName.Contains(inQuery.ExperimentName)) .WhereIf(_userInfo.UserTypeEnumInt != (int)UserTypeEnum.SuperAdmin, t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id && t.IsDeleted == false) && t.IsDeleted == false) - .Select(t => new TrialToBeDoneDto() + .Select(t => new TrialListDTO_UltrasonicDicom() { TrialId = t.Id, ResearchProgramNo = t.ResearchProgramNo, @@ -52,29 +68,375 @@ namespace IRaCIS.Core.Application.Service.Third_partyProject TrialCode = t.TrialCode, CreateTime = t.CreateTime, Sponsor = _userInfo.IsEn_Us ? t.Sponsor.SponsorName : t.Sponsor.SponsorNameCN, - TrialStatusStr = t.TrialStatusStr, - - ExpetiedTaskCount = isPM ? t.VisitTaskList.Where(t => t.IsUrgent).Count() : 0, - - ReReadingApprovalCount = isPM ? t.VisitTaskReReadingList.Where(t => t.OriginalReReadingTask.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed).Count() : 0, - - PendingReconciliationCount = isPM ? t.SubjectVisitList.Where(t => t.CheckState == CheckStateEnum.ToCheck).Count() : 0, - - PendingResponseCount = isPM ? t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.CVIng && - u.CheckChallengeDialogList.OrderByDescending(t => t.CreateTime).First().UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count() : 0 - - - + TrialStatusStr = t.TrialStatusStr }); - - - //.ProjectTo(_mapper.ConfigurationProvider, new { userTypeEnumInt = _userInfo.UserTypeEnumInt, userId = _userInfo.Id }); - - var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrWhiteSpace(inQuery.SortField) ? "CreateTime" : inQuery.SortField, inQuery.Asc); + var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrWhiteSpace(inQuery.SortField) ? nameof(TrialListDTO_UltrasonicDicom.CreateTime) : inQuery.SortField, inQuery.Asc); return ResponseOutput.Ok(result); } + + /// + /// 任务列表 第一层级 + /// + /// + /// + [HttpPost] + public async Task> GetVisitTaskList(VisitTaskQuery_UltrasonicDicom queryVisitTask) + { + var visitTaskQueryable = _visitTaskRepository.Where(t => t.TrialId == queryVisitTask.TrialId && t.IsAnalysisCreate == false && t.TaskState == TaskState.Effect && t.SourceSubjectVisitId != null) + + .WhereIf(queryVisitTask.SiteId != null, t => t.Subject.SiteId == queryVisitTask.SiteId) + .WhereIf(queryVisitTask.SubjectId != null, t => t.SubjectId == queryVisitTask.SubjectId) + .WhereIf(queryVisitTask.IsUrgent != null, t => t.IsUrgent == queryVisitTask.IsUrgent) + .WhereIf(queryVisitTask.DoctorUserId != null, t => t.DoctorUserId == queryVisitTask.DoctorUserId) + .WhereIf(queryVisitTask.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == queryVisitTask.TrialReadingCriterionId) + .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate) || (t.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate == false)) + .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.TaskName.Contains(queryVisitTask.TaskName) || t.TaskBlindName.Contains(queryVisitTask.TaskName)) + .WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => (t.Subject.Code.Contains(queryVisitTask.SubjectCode) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(queryVisitTask.SubjectCode) && t.IsAnalysisCreate)) + + .ProjectTo(_mapper.ConfigurationProvider); + + var defalutSortArray = new string[] { nameof(VisitTask.SubjectId), nameof(VisitTask.VisitTaskNum) }; + + var pageList = await visitTaskQueryable.ToPagedListAsync(queryVisitTask.PageIndex, queryVisitTask.PageSize, queryVisitTask.SortField, queryVisitTask.Asc, string.IsNullOrWhiteSpace(queryVisitTask.SortField), defalutSortArray); + + return pageList; + } + + /// + /// 检查列表 第二层级 + /// + /// + [HttpGet] + public async Task> GetDicomAndNoneDicomStudyList(Guid visiTaskId, [FromServices] IRepository _visitTaskRepository) + { + + var query = from dicomStudy in _visitTaskRepository.Where(t => t.Id == visiTaskId).Select(t => t.SourceSubjectVisit).SelectMany(t => t.StudyList) + select new StudyDTO_UltrasonicDicom() + { + TrialId = dicomStudy.TrialId, + SiteId = dicomStudy.SiteId, + SubjectId = dicomStudy.SubjectId, + SubjectVisitId = dicomStudy.SubjectVisitId, + VisitName = dicomStudy.SubjectVisit.VisitName, + VisitNum = dicomStudy.SubjectVisit.VisitNum, + IsDicom = true, + SubjectCode = dicomStudy.Subject.Code, + + Id = dicomStudy.Id, + + Bodypart = dicomStudy.BodyPartExamined, + + Modalities = dicomStudy.Modalities, + + Count = dicomStudy.SeriesCount, + + StudyCode = dicomStudy.StudyCode, + + StudyTime = dicomStudy.StudyTime, + + TrialSiteAliasName = dicomStudy.TrialSite.TrialSiteAliasName, + + TrialSiteCode = dicomStudy.TrialSite.TrialSiteCode, + + Uploader = dicomStudy.Uploader.UserName, + + UploadTime = dicomStudy.CreateTime + }; + + + + + + return await query.ToListAsync(); + } + + /// + /// 修改任务上的 影像上传状态 + /// + /// + /// + [HttpPut] + public async Task UpdateTaskImageState(UpdateTaskImageStateCommand command) + { + await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.Id == command.VisitTaskId, u => new VisitTask() { ImageStudyState = command.ImageStudyState }); + + return ResponseOutput.Ok(); + } + + /// + /// 通过任务Id 获取检查模态下拉框 + /// + /// + public async Task> GetStudyModalityList(Guid visiTaskId) + { + + var list = await _visitTaskRepository.Where(t => t.Id == visiTaskId).Select(t => t.SourceSubjectVisit).SelectMany(t => t.StudyList).Select(t => new StudySeriesModality + { + SeriesCount = t.SeriesCount, + StudyCode = t.StudyCode, + SeriesModalityList = t.SeriesList.Select(t => new SeriesModality { SeriesId = t.Id, Modality = t.Modality }).ToList() + + }).ToListAsync(); + + return list; + } + + /// + /// 通过选择的序列Id 数组,获取下面的Instance 路径 + /// + /// + /// + /// + [HttpPost] + public async Task> GetStudyModalityOSSPath(List seriesIdList, [FromServices] IRepository _dicomSeriesRepository) + { + return await _dicomSeriesRepository.Where(t => seriesIdList.Contains(t.Id)).SelectMany(t => t.DicomInstanceList).Select(t => t.Path).ToListAsync(); + } + + + /// + /// 归档接口 -new 一份 序列层级增加了一个参数VisitTaskId 用于绑定从TomTec拉取来的序列(两个人公用的影像,不应该绑定) + /// + /// + /// + /// + /// + /// + /// + /// + + [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] + public async Task AddOrUpdateArchiveStudy(NewArchiveStudyCommand incommand, + [FromServices] IRepository _studyMonitorRepository, + [FromServices] IDistributedLockProvider _distributedLockProvider, + [FromServices] IEasyCachingProvider _provider, + [FromServices] IRepository _dicomSeriesRepository, + [FromServices] IRepository _dicomInstanceRepository) + { + try + { + var trialId = incommand.TrialId; + + var studyMonitor = await _studyMonitorRepository.FirstOrDefaultAsync(t => t.Id == incommand.StudyMonitorId); + studyMonitor.UploadFinishedTime = DateTime.Now; + studyMonitor.ArchiveFinishedTime = DateTime.Now; + studyMonitor.FailedFileCount = incommand.FailedFileCount; + studyMonitor.IsSuccess = true; + + //上传 + if (studyMonitor.IsDicomReUpload == false) + { + var study = _mapper.Map(incommand.Study); + + var @lock = _distributedLockProvider.CreateLock($"StudyCode"); + + using (await @lock.AcquireAsync()) + { + //查询数据库获取最大的Code 没有记录则为0 + var dbStudyCodeIntMax = _studyRepository.Where(s => s.TrialId == trialId).Select(t => t.Code).DefaultIfEmpty().Max(); + + //获取缓存中的值 并发的时候,需要记录,已被占用的值 这样其他线程在此占用的最大的值上递增 + var cacheMaxCodeInt = _provider.Get($"{trialId}_{StaticData.CacheKey.StudyMaxCode}").Value; + + int currentNextCodeInt = cacheMaxCodeInt > dbStudyCodeIntMax ? cacheMaxCodeInt + 1 : dbStudyCodeIntMax + 1; + + study.Code = currentNextCodeInt; + study.StudyCode = AppSettings.GetCodeStr(currentNextCodeInt, nameof(DicomStudy)); + + _provider.Set($"{trialId}_{StaticData.CacheKey.StudyMaxCode}", study.Code, TimeSpan.FromMinutes(30)); + + } + + + study.Id = IdentifierHelper.CreateGuid(incommand.Study.StudyInstanceUid, incommand.TrialId.ToString()); + study.TrialId = incommand.TrialId; + study.SiteId = incommand.SiteId; + study.SubjectId = incommand.SubjectId; + study.SubjectVisitId = incommand.SubjectVisitId; + + + //特殊处理逻辑 + study.Modalities = string.Join("、", incommand.Study.SeriesList.Select(t => t.Modality).Distinct()); + SpecialArchiveStudyDeal(study); + + await _studyRepository.AddAsync(study); + + + studyMonitor.StudyId = study.Id; + studyMonitor.StudyCode = study.StudyCode; + + + foreach (var seriesItem in incommand.Study.SeriesList) + { + var series = _mapper.Map(seriesItem); + + series.Id = IdentifierHelper.CreateGuid(seriesItem.StudyInstanceUid, seriesItem.SeriesInstanceUid, incommand.TrialId.ToString()); + series.StudyId = study.Id; + + series.TrialId = incommand.TrialId; + series.SiteId = incommand.SiteId; + series.SubjectId = incommand.SubjectId; + series.SubjectVisitId = incommand.SubjectVisitId; + + await _dicomSeriesRepository.AddAsync(series); + + foreach (var instanceItem in seriesItem.InstanceList) + { + var isntance = _mapper.Map(instanceItem); + + Guid instanceId = IdentifierHelper.CreateGuid(study.StudyInstanceUid, series.SeriesInstanceUid, isntance.SopInstanceUid, study.TrialId.ToString()); + + isntance.Id = instanceId; + isntance.StudyId = study.Id; + isntance.SeriesId = series.Id; + + isntance.TrialId = incommand.TrialId; + isntance.SiteId = incommand.SiteId; + isntance.SubjectId = incommand.SubjectId; + isntance.SubjectVisitId = incommand.SubjectVisitId; + + await _dicomInstanceRepository.AddAsync(isntance); + } + } + + + + + } + else + { + + var studyId = IdentifierHelper.CreateGuid(incommand.Study.StudyInstanceUid, incommand.TrialId.ToString()); ; + + var study = await _studyRepository.FirstOrDefaultAsync(t => t.Id == studyId); + + + //特殊处理逻辑 + study.Modalities = string.Join("、", incommand.Study.SeriesList.Select(t => t.Modality).Union(study.Modalities.Split("、", StringSplitOptions.RemoveEmptyEntries)).Distinct()); + SpecialArchiveStudyDeal(study); + + + + // 少了整个序列 + + //某个序列下少了instance + foreach (var seriesItem in incommand.Study.SeriesList) + { + var seriesId = IdentifierHelper.CreateGuid(seriesItem.StudyInstanceUid, seriesItem.SeriesInstanceUid, trialId.ToString()); + + DicomSeries dicomSeries = await _dicomSeriesRepository.FirstOrDefaultAsync(t => t.Id == seriesId); + + //判断重复 + if (dicomSeries == null) + { + var series = _mapper.Map(seriesItem); + + series.Id = seriesId; + series.StudyId = study.Id; + + series.TrialId = incommand.TrialId; + series.SiteId = incommand.SiteId; + series.SubjectId = incommand.SubjectId; + series.SubjectVisitId = incommand.SubjectVisitId; + + + dicomSeries = await _dicomSeriesRepository.AddAsync(series); + + //新的序列 那么 检查的序列数量+1 + study.SeriesCount += 1; + } + else + { + //该序列掉了instance + dicomSeries.InstanceCount += seriesItem.InstanceList.Count; + } + + foreach (var instanceItem in seriesItem.InstanceList) + { + var insntance = _mapper.Map(instanceItem); + insntance.Id = IdentifierHelper.CreateGuid(insntance.StudyInstanceUid, insntance.SeriesInstanceUid, insntance.SopInstanceUid, trialId.ToString()); + insntance.StudyId = study.Id; + insntance.SeriesId = dicomSeries.Id; + + insntance.TrialId = incommand.TrialId; + insntance.SiteId = incommand.SiteId; + insntance.SubjectId = incommand.SubjectId; + insntance.SubjectVisitId = incommand.SubjectVisitId; + + await _dicomInstanceRepository.AddAsync(insntance); + } + + + // 不管是新的序列 还是 该序列 掉了Instance 重传的时候 检查的instance 数量都会增加 + study.InstanceCount += seriesItem.InstanceList.Count; + + } + + + } + + var @lock2 = _distributedLockProvider.CreateLock($"StudyCommit"); + + using (await @lock2.AcquireAsync()) + { + await _dicomInstanceRepository.SaveChangesAsync(); + } + } + catch (Exception ex) + { + + return ResponseOutput.NotOk(ex.Message); + } + finally + { + _provider.Remove($"StudyUid_{incommand.TrialId}_{incommand.Study.StudyInstanceUid}"); + } + + + + + + + + return ResponseOutput.Ok(); + } + + private void SpecialArchiveStudyDeal(DicomStudy study) + { + #region 特殊逻辑 + + + if (study.PatientBirthDate.Length == 8) + { + study.PatientBirthDate = $"{study.PatientBirthDate[0]}{study.PatientBirthDate[1]}{study.PatientBirthDate[2]}{study.PatientBirthDate[3]}-{study.PatientBirthDate[4]}{study.PatientBirthDate[5]}-{study.PatientBirthDate[6]}{study.PatientBirthDate[7]}"; + } + + var dicModalityList = _dictionaryRepository.Where(t => t.Code == "Modality").SelectMany(t => t.ChildList.Select(c => c.Value)).ToList(); + + + var modality = study.Modalities; + + var modalityForEdit = dicModalityList.Contains(modality) ? modality : String.Empty; + + if (modality == "MR") + { + modalityForEdit = "MRI"; + } + + if (modality == "PT") + { + modalityForEdit = "PET"; + } + if (modality == "PT、CT") + { + modalityForEdit = "PET-CT"; + } + + study.ModalityForEdit = modalityForEdit; + #endregion + } } } diff --git a/IRaCIS.Core.Application/Service/Third-partyProject/_MapConfig.cs b/IRaCIS.Core.Application/Service/Third-partyProject/_MapConfig.cs index 0cbd714ec..582212586 100644 --- a/IRaCIS.Core.Application/Service/Third-partyProject/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/Third-partyProject/_MapConfig.cs @@ -4,6 +4,7 @@ using DocumentFormat.OpenXml.Spreadsheet; using IRaCIS.Application.Contracts; using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Application.Contracts.DTO; +using IRaCIS.Core.Application.Service.Third_partyProject.DTO; using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Share; @@ -15,7 +16,11 @@ namespace IRaCIS.Core.Application.Service public UltrasonicDicomConfig() { - + CreateMap() + .ForMember(o => o.TrialSiteCode, t => t.MapFrom(u => u.Subject.TrialSite.TrialSiteCode)) + .ForMember(o => o.SubjectCode, t => t.MapFrom(u => u.Subject.Code)) + .ForMember(o => o.UserName, t => t.MapFrom(u => u.DoctorUser.UserName)) + .ForMember(o => o.FullName, t => t.MapFrom(u => u.DoctorUser.FullName)); } } diff --git a/IRaCIS.Core.Domain/Allocation/VisitTask.cs b/IRaCIS.Core.Domain/Allocation/VisitTask.cs index 73daba8ce..bbc4b3fa8 100644 --- a/IRaCIS.Core.Domain/Allocation/VisitTask.cs +++ b/IRaCIS.Core.Domain/Allocation/VisitTask.cs @@ -426,5 +426,8 @@ namespace IRaCIS.Core.Domain.Models } } + + public int ImageStudyState { get; set; } + } } diff --git a/IRaCIS.Core.Domain/Image/DicomSeries.cs b/IRaCIS.Core.Domain/Image/DicomSeries.cs index 46820e012..4b74fbd7e 100644 --- a/IRaCIS.Core.Domain/Image/DicomSeries.cs +++ b/IRaCIS.Core.Domain/Image/DicomSeries.cs @@ -63,5 +63,7 @@ namespace IRaCIS.Core.Domain.Models public string IamgeResizePath { get; set; }=string.Empty; + public Guid? VisitTaskId { get; set; } + } } From 2e316c35fec760e9e8599df69b91fddcceb78d51 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Tue, 17 Oct 2023 16:11:38 +0800 Subject: [PATCH 11/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs index f8e93eb38..19520f6bc 100644 --- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs +++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs @@ -832,7 +832,7 @@ namespace IRaCIS.Core.Domain.Share Normal = 1, /// - /// 缓解 + /// 部分缓解 /// Remission = 2, @@ -854,10 +854,11 @@ namespace IRaCIS.Core.Domain.Share /// /// 肿大 /// - Swelling = 5, + Swelling = 6, } + /// /// 是(1)或否(0) /// From b72e90f0b9bbb4318627d72ef5b49d7f8a6d46e4 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Tue, 17 Oct 2023 16:46:37 +0800 Subject: [PATCH 12/52] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ReadingCalculate/LuganoCalculateService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index 3058eb539..3e496c83e 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -1786,7 +1786,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate } else { - result = SpleenAssessment.Remission; + result = SpleenAssessment.Stabilization; } return result.GetEnumInt(); } From 79c21b24cd3f92b6d34046f0c13c083cd620b92d Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Tue, 17 Oct 2023 16:57:52 +0800 Subject: [PATCH 13/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ReadingCalculate/LuganoCalculateService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index 3e496c83e..d0dff3dfb 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -1748,7 +1748,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate decimal percentage = 0; if (baseLineSpleenLength != 0) { - percentage = differenceValue * 100 / baseLineSpleenLength; + percentage = differenceValue * 100 / (baseLineSpleenLength-130); } // 1、基线 垂直径> 130 mm From b8c7441c92b0fe1369d970c5c1e2c1f44673691f Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Tue, 17 Oct 2023 17:48:55 +0800 Subject: [PATCH 14/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReadingImageTaskService.cs | 2 +- .../LuganoCalculateService.cs | 32 ++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index 495dbc433..994153238 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -2549,7 +2549,7 @@ namespace IRaCIS.Application.Services { var cacheKey = _userInfo.Id.ToString()+ "RestTime"; - + throw new BusinessValidationFailedException(_localizer["ReadingImage_NeedRest", 2, 20]); var value = _provider.Get(cacheKey).Value; if (value == null) { diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index d0dff3dfb..7472fc19f 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -1719,6 +1719,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate public async Task GetSplenicState(Guid visitTaskId,decimal spleenLength) { + var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).FirstNotNullAsync(); ReadingCalculateDto inDto = await _generalCalculateService.GetReadingCalculateDto(visitTaskId); if (inDto.IsBaseLine) @@ -1734,6 +1735,33 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate } + #region 最低 + var visitTaskIds = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit && + x.TrialReadingCriterionId == taskinfo.TrialReadingCriterionId && + x.IsAnalysisCreate == taskinfo.IsAnalysisCreate && + x.DoctorUserId == taskinfo.DoctorUserId && + x.IsSelfAnalysis == taskinfo.IsSelfAnalysis && + x.SubjectId == taskinfo.SubjectId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.ArmEnum == taskinfo.ArmEnum + && x.VisitTaskNum < taskinfo.VisitTaskNum && x.TaskState == TaskState.Effect + ).OrderByDescending(x => x.VisitTaskNum).Select(x => x.Id).ToListAsync(); + + var questionId = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == taskinfo.TrialReadingCriterionId && x.QuestionType == QuestionType.SplenicStatus).Select(x => x.Id).FirstNotNullAsync(); + var answerList = await _readingTaskQuestionAnswerRepository.Where(x => visitTaskIds.Contains(x.VisitTaskId) + && x.ReadingQuestionTrialId == questionId ) + .Select(x => new + { + x.Answer, + x.VisitTaskId, + }).ToListAsync(); + + var lowSpleenLength = answerList.Select(x => new + { + Answer = x.Answer.IsNullOrEmptyReturn0(), + x.VisitTaskId + }).OrderBy(x => x.Answer).Select(x=>x.Answer).FirstOrDefault(); + #endregion + + var result = SpleenAssessment.Stabilization; @@ -1745,6 +1773,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate var differenceValue = presentSpd - baseLineSpleenLength; + + var differenceLowValue = presentSpd - lowSpleenLength; decimal percentage = 0; if (baseLineSpleenLength != 0) { @@ -1769,7 +1799,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate //2、当前访视的前面访视中 存在垂直径≤130mm //3、与最低点相比脾脏垂直径的增加值≥20 mm //4、当前垂直径 > 130 mm - else if (baseLineSpleenLength > 130 && presentSpd <= 130 && differenceValue >= 20 && presentSpd > 130) + else if (baseLineSpleenLength > 130 && presentSpd <= 130 && differenceLowValue >= 20 && presentSpd > 130) { result = SpleenAssessment.Increase; } From 6df90997075c231b2d7e18f808566fd1cf18ada6 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Tue, 17 Oct 2023 17:53:03 +0800 Subject: [PATCH 15/52] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reading/ReadingImageTask/ReadingImageTaskService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index 994153238..d89d8d989 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -2549,7 +2549,7 @@ namespace IRaCIS.Application.Services { var cacheKey = _userInfo.Id.ToString()+ "RestTime"; - throw new BusinessValidationFailedException(_localizer["ReadingImage_NeedRest", 2, 20]); + var value = _provider.Get(cacheKey).Value; if (value == null) { @@ -2566,7 +2566,7 @@ namespace IRaCIS.Application.Services { throw new BusinessValidationFailedException(_localizer["ReadingImage_NeedRest", 2, 20]); } - else if (timespanMin > 140) + else if (timespanMin > 1) { cacheDate = cacheDate.AddMinutes((Math.Floor((double)(timespanMin / 140))) * 140); _provider.Set(cacheKey, cacheDate.ToString(), TimeSpan.FromHours(5)); From 473bb64b42efe865ec80e92f687c100e156daffe Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 18 Oct 2023 09:10:20 +0800 Subject: [PATCH 16/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ReadingCalculate/LuganoCalculateService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index 7472fc19f..525065fef 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -1799,7 +1799,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate //2、当前访视的前面访视中 存在垂直径≤130mm //3、与最低点相比脾脏垂直径的增加值≥20 mm //4、当前垂直径 > 130 mm - else if (baseLineSpleenLength > 130 && presentSpd <= 130 && differenceLowValue >= 20 && presentSpd > 130) + else if (baseLineSpleenLength > 130 && lowSpleenLength <= 130 && differenceLowValue >= 20 && presentSpd > 130) { result = SpleenAssessment.Increase; } From 296b510c41c509f3ba755c06476b9f4084bc1357 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 18 Oct 2023 10:08:20 +0800 Subject: [PATCH 17/52] =?UTF-8?q?=E5=AD=97=E6=AE=B5=E5=90=8D=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ImageAndDoc/DTO/DicomSeriesModel.cs | 2 +- .../Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DicomSeriesModel.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DicomSeriesModel.cs index e9a16ca10..a9062fd24 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DicomSeriesModel.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DicomSeriesModel.cs @@ -41,7 +41,7 @@ public string WindowCenter { get; set; } = string.Empty; public string WindowWidth { get; set; } = string.Empty; - public string IamgeResizePath { get; set; } + public string ImageResizePath { get; set; } } public class DicomSeriesWithLabelDTO : DicomSeriesDTO diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs index 4b08c12d0..ab1beb6eb 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs @@ -282,7 +282,7 @@ namespace IRaCIS.Core.Application.Contracts public string AcquisitionNumber { get; set; } = string.Empty; public string TriggerTime { get; set; } = string.Empty; - public string IamgeResizePath { get; set; }=string.Empty; + public string ImageResizePath { get; set; }=string.Empty; public List InstanceList { get; set; } public Guid? VisitTaskId { get; set; } From 064abbf8dd45e817b8761d8bdf23ded9bf845cc7 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 18 Oct 2023 10:17:32 +0800 Subject: [PATCH 18/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReadingCalculate/LuganoCalculateService.cs | 2 +- IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index 525065fef..1208adc21 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -1810,7 +1810,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate } //1、基线期 状态为“肿大” //与基线相比脾肿大增加的百分比 > 50% - else if (baseLineState.EqEnum(SpleenState.Swelling) && percentage > 50) + else if (baseLineState.EqEnum(SpleenAssessment.Swelling) && percentage > 50) { result = SpleenAssessment.Remission; } diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs index 19520f6bc..e2ac99422 100644 --- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs +++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs @@ -912,20 +912,25 @@ namespace IRaCIS.Core.Domain.Share /// public enum SpleenState { + /// + /// NA + /// + NA = -1, + /// /// 正常 /// Normal = 1, /// - /// 肿大 + /// 部分缓解 /// - Swelling = 2, + Remission = 2, /// - /// 部分缓解稳定 + /// 稳定 /// - PartialRemission = 3, + Stabilization = 3, /// /// 显著增大 @@ -937,6 +942,11 @@ namespace IRaCIS.Core.Domain.Share /// NotEvaluable = 5, + /// + /// 肿大 + /// + Swelling = 6, + } /// From 6019fdbe363a3699440c42ae176e949eaaaae984 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 18 Oct 2023 10:22:25 +0800 Subject: [PATCH 19/52] =?UTF-8?q?=E9=81=97=E6=BC=8FSubjectId?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.Application/IRaCIS.Core.Application.xml | 8 ++++++++ .../Third-partyProject/DTO/UltrasonicDicomViewModel.cs | 1 + 2 files changed, 9 insertions(+) diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 1a0dd5f22..26f9eb556 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -1918,6 +1918,14 @@ + + + 获取脾脏状态 + + + + + 获取脾脏评估 diff --git a/IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs b/IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs index 0068f91db..ff508d461 100644 --- a/IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs +++ b/IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs @@ -49,6 +49,7 @@ namespace IRaCIS.Core.Application.Service.Third_partyProject.DTO public class VisitTaskDTO_UltrasonicDicom { public Guid Id { get;set; } + public Guid SubjectId { get; set; } public String TrialSiteCode { get; set; } = String.Empty; public string SubjectCode { get; set; } = String.Empty; public string UserName { get; set; } From 7cf23668affdffe9732d827f009031740960acc9 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 18 Oct 2023 10:27:01 +0800 Subject: [PATCH 20/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ReadingCalculate/LuganoCalculateService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index 1208adc21..d52a4df1b 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -1745,7 +1745,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate && x.VisitTaskNum < taskinfo.VisitTaskNum && x.TaskState == TaskState.Effect ).OrderByDescending(x => x.VisitTaskNum).Select(x => x.Id).ToListAsync(); - var questionId = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == taskinfo.TrialReadingCriterionId && x.QuestionType == QuestionType.SplenicStatus).Select(x => x.Id).FirstNotNullAsync(); + var questionId = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == taskinfo.TrialReadingCriterionId && x.QuestionType == QuestionType.SpleenLength).Select(x => x.Id).FirstNotNullAsync(); var answerList = await _readingTaskQuestionAnswerRepository.Where(x => visitTaskIds.Contains(x.VisitTaskId) && x.ReadingQuestionTrialId == questionId ) .Select(x => new From 56295b3c98b3bc71c47b1add5bedb2b8a1f2828a Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 18 Oct 2023 10:40:35 +0800 Subject: [PATCH 21/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E4=BF=9D=E5=AD=98=E5=BC=82=E5=B8=B8=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.Domain/Image/DicomSeries.cs | 2 +- IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.Domain/Image/DicomSeries.cs b/IRaCIS.Core.Domain/Image/DicomSeries.cs index 4b74fbd7e..d59070e40 100644 --- a/IRaCIS.Core.Domain/Image/DicomSeries.cs +++ b/IRaCIS.Core.Domain/Image/DicomSeries.cs @@ -61,7 +61,7 @@ namespace IRaCIS.Core.Domain.Models public bool IsDeleted {get;set;} public bool IsReading { get; set; } = true; - public string IamgeResizePath { get; set; }=string.Empty; + public string ImageResizePath { get; set; }=string.Empty; public Guid? VisitTaskId { get; set; } diff --git a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs index 068df0e6d..af07c7462 100644 --- a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs +++ b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs @@ -589,6 +589,12 @@ namespace IRaCIS.Core.Infra.EFCore throw new DBSaveFailedException("SQL 事务失败,请检查环境。"); } + catch (Exception ex) + { + _logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message); + + throw new DBSaveFailedException("数据保存异常。"); + } } From 665c88a681261f78d9b8d0decfd6111441ce9dd8 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 18 Oct 2023 10:50:51 +0800 Subject: [PATCH 22/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ReadingCalculate/LuganoCalculateService.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index d52a4df1b..252c616a9 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -1734,6 +1734,10 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate } } + if (spleenLength == 0) + { + return SpleenAssessment.NotEvaluable.GetEnumInt(); + } #region 最低 var visitTaskIds = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit && From 03f7173855a35ca48615ed1a164bc4d839c0543a Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 18 Oct 2023 11:41:06 +0800 Subject: [PATCH 23/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Reading/ReadingImageTask/ReadingImageTaskService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index d89d8d989..495dbc433 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -2566,7 +2566,7 @@ namespace IRaCIS.Application.Services { throw new BusinessValidationFailedException(_localizer["ReadingImage_NeedRest", 2, 20]); } - else if (timespanMin > 1) + else if (timespanMin > 140) { cacheDate = cacheDate.AddMinutes((Math.Floor((double)(timespanMin / 140))) * 140); _provider.Set(cacheKey, cacheDate.ToString(), TimeSpan.FromHours(5)); From e789c32564eb28cc15f5a8479e00dba3acf50062 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 18 Oct 2023 11:41:23 +0800 Subject: [PATCH 24/52] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=98=85=E7=89=87?= =?UTF-8?q?=E6=A0=87=E5=87=86=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Third-partyProject/DTO/UltrasonicDicomViewModel.cs | 3 +++ .../Service/Third-partyProject/_MapConfig.cs | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs b/IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs index ff508d461..b804536ad 100644 --- a/IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs +++ b/IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs @@ -63,6 +63,9 @@ namespace IRaCIS.Core.Application.Service.Third_partyProject.DTO public decimal VisitTaskNum { get; set; } public int ImageStudyState { get; set; } + + public Guid TrialReadingCriterionId { get; set; } + public string TrialReadingCriterionName { get; set; } } public class UpdateTaskImageStateCommand diff --git a/IRaCIS.Core.Application/Service/Third-partyProject/_MapConfig.cs b/IRaCIS.Core.Application/Service/Third-partyProject/_MapConfig.cs index 582212586..900ca913f 100644 --- a/IRaCIS.Core.Application/Service/Third-partyProject/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/Third-partyProject/_MapConfig.cs @@ -20,7 +20,9 @@ namespace IRaCIS.Core.Application.Service .ForMember(o => o.TrialSiteCode, t => t.MapFrom(u => u.Subject.TrialSite.TrialSiteCode)) .ForMember(o => o.SubjectCode, t => t.MapFrom(u => u.Subject.Code)) .ForMember(o => o.UserName, t => t.MapFrom(u => u.DoctorUser.UserName)) - .ForMember(o => o.FullName, t => t.MapFrom(u => u.DoctorUser.FullName)); + .ForMember(o => o.FullName, t => t.MapFrom(u => u.DoctorUser.FullName)) + .ForMember(o => o.TrialReadingCriterionName, t => t.MapFrom(u => u.TrialReadingCriterion.CriterionName)) + ; } } From 108be0bc23ac468976fa84eb4faa28c7ee32c201 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 18 Oct 2023 12:18:54 +0800 Subject: [PATCH 25/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A3=80=E6=9F=A5?= =?UTF-8?q?=E5=BA=8F=E5=88=97=E5=B1=82=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Third-partyProject/DTO/UltrasonicDicomViewModel.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs b/IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs index b804536ad..a59bc54b2 100644 --- a/IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs +++ b/IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs @@ -89,6 +89,9 @@ namespace IRaCIS.Core.Application.Service.Third_partyProject.DTO public string StudyCode { get; set; } + + public List ModalitySeriesList => SeriesModalityList.GroupBy(t=>t.Modality).Select(g=>new ModalitySeriesIdList() { Modality= g.Key,SeriesIdList=g.Select(t=>t.SeriesId).ToList() }).ToList(); + public List SeriesModalityList { get; set; } } @@ -100,6 +103,13 @@ namespace IRaCIS.Core.Application.Service.Third_partyProject.DTO public List SeriesIdList { get; set; } } + + public class ModalitySeriesIdList + { + public string Modality { get; set; } + + public List SeriesIdList { get; set; } + } public class SeriesModality { public Guid SeriesId { get; set; } From a0f756a4cb9f9a5d310d24ca6b8062cafba9eeb4 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 18 Oct 2023 13:31:58 +0800 Subject: [PATCH 26/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ReadingCalculate/LuganoCalculateService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index 252c616a9..9de580fbe 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -400,7 +400,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate if (lowPddTaskid != null && lowPddTaskid != default(Guid)) { - var lowPPDAnswerList = await _readingTableQuestionAnswerRepository.Where(x => visitTaskIds.Contains(x.VisitTaskId) + var lowPPDAnswerList = await _readingTableQuestionAnswerRepository.Where(x =>x.VisitTaskId== lowPddTaskid && x.QuestionId == inDto.QuestionId && x.RowIndex == inDto.RowIndex).Include(x => x.ReadingTableQuestionTrial) .Select(x => new From 7c1e91b94523a7e32d7f8c3da7a8a67f78e2dceb Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 18 Oct 2023 13:49:20 +0800 Subject: [PATCH 27/52] StudyId bug --- .../Service/Third-partyProject/UltrasonicDicomService.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/IRaCIS.Core.Application/Service/Third-partyProject/UltrasonicDicomService.cs b/IRaCIS.Core.Application/Service/Third-partyProject/UltrasonicDicomService.cs index f2d496d29..51fb1ceea 100644 --- a/IRaCIS.Core.Application/Service/Third-partyProject/UltrasonicDicomService.cs +++ b/IRaCIS.Core.Application/Service/Third-partyProject/UltrasonicDicomService.cs @@ -175,6 +175,7 @@ namespace IRaCIS.Core.Application.Service.Third_partyProject var list = await _visitTaskRepository.Where(t => t.Id == visiTaskId).Select(t => t.SourceSubjectVisit).SelectMany(t => t.StudyList).Select(t => new StudySeriesModality { + StudyId = t.Id, SeriesCount = t.SeriesCount, StudyCode = t.StudyCode, SeriesModalityList = t.SeriesList.Select(t => new SeriesModality { SeriesId = t.Id, Modality = t.Modality }).ToList() From c469b5e50655880db9de39c50eeb613ec4e9b938 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 18 Oct 2023 14:40:55 +0800 Subject: [PATCH 28/52] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ReadingCalculate/LuganoCalculateService.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index 9de580fbe..d3ed2678d 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -2414,10 +2414,13 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate { result = TargetAssessment.PD; } - //在排除PD后,有任一靶病灶为NE状态 - else if (tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(TargetState.UnableEvaluate))) + //当前访视没有任何一个状态为“疾病进展”的靶病灶; + //当前访视存在至少一个状态为“不可评估”的靶病灶。 + else if ( + !tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(TargetState.DiseaseProgression))&& + tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(TargetState.UnableEvaluate))) { - result = TargetAssessment.PD; + result = TargetAssessment.NE; } //1、基线非淋巴结靶病灶不存在,或者当前访视非淋巴结靶病灶全部消失; //并且 2.当前访视淋巴结靶病灶的状态全部变为“消失”。 From 91bd2ac69f7d53d676bc6216cb6373090339ba13 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 18 Oct 2023 16:23:30 +0800 Subject: [PATCH 29/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LuganoCalculateService.cs | 40 +++++++++++++++++-- IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs | 10 ++--- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index d3ed2678d..95b18b621 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -520,6 +520,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate //获取肝脏评估 new ReadingCalculateData (){QuestionType=QuestionType.LiverAssessment,GetStringFun=GetLiverAssessment}, + + // 骨髓中是否存在局灶性 FDG亲和病灶的证据 + new ReadingCalculateData (){QuestionType=QuestionType.EvidenceFocalFDG,GetStringFun=GetEvidenceFocalFDG}, ////靶病灶径线之和(SOD) //new ReadingCalculateData (){QuestionType=QuestionType.SOD,GetDecimalNullFun=GetSODData}, @@ -1622,7 +1625,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate var presentSpd = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SPD).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0(); if (baseLineSpd != 0) { - return (presentSpd - baseLineSpd) / baseLineSpd; + return (presentSpd - baseLineSpd)*100 / baseLineSpd; } else { @@ -1913,10 +1916,18 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate /// public async Task GetPET5PS(ReadingCalculateDto inDto) { - if (inDto.IsBaseLine) + //if (inDto.IsBaseLine) + //{ + // return SpleenAssessment.Stabilization.GetEnumInt(); + //} + + if (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.ExistPET && x.Answer == ReadingYesOrNo.No.GetEnumInt())) { - return SpleenAssessment.Stabilization.GetEnumInt(); + return PET5PSScore.NE.GetEnumInt(); } + + + PET5PSScore result = PET5PSScore.X; // 最大Suvmax @@ -1978,6 +1989,11 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate return SUVChangeVSBaseline.NotEvaluable.GetEnumInt(); } + if (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.ExistPET && x.Answer == ReadingYesOrNo.No.GetEnumInt())) + { + return SUVChangeVSBaseline.NotEvaluable.GetEnumInt(); + } + var result = SUVChangeVSBaseline.NotEvaluable; var baseLineTaskId = await GetBaseLineTaskId(inDto); @@ -2105,7 +2121,25 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate } #endregion + #region 骨髓中是否存在局灶性 FDG亲和病灶的证据 + /// + /// 骨髓中是否存在局灶性 FDG亲和病灶的证据 + /// + /// + /// + public async Task GetEvidenceFocalFDG(ReadingCalculateDto inDto) + { + if (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.ExistPET && x.Answer == ReadingYesOrNo.No.GetEnumInt())) + { + return FDGAffinityFociInBM.NE.GetEnumInt(); + } + else + { + return inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.EvidenceFocalFDG).Select(x => x.Answer).FirstOrDefault(); + } + } + #endregion #region 肝脏评估 /// diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs index e2ac99422..8ace74a1f 100644 --- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs +++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs @@ -2230,12 +2230,10 @@ public enum SUVChangeVSBaseline - - - /// - /// PET 5PS 评分 - /// - public enum PET5PSScore +/// +/// PET 5PS 评分 +/// +public enum PET5PSScore { /// /// 5分 From e5f10d052a1372b0f0ee55b6487675a2aa9ed8cb Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 18 Oct 2023 16:28:25 +0800 Subject: [PATCH 30/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ReadingCalculate/LuganoCalculateService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index 95b18b621..87320cdee 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -493,7 +493,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate new ReadingCalculateData (){QuestionType=QuestionType.NoTargetLesion,GetStringFun=GetNoTargetLesionEvaluate}, //新病灶评估 - new ReadingCalculateData (){QuestionType=QuestionType.NewLesions,GetStringFun=GetNewLesionEvaluate}, + new ReadingCalculateData (){QuestionType=QuestionType.NewLesionEvaluation,GetStringFun=GetNewLesionEvaluate}, //CT/MRI new ReadingCalculateData (){QuestionType=QuestionType.CTandMRI,GetStringFun=CTMRIEvaluation}, From 682a5d1c44587353bf6e1eb2513e4907d389ad47 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 18 Oct 2023 17:57:37 +0800 Subject: [PATCH 31/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LuganoCalculateService.cs | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index 87320cdee..b5476d799 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -2379,11 +2379,14 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate /// public async Task GetTargetLesionEvaluate(ReadingCalculateDto inDto) { + + + var rowInfo = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.TargetLesion).SelectMany(x => x.TableRowInfoList).ToList(); - //if (inDto.IsBaseLine) - //{ - // return TargetAssessment.NA.GetEnumInt(); - //} + if (inDto.IsBaseLine) + { + return TargetAssessment.NA.GetEnumInt(); + } var tableQuestions = rowInfo.SelectMany(x => x.TableQuestionList).ToList(); TargetAssessment result = TargetAssessment.SD; @@ -2486,10 +2489,10 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate NoTargetAssessment result = NoTargetAssessment.PD; - //if (inDto.IsBaseLine) - //{ - // return NoTargetAssessment.NA.GetEnumInt(); - //} + if (inDto.IsBaseLine) + { + return NoTargetAssessment.NA.GetEnumInt(); + } var tableRows = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.NonTargetLesions).SelectMany(x => x.TableRowInfoList).ToList(); From 3d92fac1d68af9a9d4b114092b823de8261000eb Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 19 Oct 2023 09:16:43 +0800 Subject: [PATCH 32/52] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ReadingCalculate/LuganoCalculateService.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index b5476d799..72131fd0d 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -2590,6 +2590,10 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate /// public async Task CTMRIEvaluation(ReadingCalculateDto inDto) { + if (inDto.IsBaseLine) + { + return CTMRIOverallAssessment.NA.GetEnumInt(); + } // 靶病灶评估 var targetEvaluation = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.TargetLesion).Select(x => x.Answer).FirstOrDefault(); From 1f1500c66172cefc0aba40b860d3dae31a105685 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 19 Oct 2023 10:50:07 +0800 Subject: [PATCH 33/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ReadingCalculate/LuganoCalculateService.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index 72131fd0d..c042f076a 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -2598,10 +2598,10 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate var targetEvaluation = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.TargetLesion).Select(x => x.Answer).FirstOrDefault(); // 非靶病灶评估 - var noTargetEvaluation = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NETarget).Select(x => x.Answer).FirstOrDefault(); + var noTargetEvaluation = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NoTargetLesion).Select(x => x.Answer).FirstOrDefault(); // 存在新病灶 - var existsNewTarget = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NewTargetLesion).Select(x => x.Answer).FirstOrDefault(); + var existsNewTarget = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NewLesionEvaluation).Select(x => x.Answer).FirstOrDefault(); // 肝脏评估 var liverEvaluation = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LiverAssessment).Select(x => x.Answer).FirstOrDefault(); @@ -2615,7 +2615,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate new CalculationDto(){ Column1=ReadingCommon.EnumToString(new List() { TargetAssessment.ND }), Column2=ReadingCommon.EnumToString(new List() { NoTargetAssessment.ND }), - Column3=ReadingCommon.EnumToString(new List() { NewLesionAssessment.No,NewLesionAssessment.Suspected }), + Column3=ReadingCommon.EnumToString(new List() { NewLesionAssessment.No, NewLesionAssessment.Suspected }), Column4=ReadingCommon.EnumToString(new List() { LiverAssessment.Normal }), Column5=ReadingCommon.EnumToString(new List() { SpleenAssessment.Normal }), Column6=ReadingCommon.EnumToString(new List() { CTMRIOverallAssessment.ND }), From baaf5af664d62dd365259e185cdff451f3bfe61f Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 19 Oct 2023 13:17:26 +0800 Subject: [PATCH 34/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ReadingCalculate/LuganoCalculateService.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index c042f076a..fe7294f38 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -2646,7 +2646,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate Column3=ReadingCommon.EnumToString(new List() { NewLesionAssessment.Yes }), Column4=ReadingCommon.EnumToString(new List() { }), Column5=ReadingCommon.EnumToString(new List() { }), - Column6=ReadingCommon.EnumToString(new List() { CTMRIOverallAssessment.ND }), + Column6=ReadingCommon.EnumToString(new List() { CTMRIOverallAssessment.PD }), }, //任一结果 任一结果 任一结果 显著增大 任一结果 PD new CalculationDto(){ @@ -2655,7 +2655,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate Column3=ReadingCommon.EnumToString(new List() { }), Column4=ReadingCommon.EnumToString(new List() { LiverAssessment.Increase }), Column5=ReadingCommon.EnumToString(new List() { }), - Column6=ReadingCommon.EnumToString(new List() { CTMRIOverallAssessment.ND }), + Column6=ReadingCommon.EnumToString(new List() { CTMRIOverallAssessment.PD }), }, //任一结果 任一结果 任一结果 任一结果 显著增大 PD new CalculationDto(){ @@ -2664,7 +2664,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate Column3=ReadingCommon.EnumToString(new List() {}), Column4=ReadingCommon.EnumToString(new List() { }), Column5=ReadingCommon.EnumToString(new List() { SpleenAssessment.Increase }), - Column6=ReadingCommon.EnumToString(new List() { CTMRIOverallAssessment.ND }), + Column6=ReadingCommon.EnumToString(new List() { CTMRIOverallAssessment.PD }), }, //CR CR/ND 否 正常 正常 CR new CalculationDto(){ From a1bd7b4815ae8aa663cb8cafe66fdce6451073be Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 19 Oct 2023 13:34:21 +0800 Subject: [PATCH 35/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs index 8ace74a1f..9e3878336 100644 --- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs +++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs @@ -894,17 +894,22 @@ namespace IRaCIS.Core.Domain.Share /// /// 稳定 /// - Stabilization = 2, + Tumefaction = 2, + + /// + /// 稳定 + /// + Stabilization = 3, /// /// 显著增大 /// - Increase = 3, + Increase = 4, /// /// 无法评估 /// - NotEvaluable = 4, + NotEvaluable = 5, } /// From e43b28969e79fab0c0a125ed1ef021ca4f53b7ea Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 19 Oct 2023 13:49:38 +0800 Subject: [PATCH 36/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ReadingCalculate/LuganoCalculateService.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index fe7294f38..8fe86623b 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -2716,7 +2716,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate }, //ND ND 否/疑似 无法评估 正常/稳定/无法评估/部分缓解(非显著增大) NE new CalculationDto(){ - NotEq=new List(){ 4}, + NotEq=new List(){ 5}, Column1=ReadingCommon.EnumToString(new List() { TargetAssessment.ND }), Column2=ReadingCommon.EnumToString(new List() { NoTargetAssessment.ND }), Column3=ReadingCommon.EnumToString(new List() { NewLesionAssessment.No,NewLesionAssessment.Suspected }), @@ -2783,6 +2783,14 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate }, }; + var index= data.FindIndex(x => + (x.NotEq.Contains(1) ? !x.Column1.Contains(targetEvaluation) : x.Column1.Contains(targetEvaluation) || x.Column1.Count() == 0) && + (x.NotEq.Contains(2) ? !x.Column2.Contains(noTargetEvaluation) : x.Column2.Contains(noTargetEvaluation) || x.Column2.Count() == 0) && + (x.NotEq.Contains(3) ? !x.Column3.Contains(existsNewTarget) : x.Column3.Contains(existsNewTarget) || x.Column3.Count() == 0) && + (x.NotEq.Contains(4) ? !x.Column4.Contains(liverEvaluation) : x.Column4.Contains(liverEvaluation) || x.Column4.Count() == 0) && + (x.NotEq.Contains(5) ? !x.Column5.Contains(spleenEvaluation) : x.Column5.Contains(spleenEvaluation) || x.Column5.Count() == 0)) + ; + Console.WriteLine(index); var result = data.Where(x => (x.NotEq.Contains(1) ? !x.Column1.Contains(targetEvaluation) : x.Column1.Contains(targetEvaluation) || x.Column1.Count() == 0) && (x.NotEq.Contains(2) ? !x.Column2.Contains(noTargetEvaluation) : x.Column2.Contains(noTargetEvaluation) || x.Column2.Count() == 0) && From 5934178a5fd9d927a85006477a9fcb7a50dcec17 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 19 Oct 2023 14:15:13 +0800 Subject: [PATCH 37/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReadingCalculate/LuganoCalculateService.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index 8fe86623b..c20d4dfe4 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -495,6 +495,12 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate //新病灶评估 new ReadingCalculateData (){QuestionType=QuestionType.NewLesionEvaluation,GetStringFun=GetNewLesionEvaluate}, + //获取肝脏评估 + new ReadingCalculateData (){QuestionType=QuestionType.LiverAssessment,GetStringFun=GetLiverAssessment}, + + // 骨髓中是否存在局灶性 FDG亲和病灶的证据 + new ReadingCalculateData (){QuestionType=QuestionType.EvidenceFocalFDG,GetStringFun=GetEvidenceFocalFDG}, + //CT/MRI new ReadingCalculateData (){QuestionType=QuestionType.CTandMRI,GetStringFun=CTMRIEvaluation}, @@ -518,11 +524,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate // SUVmax所在病灶 new ReadingCalculateData (){QuestionType=QuestionType.SUVmaxLesion,GetStringFun=GetSuvMaxFocus}, - //获取肝脏评估 - new ReadingCalculateData (){QuestionType=QuestionType.LiverAssessment,GetStringFun=GetLiverAssessment}, + - // 骨髓中是否存在局灶性 FDG亲和病灶的证据 - new ReadingCalculateData (){QuestionType=QuestionType.EvidenceFocalFDG,GetStringFun=GetEvidenceFocalFDG}, + ////靶病灶径线之和(SOD) //new ReadingCalculateData (){QuestionType=QuestionType.SOD,GetDecimalNullFun=GetSODData}, From 04a702fb0e5f171b304c92d25478eef406549380 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 19 Oct 2023 15:21:38 +0800 Subject: [PATCH 38/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ReadingCalculate/LuganoCalculateService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index c20d4dfe4..cc5cff723 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -2643,9 +2643,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate Column5=ReadingCommon.EnumToString(new List() { }), Column6=ReadingCommon.EnumToString(new List() { CTMRIOverallAssessment.PD }), }, - //PD 任一结果 是 任一结果 任一结果 PD + //任一结果 任一结果 是 任一结果 任一结果 PD new CalculationDto(){ - Column1=ReadingCommon.EnumToString(new List() { TargetAssessment.PD }), + Column1=ReadingCommon.EnumToString(new List() { }), Column2=ReadingCommon.EnumToString(new List() { }), Column3=ReadingCommon.EnumToString(new List() { NewLesionAssessment.Yes }), Column4=ReadingCommon.EnumToString(new List() { }), From 65ae0e06f5c70346aa38d93aa51cb83d283b92b7 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 19 Oct 2023 16:04:38 +0800 Subject: [PATCH 39/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ReadingCalculate/LuganoCalculateService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index cc5cff723..7e16561e0 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -2688,9 +2688,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate Column5=ReadingCommon.EnumToString(new List() { SpleenAssessment.Normal }), Column6=ReadingCommon.EnumToString(new List() { CTMRIOverallAssessment.CR }), }, - //NE 非PD 否/疑似/无法评估 显著增大 显著增大 NE + //NE 非PD 否/疑似/无法评估 非显著增大 非显著增大 NE new CalculationDto(){ - NotEq=new List(){ 2}, + NotEq=new List(){ 2,4,5}, Column1=ReadingCommon.EnumToString(new List() { TargetAssessment.NE }), Column2=ReadingCommon.EnumToString(new List() { NoTargetAssessment.PD }), Column3=ReadingCommon.EnumToString(new List() { NewLesionAssessment.No,NewLesionAssessment.Suspected, NewLesionAssessment.NE}), From e6cd24065c6b789484edebf1f50d9674f0de302a Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 19 Oct 2023 17:10:31 +0800 Subject: [PATCH 40/52] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reading/Dto/ReadingCalculateViewModel.cs | 9 ++++++++- .../ReadingImageTask/ReadingImageTaskService.cs | 2 ++ .../General/ReadingCalculateService.cs | 2 +- .../ReadingCalculate/LuganoCalculateService.cs | 5 ++++- IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs | 16 ++++++++++++++++ 5 files changed, 31 insertions(+), 3 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs index a8c54a077..dab5f2a05 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs @@ -50,6 +50,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public bool IsChangeOtherTask { get; set; } + + public ComputationTrigger ComputationTrigger { get; set; } } public class TargetLesionCalculateDto @@ -218,7 +220,9 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public Guid SubjectVisitId { get; set; } - public Arm ArmEnum { get; set; } + public Arm ArmEnum { get; set; } + + public ComputationTrigger ComputationTrigger { get; set; } = ComputationTrigger.Lesion; /// /// 是否修改其他任务 @@ -348,6 +352,9 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto { public QuestionType QuestionType { get; set; } + + public ComputationTrigger? ComputationTrigger { get; set; } + public Func> GetDecimalFun { get; set; } public Func> GetIntFun { get; set; } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index 495dbc433..dcf3282cb 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -1741,6 +1741,7 @@ namespace IRaCIS.Application.Services { IsChangeOtherTask = false, VisitTaskId = inDto.VisitTaskId, + ComputationTrigger=ComputationTrigger.Lesion, }); return ResponseOutput.Ok(true); } @@ -2141,6 +2142,7 @@ namespace IRaCIS.Application.Services { IsChangeOtherTask = false, VisitTaskId = inDto.VisitTaskId, + ComputationTrigger = ComputationTrigger.Lesion, }); diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/General/ReadingCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/General/ReadingCalculateService.cs index ff966babf..49509412d 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/General/ReadingCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/General/ReadingCalculateService.cs @@ -196,7 +196,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate { await service.CalculateTask(new CalculateTaskInDto() { - + ComputationTrigger= ComputationTrigger.Report, VisitTaskId = inDto.VisitTaskId }); } diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index 7e16561e0..ac4a418cb 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -429,6 +429,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate { ReadingCalculateDto readingData = await _generalCalculateService.GetReadingCalculateDto(inDto.VisitTaskId); readingData.IsChangeOtherTask = inDto.IsChangeOtherTask; + readingData.ComputationTrigger = inDto.ComputationTrigger; await ReadingCalculate(readingData); } @@ -505,7 +506,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate new ReadingCalculateData (){QuestionType=QuestionType.CTandMRI,GetStringFun=CTMRIEvaluation}, // PET 5PS评分 - new ReadingCalculateData (){QuestionType=QuestionType.PET5PS,GetStringFun=GetPET5PS}, + new ReadingCalculateData (){QuestionType=QuestionType.PET5PS,GetStringFun=GetPET5PS,ComputationTrigger=ComputationTrigger.Lesion}, //与基线相比摄取值变化 new ReadingCalculateData (){QuestionType=QuestionType.UptakeChange,GetStringFun=GetUptakeChange}, @@ -609,6 +610,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate calculateList = calculateList.Where(x => calculateType.Contains(x.QuestionType)).ToList(); } + + calculateList = calculateList.Where(x => x.ComputationTrigger == null || x.ComputationTrigger == inDto.ComputationTrigger).ToList(); var typeNAList = new List { QuestionType.SODChange, diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs index 9e3878336..2d562f219 100644 --- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs +++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs @@ -2277,6 +2277,22 @@ public enum PET5PSScore } + /// + /// 计算触发 + /// + public enum ComputationTrigger + { + /// + /// 病灶 + /// + Lesion=0, + + /// + /// 报告 + /// + Report=1, + } + /// /// 新靶病灶评估 /// From e8e9105f5c231d01b5b68689091aa342e4ae8f75 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 19 Oct 2023 17:22:21 +0800 Subject: [PATCH 41/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ReadingCalculate/LuganoCalculateService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index ac4a418cb..7b08dd0c4 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -500,7 +500,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate new ReadingCalculateData (){QuestionType=QuestionType.LiverAssessment,GetStringFun=GetLiverAssessment}, // 骨髓中是否存在局灶性 FDG亲和病灶的证据 - new ReadingCalculateData (){QuestionType=QuestionType.EvidenceFocalFDG,GetStringFun=GetEvidenceFocalFDG}, + new ReadingCalculateData (){QuestionType=QuestionType.EvidenceFocalFDG,GetStringFun=GetEvidenceFocalFDG,ComputationTrigger=ComputationTrigger.Lesion}, //CT/MRI new ReadingCalculateData (){QuestionType=QuestionType.CTandMRI,GetStringFun=CTMRIEvaluation}, @@ -509,7 +509,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate new ReadingCalculateData (){QuestionType=QuestionType.PET5PS,GetStringFun=GetPET5PS,ComputationTrigger=ComputationTrigger.Lesion}, //与基线相比摄取值变化 - new ReadingCalculateData (){QuestionType=QuestionType.UptakeChange,GetStringFun=GetUptakeChange}, + new ReadingCalculateData (){QuestionType=QuestionType.UptakeChange,GetStringFun=GetUptakeChange,ComputationTrigger=ComputationTrigger.Lesion}, // FDG-PET 评估结果 new ReadingCalculateData (){QuestionType=QuestionType.FDGPET,GetStringFun=GetFDGPETOverallAssessment}, From 7fc93a667d86b02f70c3726d5b5eb372d529fcf2 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Fri, 20 Oct 2023 15:26:42 +0800 Subject: [PATCH 42/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs index 2d562f219..5cb3743d9 100644 --- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs +++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs @@ -2258,7 +2258,7 @@ public enum PET5PSScore /// /// 2分 /// - Two = 5, + Two = 2, /// /// 1分 From 46980e6b50b7ef18ff613b7a36cf71d76be8a647 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Fri, 20 Oct 2023 15:36:42 +0800 Subject: [PATCH 43/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ReadingCalculate/LuganoCalculateService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index 7b08dd0c4..2308d2d46 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -2104,7 +2104,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate new CalculationDto(){ Column1=ReadingCommon.EnumToString(new List() { PET5PSScore.Five,PET5PSScore.Four }), Column2=ReadingCommon.EnumToString(new List() { SUVChangeVSBaseline.Decrease }), - Column3=ReadingCommon.EnumToString(new List() { FDGAffinityFociInBM.YesSustain}), + Column3=ReadingCommon.EnumToString(new List() { FDGAffinityFociInBM.No, FDGAffinityFociInBM.YesSustain}), Column4=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.PMR }), }, @@ -2112,7 +2112,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate new CalculationDto(){ Column1=ReadingCommon.EnumToString(new List() { PET5PSScore.Five,PET5PSScore.Four }), Column2=ReadingCommon.EnumToString(new List() { SUVChangeVSBaseline.DidNotChange }), - Column3=ReadingCommon.EnumToString(new List() { FDGAffinityFociInBM.YesSustain}), + Column3=ReadingCommon.EnumToString(new List() { FDGAffinityFociInBM.No, FDGAffinityFociInBM.YesSustain}), Column4=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.NMR }), }, }; From 35cac0d7e972619f592020d07a7fed185d76795b Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Mon, 23 Oct 2023 13:55:19 +0800 Subject: [PATCH 44/52] =?UTF-8?q?=E5=AF=B9=E6=8E=A5=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E6=A3=80=E6=9F=A5Code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Third-partyProject/DTO/UltrasonicDicomViewModel.cs | 6 ++++++ .../Service/Third-partyProject/UltrasonicDicomService.cs | 4 ++-- IRaCIS.Core.Domain/Image/DicomInstance.cs | 4 ++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs b/IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs index a59bc54b2..3d5b5abea 100644 --- a/IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs +++ b/IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs @@ -117,6 +117,12 @@ namespace IRaCIS.Core.Application.Service.Third_partyProject.DTO public string Modality { get; set; } } + public class InstancePathDTO + { + public string StudyCode { get; set; } + public string InstancePath { get; set; } + } + } diff --git a/IRaCIS.Core.Application/Service/Third-partyProject/UltrasonicDicomService.cs b/IRaCIS.Core.Application/Service/Third-partyProject/UltrasonicDicomService.cs index 51fb1ceea..b030987e2 100644 --- a/IRaCIS.Core.Application/Service/Third-partyProject/UltrasonicDicomService.cs +++ b/IRaCIS.Core.Application/Service/Third-partyProject/UltrasonicDicomService.cs @@ -192,9 +192,9 @@ namespace IRaCIS.Core.Application.Service.Third_partyProject /// /// [HttpPost] - public async Task> GetStudyModalityOSSPath(List seriesIdList, [FromServices] IRepository _dicomSeriesRepository) + public async Task> GetStudyModalityOSSPath(List seriesIdList, [FromServices] IRepository _dicomSeriesRepository) { - return await _dicomSeriesRepository.Where(t => seriesIdList.Contains(t.Id)).SelectMany(t => t.DicomInstanceList).Select(t => t.Path).ToListAsync(); + return await _dicomSeriesRepository.Where(t => seriesIdList.Contains(t.Id)).SelectMany(t => t.DicomInstanceList).Select(t => new InstancePathDTO() {InstancePath= t.Path,StudyCode=t.DicomStudy.StudyCode } ).ToListAsync(); } diff --git a/IRaCIS.Core.Domain/Image/DicomInstance.cs b/IRaCIS.Core.Domain/Image/DicomInstance.cs index a05f3bbf0..bce1777cf 100644 --- a/IRaCIS.Core.Domain/Image/DicomInstance.cs +++ b/IRaCIS.Core.Domain/Image/DicomInstance.cs @@ -11,6 +11,10 @@ namespace IRaCIS.Core.Domain.Models [ForeignKey("SeriesId")] public DicomSeries DicomSerie { get; set; } + [JsonIgnore] + [ForeignKey("StudyId")] + public DicomStudy DicomStudy { get; set; } + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public Guid SeqId { get; set; } From 66b9f2dd5c5424527885c29d86476b1212593761 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Mon, 23 Oct 2023 16:07:44 +0800 Subject: [PATCH 45/52] =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/UploadDownLoadController.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs index 7b48775da..5ef44eb2c 100644 --- a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs +++ b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs @@ -856,7 +856,18 @@ namespace IRaCIS.Core.API.Controllers _userInfo = userInfo; } + /// 通用文件下载 + [AllowAnonymous] + [HttpGet("CommonDocument/DownloadCommonDoc")] + public async Task DownloadCommonFile(string code, [FromServices] IRepository _commonDocumentRepository) + { + var (filePath, fileName) = await FileStoreHelper.GetCommonDocPhysicalFilePathAsync(_hostEnvironment, _commonDocumentRepository, code); + new FileExtensionContentTypeProvider().Mappings.TryGetValue(Path.GetExtension(filePath), out var contentType); + + return File(System.IO.File.OpenRead(filePath), contentType ?? "application/octet-stream", fileName); + + } /// /// 上传通用文档 比如一致性核查的 比如导出的excel 模板 From f39ef0d799a2a7ac4ddad6e6d1ef10dd2246e27d Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Mon, 23 Oct 2023 16:52:47 +0800 Subject: [PATCH 46/52] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reading/Dto/ReadingImageTaskViewModel.cs | 5 ++++ .../Reading/Dto/ReadingQuestionViewModel.cs | 30 +++++++++++++++++++ .../Interface/IReadingImageTaskService.cs | 2 +- .../ReadingImageTaskService.cs | 8 +++-- IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs | 12 ++++++++ .../ReadingQuestionSystem.cs | 13 +++++--- .../ReadingQuestionTrial.cs | 7 +++++ 7 files changed, 69 insertions(+), 8 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs index bb26b4704..0803c8c00 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs @@ -507,6 +507,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public Guid TrialId { get; set; } + /// + /// 分组分类 + /// + public List? GroupClassifyList { get; set; } + /// /// 问题分类 /// diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs index 37b96be24..4983fb326 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs @@ -341,6 +341,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// public QuestionClassify? QuestionClassify { get; set; } + /// + /// 分组分类 + /// + public GroupClassify? GroupClassify { get; set; } + /// /// 单位 /// @@ -450,6 +455,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// public QuestionClassify? QuestionClassify { get; set; } + /// + /// 分组分类 + /// + public GroupClassify? GroupClassify { get; set; } + /// /// 数据来源 /// @@ -999,6 +1009,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// public QuestionClassify? QuestionClassify { get; set; } + /// + /// 分组分类 + /// + public GroupClassify? GroupClassify { get; set; } + /// /// 单位 /// @@ -1068,6 +1083,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// public QuestionClassify? QuestionClassify { get; set; } + /// + /// 分组分类 + /// + public GroupClassify? GroupClassify { get; set; } + public List ParentTriggerValueList { get; set; } = new List(); public List RelevanceValueList { get; set; } = new List(); @@ -1593,6 +1613,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// public QuestionClassify? QuestionClassify { get; set; } + /// + /// 分组分类 + /// + public GroupClassify? GroupClassify { get; set; } + /// /// 限制编辑 /// @@ -1957,6 +1982,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// public QuestionClassify? QuestionClassify { get; set; } + /// + /// 分组分类 + /// + public GroupClassify? GroupClassify { get; set; } + /// /// 数据来源 /// diff --git a/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs index 99d4cc7de..6cba1b928 100644 --- a/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs @@ -23,7 +23,7 @@ namespace IRaCIS.Core.Application.Contracts Task GetGlobalReadingInfo(GetGlobalReadingInfoInDto inDto); - Task> GetReadingQuestion(Guid trialReadingCriterionId, Guid? visitTaskId,QuestionClassify? questionClassify); + Task> GetReadingQuestion(Guid trialReadingCriterionId, Guid? visitTaskId,QuestionClassify? questionClassify, List? groupClassifyList); Task GetReadingTableQuestion(GetReadingTableQuestionOrAnswerInDto inDto); diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index dcf3282cb..e418bc662 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -704,7 +704,7 @@ namespace IRaCIS.Application.Services { //await AddDefaultValueToTask(inDto.VisitTaskId); var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync(); - var result = await GetReadingQuestion(taskInfo.TrialReadingCriterionId, taskInfo.Id, inDto.QuestionClassify); + var result = await GetReadingQuestion(taskInfo.TrialReadingCriterionId, taskInfo.Id, inDto.QuestionClassify,inDto.GroupClassifyList); @@ -722,7 +722,7 @@ namespace IRaCIS.Application.Services /// /// [NonDynamicMethod] - public async Task> GetReadingQuestion(Guid trialReadingCriterionId, Guid? visitTaskId, QuestionClassify? questionClassify) + public async Task> GetReadingQuestion(Guid trialReadingCriterionId, Guid? visitTaskId, QuestionClassify? questionClassify, List? groupClassifyList) { @@ -776,7 +776,9 @@ namespace IRaCIS.Application.Services //排除表格问题 同时排除组问题 var groupids = questions.Where(x => x.Type != ReadingQestionType.Group).Select(x => x.GroupId).ToList(); - var result = questions.Where(x => x.Type == ReadingQestionType.Group && groupids.Contains(x.Id)).ToList(); + var result = questions.Where(x => x.Type == ReadingQestionType.Group && groupids.Contains(x.Id)) + .WhereIf(groupClassifyList!=null,x=>x.GroupClassify!=null&& groupClassifyList.Contains(x.GroupClassify.Value)) + .ToList(); foreach (var item in result) { diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs index 5cb3743d9..2fccb06c7 100644 --- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs +++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs @@ -67,6 +67,18 @@ namespace IRaCIS.Core.Domain.Share } + /// + /// 分组分类 + /// + public enum GroupClassify + { + /// + /// 质量问题 + /// + QualityProblem = 1, + + } + /// /// 临床表格问题标识 /// diff --git a/IRaCIS.Core.Domain/Reading/ReadingCriterionQuestion/ReadingQuestionSystem.cs b/IRaCIS.Core.Domain/Reading/ReadingCriterionQuestion/ReadingQuestionSystem.cs index 764d72254..1b7e453c3 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingCriterionQuestion/ReadingQuestionSystem.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingCriterionQuestion/ReadingQuestionSystem.cs @@ -203,10 +203,15 @@ namespace IRaCIS.Core.Domain.Models /// public string? FileType { get; set; } - /// - /// 问题分类 - /// - public QuestionClassify? QuestionClassify { get; set; } + /// + /// 分组分类 + /// + public GroupClassify? GroupClassify { get; set; } + + /// + /// 问题分类 + /// + public QuestionClassify? QuestionClassify { get; set; } [JsonIgnore] [ForeignKey("GroupId")] diff --git a/IRaCIS.Core.Domain/Reading/ReadingCriterionQuestion/ReadingQuestionTrial.cs b/IRaCIS.Core.Domain/Reading/ReadingCriterionQuestion/ReadingQuestionTrial.cs index 959790ed5..0ffbd778d 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingCriterionQuestion/ReadingQuestionTrial.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingCriterionQuestion/ReadingQuestionTrial.cs @@ -271,6 +271,13 @@ namespace IRaCIS.Core.Domain.Models /// public Guid? GroupId { get; set; } + + /// + /// 分组分类 + /// + public GroupClassify? GroupClassify { get; set; } + + /// /// 问题分类 /// From a73f6a4aeb23c36c9a1f27bbd963bc84c9b6e824 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Tue, 24 Oct 2023 10:42:06 +0800 Subject: [PATCH 47/52] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reading/ReadingImageTask/ReadingImageTaskService.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index e418bc662..d0b172793 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -1564,7 +1564,9 @@ namespace IRaCIS.Application.Services x.FirstAddTaskId, }).ToListAsync(); - await _readingTaskQuestionMarkRepository.BatchDeleteNoTrackingAsync(x => x.VisitTaskId == inDto.VisitTaskId); + + var markquestionId = inDto.Answers.Select(y => y.Id).ToList(); + await _readingTaskQuestionMarkRepository.BatchDeleteNoTrackingAsync(x => x.VisitTaskId == inDto.VisitTaskId&& markquestionId.Contains(x.QuestionId)); var datetime = DateTime.Now; var markList = _mapper.Map, List>(inDto.QuestionMarkInfoList); From a9fd1978e17f8576621a4cef2224980848d07a30 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 24 Oct 2023 17:05:03 +0800 Subject: [PATCH 48/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E7=AE=80=E5=8E=86=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/UploadDownLoadController.cs | 188 +++++++++++++----- IRaCIS.Core.API/IRaCIS.Core.API.xml | 45 +++-- IRaCIS.Core.Application/Helper/OSSService.cs | 24 ++- .../IRaCIS.Core.Application.xml | 7 + .../Service/Common/FileService.cs | 5 +- .../Service/Document/_MapConfig.cs | 2 + .../DTO/UltrasonicDicomViewModel.cs | 2 + .../UltrasonicDicomService.cs | 2 +- IRaCIS.Core.Domain/Dcotor/Attachment.cs | 6 +- 9 files changed, 201 insertions(+), 80 deletions(-) diff --git a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs index 5ef44eb2c..b0a275fb5 100644 --- a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs +++ b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs @@ -268,7 +268,7 @@ namespace IRaCIS.Core.API.Controllers [DisableFormValueModelBinding] [DisableRequestSizeLimit] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] - public async Task ArchiveStudyNew(/*[FromForm] ArchiveStudyCommand archiveStudyCommand,*/ Guid trialId, Guid subjectVisitId, string studyInstanceUid, Guid? abandonStudyId,Guid studyMonitorId, + public async Task ArchiveStudyNew(/*[FromForm] ArchiveStudyCommand archiveStudyCommand,*/ Guid trialId, Guid subjectVisitId, string studyInstanceUid, Guid? abandonStudyId, Guid studyMonitorId, [FromServices] ILogger _logger, [FromServices] IEasyCachingProvider _provider, [FromServices] IStudyService _studyService, @@ -302,9 +302,9 @@ namespace IRaCIS.Core.API.Controllers { _provider.Set($"StudyUid_{trialId}_{archiveStudyCommand.StudyInstanceUid}", _userInfo.Id, TimeSpan.FromMinutes(30)); } - - - + + + //if (_provider.Exists($"StudyUid_{trialId}_{archiveStudyCommand.StudyInstanceUid}")) //{ // //---当前已有人正在上传和归档该检查! @@ -407,7 +407,7 @@ namespace IRaCIS.Core.API.Controllers studyMonitor.IsSuccess = true; } - + } catch (Exception e) { @@ -424,7 +424,7 @@ namespace IRaCIS.Core.API.Controllers studyMonitor.StudyCode = archiveResult.ArchivedDicomStudies.FirstOrDefault()?.StudyCode; studyMonitor.ArchiveFinishedTime = DateTime.Now; - await _studyMonitorRepository.SaveChangesAsync(); + await _studyMonitorRepository.SaveChangesAsync(); } @@ -528,7 +528,7 @@ namespace IRaCIS.Core.API.Controllers if (!fileName.EndsWith(".xlsx") && !fileName.EndsWith(".csv") && !fileName.EndsWith(".xls")) { - //---支持.xlsx、.xls、.csv格式的文件上传。 + //---支持.xlsx、.xls、.csv格式的文件上传。 throw new BusinessValidationFailedException(StaticData.International("UploadDownLoad_SupportedFormats")); } @@ -686,11 +686,11 @@ namespace IRaCIS.Core.API.Controllers var dt = DateTime.Now; - etcCheckList = etcCheckList.Where(t => !(t.Modality == string.Empty || t.SiteCode == string.Empty || t.SubjectCode == string.Empty || t.VisitName == string.Empty || t.StudyDate == string.Empty ||! DateTime.TryParse(t.StudyDate, out dt))).ToList(); + etcCheckList = etcCheckList.Where(t => !(t.Modality == string.Empty || t.SiteCode == string.Empty || t.SubjectCode == string.Empty || t.VisitName == string.Empty || t.StudyDate == string.Empty || !DateTime.TryParse(t.StudyDate, out dt))).ToList(); if (etcCheckList.Count == 0) { - //---请保证上传数据符合模板文件中的样式,且存在有效数据。 + //---请保证上传数据符合模板文件中的样式,且存在有效数据。 return ResponseOutput.NotOk(StaticData.International("UploadDownLoad_InvalidData")); } @@ -709,6 +709,38 @@ namespace IRaCIS.Core.API.Controllers #region 医生文件上传下载 + + #region DTO + public class DoctorDownloadInfo + { + public Guid Id { get; set; } + public string Name { get; set; } + public string ReviewerCode { get; set; } + + public List FileList { get; set; } + } + public class DownloadFileInfo + { + public string FileName { get; set; } + + public string Path { get; set; } + } + + public class GetDoctorPathCommand + { + public int Language { get; set; } + + public List DoctorIdList { get; set; } + } + + public class GetDoctoreAttachPathCommand + { + public Guid DoctorId { get; set; } + public List AttachmentIdList { get; set; } + } + #endregion + + /// 医生文件上传下载 [ApiExplorerSettings(GroupName = "Common")] [ApiController] @@ -723,55 +755,98 @@ namespace IRaCIS.Core.API.Controllers private readonly IFileService _fileService; - public FileController(IMapper mapper, IUserInfo userInfo, IWebHostEnvironment hostEnvironment, IFileService fileService) { _fileService = fileService; _hostEnvironment = hostEnvironment; - _mapper = mapper; _userInfo = userInfo; } /// - /// 上传文件[FileUpload] + /// New 医生首页 多选 获取多个医生信息+文件路径列表 医生压缩包名称 doctorCode + "_" + doctorName _(时间戳或者随机的Guid) /// - /// 附件类型 - /// 医生Id - /// 返回文件信息 - [HttpPost, Route("file/UploadFile/{attachmentType}/{doctorId}")] - [DisableFormValueModelBinding] - [DisableRequestSizeLimit] - public async Task UploadOrdinaryFile(string attachmentType, Guid doctorId) + /// + [HttpPost, Route("file/GetOfficialResume")] + public async Task>> GetOfficialResume(GetDoctorPathCommand command, + [FromServices] IRepository _attachmentrepository) { - return await SingleFileUploadAsync((fileName) => FileStoreHelper.GetDoctorOrdinaryFilePath(_hostEnvironment, fileName, doctorId, attachmentType)); + var list = await _attachmentrepository.Where(t => command.DoctorIdList.Contains(t.DoctorId) && command.Language==t.Language).GroupBy(t => new { Name = t.Doctor.FirstName + "_" + t.Doctor.LastName, ReviewerCode = t.Doctor.ReviewerCode, t.DoctorId }) + .Select(g => new DoctorDownloadInfo() + { + Id = g.Key.DoctorId, + Name = g.Key.Name, + ReviewerCode = g.Key.ReviewerCode, + FileList = g.Select(t => new DownloadFileInfo() { FileName = t.FileName, Path = t.Path }).ToList() + }).ToListAsync(); + + return ResponseOutput.Ok(list); } - /// - /// 上传文件( 不是医生个人的文件)[FileUpload] - /// 例如:阅片章程等 + /// New 项目入组 获取医生简历 /// - /// 文件类型 + /// + /// + /// /// - - [HttpPost, Route("file/UploadNonDoctorFile/{type}")] - [DisableFormValueModelBinding] - [DisableRequestSizeLimit] - public async Task UploadNonDoctorFile(string type) + [HttpPost,Route("file/GetTrialDoctorOfficialResume")] + public async Task>> GetTrialDoctorOfficialResume(GetDoctorPathCommand command, + [FromServices] IDoctorService _doctorService, + [FromServices] IRepository _attachmentrepository) { - return await SingleFileUploadAsync((fileName) => FileStoreHelper.GetNonDoctorFilePath(_hostEnvironment, fileName, type)); + + var list = await _attachmentrepository.Where(t => command.DoctorIdList.Contains(t.DoctorId) && command.Language == t.Language && t.IsOfficial && t.Type.Equals("Resume")).GroupBy(t => new { Name = t.Doctor.FirstName + "_" + t.Doctor.LastName, ReviewerCode = t.Doctor.ReviewerCode, t.DoctorId }) + .Select(g => new DoctorDownloadInfo() + { + Id = g.Key.DoctorId, + Name = g.Key.Name, + ReviewerCode = g.Key.ReviewerCode, + FileList = g.Select(t => new DownloadFileInfo() { FileName = t.FileName, Path = t.Path }).ToList() + }).ToListAsync(); + + return ResponseOutput.Ok(list); + } + /// + /// new 医生详情 下载指定简历 + /// + /// + /// + /// + /// + [HttpPost, Route("file/GetDoctorAttachment")] + public async Task> GetDoctorAttachment(GetDoctoreAttachPathCommand command, + [FromServices] IDoctorService _doctorService, + [FromServices] IRepository _attachmentrepository) + { + + var find = await _attachmentrepository.Where(t => command.DoctorId==t.DoctorId && command.AttachmentIdList.Contains(t.Id)).GroupBy(t => new { Name = t.Doctor.FirstName + "_" + t.Doctor.LastName, ReviewerCode = t.Doctor.ReviewerCode, t.DoctorId }) + .Select(g => new DoctorDownloadInfo() + { + Id = g.Key.DoctorId, + Name = g.Key.Name, + ReviewerCode = g.Key.ReviewerCode, + FileList = g.Select(t => new DownloadFileInfo() { FileName = t.FileName, Path = t.Path }).ToList() + }).FirstOrDefaultAsync(); + + return ResponseOutput.Ok(find); + + } + + + + #region 废弃 /// /// 下载多个医生的所有附件 /// /// /// - + [Obsolete] [HttpPost, Route("file/downloadDoctorAttachments")] public async Task> DownloadAttachment(Guid[] doctorIds) { @@ -786,24 +861,6 @@ namespace IRaCIS.Core.API.Controllers }); } - /// - /// 下载医生官方简历 - /// - /// - /// - /// - [HttpPost, Route("file/downloadOfficialCV/{language}")] - public async Task> DownloadOfficialResume(int language, Guid[] doctorIds) - { - - var path = await _fileService.CreateDoctorsAllAttachmentZip(doctorIds); - return ResponseOutput.Ok(new UploadFileInfoDTO - { - FilePath = await _fileService.CreateOfficialResumeZip(language, doctorIds), - FullFilePath = path + "?access_token=" + HttpContext.Request.Headers["Authorization"].ToString().Substring(7) - }); - } - /// /// 下载指定医生的指定附件 /// @@ -811,6 +868,7 @@ namespace IRaCIS.Core.API.Controllers /// 要下载的附件Id /// [HttpPost, Route("file/downloadByAttachmentId/{doctorId}")] + [Obsolete] public async Task> DownloadAttachmentById(Guid doctorId, Guid[] attachmentIds) { var path = await _fileService.CreateZipPackageByAttachment(doctorId, attachmentIds); @@ -822,15 +880,47 @@ namespace IRaCIS.Core.API.Controllers } + /// + /// 下载医生官方简历 首页 区分 中文和英文 + /// + /// + /// + /// + [HttpPost, Route("file/downloadOfficialCV/{language}")] + [Obsolete] + public async Task> DownloadOfficialResume(int language, Guid[] doctorIds) + { + + var path = await _fileService.CreateDoctorsAllAttachmentZip(doctorIds); + return ResponseOutput.Ok(new UploadFileInfoDTO + { + FilePath = await _fileService.CreateOfficialResumeZip(language, doctorIds), + FullFilePath = path + "?access_token=" + HttpContext.Request.Headers["Authorization"].ToString().Substring(7) + }); + } + + + + + /// + /// 入组 项目下载简历 + /// + /// + /// + /// + /// [HttpPost, Route("enroll/downloadResume/{trialId:guid}/{language}")] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [AllowAnonymous] + [Obsolete] public async Task> DownloadResume(int language, Guid trialId, Guid[] doctorIdArray) { var zipPath = await _fileService.CreateOfficialResumeZip(language, doctorIdArray); return ResponseOutput.Ok(zipPath); } + #endregion + } #endregion diff --git a/IRaCIS.Core.API/IRaCIS.Core.API.xml b/IRaCIS.Core.API/IRaCIS.Core.API.xml index 96f6f9d06..5e57621b6 100644 --- a/IRaCIS.Core.API/IRaCIS.Core.API.xml +++ b/IRaCIS.Core.API/IRaCIS.Core.API.xml @@ -285,20 +285,19 @@ 医生文件上传下载 - + - 上传文件[FileUpload] + New 医生首页 多选 获取多个医生信息+文件路径列表 医生压缩包名称 doctorCode + "_" + doctorName _(时间戳或者随机的Guid) - 附件类型 - 医生Id - 返回文件信息 + - + - 上传文件( 不是医生个人的文件)[FileUpload] - 例如:阅片章程等 + New 项目入组 获取医生简历 - 文件类型 + + + @@ -308,14 +307,6 @@ - - - 下载医生官方简历 - - - - - 下载指定医生的指定附件 @@ -324,6 +315,26 @@ 要下载的附件Id + + + 下载医生官方简历 首页 区分 中文和英文 + + + + + + + + 入组 项目下载简历 + + + + + + + + 通用文件下载 + 上传通用文档 比如一致性核查的 比如导出的excel 模板 diff --git a/IRaCIS.Core.Application/Helper/OSSService.cs b/IRaCIS.Core.Application/Helper/OSSService.cs index 1fba59176..ff0a024fa 100644 --- a/IRaCIS.Core.Application/Helper/OSSService.cs +++ b/IRaCIS.Core.Application/Helper/OSSService.cs @@ -51,17 +51,19 @@ namespace IRaCIS.Core.Application.Helper { var ossOptions = options.CurrentValue; - _OSSConfig = new AliyunOssOptions() - { - RegionId = ossOptions.RegionId, - AccessKeyId = ossOptions.AccessKeyId, - AccessKeySecret = ossOptions.AccessKeySecret, - EndPoint = ossOptions.EndPoint, - BucketName = ossOptions.BucketName, - RoleArn = ossOptions.RoleArn, - Region = ossOptions.Region, - ViewEndpoint = ossOptions.ViewEndpoint - }; + _OSSConfig= ossOptions; + + //_OSSConfig = new AliyunOssOptions() + //{ + // RegionId = ossOptions.RegionId, + // AccessKeyId = ossOptions.AccessKeyId, + // AccessKeySecret = ossOptions.AccessKeySecret, + // EndPoint = ossOptions.EndPoint, + // BucketName = ossOptions.BucketName, + // RoleArn = ossOptions.RoleArn, + // Region = ossOptions.Region, + // ViewEndpoint = ossOptions.ViewEndpoint + //}; _ossClient = new OssClient(_OSSConfig.EndPoint, _OSSConfig.AccessKeyId, _OSSConfig.AccessKeySecret); diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 26f9eb556..c0fc753c7 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -1954,6 +1954,13 @@ + + + 骨髓中是否存在局灶性 FDG亲和病灶的证据 + + + + 获取肝脏评估 diff --git a/IRaCIS.Core.Application/Service/Common/FileService.cs b/IRaCIS.Core.Application/Service/Common/FileService.cs index ecbce02cd..01f6323b3 100644 --- a/IRaCIS.Core.Application/Service/Common/FileService.cs +++ b/IRaCIS.Core.Application/Service/Common/FileService.cs @@ -98,7 +98,8 @@ namespace IRaCIS.Application.Services /// public async Task CreateDoctorsAllAttachmentZip(Guid[] doctorIds) { - //准备下载文件的临时路径 + #region 老版本 存储在服务器 + //准备下载文件的临时路径 var guidStr = Guid.NewGuid().ToString(); //string uploadFolderPath = HostingEnvironment.MapPath("/UploadFile/"); string uploadFolderPath = Path.Combine(FileStoreHelper.GetIRaCISRootDataFolder(_hostEnvironment), "UploadFile"); @@ -134,6 +135,8 @@ namespace IRaCIS.Application.Services string targetPath = Path.Combine(uploadFolderPath, target + ".zip"); ZipHelper.CreateZip(tempSavePath, targetPath); return Path.Combine("/IRaCISData/UploadFile/", target + ".zip"); + #endregion + } diff --git a/IRaCIS.Core.Application/Service/Document/_MapConfig.cs b/IRaCIS.Core.Application/Service/Document/_MapConfig.cs index 1116a7bf1..f01322122 100644 --- a/IRaCIS.Core.Application/Service/Document/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/Document/_MapConfig.cs @@ -52,7 +52,9 @@ namespace IRaCIS.Core.Application.Service CreateMap(); + CreateMap(); + CreateMap() diff --git a/IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs b/IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs index 3d5b5abea..25bf021ee 100644 --- a/IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs +++ b/IRaCIS.Core.Application/Service/Third-partyProject/DTO/UltrasonicDicomViewModel.cs @@ -119,6 +119,8 @@ namespace IRaCIS.Core.Application.Service.Third_partyProject.DTO public class InstancePathDTO { + public string StudyInstanceUid { get; set; } + public string SopInstanceUid { get; set; } public string StudyCode { get; set; } public string InstancePath { get; set; } } diff --git a/IRaCIS.Core.Application/Service/Third-partyProject/UltrasonicDicomService.cs b/IRaCIS.Core.Application/Service/Third-partyProject/UltrasonicDicomService.cs index b030987e2..7e52257fb 100644 --- a/IRaCIS.Core.Application/Service/Third-partyProject/UltrasonicDicomService.cs +++ b/IRaCIS.Core.Application/Service/Third-partyProject/UltrasonicDicomService.cs @@ -194,7 +194,7 @@ namespace IRaCIS.Core.Application.Service.Third_partyProject [HttpPost] public async Task> GetStudyModalityOSSPath(List seriesIdList, [FromServices] IRepository _dicomSeriesRepository) { - return await _dicomSeriesRepository.Where(t => seriesIdList.Contains(t.Id)).SelectMany(t => t.DicomInstanceList).Select(t => new InstancePathDTO() {InstancePath= t.Path,StudyCode=t.DicomStudy.StudyCode } ).ToListAsync(); + return await _dicomSeriesRepository.Where(t => seriesIdList.Contains(t.Id)).SelectMany(t => t.DicomInstanceList).Select(t => new InstancePathDTO() {InstancePath= t.Path,StudyCode=t.DicomStudy.StudyCode , SopInstanceUid = t.SopInstanceUid, StudyInstanceUid = t.StudyInstanceUid} ).ToListAsync(); } diff --git a/IRaCIS.Core.Domain/Dcotor/Attachment.cs b/IRaCIS.Core.Domain/Dcotor/Attachment.cs index bf61dd5ee..1a97bfb64 100644 --- a/IRaCIS.Core.Domain/Dcotor/Attachment.cs +++ b/IRaCIS.Core.Domain/Dcotor/Attachment.cs @@ -16,7 +16,11 @@ namespace IRaCIS.Core.Domain.Models [Table("Attachment")] public partial class Attachment : Entity, IAuditAdd { - public Guid? DoctorId { get; set; } + + [JsonIgnore] + public Doctor Doctor { get; set; } + + public Guid DoctorId { get; set; } public string Type { get; set; } public bool IsOfficial { get; set; } = false; public string Path { get; set; } = string.Empty; From 4b9ca6ca2510f47c9eec857a03bbbdd0e43ce0d7 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Tue, 24 Oct 2023 17:27:26 +0800 Subject: [PATCH 49/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reading/Dto/ReadingImageTaskViewModel.cs | 2 ++ .../ReadingImageTask/ReadingImageTaskService.cs | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs index 0803c8c00..ddaf82d92 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs @@ -1280,6 +1280,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public string SubjectCode { get; set; } + public bool IsExistsClinicalData { get; set; } + public ReadingTaskState ReadingTaskState { get; set; } public decimal VisitTaskNum { get; set; } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index d0b172793..da06e0a23 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -549,6 +549,22 @@ namespace IRaCIS.Application.Services result = result.Where(x => x.VisitTaskId == inDto.VisitTaskId).ToList(); } + foreach (var item in result) + { + var clinicalDataList = await _readingClinicalDataService.GetClinicalDataList(new GetReadingOrTaskClinicalDataListInDto() + { + + SubjectId = taskInfo.SubjectId, + TrialId = taskInfo.TrialId, + VisitTaskId = item.VisitTaskId, + }); + + item.IsExistsClinicalData = clinicalDataList.Count() > 0; + } + + + + return (result, new { ReadingTaskState = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Select(x => x.ReadingTaskState).FirstOrDefaultAsync() From 719896284704a275ba4272c18c37fd675d342cec Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 25 Oct 2023 16:06:23 +0800 Subject: [PATCH 50/52] =?UTF-8?q?=E5=BD=B1=E5=83=8F=E5=AD=A6=E6=95=B4?= =?UTF-8?q?=E4=BD=93=E8=82=BF=E7=98=A4=E8=AF=84=E4=BC=B0=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LuganoCalculateService.cs | 56 +++++++++++++++---- 1 file changed, 45 insertions(+), 11 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index 2308d2d46..81725c40f 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -2253,18 +2253,18 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate List data = new List() { - //ND NE NE ND + //ND NE NE/NA ND new CalculationDto(){ Column1=ReadingCommon.EnumToString(new List() { CTMRIOverallAssessment.ND }), Column2=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.NE }), - Column3=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.NE}), + Column3=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.NE, FDGPETOverallAssessment.NA}), Column4=ReadingCommon.EnumToString(new List() { ImagingOverallAssessment_Lugano.ND }), }, - //ND/PD/CR/NE/PR/SD PMD PMD/CMR/PMR/NMR/NE PMD/PD + //ND/PD/CR/NE/PR/SD PMD PMD/CMR/PMR/NMR/NE/NA PMD/PD new CalculationDto(){ Column1=ReadingCommon.EnumToString(new List() { CTMRIOverallAssessment.ND, CTMRIOverallAssessment.PD,CTMRIOverallAssessment.CR,CTMRIOverallAssessment.NE,CTMRIOverallAssessment.PR,CTMRIOverallAssessment.SD}), Column2=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.PMD, }), - Column3=ReadingCommon.EnumToString(new List() {FDGPETOverallAssessment.PMD, FDGPETOverallAssessment.CMR,FDGPETOverallAssessment.PMR, FDGPETOverallAssessment.NMR, FDGPETOverallAssessment.NE }), + Column3=ReadingCommon.EnumToString(new List() {FDGPETOverallAssessment.PMD, FDGPETOverallAssessment.CMR,FDGPETOverallAssessment.PMR, FDGPETOverallAssessment.NMR, FDGPETOverallAssessment.NE, FDGPETOverallAssessment.NA }), Column4=ReadingCommon.EnumToString(new List() { ImagingOverallAssessment_Lugano.PMDPD }), }, //ND/PD/CR/NE/PR/SD PMD/CMR/PMR/NMR/NE PMD PMD/PD @@ -2274,25 +2274,59 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate Column3=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.PMD, }), Column4=ReadingCommon.EnumToString(new List() { ImagingOverallAssessment_Lugano.PMDPD }), }, - //PD NE CMR/PMR/NMR/NE PMD/PD + //PD NE CMR/PMR/NMR/NE/NA PMD/PD new CalculationDto(){ Column1=ReadingCommon.EnumToString(new List() { CTMRIOverallAssessment.PD}), Column2=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.NE, }), - Column3=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.CMR,FDGPETOverallAssessment.PMR, FDGPETOverallAssessment.NMR, FDGPETOverallAssessment.NE }), + Column3=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.CMR,FDGPETOverallAssessment.PMR, FDGPETOverallAssessment.NMR, FDGPETOverallAssessment.NE, FDGPETOverallAssessment.NA }), Column4=ReadingCommon.EnumToString(new List() { ImagingOverallAssessment_Lugano.PMDPD }), }, - //ND/PD/CR/NE/PR/SD PMR PMD/CMR/PMR/NMR/NE PMR/PR + //NE NE NE/NA NE + new CalculationDto(){ + Column1=ReadingCommon.EnumToString(new List() { CTMRIOverallAssessment.NE }), + Column2=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.NE }), + Column3=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.NE, FDGPETOverallAssessment.NA }), + Column4=ReadingCommon.EnumToString(new List() { ImagingOverallAssessment_Lugano.NE }), + }, + + //CR、PR、SD、NE、ND、PD CMR CMR/PMR/NMR/PMD/NE/NA CMR/CR + new CalculationDto(){ + Column1=ReadingCommon.EnumToString(new List() { CTMRIOverallAssessment.CR,CTMRIOverallAssessment.PR,CTMRIOverallAssessment.SD,CTMRIOverallAssessment.NE,CTMRIOverallAssessment.ND,CTMRIOverallAssessment.PD }), + Column2=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.CMR }), + Column3=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.CMR, FDGPETOverallAssessment.PMR, FDGPETOverallAssessment.NMR, FDGPETOverallAssessment.PMD, FDGPETOverallAssessment.NE, FDGPETOverallAssessment.NA}), + Column4=ReadingCommon.EnumToString(new List() { ImagingOverallAssessment_Lugano.CMRCR }), + }, + //CR NE NE/NA CMR/CR + new CalculationDto(){ + Column1=ReadingCommon.EnumToString(new List() { CTMRIOverallAssessment.CR }), + Column2=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.NE }), + Column3=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.NE, FDGPETOverallAssessment.NA,}), + Column4=ReadingCommon.EnumToString(new List() { ImagingOverallAssessment_Lugano.CMRCR }), + }, + + //CR、PR、SD、NE、ND CMR NE/NA CMR/CR + new CalculationDto(){ + Column1=ReadingCommon.EnumToString(new List() { CTMRIOverallAssessment.CR,CTMRIOverallAssessment.PR,CTMRIOverallAssessment.SD,CTMRIOverallAssessment.NE,CTMRIOverallAssessment.ND }), + Column2=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.CMR }), + Column3=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.NE, FDGPETOverallAssessment.NA,}), + Column4=ReadingCommon.EnumToString(new List() { ImagingOverallAssessment_Lugano.CMRCR }), + }, + + + + + //ND/PD/CR/NE/PR/SD PMR PMD/CMR/PMR/NMR/NE PMR/PR new CalculationDto(){ Column1=ReadingCommon.EnumToString(new List() { CTMRIOverallAssessment.ND, CTMRIOverallAssessment.PD,CTMRIOverallAssessment.CR,CTMRIOverallAssessment.NE,CTMRIOverallAssessment.PR,CTMRIOverallAssessment.SD }), Column2=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.PMR }), - Column3=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.PMD, FDGPETOverallAssessment.CMR,FDGPETOverallAssessment.PMR, FDGPETOverallAssessment.NMR, FDGPETOverallAssessment.NE }), + Column3=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.PMD, FDGPETOverallAssessment.CMR,FDGPETOverallAssessment.PMR, FDGPETOverallAssessment.NMR, FDGPETOverallAssessment.NE,FDGPETOverallAssessment.NA, }), Column4=ReadingCommon.EnumToString(new List() { ImagingOverallAssessment_Lugano.PMRPR }), }, //PR NE NE PMR/PR new CalculationDto(){ Column1=ReadingCommon.EnumToString(new List() { CTMRIOverallAssessment.PR }), Column2=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.NE }), - Column3=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.NE}), + Column3=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.NE, FDGPETOverallAssessment.NA,}), Column4=ReadingCommon.EnumToString(new List() { ImagingOverallAssessment_Lugano.PMRPR }), }, //CR/PR/SD/NE/ND NE PMR PMR/PR @@ -2306,7 +2340,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate new CalculationDto(){ Column1=ReadingCommon.EnumToString(new List() { CTMRIOverallAssessment.ND,CTMRIOverallAssessment.PD,CTMRIOverallAssessment.CR,CTMRIOverallAssessment.NE,CTMRIOverallAssessment.PR,CTMRIOverallAssessment.SD }), Column2=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.NMR }), - Column3=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.PMD, FDGPETOverallAssessment.CMR, FDGPETOverallAssessment.PMR, FDGPETOverallAssessment.NMR, FDGPETOverallAssessment.NE}), + Column3=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.PMD, FDGPETOverallAssessment.CMR, FDGPETOverallAssessment.PMR, FDGPETOverallAssessment.NMR, FDGPETOverallAssessment.NE, FDGPETOverallAssessment.NA,}), Column4=ReadingCommon.EnumToString(new List() { ImagingOverallAssessment_Lugano.NMRSD }), }, //CR/PR/SD/ND/NE NE NMR NMR/SD @@ -2320,7 +2354,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate new CalculationDto(){ Column1=ReadingCommon.EnumToString(new List() { CTMRIOverallAssessment.SD }), Column2=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.NE }), - Column3=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.NE}), + Column3=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.NE, FDGPETOverallAssessment.NA,}), Column4=ReadingCommon.EnumToString(new List() { ImagingOverallAssessment_Lugano.NMRSD }), }, }; From 1db7b86f89411accdc7fbd322896a3662aadf849 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 26 Oct 2023 10:01:36 +0800 Subject: [PATCH 51/52] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ReadingCalculate/LuganoCalculateService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index 81725c40f..dde4e18be 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -2080,7 +2080,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate new CalculationDto(){ Column1=ReadingCommon.EnumToString(new List() { PET5PSScore.Five,PET5PSScore.Four, }), Column2=ReadingCommon.EnumToString(new List() { SUVChangeVSBaseline.Increase }), - Column3=ReadingCommon.EnumToString(new List() { FDGAffinityFociInBM.NE, FDGAffinityFociInBM.YesHaveNew, FDGAffinityFociInBM.YesHaveNew, FDGAffinityFociInBM.No}), + Column3=ReadingCommon.EnumToString(new List() { FDGAffinityFociInBM.NE, FDGAffinityFociInBM.YesHaveNew, FDGAffinityFociInBM.YesSustain, FDGAffinityFociInBM.No}), Column4=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.PMD }), }, From 4e5b96b8eac7ab444b35681211c2f09dbb8af653 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Thu, 26 Oct 2023 10:03:10 +0800 Subject: [PATCH 52/52] xx --- IRaCIS.Core.API/IRaCIS.Core.API.xml | 9 +++++ .../IRaCIS.Core.Application.xml | 37 ++++++++++++++++++- .../Service/Visit/SubjectVisitService.cs | 3 +- 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/IRaCIS.Core.API/IRaCIS.Core.API.xml b/IRaCIS.Core.API/IRaCIS.Core.API.xml index 5e57621b6..5198124a0 100644 --- a/IRaCIS.Core.API/IRaCIS.Core.API.xml +++ b/IRaCIS.Core.API/IRaCIS.Core.API.xml @@ -300,6 +300,15 @@ + + + new 医生详情 下载指定简历 + + + + + + 下载多个医生的所有附件 diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index c0fc753c7..4650ad18a 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -4813,6 +4813,11 @@ Path + + + 分组分类 + + 问题分类 @@ -6598,6 +6603,11 @@ 问题分类 + + + 分组分类 + + 单位 @@ -6676,6 +6686,11 @@ 问题分类 + + + 分组分类 + + 数据来源 @@ -7024,6 +7039,11 @@ 问题分类 + + + 分组分类 + + 单位 @@ -7084,6 +7104,11 @@ 问题分类 + + + 分组分类 + + 备注 @@ -7439,6 +7464,11 @@ 问题分类 + + + 分组分类 + + 限制编辑 @@ -7769,6 +7799,11 @@ 问题分类 + + + 分组分类 + + 数据来源 @@ -13183,7 +13218,7 @@ - + 获取阅片外层问题 diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs index 2c7f9e564..695454728 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -267,8 +267,7 @@ namespace IRaCIS.Core.Application.Services foreach (var t in studyList) { t.SeriesList = await _repository.Where(s => s.StudyId == t.StudyId) - .WhereIf(isReading == 1, s => s.IsReading).OrderBy(s => s.SeriesNumber). - ThenBy(s => s.SeriesTime) + .WhereIf(isReading == 1, s => s.IsReading).OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime) .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();