阅片期修改
continuous-integration/drone/push Build is running

This commit is contained in:
he
2025-11-04 10:37:15 +08:00
parent 32c8d70179
commit a67472c9b4
9 changed files with 21161 additions and 83 deletions
@@ -836,15 +836,27 @@ namespace IRaCIS.Core.Application.Service
{
var readModuleQueryable = _readModuleRepository
.Where(x => x.TrialReadingCriterionId == inDto.TrialReadingCriterionId)
.WhereIf(inDto.ReadModuleAddTypeEnum != null, x => x.ReadModuleAddTypeEnum == inDto.ReadModuleAddTypeEnum)
.WhereIf(inDto.ReadingSetType != null, x => x.ReadingSetType == inDto.ReadingSetType)
.WhereIf(inDto.SubjectCode.IsNotNullOrEmpty(), x => x.Subject.Code.Contains(inDto.SubjectCode))
.WhereIf(inDto.VisitName.IsNotNullOrEmpty(), x => x.SubjectVisit.VisitName.Contains(inDto.VisitName))
.ProjectTo<GetReadModulePageListOutDto>(_mapper.ConfigurationProvider);
.Where(x => x.TrialReadingCriterionId == inDto.TrialReadingCriterionId)
.WhereIf(inDto.ReadModuleAddTypeEnum != null, x => x.ReadModuleAddTypeEnum == inDto.ReadModuleAddTypeEnum)
.WhereIf(inDto.ReadingSetType != null, x => x.ReadingSetType == inDto.ReadingSetType)
.WhereIf(inDto.SubjectCode.IsNotNullOrEmpty(), x => x.Subject.Code.Contains(inDto.SubjectCode))
.WhereIf(inDto.VisitName.IsNotNullOrEmpty(), x => x.SubjectVisit.VisitName.Contains(inDto.VisitName))
.ProjectTo<GetReadModulePageListOutDto>(_mapper.ConfigurationProvider);
var pageList = await readModuleQueryable.ToPagedListAsync(inDto);
var ids = pageList.CurrentPageData.Select(x => x.Id as Guid?).ToList();
var taskList=await _visitTaskRepository.Where(x => ids.Contains(x.SouceReadModuleId)).ToListAsync();
pageList.CurrentPageData.ForEach(x =>
{
x.IsGenerateTask= taskList.Any(t => t.SouceReadModuleId == x.Id);
x.GenerateTaskTime= taskList.Where(t => t.SouceReadModuleId == x.Id).OrderByDescending(t => t.CreateTime).Select(t => t.CreateTime).FirstOrDefault();
});
return pageList;
}
@@ -1,4 +1,5 @@
using IRaCIS.Core.Application.Contracts;
using DocumentFormat.OpenXml.Drawing;
using IRaCIS.Core.Application.Contracts;
using IRaCIS.Core.Application.Filter;
using IRaCIS.Core.Application.Service.Reading.Dto;
using IRaCIS.Core.Application.ViewModel;
@@ -205,7 +206,7 @@ namespace IRaCIS.Core.Application.Service
{
SubjectId = x.SubjectVisit.SubjectId,
SubjectVisitId = x.SubjectVisitId,
ReadingPeriodPlanId=x.Id,
IsUrgent = false
}).ToList()
@@ -285,6 +286,7 @@ namespace IRaCIS.Core.Application.Service
SubjectVisitId = item.SubjectVisitId,
ReadingSetType = inDto.ReadingSetType,
ReadingPeriodSetId = inDto.ReadingPeriodSetId,
ReadingPeriodPlanId= item.ReadingPeriodPlanId,
ReadingStatus = ReadingStatusEnum.TaskAllocate,
TrialId = inDto.TrialId,
//VisitNum = item.SubjectVisit.VisitNum,
@@ -615,11 +617,12 @@ namespace IRaCIS.Core.Application.Service
TrialId = readingPeriodSet.TrialId,
ReadingPeriodSetId = readingPeriodSet.Id,
TrialReadingCriterionId = readingPeriodSet.TrialReadingCriterionId,
VisitInfoList = subejctVisits.Select(x => new AddReadModuleVisitInfo()
VisitInfoList = plans.Select(x => new AddReadModuleVisitInfo()
{
SubjectId = x.SubjectId,
SubjectId = subejctVisits.Where(y=>y.Id==x.SubjectVisitId).Select(x=>x.SubjectId).FirstOrDefault(),
SubjectVisitId = x.Id,
IsUrgent = x.IsUrgent,
ReadingPeriodPlanId= x.Id,
IsUrgent = subejctVisits.Where(y => y.Id == x.SubjectVisitId).Select(x => x.IsUrgent).FirstOrDefault(),
}).ToList()
@@ -629,36 +632,35 @@ namespace IRaCIS.Core.Application.Service
}
/// <summary>
/// 设置加入或者移除阅片计划
/// 移除阅片计划
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
[HttpPost]
public async Task<IResponseOutput> SetBatchAddOrRemoveReadingPlan(SetBatchAddOrRemoveReadingPlanInDto inDto)
public async Task<IResponseOutput> SetBatchRemoveReadingPlan(SetBatchAddOrRemoveReadingPlanInDto inDto)
{
var planSet = await _readingPeriodSetRepository.Where(x => x.Id == inDto.Id).FirstNotNullAsync();
List<Guid> isGenerateTaskVisitIds = new List<Guid>();
List<ReadModule> readModules = new List<ReadModule>();
if (inDto.IsJoin)
{
var existsVisitIds = await _readingPeriodPlanRepository.Where(x => x.ReadingPeriodSetId == inDto.Id).Select(x => x.SubjectVisitId).ToListAsync();
readModules = await _readModuleRepository.Where(x => x.ReadingPeriodSetId == inDto.Id).ToListAsync();
inDto.SubjectVisitIdList = inDto.SubjectVisitIdList.Where(x => !existsVisitIds.Contains(x)).ToList();
var readModuleIds = readModules.Select(x => x.Id).ToList();
List<ReadingPeriodPlan> plans = inDto.SubjectVisitIdList.Select(x => new ReadingPeriodPlan()
{
SubjectVisitId = x,
ReadingPeriodSetId = inDto.Id
}).ToList();
var souceReadModuleIds = await _visitTaskRepository.Where(x => x.TrialReadingCriterionId == planSet.TrialReadingCriterionId && readModuleIds.Contains(x.SouceReadModuleId ?? default(Guid))).Select(x => x.SouceReadModuleId).ToListAsync();
await _readingPeriodPlanRepository.AddRangeAsync(plans);
}
else
{
await _readingPeriodPlanRepository.UpdatePartialFromQueryAsync(x => x.ReadingPeriodSetId == inDto.Id && inDto.SubjectVisitIdList.Contains(x.SubjectVisitId), x => new ReadingPeriodPlan()
{
IsDeleted = true
});
}
isGenerateTaskVisitIds = await _readModuleRepository.Where(x => souceReadModuleIds.Contains(x.Id) && x.ReadingPeriodPlanId != null).Select(x => x.SubjectVisitId).ToListAsync();
inDto.SubjectVisitIdList= inDto.SubjectVisitIdList.Where(x => !isGenerateTaskVisitIds.Contains(x)).ToList();
var planIds= await _readingPeriodPlanRepository.Where(x => x.ReadingPeriodSetId == inDto.Id && inDto.SubjectVisitIdList.Contains(x.SubjectVisitId)).Select(x=>x.Id).ToListAsync();
var deletePlasIds= planIds.Select(x=>(Guid?)x).ToList();
await _readModuleRepository.DeleteFromQueryAsync(x => deletePlasIds.Contains(x.ReadingPeriodPlanId));
await _readingPeriodPlanRepository.DeleteFromQueryAsync(x => x.ReadingPeriodSetId == inDto.Id && inDto.SubjectVisitIdList.Contains(x.SubjectVisitId);
await _readingPeriodPlanRepository.SaveChangesAsync();
@@ -690,10 +692,26 @@ namespace IRaCIS.Core.Application.Service
});
List<Guid> isChooseVisitIds = new List<Guid>();
if (isChangeReadingPlan)
List<Guid> IsGenerateVisitIds = new List<Guid>();
List<ReadingPeriodPlan> chooseVisitVisitList = new List<ReadingPeriodPlan>();
List<Guid> isGenerateTaskVisitIds = new List<Guid>();
List<ReadModule> readModules = new List<ReadModule>();
if (!isChangeReadingPlan)
{
isChooseVisitIds= await _readingPeriodPlanRepository.Where(x => x.ReadingPeriodSetId == inDto.Id).Select(x => x.SubjectVisitId).ToListAsync();
if (inDto.Id != null)
{
readModules = await _readModuleRepository.Where(x => x.ReadingPeriodSetId == inDto.Id).ToListAsync();
var readModuleIds= readModules.Select(x => x.Id).ToList();
var souceReadModuleIds = await _visitTaskRepository.Where(x => x.TrialReadingCriterionId == inDto.TrialReadingCriterionId && readModuleIds.Contains(x.SouceReadModuleId ?? default(Guid))).Select(x=>x.SouceReadModuleId).ToListAsync();
isGenerateTaskVisitIds = await _readModuleRepository.Where(x => souceReadModuleIds.Contains(x.Id)&&x.ReadingPeriodPlanId!=null).Select(x=>x.SubjectVisitId).ToListAsync();
}
chooseVisitVisitList = await _readingPeriodPlanRepository.Where(x => x.ReadingPeriodSetId == inDto.Id).ToListAsync();
isChooseVisitIds= chooseVisitVisitList.Select(x => x.SubjectVisitId).ToList();
IsGenerateVisitIds= chooseVisitVisitList.Where(x => x.IsGenerate).Select(x => x.SubjectVisitId).ToList();
}
var isTakeEffect = await _readingPeriodSetRepository.Where(x => x.Id == inDto.Id).Select(x => x.IsTakeEffect).FirstOrDefaultAsync();
@@ -704,6 +722,11 @@ namespace IRaCIS.Core.Application.Service
.WhereIf(inDto.ReadingScope == ReadingScopeEnum.Site, x => inDto.SiteIds.Contains(x.TrialSiteId))
.Where(x => !x.IsBaseLine);// 排除基线
var chooseVisitQuery = _subjectVisitRepository.Where(x => isChooseVisitIds.Contains(x.Id));
visitQuery= visitQuery.Union(chooseVisitQuery);
// 已经存在的访视 需要排除
var existsBubjectVisitsQuery = _readModuleRepository.Where(y => y.ReadingSetType == inDto.ReadingSetType && y.TrialId == inDto.TrialId && y.TrialReadingCriterionId == inDto.TrialReadingCriterionId).Select(x => x.SubjectVisitId);
@@ -716,10 +739,11 @@ namespace IRaCIS.Core.Application.Service
.WhereIf(inDto.SiteId != null,x=> x.Subject.TrialSiteId==inDto.SiteId)
.WhereIf(inDto.SubjectCode.IsNotNullOrEmpty(), x =>x.Subject.Code.Contains(inDto.SubjectCode))
.WhereIf(inDto.IsJoin != null && inDto.IsJoin.Value, x => isChooseVisitIds.Contains(x.Id))
.WhereIf(inDto.IsGenerate != null && inDto.IsGenerate.Value, x => isChooseVisitIds.Contains(x.Id)&& isTakeEffect== ReadingPeriodStatus.TakeEffect)
;
.WhereIf(inDto.IsGenerate != null && inDto.IsGenerate.Value, x => IsGenerateVisitIds.Contains(x.Id))
.WhereIf(inDto.IsJoin != null && !inDto.IsJoin.Value, x => !isChooseVisitIds.Contains(x.Id))
.WhereIf(inDto.IsGenerate != null && !inDto.IsGenerate.Value, x => !IsGenerateVisitIds.Contains(x.Id));
//.Where(x => isChooseVisitIds.Contains(x.Id));
//.Where(x => isChooseVisitIds.Contains(x.Id));
var subjectIdlist = await visitQuery.OrderBy(x => x.SubjectId).Select(x => x.SubjectId).Distinct().Skip((inDto.PageIndex - 1) * inDto.PageSize).Take(inDto.PageSize).ToListAsync();
@@ -759,7 +783,9 @@ namespace IRaCIS.Core.Application.Service
SubjectId = x.SubjectId,
SubjectVisitName = x.VisitName,
IsJoin= isChooseVisitIds.Contains(x.Id),
IsGenerate= isChooseVisitIds.Contains(x.Id)&& isTakeEffect== ReadingPeriodStatus.TakeEffect,
IsGenerate = IsGenerateVisitIds.Contains(x.Id),
IsGenerateTask = isGenerateTaskVisitIds.Contains(x.Id),
GeneratedTime = chooseVisitVisitList.Where(y=>y.SubjectVisitId==x.Id).Select(y=>y.GeneratedTime).FirstOrDefault(),
}).ToList(),
PageSize = inDto.PageSize,
PageIndex = inDto.PageIndex,