Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing Details

IRC_NewDev
hang 2024-10-23 17:44:12 +08:00
commit 3ee175f091
19 changed files with 36373 additions and 38 deletions

View File

@ -13030,22 +13030,33 @@
</member> </member>
<member name="T:IRaCIS.Core.Application.MassTransit.Consumer.QCRepliedQCChallengeEventConsumer"> <member name="T:IRaCIS.Core.Application.MassTransit.Consumer.QCRepliedQCChallengeEventConsumer">
<summary> <summary>
QC回复 质控质疑通知CRC QC回复 质控质疑通知CRC (014015)
</summary>
</member>
<member name="M:IRaCIS.Core.Application.MassTransit.Consumer.QCRepliedQCChallengeEventConsumer.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.User},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialUser},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.QCChallenge},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.QCChallengeDialog},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Dictionary},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.EmailNoticeConfig},Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.SystemEmailSendConfig})">
<summary>
QC回复 质控质疑通知CRC (014015)
</summary> </summary>
</member> </member>
<member name="T:IRaCIS.Core.Application.MassTransit.Consumer.CRCRepliedCheckChallengeEventConsumer"> <member name="T:IRaCIS.Core.Application.MassTransit.Consumer.CRCRepliedCheckChallengeEventConsumer">
<summary> <summary>
CRC 回复一致性核查质疑 通知PM CRC 回复一致性核查质疑 通知PM (019,020)
</summary> </summary>
</member> </member>
<member name="T:IRaCIS.Core.Application.MassTransit.Consumer.PMRepliedCheckChallengeEventConsumer"> <member name="M:IRaCIS.Core.Application.MassTransit.Consumer.CRCRepliedCheckChallengeEventConsumer.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.User},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialUser},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.QCChallenge},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.QCChallengeDialog},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Dictionary},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.EmailNoticeConfig},Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.SystemEmailSendConfig})">
<summary> <summary>
PM 一致性核查 通知CRC CRC 回复一致性核查质疑 通知PM (019,020)
</summary> </summary>
</member> </member>
<!-- Badly formed XML comment ignored for member "T:IRaCIS.Core.Application.MassTransit.Consumer.PMRepliedCheckChallengeEventConsumer" -->
<member name="T:IRaCIS.Core.Application.MassTransit.Consumer.CheckStateChangedToAuditEventConsumer"> <member name="T:IRaCIS.Core.Application.MassTransit.Consumer.CheckStateChangedToAuditEventConsumer">
<summary> <summary>
通知PM 进行一致性核查 通知PM 进行一致性核查 (018,030)
</summary>
</member>
<member name="M:IRaCIS.Core.Application.MassTransit.Consumer.CheckStateChangedToAuditEventConsumer.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.User},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialUser},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.QCChallenge},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.QCChallengeDialog},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Dictionary},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.EmailNoticeConfig},Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.SystemEmailSendConfig})">
<summary>
通知PM 进行一致性核查 (018,030)
</summary> </summary>
</member> </member>
<member name="T:IRaCIS.Core.Application.MassTransit.Consumer.QCClaimTaskEventConsumer"> <member name="T:IRaCIS.Core.Application.MassTransit.Consumer.QCClaimTaskEventConsumer">

View File

