阅片期替代
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
5afe0be277
commit
bd4e4e0072
|
@ -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,9 +670,9 @@ 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 })
|
||||
var list = viewList.GroupBy(x => new { x.SubjectId, x.TrialSiteId, x.TrialSiteCode, x.SubjectCode })
|
||||
.Select(x => new GetReadModuleDtoOut()
|
||||
{
|
||||
TrialSiteCode = x.Key.TrialSiteCode,
|
||||
|
@ -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
|
||||
//}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -53,6 +53,9 @@ namespace IRaCIS.Core.Domain.Models
|
|||
public Trial Trial { get; set; }
|
||||
|
||||
|
||||
[JsonIgnore]
|
||||
public List<ReadModule> ReadModuleList { get; set; }
|
||||
|
||||
|
||||
[JsonIgnore]
|
||||
[ForeignKey("SubjectId")]
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue