修改一版

Uat_Study
he 2022-06-06 22:48:37 +08:00
parent 5ffada4e03
commit bd9a0c494d
10 changed files with 370 additions and 118 deletions

View File

@ -337,7 +337,14 @@ namespace IRaCIS.Core.Application.Service.Inspection.DTO
public class GetDataInspectionOutDto : DataInspection
{
public string ExperimentName { get; set; } = string.Empty;
public string SubjectCode { get; set; } = string.Empty;
public string TrialName { get; set; } = string.Empty;
public string SiteCode { get; set; } = string.Empty;
public string ResearchProgramNo { get; set; } = string.Empty;
public string SubjectVisitName { get; set; } = string.Empty;
public string RoleName { get; set; } = string.Empty;
public string FirstName { get; set; } = string.Empty;

View File

@ -97,8 +97,8 @@ namespace IRaCIS.Core.Application.Service.Inspection
ParentId = data.ParentId,
ChildrenType = data.ChildrenType,
JsonDetail = data.JsonDetail,
SiteName = data.SiteName,
ExperimentName = data.TrialName,
//SiteName = data.SiteName,
//ExperimentName = data.TrialName,
FirstName = leftsubject.FirstName,
LastName = leftsubject.LastName,
Id = data.Id,
@ -124,7 +124,7 @@ namespace IRaCIS.Core.Application.Service.Inspection
ParentIdentification = leftparent.Identification,
OptType = leftOptType.Id,
VisitNum=leftsubjectVisit.VisitNum,
IsFrontAdd=data.IsFrontAdd,
//IsFrontAdd=data.IsFrontAdd,
BatchId=data.BatchId,
OptTypeName = leftOptType.Value,
};

View File

@ -329,7 +329,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public List<GetReadModuleDtoOut> CurrentPageData { get; set; }
}
//public class GetReadModuleDtoOut
public class GetReadModuleDtoOut
{
@ -337,12 +338,14 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public string TrialSiteCode { get; set; }
public string SiteCode { get; set; }
public Guid SiteId { get; set; }
public Guid SubjectId { get; set; }
public List<GetReadModuleOutDto> Data { get; set; }
public List<GetReadModuleOutDto> ReadModuleData { get; set; }
}
}

View File

@ -26,6 +26,7 @@ namespace IRaCIS.Application.Services
private readonly IRepository<Subject> _subjectRepository;
private readonly IRepository<VisitStage> _visitstageRepository;
private readonly IRepository<User> _userRepository;
private readonly IRepository<ReadModuleView> _readModuleViewRepository;
private readonly IRepository<DicomInstance> _dicomInstanceRepository;
private readonly IRepository<NoneDicomStudyFile> _noneDicomStudyFileRepository;
private readonly IRepository<ReadingPeriodSet> _readingPeriodSetRepository;
@ -36,6 +37,7 @@ namespace IRaCIS.Application.Services
IRepository<Subject> subjectRepository,
IRepository<VisitStage> visitstageRepository,
IRepository<User> UserRepository,
IRepository<ReadModuleView> readModuleViewRepository,
IRepository<DicomInstance> dicomInstanceRepository,
IRepository<NoneDicomStudyFile> noneDicomStudyFileRepository,
IRepository<ReadingPeriodSet> readingPeriodSetRepository,
@ -46,6 +48,7 @@ namespace IRaCIS.Application.Services
this._subjectRepository = subjectRepository;
this._visitstageRepository = visitstageRepository;
this._userRepository = UserRepository;
this._readModuleViewRepository = readModuleViewRepository;
this._dicomInstanceRepository = dicomInstanceRepository;
this._noneDicomStudyFileRepository = noneDicomStudyFileRepository;
this._readingPeriodSetRepository = readingPeriodSetRepository;
@ -59,118 +62,212 @@ namespace IRaCIS.Application.Services
[HttpPost]
public async Task<(PageOutput<GetReadModuleDtoOut>,object)> GetReadModuleList(GetReadModuleDto dto)
{
var subjectQuery = _subjectRepository.WhereIf(dto.TrialId!=null, x => x.TrialId == dto.TrialId)
.WhereIf(dto.SubjectId != null, x => x.Id == dto.SubjectId)
.Include(x => x.SubjectVisitList).Include(x => x.Site).Include(x => x.TrialSite)
//.WhereIf(dto.TrialSiteCode != null, x => x.TrialSite.TrialSiteCode == dto.TrialSiteCode)
// .WhereIf(dto.SubjectCode != null, x => x.Code == dto.SubjectCode)
.Select(x => new GetReadModuleDtoOut
{
TrialSiteCode = x.TrialSite.TrialSiteCode,
SiteId = x.SiteId,
SubjectCode = x.Code,
SubjectId = x.Id,
Data=x.SubjectVisitList.OrderByDescending(y=>y.VisitNum).Select(y=>new GetReadModuleOutDto()
{
Id = y.Id, //id
Name=y.VisitName,
ModuleType = y.InPlan ? ModuleTypeEnum.InPlanSubjectVisit : ModuleTypeEnum.OutPlanSubjectVisit, // 模块类型
IsUrgent = x.IsUrgent, // 是否加急
SubjectVisitId = y.Id, // 访视ID
SubjectVisitName=y.VisitName, // 访视名称
Status= ReadingCommon.GetVisitSubmitStateEnum(y), // 状态
CreateTime = y.CreateTime, // 创建时间
SubjectCode = y.Subject.Code, // 受试者code
TrialSiteCode = x.TrialSite.TrialSiteCode, // 中心Code
VisitNum=y.VisitNum,
var subjectQuery = _readModuleViewRepository.WhereIf(dto.TrialId != null, x => x.TrialId == dto.TrialId)
.WhereIf(dto.SubjectId != null, x => x.Id == dto.SubjectId)
.WhereIf(dto.TrialSiteCode != null, x => x.TrialSiteCode == dto.TrialSiteCode)
.WhereIf(dto.SubjectCode != null, x => x.SubjectCode == dto.SubjectCode)
.WhereIf(dto.ModuleType != null, x => x.ModuleType == dto.ModuleType)
.WhereIf(dto.Status != null, x => x.Status == dto.Status)
.WhereIf(dto.Name != null, x => x.Name.Contains(x.Name)).OrderBy(x=>x.SiteCode);
IsFinalVisit=y.IsFinalVisit, // 是否为末次评估
OutPlanPreviousVisitId = y.OutPlanPreviousVisitId, // 上一访视
OutPlanPreviousVisitName = y.OutPlanPreviousVisit.VisitName, // 上一访视名称
SiteId = x.Site.Id, // 中心ID
IsVisit=true, // 是否为访视
PDState = y.PDState, // PD 进展
IsEnrollmentConfirm=y.IsEnrollmentConfirm, // 入组
SubjectId = x.Id,
}).ToList()
});
var pageList = await subjectQuery.ToPagedListAsync(dto.PageIndex, dto.PageSize, dto.SortField == null|| dto.SortField==string.Empty ? "SiteCode" : dto.SortField,
dto.Asc);
pageList.CurrentPageData.ForEach(x =>
{
var outplan = x.Data.FirstOrDefault(x => x.IsFinalVisit);
if (outplan != null)
var subjectIds =await subjectQuery.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)).ToListAsync();
List<GetReadModuleDtoOut> getReadList = ReadModuleViewList.GroupBy(x => new { x.SubjectId, x.SiteId, x.TrialSiteCode, x.SubjectCode })
.Select(x => new GetReadModuleDtoOut()
{
x.Data = x.Data.Where(y => y.VisitNum >= outplan.VisitNum).ToList();
}
});
var subjectIds = pageList.CurrentPageData.Select(x => x.SubjectId).ToList();
var readModules =await _readModuleRepository.Where(x => subjectIds.Contains(x.SubjectId)).Include(x=>x.SubjectVisit)
.Include(x => x.ReadModuleModel).ToListAsync();
pageList.CurrentPageData.ForEach(x => {
x.Data.AddRange(readModules.Where(y => y.SubjectId == x.SubjectId).Select(
y => new GetReadModuleOutDto()
TrialSiteCode = x.Key.TrialSiteCode,
SiteId = x.Key.SiteId,
SubjectCode = x.Key.SubjectCode,
SubjectId = x.Key.SubjectId,
Data = x.Select(y => new GetReadModuleOutDto()
{
CreateTime = y.CreateTime,
CutOffVisitId = y.CutOffVisitId,
SiteCode = y.SiteCode,
SubjectId = y.SubjectId,
CutOffVisitName = y.CutOffVisitName,
SiteId = y.SiteId,
Status = y.Status,
SubjectCode = y.SubjectCode,
Id = y.Id,
Name=y.ModuleName,
SubjectId=x.SubjectId,
ModuleType=y.ModuleType,
Status= ReadingCommon.GetVisitSubmitStateEnum(y.SubjectVisit),
SubjectCode= x.SubjectCode,
TrialSiteCode = x.TrialSiteCode,
SubjectVisitId= y.SubjectVisitId,
SubjectVisitName=y.SubjectVisit?.VisitName, // 截止访视名称
CutOffVisitId = y.SubjectVisitId, // 截止访视
CutOffVisitName = y.SubjectVisit?.VisitName, // 截止访视名称
ReadModuleId=y.ReadModuleId,
ReadModuleName=y.ReadModuleModel?.ModuleName,
IsUrgent = y.IsUrgent
IsEnrollmentConfirm = y.IsEnrollmentConfirm,
IsFinalVisit = y.IsFinalVisit,
SubjectVisitId = y.SubjectVisitId,
SubjectVisitName = y.SubjectVisitName,
PDState = y.PDState,
TrialSiteCode = y.TrialSiteCode,
IsUrgent = y.IsUrgent,
IsVisit = y.IsVisit,
ModuleType = y.ModuleType,
Name = y.Name,
OutPlanPreviousVisitId = y.OutPlanPreviousVisitId,
OutPlanPreviousVisitName = y.CutOffVisitName,
ReadModuleId = y.CutOffVisitId,
ReadModuleName = y.ReadModuleName,
VisitNum = y.VisitNum
}).ToList()
}).ToList();
}));
x.Data= x.Data.OrderBy(y => y.ModuleType).ThenBy(x=>x.VisitNum).ToList();
});
pageList.CurrentPageData.ForEach(x => {
if (dto.ModuleType != null)
{
x.Data = x.Data.Where(y => y.ModuleType == dto.ModuleType).ToList();
}
if (dto.Status != null)
{
x.Data = x.Data.Where(y => y.Status == dto.Status).ToList();
}
if (dto.Name != null)
{
x.Data = x.Data.Where(y => y.Name.Contains(y.Name)).ToList();
}
});
return (pageList, new
PageOutput<GetReadModuleDtoOut> pageOutput = new PageOutput<GetReadModuleDtoOut>()
{
MaxLength = pageList.CurrentPageData.ToList().Max(x => x.Data.Count)
PageSize = dto.PageSize,
CurrentPageData = getReadList,
PageIndex = dto.PageIndex,
TotalCount =await subjectQuery.Select(x => x.SubjectId).Distinct().CountAsync(),
};
return (pageOutput, new
{
MaxLength = pageOutput.CurrentPageData.ToList().Max(x => x.Data.Count)
});
#region 用导航属性写的 有问题
//var subjectQuery = _subjectRepository.WhereIf(dto.TrialId != null, x => x.TrialId == dto.TrialId)
// .WhereIf(dto.SubjectId != null, x => x.Id == dto.SubjectId)
// .Include(x => x.SubjectVisitList).Include(x => x.Site).Include(x => x.TrialSite)
// .WhereIf(dto.TrialSiteCode != null, x => x.TrialSite.TrialSiteCode == dto.TrialSiteCode)
// .WhereIf(dto.SubjectCode != null, x => x.Code == dto.SubjectCode)
// .Select(x => new GetReadModuleDtoOut
// {
// TrialSiteCode = x.TrialSite.TrialSiteCode,
// SiteCode = x.TrialSite.TrialSiteCode,
// SiteId = x.SiteId,
// SubjectCode = x.Code,
// SubjectId = x.Id,
// Data = x.SubjectVisitList.OrderByDescending(y => y.VisitNum).Select(y => new GetReadModuleOutDto()
// {
// Id = y.Id, //id
// Name = y.VisitName,
// ModuleType = y.InPlan ? ModuleTypeEnum.InPlanSubjectVisit : ModuleTypeEnum.OutPlanSubjectVisit, // 模块类型
// IsUrgent = x.IsUrgent, // 是否加急
// SubjectVisitId = y.Id, // 访视ID
// SubjectVisitName = y.VisitName, // 访视名称
// Status = ReadingCommon.GetVisitSubmitStateEnum(y), // 状态
// CreateTime = y.CreateTime, // 创建时间
// SubjectCode = y.Subject.Code, // 受试者code
// TrialSiteCode = x.TrialSite.TrialSiteCode, // 中心Code
// VisitNum = y.VisitNum,
// IsFinalVisit = y.IsFinalVisit, // 是否为末次评估
// OutPlanPreviousVisitId = y.OutPlanPreviousVisitId, // 上一访视
// OutPlanPreviousVisitName = y.OutPlanPreviousVisit.VisitName, // 上一访视名称
// SiteId = x.Site.Id, // 中心ID
// IsVisit = true, // 是否为访视
// PDState = y.PDState, // PD 进展
// IsEnrollmentConfirm = y.IsEnrollmentConfirm, // 入组
// SubjectId = x.Id,
// }).ToList(),
// ReadModuleData = x.ReadModuleList.Select(
// z => new GetReadModuleOutDto()
// {
// CreateTime = z.CreateTime,
// Id = z.Id,
// Name = z.ModuleName,
// SubjectId = x.Id,
// ModuleType = z.ModuleType,
// Status = ReadingCommon.GetVisitSubmitStateEnum(z.SubjectVisit),
// SubjectCode = x.Code,
// TrialSiteCode = x.TrialSite.TrialSiteCode,
// SubjectVisitId = z.SubjectVisitId,
// SubjectVisitName = z.SubjectVisit.VisitName, // 截止访视名称
// CutOffVisitId = z.SubjectVisitId, // 截止访视
// CutOffVisitName = z.SubjectVisit.VisitName, // 截止访视名称
// ReadModuleId = z.ReadModuleId,
// ReadModuleName = z.ReadModuleModel.ModuleName,
// IsUrgent = z.IsUrgent
// }).ToList(),
// });
//if (dto.ModuleType != null)
//{
// subjectQuery.
//}
//if (dto.Status != null)
//{
// x.Data = x.Data.Where(y => y.Status == dto.Status).ToList();
//}
//if (dto.Name != null)
//{
// x.Data = x.Data.Where(y => y.Name.Contains(y.Name)).ToList();
//}
//var pageList = await subjectQuery.ToPagedListAsync(dto.PageIndex, dto.PageSize, dto.SortField == null || dto.SortField == string.Empty ? "SiteCode" : dto.SortField,
// dto.Asc);
//pageList.CurrentPageData.ForEach(x =>
//{
// var outplan = x.Data.FirstOrDefault(x => x.IsFinalVisit);
// if (outplan != null)
// {
// x.Data = x.Data.Where(y => y.VisitNum >= outplan.VisitNum).ToList();
// }
//});
//var subjectIds = pageList.CurrentPageData.Select(x => x.SubjectId).ToList();
//var readModules = await _readModuleRepository.Where(x => subjectIds.Contains(x.SubjectId)).Include(x => x.SubjectVisit)
// .Include(x => x.ReadModuleModel).ToListAsync();
////pageList.CurrentPageData.ForEach(x => {
//// x.Data.AddRange(readModules.Where(y => y.SubjectId == x.SubjectId).Select(
//// y => new GetReadModuleOutDto()
//// {
//// CreateTime = y.CreateTime,
//// Id = y.Id,
//// Name=y.ModuleName,
//// SubjectId=x.SubjectId,
//// ModuleType=y.ModuleType,
//// Status= ReadingCommon.GetVisitSubmitStateEnum(y.SubjectVisit),
//// SubjectCode= x.SubjectCode,
//// TrialSiteCode = x.TrialSiteCode,
//// SubjectVisitId= y.SubjectVisitId,
//// SubjectVisitName=y.SubjectVisit?.VisitName, // 截止访视名称
//// CutOffVisitId = y.SubjectVisitId, // 截止访视
//// CutOffVisitName = y.SubjectVisit?.VisitName, // 截止访视名称
//// ReadModuleId=y.ReadModuleId,
//// ReadModuleName=y.ReadModuleModel?.ModuleName,
//// IsUrgent = y.IsUrgent
//// }));
//// x.Data= x.Data.OrderBy(y => y.ModuleType).ThenBy(x=>x.VisitNum).ToList();
////});
//pageList.CurrentPageData.ForEach(x => {
//});
//return (pageList, new
//{
// MaxLength = pageList.CurrentPageData.ToList().Max(x => x.Data.Count)
//});
#endregion
}
///// <summary>

