SendEmailJob.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. using Quartz;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using WebAPIBase.Utils;
  8. using WebAPIBase.NetCore.BusinessCore;
  9. namespace WebAPIBase.Service
  10. {
  11. /// <summary>
  12. /// 进度报告发邮件任务
  13. /// </summary>
  14. public class SendEmailJob : IJob
  15. {
  16. NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
  17. public Task Execute(IJobExecutionContext context)
  18. {
  19. return Task.Run(() =>
  20. {
  21. try
  22. {
  23. //NlogHelper.quartzLogger.Info("开始");
  24. var sql = $"select b.ProgressName,a.NodeName,a.ProgressId,a.id progressnodeid,a.PlannedStartDate from pmProgressNode a inner join pmprogress b on a.ProgressId=b.id where (b.IsMaster =1 or b.ismaster=2) and b.State=2 and a.PlannedStartDate is not null";
  25. //logger.Info($"主项计划sql:{sql}");
  26. var manager = new pmProgressManager();
  27. var dt = manager.Db.Ado.GetDataTable(sql);
  28. for (int i = 0; i < dt.Rows.Count; i++)
  29. {
  30. var PlannedStartDate = Convert.ToDateTime(dt.Rows[i]["PlannedStartDate"]);
  31. var name = dt.Rows[i]["ProgressName"].ToString() + "->" + dt.Rows[i]["NodeName"].ToString();
  32. var progressid = Convert.ToInt32(dt.Rows[i]["progressid"]);
  33. var progressnodeid = Convert.ToInt32(dt.Rows[i]["progressnodeid"]);
  34. #region 给责任人发邮件
  35. if (DateHelper.DateDiff(DateInterval.Day, DateTime.Now.AddDays(1), PlannedStartDate) == 0) //如果计划开始时间是当前时间的前一天
  36. {
  37. sql = $"select u.UserName,u.MailBox from SystemUser u inner join pmProgressNodePerson p on u.UserCode=p.UserCode where p.ProgressNodeId={progressnodeid} and p.type=1";
  38. //logger.Info($"获取责任人sql:{sql}");
  39. var dt2 = manager.Db.Ado.GetDataTable(sql);
  40. for (int j = 0; j < dt2.Rows.Count; j++) //给责任人发邮件
  41. {
  42. var username = dt2.Rows[j]["UserName"].ToString();
  43. var mailBox = dt2.Rows[j]["MailBox"].SConvertString();
  44. if (mailBox.IsEmail())
  45. {
  46. NlogHelper.quartzLogger.Info($"给责任人{username}发邮件开始");
  47. EmailHelper helper = new EmailHelper();
  48. helper.Title = $"地产ERP进度计划即将开始提醒";
  49. helper.Cont = $"此\"{name}\"于{PlannedStartDate.ToString("yyyy-MM-dd")}即将开始";
  50. helper.ReceiveEmail = mailBox;
  51. helper.SendMail(helper);
  52. NlogHelper.quartzLogger.Info($"给责任人{username}发邮件结束");
  53. }
  54. }
  55. }
  56. #endregion
  57. #region 给关注人和责任人发邮件
  58. if (DateHelper.DateDiff(DateInterval.Day, DateTime.Now, PlannedStartDate.AddDays(1)) == 0) //如果计划开始时间是当前时间的前一天
  59. {
  60. sql = $"select id from pmProgressReport where ProgressId={progressid} and ProgressNodeId={progressnodeid}";
  61. var exist = manager.Db.Ado.GetString(sql); //若没有任何进度报告
  62. if (exist.IsNullOrEmpty())
  63. {
  64. sql = $"select u.UserName,u.MailBox from SystemUser u inner join pmProgressNodePerson p on u.UserCode=p.UserCode where p.ProgressNodeId={progressnodeid} and (p.type=9 or p.type=1)";
  65. NlogHelper.quartzLogger.Info($"获取关注人sql:{sql}");
  66. var dt2 = manager.Db.Ado.GetDataTable(sql);
  67. for (int j = 0; j < dt2.Rows.Count; j++) //给责任人发邮件
  68. {
  69. var username = dt2.Rows[j]["UserName"].ToString();
  70. var mailBox = dt2.Rows[j]["MailBox"].SConvertString();
  71. if (mailBox.IsEmail())
  72. {
  73. NlogHelper.quartzLogger.Info($"给关注人和责任人{username}发邮件开始");
  74. EmailHelper helper = new EmailHelper();
  75. helper.Title = $"地产ERP进度计划填报提醒";
  76. helper.Cont = $"此\"{name}\"于{PlannedStartDate.ToString("yyyy-MM-dd")}已开始,未填报";
  77. helper.ReceiveEmail = mailBox;
  78. helper.SendMail(helper);
  79. NlogHelper.quartzLogger.Info($"给关注人和责任人{username}发邮件结束");
  80. }
  81. }
  82. }
  83. }
  84. #endregion
  85. }
  86. }
  87. catch (Exception ero)
  88. {
  89. NlogHelper.quartzLogger.Error(" 发邮件执行出错:" + ero, true);
  90. }
  91. });
  92. }
  93. }
  94. }