@ -3,6 +3,7 @@ using IRaCIS.Core.Application.MassTransit.Command;
using IRaCIS.Core.Application.Service.Reading.Dto; using IRaCIS.Core.Application.Service.Reading.Dto;
using IRaCIS.Core.Domain; using IRaCIS.Core.Domain;
using IRaCIS.Core.Domain.BaseModel; using IRaCIS.Core.Domain.BaseModel;
using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Infra.EFCore.Common; using IRaCIS.Core.Infra.EFCore.Common;
using MassTransit; using MassTransit;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
@ -55,6 +56,20 @@ public class CRCSubmitedAndQCToAuditEventConsumer(
auditStateCode = "AuditStateRC"; auditStateCode = "AuditStateRC";
} }
var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto()
{
DictionaryRepository = _dictionaryRepository,
IsEn_US = isEn_US,
DictionaryList = new List<DictionaryDto>()
{
new DictionaryDto (){DictionaryCode= auditStateCode,EnumValue=subjectVisit.AuditState.GetEnumInt(), }, //审核状态
}
});
foreach (var userinfo in userinfoList) foreach (var userinfo in userinfoList)
{ {
var messageToSend = new MimeMessage(); var messageToSend = new MimeMessage();
@ -66,17 +81,6 @@ public class CRCSubmitedAndQCToAuditEventConsumer(
var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto()
{
DictionaryRepository = _dictionaryRepository,
IsEn_US = isEn_US,
DictionaryList = new List<DictionaryDto>()
{
new DictionaryDto (){DictionaryCode= auditStateCode,EnumValue=subjectVisit.AuditState.GetEnumInt(), }, //审核状态
}
});
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
{ {
@ -197,32 +201,193 @@ public class CRCRepliedQCChallengeEventConsumer(
/// <summary> /// <summary>
/// QC回复 质控质疑通知CRC /// QC回复 质控质疑通知CRC (014015)
/// </summary> /// </summary>
public class QCRepliedQCChallengeEventConsumer : IConsumer<QCRepliedQCChallengeEvent> public class QCRepliedQCChallengeEventConsumer(
IRepository<User> _userRepository,
IRepository<TrialUser> _trialUseRepository,
IRepository<SubjectVisit> _subjectVisitRepository,
IRepository<Trial> _trialRepository,
IRepository<QCChallenge> _qCChallengeRepository,
IRepository<QCChallengeDialog> _qCChallengeDialogRepository,
IRepository<Dictionary> _dictionaryRepository,
IRepository<EmailNoticeConfig> _emailNoticeConfigrepository,
IOptionsMonitor<SystemEmailSendConfig> systemEmailConfig) : IConsumer<QCRepliedQCChallengeEvent>
{ {
public Task Consume(ConsumeContext<QCRepliedQCChallengeEvent> context) private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue;
public async Task Consume(ConsumeContext<QCRepliedQCChallengeEvent> context)
{ {
throw new NotImplementedException(); Console.WriteLine("发送(014015) 【 QC回复 质控质疑通知CRC】邮件");
var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US;
var qCChallengeDialog = await _qCChallengeDialogRepository.Where(x => x.Id == context.Message.QCChallengeDialogId).Include(x => x.QCChallenge).FirstNotNullAsync();
var subjectVisitId = context.Message.SubjectVisitId;
var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == subjectVisitId).Include(x => x.Subject).FirstNotNullAsync();
var trialUser = await _trialUseRepository.Where(x => x.TrialId == subjectVisit.TrialId).Include(x => x.User).Select(x => x.User).ToListAsync();
var userinfoList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).ToList();
var craInfo = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.CRA).FirstOrDefault();
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == subjectVisit.TrialId);
var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto()
{
DictionaryRepository = _dictionaryRepository,
IsEn_US = isEn_US,
DictionaryList = new List<DictionaryDto>()
{
new DictionaryDto (){DictionaryCode= "YesOrNo",EnumValue=qCChallengeDialog.QCChallenge.IsClosed.ToString(), }, //是否关闭
}
});
foreach (var userinfo in userinfoList)
{
var messageToSend = new MimeMessage();
//发件地址
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail));
if (craInfo != null)
{
messageToSend.Cc.Add(new MailboxAddress(String.Empty, craInfo.EMail));
}
var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
{
var subjectCode = subjectVisit.Subject.Code;
var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, subjectVisit.VisitName);
var htmlBodyStr = string.Format(
CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr),
trialInfo.ExperimentName, // 项目 {1}
userinfo.FullName, // 用户名 {1}
subjectCode, // 受试者 {2}
subjectVisit.VisitName, // 访视 {3}
dictionValue[0], // 质疑是否关闭 {4}
qCChallengeDialog.TalkContent, // 质疑内容 {5}
_systemEmailConfig.SiteUrl // 链接 {65}
);
return (topicStr, htmlBodyStr);
};
await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository,
context.Message.IsPd ? EmailBusinessScenario.PDVerification_ImageQuery : EmailBusinessScenario.EligibilityVerification_ImageQuery,
messageToSend, emailConfigFunc);
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig);
}
} }
} }
/// <summary> /// <summary>
/// CRC 回复一致性核查质疑 通知PM /// CRC 回复一致性核查质疑 通知PM (019,020)
/// </summary> /// </summary>
public class CRCRepliedCheckChallengeEventConsumer : IConsumer<CRCRepliedCheckChallengeEvent> public class CRCRepliedCheckChallengeEventConsumer(
IRepository<User> _userRepository,
IRepository<TrialUser> _trialUseRepository,
IRepository<SubjectVisit> _subjectVisitRepository,
IRepository<Trial> _trialRepository,
IRepository<QCChallenge> _qCChallengeRepository,
IRepository<QCChallengeDialog> _qCChallengeDialogRepository,
IRepository<Dictionary> _dictionaryRepository,
IRepository<EmailNoticeConfig> _emailNoticeConfigrepository,
IOptionsMonitor<SystemEmailSendConfig> systemEmailConfig) : IConsumer<CRCRepliedCheckChallengeEvent>
{ {
public Task Consume(ConsumeContext<CRCRepliedCheckChallengeEvent> context)
private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue;
public async Task Consume(ConsumeContext<CRCRepliedCheckChallengeEvent> context)
{ {
throw new NotImplementedException(); Console.WriteLine("发送(019,020) 【 CRC 回复一致性核查质疑 通知PM】邮件");
var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US;
var subjectVisitId = context.Message.SubjectVisitId;
var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == subjectVisitId).Include(x => x.Subject).FirstNotNullAsync();
var trialUser = await _trialUseRepository.Where(x => x.TrialId == subjectVisit.TrialId).Include(x => x.User).Select(x => x.User).ToListAsync();
var userinfoList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.APM || x.UserTypeEnum == UserTypeEnum.ProjectManager).ToList();
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == subjectVisit.TrialId);
var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto()
{
DictionaryRepository = _dictionaryRepository,
IsEn_US = isEn_US,
DictionaryList = new List<DictionaryDto>()
{
new DictionaryDto (){DictionaryCode= "CheckState",EnumValue=subjectVisit.CheckState.GetEnumInt(), }, //审核状态
}
});
foreach (var userinfo in userinfoList)
{
var messageToSend = new MimeMessage();
//发件地址
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail));
var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
{
var subjectCode = subjectVisit.Subject.Code;
var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, subjectVisit.VisitName);
var htmlBodyStr = string.Format(
CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr),
trialInfo.ExperimentName, // 项目 {1}
userinfo.FullName, // 用户名 {1}
subjectCode, // 受试者 {2}
subjectVisit.VisitName, // 访视 {3}
dictionValue[0], // 核查状态 {4}
_systemEmailConfig.SiteUrl // 链接 {5}
);
return (topicStr, htmlBodyStr);
};
await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository,
context.Message.IsPd ? EmailBusinessScenario.PDVerification_UnderDRForPMOrAPM : EmailBusinessScenario.EligibilityVerification_UnderDRForPMOrAPM,
messageToSend, emailConfigFunc);
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig);
}
} }
} }
/// <summary> /// <summary>
/// PM 一致性核查 通知CRC /// PM 一致性核查 通知CRC (016017)
/// </summary> /// </summary>
public class PMRepliedCheckChallengeEventConsumer : IConsumer<PMRepliedCheckChallengeEvent> public class PMRepliedCheckChallengeEventConsumer : IConsumer<PMRepliedCheckChallengeEvent>
{ {
@ -234,13 +399,90 @@ public class PMRepliedCheckChallengeEventConsumer : IConsumer<PMRepliedCheckChal
/// <summary> /// <summary>
/// 通知PM 进行一致性核查 /// 通知PM 进行一致性核查 (018,030)
/// </summary> /// </summary>
public class CheckStateChangedToAuditEventConsumer : IConsumer<CheckStateChangedToAuditEvent> public class CheckStateChangedToAuditEventConsumer(
IRepository<User> _userRepository,
IRepository<TrialUser> _trialUseRepository,
IRepository<SubjectVisit> _subjectVisitRepository,
IRepository<Trial> _trialRepository,
IRepository<QCChallenge> _qCChallengeRepository,
IRepository<QCChallengeDialog> _qCChallengeDialogRepository,
IRepository<Dictionary> _dictionaryRepository,
IRepository<EmailNoticeConfig> _emailNoticeConfigrepository,
IOptionsMonitor<SystemEmailSendConfig> systemEmailConfig) : IConsumer<CheckStateChangedToAuditEvent>
{ {
public Task Consume(ConsumeContext<CheckStateChangedToAuditEvent> context) private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue;
public async Task Consume(ConsumeContext<CheckStateChangedToAuditEvent> context)
{ {
throw new NotImplementedException(); Console.WriteLine("发送(018,030) 【通知PM 进行一致性核查】邮件!!!");
var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US;
var subjectVisitId = context.Message.SubjectVisitId;
var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == subjectVisitId).Include(x => x.Subject).FirstNotNullAsync();
var trialUser = await _trialUseRepository.Where(x => x.TrialId == subjectVisit.TrialId).Include(x => x.User).Select(x => x.User).ToListAsync();
var userinfoList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.APM || x.UserTypeEnum == UserTypeEnum.ProjectManager).ToList();
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == subjectVisit.TrialId);
var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto()
{
DictionaryRepository = _dictionaryRepository,
IsEn_US = isEn_US,
DictionaryList = new List<DictionaryDto>()
{
new DictionaryDto (){DictionaryCode= "CheckState",EnumValue=subjectVisit.CheckState.GetEnumInt(), }, //审核状态
}
});
foreach (var userinfo in userinfoList)
{
var messageToSend = new MimeMessage();
//发件地址
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail));
var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
{
var subjectCode = subjectVisit.Subject.Code;
var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, subjectVisit.VisitName);
var htmlBodyStr = string.Format(
CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr),
trialInfo.ExperimentName, // 项目 {1}
userinfo.FullName, // 用户名 {1}
subjectCode, // 受试者 {2}
subjectVisit.VisitName, // 访视 {3}
dictionValue[0], // 核查状态 {4}
_systemEmailConfig.SiteUrl // 链接 {5}
);
return (topicStr, htmlBodyStr);
};
await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository,
context.Message.IsPd ? EmailBusinessScenario.PDVerification_DR : EmailBusinessScenario.EligibilityVerification_DR,
messageToSend, emailConfigFunc);
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig);
}
} }
} }

