添加阅片期计划
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
9b59a55423
commit
510dfcac30
|
|
@ -14011,6 +14011,13 @@
|
|||
<param name="indto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingPeriodSetService.AddReadModule(IRaCIS.Core.Application.Service.Reading.Dto.AddReadModuleInDto)">
|
||||
<summary>
|
||||
生效或者新增访视的时候添加阅片期
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingPeriodSetService.GetPreviewTheReadingPlanList(IRaCIS.Core.Application.Service.Reading.Dto.PreviewTheReadingListDto)">
|
||||
<summary>
|
||||
获取选中的计划 (增加标准不影响 因为阅片期设置关联了标准)
|
||||
|
|
@ -14052,6 +14059,13 @@
|
|||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingPeriodSetService.AddReadingPlanAndGenerateReadModule(IRaCIS.Core.Application.Service.Reading.Dto.AddReadingPlanAndGenerateReadModuleInDto)">
|
||||
<summary>
|
||||
添加阅片计划并生成阅片期(在阅片期已经生效的情况下添加)
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingPeriodSetService.SetBatchAddOrRemoveReadingPlan(IRaCIS.Core.Application.Service.Reading.Dto.SetBatchAddOrRemoveReadingPlanInDto)">
|
||||
<summary>
|
||||
设置加入或者移除阅片计划
|
||||
|
|
|
|||
|
|
@ -127,6 +127,13 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public Guid? TrialReadingCriterionId { get; set; }
|
||||
}
|
||||
|
||||
public class AddReadingPlanAndGenerateReadModuleInDto
|
||||
{
|
||||
public Guid ReadingPeriodSetId { get; set; }
|
||||
|
||||
public List<Guid> SubjectVisitIdList { get; set; } = new List<Guid>();
|
||||
}
|
||||
|
||||
public class SetBatchAddOrRemoveReadingPlanInDto
|
||||
{
|
||||
public List<Guid> SubjectVisitIdList { get; set; } = new List<Guid>();
|
||||
|
|
@ -404,6 +411,31 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public ReadingPeriodStatus IsTakeEffect { get; set; }
|
||||
}
|
||||
|
||||
public class AddReadModuleInDto
|
||||
{
|
||||
public Guid TrialReadingCriterionId { get; set; }
|
||||
|
||||
public Guid ReadingPeriodSetId { get; set; }
|
||||
|
||||
public Guid TrialId { get; set; }
|
||||
|
||||
public string ReadingPeriodName { get; set; }
|
||||
|
||||
public ReadingSetType ReadingSetType { get; set; }
|
||||
|
||||
public List<AddReadModuleVisitInfo> VisitInfoList { get; set; } = new List<AddReadModuleVisitInfo>();
|
||||
|
||||
|
||||
}
|
||||
|
||||
public class AddReadModuleVisitInfo
|
||||
{
|
||||
public Guid SubjectId { get; set; }
|
||||
public bool IsUrgent { get; set; }
|
||||
public Guid SubjectVisitId { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class ReadingPeriodSetQuery : PageInput
|
||||
{
|
||||
|
||||
|
|
|
|||
|
|
@ -2,10 +2,12 @@
|
|||
using IRaCIS.Core.Application.Filter;
|
||||
using IRaCIS.Core.Application.Service.Reading.Dto;
|
||||
using IRaCIS.Core.Application.ViewModel;
|
||||
using IRaCIS.Core.Domain.Models;
|
||||
using IRaCIS.Core.Domain.Share;
|
||||
using IRaCIS.Core.Infrastructure;
|
||||
using MassTransit;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using NPOI.Util;
|
||||
|
||||
namespace IRaCIS.Core.Application.Service
|
||||
{
|
||||
|
|
@ -74,53 +76,67 @@ namespace IRaCIS.Core.Application.Service
|
|||
else
|
||||
{
|
||||
var entity = (await _readingPeriodSetRepository.Where(t => t.Id == addOrEditReadingPeriodSet.Id, true).Include(t => t.ReadingPeriodSites).Include(x => x.ReadingPeriodPlanList).FirstOrDefaultAsync()).IfNullThrowException();
|
||||
_mapper.Map(addOrEditReadingPeriodSet, entity);
|
||||
|
||||
entity.ReadingPeriodSites = addOrEditReadingPeriodSet.SiteIds.Select(x => new ReadingPeriodSite()
|
||||
// 已生效的时候就不可能修改 只能是添加计划和生成模块
|
||||
if (entity.IsTakeEffect == ReadingPeriodStatus.TakeEffect)
|
||||
{
|
||||
ReadingPeriodSetId = entity.Id,
|
||||
TrialId = entity.TrialId,
|
||||
TrialSiteId = x,
|
||||
}).ToList();
|
||||
|
||||
// 修改了就是重新生成计划
|
||||
if (await IsChangeReadingPlan(new IsChangeReadingPlanInDto()
|
||||
{
|
||||
|
||||
Id = addOrEditReadingPeriodSet.Id,
|
||||
ExpirationDate = addOrEditReadingPeriodSet.ExpirationDate,
|
||||
ReadingScope = addOrEditReadingPeriodSet.ReadingScope.Value,
|
||||
TrialId = addOrEditReadingPeriodSet.TrialId,
|
||||
ExpirationVisitNum = addOrEditReadingPeriodSet.ExpirationVisitNum,
|
||||
VisitStageId = addOrEditReadingPeriodSet.VisitStageId,
|
||||
ReadingSetType = addOrEditReadingPeriodSet.ReadingSetType,
|
||||
TrialReadingCriterionId = addOrEditReadingPeriodSet.TrialReadingCriterionId,
|
||||
SiteIds = addOrEditReadingPeriodSet.SiteIds,
|
||||
}))
|
||||
{
|
||||
|
||||
entity.ReadingPeriodPlanList = addOrEditReadingPeriodSet.SubjectVisitIds.Select(x => new ReadingPeriodPlan
|
||||
await AddReadingPlanAndGenerateReadModule(new AddReadingPlanAndGenerateReadModuleInDto()
|
||||
{
|
||||
ReadingPeriodSetId = entity.Id,
|
||||
SubjectVisitId = x,
|
||||
}).ToList();
|
||||
ReadingPeriodSetId = addOrEditReadingPeriodSet.Id.Value,
|
||||
SubjectVisitIdList = addOrEditReadingPeriodSet.SubjectVisitIds
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
var existsVisitIds = await _readingPeriodPlanRepository.Where(x => x.ReadingPeriodSetId == addOrEditReadingPeriodSet.Id).Select(x => x.SubjectVisitId).ToListAsync();
|
||||
_mapper.Map(addOrEditReadingPeriodSet, entity);
|
||||
|
||||
var needaddIds = addOrEditReadingPeriodSet.SubjectVisitIds.Where(x => !existsVisitIds.Contains(x)).ToList();
|
||||
|
||||
entity.ReadingPeriodPlanList.AddRange(needaddIds.Select(x => new ReadingPeriodPlan()
|
||||
entity.ReadingPeriodSites = addOrEditReadingPeriodSet.SiteIds.Select(x => new ReadingPeriodSite()
|
||||
{
|
||||
ReadingPeriodSetId = entity.Id,
|
||||
SubjectVisitId = x,
|
||||
}));
|
||||
TrialId = entity.TrialId,
|
||||
TrialSiteId = x,
|
||||
}).ToList();
|
||||
|
||||
// 修改了就是重新生成计划
|
||||
if (await IsChangeReadingPlan(new IsChangeReadingPlanInDto()
|
||||
{
|
||||
|
||||
Id = addOrEditReadingPeriodSet.Id,
|
||||
ExpirationDate = addOrEditReadingPeriodSet.ExpirationDate,
|
||||
ReadingScope = addOrEditReadingPeriodSet.ReadingScope.Value,
|
||||
TrialId = addOrEditReadingPeriodSet.TrialId,
|
||||
ExpirationVisitNum = addOrEditReadingPeriodSet.ExpirationVisitNum,
|
||||
VisitStageId = addOrEditReadingPeriodSet.VisitStageId,
|
||||
ReadingSetType = addOrEditReadingPeriodSet.ReadingSetType,
|
||||
TrialReadingCriterionId = addOrEditReadingPeriodSet.TrialReadingCriterionId,
|
||||
SiteIds = addOrEditReadingPeriodSet.SiteIds,
|
||||
}))
|
||||
{
|
||||
|
||||
entity.ReadingPeriodPlanList = addOrEditReadingPeriodSet.SubjectVisitIds.Select(x => new ReadingPeriodPlan
|
||||
{
|
||||
ReadingPeriodSetId = entity.Id,
|
||||
SubjectVisitId = x,
|
||||
}).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
var existsVisitIds = await _readingPeriodPlanRepository.Where(x => x.ReadingPeriodSetId == addOrEditReadingPeriodSet.Id).Select(x => x.SubjectVisitId).ToListAsync();
|
||||
|
||||
var needaddIds = addOrEditReadingPeriodSet.SubjectVisitIds.Where(x => !existsVisitIds.Contains(x)).ToList();
|
||||
|
||||
entity.ReadingPeriodPlanList.AddRange(needaddIds.Select(x => new ReadingPeriodPlan()
|
||||
{
|
||||
ReadingPeriodSetId = entity.Id,
|
||||
SubjectVisitId = x,
|
||||
}));
|
||||
}
|
||||
|
||||
|
||||
|
||||
var success = await _readingPeriodSetRepository.SaveChangesAsync();
|
||||
}
|
||||
|
||||
|
||||
|
||||
var success = await _readingPeriodSetRepository.SaveChangesAsync();
|
||||
return ResponseOutput.Ok(entity.Id);
|
||||
|
||||
}
|
||||
|
|
@ -178,143 +194,23 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
|
||||
|
||||
List<ReadModule> readModules = new List<ReadModule>();
|
||||
foreach (var item in plans)
|
||||
await AddReadModule(new AddReadModuleInDto()
|
||||
{
|
||||
readModules.Add(new ReadModule()
|
||||
ReadingPeriodName = readingPeriodSet.ReadingPeriodName,
|
||||
ReadingSetType = readingPeriodSet.ReadingSetType,
|
||||
TrialId = readingPeriodSet.TrialId,
|
||||
ReadingPeriodSetId= readingPeriodSet.Id,
|
||||
TrialReadingCriterionId = readingPeriodSet.TrialReadingCriterionId,
|
||||
VisitInfoList = plans.Select(x => new AddReadModuleVisitInfo()
|
||||
{
|
||||
Id = NewId.NextGuid(),
|
||||
SubjectId = item.SubjectVisit.SubjectId,
|
||||
ModuleType = item.ReadingPeriodSet.ReadingSetType == ReadingSetType.ImageReading ? ModuleTypeEnum.Global : ModuleTypeEnum.Oncology,
|
||||
IsUrgent = item.SubjectVisit.IsUrgent,
|
||||
ReadModuleAddTypeEnum = ReadModuleAddType.ReadingPlan,
|
||||
ModuleName = item.ReadingPeriodSet.ReadingPeriodName,
|
||||
SubjectVisitId = item.SubjectVisitId,
|
||||
ReadingSetType = item.ReadingPeriodSet.ReadingSetType,
|
||||
ReadingPeriodSetId = item.ReadingPeriodSet.Id,
|
||||
ReadingStatus = ReadingStatusEnum.TaskAllocate,
|
||||
TrialId = readingPeriodSet.TrialId,
|
||||
//VisitNum = item.SubjectVisit.VisitNum,
|
||||
SubjectId = x.SubjectVisit.SubjectId,
|
||||
SubjectVisitId = x.SubjectVisitId,
|
||||
|
||||
//增加标准
|
||||
TrialReadingCriterionId = readingPeriodSet.TrialReadingCriterionId
|
||||
});
|
||||
};
|
||||
IsUrgent = false
|
||||
}).ToList()
|
||||
|
||||
await _readModuleRepository.AddRangeAsync(readModules);
|
||||
});
|
||||
|
||||
await _readModuleRepository.SaveChangesAsync();
|
||||
|
||||
// 判断是否要添加肿瘤学或者全局阅片任务
|
||||
var subjectVisitIds = readModules.Select(x => x.SubjectVisitId).ToList();
|
||||
switch (readingPeriodSet.ReadingSetType)
|
||||
{
|
||||
case ReadingSetType.ImageReading:
|
||||
//增加标准
|
||||
var taskInfoList = await _visitTaskRepository.Where(x => x.TrialReadingCriterionId == readingPeriodSet.TrialReadingCriterionId && subjectVisitIds.Contains(x.SourceSubjectVisitId ?? default(Guid)) &&
|
||||
|
||||
x.TrialReadingCriterionId == readingPeriodSet.TrialReadingCriterionId &&
|
||||
x.TaskState == TaskState.Effect && x.ReadingTaskState == ReadingTaskState.HaveSigned && !x.IsAnalysisCreate).ToListAsync();
|
||||
|
||||
foreach (var item in taskInfoList)
|
||||
{
|
||||
|
||||
var readModule = readModules.Where(x => x.SubjectVisitId == item.SourceSubjectVisitId).FirstOrDefault();
|
||||
if (readModule != null)
|
||||
{
|
||||
await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand()
|
||||
{
|
||||
OriginalVisitId = item.Id,
|
||||
ReadingCategory = GenerateTaskCategory.Global,
|
||||
TrialId = item.TrialId,
|
||||
ReadingGenerataTaskList = new List<ReadingGenerataTaskDTO>() {
|
||||
new ReadingGenerataTaskDTO()
|
||||
{
|
||||
IsUrgent = readModule.IsUrgent??false,
|
||||
SubjectId = readModule.SubjectId,
|
||||
ReadingName = readModule.ModuleName,
|
||||
ReadModuleId =readModule.Id,
|
||||
ReadingCategory = ReadingCategory.Global,
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 根据SourceSubjectVisitId 分组
|
||||
var visitTaskid = taskInfoList.GroupBy(x => x.SourceSubjectVisitId).Select(x => x.Max(y => y.Id)).ToList();
|
||||
// 生成裁判任务 是否需要生成函数里面有逻辑判断
|
||||
foreach (var item in visitTaskid)
|
||||
{
|
||||
await _readingImageTaskService.TriggerJudgeQuestion(item);
|
||||
}
|
||||
break;
|
||||
|
||||
case ReadingSetType.TumorReading:
|
||||
|
||||
|
||||
|
||||
|
||||
var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == readingPeriodSet.TrialReadingCriterionId).Select(x => new
|
||||
{
|
||||
x.ReadingType,
|
||||
|
||||
}).FirstNotNullAsync();
|
||||
|
||||
//增加标准
|
||||
var globalModuleIds = await _readModuleRepository.Where(x => x.TrialReadingCriterionId == readingPeriodSet.TrialReadingCriterionId && subjectVisitIds.Contains(x.SubjectVisitId) && x.ModuleType == ModuleTypeEnum.Global).Select(x => x.Id).ToListAsync();
|
||||
|
||||
//增加标准
|
||||
var globalTaskInfo = await _visitTaskRepository.Where(x => x.TrialReadingCriterionId == readingPeriodSet.TrialReadingCriterionId && globalModuleIds.Contains(x.SouceReadModuleId ?? default(Guid))
|
||||
|
||||
&& x.TaskState == TaskState.Effect && x.ReadingTaskState == ReadingTaskState.HaveSigned && !x.IsAnalysisCreate).GroupBy(x => new { x.SouceReadModuleId }).Select(x =>
|
||||
new
|
||||
{
|
||||
SouceReadModuleId = x.Key.SouceReadModuleId,
|
||||
Count = x.ToList().Count,
|
||||
TaskId = x.Select(x => x.Id).FirstOrDefault(),
|
||||
ReadModuleId = x.Select(x => x.SouceReadModuleId).FirstOrDefault(),
|
||||
JudgeTaskId = x.Select(x => x.JudgeVisitTaskId).FirstOrDefault(),
|
||||
JudgeTaskResultId = x.Select(x => x.JudgeVisitTask.JudgeResultTaskId).FirstOrDefault(),
|
||||
}).ToListAsync();
|
||||
|
||||
foreach (var item in globalTaskInfo)
|
||||
{
|
||||
|
||||
if (item.Count == (int)criterionInfo.ReadingType)
|
||||
{
|
||||
//没有裁判 或者有裁判,并且裁判任务做完了
|
||||
if (item.JudgeTaskId == null || item.JudgeTaskResultId != null)
|
||||
{
|
||||
var readModule = readModules.Where(x => x.Id == item.ReadModuleId).FirstOrDefault();
|
||||
|
||||
await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand()
|
||||
{
|
||||
OriginalVisitId = item.TaskId,
|
||||
ReadingCategory = GenerateTaskCategory.Oncology,
|
||||
TrialId = readingPeriodSet.TrialId,
|
||||
ReadingGenerataTaskList = new List<ReadingGenerataTaskDTO>() {
|
||||
new ReadingGenerataTaskDTO()
|
||||
{
|
||||
IsUrgent = readModule.IsUrgent ?? false,
|
||||
SubjectId = readModule.SubjectId,
|
||||
|
||||
ReadingName = readModule.ModuleName,
|
||||
ReadModuleId =readModule.Id,
|
||||
ReadingCategory = ReadingCategory.Oncology,
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -353,12 +249,167 @@ namespace IRaCIS.Core.Application.Service
|
|||
EffectOfTime = indto.IsTakeEffect == ReadingPeriodStatus.TakeEffect ? DateTime.Now : null,
|
||||
});
|
||||
|
||||
if (indto.IsTakeEffect == ReadingPeriodStatus.TakeEffect)
|
||||
{
|
||||
await _readingPeriodPlanRepository.UpdatePartialFromQueryAsync(x => x.ReadingPeriodSetId == indto.Id, x => new ReadingPeriodPlan()
|
||||
{
|
||||
IsGenerate = true,
|
||||
GeneratedTime = DateTime.Now
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
var result = await _readingPeriodSetRepository.SaveChangesAsync();
|
||||
return ResponseOutput.Result(result);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 生效或者新增访视的时候添加阅片期
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
public async Task AddReadModule(AddReadModuleInDto inDto)
|
||||
{
|
||||
List<ReadModule> readModules = new List<ReadModule>();
|
||||
foreach (var item in inDto.VisitInfoList)
|
||||
{
|
||||
readModules.Add(new ReadModule()
|
||||
{
|
||||
Id = NewId.NextGuid(),
|
||||
SubjectId = item.SubjectId,
|
||||
ModuleType = inDto.ReadingSetType == ReadingSetType.ImageReading ? ModuleTypeEnum.Global : ModuleTypeEnum.Oncology,
|
||||
IsUrgent = item.IsUrgent,
|
||||
ReadModuleAddTypeEnum = ReadModuleAddType.ReadingPlan,
|
||||
ModuleName = inDto.ReadingPeriodName,
|
||||
SubjectVisitId = item.SubjectVisitId,
|
||||
ReadingSetType = inDto.ReadingSetType,
|
||||
ReadingPeriodSetId = inDto.ReadingPeriodSetId,
|
||||
ReadingStatus = ReadingStatusEnum.TaskAllocate,
|
||||
TrialId = inDto.TrialId,
|
||||
//VisitNum = item.SubjectVisit.VisitNum,
|
||||
|
||||
//增加标准
|
||||
TrialReadingCriterionId = inDto.TrialReadingCriterionId
|
||||
});
|
||||
}
|
||||
;
|
||||
|
||||
await _readModuleRepository.AddRangeAsync(readModules);
|
||||
|
||||
await _readModuleRepository.SaveChangesAsync();
|
||||
|
||||
// 判断是否要添加肿瘤学或者全局阅片任务
|
||||
var subjectVisitIds = readModules.Select(x => x.SubjectVisitId).ToList();
|
||||
switch (inDto.ReadingSetType)
|
||||
{
|
||||
case ReadingSetType.ImageReading:
|
||||
//增加标准
|
||||
var taskInfoList = await _visitTaskRepository.Where(x => x.TrialReadingCriterionId == inDto.TrialReadingCriterionId && subjectVisitIds.Contains(x.SourceSubjectVisitId ?? default(Guid)) &&
|
||||
|
||||
x.TrialReadingCriterionId == inDto.TrialReadingCriterionId &&
|
||||
x.TaskState == TaskState.Effect && x.ReadingTaskState == ReadingTaskState.HaveSigned && !x.IsAnalysisCreate).ToListAsync();
|
||||
|
||||
foreach (var item in taskInfoList)
|
||||
{
|
||||
|
||||
var readModule = readModules.Where(x => x.SubjectVisitId == item.SourceSubjectVisitId).FirstOrDefault();
|
||||
if (readModule != null)
|
||||
{
|
||||
await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand()
|
||||
{
|
||||
OriginalVisitId = item.Id,
|
||||
ReadingCategory = GenerateTaskCategory.Global,
|
||||
TrialId = item.TrialId,
|
||||
ReadingGenerataTaskList = new List<ReadingGenerataTaskDTO>() {
|
||||
new ReadingGenerataTaskDTO()
|
||||
{
|
||||
IsUrgent = readModule.IsUrgent??false,
|
||||
SubjectId = readModule.SubjectId,
|
||||
ReadingName = readModule.ModuleName,
|
||||
ReadModuleId =readModule.Id,
|
||||
ReadingCategory = ReadingCategory.Global,
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 根据SourceSubjectVisitId 分组
|
||||
var visitTaskid = taskInfoList.GroupBy(x => x.SourceSubjectVisitId).Select(x => x.Max(y => y.Id)).ToList();
|
||||
// 生成裁判任务 是否需要生成函数里面有逻辑判断
|
||||
foreach (var item in visitTaskid)
|
||||
{
|
||||
await _readingImageTaskService.TriggerJudgeQuestion(item);
|
||||
}
|
||||
break;
|
||||
|
||||
case ReadingSetType.TumorReading:
|
||||
|
||||
|
||||
|
||||
|
||||
var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == inDto.TrialReadingCriterionId).Select(x => new
|
||||
{
|
||||
x.ReadingType,
|
||||
|
||||
}).FirstNotNullAsync();
|
||||
|
||||
//增加标准
|
||||
var globalModuleIds = await _readModuleRepository.Where(x => x.TrialReadingCriterionId == inDto.TrialReadingCriterionId && subjectVisitIds.Contains(x.SubjectVisitId) && x.ModuleType == ModuleTypeEnum.Global).Select(x => x.Id).ToListAsync();
|
||||
|
||||
//增加标准
|
||||
var globalTaskInfo = await _visitTaskRepository.Where(x => x.TrialReadingCriterionId == inDto.TrialReadingCriterionId && globalModuleIds.Contains(x.SouceReadModuleId ?? default(Guid))
|
||||
|
||||
&& x.TaskState == TaskState.Effect && x.ReadingTaskState == ReadingTaskState.HaveSigned && !x.IsAnalysisCreate).GroupBy(x => new { x.SouceReadModuleId }).Select(x =>
|
||||
new
|
||||
{
|
||||
SouceReadModuleId = x.Key.SouceReadModuleId,
|
||||
Count = x.ToList().Count,
|
||||
TaskId = x.Select(x => x.Id).FirstOrDefault(),
|
||||
ReadModuleId = x.Select(x => x.SouceReadModuleId).FirstOrDefault(),
|
||||
JudgeTaskId = x.Select(x => x.JudgeVisitTaskId).FirstOrDefault(),
|
||||
JudgeTaskResultId = x.Select(x => x.JudgeVisitTask.JudgeResultTaskId).FirstOrDefault(),
|
||||
}).ToListAsync();
|
||||
|
||||
foreach (var item in globalTaskInfo)
|
||||
{
|
||||
|
||||
if (item.Count == (int)criterionInfo.ReadingType)
|
||||
{
|
||||
//没有裁判 或者有裁判,并且裁判任务做完了
|
||||
if (item.JudgeTaskId == null || item.JudgeTaskResultId != null)
|
||||
{
|
||||
var readModule = readModules.Where(x => x.Id == item.ReadModuleId).FirstOrDefault();
|
||||
|
||||
await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand()
|
||||
{
|
||||
OriginalVisitId = item.TaskId,
|
||||
ReadingCategory = GenerateTaskCategory.Oncology,
|
||||
TrialId = inDto.TrialId,
|
||||
ReadingGenerataTaskList = new List<ReadingGenerataTaskDTO>() {
|
||||
new ReadingGenerataTaskDTO()
|
||||
{
|
||||
IsUrgent = readModule.IsUrgent ?? false,
|
||||
SubjectId = readModule.SubjectId,
|
||||
|
||||
ReadingName = readModule.ModuleName,
|
||||
ReadModuleId =readModule.Id,
|
||||
ReadingCategory = ReadingCategory.Oncology,
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
|
|
@ -532,6 +583,51 @@ namespace IRaCIS.Core.Application.Service
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加阅片计划并生成阅片期(在阅片期已经生效的情况下添加)
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<IResponseOutput> AddReadingPlanAndGenerateReadModule(AddReadingPlanAndGenerateReadModuleInDto inDto)
|
||||
{
|
||||
var readingPeriodSet = await _readingPeriodSetRepository.Where(x => x.Id == inDto.ReadingPeriodSetId).FirstNotNullAsync();
|
||||
List<ReadingPeriodPlan> plans = inDto.SubjectVisitIdList.Select(x => new ReadingPeriodPlan()
|
||||
{
|
||||
Id = NewId.NextGuid(),
|
||||
SubjectVisitId = x,
|
||||
ReadingPeriodSetId = inDto.ReadingPeriodSetId,
|
||||
IsGenerate=true,
|
||||
GeneratedTime=DateTime.Now
|
||||
}).ToList();
|
||||
|
||||
await _readingPeriodPlanRepository.AddRangeAsync(plans);
|
||||
|
||||
await _readingPeriodPlanRepository.SaveChangesAsync();
|
||||
|
||||
|
||||
|
||||
var subejctVisits = await _subjectVisitRepository.Where(x => inDto.SubjectVisitIdList.Contains(x.Id)).ToListAsync();
|
||||
|
||||
await AddReadModule(new AddReadModuleInDto()
|
||||
{
|
||||
ReadingPeriodName = readingPeriodSet.ReadingPeriodName,
|
||||
ReadingSetType = readingPeriodSet.ReadingSetType,
|
||||
TrialId = readingPeriodSet.TrialId,
|
||||
ReadingPeriodSetId = readingPeriodSet.Id,
|
||||
TrialReadingCriterionId = readingPeriodSet.TrialReadingCriterionId,
|
||||
VisitInfoList = subejctVisits.Select(x => new AddReadModuleVisitInfo()
|
||||
{
|
||||
SubjectId = x.SubjectId,
|
||||
SubjectVisitId = x.Id,
|
||||
IsUrgent = x.IsUrgent,
|
||||
|
||||
}).ToList()
|
||||
|
||||
});
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置加入或者移除阅片计划
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -19,4 +19,14 @@ public class ReadingPeriodPlan : BaseFullDeleteAuditEntity
|
|||
|
||||
[Comment("访视")]
|
||||
public Guid SubjectVisitId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否生成
|
||||
/// </summary>
|
||||
public bool IsGenerate { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// 生效时间
|
||||
/// </summary>
|
||||
public DateTime? GeneratedTime { get; set; }
|
||||
}
|
||||
|
|
|
|||
20973
IRaCIS.Core.Infra.EFCore/Migrations/20251103062214_ReadingPeriodPlan.Designer.cs
generated
Normal file
20973
IRaCIS.Core.Infra.EFCore/Migrations/20251103062214_ReadingPeriodPlan.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,40 @@
|
|||
using System;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class ReadingPeriodPlan : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AddColumn<DateTime>(
|
||||
name: "GeneratedTime",
|
||||
table: "ReadingPeriodPlan",
|
||||
type: "datetime2",
|
||||
nullable: true);
|
||||
|
||||
migrationBuilder.AddColumn<bool>(
|
||||
name: "IsGenerate",
|
||||
table: "ReadingPeriodPlan",
|
||||
type: "bit",
|
||||
nullable: false,
|
||||
defaultValue: false);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropColumn(
|
||||
name: "GeneratedTime",
|
||||
table: "ReadingPeriodPlan");
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "IsGenerate",
|
||||
table: "ReadingPeriodPlan");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -5948,9 +5948,15 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
|||
b.Property<DateTime?>("DeletedTime")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.Property<DateTime?>("GeneratedTime")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.Property<bool>("IsDeleted")
|
||||
.HasColumnType("bit");
|
||||
|
||||
b.Property<bool>("IsGenerate")
|
||||
.HasColumnType("bit");
|
||||
|
||||
b.Property<Guid>("ReadingPeriodSetId")
|
||||
.HasColumnType("uniqueidentifier")
|
||||
.HasComment("阅片期配置ID");
|
||||
|
|
|
|||
Loading…
Reference in New Issue