CNCEC_SUBQHSE_WUHUAN/SGGL/BLL/PZHGL/GJSX/GJSXMonitorService.cs

233 lines
13 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Linq;
using System.Timers;
using System;
using System.Net.Mail;
using System.Net;
using System.Collections.Generic;
using Model;
using System.Data.SqlClient;
using System.Data;
using NPOI.SS.Formula.Functions;
using System.Reflection;
using System.Text;
namespace BLL
{
public static class GJSXMonitorService
{
public static Model.SGGLDB db = Funs.DB;
/// <summary>
/// 关键事项超期预警定时提醒发送邮箱
/// </summary>
public static void OverdueWarningSendEmail()
{
try
{
Model.SGGLDB db = Funs.DB;
//取未关闭且已经超期的数据
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.state<>'0' and GETDATE()>a.CompleteDate ";
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();
#region
//获取有邮箱的用户
var userIds = BLL.UserService.GetUserHaveEmailList();
if (userIds.Any() && lstOverdue.Any())
{
var lstProject = lstOverdue.Select(x => new { x.ProjectId, x.ProjectName }).Distinct().ToList();
foreach (var pro in lstProject)
{
var lstProjectOverdue = lstOverdue.Where(x => x.ProjectId == pro.ProjectId).ToList();
if (lstProjectOverdue.Any())
{
string projectName = pro.ProjectName;
foreach (var user in userIds)
{
MailMessage mail = new MailMessage();
//邮件主题
mail.Subject = $"关键事项超期预警提醒——{projectName}";
//mail.To.Add(user.Email);
mail.To.Add("1784803958@qq.com");
mail.IsBodyHtml = true;//确保邮件正文被当作HTML解析
StringBuilder tbodyStr = new StringBuilder();
int index = 1;
//责任人为本人
var acceptanceItems = lstProjectOverdue.Where(x => x.User_AcceptanceUserId.Contains(user.UserId)).OrderByDescending(x => x.DateDiffDays).ToList();
if (acceptanceItems.Any())
{
foreach (var item in acceptanceItems)
{
tbodyStr.Append($"<tr><td>{index}</td><td>本人负责</td><td>{item.UnitName}</td><td>{item.Detail}</td><td>{item.GJSXTypeName}</td><td>{item.UserName}</td><td>{item.User_AcceptanceUserName}</td><td>{item.CompleteDate.ToShortDateString()}</td><td>{(item.DateDiffDays > 0 ? item.DateDiffDays.ToString() : "")}</td></tr>");
index++;
}
}
//发起人为本人
var userItems = lstProjectOverdue.Where(x => x.UserID == user.UserId).OrderByDescending(x => x.DateDiffDays).ToList();
if (userItems.Any())
{
foreach (var item in userItems)
{
tbodyStr.Append($"<tr><td>{index}</td><td>本人发起</td><td>{item.UnitName}</td><td>{item.Detail}</td><td>{item.GJSXTypeName}</td><td>{item.UserName}</td><td>{item.User_AcceptanceUserName}</td><td>{item.CompleteDate.ToShortDateString()}</td><td>{(item.DateDiffDays > 0 ? item.DateDiffDays.ToString() : "")}</td></tr>");
index++;
}
}
//跟踪人为本人--x.User_ReceiveUserId != null && x.User_ReceiveUserId != "" &&
var receiveItems = lstProjectOverdue.Where(x => x.User_ReceiveUserId.Contains(user.UserId)).OrderByDescending(x => x.DateDiffDays).ToList();
if (receiveItems.Any())
{
foreach (var item in receiveItems)
{
tbodyStr.Append($"<tr><td>{index}</td><td>本人跟踪</td><td>{item.UnitName}</td><td>{item.Detail}</td><td>{item.GJSXTypeName}</td><td>{item.UserName}</td><td>{item.User_AcceptanceUserName}</td><td>{item.CompleteDate.ToShortDateString()}</td><td>{(item.DateDiffDays > 0 ? item.DateDiffDays.ToString() : "")}</td></tr>");
index++;
}
}
//抄送人为本人
var csUserItems = lstProjectOverdue.Where(x => x.User_CsUserIds.Contains(user.UserId)).OrderByDescending(x => x.DateDiffDays).ToList();
if (csUserItems.Any())
{
foreach (var item in csUserItems)
{
tbodyStr.Append($"<tr><td>{index}</td><td>抄送本人</td><td>{item.UnitName}</td><td>{item.Detail}</td><td>{item.GJSXTypeName}</td><td>{item.UserName}</td><td>{item.User_AcceptanceUserName}</td><td>{item.CompleteDate.ToShortDateString()}</td><td>{(item.DateDiffDays > 0 ? item.DateDiffDays.ToString() : "")}</td></tr>");
index++;
}
}
//邮件正文
string bodyStr = @"<html>
<head>
<style>
table {
border-collapse: collapse;
width: 100%;
}
th, td {
border: 1px solid black;
padding: 8px;
text-align: left;
}
</style>
</head>
<body>
<h2>关键事项超期预警提醒</h2>
<a href='https://zhgd.cwcec.com/'>请点击此处,查看详细信息,并及时处置关闭</a>
<table>
<thead>
<tr>
<th>序号</th>
<th>类型</th>
<th>责任单位</th>
<th>事项描述</th>
<th>事项类别</th>
<th>发起人</th>
<th>责任人</th>
<th>约定完成时间</th>
<th>超期时间(天)</th>
</tr>
</thead>
<tbody>" + tbodyStr.ToString() + "</tbody></table></body></html>";
mail.Body = bodyStr;
PushEmail(mail);
}
}
}
}
#endregion
}
catch (Exception ex)
{
}
}
/// <summary>
/// 发送邮件
/// </summary>
/// <param name="mail"></param>
private static void PushEmail(MailMessage mail)
{
//获取发送邮箱配置
Email_Pop pops = BLL.Email_PopService.GetEmail_Pop("7EC5E991-B7A0-495A-90ED-2BE15370C959");
if (pops != null)
{
SmtpClient client = new SmtpClient(pops.EmailFwq);//替换为你的SMTP服务器地址
client.Port = int.Parse(pops.EmailDk);//587或465如果使用SSL
client.EnableSsl = true;//如果服务器支持SSL设置为true
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential(pops.EmailYx, pops.EmailPass);//替换为你的邮箱和服务授权码
mail.From = new MailAddress(pops.EmailYx);//发件人邮箱地址
try
{
client.Send(mail);
//Console.WriteLine("Email sent successfully.");
}
catch (Exception ex)
{
//Console.WriteLine("Email sending failed: " + ex.Message);
}
}
}
}
}