阅片期替代
continuous-integration/drone/push Build is passing Details

IRC_NewDev
hang 2024-09-02 10:27:01 +08:00
parent 5afe0be277
commit bd4e4e0072
5 changed files with 107 additions and 85 deletions

View File

@ -108,7 +108,7 @@ namespace IRaCIS.Application.Services
/// <param name="inQuery"></param> /// <param name="inQuery"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<IResponseOutput<PageOutput<GetReadModuleDtoOut>>> GetReadModuleList_new(GetReadModuleDto inQuery) public async Task<IResponseOutput<PageOutput<GetReadModuleDtoOut>>> GetReadModuleList(GetReadModuleDto inQuery)
{ {
var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId).Select(x => new var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId).Select(x => new
@ -572,7 +572,7 @@ namespace IRaCIS.Application.Services
}); });
var readMouduleQuery = _readModuleRepository.Where(t => t.TrialId == inQuery.TrialId) var readMouduleQuery = _readModuleRepository.Where(t => t.TrialId == inQuery.TrialId && t.TrialReadingCriterionId==inQuery.TrialReadingCriterionId)
.Select(rm => new ReadModuleView() .Select(rm => new ReadModuleView()
{ {
Id = rm.Id, Id = rm.Id,
@ -594,7 +594,7 @@ namespace IRaCIS.Application.Services
TrialId = rm.TrialId, TrialId = rm.TrialId,
VisitNum = rm.SubjectVisit.VisitNum, VisitNum = rm.SubjectVisit.VisitNum,
TrialReadingCriterionId = inQuery.TrialReadingCriterionId, TrialReadingCriterionId = rm.TrialReadingCriterionId,
OutPlanPreviousVisitId = null, OutPlanPreviousVisitId = null,
@ -611,8 +611,9 @@ namespace IRaCIS.Application.Services
ReadModuleId = rm.Id, ReadModuleId = rm.Id,
ReadModuleName = rm.ModuleName, ReadModuleName = rm.ModuleName,
//是否是截止访视? //阅片期切换访视 限制1、阅片期访视已完成了任务不能如果本身是肿瘤学不能或者本身是全局后续有肿瘤学
IsCanChangeCutOffVisit = false, IsCanChangeCutOffVisit = !(rm.ModuleTaskList.Any(t => t.TaskState == TaskState.Effect) && rm.ReadingSetType == ReadingSetType.TumorReading &&
rm.SubjectVisit.ReadModuleList.Any(t => t.ReadingSetType == ReadingSetType.TumorReading)),
///阅片状态 0 1 2 保持访视的任务全做完了就是5 没完成就是4 否则就是3 ///阅片状态 0 1 2 保持访视的任务全做完了就是5 没完成就是4 否则就是3
@ -631,11 +632,11 @@ namespace IRaCIS.Application.Services
////需要签名数量计算 基线包含subject+访视级别的 ////需要签名数量计算 基线包含subject+访视级别的
NeedSignClinicalDataCount = rm.Trial.TrialReadingCriterionList.Where(t => t.Id == inQuery.TrialReadingCriterionId).SelectMany(u => u.TrialClinicalDataSetCriterionList.Select(z => z.TrialClinicalDataSet)) NeedSignClinicalDataCount = rm.Trial.TrialReadingCriterionList.Where(t => t.Id == inQuery.TrialReadingCriterionId).SelectMany(u => u.TrialClinicalDataSetCriterionList.Select(z => z.TrialClinicalDataSet))
.Where(t => t.IsConfirm == true && t.UploadRole == UploadRole.PM && (t.ClinicalDataLevel == ClinicalLevel.SubjectVisit || t.ClinicalDataLevel == ClinicalLevel.ImageRead || t.ClinicalDataLevel == ClinicalLevel.OncologyRead)).Count() .Where(t => t.IsConfirm == true && t.UploadRole == UploadRole.PM && (rm.ReadingSetType == ReadingSetType.ImageReading ? t.ClinicalDataLevel == ClinicalLevel.ImageRead : t.ClinicalDataLevel == ClinicalLevel.OncologyRead)).Count()
+ +
(rm.Trial.TrialReadingCriterionList.Where(t => t.Id == inQuery.TrialReadingCriterionId).SelectMany(u => u.TrialClinicalDataSetCriterionList.Select(z => z.TrialClinicalDataSet)) (rm.Trial.TrialReadingCriterionList.Where(t => t.Id == inQuery.TrialReadingCriterionId).SelectMany(u => u.TrialClinicalDataSetCriterionList.Select(z => z.TrialClinicalDataSet))
.Where(t => t.IsConfirm == true && t.UploadRole == UploadRole.CRC && .Where(t => t.IsConfirm == true && t.UploadRole == UploadRole.CRC &&
(t.ClinicalDataLevel == ClinicalLevel.SubjectVisit || t.ClinicalDataLevel == ClinicalLevel.ImageRead || t.ClinicalDataLevel == ClinicalLevel.OncologyRead)).Any() ? 1 : 0) (rm.ReadingSetType == ReadingSetType.ImageReading ? t.ClinicalDataLevel == ClinicalLevel.ImageRead : t.ClinicalDataLevel == ClinicalLevel.OncologyRead)).Any() ? 1 : 0)
, ,
//签名的数量 //签名的数量
@ -669,9 +670,9 @@ namespace IRaCIS.Application.Services
var subjectIds = await subjectIdQuery.Skip((inQuery.PageIndex - 1) * inQuery.PageSize).Take(inQuery.PageSize).ToListAsync(); var subjectIds = await subjectIdQuery.Skip((inQuery.PageIndex - 1) * inQuery.PageSize).Take(inQuery.PageSize).ToListAsync();
var subjectCount = subjectIdQuery.Count(); var subjectCount = subjectIdQuery.Count();
var viewList = await query.Where(x => subjectIds.Contains(x.SubjectId)).ToListAsync(); var viewList = await query.Where(x => subjectIds.Contains(x.SubjectId)).SortToListAsync(inQuery);
var list= viewList.GroupBy(x => new { x.SubjectId, x.TrialSiteId, x.TrialSiteCode, x.SubjectCode }) var list = viewList.GroupBy(x => new { x.SubjectId, x.TrialSiteId, x.TrialSiteCode, x.SubjectCode })
.Select(x => new GetReadModuleDtoOut() .Select(x => new GetReadModuleDtoOut()
{ {
TrialSiteCode = x.Key.TrialSiteCode, TrialSiteCode = x.Key.TrialSiteCode,
@ -709,88 +710,88 @@ namespace IRaCIS.Application.Services
}); });
} }
/// <summary> ///// <summary>
/// 获取读片模块 //加了标准参数 ///// 获取读片模块 //加了标准参数
/// </summary> ///// </summary>
[HttpPost] //[HttpPost]
public async Task<IResponseOutput<PageOutput<GetReadModuleDtoOut>>> GetReadModuleList(GetReadModuleDto dto) //public async Task<IResponseOutput<PageOutput<GetReadModuleDtoOut>>> GetReadModuleList(GetReadModuleDto dto)
{ //{
#region MyRegion // #region MyRegion
if (dto.SortField.IsNullOrEmpty()) // if (dto.SortField.IsNullOrEmpty())
{ // {
dto.SortField = nameof(ReadModuleView.SubjectCode); // dto.SortField = nameof(ReadModuleView.SubjectCode);
dto.Asc = true; // dto.Asc = true;
} // }
dto.SortField = dto.Asc ? dto.SortField : dto.SortField + " desc"; // dto.SortField = dto.Asc ? dto.SortField : dto.SortField + " desc";
var subjectQuery = _readModuleViewRepository.Where(x => x.TrialReadingCriterionId == dto.TrialReadingCriterionId) // var subjectQuery = _readModuleViewRepository.Where(x => x.TrialReadingCriterionId == dto.TrialReadingCriterionId)
.WhereIf(dto.TrialId != null, x => x.TrialId == dto.TrialId) // .WhereIf(dto.TrialId != null, x => x.TrialId == dto.TrialId)
.WhereIf(dto.SubjectId != null, x => x.SubjectId == dto.SubjectId) // .WhereIf(dto.SubjectId != null, x => x.SubjectId == dto.SubjectId)
.WhereIf(dto.TrialSiteCode != null && dto.TrialSiteCode != string.Empty, x => x.TrialSiteCode.Contains(dto.TrialSiteCode)) // .WhereIf(dto.TrialSiteCode != null && dto.TrialSiteCode != string.Empty, x => x.TrialSiteCode.Contains(dto.TrialSiteCode))
.WhereIf(dto.SubjectCode != null && dto.SubjectCode != string.Empty, x => x.SubjectCode.Contains(dto.SubjectCode)) // .WhereIf(dto.SubjectCode != null && dto.SubjectCode != string.Empty, x => x.SubjectCode.Contains(dto.SubjectCode))
.WhereIf(dto.ModuleType != null, x => x.ModuleType == dto.ModuleType) // .WhereIf(dto.ModuleType != null, x => x.ModuleType == dto.ModuleType)
.WhereIf(dto.CompleteClinicalData == CompleteClinicalDataEnum.NA, x => x.NeedSignClinicalDataCount == 0) // .WhereIf(dto.CompleteClinicalData == CompleteClinicalDataEnum.NA, x => x.NeedSignClinicalDataCount == 0)
.WhereIf(dto.CompleteClinicalData == CompleteClinicalDataEnum.NotComplete, x => x.NeedSignClinicalDataCount != x.SignClinicalDataCount) // .WhereIf(dto.CompleteClinicalData == CompleteClinicalDataEnum.NotComplete, x => x.NeedSignClinicalDataCount != x.SignClinicalDataCount)
.WhereIf(dto.CompleteClinicalData == CompleteClinicalDataEnum.Complete, x => x.NeedSignClinicalDataCount != 0 && x.NeedSignClinicalDataCount == x.SignClinicalDataCount) // .WhereIf(dto.CompleteClinicalData == CompleteClinicalDataEnum.Complete, x => x.NeedSignClinicalDataCount != 0 && x.NeedSignClinicalDataCount == x.SignClinicalDataCount)
.WhereIf(dto.ReadingStatus != null, x => x.ReadingStatus == dto.ReadingStatus); // .WhereIf(dto.ReadingStatus != null, x => x.ReadingStatus == dto.ReadingStatus);
//.WhereIf(dto.Name != null, x => x.Name.Contains(dto.Name!)).OrderBy(x => x.SiteCode); // //.WhereIf(dto.Name != null, x => x.Name.Contains(dto.Name!)).OrderBy(x => x.SiteCode);
var subjectIds = await subjectQuery.OrderBy(dto.SortField).Select(x => x.SubjectId).Distinct().Skip((dto.PageIndex - 1) * dto.PageSize).Take(dto.PageSize).ToListAsync(); // var subjectIds = await subjectQuery.OrderBy(dto.SortField).Select(x => x.SubjectId).Distinct().Skip((dto.PageIndex - 1) * dto.PageSize).Take(dto.PageSize).ToListAsync();
List<ReadModuleView> ReadModuleViewList = await subjectQuery.Where(x => subjectIds.Contains(x.SubjectId)).OrderBy(dto.SortField).ToListAsync(); // List<ReadModuleView> ReadModuleViewList = await subjectQuery.Where(x => subjectIds.Contains(x.SubjectId)).OrderBy(dto.SortField).ToListAsync();
List<GetReadModuleDtoOut> getReadList = ReadModuleViewList.GroupBy(x => new { x.SubjectId, x.TrialSiteId, x.TrialSiteCode, x.SubjectCode }) // List<GetReadModuleDtoOut> getReadList = ReadModuleViewList.GroupBy(x => new { x.SubjectId, x.TrialSiteId, x.TrialSiteCode, x.SubjectCode })
.Select(x => new GetReadModuleDtoOut() // .Select(x => new GetReadModuleDtoOut()
{ // {
TrialSiteCode = x.Key.TrialSiteCode, // TrialSiteCode = x.Key.TrialSiteCode,
TrialSiteId = x.Key.TrialSiteId, // TrialSiteId = x.Key.TrialSiteId,
SubjectCode = x.Key.SubjectCode, // SubjectCode = x.Key.SubjectCode,
SubjectId = x.Key.SubjectId, // SubjectId = x.Key.SubjectId,
Data = x.OrderBy(x => x.ModuleType).ThenBy(x => x.VisitNum).ToList(), // Data = x.OrderBy(x => x.ModuleType).ThenBy(x => x.VisitNum).ToList(),
}).ToList(); // }).ToList();
PageOutput<GetReadModuleDtoOut> pageOutput = new PageOutput<GetReadModuleDtoOut>() // PageOutput<GetReadModuleDtoOut> pageOutput = new PageOutput<GetReadModuleDtoOut>()
{ // {
PageSize = dto.PageSize, // PageSize = dto.PageSize,
CurrentPageData = getReadList, // CurrentPageData = getReadList,
PageIndex = dto.PageIndex, // PageIndex = dto.PageIndex,
TotalCount = await subjectQuery.Select(x => x.SubjectId).Distinct().CountAsync(), // TotalCount = await subjectQuery.Select(x => x.SubjectId).Distinct().CountAsync(),
}; // };
var maxcount = 0; // var maxcount = 0;
pageOutput.CurrentPageData.ForEach(x => // pageOutput.CurrentPageData.ForEach(x =>
{ // {
maxcount = maxcount < x.Data.Count ? x.Data.Count : maxcount; // maxcount = maxcount < x.Data.Count ? x.Data.Count : maxcount;
}); // });
var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == dto.TrialReadingCriterionId).Select(x => new // var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == dto.TrialReadingCriterionId).Select(x => new
{ // {
x.IsReadingTaskViewInOrder, // x.IsReadingTaskViewInOrder,
x.IsOncologyReading, // x.IsOncologyReading,
x.IsGlobalReading, // x.IsGlobalReading,
x.IsReadingPeriod, // x.IsReadingPeriod,
x.ReadingInfoSignTime, // x.ReadingInfoSignTime,
}).FirstNotNullAsync(); // }).FirstNotNullAsync();
return ResponseOutput.Ok(pageOutput, new // return ResponseOutput.Ok(pageOutput, new
{ // {
MaxLength = maxcount, // MaxLength = maxcount,
IsReadingTaskViewInOrder = criterionInfo.IsReadingTaskViewInOrder, // IsReadingTaskViewInOrder = criterionInfo.IsReadingTaskViewInOrder,
IsClinicalReading = criterionInfo.IsOncologyReading, // IsClinicalReading = criterionInfo.IsOncologyReading,
// OnlyExistsMedicalHistory = !(await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataSetName != "既往局部治疗史" && x.IsConfirm)), // // OnlyExistsMedicalHistory = !(await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataSetName != "既往局部治疗史" && x.IsConfirm)),
IsExistsSubjectClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataLevel == ClinicalLevel.Subject && x.IsConfirm && x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == dto.TrialReadingCriterionId)), // IsExistsSubjectClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataLevel == ClinicalLevel.Subject && x.IsConfirm && x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == dto.TrialReadingCriterionId)),
IsExistsVisitClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataLevel == ClinicalLevel.SubjectVisit && x.IsConfirm && x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == dto.TrialReadingCriterionId)), // IsExistsVisitClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataLevel == ClinicalLevel.SubjectVisit && x.IsConfirm && x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == dto.TrialReadingCriterionId)),
IsExistsStudyClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataLevel == ClinicalLevel.Study && x.IsConfirm && x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == dto.TrialReadingCriterionId)), // IsExistsStudyClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataLevel == ClinicalLevel.Study && x.IsConfirm && x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == dto.TrialReadingCriterionId)),
IsExistsReadingClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataLevel == ClinicalLevel.ImageRead && x.IsConfirm && x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == dto.TrialReadingCriterionId)), // IsExistsReadingClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataLevel == ClinicalLevel.ImageRead && x.IsConfirm && x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == dto.TrialReadingCriterionId)),
IsExistsOncologyReadClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataLevel == ClinicalLevel.OncologyRead && x.IsConfirm && x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == dto.TrialReadingCriterionId)), // IsExistsOncologyReadClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataLevel == ClinicalLevel.OncologyRead && x.IsConfirm && x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == dto.TrialReadingCriterionId)),
IsGlobalReading = criterionInfo.IsGlobalReading, // IsGlobalReading = criterionInfo.IsGlobalReading,
IsReadingPeriod = criterionInfo.IsReadingPeriod, // IsReadingPeriod = criterionInfo.IsReadingPeriod,
ReadingInfoSignTime = criterionInfo.ReadingInfoSignTime, // ReadingInfoSignTime = criterionInfo.ReadingInfoSignTime,
ExistClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.IsConfirm && x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == dto.TrialReadingCriterionId)), // ExistClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.IsConfirm && x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == dto.TrialReadingCriterionId)),
}); // });
#endregion // #endregion
} //}

