IRC_NewDev
hang 2023-07-07 16:25:30 +08:00
commit a52aac876a
16 changed files with 572 additions and 69 deletions

View File

@ -11,6 +11,7 @@ using IRaCIS.Core.Application.Service;
using IRaCIS.Core.Application.Service.Inspection.DTO; using IRaCIS.Core.Application.Service.Inspection.DTO;
using IRaCIS.Core.Application.Service.Inspection.Interface; using IRaCIS.Core.Application.Service.Inspection.Interface;
using IRaCIS.Core.Application.Service.Reading.Dto; using IRaCIS.Core.Application.Service.Reading.Dto;
using IRaCIS.Core.Application.Service.Reading.Interface;
using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Application.ViewModel;
using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Domain.Share;
@ -36,6 +37,7 @@ namespace IRaCIS.Core.API.Controllers
private readonly IHttpContextAccessor _httpContext; private readonly IHttpContextAccessor _httpContext;
private readonly ITrialConfigService _trialConfigService; private readonly ITrialConfigService _trialConfigService;
private readonly INoneDicomStudyService _noneDicomStudyService; private readonly INoneDicomStudyService _noneDicomStudyService;
private readonly IClinicalAnswerService _clinicalAnswerService;
private readonly ISubjectService _subjectService; private readonly ISubjectService _subjectService;
private readonly IReadingClinicalDataService _readingClinicalDataService; private readonly IReadingClinicalDataService _readingClinicalDataService;
private readonly ISubjectVisitService _subjectVisitService; private readonly ISubjectVisitService _subjectVisitService;
@ -62,6 +64,7 @@ namespace IRaCIS.Core.API.Controllers
IReadingMedicineQuestionService readingMedicineQuestionService, IReadingMedicineQuestionService readingMedicineQuestionService,
ITrialConfigService _trialConfigService, ITrialConfigService _trialConfigService,
INoneDicomStudyService noneDicomStudyService, INoneDicomStudyService noneDicomStudyService,
IClinicalAnswerService clinicalAnswerService,
ISubjectService _subjectService, ISubjectService _subjectService,
IReadingClinicalDataService _readingClinicalDataService, IReadingClinicalDataService _readingClinicalDataService,
ISubjectVisitService subjectVisitService, ISubjectVisitService subjectVisitService,
@ -82,6 +85,7 @@ namespace IRaCIS.Core.API.Controllers
this._httpContext = httpContext; this._httpContext = httpContext;
this._trialConfigService = _trialConfigService; this._trialConfigService = _trialConfigService;
this._noneDicomStudyService = noneDicomStudyService; this._noneDicomStudyService = noneDicomStudyService;
this._clinicalAnswerService = clinicalAnswerService;
this._subjectService = _subjectService; this._subjectService = _subjectService;
this._readingClinicalDataService = _readingClinicalDataService; this._readingClinicalDataService = _readingClinicalDataService;
this._subjectVisitService = subjectVisitService; this._subjectVisitService = subjectVisitService;
@ -233,6 +237,58 @@ namespace IRaCIS.Core.API.Controllers
} }
/// <summary>
/// CRC签名临床数据
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/ClinicalAnswer/CRCSignClinicalData")]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
[UnitOfWork]
public async Task<IResponseOutput> CRCSignClinicalData(DataInspectionDto<CRCSignClinicalDataInDto> opt)
{
var singid = await _inspectionService.RecordSing(opt.SignInfo);
var result = await _clinicalAnswerService.CRCSignClinicalData(opt.Data);
await _inspectionService.CompletedSign(singid, result);
return result;
}
/// <summary>
/// PM确认临床数据
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/ClinicalAnswer/PMConfirmClinical")]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
[UnitOfWork]
public async Task<IResponseOutput> PMConfirmClinical(DataInspectionDto<CRCConfirmClinicalInDto> opt)
{
var singid = await _inspectionService.RecordSing(opt.SignInfo);
var result = await _clinicalAnswerService.PMConfirmClinical(opt.Data);
await _inspectionService.CompletedSign(singid, result);
return result;
}
/// <summary>
/// 提交结构化录入并签名
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/ClinicalAnswer/SubmitClinicalFormAndSign")]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
[UnitOfWork]
public async Task<IResponseOutput> SubmitClinicalFormAndSign(DataInspectionDto<SubmitClinicalFormInDto> opt)
{
var singid = await _inspectionService.RecordSing(opt.SignInfo);
var result = await _clinicalAnswerService.SubmitClinicalForm(opt.Data);
await _inspectionService.CompletedSign(singid, result);
return result;
}
/// <summary> /// <summary>
/// 提交阅片裁判问题 /// 提交阅片裁判问题
/// </summary> /// </summary>

View File

@ -139,6 +139,27 @@
<param name="opt"></param> <param name="opt"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:IRaCIS.Core.API.Controllers.InspectionController.CRCSignClinicalData(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Core.Application.Service.Reading.Dto.CRCSignClinicalDataInDto})">
<summary>
CRC签名临床数据
</summary>
<param name="opt"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.InspectionController.PMConfirmClinical(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Core.Application.Service.Reading.Dto.CRCConfirmClinicalInDto})">
<summary>
PM确认临床数据
</summary>
<param name="opt"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.InspectionController.SubmitClinicalFormAndSign(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Core.Application.Service.Reading.Dto.SubmitClinicalFormInDto})">
<summary>
提交结构化录入并签名
</summary>
<param name="opt"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.InspectionController.SubmitJudgeVisitTaskResult(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Core.Application.Service.Reading.Dto.SaveJudgeVisitTaskResult})"> <member name="M:IRaCIS.Core.API.Controllers.InspectionController.SubmitJudgeVisitTaskResult(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Core.Application.Service.Reading.Dto.SaveJudgeVisitTaskResult})">
<summary> <summary>
提交阅片裁判问题 提交阅片裁判问题

View File

@ -37,6 +37,7 @@ namespace IRaCIS.Core.API
triggerOptions.AddTrigger<AddSubjectTrigger>(); triggerOptions.AddTrigger<AddSubjectTrigger>();
triggerOptions.AddTrigger<ChallengeStateTrigger>(); triggerOptions.AddTrigger<ChallengeStateTrigger>();
triggerOptions.AddTrigger<SubjectStateTrigger>(); triggerOptions.AddTrigger<SubjectStateTrigger>();
triggerOptions.AddTrigger<AddCRCCliniaclDataTrigger>();
triggerOptions.AddTrigger<SubjectVisitCheckPassedTrigger>(); triggerOptions.AddTrigger<SubjectVisitCheckPassedTrigger>();
triggerOptions.AddTrigger<SubjectVisitFinalVisitTrigger>(); triggerOptions.AddTrigger<SubjectVisitFinalVisitTrigger>();
triggerOptions.AddTrigger<SubjectVisitTrigger>(); triggerOptions.AddTrigger<SubjectVisitTrigger>();

View File