View File

@ -813,7 +813,7 @@ namespace IRaCIS.Application.Contracts
/// </summary> /// </summary>
public string Remark { get; set; } public string Remark { get; set; }
public bool IsIRUpload { get; set; } = false;
/// <summary> /// <summary>
/// 文件类型 /// 文件类型
@ -870,12 +870,15 @@ namespace IRaCIS.Application.Contracts
/// </summary> /// </summary>
public DateTime CreateTime { get; set; } public DateTime CreateTime { get; set; }
public bool IsIRUpload { get; set; }
} }
public class GetDoctorCriterionFileInDto public class GetDoctorCriterionFileInDto
{ {
public Guid DoctorId { get; set; } public Guid DoctorId { get; set; }
/// <summary> /// <summary>

View File

@ -322,6 +322,13 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public Guid? ClassifyTableQuestionId { get; set; } public Guid? ClassifyTableQuestionId { get; set; }
/// <summary>
/// 分类问题类型
/// </summary>
public ClassifyType? ClassifyType { get; set; }
public string ClassifyAlgorithms { get; set; } = string.Empty; public string ClassifyAlgorithms { get; set; } = string.Empty;
@ -465,6 +472,9 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public string ExportResultStr { get; set; } = "[]"; public string ExportResultStr { get; set; } = "[]";
public List<ExportResult> ExportResult { get; set; } public List<ExportResult> ExportResult { get; set; }
[Comment("图片数量")]
public int? ImageCount { get; set; }
} }
///<summary> ReadingTableQuestionSystemAddOrEdit 列表查询参数模型</summary> ///<summary> ReadingTableQuestionSystemAddOrEdit 列表查询参数模型</summary>
@ -481,6 +491,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public Guid? ClassifyTableQuestionId { get; set; } public Guid? ClassifyTableQuestionId { get; set; }
/// <summary>
/// 分类问题类型
/// </summary>
public ClassifyType? ClassifyType { get; set; }
public string ClassifyAlgorithms { get; set; } = string.Empty; public string ClassifyAlgorithms { get; set; } = string.Empty;
/// <summary> /// <summary>
@ -581,7 +596,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public List<ExportResult> ExportResult { get; set; } public List<ExportResult> ExportResult { get; set; }
[Comment("图片数量")]
public int? ImageCount { get; set; }
public List<string> ParentTriggerValueList { get; set; } = new List<string>(); public List<string> ParentTriggerValueList { get; set; } = new List<string>();
public List<string> RelevanceValueList { get; set; } = new List<string>(); public List<string> RelevanceValueList { get; set; } = new List<string>();
@ -1146,6 +1162,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
/// </summary> /// </summary>
public string GroupEnName { get; set; } = string.Empty; public string GroupEnName { get; set; } = string.Empty;
/// <summary>
/// 分类问题类型
/// </summary>
public ClassifyType? ClassifyType { get; set; }
public List<string> ParentTriggerValueList { get; set; } = new List<string>(); public List<string> ParentTriggerValueList { get; set; } = new List<string>();
public List<string> RelevanceValueList { get; set; } = new List<string>(); public List<string> RelevanceValueList { get; set; } = new List<string>();
public List<CalculateInfo> CalculateQuestionList { get; set; } public List<CalculateInfo> CalculateQuestionList { get; set; }
@ -1161,6 +1182,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
[Comment("导出标识")] [Comment("导出标识")]
public ExportIdentification? ExportIdentification { get; set; } public ExportIdentification? ExportIdentification { get; set; }
/// <summary>
/// 分类问题类型
/// </summary>
public ClassifyType? ClassifyType { get; set; }
/// <summary> /// <summary>
/// 分类算法 /// 分类算法
/// </summary> /// </summary>
@ -1606,6 +1632,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public string Type { get; set; } public string Type { get; set; }
public List<string> TypeList { get; set; } = new List<string>();
} }
public class GetTrialGroupNameOutDto public class GetTrialGroupNameOutDto
@ -1744,7 +1772,10 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public class AddOrUpdateReadingQuestionSystemInDto public class AddOrUpdateReadingQuestionSystemInDto
{ {
/// <summary>
/// 分类问题类型
/// </summary>
public ClassifyType? ClassifyType { get; set; }
/// <summary> /// <summary>
/// 导出标识 /// 导出标识
@ -1987,6 +2018,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
/// </summary> /// </summary>
public Guid? Id { get; set; } public Guid? Id { get; set; }
/// <summary>
/// 分类问题类型
/// </summary>
public ClassifyType? ClassifyType { get; set; }
/// <summary> /// <summary>
/// 导出标识 /// 导出标识
/// </summary> /// </summary>

View File

@ -93,7 +93,8 @@ namespace IRaCIS.Core.Application.Service
var result = await _readingQuestionTrialRepository var result = await _readingQuestionTrialRepository
.Where(x => x.ReadingQuestionCriterionTrialId == inDto.TrialCriterionId) .Where(x => x.ReadingQuestionCriterionTrialId == inDto.TrialCriterionId)
.WhereIf(!inDto.Type.IsNullOrEmpty(), x => x.Type == inDto.Type) .WhereIf(!inDto.Type.IsNullOrEmpty(), x => x.Type == inDto.Type)
.WhereIf(inDto.TypeList.Count()>0, x => inDto.TypeList.Contains(x.Type))
.OrderBy(x => x.ShowOrder) .OrderBy(x => x.ShowOrder)
.Select(x => new GetCalculateQuestionsOutDto .Select(x => new GetCalculateQuestionsOutDto
() ()
@ -380,7 +381,7 @@ namespace IRaCIS.Core.Application.Service
{ {
var types = new List<string>() var types = new List<string>()
{ {
"select","radio" "select","radio","class",
}; };
var questionList = await _readingTableQuestionSystemRepository.Where(x => x.ReadingQuestionId == inDto.ReadingQuestionId) var questionList = await _readingTableQuestionSystemRepository.Where(x => x.ReadingQuestionId == inDto.ReadingQuestionId)
.Where(x => types.Contains(x.Type)) .Where(x => types.Contains(x.Type))
@ -610,7 +611,7 @@ namespace IRaCIS.Core.Application.Service
{ {
var types = new List<string>() var types = new List<string>()
{ {
"select","radio" "select","radio","class",
}; };
var questionList = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == inDto.ReadingQuestionCriterionTrialId) var questionList = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == inDto.ReadingQuestionCriterionTrialId)
.Where(x => types.Contains(x.Type)) .Where(x => types.Contains(x.Type))

View File

@ -8,13 +8,14 @@ namespace IRaCIS.Core.Domain.Share
//不可用 //不可用
None = 0, None = 0,
//待核查
ToCheck = 9, ToCheck = 9,
//核查中 //核查中
CVIng = 10, CVIng = 10,
// 通过CV等待转发 // 通过CV等待转发 核查通过
CVPassed = 11, CVPassed = 11,
} }
} }

View File

@ -357,6 +357,24 @@ namespace IRaCIS.Core.Domain.Share
Automatic = 1 Automatic = 1
} }
/// <summary>
/// 分类算法的类型
/// </summary>
public enum ClassifyType
{
/// <summary>
/// 数值
/// </summary>
NumericalValue = 0,
/// <summary>
/// 下拉框
/// </summary>
Dropdown = 1,
}
/// <summary> /// <summary>
/// 问题分类 /// 问题分类
/// </summary> /// </summary>