View File

@ -47,6 +47,7 @@ namespace IRaCIS.Core.Domain.Models
public List<ReadModuleCriterionFrom> ReadModuleCriterionFromList { get; set; } = new List<ReadModuleCriterionFrom>(); public List<ReadModuleCriterionFrom> ReadModuleCriterionFromList { get; set; } = new List<ReadModuleCriterionFrom>();
[JsonIgnore] [JsonIgnore]
public List<VisitTask> ModuleTaskList { get; set; } public List<VisitTask> ModuleTaskList { get; set; }
[JsonIgnore] [JsonIgnore]

View File

@ -53,6 +53,9 @@ namespace IRaCIS.Core.Domain.Models
public Trial Trial { get; set; } public Trial Trial { get; set; }
[JsonIgnore]
public List<ReadModule> ReadModuleList { get; set; }
[JsonIgnore] [JsonIgnore]
[ForeignKey("SubjectId")] [ForeignKey("SubjectId")]

View File

@ -0,0 +1,18 @@
using IRaCIS.Core.Domain.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
{
public class ReadModuleConfigration : IEntityTypeConfiguration<ReadModule>
{
public void Configure(EntityTypeBuilder<ReadModule> builder)
{
builder.HasOne(t => t.SubjectVisit).WithMany(t => t.ReadModuleList);
}
}
}

View File

@ -5,12 +5,11 @@ namespace IRaCIS.Core.Infrastructure.Extention
/// <summary> /// <summary>
/// 分页信息输入 /// 分页信息输入
/// </summary> /// </summary>
public class PageInput public class PageInput: SortInput
{ {
public int PageIndex { get; set; } = 1; public int PageIndex { get; set; } = 1;
public int PageSize { set; get; } = 10; public int PageSize { set; get; } = 10;
public bool Asc { get; set; } = true;
public string SortField { get; set; } = "";
} }
public class SortInput public class SortInput