diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index 3b5e60af4..77c318f85 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -537,9 +537,19 @@
访视名称
-
+
- 干系人
+ 干系人Id
+
+
+
+
+ 干系人姓名
+
+
+
+
+ 状态
@@ -642,6 +652,11 @@
是否为访视
+
+
+ 访视Num
+
+
是否为PD进展
@@ -3067,7 +3082,7 @@
- 获取影像阅片的预览
+ 获取影像阅片的预览 // 需要清除之前已经选中的
@@ -3118,14 +3133,14 @@
生成的阅片模块(在大列表上展示的) 阅片期
-
+
获取读片模块
- 获取单条信息
+ 获取单条详情信息
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/GetReadModuleDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/GetReadModuleDto.cs
index 2a7b499f5..57797a266 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/GetReadModuleDto.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/GetReadModuleDto.cs
@@ -13,6 +13,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public Guid? TrialId { get; set; }
public Guid? SubjectId { get; set; }
+
+
}
public class GetSubjectReadVisitsOutDto
@@ -131,9 +133,19 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public string SubjectVisitName { get; set; }
///
- /// 干系人
+ /// 干系人Id
///
- public string Stakeholders { get; set; }
+ public List StakeholderIds { get; set; }
+
+ ///
+ /// 干系人姓名
+ ///
+ public List StakeholderNames { get; set; }
+
+ ///
+ /// 状态
+ ///
+ public ReadModuleEnum? Status { get; set; }
}
public class GetReadModuleOutDto
@@ -242,6 +254,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
///
public bool IsVisit { get; set; }
+ ///
+ /// 访视Num
+ ///
+ public decimal? VisitNum { get; set; }
+
///
/// 是否为PD进展
///
diff --git a/IRaCIS.Core.Application/Service/Reading/ReadModuleService.cs b/IRaCIS.Core.Application/Service/Reading/ReadModuleService.cs
index 837da754b..49bbd1685 100644
--- a/IRaCIS.Core.Application/Service/Reading/ReadModuleService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ReadModuleService.cs
@@ -25,20 +25,29 @@ namespace IRaCIS.Application.Services
public IRepository _subjectVisitRepository;
private readonly IRepository _subjectRepository;
private readonly IRepository _visitstageRepository;
+ private readonly IRepository _userRepository;
+ private readonly IRepository _dicomInstanceRepository;
+ private readonly IRepository _noneDicomStudyFileRepository;
private readonly IRepository _readingPeriodSetRepository;
private readonly IRepository _readModuleRepository;
public ReadModuleService(IRepository subjectVisitRepository,
IRepository subjectRepository,
- IRepository visitstageRepository,
- IRepository readingPeriodSetRepository,
- IRepository readModuleRepository
+ IRepository visitstageRepository,
+ IRepository UserRepository,
+ IRepository dicomInstanceRepository,
+ IRepository noneDicomStudyFileRepository,
+ IRepository readingPeriodSetRepository,
+ IRepository readModuleRepository
)
{
- _subjectVisitRepository = subjectVisitRepository;
+ this._subjectVisitRepository = subjectVisitRepository;
this._subjectRepository = subjectRepository;
this._visitstageRepository = visitstageRepository;
+ this._userRepository = UserRepository;
+ this._dicomInstanceRepository = dicomInstanceRepository;
+ this._noneDicomStudyFileRepository = noneDicomStudyFileRepository;
this._readingPeriodSetRepository = readingPeriodSetRepository;
this._readModuleRepository = readModuleRepository;
}
@@ -48,7 +57,7 @@ namespace IRaCIS.Application.Services
/// 获取读片模块
///
[HttpPost]
- public async Task<(PageOutput,object)> GetReadModule(GetReadModuleDto dto)
+ public async Task<(PageOutput,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)
@@ -59,7 +68,7 @@ namespace IRaCIS.Application.Services
SiteId = x.SiteId,
SubjectCode = x.Code,
SubjectId = x.Id,
- Data=x.SubjectVisitList.OrderByDescending(y=>y.InPlan).Select(y=>new GetReadModuleOutDto()
+ Data=x.SubjectVisitList.OrderByDescending(y=>y.VisitNum).Select(y=>new GetReadModuleOutDto()
{
Id = y.Id, //id
Name=y.VisitName,
@@ -71,6 +80,7 @@ namespace IRaCIS.Application.Services
CreateTime = y.CreateTime, // 创建时间
SubjectCode = y.Subject.Code, // 受试者code
SiteCode = x.TrialSite.TrialSiteCode, // 中心Code
+ VisitNum=y.VisitNum,
IsFinalVisit=y.IsFinalVisit, // 是否为末次评估
OutPlanPreviousVisitId = y.OutPlanPreviousVisitId, // 上一访视
@@ -89,6 +99,16 @@ namespace IRaCIS.Application.Services
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 subjectisd = pageList.CurrentPageData.Select(x => x.SubjectId).ToList();
var readModules =await _readModuleRepository.Where(x => subjectisd.Contains(x.SubjectId)).Include(x=>x.SubjectVisit)
@@ -139,40 +159,54 @@ namespace IRaCIS.Application.Services
//}
///
- /// 获取单条信息
+ /// 获取单条详情信息
///
///
///
[HttpPost]
public async Task GetReadModuleSingle(GetReadModuleSingleIndto dto)
{
- var data = await GetReadModule(new GetReadModuleDto()
+ var data = await GetReadModuleList(new GetReadModuleDto()
{
SubjectId = dto.SubjectId,
});
- var GetReadModuleOutDto = data.Item1.CurrentPageData.FirstOrDefault().Data.Where(x => x.Id == dto.Id).Select(x => new GetReadModuleSingleOutdto()
+ GetReadModuleSingleOutdto? readModule = data.Item1.CurrentPageData.FirstOrDefault().Data.Where(x => x.Id == dto.Id).Select(x => new GetReadModuleSingleOutdto()
{
Id = x.Id,
ModuleType = x.ModuleType,
SubjectVisitId = x.SubjectVisitId,
SubjectVisitName = x.SubjectVisitName,
- Stakeholders = string.Empty
+
+ Status = x.Status,
}).FirstOrDefault();
- SubjectVisit visit = (await _subjectVisitRepository.Where(x => x.Id == GetReadModuleOutDto.SubjectVisitId).FirstOrDefaultAsync()).IfNullThrowConvertException();
+ var stakeholderIds = new List();
- //switch (GetVisitSubmitStateEnum(visit))
- //{
- // case ReadModuleEnum.ImageUpload:
- // case
- // break;
- //};
+ var subjectVisit =await _subjectVisitRepository.FirstOrDefaultAsync(x => x.Id == readModule.SubjectVisitId);
+ switch (readModule.Status)
+ {
+ case ReadModuleEnum.ImageUpload:
+ stakeholderIds.AddRange(await _dicomInstanceRepository.Where(x => x.SubjectVisitId == readModule.SubjectVisitId).Select(x => x.CreateUserId).Distinct().ToListAsync());
+ stakeholderIds.AddRange(await _noneDicomStudyFileRepository.Where(x => x.NoneDicomStudy.SubjectVisitId == readModule.SubjectVisitId).Select(x => x.CreateUserId).Distinct().ToListAsync());
+ break;
+ case ReadModuleEnum.ImageQuality:
+ if (subjectVisit.PreliminaryAuditUserId != null)
+ {
+ stakeholderIds.Add(subjectVisit.PreliminaryAuditUserId.Value);
+ }
+ if (subjectVisit.ReviewAuditUserId != null)
+ {
+ stakeholderIds.Add(subjectVisit.ReviewAuditUserId.Value);
+ }
+ break;
+ };
+ readModule.StakeholderIds = stakeholderIds.Distinct().ToList();
+ readModule.StakeholderNames = await _userRepository.Where(x => readModule.StakeholderIds.Contains(x.Id)).Select(x => x.FirstName + "/" + x.LastName).ToListAsync();
-
- return GetReadModuleOutDto;
+ return readModule;
}
///
@@ -212,8 +246,6 @@ namespace IRaCIS.Application.Services
.WhereIf(dto.ExpirationVisitNum != null, x => x.VisitNum <= dto.ExpirationVisitNum.Value);
-
-
var visit = visitquery.OrderByDescending(x => x.VisitNum).FirstOrDefault();
if (visit != null)
diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingPeriodSetService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingPeriodSetService.cs
index 6ac11916a..18f6e4173 100644
--- a/IRaCIS.Core.Application/Service/Reading/ReadingPeriodSetService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ReadingPeriodSetService.cs
@@ -58,7 +58,6 @@ namespace IRaCIS.Application.Services
TrialId =entity.TrialId,
SiteId = x,
}).ToList();
-
await _readingPeriodSetRepository.AddAsync(entity, true);
return ResponseOutput.Ok(entity.Id);
}
@@ -79,17 +78,18 @@ namespace IRaCIS.Application.Services
}
///
- /// 获取影像阅片的预览
+ /// 获取影像阅片的预览 // 需要清除之前已经选中的
///
///
public async Task> GetPreviewTheReadingList(PreviewTheReadingListInDto inDto)
{
if (await _readingPeriodPlanRepository.AnyAsync(x => x.ReadingPeriodSetId == inDto.ReadingPeriodSetId))
{
- return await GetPreviewTheReadingPlanList(inDto);
+ await _readingPeriodPlanRepository.DeleteFromQueryAsync(x => x.ReadingPeriodSetId == inDto.ReadingPeriodSetId);
+ await _readingPeriodPlanRepository.SaveChangesAsync();
}
- var readset = (await _readingPeriodSetRepository.Where(x => x.Id == inDto.ReadingPeriodSetId).Include(x => x.ReadingPeriodSites).FirstOrDefaultAsync()).IfNullThrowConvertException();
- var visitquery = _subjectVisitRepository.Where(x => x.TrialId == readset.TrialId && x.SubmitState != SubmitStateEnum.None && x.InPlan);
+ var readset = (await _readingPeriodSetRepository.Where(x => x.Id == inDto.ReadingPeriodSetId).Include(x => x.ReadingPeriodSites).FirstOrDefaultAsync()).IfNullThrowException();
+ var visitquery = _subjectVisitRepository.Where(x => x.TrialId == readset.TrialId && x.InPlan);
if (readset.ReadingScope == ReadingScopeEnum.Site)
{
var siteids = readset.ReadingPeriodSites.Select(x => x.SiteId);
@@ -264,7 +264,16 @@ namespace IRaCIS.Application.Services
var plans = _readingPeriodPlanRepository.Where(x => x.ReadingPeriodSetId == indto.Id).Include(x=>x.SubjectVisit)
.Include(x => x.ReadingPeriodSet).ToList();
- plans = plans.Where(x => _readModuleRepository.Where(y => x.SubjectVisitId == y.SubjectVisitId && x.ReadingPeriodSet.ReadingSetType == y.ReadingSetType).Count() == 0).ToList();
+ var needAddVisitIds = plans.Select(x => x.SubjectVisitId).ToList();
+
+ var repeatVisitNames = _readModuleRepository.Where(x => x.ReadingSetType == ReadingSetType.ImageReading && needAddVisitIds.Contains(x.SubjectVisitId)).Select(x => x.SubjectVisit.VisitName).ToList();
+
+ if(repeatVisitNames.Count!=0)
+ {
+ return ResponseOutput.NotOk($"{string.Join(",", repeatVisitNames)}已经添加过阅片期,无法设置生效");
+ }
+
+
List readModules = new List();
foreach (var item in plans)
diff --git a/IRaCIS.Core.Domain/Visit/SubjectVisit.cs b/IRaCIS.Core.Domain/Visit/SubjectVisit.cs
index e0163b989..6754ad28a 100644
--- a/IRaCIS.Core.Domain/Visit/SubjectVisit.cs
+++ b/IRaCIS.Core.Domain/Visit/SubjectVisit.cs
@@ -62,8 +62,15 @@ namespace IRaCIS.Core.Domain.Models
//审核状态
public AuditStateEnum AuditState { get; set; }
public ForwardStateEnum ForwardState { get; set; }
+
+ ///
+ /// 单审通过人
+ ///
public Guid? PreliminaryAuditUserId { get; set; }
+ ///
+ /// 双审通过人
+ ///
public Guid? ReviewAuditUserId { get; set; }
public DateTime? ReviewAuditTime { get; set; }
public DateTime? PreliminaryAuditTime { get; set; }