View File

@ -76,6 +76,14 @@ namespace IRaCIS.Core.Domain.Models
[ForeignKey("ReadModuleId")]
public ReadModule ReadModuleModel { get; set; }
/// <summary>
/// 受试者
/// </summary>
[ForeignKey("SubjectId")]
public Subject Subject { get; set; }
/// <summary>
/// 阅片期配置
/// </summary>

View File

@ -0,0 +1,142 @@
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Domain.Share.Reading;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IRaCIS.Core.Domain.Models
{
public class ReadModuleView: Entity
{
/// <summary>
/// Id(阅片期Id 或者 访视ID)
/// </summary>
public new Guid Id { get; set; }
/// <summary>
/// 项目ID
/// </summary>
public Guid TrialId { get; set; }
/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 受试者ID
/// </summary>
public Guid SubjectId { get; set; }
/// <summary>
/// 模块类型
/// </summary>
public ModuleTypeEnum ModuleType { get; set; }
/// <summary>
/// 是否加急
/// </summary>
public bool? IsUrgent { get; set; }
/// <summary>
/// 访视ID
/// </summary>
public Guid SubjectVisitId { get; set; }
/// <summary>
/// 访视名称
/// </summary>
public string SubjectVisitName { get; set; }
/// <summary>
/// 截止访视
/// </summary>
public Guid? CutOffVisitId { get; set; }
/// <summary>
/// 截止访视名称
/// </summary>
public string? CutOffVisitName { get; set; }
/// <summary>
/// 对应阅片期
/// </summary>
public Guid? ReadModuleId { get; set; }
/// <summary>
/// 对应Name
/// </summary>
public string? ReadModuleName { get; set; }
/// <summary>
/// 状态
/// </summary>
public ReadModuleEnum? Status { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 受试者Code
/// </summary>
public string SubjectCode { get; set; }
/// <summary>
/// 中心Id
/// </summary>
public string SiteCode { get; set; }
/// <summary>
/// 项目中心Id
/// </summary>
public string TrialSiteCode { get; set; }
/// <summary>
/// 是否为末次访视
/// </summary>
public bool IsFinalVisit { get; set; } = false;
/// <summary>
/// 上一访视
/// </summary>
public Guid? OutPlanPreviousVisitId { get; set; }
/// <summary>
/// 上一访视名称
/// </summary>
public string OutPlanPreviousVisitName { get; set; }
/// <summary>
/// 中心ID
/// </summary>
public Guid SiteId { get; set; }
/// <summary>
/// 是否为访视
/// </summary>
public bool IsVisit { get; set; }
/// <summary>
/// 访视Num
/// </summary>
public decimal? VisitNum { get; set; }
/// <summary>
/// 是否为PD进展
/// </summary>
public PDStateEnum PDState { get; set; } = PDStateEnum.None;
/// <summary>
/// 入组确认评估
/// </summary>
public bool IsEnrollmentConfirm { get; set; } = false;
}
}

View File

@ -108,12 +108,10 @@ namespace IRaCIS.Core.Domain.Models
/// 项目名称
/// </summary>
public string TrialName { get; set; }
/// <summary>
/// 中心名称
/// </summary>
public string SiteName { get; set; }
/// <summary>
/// 受试者名称
/// </summary>
@ -129,6 +127,8 @@ namespace IRaCIS.Core.Domain.Models
/// </summary>
public string RoleName { get; set; }
/// <summary>
/// 中心Code
/// </summary>
@ -140,7 +140,7 @@ namespace IRaCIS.Core.Domain.Models
public string ResearchProgramNo { get; set; }
/// <summary>
/// 对象名称
/// 对象类型
/// </summary>
public Guid? ObjectType { get; set; }
@ -159,15 +159,8 @@ namespace IRaCIS.Core.Domain.Models
/// </summary>
public Guid? GeneralId { get; set; }
/// <summary>
/// 是否是前端添加
/// </summary>
public bool? IsFrontAdd { get; set; }
/// <summary>
/// 上一条json
/// </summary>
public string LastJsonDetail { get; set; }
/// <summary>
/// 批次Id

View File

@ -82,6 +82,8 @@ namespace IRaCIS.Core.Domain.Models
public bool IsUrgent { get; set; }
public List<ReadModule> ReadModuleList { get; set; }
public bool IsDeleted { get; set; }
public DateTime? DeletedTime { get; set; }

View File

@ -25,7 +25,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
}
else if (visit.AuditState != AuditStateEnum.QCPassed) // 审核未通过
{
return ReadModuleEnum.ImageUpload;
return ReadModuleEnum.ImageQuality;
}
else if (visit.ForwardState != ForwardStateEnum.Forwarded) // 未通过一致性核查
{

View File

@ -178,8 +178,8 @@ namespace IRaCIS.Core.Infra.EFCore
public virtual DbSet<ReadingPeriodPlan> ReadingPeriodPlan { get; set; }
public virtual DbSet<ReadModule> ReadModule { get; set; }
public virtual DbSet<ReadModuleView> ReadModuleView { get; set; }
public virtual DbSet<ClinicalData> ClinicalData { get; set; }