修改问题提交
parent
9952ab7ed3
commit
d10c6110e3
|
@ -417,7 +417,7 @@
|
|||
<summary>
|
||||
选择人员下拉
|
||||
</summary>
|
||||
<param name="param"></param>
|
||||
<param name="trialId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ImageAndDoc.StudyService.Preview(System.Guid)">
|
||||
|
@ -5338,11 +5338,6 @@
|
|||
任务类型
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.ViewModel.ReadingMedicineTrialQuestionView.ReadingCategory">
|
||||
<summary>
|
||||
任务类型
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.ViewModel.GetMedicineQuestionPreviewInDto.ReadingCategory">
|
||||
<summary>
|
||||
任务类型
|
||||
|
|
|
@ -12,6 +12,7 @@ using IRaCIS.Core.Domain.Share;
|
|||
using IRaCIS.Core.Infrastructure;
|
||||
using IRaCIS.Core.Application.Helper;
|
||||
using IRaCIS.Application.Contracts;
|
||||
using IRaCIS.Core.Infra.EFCore.Common;
|
||||
|
||||
namespace IRaCIS.Core.Application.Service
|
||||
{
|
||||
|
@ -27,7 +28,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
public IRepository<VisitTask> _visitTaskRepository { get; }
|
||||
public IRepository<TrialUser> _trialUserRepository { get; }
|
||||
|
||||
public TrialEmailNoticeConfigService(IRepository<TrialEmailNoticeConfig> trialEmailNoticeConfigRepository, IRepository<VisitTask> visitTaskRepository,IRepository<TrialUser> trialUserRepository)
|
||||
public TrialEmailNoticeConfigService(IRepository<TrialEmailNoticeConfig> trialEmailNoticeConfigRepository, IRepository<VisitTask> visitTaskRepository, IRepository<TrialUser> trialUserRepository)
|
||||
{
|
||||
_trialEmailNoticeConfigRepository = trialEmailNoticeConfigRepository;
|
||||
_visitTaskRepository = visitTaskRepository;
|
||||
|
@ -48,7 +49,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
{
|
||||
var docmentList = _repository.Where<CommonDocument>(t => t.CriterionTypeEnum == criterionTypeEnum).Select(t => new { t.Path, t.Name, t.Code, t.BusinessScenarioEnum }).ToList();
|
||||
|
||||
var trialDocCount = _trialEmailNoticeConfigRepository.Where(t => t.CriterionTypeEnum == criterionTypeEnum).Count();
|
||||
var trialDocCount = _trialEmailNoticeConfigRepository.Where(t => t.CriterionTypeEnum == criterionTypeEnum && t.TrialId == trialId).Count();
|
||||
|
||||
if (trialDocCount == 0)
|
||||
{
|
||||
|
@ -81,7 +82,8 @@ namespace IRaCIS.Core.Application.Service
|
|||
var criterionTypeEnum = await _repository.Where<ReadingQuestionCriterionTrial>(t => t.TrialId == trialId && t.Id == trialReadingCriterionId).Select(t => t.CriterionType).FirstOrDefaultAsync();
|
||||
|
||||
|
||||
var emailConfig = await _trialEmailNoticeConfigRepository.Where(t => t.TrialId == trialId && t.CriterionTypeEnum == criterionTypeEnum && t.BusinessScenarioEnum == businessScenarioEnum).FirstOrDefaultAsync();
|
||||
var emailConfig = await _trialEmailNoticeConfigRepository.Where(t => t.TrialId == trialId && t.CriterionTypeEnum == criterionTypeEnum && t.BusinessScenarioEnum == businessScenarioEnum)
|
||||
.Include(t => t.TrialEmailNoticeUserList).ThenInclude(t => t.User).FirstOrDefaultAsync();
|
||||
|
||||
if (emailConfig == null)
|
||||
{
|
||||
|
@ -92,22 +94,35 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
var sendEmailConfig = new SMTPEmailConfig();
|
||||
|
||||
//foreach (var item in emailConfig.ReceiveEmailList)
|
||||
//{
|
||||
// sendEmailConfig.ToMailAddressList.Add(new MimeKit.MailboxAddress(item, item));
|
||||
//}
|
||||
foreach (var item in emailConfig.TrialEmailNoticeUserList)
|
||||
{
|
||||
|
||||
//foreach (var item in emailConfig.CopyEmailList)
|
||||
//{
|
||||
// if (item.Contains("@") && !string.IsNullOrEmpty(item))
|
||||
// {
|
||||
// sendEmailConfig.CopyToMailAddressList.Add(new MimeKit.MailboxAddress(item.Trim(), item.Trim()));
|
||||
// }
|
||||
//}
|
||||
if (item.User.EMail.Contains("@") && !string.IsNullOrEmpty(item.User.EMail))
|
||||
{
|
||||
switch (item.EmailUserType)
|
||||
{
|
||||
case EmailUserType.From:
|
||||
sendEmailConfig.FromEmailAddress = new MimeKit.MailboxAddress(item.User.FullName, item.User.EMail);
|
||||
|
||||
break;
|
||||
case EmailUserType.To:
|
||||
sendEmailConfig.ToMailAddressList.Add(new MimeKit.MailboxAddress(item.User.FullName, item.User.EMail));
|
||||
|
||||
break;
|
||||
case EmailUserType.Copy:
|
||||
sendEmailConfig.CopyToMailAddressList.Add(new MimeKit.MailboxAddress(item.User.FullName, item.User.EMail));
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//邮件内容html
|
||||
await FillWordTemplateAndSetEmailAsync(visitTaskId, sendEmailConfig, businessScenarioEnum, criterionTypeEnum!);
|
||||
var isNeedSend = await FillWordTemplateAndSetEmailAsync(visitTaskId, sendEmailConfig, businessScenarioEnum, criterionTypeEnum!);
|
||||
|
||||
//邮件附件
|
||||
var path = FileStoreHelper.GetPhysicalFilePath(_hostEnvironment, emailConfig.FilePath);
|
||||
|
@ -132,8 +147,11 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
|
||||
|
||||
private async Task FillWordTemplateAndSetEmailAsync(Guid visitTaskId, SMTPEmailConfig sendEmailConfig, CommonDocumentBusinessScenario businessScenarioEnum, CriterionType criterionType)
|
||||
private async Task<bool> FillWordTemplateAndSetEmailAsync(Guid visitTaskId, SMTPEmailConfig sendEmailConfig, CommonDocumentBusinessScenario businessScenarioEnum, CriterionType criterionType)
|
||||
{
|
||||
|
||||
var isNeedSend = true;
|
||||
|
||||
var pathToFile = _hostEnvironment.WebRootPath
|
||||
+ Path.DirectorySeparatorChar.ToString()
|
||||
+ "EmailTemplate"
|
||||
|
@ -141,8 +159,60 @@ namespace IRaCIS.Core.Application.Service
|
|||
+ "SubjectEnrollConfirmOrPDProgress.html";
|
||||
|
||||
|
||||
if (businessScenarioEnum == CommonDocumentBusinessScenario.EnrollConfirmed)
|
||||
var documentNeedBasicInfo = await _visitTaskRepository.Where(t => t.Id == visitTaskId).Select(t => new
|
||||
{
|
||||
t.Trial.ResearchProgramNo,
|
||||
t.Subject.TrialSite.TrialSiteCode,
|
||||
SubjectCode = t.Subject.Code,
|
||||
t.Trial.Sponsor.SponsorName,
|
||||
t.Trial.IsEnrollementQualificationConfirm,
|
||||
t.Trial.IsPDProgressView,
|
||||
|
||||
IsBaseline = t.SourceSubjectVisit.IsBaseLine,
|
||||
VisitEarliestScanDate = t.SourceSubjectVisit.EarliestScanDate,
|
||||
VisitName = t.SourceSubjectVisit.VisitName,
|
||||
t.SourceSubjectVisit.IsFinalVisit,
|
||||
t.SourceSubjectVisit.PDState,
|
||||
|
||||
ModuleEarliestScanDate = t.ReadModule.SubjectVisit.EarliestScanDate,
|
||||
ModuleVisitName = t.ReadModule.SubjectVisit.VisitName,
|
||||
t.SourceSubjectVisitId,
|
||||
t.SouceReadModuleId,
|
||||
t.SubjectId,
|
||||
|
||||
t.ReadingTaskState,
|
||||
t.ReadingCategory,
|
||||
t.SignTime,
|
||||
|
||||
t.TrialReadingCriterionId,
|
||||
t.TrialReadingCriterion.ArbitrationRule,
|
||||
t.TrialReadingCriterion.ReadingType,
|
||||
t.TrialReadingCriterion.IsReadingTaskViewInOrder,
|
||||
}).FirstNotNullAsync();
|
||||
|
||||
|
||||
if (documentNeedBasicInfo.ReadingCategory == ReadingCategory.Visit || documentNeedBasicInfo.ReadingCategory == ReadingCategory.Judge || documentNeedBasicInfo.ReadingCategory == ReadingCategory.Global)
|
||||
{
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
isNeedSend = false;
|
||||
|
||||
return isNeedSend;
|
||||
}
|
||||
|
||||
//入组确认仅在基线
|
||||
if (businessScenarioEnum == CommonDocumentBusinessScenario.EnrollConfirmed && documentNeedBasicInfo.IsEnrollementQualificationConfirm && documentNeedBasicInfo.IsBaseline)
|
||||
{
|
||||
|
||||
//如果其他阅片人已经做了,说明发送了入组确认报告,第二个人做完就不发送了
|
||||
|
||||
if (await _visitTaskRepository.AnyAsync(t => t.SourceSubjectVisitId == documentNeedBasicInfo.SourceSubjectVisitId && t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false &&
|
||||
t.Id != visitTaskId && t.ReadingTaskState == ReadingTaskState.HaveSigned))
|
||||
{
|
||||
isNeedSend = false;
|
||||
}
|
||||
|
||||
sendEmailConfig.TopicDescription = "入组确认";
|
||||
|
||||
|
@ -156,60 +226,22 @@ namespace IRaCIS.Core.Application.Service
|
|||
);
|
||||
}
|
||||
|
||||
switch (criterionType)
|
||||
|
||||
var answer = "否";
|
||||
|
||||
if (await _repository.Where<ReadingTableQuestionAnswer>().AnyAsync(x => x.VisitTaskId == visitTaskId && x.Answer == TargetState.Exist.GetEnumInt() &&
|
||||
x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State && x.ReadingQuestionTrial.LesionType == LesionType.TargetLesion))
|
||||
{
|
||||
|
||||
case CriterionType.SelfDefine:
|
||||
break;
|
||||
answer = "是";
|
||||
|
||||
case CriterionType.RECIST1Pointt1:
|
||||
//修改Subject 状态 need to do
|
||||
|
||||
|
||||
//_visitTaskRepository.Where(t => t.Id == visitTaskId).Select(t => new { t.Trial.ResearchProgramNo, t.Subject.TrialSite.TrialSiteCode, SubjectCode = t.Subject.Code, VisitEarliestScanDate = t.SourceSubjectVisit.EarliestScanDate, t.sou })
|
||||
|
||||
break;
|
||||
|
||||
case CriterionType.PCWG3:
|
||||
break;
|
||||
|
||||
case CriterionType.mRECISTMesothelioma:
|
||||
break;
|
||||
case CriterionType.RECIL:
|
||||
break;
|
||||
case CriterionType.RECIST1Point0:
|
||||
break;
|
||||
case CriterionType.WHO:
|
||||
break;
|
||||
case CriterionType.PERCIST:
|
||||
break;
|
||||
case CriterionType.Forrest:
|
||||
break;
|
||||
case CriterionType.Lugano2014:
|
||||
break;
|
||||
case CriterionType.iRECIST:
|
||||
break;
|
||||
case CriterionType.RANO_BM:
|
||||
break;
|
||||
case CriterionType.RANO:
|
||||
break;
|
||||
case CriterionType.IWCLL2018:
|
||||
break;
|
||||
case CriterionType.mRECISTHCC:
|
||||
break;
|
||||
case CriterionType.Cheson2007:
|
||||
break;
|
||||
case CriterionType.IMWG2016:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
else if (businessScenarioEnum == CommonDocumentBusinessScenario.PDConfirmed)
|
||||
else if (businessScenarioEnum == CommonDocumentBusinessScenario.PDConfirmed && documentNeedBasicInfo.IsPDProgressView)
|
||||
{
|
||||
|
||||
sendEmailConfig.TopicDescription = "疾病进展";
|
||||
|
@ -224,62 +256,274 @@ namespace IRaCIS.Core.Application.Service
|
|||
);
|
||||
}
|
||||
|
||||
switch (criterionType)
|
||||
//有序
|
||||
|
||||
if (documentNeedBasicInfo.IsReadingTaskViewInOrder)
|
||||
{
|
||||
|
||||
case CriterionType.SelfDefine:
|
||||
break;
|
||||
case CriterionType.RECIST1Pointt1:
|
||||
var answer = "否";
|
||||
|
||||
//单重
|
||||
|
||||
if (documentNeedBasicInfo.ReadingType == ReadingMethod.Single)
|
||||
{
|
||||
//仲裁在访视上 或者在阅片期
|
||||
if (documentNeedBasicInfo.ArbitrationRule != ArbitrationRule.None)
|
||||
{
|
||||
|
||||
throw new BusinessValidationFailedException("单重有序阅片配置有误(不应该有仲裁对象配置),请核查!");
|
||||
}
|
||||
|
||||
|
||||
//要求PD 确认的访视 是截止访视 还是非截止访视(根据该访视有没有配置阅片期来判断)
|
||||
|
||||
if (documentNeedBasicInfo.ReadingCategory == ReadingCategory.Visit)
|
||||
{
|
||||
//存在阅片期 那么就是截止访视
|
||||
if (await _repository.Where<ReadModule>(t => t.TrialReadingCriterionId == documentNeedBasicInfo.TrialReadingCriterionId && t.SubjectVisitId == documentNeedBasicInfo.SourceSubjectVisitId && t.ReadingSetType == ReadingSetType.ImageReading).AnyAsync())
|
||||
{
|
||||
isNeedSend = false;
|
||||
}
|
||||
else//非截止访视
|
||||
{
|
||||
answer = await TranslatePdStateAsync(visitTaskId, ReadingCategory.Visit);
|
||||
}
|
||||
}
|
||||
else if (documentNeedBasicInfo.ReadingCategory == ReadingCategory.Global)
|
||||
{
|
||||
answer = await TranslatePdStateAsync(visitTaskId, ReadingCategory.Global);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new BusinessValidationFailedException("单重有序阅片 该类型的任务不应进入此处逻辑,请联系后台开发核查!");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
//双重
|
||||
else if (documentNeedBasicInfo.ReadingType == ReadingMethod.Double)
|
||||
{
|
||||
|
||||
|
||||
//仲裁在访视上 就没有全局阅片 没有阅片期
|
||||
if (documentNeedBasicInfo.ArbitrationRule == ArbitrationRule.Visit)
|
||||
{
|
||||
//找到 访视,裁判 所有有效任务(不可能有全局的) 访视和裁判任务的SourceSubjectVisitId 一样
|
||||
var taskList = await _visitTaskRepository.Where(t => t.SourceSubjectVisitId == documentNeedBasicInfo.SourceSubjectVisitId && t.IsAnalysisCreate == false && t.TaskState == TaskState.Effect &&
|
||||
(t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Judge )).ToListAsync();
|
||||
|
||||
|
||||
//这里要求 到这里已经如果有裁判 已经生成裁判了保存数据库
|
||||
//双人阅片,没有产生裁判 第二个人读完发
|
||||
if (taskList.Count == 2 && taskList.Count(t => t.ReadingTaskState == ReadingTaskState.HaveSigned && t.ReadingCategory == ReadingCategory.Visit) == 2)
|
||||
{
|
||||
|
||||
answer = await TranslatePdStateAsync(visitTaskId, documentNeedBasicInfo.ReadingCategory);
|
||||
}
|
||||
//双人 产生裁判,并且裁判完成 发
|
||||
else if (taskList.Count == 3 && taskList.Count(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) == 3 && taskList.Where(t => t.ReadingCategory == ReadingCategory.Judge).Count() == 1)
|
||||
{
|
||||
|
||||
answer = await TranslatePdStateAsync(taskList.Where(t => t.ReadingCategory == ReadingCategory.Judge).First().Id, ReadingCategory.Judge);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
isNeedSend = false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
//在阅片期 仲裁在全局阅片,不会在访视上
|
||||
else if (documentNeedBasicInfo.ArbitrationRule == ArbitrationRule.Reading)
|
||||
{
|
||||
//是访视任务 不可能是裁判任务(访视上不会生成裁判),也不会是全局任务(全局任务 SourceSubjectVisitId=null )
|
||||
if (documentNeedBasicInfo.SourceSubjectVisitId != null)
|
||||
{
|
||||
|
||||
#region MyRegion
|
||||
|
||||
////看该访视是否是截止访视
|
||||
//var moduleIdList = await _repository.Where<ReadModule>(t => t.TrialReadingCriterionId == documentNeedBasicInfo.TrialReadingCriterionId && t.SubjectVisitId == documentNeedBasicInfo.SourceSubjectVisitId && t.ReadingSetType == ReadingSetType.ImageReading)
|
||||
// .Select(t => (Guid?) t.Id).ToListAsync();
|
||||
|
||||
////截止访视
|
||||
//if (moduleIdList.Count > 0)
|
||||
//{
|
||||
// //截止访视,需要等待生成全局,完成全局再发
|
||||
|
||||
// isNeedSend = false;
|
||||
|
||||
//}
|
||||
////非截止访视 CRC在该访视设置PD后,在提交的时候,生成了阅片期,一定会生成全局任务
|
||||
//else
|
||||
//{
|
||||
|
||||
// isNeedSend = false;
|
||||
//}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
//访视类型的任务 根本就不需要发送邮件
|
||||
|
||||
isNeedSend = false;
|
||||
|
||||
}
|
||||
//是全局任务 或者全局的裁判任务 (如果是全局任务,那么此时裁判任务已经生成,如果是全局裁判)
|
||||
else if (documentNeedBasicInfo.SouceReadModuleId != null)
|
||||
{
|
||||
var taskList = await _visitTaskRepository.Where(t => t.IsAnalysisCreate == false && t.TaskState == TaskState.Effect && t.SouceReadModuleId== documentNeedBasicInfo.SouceReadModuleId
|
||||
&& (t.ReadingCategory == ReadingCategory.Global || t.ReadingCategory == ReadingCategory.Judge)).ToListAsync();
|
||||
|
||||
//两个全局没有裁判
|
||||
if (taskList.Count == 2 && taskList.Count(t => t.ReadingTaskState == ReadingTaskState.HaveSigned && t.ReadingCategory == ReadingCategory.Global) == 2)
|
||||
{
|
||||
|
||||
answer = await TranslatePdStateAsync(visitTaskId, documentNeedBasicInfo.ReadingCategory);
|
||||
}
|
||||
//双人全局产生裁判
|
||||
else if (taskList.Count == 3 && taskList.Count(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) == 3 && taskList.Where(t => t.ReadingCategory == ReadingCategory.Judge).Count() == 1 && taskList.Where(t => t.ReadingCategory == ReadingCategory.Global).Count() == 2)
|
||||
{
|
||||
|
||||
answer = await TranslatePdStateAsync(taskList.Where(t => t.ReadingCategory == ReadingCategory.Judge).First().Id, ReadingCategory.Judge);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
isNeedSend = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new BusinessValidationFailedException("双重有序阅片 没有定义该仲裁规则处理逻辑,请联系业务和后台开发核查!");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new BusinessValidationFailedException("有序阅片配置有误(应为单重或者双重阅片),请核查!");
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
case CriterionType.PCWG3:
|
||||
break;
|
||||
case CriterionType.mRECISTMesothelioma:
|
||||
break;
|
||||
case CriterionType.RECIL:
|
||||
break;
|
||||
case CriterionType.RECIST1Point0:
|
||||
break;
|
||||
case CriterionType.WHO:
|
||||
break;
|
||||
case CriterionType.PERCIST:
|
||||
break;
|
||||
case CriterionType.Forrest:
|
||||
break;
|
||||
case CriterionType.Lugano2014:
|
||||
break;
|
||||
case CriterionType.iRECIST:
|
||||
break;
|
||||
case CriterionType.RANO_BM:
|
||||
break;
|
||||
case CriterionType.RANO:
|
||||
break;
|
||||
case CriterionType.IWCLL2018:
|
||||
break;
|
||||
case CriterionType.mRECISTHCC:
|
||||
break;
|
||||
case CriterionType.Cheson2007:
|
||||
break;
|
||||
case CriterionType.IMWG2016:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
//无序
|
||||
else
|
||||
{
|
||||
//单重
|
||||
|
||||
var answer = "否";
|
||||
|
||||
if (documentNeedBasicInfo.ReadingType == ReadingMethod.Single && documentNeedBasicInfo.ArbitrationRule == ArbitrationRule.None)
|
||||
{
|
||||
answer = await TranslatePdStateAsync(visitTaskId, documentNeedBasicInfo.ReadingCategory);
|
||||
}
|
||||
//双重 截止访视只在阅片期的时候存在 要求PD确认的访视 肯定是非截止访视
|
||||
else if (documentNeedBasicInfo.ReadingType == ReadingMethod.Double && documentNeedBasicInfo.ArbitrationRule == ArbitrationRule.Visit)
|
||||
{
|
||||
//在两位阅片人读完访视后,如果有裁判者等裁判读完,如果无裁判则等第二个人的读完
|
||||
|
||||
var taskList = await _visitTaskRepository.Where(t => t.SourceSubjectVisitId == documentNeedBasicInfo.SourceSubjectVisitId && t.IsAnalysisCreate == false && t.TaskState == TaskState.Effect && (t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Judge)).ToListAsync();
|
||||
|
||||
//这里要求 到这里已经如果有裁判 已经生成裁判了保存数据库
|
||||
if (taskList.Count == 2 && taskList.Count(t => t.ReadingTaskState == ReadingTaskState.HaveSigned && t.ReadingCategory == ReadingCategory.Visit) == 2)
|
||||
{
|
||||
|
||||
answer = await TranslatePdStateAsync(visitTaskId, documentNeedBasicInfo.ReadingCategory);
|
||||
}
|
||||
else if (taskList.Count == 3 && taskList.Count(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) == 3 && taskList.Where(t => t.ReadingCategory == ReadingCategory.Judge).Count() == 1)
|
||||
{
|
||||
|
||||
answer = await TranslatePdStateAsync(taskList.Where(t => t.ReadingCategory == ReadingCategory.Judge).First().Id, ReadingCategory.Judge);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
isNeedSend = false;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new BusinessValidationFailedException("无序阅片配置有误(应为单重无仲裁对象,双重针对访视仲裁),请核查!");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
return isNeedSend;
|
||||
}
|
||||
|
||||
|
||||
private async Task<string> TranslatePdStateAsync(Guid visitTaskId, ReadingCategory readingCategory)
|
||||
{
|
||||
|
||||
var answer = string.Empty;
|
||||
|
||||
if (readingCategory == ReadingCategory.Visit)
|
||||
{
|
||||
var questionAnsewer = await _repository.Where<ReadingTaskQuestionAnswer>(t => t.VisitTaskId == visitTaskId && t.ReadingQuestionTrial.QuestionType == QuestionType.Tumor).FirstNotNullAsync();
|
||||
|
||||
answer = questionAnsewer.Answer;
|
||||
}
|
||||
else if (readingCategory == ReadingCategory.Global)
|
||||
{
|
||||
var questionAnsewer = await _repository.Where<ReadingGlobalTaskInfo>(t => t.TaskId == visitTaskId && t.TrialReadingQuestion.QuestionType == QuestionType.Tumor).FirstNotNullAsync();
|
||||
|
||||
answer = questionAnsewer.Answer;
|
||||
}
|
||||
else if (readingCategory == ReadingCategory.Judge)
|
||||
{
|
||||
var judgeResultTaskId = await _visitTaskRepository.Where(t => t.Id == visitTaskId).Select(t => t.JudgeResultTaskId).FirstNotNullAsync();
|
||||
|
||||
var questionAnsewer = await _repository.Where<ReadingTaskQuestionAnswer>(t => t.VisitTaskId == judgeResultTaskId && t.ReadingQuestionTrial.QuestionType == QuestionType.Tumor).FirstNotNullAsync();
|
||||
|
||||
answer = questionAnsewer.Answer;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new BusinessValidationFailedException("不应有 除访视、裁判、全局其他类型的任务进行发送邮件,请核查业务逻辑");
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (answer == OverallAssessment.PD.GetEnumInt())
|
||||
{
|
||||
return "是";
|
||||
}
|
||||
if (answer == OverallAssessment.NA.GetEnumInt())
|
||||
{
|
||||
return "NA";
|
||||
}
|
||||
else
|
||||
{
|
||||
return "否";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 选择人员下拉
|
||||
/// </summary>
|
||||
/// <param name="param"></param>
|
||||
/// <param name="trialId"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<List<TrialUserSelct>> GetTrialUserSelectList(Guid trialId)
|
||||
{
|
||||
|
||||
var query = _trialUserRepository.Where(t => t.TrialId == trialId && t.IsDeleted==false,false,true ).IgnoreQueryFilters()
|
||||
|
||||
var query = _trialUserRepository.Where(t => t.TrialId == trialId && t.IsDeleted == false, false, true).IgnoreQueryFilters()
|
||||
|
||||
.ProjectTo<TrialUserSelct>(_mapper.ConfigurationProvider);
|
||||
|
||||
return await query.ToListAsync();
|
||||
|
@ -292,7 +536,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
await SyncSystemEmainCofigDocListAsync(inQuery.TrialId, inQuery.CriterionTypeEnum);
|
||||
|
||||
var trialEmailNoticeConfigQueryable = _trialEmailNoticeConfigRepository.Where(t=>t.TrialId== inQuery.TrialId)
|
||||
var trialEmailNoticeConfigQueryable = _trialEmailNoticeConfigRepository.Where(t => t.TrialId == inQuery.TrialId)
|
||||
.WhereIf(inQuery.CriterionTypeEnum != null, t => t.CriterionTypeEnum == inQuery.CriterionTypeEnum)
|
||||
.WhereIf(inQuery.BusinessScenarioEnum != null, t => t.BusinessScenarioEnum == inQuery.BusinessScenarioEnum)
|
||||
.ProjectTo<TrialEmailNoticeConfigView>(_mapper.ConfigurationProvider);
|
||||
|
@ -304,7 +548,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
public async Task<IResponseOutput> AddOrUpdateTrialEmailNoticeConfig(TrialEmailNoticeConfigAddOrEdit addOrEditTrialEmailNoticeConfig)
|
||||
{
|
||||
|
||||
|
||||
|
||||
|
||||
//var entity = await _trialEmailNoticeConfigRepository.InsertOrUpdateAsync(addOrEditTrialEmailNoticeConfig);
|
||||
|
||||
|
@ -314,7 +558,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
var entity = _mapper.Map<TrialEmailNoticeConfig>(addOrEditTrialEmailNoticeConfig);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
entity.TrialEmailNoticeUserList.Add(new TrialEmailNoticeUser() { EmailUserType = EmailUserType.From, UserId = addOrEditTrialEmailNoticeConfig.FromUserId });
|
||||
|
||||
|
@ -327,7 +571,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
foreach (var item in addOrEditTrialEmailNoticeConfig.CopyUserIdList)
|
||||
{
|
||||
entity.TrialEmailNoticeUserList.Add(new TrialEmailNoticeUser() { EmailUserType = EmailUserType.Copy, UserId = item});
|
||||
entity.TrialEmailNoticeUserList.Add(new TrialEmailNoticeUser() { EmailUserType = EmailUserType.Copy, UserId = item });
|
||||
|
||||
}
|
||||
|
||||
|
@ -351,7 +595,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
|
||||
|
||||
trialEmailNoticeUsers.Add(new TrialEmailNoticeUser() { EmailUserType = EmailUserType.From, UserId = addOrEditTrialEmailNoticeConfig.FromUserId,TrialEmailNoticeConfigId=entity.Id });
|
||||
trialEmailNoticeUsers.Add(new TrialEmailNoticeUser() { EmailUserType = EmailUserType.From, UserId = addOrEditTrialEmailNoticeConfig.FromUserId, TrialEmailNoticeConfigId = entity.Id });
|
||||
|
||||
|
||||
foreach (var item in addOrEditTrialEmailNoticeConfig.ToUserIdList)
|
||||
|
|
|
@ -33,7 +33,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
private readonly AsyncLock _mutex = new AsyncLock();
|
||||
|
||||
public QCOperationService( IRepository<SubjectVisit> subjectVisitRepository,
|
||||
public QCOperationService(IRepository<SubjectVisit> subjectVisitRepository,
|
||||
IRepository<QCChallenge> qcChallengeRepository,
|
||||
IRepository<Trial> trialRepository,
|
||||
IRepository<DicomStudy> dicomStudyRepository,
|
||||
|
@ -112,7 +112,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
qcChallenge.Code = code + 1;
|
||||
qcChallenge.UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt;
|
||||
|
||||
qcChallenge.ChallengeCode = AppSettings.GetCodeStr(qcChallenge.Code, nameof(QCChallenge));
|
||||
qcChallenge.ChallengeCode = AppSettings.GetCodeStr(qcChallenge.Code, nameof(QCChallenge));
|
||||
|
||||
qcChallenge = await _qcChallengeRepository.AddAsync(qcChallenge, true);
|
||||
|
||||
|
@ -353,7 +353,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
sv.CheckUserId = _userInfo.Id;
|
||||
sv.CheckState = CheckStateEnum.CVPassed;
|
||||
|
||||
sv.ReadingStatus = ReadingStatusEnum.TaskAllocate;
|
||||
sv.ReadingStatus = ReadingStatusEnum.TaskAllocate;
|
||||
|
||||
sv.ForwardState = ForwardStateEnum.ToForward;
|
||||
sv.ManualPassReason = data.ManualPassReason;
|
||||
|
@ -1069,6 +1069,9 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
.Select(t => new { TrialId = t.Id, t.QCProcessEnum, t.IsImageConsistencyVerification, t.IsUrgent, t.IsHaveFirstGiveMedicineDate, t.ClinicalInformationTransmissionEnum })
|
||||
.FirstOrDefaultAsync(t => t.TrialId == cRCRequestToQCCommand.TrialId)).IfNullThrowException();
|
||||
|
||||
//找到符合配置的标准 确认的、双重,有序,阅片期仲裁
|
||||
var trialReadingCriterionIdList = _repository.Where<ReadingQuestionCriterionTrial>(t => t.TrialId == cRCRequestToQCCommand.TrialId && t.IsConfirm && t.ReadingType == ReadingMethod.Double && t.ArbitrationRule == ArbitrationRule.Reading && t.IsReadingTaskViewInOrder).Select(t => t.Id).ToList();
|
||||
|
||||
|
||||
var dbSubjectVisitList = await _subjectVisitRepository.Where(t => cRCRequestToQCCommand.SubjectVisitIds.Contains(t.Id), true).Include(t => t.Subject).ToListAsync();
|
||||
|
||||
|
@ -1083,7 +1086,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
{
|
||||
return ResponseOutput.NotOk("当前访视的影像数据,已经由其他CRC提交。", 3, ApiResponseCodeEnum.NeedTips);
|
||||
}
|
||||
else if(dbSubjectVisitList.Any(t => t.SubmitState == SubmitStateEnum.Submitted))
|
||||
else if (dbSubjectVisitList.Any(t => t.SubmitState == SubmitStateEnum.Submitted))
|
||||
{
|
||||
return ResponseOutput.NotOk("当前批量提交访视的影像数据,其中部分已由其他CRC提交。", 3, ApiResponseCodeEnum.NeedTips);
|
||||
}
|
||||
|
@ -1106,6 +1109,14 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
//已确认临床数据完整性
|
||||
dbSubjectVisit.IsConfirmedClinicalData = true;
|
||||
|
||||
|
||||
// CRC 上传的基线数据签名
|
||||
|
||||
await _readingClinicalDataRepository.BatchUpdateNoTrackingAsync(x => x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ReadingId == dbSubjectVisit.Id, x => new ReadingClinicalData()
|
||||
{
|
||||
IsSign = true
|
||||
});
|
||||
|
||||
//var signSuccess = await _repository.UpdateFromQueryAsync<TrialSign>(t => t.Id == cRCRequestToQCCommand.SignId, u => new TrialSign() { IsCompleted = true });
|
||||
|
||||
|
||||
|
@ -1123,6 +1134,9 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
var maxVisit = await _subjectVisitRepository.Where(t => t.SubjectId == dbSubjectVisit.SubjectId && t.SubmitState == SubmitStateEnum.Submitted)
|
||||
.OrderByDescending(t => t.VisitNum).Select(t => new { t.Id, t.VisitNum }).FirstOrDefaultAsync();
|
||||
|
||||
|
@ -1175,11 +1189,11 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
dbSubjectVisit.CheckState = trialConfig.IsImageConsistencyVerification ? CheckStateEnum.ToCheck : CheckStateEnum.CVPassed;
|
||||
|
||||
//维护统一状态
|
||||
dbSubjectVisit.ReadingStatus = trialConfig.IsImageConsistencyVerification ? ReadingStatusEnum.ConsistencyCheck: ReadingStatusEnum.TaskAllocate;
|
||||
dbSubjectVisit.ReadingStatus = trialConfig.IsImageConsistencyVerification ? ReadingStatusEnum.ConsistencyCheck : ReadingStatusEnum.TaskAllocate;
|
||||
|
||||
|
||||
|
||||
if (dbSubjectVisit.CheckState== CheckStateEnum.CVPassed)
|
||||
if (dbSubjectVisit.CheckState == CheckStateEnum.CVPassed)
|
||||
{
|
||||
dbSubjectVisit.CheckPassedTime = DateTime.Now;
|
||||
}
|
||||
|
@ -1197,22 +1211,50 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
dbSubjectVisit.AuditState = AuditStateEnum.ToAudit;
|
||||
}
|
||||
|
||||
//非基线设置为PD的话 根据配置自动生成阅片期
|
||||
if (!dbSubjectVisit.IsBaseLine && dbSubjectVisit.PDState == PDStateEnum.PDProgress)
|
||||
{
|
||||
//该标准需要添加阅片期
|
||||
foreach (var trialReadingCriterionId in trialReadingCriterionIdList)
|
||||
{
|
||||
//不存在该阅片期 (重传、回退都会重新提交)
|
||||
if (!await _repository.Where<ReadModule>(t => t.SubjectVisitId == dbSubjectVisit.Id && t.ReadingSetType == ReadingSetType.ImageReading && t.TrialReadingCriterionId == trialReadingCriterionId).AnyAsync())
|
||||
{
|
||||
|
||||
await _repository.AddAsync(new ReadModule()
|
||||
{
|
||||
TrialReadingCriterionId = trialReadingCriterionId,
|
||||
ReadingSetType = ReadingSetType.ImageReading,
|
||||
SubjectVisitId = dbSubjectVisit.Id,
|
||||
ModuleName = "",
|
||||
IsUrgent = dbSubjectVisit.IsUrgent,
|
||||
TrialId = dbSubjectVisit.TrialId,
|
||||
SubjectId = dbSubjectVisit.SubjectId
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// CRC 上传的基线数据签名
|
||||
#region CRC 上传的基线数据签名
|
||||
var subjectVisit =await _subjectVisitRepository.Where(x => cRCRequestToQCCommand.SubjectVisitIds.Contains(x.Id) && x.IsBaseLine).Select(x => new
|
||||
{
|
||||
x.Id,
|
||||
x.IsBaseLine
|
||||
}).FirstOrDefaultAsync();
|
||||
if (subjectVisit != null)
|
||||
{
|
||||
await _readingClinicalDataRepository.BatchUpdateNoTrackingAsync(x => x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ReadingId == subjectVisit.Id, x => new ReadingClinicalData()
|
||||
{
|
||||
IsSign = true
|
||||
});
|
||||
}
|
||||
#region CRC 上传的基线数据签名 已移动
|
||||
//var subjectVisit =await _subjectVisitRepository.Where(x => cRCRequestToQCCommand.SubjectVisitIds.Contains(x.Id) && x.IsBaseLine).Select(x => new
|
||||
//{
|
||||
// x.Id,
|
||||
// x.IsBaseLine
|
||||
//}).FirstOrDefaultAsync();
|
||||
//if (subjectVisit != null)
|
||||
//{
|
||||
// await _readingClinicalDataRepository.BatchUpdateNoTrackingAsync(x => x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ReadingId == subjectVisit.Id, x => new ReadingClinicalData()
|
||||
// {
|
||||
// IsSign = true
|
||||
// });
|
||||
//}
|
||||
|
||||
|
||||
|
||||
|
@ -1380,12 +1422,12 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
else if (trialConfig.QCProcessEnum == TrialQCProcess.DoubleAudit)
|
||||
{
|
||||
// 双审
|
||||
if (dbSubjectVisit.AuditState == AuditStateEnum.InPrimaryQC )
|
||||
if (dbSubjectVisit.AuditState == AuditStateEnum.InPrimaryQC)
|
||||
{
|
||||
dbSubjectVisit.AuditState = AuditStateEnum.QCFailed;
|
||||
dbSubjectVisit.PreliminaryAuditUserId = _userInfo.Id;
|
||||
}
|
||||
else if( dbSubjectVisit.AuditState == AuditStateEnum.InSecondaryQC)
|
||||
else if (dbSubjectVisit.AuditState == AuditStateEnum.InSecondaryQC)
|
||||
{
|
||||
dbSubjectVisit.AuditState = AuditStateEnum.QCFailed;
|
||||
dbSubjectVisit.ReviewAuditUserId = _userInfo.Id;
|
||||
|
|
|
@ -121,7 +121,9 @@ 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.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.DicomStudyCount, u => u.MapFrom(t => t.StudyList.Count()))
|
||||
.ForMember(d => d.NoneDicomStudyCount, u => u.MapFrom(t => t.NoneDicomStudyList.Count(t => t.NoneDicomFileList.Any())));
|
||||
|
||||
|
@ -137,7 +139,9 @@ 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() || 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.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.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))
|
||||
|
|
|
@ -6,385 +6,381 @@ using System.ComponentModel.DataAnnotations;
|
|||
namespace IRaCIS.Core.Application.ViewModel
|
||||
{
|
||||
|
||||
public class ReadingMedicineSystemQuestionView
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 类型
|
||||
/// </summary>
|
||||
public string Type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 父问题触发
|
||||
/// </summary>
|
||||
public string ParentTriggerValue { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 问题名称
|
||||
/// </summary>
|
||||
public string QuestionName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否是必须
|
||||
/// </summary>
|
||||
public bool IsRequired { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 排序
|
||||
/// </summary>
|
||||
public int ShowOrder { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 父问题ID
|
||||
/// </summary>
|
||||
public Guid? ParentId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 类型值
|
||||
/// </summary>
|
||||
public string TypeValue { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否启用
|
||||
/// </summary>
|
||||
public bool IsEnable { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 任务类型
|
||||
/// </summary>
|
||||
public ReadingCategory ReadingCategory { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 排序
|
||||
/// </summary>
|
||||
public int? ParentShowOrder { get; set; }
|
||||
}
|
||||
|
||||
///<summary>ReadingMedicineSystemQuestionQuery 列表查询参数模型</summary>
|
||||
public class ReadingMedicineSystemQuestionQuery
|
||||
{
|
||||
public string Type { get; set; }=string.Empty;
|
||||
public string ParentTriggerValue { get; set; } = string.Empty;
|
||||
public string QuestionName { get; set; } = string.Empty;
|
||||
public string TypeValue { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 任务类型
|
||||
/// </summary>
|
||||
public ReadingCategory? ReadingCategory { get; set; }
|
||||
|
||||
}
|
||||
|
||||
|
||||
public class GetReadingMedicineTrialOtherQuestionOutDto
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
|
||||
public string QuestionName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 类型值
|
||||
/// </summary>
|
||||
public string TypeValue { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 任务类型
|
||||
/// </summary>
|
||||
public ReadingCategory ReadingCategory { get; set; }
|
||||
}
|
||||
|
||||
public class DeleteReadingMedicineTrialQuestion
|
||||
{
|
||||
public Guid TrialId { get; set; }
|
||||
|
||||
public Guid Id { get; set; }
|
||||
}
|
||||
|
||||
public class TrialDataFromSystem : ReadingMedicineTrialQuestion
|
||||
{
|
||||
public Guid SystemQuestionId { get; set; }
|
||||
}
|
||||
public class AddTrialDataFromSystemInDto
|
||||
{
|
||||
public Guid TrialId { get; set; }
|
||||
|
||||
[NotDefault]
|
||||
public Guid TrialReadingCriterionId { get; set; }
|
||||
|
||||
public List<Guid> SystemQuestionIds { get; set; }
|
||||
}
|
||||
|
||||
public class ConfirmReadingMedicineQuestionInDto
|
||||
public class ReadingMedicineSystemQuestionView
|
||||
{
|
||||
[NotDefault]
|
||||
public Guid TrialId { get; set; }
|
||||
public Guid Id { get; set; }
|
||||
|
||||
[NotDefault]
|
||||
public Guid TrialReadingCriterionId { get; set; }
|
||||
}
|
||||
/// <summary>
|
||||
/// 类型
|
||||
/// </summary>
|
||||
public string Type { get; set; }
|
||||
|
||||
public class TrialQuestion
|
||||
/// <summary>
|
||||
/// 父问题触发
|
||||
/// </summary>
|
||||
public string ParentTriggerValue { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 问题名称
|
||||
/// </summary>
|
||||
public string QuestionName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否是必须
|
||||
/// </summary>
|
||||
public bool IsRequired { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 排序
|
||||
/// </summary>
|
||||
public int ShowOrder { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 父问题ID
|
||||
/// </summary>
|
||||
public Guid? ParentId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 类型值
|
||||
/// </summary>
|
||||
public string TypeValue { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否启用
|
||||
/// </summary>
|
||||
public bool IsEnable { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 任务类型
|
||||
/// </summary>
|
||||
public ReadingCategory ReadingCategory { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 排序
|
||||
/// </summary>
|
||||
public int? ParentShowOrder { get; set; }
|
||||
}
|
||||
|
||||
///<summary>ReadingMedicineSystemQuestionQuery 列表查询参数模型</summary>
|
||||
public class ReadingMedicineSystemQuestionQuery
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string Type { get; set; } = string.Empty;
|
||||
public string ParentTriggerValue { get; set; } = string.Empty;
|
||||
public string QuestionName { get; set; } = string.Empty;
|
||||
public string TypeValue { get; set; } = string.Empty;
|
||||
|
||||
public int ShowOrder { get; set; }
|
||||
public int? CriterionEnum { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 任务类型
|
||||
/// </summary>
|
||||
public ReadingCategory? ReadingCategory { get; set; }
|
||||
|
||||
}
|
||||
|
||||
|
||||
public int? ParentShowOrder { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 任务类型
|
||||
/// </summary>
|
||||
public ReadingCategory ReadingCategory { get; set; }
|
||||
}
|
||||
|
||||
public class GetReadingMedicineSystemOtherQuestionInDto
|
||||
{
|
||||
public Guid? Id { get; set; }
|
||||
|
||||
|
||||
|
||||
public int? ShowOrder { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 任务类型
|
||||
/// </summary>
|
||||
public ReadingCategory? ReadingCategory { get; set; }
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取项目的其他问题
|
||||
/// </summary>
|
||||
public class GetReadingMedicineTrialOtherQuestionInDto
|
||||
{
|
||||
public Guid TrialId { get; set; }
|
||||
|
||||
public Guid? Id { get; set; }
|
||||
|
||||
public int? ShowOrder { get; set; }
|
||||
|
||||
|
||||
[NotDefault]
|
||||
public Guid TrialReadingCriterionId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 任务类型
|
||||
/// </summary>
|
||||
public ReadingCategory? ReadingCategory { get; set; }
|
||||
}
|
||||
|
||||
|
||||
///<summary> ReadingMedicineSystemQuestionAddOrEdit 列表查询参数模型</summary>
|
||||
public class ReadingMedicineSystemQuestionAddOrEdit
|
||||
{
|
||||
public Guid? Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 类型
|
||||
/// </summary>
|
||||
public string Type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 父问题触发
|
||||
/// </summary>
|
||||
public string ParentTriggerValue { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 问题名称
|
||||
/// </summary>
|
||||
public string QuestionName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否是必须
|
||||
/// </summary>
|
||||
public bool IsRequired { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 排序
|
||||
/// </summary>
|
||||
public int ShowOrder { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 父问题ID
|
||||
/// </summary>
|
||||
public Guid? ParentId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 类型值
|
||||
/// </summary>
|
||||
public string TypeValue { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否启用
|
||||
/// </summary>
|
||||
public bool IsEnable { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 任务类型
|
||||
/// </summary>
|
||||
public ReadingCategory ReadingCategory { get; set; }
|
||||
}
|
||||
|
||||
public class ReadingMedicineTrialQuestionView
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public DateTime CreateTime { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string ParentTriggerValue { get; set; }
|
||||
public string QuestionName { get; set; }
|
||||
public Guid UpdateUserId { get; set; }
|
||||
public string TypeValue { get; set; }
|
||||
public Guid CreateUserId { get; set; }
|
||||
public Guid TrialId { get; set; }
|
||||
public DateTime UpdateTime { get; set; }
|
||||
public bool IsEnable { get; set; }
|
||||
public bool IsRequired { get; set; }
|
||||
public int ShowOrder { get; set; }
|
||||
public Guid? ParentId { get; set; }
|
||||
public bool? IsConfirm { get; set; }
|
||||
|
||||
public int? ParentShowOrder { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 任务类型
|
||||
/// </summary>
|
||||
public ReadingCategory ReadingCategory { get; set; }
|
||||
}
|
||||
|
||||
|
||||
public class GetMedicineQuestionPreviewInDto
|
||||
{
|
||||
public Guid TrialId { get; set; }
|
||||
|
||||
[NotDefault]
|
||||
public Guid TrialReadingCriterionId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 任务类型
|
||||
/// </summary>
|
||||
public ReadingCategory? ReadingCategory { get; set; }
|
||||
}
|
||||
|
||||
|
||||
public class GetMedicineQuestionPreviewOutDto
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 类型
|
||||
/// </summary>
|
||||
public string Type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 父问题触发值
|
||||
/// </summary>
|
||||
public string ParentTriggerValue { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 问题名称
|
||||
/// </summary>
|
||||
public string QuestionName { get; set; }
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 类型值
|
||||
/// </summary>
|
||||
public string TypeValue { get; set; }
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 项目ID
|
||||
/// </summary>
|
||||
public Guid TrialId { get; set; }
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 是否启用
|
||||
/// </summary>
|
||||
public bool IsEnable { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否必须
|
||||
/// </summary>
|
||||
public bool IsRequired { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 排序
|
||||
/// </summary>
|
||||
public int ShowOrder { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 父问题
|
||||
/// </summary>
|
||||
public Guid? ParentId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否确认
|
||||
/// </summary>
|
||||
public bool? IsConfirm { get; set; }
|
||||
|
||||
public List<GetMedicineQuestionPreviewOutDto> Childrens { get; set; }
|
||||
}
|
||||
|
||||
///<summary>ReadingMedicineTrialQuestionQuery 列表查询参数模型</summary>
|
||||
public class ReadingMedicineTrialQuestionQuery
|
||||
public class GetReadingMedicineTrialOtherQuestionOutDto
|
||||
{
|
||||
/// <summary>
|
||||
/// 项目Id
|
||||
/// </summary>
|
||||
public Guid TrialId { get; set; }
|
||||
public Guid Id { get; set; }
|
||||
|
||||
|
||||
public Guid TrialReadingCriterionId { get; set; }
|
||||
public string QuestionName { get; set; }
|
||||
|
||||
public string Type { get; set; } = string.Empty;
|
||||
/// <summary>
|
||||
/// 类型值
|
||||
/// </summary>
|
||||
public string TypeValue { get; set; }
|
||||
|
||||
public string ParentTriggerValue { get; set; } = string.Empty;
|
||||
/// <summary>
|
||||
/// 任务类型
|
||||
/// </summary>
|
||||
public ReadingCategory ReadingCategory { get; set; }
|
||||
}
|
||||
|
||||
public string QuestionName { get; set; } = string.Empty;
|
||||
public class DeleteReadingMedicineTrialQuestion
|
||||
{
|
||||
public Guid TrialId { get; set; }
|
||||
|
||||
public string TypeValue { get; set; } = string.Empty;
|
||||
public Guid Id { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 任务类型
|
||||
/// </summary>
|
||||
public ReadingCategory? ReadingCategory { get; set; }
|
||||
public class TrialDataFromSystem : ReadingMedicineTrialQuestion
|
||||
{
|
||||
public Guid SystemQuestionId { get; set; }
|
||||
}
|
||||
public class AddTrialDataFromSystemInDto
|
||||
{
|
||||
public Guid TrialId { get; set; }
|
||||
|
||||
}
|
||||
[NotDefault]
|
||||
public Guid TrialReadingCriterionId { get; set; }
|
||||
|
||||
public List<Guid> SystemQuestionIds { get; set; }
|
||||
}
|
||||
|
||||
public class ConfirmReadingMedicineQuestionInDto
|
||||
{
|
||||
[NotDefault]
|
||||
public Guid TrialId { get; set; }
|
||||
|
||||
[NotDefault]
|
||||
public Guid TrialReadingCriterionId { get; set; }
|
||||
}
|
||||
|
||||
public class TrialQuestion
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
|
||||
public int ShowOrder { get; set; }
|
||||
|
||||
|
||||
public int? ParentShowOrder { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 任务类型
|
||||
/// </summary>
|
||||
public ReadingCategory ReadingCategory { get; set; }
|
||||
}
|
||||
|
||||
public class GetReadingMedicineSystemOtherQuestionInDto
|
||||
{
|
||||
public Guid? Id { get; set; }
|
||||
|
||||
|
||||
|
||||
public int? ShowOrder { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 任务类型
|
||||
/// </summary>
|
||||
public ReadingCategory? ReadingCategory { get; set; }
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取项目的其他问题
|
||||
/// </summary>
|
||||
public class GetReadingMedicineTrialOtherQuestionInDto
|
||||
{
|
||||
public Guid TrialId { get; set; }
|
||||
|
||||
public Guid? Id { get; set; }
|
||||
|
||||
public int? ShowOrder { get; set; }
|
||||
|
||||
|
||||
[NotDefault]
|
||||
public Guid TrialReadingCriterionId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 任务类型
|
||||
/// </summary>
|
||||
public ReadingCategory? ReadingCategory { get; set; }
|
||||
}
|
||||
|
||||
|
||||
///<summary> ReadingMedicineSystemQuestionAddOrEdit 列表查询参数模型</summary>
|
||||
public class ReadingMedicineSystemQuestionAddOrEdit
|
||||
{
|
||||
public Guid? Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 类型
|
||||
/// </summary>
|
||||
public string Type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 父问题触发
|
||||
/// </summary>
|
||||
public string ParentTriggerValue { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 问题名称
|
||||
/// </summary>
|
||||
public string QuestionName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否是必须
|
||||
/// </summary>
|
||||
public bool IsRequired { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 排序
|
||||
/// </summary>
|
||||
public int ShowOrder { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 父问题ID
|
||||
/// </summary>
|
||||
public Guid? ParentId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 类型值
|
||||
/// </summary>
|
||||
public string TypeValue { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否启用
|
||||
/// </summary>
|
||||
public bool IsEnable { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 任务类型
|
||||
/// </summary>
|
||||
public ReadingCategory ReadingCategory { get; set; }
|
||||
|
||||
|
||||
public string CriterionEnumStr { get; set; } = string.Empty;
|
||||
|
||||
public List<int> CriterionEnumList { get; set; }
|
||||
}
|
||||
|
||||
public class ReadingMedicineTrialQuestionView : ReadingMedicineSystemQuestionAddOrEdit
|
||||
{
|
||||
public DateTime CreateTime { get; set; }
|
||||
|
||||
public Guid UpdateUserId { get; set; }
|
||||
public Guid CreateUserId { get; set; }
|
||||
public Guid TrialId { get; set; }
|
||||
public DateTime UpdateTime { get; set; }
|
||||
|
||||
public bool? IsConfirm { get; set; }
|
||||
|
||||
public int? ParentShowOrder { get; set; }
|
||||
|
||||
}
|
||||
|
||||
|
||||
public class GetMedicineQuestionPreviewInDto
|
||||
{
|
||||
public Guid TrialId { get; set; }
|
||||
|
||||
[NotDefault]
|
||||
public Guid TrialReadingCriterionId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 任务类型
|
||||
/// </summary>
|
||||
public ReadingCategory? ReadingCategory { get; set; }
|
||||
}
|
||||
|
||||
|
||||
public class GetMedicineQuestionPreviewOutDto
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 类型
|
||||
/// </summary>
|
||||
public string Type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 父问题触发值
|
||||
/// </summary>
|
||||
public string ParentTriggerValue { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 问题名称
|
||||
/// </summary>
|
||||
public string QuestionName { get; set; }
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 类型值
|
||||
/// </summary>
|
||||
public string TypeValue { get; set; }
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 项目ID
|
||||
/// </summary>
|
||||
public Guid TrialId { get; set; }
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 是否启用
|
||||
/// </summary>
|
||||
public bool IsEnable { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否必须
|
||||
/// </summary>
|
||||
public bool IsRequired { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 排序
|
||||
/// </summary>
|
||||
public int ShowOrder { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 父问题
|
||||
/// </summary>
|
||||
public Guid? ParentId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否确认
|
||||
/// </summary>
|
||||
public bool? IsConfirm { get; set; }
|
||||
|
||||
public List<GetMedicineQuestionPreviewOutDto> Childrens { get; set; }
|
||||
}
|
||||
|
||||
///<summary>ReadingMedicineTrialQuestionQuery 列表查询参数模型</summary>
|
||||
public class ReadingMedicineTrialQuestionQuery
|
||||
{
|
||||
/// <summary>
|
||||
/// 项目Id
|
||||
/// </summary>
|
||||
public Guid TrialId { get; set; }
|
||||
|
||||
|
||||
public Guid TrialReadingCriterionId { get; set; }
|
||||
|
||||
public string Type { get; set; } = string.Empty;
|
||||
|
||||
public string ParentTriggerValue { get; set; } = string.Empty;
|
||||
|
||||
public string QuestionName { get; set; } = string.Empty;
|
||||
|
||||
public string TypeValue { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 任务类型
|
||||
/// </summary>
|
||||
public ReadingCategory? ReadingCategory { get; set; }
|
||||
|
||||
}
|
||||
|
||||
///<summary> ReadingMedicineTrialQuestionAddOrEdit 列表查询参数模型</summary>
|
||||
public class ReadingMedicineTrialQuestionAddOrEdit
|
||||
{
|
||||
public Guid? Id { get; set; }
|
||||
public class ReadingMedicineTrialQuestionAddOrEdit
|
||||
{
|
||||
public Guid? Id { get; set; }
|
||||
|
||||
[NotDefault]
|
||||
public Guid TrialReadingCriterionId { get; set; }
|
||||
[NotDefault]
|
||||
public Guid TrialReadingCriterionId { get; set; }
|
||||
|
||||
public string Type { get; set; }
|
||||
public string? ParentTriggerValue { get; set; }=string.Empty;
|
||||
public string QuestionName { get; set; }
|
||||
public string TypeValue { get; set; }
|
||||
public Guid TrialId { get; set; }
|
||||
|
||||
public bool IsEnable { get; set; }
|
||||
public bool IsRequired { get; set; }
|
||||
public int ShowOrder { get; set; }
|
||||
public Guid? ParentId { get; set; }
|
||||
public bool? IsConfirm { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string? ParentTriggerValue { get; set; } = string.Empty;
|
||||
public string QuestionName { get; set; }
|
||||
public string TypeValue { get; set; }
|
||||
public Guid TrialId { get; set; }
|
||||
|
||||
public bool IsEnable { get; set; }
|
||||
public bool IsRequired { get; set; }
|
||||
public int ShowOrder { get; set; }
|
||||
public Guid? ParentId { get; set; }
|
||||
public bool? IsConfirm { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 任务类型
|
||||
/// </summary>
|
||||
public ReadingCategory ReadingCategory { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 任务类型
|
||||
/// </summary>
|
||||
public ReadingCategory ReadingCategory { get; set; }
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -50,7 +50,8 @@ namespace IRaCIS.Core.Application.Service
|
|||
.WhereIf(!inDto.ParentTriggerValue.IsNullOrEmpty(), x => x.ParentTriggerValue.Contains(inDto.ParentTriggerValue))
|
||||
.WhereIf(!inDto.QuestionName.IsNullOrEmpty(), x => x.QuestionName.Contains(inDto.QuestionName))
|
||||
.WhereIf(!inDto.Type.IsNullOrEmpty(), x => x.Type.Contains(inDto.Type))
|
||||
.WhereIf(inDto.ReadingCategory != null, x => x.ReadingCategory == inDto.ReadingCategory)
|
||||
.WhereIf(inDto.ReadingCategory != null, x => x.ReadingCategory == inDto.ReadingCategory)
|
||||
.WhereIf(inDto.CriterionEnum != null, x => x.CriterionEnumStr.Contains($"|{inDto.CriterionEnum}|") )
|
||||
.ProjectTo<ReadingMedicineSystemQuestionView>(_mapper.ConfigurationProvider).OrderBy(x => x.ShowOrder);
|
||||
return await query.ToListAsync();
|
||||
}
|
||||
|
@ -100,6 +101,9 @@ namespace IRaCIS.Core.Application.Service
|
|||
{
|
||||
return ResponseOutput.NotOk("当前问题序号存在重复");
|
||||
}
|
||||
|
||||
inDto.CriterionEnumStr = $"|{String.Join('|', inDto.CriterionEnumList)}|";
|
||||
|
||||
var entity = await _readingMedicineSystemQuestionRepository.InsertOrUpdateAsync(inDto);
|
||||
await _readingMedicineSystemQuestionRepository.SaveChangesAsync();
|
||||
return ResponseOutput.Ok(entity.Id.ToString());
|
||||
|
@ -121,6 +125,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
var result = await _readingMedicineSystemQuestionRepository.SaveChangesAsync();
|
||||
return ResponseOutput.Result(result);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
|
|
@ -7,6 +7,9 @@ using System;
|
|||
using IRaCIS.Core.Domain.Share;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace IRaCIS.Core.Domain.Models
|
||||
{
|
||||
///<summary>
|
||||
|
@ -86,5 +89,12 @@ namespace IRaCIS.Core.Domain.Models
|
|||
[ForeignKey("ParentId")]
|
||||
public ReadingMedicineSystemQuestion ParentQuestion { get; set; }
|
||||
|
||||
}
|
||||
|
||||
// |1|2| 这种保存
|
||||
public string CriterionEnumStr { get; set; } = string.Empty;
|
||||
|
||||
[NotMapped]
|
||||
public List<int> CriterionEnumList => CriterionEnumStr.Split('|', StringSplitOptions.RemoveEmptyEntries).Where(t => !string.IsNullOrEmpty(t)).Select(t=> Convert.ToInt32(t.Trim()) ).ToList();
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue