tj
2025-06-05 2d549a04870d1315868a7cf19952b64e8071e711
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
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<UserDO> managerList;
 
    private EmailSmtpSettingDO emailSmtpSettingDO;
 
 
 
 
 
    @PostConstruct
    public void init() {
        // 获取部门经理
        managerList=adminService.getGroupsUserListOnJob(GroupLevel2Enum.MANAGER.getValue());
        // 获取邮件服务器配置
        List<EmailSmtpSettingDO> 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="<a href='%s#/meeting/page?id=%s'>%s</a>";
        final String meetingUrlFormat = String.format(meetingUrl, url, meetingBO.getId(), meetingBO.getMeetingTitle());
 
 
        String subjectFormat="(%s)(%s)~%s 会议纪要已提交";
        String contentFormat="(%s)(%s)~%s <br/>" +
                "提交人:%s <br/> 提交时间:%s <br/> 内容链接:%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)
            );
 
        });
    }
}