View File

@ -34,4 +34,7 @@ public class DoctorCriterionFile : BaseAddAuditEntity
public Guid? TrialReadingCriterionId { get; set; } public Guid? TrialReadingCriterionId { get; set; }
[Comment("是否是IR上传")]
public bool IsIRUpload { get; set; } = false;
} }

View File

@ -185,6 +185,9 @@ public class ReadingQuestionSystem : BaseAddAuditEntity
[Comment("分组分类")] [Comment("分组分类")]
public GroupClassify? GroupClassify { get; set; } public GroupClassify? GroupClassify { get; set; }
[Comment("分类类型")]
public ClassifyType? ClassifyType { get; set; }
[Comment("问题分类")] [Comment("问题分类")]
public QuestionClassify? QuestionClassify { get; set; } public QuestionClassify? QuestionClassify { get; set; }

View File

@ -232,6 +232,8 @@ public class ReadingQuestionTrial : BaseAddAuditEntity
[Comment("数据来源")] [Comment("数据来源")]
public DataSources DataSource { get; set; } = DataSources.ManualEntry; public DataSources DataSource { get; set; } = DataSources.ManualEntry;
[Comment("问题英文名称")] [Comment("问题英文名称")]
public string QuestionEnName { get; set; } = string.Empty; public string QuestionEnName { get; set; } = string.Empty;
@ -241,6 +243,9 @@ public class ReadingQuestionTrial : BaseAddAuditEntity
[Comment("分类算法")] [Comment("分类算法")]
public string ClassifyAlgorithms { get; set; } = string.Empty; public string ClassifyAlgorithms { get; set; } = string.Empty;
[Comment("分类类型")]
public ClassifyType? ClassifyType { get; set; }
[Comment("分类问题Id")] [Comment("分类问题Id")]
public Guid? ClassifyQuestionId { get; set; } public Guid? ClassifyQuestionId { get; set; }

