diff --git a/IRaCIS.Core.API/Controllers/InspectionController.cs b/IRaCIS.Core.API/Controllers/InspectionController.cs
index defe64133..b9a7877bc 100644
--- a/IRaCIS.Core.API/Controllers/InspectionController.cs
+++ b/IRaCIS.Core.API/Controllers/InspectionController.cs
@@ -11,6 +11,7 @@ using IRaCIS.Core.Application.Service;
using IRaCIS.Core.Application.Service.Inspection.DTO;
using IRaCIS.Core.Application.Service.Inspection.Interface;
using IRaCIS.Core.Application.Service.Reading.Dto;
+using IRaCIS.Core.Application.Service.Reading.Interface;
using IRaCIS.Core.Application.ViewModel;
using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Domain.Share;
@@ -36,6 +37,7 @@ namespace IRaCIS.Core.API.Controllers
private readonly IHttpContextAccessor _httpContext;
private readonly ITrialConfigService _trialConfigService;
private readonly INoneDicomStudyService _noneDicomStudyService;
+ private readonly IClinicalAnswerService _clinicalAnswerService;
private readonly ISubjectService _subjectService;
private readonly IReadingClinicalDataService _readingClinicalDataService;
private readonly ISubjectVisitService _subjectVisitService;
@@ -62,6 +64,7 @@ namespace IRaCIS.Core.API.Controllers
IReadingMedicineQuestionService readingMedicineQuestionService,
ITrialConfigService _trialConfigService,
INoneDicomStudyService noneDicomStudyService,
+ IClinicalAnswerService clinicalAnswerService,
ISubjectService _subjectService,
IReadingClinicalDataService _readingClinicalDataService,
ISubjectVisitService subjectVisitService,
@@ -82,6 +85,7 @@ namespace IRaCIS.Core.API.Controllers
this._httpContext = httpContext;
this._trialConfigService = _trialConfigService;
this._noneDicomStudyService = noneDicomStudyService;
+ this._clinicalAnswerService = clinicalAnswerService;
this._subjectService = _subjectService;
this._readingClinicalDataService = _readingClinicalDataService;
this._subjectVisitService = subjectVisitService;
@@ -233,6 +237,94 @@ namespace IRaCIS.Core.API.Controllers
}
+ ///
+ /// CRC签名临床数据
+ ///
+ ///
+ ///
+ [HttpPost, Route("Inspection/ClinicalAnswer/CRCSignClinicalData")]
+ [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
+
+ [UnitOfWork]
+ public async Task CRCSignClinicalData(DataInspectionDto opt)
+ {
+ var singid = await _inspectionService.RecordSing(opt.SignInfo);
+ var result = await _clinicalAnswerService.CRCSignClinicalData(opt.Data);
+ await _inspectionService.CompletedSign(singid, result);
+ return result;
+ }
+
+
+ ///
+ /// CRC确认临床数据
+ ///
+ ///
+ ///
+ [HttpPost, Route("Inspection/ClinicalAnswer/CRCConfirmClinical")]
+ [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
+
+ [UnitOfWork]
+ public async Task CRCConfirmClinical(DataInspectionDto opt)
+ {
+ var singid = await _inspectionService.RecordSing(opt.SignInfo);
+ var result = await _clinicalAnswerService.CRCConfirmClinical(opt.Data);
+ await _inspectionService.CompletedSign(singid, result);
+ 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确认临床数据
+ ///
+ ///
+ ///
+ [HttpPost, Route("Inspection/ClinicalAnswer/PMConfirmClinical")]
+ [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
+
+ [UnitOfWork]
+ public async Task PMConfirmClinical(DataInspectionDto opt)
+ {
+ var singid = await _inspectionService.RecordSing(opt.SignInfo);
+ var result = await _clinicalAnswerService.PMConfirmClinical(opt.Data);
+ await _inspectionService.CompletedSign(singid, result);
+ return result;
+ }
+
+
+ ///
+ /// 提交结构化录入并签名
+ ///
+ ///
+ ///
+ [HttpPost, Route("Inspection/ClinicalAnswer/SubmitClinicalFormAndSign")]
+ [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
+
+ [UnitOfWork]
+ public async Task SubmitClinicalFormAndSign(DataInspectionDto opt)
+ {
+ var singid = await _inspectionService.RecordSing(opt.SignInfo);
+ var result = await _clinicalAnswerService.SubmitClinicalForm(opt.Data);
+ await _inspectionService.CompletedSign(singid, result);
+ return result;
+ }
+
///
/// 提交阅片裁判问题
///
diff --git a/IRaCIS.Core.API/IRaCIS.Core.API.xml b/IRaCIS.Core.API/IRaCIS.Core.API.xml
index 045a819ce..ed6960728 100644
--- a/IRaCIS.Core.API/IRaCIS.Core.API.xml
+++ b/IRaCIS.Core.API/IRaCIS.Core.API.xml
@@ -139,6 +139,41 @@
+
+
+ CRC签名临床数据
+
+
+
+
+
+
+ CRC确认临床数据
+
+
+
+
+
+
+ CRC撤销临床数据
+
+
+
+
+
+
+ PM确认临床数据
+
+
+
+
+
+
+ 提交结构化录入并签名
+
+
+
+
提交阅片裁判问题
diff --git a/IRaCIS.Core.API/_ServiceExtensions/EFSetup.cs b/IRaCIS.Core.API/_ServiceExtensions/EFSetup.cs
index 5ce0f00d7..2f2890712 100644
--- a/IRaCIS.Core.API/_ServiceExtensions/EFSetup.cs
+++ b/IRaCIS.Core.API/_ServiceExtensions/EFSetup.cs
@@ -37,6 +37,7 @@ namespace IRaCIS.Core.API
triggerOptions.AddTrigger();
triggerOptions.AddTrigger();
triggerOptions.AddTrigger();
+ triggerOptions.AddTrigger();
triggerOptions.AddTrigger();
triggerOptions.AddTrigger();
triggerOptions.AddTrigger();
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 7cd213420..e9489d018 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -85,6 +85,14 @@
+
+
+ 替换表格Key
+
+
+
+
+
分配规则
@@ -272,11 +280,74 @@
-
+
- 获取项目下 阅片人下拉
+ Subject 任务类型 统计 +分配情况
+
+
+
+
+
+ 一次性分配所有医生 批量分配(添加),后端现在没限制
+
+
+
+
+
+
+ 阅片人维度 Subject统计表
+
+
+
+
+
+ 获取Subject 分配医生情况
+
+
+
+
+
+
+
+ 取消Subject 分配的医生
+
+
+
+
+
+
+
+ 任务 手动分配 重新分配 确认 取消分配
+ 分配
+
+
+
+
+
+ 获取手动分配 未分配的Subject列表(IsHaveAssigned 传递false)
+
+
+
+
+
+ 批量为 多个Subject 分配医生 手动分配 IsReAssign 为true 批量删除 重新分配
+
+
+
+
+
+
+ 批量取消Subject 分配的医生
+
+ 数量
+
+
+
+ 手动分配确认 绑定该Subject的已存在的任务给医生
+
+
@@ -287,25 +358,11 @@
-
-
- new- 首次审核 后续编辑审核
-
-
-
-
-
-
- new- 回复审核内容
-
-
-
-
-
+
- new- 获取审核对话列表
+ 裁判任务
-
+
@@ -1091,6 +1148,11 @@
获取登陆用户的系统通知列表 只是过滤了用户类型 和已经发布的
+
+
+ UserLogService
+
+
验证CRC 是否已提交 已提交 就不允许进行任何操作,如果是IQC 那么还验证是否是当前任务领取人
@@ -2437,6 +2499,13 @@
临床答案
+
+
+ CRC签名临床数据
+
+
+
+
自动添加CRC临床数据
@@ -2472,6 +2541,21 @@
+
+
+ 删除表单数据
+
+
+
+
+
+
+
+ 获取PM待确认列表
+
+
+
+
获取CRC确认列表
@@ -2486,6 +2570,20 @@
+
+
+ 获取临床数据表格信息 查看没有表格问题的列表
+
+
+
+
+
+
+ 获取临床数据表格信息 查看有表格问题的列表
+
+
+
+
CRC 确认临床数据
@@ -2668,6 +2766,46 @@
+
+
+ 上传角色
+
+
+
+
+ 访视Id 或者模块Id
+
+
+
+
+ 临床级别
+
+
+
+
+ 上传方式
+
+
+
+
+ 模块名称
+
+
+
+
+ 临床数据是否完整
+
+
+
+
+ 临床数据是否盲化
+
+
+
+
+ 受试者Id
+
+
临床级别
@@ -2678,16 +2816,21 @@
受试者ID
+
+
+ 模块名称
+
+
+
+
+ CRC是否正在申请撤回
+
+
最晚拍片日期
-
-
- VisitId
-
-
VisitId
@@ -3033,6 +3176,11 @@
最大长度
+
+
+ 最大行数
+
+
临床数据选项类型(无,自定义)
@@ -3758,6 +3906,21 @@
路径
+
+
+ 临床数据类型Id
+
+
+
+
+ 1 PM上传的所有的 2CRC上传的所有已确认的 3 所有已经签名的
+
+
+
+
+ 只获取CRC上传的阅片模块结构化录入
+
+
只查询已经签名的临床数据
@@ -3768,6 +3931,16 @@
获取访视列表
+
+
+ 临床数据类型Id
+
+
+
+
+ 1 PM上传的所有的 2CRC上传的所有已确认的 3 所有已经签名的
+
+
是否是访视
@@ -3833,6 +4006,11 @@
访视Id 或者模块Id
+
+
+ CRC是否正在申请撤回
+
+
项目配置临床类型Name
@@ -3903,6 +4081,16 @@
文件数量
+
+
+ 表单Id
+
+
+
+
+ 检查日期
+
+
Id
@@ -7885,6 +8073,16 @@
完成阅片量
+
+
+ 未完成裁判任务数量
+
+
+
+
+ 完成裁判任务数量
+
+
建议完成时间
@@ -8122,6 +8320,9 @@
UserLogQuery 列表查询参数模型
+
+ UserLogAddOrEdit 列表查询参数模型
+
靶病灶是否为IUPD或者ICPD
@@ -10604,6 +10805,13 @@
vvv
+
+
+ 获取PM核对临床数据
+
+
+
+
SPM 阅片人筛选
@@ -10613,7 +10821,7 @@
vvv
-
+
SPM 重阅审批
@@ -10630,6 +10838,14 @@
+
+
+ 临床数据 --CRC 待确认
+
+
+
+
+
CRC影像质疑待处理 --CRC 待办
@@ -10696,7 +10912,7 @@
-
+
MIM医学反馈
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/QC/QCOperationService.cs b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs
index 1a9e7f4e5..d25b4a08c 100644
--- a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs
+++ b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs
@@ -1167,8 +1167,8 @@ namespace IRaCIS.Core.Application.Image.QA
}
//基线 且配置了临床数据
- if (trialConfig.ClinicalInformationTransmissionEnum != 0 /*&& dbSubjectVisit.IsBaseLine*//*&&dbSubjectVisit.ClinicalDataSignUserId==null*/)
- {
+ //if (trialConfig.ClinicalInformationTransmissionEnum != 0 /*&& dbSubjectVisit.IsBaseLine*//*&&dbSubjectVisit.ClinicalDataSignUserId==null*/)
+ //{
////找到需要确认的PDF 临床数据 如果没有CRC 没有上传 那么就添加一条没有文件的记录
@@ -1231,7 +1231,7 @@ namespace IRaCIS.Core.Application.Image.QA
//}
//return ResponseOutput.NotOk("没有签名临床数据,不允许提交");
- }
+ //}
diff --git a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs
index b220da1c1..5a2f5022c 100644
--- a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs
+++ b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs
@@ -367,9 +367,10 @@ namespace IRaCIS.Core.Application.Service
.ForMember(d => d.CurrentActionUserName, u => u.MapFrom(s => s.CurrentActionUser.UserName))
.ForMember(d => d.PreliminaryAuditUserName, u => u.MapFrom(s => s.PreliminaryAuditUser.UserName))
.ForMember(d => d.ReviewAuditUserName, u => u.MapFrom(s => s.ReviewAuditUser.UserName))
- .ForMember(d => d.IsHaveClinicalData, u => u.MapFrom(t => t.IsBaseLine ? t.PreviousHistoryList.Any() || t.PreviousOtherList.Any()
- || t.ReadingClinicalDataList.Any(x => x.ClinicalDataTrialSet.UploadRole == Domain.Share.UploadRole.CRC && x.ReadingClinicalDataPDFList.Count() > 0)
- || t.PreviousSurgeryList.Any() : false))
+ .ForMember(d => d.IsHaveClinicalData, u => u.MapFrom(t => t.PreviousHistoryList.Any() || t.PreviousOtherList.Any()
+ || t.Subject.ClinicalFormList.Any(x => x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ReadingId == t.Id)
+ || t.ReadingClinicalDataList.Any(x => x.ClinicalDataTrialSet.UploadRole == Domain.Share.UploadRole.CRC && x.ReadingClinicalDataPDFList.Count() > 0)
+ || t.PreviousSurgeryList.Any()))
.ForMember(d => d.DicomStudyCount, u => u.MapFrom(t => t.StudyList.Count()))
.ForMember(d => d.NoneDicomStudyCount, u => u.MapFrom(t => t.NoneDicomStudyList.Count(t => t.NoneDicomFileList.Any())));
@@ -385,9 +386,10 @@ namespace IRaCIS.Core.Application.Service
.ForMember(d => d.MedicalNo, u => u.MapFrom(s => s.Subject.MedicalNo))
.ForMember(d => d.Sex, u => u.MapFrom(s => s.Subject.Sex))
.ForMember(d => d.Age, u => u.MapFrom(t => t.Subject.Age))
- .ForMember(d => d.IsHaveClinicalData, u => u.MapFrom(t => t.IsBaseLine ? t.PreviousHistoryList.Any() || t.PreviousOtherList.Any()
+ .ForMember(d => d.IsHaveClinicalData, u => u.MapFrom(t => t.PreviousHistoryList.Any() || t.PreviousOtherList.Any()
+ || t.Subject.ClinicalFormList.Any(x=>x.ClinicalDataTrialSet.UploadRole==UploadRole.CRC&& x.ReadingId==t.Id)
|| t.ReadingClinicalDataList.Any(x => x.ClinicalDataTrialSet.UploadRole == Domain.Share.UploadRole.CRC && x.ReadingClinicalDataPDFList.Count() > 0)
- || t.PreviousSurgeryList.Any() : false))
+ || t.PreviousSurgeryList.Any()))
//.ForMember(d => d.VisitName, u => u.MapFrom(t =>t.InPlan? t.VisitStage.VisitName : t.VisitName))
//.ForMember(d => d.VisitNum, u => u.MapFrom(t => t.InPlan ? t.VisitStage.VisitNum : t.VisitNum))
diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs
index f806da039..dce0aae40 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;
@@ -87,6 +91,25 @@ namespace IRaCIS.Core.Application.Service
_iClinicalQuestionService = iClinicalQuestionService;
}
+ ///
+ /// CRC签名临床数据
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task 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);
+ }
+
///
/// 自动添加CRC临床数据
///
@@ -109,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();
@@ -165,12 +195,12 @@ namespace IRaCIS.Core.Application.Service
}).ToList());
});
- await _readingClinicalDataRepository.AddRangeAsync(readingClinicalDatas);
-
- await _readingClinicalDataRepository.SaveChangesAsync();
+
+ await _readingClinicalDataRepository.AddRangeAsync(readingClinicalDatas);
+ await _readingClinicalDataRepository.SaveChangesAsync();
- }
+ }
///
/// 获取CRC受试者临床数据
@@ -178,18 +208,14 @@ namespace IRaCIS.Core.Application.Service
///
///
[HttpPost]
- public async Task> GetCRCSubjectClinicalList(GetCRCSubjectClinicalInDto inDto)
+ public async Task> GetCRCSubjectClinicalList(GetCRCSubjectClinicalInDto inDto)
{
//await AutoAddCRCClinical(new AutoAddClinicalInDto()
//{
-
// TrialId = inDto.TrialId
//}) ;
-
-
-
var subjects = await _subjectRepository.Where(x => x.TrialId == inDto.TrialId).Select(x => new GetCRCSubjectClinicalResultDto()
{
SubjectId = x.Id,
@@ -197,33 +223,38 @@ namespace IRaCIS.Core.Application.Service
}).ToListAsync();
- var clinicalData=await _readingClinicalDataRepository.Where(x=>x.TrialId == inDto.TrialId&&x.ClinicalDataTrialSet.UploadRole==UploadRole.CRC&&x.ClinicalDataTrialSet.ClinicalDataLevel!= ClinicalLevel.SubjectVisit)
+ var clinicalData= _readingClinicalDataRepository.Where(x=>x.TrialId == inDto.TrialId&&x.ClinicalDataTrialSet.UploadRole==UploadRole.CRC&&x.ClinicalDataTrialSet.ClinicalDataLevel!= ClinicalLevel.SubjectVisit)
.Where(x=>!x.IsSign)
+ .WhereIf(inDto.SubjectId!=null,x=>x.SubjectId==inDto.SubjectId)
+ .WhereIf(inDto.SubjectCode != null, x => x.Subject.Code.Contains(inDto.SubjectCode??string.Empty))
+ .Where(x=> x.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.Subject)
.Include(x=>x.ClinicalDataTrialSet).Select(x=>new GetCRCSubjectClinicalOutDto() {
SubjectId=x.SubjectId,
SubjectCode=x.Subject.Code,
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,
ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName,
- }).OrderBy(x=>x.SubjectCode).ToListAsync();
+ });
- // 一次查询报错 分两次写
- clinicalData.ForEach(x =>
+ var pageList = await clinicalData.ToPagedListAsync(inDto.PageIndex, inDto.PageSize, string.IsNullOrWhiteSpace(inDto.SortField) ? nameof(GetCRCSubjectClinicalOutDto.SubjectCode) : inDto.SortField, inDto.Asc);
+ // 一次查询报错 分两次写
+ pageList.CurrentPageData.ForEach(x =>
{
x.ClinicalDataSetEnName = x.ClinicalDataSetName.LanguageName(x.ClinicalDataSetEnName, _userInfo.IsEn_Us);
-
});
-
-
var clinicalFormData = await _clinicalFormRepository.Where(x => x.TrialId == inDto.TrialId).ToListAsync();
- clinicalData.ForEach(n =>
+ pageList.CurrentPageData.ForEach(n =>
{
n.ClinicalCount = clinicalFormData.Where(y => y.ClinicalDataTrialSetId == n.ClinicalDataTrialSetId && y.SubjectId == n.SubjectId).Count();
});
-
-
- return clinicalData;
+ return pageList;
}
///
@@ -238,7 +269,7 @@ namespace IRaCIS.Core.Application.Service
result.AnswerList = new List>();
result.QuestionList=await _trialClinicalQuestionRepository.Where(x=>x.TrialClinicalId==inDto.ClinicalDataTrialSetId
&&x.ClinicalQuestionType!= ReadingQestionType.Group
- && x.ClinicalQuestionType != ReadingQestionType.Table).OrderBy(x=>x.ShowOrder)
+ && x.ClinicalQuestionType != ReadingQestionType.Table).OrderByDescending(x=>x.IsCheckDate).ThenBy(x=>x.ShowOrder)
.ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
var answers = await _clinicalQuestionAnswerRepository.Where(x => x.SubjectId == inDto.SubjectId && x.ClinicalDataTrialSetId == inDto.ClinicalDataTrialSetId)
@@ -328,8 +359,24 @@ namespace IRaCIS.Core.Application.Service
TrialId= inDto.TrialId,
Id = inDto.ClinicalFormId ?? NewId.NextGuid(),
ReadingId = inDto.ReadingId,
- VisitId = inDto.VisitId,
};
+
+ 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();
+
+ if (existsClinical)
+ {
+ throw new BusinessValidationFailedException("已经添加过临床数据,不允许多次添加!");
+ }
try
{
var checkDateQuestionId = await _trialClinicalQuestionRepository.Where(x => x.TrialClinicalId == inDto.ClinicalDataTrialSetId && x.IsCheckDate).Select(x => x.Id).FirstNotNullAsync();
@@ -343,7 +390,7 @@ namespace IRaCIS.Core.Application.Service
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已经确认!");
}
@@ -404,7 +451,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
+ // });
+ //}
await _clinicalFormRepository.AddAsync(clinicalForm);
await _clinicalQuestionAnswerRepository.AddRangeAsync(clinicalQuestionAnswers);
await _clinicalAnswerRowInfoRepository.AddRangeAsync(clinicalAnswerRowInfos);
@@ -413,6 +466,49 @@ namespace IRaCIS.Core.Application.Service
return ResponseOutput.Ok(true);
}
+ ///
+ /// 删除表单数据
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task DeleteClinicalForm(DeleteClinicalFormInDto inDto)
+ {
+
+ if (await _readModuleCriterionFromRepository.AnyAsync(x => x.ClinicalFormId == inDto.ClinicalFormId))
+ {
+ throw new BusinessValidationFailedException("当前表单已确认,无法删除!");
+ }
+
+ await _clinicalFormRepository.BatchDeleteNoTrackingAsync(x => x.Id == inDto.ClinicalFormId);
+ await _clinicalQuestionAnswerRepository.BatchDeleteNoTrackingAsync(x => x.ClinicalFormId == inDto.ClinicalFormId);
+ await _clinicalAnswerRowInfoRepository.BatchDeleteNoTrackingAsync(x => x.ClinicalFormId == inDto.ClinicalFormId);
+ await _clinicalTableAnswerRepository.BatchDeleteNoTrackingAsync(x => x.ClinicalFormId == inDto.ClinicalFormId);
+ return ResponseOutput.Ok(true);
+ }
+
+ ///
+ /// 获取PM待确认列表
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> 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
+
+ });
+ }
///
/// 获取CRC确认列表
@@ -420,66 +516,112 @@ namespace IRaCIS.Core.Application.Service
///
///
[HttpPost]
- public async Task> GetCRCConfirmList(GetCRCConfirmListInDto inDto)
+ public async Task> GetCRCConfirmList(GetCRCConfirmListInDto inDto)
{
- List result = await _readModuleRepository.Where(x => x.TrialId == inDto.TrialId)
- .WhereIf(inDto.ReadModuleId!=null,x=>x.Id==inDto.ReadModuleId)
- .Select(x => new GetCRCConfirmListOutDto()
- {
- SubjectId= x.SubjectId,
- IsCRCConfirm = x.IsCRCConfirm,
- LatestScanDate = x.SubjectVisit.LatestScanDate,
- ReadingSetType = x.ReadingSetType,
- IsPMConfirm = x.IsPMConfirm,
- SubjectCode=x.Subject.Code,
- ReadModuleId = x.Id,
- }).OrderBy(x => x.LatestScanDate).ToListAsync();
+ if (inDto.ReadModuleId != null)
+ {
+ var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadModuleId).FirstNotNullAsync();
+ inDto.TrialReadingCriterionId = readModule.TrialReadingCriterionId;
+ }
+ var query = _readModuleRepository.Where(x => x.TrialId == inDto.TrialId)
+ .WhereIf(inDto.ReadModuleId != null, x => x.Id == inDto.ReadModuleId)
+ .WhereIf(inDto.IsCRCConfirm != null, x => x.IsCRCConfirm == inDto.IsCRCConfirm)
+ .WhereIf(inDto.IsPMConfirm != null, x => x.IsPMConfirm == inDto.IsPMConfirm)
+ .WhereIf(inDto.SubjectCode != null, x => x.Subject.Code.Contains(inDto.SubjectCode??string.Empty))
+ .WhereIf(inDto.TrialReadingCriterionId != null, x => x.TrialReadingCriterionId == inDto.TrialReadingCriterionId)
+ .WhereIf(inDto.SubjectId != null, x => x.SubjectId == inDto.SubjectId)
+ .WhereIf(inDto.StartTime != null, x => x.SubjectVisit.LatestScanDate >= inDto.StartTime)
+ .WhereIf(inDto.EndTime != null, x => x.SubjectVisit.LatestScanDate <= inDto.EndTime)
+ .Select(x => new GetCRCConfirmListOutDto()
+ {
+
+ SubjectId = x.SubjectId,
+ IsNotNeedPMConfirm=x.IsNotNeedPMConfirm,
+ IsCRCConfirm = x.IsCRCConfirm,
+ IsCRCApplicationRevoke=x.IsCRCApplicationRevoke,
+ VisitBlindName=x.SubjectVisit.BlindName,
+ LatestScanDate = x.SubjectVisit.LatestScanDate,
+ ReadingSetType = x.ReadingSetType,
+ IsPMConfirm = x.IsPMConfirm,
+ SubjectCode = x.Subject.Code,
+ ReadModuleId = x.Id,
+ ModuleName=x.ModuleName,
+ });
+
+
+ var result = await query.ToPagedListAsync(inDto.PageIndex, inDto.PageSize, new string[2] { "SubjectCode asc", "LatestScanDate asc" });
+
var formList = await _clinicalFormRepository.Where(x => x.TrialId == inDto.TrialId)
.Where(x => x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC)
+ .WhereIf(inDto.TrialReadingCriterionId!=null, x=>x.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList.Any(y=>y.TrialReadingCriterionId== inDto.TrialReadingCriterionId))
.Where(x => x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.ImageRead || x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.OncologyRead)
.Include(x=>x.ClinicalDataTrialSet)
.Select(x => new CRCClinicalForm
{
+ SubjectId=x.SubjectId,
CheckDate = x.CheckDate,
ClinicalDataLevel = x.ClinicalDataTrialSet.ClinicalDataLevel,
ClinicalFormId = x.Id,
- ClinicalDataSetName=x.ClinicalDataTrialSet.ClinicalDataSetName,
+ ClinicalDataTrialSetId= x.ClinicalDataTrialSet.Id,
+ ClinicalDataSetName =x.ClinicalDataTrialSet.ClinicalDataSetName,
ClinicalDataSetEnName=x.ClinicalDataTrialSet.ClinicalDataSetEnName,
+ IsHaveTableQuestion=x.ClinicalDataTrialSet.TrialClinicalQuestionList.Any(y=>y.ClinicalQuestionType== ReadingQestionType.Table),
}).ToListAsync();
- var confirmList = await _readModuleCriterionFromRepository.Where(x => x.TrialId == inDto.TrialId).Include(x=>x.ClinicalForm).Include(x=>x.ClinicalForm.ClinicalDataTrialSet).ToListAsync();
- result.ForEach(x =>
+ 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
+ {
+ CheckDate = x.ClinicalForm.CheckDate ?? default(DateTime),
+ ClinicalDataSetName = x.ClinicalForm.ClinicalDataTrialSet.ClinicalDataSetName,
+ ClinicalDataSetEnName = x.ClinicalForm.ClinicalDataTrialSet.ClinicalDataSetEnName,
+ ClinicalFormId = x.ClinicalFormId,
+ ClinicalDataTrialSetId = x.ClinicalForm.ClinicalDataTrialSet.Id,
+ ReadModuleId=x.ReadModuleId,
+ IsHaveTableQuestion=x.ClinicalForm.ClinicalDataTrialSet.TrialClinicalQuestionList.Any(y => y.ClinicalQuestionType == ReadingQestionType.Table)
+ }).ToListAsync();
+
+
+ result.CurrentPageData.ForEach(x =>
{
if (x.IsCRCConfirm)
{
- x.ClinicalFormIdList = confirmList.Where(y => y.ReadModuleId == x.ReadModuleId).Select(y=>new GetCRCBeConfirmListOutDto() {
- CheckDate = y.ClinicalForm.CheckDate??default(DateTime),
- ClinicalDataSetName= y.ClinicalForm.ClinicalDataTrialSet.ClinicalDataSetName,
- ClinicalDataSetEnName= y.ClinicalForm.ClinicalDataTrialSet.ClinicalDataSetEnName,
+ x.ClinicalFormList = confirmList.Where(y => y.ReadModuleId == x.ReadModuleId).Select(y=>new GetCRCBeConfirmListOutDto() {
+ CheckDate = y.CheckDate,
+ ClinicalDataSetName= y.ClinicalDataSetName.LanguageName(y.ClinicalDataSetEnName, _userInfo.IsEn_Us),
+ ClinicalDataSetEnName= y.ClinicalDataSetEnName,
ClinicalFormId=y.ClinicalFormId,
+ ClinicalDataTrialSetId=y.ClinicalDataTrialSetId,
+ IsHaveTableQuestion=y.IsHaveTableQuestion,
}).ToList();
}
else
{
if (x.ReadingSetType == ReadingSetType.ImageReading)
{
- x.ClinicalFormIdList = 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()
{
CheckDate = y.CheckDate ?? default(DateTime),
- ClinicalDataSetName = y.ClinicalDataSetName,
+ ClinicalDataSetName = y.ClinicalDataSetName.LanguageName(y.ClinicalDataSetEnName, _userInfo.IsEn_Us),
ClinicalDataSetEnName = y.ClinicalDataSetEnName,
ClinicalFormId = y.ClinicalFormId,
+ ClinicalDataTrialSetId = y.ClinicalDataTrialSetId,
+ IsHaveTableQuestion = y.IsHaveTableQuestion,
}).ToList();
}
else
{
- x.ClinicalFormIdList = 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()
{
CheckDate = y.CheckDate ?? default(DateTime),
- ClinicalDataSetName = y.ClinicalDataSetName,
+ ClinicalDataSetName = y.ClinicalDataSetName.LanguageName(y.ClinicalDataSetEnName, _userInfo.IsEn_Us),
ClinicalDataSetEnName = y.ClinicalDataSetEnName,
ClinicalFormId = y.ClinicalFormId,
+ ClinicalDataTrialSetId = y.ClinicalDataTrialSetId,
+ IsHaveTableQuestion = y.IsHaveTableQuestion,
}).ToList();
}
}
@@ -498,20 +640,120 @@ namespace IRaCIS.Core.Application.Service
var result = (await this.GetCRCConfirmList(new GetCRCConfirmListInDto()
{
ReadModuleId = inDto.ReadModuleId,
- TrialId = inDto.TrialId
- })).SelectMany(x => x.ClinicalFormIdList).ToList();
+ TrialId = inDto.TrialId,
+ PageIndex=1,
+ PageSize=9999,
+
+ })).CurrentPageData.SelectMany(x => x.ClinicalFormList).ToList();
+ return result.OrderBy(x => x.ClinicalDataSetName).ThenBy(x => x.CheckDate).ToList();
+ }
- result.ForEach(x => {
- x.ClinicalDataSetName = _userInfo.IsEn_Us ? x.ClinicalDataSetEnName : x.ClinicalDataSetName;
+ ///
+ /// 获取临床数据表格信息 查看没有表格问题的列表
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task<(List,object)> GetClinicalTableList(GetClinicalTableListInDto inDto)
+ {
+
+ var readModule=await _readModuleRepository.Where(x => x.Id == inDto.ReadModuleId).FirstNotNullAsync();
+
+ var confirmList = (await this.GetCRCConfirmList(new GetCRCConfirmListInDto()
+ {
+ ReadModuleId = inDto.ReadModuleId,
+ TrialId = inDto.TrialId,
+ PageIndex = 1,
+ PageSize = 9999,
+
+ })).CurrentPageData.SelectMany(x => x.ClinicalFormList).ToList();
+
+ var clinicalDataTrialSetIds = confirmList.Select(x => x.ClinicalDataTrialSetId).Distinct().ToList();
+ 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 => clinicalFormIds.Contains(x.ClinicalFormId))
+ .Select(x => new
+ {
+ x.ClinicalDataTrialSetId,
+ x.ClinicalFormId,
+ x.ClinicalForm.CheckDate,
+ x.QuestionId,
+ x.Answer
+ })
+ .ToListAsync();
+ List result = new List();
+ clinicalDataTrialSetIds.ForEach(x => {
+ GetClinicalTableListOutDto dto = new GetClinicalTableListOutDto();
+ dto.ModuleName = readModule.ModuleName;
+ 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.AnswerList = new List>();
+ var ClinicalFormIds= answers.Where(y => y.ClinicalDataTrialSetId == x).OrderBy(x => x.CheckDate).Select(x => x.ClinicalFormId).Distinct().ToList();
+ ClinicalFormIds.ForEach(z =>
+ {
+ 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("TrialId", inDto.TrialId.ToString());
+ dic.Add("SubjectId", readModule.SubjectId.ToString());
+ dic.Add("ClinicalDataTrialSetId", x.ToString());
+
+ dto.AnswerList.Add(dic);
+
+ });
+ result.Add(dto);
+ });
+ return (result, new
+ {
+ readModule.ModuleName,
+ });
+
+ }
+
+
+ ///
+ /// 获取临床数据表格信息 查看有表格问题的列表
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task<(List,object)> GetClinicalDateList(GetCRCBeConfirmListInDto inDto)
+ {
+ var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadModuleId).FirstNotNullAsync();
+ var confirmList = (await this.GetCRCConfirmList(new GetCRCConfirmListInDto()
+ {
+ ReadModuleId = inDto.ReadModuleId,
+ TrialId = inDto.TrialId,
+ PageIndex = 1,
+ PageSize = 9999,
+
+ })).CurrentPageData.SelectMany(x => x.ClinicalFormList).ToList();
+
+ var clinicalDataTrialSetIds = confirmList.Select(x => x.ClinicalDataTrialSetId).Distinct().ToList();
+
+ List result = new List();
+
+ clinicalDataTrialSetIds.ForEach(x =>
+ {
+
+ result.Add(new GetClinicalDateListOutDto()
+ {
+ ClinicalDataSetName = confirmList.Where(y => y.ClinicalDataTrialSetId == x).Select(y => y.ClinicalDataSetName).First(),
+ DateList = confirmList.Where(y => y.ClinicalDataTrialSetId == x).ToList()
+
+ });
});
- return result.OrderBy(x => x.ClinicalDataSetName).ThenBy(x => x.CheckDate).ToList();
-
+ return (result,new {
+ readModule.ModuleName,
+ });
}
-
///
/// CRC 确认临床数据
///
@@ -520,22 +762,32 @@ namespace IRaCIS.Core.Application.Service
[HttpPost]
public async Task CRCConfirmClinical(CRCConfirmClinicalInDto inDto)
{
- var dataList =await this.GetCRCConfirmList(new GetCRCConfirmListInDto()
+
+ var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadModuleId).FirstNotNullAsync();
+
+ var confirmlist = (await this.GetCRCConfirmList(new GetCRCConfirmListInDto()
{
- TrialId = inDto.TrialId
- });
+ TrialId = inDto.TrialId,
+ SubjectId= readModule.SubjectId,
+ IsCRCConfirm=false,
+ TrialReadingCriterionId = readModule.TrialReadingCriterionId,
+ //ReadModuleId = inDto.ReadModuleId,
+ PageIndex =1,
+ PageSize=9999,
+ })).CurrentPageData.ToList();
- 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();
+ var presentData = confirmlist.Where(x => x.ReadModuleId == inDto.ReadModuleId).First();
+ confirmlist = confirmlist.Where(x => x.LatestScanDate <= presentData.LatestScanDate).ToList();
+
+ await _readModuleCriterionFromRepository.BatchDeleteNoTrackingAsync(x=>x.ReadModuleId== inDto.ReadModuleId);
List needAddList = new List()
{
};
confirmlist.ForEach(x =>
{
- x.ClinicalFormIdList.ForEach(y =>
+ x.ClinicalFormList.ForEach(y =>
{
needAddList.Add(new ReadModuleCriterionFrom()
{
@@ -547,16 +799,21 @@ namespace IRaCIS.Core.Application.Service
});
});
- var readModuleIds = confirmlist.Select(x => x.ReadModuleId).ToList();
+ foreach (var item in confirmlist)
+ {
+ await _readModuleRepository.UpdatePartialFromQueryAsync(x =>x.Id==item.ReadModuleId , x => new ReadModule()
+ {
+ IsCRCConfirm = true,
+ IsPMConfirm=item.ClinicalFormList.Count()==0?true:false,
+ IsNotNeedPMConfirm= item.ClinicalFormList.Count() == 0 ? true : false,
+ });
+ }
- await _readModuleRepository.UpdatePartialFromQueryAsync(x => readModuleIds.Contains(x.Id),x=>new ReadModule() {
- IsCRCConfirm=true
- });
await _readModuleCriterionFromRepository.AddRangeAsync(needAddList);
await _readModuleCriterionFromRepository.SaveChangesAsync();
-
- return ResponseOutput.Ok(true);
+ await _iReadingClinicalDataService.DealVisiTaskClinicalDataSignedAsync(inDto.TrialId, inDto.SubjectId, inDto.ReadModuleId, false, readModule.TrialReadingCriterionId);
+ return ResponseOutput.Ok(true);
}
///
@@ -567,14 +824,20 @@ namespace IRaCIS.Core.Application.Service
[HttpPost]
public async Task CRCCancelConfirmClinical(CRCCancelConfirmClinicalInDto inDto)
{
- var dataList = await this.GetCRCConfirmList(new GetCRCConfirmListInDto()
+
+ var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadModuleId).FirstNotNullAsync();
+ var dataList = (await this.GetCRCConfirmList(new GetCRCConfirmListInDto()
{
- TrialId = inDto.TrialId
- });
+ TrialId = inDto.TrialId,
+ SubjectId = readModule.SubjectId,
+ TrialReadingCriterionId = readModule.TrialReadingCriterionId,
+ PageIndex = 1,
+ PageSize = 9999,
+ })).CurrentPageData;
var presentData = dataList.Where(x => x.ReadModuleId == inDto.ReadModuleId).First();
- if (dataList.Any(x => x.IsPMConfirm && x.LatestScanDate > presentData.LatestScanDate && x.ReadingSetType == presentData.ReadingSetType))
+ if (dataList.Any(x => x.IsCRCConfirm && x.LatestScanDate > presentData.LatestScanDate && x.ReadingSetType == presentData.ReadingSetType))
{
throw new BusinessValidationFailedException("当前数据并非最后一条确认信息,无法取消!");
}
@@ -584,17 +847,28 @@ namespace IRaCIS.Core.Application.Service
throw new BusinessValidationFailedException("PM已确认,无法取消!");
}
+ if (presentData.IsNotNeedPMConfirm)
+ {
+ await _readModuleRepository.UpdatePartialFromQueryAsync(x => presentData.ReadModuleId == x.Id, x => new ReadModule()
+ {
+ IsPMConfirm = false,
+ IsCRCConfirm = false,
+ IsNotNeedPMConfirm = false,
+ });
+ }
+ else
+ {
+ await _readModuleRepository.UpdatePartialFromQueryAsync(x => presentData.ReadModuleId == x.Id, x => new ReadModule()
+ {
+ IsCRCApplicationRevoke = true,
+ });
+ }
+
- await _readModuleRepository.UpdatePartialFromQueryAsync(x => presentData.ReadModuleId==x.Id, x => new ReadModule()
- {
- IsCRCConfirm = false
- });
-
- await _readModuleCriterionFromRepository.BatchDeleteNoTrackingAsync(x=>x.ReadModuleId== presentData.ReadModuleId);
+ //await _readModuleCriterionFromRepository.BatchDeleteNoTrackingAsync(x=>x.ReadModuleId== presentData.ReadModuleId);
await _readModuleCriterionFromRepository.SaveChangesAsync();
-
- return ResponseOutput.Ok(true);
+ return ResponseOutput.Ok(true);
}
///
@@ -609,15 +883,46 @@ 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 = false
- });
+ 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,
+ IsClinicalDataBlind=inDto.IsClinicalDataBlind,
+ IsClinicalDataComplete=inDto.IsClinicalDataComplete,
+ });
+ 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== inDto.ReadModuleId);
+
+ 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 75207345c..297083244 100644
--- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs
@@ -66,8 +66,11 @@ namespace IRaCIS.Application.Services
&& x.ClinicalUploadType == ClinicalUploadType.Structuring && x.UploadRole == UploadRole.CRC
);
-
- if (_systemClinicalQuestionRepository.Where(x => isNeedVerify&& x.SystemClinicalId == inDto.SystemClinicalId && x.IsCheckDate).Count() != 1)
+ if (_systemClinicalQuestionRepository.Where(x => x.SystemClinicalId == inDto.SystemClinicalId).Count() == 0)
+ {
+ throw new BusinessValidationFailedException("当前临床数据未配置问题,请先配置问题之后再应用");
+ }
+ if (isNeedVerify&&_systemClinicalQuestionRepository.Where(x => x.SystemClinicalId == inDto.SystemClinicalId && x.IsCheckDate).Count() != 1)
{
throw new BusinessValidationFailedException(_localizer["ClinicalDataSet_Apply"]);
@@ -98,7 +101,12 @@ namespace IRaCIS.Application.Services
&& 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"]);
@@ -136,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())
{
//---存在同类型的临床数据,操作失败
@@ -219,6 +229,10 @@ namespace IRaCIS.Application.Services
//---存在同类型的临床数据,操作失败
return ResponseOutput.NotOk(_localizer["ClinicalDataSet_DupTypeFail"]);
}
+ if (indto.Id != null && indto.IsApply == null)
+ {
+ indto.IsApply = await _clinicalDataTrialSetRepository.Where(x => x.Id == indto.Id).Select(x => x.IsApply).FirstOrDefaultAsync();
+ }
//indto.CriterionEnumListStr = $"|{String.Join('|', indto.CriterionEnumList)}|";
diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs
index 93b92894a..f833223d8 100644
--- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs
@@ -118,10 +118,10 @@ namespace IRaCIS.Core.Application.Service
public async Task<(List, bool)> GetSystemClinicalQuestionPreview(GetSystemClinicalQuestionPreviewDto inDto)
{
var questions = await _systemClinicalQuestionRepository.Where(x => x.SystemClinicalId == inDto.SystemClinicalId)
- .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+ .ProjectTo(_mapper.ConfigurationProvider).OrderBy(x => x.ShowOrder).ToListAsync();
var tableQuestions= await _systemClinicalTableQuestionRepository.Where(x => x.SystemClinicalId == inDto.SystemClinicalId)
- .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+ .ProjectTo(_mapper.ConfigurationProvider).OrderBy(x => x.ShowOrder).ToListAsync();
var result = questions.Where(x => x.ClinicalQuestionType == ReadingQestionType.Group).ToList();
@@ -144,13 +144,13 @@ namespace IRaCIS.Core.Application.Service
public async Task<(List, bool)> GetTrialClinicalQuestionPreview(GetTrialClinicalQuestionPreviewDto inDto)
{
var questions = await _trialClinicalQuestionRepository.Where(x => x.TrialClinicalId == inDto.TrialClinicalId)
- .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+ .ProjectTo(_mapper.ConfigurationProvider).OrderBy(x=>x.ShowOrder).ToListAsync();
var tableQuestions = await _trialClinicalTableQuestionRepository.Where(x => x.TrialClinicalId == inDto.TrialClinicalId)
- .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+ .ProjectTo(_mapper.ConfigurationProvider).OrderBy(x => x.ShowOrder).ToListAsync();
- var result = questions.Where(x => x.ClinicalQuestionType == ReadingQestionType.Group).ToList();
+ var result = questions.Where(x => x.ClinicalQuestionType == ReadingQestionType.Group).OrderBy(x => x.ShowOrder).ToList();
result.ForEach(x =>
{
@@ -170,7 +170,7 @@ namespace IRaCIS.Core.Application.Service
///
public void FindChildQuestion(ClinicalQuestionPreviewDto item, List questions, List tableQuestions,List answers, List tableAnswers)
{
- item.Childrens = questions.Where(x => (x.ParentId == item.Id)||(x.GroupId== item.Id&&x.ParentId==null)).ToList();
+ item.Childrens = questions.Where(x => (x.ParentId == item.Id)||(x.GroupId== item.Id&&x.ParentId==null)).OrderBy(x => x.ShowOrder).ToList();
item.RelationQuestions = questions.Where(x => x.RelevanceId == item.Id).ToList();
@@ -188,7 +188,7 @@ namespace IRaCIS.Core.Application.Service
});
- item.TableQuestions = tableQuestions.Where(x => x.QuestionId == item.Id).OrderBy(x=>x.ShowOrder).ToList();
+ item.TableQuestions = tableQuestions.Where(x => x.QuestionId == item.Id).OrderBy(x=>x.ShowOrder).OrderBy(x => x.ShowOrder).ToList();
item.RelationQuestions.ForEach(x => {
this.FindChildQuestion(x, questions, tableQuestions, answers, tableAnswers);
@@ -228,9 +228,24 @@ namespace IRaCIS.Core.Application.Service
[HttpPost]
public async Task AddOrUpdateTrialClinicalQuestion(TrialClinicalQuestionDto inDto)
{
- if (await _trialClinicalQuestionRepository.AnyAsync(x =>x.TrialClinicalId==inDto.TrialClinicalId && x.Id != inDto.Id && x.QuestionName == inDto.QuestionName))
+ if (inDto.IsVerify)
{
- return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]);
+ if (await _trialClinicalQuestionRepository.AnyAsync(x => x.TrialClinicalId == inDto.TrialClinicalId && x.Id != inDto.Id && x.QuestionName == inDto.QuestionName))
+ {
+ return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"],string.Empty,ApiResponseCodeEnum.NeedTips);
+ }
+
+ }
+
+
+ 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);
@@ -293,6 +308,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
@@ -311,9 +327,22 @@ namespace IRaCIS.Core.Application.Service
public async Task AddOrUpdateSystemClinicalQuestion(SystemClinicalQuestionDto inDto)
{
- if (await _systemClinicalQuestionRepository.AnyAsync(x => x.SystemClinicalId == inDto.SystemClinicalId && x.Id != inDto.Id && x.QuestionName == inDto.QuestionName))
+ if (inDto.IsVerify)
{
- return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]);
+ if (await _systemClinicalQuestionRepository.AnyAsync(x => x.SystemClinicalId == inDto.SystemClinicalId && x.Id != inDto.Id && x.QuestionName == inDto.QuestionName))
+ {
+ return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"], string.Empty, ApiResponseCodeEnum.NeedTips);
+ }
+ }
+
+
+ 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());
@@ -396,9 +425,17 @@ namespace IRaCIS.Core.Application.Service
[HttpPost]
public async Task AddOrUpdateSystemClinicalTableQuestion(SystemClinicalTableQuestionDto inDto)
{
- if (await _systemClinicalTableQuestionRepository.AnyAsync(x => x.QuestionId == inDto.QuestionId && x.Id != inDto.Id && x.QuestionName == inDto.QuestionName))
+ if (inDto.IsVerify)
{
- return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]);
+ if (await _systemClinicalTableQuestionRepository.AnyAsync(x => x.QuestionId == inDto.QuestionId && x.Id != inDto.Id && x.QuestionName == inDto.QuestionName))
+ {
+ return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"], string.Empty, ApiResponseCodeEnum.NeedTips);
+ }
+ }
+
+ 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);
@@ -451,9 +488,17 @@ namespace IRaCIS.Core.Application.Service
[HttpPost]
public async Task AddOrUpdateTrialClinicalTableQuestion(TrialClinicalTableQuestionDto inDto)
{
- if (await _trialClinicalTableQuestionRepository.AnyAsync(x => x.QuestionId == inDto.QuestionId && x.Id != inDto.Id && x.QuestionName == inDto.QuestionName))
+ if (inDto.IsVerify)
{
- return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]);
+ if (await _trialClinicalTableQuestionRepository.AnyAsync(x => x.QuestionId == inDto.QuestionId && x.Id != inDto.Id && x.QuestionName == inDto.QuestionName))
+ {
+ return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"], string.Empty, ApiResponseCodeEnum.NeedTips);
+ }
+ }
+
+ 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);
diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs
index 967d63a51..de0d9d0b3 100644
--- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs
@@ -8,6 +8,7 @@ using Panda.DynamicWebApi.Attributes;
using Microsoft.Extensions.DependencyInjection;
using System.Linq.Expressions;
using IRaCIS.Core.Infrastructure;
+using System.Linq.Dynamic.Core;
namespace IRaCIS.Application.Services
{
@@ -24,6 +25,8 @@ 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;
@@ -37,7 +40,8 @@ namespace IRaCIS.Application.Services
IRepository previousPDFRepository,
IRepository subjectVisitRepository,
IRepository previousHistoryRepository,
-
+ IRepository readModuleCriterionFromRepository,
+ IRepository clinicalFormRepository,
IRepository previousOtherRepository,
IRepository previousSurgeryRepository,
IRepository readingQuestionCriterionTrialRepository,
@@ -53,6 +57,8 @@ namespace IRaCIS.Application.Services
this._previousPDFRepository = previousPDFRepository;
this._subjectVisitRepository = subjectVisitRepository;
this._previousHistoryRepository = previousHistoryRepository;
+ this._readModuleCriterionFromRepository = readModuleCriterionFromRepository;
+ this._clinicalFormRepository = clinicalFormRepository;
this._previousOtherRepository = previousOtherRepository;
this._previousSurgeryRepository = previousSurgeryRepository;
this._readingQuestionCriterionTrialRepository = readingQuestionCriterionTrialRepository;
@@ -179,12 +185,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)
@@ -201,29 +201,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(),
@@ -310,7 +307,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();
@@ -328,6 +325,8 @@ namespace IRaCIS.Application.Services
{
var isBaseLine = await _subjectVisitRepository.Where(t => t.Id == readingId).Select(t => t.IsBaseLine).FirstOrDefaultAsync();
+
+
//判断是否基线
if (isBaseLine)
{
@@ -356,21 +355,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()
@@ -380,6 +401,13 @@ namespace IRaCIS.Application.Services
}
+ else
+ {
+ await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == trialId && t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCritrialId && t.SouceReadModuleId == readingId, u => new VisitTask()
+ {
+ IsClinicalDataSign = false
+ });
+ }
}
@@ -606,10 +634,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);
@@ -646,9 +670,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()
@@ -656,13 +680,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,
@@ -672,33 +696,141 @@ namespace IRaCIS.Application.Services
FileName = y.FileName,
Path = y.Path,
CreateTime = y.CreateTime,
- }).ToList()
+ }).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();
+ });
+
+
+ // 这里处理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
+ .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
+
+
+ }).ToListAsync();
+
+
+ var clinicalresult = await _clinicalDataTrialSetRepository.Where(x => x.UploadRole == UploadRole.CRC && x.ClinicalUploadType == ClinicalUploadType.Structuring)
+ .WhereIf(readModule.ReadingSetType == ReadingSetType.ImageReading, x => x.ClinicalDataLevel == ClinicalLevel.ImageRead)
+ .WhereIf(readModule.ReadingSetType == ReadingSetType.TumorReading, x => x.ClinicalDataLevel == ClinicalLevel.OncologyRead)
+ .Where(x=>x.TrialClinicalDataSetCriteriaList.Any(y=>y.TrialReadingCriterionId==readModule.TrialReadingCriterionId))
+ .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,
+ 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.IsSign = readModule.IsPMConfirm ? true : false;
+ x.ReadingClinicalDataState = readModule.IsPMConfirm ? ReadingClinicalDataStatus.HaveSigned : ReadingClinicalDataStatus.HaveChecked;
+
+ });
+
+ result.AddRange(clinicalresult);
+ }
+
+
- var result = await resultQuery.ToListAsync();
// 根据标准
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;
+ }
+ }
+
+ var previousHistoryList = await _previousHistoryRepository.Where(x => x.SubjectVisitId == inDto.ReadingId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+ var previousOtherList = await _previousOtherRepository.Where(x => x.SubjectVisitId == inDto.ReadingId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+ var previousSurgeryList = await _previousSurgeryRepository.Where(x => x.SubjectVisitId == inDto.ReadingId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+
+ foreach (var item in result)
+ {
+ item.ClinicalTableData = new ClinicalDataTable()
+ {
+ PreviousHistoryList = previousHistoryList.Where(x => x.ClinicalDataTrialSetId == item.ClinicalDataTrialSetId).ToList(),
+ PreviousOtherList = previousOtherList.Where(x => x.ClinicalDataTrialSetId == item.ClinicalDataTrialSetId).ToList(),
+ PreviousSurgeryList = previousSurgeryList.Where(x => x.ClinicalDataTrialSetId == item.ClinicalDataTrialSetId).ToList(),
+ };
+
}
return result;
@@ -712,14 +844,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()
{
@@ -750,7 +877,111 @@ namespace IRaCIS.Application.Services
});
var result = await resultQuery.ToListAsync();
- //result = result.Where(x => !(x.UploadRole == UploadRole.CRC && x.ClinicalUploadType == ClinicalUploadType.PDF && x.FileList.Count() == 0)).ToList();
+
+
+ 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)
+
+ .WhereIf(inDto.ClinicalDataTrialSetId != null, x => x.ClinicalForm.ClinicalDataTrialSetId == inDto.TrialReadingCriterionId)
+ .Select(x => new {
+ ClinicalFormId = x.ClinicalFormId,
+ CheckDate = x.ClinicalForm.CheckDate,
+ ClinicalDataTrialSetId = x.ClinicalForm.ClinicalDataTrialSetId
+
+
+ }).ToListAsync();
+
+
+ var clinicalresult = await _clinicalDataTrialSetRepository.Where(x => x.UploadRole == UploadRole.CRC&&x.ClinicalUploadType== ClinicalUploadType.Structuring)
+ .WhereIf(readModule.ReadingSetType == ReadingSetType.ImageReading,x=>x.ClinicalDataLevel== ClinicalLevel.ImageRead)
+ .WhereIf(readModule.ReadingSetType == ReadingSetType.TumorReading, x => x.ClinicalDataLevel == ClinicalLevel.OncologyRead)
+ .Where(x => x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == readModule.TrialReadingCriterionId))
+ .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,
+ 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.IsSign = readModule.IsPMConfirm ?true : false;
+ x.ReadingClinicalDataState = readModule.IsPMConfirm ? ReadingClinicalDataStatus.HaveSigned : ReadingClinicalDataStatus.HaveChecked;
+
+ });
+
+ result.AddRange(clinicalresult);
+ }
+
+
+ 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 c0562e954..00d9647e9 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs
@@ -8,6 +8,10 @@ using System.Threading.Tasks;
namespace IRaCIS.Core.Application.Service.Reading.Dto
{
+ public class CRCSignClinicalDataInDto
+ {
+ public Guid ReadingClinicalDataId { get; set; }
+ }
public class AutoAddClinicalInDto
{
public Guid? SubjectId { get; set; }
@@ -18,9 +22,13 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
}
- public class GetCRCSubjectClinicalInDto
+ public class GetCRCSubjectClinicalInDto:PageInput
{
public Guid TrialId { get; set; }
+
+ public Guid? SubjectId { get; set; }
+
+ public string? SubjectCode { get; set; }
}
@@ -28,9 +36,33 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
{
public Guid SubjectId { get; set; }
+ public Guid ReadingClinicalDataId { get; set; }
+
+ ///
+ /// 上传角色
+ ///
+ public UploadRole UploadRole { get; set; }
public Guid TrialId { get; set; }
- public string SubjectCode { get; set; }
+ ///
+ /// 访视Id 或者模块Id
+ ///
+ public Guid ReadingId { get; set; }
+
+ ///
+ /// 临床级别
+ ///
+ public ClinicalLevel ClinicalDataLevel { get; set; }
+
+
+ public Guid? BaseLineVisitId { get; set; }
+
+ ///
+ /// 上传方式
+ ///
+ public ClinicalUploadType ClinicalUploadType { get; set; }
+
+ public string SubjectCode { get; set; }
public Guid ClinicalDataTrialSetId { get; set; }
public string ClinicalDataSetName { get; set; }
@@ -99,12 +131,33 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public string Answer { get; set; } = string.Empty;
}
- public class GetCRCConfirmListInDto
+ public class GetPMConfirmListInDto: PageInput
{
- public Guid TrialId { get; set; }
+ public Guid TrialId { get; set; }
+
+ public Guid TrialReadingCriterionId { get; set; }
+ }
+
+ public class GetCRCConfirmListInDto:PageInput
+ {
+
+ public bool? IsCRCConfirm { get; set; }
+
+ public bool? IsPMConfirm { get; set; }
+
+ public Guid? TrialReadingCriterionId { get; set; }
+
+ public Guid? SubjectId { get; set; }
+
+ public DateTime? StartTime { get; set; }
+ public DateTime? EndTime { get; set; }
+
+ public Guid TrialId { get; set; }
public Guid? ReadModuleId { get; set; }
- }
+
+ public string? SubjectCode { get; set; }
+ }
public class CRCCancelConfirmClinicalInDto
{
@@ -113,7 +166,16 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public Guid ReadModuleId { get; set; }
}
- public class GetCRCBeConfirmListInDto
+ public class GetClinicalDateListOutDto
+ {
+ public string ClinicalDataSetName { get; set; }
+
+
+ public List DateList { get; set; }
+ }
+
+
+ public class GetCRCBeConfirmListInDto
{
public Guid TrialId { get; set; }
@@ -121,8 +183,35 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
}
- public class GetCRCBeConfirmListOutDto
+ public class GetClinicalTableListInDto
+ {
+ public Guid TrialId { get; set; }
+
+ public Guid ReadModuleId { get; set; }
+ }
+
+
+ public class GetClinicalTableListOutDto: GetClinicalQuestionAnswerListOutDto
+ {
+ public string ClinicalDataSetName { get; set; }
+
+ ///
+ /// 模块名称
+ ///
+ public string ModuleName { get; set; }
+ }
+
+
+ public class GetCRCBeConfirm: GetCRCBeConfirmListOutDto
+ {
+ public Guid ReadModuleId { get; set; }
+ }
+
+
+ public class GetCRCBeConfirmListOutDto
{
+ public Guid ClinicalDataTrialSetId { get; set; }
+
public Guid ClinicalFormId { get; set; }
public string ClinicalDataSetName { get; set; }
@@ -130,18 +219,39 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public string ClinicalDataSetEnName { get; set; }
public DateTime CheckDate { get; set; }
+
+ public bool IsHaveTableQuestion { get; set; }
}
public class CRCConfirmClinicalInDto
{
public Guid TrialId { get; set; }
+ public Guid SubjectId { get; set; }
+
public Guid ReadModuleId { get; set; }
- }
+
+ ///
+ /// 临床数据是否完整
+ ///
+ public bool? IsClinicalDataComplete { get; set; }
+
+ ///
+ /// 临床数据是否盲化
+ ///
+ public bool? IsClinicalDataBlind { get; set; }
+
+ public bool IsConfirm { get; set; }
+
+ }
public class CRCClinicalForm
{
+ ///
+ /// 受试者Id
+ ///
+ public Guid SubjectId { get; set; }
public DateTime? CheckDate { get; set; }
public Guid ClinicalFormId { get; set; }
@@ -151,8 +261,13 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
///
public ClinicalLevel ClinicalDataLevel { get; set; }
+
+ public Guid ClinicalDataTrialSetId { get; set; }
+
public string ClinicalDataSetName { get; set; }
+ public bool IsHaveTableQuestion { get; set; }
+
public string ClinicalDataSetEnName { get; set; }
}
@@ -164,39 +279,69 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
/// 受试者ID
///
public Guid SubjectId { get; set; }
- public Guid ReadModuleId { get; set; }
- public bool IsPMConfirm { get; set; }
+ public bool IsNotNeedPMConfirm { get; set; } = false;
+ public Guid ReadModuleId { get; set; }
+
+ ///
+ /// 模块名称
+ ///
+ public string ModuleName { get; set; }
+
+ public string VisitBlindName { get; set; }
+
+ public bool IsPMConfirm { get; set; }
public ReadingSetType ReadingSetType { get; set; }
public bool IsCRCConfirm { get; set; } = false;
- public string SubjectCode { get; set; }
+
+ ///
+ /// CRC是否正在申请撤回
+ ///
+ public bool IsCRCApplicationRevoke { get; set; } = false;
+
+ public string SubjectCode { get; set; }
+
+ public bool IsHaveTableQuestion
+ {
+ get
+ {
+ return ClinicalFormList.Any(x => x.IsHaveTableQuestion);
+ }
+ }
///
/// 最晚拍片日期
///
public DateTime? LatestScanDate { get; set; }
+ public List ClinicalNameList
+ {
+ get
+ {
+ return this.ClinicalFormList.Select(x => x.ClinicalDataSetName).Distinct().ToList();
+ }
+ }
- public List ClinicalFormIdList { get; set; }
+
+ public List ClinicalFormList { get; set; }
public int FormCount
{
get
{
- return this.ClinicalFormIdList.Count();
+ return this.ClinicalFormList.Count();
}
}
}
+ public class DeleteClinicalFormInDto
+ {
+ public Guid ClinicalFormId { get; set; }
+ }
public class SubmitClinicalFormInDto
{
- ///
- /// VisitId
- ///
- public Guid? VisitId { get; set; }
-
///
/// VisitId
///
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalDataServiceViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalDataServiceViewModel.cs
index 8e0dd533f..fd279e1a1 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalDataServiceViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalDataServiceViewModel.cs
@@ -16,7 +16,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
///
/// 是否应用
///
- public bool IsApply { get; set; } = false;
+ public bool? IsApply { get; set; }
///
/// 名称
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs
index f38dd1bca..d5c21ac55 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs
@@ -156,6 +156,9 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
///
public Guid? Id { get; set; }
+
+ public bool IsVerify { get; set; } = false;
+
///
/// 问题名称
///
@@ -181,6 +184,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
///
public int? MaxAnswerLength { get; set; }
+ ///
+ /// 最大行数
+ ///
+ public int? MaxQuestionCount { get; set; }
+
///
/// 临床数据选项类型(无,自定义)
///
@@ -360,6 +368,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public Guid? Id { get; set; }
+ public bool IsVerify { get; set; } = false;
+
///
/// 问题名称
///
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs
index 85a126ec2..cd3713b1f 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs
@@ -10,8 +10,8 @@ using System.Threading.Tasks;
namespace IRaCIS.Core.Application.Service.Reading.Dto
{
- public class AddOrUpdateReadingClinicalDataDto
- {
+ public class AddOrUpdateReadingClinicalDataDto
+ {
public Guid? Id { get; set; }
@@ -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; }
}
@@ -127,9 +129,9 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public List PreviousOtherList { get; set; }
- public List PreviousSurgeryList{ get; set; }
+ public List PreviousSurgeryList { get; set; }
+
-
}
@@ -137,7 +139,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public class GetCRCClinicalDataInDto
{
[NotDefault]
- public Guid SubjectVisitId { get; set; }
+ public Guid SubjectVisitId { get; set; }
[NotDefault]
public Guid TrialId { get; set; }
@@ -163,7 +165,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
///
/// 文件名称
///
- public string FileName { get; set; }
+ public string FileName { get; set; }
///
/// 路径
@@ -182,29 +184,52 @@ 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;
}
///
/// 获取访视列表
///
- public class GetReadingClinicalDataListIndto
+ public class GetReadingClinicalDataListIndto
{
- [NotDefault]
+ [NotDefault]
public Guid SubjectId { get; set; }
[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; }
@@ -220,7 +245,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public bool IsBaseLine { get; set; }
}
- public class GetReadingClinicalDataPDFListIndto:PageInput
+ public class GetReadingClinicalDataPDFListIndto : PageInput
{
public Guid ReadingClinicalDataId { get; set; }
}
@@ -283,7 +308,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public class PMClinicalDataConfirmCommand
- {
+ {
public Guid Id { 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; }
///
/// 英文名称
@@ -363,11 +395,15 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
///
public bool IsCRCUpload { get; set; }
+ public bool IsNeedMerge { get; set; } = false;
+
+ public Guid ReadModuleId { get; set; }
+
///
/// 是否签名
///
- public bool IsSign { get; set; }
+ public bool IsSign { get; set; }
///
@@ -395,6 +431,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
// }
//}
+ public List ClinicalFromList { get; set; }
+
public List FileList { get; set; } = new List();
@@ -404,6 +442,19 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
}
+ public class ClinicalFromData
+ {
+ ///
+ /// 表单Id
+ ///
+ public Guid ClinicalFormId { get; set; }
+
+ ///
+ /// 检查日期
+ ///
+ public DateTime? CheckDate { get; set; }
+ }
+
public class GetFileDto
{
diff --git a/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs
index 29775bb1f..a7b15aee6 100644
--- a/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs
@@ -9,6 +9,17 @@ namespace IRaCIS.Core.Application.Service.Reading.Interface
{
public interface IClinicalAnswerService
{
- Task AutoAddCRCClinical(AutoAddClinicalInDto inDto);
- }
+ Task CRCSignClinicalData(CRCSignClinicalDataInDto inDto);
+
+ Task AutoAddCRCClinical(AutoAddClinicalInDto inDto);
+
+ Task PMConfirmClinical(CRCConfirmClinicalInDto inDto);
+
+ Task SubmitClinicalForm(SubmitClinicalFormInDto inDto);
+
+ Task CRCConfirmClinical(CRCConfirmClinicalInDto 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 3eaac36bf..131ce3167 100644
--- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
@@ -526,7 +526,7 @@ namespace IRaCIS.Application.Services
x.VisitTaskNum < taskInfo.VisitTaskNum &&
x.ArmEnum == taskInfo.ArmEnum &&
x.Id != inDto.VisitTaskId &&
- x.DoctorUserId == taskInfo.DoctorUserId &&
+ //x.DoctorUserId == taskInfo.DoctorUserId &&
x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId &&
x.ReadingTaskState == ReadingTaskState.HaveSigned &&
x.TaskState == TaskState.Effect &&
@@ -2165,6 +2165,7 @@ namespace IRaCIS.Application.Services
SubjectId = taskInfo.SubjectId,
TrialId = taskInfo.TrialId,
VisitTaskId = taskInfo.Id,
+
});
var isBaseLine = false;
@@ -2625,7 +2626,7 @@ namespace IRaCIS.Application.Services
x.SubjectId == taskInfo.SubjectId &&
x.VisitTaskNum < taskInfo.VisitTaskNum &&
x.ArmEnum == taskInfo.ArmEnum &&
- x.DoctorUserId == taskInfo.DoctorUserId &&
+ //x.DoctorUserId == taskInfo.DoctorUserId &&
x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId &&
x.ReadingTaskState == ReadingTaskState.HaveSigned &&
x.TaskState == TaskState.Effect &&
@@ -2641,7 +2642,7 @@ namespace IRaCIS.Application.Services
x.SubjectId == taskInfo.SubjectId &&
x.VisitTaskNum <= taskInfo.VisitTaskNum &&
x.ArmEnum == taskInfo.ArmEnum &&
- x.DoctorUserId == taskInfo.DoctorUserId &&
+ //x.DoctorUserId == taskInfo.DoctorUserId &&
x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId &&
x.ReadingTaskState == ReadingTaskState.HaveSigned &&
(x.TaskState == TaskState.Effect || x.TaskState == TaskState.Freeze) &&
@@ -2665,7 +2666,7 @@ namespace IRaCIS.Application.Services
x.IsAnalysisCreate == taskInfo.IsAnalysisCreate &&
x.ArmEnum == taskInfo.ArmEnum &&
x.IsSelfAnalysis == taskInfo.IsSelfAnalysis &&
- x.DoctorUserId == taskInfo.DoctorUserId &&
+ //x.DoctorUserId == taskInfo.DoctorUserId &&
x.TaskState == TaskState.Effect && x.VisitTaskNum <= taskInfo.VisitTaskNum).Select(x => x.Id).ToListAsync();
break;
}
diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadModuleService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadModuleService.cs
index e5dff07f2..87908db6a 100644
--- a/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadModuleService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadModuleService.cs
@@ -8,6 +8,7 @@ using IRaCIS.Core.Application.Service;
using IRaCIS.Core.Application.ViewModel;
using IRaCIS.Core.Infrastructure;
using IRaCIS.Core.Application.Filter;
+using IRaCIS.Core.Domain.Models;
namespace IRaCIS.Application.Services
{
@@ -25,6 +26,7 @@ namespace IRaCIS.Application.Services
private readonly IRepository _trialRepository;
private readonly IVisitTaskHelpeService _visitTaskHelpeService;
private readonly IRepository _visitTaskRepository;
+ private readonly IRepository _readModuleCriterionFromRepository;
private readonly IRepository _clinicalDataTrialSetRepository;
private readonly IRepository _readModuleViewRepository;
private readonly IRepository _readingQuestionCriterionTrialRepository;
@@ -41,6 +43,7 @@ namespace IRaCIS.Application.Services
IRepository trialRepository,
IVisitTaskHelpeService visitTaskHelpeService,
IRepository visitTaskRepository,
+ IRepository readModuleCriterionFromRepository,
IRepository clinicalDataTrialSetRepository,
IRepository readModuleViewRepository,
IRepository readingQuestionCriterionTrialRepository,
@@ -57,6 +60,7 @@ namespace IRaCIS.Application.Services
this._trialRepository = trialRepository;
this._visitTaskHelpeService = visitTaskHelpeService;
this._visitTaskRepository = visitTaskRepository;
+ this._readModuleCriterionFromRepository = readModuleCriterionFromRepository;
this._clinicalDataTrialSetRepository = clinicalDataTrialSetRepository;
this._readModuleViewRepository = readModuleViewRepository;
this._readingQuestionCriterionTrialRepository = readingQuestionCriterionTrialRepository;
@@ -115,6 +119,13 @@ namespace IRaCIS.Application.Services
[HttpPost]
public async Task ChangeCutOffVisit(ChangeCutOffVisitInDto inDto)
{
+
+ if (await _readModuleRepository.AnyAsync(x => x.Id == inDto.Id && x.IsCRCConfirm))
+ {
+ //---CRC已经确认临床数据 不允许编辑
+ throw new BusinessValidationFailedException(_localizer["ReadModule_CRCConfirmCanNtoEdit"]);
+ }
+
await _readModuleRepository.UpdatePartialFromQueryAsync(x => x.Id == inDto.Id, x => new ReadModule() {
SubjectVisitId=inDto.SubjectVisitIdId,
ModuleName=inDto.Name,
@@ -480,6 +491,14 @@ namespace IRaCIS.Application.Services
return ResponseOutput.NotOk(_localizer["ReadModule_SignedDataCannotDelete"]);
}
+
+
+ if (await _readModuleRepository.AnyAsync(x => x.Id == readModuleId&&x.IsCRCConfirm))
+ {
+ //---CRC已经确认临床数据 不允许删除
+ return ResponseOutput.NotOk(_localizer["ReadModule_CRCConfirmClinicalData"]);
+ }
+
//增加标准
if (readModule.ModuleType==ModuleTypeEnum.Global&&(await _readModuleRepository.AnyAsync(x=>x.ModuleType==ModuleTypeEnum.Oncology&&x.SubjectVisitId== readModule.SubjectVisitId && x.TrialReadingCriterionId==readModule.TrialReadingCriterionId)))
{
@@ -499,6 +518,7 @@ namespace IRaCIS.Application.Services
TaskState = TaskState.Adbandon
});
+
await _readModuleRepository.UpdatePartialFromQueryAsync(t => t.Id == readModuleId, x => new ReadModule()
{
diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs
index dc3a51093..5a4f0b1a1 100644
--- a/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs
+++ b/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs
@@ -927,7 +927,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
var LastVisitTaskId = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit &&
x.TrialReadingCriterionId == taskinfo.TrialReadingCriterionId &&
x.IsAnalysisCreate == taskinfo.IsAnalysisCreate &&
- x.DoctorUserId == taskinfo.DoctorUserId &&
+ //x.DoctorUserId == taskinfo.DoctorUserId &&
x.IsSelfAnalysis == taskinfo.IsSelfAnalysis &&
x.SubjectId == taskinfo.SubjectId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.ArmEnum == taskinfo.ArmEnum
&& x.VisitTaskNum < taskinfo.VisitTaskNum && x.TaskState == TaskState.Effect
diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/PCWG3CalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/PCWG3CalculateService.cs
index f396c0497..051b12e33 100644
--- a/IRaCIS.Core.Application/Service/ReadingCalculate/PCWG3CalculateService.cs
+++ b/IRaCIS.Core.Application/Service/ReadingCalculate/PCWG3CalculateService.cs
@@ -381,7 +381,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
var LastVisitTaskId = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit &&
x.TrialReadingCriterionId == taskinfo.TrialReadingCriterionId &&
x.IsAnalysisCreate == taskinfo.IsAnalysisCreate &&
- x.DoctorUserId ==taskinfo.DoctorUserId &&
+ //x.DoctorUserId ==taskinfo.DoctorUserId &&
x.IsSelfAnalysis == taskinfo.IsSelfAnalysis &&
x.SubjectId == taskinfo.SubjectId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.VisitTaskNum < taskinfo.VisitTaskNum && x.TaskState == TaskState.Effect && x.ArmEnum == taskinfo.ArmEnum
).OrderByDescending(x => x.VisitTaskNum).Select(x => x.Id).FirstOrDefaultAsync();
diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs
index c44e8815c..d3a48d2b3 100644
--- a/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs
+++ b/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs
@@ -733,7 +733,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
var LastVisitTaskId = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit &&
x.TrialReadingCriterionId == taskinfo.TrialReadingCriterionId &&
x.IsAnalysisCreate== taskinfo.IsAnalysisCreate&&
- x.DoctorUserId == taskinfo.DoctorUserId &&
+ //x.DoctorUserId == taskinfo.DoctorUserId &&
x.IsSelfAnalysis== taskinfo.IsSelfAnalysis &&
x.SubjectId == taskinfo.SubjectId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.VisitTaskNum < taskinfo.VisitTaskNum && x.TaskState == TaskState.Effect && x.ArmEnum == taskinfo.ArmEnum
).OrderByDescending(x => x.VisitTaskNum).Select(x => x.Id).FirstOrDefaultAsync();
diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1_BMCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1_BMCalculateService.cs
index bd528675f..430750be8 100644
--- a/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1_BMCalculateService.cs
+++ b/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1_BMCalculateService.cs
@@ -728,7 +728,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
var LastVisitTaskId = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit &&
x.TrialReadingCriterionId == taskinfo.TrialReadingCriterionId &&
x.IsAnalysisCreate== taskinfo.IsAnalysisCreate&&
- x.DoctorUserId == taskinfo.DoctorUserId &&
+ //x.DoctorUserId == taskinfo.DoctorUserId &&
x.IsSelfAnalysis== taskinfo.IsSelfAnalysis &&
x.SubjectId == taskinfo.SubjectId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.VisitTaskNum < taskinfo.VisitTaskNum && x.TaskState == TaskState.Effect && x.ArmEnum == taskinfo.ArmEnum
).OrderByDescending(x => x.VisitTaskNum).Select(x => x.Id).FirstOrDefaultAsync();
diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/SelfDefineCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/SelfDefineCalculateService.cs
index e0b34c9fa..3e0bf3ea9 100644
--- a/IRaCIS.Core.Application/Service/ReadingCalculate/SelfDefineCalculateService.cs
+++ b/IRaCIS.Core.Application/Service/ReadingCalculate/SelfDefineCalculateService.cs
@@ -383,7 +383,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
var LastVisitTaskId = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit &&
x.TrialReadingCriterionId == taskinfo.TrialReadingCriterionId &&
x.IsAnalysisCreate == taskinfo.IsAnalysisCreate &&
- x.DoctorUserId == taskinfo.DoctorUserId &&
+ //x.DoctorUserId == taskinfo.DoctorUserId &&
x.IsSelfAnalysis == taskinfo.IsSelfAnalysis &&
x.SubjectId == taskinfo.SubjectId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.VisitTaskNum < taskinfo.VisitTaskNum && x.TaskState == TaskState.Effect && x.ArmEnum == taskinfo.ArmEnum
).OrderByDescending(x => x.VisitTaskNum).Select(x => x.Id).FirstOrDefaultAsync();
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs
index 5f446672e..f8d22c930 100644
--- a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs
@@ -105,10 +105,13 @@ namespace IRaCIS.Core.Application.Contracts
public int? ToBeApprovalCount { get; set; }
}
+ public class GetPMClinicalDataToBeDoneListOutDto: TrialBaseInfoDto
+ {
+ public int? ToBeApprovalCount { get; set; }
+ }
public class ReviewerSelectToBeDoneQuery : PageInput
{
-
}
public class ReviewerSelectToBeDoneDto : TrialBaseInfoDto
@@ -253,6 +256,12 @@ namespace IRaCIS.Core.Application.Contracts
public int? UrgentCount { get; set; }
public int? ToBeDealedCount { get; set; }
+
+ public int? ToAllCount { get; set; }
+
+ public int? ToBeVisitCount { get; set; }
+
+ public int? ReadModuleCount { get; set; }
}
public class TrialToBeDoneQuery : PageInput
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs
index f69071b47..91b06c204 100644
--- a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs
@@ -20,15 +20,19 @@ namespace IRaCIS.Core.Application
private readonly IRepository _trialUserRepository;
private readonly IRepository _trialDocumentRepository;
private readonly IRepository _systemDocumentRepository;
+ private readonly IRepository _readModuleRepository;
private readonly IRepository _systemNoticeRepository;
public PersonalWorkstation(IRepository trialRepository, IRepository trialUserRepository, IRepository trialDocumentRepository,
- IRepository systemDocumentRepository, IRepository systemNoticeRepository)
+ IRepository systemDocumentRepository,
+ IRepository readModuleRepository,
+ IRepository systemNoticeRepository)
{
_trialRepository = trialRepository;
_trialUserRepository = trialUserRepository;
_trialDocumentRepository = trialDocumentRepository;
_systemDocumentRepository = systemDocumentRepository;
+ this._readModuleRepository = readModuleRepository;
_systemNoticeRepository = systemNoticeRepository;
}
@@ -200,7 +204,7 @@ namespace IRaCIS.Core.Application
ToBeRepliedCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.CVIng &&
u.CheckChallengeDialogList.OrderByDescending(t => t.CreateTime).First().UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count(),
- });
+ }).Where(x => x.ToBeRepliedCount > 0);
@@ -243,7 +247,7 @@ namespace IRaCIS.Core.Application
UrgentCount = g.Where(u => u.OriginalReReadingTask.IsUrgent == true).Count(),
ToBeApprovalCount = g.Count(),
- });
+ }).Where(x => x.ToBeApprovalCount > 0);
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrEmpty(inQuery.SortField) ? nameof(ReReadingApplyToBeDoneDto.TrialId) : inQuery.SortField, inQuery.Asc);
@@ -281,7 +285,7 @@ namespace IRaCIS.Core.Application
IsUrgent = t.IsUrgent || t.IsSubjectExpeditedView,
ToBeApprovalCount = t.EnrollList.Where(u => u.EnrollStatus == EnrollStatus.InviteIntoGroup).Count()
- });
+ }).Where(x => x.ToBeApprovalCount > 0);
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrEmpty(inQuery.SortField) ? nameof(ReviewerSelectToBeDoneDto.TrialId) : inQuery.SortField, inQuery.Asc);
@@ -293,6 +297,43 @@ namespace IRaCIS.Core.Application
}
+ ///
+ /// 获取PM核对临床数据
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task>> 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()
+ }).Where(x => x.ToBeApprovalCount > 0);
+
+ 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
@@ -321,7 +362,7 @@ namespace IRaCIS.Core.Application
IsUrgent = t.IsUrgent || t.IsSubjectExpeditedView,
ToBeApprovalCount = t.EnrollList.Where(u => u.EnrollStatus == EnrollStatus.HasCommittedToCRO).Count()
- });
+ }).Where(x => x.ToBeApprovalCount > 0) ;
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrEmpty(inQuery.SortField) ? nameof(ReviewerSelectToBeDoneDto.TrialId) : inQuery.SortField, inQuery.Asc);
@@ -358,7 +399,7 @@ namespace IRaCIS.Core.Application
UrgentCount = g.Where(u => u.OriginalReReadingTask.IsUrgent == true).Count(),
ToBeApprovalCount = g.Count(),
- });
+ }).Where(x => x.ToBeApprovalCount > 0);
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrEmpty(inQuery.SortField) ? nameof(ReReadingApprovalToBeDoneDto.TrialId) : inQuery.SortField, inQuery.Asc);
@@ -399,9 +440,50 @@ namespace IRaCIS.Core.Application
ExperimentName = t.ExperimentName,
TrialCode = t.TrialCode,
UrgentCount = t.SubjectVisitList.Where(u => u.IsBaseLine && u.SubmitState != SubmitStateEnum.Submitted && u.IsUrgent).Count(),
- ToBeDealedCount = t.SubjectVisitList.Where(u => u.IsBaseLine && u.SubmitState != SubmitStateEnum.Submitted).Count(),
+ ToBeDealedCount = t.ReadingClinicalDataList.Where(x=>!x.IsSign&& x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.SubjectVisit&& x.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.Subject).Count(),
+ ToBeVisitCount= t.ReadingClinicalDataList.Where(x => !x.IsSign && x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit).Count(),
+ ToAllCount= t.ReadingClinicalDataList.Where(x => !x.IsSign && x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC ).Count(),
+ ReadModuleCount =t.ReadModuleList.Where(x=>!x.IsPMConfirm).Count(),
+ }).Where(x=>x.ToBeDealedCount > 0);
- });
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrEmpty(inQuery.SortField) ? nameof(ImageClinicalDataToBeDoneDto.TrialId) : inQuery.SortField, inQuery.Asc);
+
+ var toBeDealedCount = _subjectVisitRepository
+ //.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id) && t.Trial.clinicalDataTrialSets.Any(t => t.ClinicalDataLevel == ClinicalLevel.Subject && t.IsConfirm))
+ .Where(u => u.IsBaseLine && u.SubmitState != SubmitStateEnum.Submitted).Count();
+
+ return ResponseOutput.Ok(result, new { TotalToBeDealedCount = toBeDealedCount });
+
+ }
+
+
+ ///
+ /// 临床数据 --CRC 待确认
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task>> GetImageClinicalDataToBeConfirmList(ImageClinicalDataToBeDoneQuery inQuery,
+ [FromServices] IRepository _subjectVisitRepository,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ var query = _trialRepository
+ .Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id))
+ //.Where(t => t.clinicalDataTrialSets.Any(t => t.ClinicalDataLevel == ClinicalLevel.Subject && t.IsConfirm))
+ .Select(t => new ImageClinicalDataToBeDoneDto()
+ {
+ TrialId = t.Id,
+ ResearchProgramNo = t.ResearchProgramNo,
+ ExperimentName = t.ExperimentName,
+ TrialCode = t.TrialCode,
+ UrgentCount = t.SubjectVisitList.Where(u => u.IsBaseLine && u.SubmitState != SubmitStateEnum.Submitted && u.IsUrgent).Count(),
+ ToBeDealedCount = t.ReadingClinicalDataList.Where(x => !x.IsSign && x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.SubjectVisit && x.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.Subject).Count(),
+ ToBeVisitCount = t.ReadingClinicalDataList.Where(x => !x.IsSign && x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit).Count(),
+ ToAllCount = t.ReadingClinicalDataList.Where(x => !x.IsSign && x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC).Count(),
+ ReadModuleCount = t.ReadModuleList.Where(x => !x.IsPMConfirm).Count(),
+ }).Where(x => x.ReadModuleCount > 0);
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrEmpty(inQuery.SortField) ? nameof(ImageClinicalDataToBeDoneDto.TrialId) : inQuery.SortField, inQuery.Asc);
@@ -448,7 +530,7 @@ namespace IRaCIS.Core.Application
.Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IQC).Count(),
- });
+ }).Where(x => x.ToBeDealedCount > 0); ;
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrEmpty(inQuery.SortField) ? nameof(ImageQuestionToBeDoneDto.TrialId) : inQuery.SortField, inQuery.Asc);
@@ -489,7 +571,7 @@ namespace IRaCIS.Core.Application
ToBeReplyedCount = t.SubjectVisitList.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id))
.Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply).Count()
- });
+ }).Where(x => x.ToBeReplyedCount > 0);
@@ -535,7 +617,7 @@ namespace IRaCIS.Core.Application
.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id))
.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsPMBackOrReReading).Count(),
- });
+ }).Where(x => x.ToBeReUploadCount > 0);
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrEmpty(inQuery.SortField) ? nameof(ImageReUploadToBeDoneDto.TrialId) : inQuery.SortField, inQuery.Asc);
@@ -579,7 +661,7 @@ namespace IRaCIS.Core.Application
.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id))
.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit).Count(),
- });
+ }).Where(x => x.ToBeDealedCount > 0); ;
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrEmpty(inQuery.SortField) ? nameof(ImageSubmittedToBeDoneDto.TrialId) : inQuery.SortField, inQuery.Asc);
@@ -632,7 +714,7 @@ namespace IRaCIS.Core.Application
//待审核通过,统计从已领取到QC提交之间的 已领取 待审核 审核中 (审核完成 领取人就会清理 所以只用查询当前领取人是自己的就好了)
ToBeReviewedCount = t.SubjectVisitList.Where(u => u.CurrentActionUserId == _userInfo.Id).Count()
- });
+ }).Where(x => x.UrgentCount > 0);
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrEmpty(inQuery.SortField) ? nameof(ImageQualityToBeDoneDto.TrialId) : inQuery.SortField, inQuery.Asc);
@@ -677,7 +759,7 @@ namespace IRaCIS.Core.Application
ToBeDealedCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
.Where(u => u.CreateUserId == _userInfo.Id && u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count(),
- });
+ }).Where(x => x.ToBeDealedCount > 0); ;
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrEmpty(inQuery.SortField) ? nameof(ImageQuestionToBeDoneDto.TrialId) : inQuery.SortField, inQuery.Asc);
@@ -749,9 +831,9 @@ namespace IRaCIS.Core.Application
HaveSignedCount = c.VisitTaskList.Where(t => t.DoctorUserId == _userInfo.Id && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze)
&& t.ReadingTaskState == ReadingTaskState.HaveSigned).Count(),
- })
+ }).Where(x => x.UnReadCount > 0);
- ;
+ ;
#region 废弃
//var query = _trialRepository
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs
index 3f3097efc..c449c05d5 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)
@@ -1043,9 +1044,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 3608eb7fa..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
+ }
+
///
/// 临床表格问题标识
///
@@ -1924,6 +1947,9 @@ namespace IRaCIS.Core.Domain.Share
HaveUploaded = 1,
+ ///
+ /// 待核查
+ ///
HaveChecked = 2,
HaveSigned = 3
diff --git a/IRaCIS.Core.Domain/Reading/ClinicalData/ClinicalDataTrialSet.cs b/IRaCIS.Core.Domain/Reading/ClinicalData/ClinicalDataTrialSet.cs
index fef381af9..4eb814256 100644
--- a/IRaCIS.Core.Domain/Reading/ClinicalData/ClinicalDataTrialSet.cs
+++ b/IRaCIS.Core.Domain/Reading/ClinicalData/ClinicalDataTrialSet.cs
@@ -100,8 +100,11 @@ namespace IRaCIS.Core.Domain.Models
[JsonIgnore]
public List TrialClinicalDataSetCriteriaList { get; set; }
+ [JsonIgnore]
+ public List TrialClinicalQuestionList { get; set; }
- public string CriterionEnumListStr { get; set; } = String.Empty;
+
+ public string CriterionEnumListStr { get; set; } = String.Empty;
public List CriterionEnumList => CriterionEnumListStr.Split('|', StringSplitOptions.RemoveEmptyEntries).Where(t => !string.IsNullOrEmpty(t) && int.TryParse(t.Trim(), out var s)).Select(t => int.Parse(t.Trim())).ToList();
diff --git a/IRaCIS.Core.Domain/Reading/ClinicalData/ReadingClinicalData.cs b/IRaCIS.Core.Domain/Reading/ClinicalData/ReadingClinicalData.cs
index db9e8f70a..bdcb87f34 100644
--- a/IRaCIS.Core.Domain/Reading/ClinicalData/ReadingClinicalData.cs
+++ b/IRaCIS.Core.Domain/Reading/ClinicalData/ReadingClinicalData.cs
@@ -75,7 +75,14 @@ namespace IRaCIS.Core.Domain.Models
public ClinicalDataTrialSet ClinicalDataTrialSet { get; set; }
- [JsonIgnore]
+
+
+ [JsonIgnore]
+ [ForeignKey("TrialId")]
+
+ public Trial Trial { get; set; }
+
+ [JsonIgnore]
[ForeignKey("ReadingId")]
public SubjectVisit SubjectVisit { get; set; }
@@ -96,8 +103,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 f741b2f93..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; }
///
/// 临床数据选项类型(无,自定义)
@@ -162,7 +167,11 @@ namespace IRaCIS.Core.Domain.Models
/// 单位
///
public string Unit { get; set; } = string.Empty;
- }
+
+ [JsonIgnore]
+ [ForeignKey("TrialClinicalId")]
+ public ClinicalDataTrialSet ClinicalDataTrialSet { get; set; }
+ }
}
diff --git a/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalForm.cs b/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalForm.cs
index f41eb924f..b59d1374d 100644
--- a/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalForm.cs
+++ b/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalForm.cs
@@ -44,11 +44,6 @@ namespace IRaCIS.Core.Domain.Models
///
public Guid ClinicalDataTrialSetId { get; set; }
- ///
- /// VisitId
- ///
- public Guid? VisitId { get; set; }
-
///
/// VisitId
///
@@ -59,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 fba287340..e45d82b4b 100644
--- a/IRaCIS.Core.Domain/Reading/ReadingPeriod/ReadModule.cs
+++ b/IRaCIS.Core.Domain/Reading/ReadingPeriod/ReadModule.cs
@@ -79,25 +79,42 @@ namespace IRaCIS.Core.Domain.Models
public bool IsCRCConfirm { get; set; } = false;
public bool IsPMConfirm { get; set; } = false;
- public bool IsDeleted { get; set; }
+
+ public bool IsNotNeedPMConfirm { get; set; } = false;
+
+ ///
+ /// CRC是否正在申请撤回
+ ///
+ public bool IsCRCApplicationRevoke { get; set; } = false;
+ public bool IsDeleted { get; set; }
public DateTime? DeletedTime { get; set; }
public Guid? DeleteUserId { get; set; }
- /////
- /////
- /////
- //public decimal VisitNum { get; set; }
+ ///
+ /// 临床数据是否完整
+ ///
+ public bool? IsClinicalDataComplete { get; set; }
- // [JsonIgnore]
- /////
- ///// 对应
- /////
- //[ForeignKey("ReadModuleId")]
- //public ReadModule ReadModuleModel { get; set; }
+ ///
+ /// 临床数据是否盲化
+ ///
+ public bool? IsClinicalDataBlind { get; set; }
- [JsonIgnore]
+ /////
+ /////
+ /////
+ //public decimal VisitNum { get; set; }
+
+ // [JsonIgnore]
+ /////
+ ///// 对应
+ /////
+ //[ForeignKey("ReadModuleId")]
+ //public ReadModule ReadModuleModel { get; set; }
+
+ [JsonIgnore]
///
/// 受试者
///
@@ -119,11 +136,15 @@ namespace IRaCIS.Core.Domain.Models
[ForeignKey("SubjectVisitId")]
public SubjectVisit SubjectVisit { get; set; }
+ [JsonIgnore]
+ [ForeignKey("TrialId")]
+ public Trial Trial { get; set; }
- ///
- /// 阅片配置的类型
- ///
- public ReadingSetType ReadingSetType { get; set; }
+
+ ///
+ /// 阅片配置的类型
+ ///
+ public ReadingSetType ReadingSetType { get; set; }
diff --git a/IRaCIS.Core.Domain/Trial/Trial.cs b/IRaCIS.Core.Domain/Trial/Trial.cs
index 82d213ea8..e173f31f1 100644
--- a/IRaCIS.Core.Domain/Trial/Trial.cs
+++ b/IRaCIS.Core.Domain/Trial/Trial.cs
@@ -53,6 +53,8 @@ namespace IRaCIS.Core.Domain.Models
public List TrialSiteList { get; set; } = new List();
[JsonIgnore]
public List TrialSiteUserList { get; set; } = new List();
+ [JsonIgnore]
+ public List ReadModuleList { get; set; } = new List();
public Guid IndicationTypeId { get; set; } = Guid.Empty;
@@ -83,8 +85,8 @@ namespace IRaCIS.Core.Domain.Models
public virtual ICollection ClinicalTrialProjectDetails { get; set; }
[JsonIgnore]
public virtual ICollection TrialDicList { get; set; }
-
-
+ [JsonIgnore]
+ public List ReadingClinicalDataList { get; set; }
[StringLength(100)]
public string TrialCode { get; set; } = string.Empty;
diff --git a/IRaCIS.Core.Domain/Visit/Subject.cs b/IRaCIS.Core.Domain/Visit/Subject.cs
index d1a4e131f..82adee191 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; }
public Guid? ClaimUserId { 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 });
+ // }
+
+
+ //}
+}