390 lines
14 KiB
C#
390 lines
14 KiB
C#
//--------------------------------------------------------------------
|
|
// 此代码由T4模板自动生成 byzhouhang 20210918
|
|
// 生成时间 2022-10-20 11:52:17
|
|
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
|
|
//--------------------------------------------------------------------
|
|
|
|
using IRaCIS.Core.Domain.Models;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using IRaCIS.Core.Application.Interfaces;
|
|
using IRaCIS.Core.Application.ViewModel;
|
|
using IRaCIS.Core.Domain.Share;
|
|
using IRaCIS.Core.Infrastructure;
|
|
using IRaCIS.Core.Application.Helper;
|
|
using IRaCIS.Application.Contracts;
|
|
|
|
namespace IRaCIS.Core.Application.Service
|
|
{
|
|
/// <summary>
|
|
/// TrialEmailNoticeConfigService
|
|
/// </summary>
|
|
[ApiExplorerSettings(GroupName = "Trial")]
|
|
public class TrialEmailNoticeConfigService : BaseService, ITrialEmailNoticeConfigService
|
|
{
|
|
|
|
private readonly IRepository<TrialEmailNoticeConfig> _trialEmailNoticeConfigRepository;
|
|
|
|
public IRepository<VisitTask> _visitTaskRepository { get; }
|
|
public IRepository<TrialUser> _trialUserRepository { get; }
|
|
|
|
public TrialEmailNoticeConfigService(IRepository<TrialEmailNoticeConfig> trialEmailNoticeConfigRepository, IRepository<VisitTask> visitTaskRepository,IRepository<TrialUser> trialUserRepository)
|
|
{
|
|
_trialEmailNoticeConfigRepository = trialEmailNoticeConfigRepository;
|
|
_visitTaskRepository = visitTaskRepository;
|
|
_trialUserRepository = trialUserRepository;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 同步系统配置的文档到想项目中
|
|
/// </summary>
|
|
/// <param name="trialId"></param>
|
|
/// <param name="criterionTypeEnum"></param>
|
|
/// <returns></returns>
|
|
///
|
|
private async Task SyncSystemEmainCofigDocListAsync(Guid trialId, CriterionType? criterionTypeEnum)
|
|
{
|
|
if (criterionTypeEnum != null)
|
|
{
|
|
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();
|
|
|
|
if (trialDocCount == 0)
|
|
{
|
|
|
|
foreach (var item in docmentList)
|
|
{
|
|
await _trialEmailNoticeConfigRepository.AddAsync(new TrialEmailNoticeConfig() { FileName = item.Name, FilePath = item.Path, BusinessScenarioEnum = item.BusinessScenarioEnum, Code = item.Code });
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
await _trialEmailNoticeConfigRepository.SaveChangesAsync();
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 测试邮件 带附件 填充word --前端不需要用
|
|
/// </summary>
|
|
/// <param name="trialId"></param>
|
|
/// <param name="visitTaskId"></param>
|
|
/// <param name="trialReadingCriterionId"></param>
|
|
/// <param name="businessScenarioEnum"></param>
|
|
/// <returns></returns>
|
|
/// <exception cref="BusinessValidationFailedException"></exception>
|
|
public async Task FillWordTemplateAndEmailConfig(Guid trialId, Guid visitTaskId, Guid trialReadingCriterionId, CommonDocumentBusinessScenario businessScenarioEnum)
|
|
{
|
|
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();
|
|
|
|
if (emailConfig == null)
|
|
{
|
|
throw new BusinessValidationFailedException("找不到该项目标准场景下邮件的配置");
|
|
}
|
|
|
|
//填充邮件基本配置
|
|
|
|
var sendEmailConfig = new SMTPEmailConfig();
|
|
|
|
//foreach (var item in emailConfig.ReceiveEmailList)
|
|
//{
|
|
// sendEmailConfig.ToMailAddressList.Add(new MimeKit.MailboxAddress(item, item));
|
|
//}
|
|
|
|
//foreach (var item in emailConfig.CopyEmailList)
|
|
//{
|
|
// if (item.Contains("@") && !string.IsNullOrEmpty(item))
|
|
// {
|
|
// sendEmailConfig.CopyToMailAddressList.Add(new MimeKit.MailboxAddress(item.Trim(), item.Trim()));
|
|
// }
|
|
//}
|
|
|
|
|
|
//邮件内容html
|
|
await FillWordTemplateAndSetEmailAsync(visitTaskId, sendEmailConfig, businessScenarioEnum, criterionTypeEnum!);
|
|
|
|
//邮件附件
|
|
var path = FileStoreHelper.GetPhysicalFilePath(_hostEnvironment, emailConfig.FilePath);
|
|
|
|
if (!File.Exists(path))
|
|
{
|
|
throw new BusinessValidationFailedException("找不到该项目标准场景下邮件模板");
|
|
}
|
|
|
|
sendEmailConfig.EmailAttachMentConfigList.Add(new EmailAttachMentConfig()
|
|
{
|
|
FileName = emailConfig.FileName,
|
|
|
|
FileStream = System.IO.File.OpenRead(path)
|
|
});
|
|
|
|
|
|
|
|
await SendEmailHelper.SendEmailAsync(sendEmailConfig);
|
|
|
|
}
|
|
|
|
|
|
|
|
private async Task FillWordTemplateAndSetEmailAsync(Guid visitTaskId, SMTPEmailConfig sendEmailConfig, CommonDocumentBusinessScenario businessScenarioEnum, CriterionType criterionType)
|
|
{
|
|
var pathToFile = _hostEnvironment.WebRootPath
|
|
+ Path.DirectorySeparatorChar.ToString()
|
|
+ "EmailTemplate"
|
|
+ Path.DirectorySeparatorChar.ToString()
|
|
+ "SubjectEnrollConfirmOrPDProgress.html";
|
|
|
|
|
|
if (businessScenarioEnum == CommonDocumentBusinessScenario.EnrollConfirmed)
|
|
{
|
|
|
|
sendEmailConfig.TopicDescription = "入组确认";
|
|
|
|
using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile))
|
|
{
|
|
var templateInfo = SourceReader.ReadToEnd();
|
|
|
|
|
|
sendEmailConfig.HtmlBodyStr = string.Format(templateInfo,
|
|
$" 附件为入组确认报告,请查收 "
|
|
);
|
|
}
|
|
|
|
switch (criterionType)
|
|
{
|
|
|
|
case CriterionType.SelfDefine:
|
|
break;
|
|
|
|
case CriterionType.RECIST1Pointt1:
|
|
|
|
|
|
//_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)
|
|
{
|
|
|
|
sendEmailConfig.TopicDescription = "疾病进展";
|
|
|
|
using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile))
|
|
{
|
|
var templateInfo = SourceReader.ReadToEnd();
|
|
|
|
|
|
sendEmailConfig.HtmlBodyStr = string.Format(templateInfo,
|
|
$" 附件为疾病进展确认报告,请查收 "
|
|
);
|
|
}
|
|
|
|
switch (criterionType)
|
|
{
|
|
|
|
case CriterionType.SelfDefine:
|
|
break;
|
|
case CriterionType.RECIST1Pointt1:
|
|
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 选择人员下拉
|
|
/// </summary>
|
|
/// <param name="param"></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()
|
|
|
|
.ProjectTo<TrialUserSelct>(_mapper.ConfigurationProvider);
|
|
|
|
return await query.ToListAsync();
|
|
|
|
}
|
|
|
|
[HttpPost]
|
|
public async Task<List<TrialEmailNoticeConfigView>> GetTrialEmailNoticeConfigList(TrialEmailNoticeConfigQuery inQuery)
|
|
{
|
|
|
|
await SyncSystemEmainCofigDocListAsync(inQuery.TrialId, inQuery.CriterionTypeEnum);
|
|
|
|
var trialEmailNoticeConfigQueryable = _trialEmailNoticeConfigRepository
|
|
.WhereIf(inQuery.CriterionTypeEnum != null, t => t.CriterionTypeEnum == inQuery.CriterionTypeEnum)
|
|
.WhereIf(inQuery.BusinessScenarioEnum != null, t => t.BusinessScenarioEnum == inQuery.BusinessScenarioEnum)
|
|
.ProjectTo<TrialEmailNoticeConfigView>(_mapper.ConfigurationProvider);
|
|
|
|
return await trialEmailNoticeConfigQueryable.ToListAsync();
|
|
}
|
|
|
|
|
|
public async Task<IResponseOutput> AddOrUpdateTrialEmailNoticeConfig(TrialEmailNoticeConfigAddOrEdit addOrEditTrialEmailNoticeConfig)
|
|
{
|
|
|
|
|
|
|
|
//var entity = await _trialEmailNoticeConfigRepository.InsertOrUpdateAsync(addOrEditTrialEmailNoticeConfig);
|
|
|
|
if (addOrEditTrialEmailNoticeConfig.Id == null)
|
|
{
|
|
|
|
var entity = _mapper.Map<TrialEmailNoticeConfig>(addOrEditTrialEmailNoticeConfig);
|
|
|
|
|
|
|
|
|
|
entity.TrialEmailNoticeUserList.Add(new TrialEmailNoticeUser() { EmailUserType = EmailUserType.From, UserId = addOrEditTrialEmailNoticeConfig.FromUserId });
|
|
|
|
|
|
foreach (var item in addOrEditTrialEmailNoticeConfig.ToUserIdList)
|
|
{
|
|
entity.TrialEmailNoticeUserList.Add(new TrialEmailNoticeUser() { EmailUserType = EmailUserType.To, UserId = item });
|
|
|
|
}
|
|
|
|
foreach (var item in addOrEditTrialEmailNoticeConfig.CopyUserIdList)
|
|
{
|
|
entity.TrialEmailNoticeUserList.Add(new TrialEmailNoticeUser() { EmailUserType = EmailUserType.Copy, UserId = item});
|
|
|
|
}
|
|
|
|
|
|
await _trialEmailNoticeConfigRepository.AddAsync(entity, true);
|
|
|
|
return ResponseOutput.Ok(entity.Id.ToString());
|
|
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
await _repository.BatchDeleteAsync<TrialEmailNoticeUser>(t => t.TrialEmailNoticeConfigId == addOrEditTrialEmailNoticeConfig.Id);
|
|
|
|
|
|
var entity = (await _trialEmailNoticeConfigRepository.Where(t => t.Id == addOrEditTrialEmailNoticeConfig.Id, true, true).Include(t => t.TrialEmailNoticeUserList).FirstOrDefaultAsync()).IfNullThrowException();
|
|
|
|
|
|
List<TrialEmailNoticeUser> trialEmailNoticeUsers = new List<TrialEmailNoticeUser>();
|
|
|
|
|
|
|
|
trialEmailNoticeUsers.Add(new TrialEmailNoticeUser() { EmailUserType = EmailUserType.From, UserId = addOrEditTrialEmailNoticeConfig.FromUserId,TrialEmailNoticeConfigId=entity.Id });
|
|
|
|
|
|
foreach (var item in addOrEditTrialEmailNoticeConfig.ToUserIdList)
|
|
{
|
|
trialEmailNoticeUsers.Add(new TrialEmailNoticeUser() { EmailUserType = EmailUserType.To, UserId = item, TrialEmailNoticeConfigId = entity.Id });
|
|
|
|
}
|
|
|
|
foreach (var item in addOrEditTrialEmailNoticeConfig.CopyUserIdList)
|
|
{
|
|
trialEmailNoticeUsers.Add(new TrialEmailNoticeUser() { EmailUserType = EmailUserType.Copy, UserId = item, TrialEmailNoticeConfigId = entity.Id });
|
|
|
|
}
|
|
await _repository.AddRangeAsync(trialEmailNoticeUsers);
|
|
|
|
await _trialEmailNoticeConfigRepository.SaveChangesAsync();
|
|
|
|
return ResponseOutput.Ok();
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
[HttpDelete("{trialEmailNoticeConfigId:guid}")]
|
|
public async Task<IResponseOutput> DeleteTrialEmailNoticeConfig(Guid trialEmailNoticeConfigId)
|
|
{
|
|
var success = await _trialEmailNoticeConfigRepository.DeleteFromQueryAsync(t => t.Id == trialEmailNoticeConfigId, true);
|
|
|
|
return ResponseOutput.Ok();
|
|
}
|
|
|
|
|
|
}
|
|
}
|