@ -2499,6 +2499,13 @@
临床答案 临床答案
</summary> </summary>
</member> </member>
<member name="M:IRaCIS.Core.Application.Service.ClinicalAnswerService.CRCSignClinicalData(IRaCIS.Core.Application.Service.Reading.Dto.CRCSignClinicalDataInDto)">
<summary>
CRC签名临床数据
</summary>
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ClinicalAnswerService.AutoAddCRCClinical(IRaCIS.Core.Application.Service.Reading.Dto.AutoAddClinicalInDto)"> <member name="M:IRaCIS.Core.Application.Service.ClinicalAnswerService.AutoAddCRCClinical(IRaCIS.Core.Application.Service.Reading.Dto.AutoAddClinicalInDto)">
<summary> <summary>
自动添加CRC临床数据 自动添加CRC临床数据
@ -2542,6 +2549,13 @@
<returns></returns> <returns></returns>
<exception cref="T:IRaCIS.Core.Infrastructure.BusinessValidationFailedException"></exception> <exception cref="T:IRaCIS.Core.Infrastructure.BusinessValidationFailedException"></exception>
</member> </member>
<member name="M:IRaCIS.Core.Application.Service.ClinicalAnswerService.GetPMConfirmList(IRaCIS.Core.Application.Service.Reading.Dto.GetPMConfirmListInDto)">
<summary>
获取PM待确认列表
</summary>
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ClinicalAnswerService.GetCRCConfirmList(IRaCIS.Core.Application.Service.Reading.Dto.GetCRCConfirmListInDto)"> <member name="M:IRaCIS.Core.Application.Service.ClinicalAnswerService.GetCRCConfirmList(IRaCIS.Core.Application.Service.Reading.Dto.GetCRCConfirmListInDto)">
<summary> <summary>
获取CRC确认列表 获取CRC确认列表
@ -2556,6 +2570,20 @@
<param name="inDto"></param> <param name="inDto"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:IRaCIS.Core.Application.Service.ClinicalAnswerService.GetClinicalTableList(IRaCIS.Core.Application.Service.Reading.Dto.GetClinicalTableListInDto)">
<summary>
获取临床数据表格信息 查看没有表格问题的列表
</summary>
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ClinicalAnswerService.GetClinicalDateList(IRaCIS.Core.Application.Service.Reading.Dto.GetCRCBeConfirmListInDto)">
<summary>
获取临床数据表格信息 查看有表格问题的列表
</summary>
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ClinicalAnswerService.CRCConfirmClinical(IRaCIS.Core.Application.Service.Reading.Dto.CRCConfirmClinicalInDto)"> <member name="M:IRaCIS.Core.Application.Service.ClinicalAnswerService.CRCConfirmClinical(IRaCIS.Core.Application.Service.Reading.Dto.CRCConfirmClinicalInDto)">
<summary> <summary>
CRC 确认临床数据 CRC 确认临床数据
@ -2738,6 +2766,36 @@
<param name="inDto"></param> <param name="inDto"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetCRCSubjectClinicalOutDto.UploadRole">
<summary>
上传角色
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetCRCSubjectClinicalOutDto.ReadingId">
<summary>
访视Id 或者模块Id
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetCRCSubjectClinicalOutDto.ClinicalDataLevel">
<summary>
临床级别
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetCRCSubjectClinicalOutDto.ClinicalUploadType">
<summary>
上传方式
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetClinicalTableListOutDto.ModuleName">
<summary>
模块名称
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.CRCClinicalForm.SubjectId">
<summary>
受试者Id
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.CRCClinicalForm.ClinicalDataLevel"> <member name="P:IRaCIS.Core.Application.Service.Reading.Dto.CRCClinicalForm.ClinicalDataLevel">
<summary> <summary>
临床级别 临床级别
@ -2748,16 +2806,16 @@
受试者ID 受试者ID
</summary> </summary>
</member> </member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetCRCConfirmListOutDto.ModuleName">
<summary>
模块名称
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetCRCConfirmListOutDto.LatestScanDate"> <member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetCRCConfirmListOutDto.LatestScanDate">
<summary> <summary>
最晚拍片日期 最晚拍片日期
</summary> </summary>
</member> </member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.SubmitClinicalFormInDto.VisitId">
<summary>
VisitId
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.SubmitClinicalFormInDto.ReadingId"> <member name="P:IRaCIS.Core.Application.Service.Reading.Dto.SubmitClinicalFormInDto.ReadingId">
<summary> <summary>
VisitId VisitId
@ -10687,6 +10745,13 @@
<param name="_trialRepository"></param> <param name="_trialRepository"></param>
<returns></returns> vvv <returns></returns> vvv
</member> </member>
<member name="M:IRaCIS.Core.Application.PersonalWorkstation.GetPMClinicalDataToBeDoneList(IRaCIS.Core.Application.Contracts.ReviewerSelectToBeDoneQuery)">
<summary>
获取PM核对临床数据
</summary>
<param name="inQuery"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.PersonalWorkstation.GetSPM_ReviewerSelectToBeDoneList(IRaCIS.Core.Application.Contracts.ReviewerSelectToBeDoneQuery,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Enroll},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial})"> <member name="M:IRaCIS.Core.Application.PersonalWorkstation.GetSPM_ReviewerSelectToBeDoneList(IRaCIS.Core.Application.Contracts.ReviewerSelectToBeDoneQuery,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Enroll},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial})">
<summary> <summary>
SPM 阅片人筛选 SPM 阅片人筛选

View File

