Merge branch '中心影像_Test环境' of http://192.168.1.2:8033/IRaCIS_Core_Api into 中心影像_Test环境

Uat_Study
hang 2023-07-04 15:04:54 +08:00
commit cc9807846e
7 changed files with 179 additions and 35 deletions

View File

@ -1204,7 +1204,12 @@ namespace IRaCIS.Core.Application.Image.QA
// CRC 上传的基线数据签名 // CRC 上传的基线数据签名
await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(x => x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ReadingId == dbSubjectVisit.Id && x.IsSign==false, x => new ReadingClinicalData() await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(x =>
(x.ClinicalDataTrialSet.ClinicalDataLevel== ClinicalLevel.Subject|| x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit)&&
x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ReadingId == dbSubjectVisit.Id && x.IsSign==false, x => new ReadingClinicalData()
{ {
IsSign = true, IsSign = true,
ReadingClinicalDataState = ReadingClinicalDataStatus.HaveSigned ReadingClinicalDataState = ReadingClinicalDataStatus.HaveSigned

View File

@ -14,6 +14,7 @@ using MassTransit;
using IRaCIS.Core.Infrastructure; using IRaCIS.Core.Infrastructure;
using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Infrastructure.Extention; using IRaCIS.Core.Infrastructure.Extention;
using IRaCIS.Core.Application.Service.Reading.Interface;
namespace IRaCIS.Core.Application.Service namespace IRaCIS.Core.Application.Service
{ {
@ -21,8 +22,8 @@ namespace IRaCIS.Core.Application.Service
/// 临床答案 /// 临床答案
/// </summary> /// </summary>
[ApiExplorerSettings(GroupName = "Reading")] [ApiExplorerSettings(GroupName = "Reading")]
public class ClinicalAnswerService : BaseService public class ClinicalAnswerService : BaseService, IClinicalAnswerService
{ {
private readonly IRepository<TrialClinicalQuestion> _trialClinicalQuestionRepository; private readonly IRepository<TrialClinicalQuestion> _trialClinicalQuestionRepository;
@ -106,7 +107,9 @@ namespace IRaCIS.Core.Application.Service
x.IsBaseLine, x.IsBaseLine,
}).ToListAsync(); }).ToListAsync();
var clinicalDataList =await _readingClinicalDataRepository.Where(x =>x.TrialId==inDto.TrialId&&x.ClinicalDataTrialSet.UploadRole== UploadRole.CRC).IgnoreAutoIncludes().ToListAsync(); var clinicalDataList =await _readingClinicalDataRepository
.WhereIf(inDto.SubjectId != null, x => x.SubjectId == inDto.SubjectId)
.Where(x =>x.TrialId==inDto.TrialId&&x.ClinicalDataTrialSet.UploadRole== UploadRole.CRC).IgnoreAutoIncludes().ToListAsync();
List<ReadingClinicalData> readingClinicalDatas = new List<ReadingClinicalData>(); List<ReadingClinicalData> readingClinicalDatas = new List<ReadingClinicalData>();
@ -178,11 +181,12 @@ namespace IRaCIS.Core.Application.Service
public async Task<List<GetCRCSubjectClinicalOutDto>> GetCRCSubjectClinicalList(GetCRCSubjectClinicalInDto inDto) public async Task<List<GetCRCSubjectClinicalOutDto>> GetCRCSubjectClinicalList(GetCRCSubjectClinicalInDto inDto)
{ {
await AutoAddCRCClinical(new AutoAddClinicalInDto() //await AutoAddCRCClinical(new AutoAddClinicalInDto()
{ //{
// TrialId = inDto.TrialId
//}) ;
TrialId = inDto.TrialId
}) ;
@ -251,8 +255,12 @@ namespace IRaCIS.Core.Application.Service
ClinicalFormIds.ForEach(x => ClinicalFormIds.ForEach(x =>
{ {
var dic = answers.Where(y => y.ClinicalFormId == x).ToDictionary(x => x.QuestionId.ToString(), x => x.Answer); var dic = answers.Where(y => y.ClinicalFormId == x).ToDictionary(x => x.QuestionId.ToString(), x => x.Answer);
dic.Add("clinicalFormId", x.ToString()); dic.Add("ClinicalFormId", x.ToString());
result.AnswerList.Add(dic); dic.Add("TrialId", inDto.TrialId.ToString());
dic.Add("SubjectId", inDto.SubjectId.ToString());
dic.Add("ClinicalDataTrialSetId", inDto.ClinicalDataTrialSetId.ToString());
result.AnswerList.Add(dic);
}); });
return result; return result;
@ -264,7 +272,7 @@ namespace IRaCIS.Core.Application.Service
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<GetClinicalFormInfoOutDto> GetClinicalFormInfo(GetClinicalFormInfoInDto inDto) public async Task<List<ClinicalQuestionPreviewDto>> GetClinicalFormInfo(GetClinicalFormInfoInDto inDto)
{ {
var formInfo = await _clinicalFormRepository.Where(x => x.Id == inDto.ClinicalFormId).FirstNotNullAsync(); var formInfo = await _clinicalFormRepository.Where(x => x.Id == inDto.ClinicalFormId).FirstNotNullAsync();
@ -285,7 +293,7 @@ namespace IRaCIS.Core.Application.Service
var questions = await _trialClinicalQuestionRepository.Where(x => x.TrialClinicalId == formInfo.ClinicalDataTrialSetId) var questions = await _trialClinicalQuestionRepository.Where(x => x.TrialClinicalId == formInfo.ClinicalDataTrialSetId)
.ProjectTo<ClinicalQuestionPreviewDto>(_mapper.ConfigurationProvider).ToListAsync(); .ProjectTo<ClinicalQuestionPreviewDto>(_mapper.ConfigurationProvider).ToListAsync();
var tableQuestions = await _trialClinicalQuestionRepository.Where(x => x.TrialClinicalId == formInfo.ClinicalDataTrialSetId) var tableQuestions = await _trialClinicalTableQuestionRepository.Where(x => x.TrialClinicalId == formInfo.ClinicalDataTrialSetId)
.ProjectTo<ClinicalTablePreviewDto>(_mapper.ConfigurationProvider).ToListAsync(); .ProjectTo<ClinicalTablePreviewDto>(_mapper.ConfigurationProvider).ToListAsync();
@ -296,11 +304,7 @@ namespace IRaCIS.Core.Application.Service
_iClinicalQuestionService.FindChildQuestion(x, questions, tableQuestions, questionAnswer, tableAnswer); _iClinicalQuestionService.FindChildQuestion(x, questions, tableQuestions, questionAnswer, tableAnswer);
}); });
return new GetClinicalFormInfoOutDto() return result;
{
Question = result
};
} }
@ -419,6 +423,7 @@ namespace IRaCIS.Core.Application.Service
public async Task<List<GetCRCConfirmListOutDto>> GetCRCConfirmList(GetCRCConfirmListInDto inDto) public async Task<List<GetCRCConfirmListOutDto>> GetCRCConfirmList(GetCRCConfirmListInDto inDto)
{ {
List<GetCRCConfirmListOutDto> result = await _readModuleRepository.Where(x => x.TrialId == inDto.TrialId) List<GetCRCConfirmListOutDto> result = await _readModuleRepository.Where(x => x.TrialId == inDto.TrialId)
.WhereIf(inDto.ReadModuleId!=null,x=>x.Id==inDto.ReadModuleId)
.Select(x => new GetCRCConfirmListOutDto() .Select(x => new GetCRCConfirmListOutDto()
{ {
SubjectId= x.SubjectId, SubjectId= x.SubjectId,
@ -426,46 +431,93 @@ namespace IRaCIS.Core.Application.Service
LatestScanDate = x.SubjectVisit.LatestScanDate, LatestScanDate = x.SubjectVisit.LatestScanDate,
ReadingSetType = x.ReadingSetType, ReadingSetType = x.ReadingSetType,
IsPMConfirm = x.IsPMConfirm, IsPMConfirm = x.IsPMConfirm,
SubjectCode=x.Subject.Code,
ReadModuleId = x.Id, ReadModuleId = x.Id,
}).OrderBy(x => x.LatestScanDate).ToListAsync(); }).OrderBy(x => x.LatestScanDate).ToListAsync();
var formList = await _clinicalFormRepository.Where(x => x.TrialId == inDto.TrialId) var formList = await _clinicalFormRepository.Where(x => x.TrialId == inDto.TrialId)
.Where(x => x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC) .Where(x => x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC)
.Where(x => x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.ImageRead || x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.OncologyRead) .Where(x => x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.ImageRead || x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.OncologyRead)
.Select(x => new CRCClinicalForm .Include(x=>x.ClinicalDataTrialSet)
.Select(x => new CRCClinicalForm
{ {
CkeckDate = x.CheckDate, CheckDate = x.CheckDate,
ClinicalDataLevel = x.ClinicalDataTrialSet.ClinicalDataLevel, ClinicalDataLevel = x.ClinicalDataTrialSet.ClinicalDataLevel,
ClinicalFormId = x.Id, ClinicalFormId = x.Id,
ClinicalDataSetName=x.ClinicalDataTrialSet.ClinicalDataSetName,
ClinicalDataSetEnName=x.ClinicalDataTrialSet.ClinicalDataSetEnName,
}).ToListAsync(); }).ToListAsync();
var confirmList = await _readModuleCriterionFromRepository.Where(x => x.TrialId == inDto.TrialId).ToListAsync(); var confirmList = await _readModuleCriterionFromRepository.Where(x => x.TrialId == inDto.TrialId).Include(x=>x.ClinicalForm).Include(x=>x.ClinicalForm.ClinicalDataTrialSet).ToListAsync();
result.ForEach(x => result.ForEach(x =>
{ {
if (x.IsCRCConfirm) if (x.IsCRCConfirm)
{ {
x.ClinicalFormIdList = confirmList.Where(y => y.ReadModuleId == x.ReadModuleId).Select(y=>y.ClinicalFormId).ToList(); x.ClinicalFormIdList = confirmList.Where(y => y.ReadModuleId == x.ReadModuleId).Select(y=>new GetCRCBeConfirmListOutDto() {
CheckDate = y.ClinicalForm.CheckDate??default(DateTime),
ClinicalDataSetName= y.ClinicalForm.ClinicalDataTrialSet.ClinicalDataSetName,
ClinicalDataSetEnName= y.ClinicalForm.ClinicalDataTrialSet.ClinicalDataSetEnName,
ClinicalFormId=y.ClinicalFormId,
}).ToList();
} }
else else
{ {
if (x.ReadingSetType == ReadingSetType.ImageReading) if (x.ReadingSetType == ReadingSetType.ImageReading)
{ {
x.ClinicalFormIdList = formList.Where(y => y.ClinicalDataLevel == ClinicalLevel.ImageRead&&y.CkeckDate<=x.LatestScanDate).Select(y => y.ClinicalFormId).ToList(); x.ClinicalFormIdList = formList.Where(y => y.ClinicalDataLevel == ClinicalLevel.ImageRead&&y.CheckDate <= x.LatestScanDate)
.Select(y => new GetCRCBeConfirmListOutDto()
{
CheckDate = y.CheckDate ?? default(DateTime),
ClinicalDataSetName = y.ClinicalDataSetName,
ClinicalDataSetEnName = y.ClinicalDataSetEnName,
ClinicalFormId = y.ClinicalFormId,
}).ToList();
} }
else else
{ {
x.ClinicalFormIdList = formList.Where(y => y.ClinicalDataLevel == ClinicalLevel.OncologyRead&&y.CkeckDate <= x.LatestScanDate).Select(y => y.ClinicalFormId).ToList(); x.ClinicalFormIdList = formList.Where(y => y.ClinicalDataLevel == ClinicalLevel.OncologyRead&&y.CheckDate <= x.LatestScanDate)
.Select(y => new GetCRCBeConfirmListOutDto()
{
CheckDate = y.CheckDate ?? default(DateTime),
ClinicalDataSetName = y.ClinicalDataSetName,
ClinicalDataSetEnName = y.ClinicalDataSetEnName,
ClinicalFormId = y.ClinicalFormId,
}).ToList();
} }
} }
}); });
return result; return result;
} }
/// <summary> /// <summary>
/// CRC 确认临床数据 /// 获取CRC待确认列表
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<List<GetCRCBeConfirmListOutDto>> GetCRCBeConfirmList(GetCRCBeConfirmListInDto inDto)
{
var result = (await this.GetCRCConfirmList(new GetCRCConfirmListInDto()
{
ReadModuleId = inDto.ReadModuleId,
TrialId = inDto.TrialId
})).SelectMany(x => x.ClinicalFormIdList).ToList();
result.ForEach(x => {
x.ClinicalDataSetName = _userInfo.IsEn_Us ? x.ClinicalDataSetEnName : x.ClinicalDataSetName;
});
return result.OrderBy(x => x.ClinicalDataSetName).ThenBy(x => x.CheckDate).ToList();
}
/// <summary>
/// CRC 确认临床数据
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
[HttpPost]
public async Task<IResponseOutput> CRCConfirmClinical(CRCConfirmClinicalInDto inDto) public async Task<IResponseOutput> CRCConfirmClinical(CRCConfirmClinicalInDto inDto)
{ {
var dataList =await this.GetCRCConfirmList(new GetCRCConfirmListInDto() var dataList =await this.GetCRCConfirmList(new GetCRCConfirmListInDto()
@ -487,7 +539,7 @@ namespace IRaCIS.Core.Application.Service
{ {
needAddList.Add(new ReadModuleCriterionFrom() needAddList.Add(new ReadModuleCriterionFrom()
{ {
ClinicalFormId = y, ClinicalFormId = y.ClinicalFormId,
ReadModuleId = x.ReadModuleId, ReadModuleId = x.ReadModuleId,
SubjectId = x.SubjectId, SubjectId = x.SubjectId,
TrialId = inDto.TrialId, TrialId = inDto.TrialId,

View File

@ -179,10 +179,10 @@ namespace IRaCIS.Application.Services
[HttpPost] [HttpPost]
public async Task<List<GetCRCClinicalDataOutDto>> GetCRCClinicalData(GetCRCClinicalDataInDto inDto) public async Task<List<GetCRCClinicalDataOutDto>> GetCRCClinicalData(GetCRCClinicalDataInDto inDto)
{ {
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator) //if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator)
{ //{
await this.AddCRCClinicalData(inDto); // await this.AddCRCClinicalData(inDto);
} //}
List<GetCRCClinicalDataOutDto> cRCClinicalDataList = await _readingClinicalDataRepository.Where(x => x.ReadingId == inDto.SubjectVisitId) List<GetCRCClinicalDataOutDto> cRCClinicalDataList = await _readingClinicalDataRepository.Where(x => x.ReadingId == inDto.SubjectVisitId)

View File

@ -57,7 +57,10 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
{ {
public Guid SubjectId { get; set; } public Guid SubjectId { get; set; }
public Guid ClinicalDataTrialSetId { get; set; }
public Guid TrialId { get; set; }
public Guid ClinicalDataTrialSetId { get; set; }
} }
@ -99,6 +102,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public class GetCRCConfirmListInDto public class GetCRCConfirmListInDto
{ {
public Guid TrialId { get; set; } public Guid TrialId { get; set; }
public Guid? ReadModuleId { get; set; }
} }
public class CRCCancelConfirmClinicalInDto public class CRCCancelConfirmClinicalInDto
@ -108,6 +113,25 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public Guid ReadModuleId { get; set; } public Guid ReadModuleId { get; set; }
} }
public class GetCRCBeConfirmListInDto
{
public Guid TrialId { get; set; }
public Guid ReadModuleId { get; set; }
}
public class GetCRCBeConfirmListOutDto
{
public Guid ClinicalFormId { get; set; }
public string ClinicalDataSetName { get; set; }
public string ClinicalDataSetEnName { get; set; }
public DateTime CheckDate { get; set; }
}
public class CRCConfirmClinicalInDto public class CRCConfirmClinicalInDto
{ {
public Guid TrialId { get; set; } public Guid TrialId { get; set; }
@ -118,7 +142,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public class CRCClinicalForm public class CRCClinicalForm
{ {
public DateTime? CkeckDate { get; set; } public DateTime? CheckDate { get; set; }
public Guid ClinicalFormId { get; set; } public Guid ClinicalFormId { get; set; }
@ -126,6 +150,10 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
/// 临床级别 /// 临床级别
/// </summary> /// </summary>
public ClinicalLevel ClinicalDataLevel { get; set; } public ClinicalLevel ClinicalDataLevel { get; set; }
public string ClinicalDataSetName { get; set; }
public string ClinicalDataSetEnName { get; set; }
} }
@ -144,13 +172,14 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public bool IsCRCConfirm { get; set; } = false; public bool IsCRCConfirm { get; set; } = false;
public string SubjectCode { get; set; }
/// <summary> /// <summary>
/// 最晚拍片日期 /// 最晚拍片日期
/// </summary> /// </summary>
public DateTime? LatestScanDate { get; set; } public DateTime? LatestScanDate { get; set; }
public List<Guid> ClinicalFormIdList { get; set; } public List<GetCRCBeConfirmListOutDto> ClinicalFormIdList { get; set; }
public int FormCount public int FormCount
{ {

View File

@ -0,0 +1,14 @@
using IRaCIS.Core.Application.Service.Reading.Dto;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IRaCIS.Core.Application.Service.Reading.Interface
{
public interface IClinicalAnswerService
{
Task AutoAddCRCClinical(AutoAddClinicalInDto inDto);
}
}

View File

@ -0,0 +1,39 @@
using EntityFrameworkCore.Triggered;
using IRaCIS.Core.Application.Service.Reading.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IRaCIS.Core.Application.Triggers
{
public class AddCRCCliniaclDataTrigger : IAfterSaveTrigger<SubjectVisit>
{
private readonly IRepository<SubjectVisit> _subjectVisitRepository;
private readonly IRepository _repository;
private readonly IClinicalAnswerService _iClinicalAnswerService;
public AddCRCCliniaclDataTrigger(IRepository<SubjectVisit> subjectVisitRepository, IRepository repository, IClinicalAnswerService iClinicalAnswerService)
{
_subjectVisitRepository = subjectVisitRepository;
_repository = repository;
this._iClinicalAnswerService = iClinicalAnswerService;
}
//注意删除不能用扩展方法必须用EF跟踪的实体 否则不能取到 SubjectVisitId
public async Task AfterSave(ITriggerContext<SubjectVisit> context, CancellationToken cancellationToken)
{
var subjectVisit = context.Entity;
await _iClinicalAnswerService.AutoAddCRCClinical(new Service.Reading.Dto.AutoAddClinicalInDto()
{
TrialId = subjectVisit.TrialId,
SubjectId = subjectVisit.SubjectId,
});
}
}
}

View File

@ -45,8 +45,13 @@ namespace IRaCIS.Core.Domain.Models
/// 创建时间 /// 创建时间
/// </summary> /// </summary>
public DateTime CreateTime { get; set; } public DateTime CreateTime { get; set; }
} [JsonIgnore]
[ForeignKey("ClinicalFormId")]
public ClinicalForm ClinicalForm { get; set; }
}
} }