diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index 4e69e0b8f..d815c27fd 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -6095,6 +6095,139 @@
是否是系统数据
+
+
+ 任务类型
+
+
+
+
+ 分配时间
+
+
+
+
+ 加急类型
+
+
+
+
+ 任务加急类型
+
+
+
+
+ 是否和编辑加急状态
+
+
+
+
+ 0 代表 单重阅片 产生的任务 否则就是双重 任务 1 任务 2
+
+
+
+
+ 分配状态
+
+
+
+
+ 重阅状态
+
+
+
+
+ 是否是重阅产生的,方便过滤数据
+
+
+
+
+ PM 对该任务进行了回退 影响的任务不设置
+
+
+
+ 裁判结果的任务ID
+
+
+
+ 首次阅片时间
+
+
+
+
+ 全局是否有更新
+
+
+
+
+ IR是否阅读临床数据
+
+
+
+
+ 关联的访视任务ID (当前任务是访视任务的话会有自己)
+
+
+
+
+ 关联的访视任务ID (当前任务是访视任务的话会有自己)集合
+
+
+
+
+ 既往任务Id 不包括自己
+
+
+
+
+ 既往任务Id 不包括自己集合
+
+
+
+
+ 裁判结果的备注
+
+
+
+
+ 裁判结果的图片路径
+
+
+
+
+ 阅片结果是否和原数据有差异
+
+
+
+
+ 组件一致性和原Arm1是否有差异
+
+
+
+
+ 组件一致性和原Arm2是否有差异
+
+
+
+
+ 是否是一致性分析产生
+
+
+
+
+ 转换之前的任务Id(转化的任务才有该值)
+
+
+
+
+ 针对产生的一致性任务而言,这个字段存储的是原始任务
+
+
+
+
+ 裁判结果图片地址
+
+
阅片医学审核
diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs
index 356d0c5b3..49b3858d4 100644
--- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs
+++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs
@@ -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 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, //特殊
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs
index 4932bb811..cb8db141f 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs
@@ -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 { get; set; }
}
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/VisitTaskDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/VisitTaskDto.cs
new file mode 100644
index 000000000..6bb245d0b
--- /dev/null
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/VisitTaskDto.cs
@@ -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; }
+
+
+ ///
+ /// 任务类型
+ ///
+ 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; }
+
+
+ ///
+ /// 分配时间
+ ///
+ 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; }
+
+ ///
+ /// 加急类型
+ ///
+ public TaskUrgentType? TaskUrgentType { get; set; }
+
+ ///
+ /// 任务加急类型
+ ///
+ public string TaskUrgentRemake { get; set; } = string.Empty;
+
+ ///
+ /// 是否和编辑加急状态
+ ///
+ public bool IsCanEditUrgentState { get; set; } = true;
+
+ ///
+ /// 0 代表 单重阅片 产生的任务 否则就是双重 任务 1 任务 2
+ ///
+ [Required]
+ public Arm ArmEnum { get; set; }
+
+ ///
+ /// 分配状态
+ ///
+ public TaskAllocationState TaskAllocationState { get; set; }
+
+
+ public TaskState TaskState { get; set; }
+
+
+ ///
+ /// 重阅状态
+ ///
+ 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; }
+
+
+ ///
+ /// 是否是重阅产生的,方便过滤数据
+ ///
+ public bool IsReReadingCreate { get; set; }
+
+ ///
+ /// PM 对该任务进行了回退 影响的任务不设置
+ ///
+ public bool IsPMSetBack { get; set; }
+
+
+ /// 裁判结果的任务ID
+ public Guid? JudgeResultTaskId { get; set; }
+
+ //随访任务号 取访视的号 计划外是 访视+0.1 裁判任务在访视任务上+0.002 全局任务在截止访视号上+0.03 肿瘤待定
+ public decimal VisitTaskNum { get; set; }
+
+
+
+ ///
+ /// 首次阅片时间
+ ///
+ public DateTime? FirstReadingTime { get; set; }
+
+ ///
+ /// 全局是否有更新
+ ///
+ public bool? IsGlobalHaveUpdate { get; set; }
+
+ ///
+ /// IR是否阅读临床数据
+ ///
+ public bool IsReadClinicalData { get; set; } = false;
+
+ ///
+ /// 关联的访视任务ID (当前任务是访视任务的话会有自己)
+ ///
+ public string RelatedVisitTaskIds { get; set; } = "[]";
+
+ ///
+ /// 关联的访视任务ID (当前任务是访视任务的话会有自己)集合
+ ///
+ [NotMapped]
+ public List RelatedVisitTaskIdList
+ {
+ get
+ {
+
+ try
+ {
+
+ return JsonConvert.DeserializeObject>(this.RelatedVisitTaskIds);
+ }
+ catch (Exception)
+ {
+
+ return new List();
+ }
+
+ }
+ }
+
+ ///
+ /// 既往任务Id 不包括自己
+ ///
+
+ public string PastResultTaskIds { get; set; } = "[]";
+
+
+
+ ///
+ /// 既往任务Id 不包括自己集合
+ ///
+ [NotMapped]
+ public List PastResultTaskIdList
+ {
+ get
+ {
+
+ try
+ {
+ return JsonConvert.DeserializeObject>(this.PastResultTaskIds);
+ }
+ catch (Exception)
+ {
+
+ return new List();
+ }
+
+ }
+ }
+
+ #region 裁判任务特有
+
+ ///
+ /// 裁判结果的备注
+ ///
+ public string JudgeResultRemark { get; set; } = string.Empty;
+ ///
+ /// 裁判结果的图片路径
+ ///
+ public string JudgeResultImagePath { get; set; } = string.Empty;
+
+ #endregion
+
+
+ #region 一致性分析的任务特有数据
+
+ ///
+ /// 阅片结果是否和原数据有差异
+ ///
+ public bool? IsAnalysisDiffToOriginalData { get; set; }
+
+ ///
+ /// 组件一致性和原Arm1是否有差异
+ ///
+ public bool? IsGroupDiffArm1 { get; set; }
+
+ ///
+ /// 组件一致性和原Arm2是否有差异
+ ///
+ public bool? IsGroupDiffArm2 { get; set; }
+
+ ///
+ /// 是否是一致性分析产生
+ ///
+ public bool IsAnalysisCreate { get; set; }
+
+
+
+
+ ///
+ /// 转换之前的任务Id(转化的任务才有该值)
+ ///
+ public Guid? BeforeConvertedTaskId { get; set; }
+
+
+ // [Projectable]
+
+ public bool IsConvertedTask { get; set; }
+
+ [NotMapped]
+ public List CrterionDictionaryGroup
+ {
+ get
+ {
+
+ //try
+ //{
+ // if (this.IsConvertedTask)
+ // {
+ // return new List() { Share.CrterionDictionaryGroup.General, Share.CrterionDictionaryGroup.Converted };
+ // }
+ // else
+ // {
+ // return new List() { Share.CrterionDictionaryGroup.General, Share.CrterionDictionaryGroup.BeforeConvert };
+ // }
+ //}
+ //catch (Exception)
+ //{
+
+ return new List();
+ //}
+
+ }
+ }
+
+
+
+ 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; }
+
+ ///
+ /// 针对产生的一致性任务而言,这个字段存储的是原始任务
+ ///
+ public Guid? ConsistentAnalysisOriginalTaskId { get; set; }
+
+ #endregion
+
+
+ //临床数据
+
+ public bool IsNeedClinicalDataSign { get; set; }
+
+ public bool IsClinicalDataSign { get; set; }
+
+ //前序任务需要签名 但是未签名
+ public bool IsFrontTaskNeedSignButNotSign { get; set; }
+
+
+ ///
+ /// 裁判结果图片地址
+ ///
+ [NotMapped]
+ public List JudgeResultImagePathList
+ {
+ get
+ {
+
+ try
+ {
+ return this.JudgeResultImagePath.Trim().Split(',').ToList();
+ }
+ catch (Exception)
+ {
+
+ return new List();
+ }
+
+ }
+ }
+ }
+}
diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
index e791fd1d2..438621ad7 100644
--- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
@@ -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(_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(_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(_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(_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(_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()))
)
diff --git a/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs b/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs
index 86d716f30..0bb8cad44 100644
--- a/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs
+++ b/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs
@@ -17,6 +17,7 @@ namespace IRaCIS.Core.Application.Service
//是否英文环境
var isEn_Us=false;
+ CreateMap();
CreateMap();
CreateMap();
diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/General/GeneralCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/General/GeneralCalculateService.cs
index 733d2435a..ac5fc0623 100644
--- a/IRaCIS.Core.Application/Service/ReadingCalculate/General/GeneralCalculateService.cs
+++ b/IRaCIS.Core.Application/Service/ReadingCalculate/General/GeneralCalculateService.cs
@@ -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();
diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs
index 2828e69ec..756f1d7b1 100644
--- a/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs
+++ b/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs
@@ -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(_mapper.ConfigurationProvider).FirstNotNullAsync();
var baseLineVisitId = await _subjectVisitRepository.Where(x => x.SubjectId == taskinfo.SubjectId && x.IsBaseLine).Select(x => x.Id).FirstOrDefaultAsync();
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs
index 4711debda..9259b46b9 100644
--- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs
@@ -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"]);
}
///
@@ -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)
diff --git a/IRaCIS.Core.Domain/Allocation/VisitTask.cs b/IRaCIS.Core.Domain/Allocation/VisitTask.cs
index d23b1fd75..55f7ac0a8 100644
--- a/IRaCIS.Core.Domain/Allocation/VisitTask.cs
+++ b/IRaCIS.Core.Domain/Allocation/VisitTask.cs
@@ -293,17 +293,28 @@ namespace IRaCIS.Core.Domain.Models
public bool IsAnalysisCreate { get; set; }
- ///
- /// 是否是转变的任务(转为IRECIST)
- ///
- public bool IsConvertedTask { get; set; } = false;
+ /////
+ ///// 是否是转变的任务(转为IRECIST)
+ /////
+ //public bool IsConvertedTask { get; set; } = false;
///
- /// 转换之前的任务Id
+ /// 转换之前的任务Id(转化的任务才有该值)
///
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
{
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() { 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