package com.cloudroam.service.impl; import cn.hutool.core.util.StrUtil; import com.cloudroam.bo.meeting.MeetingBO; import com.cloudroam.common.enumeration.GroupLevel2Enum; import com.cloudroam.model.EmailSmtpSettingDO; import com.cloudroam.model.UserDO; import com.cloudroam.service.AdminService; import com.cloudroam.service.EmailSmtpSettingService; import com.cloudroam.service.MailService; import com.cloudroam.service.UserService; import com.cloudroam.util.MailUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import javax.annotation.PostConstruct; import java.time.format.DateTimeFormatter; import java.util.List; @Service public class MailServiceImpl implements MailService { @Value("${front.url}") private String url; @Autowired private AdminService adminService; @Autowired private EmailSmtpSettingService emailSmtpSettingService; @Autowired private UserService userService; private List managerList; private EmailSmtpSettingDO emailSmtpSettingDO; @PostConstruct public void init() { // 获取部门经理 managerList=adminService.getGroupsUserListOnJob(GroupLevel2Enum.MANAGER.getValue()); // 获取邮件服务器配置 List settingDOList=emailSmtpSettingService.getEmailSmtpSettingList(); emailSmtpSettingDO = settingDOList.get(0); } @Async @Override // @Logger(template = "{user.nickname} 日志提交提醒邮件已发送 ") public void sendCommitDailyMail(UserDO userDO, String dailyDate) { String subjectFormat="(%s)~%s 日志提交提醒"; String contentFormat="(%s)~%s 日志已经提交,请及时确认"; for(UserDO manager:managerList){ if(StrUtil.isNotBlank(manager.getEmail())){ MailUtils.sendEmailHtml(emailSmtpSettingDO.getSmtpHost(),emailSmtpSettingDO.getSmtpPort(),emailSmtpSettingDO.getSmtpFrom(),emailSmtpSettingDO.getSmtpUsername(),emailSmtpSettingDO.getSmtpPassword(), manager.getEmail(), String.format(subjectFormat,dailyDate, userDO.getNickname()), String.format(contentFormat, dailyDate,userDO.getNickname())); } } } @Override public void sendConfirmDailyMail(UserDO confirmDO, String dailyDate, String userId, String confirmContent) { String subjectFormat="(%s)~%s 日志已经确认提醒"; String contentFormat="(%s)~%s 日志已经确认,请在下班前填写完成工作的实际工时"; String contentFormat2="(%s)~%s 日志已经确认,审核意见是:%s,请在下班前填写完成工作的实际工时"; String sendContent=""; if(StrUtil.isNotBlank(confirmContent)){ sendContent=String.format(contentFormat, dailyDate,confirmDO.getNickname()); }else{ sendContent=String.format(contentFormat2, dailyDate,confirmDO.getNickname(),confirmContent); } UserDO receiverUser = userService.getUserById(userId); if(StrUtil.isNotBlank(receiverUser.getEmail())){ MailUtils.sendEmailHtml(emailSmtpSettingDO.getSmtpHost(),emailSmtpSettingDO.getSmtpPort(),emailSmtpSettingDO.getSmtpFrom(),emailSmtpSettingDO.getSmtpUsername(),emailSmtpSettingDO.getSmtpPassword(), receiverUser.getEmail(), String.format(subjectFormat,dailyDate, confirmDO.getNickname()), sendContent); } } @Override public void sendUnConfirmDailyMail(UserDO unConfirmUser, String dailyDate, String createUserId) { String subjectFormat="(%s)~%s 日志被设置为未确认提醒"; String contentFormat="(%s)~%s 日志被设置成了未确认,请尽快修改并提交日志"; UserDO receiverUser = userService.getUserById(createUserId); if(StrUtil.isNotBlank(receiverUser.getEmail())){ MailUtils.sendEmailHtml(emailSmtpSettingDO.getSmtpHost(),emailSmtpSettingDO.getSmtpPort(),emailSmtpSettingDO.getSmtpFrom(),emailSmtpSettingDO.getSmtpUsername(),emailSmtpSettingDO.getSmtpPassword(), receiverUser.getEmail(), String.format(subjectFormat,dailyDate, unConfirmUser.getNickname()), String.format(contentFormat, dailyDate,unConfirmUser.getNickname())); } } @Override public void sendConfirmUnPassDailyMail(UserDO unPassUser, String dailyDate, String createUserId, String confirmContent) { String subjectFormat="(%s)~%s 日志确认未被通过"; String contentFormat="(%s)~%s 日志确认未被通过,修改意见为:%s ,请尽快修改并提交日志"; UserDO receiverUser = userService.getUserById(createUserId); if(StrUtil.isNotBlank(receiverUser.getEmail())){ MailUtils.sendEmailHtml(emailSmtpSettingDO.getSmtpHost(),emailSmtpSettingDO.getSmtpPort(),emailSmtpSettingDO.getSmtpFrom(),emailSmtpSettingDO.getSmtpUsername(),emailSmtpSettingDO.getSmtpPassword(), receiverUser.getEmail(), String.format(subjectFormat,dailyDate, unPassUser.getNickname()), String.format(contentFormat, dailyDate,unPassUser.getNickname(),confirmContent)); } } @Async("taskExecutor") @Override public void sendMeetingCommitMail(MeetingBO meetingBO,UserDO commitUser) { // UserDO user = LocalUser.getLocalUser(); String meetingUrl="%s"; final String meetingUrlFormat = String.format(meetingUrl, url, meetingBO.getId(), meetingBO.getMeetingTitle()); String subjectFormat="(%s)(%s)~%s 会议纪要已提交"; String contentFormat="(%s)(%s)~%s
" + "提交人:%s
提交时间:%s
内容链接:%s"; // managerList=adminService.getGroupsUserList(GroupLevel2Enum.MANAGER.getValue(),"1"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String meetingDate=meetingBO.getMeetingDate().format(formatter); final String smtpFrom =!StringUtils.isEmpty(commitUser.getEmailpwd())?commitUser.getEmail():emailSmtpSettingDO.getSmtpFrom(); String smtpUsername=!StringUtils.isEmpty(commitUser.getEmailpwd())?commitUser.getEmail():emailSmtpSettingDO.getSmtpUsername(); String smtpPassword=!StringUtils.isEmpty(commitUser.getEmailpwd())?commitUser.getEmailpwd():emailSmtpSettingDO.getSmtpPassword(); managerList.stream().forEach(toUser -> { // MailUtils.sendEmailHtml(emailSmtpSettingDO.getSmtpHost(),emailSmtpSettingDO.getSmtpPort(),emailSmtpSettingDO.getSmtpFrom(),emailSmtpSettingDO.getSmtpUsername(),emailSmtpSettingDO.getSmtpPassword(), // userDO.getEmail(), String.format(subjectFormat,meetingDate,meetingBO.getMeetingTypeName(), meetingBO.getMeetingTitle()), // String.format(contentFormat, meetingDate,meetingBO.getMeetingTypeName(),meetingBO.getMeetingTitle(),meetingBO.getCommitUserName(),meetingBO.getCommitTime().format(formatter2),meetingBO.getMeetingContent())); MailUtils.sendEmailHtml( emailSmtpSettingDO.getSmtpHost(), emailSmtpSettingDO.getSmtpPort(), smtpFrom, smtpUsername, smtpPassword, toUser.getEmail(), String.format(subjectFormat,meetingDate,meetingBO.getMeetingTypeName(), meetingBO.getMeetingTitle()), String.format(contentFormat, meetingDate,meetingBO.getMeetingTypeName(),meetingBO.getMeetingTitle(),meetingBO.getCommitUserName(),meetingBO.getCommitTime().format(formatter2),meetingUrlFormat) ); }); } }