You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DS7/BookingJieFeng/Job/DeadlineJob.cs

54 lines
2.5 KiB
C#

2 years ago
using BookingJieFeng.DB;
using log4net;
using MimeKit;
using MimeKit.Utils;
using MailKit.Net.Smtp;
using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Configuration;
using BookingJieFeng.DB.Model;
namespace BookingJieFeng.Job
{
//截港日期前3小时发送提醒邮件
public class DeadlineJob : IJob
{
private const int RemainDeadlineHour = 3;
private BookingDB bookingDB = new BookingDB();
private ILog log = LogManager.GetLogger("DeadlineJob");
public void Execute(IJobExecutionContext context)
{
DateTime dtDeadline = DateTime.Parse(DateTime.Now.AddHours(RemainDeadlineHour).ToString("yyyy-MM-dd HH:00:00"));
var deadList = bookingDB.Orders.AsNoTracking().Where(o => o.CLOSEDOCDATE != null && o.CLOSEDOCDATE.Value == dtDeadline).ToList();
log.Debug($"查找截港时间即将到期的订单,数量:{deadList.Count},时间条件:{dtDeadline.ToString("yyyy-MM-dd HH:mm:ss")}");
foreach (var item in deadList)
{
var corp = bookingDB.Users.FirstOrDefault(c => c.GID == item.CORPID);
if (corp != null && !string.IsNullOrEmpty(corp.EMAIL))
{
var etd = item.ETD.HasValue ? item.ETD.Value.ToString("yyyy-MM-dd") : string.Empty;
OP_SEND_MAIL sendMail = new OP_SEND_MAIL();
sendMail.GID = Guid.NewGuid().ToString();
sendMail.SEND_TO = corp.EMAIL;
sendMail.TITLE = $"您提交的订舱{item.ORDERNO},距截港时间只剩{RemainDeadlineHour}小时,请尽快处理";
sendMail.BODY = $"订舱公司:{corp.COMPANY_NAME}\r\n订舱编号{item.ORDERNO}\r\nETD{etd}\r\n船公司{item.VESSEL}\r\n箱型箱量{item.CNTRTOTAL}\r\n卸货港{item.PORTDISCHARGE}\r\n录入人{item.INPUTBY}";
sendMail.CREATE_TIME = DateTime.Now;
sendMail.STATUS = SendMailStatus.Create.ToString();
bookingDB.SendMails.Add(sendMail);
bookingDB.SaveChanges();
log.Debug($"成功提交邮件发送任务:订单编号:{item.ORDERNO},提单号:{item.MBLNO}");
}
else
{
log.Error($"ID为{item.ORDNO}的订单未找到所属公司,或所属公司的邮箱为空,未能发送提醒邮件");
}
}
}
}
}