项目邮件配置修改--016
parent
e05f43b0b8
commit
4338481f9f
|
@ -36,17 +36,20 @@ namespace IRaCIS.Core.Application.Service
|
||||||
_trialRepository = trialRepository;
|
_trialRepository = trialRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
public async Task TrialImageQCTaskEmail(Guid trialId)
|
/// 影像质控
|
||||||
|
/// </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();
|
var trialInfo = _repository.Where<Trial>(t => t.Id == trialId).Select(t => new { t.ResearchProgramNo, t.ExperimentName, t.TrialCode, t.TrialStatusStr }).FirstOrDefault();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//找到 该项目的IQC 用户Id
|
//找到 该项目的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 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)
|
foreach (var user in userList)
|
||||||
{
|
{
|
||||||
|
@ -54,7 +57,6 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
//过滤项目 并且 将 _userInfo.Id 换位 当前发送邮件的Id
|
//过滤项目 并且 将 _userInfo.Id 换位 当前发送邮件的Id
|
||||||
var query = _trialRepository.Where(t => t.Id == trialId)
|
var query = _trialRepository.Where(t => t.Id == trialId)
|
||||||
.Where(t => t.TrialUserList.Any(t => t.UserId == userId))
|
|
||||||
.Where(t => t.QCProcessEnum != TrialQCProcess.NotAudit)
|
.Where(t => t.QCProcessEnum != TrialQCProcess.NotAudit)
|
||||||
.Select(t => new
|
.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)
|
public async Task SendTrialEmailAsync(Guid trialId, CommonDocumentBusinessScenario businessScenario, Func<TrialEmailNoticeConfig, (string topicStr, string htmlBodyStr)> topicAndHtmlFunc, Guid? trialReadingCriterionId = null, Guid? subjectId = null)
|
||||||
|
|
|
@ -77,7 +77,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<GetTrialEmailSetOutDto> GetTrialEmail(GetTrialEmailSetInDto inDto)
|
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,
|
TrialId = inDto.TrialId,
|
||||||
EmailAuthorizationCode = x.EmailAuthorizationCode,
|
EmailAuthorizationCode = x.EmailAuthorizationCode,
|
||||||
|
@ -87,7 +87,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
IsConfigureEmail = x.IsConfigureEmail,
|
IsConfigureEmail = x.IsConfigureEmail,
|
||||||
EmailSMTPServerPort = x.EmailSMTPServerPort
|
EmailSMTPServerPort = x.EmailSMTPServerPort
|
||||||
|
|
||||||
}).FirstNotNullAsync();
|
}).FirstOrDefaultAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
<#+
|
<#+
|
||||||
public class config
|
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 ConnectionString = "Server=123.56.94.154,1433\\MSSQLSERVER;Database=Test.Study;User ID=sa;Password=dev123456DEV;TrustServerCertificate=true";
|
||||||
public static readonly string DbDatabase = "CenterImage_Test";
|
public static readonly string DbDatabase = "Test.Study";
|
||||||
//表名称用字符串,拼接
|
//表名称用字符串,拼接
|
||||||
public static readonly string TableName = "PIAudit";
|
public static readonly string TableName = "SubjectVisitClinicalDialog";
|
||||||
//具体文件里面 例如service 可以配置是否分页
|
//具体文件里面 例如service 可以配置是否分页
|
||||||
}
|
}
|
||||||
#>
|
#>
|
||||||
|
@ -21,10 +21,10 @@
|
||||||
}
|
}
|
||||||
string sql = string.Format(@"SELECT
|
string sql = string.Format(@"SELECT
|
||||||
obj.name tablename
|
obj.name tablename
|
||||||
from {0}.sys.objects obj
|
from sys.objects obj
|
||||||
inner join {0}.dbo.sysindexes idx on obj.object_id=idx.id and idx.indid<=1
|
inner join 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
|
INNER JOIN 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')
|
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}
|
where type='U' {1}
|
||||||
order by obj.name", database,tables);
|
order by obj.name", database,tables);
|
||||||
DataTable dt = GetDataTable(connectionString, sql);
|
DataTable dt = GetDataTable(connectionString, sql);
|
||||||
|
@ -50,9 +50,9 @@
|
||||||
ELSE 0
|
ELSE 0
|
||||||
END
|
END
|
||||||
AS BIT) HasPrimaryKey
|
AS BIT) HasPrimaryKey
|
||||||
from {0}.sys.objects obj
|
from sys.objects obj
|
||||||
inner join {0}.dbo.sysindexes idx on obj.object_id=idx.id and idx.indid<=1
|
inner join 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
|
INNER JOIN sys.schemas schem ON obj.schema_id=schem.schema_id
|
||||||
where type='U' {1}
|
where type='U' {1}
|
||||||
order by obj.name", database, tables);
|
order by obj.name", database, tables);
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -79,8 +79,8 @@
|
||||||
ic.column_id,
|
ic.column_id,
|
||||||
ic.index_column_id,
|
ic.index_column_id,
|
||||||
ic.object_id
|
ic.object_id
|
||||||
FROM {0}.sys.indexes idx
|
FROM sys.indexes idx
|
||||||
INNER JOIN {0}.sys.index_columns ic ON idx.index_id = ic.index_id AND idx.object_id = ic.object_id
|
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
|
WHERE idx.object_id =OBJECT_ID(@tableName) AND idx.is_primary_key=1
|
||||||
)
|
)
|
||||||
select
|
select
|
||||||
|
@ -102,14 +102,14 @@
|
||||||
cast(colm.precision as int) Precision,
|
cast(colm.precision as int) Precision,
|
||||||
cast(colm.scale as int) Scale,
|
cast(colm.scale as int) Scale,
|
||||||
prop.value Remark
|
prop.value Remark
|
||||||
from {0}.sys.columns colm
|
from 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
|
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 {0}.sys.extended_properties prop on colm.object_id=prop.major_id and colm.column_id=prop.minor_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
|
LEFT JOIN indexCTE ON colm.column_id=indexCTE.column_id AND colm.object_id=indexCTE.object_id
|
||||||
where colm.object_id=OBJECT_ID(@tableName)
|
where colm.object_id=OBJECT_ID(@tableName)
|
||||||
order by colm.column_id", database);
|
order by colm.column_id", database);
|
||||||
#endregion
|
#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);
|
DataTable dt = GetDataTable(connectionString, sql, param);
|
||||||
return dt.Rows.Cast<DataRow>().Select(row => new DbColumn()
|
return dt.Rows.Cast<DataRow>().Select(row => new DbColumn()
|
||||||
{
|
{
|
||||||
|
|
|
@ -14,7 +14,7 @@ steps:
|
||||||
commands:
|
commands:
|
||||||
- date +%H:%M:%S
|
- date +%H:%M:%S
|
||||||
- pwd
|
- pwd
|
||||||
- docker build -t Test.Study .
|
- docker build -t Test_Study .
|
||||||
- date +%H:%M:%S
|
- date +%H:%M:%S
|
||||||
|
|
||||||
- name: docker-deploy
|
- name: docker-deploy
|
||||||
|
@ -28,13 +28,13 @@ steps:
|
||||||
commands:
|
commands:
|
||||||
- date +%H:%M:%S
|
- date +%H:%M:%S
|
||||||
- docker rm -f test-study-container
|
- 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
|
- date +%H:%M:%S
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
- name: cached_nuget_packages
|
- name: cached_nuget_packages
|
||||||
host:
|
host:
|
||||||
path: /mnt/f/docker_publish/nuget_packages
|
path: /mnt/d/docker_publish/nuget_packages
|
||||||
- name: dockersock
|
- name: dockersock
|
||||||
host:
|
host:
|
||||||
path: /var/run/docker.sock
|
path: /var/run/docker.sock
|
||||||
|
|
Loading…
Reference in New Issue