项目邮件配置修改--016

Uat_Study
hang 2023-08-22 17:12:41 +08:00
parent e05f43b0b8
commit 4338481f9f
4 changed files with 126 additions and 26 deletions

View File

@ -36,17 +36,20 @@ namespace IRaCIS.Core.Application.Service
_trialRepository = trialRepository;
}
public async Task TrialImageQCTaskEmail(Guid trialId)
/// <summary>
/// 影像质控
/// </summary>
/// <param name="trialId"></param>
/// <returns></returns>
public async Task SendTrialImageQCTaskEmail(Guid trialId)
{
var trialInfo = _repository.Where<Trial>(t => t.Id == trialId).Select(t => new { t.ResearchProgramNo, t.ExperimentName, t.TrialCode, t.TrialStatusStr }).FirstOrDefault();
//找到 该项目的IQC 用户Id
var userList = await _repository.Where<TrialUser>(t => t.TrialId == trialId).Where(t => t.User.UserTypeEnum == UserTypeEnum.IQC).Select(t => new { t.UserId, t.User.FullName }).ToListAsync();
//判断是否任务可以领取 ,可以的话 发送邮件
var userIdList=userList.Select(t=>t.UserId).ToList();
foreach (var user in userList)
{
@ -54,7 +57,6 @@ namespace IRaCIS.Core.Application.Service
//过滤项目 并且 将 _userInfo.Id 换位 当前发送邮件的Id
var query = _trialRepository.Where(t => t.Id == trialId)
.Where(t => t.TrialUserList.Any(t => t.UserId == userId))
.Where(t => t.QCProcessEnum != TrialQCProcess.NotAudit)
.Select(t => new
{
@ -84,7 +86,105 @@ namespace IRaCIS.Core.Application.Service
}
}
/// <summary>
/// QC质疑
/// </summary>
/// <param name="trialId"></param>
/// <returns></returns>
public async Task SendTrialQCQuestionEmail(Guid trialId)
{
var trialInfo = _repository.Where<Trial>(t => t.Id == trialId).Select(t => new { t.ResearchProgramNo, t.ExperimentName, t.TrialCode, t.TrialStatusStr }).FirstOrDefault();
//找到 该项目的IQC 用户Id
var userList = await _repository.Where<TrialUser>(t => t.TrialId == trialId).Where(t => t.User.UserTypeEnum == UserTypeEnum.IQC).Select(t => new { t.UserId, t.User.FullName }).ToListAsync();
//判断是否任务可以领取 ,可以的话 发送邮件
foreach (var user in userList)
{
var userId = user.UserId;
//过滤项目 并且 将 _userInfo.Id 换位 当前发送邮件的Id
var query = _trialRepository
.Select(t => new
{
ReUploadTobeDealedCount= t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
.Where(u => u.CreateUserId == userId && u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && u.ReuploadEnum==QCChanllengeReuploadEnum.CRCRequestReupload).Count(),
//质疑待处理
ToBeDealedCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
.Where(u => u.CreateUserId == userId && u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count(),
});
var sendStat = await query.FirstOrDefaultAsync();
//当前人
if (sendStat != null && (sendStat.ToBeDealedCount > 0 || sendStat.ReUploadTobeDealedCount > 0))
{
Func<TrialEmailNoticeConfig, (string topicStr, string htmlBodyStr)> topicAndHtmlFunc = trialEmailConfig =>
{
var topicStr = string.Format(_userInfo.IsEn_Us ? trialEmailConfig.EmailTopic : trialEmailConfig.EmailTopicCN, trialInfo.ResearchProgramNo);
var htmlBodyStr = string.Format(_userInfo.IsEn_Us ? trialEmailConfig.EmailHtmlContent : trialEmailConfig.EmailHtmlContentCN, user.FullName, DateTime.Now, sendStat.ToBeDealedCount, sendStat.ReUploadTobeDealedCount);
return (topicStr, htmlBodyStr);
};
await SendTrialEmailAsync(trialId, CommonDocumentBusinessScenario.QCQuestion, topicAndHtmlFunc);
}
}
}
/// <summary>
/// 影像质疑
/// </summary>
/// <param name="trialId"></param>
/// <returns></returns>
public async Task SendTrialImageQuestino(Guid trialId)
{
var trialInfo = _repository.Where<Trial>(t => t.Id == trialId).Select(t => new { t.ResearchProgramNo, t.ExperimentName, t.TrialCode, t.TrialStatusStr }).FirstOrDefault();
//找到 该项目的CRC 用户Id
var userList = await _repository.Where<TrialUser>(t => t.TrialId == trialId).Where(t => t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Select(t => new { t.UserId, t.User.FullName }).ToListAsync();
//判断是否任务可以领取 ,可以的话 发送邮件
foreach (var user in userList)
{
var userId = user.UserId;
//过滤项目 并且 将 _userInfo.Id 换位 当前发送邮件的Id
var query = _trialRepository
.Select(t => new
{
//质疑待处理
ToBeDealedCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
.Where(u => u.CreateUserId == userId && u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IQC).Count(),
});
var sendStat = await query.FirstOrDefaultAsync();
//当前人
if (sendStat != null && (sendStat.ToBeDealedCount > 0 ))
{
Func<TrialEmailNoticeConfig, (string topicStr, string htmlBodyStr)> topicAndHtmlFunc = trialEmailConfig =>
{
var topicStr = string.Format(_userInfo.IsEn_Us ? trialEmailConfig.EmailTopic : trialEmailConfig.EmailTopicCN, trialInfo.ResearchProgramNo);
var htmlBodyStr = string.Format(_userInfo.IsEn_Us ? trialEmailConfig.EmailHtmlContent : trialEmailConfig.EmailHtmlContentCN, user.FullName, DateTime.Now, sendStat.ToBeDealedCount);
return (topicStr, htmlBodyStr);
};
await SendTrialEmailAsync(trialId, CommonDocumentBusinessScenario.QCQuestion, topicAndHtmlFunc);
}
}
}
//临床数据质询
public async Task SendClinicalDataQuestion(Guid trialId,Guid visitTaskId,string content)
{
}
public async Task SendTrialEmailAsync(Guid trialId, CommonDocumentBusinessScenario businessScenario, Func<TrialEmailNoticeConfig, (string topicStr, string htmlBodyStr)> topicAndHtmlFunc, Guid? trialReadingCriterionId = null, Guid? subjectId = null)

View File

@ -77,7 +77,7 @@ namespace IRaCIS.Core.Application.Service
[HttpPost]
public async Task<GetTrialEmailSetOutDto> GetTrialEmail(GetTrialEmailSetInDto inDto)
{
return await _trialRepository.Where(x => x.Id == inDto.TrialId).Select(x => new GetTrialEmailSetOutDto()
return await _trialRepository.Where(x => x.Id == inDto.TrialId,ignoreQueryFilters:true).Select(x => new GetTrialEmailSetOutDto()
{
TrialId = inDto.TrialId,
EmailAuthorizationCode = x.EmailAuthorizationCode,
@ -87,7 +87,7 @@ namespace IRaCIS.Core.Application.Service
IsConfigureEmail = x.IsConfigureEmail,
EmailSMTPServerPort = x.EmailSMTPServerPort
}).FirstNotNullAsync();
}).FirstOrDefaultAsync();
}
/// <summary>

View File

@ -1,10 +1,10 @@
<#+
public class config
{
public static readonly string ConnectionString = "Server=123.56.94.154,1433\\MSSQLSERVER;Database=IRaCIS_New_Tet;User ID=sa;Password=dev123456DEV;TrustServerCertificate=true";
public static readonly string DbDatabase = "CenterImage_Test";
public static readonly string ConnectionString = "Server=123.56.94.154,1433\\MSSQLSERVER;Database=Test.Study;User ID=sa;Password=dev123456DEV;TrustServerCertificate=true";
public static readonly string DbDatabase = "Test.Study";
//表名称用字符串,拼接
public static readonly string TableName = "PIAudit";
public static readonly string TableName = "SubjectVisitClinicalDialog";
//具体文件里面 例如service 可以配置是否分页
}
#>
@ -21,10 +21,10 @@
}
string sql = string.Format(@"SELECT
obj.name tablename
from {0}.sys.objects obj
inner join {0}.dbo.sysindexes idx on obj.object_id=idx.id and idx.indid<=1
INNER JOIN {0}.sys.schemas schem ON obj.schema_id=schem.schema_id
left join {0}.sys.extended_properties g ON (obj.object_id = g.major_id AND g.minor_id = 0 AND g.name= 'MS_Description')
from sys.objects obj
inner join dbo.sysindexes idx on obj.object_id=idx.id and idx.indid<=1
INNER JOIN sys.schemas schem ON obj.schema_id=schem.schema_id
left join sys.extended_properties g ON (obj.object_id = g.major_id AND g.minor_id = 0 AND g.name= 'MS_Description')
where type='U' {1}
order by obj.name", database,tables);
DataTable dt = GetDataTable(connectionString, sql);
@ -50,9 +50,9 @@
ELSE 0
END
AS BIT) HasPrimaryKey
from {0}.sys.objects obj
inner join {0}.dbo.sysindexes idx on obj.object_id=idx.id and idx.indid<=1
INNER JOIN {0}.sys.schemas schem ON obj.schema_id=schem.schema_id
from sys.objects obj
inner join dbo.sysindexes idx on obj.object_id=idx.id and idx.indid<=1
INNER JOIN sys.schemas schem ON obj.schema_id=schem.schema_id
where type='U' {1}
order by obj.name", database, tables);
#endregion
@ -79,8 +79,8 @@
ic.column_id,
ic.index_column_id,
ic.object_id
FROM {0}.sys.indexes idx
INNER JOIN {0}.sys.index_columns ic ON idx.index_id = ic.index_id AND idx.object_id = ic.object_id
FROM sys.indexes idx
INNER JOIN sys.index_columns ic ON idx.index_id = ic.index_id AND idx.object_id = ic.object_id
WHERE idx.object_id =OBJECT_ID(@tableName) AND idx.is_primary_key=1
)
select
@ -102,14 +102,14 @@
cast(colm.precision as int) Precision,
cast(colm.scale as int) Scale,
prop.value Remark
from {0}.sys.columns colm
inner join {0}.sys.types systype on colm.system_type_id=systype.system_type_id and colm.user_type_id=systype.user_type_id
left join {0}.sys.extended_properties prop on colm.object_id=prop.major_id and colm.column_id=prop.minor_id
from sys.columns colm
inner join sys.types systype on colm.system_type_id=systype.system_type_id and colm.user_type_id=systype.user_type_id
left join sys.extended_properties prop on colm.object_id=prop.major_id and colm.column_id=prop.minor_id
LEFT JOIN indexCTE ON colm.column_id=indexCTE.column_id AND colm.object_id=indexCTE.object_id
where colm.object_id=OBJECT_ID(@tableName)
order by colm.column_id", database);
#endregion
SqlParameter param = new SqlParameter("@tableName", SqlDbType.NVarChar, 100) { Value = string.Format("{0}.{1}.{2}", database, schema, tableName) };
SqlParameter param = new SqlParameter("@tableName", SqlDbType.NVarChar, 100) { Value = string.Format("{1}.{2}", database, schema, tableName) };
DataTable dt = GetDataTable(connectionString, sql, param);
return dt.Rows.Cast<DataRow>().Select(row => new DbColumn()
{

View File

@ -14,7 +14,7 @@ steps:
commands:
- date +%H:%M:%S
- pwd
- docker build -t Test.Study .
- docker build -t Test_Study .
- date +%H:%M:%S
- name: docker-deploy
@ -28,13 +28,13 @@ steps:
commands:
- date +%H:%M:%S
- docker rm -f test-study-container
- docker run -itd -e TZ=Asia/Shanghai -e ASPNETCORE_ENVIRONMENT=Test_Study --restart=always --name test-study-container -p 8030:80 Test.Study
- docker run -itd -e TZ=Asia/Shanghai -e ASPNETCORE_ENVIRONMENT=Test_Study --restart=always --name test-study-container -p 8030:80 Test_Study
- date +%H:%M:%S
volumes:
- name: cached_nuget_packages
host:
path: /mnt/f/docker_publish/nuget_packages
path: /mnt/d/docker_publish/nuget_packages
- name: dockersock
host:
path: /var/run/docker.sock