添加阅片期计划
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>
|
<param name="indto"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</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)">
|
<member name="M:IRaCIS.Core.Application.Service.ReadingPeriodSetService.GetPreviewTheReadingPlanList(IRaCIS.Core.Application.Service.Reading.Dto.PreviewTheReadingListDto)">
|
||||||
<summary>
|
<summary>
|
||||||
获取选中的计划 (增加标准不影响 因为阅片期设置关联了标准)
|
获取选中的计划 (增加标准不影响 因为阅片期设置关联了标准)
|
||||||
|
|
@ -14052,6 +14059,13 @@
|
||||||
</summary>
|
</summary>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</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)">
|
<member name="M:IRaCIS.Core.Application.Service.ReadingPeriodSetService.SetBatchAddOrRemoveReadingPlan(IRaCIS.Core.Application.Service.Reading.Dto.SetBatchAddOrRemoveReadingPlanInDto)">
|
||||||
<summary>
|
<summary>
|
||||||
设置加入或者移除阅片计划
|
设置加入或者移除阅片计划
|
||||||
|
|
|
||||||
|
|
@ -127,6 +127,13 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
||||||
public Guid? TrialReadingCriterionId { get; set; }
|
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 class SetBatchAddOrRemoveReadingPlanInDto
|
||||||
{
|
{
|
||||||
public List<Guid> SubjectVisitIdList { get; set; } = new List<Guid>();
|
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 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
|
public class ReadingPeriodSetQuery : PageInput
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,12 @@
|
||||||
using IRaCIS.Core.Application.Filter;
|
using IRaCIS.Core.Application.Filter;
|
||||||
using IRaCIS.Core.Application.Service.Reading.Dto;
|
using IRaCIS.Core.Application.Service.Reading.Dto;
|
||||||
using IRaCIS.Core.Application.ViewModel;
|
using IRaCIS.Core.Application.ViewModel;
|
||||||
|
using IRaCIS.Core.Domain.Models;
|
||||||
using IRaCIS.Core.Domain.Share;
|
using IRaCIS.Core.Domain.Share;
|
||||||
using IRaCIS.Core.Infrastructure;
|
using IRaCIS.Core.Infrastructure;
|
||||||
using MassTransit;
|
using MassTransit;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using NPOI.Util;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Service
|
namespace IRaCIS.Core.Application.Service
|
||||||
{
|
{
|
||||||
|
|
@ -74,53 +76,67 @@ namespace IRaCIS.Core.Application.Service
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var entity = (await _readingPeriodSetRepository.Where(t => t.Id == addOrEditReadingPeriodSet.Id, true).Include(t => t.ReadingPeriodSites).Include(x => x.ReadingPeriodPlanList).FirstOrDefaultAsync()).IfNullThrowException();
|
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,
|
await AddReadingPlanAndGenerateReadModule(new AddReadingPlanAndGenerateReadModuleInDto()
|
||||||
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,
|
ReadingPeriodSetId = addOrEditReadingPeriodSet.Id.Value,
|
||||||
SubjectVisitId = x,
|
SubjectVisitIdList = addOrEditReadingPeriodSet.SubjectVisitIds
|
||||||
}).ToList();
|
});
|
||||||
}
|
}
|
||||||
else
|
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.ReadingPeriodSites = addOrEditReadingPeriodSet.SiteIds.Select(x => new ReadingPeriodSite()
|
||||||
|
|
||||||
entity.ReadingPeriodPlanList.AddRange(needaddIds.Select(x => new ReadingPeriodPlan()
|
|
||||||
{
|
{
|
||||||
ReadingPeriodSetId = entity.Id,
|
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);
|
return ResponseOutput.Ok(entity.Id);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -178,146 +194,26 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
List<ReadModule> readModules = new List<ReadModule>();
|
await AddReadModule(new AddReadModuleInDto()
|
||||||
foreach (var item in plans)
|
|
||||||
{
|
{
|
||||||
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 = x.SubjectVisit.SubjectId,
|
||||||
SubjectId = item.SubjectVisit.SubjectId,
|
SubjectVisitId = x.SubjectVisitId,
|
||||||
ModuleType = item.ReadingPeriodSet.ReadingSetType == ReadingSetType.ImageReading ? ModuleTypeEnum.Global : ModuleTypeEnum.Oncology,
|
|
||||||
IsUrgent = item.SubjectVisit.IsUrgent,
|
IsUrgent = false
|
||||||
ReadModuleAddTypeEnum = ReadModuleAddType.ReadingPlan,
|
}).ToList()
|
||||||
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,
|
|
||||||
|
|
||||||
//增加标准
|
});
|
||||||
TrialReadingCriterionId = readingPeriodSet.TrialReadingCriterionId
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
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,
|
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();
|
var result = await _readingPeriodSetRepository.SaveChangesAsync();
|
||||||
return ResponseOutput.Result(result);
|
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
|
#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>
|
||||||
/// 设置加入或者移除阅片计划
|
/// 设置加入或者移除阅片计划
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
||||||
|
|
@ -19,4 +19,14 @@ public class ReadingPeriodPlan : BaseFullDeleteAuditEntity
|
||||||
|
|
||||||
[Comment("访视")]
|
[Comment("访视")]
|
||||||
public Guid SubjectVisitId { get; set; }
|
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")
|
b.Property<DateTime?>("DeletedTime")
|
||||||
.HasColumnType("datetime2");
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
|
b.Property<DateTime?>("GeneratedTime")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
b.Property<bool>("IsDeleted")
|
b.Property<bool>("IsDeleted")
|
||||||
.HasColumnType("bit");
|
.HasColumnType("bit");
|
||||||
|
|
||||||
|
b.Property<bool>("IsGenerate")
|
||||||
|
.HasColumnType("bit");
|
||||||
|
|
||||||
b.Property<Guid>("ReadingPeriodSetId")
|
b.Property<Guid>("ReadingPeriodSetId")
|
||||||
.HasColumnType("uniqueidentifier")
|
.HasColumnType("uniqueidentifier")
|
||||||
.HasComment("阅片期配置ID");
|
.HasComment("阅片期配置ID");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue