Uat_Study
he 2022-10-09 17:03:09 +08:00
parent 0389b95200
commit b9e0c3369d
11 changed files with 127 additions and 54 deletions

View File

@ -117,6 +117,9 @@ namespace IRaCIS.Core.Application.ViewModel
{ {
[NotDefault] [NotDefault]
public Guid TrialId { get; set; } public Guid TrialId { get; set; }
[NotDefault]
public Guid TrialReadingCriterionId { get; set; }
} }
public class TrialQuestion public class TrialQuestion

View File

@ -255,7 +255,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public class SetTrialJudgyInfoInDto : GetTrialJudgyInfoOutDto public class SetTrialJudgyInfoInDto : GetTrialJudgyInfoOutDto
{ {
public Guid TrialReadingCriterionId { get; set; }
} }
public class GetTrialJudgyInfoOutDto public class GetTrialJudgyInfoOutDto
@ -323,6 +323,9 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
{ {
[NotDefault] [NotDefault]
public Guid TrialId { get; set; } public Guid TrialId { get; set; }
[NotDefault]
public Guid TrialReadingCriterionId { get; set; }
} }

View File

@ -26,6 +26,7 @@ namespace IRaCIS.Application.Services
private readonly IRepository<VisitTask> _visitTaskRepository; private readonly IRepository<VisitTask> _visitTaskRepository;
private readonly IRepository<ClinicalDataTrialSet> _clinicalDataTrialSetRepository; private readonly IRepository<ClinicalDataTrialSet> _clinicalDataTrialSetRepository;
private readonly IRepository<ReadModuleView> _readModuleViewRepository; private readonly IRepository<ReadModuleView> _readModuleViewRepository;
private readonly IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository;
private readonly IRepository<DicomInstance> _dicomInstanceRepository; private readonly IRepository<DicomInstance> _dicomInstanceRepository;
private readonly IRepository<NoneDicomStudyFile> _noneDicomStudyFileRepository; private readonly IRepository<NoneDicomStudyFile> _noneDicomStudyFileRepository;
private readonly IRepository<ReadingPeriodSet> _readingPeriodSetRepository; private readonly IRepository<ReadingPeriodSet> _readingPeriodSetRepository;
@ -41,6 +42,7 @@ namespace IRaCIS.Application.Services
IRepository<VisitTask> visitTaskRepository, IRepository<VisitTask> visitTaskRepository,
IRepository<ClinicalDataTrialSet> clinicalDataTrialSetRepository, IRepository<ClinicalDataTrialSet> clinicalDataTrialSetRepository,
IRepository<ReadModuleView> readModuleViewRepository, IRepository<ReadModuleView> readModuleViewRepository,
IRepository<ReadingQuestionCriterionTrial> readingQuestionCriterionTrialRepository,
IRepository<DicomInstance> dicomInstanceRepository, IRepository<DicomInstance> dicomInstanceRepository,
IRepository<NoneDicomStudyFile> noneDicomStudyFileRepository, IRepository<NoneDicomStudyFile> noneDicomStudyFileRepository,
IRepository<ReadingPeriodSet> readingPeriodSetRepository, IRepository<ReadingPeriodSet> readingPeriodSetRepository,
@ -56,6 +58,7 @@ namespace IRaCIS.Application.Services
this._visitTaskRepository = visitTaskRepository; this._visitTaskRepository = visitTaskRepository;
this._clinicalDataTrialSetRepository = clinicalDataTrialSetRepository; this._clinicalDataTrialSetRepository = clinicalDataTrialSetRepository;
this._readModuleViewRepository = readModuleViewRepository; this._readModuleViewRepository = readModuleViewRepository;
this._readingQuestionCriterionTrialRepository = readingQuestionCriterionTrialRepository;
this._dicomInstanceRepository = dicomInstanceRepository; this._dicomInstanceRepository = dicomInstanceRepository;
this._noneDicomStudyFileRepository = noneDicomStudyFileRepository; this._noneDicomStudyFileRepository = noneDicomStudyFileRepository;
this._readingPeriodSetRepository = readingPeriodSetRepository; this._readingPeriodSetRepository = readingPeriodSetRepository;
@ -107,17 +110,24 @@ namespace IRaCIS.Application.Services
{ {
maxcount = maxcount < x.Data.Count ? x.Data.Count : maxcount; maxcount = maxcount < x.Data.Count ? x.Data.Count : maxcount;
}); });
var trialinfo = await _trialRepository.Where(x => x.Id == dto.TrialId).FirstNotNullAsync();
var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == dto.TrialReadingCriterionId).Select(x => new
{
x.IsReadingTaskViewInOrder,
x.IsOncologyReading,
x.IsGlobalReading,
}).FirstNotNullAsync();
return (pageOutput, new return (pageOutput, new
{ {
MaxLength = maxcount, MaxLength = maxcount,
IsReadingTaskViewInOrder=trialinfo.IsReadingTaskViewInOrder, IsReadingTaskViewInOrder= criterionInfo.IsReadingTaskViewInOrder,
IsClinicalReading = trialinfo.IsClinicalReading, IsClinicalReading = criterionInfo.IsOncologyReading,
OnlyExistsMedicalHistory = !(await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataSetName != "既往局部治疗史" && x.IsConfirm)), OnlyExistsMedicalHistory = !(await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataSetName != "既往局部治疗史" && x.IsConfirm)),
IsExistsSubjectClinicalData= await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId&&x.ClinicalDataLevel== ClinicalLevel.Subject && x.IsConfirm), IsExistsSubjectClinicalData= await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId&&x.ClinicalDataLevel== ClinicalLevel.Subject && x.IsConfirm),
IsExistsVisitClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataLevel == ClinicalLevel.SubjectVisit && x.IsConfirm), IsExistsVisitClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataLevel == ClinicalLevel.SubjectVisit && x.IsConfirm),
IsExistsReadingClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataLevel == ClinicalLevel.ImageRead && x.IsConfirm), IsExistsReadingClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataLevel == ClinicalLevel.ImageRead && x.IsConfirm),
IsGlobalReading= trialinfo.IsGlobalReading, IsGlobalReading= criterionInfo.IsGlobalReading,
}) ; }) ;
@ -295,7 +305,14 @@ namespace IRaCIS.Application.Services
case ModuleTypeEnum.Oncology: case ModuleTypeEnum.Oncology:
var trialInfo = await _trialRepository.Where(x => x.Id == visit.TrialId).FirstNotNullAsync();
var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == dto.TrialReadingCriterionId).Select(x => new
{
x.ReadingType,
}).FirstNotNullAsync();
//增加标准 //增加标准
var globalModule = await _readModuleRepository.Where(x => x.SubjectId == readModuleData.SubjectId && x.SubjectVisitId == readModuleData.SubjectVisitId&& x.ModuleType == ModuleTypeEnum.Global && x.TrialReadingCriterionId == dto.TrialReadingCriterionId).FirstOrDefaultAsync(); var globalModule = await _readModuleRepository.Where(x => x.SubjectId == readModuleData.SubjectId && x.SubjectVisitId == readModuleData.SubjectVisitId&& x.ModuleType == ModuleTypeEnum.Global && x.TrialReadingCriterionId == dto.TrialReadingCriterionId).FirstOrDefaultAsync();
@ -303,7 +320,7 @@ namespace IRaCIS.Application.Services
{ {
var globalTaskInfoList = await _visitTaskRepository.Where(x => x.SouceReadModuleId == globalModule.Id && x.TaskState == TaskState.Effect && x.ReadingTaskState == ReadingTaskState.HaveSigned&&!x.IsAnalysisCreate).ToListAsync(); var globalTaskInfoList = await _visitTaskRepository.Where(x => x.SouceReadModuleId == globalModule.Id && x.TaskState == TaskState.Effect && x.ReadingTaskState == ReadingTaskState.HaveSigned&&!x.IsAnalysisCreate).ToListAsync();
if (globalTaskInfoList.Count() > 0 && globalTaskInfoList.Count == (int)trialInfo.ReadingType) if (globalTaskInfoList.Count() > 0 && globalTaskInfoList.Count == (int)criterionInfo.ReadingType)
{ {
var isAdd = false; var isAdd = false;
if (globalTaskInfoList[0].JudgeVisitTaskId == null) if (globalTaskInfoList[0].JudgeVisitTaskId == null)

View File

@ -1778,15 +1778,16 @@ namespace IRaCIS.Application.Services
var visitTask = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstOrDefaultAsync(); var visitTask = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstOrDefaultAsync();
var subjectCode = await _subjectRepository.Where(x => x.Id == visitTask.SubjectId).Select(x => x.Code).FirstOrDefaultAsync(); var subjectCode = await _subjectRepository.Where(x => x.Id == visitTask.SubjectId).Select(x => x.Code).FirstOrDefaultAsync();
var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == visitTask.TrialReadingCriterionId).Select(x => new
var trialInfo = await _trialRepository.Where(x => x.Id == visitTask.TrialId).Select(x => new
{ {
x.IsReadingShowPreviousResults, x.IsReadingShowPreviousResults,
x.IsReadingShowSubjectInfo, x.IsReadingShowSubjectInfo
}).FirstOrDefaultAsync();
var trialInfo = await _trialRepository.Where(x => x.Id == visitTask.TrialId).Select(x => new
{
x.ClinicalInformationTransmissionEnum, x.ClinicalInformationTransmissionEnum,
}).FirstOrDefaultAsync(); }).FirstOrDefaultAsync();
return new GetReadingSubjectInfoOutDto() return new GetReadingSubjectInfoOutDto()
{ {
VisitTaskId = visitTask.Id, VisitTaskId = visitTask.Id,
@ -1794,8 +1795,8 @@ namespace IRaCIS.Application.Services
SubjectCode = visitTask.BlindSubjectCode.IsNullOrEmpty() ? subjectCode : visitTask.BlindSubjectCode, SubjectCode = visitTask.BlindSubjectCode.IsNullOrEmpty() ? subjectCode : visitTask.BlindSubjectCode,
ReadingCategory = visitTask.ReadingCategory, ReadingCategory = visitTask.ReadingCategory,
TaskBlindName = visitTask.TaskBlindName, TaskBlindName = visitTask.TaskBlindName,
IsReadingShowPreviousResults = trialInfo.IsReadingShowPreviousResults, IsReadingShowPreviousResults = criterionInfo.IsReadingShowPreviousResults,
IsReadingShowSubjectInfo = trialInfo.IsReadingShowSubjectInfo, IsReadingShowSubjectInfo = criterionInfo.IsReadingShowSubjectInfo,
}; };
} }
@ -2558,7 +2559,7 @@ namespace IRaCIS.Application.Services
&& x.ReadingTaskState == ReadingTaskState.HaveSigned).Select(x => x.JudgeVisitTaskId).FirstOrDefaultAsync(); && x.ReadingTaskState == ReadingTaskState.HaveSigned).Select(x => x.JudgeVisitTaskId).FirstOrDefaultAsync();
// 获取系统配置 // 获取系统配置
var readingType = await _trialRepository.Where(x => x.Id == readModuleInfo.TrialId).Select(x => x.ReadingType).FirstOrDefaultAsync(); var readingType = await _readingQuestionCriterionTrialRepository.Where(x=>x.Id== readModuleInfo.TrialReadingCriterionId).Select(x=>x.ReadingType).FirstOrDefaultAsync();
// 判断阅片是否完成 // 判断阅片是否完成
if (judgeVisitTaskId == null && (await _visitTaskRepository.Where(x => x.SouceReadModuleId == globalreadModuleId && x.TaskState == TaskState.Effect && x.ReadingCategory == ReadingCategory.Global if (judgeVisitTaskId == null && (await _visitTaskRepository.Where(x => x.SouceReadModuleId == globalreadModuleId && x.TaskState == TaskState.Effect && x.ReadingCategory == ReadingCategory.Global
@ -2643,7 +2644,9 @@ namespace IRaCIS.Application.Services
&& x.SourceSubjectVisitId == visitTask.SourceSubjectVisitId && x.SouceReadModuleId == visitTask.SouceReadModuleId).Select(x => x.Id).ToListAsync(); && x.SourceSubjectVisitId == visitTask.SourceSubjectVisitId && x.SouceReadModuleId == visitTask.SouceReadModuleId).Select(x => x.Id).ToListAsync();
} }
var trialInfo = await _trialRepository.Where(x => x.Id == visitTask.TrialId).Select(x=> new {
var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == visitTask.TrialReadingCriterionId).Select(x => new
{
x.IsArbitrationReading, x.IsArbitrationReading,
x.ArbitrationRule x.ArbitrationRule
}).FirstNotNullAsync(); }).FirstNotNullAsync();
@ -2651,7 +2654,7 @@ namespace IRaCIS.Application.Services
var noteEqual = false; var noteEqual = false;
// 判断项目是否设置了裁判 // 判断项目是否设置了裁判
if (trialInfo.IsArbitrationReading ?? false) if (criterionInfo.IsArbitrationReading)
{ {
// 判断数量是否为2 是否仲裁 // 判断数量是否为2 是否仲裁
if (visitTaskids.Count == 2) if (visitTaskids.Count == 2)
@ -2813,7 +2816,7 @@ namespace IRaCIS.Application.Services
else else
{ {
if ((visitTask.SourceSubjectVisitId != null && trialInfo.ArbitrationRule == ArbitrationRule.Visit) || (visitTask.SouceReadModuleId != null && trialInfo.ArbitrationRule == ArbitrationRule.Reading)) if ((visitTask.SourceSubjectVisitId != null && criterionInfo.ArbitrationRule == ArbitrationRule.Visit) || (visitTask.SouceReadModuleId != null && criterionInfo.ArbitrationRule == ArbitrationRule.Reading))
{ {
await this.SaveJudgeTask(new SaveJudgeTaskDto() await this.SaveJudgeTask(new SaveJudgeTaskDto()
{ {

View File

@ -27,6 +27,7 @@ namespace IRaCIS.Core.Application.Service
private readonly IVisitTaskService _visitTaskService; private readonly IVisitTaskService _visitTaskService;
private readonly IRepository<TaskMedicalReview> _taskMedicalReviewRepository; private readonly IRepository<TaskMedicalReview> _taskMedicalReviewRepository;
private readonly IRepository<ReadingMedicalReviewDialog> _readingMedicalReviewDialogRepository; private readonly IRepository<ReadingMedicalReviewDialog> _readingMedicalReviewDialogRepository;
private readonly IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrial;
private readonly IRepository<ReadingMedicineQuestionAnswer> _readingMedicineQuestionAnswerRepository; private readonly IRepository<ReadingMedicineQuestionAnswer> _readingMedicineQuestionAnswerRepository;
private readonly IRepository<ReadingMedicineSystemQuestion> _readingMedicineSystemQuestionRepository; private readonly IRepository<ReadingMedicineSystemQuestion> _readingMedicineSystemQuestionRepository;
@ -38,6 +39,7 @@ namespace IRaCIS.Core.Application.Service
IVisitTaskService visitTaskService, IVisitTaskService visitTaskService,
IRepository<TaskMedicalReview> taskMedicalReviewRepository, IRepository<TaskMedicalReview> taskMedicalReviewRepository,
IRepository<ReadingMedicalReviewDialog> readingMedicalReviewDialogRepository, IRepository<ReadingMedicalReviewDialog> readingMedicalReviewDialogRepository,
IRepository<ReadingQuestionCriterionTrial> readingQuestionCriterionTrial,
IRepository<ReadingMedicineQuestionAnswer> readingMedicineQuestionAnswerRepository, IRepository<ReadingMedicineQuestionAnswer> readingMedicineQuestionAnswerRepository,
IRepository<ReadingMedicineSystemQuestion> readingMedicineSystemQuestionRepository IRepository<ReadingMedicineSystemQuestion> readingMedicineSystemQuestionRepository
) )
@ -49,6 +51,7 @@ namespace IRaCIS.Core.Application.Service
this._visitTaskService = visitTaskService; this._visitTaskService = visitTaskService;
this._taskMedicalReviewRepository = taskMedicalReviewRepository; this._taskMedicalReviewRepository = taskMedicalReviewRepository;
this._readingMedicalReviewDialogRepository = readingMedicalReviewDialogRepository; this._readingMedicalReviewDialogRepository = readingMedicalReviewDialogRepository;
this._readingQuestionCriterionTrial = readingQuestionCriterionTrial;
this._readingMedicineQuestionAnswerRepository = readingMedicineQuestionAnswerRepository; this._readingMedicineQuestionAnswerRepository = readingMedicineQuestionAnswerRepository;
this._readingMedicineSystemQuestionRepository = readingMedicineSystemQuestionRepository; this._readingMedicineSystemQuestionRepository = readingMedicineSystemQuestionRepository;
} }
@ -61,15 +64,19 @@ namespace IRaCIS.Core.Application.Service
[HttpPost] [HttpPost]
public async Task<GetMedicalReviewReadingTaskOutDto> GetMedicalReviewReadingTask(GetMedicalReviewReadingTaskInDto inDto) public async Task<GetMedicalReviewReadingTaskOutDto> GetMedicalReviewReadingTask(GetMedicalReviewReadingTaskInDto inDto)
{ {
var medicalReviewInfo = await _trialRepository.Where(x => x.Id == inDto.TrialId).Select(x => new GetMedicalReviewReadingTaskOutDto() MedicalReviewInfo reviewInfo= await _taskMedicalReviewRepository.Where(x => x.Id == inDto.TaskMedicalReviewId)
.ProjectTo<MedicalReviewInfo>(_mapper.ConfigurationProvider).FirstNotNullAsync();
var visitTaskfInfo = await _visitTaskRepository.Where(x => x.Id == reviewInfo.VisitTaskId).FirstNotNullAsync();
var medicalReviewInfo = await _readingQuestionCriterionTrial.Where(x => x.Id == visitTaskfInfo.TrialReadingCriterionId).Select(x => new GetMedicalReviewReadingTaskOutDto()
{ {
ReadingType=x.ReadingType, ReadingType=x.ReadingType,
IsReadingTaskViewInOrder=x.IsReadingTaskViewInOrder, IsReadingTaskViewInOrder=x.IsReadingTaskViewInOrder,
}).FirstNotNullAsync(); }).FirstNotNullAsync();
medicalReviewInfo.MedicalReviewInfo = await _taskMedicalReviewRepository.Where(x => x.Id == inDto.TaskMedicalReviewId) medicalReviewInfo.MedicalReviewInfo = reviewInfo;
.ProjectTo<MedicalReviewInfo>(_mapper.ConfigurationProvider).FirstNotNullAsync();
var taskInfo = await _visitTaskRepository.Where(x => x.Id == medicalReviewInfo.MedicalReviewInfo.VisitTaskId).FirstNotNullAsync(); var taskInfo = await _visitTaskRepository.Where(x => x.Id == medicalReviewInfo.MedicalReviewInfo.VisitTaskId).FirstNotNullAsync();

View File

@ -19,16 +19,19 @@ namespace IRaCIS.Core.Application.Service
{ {
private readonly IRepository<ReadingMedicineTrialQuestion> _readingMedicineTrialQuestionRepository; private readonly IRepository<ReadingMedicineTrialQuestion> _readingMedicineTrialQuestionRepository;
private readonly IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository;
private readonly IRepository<Trial> _trialRepository; private readonly IRepository<Trial> _trialRepository;
private readonly IRepository<ReadingMedicineSystemQuestion> _readingMedicineSystemQuestionRepository; private readonly IRepository<ReadingMedicineSystemQuestion> _readingMedicineSystemQuestionRepository;
public ReadingMedicineQuestionService( public ReadingMedicineQuestionService(
IRepository<ReadingMedicineTrialQuestion> readingMedicineTrialQuestionRepository, IRepository<ReadingMedicineTrialQuestion> readingMedicineTrialQuestionRepository,
IRepository<ReadingQuestionCriterionTrial> readingQuestionCriterionTrial,
IRepository<Trial> trialRepository, IRepository<Trial> trialRepository,
IRepository<ReadingMedicineSystemQuestion> readingMedicineSystemQuestionRepository IRepository<ReadingMedicineSystemQuestion> readingMedicineSystemQuestionRepository
) )
{ {
this._readingMedicineTrialQuestionRepository = readingMedicineTrialQuestionRepository; this._readingMedicineTrialQuestionRepository = readingMedicineTrialQuestionRepository;
this._readingQuestionCriterionTrialRepository = readingQuestionCriterionTrial;
this._trialRepository = trialRepository; this._trialRepository = trialRepository;
this._readingMedicineSystemQuestionRepository = readingMedicineSystemQuestionRepository; this._readingMedicineSystemQuestionRepository = readingMedicineSystemQuestionRepository;
} }
@ -312,7 +315,7 @@ namespace IRaCIS.Core.Application.Service
/// <exception cref="BusinessValidationFailedException"></exception> /// <exception cref="BusinessValidationFailedException"></exception>
public async Task<IResponseOutput> VerifyReadingMedicineQuestion(ConfirmReadingMedicineQuestionInDto inDto) public async Task<IResponseOutput> VerifyReadingMedicineQuestion(ConfirmReadingMedicineQuestionInDto inDto)
{ {
var readingMedicineQuestionList = await _readingMedicineTrialQuestionRepository.Where(x => x.TrialId == inDto.TrialId) var readingMedicineQuestionList = await _readingMedicineTrialQuestionRepository.Where(x => x.TrialId == inDto.TrialId&&x.TrialReadingCriterionId==inDto.TrialReadingCriterionId)
.Select(x => new TrialQuestion() .Select(x => new TrialQuestion()
{ {
Id = x.Id, Id = x.Id,
@ -336,20 +339,28 @@ namespace IRaCIS.Core.Application.Service
throw new BusinessValidationFailedException("父问题的显示序号要比子问题的显示序号小,请确认。"); throw new BusinessValidationFailedException("父问题的显示序号要比子问题的显示序号小,请确认。");
} }
var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == inDto.TrialReadingCriterionId).Select(x => new
{
x.IsGlobalReading,
x.IsOncologyReading,
x.IsArbitrationReading,
}).FirstNotNullAsync();
var trialInfo = await _trialRepository.Where(x => x.Id == inDto.TrialId).FirstNotNullAsync();
if (trialInfo.IsGlobalReading && !readingMedicineQuestionList.Any(x => x.ReadingCategory == ReadingCategory.Global))
if (criterionInfo.IsGlobalReading && !readingMedicineQuestionList.Any(x => x.ReadingCategory == ReadingCategory.Global))
{ {
throw new BusinessValidationFailedException("当前项目启用了全局阅片,但未配置全局医学审核问题"); throw new BusinessValidationFailedException("当前项目启用了全局阅片,但未配置全局医学审核问题");
} }
if ((trialInfo.IsArbitrationReading ?? false) && !readingMedicineQuestionList.Any(x => x.ReadingCategory == ReadingCategory.Judge)) if (criterionInfo.IsArbitrationReading && !readingMedicineQuestionList.Any(x => x.ReadingCategory == ReadingCategory.Judge))
{ {
throw new BusinessValidationFailedException("当前项目启用了仲裁阅片,但未配置仲裁医学审核问题"); throw new BusinessValidationFailedException("当前项目启用了仲裁阅片,但未配置仲裁医学审核问题");
} }
if (trialInfo.IsClinicalReading && !readingMedicineQuestionList.Any(x => x.ReadingCategory == ReadingCategory.Oncology)) if (criterionInfo.IsOncologyReading && !readingMedicineQuestionList.Any(x => x.ReadingCategory == ReadingCategory.Oncology))
{ {
throw new BusinessValidationFailedException("当前项目启用了肿瘤学阅片,但未配置肿瘤学医学审核问题"); throw new BusinessValidationFailedException("当前项目启用了肿瘤学阅片,但未配置肿瘤学医学审核问题");
} }
@ -364,7 +375,14 @@ namespace IRaCIS.Core.Application.Service
/// <returns></returns> /// <returns></returns>
public async Task<IResponseOutput> ConfirmReadingMedicineQuestion(ConfirmReadingMedicineQuestionInDto inDto) public async Task<IResponseOutput> ConfirmReadingMedicineQuestion(ConfirmReadingMedicineQuestionInDto inDto)
{ {
var readingMedicineQuestionList = await _readingMedicineTrialQuestionRepository.Where(x => x.TrialId == inDto.TrialId)
var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == inDto.TrialReadingCriterionId).Select(x => new
{
x.IsGlobalReading,
x.IsOncologyReading,
x.IsArbitrationReading,
}).FirstNotNullAsync();
var readingMedicineQuestionList = await _readingMedicineTrialQuestionRepository.Where(x => x.TrialId == inDto.TrialId&&x.TrialReadingCriterionId==inDto.TrialReadingCriterionId)
.Select(x => new TrialQuestion() .Select(x => new TrialQuestion()
{ {
Id = x.Id, Id = x.Id,
@ -391,17 +409,17 @@ namespace IRaCIS.Core.Application.Service
var trialInfo = await _trialRepository.Where(x => x.Id == inDto.TrialId).FirstNotNullAsync(); var trialInfo = await _trialRepository.Where(x => x.Id == inDto.TrialId).FirstNotNullAsync();
if (trialInfo.IsGlobalReading && !readingMedicineQuestionList.Any(x => x.ReadingCategory == ReadingCategory.Global)) if (criterionInfo.IsGlobalReading && !readingMedicineQuestionList.Any(x => x.ReadingCategory == ReadingCategory.Global))
{ {
throw new BusinessValidationFailedException("当前项目启用了全局阅片,但未配置全局医学审核问题"); throw new BusinessValidationFailedException("当前项目启用了全局阅片,但未配置全局医学审核问题");
} }
if ((trialInfo.IsArbitrationReading ?? false) && !readingMedicineQuestionList.Any(x => x.ReadingCategory == ReadingCategory.Judge)) if (criterionInfo.IsArbitrationReading && !readingMedicineQuestionList.Any(x => x.ReadingCategory == ReadingCategory.Judge))
{ {
throw new BusinessValidationFailedException("当前项目启用了仲裁阅片,但未配置仲裁医学审核问题"); throw new BusinessValidationFailedException("当前项目启用了仲裁阅片,但未配置仲裁医学审核问题");
} }
if (trialInfo.IsClinicalReading && !readingMedicineQuestionList.Any(x => x.ReadingCategory == ReadingCategory.Oncology)) if (criterionInfo.IsOncologyReading && !readingMedicineQuestionList.Any(x => x.ReadingCategory == ReadingCategory.Oncology))
{ {
throw new BusinessValidationFailedException("当前项目启用了肿瘤学阅片,但未配置肿瘤学医学审核问题"); throw new BusinessValidationFailedException("当前项目启用了肿瘤学阅片,但未配置肿瘤学医学审核问题");
} }

View File

@ -30,6 +30,7 @@ namespace IRaCIS.Application.Services
private readonly IRepository<VisitStage> _visitStageRepository; private readonly IRepository<VisitStage> _visitStageRepository;
private readonly IRepository<Trial> _trialRepository; private readonly IRepository<Trial> _trialRepository;
private readonly IRepository<VisitTask> _visitTaskRepository; private readonly IRepository<VisitTask> _visitTaskRepository;
private readonly IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository;
private readonly IVisitTaskHelpeService _visitTaskHelpeService; private readonly IVisitTaskHelpeService _visitTaskHelpeService;
private readonly IRepository<ReadingPeriodPlan> _readingPeriodPlanRepository; private readonly IRepository<ReadingPeriodPlan> _readingPeriodPlanRepository;
private readonly IRepository<Site> _siteSetRepository; private readonly IRepository<Site> _siteSetRepository;
@ -42,6 +43,7 @@ namespace IRaCIS.Application.Services
IRepository<VisitStage> visitStageRepository, IRepository<VisitStage> visitStageRepository,
IRepository<Trial> trialRepository, IRepository<Trial> trialRepository,
IRepository<VisitTask> visitTaskRepository, IRepository<VisitTask> visitTaskRepository,
IRepository<ReadingQuestionCriterionTrial> readingQuestionCriterionTrialRepository,
IVisitTaskHelpeService visitTaskHelpeService, IVisitTaskHelpeService visitTaskHelpeService,
IRepository<ReadingPeriodPlan> readingPeriodPlanRepository, IRepository<ReadingPeriodPlan> readingPeriodPlanRepository,
IRepository<Site> SiteSetRepository, IRepository<Site> SiteSetRepository,
@ -54,6 +56,7 @@ namespace IRaCIS.Application.Services
this._visitStageRepository = visitStageRepository; this._visitStageRepository = visitStageRepository;
this._trialRepository = trialRepository; this._trialRepository = trialRepository;
this._visitTaskRepository = visitTaskRepository; this._visitTaskRepository = visitTaskRepository;
this._readingQuestionCriterionTrialRepository = readingQuestionCriterionTrialRepository;
this._visitTaskHelpeService = visitTaskHelpeService; this._visitTaskHelpeService = visitTaskHelpeService;
this._readingPeriodPlanRepository = readingPeriodPlanRepository; this._readingPeriodPlanRepository = readingPeriodPlanRepository;
_siteSetRepository = SiteSetRepository; _siteSetRepository = SiteSetRepository;
@ -391,7 +394,13 @@ namespace IRaCIS.Application.Services
case ReadingSetType.TumorReading: case ReadingSetType.TumorReading:
var trialInfo = await _trialRepository.Where(x => x.Id == readingPeriodSet.TrialId).FirstNotNullAsync();
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 globalModuleIds = await _readModuleRepository.Where(x => x.TrialReadingCriterionId == readingPeriodSet.TrialReadingCriterionId && subjectVisitIds.Contains(x.SubjectVisitId) && x.ModuleType == ModuleTypeEnum.Global).Select(x => x.Id).ToListAsync();
@ -410,7 +419,7 @@ namespace IRaCIS.Application.Services
foreach (var item in globalTaskInfo) foreach (var item in globalTaskInfo)
{ {
if (item.Count == (int)trialInfo.ReadingType) if (item.Count == (int)criterionInfo.ReadingType)
{ {
//没有裁判 或者有裁判,并且裁判任务做完了 //没有裁判 或者有裁判,并且裁判任务做完了
if (item.JudgeTaskId == null || item.JudgeTaskResultId != null) if (item.JudgeTaskId == null || item.JudgeTaskResultId != null)

View File

@ -418,7 +418,7 @@ namespace IRaCIS.Application.Services
public async Task<IResponseOutput> SetTrialJudgyInfo(SetTrialJudgyInfoInDto inDto) public async Task<IResponseOutput> SetTrialJudgyInfo(SetTrialJudgyInfoInDto inDto)
{ {
var trialCriterion = await _readingQuestionCriterionTrialRepository.Where(x => x.TrialId == inDto.TrialId && x.IsConfirm).FirstOrDefaultAsync(); var trialCriterion = await _readingQuestionCriterionTrialRepository.Where(x => x.TrialId == inDto.TrialId&&x.Id== inDto.TrialReadingCriterionId).FirstOrDefaultAsync();
var judgeCount = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == trialCriterion.Id && x.IsJudgeQuestion) var judgeCount = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == trialCriterion.Id && x.IsJudgeQuestion)
.WhereIf(trialCriterion.FormType == FormType.SinglePage, x => x.ReadingCriterionPageId == null) .WhereIf(trialCriterion.FormType == FormType.SinglePage, x => x.ReadingCriterionPageId == null)
@ -428,7 +428,7 @@ namespace IRaCIS.Application.Services
{ {
throw new BusinessValidationFailedException("无裁判问题却有仲裁对象,操作失败"); throw new BusinessValidationFailedException("无裁判问题却有仲裁对象,操作失败");
} }
await _trialRepository.UpdatePartialFromQueryAsync(inDto.TrialId, x => new Trial() await _readingQuestionCriterionTrialRepository.UpdatePartialFromQueryAsync(inDto.TrialReadingCriterionId, x => new ReadingQuestionCriterionTrial()
{ {
ArbitrationRule = inDto.ArbitrationRule, ArbitrationRule = inDto.ArbitrationRule,
//IsArbitrationReading = inDto.IsArbitrationReading, //IsArbitrationReading = inDto.IsArbitrationReading,
@ -636,9 +636,9 @@ namespace IRaCIS.Application.Services
[HttpPost] [HttpPost]
public async Task<GetTrialJudgyInfoOutDto> GetTrialJudgyInfo(GetTrialJudgyInfoInDto inDto) public async Task<GetTrialJudgyInfoOutDto> GetTrialJudgyInfo(GetTrialJudgyInfoInDto inDto)
{ {
GetTrialJudgyInfoOutDto result = await _trialRepository.Where(x => x.Id == inDto.TrialId).Select(x => new GetTrialJudgyInfoOutDto GetTrialJudgyInfoOutDto result = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == inDto.TrialReadingCriterionId).Select(x => new GetTrialJudgyInfoOutDto
{ {
TrialId = x.Id, TrialId = x.TrialId,
IsReadingTaskViewInOrder = x.IsReadingTaskViewInOrder, IsReadingTaskViewInOrder = x.IsReadingTaskViewInOrder,
ArbitrationRule = x.ArbitrationRule, ArbitrationRule = x.ArbitrationRule,
IsArbitrationReading = x.IsArbitrationReading IsArbitrationReading = x.IsArbitrationReading

View File

@ -553,15 +553,15 @@ namespace IRaCIS.Core.Application
_mapper.Map(trialConfig, trialInfo); _mapper.Map(trialConfig, trialInfo);
if (trialInfo.IsGlobalReading && (trialInfo.IsArbitrationReading ?? false)) //if (trialInfo.IsGlobalReading && (trialInfo.IsArbitrationReading ?? false))
{ //{
trialInfo.ArbitrationRule = ArbitrationRule.Reading; // trialInfo.ArbitrationRule = ArbitrationRule.Reading;
} //}
if (!trialInfo.IsGlobalReading && (trialInfo.IsArbitrationReading ?? false)) //if (!trialInfo.IsGlobalReading && (trialInfo.IsArbitrationReading ?? false))
{ //{
trialInfo.ArbitrationRule = ArbitrationRule.Visit; // trialInfo.ArbitrationRule = ArbitrationRule.Visit;
} //}
trialInfo.UpdateTime = DateTime.Now; trialInfo.UpdateTime = DateTime.Now;
// 修改临床数据 // 修改临床数据

View File

@ -100,13 +100,16 @@ namespace IRaCIS.Core.Application.Triggers
var trialId = subjectVisit.TrialId; var trialId = subjectVisit.TrialId;
var subjectVisitId= subjectVisit.Id; var subjectVisitId= subjectVisit.Id;
// 是否全局阅片 // 是否全局阅片
var trial = await _repository.Where<Trial>(x => x.Id == trialId).FirstNotNullAsync(); var trial = await _repository.Where<Trial>(x => x.Id == trialId).FirstNotNullAsync();
var criterionList = await _repository.Where<ReadingQuestionCriterionTrial>(x => x.TrialId == trialId && x.IsConfirm && x.IsGlobalReading && x.IsReadingTaskViewInOrder).ToListAsync();
if (trial.IsGlobalReading&&trial.IsReadingTaskViewInOrder) foreach (var item in criterionList)
{ {
ReadingPeriodSet? readingPeriodSet = await _readingPeriodSetRepository.FirstOrDefaultNoTrackingAsync(x => x.TrialId == trialId && x.IsGlobal&&x.TrialReadingCriterionId==item.Id);
ReadingPeriodSet? readingPeriodSet =await _readingPeriodSetRepository.FirstOrDefaultNoTrackingAsync(x => x.TrialId == trialId && x.IsGlobal);
if (readingPeriodSet == null) if (readingPeriodSet == null)
{ {
@ -120,6 +123,7 @@ namespace IRaCIS.Core.Application.Triggers
TrialId = trialId, TrialId = trialId,
EffectOfTime = DateTime.Now, EffectOfTime = DateTime.Now,
IsGlobal = true, IsGlobal = true,
TrialReadingCriterionId=item.Id,
}; };
await _readingPeriodSetRepository.AddAsync(readingPeriodSet); await _readingPeriodSetRepository.AddAsync(readingPeriodSet);
@ -133,7 +137,7 @@ namespace IRaCIS.Core.Application.Triggers
}); });
await _readModuleRepository.DeleteFromQueryAsync(x => x.ReadingSetType == ReadingSetType.ImageReading && x.SubjectVisitId == subjectVisitId, true); await _readModuleRepository.DeleteFromQueryAsync(x => x.ReadingSetType == ReadingSetType.ImageReading&&x.TrialReadingCriterionId==item.Id && x.SubjectVisitId == subjectVisitId, true);
await _readModuleRepository.AddAsync(new ReadModule() await _readModuleRepository.AddAsync(new ReadModule()
{ {
@ -147,11 +151,15 @@ namespace IRaCIS.Core.Application.Triggers
ModuleType = ModuleTypeEnum.Global, ModuleType = ModuleTypeEnum.Global,
TrialId = subjectVisit.TrialId, TrialId = subjectVisit.TrialId,
VisitNum = subjectVisit.VisitNum, VisitNum = subjectVisit.VisitNum,
TrialReadingCriterionId=item.Id,
}); });
}
await _readModuleRepository.SaveChangesAsync(); await _readModuleRepository.SaveChangesAsync();
}
} }
} }

View File

@ -91,6 +91,11 @@ namespace IRaCIS.Core.Domain.Models
/// </summary> /// </summary>
public ReadingCategory ReadingCategory { get; set; } public ReadingCategory ReadingCategory { get; set; }
/// <summary>
/// 项目标准
/// </summary>
public Guid TrialReadingCriterionId { get; set; }
[JsonIgnore] [JsonIgnore]
[ForeignKey("ParentId")] [ForeignKey("ParentId")]
public ReadingMedicineTrialQuestion ParentQuestion { get; set; } public ReadingMedicineTrialQuestion ParentQuestion { get; set; }