diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadModuleService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadModuleService.cs
index 13d6b67e5..ddcc65d0b 100644
--- a/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadModuleService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadModuleService.cs
@@ -108,7 +108,7 @@ namespace IRaCIS.Application.Services
///
///
[HttpPost]
- public async Task>> GetReadModuleList_new(GetReadModuleDto inQuery)
+ public async Task>> 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
});
}
- ///
- /// 获取读片模块 //加了标准参数
- ///
- [HttpPost]
- public async Task>> GetReadModuleList(GetReadModuleDto dto)
- {
+ /////
+ ///// 获取读片模块 //加了标准参数
+ /////
+ //[HttpPost]
+ //public async Task>> 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 ReadModuleViewList = await subjectQuery.Where(x => subjectIds.Contains(x.SubjectId)).OrderBy(dto.SortField).ToListAsync();
- List 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 pageOutput = new PageOutput()
- {
- 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 ReadModuleViewList = await subjectQuery.Where(x => subjectIds.Contains(x.SubjectId)).OrderBy(dto.SortField).ToListAsync();
+ // List 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 pageOutput = new PageOutput()
+ // {
+ // 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
+ //}
diff --git a/IRaCIS.Core.Domain/Reading/ReadingPeriod/ReadModule.cs b/IRaCIS.Core.Domain/Reading/ReadingPeriod/ReadModule.cs
index 954b857db..5be3f9597 100644
--- a/IRaCIS.Core.Domain/Reading/ReadingPeriod/ReadModule.cs
+++ b/IRaCIS.Core.Domain/Reading/ReadingPeriod/ReadModule.cs
@@ -47,6 +47,7 @@ namespace IRaCIS.Core.Domain.Models
public List ReadModuleCriterionFromList { get; set; } = new List();
+
[JsonIgnore]
public List ModuleTaskList { get; set; }
[JsonIgnore]
diff --git a/IRaCIS.Core.Domain/Visit/SubjectVisit.cs b/IRaCIS.Core.Domain/Visit/SubjectVisit.cs
index e0e61e5f0..eaa1465a8 100644
--- a/IRaCIS.Core.Domain/Visit/SubjectVisit.cs
+++ b/IRaCIS.Core.Domain/Visit/SubjectVisit.cs
@@ -53,6 +53,9 @@ namespace IRaCIS.Core.Domain.Models
public Trial Trial { get; set; }
+ [JsonIgnore]
+ public List ReadModuleList { get; set; }
+
[JsonIgnore]
[ForeignKey("SubjectId")]
diff --git a/IRaCIS.Core.Infra.EFCore/EntityConfigration/ReadModuleConfigration.cs b/IRaCIS.Core.Infra.EFCore/EntityConfigration/ReadModuleConfigration.cs
new file mode 100644
index 000000000..5d7c8d501
--- /dev/null
+++ b/IRaCIS.Core.Infra.EFCore/EntityConfigration/ReadModuleConfigration.cs
@@ -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
+ {
+
+
+ public void Configure(EntityTypeBuilder builder)
+ {
+
+ builder.HasOne(t => t.SubjectVisit).WithMany(t => t.ReadModuleList);
+ }
+ }
+}
diff --git a/IRaCIS.Core.Infrastructure/_IRaCIS/Input/PageInput.cs b/IRaCIS.Core.Infrastructure/_IRaCIS/Input/PageInput.cs
index b3dad6a0a..b1a6978fe 100644
--- a/IRaCIS.Core.Infrastructure/_IRaCIS/Input/PageInput.cs
+++ b/IRaCIS.Core.Infrastructure/_IRaCIS/Input/PageInput.cs
@@ -5,12 +5,11 @@ namespace IRaCIS.Core.Infrastructure.Extention
///
/// 分页信息输入
///
- 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