Uat_Study
he 2023-01-31 13:46:03 +08:00
parent e18b890f96
commit 9296871b28
7 changed files with 239 additions and 42 deletions

View File

@ -173,10 +173,27 @@ namespace IRaCIS.Application.Services
// 一致性分析按照doctorId 其他按照分组 // 一致性分析按照doctorId 其他按照分组
result.TaskList = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit &&
x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && var queruTask = _visitTaskRepository.Where(x =>
x.SubjectId == taskInfo.SubjectId && x.IsAnalysisCreate == taskInfo.IsAnalysisCreate && x.TaskState == TaskState.Effect && x.VisitTaskNum < taskInfo.VisitTaskNum) x.TrialId == taskInfo.TrialId &&
.Where(x => x.DoctorUserId == taskInfo.DoctorUserId) x.SubjectId == taskInfo.SubjectId &&
x.ReadingCategory == ReadingCategory.Visit &&
x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId &&
x.ReadingTaskState == ReadingTaskState.HaveSigned &&
x.IsAnalysisCreate == taskInfo.IsAnalysisCreate &&
x.ArmEnum == taskInfo.ArmEnum &&
x.IsSelfAnalysis == taskInfo.IsSelfAnalysis &&
x.DoctorUserId == taskInfo.DoctorUserId &&
x.TaskState == TaskState.Effect &&
x.VisitTaskNum < taskInfo.VisitTaskNum);
if (taskInfo.ReadingTaskState == ReadingTaskState.HaveSigned)
{
queruTask = _visitTaskRepository.Where(x => taskInfo.RelatedVisitTaskIdList.Contains(x.Id));
}
result.TaskList = await queruTask
.OrderBy(x => x.VisitTaskNum).Select(x => new GlobalVisitInfo() .OrderBy(x => x.VisitTaskNum).Select(x => new GlobalVisitInfo()
{ {
VisitName = x.TaskName, VisitName = x.TaskName,

View File

@ -282,9 +282,9 @@ namespace IRaCIS.Application.Services
{ {
var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync(); var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync();
var baselineVisitId = await _subjectVisitRepository.Where(x => x.SubjectId == taskInfo.SubjectId && x.IsBaseLine && !x.IsLostVisit).Select(x => x.Id).FirstNotNullAsync(); var baselineVisitId = await _subjectVisitRepository.Where(x => x.SubjectId == taskInfo.SubjectId && x.IsBaseLine && !x.IsLostVisit).Select(x => x.Id).FirstNotNullAsync();
var result = await _visitTaskRepository
.WhereIf(taskInfo.TaskState != TaskState.Effect, x => x.Id == inDto.VisitTaskId)
.Where(x => var taskQuery = _visitTaskRepository.Where(x =>
(x.TrialId == taskInfo.TrialId && (x.TrialId == taskInfo.TrialId &&
x.SubjectId == taskInfo.SubjectId && x.SubjectId == taskInfo.SubjectId &&
x.ArmEnum == taskInfo.ArmEnum && x.ArmEnum == taskInfo.ArmEnum &&
@ -294,7 +294,14 @@ namespace IRaCIS.Application.Services
x.TaskState == TaskState.Effect && x.TaskState == TaskState.Effect &&
x.VisitTaskNum <= taskInfo.VisitTaskNum && x.VisitTaskNum <= taskInfo.VisitTaskNum &&
x.IsAnalysisCreate == taskInfo.IsAnalysisCreate && x.IsAnalysisCreate == taskInfo.IsAnalysisCreate &&
x.ReadingCategory == ReadingCategory.Visit) || x.Id == inDto.VisitTaskId) x.ReadingCategory == ReadingCategory.Visit) || x.Id == inDto.VisitTaskId);
if (taskInfo.ReadingTaskState == ReadingTaskState.HaveSigned)
{
taskQuery = _visitTaskRepository.Where(x => taskInfo.RelatedVisitTaskIdList.Contains(x.Id));
}
var result = await taskQuery
.Select(x => new GetRelatedVisitTaskOutDto() .Select(x => new GetRelatedVisitTaskOutDto()
{ {
TaskBlindName = x.TaskBlindName, TaskBlindName = x.TaskBlindName,
@ -327,20 +334,28 @@ namespace IRaCIS.Application.Services
public async Task<List<GetReadingPastResultListOutDto>> GetReadingPastResultList(GetReadingPastResultListInDto inDto) public async Task<List<GetReadingPastResultListOutDto>> GetReadingPastResultList(GetReadingPastResultListInDto inDto)
{ {
var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync(); var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync();
var readingPastResultList = await _visitTaskRepository.Where(x =>
x.TrialId == taskInfo.TrialId &&
x.SubjectId == taskInfo.SubjectId &&
x.VisitTaskNum <= taskInfo.VisitTaskNum &&
x.ArmEnum == taskInfo.ArmEnum &&
x.Id != inDto.VisitTaskId &&
x.DoctorUserId == taskInfo.DoctorUserId &&
x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId &&
x.ReadingTaskState == ReadingTaskState.HaveSigned &&
x.TaskState == TaskState.Effect &&
x.IsSelfAnalysis == taskInfo.IsSelfAnalysis&&
x.IsAnalysisCreate == taskInfo.IsAnalysisCreate)
.WhereIf(taskInfo.ReadingCategory != ReadingCategory.Visit, x => x.ReadingCategory == taskInfo.ReadingCategory)
var taskQuery = _visitTaskRepository.Where(x =>
x.TrialId == taskInfo.TrialId &&
x.SubjectId == taskInfo.SubjectId &&
x.VisitTaskNum <= taskInfo.VisitTaskNum &&
x.ArmEnum == taskInfo.ArmEnum &&
x.Id != inDto.VisitTaskId &&
x.DoctorUserId == taskInfo.DoctorUserId &&
x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId &&
x.ReadingTaskState == ReadingTaskState.HaveSigned &&
x.TaskState == TaskState.Effect &&
x.IsSelfAnalysis == taskInfo.IsSelfAnalysis &&
x.IsAnalysisCreate == taskInfo.IsAnalysisCreate &&
x.ReadingCategory == taskInfo.ReadingCategory
);
if (taskInfo.ReadingTaskState == ReadingTaskState.HaveSigned)
{
taskQuery = _visitTaskRepository.Where(x => taskInfo.RelatedVisitTaskIdList.Contains(x.Id));
}
var readingPastResultList = await taskQuery
.ProjectTo<GetReadingPastResultListOutDto>(_mapper.ConfigurationProvider).OrderBy(x => x.VisitTaskNum).ToListAsync(); .ProjectTo<GetReadingPastResultListOutDto>(_mapper.ConfigurationProvider).OrderBy(x => x.VisitTaskNum).ToListAsync();
return readingPastResultList; return readingPastResultList;
} }
@ -1931,6 +1946,8 @@ namespace IRaCIS.Application.Services
// 完成阅片修改状态 // 完成阅片修改状态
//await this.FinishReadUpdateState(visitTaskId); //await this.FinishReadUpdateState(visitTaskId);
// 创建任务关联关系
await this.CreateTaskRelated(visitTaskId);
await _visitTaskRepository.SaveChangesAsync(); await _visitTaskRepository.SaveChangesAsync();
@ -1938,6 +1955,84 @@ namespace IRaCIS.Application.Services
} }
/// <summary>
/// 签名时创建任务关联
/// </summary>
/// <returns></returns>
private async Task CreateTaskRelated(Guid visitTaskId)
{
var taskInfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).FirstNotNullAsync();
// 判断是否有序阅片
var isReadingTaskViewInOrder = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == taskInfo.TrialReadingCriterionId).Select(x => x.IsReadingTaskViewInOrder).FirstNotNullAsync();
// 判断任务类型
// 关联Id
List<Guid> relatedVisitTaskIdList = new List<Guid>();
// 既往任务Id
List<Guid> pastResultTaskIdList = new List<Guid>();
if (isReadingTaskViewInOrder)
{
pastResultTaskIdList = await _visitTaskRepository.Where(x =>
x.TrialId == taskInfo.TrialId &&
x.SubjectId == taskInfo.SubjectId &&
x.VisitTaskNum < taskInfo.VisitTaskNum &&
x.ArmEnum == taskInfo.ArmEnum &&
x.DoctorUserId == taskInfo.DoctorUserId &&
x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId &&
x.ReadingTaskState == ReadingTaskState.HaveSigned &&
x.TaskState == TaskState.Effect &&
x.IsSelfAnalysis == taskInfo.IsSelfAnalysis &&
x.IsAnalysisCreate == taskInfo.IsAnalysisCreate &&
x.ReadingCategory == taskInfo.ReadingCategory &&
x.Id != taskInfo.Id
).Select(x => x.Id).ToListAsync();
switch (taskInfo.ReadingCategory)
{
case ReadingCategory.Visit:
case ReadingCategory.Global:
case ReadingCategory.Oncology:
relatedVisitTaskIdList = await _visitTaskRepository.Where(x =>
x.TrialId == taskInfo.TrialId &&
x.SubjectId == taskInfo.SubjectId &&
x.ReadingCategory == ReadingCategory.Visit &&
x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId &&
x.ReadingTaskState == ReadingTaskState.HaveSigned &&
x.IsAnalysisCreate == taskInfo.IsAnalysisCreate &&
x.ArmEnum == taskInfo.ArmEnum &&
x.IsSelfAnalysis == taskInfo.IsSelfAnalysis &&
x.DoctorUserId == taskInfo.DoctorUserId &&
x.TaskState == TaskState.Effect && x.VisitTaskNum <= taskInfo.VisitTaskNum).Select(x => x.Id).ToListAsync();
break;
}
}
else
{
if (taskInfo.ReadingCategory == ReadingCategory.Visit)
{
relatedVisitTaskIdList.Add(taskInfo.Id);
}
}
await _visitTaskRepository.UpdatePartialFromQueryAsync(taskInfo.Id, x => new VisitTask()
{
PastResultTaskIds = JsonConvert.SerializeObject(pastResultTaskIdList),
RelatedVisitTaskIds = JsonConvert.SerializeObject(relatedVisitTaskIdList),
});
await _visitTaskRepository.SaveChangesAsync();
}
/// <summary> /// <summary>
/// 阅片期 -全局和肿瘤学任务的生成 /// 阅片期 -全局和肿瘤学任务的生成
/// </summary> /// </summary>

View File

@ -124,12 +124,10 @@ namespace IRaCIS.Application.Services
if (await VerifyIsGlobalVisitTask(taskList[0].Id)) if (await VerifyIsGlobalVisitTask(taskList[0].Id))
{ {
var globalVisitTaskIds = await _visitTaskRepository.Where(x=>x.Id== taskList[0].Id).Select(x=>x.RelatedVisitTaskIdList).FirstNotNullAsync();
// 找到所有的的任务 // 找到所有的的任务
var globalVisitTasks = await _visitTaskRepository.Where(x => x.ReadingTaskState == ReadingTaskState.HaveSigned && x.ReadingCategory != ReadingCategory.Judge var globalVisitTasks = await _visitTaskRepository.Where(x => globalVisitTaskIds.Contains(x.Id)).Select(x => new {
&& x.TaskState == TaskState.Effect
&& x.TrialReadingCriterionId == taskList[0].TrialReadingCriterionId
&& x.IsAnalysisCreate == false
&& x.ReadingCategory == ReadingCategory.Visit && x.VisitTaskNum <= taskList[0].VisitTaskNum).Select(x => new {
x.Id, x.Id,
x.ArmEnum, x.ArmEnum,
x.VisitTaskNum, x.VisitTaskNum,
@ -137,7 +135,7 @@ namespace IRaCIS.Application.Services
x.TaskBlindName, x.TaskBlindName,
} ).ToListAsync(); } ).ToListAsync();
var globalVisitTaskIds = globalVisitTasks.Select(x => x.Id).ToList();
var taskNum = globalVisitTasks.Select(x => x.VisitTaskNum).Distinct().OrderBy(x=>x).ToList(); var taskNum = globalVisitTasks.Select(x => x.VisitTaskNum).Distinct().OrderBy(x=>x).ToList();
@ -394,6 +392,10 @@ namespace IRaCIS.Application.Services
var result = await _visitTaskRepository.SaveChangesAsync(); var result = await _visitTaskRepository.SaveChangesAsync();
// 创建任务关联关系
await this.CreateTaskRelated(inDto.VisitTaskId);
return ResponseOutput.Ok(result); return ResponseOutput.Ok(result);
} }

View File

@ -93,10 +93,18 @@ namespace IRaCIS.Application.Services
// 找到对应的访视 // 找到对应的访视
List<OncologyVisitTaskInfo> oncologyVisits = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit && List<OncologyVisitTaskInfo> oncologyVisits = await _visitTaskRepository.Where(x =>
x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && x.TrialId == taskInfo.TrialId &&
x.SubjectId == visitTask.SubjectId && x.IsAnalysisCreate == visitTask.IsAnalysisCreate && x.TaskState == TaskState.Effect && x.VisitTaskNum < visitTask.VisitTaskNum) x.SubjectId == taskInfo.SubjectId &&
.Where(x => x.DoctorUserId == visitTask.DoctorUserId) x.ReadingCategory == ReadingCategory.Visit &&
x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId &&
x.ReadingTaskState == ReadingTaskState.HaveSigned &&
x.IsAnalysisCreate == taskInfo.IsAnalysisCreate &&
x.ArmEnum == taskInfo.ArmEnum &&
x.IsSelfAnalysis == taskInfo.IsSelfAnalysis &&
x.DoctorUserId == taskInfo.DoctorUserId &&
x.TaskState == TaskState.Effect &&
x.VisitTaskNum < taskInfo.VisitTaskNum)
.OrderBy(x => x.VisitTaskNum).Select(x => new OncologyVisitTaskInfo() .OrderBy(x => x.VisitTaskNum).Select(x => new OncologyVisitTaskInfo()
{ {
VisitName = x.SourceSubjectVisit.VisitName, VisitName = x.SourceSubjectVisit.VisitName,
@ -305,6 +313,9 @@ namespace IRaCIS.Application.Services
SignTime = DateTime.Now, SignTime = DateTime.Now,
}); });
await _visitTaskRepository.SaveChangesAsync(); await _visitTaskRepository.SaveChangesAsync();
// 创建任务关联关系
await this.CreateTaskRelated(inDto.OncologyTaskId);
return ResponseOutput.Ok(true); return ResponseOutput.Ok(true);
} }
} }

View File

@ -150,18 +150,23 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
{ {
var visitTaskInfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).FirstNotNullAsync(); var visitTaskInfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).FirstNotNullAsync();
var taskInfoList = await _visitTaskRepository var taskquery = _visitTaskRepository
// 失效的只查看自己 .Where(x => (x.SubjectId == visitTaskInfo.SubjectId && x.TaskState == TaskState.Effect
.WhereIf(visitTaskInfo.TaskState != TaskState.Effect, x => x.Id == visitTaskId) && x.IsAnalysisCreate == visitTaskInfo.IsAnalysisCreate
.Where(x => (x.SubjectId == visitTaskInfo.SubjectId && x.TaskState == TaskState.Effect && x.DoctorUserId == visitTaskInfo.DoctorUserId
&& x.IsAnalysisCreate == visitTaskInfo.IsAnalysisCreate && x.IsSelfAnalysis == visitTaskInfo.IsSelfAnalysis
&&x.DoctorUserId==visitTaskInfo.DoctorUserId && x.VisitTaskNum <= visitTaskInfo.VisitTaskNum
&& x.IsSelfAnalysis == visitTaskInfo.IsSelfAnalysis
&& x.VisitTaskNum<= visitTaskInfo.VisitTaskNum
&& x.ArmEnum == visitTaskInfo.ArmEnum && x.ArmEnum == visitTaskInfo.ArmEnum
&& x.TrialReadingCriterionId == visitTaskInfo.TrialReadingCriterionId && x.TrialReadingCriterionId == visitTaskInfo.TrialReadingCriterionId
&& x.ReadingCategory == ReadingCategory.Visit && x.ReadingTaskState == ReadingTaskState.HaveSigned) || x.Id == visitTaskId && x.ReadingCategory == ReadingCategory.Visit && x.ReadingTaskState == ReadingTaskState.HaveSigned) || x.Id == visitTaskId
).OrderBy(x => x.VisitTaskNum).Select(x => new VisitTaskInfo() );
if(visitTaskInfo.ReadingTaskState==ReadingTaskState.HaveSigned)
{
taskquery = _visitTaskRepository.Where(x => visitTaskInfo.RelatedVisitTaskIdList.Contains(x.Id));
}
var taskInfoList = await taskquery.OrderBy(x => x.VisitTaskNum).Select(x => new VisitTaskInfo()
{ {
BlindName = x.TaskBlindName, BlindName = x.TaskBlindName,
IsBaseLine = x.SourceSubjectVisit.IsBaseLine, IsBaseLine = x.SourceSubjectVisit.IsBaseLine,

View File

@ -175,6 +175,64 @@ namespace IRaCIS.Core.Domain.Models
/// </summary> /// </summary>
public bool IsReadClinicalData { get; set; } = false; public bool IsReadClinicalData { get; set; } = false;
/// <summary>
/// 关联的访视任务ID (当前任务是访视任务的话会有自己)
/// </summary>
public string RelatedVisitTaskIds { get; set; } = "[]";
/// <summary>
/// 关联的访视任务ID (当前任务是访视任务的话会有自己)集合
/// </summary>
[NotMapped]
public List<Guid> RelatedVisitTaskIdList
{
get
{
try
{
return this.RelatedVisitTaskIds.Trim().Split(',').Select(x=>Guid.Parse(x)).ToList();
}
catch (Exception)
{
return new List<Guid>();
}
}
}
/// <summary>
/// 既往任务Id 不包括自己
/// </summary>
public string PastResultTaskIds { get; set; } = "[]";
/// <summary>
/// 既往任务Id 不包括自己集合
/// </summary>
[NotMapped]
public List<Guid> PastResultTaskIdList
{
get
{
try
{
return this.PastResultTaskIds.Trim().Split(',').Select(x => Guid.Parse(x)).ToList();
}
catch (Exception)
{
return new List<Guid>();
}
}
}
#region 裁判任务特有 #region 裁判任务特有
@ -231,6 +289,8 @@ namespace IRaCIS.Core.Domain.Models
//前序任务需要签名 但是未签名 //前序任务需要签名 但是未签名
public bool IsFrontTaskNeedSignButNotSign { get; set; } public bool IsFrontTaskNeedSignButNotSign { get; set; }
[JsonIgnore] [JsonIgnore]
public Trial Trial { get; set; } public Trial Trial { get; set; }

View File

@ -421,6 +421,13 @@ GROUP BY V.TrialId, V.SubjectId, V.SouceReadModuleId , V.TrialReadingCriterion
HAVING Count(*)>2 HAVING Count(*)>2
---------------------ID
update ReadingTableQuestionTrial set ReadingTableQuestionTrial.SystemTableQuestionId= ReadingTableQuestionSystem.Id from ReadingTableQuestionSystem
inner join ReadingTableQuestionTrial on ReadingTableQuestionSystem.QuestionName=ReadingTableQuestionTrial.QuestionName
inner join ReadingQuestionTrial on ReadingTableQuestionTrial.ReadingQuestionId=ReadingQuestionTrial.Id and ReadingQuestionTrial.ReadingQuestionSystemId=ReadingTableQuestionSystem.ReadingQuestionId
where ReadingQuestionTrial.ReadingQuestionSystemId is not null and ReadingTableQuestionTrial.SystemTableQuestionId is null