肿瘤学配置

Uat_Study
{872297557@qq.com} 2023-02-01 11:43:13 +08:00
parent 38a6cbf1b9
commit 114ad74522
3 changed files with 193 additions and 139 deletions

View File

@ -954,7 +954,6 @@ namespace IRaCIS.Application.Services
await _readingTableQuestionTrialRepository.AddRangeAsync(needAddTableDatas); await _readingTableQuestionTrialRepository.AddRangeAsync(needAddTableDatas);
#endregion #endregion
await _readingQuestionTrialRepository.SaveChangesAsync();
} }
} }

View File

@ -20,7 +20,7 @@ using static IRaCIS.Core.Domain.Share.StaticData;
namespace IRaCIS.Core.Application namespace IRaCIS.Core.Application
{ {
[ApiExplorerSettings(GroupName = "Trial")] [ApiExplorerSettings(GroupName = "Trial")]
public class TrialConfigService : BaseService, ITrialConfigService public class TrialConfigService : BaseService, ITrialConfigService
{ {
private readonly IRepository<Trial> _trialRepository; private readonly IRepository<Trial> _trialRepository;
private readonly IRepository<TrialQCQuestion> _trialQCQuestionRepository; private readonly IRepository<TrialQCQuestion> _trialQCQuestionRepository;
@ -101,7 +101,7 @@ namespace IRaCIS.Core.Application
.WhereIf(trialCriterion.FormType == FormType.MultiplePage, x => x.ReadingCriterionPageId != null) .WhereIf(trialCriterion.FormType == FormType.MultiplePage, x => x.ReadingCriterionPageId != null)
.AnyAsync(); .AnyAsync();
if (existsJudge&& trialCriterion.IsArbitrationReading) if (existsJudge && trialCriterion.IsArbitrationReading)
{ {
throw new BusinessValidationFailedException("有裁判问题未配置产生裁判阅片任务的条件,操作失败!"); throw new BusinessValidationFailedException("有裁判问题未配置产生裁判阅片任务的条件,操作失败!");
} }
@ -134,14 +134,14 @@ namespace IRaCIS.Core.Application
[NonDynamicMethod] [NonDynamicMethod]
public async Task<IResponseOutput> TrialReadingInfoSign(TrialReadingInfoSignInDto inDto) public async Task<IResponseOutput> TrialReadingInfoSign(TrialReadingInfoSignInDto inDto)
{ {
var trialCriterion = await _readingQuestionCriterionTrialRepository.Where(x => x.Id==inDto.TrialReadingCriterionId).FirstOrDefaultAsync(); var trialCriterion = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == inDto.TrialReadingCriterionId).FirstOrDefaultAsync();
var existsJudge = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == trialCriterion.Id && x.IsJudgeQuestion && x.JudgeType == JudgeTypeEnum.None) var existsJudge = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == trialCriterion.Id && x.IsJudgeQuestion && x.JudgeType == JudgeTypeEnum.None)
.WhereIf(trialCriterion.FormType == FormType.SinglePage, x => x.ReadingCriterionPageId == null) .WhereIf(trialCriterion.FormType == FormType.SinglePage, x => x.ReadingCriterionPageId == null)
.WhereIf(trialCriterion.FormType == FormType.MultiplePage, x => x.ReadingCriterionPageId != null) .WhereIf(trialCriterion.FormType == FormType.MultiplePage, x => x.ReadingCriterionPageId != null)
.AnyAsync(); .AnyAsync();
if (existsJudge&& trialCriterion.IsArbitrationReading) if (existsJudge && trialCriterion.IsArbitrationReading)
{ {
throw new BusinessValidationFailedException("有裁判问题未配置产生裁判阅片任务的条件,操作失败!"); throw new BusinessValidationFailedException("有裁判问题未配置产生裁判阅片任务的条件,操作失败!");
} }
@ -164,10 +164,10 @@ namespace IRaCIS.Core.Application
[HttpPost] [HttpPost]
public async Task<GetTrialReadingInfoOutDto> GetCriterionReadingInfo(GetTrialReadingInfoInDto inDto) public async Task<GetTrialReadingInfoOutDto> GetCriterionReadingInfo(GetTrialReadingInfoInDto inDto)
{ {
GetTrialReadingInfoOutDto trialInfo= await _readingQuestionCriterionTrialRepository.Where(x=>x.Id==inDto.TrialReadingCriterionId).ProjectTo<GetTrialReadingInfoOutDto>(_mapper.ConfigurationProvider).FirstNotNullAsync();
GetTrialReadingInfoOutDto trialInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == inDto.TrialReadingCriterionId).ProjectTo<GetTrialReadingInfoOutDto>(_mapper.ConfigurationProvider).FirstNotNullAsync();
if (trialInfo.ReadingTool == null) if (trialInfo.ReadingTool == null)
{ {
@ -192,14 +192,15 @@ namespace IRaCIS.Core.Application
await _readingCriterionDictionaryRepository.BatchDeleteNoTrackingAsync(x => x.CriterionId == trialCriterion.Id); await _readingCriterionDictionaryRepository.BatchDeleteNoTrackingAsync(x => x.CriterionId == trialCriterion.Id);
var criterionDictionaryList = await _readingCriterionDictionaryRepository.Where(x => x.CriterionId == trialCriterion.ReadingQuestionCriterionSystemId.Value) var criterionDictionaryList = await _readingCriterionDictionaryRepository.Where(x => x.CriterionId == trialCriterion.ReadingQuestionCriterionSystemId.Value)
.ToListAsync(); .ToListAsync();
criterionDictionaryList.ForEach(x => { criterionDictionaryList.ForEach(x =>
{
x.Id = NewId.NextGuid(); x.Id = NewId.NextGuid();
x.Dictionary = null; x.Dictionary = null;
x.IsSystemCriterion = false; x.IsSystemCriterion = false;
x.CriterionId = inDto.TrialReadingCriterionId; x.CriterionId = inDto.TrialReadingCriterionId;
}); });
if (trialCriterion.SynchronizeOriginalTime == null ) if (trialCriterion.SynchronizeOriginalTime == null)
{ {
// 同步器官 // 同步器官
await _iOrganInfoService.SynchronizeSystemOrganToTrial(new SynchronizeSystemOrganToTrialInDto() await _iOrganInfoService.SynchronizeSystemOrganToTrial(new SynchronizeSystemOrganToTrialInDto()
@ -215,20 +216,14 @@ namespace IRaCIS.Core.Application
TrialReadingCriterionId = inDto.TrialReadingCriterionId, TrialReadingCriterionId = inDto.TrialReadingCriterionId,
}); });
// 清除多余答案
var questionQuery = _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == inDto.TrialReadingCriterionId).AsQueryable();
var tableQuestionQuery = _readingTableQuestionTrialRepository.Where(x => x.TrialCriterionId == inDto.TrialReadingCriterionId).AsQueryable();
await _readingTaskQuestionAnswer.BatchDeleteNoTrackingAsync(x => questionQuery.Count(y => y.Id == x.ReadingQuestionTrialId) == 0) ;
await _readingTableAnswerRowInfoRepository.BatchDeleteNoTrackingAsync(x => questionQuery.Count(y => y.Id == x.QuestionId)==0);
await _readingTableQuestionAnswerRepository.BatchDeleteNoTrackingAsync(x => tableQuestionQuery.Count(y => y.Id == x.TableQuestionId)==0);
var systemCriterion = await _readingQuestionCriterionSystemRepository.Where(x => x.Id == trialCriterion.ReadingQuestionCriterionSystemId).FirstNotNullAsync(); var systemCriterion = await _readingQuestionCriterionSystemRepository.Where(x => x.Id == trialCriterion.ReadingQuestionCriterionSystemId).FirstNotNullAsync();
await _readingQuestionCriterionTrialRepository.BatchUpdateNoTrackingAsync(x => x.Id == inDto.TrialReadingCriterionId, x => new ReadingQuestionCriterionTrial() await _readingQuestionCriterionTrialRepository.BatchUpdateNoTrackingAsync(x => x.Id == inDto.TrialReadingCriterionId, x => new ReadingQuestionCriterionTrial()
{ {
IsOncologyReading = systemCriterion.IsOncologyReading, IsOncologyReading = systemCriterion.IsOncologyReading,
IseCRFShowInDicomReading=systemCriterion.IseCRFShowInDicomReading, IseCRFShowInDicomReading = systemCriterion.IseCRFShowInDicomReading,
}); });
@ -239,7 +234,16 @@ namespace IRaCIS.Core.Application
{ {
SynchronizeOriginalTime = DateTime.Now SynchronizeOriginalTime = DateTime.Now
}); });
await _readingCriterionDictionaryRepository.SaveChangesAsync(); await _readingCriterionDictionaryRepository.SaveChangesAsync();
// 清除多余答案
var questionQuery = _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == inDto.TrialReadingCriterionId).AsQueryable();
var tableQuestionQuery = _readingTableQuestionTrialRepository.Where(x => x.TrialCriterionId == inDto.TrialReadingCriterionId).AsQueryable();
await _readingTaskQuestionAnswer.BatchDeleteNoTrackingAsync(x => questionQuery.Count(y => y.Id == x.ReadingQuestionTrialId) == 0);
await _readingTableAnswerRowInfoRepository.BatchDeleteNoTrackingAsync(x => questionQuery.Count(y => y.Id == x.QuestionId) == 0);
await _readingTableQuestionAnswerRepository.BatchDeleteNoTrackingAsync(x => tableQuestionQuery.Count(y => y.Id == x.TableQuestionId) == 0);
} }
return ResponseOutput.Ok(true); return ResponseOutput.Ok(true);
@ -265,13 +269,13 @@ namespace IRaCIS.Core.Application
{ {
CriterionId = inDto.TrialReadingCriterionId, CriterionId = inDto.TrialReadingCriterionId,
DictionaryId = x.DictionaryId, DictionaryId = x.DictionaryId,
IsBaseLineUse=x.IsBaseLineUse, IsBaseLineUse = x.IsBaseLineUse,
IsFollowVisitUse=x.IsFollowVisitUse, IsFollowVisitUse = x.IsFollowVisitUse,
IsSystemCriterion = false, IsSystemCriterion = false,
ParentCode = ReadingCommon.CriterionDictionary.GlobalAssess ParentCode = ReadingCommon.CriterionDictionary.GlobalAssess
})); }));
var result= await _readingCriterionDictionaryRepository.SaveChangesAsync(); var result = await _readingCriterionDictionaryRepository.SaveChangesAsync();
return ResponseOutput.Ok(result); return ResponseOutput.Ok(result);
} }
@ -289,8 +293,8 @@ namespace IRaCIS.Core.Application
GetGlobalReadingOutDto result = new GetGlobalReadingOutDto() GetGlobalReadingOutDto result = new GetGlobalReadingOutDto()
{ {
IsGlobalReading = trialCriterion.IsGlobalReading, IsGlobalReading = trialCriterion.IsGlobalReading,
IsSystemCriterion= trialCriterion.ReadingQuestionCriterionSystemId!=null, IsSystemCriterion = trialCriterion.ReadingQuestionCriterionSystemId != null,
IsSign=trialCriterion.ReadingInfoSignTime!=null, IsSign = trialCriterion.ReadingInfoSignTime != null,
GlobalAssessTypes = await _readingCriterionDictionaryRepository.Where(x => x.CriterionId == inDto.TrialReadingCriterionId GlobalAssessTypes = await _readingCriterionDictionaryRepository.Where(x => x.CriterionId == inDto.TrialReadingCriterionId
&& x.ParentCode == ReadingCommon.CriterionDictionary.GlobalAssess && x.ParentCode == ReadingCommon.CriterionDictionary.GlobalAssess
) )
@ -308,7 +312,7 @@ namespace IRaCIS.Core.Application
Value = x.Dictionary.Value, Value = x.Dictionary.Value,
ValueCN = x.Dictionary.ValueCN ValueCN = x.Dictionary.ValueCN
}).OrderBy(x => x.ParentCode).ThenBy(x => x.ShowOrder).ToListAsync() }).OrderBy(x => x.ParentCode).ThenBy(x => x.ShowOrder).ToListAsync()
}; };
return result; return result;
} }
@ -324,9 +328,9 @@ namespace IRaCIS.Core.Application
var trialCriterion = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == inDto.TrialReadingCriterionId).FirstNotNullAsync(); var trialCriterion = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == inDto.TrialReadingCriterionId).FirstNotNullAsync();
return new GetOncologySetOutDto return new GetOncologySetOutDto
{ {
EvaluationReason = trialCriterion.EvaluationReason.IsNullOrEmpty()? ReadingCommon.EvaluationReason : trialCriterion.EvaluationReason, EvaluationReason = trialCriterion.EvaluationReason.IsNullOrEmpty() ? ReadingCommon.EvaluationReason : trialCriterion.EvaluationReason,
OncologyAssessIds = await _readingCriterionDictionaryRepository.Where(x => x.CriterionId == inDto.TrialReadingCriterionId && x.ParentCode == ReadingCommon.CriterionDictionary.OncologyAssess).Select(x => x.DictionaryId).ToListAsync(), OncologyAssessIds = await _readingCriterionDictionaryRepository.Where(x => x.CriterionId == inDto.TrialReadingCriterionId && x.ParentCode == ReadingCommon.CriterionDictionary.OncologyAssess).Select(x => x.DictionaryId).ToListAsync(),
IsSystemCriterion= trialCriterion.ReadingQuestionCriterionSystemId!=null, IsSystemCriterion = trialCriterion.ReadingQuestionCriterionSystemId != null,
IsSign = trialCriterion.ReadingInfoSignTime != null, IsSign = trialCriterion.ReadingInfoSignTime != null,
}; };
} }
@ -340,13 +344,13 @@ namespace IRaCIS.Core.Application
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
public async Task<IResponseOutput> SetOncologySet(SetOncologySetInDto inDto) public async Task<IResponseOutput> SetOncologySet(SetOncologySetInDto inDto)
{ {
await _readingQuestionCriterionTrialRepository.UpdatePartialFromQueryAsync(inDto.TrialReadingCriterionId, x => new ReadingQuestionCriterionTrial() await _readingQuestionCriterionTrialRepository.UpdatePartialFromQueryAsync(inDto.TrialReadingCriterionId, x => new ReadingQuestionCriterionTrial()
{ {
EvaluationResult = inDto.EvaluationResult, EvaluationResult = inDto.EvaluationResult,
EvaluationReason = inDto.EvaluationReason, EvaluationReason = inDto.EvaluationReason,
IsShowDetail=inDto.IsShowDetail, IsShowDetail = inDto.IsShowDetail,
}); });
@ -370,31 +374,31 @@ namespace IRaCIS.Core.Application
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<(List<TrialJudgeQuestion>,object)> GetTrialReadingJudgeList(GetTrialReadingInfoInDto inDto) public async Task<(List<TrialJudgeQuestion>, object)> GetTrialReadingJudgeList(GetTrialReadingInfoInDto inDto)
{ {
var trialCriterion = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == inDto.TrialReadingCriterionId).FirstOrDefaultAsync(); var trialCriterion = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == inDto.TrialReadingCriterionId).FirstOrDefaultAsync();
var judgeQuestionList= await _readingQuestionTrialRepository var judgeQuestionList = await _readingQuestionTrialRepository
.WhereIf(trialCriterion.FormType==FormType.SinglePage,x=>x.ReadingCriterionPageId==null) .WhereIf(trialCriterion.FormType == FormType.SinglePage, x => x.ReadingCriterionPageId == null)
.WhereIf(trialCriterion.FormType == FormType.MultiplePage, x => x.ReadingCriterionPageId != null) .WhereIf(trialCriterion.FormType == FormType.MultiplePage, x => x.ReadingCriterionPageId != null)
.Where(x => x.ReadingQuestionCriterionTrial.IsConfirm && x.IsJudgeQuestion && x.TrialId == inDto.TrialId&&x.ReadingQuestionCriterionTrialId== trialCriterion.Id) .Where(x => x.ReadingQuestionCriterionTrial.IsConfirm && x.IsJudgeQuestion && x.TrialId == inDto.TrialId && x.ReadingQuestionCriterionTrialId == trialCriterion.Id)
.Select(x => new TrialJudgeQuestion() .Select(x => new TrialJudgeQuestion()
{ {
AnswerCombination = x.AnswerCombination, AnswerCombination = x.AnswerCombination,
AnswerGroup = x.AnswerGroup, AnswerGroup = x.AnswerGroup,
JudgeType = x.JudgeType, JudgeType = x.JudgeType,
QuestionId = x.Id, QuestionId = x.Id,
PageName=x.ReadingCriterionPage.PageName, PageName = x.ReadingCriterionPage.PageName,
QuestionName = x.QuestionName.LanguageName(x.QuestionEnName, _userInfo.IsEn_Us), QuestionName = x.QuestionName.LanguageName(x.QuestionEnName, _userInfo.IsEn_Us),
ReadingQuestionCriterionTrialId = x.ReadingQuestionCriterionTrialId ReadingQuestionCriterionTrialId = x.ReadingQuestionCriterionTrialId
}).ToListAsync(); }).ToListAsync();
return (judgeQuestionList, new return (judgeQuestionList, new
{ {
IsSign= trialCriterion.ReadingInfoSignTime!= null, IsSign = trialCriterion.ReadingInfoSignTime != null,
}); });
} }
@ -407,7 +411,7 @@ namespace IRaCIS.Core.Application
[HttpPost] [HttpPost]
public async Task<List<ReadingCriterionPageDto>> GetReadingCriterionPageList(GetTrialReadingInfoInDto inDto) public async Task<List<ReadingCriterionPageDto>> GetReadingCriterionPageList(GetTrialReadingInfoInDto inDto)
{ {
return await _readingCriterionPageRepository.Where(x => x.TrialId == inDto.TrialId).ProjectTo<ReadingCriterionPageDto>(_mapper.ConfigurationProvider).ToListAsync(); return await _readingCriterionPageRepository.Where(x => x.TrialId == inDto.TrialId).ProjectTo<ReadingCriterionPageDto>(_mapper.ConfigurationProvider).ToListAsync();
} }
/// <summary> /// <summary>
@ -419,20 +423,20 @@ namespace IRaCIS.Core.Application
public async Task<GetTrialReadingCriterionInfoOutDto> GetTrialReadingCriterionInfo(GetTrialReadingInfoInDto inDto) public async Task<GetTrialReadingCriterionInfoOutDto> GetTrialReadingCriterionInfo(GetTrialReadingInfoInDto inDto)
{ {
GetTrialReadingCriterionInfoOutDto result = new GetTrialReadingCriterionInfoOutDto(); GetTrialReadingCriterionInfoOutDto result = new GetTrialReadingCriterionInfoOutDto();
result.ReadingCriterionPageList = await _readingCriterionPageRepository.Where(x => x.TrialId == inDto.TrialId).ProjectTo<ReadingCriterionPageDto>(_mapper.ConfigurationProvider).OrderBy(x=>x.ShowOrder).ToListAsync(); result.ReadingCriterionPageList = await _readingCriterionPageRepository.Where(x => x.TrialId == inDto.TrialId).ProjectTo<ReadingCriterionPageDto>(_mapper.ConfigurationProvider).OrderBy(x => x.ShowOrder).ToListAsync();
var trialCriterion = await _readingQuestionCriterionTrialRepository.Where(x => x.Id==inDto.TrialReadingCriterionId).FirstOrDefaultAsync(); var trialCriterion = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == inDto.TrialReadingCriterionId).FirstOrDefaultAsync();
result.ReadingInfoSignTime = trialCriterion.ReadingInfoSignTime; result.ReadingInfoSignTime = trialCriterion.ReadingInfoSignTime;
result.DigitPlaces = trialCriterion.DigitPlaces; result.DigitPlaces = trialCriterion.DigitPlaces;
result.TrialCriterionId = trialCriterion.Id; result.TrialCriterionId = trialCriterion.Id;
result.FormType = trialCriterion.FormType; result.FormType = trialCriterion.FormType;
result.IsFromSystem = trialCriterion.ReadingQuestionCriterionSystemId != null; result.IsFromSystem = trialCriterion.ReadingQuestionCriterionSystemId != null;
result.IsMustGlobalReading = trialCriterion.IsMustGlobalReading; result.IsMustGlobalReading = trialCriterion.IsMustGlobalReading;
result.IsSystemCriterion = trialCriterion.ReadingQuestionCriterionSystemId != null; result.IsSystemCriterion = trialCriterion.ReadingQuestionCriterionSystemId != null;
result.TrialQuestionList = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrial.IsConfirm && x.TrialId == inDto.TrialId&&x.ReadingQuestionCriterionTrialId == result.TrialCriterionId
&&x.ReadingCriterionPageId==null) result.TrialQuestionList = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrial.IsConfirm && x.TrialId == inDto.TrialId && x.ReadingQuestionCriterionTrialId == result.TrialCriterionId
&& x.ReadingCriterionPageId == null)
.ProjectTo<TrialReadQuestion>(_mapper.ConfigurationProvider).OrderBy(x => x.ShowOrder).ToListAsync(); .ProjectTo<TrialReadQuestion>(_mapper.ConfigurationProvider).OrderBy(x => x.ShowOrder).ToListAsync();
return result; return result;
@ -460,13 +464,13 @@ namespace IRaCIS.Core.Application
throw new BusinessValidationFailedException("当前标准下未配置问题"); throw new BusinessValidationFailedException("当前标准下未配置问题");
} }
} }
await _readingQuestionCriterionTrialRepository.UpdatePartialFromQueryAsync(inDto.TrialReadingCriterionId, x => new ReadingQuestionCriterionTrial() await _readingQuestionCriterionTrialRepository.UpdatePartialFromQueryAsync(inDto.TrialReadingCriterionId, x => new ReadingQuestionCriterionTrial()
{ {
FormType = inDto.FormType, FormType = inDto.FormType,
}); });
var result = await _trialRepository.SaveChangesAsync(); var result = await _trialRepository.SaveChangesAsync();
@ -493,28 +497,28 @@ namespace IRaCIS.Core.Application
await _readingQuestionCriterionTrialRepository.UpdatePartialFromQueryAsync(inDto.TrialReadingCriterionId, x => new ReadingQuestionCriterionTrial() await _readingQuestionCriterionTrialRepository.UpdatePartialFromQueryAsync(inDto.TrialReadingCriterionId, x => new ReadingQuestionCriterionTrial()
{ {
ReadingTool=inDto.ReadingTool, ReadingTool = inDto.ReadingTool,
IsReadingPeriod=inDto.IsReadingPeriod, IsReadingPeriod = inDto.IsReadingPeriod,
//DigitPlaces=inDto.DigitPlaces, //DigitPlaces=inDto.DigitPlaces,
IsReadingTaskViewInOrder =inDto.IsReadingTaskViewInOrder, IsReadingTaskViewInOrder = inDto.IsReadingTaskViewInOrder,
ReadingTaskViewEnum = inDto.ReadingTaskViewEnum, ReadingTaskViewEnum = inDto.ReadingTaskViewEnum,
DigitPlaces= inDto.DigitPlaces, DigitPlaces = inDto.DigitPlaces,
//IsImageIabeled = inDto.IsImageIabeled, //IsImageIabeled = inDto.IsImageIabeled,
IsReadingShowSubjectInfo = inDto.IsReadingShowSubjectInfo, IsReadingShowSubjectInfo = inDto.IsReadingShowSubjectInfo,
IsReadingShowPreviousResults = inDto.IsReadingShowPreviousResults, IsReadingShowPreviousResults = inDto.IsReadingShowPreviousResults,
GlobalUpdateType=inDto.GlobalUpdateType, GlobalUpdateType = inDto.GlobalUpdateType,
ImagePlatform=inDto.ImagePlatform, ImagePlatform = inDto.ImagePlatform,
IseCRFShowInDicomReading=inDto.IseCRFShowInDicomReading, IseCRFShowInDicomReading = inDto.IseCRFShowInDicomReading,
ArbitrationRule= arbitration, ArbitrationRule = arbitration,
ReadingType = inDto.ReadingType, ReadingType = inDto.ReadingType,
IsGlobalReading = inDto.IsGlobalReading, IsGlobalReading = inDto.IsGlobalReading,
IsArbitrationReading = inDto.IsArbitrationReading, IsArbitrationReading = inDto.IsArbitrationReading,
IsOncologyReading = inDto.IsOncologyReading, IsOncologyReading = inDto.IsOncologyReading,
}); });
var result = await _readingQuestionCriterionTrialRepository.SaveChangesAsync(); var result = await _readingQuestionCriterionTrialRepository.SaveChangesAsync();
@ -541,7 +545,7 @@ namespace IRaCIS.Core.Application
{ {
SignCodeId = signRawText.Id, SignCodeId = signRawText.Id,
SignCode = signRawText.Code, SignCode = signRawText.Code,
SignText = _userInfo.IsEn_Us? signRawText.ParentValue.Replace("xxx", signRawText.Value) : signRawText.ParentValueCN.Replace("xxx", signRawText.ValueCN), SignText = _userInfo.IsEn_Us ? signRawText.ParentValue.Replace("xxx", signRawText.Value) : signRawText.ParentValueCN.Replace("xxx", signRawText.ValueCN),
//SignTextCN = signRawText.ParentValueCN.Replace("xxx", signRawText.Value) //SignTextCN = signRawText.ParentValueCN.Replace("xxx", signRawText.Value)
}); });
} }
@ -627,8 +631,8 @@ namespace IRaCIS.Core.Application
{ {
await _trialRepository.UpdatePartialFromQueryAsync(t => t.Id == signConfirmDTO.TrialId, u => new Trial() { IsTrialUrgentConfirmed = true }); await _trialRepository.UpdatePartialFromQueryAsync(t => t.Id == signConfirmDTO.TrialId, u => new Trial() { IsTrialUrgentConfirmed = true });
} }
else else
if (signConfirmDTO.SignCode == ((int)SignEnum.TrialQCQuestionConfirm).ToString()) if (signConfirmDTO.SignCode == ((int)SignEnum.TrialQCQuestionConfirm).ToString())
{ {
@ -699,7 +703,7 @@ namespace IRaCIS.Core.Application
trialInfo.UpdateTime = DateTime.Now; trialInfo.UpdateTime = DateTime.Now;
return ResponseOutput.Ok(await _repository.SaveChangesAsync()); return ResponseOutput.Ok(await _repository.SaveChangesAsync());
} }
@ -719,12 +723,12 @@ namespace IRaCIS.Core.Application
return ResponseOutput.NotOk("该项目当前状态不是初始化,不允许进行该操作。"); return ResponseOutput.NotOk("该项目当前状态不是初始化,不允许进行该操作。");
} }
var trialInfo = await _trialRepository.Where(t => t.Id == trialConfig.TrialId, true).Include(t => t.TrialDicList.Where(u => u.KeyName == StaticData.Criterion)).FirstOrDefaultAsync(); var trialInfo = await _trialRepository.Where(t => t.Id == trialConfig.TrialId, true).Include(t => t.TrialDicList.Where(u => u.KeyName == StaticData.Criterion)).FirstOrDefaultAsync();
if (trialInfo == null) return Null404NotFound(trialInfo); if (trialInfo == null) return Null404NotFound(trialInfo);
_mapper.Map(trialConfig, trialInfo); _mapper.Map(trialConfig, trialInfo);
@ -959,7 +963,7 @@ namespace IRaCIS.Core.Application
/// <param name="trialConfig"></param> /// <param name="trialConfig"></param>
/// <returns></returns> /// <returns></returns>
[HttpPut] [HttpPut]
[TypeFilter(typeof(TrialResourceFilter),Arguments = new object[] { "BeforeOngoingCantOpt", "AfterStopCannNotOpt" })] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "BeforeOngoingCantOpt", "AfterStopCannNotOpt" })]
//[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] //[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
public async Task<IResponseOutput> ConfigTrialReadingTaskViewRule(TrialReadingTaskViewConfig trialConfig) public async Task<IResponseOutput> ConfigTrialReadingTaskViewRule(TrialReadingTaskViewConfig trialConfig)
{ {
@ -970,7 +974,7 @@ namespace IRaCIS.Core.Application
return ResponseOutput.Ok(await _trialRepository.SaveChangesAsync()); return ResponseOutput.Ok(await _trialRepository.SaveChangesAsync());
} }
} }
} }

