diff --git a/.gitignore b/.gitignore
index 588b92b8..94b54ccd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -367,3 +367,7 @@ FodyWeavers.xsd
/TrialData/2a864970-1832-4cf9-f3ab-08da0cd341a0/01a4d468-caa4-41a2-ab36-c42ba30130ac/3210c828-cf32-4a70-fa40-08da0cd72d16/9a3b5449-ac01-4df1-bf24-08da0cd72d2a/Dicom/d287dde0-b9d1-9b37-28bb-371b6a445cf1
TrialData
/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+
+
+IRaCISData
+UploadFile
diff --git a/IRaCIS.Core.API/IRaCIS.Core.API.csproj b/IRaCIS.Core.API/IRaCIS.Core.API.csproj
index e4fd66a8..0144ce82 100644
--- a/IRaCIS.Core.API/IRaCIS.Core.API.csproj
+++ b/IRaCIS.Core.API/IRaCIS.Core.API.csproj
@@ -67,24 +67,24 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
+
+
+
-
+
diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj b/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj
index 61cb9868..3339706c 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj
@@ -62,10 +62,10 @@
-
+
-
+
@@ -76,22 +76,22 @@
true
-
-
+
+
true
-
+
true
-
-
-
-
-
+
+
+
+
+
true
-
-
+
+
true
@@ -102,7 +102,7 @@
-
+
diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index 114cd421..03724d59 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -402,18 +402,15 @@
-
+
测试邮件 带附件 填充word --前端不需要用
-
-
-
-
+
选择人员下拉
diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs
index 3e7d3cd8..79e55c6b 100644
--- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs
+++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs
@@ -62,9 +62,11 @@ namespace IRaCIS.Core.Application.Service.Allocation
}
- public async Task> GetTrialCriterionList(Guid trialId)
+ public async Task> GetTrialCriterionList(Guid trialId,bool isHaveSigned=true)
{
- var list = await _repository.Where(t => t.TrialId == trialId && t.IsConfirm).OrderBy(t => t.ShowOrder)
+ var list = await _repository.Where(t => t.TrialId == trialId && t.IsConfirm)
+ .WhereIf(isHaveSigned=true,t=>t.ReadingInfoSignTime!=null)
+ .OrderBy(t => t.ShowOrder)
.Select(t => new TrialReadingCriterionDto() { TrialReadingCriterionId = t.Id, TrialReadingCriterionName = t.CriterionName, CriterionType = t.CriterionType, ReadingType = t.ReadingType })
.ToListAsync();
diff --git a/IRaCIS.Core.Application/Service/Common/CommonDocumentService.cs b/IRaCIS.Core.Application/Service/Common/CommonDocumentService.cs
index 42342225..296f987d 100644
--- a/IRaCIS.Core.Application/Service/Common/CommonDocumentService.cs
+++ b/IRaCIS.Core.Application/Service/Common/CommonDocumentService.cs
@@ -8,6 +8,8 @@ using IRaCIS.Core.Domain.Models;
using Microsoft.AspNetCore.Mvc;
using IRaCIS.Core.Application.Interfaces;
using IRaCIS.Core.Application.ViewModel;
+using IRaCIS.Core.Application.Helper;
+
namespace IRaCIS.Core.Application.Service
{
///
@@ -32,11 +34,11 @@ namespace IRaCIS.Core.Application.Service
var commonDocumentQueryable = _commonDocumentRepository.AsQueryable(true)
.WhereIf(queryCommonDocument.FileTypeEnum != null, t => t.FileTypeEnum == queryCommonDocument.FileTypeEnum)
- .WhereIf( queryCommonDocument.CriterionTypeEnum!=null ,t=>t.CriterionTypeEnum == queryCommonDocument.CriterionTypeEnum)
+ .WhereIf(queryCommonDocument.CriterionTypeEnum != null, t => t.CriterionTypeEnum == queryCommonDocument.CriterionTypeEnum)
.WhereIf(queryCommonDocument.BusinessScenarioEnum != null, t => t.BusinessScenarioEnum == queryCommonDocument.BusinessScenarioEnum)
- .WhereIf( string.IsNullOrEmpty(queryCommonDocument.Code) , t => t.Code.Contains(queryCommonDocument.Code) )
+ .WhereIf(string.IsNullOrEmpty(queryCommonDocument.Code), t => t.Code.Contains(queryCommonDocument.Code))
.WhereIf(string.IsNullOrEmpty(queryCommonDocument.Name), t => t.Name.Contains(queryCommonDocument.Name))
- .ProjectTo(_mapper.ConfigurationProvider,new { token = _userInfo.UserToken, userId = _userInfo.Id });
+ .ProjectTo(_mapper.ConfigurationProvider, new { token = _userInfo.UserToken, userId = _userInfo.Id });
return await commonDocumentQueryable.ToPagedListAsync(queryCommonDocument.PageIndex, queryCommonDocument.PageSize, String.IsNullOrEmpty(queryCommonDocument.SortField) ? nameof(CommonDocument.Code) : queryCommonDocument.SortField, queryCommonDocument.Asc); ;
}
@@ -50,6 +52,40 @@ namespace IRaCIS.Core.Application.Service
VerifyMsg = "文档的Code不能够重复。"
};
+
+ if (addOrEditCommonDocument.CriterionTypeEnum != null && addOrEditCommonDocument.CriterionTypeEnum != Domain.Share.CriterionType.NoCriterion)
+ {
+ var testValue = new Dictionary()
+ {
+ ["SponsorName"] = "Test",
+ };
+
+ var templatePhyicalPath = FileStoreHelper.GetPhysicalFilePath(_hostEnvironment, addOrEditCommonDocument.Path);
+
+
+ if (File.Exists(templatePhyicalPath))
+ {
+
+ try
+ {
+ MemoryStream memoryStream = new MemoryStream();
+
+ MiniSoftware.MiniWord.SaveAsByTemplate(memoryStream, templatePhyicalPath, testValue);
+
+ memoryStream.Seek(0, SeekOrigin.Begin);
+
+
+ }
+ catch (Exception )
+ {
+
+ return ResponseOutput.NotOk("读取模板内容失败, 请将文件另存为docx格式尝试!");
+ }
+
+
+ }
+ }
+
var entity = await _commonDocumentRepository.InsertOrUpdateAsync(addOrEditCommonDocument, true, verifyExp1);
return ResponseOutput.Ok(entity.Id.ToString());
diff --git a/IRaCIS.Core.Application/Service/Document/DTO/TrialEmailNoticeConfigViewModel.cs b/IRaCIS.Core.Application/Service/Document/DTO/TrialEmailNoticeConfigViewModel.cs
index f91d1b92..82ebf9fd 100644
--- a/IRaCIS.Core.Application/Service/Document/DTO/TrialEmailNoticeConfigViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Document/DTO/TrialEmailNoticeConfigViewModel.cs
@@ -27,8 +27,8 @@ namespace IRaCIS.Core.Application.ViewModel
public List TrialEmailNoticeUserList { get; set; }
- public new List ToUserIdList => TrialEmailNoticeUserList.Where(t => t.EmailUserType == EmailUserType.To).Select(t => t.UserId).ToList();
- public new List CopyUserIdList => TrialEmailNoticeUserList.Where(t => t.EmailUserType == EmailUserType.Copy).Select(t => t.UserId).ToList();
+ public new List ToUserTypeList => TrialEmailNoticeUserList.Where(t => t.EmailUserType == EmailUserType.To).Select(t => t.UserType).ToList();
+ public new List CopyUserTypeList => TrialEmailNoticeUserList.Where(t => t.EmailUserType == EmailUserType.Copy).Select(t => t.UserType).ToList();
}
@@ -36,7 +36,6 @@ namespace IRaCIS.Core.Application.ViewModel
public class EmailUserInfoDto
{
- public Guid UserId { get; set; }
public Guid TrialEmailNoticeConfigId { get; set; }
@@ -44,11 +43,8 @@ namespace IRaCIS.Core.Application.ViewModel
public EmailUserType EmailUserType { get; set; }
- public string Email { get; set; }
- public string UserName { get; set; }
-
- public string RealName { get; set; }
+ public UserTypeEnum UserType { get; set; }
}
@@ -86,19 +82,8 @@ namespace IRaCIS.Core.Application.ViewModel
public string FromEmail { get; set; } = string.Empty;
- public List ToUserIdList { get; set; }
- public List CopyUserIdList { get; set; }
-
-
-
- //public List ReceiveEmailList { get; set; }
- //public List CopyEmailList { get; set; }
-
- //[JsonIgnore]
- //public string ReceiveEmailsStr { get; set; } = string.Empty;
-
- //[JsonIgnore]
- //public string CopyEmailsStr { get; set; } = string.Empty;
+ public List ToUserTypeList { get; set; }
+ public List CopyUserTypeList { get; set; }
diff --git a/IRaCIS.Core.Application/Service/Document/Interface/ITrialEmailNoticeConfigService.cs b/IRaCIS.Core.Application/Service/Document/Interface/ITrialEmailNoticeConfigService.cs
index 7acbf331..54ed5e74 100644
--- a/IRaCIS.Core.Application/Service/Document/Interface/ITrialEmailNoticeConfigService.cs
+++ b/IRaCIS.Core.Application/Service/Document/Interface/ITrialEmailNoticeConfigService.cs
@@ -5,6 +5,8 @@
//--------------------------------------------------------------------
using IRaCIS.Core.Application.ViewModel;
+using IRaCIS.Core.Domain.Share;
+
namespace IRaCIS.Core.Application.Interfaces
{
///
@@ -20,6 +22,7 @@ namespace IRaCIS.Core.Application.Interfaces
Task DeleteTrialEmailNoticeConfig(Guid trialEmailNoticeConfigId);
-
- }
+ Task BaseBusinessScenarioSendEmailAsync( Guid visitTaskId);
+
+ }
}
diff --git a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs
index 85d077fe..6c5268b3 100644
--- a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs
+++ b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs
@@ -13,6 +13,7 @@ using IRaCIS.Core.Infrastructure;
using IRaCIS.Core.Application.Helper;
using IRaCIS.Application.Contracts;
using IRaCIS.Core.Infra.EFCore.Common;
+using IRaCIS.Core.Application.Contracts;
namespace IRaCIS.Core.Application.Service
{
@@ -71,95 +72,18 @@ namespace IRaCIS.Core.Application.Service
///
/// 测试邮件 带附件 填充word --前端不需要用
///
- ///
///
- ///
- ///
///
///
- public async Task FillWordTemplateAndEmailConfig(Guid trialId, Guid visitTaskId, Guid trialReadingCriterionId, CommonDocumentBusinessScenario businessScenarioEnum)
- {
- var criterionTypeEnum = await _repository.Where(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)
- .Include(t => t.TrialEmailNoticeUserList).ThenInclude(t => t.User).FirstOrDefaultAsync();
-
- if (emailConfig == null)
- {
- throw new BusinessValidationFailedException("找不到该项目标准场景下邮件的配置");
- }
-
- //填充邮件基本配置
-
- var sendEmailConfig = new SMTPEmailConfig();
-
- foreach (var item in emailConfig.TrialEmailNoticeUserList)
- {
-
- 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;
- }
- }
- }
-
-
- //邮件附件
- var path = FileStoreHelper.GetPhysicalFilePath(_hostEnvironment, emailConfig.FilePath);
-
- if (!File.Exists(path))
- {
- throw new BusinessValidationFailedException("找不到该项目标准场景下邮件模板");
- }
-
- //邮件内容html
- var isNeedSend = await FillWordTemplateAndSetEmailAsync(visitTaskId, sendEmailConfig, businessScenarioEnum, emailConfig.FilePath, path);
-
-
-
-
-
-
-
- await SendEmailHelper.SendEmailAsync(sendEmailConfig);
-
- }
-
-
-
- private async Task FillWordTemplateAndSetEmailAsync(Guid visitTaskId, SMTPEmailConfig sendEmailConfig, CommonDocumentBusinessScenario businessScenarioEnum, string fileName,string templatePath)
+ public async Task BaseBusinessScenarioSendEmailAsync(Guid visitTaskId)
{
- var isNeedSend = true;
- var answer = "否";
+ CommonDocumentBusinessScenario? businessScenarioEnum = null;
-
- var pathToFile = _hostEnvironment.WebRootPath
- + Path.DirectorySeparatorChar.ToString()
- + "EmailTemplate"
- + Path.DirectorySeparatorChar.ToString()
- + "SubjectEnrollConfirmOrPDProgress.html";
-
-
- var documentNeedBasicInfo = await _visitTaskRepository.Where(t => t.Id == visitTaskId).Select(t => new
+ #region 任务关联的项目配置 标准信息及配置,subject 信息
+ var taskInfo = await _visitTaskRepository.Where(t => t.Id == visitTaskId).Select(t => new
{
+
t.Trial.ResearchProgramNo,
t.Subject.TrialSite.TrialSiteCode,
SubjectCode = t.Subject.Code,
@@ -167,11 +91,12 @@ namespace IRaCIS.Core.Application.Service
t.Trial.IsEnrollementQualificationConfirm,
t.Trial.IsPDProgressView,
- IsBaseline = t.SourceSubjectVisit.IsBaseLine,
+
VisitEarliestScanDate = t.SourceSubjectVisit.EarliestScanDate,
VisitName = t.SourceSubjectVisit.VisitName,
t.SourceSubjectVisit.IsFinalVisit,
t.SourceSubjectVisit.PDState,
+ t.SourceSubjectVisit.IsEnrollmentConfirm,
ModuleEarliestScanDate = t.ReadModule.SubjectVisit.EarliestScanDate,
ModuleVisitName = t.ReadModule.SubjectVisit.VisitName,
@@ -182,67 +107,174 @@ namespace IRaCIS.Core.Application.Service
t.ReadingTaskState,
t.ReadingCategory,
t.SignTime,
+ //仲裁规则
+ t.TrialReadingCriterion.ArbitrationRule,
+ //单双中
+ t.TrialReadingCriterion.ReadingType,
+ //有序与否
+ t.TrialReadingCriterion.IsReadingTaskViewInOrder,
+
+ MoudulePDState = t.ReadModule.SubjectVisit.PDState,
+ t.TrialId,
+ IsBaseline = t.SourceSubjectVisit.IsBaseLine,
+
+
+
+ t.TrialReadingCriterion.CriterionType,
t.TrialReadingCriterionId,
- t.TrialReadingCriterion.ArbitrationRule,
- t.TrialReadingCriterion.ReadingType,
- t.TrialReadingCriterion.IsReadingTaskViewInOrder,
}).FirstNotNullAsync();
+ #endregion
- if (documentNeedBasicInfo.ReadingCategory == ReadingCategory.Visit || documentNeedBasicInfo.ReadingCategory == ReadingCategory.Judge || documentNeedBasicInfo.ReadingCategory == ReadingCategory.Global)
+
+ #region 任务 -邮件场景区分
+
+ if (taskInfo.ReadingTaskState == ReadingTaskState.HaveSigned)
{
+ //入组确认场景
+ if (taskInfo.IsEnrollmentConfirm && taskInfo.IsEnrollementQualificationConfirm && taskInfo.IsBaseline)
+ {
+ businessScenarioEnum = CommonDocumentBusinessScenario.EnrollConfirmed;
+
+
+ }
+ //PD确认场景
+ else if (taskInfo.IsPDProgressView &&
+ (taskInfo.PDState == PDStateEnum.PDProgress && taskInfo.SourceSubjectVisitId != null) ||
+ (taskInfo.SouceReadModuleId != null && taskInfo.MoudulePDState == PDStateEnum.PDProgress))
+ {
+ businessScenarioEnum = CommonDocumentBusinessScenario.PDConfirmed;
+ }
+ else
+ {
+ return;
+ }
}
else
{
- //isNeedSend = false;
- return false;
+ throw new BusinessValidationFailedException("进行邮件发送前,该任务必须已签名完成并已经触发完成相应的任务生成");
}
- //入组确认仅在基线
- if (businessScenarioEnum == CommonDocumentBusinessScenario.EnrollConfirmed && documentNeedBasicInfo.IsEnrollementQualificationConfirm && documentNeedBasicInfo.IsBaseline)
+
+
+ var emailConfig = await _trialEmailNoticeConfigRepository.Where(t => t.TrialId == taskInfo.TrialId && t.CriterionTypeEnum == taskInfo.CriterionType && t.BusinessScenarioEnum == businessScenarioEnum)
+ .Include(t => t.TrialEmailNoticeUserList).FirstOrDefaultAsync();
+
+
+ if (emailConfig == null)
+ {
+ throw new BusinessValidationFailedException("找不到该项目标准场景下邮件的配置");
+ }
+
+ #endregion
+
+
+ #region 发收件人配置
+
+ var sendEmailConfig = new SMTPEmailConfig();
+
+ var toUserList = _repository.Where(t => t.TrialId == taskInfo.TrialId && emailConfig.TrialEmailNoticeUserList.Where(t => t.EmailUserType == EmailUserType.To).Select(c => c.UserType).Contains(t.User.UserTypeEnum)).Select(t => new { t.User.EMail, t.User.FullName });
+
+ var copyUserList = _repository.Where(t => t.TrialId == taskInfo.TrialId && emailConfig.TrialEmailNoticeUserList.Where(t => t.EmailUserType == EmailUserType.Copy).Select(c => c.UserType).Contains(t.User.UserTypeEnum)).Select(t => new { t.User.EMail, t.User.FullName });
+
+
+ if (emailConfig.FromEmail.Contains("@") && !string.IsNullOrEmpty(emailConfig.FromEmail))
{
- //如果其他阅片人已经做了,说明发送了入组确认报告,第二个人做完就不发送了
+ sendEmailConfig.FromEmailAddress = new MimeKit.MailboxAddress(emailConfig.FromName, emailConfig.FromEmail);
- if (await _visitTaskRepository.AnyAsync(t => t.SourceSubjectVisitId == documentNeedBasicInfo.SourceSubjectVisitId && t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false &&
+ //测试
+ sendEmailConfig.ToMailAddressList.Add(new MimeKit.MailboxAddress("ddd", "872297557@qq.com"));
+
+ }
+ else
+ {
+ throw new BusinessValidationFailedException("发件邮箱有误,请核实");
+ }
+
+ foreach (var item in toUserList)
+ {
+
+ if (item.EMail.Contains("@") && !string.IsNullOrEmpty(item.EMail))
+ {
+
+ sendEmailConfig.ToMailAddressList.Add(new MimeKit.MailboxAddress(item.FullName, item.EMail));
+
+ }
+ }
+ foreach (var item in copyUserList)
+ {
+
+ if (item.EMail.Contains("@") && !string.IsNullOrEmpty(item.EMail))
+ {
+
+ sendEmailConfig.CopyToMailAddressList.Add(new MimeKit.MailboxAddress(item.FullName, item.EMail));
+
+ }
+ }
+ #endregion
+
+
+
+
+
+
+ //邮件附件
+ var path = FileStoreHelper.GetPhysicalFilePath(_hostEnvironment, emailConfig.FilePath);
+
+ if (!File.Exists(path))
+ {
+ throw new BusinessValidationFailedException("找不到该项目标准场景下邮件模板");
+ }
+
+
+ var pathToFile = _hostEnvironment.WebRootPath
+ + Path.DirectorySeparatorChar.ToString()
+ + "EmailTemplate"
+ + Path.DirectorySeparatorChar.ToString()
+ + "SubjectEnrollConfirmOrPDProgress.html";
+
+ var answer = "否";
+ var isNeedSend = true;
+
+ if (businessScenarioEnum == CommonDocumentBusinessScenario.EnrollConfirmed)
+ {
+ //如果其他阅片人已经做了,说明发送了入组确认报告,第二个人做完就不发送了
+ if (await _visitTaskRepository.AnyAsync(t => t.SourceSubjectVisitId == taskInfo.SourceSubjectVisitId && t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false &&
t.Id != visitTaskId && t.ReadingTaskState == ReadingTaskState.HaveSigned))
{
- //isNeedSend = false;
-
- return false;
+ isNeedSend = false;
}
-
- sendEmailConfig.TopicDescription = "入组确认";
-
- using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile))
+ else
{
- var templateInfo = SourceReader.ReadToEnd();
+ sendEmailConfig.TopicDescription = "入组确认";
+
+ using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile))
+ {
+ var templateInfo = SourceReader.ReadToEnd();
- sendEmailConfig.HtmlBodyStr = string.Format(templateInfo,
- $" 附件为入组确认报告,请查收 "
- );
+ sendEmailConfig.HtmlBodyStr = string.Format(templateInfo,
+ $" 附件为入组确认报告,请查收 "
+ );
+ }
+
+
+
+ if (await _repository.Where().AnyAsync(x => x.VisitTaskId == visitTaskId && x.Answer == TargetState.Exist.GetEnumInt() &&
+ x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State && x.ReadingQuestionTrial.LesionType == LesionType.TargetLesion))
+ {
+
+ answer = "是";
+ }
}
-
-
- if (await _repository.Where().AnyAsync(x => x.VisitTaskId == visitTaskId && x.Answer == TargetState.Exist.GetEnumInt() &&
- x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State && x.ReadingQuestionTrial.LesionType == LesionType.TargetLesion))
- {
-
- answer = "是";
-
- //修改Subject 状态 need to do
-
- }
-
-
+
}
- else if (businessScenarioEnum == CommonDocumentBusinessScenario.PDConfirmed && documentNeedBasicInfo.IsPDProgressView)
+ else if (businessScenarioEnum == CommonDocumentBusinessScenario.PDConfirmed)
{
-
sendEmailConfig.TopicDescription = "疾病进展";
using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile))
@@ -257,16 +289,16 @@ namespace IRaCIS.Core.Application.Service
//有序
- if (documentNeedBasicInfo.IsReadingTaskViewInOrder)
+ if (taskInfo.IsReadingTaskViewInOrder)
{
//单重
- if (documentNeedBasicInfo.ReadingType == ReadingMethod.Single)
+ if (taskInfo.ReadingType == ReadingMethod.Single)
{
//仲裁在访视上 或者在阅片期
- if (documentNeedBasicInfo.ArbitrationRule != ArbitrationRule.None)
+ if (taskInfo.ArbitrationRule != ArbitrationRule.None)
{
throw new BusinessValidationFailedException("单重有序阅片配置有误(不应该有仲裁对象配置),请核查!");
@@ -275,10 +307,10 @@ namespace IRaCIS.Core.Application.Service
//要求PD 确认的访视 是截止访视 还是非截止访视(根据该访视有没有配置阅片期来判断)
- if (documentNeedBasicInfo.ReadingCategory == ReadingCategory.Visit)
+ if (taskInfo.ReadingCategory == ReadingCategory.Visit)
{
//存在阅片期 那么就是截止访视
- if (await _repository.Where(t => t.TrialReadingCriterionId == documentNeedBasicInfo.TrialReadingCriterionId && t.SubjectVisitId == documentNeedBasicInfo.SourceSubjectVisitId && t.ReadingSetType == ReadingSetType.ImageReading).AnyAsync())
+ if (await _repository.Where(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.SubjectVisitId == taskInfo.SourceSubjectVisitId && t.ReadingSetType == ReadingSetType.ImageReading).AnyAsync())
{
isNeedSend = false;
}
@@ -287,7 +319,7 @@ namespace IRaCIS.Core.Application.Service
answer = await TranslatePdStateAsync(visitTaskId, ReadingCategory.Visit);
}
}
- else if (documentNeedBasicInfo.ReadingCategory == ReadingCategory.Global)
+ else if (taskInfo.ReadingCategory == ReadingCategory.Global)
{
answer = await TranslatePdStateAsync(visitTaskId, ReadingCategory.Global);
}
@@ -299,16 +331,16 @@ namespace IRaCIS.Core.Application.Service
}
//双重
- else if (documentNeedBasicInfo.ReadingType == ReadingMethod.Double)
+ else if (taskInfo.ReadingType == ReadingMethod.Double)
{
//仲裁在访视上 就没有全局阅片 没有阅片期
- if (documentNeedBasicInfo.ArbitrationRule == ArbitrationRule.Visit)
+ if (taskInfo.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();
+ var taskList = await _visitTaskRepository.Where(t => t.SourceSubjectVisitId == taskInfo.SourceSubjectVisitId && t.IsAnalysisCreate == false && t.TaskState == TaskState.Effect &&
+ (t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Judge)).ToListAsync();
//这里要求 到这里已经如果有裁判 已经生成裁判了保存数据库
@@ -316,7 +348,7 @@ namespace IRaCIS.Core.Application.Service
if (taskList.Count == 2 && taskList.Count(t => t.ReadingTaskState == ReadingTaskState.HaveSigned && t.ReadingCategory == ReadingCategory.Visit) == 2)
{
- answer = await TranslatePdStateAsync(visitTaskId, documentNeedBasicInfo.ReadingCategory);
+ answer = await TranslatePdStateAsync(visitTaskId, taskInfo.ReadingCategory);
}
//双人 产生裁判,并且裁判完成 发
else if (taskList.Count == 3 && taskList.Count(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) == 3 && taskList.Where(t => t.ReadingCategory == ReadingCategory.Judge).Count() == 1)
@@ -327,24 +359,23 @@ namespace IRaCIS.Core.Application.Service
}
else
{
- //isNeedSend = false;
+ isNeedSend = false;
- return false;
}
-
+
}
//在阅片期 仲裁在全局阅片,不会在访视上
- else if (documentNeedBasicInfo.ArbitrationRule == ArbitrationRule.Reading)
+ else if (taskInfo.ArbitrationRule == ArbitrationRule.Reading)
{
//是访视任务 不可能是裁判任务(访视上不会生成裁判),也不会是全局任务(全局任务 SourceSubjectVisitId=null )
- if (documentNeedBasicInfo.SourceSubjectVisitId != null)
+ if (taskInfo.SourceSubjectVisitId != null)
{
#region MyRegion
////看该访视是否是截止访视
- //var moduleIdList = await _repository.Where(t => t.TrialReadingCriterionId == documentNeedBasicInfo.TrialReadingCriterionId && t.SubjectVisitId == documentNeedBasicInfo.SourceSubjectVisitId && t.ReadingSetType == ReadingSetType.ImageReading)
+ //var moduleIdList = await _repository.Where(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.SubjectVisitId == taskInfo.SourceSubjectVisitId && t.ReadingSetType == ReadingSetType.ImageReading)
// .Select(t => (Guid?) t.Id).ToListAsync();
////截止访视
@@ -371,16 +402,16 @@ namespace IRaCIS.Core.Application.Service
}
//是全局任务 或者全局的裁判任务 (如果是全局任务,那么此时裁判任务已经生成,如果是全局裁判)
- else if (documentNeedBasicInfo.SouceReadModuleId != null)
+ else if (taskInfo.SouceReadModuleId != null)
{
- var taskList = await _visitTaskRepository.Where(t => t.IsAnalysisCreate == false && t.TaskState == TaskState.Effect && t.SouceReadModuleId== documentNeedBasicInfo.SouceReadModuleId
+ var taskList = await _visitTaskRepository.Where(t => t.IsAnalysisCreate == false && t.TaskState == TaskState.Effect && t.SouceReadModuleId == taskInfo.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);
+ answer = await TranslatePdStateAsync(visitTaskId, taskInfo.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)
@@ -391,9 +422,8 @@ namespace IRaCIS.Core.Application.Service
}
else
{
- //isNeedSend = false;
+ isNeedSend = false;
- return false;
}
}
@@ -420,22 +450,22 @@ namespace IRaCIS.Core.Application.Service
//单重
- if (documentNeedBasicInfo.ReadingType == ReadingMethod.Single && documentNeedBasicInfo.ArbitrationRule == ArbitrationRule.None)
+ if (taskInfo.ReadingType == ReadingMethod.Single && taskInfo.ArbitrationRule == ArbitrationRule.None)
{
- answer = await TranslatePdStateAsync(visitTaskId, documentNeedBasicInfo.ReadingCategory);
+ answer = await TranslatePdStateAsync(visitTaskId, taskInfo.ReadingCategory);
}
//双重 截止访视只在阅片期的时候存在 要求PD确认的访视 肯定是非截止访视
- else if (documentNeedBasicInfo.ReadingType == ReadingMethod.Double && documentNeedBasicInfo.ArbitrationRule == ArbitrationRule.Visit)
+ else if (taskInfo.ReadingType == ReadingMethod.Double && taskInfo.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();
+ var taskList = await _visitTaskRepository.Where(t => t.SourceSubjectVisitId == taskInfo.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);
+ answer = await TranslatePdStateAsync(visitTaskId, taskInfo.ReadingCategory);
}
else if (taskList.Count == 3 && taskList.Count(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) == 3 && taskList.Where(t => t.ReadingCategory == ReadingCategory.Judge).Count() == 1)
{
@@ -445,8 +475,7 @@ namespace IRaCIS.Core.Application.Service
}
else
{
- //isNeedSend = false;
- return false;
+ isNeedSend = false;
}
}
@@ -459,46 +488,49 @@ namespace IRaCIS.Core.Application.Service
}
}
-
+ else
+ {
+ isNeedSend=false;
+ }
if (isNeedSend)
{
-
-
var value = new Dictionary()
{
- ["SponsorName"] = documentNeedBasicInfo.SponsorName,
- ["ResearchProgramNo"] = documentNeedBasicInfo.ResearchProgramNo,
- ["TrialSiteCode"] = documentNeedBasicInfo.TrialSiteCode,
- ["SubjectCode"] = documentNeedBasicInfo.SubjectCode,
- ["VisitName"] = documentNeedBasicInfo.VisitName,
- ["EarliestScanDate"] = documentNeedBasicInfo.SourceSubjectVisitId!=null? documentNeedBasicInfo.VisitEarliestScanDate: documentNeedBasicInfo.ModuleEarliestScanDate,
- ["SignTime"] = documentNeedBasicInfo.SignTime,
+ ["SponsorName"] = taskInfo.SponsorName,
+ ["ResearchProgramNo"] = taskInfo.ResearchProgramNo,
+ ["TrialSiteCode"] = taskInfo.TrialSiteCode,
+ ["SubjectCode"] = taskInfo.SubjectCode,
+ ["VisitName"] = taskInfo.VisitName,
+ ["EarliestScanDate"] = taskInfo.SourceSubjectVisitId != null ? taskInfo.VisitEarliestScanDate : taskInfo.ModuleEarliestScanDate,
+ ["SignTime"] = taskInfo.SignTime,
["Result"] = answer
};
MemoryStream memoryStream = new MemoryStream();
+ MiniSoftware.MiniWord.SaveAsByTemplate(memoryStream, path, value);
- MiniSoftware.MiniWord.SaveAsByTemplate(memoryStream, templatePath, value);
+ memoryStream.Seek(0, SeekOrigin.Begin);
sendEmailConfig.EmailAttachMentConfigList.Add(new EmailAttachMentConfig()
{
- FileName = fileName,
+ FileName = emailConfig.FileName,
FileStream = memoryStream
});
- return false;
- }
- else
- {
- return false;
+
+ await SendEmailHelper.SendEmailAsync(sendEmailConfig);
+
}
+
}
+
+
private async Task TranslatePdStateAsync(Guid visitTaskId, ReadingCategory readingCategory)
{
@@ -551,12 +583,12 @@ namespace IRaCIS.Core.Application.Service
///
///
///
- public async Task> GetTrialUserSelectList(Guid trialId)
+ public async Task> GetTrialUserTypeSelectList(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().Select(t => t.User.UserTypeRole)
- .ProjectTo(_mapper.ConfigurationProvider);
+ .ProjectTo(_mapper.ConfigurationProvider);
return await query.ToListAsync();
@@ -588,15 +620,15 @@ namespace IRaCIS.Core.Application.Service
var entity = _mapper.Map(addOrEditTrialEmailNoticeConfig);
- foreach (var item in addOrEditTrialEmailNoticeConfig.ToUserIdList)
+ foreach (var item in addOrEditTrialEmailNoticeConfig.ToUserTypeList)
{
- entity.TrialEmailNoticeUserList.Add(new TrialEmailNoticeUser() { EmailUserType = EmailUserType.To, UserId = item });
+ entity.TrialEmailNoticeUserList.Add(new TrialEmailNoticeUser() { EmailUserType = EmailUserType.To, UserType = item });
}
- foreach (var item in addOrEditTrialEmailNoticeConfig.CopyUserIdList)
+ foreach (var item in addOrEditTrialEmailNoticeConfig.CopyUserTypeList)
{
- entity.TrialEmailNoticeUserList.Add(new TrialEmailNoticeUser() { EmailUserType = EmailUserType.Copy, UserId = item });
+ entity.TrialEmailNoticeUserList.Add(new TrialEmailNoticeUser() { EmailUserType = EmailUserType.Copy, UserType = item });
}
@@ -619,15 +651,15 @@ namespace IRaCIS.Core.Application.Service
List trialEmailNoticeUsers = new List();
- foreach (var item in addOrEditTrialEmailNoticeConfig.ToUserIdList)
+ foreach (var item in addOrEditTrialEmailNoticeConfig.ToUserTypeList)
{
- trialEmailNoticeUsers.Add(new TrialEmailNoticeUser() { EmailUserType = EmailUserType.To, UserId = item, TrialEmailNoticeConfigId = entity.Id });
+ trialEmailNoticeUsers.Add(new TrialEmailNoticeUser() { EmailUserType = EmailUserType.To, UserType = item, TrialEmailNoticeConfigId = entity.Id });
}
- foreach (var item in addOrEditTrialEmailNoticeConfig.CopyUserIdList)
+ foreach (var item in addOrEditTrialEmailNoticeConfig.CopyUserTypeList)
{
- trialEmailNoticeUsers.Add(new TrialEmailNoticeUser() { EmailUserType = EmailUserType.Copy, UserId = item, TrialEmailNoticeConfigId = entity.Id });
+ trialEmailNoticeUsers.Add(new TrialEmailNoticeUser() { EmailUserType = EmailUserType.Copy, UserType = item, TrialEmailNoticeConfigId = entity.Id });
}
await _repository.AddRangeAsync(trialEmailNoticeUsers);
diff --git a/IRaCIS.Core.Application/Service/Document/_MapConfig.cs b/IRaCIS.Core.Application/Service/Document/_MapConfig.cs
index 1ea6922d..d1c4f6b3 100644
--- a/IRaCIS.Core.Application/Service/Document/_MapConfig.cs
+++ b/IRaCIS.Core.Application/Service/Document/_MapConfig.cs
@@ -81,10 +81,7 @@ namespace IRaCIS.Core.Application.Service
.ForMember(d => d.UserName, c => c.MapFrom(t => t.User.UserName));
- CreateMap()
- .ForMember(d => d.Email, c => c.MapFrom(t => t.User.EMail))
- .ForMember(d => d.RealName, c => c.MapFrom(t => t.User.FullName))
- .ForMember(d => d.UserName, c => c.MapFrom(t => t.User.UserName));
+ CreateMap();
}
}
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingMedicineQuestionViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingMedicineQuestionViewModel.cs
index 6ce7ed21..e7f08410 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingMedicineQuestionViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingMedicineQuestionViewModel.cs
@@ -17,7 +17,7 @@ namespace IRaCIS.Core.Application.ViewModel
}
///ReadingMedicineSystemQuestionQuery 列表查询参数模型
- public class ReadingMedicineSystemQuestionQuery
+ public class ReadingMedicineSystemQuestionQuery:PageInput
{
public string Type { get; set; } = string.Empty;
public string ParentTriggerValue { get; set; } = string.Empty;
diff --git a/IRaCIS.Core.Application/Service/Reading/MedicalAudit/ReadingMedicineQuestionService.cs b/IRaCIS.Core.Application/Service/Reading/MedicalAudit/ReadingMedicineQuestionService.cs
index f0b70b0e..64fe6ee8 100644
--- a/IRaCIS.Core.Application/Service/Reading/MedicalAudit/ReadingMedicineQuestionService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/MedicalAudit/ReadingMedicineQuestionService.cs
@@ -43,7 +43,7 @@ namespace IRaCIS.Core.Application.Service
///
///
[HttpPost]
- public async Task> GetReadingMedicineSystemQuestionList(ReadingMedicineSystemQuestionQuery inDto)
+ public async Task> GetReadingMedicineSystemQuestionList(ReadingMedicineSystemQuestionQuery inDto)
{
//避免前端遍历
var criterionEnum = inDto.TrialReadingCriterionId != null ? _readingQuestionCriterionTrialRepository.Where(t => t.Id == inDto.TrialReadingCriterionId).Select(t => t.CriterionType).FirstOrDefault(): CriterionType.NoCriterion;
@@ -57,7 +57,8 @@ namespace IRaCIS.Core.Application.Service
.WhereIf(inDto.CriterionEnum != null, x => x.CriterionEnumStr.Contains($"|{inDto.CriterionEnum}|") )
.WhereIf(inDto.TrialReadingCriterionId != null, x => x.CriterionEnumStr.Contains($"|{criterionEnum}|"))
.ProjectTo(_mapper.ConfigurationProvider).OrderBy(x => x.ShowOrder);
- return await query.ToListAsync();
+
+ return await query.ToPagedListAsync(inDto.PageIndex, inDto.PageSize,inDto.SortField,inDto.Asc);
}
///
diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
index aec3342b..9e6d8e60 100644
--- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
@@ -9,6 +9,7 @@ using IRaCIS.Core.Application.Contracts;
using IRaCIS.Core.Infrastructure;
using IRaCIS.Core.Application.Service;
using IRaCIS.Core.Application.ViewModel;
+using IRaCIS.Core.Application.Interfaces;
namespace IRaCIS.Application.Services
{
@@ -45,6 +46,8 @@ namespace IRaCIS.Application.Services
private readonly IRepository _readingQuestionSystem;
private readonly IRepository _readingQuestionTrialRepository;
+ private readonly ITrialEmailNoticeConfigService _trialEmailNoticeConfigService;
+
public ReadingImageTaskService(
IMapper mapper,
@@ -72,7 +75,9 @@ namespace IRaCIS.Application.Services
IRepository readingQuestionCriterionTrialRepository,
IRepository readingQuestionCriterionSystemRepository,
IRepository ReadingQuestionSystem,
- IRepository readingQuestionTrialRepository
+ IRepository readingQuestionTrialRepository,
+
+ ITrialEmailNoticeConfigService trialEmailNoticeConfigService
)
{
base._mapper = mapper;
@@ -101,6 +106,8 @@ namespace IRaCIS.Application.Services
this._readingQuestionCriterionSystemRepository = readingQuestionCriterionSystemRepository;
this._readingQuestionSystem = ReadingQuestionSystem;
this._readingQuestionTrialRepository = readingQuestionTrialRepository;
+
+ _trialEmailNoticeConfigService = trialEmailNoticeConfigService;
}
@@ -135,10 +142,10 @@ namespace IRaCIS.Application.Services
[HttpPost]
public async Task<(List, object)> GetRelatedVisitTask(GetRelatedVisitTaskInDto inDto)
{
- var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Include(x=>x.TrialReadingCriterion).FirstNotNullAsync();
+ var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync();
var baselineVisitId = await _subjectVisitRepository.Where(x => x.SubjectId == taskInfo.SubjectId && x.IsBaseLine && !x.IsLostVisit).Select(x => x.Id).FirstNotNullAsync();
var result = await _visitTaskRepository
- .WhereIf(taskInfo.TaskState != TaskState.Effect,x=>x.Id== inDto.VisitTaskId)
+ .WhereIf(taskInfo.TaskState != TaskState.Effect, x => x.Id == inDto.VisitTaskId)
.Where(x =>
(x.TrialId == taskInfo.TrialId &&
x.SubjectId == taskInfo.SubjectId &&
@@ -338,7 +345,181 @@ namespace IRaCIS.Application.Services
[HttpPost]
public async Task GetReadingReportEvaluation(GetReadingReportEvaluationInDto indto)
{
- return await _readingCalculateService.GetReadingReportEvaluation(indto);
+
+
+ GetReadingReportEvaluationOutDto result = new GetReadingReportEvaluationOutDto();
+
+ result.CalculateResult = await _readingCalculateService.GetReportVerify(new GetReportVerifyInDto()
+ {
+ VisitTaskId = indto.VisitTaskId
+ });
+
+ var visitTaskInfo = await _visitTaskRepository.Where(x => x.Id == indto.VisitTaskId).FirstNotNullAsync();
+
+ //if (visitTaskInfo.TaskState != TaskState.Effect)
+ //{
+ // throw new BusinessValidationFailedException($"当前任务已失效!");
+ //}
+ result.ReadingTaskState = visitTaskInfo.ReadingTaskState;
+ var taskInfoList = await _visitTaskRepository
+ // 失效的只查看自己
+ .WhereIf(visitTaskInfo.TaskState != TaskState.Effect, x => x.Id == indto.VisitTaskId)
+ .Where(x => (x.SubjectId == visitTaskInfo.SubjectId && x.TaskState == TaskState.Effect
+ && x.IsAnalysisCreate == visitTaskInfo.IsAnalysisCreate
+ && x.IsSelfAnalysis == visitTaskInfo.IsSelfAnalysis
+ && x.ArmEnum == visitTaskInfo.ArmEnum
+ && x.TrialReadingCriterionId == visitTaskInfo.TrialReadingCriterionId
+ && x.ReadingCategory == ReadingCategory.Visit && !x.IsAnalysisCreate && x.ReadingTaskState == ReadingTaskState.HaveSigned) || x.Id == indto.VisitTaskId
+ ).OrderBy(x => x.VisitTaskNum).Select(x => new VisitTaskInfo()
+ {
+ BlindName = x.SourceSubjectVisit.BlindName,
+ IsBaseLine = x.SourceSubjectVisit.IsBaseLine,
+ VisitTaskId = x.Id,
+ TaskName = x.TaskName,
+ VisitTaskNum = x.VisitTaskNum,
+ IsCurrentTask = x.Id == indto.VisitTaskId,
+
+ }).ToListAsync();
+
+ result.VisitTaskList = taskInfoList;
+
+ var visitTaskIds = taskInfoList.Select(x => x.VisitTaskId).ToList();
+
+ var criterionId = visitTaskInfo.TrialReadingCriterionId;
+ var questionList = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == criterionId).ToListAsync();
+ var tableQuestionList = await _readingTableQuestionTrialRepository.Where(x => x.TrialCriterionId == criterionId).OrderBy(x => x.ShowOrder).ToListAsync();
+ var tableAnsweRowInfos = await _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == indto.VisitTaskId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+
+ var answers = await _readingTaskQuestionAnswerRepository.Where(x => visitTaskIds.Contains(x.VisitTaskId)).ToListAsync();
+ var tableAnswers = await _readingTableQuestionAnswerRepository.Where(x => visitTaskIds.Contains(x.VisitTaskId)).ToListAsync();
+
+
+ // 第一级
+
+ #region 构造问题
+ List questions = questionList.Where(x => x.Type == ReadingQestionType.Group).OrderBy(x => x.ShowOrder).Select(x => new ReadingReportDto()
+ {
+ QuestionId = x.Id,
+ GroupName = x.GroupName,
+ IsShowInDicom = x.IsShowInDicom,
+ Type = x.Type,
+ QuestionType = x.QuestionType,
+ LesionType = x.LesionType,
+ QuestionGenre = x.QuestionGenre,
+ DictionaryCode = x.DictionaryCode,
+ TypeValue = x.TypeValue,
+ QuestionName = x.QuestionName,
+ ShowOrder = x.ShowOrder,
+ ValueType = x.ValueType,
+ Unit = x.Unit,
+
+ }).ToList();
+
+ // 分组
+ foreach (var item in questions)
+ {
+ item.Childrens = questionList.Where(x => x.GroupName == item.GroupName && x.Type != ReadingQestionType.Group).OrderBy(x => x.ShowOrder).Select(x => new ReadingReportDto()
+ {
+ GroupName = x.GroupName,
+ QuestionId = x.Id,
+ IsShowInDicom = x.IsShowInDicom,
+ QuestionName = x.QuestionName,
+ LesionType = x.LesionType,
+ QuestionGenre = x.QuestionGenre,
+ DictionaryCode = x.DictionaryCode,
+ Type = x.Type,
+ QuestionType = x.QuestionType,
+ TypeValue = x.TypeValue,
+ ShowOrder = x.ShowOrder,
+ OrderMark = x.OrderMark,
+ ValueType = x.ValueType,
+ Unit = x.Unit,
+
+ }).ToList();
+
+ // 问题
+ foreach (var question in item.Childrens)
+ {
+
+ foreach (var task in taskInfoList)
+ {
+
+ question.Answer.Add(new TaskQuestionAnswer()
+ {
+ Answer = answers.Where(x => x.VisitTaskId == task.VisitTaskId && x.ReadingQuestionTrialId == question.QuestionId).Select(x => x.Answer).FirstIsNullReturnEmpty(),
+ TaskName = task.TaskName,
+ VisitTaskId = task.VisitTaskId,
+ });
+ }
+
+ // 构造表格行数据
+
+
+ var rowlist = tableAnsweRowInfos.Where(x => x.QuestionId == question.QuestionId).OrderBy(x => x.RowIndex).ToList();
+
+
+ question.Childrens = rowlist.Select(x => new ReadingReportDto()
+ {
+ QuestionName = question.OrderMark + x.RowIndex.GetLesionMark(),
+ SplitOrMergeLesionName = x.MergeName.IsNullOrEmpty() ? x.SplitName : x.MergeName,
+ SplitOrMergeType = x.SplitOrMergeType,
+ LesionType = question.LesionType,
+ IsCanEditPosition = x.IsCanEditPosition,
+ RowIndex = x.RowIndex,
+ }).ToList();
+
+
+ foreach (var row in question.Childrens)
+ {
+ // tableQuestion
+ row.Childrens = tableQuestionList.Where(x => x.ReadingQuestionId == question.QuestionId).Select(x => new ReadingReportDto()
+ {
+ QuestionName = x.QuestionName,
+ QuestionId = x.ReadingQuestionId,
+ TableQuestionId = x.Id,
+ Type = x.Type,
+ LesionType = question.LesionType,
+ TableQuestionType = x.TableQuestionType,
+ DictionaryCode = x.DictionaryCode,
+ QuestionMark = x.QuestionMark,
+ TypeValue = x.TypeValue,
+ RowIndex = row.RowIndex,
+ ShowOrder = x.ShowOrder,
+ ValueType = x.ValueType,
+ Unit = x.Unit,
+ }).ToList();
+
+
+ foreach (var tableQuestion in row.Childrens)
+ {
+ foreach (var task in taskInfoList)
+ {
+
+ tableQuestion.Answer.Add(new TaskQuestionAnswer()
+ {
+ Answer = tableAnswers.Where(x => x.VisitTaskId == task.VisitTaskId && x.QuestionId == tableQuestion.QuestionId && x.RowIndex == tableQuestion.RowIndex && x.TableQuestionId == tableQuestion.TableQuestionId).Select(x => x.Answer).FirstIsNullReturnEmpty(),
+ TaskName = task.TaskName,
+ VisitTaskId = task.VisitTaskId,
+ });
+ }
+ }
+
+
+ }
+
+
+ };
+ }
+ #endregion
+
+
+
+ result.TaskQuestions = questions;
+
+
+
+ return result;
+
}
///
@@ -475,7 +656,7 @@ namespace IRaCIS.Application.Services
{
readingTaskState = visitTaskInfo.ReadingTaskState,
FormType = formType,
- TaskNum= visitTaskInfo.VisitTaskNum,
+ TaskNum = visitTaskInfo.VisitTaskNum,
}); ;
}
@@ -502,7 +683,7 @@ namespace IRaCIS.Application.Services
ShowOrder = x.ShowOrder,
GroupName = string.Empty,
Id = x.Id,
- DictionaryCode=x.DictionaryCode,
+ DictionaryCode = x.DictionaryCode,
Type = x.Type,
TableQuestionType = x.TableQuestionType,
DependParentId = x.DependParentId,
@@ -518,8 +699,8 @@ namespace IRaCIS.Application.Services
QuestionName = x.QuestionName,
RelationQuestions = new List(),
Remark = x.Remark,
- ValueType=x.ValueType,
- Unit=x.Unit,
+ ValueType = x.ValueType,
+ Unit = x.Unit,
}).ToList();
});
var thisAnswer = tableAnswers.Where(x => x.QuestionId == item.Id).ToList();
@@ -536,8 +717,6 @@ namespace IRaCIS.Application.Services
var rowInfo = tableAnsweRowInfos.Where(y => y.RowIndex == x && y.QuestionId == item.Id).FirstOrDefault();
- answers.Add("BlindName", rowInfo.BlindName);
- answers.Add("IsDicomReading", rowInfo.IsDicomReading.ToString());
answers.Add("MeasureData", rowInfo == null ? string.Empty : rowInfo.MeasureData);
answers.Add("RowIndex", x.ToString());
answers.Add("RowId", rowInfo.Id.ToString());
@@ -546,8 +725,8 @@ namespace IRaCIS.Application.Services
answers.Add("InstanceId", rowInfo == null ? string.Empty : rowInfo.InstanceId.ToString());
answers.Add("SeriesId", rowInfo == null ? string.Empty : rowInfo.SeriesId.ToString());
answers.Add("IsCurrentTaskAdd", rowInfo == null ? false.ToString() : rowInfo.IsCurrentTaskAdd.ToString());
- answers.Add("SplitOrMergeLesionName",rowInfo.SplitName.IsNullOrEmpty()? rowInfo.MergeName: rowInfo.SplitName);
- answers.Add("SplitOrMergeType", rowInfo.SplitOrMergeType==null?string.Empty:((int)rowInfo.SplitOrMergeType).ToString());
+ answers.Add("SplitOrMergeLesionName", rowInfo.SplitName.IsNullOrEmpty() ? rowInfo.MergeName : rowInfo.SplitName);
+ answers.Add("SplitOrMergeType", rowInfo.SplitOrMergeType == null ? string.Empty : ((int)rowInfo.SplitOrMergeType).ToString());
item.TableQuestions.Answers.Add(answers);
@@ -715,7 +894,7 @@ namespace IRaCIS.Application.Services
public async Task DeleteReadingRowAnswer(DeleteReadingRowAnswerInDto inDto)
{
- var deleteRowInfo = await _readingTableAnswerRowInfoRepository.Where(x =>x.Id== inDto.RowId).FirstNotNullAsync();
+ var deleteRowInfo = await _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId && x.RowIndex == inDto.RowIndex && x.QuestionId == inDto.QuestionId).FirstNotNullAsync();
if (deleteRowInfo == null)
{
return ResponseOutput.Ok(true);
@@ -727,8 +906,8 @@ namespace IRaCIS.Application.Services
throw new BusinessValidationFailedException($"当前病灶分裂出其他病灶或者其他病灶合并到了当前病灶,删除失败");
}
- await _readingTableQuestionAnswerRepository.DeleteFromQueryAsync(x => x.RowId== inDto.RowId);
- await _readingTableAnswerRowInfoRepository.DeleteFromQueryAsync(x => x.Id==inDto.RowId);
+ await _readingTableQuestionAnswerRepository.DeleteFromQueryAsync(x => x.VisitTaskId == inDto.VisitTaskId && x.RowIndex == inDto.RowIndex && x.QuestionId == inDto.QuestionId);
+ await _readingTableAnswerRowInfoRepository.DeleteFromQueryAsync(x => x.VisitTaskId == inDto.VisitTaskId && x.RowIndex == inDto.RowIndex && x.QuestionId == inDto.QuestionId);
await _readingTableAnswerRowInfoRepository.SaveChangesAsync();
@@ -855,8 +1034,6 @@ namespace IRaCIS.Application.Services
rowInfo.TrialId = inDto.TrialId;
rowInfo.QuestionId = inDto.QuestionId;
rowInfo.MeasureData = inDto.MeasureData;
- rowInfo.BlindName = inDto.BlindName;
- rowInfo.IsDicomReading = inDto.IsDicomReading;
rowInfo.IsCurrentTaskAdd = isCurrentTaskAdd;
rowInfo.FristAddTaskNum = inDto.FristAddTaskNum;
rowInfo.RowIndex = inDto.RowIndex;
@@ -993,16 +1170,16 @@ namespace IRaCIS.Application.Services
var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync();
var readingQuestionList = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == taskInfo.TrialReadingCriterionId
- &&(x.IsJudgeQuestion||x.IsRequired== IsRequired.Required)
+ && (x.IsJudgeQuestion || x.IsRequired == IsRequired.Required)
).ToListAsync();
var answerQuestionIds = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId).Select(x => x.ReadingQuestionTrialId).ToListAsync();
readingQuestionList = readingQuestionList.Where(x => !answerQuestionIds.Contains(x.Id)).ToList();
- if(readingQuestionList.Count()>0)
+ if (readingQuestionList.Count() > 0)
{
- throw new BusinessValidationFailedException($" 必填问题{ string.Join(',', readingQuestionList.Select(x =>x.QuestionName))}的答案为空或未保存");
+ throw new BusinessValidationFailedException($" 必填问题{string.Join(',', readingQuestionList.Select(x => x.QuestionName))}的答案为空或未保存");
}
await _readingCalculateService.VerifyVisitTaskQuestions(inDto);
@@ -1199,6 +1376,18 @@ namespace IRaCIS.Application.Services
await _visitTaskRepository.SaveChangesAsync();
+
+
+ //基于业务场景发送邮件
+
+ //await _trialEmailNoticeConfigService.BaseBusinessScenarioSendEmailAsync( visitTaskId);
+
+
+
+
+
+
+
}
@@ -1267,7 +1456,7 @@ namespace IRaCIS.Application.Services
await AddOncologyTask(oncologyReadId);
}
-
+
break;
}
}
diff --git a/IRaCIS.Core.Domain.Share/Common/EmailScenarioEnum.cs b/IRaCIS.Core.Domain.Share/Common/EmailScenarioEnum.cs
index ff9a048e..d14ccc54 100644
--- a/IRaCIS.Core.Domain.Share/Common/EmailScenarioEnum.cs
+++ b/IRaCIS.Core.Domain.Share/Common/EmailScenarioEnum.cs
@@ -49,6 +49,8 @@ namespace IRaCIS.Core.Domain.Share
public enum EmailUserType
{
+
+ //变为手动输入了,这里不需要了
From =1,
To=2,
diff --git a/IRaCIS.Core.Domain/Document/TrialEmailNoticeUser.cs b/IRaCIS.Core.Domain/Document/TrialEmailNoticeUser.cs
index eb79b29e..cf8844ad 100644
--- a/IRaCIS.Core.Domain/Document/TrialEmailNoticeUser.cs
+++ b/IRaCIS.Core.Domain/Document/TrialEmailNoticeUser.cs
@@ -16,14 +16,12 @@ namespace IRaCIS.Core.Domain.Models
public class TrialEmailNoticeUser : Entity
{
- [JsonIgnore]
- public User User { get; set; }
[JsonIgnore]
public TrialEmailNoticeConfig TrialEmailNoticeConfig { get; set; }
- public Guid UserId { get; set; }
+ public UserTypeEnum UserType { get; set; }
public Guid TrialEmailNoticeConfigId { get; set; }
diff --git a/IRaCIS.Core.Domain/IRaCIS.Core.Domain.csproj b/IRaCIS.Core.Domain/IRaCIS.Core.Domain.csproj
index bd48e5c4..3b997b0f 100644
--- a/IRaCIS.Core.Domain/IRaCIS.Core.Domain.csproj
+++ b/IRaCIS.Core.Domain/IRaCIS.Core.Domain.csproj
@@ -11,8 +11,8 @@
-
-
+
+
diff --git a/IRaCIS.Core.Infra.EFCore/IRaCIS.Core.Infra.EFCore.csproj b/IRaCIS.Core.Infra.EFCore/IRaCIS.Core.Infra.EFCore.csproj
index d68ade0d..9f08fd7a 100644
--- a/IRaCIS.Core.Infra.EFCore/IRaCIS.Core.Infra.EFCore.csproj
+++ b/IRaCIS.Core.Infra.EFCore/IRaCIS.Core.Infra.EFCore.csproj
@@ -19,7 +19,7 @@
-
+
diff --git a/IRaCIS.Core.Infrastructure/IRaCIS.Core.Infrastructure.csproj b/IRaCIS.Core.Infrastructure/IRaCIS.Core.Infrastructure.csproj
index efe831ae..15269379 100644
--- a/IRaCIS.Core.Infrastructure/IRaCIS.Core.Infrastructure.csproj
+++ b/IRaCIS.Core.Infrastructure/IRaCIS.Core.Infrastructure.csproj
@@ -9,10 +9,10 @@
-
+
-
+
diff --git a/IRaCISData/新建 DOCX 文档.docx b/IRaCISData/新建 DOCX 文档.docx
deleted file mode 100644
index 6fb74f25..00000000
Binary files a/IRaCISData/新建 DOCX 文档.docx and /dev/null differ