@ -87,6 +87,25 @@ namespace IRaCIS.Core.Application.Service
_iClinicalQuestionService = iClinicalQuestionService; _iClinicalQuestionService = iClinicalQuestionService;
} }
/// <summary>
/// CRC签名临床数据
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
[HttpPost]
public async Task<IResponseOutput> CRCSignClinicalData(CRCSignClinicalDataInDto inDto)
{
await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(x =>x.Id==inDto.ReadingClinicalDataId, x => new ReadingClinicalData()
{
IsSign = true,
ReadingClinicalDataState = ReadingClinicalDataStatus.HaveSigned
});
await _readingClinicalDataRepository.SaveChangesAsync();
return ResponseOutput.Ok(true);
}
/// <summary> /// <summary>
/// 自动添加CRC临床数据 /// 自动添加CRC临床数据
/// </summary> /// </summary>
@ -199,7 +218,13 @@ namespace IRaCIS.Core.Application.Service
SubjectId=x.SubjectId, SubjectId=x.SubjectId,
SubjectCode=x.Subject.Code, SubjectCode=x.Subject.Code,
TrialId=inDto.TrialId, TrialId=inDto.TrialId,
ClinicalDataTrialSetId = x.ClinicalDataTrialSet.Id, ReadingId= x.ReadingId,
ReadingClinicalDataId=x.Id,
UploadRole = x.ClinicalDataTrialSet.UploadRole,
ClinicalDataLevel = x.ClinicalDataTrialSet.ClinicalDataLevel,
ClinicalUploadType= x.ClinicalDataTrialSet.ClinicalUploadType,
BaseLineVisitId= x.Subject.SubjectVisitList.Where(x=>x.IsBaseLine).Select(x=>x.Id).FirstOrDefault(),
ClinicalDataTrialSetId = x.ClinicalDataTrialSet.Id,
ClinicalDataSetEnName= x.ClinicalDataTrialSet.ClinicalDataSetEnName, ClinicalDataSetEnName= x.ClinicalDataTrialSet.ClinicalDataSetEnName,
ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName, ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName,
}); });
@ -320,8 +345,20 @@ namespace IRaCIS.Core.Application.Service
TrialId= inDto.TrialId, TrialId= inDto.TrialId,
Id = inDto.ClinicalFormId ?? NewId.NextGuid(), Id = inDto.ClinicalFormId ?? NewId.NextGuid(),
ReadingId = inDto.ReadingId, ReadingId = inDto.ReadingId,
VisitId = inDto.VisitId,
}; };
var existsClinical = await _clinicalFormRepository.Where(x =>
x.SubjectId == inDto.SubjectId
&& x.ClinicalDataTrialSetId == inDto.ClinicalDataTrialSetId
).WhereIf(inDto.ReadingId != null, x => x.ReadingId == inDto.ReadingId)
.Where(x => x.ClinicalDataTrialSet.UploadRole != UploadRole.CRC && (x.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.ImageRead
|| x.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.OncologyRead)).AnyAsync();
if (existsClinical)
{
throw new BusinessValidationFailedException("已经添加过临床数据,不允许多次添加!");
}
try try
{ {
var checkDateQuestionId = await _trialClinicalQuestionRepository.Where(x => x.TrialClinicalId == inDto.ClinicalDataTrialSetId && x.IsCheckDate).Select(x => x.Id).FirstNotNullAsync(); var checkDateQuestionId = await _trialClinicalQuestionRepository.Where(x => x.TrialClinicalId == inDto.ClinicalDataTrialSetId && x.IsCheckDate).Select(x => x.Id).FirstNotNullAsync();
@ -335,7 +372,7 @@ namespace IRaCIS.Core.Application.Service
if (clinicalForm.CheckDate != null) if (clinicalForm.CheckDate != null)
{ {
if (await _readModuleRepository.AnyAsync(x => x.SubjectVisit.LatestScanDate <= clinicalForm.CheckDate && x.IsCRCConfirm)) if (await _readModuleRepository.AnyAsync(x =>x.SubjectId== inDto.SubjectId&& x.SubjectVisit.LatestScanDate <= clinicalForm.CheckDate && x.IsCRCConfirm))
{ {
throw new BusinessValidationFailedException("无法添加和修改当前日期的临床数据因为CRC已经确认"); throw new BusinessValidationFailedException("无法添加和修改当前日期的临床数据因为CRC已经确认");
} }
@ -396,7 +433,13 @@ namespace IRaCIS.Core.Application.Service
await _clinicalAnswerRowInfoRepository.BatchDeleteNoTrackingAsync(x => x.ClinicalFormId == inDto.ClinicalFormId); await _clinicalAnswerRowInfoRepository.BatchDeleteNoTrackingAsync(x => x.ClinicalFormId == inDto.ClinicalFormId);
await _clinicalTableAnswerRepository.BatchDeleteNoTrackingAsync(x => x.ClinicalFormId == inDto.ClinicalFormId); await _clinicalTableAnswerRepository.BatchDeleteNoTrackingAsync(x => x.ClinicalFormId == inDto.ClinicalFormId);
} }
if(inDto.ReadingId!=null)
{
await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(x => x.ReadingId == inDto.ReadingId && x.ClinicalDataTrialSetId == inDto.ClinicalDataTrialSetId, x => new ReadingClinicalData()
{
IsSign = true
});
}
await _clinicalFormRepository.AddAsync(clinicalForm); await _clinicalFormRepository.AddAsync(clinicalForm);
await _clinicalQuestionAnswerRepository.AddRangeAsync(clinicalQuestionAnswers); await _clinicalQuestionAnswerRepository.AddRangeAsync(clinicalQuestionAnswers);
await _clinicalAnswerRowInfoRepository.AddRangeAsync(clinicalAnswerRowInfos); await _clinicalAnswerRowInfoRepository.AddRangeAsync(clinicalAnswerRowInfos);
@ -427,28 +470,54 @@ namespace IRaCIS.Core.Application.Service
return ResponseOutput.Ok(true); return ResponseOutput.Ok(true);
} }
/// <summary> /// <summary>
/// 获取CRC确认列表 /// 获取PM待确认列表
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<PageOutput<GetCRCConfirmListOutDto>> GetPMConfirmList(GetPMConfirmListInDto inDto)
{
return await GetCRCConfirmList(new GetCRCConfirmListInDto()
{
TrialId = inDto.TrialId,
IsCRCConfirm = true,
IsPMConfirm = false,
PageIndex = inDto.PageIndex,
PageSize = inDto.PageSize,
Asc = inDto.Asc,
SortField = inDto.SortField,
TrialReadingCriterionId = inDto.TrialReadingCriterionId
});
}
/// <summary>
/// 获取CRC确认列表
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
[HttpPost]
public async Task<PageOutput<GetCRCConfirmListOutDto>> GetCRCConfirmList(GetCRCConfirmListInDto inDto) public async Task<PageOutput<GetCRCConfirmListOutDto>> GetCRCConfirmList(GetCRCConfirmListInDto inDto)
{ {
var query = _readModuleRepository.Where(x => x.TrialId == inDto.TrialId) var query = _readModuleRepository.Where(x => x.TrialId == inDto.TrialId)
.WhereIf(inDto.ReadModuleId != null, x => x.Id == inDto.ReadModuleId) .WhereIf(inDto.ReadModuleId != null, x => x.Id == inDto.ReadModuleId)
.WhereIf(inDto.TrialReadingCriterionId != null, x => x.TrialReadingCriterionId == inDto.TrialReadingCriterionId) .WhereIf(inDto.IsCRCConfirm != null, x => x.IsCRCConfirm == inDto.IsCRCConfirm)
.WhereIf(inDto.IsPMConfirm != null, x => x.IsPMConfirm == inDto.IsPMConfirm)
.WhereIf(inDto.TrialReadingCriterionId != null, x => x.TrialReadingCriterionId == inDto.TrialReadingCriterionId)
.WhereIf(inDto.SubjectId != null, x => x.SubjectId == inDto.SubjectId) .WhereIf(inDto.SubjectId != null, x => x.SubjectId == inDto.SubjectId)
.Select(x => new GetCRCConfirmListOutDto() .Select(x => new GetCRCConfirmListOutDto()
{ {
SubjectId = x.SubjectId, SubjectId = x.SubjectId,
IsCRCConfirm = x.IsCRCConfirm, IsCRCConfirm = x.IsCRCConfirm,
VisitBlindName=x.SubjectVisit.BlindName,
LatestScanDate = x.SubjectVisit.LatestScanDate, LatestScanDate = x.SubjectVisit.LatestScanDate,
ReadingSetType = x.ReadingSetType, ReadingSetType = x.ReadingSetType,
IsPMConfirm = x.IsPMConfirm, IsPMConfirm = x.IsPMConfirm,
SubjectCode = x.Subject.Code, SubjectCode = x.Subject.Code,
ReadModuleId = x.Id, ReadModuleId = x.Id,
ModuleName=x.ModuleName,
}); });
@ -460,6 +529,7 @@ namespace IRaCIS.Core.Application.Service
.Include(x=>x.ClinicalDataTrialSet) .Include(x=>x.ClinicalDataTrialSet)
.Select(x => new CRCClinicalForm .Select(x => new CRCClinicalForm
{ {
SubjectId=x.SubjectId,
CheckDate = x.CheckDate, CheckDate = x.CheckDate,
ClinicalDataLevel = x.ClinicalDataTrialSet.ClinicalDataLevel, ClinicalDataLevel = x.ClinicalDataTrialSet.ClinicalDataLevel,
ClinicalFormId = x.Id, ClinicalFormId = x.Id,
@ -468,7 +538,9 @@ namespace IRaCIS.Core.Application.Service
ClinicalDataSetEnName=x.ClinicalDataTrialSet.ClinicalDataSetEnName, ClinicalDataSetEnName=x.ClinicalDataTrialSet.ClinicalDataSetEnName,
IsHaveTableQuestion=x.ClinicalDataTrialSet.TrialClinicalQuestionList.Any(y=>y.ClinicalQuestionType== ReadingQestionType.Table), IsHaveTableQuestion=x.ClinicalDataTrialSet.TrialClinicalQuestionList.Any(y=>y.ClinicalQuestionType== ReadingQestionType.Table),
}).ToListAsync(); }).ToListAsync();
var confirmList = await _readModuleCriterionFromRepository.Where(x => x.TrialId == inDto.TrialId) var confirmList = await _readModuleCriterionFromRepository.Where(x => x.TrialId == inDto.TrialId
&&x.ClinicalForm.ClinicalDataTrialSet.UploadRole== UploadRole.CRC
&&(x.ClinicalForm.ClinicalDataTrialSet.ClinicalDataLevel==ClinicalLevel.ImageRead|| x.ClinicalForm.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.OncologyRead))
.Select(x => new GetCRCBeConfirm .Select(x => new GetCRCBeConfirm
{ {
CheckDate = x.ClinicalForm.CheckDate ?? default(DateTime), CheckDate = x.ClinicalForm.CheckDate ?? default(DateTime),
@ -498,7 +570,8 @@ namespace IRaCIS.Core.Application.Service
{ {
if (x.ReadingSetType == ReadingSetType.ImageReading) if (x.ReadingSetType == ReadingSetType.ImageReading)
{ {
x.ClinicalFormList = formList.Where(y => y.ClinicalDataLevel == ClinicalLevel.ImageRead&&y.CheckDate <= x.LatestScanDate) x.ClinicalFormList = formList.Where(y => y.ClinicalDataLevel == ClinicalLevel.ImageRead&&y.CheckDate <= x.LatestScanDate&&y.SubjectId==x.SubjectId)
.Select(y => new GetCRCBeConfirmListOutDto() .Select(y => new GetCRCBeConfirmListOutDto()
{ {
CheckDate = y.CheckDate ?? default(DateTime), CheckDate = y.CheckDate ?? default(DateTime),
@ -511,7 +584,7 @@ namespace IRaCIS.Core.Application.Service
} }
else else
{ {
x.ClinicalFormList = formList.Where(y => y.ClinicalDataLevel == ClinicalLevel.OncologyRead&&y.CheckDate <= x.LatestScanDate) x.ClinicalFormList = formList.Where(y => y.ClinicalDataLevel == ClinicalLevel.OncologyRead&&y.CheckDate <= x.LatestScanDate && y.SubjectId == x.SubjectId)
.Select(y => new GetCRCBeConfirmListOutDto() .Select(y => new GetCRCBeConfirmListOutDto()
{ {
CheckDate = y.CheckDate ?? default(DateTime), CheckDate = y.CheckDate ?? default(DateTime),
@ -553,10 +626,10 @@ namespace IRaCIS.Core.Application.Service
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<List<GetClinicalTableListOutDto>> GetClinicalTableList(GetClinicalTableListInDto inDto) public async Task<(List<GetClinicalTableListOutDto>,object)> GetClinicalTableList(GetClinicalTableListInDto inDto)
{ {
var readModule=await _readModuleRepository.Where(x => x.Id == inDto.ReadModuleId).FirstNotNullAsync(): var readModule=await _readModuleRepository.Where(x => x.Id == inDto.ReadModuleId).FirstNotNullAsync();
var confirmList = (await this.GetCRCConfirmList(new GetCRCConfirmListInDto() var confirmList = (await this.GetCRCConfirmList(new GetCRCConfirmListInDto()
{ {
@ -585,13 +658,14 @@ namespace IRaCIS.Core.Application.Service
List<GetClinicalTableListOutDto> result = new List<GetClinicalTableListOutDto>(); List<GetClinicalTableListOutDto> result = new List<GetClinicalTableListOutDto>();
clinicalDataTrialSetIds.ForEach(x => { clinicalDataTrialSetIds.ForEach(x => {
GetClinicalTableListOutDto dto = new GetClinicalTableListOutDto(); GetClinicalTableListOutDto dto = new GetClinicalTableListOutDto();
dto.ModuleName = readModule.ModuleName;
dto.ClinicalDataSetName = confirmList.Where(y => y.ClinicalDataTrialSetId == x).Select(y => y.ClinicalDataSetName).First(); dto.ClinicalDataSetName = confirmList.Where(y => y.ClinicalDataTrialSetId == x).Select(y => y.ClinicalDataSetName).First();
dto.QuestionList = questionList.Where(y => y.TrialClinicalId == x).OrderBy(y => y.ShowOrder).ToList(); dto.QuestionList = questionList.Where(y => y.TrialClinicalId == x).OrderBy(y => y.ShowOrder).ToList();
dto.AnswerList = new List<Dictionary<string, string>>(); dto.AnswerList = new List<Dictionary<string, string>>();
var ClinicalFormIds= answers.Where(y => y.ClinicalDataTrialSetId == x).OrderBy(x => x.CheckDate).Select(x => x.ClinicalFormId).Distinct().ToList(); var ClinicalFormIds= answers.Where(y => y.ClinicalDataTrialSetId == x).OrderBy(x => x.CheckDate).Select(x => x.ClinicalFormId).Distinct().ToList();
ClinicalFormIds.ForEach(z => ClinicalFormIds.ForEach(z =>
{ {
var dic = answers.Where(y => y.ClinicalDataTrialSetId == x).OrderBy(y => y.CheckDate).ToDictionary(x => x.QuestionId.ToString(), x => x.Answer); var dic = answers.Where(y => y.ClinicalFormId == z).OrderBy(y => y.CheckDate).ToDictionary(x => x.QuestionId.ToString(), x => x.Answer);
dic.Add("ClinicalFormId", z.ToString()); dic.Add("ClinicalFormId", z.ToString());
dic.Add("TrialId", inDto.TrialId.ToString()); dic.Add("TrialId", inDto.TrialId.ToString());
dic.Add("SubjectId", readModule.SubjectId.ToString()); dic.Add("SubjectId", readModule.SubjectId.ToString());
@ -602,9 +676,12 @@ namespace IRaCIS.Core.Application.Service
}); });
result.Add(dto); result.Add(dto);
}); });
return result; return (result, new
{
readModule.ModuleName,
});
} }
/// <summary> /// <summary>
@ -613,9 +690,10 @@ namespace IRaCIS.Core.Application.Service
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<List<GetClinicalDateListOutDto>> GetClinicalDateList(GetCRCBeConfirmListInDto inDto) public async Task<(List<GetClinicalDateListOutDto>,object)> GetClinicalDateList(GetCRCBeConfirmListInDto inDto)
{ {
var confirmList = (await this.GetCRCConfirmList(new GetCRCConfirmListInDto() var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadModuleId).FirstNotNullAsync();
var confirmList = (await this.GetCRCConfirmList(new GetCRCConfirmListInDto()
{ {
ReadModuleId = inDto.ReadModuleId, ReadModuleId = inDto.ReadModuleId,
TrialId = inDto.TrialId, TrialId = inDto.TrialId,
@ -633,7 +711,6 @@ namespace IRaCIS.Core.Application.Service
result.Add(new GetClinicalDateListOutDto() result.Add(new GetClinicalDateListOutDto()
{ {
ClinicalDataSetName = confirmList.Where(y => y.ClinicalDataTrialSetId == x).Select(y => y.ClinicalDataSetName).First(), ClinicalDataSetName = confirmList.Where(y => y.ClinicalDataTrialSetId == x).Select(y => y.ClinicalDataSetName).First(),
DateList = confirmList.Where(y => y.ClinicalDataTrialSetId == x).ToList() DateList = confirmList.Where(y => y.ClinicalDataTrialSetId == x).ToList()
@ -641,7 +718,9 @@ namespace IRaCIS.Core.Application.Service
}); });
return result; return (result,new {
readModule.ModuleName,
});
} }
/// <summary> /// <summary>
@ -759,7 +838,7 @@ namespace IRaCIS.Core.Application.Service
await _readModuleRepository.UpdatePartialFromQueryAsync(x => inDto.ReadModuleId == x.Id, x => new ReadModule() await _readModuleRepository.UpdatePartialFromQueryAsync(x => inDto.ReadModuleId == x.Id, x => new ReadModule()
{ {
IsPMConfirm = false IsPMConfirm = true
}); });
await _readModuleRepository.SaveChangesAsync(); await _readModuleRepository.SaveChangesAsync();

View File

@ -66,8 +66,11 @@ namespace IRaCIS.Application.Services
&& x.ClinicalUploadType == ClinicalUploadType.Structuring && x.UploadRole == UploadRole.CRC && x.ClinicalUploadType == ClinicalUploadType.Structuring && x.UploadRole == UploadRole.CRC
); );
if (_systemClinicalQuestionRepository.Where(x => x.SystemClinicalId == inDto.SystemClinicalId).Count() == 0)
if (_systemClinicalQuestionRepository.Where(x => isNeedVerify&& x.SystemClinicalId == inDto.SystemClinicalId && x.IsCheckDate).Count() != 1) {
throw new BusinessValidationFailedException("当前临床数据未配置问题,请先配置问题之后再应用");
}
if (isNeedVerify&&_systemClinicalQuestionRepository.Where(x => x.SystemClinicalId == inDto.SystemClinicalId && x.IsCheckDate).Count() != 1)
{ {
throw new BusinessValidationFailedException(_localizer["ClinicalDataSet_Apply"]); throw new BusinessValidationFailedException(_localizer["ClinicalDataSet_Apply"]);
@ -98,7 +101,12 @@ namespace IRaCIS.Application.Services
&& x.ClinicalUploadType == ClinicalUploadType.Structuring && x.UploadRole == UploadRole.CRC && x.ClinicalUploadType == ClinicalUploadType.Structuring && x.UploadRole == UploadRole.CRC
); );
if (_trialClinicalQuestionRepository.Where(x => isNeedVerify&& x.TrialClinicalId == inDto.TrialClinicalId && x.IsCheckDate).Count() != 1) if (_trialClinicalQuestionRepository.Where(x => x.TrialClinicalId == inDto.TrialClinicalId).Count() == 0)
{
throw new BusinessValidationFailedException("当前临床数据未配置问题,请先配置问题之后再应用");
}
if (isNeedVerify&&_trialClinicalQuestionRepository.Where(x => x.TrialClinicalId == inDto.TrialClinicalId && x.IsCheckDate).Count() != 1)
{ {
throw new BusinessValidationFailedException(_localizer["ClinicalDataSet_Apply"]); throw new BusinessValidationFailedException(_localizer["ClinicalDataSet_Apply"]);

View File

@ -24,6 +24,7 @@ namespace IRaCIS.Application.Services
private readonly IRepository<SubjectVisit> _subjectVisitRepository; private readonly IRepository<SubjectVisit> _subjectVisitRepository;
private readonly IRepository<PreviousHistory> _previousHistoryRepository; private readonly IRepository<PreviousHistory> _previousHistoryRepository;
private readonly IRepository<ReadModuleCriterionFrom> _readModuleCriterionFromRepository;
private readonly IRepository<PreviousOther> _previousOtherRepository; private readonly IRepository<PreviousOther> _previousOtherRepository;
private readonly IRepository<PreviousSurgery> _previousSurgeryRepository; private readonly IRepository<PreviousSurgery> _previousSurgeryRepository;
private readonly IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository; private readonly IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository;
@ -37,7 +38,7 @@ namespace IRaCIS.Application.Services
IRepository<PreviousPDF> previousPDFRepository, IRepository<PreviousPDF> previousPDFRepository,
IRepository<SubjectVisit> subjectVisitRepository, IRepository<SubjectVisit> subjectVisitRepository,
IRepository<PreviousHistory> previousHistoryRepository, IRepository<PreviousHistory> previousHistoryRepository,
IRepository<ReadModuleCriterionFrom> readModuleCriterionFromRepository,
IRepository<PreviousOther> previousOtherRepository, IRepository<PreviousOther> previousOtherRepository,
IRepository<PreviousSurgery> previousSurgeryRepository, IRepository<PreviousSurgery> previousSurgeryRepository,
IRepository<ReadingQuestionCriterionTrial> readingQuestionCriterionTrialRepository, IRepository<ReadingQuestionCriterionTrial> readingQuestionCriterionTrialRepository,
@ -53,6 +54,7 @@ namespace IRaCIS.Application.Services
this._previousPDFRepository = previousPDFRepository; this._previousPDFRepository = previousPDFRepository;
this._subjectVisitRepository = subjectVisitRepository; this._subjectVisitRepository = subjectVisitRepository;
this._previousHistoryRepository = previousHistoryRepository; this._previousHistoryRepository = previousHistoryRepository;
this._readModuleCriterionFromRepository = readModuleCriterionFromRepository;
this._previousOtherRepository = previousOtherRepository; this._previousOtherRepository = previousOtherRepository;
this._previousSurgeryRepository = previousSurgeryRepository; this._previousSurgeryRepository = previousSurgeryRepository;
this._readingQuestionCriterionTrialRepository = readingQuestionCriterionTrialRepository; this._readingQuestionCriterionTrialRepository = readingQuestionCriterionTrialRepository;
@ -676,9 +678,80 @@ namespace IRaCIS.Application.Services
}); });
var result = await resultQuery.ToListAsync(); var result = await resultQuery.ToListAsync();
// 根据标准
if (inDto.VisitTaskId != null)
// 这里处理CRC上传 阅片期的临床数据
var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadingId)
.WhereIf(inDto.SelectIsSign,x=>x.IsPMConfirm)
.WhereIf(!inDto.SelectIsSign, x => x.IsCRCConfirm)
.FirstOrDefaultAsync();
if (readModule != null)
{
var moduleCriterionFromList = await _readModuleCriterionFromRepository.Where(x => x.ReadModuleId == readModule.Id).Select(x => new{
ClinicalFormId= x.ClinicalFormId,
CheckDate= x.ClinicalForm.CheckDate,
ClinicalDataTrialSetId= x.ClinicalForm.ClinicalDataTrialSetId
}).ToListAsync();
var setIds = moduleCriterionFromList.Select(x=>x.ClinicalDataTrialSetId).Distinct().ToList();
var clinicalresult = await _clinicalDataTrialSetRepository.Where(x => x.UploadRole == UploadRole.CRC && (x.ClinicalDataLevel == ClinicalLevel.OncologyRead || x.ClinicalDataLevel == ClinicalLevel.ImageRead))
.Where(x => setIds.Contains(x.Id))
.Select(x => new GetReadingClinicalDataListOutDto()
{
ClinicalDataLevel = x.ClinicalDataLevel,
SubjectId = inDto.SubjectId,
ReadingId = default(Guid),
ClinicalDataSetName = x.ClinicalDataSetName.LanguageName(x.ClinicalDataSetEnName, _userInfo.IsEn_Us),
ClinicalDataSetEnName = x.ClinicalDataSetEnName,
ClinicalDataTrialSetId = x.Id,
IsSign = readModule.IsPMConfirm,
ClinicalUploadType = x.ClinicalUploadType,
Id = default(Guid),
UploadRole = x.UploadRole,
IsCRCUpload = x.UploadRole == UploadRole.CRC,
IsNeedMerge = true,
ReadModuleId = readModule.Id,
//FileCount = x.FileCount,
//ReadingClinicalDataState = x.ReadingClinicalDataState,
//FileList = x.ReadingClinicalDataPDFList.Select(y => new GetFileDto()
//{
// Id = y.Id,
// FileName = y.FileName,
// Path = y.Path,
// CreateTime = y.CreateTime,
//}).ToList()
}).ToListAsync();
clinicalresult.ForEach(x =>
{
x.FileCount = moduleCriterionFromList.Where(y => y.ClinicalDataTrialSetId == x.ClinicalDataTrialSetId).Count();
x.ClinicalFromList = moduleCriterionFromList.Where(y => y.ClinicalDataTrialSetId == x.ClinicalDataTrialSetId).OrderBy(y => y.CheckDate).Select(x => new ClinicalFromData
{
CheckDate = x.CheckDate,
ClinicalFormId = x.ClinicalFormId
}).ToList();
x.ReadingClinicalDataState = readModule.IsPMConfirm ? ReadingClinicalDataStatus.HaveSigned : ReadingClinicalDataStatus.HaveChecked;
});
result.AddRange(clinicalresult);
}
// 根据标准
if (inDto.VisitTaskId != null)
{ {
var visitTaskInfo = await _visitTaskRepository.FirstOrDefaultAsync(x => x.Id == inDto.VisitTaskId); var visitTaskInfo = await _visitTaskRepository.FirstOrDefaultAsync(x => x.Id == inDto.VisitTaskId);
@ -750,6 +823,73 @@ namespace IRaCIS.Application.Services
}); });
var result = await resultQuery.ToListAsync(); var result = await resultQuery.ToListAsync();
// 这里处理CRC上传 阅片期的临床数据
var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadingId&&x.IsCRCConfirm)
.FirstOrDefaultAsync();
if (readModule != null)
{
var moduleCriterionFromList = await _readModuleCriterionFromRepository.Where(x => x.ReadModuleId == readModule.Id).Select(x => new {
ClinicalFormId = x.ClinicalFormId,
CheckDate = x.ClinicalForm.CheckDate,
ClinicalDataTrialSetId = x.ClinicalForm.ClinicalDataTrialSetId
}).ToListAsync();
var setIds = moduleCriterionFromList.Select(x => x.ClinicalDataTrialSetId).Distinct().ToList();
var clinicalresult = await _clinicalDataTrialSetRepository.Where(x => x.UploadRole == UploadRole.CRC && (x.ClinicalDataLevel == ClinicalLevel.OncologyRead || x.ClinicalDataLevel == ClinicalLevel.ImageRead))
.Where(x => setIds.Contains(x.Id))
.Select(x => new GetReadingClinicalDataListOutDto()
{
ClinicalDataLevel = x.ClinicalDataLevel,
SubjectId = inDto.SubjectId,
ReadingId = default(Guid),
ClinicalDataSetName = x.ClinicalDataSetName.LanguageName(x.ClinicalDataSetEnName, _userInfo.IsEn_Us),
ClinicalDataSetEnName = x.ClinicalDataSetEnName,
ClinicalDataTrialSetId = x.Id,
IsSign = readModule.IsPMConfirm,
ClinicalUploadType = x.ClinicalUploadType,
Id = default(Guid),
UploadRole = x.UploadRole,
IsCRCUpload = x.UploadRole == UploadRole.CRC,
IsNeedMerge = true,
ReadModuleId = readModule.Id,
//FileCount = x.FileCount,
//ReadingClinicalDataState = x.ReadingClinicalDataState,
//FileList = x.ReadingClinicalDataPDFList.Select(y => new GetFileDto()
//{
// Id = y.Id,
// FileName = y.FileName,
// Path = y.Path,
// CreateTime = y.CreateTime,
//}).ToList()
}).ToListAsync();
clinicalresult.ForEach(x =>
{
x.FileCount = moduleCriterionFromList.Where(y => y.ClinicalDataTrialSetId == x.ClinicalDataTrialSetId).Count();
x.ClinicalFromList = moduleCriterionFromList.Where(y => y.ClinicalDataTrialSetId == x.ClinicalDataTrialSetId).OrderBy(y => y.CheckDate).Select(x => new ClinicalFromData
{
CheckDate = x.CheckDate,
ClinicalFormId = x.ClinicalFormId
}).ToList();
x.ReadingClinicalDataState = readModule.IsPMConfirm ? ReadingClinicalDataStatus.HaveSigned : ReadingClinicalDataStatus.HaveChecked;
});
result.AddRange(clinicalresult);
}
//result = result.Where(x => !(x.UploadRole == UploadRole.CRC && x.ClinicalUploadType == ClinicalUploadType.PDF && x.FileList.Count() == 0)).ToList(); //result = result.Where(x => !(x.UploadRole == UploadRole.CRC && x.ClinicalUploadType == ClinicalUploadType.PDF && x.FileList.Count() == 0)).ToList();
return result; return result;
} }

View File

@ -8,6 +8,10 @@ using System.Threading.Tasks;
namespace IRaCIS.Core.Application.Service.Reading.Dto namespace IRaCIS.Core.Application.Service.Reading.Dto
{ {
public class CRCSignClinicalDataInDto
{
public Guid ReadingClinicalDataId { get; set; }
}
public class AutoAddClinicalInDto public class AutoAddClinicalInDto
{ {
public Guid? SubjectId { get; set; } public Guid? SubjectId { get; set; }
@ -28,9 +32,33 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
{ {
public Guid SubjectId { get; set; } public Guid SubjectId { get; set; }
public Guid ReadingClinicalDataId { get; set; }
/// <summary>
/// 上传角色
/// </summary>
public UploadRole UploadRole { get; set; }
public Guid TrialId { get; set; } public Guid TrialId { get; set; }
public string SubjectCode { get; set; } /// <summary>
/// 访视Id 或者模块Id
/// </summary>
public Guid ReadingId { get; set; }
/// <summary>
/// 临床级别
/// </summary>
public ClinicalLevel ClinicalDataLevel { get; set; }
public Guid? BaseLineVisitId { get; set; }
/// <summary>
/// 上传方式
/// </summary>
public ClinicalUploadType ClinicalUploadType { get; set; }
public string SubjectCode { get; set; }
public Guid ClinicalDataTrialSetId { get; set; } public Guid ClinicalDataTrialSetId { get; set; }
public string ClinicalDataSetName { get; set; } public string ClinicalDataSetName { get; set; }
@ -99,10 +127,21 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public string Answer { get; set; } = string.Empty; public string Answer { get; set; } = string.Empty;
} }
public class GetPMConfirmListInDto: PageInput
{
public Guid TrialId { get; set; }
public Guid TrialReadingCriterionId { get; set; }
}
public class GetCRCConfirmListInDto:PageInput public class GetCRCConfirmListInDto:PageInput
{ {
public Guid? TrialReadingCriterionId { get; set; } public bool? IsCRCConfirm { get; set; }
public bool? IsPMConfirm { get; set; }
public Guid? TrialReadingCriterionId { get; set; }
public Guid? SubjectId { get; set; } public Guid? SubjectId { get; set; }
@ -122,6 +161,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
{ {
public string ClinicalDataSetName { get; set; } public string ClinicalDataSetName { get; set; }
public List<GetCRCBeConfirmListOutDto> DateList { get; set; } public List<GetCRCBeConfirmListOutDto> DateList { get; set; }
} }
@ -145,7 +185,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public class GetClinicalTableListOutDto: GetClinicalQuestionAnswerListOutDto public class GetClinicalTableListOutDto: GetClinicalQuestionAnswerListOutDto
{ {
public string ClinicalDataSetName { get; set; } public string ClinicalDataSetName { get; set; }
}
/// <summary>
/// 模块名称
/// </summary>
public string ModuleName { get; set; }
}
public class GetCRCBeConfirm: GetCRCBeConfirmListOutDto public class GetCRCBeConfirm: GetCRCBeConfirmListOutDto
@ -181,6 +226,10 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public class CRCClinicalForm public class CRCClinicalForm
{ {
/// <summary>
/// 受试者Id
/// </summary>
public Guid SubjectId { get; set; }
public DateTime? CheckDate { get; set; } public DateTime? CheckDate { get; set; }
public Guid ClinicalFormId { get; set; } public Guid ClinicalFormId { get; set; }
@ -210,7 +259,14 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public Guid SubjectId { get; set; } public Guid SubjectId { get; set; }
public Guid ReadModuleId { get; set; } public Guid ReadModuleId { get; set; }
public bool IsPMConfirm { get; set; } /// <summary>
/// 模块名称
/// </summary>
public string ModuleName { get; set; }
public string VisitBlindName { get; set; }
public bool IsPMConfirm { get; set; }
public ReadingSetType ReadingSetType { get; set; } public ReadingSetType ReadingSetType { get; set; }
@ -230,8 +286,16 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
/// </summary> /// </summary>
public DateTime? LatestScanDate { get; set; } public DateTime? LatestScanDate { get; set; }
public List<string> ClinicalNameList
{
get
{
return this.ClinicalFormList.Select(x => x.ClinicalDataSetName).Distinct().ToList();
}
}
public List<GetCRCBeConfirmListOutDto> ClinicalFormList { get; set; }
public List<GetCRCBeConfirmListOutDto> ClinicalFormList { get; set; }
public int FormCount public int FormCount
{ {
@ -248,11 +312,6 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
} }
public class SubmitClinicalFormInDto public class SubmitClinicalFormInDto
{ {
/// <summary>
/// VisitId
/// </summary>
public Guid? VisitId { get; set; }
/// <summary> /// <summary>
/// VisitId /// VisitId
/// </summary> /// </summary>

View File

@ -10,8 +10,8 @@ using System.Threading.Tasks;
namespace IRaCIS.Core.Application.Service.Reading.Dto namespace IRaCIS.Core.Application.Service.Reading.Dto
{ {
public class AddOrUpdateReadingClinicalDataDto public class AddOrUpdateReadingClinicalDataDto
{ {
public Guid? Id { get; set; } public Guid? Id { get; set; }
@ -127,7 +127,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public List<PreviousOtherView> PreviousOtherList { get; set; } public List<PreviousOtherView> PreviousOtherList { get; set; }
public List<PreviousSurgeryView> PreviousSurgeryList{ get; set; } public List<PreviousSurgeryView> PreviousSurgeryList { get; set; }
} }
@ -137,7 +137,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public class GetCRCClinicalDataInDto public class GetCRCClinicalDataInDto
{ {
[NotDefault] [NotDefault]
public Guid SubjectVisitId { get; set; } public Guid SubjectVisitId { get; set; }
[NotDefault] [NotDefault]
public Guid TrialId { get; set; } public Guid TrialId { get; set; }
@ -163,7 +163,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
/// <summary> /// <summary>
/// 文件名称 /// 文件名称
/// </summary> /// </summary>
public string FileName { get; set; } public string FileName { get; set; }
/// <summary> /// <summary>
/// 路径 /// 路径
@ -197,7 +197,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
/// </summary> /// </summary>
public class GetReadingClinicalDataListIndto public class GetReadingClinicalDataListIndto
{ {
[NotDefault] [NotDefault]
public Guid SubjectId { get; set; } public Guid SubjectId { get; set; }
[NotDefault] [NotDefault]
public Guid ReadingId { get; set; } public Guid ReadingId { get; set; }
@ -220,7 +220,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public bool IsBaseLine { get; set; } public bool IsBaseLine { get; set; }
} }
public class GetReadingClinicalDataPDFListIndto:PageInput public class GetReadingClinicalDataPDFListIndto : PageInput
{ {
public Guid ReadingClinicalDataId { get; set; } public Guid ReadingClinicalDataId { get; set; }
} }
@ -283,7 +283,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public class PMClinicalDataConfirmCommand public class PMClinicalDataConfirmCommand
{ {
public Guid Id { get; set; } public Guid Id { get; set; }
/// <summary> /// <summary>
@ -363,11 +363,15 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
/// </summary> /// </summary>
public bool IsCRCUpload { get; set; } public bool IsCRCUpload { get; set; }
public bool IsNeedMerge { get; set; } = false;
public Guid ReadModuleId { get; set; }
/// <summary> /// <summary>
/// 是否签名 /// 是否签名
/// </summary> /// </summary>
public bool IsSign { get; set; } public bool IsSign { get; set; }
/// <summary> /// <summary>
@ -395,6 +399,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
// } // }
//} //}
public List<ClinicalFromData> ClinicalFromList { get; set; }
public List<GetFileDto> FileList { get; set; } = new List<GetFileDto>(); public List<GetFileDto> FileList { get; set; } = new List<GetFileDto>();
@ -404,6 +410,19 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
} }
public class ClinicalFromData
{
/// <summary>
/// 表单Id
/// </summary>
public Guid ClinicalFormId { get; set; }
/// <summary>
/// 检查日期
/// </summary>
public DateTime? CheckDate { get; set; }
}
public class GetFileDto public class GetFileDto
{ {

View File

@ -9,6 +9,13 @@ namespace IRaCIS.Core.Application.Service.Reading.Interface
{ {
public interface IClinicalAnswerService public interface IClinicalAnswerService
{ {
Task AutoAddCRCClinical(AutoAddClinicalInDto inDto); Task<IResponseOutput> CRCSignClinicalData(CRCSignClinicalDataInDto inDto);
}
Task AutoAddCRCClinical(AutoAddClinicalInDto inDto);
Task<IResponseOutput> PMConfirmClinical(CRCConfirmClinicalInDto inDto);
Task<IResponseOutput> SubmitClinicalForm(SubmitClinicalFormInDto inDto);
}
} }

View File

@ -105,10 +105,13 @@ namespace IRaCIS.Core.Application.Contracts
public int? ToBeApprovalCount { get; set; } public int? ToBeApprovalCount { get; set; }
} }
public class GetPMClinicalDataToBeDoneListOutDto: TrialBaseInfoDto
{
public int? ToBeApprovalCount { get; set; }
}
public class ReviewerSelectToBeDoneQuery : PageInput public class ReviewerSelectToBeDoneQuery : PageInput
{ {
} }
public class ReviewerSelectToBeDoneDto : TrialBaseInfoDto public class ReviewerSelectToBeDoneDto : TrialBaseInfoDto

View File

@ -21,15 +21,19 @@ namespace IRaCIS.Core.Application
private readonly IRepository<TrialUser> _trialUserRepository; private readonly IRepository<TrialUser> _trialUserRepository;
private readonly IRepository<TrialDocument> _trialDocumentRepository; private readonly IRepository<TrialDocument> _trialDocumentRepository;
private readonly IRepository<SystemDocument> _systemDocumentRepository; private readonly IRepository<SystemDocument> _systemDocumentRepository;
private readonly IRepository<ReadModule> _readModuleRepository;
private readonly IRepository<SystemNotice> _systemNoticeRepository; private readonly IRepository<SystemNotice> _systemNoticeRepository;
public PersonalWorkstation(IRepository<Trial> trialRepository, IRepository<TrialUser> trialUserRepository, IRepository<TrialDocument> trialDocumentRepository, public PersonalWorkstation(IRepository<Trial> trialRepository, IRepository<TrialUser> trialUserRepository, IRepository<TrialDocument> trialDocumentRepository,
IRepository<SystemDocument> systemDocumentRepository, IRepository<SystemNotice> systemNoticeRepository) IRepository<SystemDocument> systemDocumentRepository,
IRepository<ReadModule> readModuleRepository,
IRepository<SystemNotice> systemNoticeRepository)
{ {
_trialRepository = trialRepository; _trialRepository = trialRepository;
_trialUserRepository = trialUserRepository; _trialUserRepository = trialUserRepository;
_trialDocumentRepository = trialDocumentRepository; _trialDocumentRepository = trialDocumentRepository;
_systemDocumentRepository = systemDocumentRepository; _systemDocumentRepository = systemDocumentRepository;
this._readModuleRepository = readModuleRepository;
_systemNoticeRepository = systemNoticeRepository; _systemNoticeRepository = systemNoticeRepository;
} }
@ -294,6 +298,43 @@ namespace IRaCIS.Core.Application
} }
/// <summary>
/// 获取PM核对临床数据
/// </summary>
/// <param name="inQuery"></param>
/// <returns></returns>
[HttpPost]
public async Task<IResponseOutput<PageOutput<GetPMClinicalDataToBeDoneListOutDto>>> GetPMClinicalDataToBeDoneList(ReviewerSelectToBeDoneQuery inQuery)
{
var query = _trialRepository
.Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Select(t => new GetPMClinicalDataToBeDoneListOutDto()
{
TrialId = t.Id,
ResearchProgramNo = t.ResearchProgramNo,
ExperimentName = t.ExperimentName,
TrialCode = t.TrialCode,
ToBeApprovalCount = t.ReadModuleList.Where(u => u.IsCRCConfirm&&!u.IsPMConfirm).Count()
});
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrEmpty(inQuery.SortField) ? nameof(ReviewerSelectToBeDoneDto.TrialId) : inQuery.SortField, inQuery.Asc);
var all =await _trialRepository
.Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Select(t => new GetPMClinicalDataToBeDoneListOutDto()
{
ToBeApprovalCount = t.ReadModuleList.Where(u => u.IsCRCConfirm && !u.IsPMConfirm).Count()
}).ToListAsync();
return ResponseOutput.Ok(result, new { ToBeApprovalCount = all.Sum(x=>x.ToBeApprovalCount) }); ;
}
#endregion #endregion

View File

@ -1924,6 +1924,9 @@ namespace IRaCIS.Core.Domain.Share
HaveUploaded = 1, HaveUploaded = 1,
/// <summary>
/// 待核查
/// </summary>
HaveChecked = 2, HaveChecked = 2,
HaveSigned = 3 HaveSigned = 3

View File

@ -44,11 +44,6 @@ namespace IRaCIS.Core.Domain.Models
/// </summary> /// </summary>
public Guid ClinicalDataTrialSetId { get; set; } public Guid ClinicalDataTrialSetId { get; set; }
/// <summary>
/// VisitId
/// </summary>
public Guid? VisitId { get; set; }
/// <summary> /// <summary>
/// VisitId /// VisitId
/// </summary> /// </summary>

View File

@ -119,11 +119,15 @@ namespace IRaCIS.Core.Domain.Models
[ForeignKey("SubjectVisitId")] [ForeignKey("SubjectVisitId")]
public SubjectVisit SubjectVisit { get; set; } public SubjectVisit SubjectVisit { get; set; }
[JsonIgnore]
[ForeignKey("TrialId")]
public Trial Trial { get; set; }
/// <summary>
/// 阅片配置的类型 /// <summary>
/// </summary> /// 阅片配置的类型
public ReadingSetType ReadingSetType { get; set; } /// </summary>
public ReadingSetType ReadingSetType { get; set; }

View File

@ -53,6 +53,8 @@ namespace IRaCIS.Core.Domain.Models
public List<TrialSite> TrialSiteList { get; set; } = new List<TrialSite>(); public List<TrialSite> TrialSiteList { get; set; } = new List<TrialSite>();
[JsonIgnore] [JsonIgnore]
public List<TrialSiteUser> TrialSiteUserList { get; set; } = new List<TrialSiteUser>(); public List<TrialSiteUser> TrialSiteUserList { get; set; } = new List<TrialSiteUser>();
[JsonIgnore]
public List<ReadModule> ReadModuleList { get; set; } = new List<ReadModule>();
public Guid IndicationTypeId { get; set; } = Guid.Empty; public Guid IndicationTypeId { get; set; } = Guid.Empty;