View File

@ -87,6 +87,9 @@ public class ReadingTableQuestionSystem : BaseAddAuditEntity
[Comment("最大问题数")] [Comment("最大问题数")]
public int? MaxRowCount { get; set; } public int? MaxRowCount { get; set; }
[Comment("图片数量")]
public int? ImageCount { get; set; }
[Comment("数据表名称")] [Comment("数据表名称")]
public string DataTableName { get; set; } = string.Empty; public string DataTableName { get; set; } = string.Empty;
@ -139,6 +142,9 @@ public class ReadingTableQuestionSystem : BaseAddAuditEntity
[Comment("分类问题表格Id")] [Comment("分类问题表格Id")]
public Guid? ClassifyTableQuestionId { get; set; } public Guid? ClassifyTableQuestionId { get; set; }
[Comment("分类类型")]
public ClassifyType? ClassifyType { get; set; }
[Comment("分类算法")] [Comment("分类算法")]
public string ClassifyAlgorithms { get; set; } = string.Empty; public string ClassifyAlgorithms { get; set; } = string.Empty;

View File

@ -93,6 +93,9 @@ public class ReadingTableQuestionTrial : BaseAddAuditEntity
public int ShowQuestion { get; set; } public int ShowQuestion { get; set; }
public int? MaxRowCount { get; set; } public int? MaxRowCount { get; set; }
[Comment("图片数量")]
public int? ImageCount { get; set; }
public string DataTableName { get; set; } = string.Empty; public string DataTableName { get; set; } = string.Empty;
public string DataTableColumn { get; set; } = string.Empty; public string DataTableColumn { get; set; } = string.Empty;
@ -155,6 +158,9 @@ public class ReadingTableQuestionTrial : BaseAddAuditEntity
[Comment("分类问题表格Id")] [Comment("分类问题表格Id")]
public Guid? ClassifyTableQuestionId { get; set; } public Guid? ClassifyTableQuestionId { get; set; }
[Comment("分类类型")]
public ClassifyType? ClassifyType { get; set; }
[Comment("导出标识")] [Comment("导出标识")]
public ExportIdentification? ExportIdentification { get; set; } public ExportIdentification? ExportIdentification { get; set; }

