| | |
| | | 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.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * 邮件服务类 |
| | | * |
| | | * @author www |
| | | * @date 2024-03-21 |
| | | */ |
| | | @Service |
| | | public class EmailService { |
| | | @Value("${email.userName}") |
| | |
| | | private Integer hours; |
| | | |
| | | @Value("${email.names}") |
| | | private Integer names; |
| | | private String names; |
| | | |
| | | @Value("${email.title}") |
| | | private String title; |
| | | |
| | | @Value("${email.enable}") |
| | | private Boolean enable; |
| | | |
| | | @Value("${email.debug}") |
| | | private Boolean debug; |
| | | |
| | | @Resource |
| | | private QxshMapper qxshMapper; |
| | | |
| | | private static boolean isBusy = false; |
| | | |
| | | private final static SimpleDateFormat YMDH = new SimpleDateFormat("yyyyMMddHH"); |
| | | |
| | |
| | | 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加密 |
| | | // 126—smtp.126.com,163—smtp.163.com,qq-smtp.qq.com" |
| | | props.put("mail.smtp.host", smtpHost); |
| | | props.put("mail.smtp.port", smtpPort); |
| | | props.put("mail.smtp.auth", smtpAuth); |
| | | props.put("mail.smtp.starttls.enale", smtpTls); |
| | | |
| | | Session session = Session.getInstance(props, new Authenticator() { |
| | | @Override |
| | |
| | | } |
| | | }); |
| | | |
| | | // 控制台打印调试信息 |
| | | session.setDebug(true); |
| | | session.setDebug(debug); |
| | | |
| | | return session; |
| | | } |
| | | |
| | | public Boolean send(String title, String text) { |
| | | try { |
| | | // 创建Session会话 |
| | | if (!enable) { |
| | | return null; |
| | | } |
| | | |
| | | Session session = createSession(); |
| | | |
| | | // 创建邮件对象 |
| | | MimeMessage message = new MimeMessage(session); |
| | | message.setSubject(title); |
| | | message.setText(text); |
| | |
| | | message.setRecipients(Message.RecipientType.CC, ias); |
| | | } |
| | | |
| | | // 发送 |
| | | Transport.send(message); |
| | | |
| | | return true; |
| | |
| | | } |
| | | } |
| | | |
| | | public int calcData() { |
| | | List<String> list = new ArrayList<>(); |
| | | public Integer calcData() { |
| | | try { |
| | | if (isBusy) { |
| | | return null; |
| | | } |
| | | |
| | | isBusy = true; |
| | | List<String> list = new ArrayList<>(); |
| | | calcCsvData(list); |
| | | calcDbData(list); |
| | | |
| | | int size = list.size(); |
| | | if (size > 0) { |
| | | String text = String.join("、", list.toArray(new String[list.size()])) + ",近" + hours + "小时内存在数据缺失。"; |
| | | send(title, text); |
| | | } |
| | | isBusy = false; |
| | | |
| | | return size; |
| | | } catch (Exception ex) { |
| | | logger.error(ex.getMessage(), ex); |
| | | isBusy = false; |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | private void calcCsvData(List<String> list) { |
| | | String[] strs = names.split(","); |
| | | int count = countCsv(bigPath, hours); |
| | | if (0 == count) { |
| | | list.add("大CSV近 " + hours + " 小时存在文件缺失,"); |
| | | list.add(strs[0]); |
| | | } |
| | | count = countCsv(filePath, hours); |
| | | if (0 == count) { |
| | | list.add("中CSV近 " + hours + " 小时存在文件缺失,"); |
| | | list.add(strs[1]); |
| | | } |
| | | count = countCsv(vocPath, hours); |
| | | if (0 == count) { |
| | | list.add("小CSV近 " + hours + " 小时存在文件缺失,"); |
| | | list.add(strs[2]); |
| | | } |
| | | } |
| | | |
| | | Calendar calendar = getCalendar(1); |
| | | calendar = getCalendar(0); |
| | | private void calcDbData(List<String> list) { |
| | | 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()); |
| | | |
| | | int size = list.size(); |
| | | |
| | | return size; |
| | | String[] strs = names.split(","); |
| | | int count = qxshMapper.countGcsjByTime(iStart, iEnd); |
| | | if (0 == count) { |
| | | list.add(strs[3]); |
| | | } |
| | | count = qxshMapper.countQxshByTime(iStart, iEnd); |
| | | if (0 == count) { |
| | | list.add(strs[4]); |
| | | } |
| | | count = qxshMapper.countSuYuan46ByTime(sStart, sEnd); |
| | | if (0 == count) { |
| | | list.add(strs[5]); |
| | | } |
| | | count = qxshMapper.countSuYuan70ByTime(sStart, sEnd); |
| | | if (0 == count) { |
| | | list.add(strs[6]); |
| | | } |
| | | count = qxshMapper.countSuYuanFastByTime(sStart, sEnd); |
| | | if (0 == count) { |
| | | list.add(strs[7]); |
| | | } |
| | | } |
| | | |
| | | public int countCsv(String path, Integer hours) { |