using IRaCIS.Core.Application.Contracts;
using IRaCIS.Core.Application.Service.Reading.Dto;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infra.EFCore.Common;
using IRaCIS.Core.Infrastructure;
using MassTransit;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Panda.DynamicWebApi.Attributes;
namespace IRaCIS.Core.Application.Service
{
///
/// 阅片问题.标准
///
[ApiExplorerSettings(GroupName = "Reading")]
public class ReadingQuestionService(IRepository _subjectVisitRepository,
IRepository _readingQuestionCriterionSystemRepository,
IRepository _readingQuestionCriterionTrialRepository,
IRepository _readingQuestionSystemRepository,
IRepository _readingQuestionTrialRepository,
IRepository _clinicalDataTrialSetRepository,
IRepository _clinicalDataSystemSetRepository,
IRepository _dictionaryRepository,
IReadingImageTaskService _iReadingImageTaskService,
IRepository _readingCriterionDictionaryRepository,
IRepository _readingTableQuestionTrialRepository,
IRepository _readingCriterionPageRepository,
IRepository _trialRepository,
IRepository _tumorAssessmentRepository,
IRepository _organInfoRepository,
IRepository _readingTableQuestionSystemRepository,
IRepository _readingTaskQuestionAnswer,
IRepository _previousPDFRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, IReadingQuestionService
{
#region 获取计算问题
/////
///// 获取自定义问题预览
/////
/////
//[HttpPost]
//public async Task<(List,bool)> GetCustomQuestionPreview(GetCustomQuestionPreviewInDto inDto)
//{
// return (await _iReadingImageTaskService.GetReadingQuestion(inDto.TrialReadingCriterionId, null),true);
//}
///
/// 设置项目问题导出
///
///
///
[HttpPost]
public async Task SetTrialQuestionExportResult(SetTrialQuestionExportResultInDto inDto)
{
List needAdd = new List()
{
ExportResult.DetailedTableOfAdjudicationResults,
ExportResult.DetailedTableOfIntraReaderAnalysisResults,
ExportResult.DetailedTableOfInterReaderAnalysisResults
};
foreach (var item in inDto.QuestionList)
{
item.ExportResult= item.ExportResult.Except(needAdd).ToList();
if (item.ExportResult.Contains(ExportResult.TableOfAssessmentResults))
{
item.ExportResult.AddRange(needAdd);
}
var ExportResultStr=JsonConvert.SerializeObject(item.ExportResult);
await _readingQuestionTrialRepository.UpdatePartialFromQueryAsync(x => x.Id == item.QuestionId, x => new ReadingQuestionTrial()
{
ExportResultStr = ExportResultStr
});
}
foreach (var item in inDto.TableQuestionList)
{
item.ExportResult = item.ExportResult.Except(needAdd).ToList();
if (item.ExportResult.Contains(ExportResult.TableOfAssessmentResults))
{
item.ExportResult.AddRange(needAdd);
}
var ExportResultStr = JsonConvert.SerializeObject(item.ExportResult);
await _readingTableQuestionTrialRepository.UpdatePartialFromQueryAsync(x => x.Id == item.TableQuestionId, x => new ReadingTableQuestionTrial()
{
ExportResultStr = ExportResultStr
});
}
return await _readingTableQuestionTrialRepository.SaveChangesAsync();
}
///
/// 获取项目的导出信息
///
///
///
[HttpPost]
public async Task GetTrialQuestionExportResult(GetTrialQuestionExportResultInDto inDto)
{
var questionList = await _readingQuestionTrialRepository.Where(x => x.Type != ReadingQestionType.Group && x.ReadingQuestionCriterionTrialId == inDto.TrialReadingCriterionId)
.OrderBy(x => x.ShowOrder).Select(x => new TrialQuestionExport()
{
QuestionId = x.Id,
QuestionName = _userInfo.IsEn_Us ? x.QuestionEnName : x.QuestionName,
ExportResult = x.ExportResult,
ShowOrder = x.ShowOrder,
}).ToListAsync();
var questionid = questionList.Select(x => x.QuestionId).ToList();
var tableQuestionList = await _readingTableQuestionTrialRepository.Where(x => questionid.Contains(x.ReadingQuestionId))
.OrderBy(x => x.ShowOrder).Select(x => new TrialQuestionExport()
{
QuestionId = x.ReadingQuestionId,
TableQuestionId = x.Id,
QuestionName = _userInfo.IsEn_Us ? x.QuestionEnName : x.QuestionName,
ExportResult = x.ExportResult,
ShowOrder = x.ShowOrder,
}).ToListAsync();
questionList.ForEach(x =>
{
x.Children = tableQuestionList.Where(y => y.QuestionId == x.QuestionId).OrderBy(y => y.ShowOrder).ToList();
});
List dicCode = new List() { "1","2"};
var dicList = await _dictionaryRepository.Where(x => x.Parent.Code == "ExportResult")
.Where(x=> dicCode.Contains(x.Code))
.OrderBy(x => x.ShowOrder)
.Select(x => new TrialQuestionExportDic()
{
Code = int.Parse(x.Code),
Value = _userInfo.IsEn_Us ? x.Value : x.ValueCN,
ValueCN = _userInfo.IsEn_Us ? x.Value : x.ValueCN,
}).ToListAsync();
return new GetTrialQuestionExportResultOutDto()
{
DicList = dicList,
QuestionList = questionList
};
}
///
/// 获取自定义表格问题预览
///
///
[HttpPost]
public async Task<(GetReadingTableQuestionOutDto, bool)> GetCustomTableQuestionPreview(GetCustomQuestionPreviewInDto inDto)
{
List tableAnswers = new List();
List tableAnsweRowInfos = new List();
return (await _iReadingImageTaskService.GetReadingTableQuestion(
new GetReadingTableQuestionOrAnswerInDto()
{
TrialReadingCriterionId = inDto.TrialReadingCriterionId,
TableAnswers = tableAnswers,
TableAnsweRowInfos = tableAnsweRowInfos,
IsGetallQuestion = true,
IsGetPreview = true
}
), true);
}
public async Task