From 4338481f9f3425494ba7ab10a98165fce5bf26b0 Mon Sep 17 00:00:00 2001
From: hang <872297557@qq.com>
Date: Tue, 22 Aug 2023 17:12:41 +0800
Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E9=82=AE=E4=BB=B6=E9=85=8D?=
=?UTF-8?q?=E7=BD=AE=E4=BF=AE=E6=94=B9--016?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Service/Document/EmailSendService.cs | 110 +++++++++++++++++-
.../Document/TrialEmailNoticeConfigService.cs | 4 +-
IRaCIS.Core.Test/DbHelper.ttinclude | 32 ++---
irc_api.drone.yml | 6 +-
4 files changed, 126 insertions(+), 26 deletions(-)
diff --git a/IRaCIS.Core.Application/Service/Document/EmailSendService.cs b/IRaCIS.Core.Application/Service/Document/EmailSendService.cs
index e674d76c3..b6a9d4be4 100644
--- a/IRaCIS.Core.Application/Service/Document/EmailSendService.cs
+++ b/IRaCIS.Core.Application/Service/Document/EmailSendService.cs
@@ -36,17 +36,20 @@ namespace IRaCIS.Core.Application.Service
_trialRepository = trialRepository;
}
-
- public async Task TrialImageQCTaskEmail(Guid trialId)
+ ///
+ /// 影像质控
+ ///
+ ///
+ ///
+ public async Task SendTrialImageQCTaskEmail(Guid trialId)
{
var trialInfo = _repository.Where(t => t.Id == trialId).Select(t => new { t.ResearchProgramNo, t.ExperimentName, t.TrialCode, t.TrialStatusStr }).FirstOrDefault();
-
-
//找到 该项目的IQC 用户Id
var userList = await _repository.Where(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
}
}
+ ///
+ /// QC质疑
+ ///
+ ///
+ ///
+ public async Task SendTrialQCQuestionEmail(Guid trialId)
+ {
+ var trialInfo = _repository.Where(t => t.Id == trialId).Select(t => new { t.ResearchProgramNo, t.ExperimentName, t.TrialCode, t.TrialStatusStr }).FirstOrDefault();
+ //找到 该项目的IQC 用户Id
+ var userList = await _repository.Where(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 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);
+ }
+ }
+ }
+
+ ///
+ /// 影像质疑
+ ///
+ ///
+ ///
+ public async Task SendTrialImageQuestino(Guid trialId)
+ {
+ var trialInfo = _repository.Where(t => t.Id == trialId).Select(t => new { t.ResearchProgramNo, t.ExperimentName, t.TrialCode, t.TrialStatusStr }).FirstOrDefault();
+
+ //找到 该项目的CRC 用户Id
+ var userList = await _repository.Where(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 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 topicAndHtmlFunc, Guid? trialReadingCriterionId = null, Guid? subjectId = null)
diff --git a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs
index 7ac89fe3a..0d142fef9 100644
--- a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs
+++ b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs
@@ -77,7 +77,7 @@ namespace IRaCIS.Core.Application.Service
[HttpPost]
public async Task 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();
}
///
diff --git a/IRaCIS.Core.Test/DbHelper.ttinclude b/IRaCIS.Core.Test/DbHelper.ttinclude
index 19d633448..24c236c0c 100644
--- a/IRaCIS.Core.Test/DbHelper.ttinclude
+++ b/IRaCIS.Core.Test/DbHelper.ttinclude
@@ -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().Select(row => new DbColumn()
{
diff --git a/irc_api.drone.yml b/irc_api.drone.yml
index 5a9d7c9e7..7fc06efa3 100644
--- a/irc_api.drone.yml
+++ b/irc_api.drone.yml
@@ -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