From 8b5753a2db7f2ea50ff4ab1fa774519789613255 Mon Sep 17 00:00:00 2001
From: hang <872297557@qq.com>
Date: Mon, 17 Oct 2022 13:55:39 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=AE=80=E5=8D=95=E6=95=B4?=
=?UTF-8?q?=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../IRaCIS.Core.Application.xml | 35 --
.../ClinicalDataSetService.cs | 2 +-
.../ReadingClinicalDataService.cs | 285 +++++------
.../{ => ReadingPeriod}/ReadModuleService.cs | 0
.../ReadingPeriodSetService.cs | 449 +++++++++---------
5 files changed, 387 insertions(+), 384 deletions(-)
rename IRaCIS.Core.Application/Service/Reading/{ => ClinicalData}/ClinicalDataSetService.cs (99%)
rename IRaCIS.Core.Application/Service/Reading/{ => ClinicalData}/ReadingClinicalDataService.cs (94%)
rename IRaCIS.Core.Application/Service/Reading/{ => ReadingPeriod}/ReadModuleService.cs (100%)
rename IRaCIS.Core.Application/Service/Reading/{ => ReadingPeriod}/ReadingPeriodSetService.cs (85%)
diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index 004f4304e..1f798a5de 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -1691,21 +1691,6 @@
是否是基线
-
-
- 项目ID
-
-
-
-
- 对象ID
-
-
-
-
- 受试者ID
-
-
阅片临床数据ID
@@ -1726,21 +1711,6 @@
是否为访视
-
-
- 项目ID
-
-
-
-
- 对象ID
-
-
-
-
- 受试者ID
-
-
阅片临床数据ID
@@ -1761,11 +1731,6 @@
是否为访视
-
-
- 临床级别
-
-
是否盲化
diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalDataSetService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs
similarity index 99%
rename from IRaCIS.Core.Application/Service/Reading/ClinicalDataSetService.cs
rename to IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs
index b9bb0b28c..f95b1bc67 100644
--- a/IRaCIS.Core.Application/Service/Reading/ClinicalDataSetService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs
@@ -190,7 +190,7 @@ namespace IRaCIS.Application.Services
#endregion
- #region 系统和项目标准下拉 和临床数据关联
+ #region 系统和项目标准下拉 界面上配置和临床数据关联
[HttpPost]
public async Task> GetSystemCriterionSelectList(SystemCriterionSelectQuery inQuery)
diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs
similarity index 94%
rename from IRaCIS.Core.Application/Service/Reading/ReadingClinicalDataService.cs
rename to IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs
index 1ecdd2014..a6a642987 100644
--- a/IRaCIS.Core.Application/Service/Reading/ReadingClinicalDataService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs
@@ -1,15 +1,6 @@
-using IRaCIS.Application.Interfaces;
-using IRaCIS.Core.Infra.EFCore;
-using IRaCIS.Core.Domain.Share;
-using IRaCIS.Core.Application.Filter;
+using IRaCIS.Core.Domain.Share;
using Microsoft.AspNetCore.Mvc;
-using IRaCIS.Core.Application.Service.WorkLoad.DTO;
-using Microsoft.AspNetCore.Authorization;
-using IRaCIS.Core.Application.Auth;
using IRaCIS.Core.Application.Service.Reading.Dto;
-using MassTransit;
-using System.ComponentModel.DataAnnotations;
-using System.Reflection;
using IRaCIS.Core.Infra.EFCore.Common;
using IRaCIS.Core.Application.Contracts;
using IRaCIS.Core.Application.Service.Inspection.DTO;
@@ -65,6 +56,8 @@ namespace IRaCIS.Application.Services
}
+ #region 临床数据基本增删改
+
///
/// 新增或者修改
///
@@ -87,10 +80,10 @@ namespace IRaCIS.Application.Services
var entity = _mapper.Map(indto);
entity.ReadingClinicalDataPDFList = indto.AddFileList.Select(x => new ReadingClinicalDataPDF()
{
-
+
FileName = x.FileName,
Path = x.Path,
-
+
}).ToList();
entity.ReadingClinicalDataState = ReadingClinicalDataStatus.HaveUploaded;
@@ -109,10 +102,10 @@ namespace IRaCIS.Application.Services
var addFileList = indto.AddFileList.Select(x => new ReadingClinicalDataPDF()
{
-
+
FileName = x.FileName,
Path = x.Path,
-
+
ReadingClinicalDataId = entity.Id,
}).ToList();
await _readingClinicalDataPDFRepository.AddRangeAsync(addFileList);
@@ -129,6 +122,28 @@ namespace IRaCIS.Application.Services
}
+
+ ///
+ /// 删除
+ ///
+ ///
+ ///
+ [HttpDelete("{id:guid}")]
+ public async Task DeleteReadingClinicalData(Guid id)
+ {
+
+ await _readingClinicalDataRepository.DeleteFromQueryAsync(x => x.Id == id, true);
+ await _readingClinicalDataPDFRepository.DeleteFromQueryAsync(x => x.ReadingClinicalDataId == id, true);
+ return ResponseOutput.Result(true);
+ }
+
+
+ #endregion
+
+
+
+ #region 临床数据CRC 相关
+
///
/// 获取CRC上传的文件
///
@@ -150,8 +165,8 @@ namespace IRaCIS.Application.Services
FileName = x.ClinicalDataTrialSet.FileName,
UploadRole = x.ClinicalDataTrialSet.UploadRole,
Path = x.ClinicalDataTrialSet.Path,
- IsBlind=x.IsBlind,
- IsComplete=x.IsComplete
+ IsBlind = x.IsBlind,
+ IsComplete = x.IsComplete
}).ToListAsync();
List clinicalData = (await this.GetReadingClinicalDataList(new GetReadingClinicalDataListIndto()
@@ -180,10 +195,6 @@ namespace IRaCIS.Application.Services
}
-
-
-
-
///
/// 添加CRC数据类型
///
@@ -209,34 +220,52 @@ namespace IRaCIS.Application.Services
}
- /////
- ///// 设置临床数据是否盲化
- /////
- /////
- //[HttpPost]
- //public async Task SetReadingClinicalDataIsBlind(SetReadingClinicalDataIsBlind inDto)
- //{
- // await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(inDto.Id, x=>new ReadingClinicalData() {
- // IsBlind=inDto.IsBlind,
- // });
- // return ResponseOutput.Ok(await _readingClinicalDataRepository.SaveChangesAsync());
- //}
+ #endregion
+
+
+
+ #region 临床数据签名 和确认
///
- /// 删除
+ /// 影像阅片临床数据签名
///
- ///
- ///
- [HttpDelete("{id:guid}")]
- public async Task DeleteReadingClinicalData(Guid id)
- {
+ // [HttpPost]
- await _readingClinicalDataRepository.DeleteFromQueryAsync(x => x.Id == id, true);
- await _readingClinicalDataPDFRepository.DeleteFromQueryAsync(x => x.ReadingClinicalDataId == id, true);
- return ResponseOutput.Result(true);
+ public async Task ReadClinicalDataSign(ReadingClinicalDataSignIndto inDto)
+ {
+ await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(x => x.Id == inDto.ReadingClinicalDataId, x => new ReadingClinicalData()
+ {
+ IsSign = true,
+ ReadingClinicalDataState = ReadingClinicalDataStatus.HaveSigned
+ });
+
+ var result = await _readingClinicalDataRepository.SaveChangesAsync();
+
+
+ var readingId = await _readingClinicalDataRepository.Where(x => x.Id == inDto.ReadingClinicalDataId).Select(x => x.ReadingId).FirstOrDefaultAsync();
+
+ await this.iServiceProvider.GetService().AddOncologyTask(readingId);
+
+ return ResponseOutput.Result(result);
}
+ [HttpPut]
+ public async Task PMClinicalDataConfirm(PMClinicalDataConfirmCommand command)
+ {
+ await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(t => t.Id == command.Id, u => new ReadingClinicalData()
+ {
+ IsBlind = command.IsBlind,
+ IsComplete = command.IsComplete,
+ ReadingClinicalDataState = ReadingClinicalDataStatus.HaveChecked
+ });
+ await _readingClinicalDataRepository.SaveChangesAsync();
+ return ResponseOutput.Ok();
+ }
+ #endregion
+
+
+ #region 临床数据相关查询
///
/// 获取下拉菜单
///
@@ -262,7 +291,7 @@ namespace IRaCIS.Application.Services
ReadModule readModule = null;
if (inDto.ReadingId != null)
{
- readModule = await _readModuleRepository.Where(x => x.Id ==inDto.ReadingId).FirstOrDefaultAsync();
+ readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadingId).FirstOrDefaultAsync();
}
Dictionary keyValuePairs = new Dictionary();
@@ -274,11 +303,11 @@ namespace IRaCIS.Application.Services
List clinicalList = await _clinicalDataTrialSetRepository.Where(x => x.TrialId == inDto.TrialId && x.IsConfirm)
.WhereIf(inDto.UploadRole != null, x => x.UploadRole == inDto.UploadRole)
.Where(x => !usedIdsQuery.Contains(x.Id))
- .WhereIf(inDto.TrialReadingCriterionId != null, t => t.TrialClinicalDataCriterionList.Any(t=>t.TrialReadingCriterionId == inDto.TrialReadingCriterionId) )
+ .WhereIf(inDto.TrialReadingCriterionId != null, t => t.TrialClinicalDataCriterionList.Any(t => t.TrialReadingCriterionId == inDto.TrialReadingCriterionId))
.WhereIf(inDto.IsVisit && inDto.IsBaseLine, x => x.ClinicalDataLevel == ClinicalLevel.Subject || x.ClinicalDataLevel == ClinicalLevel.SubjectVisit)
.WhereIf(inDto.IsVisit && !inDto.IsBaseLine, x => x.ClinicalDataLevel == ClinicalLevel.SubjectVisit)
- .WhereIf(!inDto.IsVisit, x => x.ClinicalDataLevel == ClinicalLevel.ImageRead||x.ClinicalDataLevel==ClinicalLevel.OncologyRead)
- .WhereIf(readModule!=null, x => x.ClinicalDataLevel == keyValuePairs[readModule.ModuleType])
+ .WhereIf(!inDto.IsVisit, x => x.ClinicalDataLevel == ClinicalLevel.ImageRead || x.ClinicalDataLevel == ClinicalLevel.OncologyRead)
+ .WhereIf(readModule != null, x => x.ClinicalDataLevel == keyValuePairs[readModule.ModuleType])
.Select(x => new GetTrialClinicalDataSelectOutDto()
{
ClinicalDataLevel = x.ClinicalDataLevel,
@@ -292,29 +321,6 @@ namespace IRaCIS.Application.Services
}
- ///
- /// 影像阅片临床数据签名
- ///
- // [HttpPost]
-
- public async Task ReadClinicalDataSign(ReadingClinicalDataSignIndto inDto)
- {
- await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(x => x.Id == inDto.ReadingClinicalDataId, x => new ReadingClinicalData()
- {
- IsSign = true,
- ReadingClinicalDataState=ReadingClinicalDataStatus.HaveSigned
- });
-
- var result = await _readingClinicalDataRepository.SaveChangesAsync();
-
-
- var readingId = await _readingClinicalDataRepository.Where(x => x.Id == inDto.ReadingClinicalDataId).Select(x => x.ReadingId).FirstOrDefaultAsync();
-
- await this.iServiceProvider.GetService().AddOncologyTask(readingId);
-
- return ResponseOutput.Result(result);
- }
-
///
/// 获取访视 阅片或任务临床数据
///
@@ -364,6 +370,56 @@ namespace IRaCIS.Application.Services
});
}
+
+ ///
+ /// 获取阅片临床数据列表
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task<(List, object)> GetReadingClinicalDataList(GetReadingClinicalDataListIndto inDto)
+ {
+ GetTrialClinicalDataSelectIndto getTrialClinicalDataSelectIndto = new GetTrialClinicalDataSelectIndto()
+ {
+ ReadingId = inDto.ReadingId,
+ TrialId = inDto.TrialId,
+ IsBaseLine = inDto.IsBaseLine,
+ SubjectId = inDto.SubjectId,
+ IsVisit = inDto.IsVisit,
+ };
+
+ var clinicalDataList = await this.GetTrialClinicalDataSelect(getTrialClinicalDataSelectIndto);
+
+ if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC)
+ {
+ inDto.UploadRole = UploadRole.CRC;
+ }
+ var isBaseLine = await _subjectVisitRepository.AnyAsync(x => x.Id == inDto.ReadingId && x.IsBaseLine);
+
+
+ var result = await this.GetReadingClinicalList(inDto);
+
+
+ var previousHistoryList = await _previousHistoryRepository.Where(x => x.SubjectVisitId == inDto.ReadingId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+ var previousOtherList = await _previousOtherRepository.Where(x => x.SubjectVisitId == inDto.ReadingId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+ var previousSurgeryList = await _previousSurgeryRepository.Where(x => x.SubjectVisitId == inDto.ReadingId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+ foreach (var item in result)
+ {
+ item.ClinicalTableData = new ClinicalDataTable()
+ {
+ PreviousHistoryList = previousHistoryList.Where(x => x.ClinicalDataTrialSetId == item.ClinicalDataTrialSetId).ToList(),
+ PreviousOtherList = previousOtherList.Where(x => x.ClinicalDataTrialSetId == item.ClinicalDataTrialSetId).ToList(),
+ PreviousSurgeryList = previousSurgeryList.Where(x => x.ClinicalDataTrialSetId == item.ClinicalDataTrialSetId).ToList(),
+ };
+
+ }
+
+ return (result, new
+ {
+ IsCanAddClinicalData = clinicalDataList.Count() > 0,
+ });
+ }
+
[NonDynamicMethod]
public async Task> GetClinicalDataList(GetReadingOrTaskClinicalDataListInDto inDto)
{
@@ -403,68 +459,7 @@ namespace IRaCIS.Application.Services
return result;
}
- ///
- /// 获取阅片临床数据列表
- ///
- ///
- ///
- [HttpPost]
- public async Task<(List,object)> GetReadingClinicalDataList(GetReadingClinicalDataListIndto inDto)
- {
- GetTrialClinicalDataSelectIndto getTrialClinicalDataSelectIndto = new GetTrialClinicalDataSelectIndto()
- {
- ReadingId = inDto.ReadingId,
- TrialId = inDto.TrialId,
- IsBaseLine = inDto.IsBaseLine,
- SubjectId = inDto.SubjectId,
- IsVisit = inDto.IsVisit,
- };
- var clinicalDataList = await this.GetTrialClinicalDataSelect(getTrialClinicalDataSelectIndto);
-
- if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC)
- {
- inDto.UploadRole = UploadRole.CRC;
- }
- var isBaseLine = await _subjectVisitRepository.AnyAsync(x => x.Id == inDto.ReadingId && x.IsBaseLine);
-
-
- var result =await this.GetReadingClinicalList(inDto);
-
-
- var previousHistoryList = await _previousHistoryRepository.Where(x => x.SubjectVisitId == inDto.ReadingId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
- var previousOtherList = await _previousOtherRepository.Where(x => x.SubjectVisitId == inDto.ReadingId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
- var previousSurgeryList = await _previousSurgeryRepository.Where(x => x.SubjectVisitId == inDto.ReadingId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
- foreach (var item in result)
- {
- item.ClinicalTableData = new ClinicalDataTable()
- {
- PreviousHistoryList = previousHistoryList.Where(x => x.ClinicalDataTrialSetId == item.ClinicalDataTrialSetId).ToList(),
- PreviousOtherList = previousOtherList.Where(x => x.ClinicalDataTrialSetId == item.ClinicalDataTrialSetId).ToList(),
- PreviousSurgeryList = previousSurgeryList.Where(x => x.ClinicalDataTrialSetId == item.ClinicalDataTrialSetId).ToList(),
- };
-
- }
-
- return (result, new {
- IsCanAddClinicalData= clinicalDataList.Count()>0,
- }) ;
- }
-
-
- [HttpPut]
- public async Task PMClinicalDataConfirm(PMClinicalDataConfirmCommand command)
- {
- await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(t => t.Id == command.Id, u => new ReadingClinicalData()
- {
- IsBlind=command.IsBlind,
- IsComplete=command.IsComplete,
- ReadingClinicalDataState=ReadingClinicalDataStatus.HaveChecked
- });
- await _readingClinicalDataRepository.SaveChangesAsync();
-
- return ResponseOutput.Ok();
- }
///
/// 获取临床数据集合
///
@@ -486,11 +481,11 @@ namespace IRaCIS.Application.Services
Id = x.Id,
UploadRole = x.ClinicalDataTrialSet.UploadRole,
IsCRCUpload = x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC,
- IsBlind=x.IsBlind,
- IsComplete=x.IsComplete,
- FileCount=x.FileCount,
+ IsBlind = x.IsBlind,
+ IsComplete = x.IsComplete,
+ FileCount = x.FileCount,
- ReadingClinicalDataState=x.ReadingClinicalDataState,
+ ReadingClinicalDataState = x.ReadingClinicalDataState,
FileList = x.ReadingClinicalDataPDFList.Select(y => new GetFileDto()
{
@@ -506,13 +501,19 @@ namespace IRaCIS.Application.Services
return result;
}
+ #endregion
+
+
+ #region 阅片临床数据PDF
+
///
/// 获取单个阅片临床数据的所有文件
///
///
///
[HttpPost]
- public async Task> GetReadingClinicalDataPDFList(GetReadingClinicalDataPDFListIndto inDto) {
+ public async Task> GetReadingClinicalDataPDFList(GetReadingClinicalDataPDFListIndto inDto)
+ {
var result = await _readingClinicalDataPDFRepository.Where(x => x.ReadingClinicalDataId == inDto.ReadingClinicalDataId).ProjectTo(_mapper.ConfigurationProvider)
.ToPagedListAsync(inDto.PageIndex, inDto.PageSize, inDto.SortField == null ? nameof(GetReadingClinicalDataPDFListOutDto.FileName) : inDto.SortField,
@@ -532,6 +533,22 @@ namespace IRaCIS.Application.Services
return ResponseOutput.Result(true);
}
+ #endregion
+
+
+
+ /////
+ ///// 设置临床数据是否盲化
+ /////
+ /////
+ //[HttpPost]
+ //public async Task SetReadingClinicalDataIsBlind(SetReadingClinicalDataIsBlind inDto)
+ //{
+ // await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(inDto.Id, x=>new ReadingClinicalData() {
+ // IsBlind=inDto.IsBlind,
+ // });
+ // return ResponseOutput.Ok(await _readingClinicalDataRepository.SaveChangesAsync());
+ //}
}
}
diff --git a/IRaCIS.Core.Application/Service/Reading/ReadModuleService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadModuleService.cs
similarity index 100%
rename from IRaCIS.Core.Application/Service/Reading/ReadModuleService.cs
rename to IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadModuleService.cs
diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingPeriodSetService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadingPeriodSetService.cs
similarity index 85%
rename from IRaCIS.Core.Application/Service/Reading/ReadingPeriodSetService.cs
rename to IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadingPeriodSetService.cs
index 4f8b86aea..b4c5664ca 100644
--- a/IRaCIS.Core.Application/Service/Reading/ReadingPeriodSetService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadingPeriodSetService.cs
@@ -1,16 +1,7 @@
-using IRaCIS.Application.Interfaces;
-using IRaCIS.Core.Infra.EFCore;
-using IRaCIS.Core.Domain.Share;
-using IRaCIS.Core.Application.Filter;
+using IRaCIS.Core.Domain.Share;
using Microsoft.AspNetCore.Mvc;
-using IRaCIS.Core.Application.Service.WorkLoad.DTO;
-using Microsoft.AspNetCore.Authorization;
-using IRaCIS.Core.Application.Auth;
using IRaCIS.Core.Application.Service.Reading.Dto;
using MassTransit;
-
-using IRaCIS.Core.Infra.EFCore.Common;
-using IRaCIS.Core.Infrastructure.Extention;
using IRaCIS.Core.Application.Service;
using IRaCIS.Core.Application.ViewModel;
using IRaCIS.Core.Infrastructure;
@@ -65,6 +56,9 @@ namespace IRaCIS.Application.Services
}
+
+ #region 阅片期配置 基本信息维护 以及生效
+
///
/// 新增或者修改 (增加标准搜索,已修改)
///
@@ -73,8 +67,8 @@ namespace IRaCIS.Application.Services
[HttpPost]
public async Task AddOrUpdateReadingPeriodSet(ReadingPeriodSetAddOrEdit addOrEditReadingPeriodSet)
{
- if (await _readingPeriodSetRepository.AnyAsync(x => x.Id != addOrEditReadingPeriodSet.Id&&x.IsTakeEffect!= ReadingPeriodStatus.Revocation
- && x.TrialId == addOrEditReadingPeriodSet.TrialId && x.ReadingPeriodName == addOrEditReadingPeriodSet.ReadingPeriodName && x.TrialReadingCriterionId==addOrEditReadingPeriodSet.TrialReadingCriterionId))
+ if (await _readingPeriodSetRepository.AnyAsync(x => x.Id != addOrEditReadingPeriodSet.Id && x.IsTakeEffect != ReadingPeriodStatus.Revocation
+ && x.TrialId == addOrEditReadingPeriodSet.TrialId && x.ReadingPeriodName == addOrEditReadingPeriodSet.ReadingPeriodName && x.TrialReadingCriterionId == addOrEditReadingPeriodSet.TrialReadingCriterionId))
{
return ResponseOutput.NotOk("阅片期名称重复,操作失败");
}
@@ -124,192 +118,22 @@ namespace IRaCIS.Application.Services
}
}
+
+
///
- /// 获取影像阅片的预览 // 需要清除之前已经选中的 (增加标准搜索,已修改)
+ /// 删除
///
+ ///
///
- [HttpPost]
- public async Task> GetPreviewTheReadingList(PreviewTheReadingListInDto inDto)
+ [HttpDelete("{readingPeriodSetId:guid}")]
+ public async Task DeleteReadingPeriodSet(Guid readingPeriodSetId)
{
- var readModulequery = _readModuleRepository.AsQueryable();
+ await _readingPeriodSetRepository.DeleteFromQueryAsync(t => t.Id == readingPeriodSetId, true);
+ await _readingPeriodPlanRepository.DeleteFromQueryAsync(t => t.ReadingPeriodSetId == readingPeriodSetId, true);
- // 当前项目 最晚拍片日期不为null 中心筛选
- var visitQuery = _subjectVisitRepository.Where(x => x.TrialId == inDto.TrialId &&x.LatestScanDate!=null&&!x.IsLostVisit)
- .WhereIf(inDto.ReadingScope== ReadingScopeEnum.Site, x => inDto.SiteIds.Contains(x.SiteId));
-
- // 已经存在的访视 需要排除
- var existsBubjectVisitsQuery= _readModuleRepository.Where(y => y.ReadingSetType == inDto.ReadingSetType && y.TrialId == inDto.TrialId && y.TrialReadingCriterionId == inDto.TrialReadingCriterionId).Select(x => x.SubjectVisitId);
-
- visitQuery = visitQuery.Where(x => !existsBubjectVisitsQuery.Contains(x.Id))
- .WhereIf(inDto.ExpirationDate != null, x => x.LatestScanDate <= inDto.ExpirationDate.Value)
- .WhereIf(inDto.ExpirationVisitNum != null, x => x.VisitNum == inDto.ExpirationVisitNum)
- .WhereIf(inDto.ReadingSetType==ReadingSetType.TumorReading,x => readModulequery.Where(y => y.SubjectVisitId == x.Id && y.ReadingSetType == ReadingSetType.ImageReading).Count() > 0);
-
- var subjectIdlist = await visitQuery.OrderBy(x => x.SubjectId).Select(x => x.SubjectId).Distinct().Skip((inDto.PageIndex - 1) * inDto.PageSize).Take(inDto.PageSize).ToListAsync();
-
-
- var totalCount = visitQuery.Select(x => x.SubjectId).Distinct().Count();
-
- var visitlist = await visitQuery.Include(x => x.Subject).Include(x => x.TrialSite).Where(x => subjectIdlist.Contains(x.SubjectId)).ToListAsync();
-
- var subjectVisits = visitlist.GroupBy(x => x.SubjectId).Select(x => new
- {
- SubjectId = x.Key,
- Visits = x.ToList()
- });
-
- List visits = new List();
- subjectVisits.ForEach(x =>
- {
- var visit = x.Visits.OrderByDescending(x => x.VisitNum).FirstOrDefault();
- if (visit != null)
- {
- visits.Add(visit);
- }
- });
-
- PageOutput result = new PageOutput()
- {
- CurrentPageData = visits
- .Select(x => new PreviewTheReadingListOutDto
- {
- ExpirationDate = inDto.ExpirationDate,
- SubjectVisitId = x.Id,
- TrialSiteCode = x.TrialSite.TrialSiteCode,
- LatestScanDate = x.LatestScanDate,
- ReadingPeriodName = inDto.ReadingPeriodName,
- SubjectCode = x.Subject.Code,
- SubjectId = x.SubjectId,
- SubjectVisitName = x.VisitName,
- }).ToList(),
- PageSize = inDto.PageSize,
- PageIndex = inDto.PageIndex,
- TotalCount = totalCount,
- };
- return result;
+ return ResponseOutput.Ok();
}
- ///
- /// 添加对应的阅片 (增加标准不影响 因为阅片期设置关联了标准)
- ///
- ///
- ///
- public async Task GenerateReadingTask(ReadingToGenerateInDto inDto)
- {
- List plans = new List();
- inDto.SubjectVisitIds.ForEach(x =>
- {
- plans.Add(new ReadingPeriodPlan()
- {
- SubjectVisitId = x,
- ReadingPeriodSetId = inDto.ReadingPeriodSetId
- });
- });
- await _readingPeriodPlanRepository.DeleteFromQueryAsync(x => x.ReadingPeriodSetId == inDto.ReadingPeriodSetId);
- await _readingPeriodPlanRepository.SaveChangesAsync();
- await _readingPeriodPlanRepository.AddRangeAsync(plans);
- var result = await _readingPeriodPlanRepository.SaveChangesAsync();
- return ResponseOutput.Result(result);
- }
-
- ///
- /// 获取选中的计划 (增加标准不影响 因为阅片期设置关联了标准)
- ///
- ///
- ///
- [HttpPost]
- public async Task> GetPreviewTheReadingPlanList(PreviewTheReadingListDto inDto)
- {
- var plans = _readingPeriodPlanRepository.Where(x => x.ReadingPeriodSetId == inDto.ReadingPeriodSetId).Include(x => x.SubjectVisit).Include(x => x.SubjectVisit.TrialSite).Include(x => x.SubjectVisit.Subject)
- .Include(x => x.ReadingPeriodSet).Select(x => new PreviewTheReadingListOutDto
- {
- Id = x.Id,
- ExpirationDate = x.ReadingPeriodSet.ExpirationDate,
- SubjectVisitId = x.SubjectVisitId,
- TrialSiteCode = x.SubjectVisit.TrialSite.TrialSiteCode,
- LatestScanDate = x.SubjectVisit.LatestScanDate,
- ReadingPeriodName = x.ReadingPeriodSet.ReadingPeriodName,
- ReadingPeriodSetId = x.ReadingPeriodSetId,
- SubjectCode = x.SubjectVisit.Subject.Code,
- SubjectId = x.SubjectVisit.SubjectId,
- SubjectVisitName = x.SubjectVisit.VisitName,
- EffectOfTime = x.ReadingPeriodSet.EffectOfTime,
- });
-
- return await plans.ToPagedListAsync(inDto.PageIndex, inDto.PageSize, inDto.SortField == null ? nameof(PreviewTheReadingListOutDto.SubjectId) : inDto.SortField,
- inDto.Asc);
- }
-
-
- ///
- /// 分页获取 (增加标准搜索,已修改)
- ///
- ///
- ///
- [HttpPost]
- public async Task> GetReadingPeriodSetList(ReadingPeriodSetQuery query)
- {
- var readQuery =_readingPeriodSetRepository.Where(t=>t.TrialId==query.TrialId).Include(x=>x.ReadingPeriodSites)
- .WhereIf(query.ReadingPeriodName != null, x => x.ReadingPeriodName.Contains(query.ReadingPeriodName!))
- .WhereIf(query.TrialReadingCriterionId != null, x => x.TrialReadingCriterionId==query.TrialReadingCriterionId)
- .ProjectTo(_mapper.ConfigurationProvider);
- var pageList= await readQuery.ToPagedListAsync(query.PageIndex, query.PageSize, query.SortField == null ? nameof(ReadingPeriodSetView.CreateTime) : query.SortField,
- query.Asc);
-
- pageList.CurrentPageData.ForEach(x =>
- {
- x.SubjectVisitName = x.IsGlobal ? "末次访视" : x.SubjectVisitName;
- });
- return pageList;
- }
-
-
-
- ///
- /// 获取单条
- ///
- ///
- ///
- [HttpPost("{id:guid}")]
- public async Task GetReadingPeriodSet(Guid id)
- {
- return await _readingPeriodSetRepository.AsQueryable().Include(x => x.ReadingPeriodSites).Where(x => x.Id == id).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
- }
-
- ///
- /// 获取阅片期配置的截至访视的下拉框 (增加标准搜索,已修改)
- ///
- ///
- ///
- [HttpPost]
- public async Task> GetReadingVisitList(GetReadingVisitListInDto inDto)
- {
- var maxVisitNum = await _readingPeriodSetRepository
- .WhereIf(inDto.TrialReadingCriterionId!=null,t=>t.TrialReadingCriterionId==inDto.TrialReadingCriterionId)
-
- .Where(x => x.TrialId == inDto.TrialId && x.ReadingSetType == inDto.ReadingSetType&&x.IsTakeEffect== ReadingPeriodStatus.TakeEffect )
- .MaxAsync(x => x.ExpirationVisitNum)??0;
- var thisVisitNum = await _readingPeriodSetRepository.Where(x => x.Id == inDto.ReadingPeriodSetId).Select(x => x.ExpirationVisitNum).FirstOrDefaultAsync() ?? -1;
-
- var globalVisitNum = new List();
- if (inDto.ReadingSetType == ReadingSetType.TumorReading)
- {
- globalVisitNum = await _readModuleRepository
- .WhereIf(inDto.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == inDto.TrialReadingCriterionId)
-
- .Where(x => x.ReadingSetType == ReadingSetType.ImageReading && x.TrialId == inDto.TrialId).Select(x => x.VisitNum).Distinct().ToListAsync();
- }
-
- List result = await _visitStageRepository.Where(x => x.TrialId == inDto.TrialId )
- .WhereIf(inDto.ReadingSetType == ReadingSetType.TumorReading,x=> globalVisitNum.Contains(x.VisitNum))
- .Where(x=>x.VisitNum== thisVisitNum || x.VisitNum >= maxVisitNum).Select(x => new GetReadingVisitListOutDto()
- {
- VisitName = x.VisitName,
- VisitNum = x.VisitNum,
- VisitStageId = x.Id,
- }).ToListAsync();
- return result;
- }
///
/// 设置阅片期配置是否生效 (增加标准搜索,已修改)
@@ -327,8 +151,8 @@ namespace IRaCIS.Application.Services
.Include(x => x.ReadingPeriodSet).Include(x => x.SubjectVisit).ToList();
var needAddVisitIds = plans.Select(x => x.SubjectVisitId).ToList();
- var repeatVisitNames = _readModuleRepository.Where(x => x.TrialReadingCriterionId== readingPeriodSet.TrialReadingCriterionId && x.ReadingSetType == readingPeriodSet.ReadingSetType && needAddVisitIds.Contains(x.SubjectVisitId)).Select(x =>x.Subject.Code+"的"+ x.SubjectVisit.VisitName).ToList();
- if(repeatVisitNames.Count!=0)
+ var repeatVisitNames = _readModuleRepository.Where(x => x.TrialReadingCriterionId == readingPeriodSet.TrialReadingCriterionId && x.ReadingSetType == readingPeriodSet.ReadingSetType && needAddVisitIds.Contains(x.SubjectVisitId)).Select(x => x.Subject.Code + "的" + x.SubjectVisit.VisitName).ToList();
+ if (repeatVisitNames.Count != 0)
{
return ResponseOutput.NotOk($"{string.Join(",", repeatVisitNames)}已经添加过阅片期,无法设置生效");
}
@@ -350,7 +174,7 @@ namespace IRaCIS.Application.Services
VisitNum = item.SubjectVisit.VisitNum,
//增加标准
- TrialReadingCriterionId=readingPeriodSet.TrialReadingCriterionId
+ TrialReadingCriterionId = readingPeriodSet.TrialReadingCriterionId
});
};
@@ -361,8 +185,8 @@ namespace IRaCIS.Application.Services
{
case ReadingSetType.ImageReading:
//增加标准
- var taskInfoList = await _visitTaskRepository.Where(x =>x.TrialReadingCriterionId==readingPeriodSet.TrialReadingCriterionId && subjectVisitIds.Contains(x.SourceSubjectVisitId ?? default(Guid)) &&
- x.TaskState==TaskState.Effect && x.ReadingTaskState == ReadingTaskState.HaveSigned && !x.IsAnalysisCreate).ToListAsync();
+ var taskInfoList = await _visitTaskRepository.Where(x => x.TrialReadingCriterionId == readingPeriodSet.TrialReadingCriterionId && subjectVisitIds.Contains(x.SourceSubjectVisitId ?? default(Guid)) &&
+ x.TaskState == TaskState.Effect && x.ReadingTaskState == ReadingTaskState.HaveSigned && !x.IsAnalysisCreate).ToListAsync();
foreach (var item in taskInfoList)
{
@@ -394,23 +218,23 @@ namespace IRaCIS.Application.Services
case ReadingSetType.TumorReading:
-
+
var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == readingPeriodSet.TrialReadingCriterionId).Select(x => new
{
x.ReadingType,
-
+
}).FirstNotNullAsync();
//增加标准
var globalModuleIds = await _readModuleRepository.Where(x => x.TrialReadingCriterionId == readingPeriodSet.TrialReadingCriterionId && subjectVisitIds.Contains(x.SubjectVisitId) && x.ModuleType == ModuleTypeEnum.Global).Select(x => x.Id).ToListAsync();
//增加标准
- var globalTaskInfo = await _visitTaskRepository.Where(x => x.TrialReadingCriterionId == readingPeriodSet.TrialReadingCriterionId && globalModuleIds.Contains(x.SouceReadModuleId ?? default(Guid)) && x.TaskState == TaskState.Effect && x.ReadingTaskState == ReadingTaskState.HaveSigned&&!x.IsAnalysisCreate).GroupBy(x=> new { x.SouceReadModuleId }).Select(x =>
- new {
- SouceReadModuleId=x.Key.SouceReadModuleId,
- Count=x.ToList().Count,
- TaskId = x.Select(x=>x.Id).FirstOrDefault(),
+ var globalTaskInfo = await _visitTaskRepository.Where(x => x.TrialReadingCriterionId == readingPeriodSet.TrialReadingCriterionId && globalModuleIds.Contains(x.SouceReadModuleId ?? default(Guid)) && x.TaskState == TaskState.Effect && x.ReadingTaskState == ReadingTaskState.HaveSigned && !x.IsAnalysisCreate).GroupBy(x => new { x.SouceReadModuleId }).Select(x =>
+ new {
+ SouceReadModuleId = x.Key.SouceReadModuleId,
+ Count = x.ToList().Count,
+ TaskId = x.Select(x => x.Id).FirstOrDefault(),
ReadModuleId = x.Select(x => x.SouceReadModuleId).FirstOrDefault(),
JudgeTaskId = x.Select(x => x.JudgeVisitTaskId).FirstOrDefault(),
JudgeTaskResultId = x.Select(x => x.JudgeVisitTask.JudgeResultTaskId).FirstOrDefault(),
@@ -490,18 +314,215 @@ namespace IRaCIS.Application.Services
- ///
- /// 删除
- ///
- ///
- ///
- [HttpDelete("{readingPeriodSetId:guid}")]
- public async Task DeleteReadingPeriodSet(Guid readingPeriodSetId)
- {
- await _readingPeriodSetRepository.DeleteFromQueryAsync(t => t.Id == readingPeriodSetId,true);
- await _readingPeriodPlanRepository.DeleteFromQueryAsync(t => t.ReadingPeriodSetId == readingPeriodSetId, true);
+ #endregion
- return ResponseOutput.Ok();
+
+ #region 阅片计划 相关
+
+ ///
+ /// 获取选中的计划 (增加标准不影响 因为阅片期设置关联了标准)
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetPreviewTheReadingPlanList(PreviewTheReadingListDto inDto)
+ {
+ var plans = _readingPeriodPlanRepository.Where(x => x.ReadingPeriodSetId == inDto.ReadingPeriodSetId).Include(x => x.SubjectVisit).Include(x => x.SubjectVisit.TrialSite).Include(x => x.SubjectVisit.Subject)
+ .Include(x => x.ReadingPeriodSet).Select(x => new PreviewTheReadingListOutDto
+ {
+ Id = x.Id,
+ ExpirationDate = x.ReadingPeriodSet.ExpirationDate,
+ SubjectVisitId = x.SubjectVisitId,
+ TrialSiteCode = x.SubjectVisit.TrialSite.TrialSiteCode,
+ LatestScanDate = x.SubjectVisit.LatestScanDate,
+ ReadingPeriodName = x.ReadingPeriodSet.ReadingPeriodName,
+ ReadingPeriodSetId = x.ReadingPeriodSetId,
+ SubjectCode = x.SubjectVisit.Subject.Code,
+ SubjectId = x.SubjectVisit.SubjectId,
+ SubjectVisitName = x.SubjectVisit.VisitName,
+ EffectOfTime = x.ReadingPeriodSet.EffectOfTime,
+ });
+
+ return await plans.ToPagedListAsync(inDto.PageIndex, inDto.PageSize, inDto.SortField == null ? nameof(PreviewTheReadingListOutDto.SubjectId) : inDto.SortField,
+ inDto.Asc);
}
+
+
+ ///
+ /// 添加对应的阅片计划 (后续生效将计划变为模块) (增加标准不影响 因为阅片期设置关联了标准)
+ ///
+ ///
+ ///
+ public async Task GenerateReadingTask(ReadingToGenerateInDto inDto)
+ {
+ List plans = new List();
+ inDto.SubjectVisitIds.ForEach(x =>
+ {
+ plans.Add(new ReadingPeriodPlan()
+ {
+ SubjectVisitId = x,
+ ReadingPeriodSetId = inDto.ReadingPeriodSetId
+ });
+ });
+ await _readingPeriodPlanRepository.DeleteFromQueryAsync(x => x.ReadingPeriodSetId == inDto.ReadingPeriodSetId);
+ await _readingPeriodPlanRepository.SaveChangesAsync();
+ await _readingPeriodPlanRepository.AddRangeAsync(plans);
+ var result = await _readingPeriodPlanRepository.SaveChangesAsync();
+ return ResponseOutput.Result(result);
+ }
+
+ #endregion
+
+
+
+ #region 阅片期相关查询
+
+ ///
+ /// 分页获取 (增加标准搜索,已修改)
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetReadingPeriodSetList(ReadingPeriodSetQuery query)
+ {
+ var readQuery = _readingPeriodSetRepository.Where(t => t.TrialId == query.TrialId).Include(x => x.ReadingPeriodSites)
+ .WhereIf(query.ReadingPeriodName != null, x => x.ReadingPeriodName.Contains(query.ReadingPeriodName!))
+ .WhereIf(query.TrialReadingCriterionId != null, x => x.TrialReadingCriterionId == query.TrialReadingCriterionId)
+ .ProjectTo(_mapper.ConfigurationProvider);
+ var pageList = await readQuery.ToPagedListAsync(query.PageIndex, query.PageSize, query.SortField == null ? nameof(ReadingPeriodSetView.CreateTime) : query.SortField,
+ query.Asc);
+
+ pageList.CurrentPageData.ForEach(x =>
+ {
+ x.SubjectVisitName = x.IsGlobal ? "末次访视" : x.SubjectVisitName;
+ });
+ return pageList;
+ }
+
+
+
+ ///
+ /// 获取单条
+ ///
+ ///
+ ///
+ [HttpPost("{id:guid}")]
+ public async Task GetReadingPeriodSet(Guid id)
+ {
+ return await _readingPeriodSetRepository.AsQueryable().Include(x => x.ReadingPeriodSites).Where(x => x.Id == id).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
+ }
+
+ ///
+ /// 获取阅片期配置的截至访视的下拉框 (增加标准搜索,已修改)
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetReadingVisitList(GetReadingVisitListInDto inDto)
+ {
+ var maxVisitNum = await _readingPeriodSetRepository
+ .WhereIf(inDto.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == inDto.TrialReadingCriterionId)
+
+ .Where(x => x.TrialId == inDto.TrialId && x.ReadingSetType == inDto.ReadingSetType && x.IsTakeEffect == ReadingPeriodStatus.TakeEffect)
+ .MaxAsync(x => x.ExpirationVisitNum) ?? 0;
+ var thisVisitNum = await _readingPeriodSetRepository.Where(x => x.Id == inDto.ReadingPeriodSetId).Select(x => x.ExpirationVisitNum).FirstOrDefaultAsync() ?? -1;
+
+ var globalVisitNum = new List();
+ if (inDto.ReadingSetType == ReadingSetType.TumorReading)
+ {
+ globalVisitNum = await _readModuleRepository
+ .WhereIf(inDto.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == inDto.TrialReadingCriterionId)
+
+ .Where(x => x.ReadingSetType == ReadingSetType.ImageReading && x.TrialId == inDto.TrialId).Select(x => x.VisitNum).Distinct().ToListAsync();
+ }
+
+ List result = await _visitStageRepository.Where(x => x.TrialId == inDto.TrialId)
+ .WhereIf(inDto.ReadingSetType == ReadingSetType.TumorReading, x => globalVisitNum.Contains(x.VisitNum))
+ .Where(x => x.VisitNum == thisVisitNum || x.VisitNum >= maxVisitNum).Select(x => new GetReadingVisitListOutDto()
+ {
+ VisitName = x.VisitName,
+ VisitNum = x.VisitNum,
+ VisitStageId = x.Id,
+ }).ToListAsync();
+ return result;
+ }
+
+
+
+ ///
+ /// 获取影像阅片的预览 // 需要清除之前已经选中的 (增加标准搜索,已修改)
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetPreviewTheReadingList(PreviewTheReadingListInDto inDto)
+ {
+ var readModulequery = _readModuleRepository.AsQueryable();
+
+ // 当前项目 最晚拍片日期不为null 中心筛选
+ var visitQuery = _subjectVisitRepository.Where(x => x.TrialId == inDto.TrialId && x.LatestScanDate != null && !x.IsLostVisit)
+ .WhereIf(inDto.ReadingScope == ReadingScopeEnum.Site, x => inDto.SiteIds.Contains(x.SiteId));
+
+ // 已经存在的访视 需要排除
+ var existsBubjectVisitsQuery = _readModuleRepository.Where(y => y.ReadingSetType == inDto.ReadingSetType && y.TrialId == inDto.TrialId && y.TrialReadingCriterionId == inDto.TrialReadingCriterionId).Select(x => x.SubjectVisitId);
+
+ visitQuery = visitQuery.Where(x => !existsBubjectVisitsQuery.Contains(x.Id))
+ .WhereIf(inDto.ExpirationDate != null, x => x.LatestScanDate <= inDto.ExpirationDate.Value)
+ .WhereIf(inDto.ExpirationVisitNum != null, x => x.VisitNum == inDto.ExpirationVisitNum)
+ .WhereIf(inDto.ReadingSetType == ReadingSetType.TumorReading, x => readModulequery.Where(y => y.SubjectVisitId == x.Id && y.ReadingSetType == ReadingSetType.ImageReading).Count() > 0);
+
+ var subjectIdlist = await visitQuery.OrderBy(x => x.SubjectId).Select(x => x.SubjectId).Distinct().Skip((inDto.PageIndex - 1) * inDto.PageSize).Take(inDto.PageSize).ToListAsync();
+
+
+ var totalCount = visitQuery.Select(x => x.SubjectId).Distinct().Count();
+
+ var visitlist = await visitQuery.Include(x => x.Subject).Include(x => x.TrialSite).Where(x => subjectIdlist.Contains(x.SubjectId)).ToListAsync();
+
+ var subjectVisits = visitlist.GroupBy(x => x.SubjectId).Select(x => new
+ {
+ SubjectId = x.Key,
+ Visits = x.ToList()
+ });
+
+ List visits = new List();
+ subjectVisits.ForEach(x =>
+ {
+ var visit = x.Visits.OrderByDescending(x => x.VisitNum).FirstOrDefault();
+ if (visit != null)
+ {
+ visits.Add(visit);
+ }
+ });
+
+ PageOutput result = new PageOutput()
+ {
+ CurrentPageData = visits
+ .Select(x => new PreviewTheReadingListOutDto
+ {
+ ExpirationDate = inDto.ExpirationDate,
+ SubjectVisitId = x.Id,
+ TrialSiteCode = x.TrialSite.TrialSiteCode,
+ LatestScanDate = x.LatestScanDate,
+ ReadingPeriodName = inDto.ReadingPeriodName,
+ SubjectCode = x.Subject.Code,
+ SubjectId = x.SubjectId,
+ SubjectVisitName = x.VisitName,
+ }).ToList(),
+ PageSize = inDto.PageSize,
+ PageIndex = inDto.PageIndex,
+ TotalCount = totalCount,
+ };
+ return result;
+ }
+
+ #endregion
+
+
+
+
+
+
+
+
+
}
}