diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs
new file mode 100644
index 000000000..384008e24
--- /dev/null
+++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs
@@ -0,0 +1,185 @@
+//--------------------------------------------------------------------
+// 此代码由T4模板自动生成 byzhouhang 20210918
+// 生成时间 2023-06-15 15:06:06
+// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
+//--------------------------------------------------------------------
+
+using Microsoft.AspNetCore.Mvc;
+using IRaCIS.Core.Application.Interfaces;
+using IRaCIS.Core.Application.ViewModel;
+using IRaCIS.Core.Application.Service.Reading.Dto;
+using IRaCIS.Core.Infra.EFCore.Common;
+using IRaCIS.Core.Domain.Share;
+using MassTransit;
+
+namespace IRaCIS.Core.Application.Service
+{
+ ///
+ /// 临床答案
+ ///
+ [ApiExplorerSettings(GroupName = "Reading")]
+ public class ClinicalAnswerService : BaseService
+ {
+
+ private readonly IRepository _trialClinicalQuestionRepository;
+
+ private readonly IRepository _systemClinicalQuestionRepository;
+
+
+ private readonly IRepository _systemClinicalTableQuestionRepository;
+
+ private readonly IRepository _trialClinicalTableQuestionRepository;
+
+ private readonly IRepository _clinicalDataTrialSetRepository;
+
+ private readonly IRepository _clinicalFormRepository;
+
+ private readonly IRepository _clinicalQuestionAnswerRepository;
+
+ private readonly IRepository _clinicalTableAnswerRepository;
+
+ private readonly IClinicalQuestionService _iClinicalQuestionService;
+
+
+ public ClinicalAnswerService(IRepository trialClinicalQuestionRepository,
+ IRepository systemClinicalTableQuestionRepository,
+ IRepository trialClinicalTableQuestionRepository,
+ IRepository clinicalFormRepository,
+ IRepository clinicalTableAnswerRepository,
+ IRepository clinicalQuestionAnswerRepository,
+ IClinicalQuestionService iClinicalQuestionService,
+ IRepository clinicalDataTrialSetRepository,
+ IRepository systemClinicalQuestionRepository
+ )
+ {
+ _clinicalQuestionAnswerRepository = clinicalQuestionAnswerRepository;
+ _systemClinicalTableQuestionRepository = systemClinicalTableQuestionRepository;
+ _trialClinicalQuestionRepository = trialClinicalQuestionRepository;
+ _trialClinicalTableQuestionRepository = trialClinicalTableQuestionRepository;
+ _systemClinicalQuestionRepository = systemClinicalQuestionRepository;
+ _clinicalDataTrialSetRepository = clinicalDataTrialSetRepository;
+ _clinicalFormRepository = clinicalFormRepository;
+ _clinicalTableAnswerRepository = clinicalTableAnswerRepository;
+ _iClinicalQuestionService = iClinicalQuestionService;
+ }
+
+ ///
+ /// 获取CRC受试者临床数据
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetCRCSubjectClinicalList(GetCRCSubjectClinicalInDto inDto)
+ {
+ var result =await _clinicalDataTrialSetRepository.Where(x => x.TrialId == inDto.TrialId).OrderBy(x=>x.ClinicalDataSetName).Select(x => new GetCRCSubjectClinicalOutDto()
+ {
+ ClinicalDataTrialSetId = x.Id,
+ ClinicalDataSetName = x.ClinicalDataSetName.LanguageName(x.ClinicalDataSetEnName, _userInfo.IsEn_Us),
+
+ }).ToListAsync();
+
+
+ var clinicalData = await _clinicalFormRepository.Where(x => x.SubjectId == inDto.TrialId).ToListAsync();
+
+ result.ForEach(x =>
+ {
+ x.ClinicalCount = clinicalData.Where(y => y.ClinicalDataTrialSetId == x.ClinicalDataTrialSetId).Count();
+ });
+
+ return result;
+ }
+
+ ///
+ /// 获取表单列表
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task GetClinicalQuestionFormList(GetClinicalQuestionAnswerListInDto inDto)
+ {
+ var result = new GetClinicalQuestionAnswerListOutDto();
+ 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)
+ .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+
+ var answers = await _clinicalQuestionAnswerRepository.Where(x => x.SubjectId == inDto.SubjectId && x.ClinicalDataTrialSetId == inDto.ClinicalDataTrialSetId)
+ .Select(x => new
+ {
+ x.ClinicalFormId,
+ x.ClinicalForm.CheckDate,
+ x.QuestionId,
+ x.Answer
+ })
+ .ToListAsync();
+
+ var ClinicalFormIds = answers.OrderBy(x=>x.CheckDate).Select(x => x.ClinicalFormId).Distinct().ToList();
+ ClinicalFormIds.ForEach(x =>
+ {
+ var dic = answers.Where(y => y.ClinicalFormId == x).ToDictionary(x => x.QuestionId.ToString(), x => x.Answer);
+ dic.Add("clinicalFormId", x.ToString());
+ result.AnswerList.Add(dic);
+
+ });
+ return result;
+ }
+
+ ///
+ /// 获取临床数据表单问题
+ ///
+ ///
+ ///
+ public async Task GetClinicalFormInfo(GetClinicalFormInfoInDto inDto)
+ {
+ var formInfo = await _clinicalFormRepository.Where(x => x.Id == inDto.ClinicalFormId).FirstNotNullAsync();
+
+ var questionAnswer = await _clinicalQuestionAnswerRepository.Where(x => x.ClinicalFormId == inDto.ClinicalFormId).Select(x => new ClinicalFormQuestionAnswer
+ {
+ QuestionId = x.QuestionId,
+ Answer = x.Answer
+ }).ToListAsync();
+
+ var tableAnswer = await _clinicalTableAnswerRepository.Where(x => x.ClinicalFormId == inDto.ClinicalFormId).Select(x => new ClinicalFormTableQuestionAnswer
+ {
+ TableQuestionId = x.TableQuestionId,
+ Answer = x.Answer,
+ QuestionId = x.QuestionId,
+ RowIndex = x.ClinicalAnswerRowInfo.RowIndex
+ }).ToListAsync();
+
+ var questions = await _trialClinicalQuestionRepository.Where(x => x.TrialClinicalId == formInfo.ClinicalDataTrialSetId)
+ .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+
+ var tableQuestions = await _trialClinicalQuestionRepository.Where(x => x.TrialClinicalId == formInfo.ClinicalDataTrialSetId)
+ .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+
+
+ var result = questions.Where(x => x.ClinicalQuestionType == ReadingQestionType.Group).ToList();
+
+ result.ForEach(x =>
+ {
+ _iClinicalQuestionService.FindChildQuestion(x, questions, tableQuestions, questionAnswer, tableAnswer);
+ });
+
+ return new GetClinicalFormInfoOutDto()
+ {
+
+ Question = result
+ };
+ }
+
+
+
+ ///
+ /// 提交临床数据表单
+ ///
+ ///
+ ///
+ public async Task SubmitClinicalForm(SubmitClinicalFormInDto inDto)
+ {
+
+ }
+
+ }
+}
diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs
index 763be10a4..115af7ba3 100644
--- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs
@@ -101,14 +101,27 @@ namespace IRaCIS.Core.Application.Service
///
///
///
- public void FindChildQuestion(ClinicalQuestionPreviewDto item, List questions, List tableQuestions)
+ 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.Answer = answers.Where(x => x.QuestionId == item.Id).Select(x => x.Answer).FirstOrDefault()??string.Empty;
- item.TableQuestions = tableQuestions.Where(x => x.QuestionId == item.Id).ToList();
+ var tableIndexs = tableAnswers.Where(x => x.QuestionId == item.Id).Select(x => x.RowIndex).Distinct().OrderBy(x=>x).ToList();
+
+ item.TableAnswer = new List>();
+
+ tableIndexs.ForEach(x =>
+ {
+ item.TableAnswer.Add(tableAnswers.Where(y => y.RowIndex == x).ToDictionary(y => y.TableQuestionId, y => y.Answer));
+
+
+ });
+
+
+ item.TableQuestions = tableQuestions.Where(x => x.QuestionId == item.Id).OrderBy(x=>x.ShowOrder).ToList();
item.Childrens.ForEach(x => {
- this.FindChildQuestion(x, questions, tableQuestions);
+ this.FindChildQuestion(x, questions, tableQuestions, answers, tableAnswers);
});
}
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs
new file mode 100644
index 000000000..18322e2d7
--- /dev/null
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs
@@ -0,0 +1,85 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IRaCIS.Core.Application.Service.Reading.Dto
+{
+ public class GetCRCSubjectClinicalInDto
+ {
+ public Guid SubjectId { get; set; }
+
+ public Guid TrialId { get; set; }
+ }
+
+
+ public class GetCRCSubjectClinicalOutDto
+ {
+ public Guid ClinicalDataTrialSetId { get; set; }
+
+ public string ClinicalDataSetName { get; set; }
+
+ public int ClinicalCount { get; set; }
+ }
+
+
+
+
+ public class GetClinicalQuestionAnswerListInDto
+ {
+ public Guid SubjectId { get; set; }
+
+ public Guid ClinicalDataTrialSetId { get; set; }
+ }
+
+
+ public class GetClinicalQuestionAnswerListOutDto
+ {
+ public List QuestionList { get; set; }
+
+ public List> AnswerList { get; set; }
+ }
+
+ public class GetClinicalFormInfoInDto
+ {
+ public Guid ClinicalFormId { get; set; }
+ }
+
+ public class GetClinicalFormInfoOutDto
+ {
+ public List Question { get; set; }
+ }
+
+ public class ClinicalFormQuestionAnswer
+ {
+ public Guid QuestionId { get; set; }
+
+ public string Answer { get; set; } = string.Empty;
+ }
+
+ public class ClinicalFormTableQuestionAnswer
+ {
+ public Guid TableQuestionId { get; set; }
+
+ public int RowIndex { get; set; }
+
+ public Guid QuestionId { get; set; }
+
+ public string Answer { get; set; } = string.Empty;
+ }
+
+ public class SubmitClinicalFormInDto
+ {
+ public Guid? ClinicalFormId { get; set; }
+
+ public Guid SubjectId { get; set; }
+
+ public Guid ClinicalDataTrialSetId { get; set; }
+
+
+ public List QuestionAnswers { get; set; }
+
+ public List> TableQuestionAnswer { get; set; }
+ }
+}
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs
index 6b557fe60..9206a609b 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs
@@ -37,6 +37,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
///
public Guid SystemClinicalId { get; set; }
+ public string Answer { get; set; } = string.Empty;
+
///
/// 子问题
///
@@ -46,11 +48,13 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
/// 表格问题
///
public List TableQuestions { get; set; } = new List();
+
+ public List> TableAnswer { get; set; }
}
///
- /// 系统临床数据问题
+ /// 项目临床数据问题
///
public class ClinicalTablePreviewDto : TrialClinicalTableQuestionDto
{
diff --git a/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalQuestionService.cs b/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalQuestionService.cs
index f61454573..dc7a489c7 100644
--- a/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalQuestionService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalQuestionService.cs
@@ -17,8 +17,8 @@ namespace IRaCIS.Core.Application.Interfaces
Task SynchronizationQuestion(List inDto);
-
+ void FindChildQuestion(ClinicalQuestionPreviewDto item, List questions, List tableQuestions, List answers, List tableAnswers);
}
diff --git a/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalAnswerRowInfo.cs b/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalAnswerRowInfo.cs
new file mode 100644
index 000000000..80fb5e194
--- /dev/null
+++ b/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalAnswerRowInfo.cs
@@ -0,0 +1,52 @@
+
+//--------------------------------------------------------------------
+// 此代码由T4模板自动生成 byzhouhang 20210918
+// 生成时间 2023-06-26 11:01:54
+// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
+using System;
+using IRaCIS.Core.Domain.Share;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+namespace IRaCIS.Core.Domain.Models
+{
+ ///
+ ///ClinicalAnswerRowInfo
+ ///
+ [Table("ClinicalAnswerRowInfo")]
+ public class ClinicalAnswerRowInfo : Entity, IAuditAdd
+ {
+
+ ///
+ /// 受试者Id
+ ///
+ public Guid SubjectId { get; set; }
+
+ ///
+ /// 表单Id
+ ///
+ public Guid ClinicalFormId { get; set; }
+
+ ///
+ /// 创建日期
+ ///
+ public DateTime CreateTime { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public Guid CreateUserId { get; set; }
+
+ ///
+ /// 问题Id
+ ///
+ public Guid QuestionId { get; set; }
+
+ ///
+ /// RowIndex
+ ///
+ public int RowIndex { get; set; }
+
+ }
+
+
+}
diff --git a/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalForm.cs b/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalForm.cs
new file mode 100644
index 000000000..ffbec7848
--- /dev/null
+++ b/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalForm.cs
@@ -0,0 +1,46 @@
+
+//--------------------------------------------------------------------
+// 此代码由T4模板自动生成 byzhouhang 20210918
+// 生成时间 2023-06-26 11:39:53
+// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
+using System;
+using IRaCIS.Core.Domain.Share;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+namespace IRaCIS.Core.Domain.Models
+{
+ ///
+ ///ClinicalForm
+ ///
+ [Table("ClinicalForm")]
+ public class ClinicalForm : Entity, IAuditAdd
+ {
+
+ ///
+ /// 受试者Id
+ ///
+ public Guid SubjectId { get; set; }
+
+ ///
+ /// 检查日期
+ ///
+ public DateTime CheckDate { get; set; }
+
+ ///
+ /// 创建日期
+ ///
+ public DateTime CreateTime { get; set; }
+
+ ///
+ /// 创建人
+ ///
+ public Guid CreateUserId { get; set; }
+
+ ///
+ /// ClinicalDataTrialSetId
+ ///
+ public Guid ClinicalDataTrialSetId { get; set; }
+
+ }
+
+}
diff --git a/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalQuestionAnswer.cs b/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalQuestionAnswer.cs
new file mode 100644
index 000000000..5509a155c
--- /dev/null
+++ b/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalQuestionAnswer.cs
@@ -0,0 +1,58 @@
+
+//--------------------------------------------------------------------
+// 此代码由T4模板自动生成 byzhouhang 20210918
+// 生成时间 2023-06-26 10:58:41
+// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
+using System;
+using IRaCIS.Core.Domain.Share;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+namespace IRaCIS.Core.Domain.Models
+{
+ ///
+ ///ClinicalQuestionAnswer
+ ///
+ [Table("ClinicalQuestionAnswer")]
+ public class ClinicalQuestionAnswer : Entity, IAuditAdd
+ {
+ ///
+ /// 受试者Id
+ ///
+ public Guid SubjectId { get; set; }
+
+ ///
+ /// 表单Id
+ ///
+ public Guid ClinicalFormId { get; set; }
+
+ ///
+ /// 创建日期
+ ///
+ public DateTime CreateTime { get; set; }
+
+ ///
+ /// 创建用户
+ ///
+ public Guid CreateUserId { get; set; }
+
+ ///
+ /// 问题Id
+ ///
+ public Guid QuestionId { get; set; }
+
+ ///
+ /// Answer
+ ///
+ public string Answer { get; set; }
+
+ public Guid ClinicalDataTrialSetId { get; set; }
+
+
+ [JsonIgnore]
+ [ForeignKey("ClinicalFormId")]
+ public ClinicalForm ClinicalForm { get; set; }
+
+ }
+
+
+}
diff --git a/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalTableAnswer.cs b/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalTableAnswer.cs
new file mode 100644
index 000000000..69cecd54d
--- /dev/null
+++ b/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalTableAnswer.cs
@@ -0,0 +1,67 @@
+
+//--------------------------------------------------------------------
+// 此代码由T4模板自动生成 byzhouhang 20210918
+// 生成时间 2023-06-26 11:03:26
+// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
+using System;
+using IRaCIS.Core.Domain.Share;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+namespace IRaCIS.Core.Domain.Models
+{
+ ///
+ ///ClinicalTableAnswer
+ ///
+ [Table("ClinicalTableAnswer")]
+ public class ClinicalTableAnswer : Entity, IAuditAdd
+ {
+
+ ///
+ /// 受试者Id
+ ///
+ public Guid SubjectId { get; set; }
+
+ ///
+ /// 表单Id
+ ///
+ public Guid ClinicalFormId { get; set; }
+
+ ///
+ /// 创建日期
+ ///
+ public DateTime CreateTime { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public Guid CreateUserId { get; set; }
+
+ ///
+ /// 问题Id
+ ///
+ public Guid QuestionId { get; set; }
+
+ ///
+ /// 答案行的Id
+ ///
+ public Guid RowId { get; set; }
+
+ ///
+ /// 答案
+ ///
+ public string Answer { get; set; }
+
+ ///
+ /// 表格问题id
+ ///
+ public Guid TableQuestionId { get; set; }
+
+ [JsonIgnore]
+ [ForeignKey("RowId")]
+ public ClinicalAnswerRowInfo ClinicalAnswerRowInfo { get; set; }
+
+
+ }
+
+
+}
diff --git a/IRaCIS.Core.Domain/SQLFile/20230613.sql b/IRaCIS.Core.Domain/SQLFile/20230613.sql
index 03425ba28..2f2cc17a7 100644
--- a/IRaCIS.Core.Domain/SQLFile/20230613.sql
+++ b/IRaCIS.Core.Domain/SQLFile/20230613.sql
@@ -85,4 +85,10 @@ WHERE
(i.is_primary_key = 1 OR i.is_unique_constraint = 1)
AND OBJECTPROPERTY(i.object_id, 'IsSystemTable') = 0
AND OBJECTPROPERTY(i.object_id, 'IsMSShipped') = 0
- AND OBJECT_NAME(i.object_id) <> 'sysdiagrams';
\ No newline at end of file
+ AND OBJECT_NAME(i.object_id) <> 'sysdiagrams';
+
+
+
+
+ ---------------------------维护临床数据是否应用 之前默认都是应用 现在添加字段 把状态都改为应用
+ update ClinicalDataTrialSet set IsApply=1
\ No newline at end of file
diff --git a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs
index b5c3bed5e..7b050ab0f 100644
--- a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs
+++ b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs
@@ -411,6 +411,15 @@ namespace IRaCIS.Core.Infra.EFCore
public virtual DbSet SystemClinicalTableQuestion { get; set; }
public virtual DbSet TrialClinicalTableQuestion { get; set; }
+
+ public virtual DbSet ClinicalQuestionAnswer { get; set; }
+
+ public virtual DbSet ClinicalAnswerRowInfo { get; set; }
+
+ public virtual DbSet ClinicalTableAnswer { get; set; }
+
+
+ public virtual DbSet ClinicalForm { get; set; }
#endregion
diff --git a/IRaCIS.Core.Test/DbHelper.ttinclude b/IRaCIS.Core.Test/DbHelper.ttinclude
index 6405bb42a..c7a365096 100644
--- a/IRaCIS.Core.Test/DbHelper.ttinclude
+++ b/IRaCIS.Core.Test/DbHelper.ttinclude
@@ -4,7 +4,7 @@
public static readonly string ConnectionString = "Server=123.56.94.154,1433\\MSSQLSERVER;Database=IRaCIS_New_Tet;User ID=sa;Password=dev123456DEV;TrustServerCertificate=true";
public static readonly string DbDatabase = "IRaCIS_New_Tet";
//ַ,ƴ
- public static readonly string TableName = "SystemClinicalTableQuestion";
+ public static readonly string TableName = "ClinicalForm";
//ļ service Ƿҳ
}
#>