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 Ƿҳ } #>