package com.yssh.service; import com.yssh.mapper.QxshMapper; import com.yssh.utils.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.Resource; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.io.File; import java.text.SimpleDateFormat; import java.util.*; /** * 邮件服务类 * * @author www * @date 2024-03-21 */ @Service public class EmailService { @Value("${email.userName}") private String userName; @Value("${email.password}") private String password; @Value("${email.smtpHost}") private String smtpHost; @Value("${email.smtpPort}") private String smtpPort; @Value("${email.smtpAuth}") private String smtpAuth; @Value("${email.smtpTls}") private String smtpTls; @Value("${email.from}") private String from; @Value("${email.to}") private String to; @Value("${email.cc}") private String cc; @Value("${csv.bigPath}") private String bigPath; @Value("${csv.filePath}") private String filePath; @Value("${csv.vocPath}") private String vocPath; @Value("${email.hours}") private Integer hours; @Value("${email.names}") private String names; @Value("${email.title}") private String title; @Value("${email.enable}") private Boolean enable; @Resource private QxshMapper qxshMapper; private final static SimpleDateFormat YMDH = new SimpleDateFormat("yyyyMMddHH"); private final static SimpleDateFormat Y_M_D_H = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); protected final Logger logger = LoggerFactory.getLogger(this.getClass()); public Session createSession() { // 创建一个配置文件,并保存 Properties props = new Properties(); // SMTP服务器连接信息:126—smtp.126.com,163—smtp.163.com,qq-smtp.qq.com" props.put("mail.smtp.host", smtpHost); // SMTP主机名 props.put("mail.smtp.port", smtpPort); // 主机端口号:126—25,163—645,qq-587 props.put("mail.smtp.auth", smtpAuth); // 是否需要用户认证 props.put("mail.smtp.starttls.enale", smtpTls); // 启用TlS加密 Session session = Session.getInstance(props, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(userName, password); } }); // 控制台打印调试信息 session.setDebug(true); return session; } public Boolean send(String title, String text) { try { if (!enable) { return null; } // 创建Session会话 Session session = createSession(); // 创建邮件对象 MimeMessage message = new MimeMessage(session); message.setSubject(title); message.setText(text); message.setFrom(new InternetAddress(from)); message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(to)); //message.setRecipients(Message.RecipientType.CC, new InternetAddress[] {new InternetAddress("抄送人邮箱")}); if (!StringUtils.isEmpty(cc)) { String[] strs = cc.split(","); InternetAddress[] ias = new InternetAddress[strs.length]; for (int i = 0, c = strs.length; i < c; i++) { ias[i] = new InternetAddress(strs[i]); } message.setRecipients(Message.RecipientType.CC, ias); } // 发送 Transport.send(message); return true; } catch (Exception ex) { logger.error(ex.getMessage(), ex); return false; } } public int calcData() { List list = new ArrayList<>(); String[] strs = names.split(","); int count = countCsv(bigPath, hours); if (0 == count) { list.add(strs[0] + "近" + hours + "小时存在文件缺失,"); } count = countCsv(filePath, hours); if (0 == count) { list.add(strs[1] + "近" + hours + "小时存在文件缺失,"); } count = countCsv(vocPath, hours); if (0 == count) { list.add(strs[2] + "近" + hours + "小时存在文件缺失,"); } Calendar calendar = getCalendar(0); Integer iEnd = Integer.parseInt(YMDH.format(calendar.getTime())); String sEnd = Y_M_D_H.format(calendar.getTime()); calendar.add(Calendar.HOUR, 1 - hours); Integer iStart = Integer.parseInt(YMDH.format(calendar.getTime())); String sStart = Y_M_D_H.format(calendar.getTime()); count = qxshMapper.countGcsjByTime(iStart, iEnd); if (0 == count) { list.add(strs[3] + "近" + hours + "小时存在数据缺失,"); } count = qxshMapper.countQxshByTime(iStart, iEnd); if (0 == count) { list.add(strs[4] + "近" + hours + "小时存在数据缺失,"); } count = qxshMapper.countSuYuan46ByTime(sStart, sEnd); if (0 == count) { list.add(strs[5] + "近" + hours + "小时存在数据缺失,"); } count = qxshMapper.countSuYuan70ByTime(sStart, sEnd); if (0 == count) { list.add(strs[6] + "近" + hours + "小时存在数据缺失,"); } count = qxshMapper.countSuYuanFastByTime(sStart, sEnd); if (0 == count) { list.add(strs[7] + "近" + hours + "小时存在数据缺失,"); } int size = list.size(); if (size > 0) { String text = String.join(",", list.toArray(new String[list.size()])) + "。"; send(title, text); } return size; } public int countCsv(String path, Integer hours) { try { int count = 0; Calendar calendar = getCalendar(1); for (int i = 0; i < hours; i++) { calendar.add(Calendar.HOUR, -1); String filePath = path + File.separator + YMDH.format(calendar.getTime()) + ".csv"; if (new File(filePath).exists()) { count++; } } return count; } catch (Exception ex) { logger.error(ex.getMessage(), ex); return 0; } } public Calendar getCalendar(int start) { Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); calendar.add(Calendar.HOUR, start); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); return calendar; } }