关键事项新增时补充即时通知责任人功能

This commit is contained in:
2025-07-14 15:04:34 +08:00
parent a0f84b2c88
commit 91416aed38
6 changed files with 229 additions and 42 deletions
+121 -3
View File
@@ -14,13 +14,131 @@ using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Threading.Tasks;
using System.Threading;
using Quartz.Util;
namespace BLL
{
public static class GJSXMonitorService
{
public static Model.SGGLDB db = Funs.DB;
//public static Model.SGGLDB db = Funs.DB;
/// <summary>
/// 关键事项通知提醒责任人
/// </summary>
/// <param name="userId"></param>
/// <param name="gjsxId"></param>
public static void GJSXNoticeSendEmail(string userId, string gjsxId)
{
string strSql = $@"select
DATEDIFF(DAY, CompleteDate, isnull(CloseDate,getdate())) AS DateDiffDays
,a.GJSXID,a.ProjectId,a.Detail,a.createDate,Base_Project.ProjectName,Base_Unit.UnitName,a.CloseDate,a.IsManypeople,a.CompleteDate,a.AttachUrl
,case a.state when 2 then '正在进行' when 3 then '待办' when 0 then '已关闭' when 1 then '开放' end as state
,CNProfessionalName = STUFF((SELECT ',' + Base_CNProfessional.ProfessionalName FROM dbo.Base_CNProfessional where PATINDEX('%,' + RTRIM(Base_CNProfessional.CNProfessionalId) + ',%', ',' + a.CNProfessional_ID + ',') > 0 FOR XML PATH('')), 1, 1,'')
,QuestionTypeName = STUFF((SELECT ',' + Base_QuestionType.QuestionTypeName FROM dbo.Base_QuestionType where PATINDEX('%,' + RTRIM(Base_QuestionType.QuestionTypeID) + ',%', ',' + a.QuestionTypeID + ',') > 0 FOR XML PATH('')), 1, 1,'')
,GJSXTypeName = STUFF((SELECT ',' + Base_GJSXType.GJSXTypeName FROM dbo.Base_GJSXType where PATINDEX('%,' + RTRIM(Base_GJSXType.GJSXTypeID) + ',%', ',' + a.GJSXTypeID + ',') > 0 FOR XML PATH('')), 1, 1,'')
,a.UserID,b.UserName
--,b.Email as UserEmail
,a.User_ReceiveID as User_ReceiveUserId
,User_ReceiveUserName = STUFF((SELECT ',' + p2.UserName FROM dbo.Sys_User as p2 where PATINDEX('%,' + RTRIM(p2.UserId) + ',%', ',' + a.User_ReceiveID + ',') > 0 FOR XML PATH('')), 1, 1,'')
--,User_ReceiveUserEmail = STUFF((SELECT ',' + p2.Email FROM dbo.Sys_User as p2 where PATINDEX('%,' + RTRIM(p2.UserId) + ',%', ',' + a.User_ReceiveID + ',') > 0 FOR XML PATH('')), 1, 1,'')
,a.user_Acceptance as User_AcceptanceUserId
,User_AcceptanceUserName = STUFF((SELECT ',' + p2.UserName FROM dbo.Sys_User as p2 where PATINDEX('%,' + RTRIM(p2.UserId) + ',%', ',' + a.user_Acceptance + ',') > 0 FOR XML PATH('')), 1, 1,'')
--,User_AcceptanceUserEmail = STUFF((SELECT ',' + p2.Email FROM dbo.Sys_User as p2 where PATINDEX('%,' + RTRIM(p2.UserId) + ',%', ',' + a.user_Acceptance + ',') > 0 FOR XML PATH('')), 1, 1,'')
,a.CsUsers as User_CsUserIds
,User_CsUsers = STUFF((SELECT ',' + p2.UserName FROM dbo.Sys_User as p2 where PATINDEX('%,' + RTRIM(p2.UserId) + ',%', ',' + a.CsUsers + ',') > 0 FOR XML PATH('')), 1, 1,'')
--,User_CsUsersUserEmail = STUFF((SELECT ',' + p2.Email FROM dbo.Sys_User as p2 where PATINDEX('%,' + RTRIM(p2.UserId) + ',%', ',' + a.CsUsers + ',') > 0 FOR XML PATH('')), 1, 1,'')
from GJSX as a
left join Sys_User as b on a.UserId = b.UserId
left join[dbo].[Base_Project] on a.ProjectId = Base_Project.ProjectId
left join[dbo].[Base_Unit] on a.UnitId = Base_Unit.UnitId
where 1=1 and a.GJSXID = '{gjsxId}' ";
List<SqlParameter> listStr = new List<SqlParameter>();
SqlParameter[] parameter = listStr.ToArray();
DataTable table = SQLHelper.GetDataTableRunText(strSql, parameter);
// 使用LINQ将DataTable转换为List<GJSXItem>
var lstOverdue = table.AsEnumerable().Select(row => new GJSXItem
{
DateDiffDays = Convert.ToInt32(row["DateDiffDays"]),
GJSXID = row["GJSXID"].ToString(),
ProjectId = row["ProjectId"].ToString(),
ProjectName = row["ProjectName"].ToString(),
UnitName = row["UnitName"].ToString(),
Detail = row["Detail"].ToString(),
CNProfessionalName = row["CNProfessionalName"].ToString(),
QuestionTypeName = row["QuestionTypeName"].ToString(),
GJSXTypeName = row["GJSXTypeName"].ToString(),
UserID = row["UserID"].ToString(),
UserName = row["UserName"].ToString(),
//UserEmail = row["UserEmail"].ToString(),
User_ReceiveUserId = row["User_ReceiveUserId"].ToString(),
User_ReceiveUserName = row["User_ReceiveUserName"].ToString(),
//User_ReceiveUserEmail = row["User_ReceiveUserEmail"].ToString(),
User_AcceptanceUserId = row["User_AcceptanceUserId"].ToString(),
User_AcceptanceUserName = row["User_AcceptanceUserName"].ToString(),
//User_AcceptanceUserEmail = row["User_AcceptanceUserEmail"].ToString(),
User_CsUserIds = row["User_CsUserIds"].ToString(),
User_CsUsers = row["User_CsUsers"].ToString(),
//User_CsUsersUserEmail = row["User_CsUsersUserEmail"].ToString(),
CompleteDate = Convert.ToDateTime(row["CompleteDate"].ToString())
}).ToList();
var gItem = lstOverdue.FirstOrDefault();
var user = UserService.GetUserByUserId(userId);
if (gItem != null && !string.IsNullOrWhiteSpace(user.Email))
{
MailMessage mail = new MailMessage();
//邮件主题
mail.Subject = $"你有新的关键事项了——{gItem.ProjectName}";
mail.To.Add(user.Email);
//mail.To.Add("test@test.com");
mail.IsBodyHtml = true;//确保邮件正文被当作HTML解析
//邮件正文
string bodyStr = $@"<html>
<head>
<style>
</style>
</head>
<body>
<h2>新的关键事项信息</h2>
<p>项目名称:{gItem.ProjectName}</p>
<p>事项编号:{gItem.GJSXID}</p>
<p>责任单位:{gItem.UnitName}</p>
<p>专业:{gItem.CNProfessionalName}</p>
<p>事项类别:{gItem.GJSXTypeName}</p>
<p>紧急程度:{gItem.QuestionTypeName}</p>
<p>事项描述:{gItem.Detail}</p>
<p>提出人:{gItem.UserName}</p>
<p>责任人:{gItem.User_AcceptanceUserName}</p>
<p>跟踪人:{gItem.User_ReceiveUserName}</p>
<p>抄送人:{gItem.User_CsUsers}</p>
<p>约定完成日期:{gItem.CompleteDate.ToShortDateString()}</p>
<h2>智慧施工管理信息系统</h2>
<a href='https://zhgd.cwcec.com/'>请点击此处,进入智慧施工管理信息系统,查看事项详情</a>
<p>登录账号:{user.Account}</p>
<p>登录密码:CWCEC.+身份证号后四位(示例:CWCEC.1234</p>
</body>
</html>";
//< p > 登录密码:{ user.RawPassword}</ p >
mail.Body = bodyStr;
try
{
bool send = PushEmail(mail);
}
catch (Exception ex)
{
ErrLogInfo.WriteLog($"关键事项通知提醒责任人;项目名称:{gItem.ProjectName},事项编号:{gItem.GJSXID}", ex);
}
}
}
/// <summary>
/// 关键事项超期预警定时提醒发送邮箱
@@ -179,7 +297,7 @@ namespace BLL
<th>序号</th>
<th>类型</th>
<th>责任单位</th>
<th>事项ID</th>
<th>事项编号</th>
<th>事项描述</th>
<th>事项类别</th>
<th>发起人</th>
@@ -245,7 +363,7 @@ namespace BLL
}
catch (Exception ex)
{
ErrLogInfo.WriteLog("关键事项发送邮件预警", ex);
ErrLogInfo.WriteLog(mail.Subject, ex);
return false;
//Console.WriteLine("Email sending failed: " + ex.Message);
}