View File

@ -141,9 +141,9 @@ namespace IRaCIS.Core.Infra.EFCore.Common
{ {
//TrialDicList = string.Join(",", trialDics) //TrialDicList = string.Join(",", trialDics)
CriterionNames = criterionNameList.Count() > 0? string.Join(",", criterionNameList):string.Empty, CriterionNames = criterionNameList.Count() > 0 ? string.Join(",", criterionNameList) : string.Empty,
ClinicalDataSetNames = clinicalDataSetNameList.Count() > 0 ? string.Join(",", clinicalDataSetNameList):String.Empty, ClinicalDataSetNames = clinicalDataSetNameList.Count() > 0 ? string.Join(",", clinicalDataSetNameList) : String.Empty,
}); ; }); ;
} }
@ -196,10 +196,18 @@ namespace IRaCIS.Core.Infra.EFCore.Common
var isDistinctionInterface = false; var isDistinctionInterface = false;
//设置项目配置 肿瘤学配置 和阅片标准配置 //设置项目配置 肿瘤学配置 和阅片标准配置
if (_userInfo.RequestUrl == "TrialConfig/setOncologySet" || _userInfo.RequestUrl == "TrialConfig/setTrialReadingCriterion" || _userInfo.RequestUrl == "configTrialBasicInfo/ConfigTrialProcessInfoConfirm" if (_userInfo.RequestUrl == "TrialConfig/setOncologySet"
//现在废弃 没用
|| _userInfo.RequestUrl == "TrialConfig/setTrialReadingCriterion"
//项目流程确认
|| _userInfo.RequestUrl == "configTrialBasicInfo/ConfigTrialProcessInfoConfirm"
//阅片单元 保存阅片规则 //阅片单元 保存阅片规则
|| _userInfo.RequestUrl == "TrialConfig/setCriterionReadingInfo") || _userInfo.RequestUrl == "TrialConfig/setCriterionReadingInfo"
|| _userInfo.RequestUrl == "configTrialBasicInfo/TrialReadingInfoSign")
{ {
isDistinctionInterface = true; isDistinctionInterface = true;
} }
@ -212,6 +220,20 @@ namespace IRaCIS.Core.Infra.EFCore.Common
extraIdentification = "/Auto"; extraIdentification = "/Auto";
} }
//保存肿瘤学配置哪里 强行要将 评估结果(中间字典表的多条数据)存到标准稽查上
var dicIdList = entitys.Where(x => x.Entity.GetType() == typeof(ReadingCriterionDictionary)).Select(t => t.Entity as ReadingCriterionDictionary).Where(t=>t.CriterionId==entity.Id).Select(t=>t.DictionaryId).ToList();
var dicValueList = new List<string>();
if (dicIdList.Count() == 0)
{
dicValueList = await _dbContext.ReadingCriterionDictionary.Where(t => t.CriterionId == entity.Id).Select(t => t.Dictionary.Value).ToListAsync();
}
else
{
dicValueList = await _dbContext.Dictionary.Where(t => dicIdList.Contains(t.Id) ).Select(t => t.Value).ToListAsync();
}
await InsertInspection<ReadingQuestionCriterionTrial>(entity, type, x => new InspectionConvertDTO() await InsertInspection<ReadingQuestionCriterionTrial>(entity, type, x => new InspectionConvertDTO()
{ {
@ -223,7 +245,10 @@ namespace IRaCIS.Core.Infra.EFCore.Common
ExtraIndentification = extraIdentification ExtraIndentification = extraIdentification
}); }, new
{
EvaluationResultTypes = dicValueList.Count > 0 ? string.Join(",", dicValueList) : string.Empty
}) ;
} }
//系统标准问题 //系统标准问题
@ -264,21 +289,40 @@ namespace IRaCIS.Core.Infra.EFCore.Common
var isDistinctionInterface = false; var isDistinctionInterface = false;
//重置仲裁规则 var extraIdentification = string.Empty;
if (_userInfo.RequestUrl == "ReadingImageTask/setTrialCriterionJudgeQuestionAnswerGroup")
{
isDistinctionInterface = true;
}
//同步的数据 后面加"/Auto" 因为同步的地方可能会改 所以取反 //同步的数据 后面加"/Auto" 因为同步的地方可能会改 所以取反
var extraIdentification = string.Empty;
if (_userInfo.RequestUrl != "ReadingQuestion/addOrUpdateReadingQuestionTrial" && type == AuditOpt.Add) if (_userInfo.RequestUrl != "ReadingQuestion/addOrUpdateReadingQuestionTrial" && type == AuditOpt.Add)
{ {
extraIdentification = "/Auto"; extraIdentification = "/Auto";
} }
//重置仲裁规则
var cloneEntity = entity.Clone();
if (_userInfo.RequestUrl == "ReadingImageTask/setTrialCriterionJudgeQuestionAnswerGroup")
{
isDistinctionInterface = true;
if (entity.JudgeType == JudgeTypeEnum.None)
{
extraIdentification = "/Reset";
}
//翻译 可能自己填写的 也有可能是从字典中获取的
if (entity.QuestionGenre == TableQuestionType.Dictionary && !string.IsNullOrWhiteSpace(entity.DictionaryCode))
{
var translateList = _dbContext.Dictionary.Where(t => t.Code == entity.DictionaryCode.Trim()).SelectMany(t => t.ChildList).Select(t => new { t.Code, t.Value, t.ValueCN }).ToList();
foreach (var translateItem in translateList)
{
cloneEntity.AnswerCombination = cloneEntity.AnswerCombination.Replace($"\"{translateItem.Code}\"", $"\"{translateItem.Value}\"");
cloneEntity.AnswerGroup = cloneEntity.AnswerGroup.Replace($"|{translateItem.Code}|", $"|{translateItem.Value}|");
}
}
}
int? parentQuestionShowOrder = null; int? parentQuestionShowOrder = null;
int? relavantQuestionShowOrder = null; int? relavantQuestionShowOrder = null;
@ -295,7 +339,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
} }
await InsertInspection<ReadingQuestionTrial>(entity, type, x => new InspectionConvertDTO() await InsertInspection<ReadingQuestionTrial>(cloneEntity, type, x => new InspectionConvertDTO()
{ {
IsDistinctionInterface = isDistinctionInterface, IsDistinctionInterface = isDistinctionInterface,
@ -545,68 +589,75 @@ namespace IRaCIS.Core.Infra.EFCore.Common
if (entitys.Any(x => x.Entity.GetType() == typeof(ReadingCriterionDictionary))) if (entitys.Any(x => x.Entity.GetType() == typeof(ReadingCriterionDictionary)))
{ {
//系统标准设置 没有翻译的字段
//if (_userInfo.RequestUrl == "ReadingQuestion/setCriterionDictionary")
//{
var type = AuditOpt.Add; var type = AuditOpt.Add;
var list = entitys.Where(x => x.Entity.GetType() == typeof(ReadingCriterionDictionary)).Select(t => t.Entity as ReadingCriterionDictionary).ToList(); var allList = entitys.Where(x => x.Entity.GetType() == typeof(ReadingCriterionDictionary)).Select(t => t.Entity as ReadingCriterionDictionary).ToList();
var firstEntity = list.First();
var cloneEntity = firstEntity.Clone();
//查询出字典的Value ValueCN Des 保存 //查询出字典的Value ValueCN Des 保存
var dicIdList = list.Select(t => t.DictionaryId).ToList(); var dicIdList = allList.Select(t => t.DictionaryId).ToList();
var selectList = await _dbContext.Dictionary.Where(x => dicIdList.Contains(x.Id)).Select(t => new { t.Id, t.Value, t.ValueCN, t.Description, t.ShowOrder }).ToListAsync(); var selectList = await _dbContext.Dictionary.Where(x => dicIdList.Contains(x.Id)).Select(t => new { t.Id, t.Value, t.ValueCN, t.Description, t.ShowOrder }).ToListAsync();
//保证Id 唯一
cloneEntity.Id = IdentifierHelper.CreateGuid(firstEntity.CriterionId.ToString(), firstEntity.ParentCode.ToString());
foreach (var list in allList.GroupBy(t => t.ParentCode))
var extraIdentification = string.Empty;
//系统标准
if (cloneEntity.IsSystemCriterion)
{
extraIdentification = $"/{cloneEntity.ParentCode}";
}
else
{
extraIdentification = $"/{cloneEntity.ParentCode}/IsTrial";
}
await InsertInspection<ReadingCriterionDictionary>(cloneEntity, type, x => new InspectionConvertDTO()
{ {
ObjectRelationParentId = x.CriterionId, var firstEntity = list.First();
var cloneEntity = list.First().Clone();
TrialReadingCriterionId = x.IsSystemCriterion == false ? x.CriterionId : null,
//不显示区分接口 通过是否是系统字典 以及字典Code 区分 //保证Id 唯一
IsDistinctionInterface = false, cloneEntity.Id = IdentifierHelper.CreateGuid(firstEntity.CriterionId.ToString(), firstEntity.ParentCode.ToString());
ExtraIndentification = extraIdentification
},
new var extraIdentification = string.Empty;
//系统标准
if (cloneEntity.IsSystemCriterion)
{ {
SelectList = selectList.Join(list, t => t.Id, u => u.DictionaryId, (t, u) => extraIdentification = $"/{cloneEntity.ParentCode}";
new }
{ else
t.Value, {
t.ValueCN, extraIdentification = $"/{cloneEntity.ParentCode}/IsTrial";
t.Description, }
t.ShowOrder,
u.IsBaseLineUse,
u.IsFollowVisitUse await InsertInspection<ReadingCriterionDictionary>(cloneEntity, type, x => new InspectionConvertDTO()
} {
).OrderBy(t => t.ShowOrder).ToList()
}); ObjectRelationParentId = x.CriterionId,
TrialReadingCriterionId = x.IsSystemCriterion == false ? x.CriterionId : null,
//不显示区分接口 通过是否是系统字典 以及字典Code 区分
IsDistinctionInterface = false,
ExtraIndentification = extraIdentification
},
new
{
SelectList = selectList.Join(list, t => t.Id, u => u.DictionaryId, (t, u) =>
new
{
t.Value,
t.ValueCN,
t.Description,
t.ShowOrder,
u.IsBaseLineUse,
u.IsFollowVisitUse
}
).OrderBy(t => t.ShowOrder).ToList()
});
}
//}
} }
@ -1573,11 +1624,11 @@ namespace IRaCIS.Core.Infra.EFCore.Common
//} //}
//trialDics = await this._dbContext.Dictionary.Where(x => dictionaryIds.Contains(x.Id)).Select(x => x.ValueCN).ToListAsync(); //trialDics = await this._dbContext.Dictionary.Where(x => dictionaryIds.Contains(x.Id)).Select(x => x.ValueCN).ToListAsync();
var trialReadingCritiralIdList= new List<Guid>(); var trialReadingCritiralIdList = new List<Guid>();
var criterionNameList = new List<string>(); var criterionNameList = new List<string>();
if (entity.TrialClinicalDataSetCriteriaList==null || entity.TrialClinicalDataSetCriteriaList.Count() == 0) if (entity.TrialClinicalDataSetCriteriaList == null || entity.TrialClinicalDataSetCriteriaList.Count() == 0)
{ {
criterionNameList = await _dbContext.TrialClinicalDataSetCriterion.Where(t => t.TrialClinicalDataSetId == entity.Id).Select(t => t.TrialReadingCriterion.CriterionName).ToListAsync(); criterionNameList = await _dbContext.TrialClinicalDataSetCriterion.Where(t => t.TrialClinicalDataSetId == entity.Id).Select(t => t.TrialReadingCriterion.CriterionName).ToListAsync();
} }
@ -1592,9 +1643,9 @@ namespace IRaCIS.Core.Infra.EFCore.Common
IsDistinctionInterface = false, IsDistinctionInterface = false,
ObjectRelationParentId = entity.TrialId, ObjectRelationParentId = entity.TrialId,
ExtraIndentification = extraIdentification, ExtraIndentification = extraIdentification,
},new }, new
{ {
CriterionNames= criterionNameList?.Count()>0? string.Join(",", criterionNameList):string.Empty CriterionNames = criterionNameList?.Count() > 0 ? string.Join(",", criterionNameList) : string.Empty
}); });
} }
@ -2527,22 +2578,22 @@ namespace IRaCIS.Core.Infra.EFCore.Common
} }
break; break;
case nameof(ReadingQuestionTrial): //case nameof(ReadingQuestionTrial):
var trialReadingQuestion = entityObj as ReadingQuestionTrial; // var trialReadingQuestion = entityObj as ReadingQuestionTrial;
switch (_userInfo.RequestUrl) // switch (_userInfo.RequestUrl)
{ // {
case "ReadingImageTask/setTrialCriterionJudgeQuestionAnswerGroup": // case "ReadingImageTask/setTrialCriterionJudgeQuestionAnswerGroup":
if (trialReadingQuestion.JudgeType == JudgeTypeEnum.None) // if (trialReadingQuestion.JudgeType == JudgeTypeEnum.None)
{ // {
type = type + "/" + "Reset"; // type = type + "/" + "Reset";
} // }
break; // break;
} // }
break; // break;