EmailService.java 4.06 KB
package com.ruoyi.service;

import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.email.domain.EmailConfig;
import com.ruoyi.email.service.IEmailConfigService;
import com.ruoyi.domain.DriverScheduling;
import com.ruoyi.utils.ConstDateUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import javax.mail.internet.MimeMessage;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

/**
 * 发送邮箱服务
 *
 * @author 20412
 */
@Service
public class EmailService {
    @Autowired
    private JavaMailSender javaMailSender;

    @Autowired
    private IEmailConfigService emailConfigService;

    private static final Logger log = LoggerFactory.getLogger(EmailService.class);

    @Value("${spring.mail.form}")
    private String from;

    @Value("${spring.mail.nickname}")
    private String name;

    public void sendWarningEmail(DriverScheduling item, Date signTime, BigDecimal alcoholIntake) {

        // TODO 支持发送多人 读取配置文件选着发送对象
        List<EmailConfig> emailConfigs = emailConfigService.selectRecipientsEmailConfigList();
        for (EmailConfig config : emailConfigs) {
            String recipientEmail = config.getEmail().trim();
            List<String> emails = getRecipientsEmailIds(config);
            MimeMessage mimeMessage = javaMailSender.createMimeMessage();
            try {
                MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
                mimeMessageHelper.setFrom(from,name);
                mimeMessageHelper.setTo(recipientEmail);
                mimeMessageHelper.setSubject("重要警示:酒精测试通知");
                if (!Objects.isNull(emails)) mimeMessageHelper.setCc(emails.toArray(new String[0]));
                String jobCode = "工号:" + item.getJobCode() + "\n";
                String name = "姓名:" + item.getName() + "\n";
                String posts = "工种:" + item.getPosts() + "\n";
                String fleetName = "车队:" + item.getFleetName() + "\n";
                String scheduling = "排班:" + (Objects.isNull(item.getScheduleDate()) ? "无排班" : "有排班") + "\n";
                String signDate = "打卡时间:" + ConstDateUtil.formatDate("yyyy-MM-dd HH:mm:ss", signTime) + "\n";
                String cause = "原因:酒精测试超标,当前测试值达到" + alcoholIntake.toString() + "mg/100ml。属于" + getResultString(alcoholIntake);

                String content = jobCode + name + posts + fleetName + scheduling + signDate + cause;
                mimeMessageHelper.setText(content);
                javaMailSender.send(mimeMessage);
                log.info("发送给:" + recipientEmail + "邮件发送成功");
            } catch (Exception e) {
                log.info("发送给:" + recipientEmail + "邮件发送失败");
                log.error(e.getMessage());
            }
        }

    }

    private List<String> getRecipientsEmailIds(EmailConfig config) {
        if (StringUtils.isNotEmpty(config.getParentId())){
            return emailConfigService
                    .selectEmailConfigListByIds(Arrays.stream(config.getParentId()
                    .split(","))
                    .map(Long::parseLong)
                    .collect(Collectors.toList()))
                    .stream()
                    .map(EmailConfig::getEmail)
                    .collect(Collectors.toList());
        }
        return null;
    }

    private String getResultString(BigDecimal alcoholIntake) {
        if (alcoholIntake.compareTo(new BigDecimal(20)) >= 0 && alcoholIntake.compareTo(new BigDecimal(80)) < 0)
            return "饮酒后驾驶机动车";
        else
            return "醉酒后驾驶机动车";
    }
}