阅片期替代
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>
/// <returns></returns>
[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
@ -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()
{
Id = rm.Id,
@ -594,7 +594,7 @@ namespace IRaCIS.Application.Services
TrialId = rm.TrialId,
VisitNum = rm.SubjectVisit.VisitNum,
TrialReadingCriterionId = inQuery.TrialReadingCriterionId,
TrialReadingCriterionId = rm.TrialReadingCriterionId,
OutPlanPreviousVisitId = null,
@ -611,8 +611,9 @@ namespace IRaCIS.Application.Services
ReadModuleId = rm.Id,
ReadModuleName = rm.ModuleName,
//是否是截止访视?
IsCanChangeCutOffVisit = false,
//阅片期切换访视 限制1、阅片期访视已完成了任务不能如果本身是肿瘤学不能或者本身是全局后续有肿瘤学
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
@ -631,11 +632,11 @@ namespace IRaCIS.Application.Services
////需要签名数量计算 基线包含subject+访视级别的
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))
.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,7 +670,7 @@ namespace IRaCIS.Application.Services
var subjectIds = await subjectIdQuery.Skip((inQuery.PageIndex - 1) * inQuery.PageSize).Take(inQuery.PageSize).ToListAsync();
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 })
.Select(x => new GetReadModuleDtoOut()
@ -709,88 +710,88 @@ namespace IRaCIS.Application.Services
});
}
/// <summary>
/// 获取读片模块 //加了标准参数
/// </summary>
[HttpPost]
public async Task<IResponseOutput<PageOutput<GetReadModuleDtoOut>>> GetReadModuleList(GetReadModuleDto dto)
{
///// <summary>
///// 获取读片模块 //加了标准参数
///// </summary>
//[HttpPost]
//public async Task<IResponseOutput<PageOutput<GetReadModuleDtoOut>>> GetReadModuleList(GetReadModuleDto dto)
//{
#region MyRegion
// #region MyRegion
if (dto.SortField.IsNullOrEmpty())
{
dto.SortField = nameof(ReadModuleView.SubjectCode);
dto.Asc = true;
}
// if (dto.SortField.IsNullOrEmpty())
// {
// dto.SortField = nameof(ReadModuleView.SubjectCode);
// dto.Asc = true;
// }
dto.SortField = dto.Asc ? dto.SortField : dto.SortField + " desc";
var subjectQuery = _readModuleViewRepository.Where(x => x.TrialReadingCriterionId == dto.TrialReadingCriterionId)
.WhereIf(dto.TrialId != null, x => x.TrialId == dto.TrialId)
.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.SubjectCode != null && dto.SubjectCode != string.Empty, x => x.SubjectCode.Contains(dto.SubjectCode))
.WhereIf(dto.ModuleType != null, x => x.ModuleType == dto.ModuleType)
.WhereIf(dto.CompleteClinicalData == CompleteClinicalDataEnum.NA, x => x.NeedSignClinicalDataCount == 0)
.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.ReadingStatus != null, x => x.ReadingStatus == dto.ReadingStatus);
//.WhereIf(dto.Name != null, x => x.Name.Contains(dto.Name!)).OrderBy(x => x.SiteCode);
// dto.SortField = dto.Asc ? dto.SortField : dto.SortField + " desc";
// var subjectQuery = _readModuleViewRepository.Where(x => x.TrialReadingCriterionId == dto.TrialReadingCriterionId)
// .WhereIf(dto.TrialId != null, x => x.TrialId == dto.TrialId)
// .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.SubjectCode != null && dto.SubjectCode != string.Empty, x => x.SubjectCode.Contains(dto.SubjectCode))
// .WhereIf(dto.ModuleType != null, x => x.ModuleType == dto.ModuleType)
// .WhereIf(dto.CompleteClinicalData == CompleteClinicalDataEnum.NA, x => x.NeedSignClinicalDataCount == 0)
// .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.ReadingStatus != null, x => x.ReadingStatus == dto.ReadingStatus);
// //.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<GetReadModuleDtoOut> getReadList = ReadModuleViewList.GroupBy(x => new { x.SubjectId, x.TrialSiteId, x.TrialSiteCode, x.SubjectCode })
.Select(x => new GetReadModuleDtoOut()
{
TrialSiteCode = x.Key.TrialSiteCode,
TrialSiteId = x.Key.TrialSiteId,
SubjectCode = x.Key.SubjectCode,
SubjectId = x.Key.SubjectId,
Data = x.OrderBy(x => x.ModuleType).ThenBy(x => x.VisitNum).ToList(),
}).ToList();
PageOutput<GetReadModuleDtoOut> pageOutput = new PageOutput<GetReadModuleDtoOut>()
{
PageSize = dto.PageSize,
CurrentPageData = getReadList,
PageIndex = dto.PageIndex,
TotalCount = await subjectQuery.Select(x => x.SubjectId).Distinct().CountAsync(),
};
var maxcount = 0;
pageOutput.CurrentPageData.ForEach(x =>
{
maxcount = maxcount < x.Data.Count ? x.Data.Count : maxcount;
});
// 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 })
// .Select(x => new GetReadModuleDtoOut()
// {
// TrialSiteCode = x.Key.TrialSiteCode,
// TrialSiteId = x.Key.TrialSiteId,
// SubjectCode = x.Key.SubjectCode,
// SubjectId = x.Key.SubjectId,
// Data = x.OrderBy(x => x.ModuleType).ThenBy(x => x.VisitNum).ToList(),
// }).ToList();
// PageOutput<GetReadModuleDtoOut> pageOutput = new PageOutput<GetReadModuleDtoOut>()
// {
// PageSize = dto.PageSize,
// CurrentPageData = getReadList,
// PageIndex = dto.PageIndex,
// TotalCount = await subjectQuery.Select(x => x.SubjectId).Distinct().CountAsync(),
// };
// var maxcount = 0;
// pageOutput.CurrentPageData.ForEach(x =>
// {
// maxcount = maxcount < x.Data.Count ? x.Data.Count : maxcount;
// });
var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == dto.TrialReadingCriterionId).Select(x => new
{
x.IsReadingTaskViewInOrder,
x.IsOncologyReading,
x.IsGlobalReading,
x.IsReadingPeriod,
x.ReadingInfoSignTime,
}).FirstNotNullAsync();
// var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == dto.TrialReadingCriterionId).Select(x => new
// {
// x.IsReadingTaskViewInOrder,
// x.IsOncologyReading,
// x.IsGlobalReading,
// x.IsReadingPeriod,
// x.ReadingInfoSignTime,
// }).FirstNotNullAsync();
return ResponseOutput.Ok(pageOutput, new
{
MaxLength = maxcount,
IsReadingTaskViewInOrder = criterionInfo.IsReadingTaskViewInOrder,
IsClinicalReading = criterionInfo.IsOncologyReading,
// 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)),
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)),
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)),
IsGlobalReading = criterionInfo.IsGlobalReading,
IsReadingPeriod = criterionInfo.IsReadingPeriod,
ReadingInfoSignTime = criterionInfo.ReadingInfoSignTime,
ExistClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.IsConfirm && x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == dto.TrialReadingCriterionId)),
});
// return ResponseOutput.Ok(pageOutput, new
// {
// MaxLength = maxcount,
// IsReadingTaskViewInOrder = criterionInfo.IsReadingTaskViewInOrder,
// IsClinicalReading = criterionInfo.IsOncologyReading,
// // 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)),
// 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)),
// 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)),
// IsGlobalReading = criterionInfo.IsGlobalReading,
// IsReadingPeriod = criterionInfo.IsReadingPeriod,
// ReadingInfoSignTime = criterionInfo.ReadingInfoSignTime,
// 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>();
[JsonIgnore]
public List<VisitTask> ModuleTaskList { get; set; }
[JsonIgnore]

View File

@ -53,6 +53,9 @@ namespace IRaCIS.Core.Domain.Models
public Trial Trial { get; set; }
[JsonIgnore]
public List<ReadModule> ReadModuleList { get; set; }
[JsonIgnore]
[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>
public class PageInput
public class PageInput: SortInput
{
public int PageIndex { get; set; } = 1;
public int PageSize { set; get; } = 10;
public bool Asc { get; set; } = true;
public string SortField { get; set; } = "";
}
public class SortInput