734 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			734 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			C#
		
	
	
| using IRaCIS.Application.Interfaces;
 | |
| 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 Panda.DynamicWebApi.Attributes;
 | |
| 
 | |
| namespace IRaCIS.Core.Application.Service.RC
 | |
| {
 | |
| 
 | |
| 
 | |
|     [ApiExplorerSettings(GroupName = "Reading")]
 | |
|     public class ReadingQuestionService(IRepository<ReadingQuestionCriterionSystem> _readingQuestionCriterionSystemRepository,
 | |
|         IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
 | |
|         IRepository<ReadingQuestionTrial> _readingQuestionTrialRepository,
 | |
|         IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswer,
 | |
|     IRepository<Dictionary> _dictionarRepository,
 | |
|         IRepository<ReadingCriterionPage> _readingCriterionPageRepository,
 | |
|         IRepository<ReadingSystemCriterionDictionary> _readingCriterionDictionaryRepository,
 | |
|         IRepository<ReadingTrialCriterionDictionary> _readingTrialCriterionDictionaryRepository,
 | |
|         IRepository<VisitTask> _visitTaskRepository,
 | |
|         ITrialConfigService _trialConfigService,
 | |
|         IRepository<SystemCriterionDictionaryCode> _systemCriterionDictionaryCodeRepository,
 | |
|         IRepository<ReadingTableQuestionAnswer> _readingTableQuestionAnswerRepository,
 | |
|         IRepository<ReadingTableAnswerRowInfo> _readingTableAnswerRowInfoRepository,
 | |
|         IRepository<ReadingTableQuestionTrial> _readingTableQuestionTrialRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService
 | |
|     {
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 删除系统标准字典Code
 | |
|         /// </summary>
 | |
|         /// <param name="inDto"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<IResponseOutput> DeleteSystemCriterionDictionary(DeleteSystemCriterionDictionaryIndto inDto)
 | |
|         {
 | |
|             var criterionDictionaryCode = await _systemCriterionDictionaryCodeRepository.Where(x => x.Id == inDto.Id).FirstNotNullAsync();
 | |
| 
 | |
|             await _readingCriterionDictionaryRepository.BatchDeleteNoTrackingAsync(x => x.ParentCode == criterionDictionaryCode.Code && x.CriterionId == criterionDictionaryCode.SystemCriterionId);
 | |
| 
 | |
|             await _systemCriterionDictionaryCodeRepository.DeleteFromQueryAsync(inDto.Id);
 | |
|             await _systemCriterionDictionaryCodeRepository.SaveChangesAsync();
 | |
| 
 | |
|             return ResponseOutput.Ok();
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 添加系统标准字典Code
 | |
|         /// </summary>
 | |
|         /// <param name="inDto"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<IResponseOutput> AddSystemCriterionDictionaryCode(AddSystemCriterionDictionaryCodeInDto inDto)
 | |
|         {
 | |
| 
 | |
|             //var codes=  await _systemCriterionDictionaryCodeRepository.Where(x => x.SystemCriterionId == inDto.SystemCriterionId).Select(x => x.Code).ToListAsync();
 | |
| 
 | |
|             //inDto.CodeList=  inDto.CodeList.Except(codes).ToList();
 | |
| 
 | |
|             await _systemCriterionDictionaryCodeRepository.BatchDeleteNoTrackingAsync(x => x.SystemCriterionId == inDto.SystemCriterionId);
 | |
| 
 | |
|             await _systemCriterionDictionaryCodeRepository.AddRangeAsync(inDto.CodeList.Select(x => new SystemCriterionDictionaryCode()
 | |
|             {
 | |
|                 SystemCriterionId = inDto.SystemCriterionId,
 | |
|                 Code = x
 | |
|             }).ToList());
 | |
| 
 | |
|             await _systemCriterionDictionaryCodeRepository.SaveChangesAsync();
 | |
| 
 | |
|             return ResponseOutput.Ok();
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 重置项目标准的重置状态
 | |
|         /// </summary>
 | |
|         /// <param name="trialReadingCriterionId">项目标准Id</param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<IResponseOutput> ResetTrialCriterionAsyncState(Guid trialReadingCriterionId)
 | |
|         {
 | |
|             await _readingQuestionCriterionTrialRepository.BatchUpdateNoTrackingAsync(x => x.Id == trialReadingCriterionId, x => new ReadingQuestionCriterionTrial
 | |
|             {
 | |
|                 SynchronizeOriginalTime = null,
 | |
|                 SynchronizeTime = DateTime.Now.AddYears(-20),
 | |
|                 IsSigned = false,
 | |
|                 ReadingInfoSignTime = null,
 | |
| 
 | |
|             });
 | |
| 
 | |
| 
 | |
|             return ResponseOutput.Ok();
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 设置系统全局阅片阅片信息
 | |
|         /// </summary>
 | |
|         /// <param name="inDto"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         [UnitOfWork]
 | |
|         public async Task<IResponseOutput> SetSystemGlobalInfo(SetSystemGlobalInfoInDto inDto)
 | |
|         {
 | |
| 
 | |
|             await _readingCriterionDictionaryRepository.BatchDeleteNoTrackingAsync(x => x.CriterionId == inDto.SystemCriterionId && x.ParentCode == ReadingCommon.CriterionDictionary.GlobalAssess);
 | |
| 
 | |
|             await _readingCriterionDictionaryRepository.AddRangeAsync(inDto.DictionaryList.Select(x => new ReadingSystemCriterionDictionary
 | |
|             {
 | |
|                 CriterionId = inDto.SystemCriterionId,
 | |
|                 DictionaryId = x.DictionaryId,
 | |
|                 IsSystemCriterion = true,
 | |
|                 ParentCode = ReadingCommon.CriterionDictionary.GlobalAssess,
 | |
|                 IsBaseLineUse = x.IsBaseLineUse,
 | |
|                 IsFollowVisitUse = x.IsFollowVisitUse,
 | |
|             }));
 | |
| 
 | |
|             await _readingQuestionCriterionSystemRepository.UpdatePartialFromQueryAsync(inDto.SystemCriterionId, x => new ReadingQuestionCriterionSystem()
 | |
|             {
 | |
|                 IsMustGlobalReading = inDto.IsMustGlobalReading
 | |
| 
 | |
|             });
 | |
| 
 | |
|             var result = await _readingQuestionCriterionTrialRepository.SaveChangesAsync();
 | |
| 
 | |
|             return ResponseOutput.Ok(result);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 获取系统全局阅片信息
 | |
|         /// </summary>
 | |
|         /// <param name="inDto"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<GetSystemGlobalInfoOutDto> GetSystemGlobalInfo(GetSystemOncologyInfoInDto inDto)
 | |
|         {
 | |
|             GetSystemGlobalInfoOutDto result = new GetSystemGlobalInfoOutDto()
 | |
|             {
 | |
|                 IsMustGlobalReading = await _readingQuestionCriterionSystemRepository.Where(x => x.Id == inDto.SystemCriterionId).Select(x => x.IsMustGlobalReading).FirstOrDefaultAsync(),
 | |
|                 DictionaryList = await _readingCriterionDictionaryRepository.AsQueryable().Where(x => x.CriterionId == inDto.SystemCriterionId && x.ParentCode == ReadingCommon.CriterionDictionary.GlobalAssess)
 | |
|               .ProjectTo<CriterionDictionaryInfo>(_mapper.ConfigurationProvider).OrderBy(x => x.ShowOrder).ToListAsync()
 | |
| 
 | |
|             };
 | |
| 
 | |
|             return result;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 获取系统肿瘤信息
 | |
|         /// </summary>
 | |
|         /// <param name="inDto"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<GetSystemOncologyInfoOutDto> GetSystemOncologyInfo(GetSystemOncologyInfoInDto inDto)
 | |
|         {
 | |
| 
 | |
|             GetSystemOncologyInfoOutDto result = new GetSystemOncologyInfoOutDto()
 | |
|             {
 | |
|                 IsOncologyReading = await _readingQuestionCriterionSystemRepository.Where(x => x.Id == inDto.SystemCriterionId).Select(x => x.IsOncologyReading).FirstOrDefaultAsync(),
 | |
|                 DictionaryList = await _readingCriterionDictionaryRepository.AsQueryable().Where(x => x.CriterionId == inDto.SystemCriterionId && x.ParentCode == ReadingCommon.CriterionDictionary.OncologyAssess)
 | |
|             .ProjectTo<CriterionDictionaryInfo>(_mapper.ConfigurationProvider).OrderBy(x => x.ShowOrder).ToListAsync()
 | |
| 
 | |
|             };
 | |
| 
 | |
|             return result;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 设置系统肿瘤学阅片信息
 | |
|         /// </summary>
 | |
|         /// <param name="inDto"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         [UnitOfWork]
 | |
|         public async Task<IResponseOutput> SetSystemOncologyInfo(SetSystemOncologyInfoInDto inDto)
 | |
|         {
 | |
| 
 | |
|             await _readingCriterionDictionaryRepository.BatchDeleteNoTrackingAsync(x => x.CriterionId == inDto.SystemCriterionId && x.ParentCode == ReadingCommon.CriterionDictionary.OncologyAssess);
 | |
| 
 | |
|             await _readingCriterionDictionaryRepository.AddRangeAsync(inDto.DictionaryIds.Select(x => new ReadingSystemCriterionDictionary
 | |
|             {
 | |
|                 CriterionId = inDto.SystemCriterionId,
 | |
|                 DictionaryId = x,
 | |
|                 IsSystemCriterion = true,
 | |
|                 ParentCode = ReadingCommon.CriterionDictionary.OncologyAssess
 | |
|             }));
 | |
| 
 | |
|             await _readingQuestionCriterionSystemRepository.UpdatePartialFromQueryAsync(inDto.SystemCriterionId, x => new ReadingQuestionCriterionSystem()
 | |
|             {
 | |
|                 IsOncologyReading = inDto.IsOncologyReading
 | |
| 
 | |
|             });
 | |
| 
 | |
|             var result = await _readingQuestionCriterionTrialRepository.SaveChangesAsync();
 | |
| 
 | |
|             return ResponseOutput.Ok(result);
 | |
|         }
 | |
| 
 | |
| 
 | |
|         #region 系统标准
 | |
|         /// <summary>
 | |
|         /// 获取获取系统阅片标准下拉
 | |
|         /// </summary>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<List<GetSystemCriterionListOutDto>> GetSystemCriterionList()
 | |
|         {
 | |
|             List<GetSystemCriterionListOutDto> result = await _readingQuestionCriterionSystemRepository.Select(x => new GetSystemCriterionListOutDto()
 | |
|             {
 | |
| 
 | |
|                 CriterionId = x.Id,
 | |
|                 CriterionName = x.CriterionName,
 | |
| 
 | |
|             }).ToListAsync();
 | |
| 
 | |
|             return result;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 获取系统问题标准
 | |
|         /// </summary>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<PageOutput<ReadingQuestionCriterionSystemView>> GetReadingQuestionCriterionSystemList(ReadingQuestionCriterionSystemViewInDto inDto)
 | |
|         {
 | |
|             //await AddSystemQuestionCriterion();
 | |
|             var query = _readingQuestionCriterionSystemRepository.AsQueryable()
 | |
|                  .WhereIf(!inDto.CriterionName.IsNullOrEmpty(), x => x.CriterionName.Contains(inDto.CriterionName))
 | |
|                  .WhereIf(inDto.IsEnable!=null, x => x.IsEnable== inDto.IsEnable)
 | |
|                  .WhereIf(inDto.IsCompleteConfig != null, x => x.IsCompleteConfig == inDto.IsCompleteConfig)
 | |
|                  .WhereIf(inDto.CriterionGroup != null, x => x.CriterionGroup == inDto.CriterionGroup)
 | |
|                  .WhereIf(inDto.CriterionType != null, x => x.CriterionType == inDto.CriterionType)
 | |
|                  .ProjectTo<ReadingQuestionCriterionSystemView>(_mapper.ConfigurationProvider);
 | |
| 
 | |
|             return await query.ToPagedListAsync(inDto, nameof(ReadingQuestionCriterionSystemView.ShowOrder));
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 获取系统问题标准下拉
 | |
|         /// </summary>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<List<GetSystemCriterionSelectDto>> GetSystemCriterionSelectList()
 | |
|         {
 | |
|             var criterionList = await _readingQuestionCriterionSystemRepository.AsQueryable()
 | |
|                 .OrderBy(x => x.ShowOrder)
 | |
|                .Select(x => new GetSystemCriterionSelectDto()
 | |
|                {
 | |
|                    Id = x.Id,
 | |
|                    CriterionName = x.CriterionName,
 | |
| 
 | |
|                }).ToListAsync();
 | |
|             return criterionList;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 新增修改系统问题标准
 | |
|         /// </summary>
 | |
|         /// <param name="indto"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<IResponseOutput> AddOrUpdateReadingQuestionCriterionSystem(AddOrUpdateReadingQuestionCriterionSystemInDto indto)
 | |
|         {
 | |
|             var entity = await _readingQuestionCriterionSystemRepository.InsertOrUpdateAsync(indto, true);
 | |
| 
 | |
|             if (indto.Id != null)
 | |
|             {
 | |
|                 await _readingQuestionCriterionTrialRepository.BatchUpdateNoTrackingAsync(x => x.ReadingQuestionCriterionSystemId == indto.Id, x => new ReadingQuestionCriterionTrial()
 | |
|                 {
 | |
|                     CriterionName = indto.CriterionName,
 | |
|                     CriterionType = indto.CriterionType,
 | |
| 
 | |
|                 });
 | |
|             }
 | |
|             return ResponseOutput.Ok(entity.Id.ToString());
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 删除系统问题标准
 | |
|         /// </summary>
 | |
|         /// <param name="id"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpDelete("{id:guid}")]
 | |
|         public async Task<IResponseOutput> DeleteReadingQuestionCriterionSystem(Guid id)
 | |
|         {
 | |
| 
 | |
| 
 | |
|             if (await _readingQuestionCriterionTrialRepository.AnyAsync(x => x.IsConfirm && x.ReadingQuestionCriterionSystemId == id))
 | |
|             {
 | |
|                 //---当前标准被引用过了,不可以删除
 | |
|                 throw new BusinessValidationFailedException(_localizer["ReadingCriterion_Referenced"]);
 | |
|             }
 | |
| 
 | |
|             await _readingQuestionCriterionSystemRepository.DeleteFromQueryAsync(t => t.Id == id);
 | |
|             var success = await _readingQuestionCriterionSystemRepository.SaveChangesAsync();
 | |
|             return ResponseOutput.Result(success);
 | |
|         }
 | |
| 
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 设置系统问题标准是否完成配置
 | |
|         /// </summary>
 | |
|         /// <param name="inDto"></param>
 | |
|         /// <returns></returns>
 | |
|         public async Task<IResponseOutput> SetSystemReadingQuestionCriterionIsCompleteConfig(SetSystemReadingQuestionCriterionIsIsCompleteConfig inDto)
 | |
|         {
 | |
| 
 | |
|             if (!inDto.IsCompleteConfig)
 | |
|             {
 | |
|                 var trialCriterionIds = await _readingQuestionCriterionTrialRepository.Where(x => x.ReadingQuestionCriterionSystemId == inDto.Id).Select(x => x.Id).ToListAsync();
 | |
|                 if (await _readingTaskQuestionAnswer.AnyAsync(x => trialCriterionIds.Contains(x.ReadingQuestionCriterionTrialId)))
 | |
|                 {
 | |
|                     //---此标准在项目里面已被使用,操作失败
 | |
|                     return ResponseOutput.NotOk(_localizer["ReadingCriterion_InUse"]);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             var systemCriterion = await _readingQuestionCriterionSystemRepository.Where(x => x.Id == inDto.Id).AsNoTracking().FirstNotNullAsync();
 | |
| 
 | |
|             var confirmTime = systemCriterion.ConfirmTime;
 | |
| 
 | |
|             if (inDto.IsCompleteConfig)
 | |
|             {
 | |
|                 confirmTime = DateTime.Now;
 | |
|             }
 | |
| 
 | |
|             await _readingQuestionCriterionSystemRepository.UpdatePartialFromQueryAsync(inDto.Id, x => new ReadingQuestionCriterionSystem()
 | |
|             {
 | |
|                 IsCompleteConfig = inDto.IsCompleteConfig,
 | |
|                 ConfirmTime = confirmTime,
 | |
|             });
 | |
| 
 | |
|             if (inDto.IsCompleteConfig)
 | |
|             {
 | |
|                 //await SynchronizeSystemCriterion(inDto.Id);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 await _readingQuestionCriterionTrialRepository.BatchUpdateNoTrackingAsync(x => x.ReadingQuestionCriterionSystemId == inDto.Id, x => new ReadingQuestionCriterionTrial()
 | |
|                 {
 | |
|                     IsCompleteConfig = inDto.IsCompleteConfig
 | |
|                 });
 | |
|             }
 | |
|             var result = await _readingQuestionCriterionSystemRepository.SaveChangesAsync();
 | |
| 
 | |
|             return ResponseOutput.Ok(result);
 | |
|         }
 | |
| 
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region 项目标准
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 获取项目裁判信息
 | |
|         /// </summary>
 | |
|         /// <param name="inDto"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<GetTrialJudgyInfoOutDto> GetTrialJudgyInfo(GetTrialJudgyInfoInDto inDto)
 | |
|         {
 | |
|             GetTrialJudgyInfoOutDto result = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == inDto.TrialReadingCriterionId).Select(x => new GetTrialJudgyInfoOutDto
 | |
|             {
 | |
|                 TrialId = x.TrialId,
 | |
|                 IsReadingTaskViewInOrder = x.IsReadingTaskViewInOrder,
 | |
|                 ArbitrationRule = x.ArbitrationRule,
 | |
|                 IsArbitrationReading = x.IsArbitrationReading
 | |
| 
 | |
|             }).FirstNotNullAsync();
 | |
| 
 | |
|             return result;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 新增修改项目问题标准(项目)
 | |
|         /// </summary>
 | |
|         /// <param name="indto"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<IResponseOutput> AddOrUpdateReadingQuestionCriterionTrial(AddOrUpdateReadingQuestionCriterionTrialInDto indto)
 | |
|         {
 | |
|             if (indto.ReadingVersionEnum == null)
 | |
|             {
 | |
|                 var dic = await _dictionarRepository.Where(x => x.Parent.Code == "ReadingVersion").ToListAsync();
 | |
| 
 | |
|                 var maxDic = dic.Select(x => int.Parse(x.Code)).Max();
 | |
| 
 | |
|                 indto.ReadingVersionEnum=(ReadingVersion)maxDic;
 | |
|             }
 | |
| 
 | |
|             indto.ReadingTool = ReadingTool.Dicom;
 | |
|             indto.ReadingToolList = new List<string>()
 | |
|             {
 | |
|                 "Length", "Bidirectional", "RectangleROI", "ArrowAnnotate", "CircleROI"
 | |
|             };
 | |
|             var entity = await _readingQuestionCriterionTrialRepository.InsertOrUpdateAsync(indto, true);
 | |
|             return ResponseOutput.Ok(entity.Id.ToString());
 | |
|         }
 | |
| 
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 设置项目标准是否完成配置
 | |
|         /// </summary>
 | |
|         /// <param name="inDto"></param>
 | |
|         /// <returns></returns>
 | |
|         public async Task<IResponseOutput> SetTrialReadingQuestionCriterionIsIsCompleteConfig(SetSystemReadingQuestionCriterionIsIsCompleteConfig inDto)
 | |
|         {
 | |
|             await _readingQuestionCriterionTrialRepository.UpdatePartialFromQueryAsync(inDto.Id, x => new ReadingQuestionCriterionTrial()
 | |
|             {
 | |
|                 IsCompleteConfig = inDto.IsCompleteConfig
 | |
|             });
 | |
| 
 | |
|             var result = await _readingQuestionCriterionTrialRepository.SaveChangesAsync();
 | |
| 
 | |
|             return ResponseOutput.Ok(result);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 获取项目问题标准(项目)
 | |
|         /// </summary>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<PageOutput<ReadingQuestionCriterionTrialView>> GetReadingQuestionCriterionTrialList(ReadingQuestionCriterionTrialViewInDto inDto)
 | |
|         {
 | |
|             await AddSystemDataToTrila(inDto.TrialId);
 | |
|             var query = _readingQuestionCriterionTrialRepository.AsQueryable()
 | |
|                 .Where(x => x.TrialId == inDto.TrialId)
 | |
|                 .Where(x => (x.ReadingQuestionCriterionSystemId != null && x.IsEnable) || x.ReadingQuestionCriterionSystemId == null)
 | |
|                  .WhereIf(!inDto.CriterionName.IsNullOrEmpty(), x => x.CriterionName.Contains(inDto.CriterionName))
 | |
| 
 | |
|                  .ProjectTo<ReadingQuestionCriterionTrialView>(_mapper.ConfigurationProvider);
 | |
|             return await query.ToPagedListAsync(inDto, nameof(ReadingQuestionCriterionTrialView.ShowOrder));
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 删除项目问题标准(项目)
 | |
|         /// </summary>
 | |
|         /// <param name="id"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpDelete("{id:guid}")]
 | |
|         public async Task<IResponseOutput> DeleteReadingQuestionCriterionTrial(Guid id)
 | |
|         {
 | |
|             await _readingQuestionCriterionTrialRepository.DeleteFromQueryAsync(t => t.Id == id);
 | |
|             var success = await _readingQuestionCriterionTrialRepository.SaveChangesAsync();
 | |
|             return ResponseOutput.Result(success);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 设置项目裁判信息
 | |
|         /// </summary>
 | |
|         /// <param name="inDto"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<IResponseOutput> SetTrialJudgyInfo(SetTrialJudgyInfoInDto inDto)
 | |
|         {
 | |
| 
 | |
|             var trialCriterion = await _readingQuestionCriterionTrialRepository.Where(x => x.TrialId == inDto.TrialId && x.Id == inDto.TrialReadingCriterionId).FirstNotNullAsync();
 | |
| 
 | |
|             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.MultiplePage, x => x.ReadingCriterionPageId != null).CountAsync();
 | |
| 
 | |
|             if (judgeCount == 0 && (inDto.ArbitrationRule == ArbitrationRule.Visit || inDto.ArbitrationRule == ArbitrationRule.Reading))
 | |
|             {
 | |
|                 //---无裁判问题却有仲裁对象,操作失败
 | |
|                 throw new BusinessValidationFailedException(_localizer["ReadingCriterion_ArbitratorWithoutJudgment"]);
 | |
|             }
 | |
|             await _readingQuestionCriterionTrialRepository.UpdatePartialFromQueryAsync(inDto.TrialReadingCriterionId, x => new ReadingQuestionCriterionTrial()
 | |
|             {
 | |
|                 ArbitrationRule = inDto.ArbitrationRule,
 | |
|                 //IsArbitrationReading = inDto.IsArbitrationReading,
 | |
|             });
 | |
| 
 | |
|             var result = await _readingQuestionCriterionTrialRepository.SaveChangesAsync();
 | |
|             return ResponseOutput.Ok(result);
 | |
|         }
 | |
| 
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region 项目阅片标准问题分页
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 新增修改项目标准分页
 | |
|         /// </summary>
 | |
|         /// <param name="addOrEditReadingCriterionPage"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<IResponseOutput> AddOrUpdateReadingCriterionPage(ReadingCriterionPageAddOrEdit addOrEditReadingCriterionPage)
 | |
|         {
 | |
| 
 | |
|             var entity = await _readingCriterionPageRepository.InsertOrUpdateAsync(addOrEditReadingCriterionPage, true);
 | |
|             return ResponseOutput.Ok(entity.Id.ToString());
 | |
| 
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 删除标准分页
 | |
|         /// </summary>
 | |
|         /// <param name="Id"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpDelete("{Id:guid}")]
 | |
|         public async Task<IResponseOutput> DeleteReadingCriterionPage(Guid Id)
 | |
|         {
 | |
|             var success = await _readingCriterionPageRepository.DeleteFromQueryAsync(t => t.Id == Id, true);
 | |
|             return ResponseOutput.Ok();
 | |
|         }
 | |
| 
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
| 
 | |
| 
 | |
|         #region 全局评估类型  肿瘤学评估类型
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 修改是否是随访使用
 | |
|         /// </summary>
 | |
|         /// <param name="inDto"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<IResponseOutput> SetDictionaryFollowVisitUse(SetDictionaryFollowVisitUseInDto inDto)
 | |
|         {
 | |
|             await _readingCriterionDictionaryRepository.UpdatePartialFromQueryAsync(inDto.Id, x => new ReadingSystemCriterionDictionary()
 | |
|             {
 | |
|                 IsFollowVisitUse = inDto.IsFollowVisitUse
 | |
|             });
 | |
| 
 | |
|             await _readingCriterionDictionaryRepository.SaveChangesAsync();
 | |
| 
 | |
|             return ResponseOutput.Ok(true);
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 修改是否是基线使用
 | |
|         /// </summary>
 | |
|         /// <param name="inDto"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<IResponseOutput> SetDictionaryBaseLineUse(SetDictionaryBaseLineUseInDto inDto)
 | |
|         {
 | |
|             await _readingCriterionDictionaryRepository.UpdatePartialFromQueryAsync(inDto.Id, x => new ReadingSystemCriterionDictionary()
 | |
|             {
 | |
|                 IsBaseLineUse = inDto.IsBaseLineUse
 | |
|             });
 | |
| 
 | |
|             await _readingCriterionDictionaryRepository.SaveChangesAsync();
 | |
| 
 | |
|             return ResponseOutput.Ok(true);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 获取标准字典
 | |
|         /// </summary>
 | |
|         /// <param name="inDto"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<List<CriterionDictionaryInfo>> GetAssessType(GetAssessTypeInDto inDto)
 | |
|         {
 | |
| 
 | |
|             if (inDto.SystemCriterionId != null)
 | |
|             {
 | |
|                 return await _readingCriterionDictionaryRepository.Where(x => x.CriterionId == inDto.SystemCriterionId
 | |
|             )
 | |
|                  .WhereIf(!inDto.ParentCode.IsNullOrEmpty(), x => x.ParentCode == inDto.ParentCode)
 | |
|                  .ProjectTo<CriterionDictionaryInfo>(_mapper.ConfigurationProvider).OrderBy(x => x.ParentCode).ThenBy(x => x.ShowOrder).ToListAsync();
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 return await _readingTrialCriterionDictionaryRepository.Where(x => x.CriterionId == inDto.TrialCriterionId
 | |
|            )
 | |
|                .WhereIf(!inDto.ParentCode.IsNullOrEmpty(), x => x.ParentCode == inDto.ParentCode)
 | |
|                .ProjectTo<CriterionDictionaryInfo>(_mapper.ConfigurationProvider).OrderBy(x => x.ParentCode).ThenBy(x => x.ShowOrder).ToListAsync();
 | |
|             }
 | |
| 
 | |
| 
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 设置标准字典分组
 | |
|         /// </summary>
 | |
|         /// <param name="inDto"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<bool> EditCriterionDictionary(EditCriterionDictionaryInDto inDto)
 | |
|         {
 | |
|             await _readingCriterionDictionaryRepository.UpdatePartialFromQueryAsync(inDto.Id, x => new ReadingSystemCriterionDictionary()
 | |
|             {
 | |
|                 CrterionDictionaryGroup = inDto.CrterionDictionaryGroup
 | |
|             });
 | |
| 
 | |
|             return await _readingCriterionDictionaryRepository.SaveChangesAsync();
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 设置标准字典
 | |
|         /// </summary>
 | |
|         /// <param name="inDto"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<IResponseOutput> SetCriterionDictionary(SetCriterionDictionaryInDto inDto)
 | |
|         {
 | |
|             await _readingCriterionDictionaryRepository.BatchDeleteNoTrackingAsync(x => x.CriterionId == inDto.CriterionId && x.ParentCode == inDto.ParentCode);
 | |
| 
 | |
| 
 | |
|             await _readingCriterionDictionaryRepository.AddRangeAsync(inDto.DictionaryIds.Select(x => new ReadingSystemCriterionDictionary()
 | |
|             {
 | |
|                 CriterionId = inDto.CriterionId,
 | |
|                 DictionaryId = x,
 | |
|                 IsSystemCriterion = true,
 | |
|                 ParentCode = inDto.ParentCode
 | |
|             }));
 | |
| 
 | |
| 
 | |
|             await _readingCriterionDictionaryRepository.SaveChangesAsync();
 | |
| 
 | |
|             return ResponseOutput.Ok(true);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 设置评估类型
 | |
|         /// </summary>
 | |
|         /// <param name="inDto"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<IResponseOutput> SetAssessType(SetAssessTypeInDto inDto)
 | |
|         {
 | |
|             await _readingCriterionDictionaryRepository.BatchDeleteNoTrackingAsync(x => x.CriterionId == inDto.CriterionId && x.ParentCode == inDto.ParentCode);
 | |
| 
 | |
|             await _readingCriterionDictionaryRepository.AddRangeAsync(inDto.DictionaryList.Select(x => new ReadingSystemCriterionDictionary()
 | |
|             {
 | |
|                 CriterionId = inDto.CriterionId,
 | |
|                 DictionaryId = x.DictionaryId,
 | |
|                 IsBaseLineUse = x.IsBaseLineUse,
 | |
|                 IsFollowVisitUse = x.IsFollowVisitUse,
 | |
|                 IsSystemCriterion = true,
 | |
|                 ParentCode = inDto.ParentCode
 | |
|             }));
 | |
| 
 | |
|             await _readingCriterionDictionaryRepository.SaveChangesAsync();
 | |
| 
 | |
|             return ResponseOutput.Ok(true);
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 添加系统数据到项目里面
 | |
|         /// </summary>
 | |
|         /// <returns></returns>  
 | |
|         [NonDynamicMethod]
 | |
|         private async Task AddSystemDataToTrila(Guid trialId)
 | |
|         {
 | |
|             // 加系统到项目
 | |
|             var trialUsrSystemIds = _readingQuestionCriterionTrialRepository.Where(x => x.TrialId == trialId && x.ReadingQuestionCriterionSystemId != null)
 | |
|                 .Select(x => x.ReadingQuestionCriterionSystemId);
 | |
|             var trialCriterionNames = _readingQuestionCriterionTrialRepository.Where(x => x.TrialId == trialId)
 | |
|                 .Select(x => x.CriterionName);
 | |
|             List<ReadingQuestionCriterionTrial> needAddCriterionList = await _readingQuestionCriterionSystemRepository.Where(x => !trialUsrSystemIds.Contains(x.Id) && x.IsEnable && !trialCriterionNames.Contains(x.CriterionName)).ProjectTo<ReadingQuestionCriterionTrial>(_mapper.ConfigurationProvider).ToListAsync();
 | |
| 
 | |
|             List<ReadingQuestionTrial> needAddQuestionList = new List<ReadingQuestionTrial>();
 | |
| 
 | |
|             var dic = await _dictionarRepository.Where(x => x.Parent.Code == "ReadingVersion").ToListAsync();
 | |
| 
 | |
|             var maxDic = dic.Select(x => int.Parse(x.Code)).Max();
 | |
| 
 | |
|             needAddCriterionList.ForEach(x =>
 | |
|             {
 | |
|                 //x.IsEnable = false;
 | |
|                 x.ReadingVersionEnum = (ReadingVersion)maxDic;
 | |
|                 x.TrialId = trialId;
 | |
|                 x.ReadingQuestionCriterionSystemId = x.Id;
 | |
|                 x.Id = NewId.NextGuid();
 | |
| 
 | |
|                 x.IsAutoCreate = x.CriterionType == CriterionType.RECIST1Pointt1_MB ? false : true;
 | |
|                 // 同步问题暂时注释
 | |
|                 //List<ReadingQuestionTrial> readingQuestionTrialList = new List<ReadingQuestionTrial>();
 | |
|                 //SetChildParentQuestion(criterion.Id, trialId, systemQuestionList, readingQuestionTrialList);
 | |
|                 //needAddQuestionList.AddRange(readingQuestionTrialList);
 | |
|             });
 | |
| 
 | |
|             // 标准的默认值 标准默认值
 | |
|             foreach (var criterion in needAddCriterionList)
 | |
|             {
 | |
| 
 | |
| 
 | |
| 
 | |
|                 switch (criterion.CriterionType)
 | |
|                 {
 | |
|                     case CriterionType.IVUS:
 | |
|                         criterion.IsReadingPeriod = false;
 | |
|                         criterion.IsImageFilter = false;
 | |
|                         criterion.IsGlobalReading = false;
 | |
|                         criterion.IsArbitrationReading = true;
 | |
|                         criterion.ArbitrationRule = ArbitrationRule.Visit;
 | |
|                         criterion.IsReadingTaskViewInOrder = ReadingOrder.SubjectRandom;
 | |
|                         criterion.ImageDownloadEnum = ReadingImageDownload.Subejct;
 | |
|                         criterion.ImageUploadEnum = ReadingImageUpload.IRReadingSubejctEnable;
 | |
|                         break;
 | |
|                     case CriterionType.OCT:
 | |
|                         criterion.IsImageFilter = false;
 | |
|                         criterion.IsReadingPeriod = false;
 | |
|                         criterion.IsGlobalReading = false;
 | |
|                         criterion.IsArbitrationReading = true;
 | |
|                         criterion.ArbitrationRule = ArbitrationRule.Visit;
 | |
|                         criterion.IsReadingTaskViewInOrder = ReadingOrder.SubjectRandom;
 | |
|                         criterion.ImageDownloadEnum = ReadingImageDownload.Subejct;
 | |
|                         criterion.ImageUploadEnum = ReadingImageUpload.IRReadingSubejctEnable;
 | |
|                         break;
 | |
|                     case CriterionType.Forrest:
 | |
|                       
 | |
|                         criterion.ReadingTool = ReadingTool.NoDicom;
 | |
|                         break;
 | |
|                 }
 | |
|             }
 | |
| 
 | |
| 
 | |
|             await _readingQuestionCriterionTrialRepository.AddRangeAsync(needAddCriterionList);
 | |
|             await _readingQuestionTrialRepository.AddRangeAsync(needAddQuestionList);
 | |
|             await _readingQuestionTrialRepository.SaveChangesAsync();
 | |
|         }
 | |
| 
 | |
|     }
 | |
| }
 |