View File

@ -57,6 +57,9 @@ public class QCRepliedQCChallengeEvent : DomainEvent
/// </summary> /// </summary>
public class CRCRepliedCheckChallengeEvent : DomainEvent public class CRCRepliedCheckChallengeEvent : DomainEvent
{ {
public bool IsPd { get; set; }
public Guid CheckChallengeDialogId { get; set; } public Guid CheckChallengeDialogId { get; set; }
public Guid TrialId { get; set; } public Guid TrialId { get; set; }
@ -81,6 +84,9 @@ public class PMRepliedCheckChallengeEvent : DomainEvent
/// </summary> /// </summary>
public class CheckStateChangedToAuditEvent : DomainEvent public class CheckStateChangedToAuditEvent : DomainEvent
{ {
public bool IsPd { get; set; }
public Guid SubjectVisitId { get; set; } public Guid SubjectVisitId { get; set; }
} }

View File

@ -89,7 +89,7 @@ public static class DBContext_Ext
if (originCheckState == CheckStateEnum.None && subjectVisit.CheckState == CheckStateEnum.ToCheck if (originCheckState == CheckStateEnum.None && subjectVisit.CheckState == CheckStateEnum.ToCheck
) )
{ {
subjectVisit.AddDomainEvent(new CheckStateChangedToAuditEvent() { SubjectVisitId = subjectVisit.Id }); subjectVisit.AddDomainEvent(new CheckStateChangedToAuditEvent() { IsPd = subjectVisit.PDState == PDStateEnum.PDProgress, SubjectVisitId = subjectVisit.Id });
} }
if (originCurrentActionUserId == null && subjectVisit.CurrentActionUserId != null) if (originCurrentActionUserId == null && subjectVisit.CurrentActionUserId != null)
@ -149,7 +149,7 @@ public static class DBContext_Ext
//CRC 针对质控质疑进行回复 //CRC 针对质控质疑进行回复
if (entry.State == EntityState.Added && checkChallengeDialog.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator) if (entry.State == EntityState.Added && checkChallengeDialog.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator)
{ {
checkChallengeDialog.AddDomainEvent(new CRCRepliedCheckChallengeEvent() { CheckChallengeDialogId = checkChallengeDialog.Id, SubjectVisitId = findSubjectVisit.Id, TrialId = findSubjectVisit.TrialId }); checkChallengeDialog.AddDomainEvent(new CRCRepliedCheckChallengeEvent() { IsPd = findSubjectVisit.PDState == PDStateEnum.PDProgress, CheckChallengeDialogId = checkChallengeDialog.Id, SubjectVisitId = findSubjectVisit.Id, TrialId = findSubjectVisit.TrialId });
} }
else if (entry.State == EntityState.Added && checkChallengeDialog.UserTypeEnum == UserTypeEnum.ProjectManager) else if (entry.State == EntityState.Added && checkChallengeDialog.UserTypeEnum == UserTypeEnum.ProjectManager)
{ {

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,40 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace IRaCIS.Core.Infra.EFCore.Migrations
{
/// <inheritdoc />
public partial class iamgeandQuestion : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<int>(
name: "ImageCount",
table: "ReadingTableQuestionTrial",
type: "int",
nullable: true,
comment: "图片数量");
migrationBuilder.AddColumn<int>(
name: "ImageCount",
table: "ReadingTableQuestionSystem",
type: "int",
nullable: true,
comment: "图片数量");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "ImageCount",
table: "ReadingTableQuestionTrial");
migrationBuilder.DropColumn(
name: "ImageCount",
table: "ReadingTableQuestionSystem");
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,30 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace IRaCIS.Core.Infra.EFCore.Migrations
{
/// <inheritdoc />
public partial class doctorfile : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<bool>(
name: "IsIRUpload",
table: "DoctorCriterionFile",
type: "bit",
nullable: false,
defaultValue: false,
comment: "是否是IR上传");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "IsIRUpload",
table: "DoctorCriterionFile");
}
}
}

View File

@ -1651,6 +1651,10 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.Property<bool>("IsEnable") b.Property<bool>("IsEnable")
.HasColumnType("bit"); .HasColumnType("bit");
b.Property<bool>("IsIRUpload")
.HasColumnType("bit")
.HasComment("是否是IR上传");
b.Property<string>("Remark") b.Property<string>("Remark")
.IsRequired() .IsRequired()
.HasMaxLength(400) .HasMaxLength(400)
@ -6361,6 +6365,10 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
.HasColumnType("nvarchar(400)") .HasColumnType("nvarchar(400)")
.HasComment("文件类型"); .HasComment("文件类型");
b.Property<int?>("ImageCount")
.HasColumnType("int")
.HasComment("图片数量");
b.Property<bool>("IsCopy") b.Property<bool>("IsCopy")
.HasColumnType("bit") .HasColumnType("bit")
.HasComment("复制病灶的时候 是否复制这个问题"); .HasComment("复制病灶的时候 是否复制这个问题");
@ -6559,6 +6567,10 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
.HasColumnType("nvarchar(400)") .HasColumnType("nvarchar(400)")
.HasComment("文件类型"); .HasComment("文件类型");
b.Property<int?>("ImageCount")
.HasColumnType("int")
.HasComment("图片数量");
b.Property<bool>("IsCopy") b.Property<bool>("IsCopy")
.HasColumnType("bit") .HasColumnType("bit")
.HasComment("复制病灶的时候 是否复制这个问题"); .HasComment("复制病灶的时候 是否复制这个问题");