Uat_Study
parent
0389b95200
commit
b9e0c3369d
|
@ -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
|
||||||
|
|
|
@ -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; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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,15 +2644,17 @@ 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 {
|
|
||||||
x.IsArbitrationReading,
|
var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == visitTask.TrialReadingCriterionId).Select(x => new
|
||||||
x.ArbitrationRule
|
{
|
||||||
|
x.IsArbitrationReading,
|
||||||
|
x.ArbitrationRule
|
||||||
}).FirstNotNullAsync();
|
}).FirstNotNullAsync();
|
||||||
|
|
||||||
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()
|
||||||
{
|
{
|
||||||
|
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
@ -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("当前项目启用了肿瘤学阅片,但未配置肿瘤学医学审核问题");
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
// 修改临床数据
|
// 修改临床数据
|
||||||
|
|
|
@ -100,15 +100,18 @@ 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)
|
|
||||||
{
|
{
|
||||||
readingPeriodSet = new ReadingPeriodSet()
|
readingPeriodSet = new ReadingPeriodSet()
|
||||||
{
|
{
|
||||||
|
@ -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();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -91,7 +91,12 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public ReadingCategory ReadingCategory { get; set; }
|
public ReadingCategory ReadingCategory { get; set; }
|
||||||
|
|
||||||
[JsonIgnore]
|
/// <summary>
|
||||||
|
/// 项目标准
|
||||||
|
/// </summary>
|
||||||
|
public Guid TrialReadingCriterionId { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
[ForeignKey("ParentId")]
|
[ForeignKey("ParentId")]
|
||||||
public ReadingMedicineTrialQuestion ParentQuestion { get; set; }
|
public ReadingMedicineTrialQuestion ParentQuestion { get; set; }
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue