diff --git a/IRaCIS.Core.API/Controllers/InspectionController.cs b/IRaCIS.Core.API/Controllers/InspectionController.cs
index 8018bc159..8ef86050d 100644
--- a/IRaCIS.Core.API/Controllers/InspectionController.cs
+++ b/IRaCIS.Core.API/Controllers/InspectionController.cs
@@ -254,6 +254,24 @@ namespace IRaCIS.Core.API.Controllers
return result;
}
+ ///
+ /// CRC撤销临床数据
+ ///
+ ///
+ ///
+ [HttpPost, Route("Inspection/ClinicalAnswer/CRCCancelConfirmClinical")]
+ [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
+
+ [UnitOfWork]
+ public async Task CRCCancelConfirmClinical(DataInspectionDto opt)
+ {
+ var singid = await _inspectionService.RecordSing(opt.SignInfo);
+ var result = await _clinicalAnswerService.CRCCancelConfirmClinical(opt.Data);
+ await _inspectionService.CompletedSign(singid, result);
+ return result;
+ }
+
+
///
/// PM确认临床数据
///
diff --git a/IRaCIS.Core.API/IRaCIS.Core.API.xml b/IRaCIS.Core.API/IRaCIS.Core.API.xml
index 7e6ee7ae3..eec56cc64 100644
--- a/IRaCIS.Core.API/IRaCIS.Core.API.xml
+++ b/IRaCIS.Core.API/IRaCIS.Core.API.xml
@@ -146,6 +146,13 @@
+
+
+ CRC撤销临床数据
+
+
+
+
PM确认临床数据
diff --git a/IRaCIS.Core.API/wwwroot/swagger/ui/abp.swagger.js b/IRaCIS.Core.API/wwwroot/swagger/ui/abp.swagger.js
index eb708cbbd..30ec9c833 100644
--- a/IRaCIS.Core.API/wwwroot/swagger/ui/abp.swagger.js
+++ b/IRaCIS.Core.API/wwwroot/swagger/ui/abp.swagger.js
@@ -414,8 +414,8 @@ var abp = abp || {};
//Inputs
createInput(modalUxContent, 'tenancyName', 'Tenancy Name (Leave empty for Host)');
- createInput(modalUxContent, 'userName', 'Username or email address','text','admin');
- createInput(modalUxContent, 'password', 'Password','password');
+ createInput(modalUxContent, 'userName', 'Username or email address','text','cyldev');
+ createInput(modalUxContent, 'password', 'Password','password','123456');
//Buttons
var authBtnWrapper = document.createElement('div');
diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index 5755da3e6..35bb60e8e 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -2806,6 +2806,11 @@
模块名称
+
+
+ CRC是否正在申请撤回
+
+
最晚拍片日期
@@ -3156,6 +3161,11 @@
最大长度
+
+
+ 最大行数
+
+
临床数据选项类型(无,自定义)
@@ -3881,6 +3891,21 @@
路径
+
+
+ 临床数据类型Id
+
+
+
+
+ 1 PM上传的所有的 2CRC上传的所有已确认的 3 所有已经签名的
+
+
+
+
+ 只获取CRC上传的阅片模块结构化录入
+
+
只查询已经签名的临床数据
@@ -3891,6 +3916,16 @@
获取访视列表
+
+
+ 临床数据类型Id
+
+
+
+
+ 1 PM上传的所有的 2CRC上传的所有已确认的 3 所有已经签名的
+
+
是否是访视
@@ -3956,6 +3991,11 @@
访视Id 或者模块Id
+
+
+ CRC是否正在申请撤回
+
+
项目配置临床类型Name
@@ -4026,6 +4066,16 @@
文件数量
+
+
+ 表单Id
+
+
+
+
+ 检查日期
+
+
Id
diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs
index 75fdb7488..0a151eda4 100644
--- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs
+++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs
@@ -459,6 +459,13 @@ namespace IRaCIS.Core.Application.Service
var haveSignedCount = _readingClinicalDataRepository
.Where(t => t.TrialId == trialId && t.IsSign && t.ReadingClinicalDataState == ReadingClinicalDataStatus.HaveSigned && t.ReadingId == readingId && t.ClinicalDataTrialSet.UploadRole == UploadRole.PM).Count();
+
+ var readModule = _readModuleRepository.Where(t => t.Id == readingId).FirstOrDefault();
+ //CRC 阅片期自定义结构化录入是否签名
+ bool crcReadModuleSign = true;
+
+
+
//访视
if (readingCategory == ReadingCategory.Visit)
{
@@ -478,16 +485,37 @@ namespace IRaCIS.Core.Application.Service
{
}
+
//阅片期
else if (readingCategory == ReadingCategory.Global)
{
needSignCount = trialClinicalDataSetList.Where(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCriterionId) && t.ClinicalDataLevel == ClinicalLevel.ImageRead && t.UploadRole == UploadRole.PM).Count();
+ if (readModule != null)
+ {
+ // 不存在需要CRC上传的临床数据 或者 PM已确认
+ crcReadModuleSign =
+ !trialClinicalDataSetList.Any(x =>
+ x.UploadRole == UploadRole.CRC
+ && x.ClinicalDataLevel == ClinicalLevel.ImageRead
+ && x.ClinicalUploadType == ClinicalUploadType.Structuring
+ && x.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCriterionId)) || readModule.IsPMConfirm;
+ }
}
// 肿瘤学
else if (readingCategory == ReadingCategory.Oncology)
{
- return trialClinicalDataSetList.Any(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCriterionId) && t.ClinicalDataLevel == ClinicalLevel.OncologyRead);
+ needSignCount= trialClinicalDataSetList.Where(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCriterionId) && t.ClinicalDataLevel == ClinicalLevel.OncologyRead && t.UploadRole == UploadRole.PM).Count();
+ if (readModule != null)
+ {
+ // 不存在需要CRC上传的临床数据 或者 PM已确认
+ crcReadModuleSign =
+ !trialClinicalDataSetList.Any(x =>
+ x.UploadRole == UploadRole.CRC
+ && x.ClinicalDataLevel == ClinicalLevel.OncologyRead
+ && x.ClinicalUploadType == ClinicalUploadType.Structuring
+ && x.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCriterionId)) || readModule.IsPMConfirm;
+ }
}
else
{
@@ -495,7 +523,7 @@ namespace IRaCIS.Core.Application.Service
}
//可能仅仅CRC 基线 没有PM
- if (needSignCount == haveSignedCount /*&& needSignCount != 0*/)
+ if (needSignCount == haveSignedCount && crcReadModuleSign )
{
isClinicalDataSign = true;
diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs
index 1c28eb9e4..261ca8a12 100644
--- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs
@@ -15,6 +15,7 @@ using IRaCIS.Core.Infrastructure;
using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Infrastructure.Extention;
using IRaCIS.Core.Application.Service.Reading.Interface;
+using IRaCIS.Core.Application.Contracts;
namespace IRaCIS.Core.Application.Service
{
@@ -51,6 +52,8 @@ namespace IRaCIS.Core.Application.Service
private readonly IClinicalQuestionService _iClinicalQuestionService;
+ private readonly IReadingClinicalDataService _iReadingClinicalDataService;
+
public ClinicalAnswerService(IRepository trialClinicalQuestionRepository,
IRepository systemClinicalTableQuestionRepository,
@@ -58,7 +61,8 @@ namespace IRaCIS.Core.Application.Service
IRepository readingClinicalDataRepository,
IRepository clinicalFormRepository,
IRepository subjectRepository,
- IRepository readModuleCriterionFromRepository,
+ IReadingClinicalDataService iReadingClinicalDataService,
+ IRepository readModuleCriterionFromRepository,
IRepository readModuleRepository,
IRepository subjectVisitRepository,
IRepository clinicalTableAnswerRepository,
@@ -78,8 +82,8 @@ namespace IRaCIS.Core.Application.Service
_trialClinicalTableQuestionRepository = trialClinicalTableQuestionRepository;
_systemClinicalQuestionRepository = systemClinicalQuestionRepository;
_clinicalDataTrialSetRepository = clinicalDataTrialSetRepository;
-
- _clinicalFormRepository = clinicalFormRepository;
+ _iReadingClinicalDataService = iReadingClinicalDataService;
+ _clinicalFormRepository = clinicalFormRepository;
this._subjectRepository = subjectRepository;
this._readModuleCriterionFromRepository = readModuleCriterionFromRepository;
this._readModuleRepository = readModuleRepository;
@@ -128,7 +132,14 @@ namespace IRaCIS.Core.Application.Service
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();
+ .Where(x =>x.TrialId==inDto.TrialId&&x.ClinicalDataTrialSet.UploadRole== UploadRole.CRC)
+ .Select(x=>new
+ {
+ ClinicalDataTrialSetId=x.ClinicalDataTrialSetId,
+ SubjectId=x.SubjectId,
+ x.ReadingId,
+
+ }).ToListAsync();
List readingClinicalDatas = new List();
@@ -184,12 +195,12 @@ namespace IRaCIS.Core.Application.Service
}).ToList());
});
- await _readingClinicalDataRepository.AddRangeAsync(readingClinicalDatas);
-
- await _readingClinicalDataRepository.SaveChangesAsync();
+
+ await _readingClinicalDataRepository.AddRangeAsync(readingClinicalDatas);
+ await _readingClinicalDataRepository.SaveChangesAsync();
- }
+ }
///
/// 获取CRC受试者临床数据
@@ -347,13 +358,17 @@ namespace IRaCIS.Core.Application.Service
ReadingId = inDto.ReadingId,
};
+ if (inDto.ClinicalFormId!=null&&(await _readModuleCriterionFromRepository.AnyAsync(x => x.ClinicalFormId == inDto.ClinicalFormId.Value)))
+ {
+ throw new BusinessValidationFailedException("当前表单已确认,无法修改!");
+ }
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();
+ .Where(x => x.ClinicalDataTrialSet.UploadRole != UploadRole.CRC && !(x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.ImageRead
+ || x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.OncologyRead)).AnyAsync();
if (existsClinical)
{
@@ -433,13 +448,13 @@ namespace IRaCIS.Core.Application.Service
await _clinicalAnswerRowInfoRepository.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
- });
- }
+ //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 _clinicalQuestionAnswerRepository.AddRangeAsync(clinicalQuestionAnswers);
await _clinicalAnswerRowInfoRepository.AddRangeAsync(clinicalAnswerRowInfos);
@@ -511,6 +526,7 @@ namespace IRaCIS.Core.Application.Service
SubjectId = x.SubjectId,
IsCRCConfirm = x.IsCRCConfirm,
+ IsCRCApplicationRevoke=x.IsCRCApplicationRevoke,
VisitBlindName=x.SubjectVisit.BlindName,
LatestScanDate = x.SubjectVisit.LatestScanDate,
ReadingSetType = x.ReadingSetType,
@@ -641,11 +657,13 @@ namespace IRaCIS.Core.Application.Service
})).CurrentPageData.SelectMany(x => x.ClinicalFormList).ToList();
var clinicalDataTrialSetIds = confirmList.Select(x => x.ClinicalDataTrialSetId).Distinct().ToList();
- var questionList = await _trialClinicalQuestionRepository.Where(x => clinicalDataTrialSetIds.Contains( x.TrialClinicalId)
+ var clinicalFormIds = confirmList.Select(x => x.ClinicalFormId).ToList();
+
+ var questionList = await _trialClinicalQuestionRepository.Where(x => clinicalDataTrialSetIds.Contains( x.TrialClinicalId)
&& x.ClinicalQuestionType != ReadingQestionType.Group
&& x.ClinicalQuestionType != ReadingQestionType.Table).OrderBy(x=>x.TrialClinicalId).ThenBy(x => x.ShowOrder)
.ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
- var answers = await _clinicalQuestionAnswerRepository.Where(x => x.SubjectId == readModule.SubjectId && clinicalDataTrialSetIds.Contains( x.ClinicalDataTrialSetId))
+ var answers = await _clinicalQuestionAnswerRepository.Where(x => clinicalFormIds.Contains(x.ClinicalFormId))
.Select(x => new
{
x.ClinicalDataTrialSetId,
@@ -734,19 +752,18 @@ namespace IRaCIS.Core.Application.Service
var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadModuleId).FirstNotNullAsync();
- var dataList =(await this.GetCRCConfirmList(new GetCRCConfirmListInDto()
+ var confirmlist = (await this.GetCRCConfirmList(new GetCRCConfirmListInDto()
{
TrialId = inDto.TrialId,
SubjectId= readModule.SubjectId,
- TrialReadingCriterionId= readModule.TrialReadingCriterionId,
+ ReadModuleId= inDto.ReadModuleId,
+ TrialReadingCriterionId = readModule.TrialReadingCriterionId,
PageIndex=1,
PageSize=9999,
})).CurrentPageData;
- var presentData = dataList.Where(x => x.ReadModuleId == inDto.ReadModuleId).First();
- var confirmlist= dataList.Where(x =>(x.LatestScanDate < presentData.LatestScanDate && x.ReadingSetType == presentData.ReadingSetType)
- || x.ReadModuleId == presentData.ReadModuleId).Where(x => !x.IsCRCConfirm).ToList();
+ await _readModuleCriterionFromRepository.BatchDeleteNoTrackingAsync(x=>x.ReadModuleId== inDto.ReadModuleId);
List needAddList = new List()
{
@@ -811,10 +828,10 @@ namespace IRaCIS.Core.Application.Service
await _readModuleRepository.UpdatePartialFromQueryAsync(x => presentData.ReadModuleId==x.Id, x => new ReadModule()
{
- IsCRCConfirm = false
+ IsCRCApplicationRevoke = true
});
- await _readModuleCriterionFromRepository.BatchDeleteNoTrackingAsync(x=>x.ReadModuleId== presentData.ReadModuleId);
+ //await _readModuleCriterionFromRepository.BatchDeleteNoTrackingAsync(x=>x.ReadModuleId== presentData.ReadModuleId);
await _readModuleCriterionFromRepository.SaveChangesAsync();
@@ -833,15 +850,44 @@ namespace IRaCIS.Core.Application.Service
var readModuleData = await _readModuleRepository.Where(x => x.Id == inDto.ReadModuleId).FirstNotNullAsync();
if (!readModuleData.IsCRCConfirm)
{
- throw new BusinessValidationFailedException("CRC还未确认数据,PM无法确认");
+ throw new BusinessValidationFailedException("CRC还未确认数据,PM无法操作");
}
- await _readModuleRepository.UpdatePartialFromQueryAsync(x => inDto.ReadModuleId == x.Id, x => new ReadModule()
- {
- IsPMConfirm = true
- });
+ if (readModuleData.IsCRCApplicationRevoke && inDto.IsConfirm)
+ {
+ throw new BusinessValidationFailedException("CRC正在申请退回,PM无法确认");
+ }
- await _readModuleRepository.SaveChangesAsync();
+ if (!readModuleData.IsCRCApplicationRevoke && !inDto.IsConfirm)
+ {
+ throw new BusinessValidationFailedException("CRC未申请退回,PM无法撤销");
+ }
+
+ if (inDto.IsConfirm)
+ {
+ await _readModuleRepository.UpdatePartialFromQueryAsync(x => inDto.ReadModuleId == x.Id, x => new ReadModule()
+ {
+ IsPMConfirm = true
+ });
+ await _readModuleRepository.SaveChangesAsync();
+ await _iReadingClinicalDataService.DealVisiTaskClinicalDataSignedAsync(inDto.TrialId, inDto.SubjectId, inDto.ReadModuleId, false, readModuleData.TrialReadingCriterionId);
+ }
+ else
+ {
+ await _readModuleRepository.UpdatePartialFromQueryAsync(x => inDto.ReadModuleId == x.Id, x => new ReadModule()
+ {
+ IsCRCConfirm = false,
+ IsCRCApplicationRevoke=false,
+ });
+ await _readModuleCriterionFromRepository.BatchDeleteNoTrackingAsync(x=>x.ReadModuleId== x.Id);
+
+ await _readModuleRepository.SaveChangesAsync();
+
+
+ }
+
+
+
return ResponseOutput.Ok(true);
}
diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs
index 110f6c134..82ca5b6c0 100644
--- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs
@@ -144,6 +144,8 @@ namespace IRaCIS.Application.Services
.WhereIf(indto.Id != null, x => x.Id != indto.Id)
.Where(x => x.ClinicalDataSetName == indto.ClinicalDataSetName||x.ClinicalDataSetEnName==indto.ClinicalDataSetEnName);
+
+
if (await existsQuery.AnyAsync())
{
//---存在同类型的临床数据,操作失败
diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs
index 93b92894a..cfab3edde 100644
--- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs
@@ -233,6 +233,16 @@ namespace IRaCIS.Core.Application.Service
return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]);
}
+ if (await _trialClinicalQuestionRepository.AnyAsync(x => x.TrialClinicalId == inDto.TrialClinicalId && x.Id != inDto.Id && x.ShowOrder == inDto.ShowOrder))
+ {
+ return ResponseOutput.NotOk("问题序号存在重复!");
+ }
+
+ if (await _trialClinicalQuestionRepository.AnyAsync(x => x.TrialClinicalId == inDto.TrialClinicalId && x.Id != inDto.Id && x.IsCheckDate == inDto.IsCheckDate&&inDto.IsCheckDate))
+ {
+ return ResponseOutput.NotOk("已经添加过类型为检查日期的问题!");
+ }
+
var entity = await _trialClinicalQuestionRepository.InsertOrUpdateAsync(inDto, true);
return ResponseOutput.Ok(entity.Id.ToString());
@@ -293,6 +303,7 @@ namespace IRaCIS.Core.Application.Service
{
var systemClinicalQuestionQueryable = _systemClinicalQuestionRepository
+ .Where(x=>x.SystemClinicalId==inQuery.SystemClinicalId)
.WhereIf(!inQuery.QuestionName.IsNullOrEmpty(), x => x.QuestionName.Contains(inQuery.QuestionName) || x.QuestionEnName.Contains(inQuery.QuestionName))
.ProjectTo(_mapper.ConfigurationProvider);
var pageList = await systemClinicalQuestionQueryable
@@ -315,6 +326,15 @@ namespace IRaCIS.Core.Application.Service
{
return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]);
}
+
+ if (await _systemClinicalQuestionRepository.AnyAsync(x => x.SystemClinicalId == inDto.SystemClinicalId && x.Id != inDto.Id && x.ShowOrder == inDto.ShowOrder))
+ {
+ return ResponseOutput.NotOk("问题序号存在重复!");
+ }
+ if (await _systemClinicalQuestionRepository.AnyAsync(x => x.SystemClinicalId == inDto.SystemClinicalId && x.Id != inDto.Id && x.IsCheckDate == inDto.IsCheckDate && inDto.IsCheckDate))
+ {
+ return ResponseOutput.NotOk("已经添加过类型为检查日期的问题!");
+ }
var entity = await _systemClinicalQuestionRepository.InsertOrUpdateAsync(inDto, true);
return ResponseOutput.Ok(entity.Id.ToString());
@@ -401,6 +421,11 @@ namespace IRaCIS.Core.Application.Service
return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]);
}
+ if (await _systemClinicalTableQuestionRepository.AnyAsync(x => x.QuestionId == inDto.QuestionId && x.Id != inDto.Id && x.ShowOrder == inDto.ShowOrder))
+ {
+ return ResponseOutput.NotOk("问题序号存在重复!");
+ }
+
var entity = await _systemClinicalTableQuestionRepository.InsertOrUpdateAsync(inDto, true);
return ResponseOutput.Ok(entity.Id.ToString());
@@ -455,6 +480,11 @@ namespace IRaCIS.Core.Application.Service
{
return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]);
}
+
+ if (await _trialClinicalTableQuestionRepository.AnyAsync(x => x.QuestionId == inDto.QuestionId && x.Id != inDto.Id && x.ShowOrder == inDto.ShowOrder))
+ {
+ return ResponseOutput.NotOk("问题序号存在重复!");
+ }
var entity = await _trialClinicalTableQuestionRepository.InsertOrUpdateAsync(inDto, true);
return ResponseOutput.Ok(entity.Id.ToString());
diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs
index 3a4bc14ae..9a58f9658 100644
--- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs
@@ -25,6 +25,7 @@ namespace IRaCIS.Application.Services
private readonly IRepository _subjectVisitRepository;
private readonly IRepository _previousHistoryRepository;
private readonly IRepository _readModuleCriterionFromRepository;
+ private readonly IRepository _clinicalFormRepository;
private readonly IRepository _previousOtherRepository;
private readonly IRepository _previousSurgeryRepository;
private readonly IRepository _readingQuestionCriterionTrialRepository;
@@ -39,6 +40,7 @@ namespace IRaCIS.Application.Services
IRepository subjectVisitRepository,
IRepository previousHistoryRepository,
IRepository readModuleCriterionFromRepository,
+ IRepository clinicalFormRepository,
IRepository previousOtherRepository,
IRepository previousSurgeryRepository,
IRepository readingQuestionCriterionTrialRepository,
@@ -55,6 +57,7 @@ namespace IRaCIS.Application.Services
this._subjectVisitRepository = subjectVisitRepository;
this._previousHistoryRepository = previousHistoryRepository;
this._readModuleCriterionFromRepository = readModuleCriterionFromRepository;
+ this._clinicalFormRepository = clinicalFormRepository;
this._previousOtherRepository = previousOtherRepository;
this._previousSurgeryRepository = previousSurgeryRepository;
this._readingQuestionCriterionTrialRepository = readingQuestionCriterionTrialRepository;
@@ -181,12 +184,6 @@ namespace IRaCIS.Application.Services
[HttpPost]
public async Task> GetCRCClinicalData(GetCRCClinicalDataInDto inDto)
{
- //if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator)
- //{
- // await this.AddCRCClinicalData(inDto);
- //}
-
-
List cRCClinicalDataList = await _readingClinicalDataRepository.Where(x => x.ReadingId == inDto.SubjectVisitId)
.WhereIf(inDto.IsBaseline, x => x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Subject || x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit)
.WhereIf(!inDto.IsBaseline, x => x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit)
@@ -203,29 +200,26 @@ namespace IRaCIS.Application.Services
Path = x.ClinicalDataTrialSet.Path,
IsBlind = x.IsBlind,
IsComplete = x.IsComplete,
+ ClinicalFromList=x.Subject.ClinicalFormList.Where(y=>y.ReadingId==x.ReadingId&&y.ClinicalDataTrialSetId==x.ClinicalDataTrialSetId).Select(y=> new ClinicalFromData() {
+ CheckDate=y.CheckDate,
+ ClinicalFormId=y.Id
+ }).ToList(),
PDFFileList = x.ReadingClinicalDataPDFList.Select(y => new GetFileDto()
{
Id = y.Id,
FileName = y.FileName,
Path = y.Path,
CreateTime = y.CreateTime,
- }).ToList()
+ }).ToList(),
+
}).ToListAsync();
- List clinicalData = (await this.GetReadingClinicalDataList(new GetReadingClinicalDataListIndto()
- {
- SubjectId = inDto.SubjectId,
- ReadingId = inDto.SubjectVisitId,
- TrialId = inDto.TrialId,
- })).Item1;
-
var previousHistoryList = await _previousHistoryRepository.Where(x => x.SubjectVisitId == inDto.SubjectVisitId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
var previousOtherList = await _previousOtherRepository.Where(x => x.SubjectVisitId == inDto.SubjectVisitId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
var previousSurgeryList = await _previousSurgeryRepository.Where(x => x.SubjectVisitId == inDto.SubjectVisitId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
foreach (var item in cRCClinicalDataList)
{
- //item.PDFFileList = clinicalData.Where(y => y.ClinicalDataTrialSetId == item.ClinicalDataTrialSetId).SelectMany(x => x.FileList).ToList();
item.ClinicalTableData = new ClinicalDataTable()
{
PreviousHistoryList = previousHistoryList.Where(x => x.ClinicalDataTrialSetId == item.ClinicalDataTrialSetId).ToList(),
@@ -312,7 +306,7 @@ namespace IRaCIS.Application.Services
}
//处理 任务 临床数据是否签名
- private async Task DealVisiTaskClinicalDataSignedAsync(Guid trialId, Guid subjectId, Guid readingId, bool isVisit, Guid trialReadingCritrialId)
+ public async Task DealVisiTaskClinicalDataSignedAsync(Guid trialId, Guid subjectId, Guid readingId, bool isVisit, Guid trialReadingCritrialId)
{
//获取确认的临床数据配置
var trialClinicalDataSetList = _clinicalDataTrialSetRepository.Where(t => t.TrialId == trialId && t.IsConfirm).Include(t => t.TrialClinicalDataSetCriteriaList).ToList();
@@ -330,6 +324,8 @@ namespace IRaCIS.Application.Services
{
var isBaseLine = await _subjectVisitRepository.Where(t => t.Id == readingId).Select(t => t.IsBaseLine).FirstOrDefaultAsync();
+
+
//判断是否基线
if (isBaseLine)
{
@@ -358,21 +354,43 @@ namespace IRaCIS.Application.Services
else
{
//判断是影像学 还是肿瘤学阅片
- var readingSetType = await _readModuleRepository.Where(t => t.Id == readingId).Select(t => t.ReadingSetType).FirstOrDefaultAsync();
+ var readModule = await _readModuleRepository.Where(t => t.Id == readingId).FirstNotNullAsync();
+
+ //CRC 阅片期自定义结构化录入是否签名
+ bool crcReadModuleSign = true;
//影像学
- if (readingSetType == ReadingSetType.ImageReading)
+ if (readModule.ReadingSetType == ReadingSetType.ImageReading)
{
needSignCount = trialClinicalDataSetList.Where(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCritrialId) && t.ClinicalDataLevel == ClinicalLevel.ImageRead).Count();
+
+ // 不存在需要CRC上传的临床数据 或者 PM已确认
+ crcReadModuleSign =
+ !trialClinicalDataSetList.Any(x =>
+ x.UploadRole == UploadRole.CRC
+ && x.ClinicalDataLevel == ClinicalLevel.ImageRead
+ && x.ClinicalUploadType == ClinicalUploadType.Structuring
+ && x.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCritrialId)) || readModule.IsPMConfirm;
+
+
}
//肿瘤学
else
{
needSignCount = trialClinicalDataSetList.Where(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCritrialId) && t.ClinicalDataLevel == ClinicalLevel.OncologyRead).Count();
+
+ // 不存在需要CRC上传的临床数据 或者 PM已确认
+ crcReadModuleSign =
+ !trialClinicalDataSetList.Any(x =>
+ x.UploadRole == UploadRole.CRC
+ && x.ClinicalDataLevel == ClinicalLevel.OncologyRead
+ && x.ClinicalUploadType == ClinicalUploadType.Structuring
+ && x.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCritrialId)) || readModule.IsPMConfirm;
+
}
//可能仅仅CRC 基线 没有PM
- if (needSignCount == haveSignedCount /*&& needSignCount != 0*/)
+ if (needSignCount == haveSignedCount && crcReadModuleSign/*&& needSignCount != 0*/)
{
//将该标准 该subject 该阅片期|肿瘤学 任务临床数据状态变更
await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == trialId && t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCritrialId && t.SouceReadModuleId == readingId, u => new VisitTask()
@@ -608,10 +626,6 @@ namespace IRaCIS.Application.Services
var clinicalDataList = await this.GetTrialClinicalDataSelect(getTrialClinicalDataSelectIndto);
- if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC)
- {
- inDto.UploadRole = UploadRole.CRC;
- }
var isBaseLine = await _subjectVisitRepository.AnyAsync(x => x.Id == inDto.ReadingId && x.IsBaseLine);
@@ -648,9 +662,9 @@ namespace IRaCIS.Application.Services
inDto.ReadingId = visitTask.SouceReadModuleId ?? visitTask.SourceSubjectVisitId;
}
-
var resultQuery = _readingClinicalDataRepository.Where(x => x.SubjectId == inDto.SubjectId)
.WhereIf(inDto.ReadingClinicalDataId != null, x => x.Id == inDto.ReadingClinicalDataId)
+ .WhereIf(inDto.ClinicalDataTrialSetId != null, x => x.ClinicalDataTrialSetId == inDto.ClinicalDataTrialSetId)
.WhereIf(inDto.SelectIsSign, x => x.IsSign == true)
.Where(x => x.ReadingId == inDto.ReadingId || (x.SubjectId == inDto.SubjectId && x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Subject))
.Select(x => new GetReadingClinicalDataListOutDto()
@@ -658,13 +672,13 @@ namespace IRaCIS.Application.Services
ClinicalDataLevel = x.ClinicalDataTrialSet.ClinicalDataLevel,
SubjectId = x.SubjectId,
ReadingId = x.ReadingId,
- ClinicalDataSetEnName=x.ClinicalDataTrialSet.ClinicalDataSetEnName,
+ ClinicalDataSetEnName = x.ClinicalDataTrialSet.ClinicalDataSetEnName,
ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName.LanguageName(x.ClinicalDataTrialSet.ClinicalDataSetEnName, _userInfo.IsEn_Us),
ClinicalDataTrialSetId = x.ClinicalDataTrialSetId,
IsSign = x.IsSign,
ClinicalUploadType = x.ClinicalDataTrialSet.ClinicalUploadType,
CriterionEnumList = x.ClinicalDataTrialSet.CriterionEnumList,
- TrialClinicalDataSetCriteriaList=x.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList,
+ TrialClinicalDataSetCriteriaList = x.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList,
Id = x.Id,
UploadRole = x.ClinicalDataTrialSet.UploadRole,
IsCRCUpload = x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC,
@@ -677,20 +691,35 @@ namespace IRaCIS.Application.Services
}).ToList()
});
+ var result = new List();
+ if (!inDto.IsOnlyGetCRCReadModule)
+ {
+ result = await resultQuery.ToListAsync();
+ }
+
+ var readingIds = result.Select(x => x.ReadingId).ToList();
+ var clinical = await _clinicalFormRepository.Where(x => readingIds.Contains(x.ReadingId??default(Guid))).ToListAsync();
+ result.Where(x => x.ClinicalUploadType == ClinicalUploadType.Structuring).ForEach(x => {
+
+ x.ClinicalFromList = clinical.Where(y => y.ReadingId == x.ReadingId&&y.ClinicalDataTrialSetId==x.ClinicalDataTrialSetId).Select(y => new ClinicalFromData()
+ {
+ CheckDate = y.CheckDate,
+ ClinicalFormId = y.Id
+ }).ToList();
+ x.FileCount = x.ClinicalFromList.Count();
+ });
- var result = await resultQuery.ToListAsync();
-
-
-
- // 这里处理CRC上传 阅片期的临床数据
- var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadingId)
+ // 这里处理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{
+ var moduleCriterionFromList = await _readModuleCriterionFromRepository
+ .WhereIf(inDto.ClinicalDataTrialSetId != null, x => x.ClinicalForm.ClinicalDataTrialSetId == inDto.ClinicalDataTrialSetId)
+ .Where(x => x.ReadModuleId == readModule.Id).Select(x => new{
ClinicalFormId= x.ClinicalFormId,
CheckDate= x.ClinicalForm.CheckDate,
ClinicalDataTrialSetId= x.ClinicalForm.ClinicalDataTrialSetId
@@ -701,12 +730,16 @@ namespace IRaCIS.Application.Services
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),
+ IsCRCApplicationRevoke=readModule.IsCRCApplicationRevoke,
+ IsCRCConfirm= readModule.IsCRCConfirm,
+ IsPMConfirm= readModule.IsPMConfirm,
ClinicalDataSetName = x.ClinicalDataSetName.LanguageName(x.ClinicalDataSetEnName, _userInfo.IsEn_Us),
ClinicalDataSetEnName = x.ClinicalDataSetEnName,
ClinicalDataTrialSetId = x.Id,
@@ -740,8 +773,8 @@ namespace IRaCIS.Application.Services
ClinicalFormId = x.ClinicalFormId
}).ToList();
-
- x.ReadingClinicalDataState = readModule.IsPMConfirm ? ReadingClinicalDataStatus.HaveSigned : ReadingClinicalDataStatus.HaveChecked;
+ x.IsSign = readModule.IsPMConfirm ? true : false;
+ x.ReadingClinicalDataState = readModule.IsPMConfirm ? ReadingClinicalDataStatus.HaveSigned : ReadingClinicalDataStatus.HaveChecked;
});
@@ -750,30 +783,47 @@ namespace IRaCIS.Application.Services
- // 根据标准
- if (inDto.VisitTaskId != null)
+ // 根据标准
+ if (inDto.VisitTaskId != null)
{
var visitTaskInfo = await _visitTaskRepository.FirstOrDefaultAsync(x => x.Id == inDto.VisitTaskId);
-
- result = result.Where(x => x.TrialClinicalDataSetCriteriaList.Any(z=>z.TrialReadingCriterionId==visitTaskInfo.TrialReadingCriterionId)).ToList();
+
+ result = result.Where(x => x.TrialClinicalDataSetCriteriaList.Any(z => z.TrialReadingCriterionId == visitTaskInfo.TrialReadingCriterionId)).ToList();
}
- result = result.Where(x => !(x.ClinicalUploadType == ClinicalUploadType.PDF && x.FileList.Count() == 0)).ToList();
- // 需要排除表格为空的数据
-
-
- var readingIds = result.Select(x => x.ReadingId).ToList();
-
- var tablecount = (await _previousHistoryRepository.Where(x => readingIds.Contains(x.SubjectVisitId)).CountAsync()) +
- (await _previousOtherRepository.Where(x => readingIds.Contains(x.SubjectVisitId)).CountAsync()) +
- (await _previousSurgeryRepository.Where(x => readingIds.Contains(x.SubjectVisitId)).CountAsync());
-
- if (tablecount == 0)
+ if (inDto.GetClinicalType != null)
{
- result = result.Where(x => x.ClinicalUploadType != ClinicalUploadType.Table).ToList();
+ switch (inDto.GetClinicalType)
+ {
+ case GetClinicalType.PMUpload:
+ result = result.Where(x => x.UploadRole == UploadRole.PM).ToList();
+ break;
+ case GetClinicalType.CRCConfirm:
+ result = result.Where(x => x.UploadRole == UploadRole.CRC&&x.IsCRCConfirm&&!x.IsPMConfirm).ToList();
+ break;
+ case GetClinicalType.HasSign:
+ result = result.Where(x => x.IsSign).ToList();
+ break;
+ }
}
+
+ //result = result.Where(x => !(x.ClinicalUploadType == ClinicalUploadType.PDF && x.FileList.Count() == 0)).ToList();
+ //// 需要排除表格为空的数据
+
+
+ //var readingIds = result.Select(x => x.ReadingId).ToList();
+
+ //var tablecount = (await _previousHistoryRepository.Where(x => readingIds.Contains(x.SubjectVisitId)).CountAsync()) +
+ // (await _previousOtherRepository.Where(x => readingIds.Contains(x.SubjectVisitId)).CountAsync()) +
+ // (await _previousSurgeryRepository.Where(x => readingIds.Contains(x.SubjectVisitId)).CountAsync());
+
+ //if (tablecount == 0)
+ //{
+ // result = result.Where(x => x.ClinicalUploadType != ClinicalUploadType.Table).ToList();
+ //}
+
return result;
}
@@ -785,14 +835,9 @@ namespace IRaCIS.Application.Services
[NonDynamicMethod]
public async Task> GetReadingClinicalList(GetReadingClinicalDataListIndto inDto)
{
-
- //var criterionType = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == inDto.TrialReadingCriterionId).Select(x => x.CriterionType).FirstNotNullAsync();
-
-
var resultQuery = _readingClinicalDataRepository.Where(x => x.SubjectId == inDto.SubjectId)
- .Where(x => x.ReadingId == inDto.ReadingId || (x.SubjectId == inDto.SubjectId && x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Subject))
- //.WhereIf(inDto.UploadRole == UploadRole.CRC, x => x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC)
-
+ .Where(x => x.ReadingId == inDto.ReadingId)
+ .WhereIf(inDto.ClinicalDataTrialSetId!=null, x=>x.ClinicalDataTrialSetId==inDto.TrialReadingCriterionId)
.Where(x => x.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList.Any(t=>t.TrialReadingCriterionId==inDto.TrialReadingCriterionId))
.Select(x => new GetReadingClinicalDataListOutDto()
{
@@ -824,13 +869,28 @@ namespace IRaCIS.Application.Services
var result = await resultQuery.ToListAsync();
+
+ var readingIds = result.Select(x => x.ReadingId).ToList();
+ var clinical = await _clinicalFormRepository.Where(x => readingIds.Contains(x.ReadingId ?? default(Guid))).ToListAsync();
+ result.Where(x => x.ClinicalUploadType == ClinicalUploadType.Structuring).ForEach(x => {
+
+ x.ClinicalFromList = clinical.Where(y => y.ReadingId == x.ReadingId && y.ClinicalDataTrialSetId == x.ClinicalDataTrialSetId).Select(y => new ClinicalFromData()
+ {
+ CheckDate = y.CheckDate,
+ ClinicalFormId = y.Id
+ }).ToList();
+ x.FileCount = x.ClinicalFromList.Count();
+ });
+
// 这里处理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 {
+ var moduleCriterionFromList = await _readModuleCriterionFromRepository.Where(x => x.ReadModuleId == readModule.Id)
+
+ .WhereIf(inDto.ClinicalDataTrialSetId != null, x => x.ClinicalForm.ClinicalDataTrialSetId == inDto.TrialReadingCriterionId)
+ .Select(x => new {
ClinicalFormId = x.ClinicalFormId,
CheckDate = x.ClinicalForm.CheckDate,
ClinicalDataTrialSetId = x.ClinicalForm.ClinicalDataTrialSetId
@@ -847,7 +907,11 @@ namespace IRaCIS.Application.Services
ClinicalDataLevel = x.ClinicalDataLevel,
SubjectId = inDto.SubjectId,
ReadingId = default(Guid),
- ClinicalDataSetName = x.ClinicalDataSetName.LanguageName(x.ClinicalDataSetEnName, _userInfo.IsEn_Us),
+ IsCRCApplicationRevoke= readModule.IsCRCApplicationRevoke,
+ IsCRCConfirm = readModule.IsCRCConfirm,
+ IsPMConfirm=readModule.IsPMConfirm,
+
+ ClinicalDataSetName = x.ClinicalDataSetName.LanguageName(x.ClinicalDataSetEnName, _userInfo.IsEn_Us),
ClinicalDataSetEnName = x.ClinicalDataSetEnName,
ClinicalDataTrialSetId = x.Id,
IsSign = readModule.IsPMConfirm,
@@ -881,16 +945,32 @@ namespace IRaCIS.Application.Services
}).ToList();
- x.ReadingClinicalDataState = readModule.IsPMConfirm ? ReadingClinicalDataStatus.HaveSigned : ReadingClinicalDataStatus.HaveChecked;
+ x.IsSign = readModule.IsPMConfirm ?true : false;
+ 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();
+ if (inDto.GetClinicalType != null)
+ {
+ switch (inDto.GetClinicalType)
+ {
+ case GetClinicalType.PMUpload:
+ result = result.Where(x => x.UploadRole == UploadRole.PM).ToList();
+ break;
+ case GetClinicalType.CRCConfirm:
+ result = result.Where(x => x.UploadRole == UploadRole.CRC&&x.IsCRCConfirm&&!x.IsPMConfirm).ToList();
+ break;
+ case GetClinicalType.HasSign:
+ result = result.Where(x => x.IsSign).ToList();
+ break;
+ }
+ }
+
+
return result;
}
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs
index 8d3fff220..22c2b30fe 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs
@@ -221,7 +221,10 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public Guid SubjectId { get; set; }
public Guid ReadModuleId { get; set; }
- }
+
+ public bool IsConfirm { get; set; }
+
+ }
public class CRCClinicalForm
@@ -272,6 +275,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public bool IsCRCConfirm { get; set; } = false;
+
+ ///
+ /// CRC是否正在申请撤回
+ ///
+ public bool IsCRCApplicationRevoke { get; set; } = false;
+
public string SubjectCode { get; set; }
public bool IsHaveTableQuestion
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs
index f38dd1bca..d4e381ad3 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs
@@ -181,6 +181,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
///
public int? MaxAnswerLength { get; set; }
+ ///
+ /// 最大行数
+ ///
+ public int? MaxQuestionCount { get; set; }
+
///
/// 临床数据选项类型(无,自定义)
///
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs
index 9cf83bbc3..cd3713b1f 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs
@@ -113,9 +113,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
///
public bool? IsComplete { get; set; }
- //public List ReadingClinicalDataList { get; set; }
+ public List ClinicalFromList { get; set; }
- public List PDFFileList { get; set; } = new List();
+ //public List ReadingClinicalDataList { get; set; }
+
+ public List PDFFileList { get; set; } = new List();
public ClinicalDataTable ClinicalTableData { get; set; }
}
@@ -182,14 +184,29 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public Guid? ReadingId { get; set; }
- public Guid? VisitTaskId { get; set; }
+ ///
+ /// 临床数据类型Id
+ ///
+ public Guid? ClinicalDataTrialSetId { get; set; }
- public Guid? ReadingClinicalDataId { get; set; }
+ public Guid? VisitTaskId { get; set; }
+
+ ///
+ /// 1 PM上传的所有的 2CRC上传的所有已确认的 3 所有已经签名的
+ ///
+ public GetClinicalType? GetClinicalType { get; set; }
+
+ public Guid? ReadingClinicalDataId { get; set; }
///
- /// 只查询已经签名的临床数据
+ /// 只获取CRC上传的阅片模块结构化录入
///
- public bool SelectIsSign { get; set; } = true;
+ public bool IsOnlyGetCRCReadModule { get; set; } = false;
+
+ ///
+ /// 只查询已经签名的临床数据
+ ///
+ public bool SelectIsSign { get; set; } = true;
}
///
@@ -202,9 +219,17 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
[NotDefault]
public Guid ReadingId { get; set; }
- public UploadRole? UploadRole { get; set; }
+ ///
+ /// 临床数据类型Id
+ ///
+ public Guid? ClinicalDataTrialSetId { get; set; }
- [NotDefault]
+ ///
+ /// 1 PM上传的所有的 2CRC上传的所有已确认的 3 所有已经签名的
+ ///
+ public GetClinicalType? GetClinicalType { get; set; }
+
+ [NotDefault]
public Guid TrialReadingCriterionId { get; set; }
public Guid TrialId { get; set; }
@@ -310,11 +335,18 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
///
public Guid ReadingId { get; set; }
+ ///
+ /// CRC是否正在申请撤回
+ ///
+ public bool IsCRCApplicationRevoke { get; set; } = false;
+ public bool IsCRCConfirm { get; set; } = false;
- ///
- /// 项目配置临床类型Name
- ///
- public string ClinicalDataSetName { get; set; }
+ public bool IsPMConfirm { get; set; } = false;
+
+ ///
+ /// 项目配置临床类型Name
+ ///
+ public string ClinicalDataSetName { get; set; }
///
/// 英文名称
diff --git a/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs
index f2f803ee9..802c97fa7 100644
--- a/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs
@@ -17,5 +17,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Interface
Task SubmitClinicalForm(SubmitClinicalFormInDto inDto);
+ Task CRCCancelConfirmClinical(CRCCancelConfirmClinicalInDto inDto);
+
}
}
diff --git a/IRaCIS.Core.Application/Service/Reading/Interface/IReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingClinicalDataService.cs
index 1d1f3f62d..94705f59a 100644
--- a/IRaCIS.Core.Application/Service/Reading/Interface/IReadingClinicalDataService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingClinicalDataService.cs
@@ -23,5 +23,7 @@ namespace IRaCIS.Core.Application.Contracts
// Task<(List, object)> GetReadingClinicalDataList(GetReadingClinicalDataListIndto inDto);
Task> GetReadingClinicalList(GetReadingClinicalDataListIndto inDto);
+
+ Task DealVisiTaskClinicalDataSignedAsync(Guid trialId, Guid subjectId, Guid readingId, bool isVisit, Guid trialReadingCritrialId);
}
}
\ No newline at end of file
diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
index aa85c41ab..18cfbca90 100644
--- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
@@ -2211,6 +2211,7 @@ namespace IRaCIS.Application.Services
SubjectId = taskInfo.SubjectId,
TrialId = taskInfo.TrialId,
VisitTaskId = taskInfo.Id,
+
});
var isBaseLine = false;
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs
index 8298f8838..4ef7ba51a 100644
--- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs
@@ -203,6 +203,7 @@ namespace IRaCIS.Core.Application
[HttpPost]
public async Task AsyncTrialCriterionDictionary(AsyncTrialCriterionDictionaryInDto inDto)
{
+
var trialCriterion = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == inDto.TrialReadingCriterionId).FirstNotNullAsync();
if (trialCriterion.ReadingQuestionCriterionSystemId != null)
@@ -1041,9 +1042,17 @@ namespace IRaCIS.Core.Application
//}); ;
+ var result = await _repository.SaveChangesAsync();
-
- return ResponseOutput.Ok(await _repository.SaveChangesAsync());
+ var criterionTrialList = await _readingQuestionCriterionTrialRepository.Where(x =>x.IsConfirm&& x.TrialId == trialConfig.TrialId&&x.ReadingQuestionCriterionSystemId!=null&&x.SynchronizeOriginalTime==null).ToListAsync();
+ foreach (var item in criterionTrialList)
+ {
+ await AsyncTrialCriterionDictionary(new AsyncTrialCriterionDictionaryInDto()
+ {
+ TrialReadingCriterionId = item.Id
+ });
+ }
+ return ResponseOutput.Ok(result);
}
///
diff --git a/IRaCIS.Core.Application/Triggers/SubjectVisitCheckPassedTrigger.cs b/IRaCIS.Core.Application/Triggers/SubjectVisitCheckPassedTrigger.cs
index 7155d8ed6..94463c240 100644
--- a/IRaCIS.Core.Application/Triggers/SubjectVisitCheckPassedTrigger.cs
+++ b/IRaCIS.Core.Application/Triggers/SubjectVisitCheckPassedTrigger.cs
@@ -98,36 +98,36 @@ namespace IRaCIS.Core.Application.Triggers
}
// 触发临床数据
- if (context.ChangeType == ChangeType.Added)
- {
- var cRCClinicalDatas = await _clinicalDataTrialSetRepository.Where(x => x.TrialId == context.Entity.TrialId && x.UploadRole == UploadRole.CRC && x.IsConfirm)
+ //if (context.ChangeType == ChangeType.Added)
+ //{
+ // var cRCClinicalDatas = await _clinicalDataTrialSetRepository.Where(x => x.TrialId == context.Entity.TrialId && x.UploadRole == UploadRole.CRC && x.IsConfirm)
- .Select(x => new
- {
- x.Id,
- x.ClinicalDataLevel,
- }).ToListAsync();
+ // .Select(x => new
+ // {
+ // x.Id,
+ // x.ClinicalDataLevel,
+ // }).ToListAsync();
- List readingClinicals = new List();
- readingClinicals.AddRange(
+ // List readingClinicals = new List();
+ // readingClinicals.AddRange(
- cRCClinicalDatas.WhereIf(!context.Entity.IsBaseLine, x => x.ClinicalDataLevel == ClinicalLevel.SubjectVisit).Select(x => new ReadingClinicalData()
- {
- ClinicalDataTrialSetId = x.Id,
- IsVisit = true,
- SubjectId = context.Entity.SubjectId,
- ReadingId = context.Entity.Id,
- TrialId = context.Entity.TrialId
+ // cRCClinicalDatas.WhereIf(!context.Entity.IsBaseLine, x => x.ClinicalDataLevel == ClinicalLevel.SubjectVisit).Select(x => new ReadingClinicalData()
+ // {
+ // ClinicalDataTrialSetId = x.Id,
+ // IsVisit = true,
+ // SubjectId = context.Entity.SubjectId,
+ // ReadingId = context.Entity.Id,
+ // TrialId = context.Entity.TrialId
- }).ToList()
+ // }).ToList()
- );
+ // );
- await _readingClinicalDataRepository.AddRangeAsync(readingClinicals);
- await _readingClinicalDataRepository.SaveChangesAsync();
+ // await _readingClinicalDataRepository.AddRangeAsync(readingClinicals);
+ // await _readingClinicalDataRepository.SaveChangesAsync();
- }
+ //}
}
diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs
index 243e765b6..99889d0b2 100644
--- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs
+++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs
@@ -16,6 +16,29 @@ namespace IRaCIS.Core.Domain.Share
public static readonly string Group = "group";
}
+
+ ///
+ /// GetClinicalType
+ ///
+ public enum GetClinicalType
+ {
+
+ ///
+ /// PM上传
+ ///
+ PMUpload = 1,
+
+ ///
+ /// CRC 上传 过确认
+ ///
+ CRCConfirm = 2,
+
+ ///
+ /// 已审核
+ ///
+ HasSign = 3
+ }
+
///
/// 临床表格问题标识
///
diff --git a/IRaCIS.Core.Domain/Reading/ClinicalData/ReadingClinicalData.cs b/IRaCIS.Core.Domain/Reading/ClinicalData/ReadingClinicalData.cs
index db9e8f70a..2c6ba3b0f 100644
--- a/IRaCIS.Core.Domain/Reading/ClinicalData/ReadingClinicalData.cs
+++ b/IRaCIS.Core.Domain/Reading/ClinicalData/ReadingClinicalData.cs
@@ -96,8 +96,10 @@ namespace IRaCIS.Core.Domain.Models
[JsonIgnore]
public List ReadingClinicalDataPDFList { get; set; }
+
- }
+
+ }
diff --git a/IRaCIS.Core.Domain/Reading/ClinicalQuestion/SystemClinicalQuestion.cs b/IRaCIS.Core.Domain/Reading/ClinicalQuestion/SystemClinicalQuestion.cs
index 539c62c0d..0905c294e 100644
--- a/IRaCIS.Core.Domain/Reading/ClinicalQuestion/SystemClinicalQuestion.cs
+++ b/IRaCIS.Core.Domain/Reading/ClinicalQuestion/SystemClinicalQuestion.cs
@@ -48,6 +48,11 @@ namespace IRaCIS.Core.Domain.Models
///
public int? MaxAnswerLength { get; set; }
+ ///
+ /// 最大行数
+ ///
+ public int? MaxQuestionCount { get; set; }
+
///
/// 临床数据选项类型(无,自定义)
///
diff --git a/IRaCIS.Core.Domain/Reading/ClinicalQuestion/TrialClinicalQuestion.cs b/IRaCIS.Core.Domain/Reading/ClinicalQuestion/TrialClinicalQuestion.cs
index 40e757e4a..931484b8c 100644
--- a/IRaCIS.Core.Domain/Reading/ClinicalQuestion/TrialClinicalQuestion.cs
+++ b/IRaCIS.Core.Domain/Reading/ClinicalQuestion/TrialClinicalQuestion.cs
@@ -47,6 +47,11 @@ namespace IRaCIS.Core.Domain.Models
/// 最大长度
///
public int? MaxAnswerLength { get; set; }
+
+ ///
+ /// 最大行数
+ ///
+ public int? MaxQuestionCount { get; set; }
///
/// 临床数据选项类型(无,自定义)
diff --git a/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalForm.cs b/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalForm.cs
index 1d052b9f9..b59d1374d 100644
--- a/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalForm.cs
+++ b/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalForm.cs
@@ -54,6 +54,10 @@ namespace IRaCIS.Core.Domain.Models
[ForeignKey("ClinicalDataTrialSetId")]
public ClinicalDataTrialSet ClinicalDataTrialSet { get; set; }
- }
+ [JsonIgnore]
+ [ForeignKey("SubjectId")]
+ public Subject Subject { get; set; }
+
+ }
}
diff --git a/IRaCIS.Core.Domain/Reading/ReadingPeriod/ReadModule.cs b/IRaCIS.Core.Domain/Reading/ReadingPeriod/ReadModule.cs
index 1be9cb363..647451fc7 100644
--- a/IRaCIS.Core.Domain/Reading/ReadingPeriod/ReadModule.cs
+++ b/IRaCIS.Core.Domain/Reading/ReadingPeriod/ReadModule.cs
@@ -79,7 +79,12 @@ namespace IRaCIS.Core.Domain.Models
public bool IsCRCConfirm { get; set; } = false;
public bool IsPMConfirm { get; set; } = false;
- public bool IsDeleted { get; set; }
+
+ ///
+ /// CRC是否正在申请撤回
+ ///
+ public bool IsCRCApplicationRevoke { get; set; } = false;
+ public bool IsDeleted { get; set; }
public DateTime? DeletedTime { get; set; }
diff --git a/IRaCIS.Core.Domain/Visit/Subject.cs b/IRaCIS.Core.Domain/Visit/Subject.cs
index 0ad19bb43..fa8a7c166 100644
--- a/IRaCIS.Core.Domain/Visit/Subject.cs
+++ b/IRaCIS.Core.Domain/Visit/Subject.cs
@@ -121,6 +121,8 @@ namespace IRaCIS.Core.Domain.Models
public Guid? DeleteUserId { get; set; }
public bool IsReReadingOrBackInfluenceAnalysis { get; set; }
+ [JsonIgnore]
+ public List ClinicalFormList { get; set; }
//是否分配了读片医生
diff --git a/IRaCIS.Core.Infra.EFCore/EntityConfigration/ClinicalFromConfigration.cs b/IRaCIS.Core.Infra.EFCore/EntityConfigration/ClinicalFromConfigration.cs
new file mode 100644
index 000000000..98b711e7a
--- /dev/null
+++ b/IRaCIS.Core.Infra.EFCore/EntityConfigration/ClinicalFromConfigration.cs
@@ -0,0 +1,27 @@
+using IRaCIS.Core.Domain.Models;
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
+{
+ //public class ClinicalFromConfigration : IEntityTypeConfiguration
+ //{
+
+
+ // public void Configure(EntityTypeBuilder builder)
+ // {
+ // builder
+ // .HasOne(s => s.ReadingClinicalData)
+ // .WithMany(c => c.ClinicalFormList)
+ // .HasForeignKey(s => new { s.SubjectId, s.ReadingId })
+ // .HasPrincipalKey(c => new { c.SubjectId, c.ReadingId });
+ // }
+
+
+ //}
+}