Compare commits

..

3 Commits

Author SHA1 Message Date
hang 1822e201b7 Merge branch 'Uat_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Uat_IRC_Net8
continuous-integration/drone/push Build is failing Details
2024-08-22 10:01:52 +08:00
hang b25c72c153 发送邮件+pacs接口 2024-08-22 10:01:51 +08:00
hang 509f5ff2fc 影像预览调用接口错误,增加接口 2024-08-21 17:28:00 +08:00
5 changed files with 82 additions and 9 deletions

View File

@ -136,7 +136,7 @@ namespace IRaCIS.Application.Services
public async Task<EmailNoticeConfig> GetEmailConfigInfoAsync(EmailBusinessScenario scenario) public async Task<EmailNoticeConfig> GetEmailConfigInfoAsync(EmailBusinessScenario scenario)
{ {
var configInfo = await _emailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario).Include(t=>t.EmailNoticeUserTypeList).FirstOrDefaultAsync(); var configInfo = await _emailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario).Include(t => t.EmailNoticeUserTypeList).FirstOrDefaultAsync();
if (configInfo == null) if (configInfo == null)
{ {
@ -758,11 +758,13 @@ namespace IRaCIS.Application.Services
var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
var emailConfigInfo = await GetEmailConfigInfoAsync(feedBack.VisitTaskId != null? EmailBusinessScenario.IRImageError:(feedBack.TrialId != null? EmailBusinessScenario.TrialFeedBack: EmailBusinessScenario.SysFeedBack)); var emialScenario = feedBack.VisitTaskId != null ? EmailBusinessScenario.IRImageError : (feedBack.SubjectVisitId != null ? EmailBusinessScenario.TrialSubjectVisitFeedBack : (feedBack.TrialId != null ? EmailBusinessScenario.TrialFeedBack : EmailBusinessScenario.SysFeedBack));
var emailConfigInfo = await GetEmailConfigInfoAsync(emialScenario);
var userTypeEnumList = emailConfigInfo.EmailNoticeUserTypeList.Where(t => t.EmailUserType == EmailUserType.To).Select(t => t.UserType).ToList(); var userTypeEnumList = emailConfigInfo.EmailNoticeUserTypeList.Where(t => t.EmailUserType == EmailUserType.To).Select(t => t.UserType).ToList();
var emailList = await _repository.Where<User>(t => userTypeEnumList.Contains(t.UserTypeEnum) && var emailList = await _repository.Where<User>(t => userTypeEnumList.Contains(t.UserTypeEnum) &&
(isHaveTrialId ? t.UserTrials.Any(t => t.TrialId == feedBack.TrialId) : true)).Select(t => new { t.EMail, t.UserTypeEnum, t.FullName }).ToListAsync(); (isHaveTrialId ? t.UserTrials.Any(t => t.TrialId == feedBack.TrialId) : true)).Select(t => new { t.EMail, t.UserTypeEnum, t.FullName }).ToListAsync();
@ -771,10 +773,11 @@ namespace IRaCIS.Application.Services
messageToSend.To.Add(new MailboxAddress(email.FullName, email.EMail)); messageToSend.To.Add(new MailboxAddress(email.FullName, email.EMail));
} }
var userNames = string.Join(',', emailList.Select(t => t.FullName));
//影像阅片反馈 pm //影像阅片反馈 pm
if (feedBack.VisitTaskId != null) if (feedBack.VisitTaskId != null)
{ {
var userNames = string.Join(',', emailList.Where(email => email.UserTypeEnum == UserTypeEnum.ProjectManager).Select(t => t.FullName));
var emailType = await _repository.Where<Dictionary>(t => t.Parent.Code == "Email_BusinessScenario" && t.ParentId != null && t.Code == ((int)EmailBusinessScenario.IRImageError).ToString()).Select(t => _userInfo.IsEn_Us ? t.Value : t.ValueCN).FirstOrDefaultAsync(); var emailType = await _repository.Where<Dictionary>(t => t.Parent.Code == "Email_BusinessScenario" && t.ParentId != null && t.Code == ((int)EmailBusinessScenario.IRImageError).ToString()).Select(t => _userInfo.IsEn_Us ? t.Value : t.ValueCN).FirstOrDefaultAsync();
@ -783,7 +786,7 @@ namespace IRaCIS.Application.Services
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
{ {
var topicStr = string.Format(input.topicStr, info.SubejctCode, info.VisitName, info.ResearchProgramNo); var topicStr = string.Format(input.topicStr, info.ResearchProgramNo, info.SubejctCode, info.VisitName);
var htmlBodyStr = string.Format(ReplaceCompanyName(input.htmlBodyStr), var htmlBodyStr = string.Format(ReplaceCompanyName(input.htmlBodyStr),
userNames, userNames,
@ -804,10 +807,38 @@ namespace IRaCIS.Application.Services
await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.IRImageError, messageToSend, emailConfigFunc); await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.IRImageError, messageToSend, emailConfigFunc);
} }
else if (feedBack.SubjectVisitId != null)
{
var emailType = await _repository.Where<Dictionary>(t => t.Parent.Code == "Email_BusinessScenario" && t.ParentId != null && t.Code == ((int)EmailBusinessScenario.TrialSubjectVisitFeedBack).ToString()).Select(t => _userInfo.IsEn_Us ? t.Value : t.ValueCN).FirstOrDefaultAsync();
var info = await _repository.Where<SubjectVisit>(t => t.Id == feedBack.SubjectVisitId).Select(t => new { t.Trial.ResearchProgramNo, t.Trial.TrialCode, SubejctCode = t.Subject.Code, t.VisitName }).FirstNotNullAsync();
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
{
var topicStr = string.Format(input.topicStr, info.ResearchProgramNo, info.SubejctCode, info.VisitName);
var htmlBodyStr = string.Format(ReplaceCompanyName(input.htmlBodyStr),
userNames,
info.TrialCode,
info.SubejctCode,
info.VisitName,
feedBack.CreateUser.UserTypeRole.UserTypeShortName,
feedBack.CreateUser.FullName,
emailType,
feedBack.QuestionDescription,
_systemEmailConfig.SiteUrl
);
return (topicStr, htmlBodyStr);
};
await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.TrialSubjectVisit, messageToSend, emailConfigFunc);
}
//项目相关的反馈 pm admin //项目相关的反馈 pm admin
else if (feedBack.TrialId != null) else if (feedBack.TrialId != null)
{ {
var userNames = string.Join(',', emailList.Where(email => email.UserTypeEnum == UserTypeEnum.ProjectManager || email.UserTypeEnum == UserTypeEnum.Admin).Select(t => t.FullName));
var emailType = await _repository.Where<Dictionary>(t => t.Parent.Code == "Email_BusinessScenario" && t.ParentId != null && t.Code == ((int)EmailBusinessScenario.TrialFeedBack).ToString()).Select(t => _userInfo.IsEn_Us ? t.Value : t.ValueCN).FirstOrDefaultAsync(); var emailType = await _repository.Where<Dictionary>(t => t.Parent.Code == "Email_BusinessScenario" && t.ParentId != null && t.Code == ((int)EmailBusinessScenario.TrialFeedBack).ToString()).Select(t => _userInfo.IsEn_Us ? t.Value : t.ValueCN).FirstOrDefaultAsync();
@ -835,11 +866,10 @@ namespace IRaCIS.Application.Services
await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.TrialFeedBack, messageToSend, emailConfigFunc); await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.TrialFeedBack, messageToSend, emailConfigFunc);
} }
//项目无关的反馈 admin zyss //项目无关的反馈 admin
else else
{ {
var userNames = string.Join(',', emailList.Where(email => email.UserTypeEnum == UserTypeEnum.ZYSS || email.UserTypeEnum == UserTypeEnum.Admin).Select(t => t.FullName));
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
{ {

View File

@ -90,6 +90,7 @@ namespace IRaCIS.Core.Application.Service
.ForMember(o => o.IsReading, t => t.MapFrom(u => u.DicomSerie.IsReading)); .ForMember(o => o.IsReading, t => t.MapFrom(u => u.DicomSerie.IsReading));
CreateMap<DicomStudy, DicomStudyDTO>(); CreateMap<DicomStudy, DicomStudyDTO>();
CreateMap<DicomSeries, DicomSeriesDTO>(); CreateMap<DicomSeries, DicomSeriesDTO>();
CreateMap<SCPSeries, DicomSeriesDTO>();

View File

@ -113,6 +113,7 @@ namespace IRaCIS.Core.Application.Service
var entity = await _userFeedBackRepository.InsertOrUpdateAsync(addOrEditUserFeedBack, true); var entity = await _userFeedBackRepository.InsertOrUpdateAsync(addOrEditUserFeedBack, true);
//任务反馈的添加更新都需要发送邮件,其他的是添加的时候发送
if (addOrEditUserFeedBack.VisitTaskId != null || addOrEditUserFeedBack.Id == null) if (addOrEditUserFeedBack.VisitTaskId != null || addOrEditUserFeedBack.Id == null)
{ {
await mailService.UserFeedBackMail(entity.Id); await mailService.UserFeedBackMail(entity.Id);

View File

@ -69,6 +69,43 @@ namespace IRaCIS.Application.Services
} }
[HttpGet]
public async Task<IResponseOutput<List<DicomSeriesDTO>>> GetPatientSeriesList(Guid scpStudyId,
[FromServices] IRepository<SCPSeries> _seriesRepository,
[FromServices] IRepository<SCPInstance> _instanceRepository
)
{
var seriesList = await _seriesRepository.Where(s => s.StudyId == scpStudyId).OrderBy(s => s.SeriesNumber).
ThenBy(s => s.SeriesTime).ThenBy(s => s.CreateTime)
.ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).ToListAsync();
var instanceList = await _instanceRepository.Where(s => s.StudyId == scpStudyId).OrderBy(t => t.SeriesId).ThenBy(t => t.InstanceNumber)
.ThenBy(s => s.InstanceTime).ThenBy(s => s.CreateTime)
.Select(t => new { t.SeriesId, t.Id, t.Path, t.NumberOfFrames, t.InstanceNumber }).ToListAsync();//.GroupBy(u => u.SeriesId);
foreach (var series in seriesList)
{
series.InstanceInfoList = instanceList.Where(t => t.SeriesId == series.Id).OrderBy(t => t.InstanceNumber).Select(k =>
new InstanceBasicInfo()
{
Id = k.Id,
NumberOfFrames = k.NumberOfFrames,
//HtmlPath = string.Empty,
Path = k.Path,
InstanceNumber = k.InstanceNumber,
}).ToList();
}
var study = await _scpStudyRepository.FindAsync(scpStudyId);
return ResponseOutput.Ok(seriesList, study);
}
/// <summary> /// <summary>
/// scp 影像推送记录表 /// scp 影像推送记录表
/// </summary> /// </summary>

View File

@ -91,7 +91,11 @@ namespace IRaCIS.Core.Domain.Share
SysFeedBack=26, SysFeedBack=26,
TrialFeedBack=27 TrialFeedBack=27,
TrialSubjectVisitFeedBack = 28,
} }