Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api
commit
833f3d5075
|
@ -6095,6 +6095,139 @@
|
|||
是否是系统数据
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.VisitTaskDto.ReadingCategory">
|
||||
<summary>
|
||||
任务类型
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.VisitTaskDto.AllocateTime">
|
||||
<summary>
|
||||
分配时间
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.VisitTaskDto.TaskUrgentType">
|
||||
<summary>
|
||||
加急类型
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.VisitTaskDto.TaskUrgentRemake">
|
||||
<summary>
|
||||
任务加急类型
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.VisitTaskDto.IsCanEditUrgentState">
|
||||
<summary>
|
||||
是否和编辑加急状态
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.VisitTaskDto.ArmEnum">
|
||||
<summary>
|
||||
0 代表 单重阅片 产生的任务 否则就是双重 任务 1 任务 2
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.VisitTaskDto.TaskAllocationState">
|
||||
<summary>
|
||||
分配状态
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.VisitTaskDto.ReReadingApplyState">
|
||||
<summary>
|
||||
重阅状态
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.VisitTaskDto.IsReReadingCreate">
|
||||
<summary>
|
||||
是否是重阅产生的,方便过滤数据
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.VisitTaskDto.IsPMSetBack">
|
||||
<summary>
|
||||
PM 对该任务进行了回退 影响的任务不设置
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.VisitTaskDto.JudgeResultTaskId">
|
||||
<summary> 裁判结果的任务ID </summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.VisitTaskDto.FirstReadingTime">
|
||||
<summary>
|
||||
首次阅片时间
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.VisitTaskDto.IsGlobalHaveUpdate">
|
||||
<summary>
|
||||
全局是否有更新
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.VisitTaskDto.IsReadClinicalData">
|
||||
<summary>
|
||||
IR是否阅读临床数据
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.VisitTaskDto.RelatedVisitTaskIds">
|
||||
<summary>
|
||||
关联的访视任务ID (当前任务是访视任务的话会有自己)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.VisitTaskDto.RelatedVisitTaskIdList">
|
||||
<summary>
|
||||
关联的访视任务ID (当前任务是访视任务的话会有自己)集合
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.VisitTaskDto.PastResultTaskIds">
|
||||
<summary>
|
||||
既往任务Id 不包括自己
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.VisitTaskDto.PastResultTaskIdList">
|
||||
<summary>
|
||||
既往任务Id 不包括自己集合
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.VisitTaskDto.JudgeResultRemark">
|
||||
<summary>
|
||||
裁判结果的备注
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.VisitTaskDto.JudgeResultImagePath">
|
||||
<summary>
|
||||
裁判结果的图片路径
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.VisitTaskDto.IsAnalysisDiffToOriginalData">
|
||||
<summary>
|
||||
阅片结果是否和原数据有差异
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.VisitTaskDto.IsGroupDiffArm1">
|
||||
<summary>
|
||||
组件一致性和原Arm1是否有差异
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.VisitTaskDto.IsGroupDiffArm2">
|
||||
<summary>
|
||||
组件一致性和原Arm2是否有差异
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.VisitTaskDto.IsAnalysisCreate">
|
||||
<summary>
|
||||
是否是一致性分析产生
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.VisitTaskDto.BeforeConvertedTaskId">
|
||||
<summary>
|
||||
转换之前的任务Id(转化的任务才有该值)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.VisitTaskDto.ConsistentAnalysisOriginalTaskId">
|
||||
<summary>
|
||||
针对产生的一致性任务而言,这个字段存储的是原始任务
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.VisitTaskDto.JudgeResultImagePathList">
|
||||
<summary>
|
||||
裁判结果图片地址
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:IRaCIS.Core.Application.Service.ReadingMedicalReviewService">
|
||||
<summary>
|
||||
阅片医学审核
|
||||
|
|
|
@ -119,22 +119,22 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
var taskInfo = await _visitTaskRepository.Where(x => x.Id == taskId).IgnoreAutoIncludes().AsNoTracking().FirstNotNullAsync();
|
||||
taskInfo.ReadingTaskState = ReadingTaskState.Reading;
|
||||
taskInfo.IsConvertedTask = true;
|
||||
//taskInfo.IsConvertedTask = true;
|
||||
taskInfo.BeforeConvertedTaskId = taskId;
|
||||
taskInfo.Id = NewId.NextGuid();
|
||||
|
||||
await _visitTaskRepository.BatchUpdateNoTrackingAsync(x =>
|
||||
x.IsAnalysisCreate == taskInfo.IsAnalysisCreate
|
||||
&& x.IsSelfAnalysis == taskInfo.IsSelfAnalysis
|
||||
&& x.VisitTaskNum > taskInfo.VisitTaskNum
|
||||
&& x.DoctorUserId == taskInfo.DoctorUserId
|
||||
&& x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId
|
||||
&& x.SubjectId == taskInfo.SubjectId
|
||||
&& x.ArmEnum == taskInfo.ArmEnum &&
|
||||
x.TaskState == TaskState.Effect, x => new VisitTask()
|
||||
{
|
||||
IsConvertedTask = true
|
||||
});
|
||||
//await _visitTaskRepository.BatchUpdateNoTrackingAsync(x =>
|
||||
// x.IsAnalysisCreate == taskInfo.IsAnalysisCreate
|
||||
// && x.IsSelfAnalysis == taskInfo.IsSelfAnalysis
|
||||
// && x.VisitTaskNum > taskInfo.VisitTaskNum
|
||||
// && x.DoctorUserId == taskInfo.DoctorUserId
|
||||
// && x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId
|
||||
// && x.SubjectId == taskInfo.SubjectId
|
||||
// && x.ArmEnum == taskInfo.ArmEnum &&
|
||||
// x.TaskState == TaskState.Effect, x => new VisitTask()
|
||||
// {
|
||||
// IsConvertedTask = true
|
||||
// });
|
||||
|
||||
await _visitTaskRepository.AddAsync(taskInfo);
|
||||
|
||||
|
@ -146,8 +146,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
var taskAnswer = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == taskId && x.ReadingQuestionTrial.Type != "calculation").IgnoreAutoIncludes().AsNoTracking().ToListAsync();
|
||||
|
||||
taskAnswer.ForEach(x =>
|
||||
{
|
||||
taskAnswer.ForEach(x => {
|
||||
|
||||
x.VisitTaskId = taskInfo.Id;
|
||||
|
||||
|
@ -623,38 +622,6 @@ namespace IRaCIS.Core.Application.Service
|
|||
}
|
||||
|
||||
|
||||
//private async Task<bool> IsConvertedTask(Guid trialReadingCriterionId, Guid subjectId, decimal visitTaskNum, Guid? doctorUserId)
|
||||
//{
|
||||
|
||||
// var criterion = await _trialReadingCriterionRepository.FindAsync(trialReadingCriterionId);
|
||||
// if (criterion.CriterionType == CriterionType.IRECIST1Point1)
|
||||
// {
|
||||
|
||||
// if (doctorUserId == null)
|
||||
// {
|
||||
// return false;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// if (await _visitTaskRepository.AnyAsync(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.SubjectId == subjectId && t.DoctorUserId == doctorUserId && t.VisitTaskNum <= visitTaskNum && t.IsConvertedTask && t.TaskState == TaskState.Effect))
|
||||
// {
|
||||
// return true;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// return false;
|
||||
// }
|
||||
//}
|
||||
|
||||
|
||||
public DateTime GetSuggessFinishTime(bool isInOrder, UrgentType urgentType)
|
||||
{
|
||||
|
||||
|
@ -1434,7 +1401,6 @@ namespace IRaCIS.Core.Application.Service
|
|||
{
|
||||
taskUrgent = TaskUrgentType.VisitUrgent;
|
||||
}
|
||||
|
||||
bool isCanEditUrgent = taskUrgent == TaskUrgentType.EnrollmentConfirm || taskUrgent == TaskUrgentType.PDProgress ? false : true;
|
||||
var newTask = await _visitTaskRepository.AddAsync(new VisitTask()
|
||||
{
|
||||
|
@ -1468,18 +1434,6 @@ namespace IRaCIS.Core.Application.Service
|
|||
IsNeedClinicalDataSign = reReadingVisitTask.IsNeedClinicalDataSign,
|
||||
IsClinicalDataSign = reReadingVisitTask.IsClinicalDataSign,
|
||||
|
||||
|
||||
|
||||
//生成的任务分配给原始医生
|
||||
DoctorUserId = reReadingVisitTask.DoctorUserId,
|
||||
TaskAllocationState = TaskAllocationState.Allocated,
|
||||
AllocateTime = DateTime.Now,
|
||||
SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget),
|
||||
|
||||
//IR 重阅的任务这两个字段和之前任务保持一致
|
||||
//IsConvertedTask = await IsConvertedTask(reReadingVisitTask.TrialReadingCriterionId, reReadingVisitTask.SubjectId, reReadingVisitTask.VisitTaskNum, reReadingVisitTask.DoctorUserId),
|
||||
//BeforeConvertedTaskId = reReadingVisitTask.BeforeConvertedTaskId,
|
||||
|
||||
// TaskAllocationState = reReadingVisitTask.TaskAllocationState,
|
||||
// AllocateTime = DateTime.Now,
|
||||
//DoctorUserId = reReadingVisitTask.DoctorUserId,
|
||||
|
@ -1682,7 +1636,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
var task1 = await _visitTaskRepository.AddAsync(new VisitTask()
|
||||
{
|
||||
TrialId = trialId,
|
||||
IsConvertedTask = originalTaskInfo.IsConvertedTask,
|
||||
//IsConvertedTask = originalTaskInfo.IsConvertedTask,
|
||||
SubjectId = item.SubjectId,
|
||||
IsUrgent = originalTaskInfo.IsUrgent,
|
||||
VisitTaskNum = item.VisitNum + ReadingCommon.TaskNumDic[ReadingCategory.Global],
|
||||
|
@ -1734,7 +1688,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
SubjectId = item.SubjectId,
|
||||
IsUrgent = originalTaskInfo.IsUrgent,
|
||||
TaskName = item.ReadingName,
|
||||
IsConvertedTask = originalTaskInfo.IsConvertedTask,
|
||||
//IsConvertedTask = originalTaskInfo.IsConvertedTask,
|
||||
// 原任务是全局任务 加0.03 就好
|
||||
VisitTaskNum = originalTaskInfo.VisitTaskNum + 0.03m,
|
||||
ArmEnum = Arm.TumorArm, //特殊
|
||||
|
|
|
@ -274,6 +274,10 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
|
||||
public bool IsCurrentTask { get; set; }
|
||||
|
||||
public Guid? BeforeConvertedTaskId { get; set; }
|
||||
|
||||
public bool IsConvertedTask { get; set; }
|
||||
|
||||
public List<CrterionDictionaryGroup> CrterionDictionaryGroup { get; set; }
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,322 @@
|
|||
using IRaCIS.Core.Domain.Share;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace IRaCIS.Core.Application.Service.Reading.Dto
|
||||
{
|
||||
public class VisitTaskDto
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string TaskName { get; set; } = string.Empty;
|
||||
public string TaskBlindName { get; set; } = string.Empty;
|
||||
|
||||
|
||||
//任务来源访视Id 方便回更访视读片状态
|
||||
public Guid? SourceSubjectVisitId { get; set; }
|
||||
public Guid? SouceReadModuleId { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 任务类型
|
||||
/// </summary>
|
||||
public ReadingCategory ReadingCategory { get; set; }
|
||||
|
||||
|
||||
|
||||
public Guid CreateUserId { get; set; }
|
||||
public DateTime CreateTime { get; set; }
|
||||
public DateTime UpdateTime { get; set; }
|
||||
public Guid UpdateUserId { get; set; }
|
||||
public Guid TrialId { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 分配时间
|
||||
/// </summary>
|
||||
public DateTime? AllocateTime { get; set; }
|
||||
|
||||
public Guid SubjectId { get; set; }
|
||||
|
||||
|
||||
public int Code { get; set; }
|
||||
|
||||
public string TaskCode { get; set; } = string.Empty;
|
||||
|
||||
public bool IsUrgent { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 加急类型
|
||||
/// </summary>
|
||||
public TaskUrgentType? TaskUrgentType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 任务加急类型
|
||||
/// </summary>
|
||||
public string TaskUrgentRemake { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 是否和编辑加急状态
|
||||
/// </summary>
|
||||
public bool IsCanEditUrgentState { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// 0 代表 单重阅片 产生的任务 否则就是双重 任务 1 任务 2
|
||||
/// </summary>
|
||||
[Required]
|
||||
public Arm ArmEnum { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 分配状态
|
||||
/// </summary>
|
||||
public TaskAllocationState TaskAllocationState { get; set; }
|
||||
|
||||
|
||||
public TaskState TaskState { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 重阅状态
|
||||
/// </summary>
|
||||
public ReReadingApplyState ReReadingApplyState { get; set; }
|
||||
|
||||
public Guid? DoctorUserId { get; set; }
|
||||
|
||||
|
||||
public Guid TrialReadingCriterionId { get; set; }
|
||||
|
||||
//裁判任务的Id
|
||||
public Guid? JudgeVisitTaskId { get; set; }
|
||||
|
||||
//任务阅片状态
|
||||
public ReadingTaskState ReadingTaskState { get; set; }
|
||||
|
||||
//签名时间
|
||||
public DateTime? SignTime { get; set; }
|
||||
|
||||
public DateTime? SuggesteFinishedTime { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 是否是重阅产生的,方便过滤数据
|
||||
/// </summary>
|
||||
public bool IsReReadingCreate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// PM 对该任务进行了回退 影响的任务不设置
|
||||
/// </summary>
|
||||
public bool IsPMSetBack { get; set; }
|
||||
|
||||
|
||||
/// <summary> 裁判结果的任务ID </summary>
|
||||
public Guid? JudgeResultTaskId { get; set; }
|
||||
|
||||
//随访任务号 取访视的号 计划外是 访视+0.1 裁判任务在访视任务上+0.002 全局任务在截止访视号上+0.03 肿瘤待定
|
||||
public decimal VisitTaskNum { get; set; }
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 首次阅片时间
|
||||
/// </summary>
|
||||
public DateTime? FirstReadingTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 全局是否有更新
|
||||
/// </summary>
|
||||
public bool? IsGlobalHaveUpdate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// IR是否阅读临床数据
|
||||
/// </summary>
|
||||
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 JsonConvert.DeserializeObject<List<Guid>>(this.RelatedVisitTaskIds);
|
||||
}
|
||||
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 JsonConvert.DeserializeObject<List<Guid>>(this.PastResultTaskIds);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
return new List<Guid>();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#region 裁判任务特有
|
||||
|
||||
/// <summary>
|
||||
/// 裁判结果的备注
|
||||
/// </summary>
|
||||
public string JudgeResultRemark { get; set; } = string.Empty;
|
||||
/// <summary>
|
||||
/// 裁判结果的图片路径
|
||||
/// </summary>
|
||||
public string JudgeResultImagePath { get; set; } = string.Empty;
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region 一致性分析的任务特有数据
|
||||
|
||||
/// <summary>
|
||||
/// 阅片结果是否和原数据有差异
|
||||
/// </summary>
|
||||
public bool? IsAnalysisDiffToOriginalData { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 组件一致性和原Arm1是否有差异
|
||||
/// </summary>
|
||||
public bool? IsGroupDiffArm1 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 组件一致性和原Arm2是否有差异
|
||||
/// </summary>
|
||||
public bool? IsGroupDiffArm2 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否是一致性分析产生
|
||||
/// </summary>
|
||||
public bool IsAnalysisCreate { get; set; }
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 转换之前的任务Id(转化的任务才有该值)
|
||||
/// </summary>
|
||||
public Guid? BeforeConvertedTaskId { get; set; }
|
||||
|
||||
|
||||
// [Projectable]
|
||||
|
||||
public bool IsConvertedTask { get; set; }
|
||||
|
||||
[NotMapped]
|
||||
public List<CrterionDictionaryGroup> CrterionDictionaryGroup
|
||||
{
|
||||
get
|
||||
{
|
||||
|
||||
//try
|
||||
//{
|
||||
// if (this.IsConvertedTask)
|
||||
// {
|
||||
// return new List<CrterionDictionaryGroup>() { Share.CrterionDictionaryGroup.General, Share.CrterionDictionaryGroup.Converted };
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// return new List<CrterionDictionaryGroup>() { Share.CrterionDictionaryGroup.General, Share.CrterionDictionaryGroup.BeforeConvert };
|
||||
// }
|
||||
//}
|
||||
//catch (Exception)
|
||||
//{
|
||||
|
||||
return new List<CrterionDictionaryGroup>();
|
||||
//}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public bool? IsSelfAnalysis { get; set; }
|
||||
|
||||
public string BlindSubjectCode { get; set; } = string.Empty;
|
||||
public string BlindTrialSiteCode { get; set; } = string.Empty;
|
||||
|
||||
//一致性分析规则Id 用于最后统计
|
||||
//public Guid? TaskConsistentRuleId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 针对产生的一致性任务而言,这个字段存储的是原始任务
|
||||
/// </summary>
|
||||
public Guid? ConsistentAnalysisOriginalTaskId { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
//临床数据
|
||||
|
||||
public bool IsNeedClinicalDataSign { get; set; }
|
||||
|
||||
public bool IsClinicalDataSign { get; set; }
|
||||
|
||||
//前序任务需要签名 但是未签名
|
||||
public bool IsFrontTaskNeedSignButNotSign { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 裁判结果图片地址
|
||||
/// </summary>
|
||||
[NotMapped]
|
||||
public List<string> JudgeResultImagePathList
|
||||
{
|
||||
get
|
||||
{
|
||||
|
||||
try
|
||||
{
|
||||
return this.JudgeResultImagePath.Trim().Split(',').ToList();
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
return new List<string>();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -640,7 +640,7 @@ namespace IRaCIS.Application.Services
|
|||
{
|
||||
answers = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == visitTaskId).ToListAsync();
|
||||
|
||||
var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).FirstNotNullAsync();
|
||||
var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).ProjectTo<VisitTaskDto>(_mapper.ConfigurationProvider).FirstNotNullAsync();
|
||||
questions.ForEach(x =>
|
||||
{
|
||||
x.CrterionDictionaryGroup = taskinfo.CrterionDictionaryGroup;
|
||||
|
@ -726,7 +726,7 @@ namespace IRaCIS.Application.Services
|
|||
.ToListAsync();
|
||||
|
||||
|
||||
var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync();
|
||||
var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).ProjectTo<VisitTaskDto>(_mapper.ConfigurationProvider).FirstNotNullAsync();
|
||||
|
||||
if (taskInfo.IsConvertedTask &&taskInfo.BeforeConvertedTaskId!=null)
|
||||
{
|
||||
|
@ -865,10 +865,10 @@ namespace IRaCIS.Application.Services
|
|||
isEn_Us = _userInfo.IsEn_Us
|
||||
|
||||
}).OrderBy(x => x.ShowOrder).ToListAsync();
|
||||
var taskInfo = new VisitTask();
|
||||
var taskInfo = new VisitTaskDto();
|
||||
if (inDto.TaskId != null)
|
||||
{
|
||||
taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.TaskId).FirstNotNullAsync();
|
||||
taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.TaskId).ProjectTo<VisitTaskDto>(_mapper.ConfigurationProvider).FirstNotNullAsync();
|
||||
|
||||
qusetionList.ForEach(x =>
|
||||
{
|
||||
|
@ -945,7 +945,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
if (inDto.TaskId != null)
|
||||
{
|
||||
taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.TaskId).FirstNotNullAsync();
|
||||
taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.TaskId).ProjectTo<VisitTaskDto>(_mapper.ConfigurationProvider).FirstNotNullAsync();
|
||||
// 取基线
|
||||
var baseLineVisitId = await _subjectVisitRepository.Where(x => x.SubjectId == taskInfo.SubjectId && x.IsBaseLine).Select(x => x.Id).FirstNotNullAsync();
|
||||
|
||||
|
@ -978,17 +978,7 @@ namespace IRaCIS.Application.Services
|
|||
lastTaskTableAnswer= await _readingTableQuestionAnswerRepository.Where(x => x.VisitTaskId == laskTaskId).Include(x => x.ReadingTableQuestionTrial).ToListAsync();
|
||||
|
||||
|
||||
if (taskInfo.IsConvertedTask &&
|
||||
!(await _visitTaskRepository.AnyAsync(x => x.IsAnalysisCreate == taskInfo.IsAnalysisCreate
|
||||
&& x.IsSelfAnalysis == taskInfo.IsSelfAnalysis
|
||||
&& x.VisitTaskNum < taskInfo.VisitTaskNum
|
||||
&& x.DoctorUserId == taskInfo.DoctorUserId
|
||||
&& x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId
|
||||
&& !x.IsConvertedTask
|
||||
&& x.SubjectId == taskInfo.SubjectId
|
||||
&& x.ArmEnum == taskInfo.ArmEnum &&
|
||||
x.TaskState == TaskState.Effect))
|
||||
)
|
||||
if (taskInfo.BeforeConvertedTaskId!=null )
|
||||
{
|
||||
isFirstChangeTask = true;
|
||||
|
||||
|
@ -2248,7 +2238,7 @@ namespace IRaCIS.Application.Services
|
|||
});
|
||||
await _visitTaskRepository.SaveChangesAsync();
|
||||
|
||||
var visitTaskInfo = await _visitTaskRepository.Where(x => x.Id == task.VisitTaskId).FirstNotNullAsync();
|
||||
var visitTaskInfo = await _visitTaskRepository.Where(x => x.Id == task.VisitTaskId).ProjectTo<VisitTaskDto>(_mapper.ConfigurationProvider).FirstNotNullAsync();
|
||||
|
||||
task.SubjectCode = visitTaskInfo.BlindSubjectCode.IsNullOrEmpty() ? task.SubjectCode : visitTaskInfo.BlindSubjectCode;
|
||||
|
||||
|
@ -2378,13 +2368,14 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).Include(x=>x.TrialReadingCriterion).FirstNotNullAsync();
|
||||
|
||||
var isConvertedTask=await _visitTaskRepository.Where(x => x.Id == visitTaskId).Select(x=>x.IsConvertedTask).FirstNotNullAsync();
|
||||
switch (taskinfo.TrialReadingCriterion.CriterionType)
|
||||
{
|
||||
case CriterionType.IRECIST1Point1:
|
||||
|
||||
|
||||
|
||||
if (!taskinfo.IsConvertedTask &&
|
||||
if (!isConvertedTask &&
|
||||
(await _readingTaskQuestionAnswerRepository.AnyAsync(x => x.VisitTaskId == visitTaskId
|
||||
&& x.ReadingQuestionTrial.QuestionType == QuestionType.Tumor && x.Answer==(((int)OverallAssessment.PD)).ToString()))
|
||||
)
|
||||
|
|
|
@ -17,6 +17,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
//是否英文环境
|
||||
var isEn_Us=false;
|
||||
|
||||
CreateMap<VisitTask, VisitTaskDto>();
|
||||
CreateMap<ShortcutKey, DefaultShortcutKeyView>();
|
||||
|
||||
CreateMap<ReadingPeriodSetAddOrEdit, ReadingPeriodSet>();
|
||||
|
|
|
@ -179,6 +179,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
TaskName = x.TaskName,
|
||||
LatestScanDate= x.SourceSubjectVisit!=null?x.SourceSubjectVisit.LatestScanDate : null,
|
||||
VisitTaskNum = x.VisitTaskNum,
|
||||
IsConvertedTask=x.IsConvertedTask,
|
||||
BeforeConvertedTaskId=x.BeforeConvertedTaskId,
|
||||
IsCurrentTask = x.Id == visitTaskId,
|
||||
|
||||
}).ToListAsync();
|
||||
|
|
|
@ -723,7 +723,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
{
|
||||
var visitTaskId = inDto.VisitTaskId;
|
||||
|
||||
var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).FirstNotNullAsync();
|
||||
var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).ProjectTo<VisitTaskDto>(_mapper.ConfigurationProvider).FirstNotNullAsync();
|
||||
|
||||
var baseLineVisitId = await _subjectVisitRepository.Where(x => x.SubjectId == taskinfo.SubjectId && x.IsBaseLine).Select(x => x.Id).FirstOrDefaultAsync();
|
||||
|
||||
|
|
|
@ -113,7 +113,8 @@ namespace IRaCIS.Core.Application
|
|||
|
||||
if (existsJudge && trialCriterion.IsArbitrationReading)
|
||||
{
|
||||
throw new BusinessValidationFailedException("有裁判问题未配置产生裁判阅片任务的条件,操作失败!");
|
||||
//---有裁判问题未配置产生裁判阅片任务的条件,操作失败!
|
||||
throw new BusinessValidationFailedException(_localizer["TrialConfig_JudgeTaskFail"]);
|
||||
}
|
||||
|
||||
return ResponseOutput.Ok(true);
|
||||
|
@ -153,7 +154,8 @@ namespace IRaCIS.Core.Application
|
|||
|
||||
if (existsJudge && trialCriterion.IsArbitrationReading)
|
||||
{
|
||||
throw new BusinessValidationFailedException("有裁判问题未配置产生裁判阅片任务的条件,操作失败!");
|
||||
//---有裁判问题未配置产生裁判阅片任务的条件,操作失败!
|
||||
throw new BusinessValidationFailedException(_localizer["TrialConfig_JudgeTaskFail"]);
|
||||
}
|
||||
|
||||
await _readingQuestionCriterionTrialRepository.UpdatePartialFromQueryAsync(x => x.Id == inDto.TrialReadingCriterionId, x => new ReadingQuestionCriterionTrial()
|
||||
|
@ -504,7 +506,8 @@ namespace IRaCIS.Core.Application
|
|||
|
||||
if (count == 0)
|
||||
{
|
||||
throw new BusinessValidationFailedException("当前标准下未配置问题");
|
||||
//---当前标准下未配置问题
|
||||
throw new BusinessValidationFailedException(_localizer["TrialConfig_StdConfigMissing"]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -665,7 +668,8 @@ namespace IRaCIS.Core.Application
|
|||
|
||||
if (signRawText == null)
|
||||
{
|
||||
return ResponseOutput.NotOk("该操作需要电子签名确认,但未在系统中找到该场景的签名模板。");
|
||||
//---该操作需要电子签名确认,但未在系统中找到该场景的签名模板。
|
||||
return ResponseOutput.NotOk(_localizer["TrialConfig_SignTemplateMissing"]);
|
||||
}
|
||||
|
||||
return ResponseOutput.Ok(new
|
||||
|
@ -683,7 +687,8 @@ namespace IRaCIS.Core.Application
|
|||
{
|
||||
if (!await _trialRepository.AnyAsync(t => t.Id == trialId && (t.TrialStatusStr == StaticData.TrialState.TrialInitializing || t.TrialStatusStr == StaticData.TrialState.TrialOngoing)))
|
||||
{
|
||||
throw new BusinessValidationFailedException("该项目已结束或停止,不允许修改配置。");
|
||||
//---该项目已结束或停止,不允许修改配置。
|
||||
throw new BusinessValidationFailedException(_localizer["TrialConfig_ProjectEnded"]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -711,23 +716,27 @@ namespace IRaCIS.Core.Application
|
|||
{
|
||||
if (showOrderList.Count == 0)
|
||||
{
|
||||
throw new BusinessValidationFailedException("当前未添加影像质控审核问题。请先添加影像质控审核问题,再进行确认。");
|
||||
//---当前未添加影像质控审核问题。请先添加影像质控审核问题,再进行确认。
|
||||
throw new BusinessValidationFailedException(_localizer["TrialConfig_NoImageAuditQuestion"]);
|
||||
}
|
||||
}
|
||||
|
||||
if (showOrderList.Count() != showOrderList.Select(t => t.ShowOrder).Distinct().Count())
|
||||
{
|
||||
throw new BusinessValidationFailedException("影像质控审核问题显示序号不能重复。");
|
||||
//---影像质控审核问题显示序号不能重复。
|
||||
throw new BusinessValidationFailedException(_localizer["TrialConfig_DuplicateAuditQuestionId"]);
|
||||
}
|
||||
|
||||
if (showOrderList.Where(t => t.ParentShowOrder != null).Any(t => t.ParentShowOrder > t.ShowOrder))
|
||||
{
|
||||
throw new BusinessValidationFailedException("父问题的显示序号要比子问题的显示序号小,请确认。");
|
||||
//---父问题的显示序号要比子问题的显示序号小,请确认。
|
||||
throw new BusinessValidationFailedException(_localizer["TrialConfig_InvalidParentQuestionId"]);
|
||||
}
|
||||
|
||||
if (await _trialRepository.AnyAsync(t => t.Id == signConfirmDTO.TrialId && t.QCQuestionConfirmedUserId != null && t.QCQuestionConfirmedUserId != _userInfo.Id))
|
||||
{
|
||||
throw new BusinessValidationFailedException("影像质控审核问题已被其他人员确认,不允许再次确认。");
|
||||
//---影像质控审核问题已被其他人员确认,不允许再次确认。
|
||||
throw new BusinessValidationFailedException(_localizer["TrialConfig_AuditQuestionConfirmed"]);
|
||||
}
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
|
@ -777,23 +786,27 @@ namespace IRaCIS.Core.Application
|
|||
{
|
||||
if (showOrderList.Count == 0)
|
||||
{
|
||||
throw new BusinessValidationFailedException("当前未添加影像质控审核问题。请先添加影像质控审核问题,再进行确认。");
|
||||
//---当前未添加影像质控审核问题。请先添加影像质控审核问题,再进行确认。
|
||||
throw new BusinessValidationFailedException(_localizer["TrialConfig_NoImageAuditQuestion"]);
|
||||
}
|
||||
}
|
||||
|
||||
if (showOrderList.Count() != showOrderList.Select(t => t.ShowOrder).Distinct().Count())
|
||||
{
|
||||
throw new BusinessValidationFailedException("影像质控审核问题显示序号不能重复。");
|
||||
//---影像质控审核问题显示序号不能重复。
|
||||
throw new BusinessValidationFailedException(_localizer["TrialConfig_DuplicateAuditQuestionId"]);
|
||||
}
|
||||
|
||||
if (showOrderList.Where(t => t.ParentShowOrder != null).Any(t => t.ParentShowOrder > t.ShowOrder))
|
||||
{
|
||||
throw new BusinessValidationFailedException("父问题的显示序号要比子问题的显示序号小,请确认。");
|
||||
//---父问题的显示序号要比子问题的显示序号小,请确认。
|
||||
throw new BusinessValidationFailedException(_localizer["TrialConfig_InvalidParentQuestionId"]);
|
||||
}
|
||||
|
||||
if (await _trialRepository.AnyAsync(t => t.Id == signConfirmDTO.TrialId && t.QCQuestionConfirmedUserId != null && t.QCQuestionConfirmedUserId != _userInfo.Id))
|
||||
{
|
||||
throw new BusinessValidationFailedException("影像质控审核问题已被其他人员确认,不允许再次确认。");
|
||||
//---影像质控审核问题已被其他人员确认,不允许再次确认。
|
||||
throw new BusinessValidationFailedException(_localizer["TrialConfig_AuditQuestionConfirmed"]);
|
||||
}
|
||||
|
||||
await _trialQCQuestionRepository.UpdatePartialFromQueryAsync(t => t.TrialId == signConfirmDTO.TrialId, x => new TrialQCQuestion
|
||||
|
@ -847,7 +860,8 @@ namespace IRaCIS.Core.Application
|
|||
{
|
||||
if (!await _trialRepository.Where(t => t.Id == trialConfig.TrialId).IgnoreQueryFilters().AnyAsync(t => t.TrialStatusStr == StaticData.TrialState.TrialInitializing))
|
||||
{
|
||||
return ResponseOutput.NotOk("该项目当前状态不是初始化,不允许进行该操作。");
|
||||
//---该项目当前状态不是初始化,不允许进行该操作。
|
||||
return ResponseOutput.NotOk(_localizer["TrialConfig_ProjectNotInitialized"]);
|
||||
}
|
||||
|
||||
|
||||
|
@ -951,7 +965,8 @@ namespace IRaCIS.Core.Application
|
|||
var canOPt = await _trialRepository.AnyAsync(trial =>
|
||||
trial.Id == trialId && trial.IsTrialBasicLogicConfirmed && trial.IsTrialProcessConfirmed &&
|
||||
trial.IsTrialUrgentConfirmed && trial.VisitPlanConfirmed);
|
||||
return ResponseOutput.Ok(canOPt, msg: canOPt ? "" : "该项目的项目配置(基础配置、流程配置、加急配置) 、访视管理,有配置未确认,不能设置项目状态为启动。");
|
||||
//---该项目的项目配置(基础配置、流程配置、加急配置) 、访视管理,有配置未确认,不能设置项目状态为启动。
|
||||
return ResponseOutput.Ok(canOPt, msg: canOPt ? "" : _localizer["TrialConfig_UnconfirmedConfiguration"]);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -978,13 +993,15 @@ namespace IRaCIS.Core.Application
|
|||
}
|
||||
else
|
||||
{
|
||||
return ResponseOutput.NotOk("无法变更项目状态。该项目的项目配置、访视管理中,有未确认项");
|
||||
//---无法变更项目状态。该项目的项目配置、访视管理中,有未确认项
|
||||
return ResponseOutput.NotOk(_localizer["TrialConfig_UnconfirmedUNACKD"]);
|
||||
}
|
||||
}
|
||||
|
||||
if ((trialStatusStr == StaticData.TrialState.TrialStopped || trialStatusStr == StaticData.TrialState.TrialCompleted) && trial.TrialStatusStr != StaticData.TrialState.TrialOngoing)
|
||||
{
|
||||
return ResponseOutput.NotOk("项目没有进入启动状态,不能设置为停止或完成状态");
|
||||
//---项目没有进入启动状态,不能设置为停止或完成状态
|
||||
return ResponseOutput.NotOk(_localizer["TrialConfig_ProjectNotStarted"]);
|
||||
}
|
||||
|
||||
//if (trialStatusStr != StaticData.TrialState.TrialOngoing)
|
||||
|
|
|
@ -293,17 +293,28 @@ namespace IRaCIS.Core.Domain.Models
|
|||
public bool IsAnalysisCreate { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 是否是转变的任务(转为IRECIST)
|
||||
/// </summary>
|
||||
public bool IsConvertedTask { get; set; } = false;
|
||||
///// <summary>
|
||||
///// 是否是转变的任务(转为IRECIST)
|
||||
///// </summary>
|
||||
//public bool IsConvertedTask { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// 转换之前的任务Id
|
||||
/// 转换之前的任务Id(转化的任务才有该值)
|
||||
/// </summary>
|
||||
public Guid? BeforeConvertedTaskId { get; set; }
|
||||
|
||||
[NotMapped]
|
||||
|
||||
[Projectable]
|
||||
|
||||
public bool IsConvertedTask => Subject.SubjectVisitTaskList.Where(t => (t.TrialReadingCriterionId == TrialReadingCriterionId
|
||||
&& t.DoctorUserId == DoctorUserId && t.BeforeConvertedTaskId != null
|
||||
&& t.TaskState == TaskState.Effect &&
|
||||
t.VisitTaskNum < VisitTaskNum
|
||||
&& t.IsSelfAnalysis == IsSelfAnalysis
|
||||
&& t.ArmEnum == ArmEnum) || BeforeConvertedTaskId != null
|
||||
).Any();
|
||||
|
||||
//[NotMapped]
|
||||
public List<CrterionDictionaryGroup> CrterionDictionaryGroup
|
||||
{
|
||||
get
|
||||
|
@ -311,7 +322,16 @@ namespace IRaCIS.Core.Domain.Models
|
|||
|
||||
try
|
||||
{
|
||||
if (this.IsConvertedTask)
|
||||
|
||||
var isConverted= Subject.SubjectVisitTaskList.Where(t => (t.TrialReadingCriterionId == TrialReadingCriterionId
|
||||
&& t.DoctorUserId == DoctorUserId && t.BeforeConvertedTaskId != null
|
||||
&& t.TaskState == TaskState.Effect &&
|
||||
t.VisitTaskNum < VisitTaskNum
|
||||
&& t.IsSelfAnalysis == IsSelfAnalysis
|
||||
&& t.ArmEnum == ArmEnum) || BeforeConvertedTaskId != null
|
||||
).Any();
|
||||
|
||||
if (isConverted)
|
||||
{
|
||||
return new List<CrterionDictionaryGroup>() { Share.CrterionDictionaryGroup.General, Share.CrterionDictionaryGroup.Converted };
|
||||
}
|
||||
|
@ -361,15 +381,7 @@ namespace IRaCIS.Core.Domain.Models
|
|||
public Trial Trial { get; set; }
|
||||
|
||||
|
||||
[Projectable]
|
||||
|
||||
public bool IsAfterConvertedTask=>Subject.SubjectVisitTaskList.Where(t=>t.TrialReadingCriterionId == TrialReadingCriterionId
|
||||
&& t.DoctorUserId==DoctorUserId && t.IsConvertedTask
|
||||
&& t.TaskState==TaskState.Effect &&
|
||||
t.VisitTaskNum<VisitTaskNum
|
||||
&& t.IsSelfAnalysis==IsSelfAnalysis
|
||||
&& t.ArmEnum==ArmEnum
|
||||
).Any();
|
||||
|
||||
|
||||
//影像质量 等等第一层级问题答案
|
||||
|
|
Loading…
Reference in New Issue