Jelajahi Sumber

邮件通知

chenyuehu 3 tahun lalu
induk
melakukan
8e08d2dab5

+ 15 - 0
platform-dao/src/main/java/com/platform/dao/dto/workplace/WorkplaceBacklogDTO.java

@@ -95,6 +95,11 @@ public class WorkplaceBacklogDTO extends BaseDTO implements Serializable {
      */
     private List<String> userIds;
 
+    /**
+     * 接收人
+     */
+    private List<String> emails;
+
 
     public WorkplaceBacklogDTO() {
     }
@@ -107,4 +112,14 @@ public class WorkplaceBacklogDTO extends BaseDTO implements Serializable {
         this.otherId = otherId;
         this.userIds = userIds;
     }
+
+    public WorkplaceBacklogDTO(Integer type, Integer detailType, String targetId, String content, String otherId, List<String> userIds, List<String> emails) {
+        this.detailType = detailType;
+        this.type = type;
+        this.targetId = targetId;
+        this.content = content;
+        this.otherId = otherId;
+        this.userIds = userIds;
+        this.emails = emails;
+    }
 }

+ 2 - 0
platform-dao/src/main/java/com/platform/dao/entity/upms/SysUser.java

@@ -203,6 +203,8 @@ public class SysUser implements Serializable {
 
     private Boolean workFlag;
 
+    private String email;
+
     /**
      * 数据权限
      */

+ 10 - 0
platform-rest/src/main/resources/application-dev.yml

@@ -51,6 +51,16 @@ spring:
     multipart:
       maxFileSize: "100MB"
       maxRequestSize: "1000MB"
+  mail:
+    host: smtp.exmail.qq.com #发送邮件服务器
+    username: chenyh@tuzhiall.com #发送邮件的邮箱地址
+    password:  Chenyuehu521 #客户端授权码,不是邮箱密码,这个在qq邮箱设置里面自动生成的
+    properties.mail.smtp.port: 465 #端口号465或587
+    from: chenyh@tuzhiall.com # 发送邮件的地址,和上面username一致
+    properties.mail.smtp.starttls.enable: true
+    properties.mail.smtp.starttls.required: true
+    properties.mail.smtp.ssl.enable: true
+    default-encoding: utf-8
 # 直接放行URL
 ignore:
   urls:

+ 37 - 0
platform-rest/src/test/java/com/test/SendEmailTest.java

@@ -0,0 +1,37 @@
+package com.test;
+
+import com.platform.rest.RestApplication;
+import com.platform.service.mail.MailService;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+/**
+ * @Description ${DESCRIPTION}
+ * @Author chenyuehu
+ * @Date 2021/4/7
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = RestApplication.class)
+public class SendEmailTest {
+    /**
+     * 注入发送邮件的接口
+     */
+    @Autowired
+    private MailService mailService;
+
+    /**
+     * 测试发送文本邮件
+     */
+    @Test
+    public void sendmail() {
+        mailService.sendSimpleMail("229477831@qq.com","主题:你好普通邮件","内容:第一封邮件");
+    }
+
+    @Test
+    public void sendmailHtml(){
+        mailService.sendHtmlMail("229477831@qq.com","主题:你好html邮件","<h1>内容:第一封html邮件</h1>");
+    }
+}

+ 5 - 0
platform-service/pom.xml

@@ -72,6 +72,11 @@
             <version>1.3.1</version>
         </dependency>
 
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-mail</artifactId>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 13 - 0
platform-service/src/main/java/com/platform/service/event/EventListenerBean.java

@@ -1,14 +1,17 @@
 package com.platform.service.event;
 
+import cn.hutool.core.collection.CollectionUtil;
 import com.platform.common.util.BeanConverterUtil;
 import com.platform.common.util.IdGeneratorUtils;
 import com.platform.common.util.ListUtils;
+import com.platform.common.util.StringUtils;
 import com.platform.dao.dto.workplace.WorkplaceBacklogDTO;
 import com.platform.dao.entity.workplace.WorkplaceBacklog;
 import com.platform.dao.entity.workplace.WorkplaceBacklogUser;
 import com.platform.dao.enums.WorkplaceBacklogStatusEnum;
 import com.platform.dao.mapper.workplace.WorkplaceBacklogMapper;
 import com.platform.dao.mapper.workplace.WorkplaceBacklogUserMapper;
+import com.platform.service.mail.MailService;
 import com.platform.service.wechat.model.request.template.WechatTemplateRequest;
 import com.platform.service.wechat.service.WeChatConnectService;
 import lombok.AllArgsConstructor;
@@ -36,6 +39,8 @@ public class EventListenerBean {
 
     private final WorkplaceBacklogUserMapper workplaceBacklogUserMapper;
 
+    private final MailService mailService;
+
     @Async
     @Order
     @EventListener(WorkplaceBacklogEvent.class)
@@ -52,6 +57,14 @@ public class EventListenerBean {
         List<WorkplaceBacklogUser> backlogUsers = userIds.stream().map(userId ->
                 new WorkplaceBacklogUser(IdGeneratorUtils.getObjectId(), userId, backlog.getId(), now)).collect(Collectors.toList());
         workplaceBacklogUserMapper.insertListforComplex(backlogUsers);
+        List<String> mails = model.getEmails();
+        if (CollectionUtil.isNotEmpty(mails)) {
+            mails.forEach(item -> {
+                if (StringUtils.isNotEmpty(item)) {
+                    mailService.sendSimpleMail(item, model.getContent(), model.getContent());
+                }
+            });
+        }
     }
 
     @Async

+ 4 - 0
platform-service/src/main/java/com/platform/service/event/WorkplaceBacklogEvent.java

@@ -21,4 +21,8 @@ public class WorkplaceBacklogEvent extends ApplicationEvent {
         super(new WorkplaceBacklogDTO(type, detailType, targetId, content, otherId, userIds));
     }
 
+    public WorkplaceBacklogEvent(Integer type, Integer detailType, String targetId, String content, String otherId, List<String> userIds, List<String> mails) {
+        super(new WorkplaceBacklogDTO(type, detailType, targetId, content, otherId, userIds, mails));
+    }
+
 }

+ 36 - 0
platform-service/src/main/java/com/platform/service/mail/MailService.java

@@ -0,0 +1,36 @@
+package com.platform.service.mail;
+
+/**
+ * @Description 邮件服务器
+ * @Author chenyuehu
+ * @Date 2021/4/7
+ * @Version Copyright (c) 2019,北京乾元坤和科技有限公司 All rights reserved.
+ */
+public interface MailService {
+    /**
+     * 发送文本邮件
+     * @param to 收件人
+     * @param subject 主题
+     * @param content 内容
+     */
+    void sendSimpleMail(String to, String subject, String content);
+
+    /**
+     * 发送HTML邮件
+     * @param to 收件人
+     * @param subject 主题
+     * @param content 内容
+     */
+    public void sendHtmlMail(String to, String subject, String content);
+
+
+
+    /**
+     * 发送带附件的邮件
+     * @param to 收件人
+     * @param subject 主题
+     * @param content 内容
+     * @param filePath 附件
+     */
+    public void sendAttachmentsMail(String to, String subject, String content, String filePath);
+}

+ 121 - 0
platform-service/src/main/java/com/platform/service/mail/MailServiceImpl.java

@@ -0,0 +1,121 @@
+package com.platform.service.mail;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.io.FileSystemResource;
+import org.springframework.mail.SimpleMailMessage;
+import org.springframework.mail.javamail.JavaMailSender;
+import org.springframework.mail.javamail.MimeMessageHelper;
+import org.springframework.stereotype.Service;
+
+import javax.mail.MessagingException;
+import javax.mail.internet.MimeMessage;
+import java.io.File;
+
+/**
+ * @Description ${DESCRIPTION}
+ * @Author chenyuehu
+ * @Date 2021/4/7
+ * @Version Copyright (c) 2020,安徽图知天下大数据科技有限公司 All rights reserved.
+ */
+@Slf4j
+@Service("mailService")
+public class MailServiceImpl implements MailService {
+    /**
+     * Spring Boot 提供了一个发送邮件的简单抽象,使用的是下面这个接口,这里直接注入即可使用
+     */
+    @Autowired
+    private JavaMailSender mailSender;
+
+    /**
+     * 配置文件中我的qq邮箱
+     */
+    @Value("${spring.mail.from}")
+    private String from;
+
+    /**
+     * 简单文本邮件
+     *
+     * @param to      收件人
+     * @param subject 主题
+     * @param content 内容
+     */
+    @Override
+    public void sendSimpleMail(String to, String subject, String content) {
+        //创建SimpleMailMessage对象
+        SimpleMailMessage message = new SimpleMailMessage();
+        //邮件发送人
+        message.setFrom(from);
+        //邮件接收人
+        message.setTo(to);
+        //邮件主题
+        message.setSubject(subject);
+        //邮件内容
+        message.setText(content);
+        //发送邮件
+        mailSender.send(message);
+    }
+
+    /**
+     * html邮件
+     *
+     * @param to      收件人
+     * @param subject 主题
+     * @param content 内容
+     */
+    @Override
+    public void sendHtmlMail(String to, String subject, String content) {
+        //获取MimeMessage对象
+        MimeMessage message = mailSender.createMimeMessage();
+        MimeMessageHelper messageHelper;
+        try {
+            messageHelper = new MimeMessageHelper(message, true);
+            //邮件发送人
+            messageHelper.setFrom(from);
+            //邮件接收人
+            messageHelper.setTo(subject);
+            //邮件主题
+            message.setSubject(subject);
+            //邮件内容,html格式
+            messageHelper.setText(content, true);
+            //发送
+            mailSender.send(message);
+            //日志信息
+            log.info("邮件已经发送。");
+        } catch (MessagingException e) {
+            log.error("发送邮件时发生异常!", e);
+        }
+    }
+
+    /**
+     * 带附件的邮件
+     *
+     * @param to       收件人
+     * @param subject  主题
+     * @param content  内容
+     * @param filePath 附件
+     */
+    @Override
+    public void sendAttachmentsMail(String to, String subject, String content, String filePath) {
+        MimeMessage message = mailSender.createMimeMessage();
+        try {
+            MimeMessageHelper helper = new MimeMessageHelper(message, true);
+            helper.setFrom(from);
+            helper.setTo(to);
+            helper.setSubject(subject);
+            helper.setText(content, true);
+
+            FileSystemResource file = new FileSystemResource(new File(filePath));
+            String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
+            helper.addAttachment(fileName, file);
+            mailSender.send(message);
+            //日志信息
+            log.info("邮件已经发送。");
+        } catch (MessagingException e) {
+            log.error("发送邮件时发生异常!", e);
+        }
+
+
+    }
+}

+ 25 - 14
platform-service/src/main/java/com/platform/service/repair/impl/RepairApplicationFormServiceImpl.java

@@ -53,6 +53,7 @@ import javax.annotation.Resource;
 import java.lang.reflect.Array;
 import java.time.LocalDateTime;
 import java.time.temporal.ChronoUnit;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Calendar;
 import java.util.List;
@@ -213,14 +214,20 @@ public class RepairApplicationFormServiceImpl extends BaseServiceImpl<RepairAppl
         RepairApplicationForm form = super.saveModelHaveCreateInfo(model);
 
         List<SysUser> users = sysUserService.getRepairUser(new SysUserDTO());
-        List<String> userIds = users.stream().filter(item -> item.getWorkFlag()).map(item -> item.getUserId()).collect(Collectors.toList());
-        if (CollectionUtil.isEmpty(userIds)) {
-            userIds = users.stream().filter(item -> item.getIdentityType().equals(SysUserIdentityType.WXZG.getValue())).map(item -> item.getUserId()).collect(Collectors.toList());
+        List<SysUser> filterUsers = users.stream().filter(item -> item.getWorkFlag()).collect(Collectors.toList());
+        if (CollectionUtil.isEmpty(filterUsers)) {
+            filterUsers = users.stream().filter(item -> item.getIdentityType().equals(SysUserIdentityType.WXZG.getValue())).collect(Collectors.toList());
         }
+        List<String> userIds = new ArrayList<>();
+        List<String> mails = new ArrayList<>();
+        filterUsers.forEach(item -> {
+            userIds.add(item.getUserId());
+            mails.add(item.getEmail());
+        });
         // 通过给当天值班维修人员
         SpringContextHolder.publishEvent(new WorkplaceBacklogEvent(WorkplaceBacklogTypeEnum.REPAIR.getValue(), WorkplaceBacklogDetailTypeEnum.REPAIR_APPLICATION.getValue(),
                 model.getId(), MessageTemplateUtil.getRepairApplicationForReceive(model.getId()),
-                model.getId(), userIds));
+                model.getId(), userIds, mails));
         return form;
     }
 
@@ -329,9 +336,10 @@ public class RepairApplicationFormServiceImpl extends BaseServiceImpl<RepairAppl
         applicationForm.setUpdateTime(LocalDateTime.now());
         super.modModelByPrimaryKey(applicationForm);
 
+        SysUser repairUser = userMapper.selectByPrimaryKey(model.getRepairUserId());
         SpringContextHolder.publishEvent(new WorkplaceBacklogEvent(WorkplaceBacklogTypeEnum.REPAIR.getValue(), WorkplaceBacklogDetailTypeEnum.REPAIR_DISPATCH.getValue(),
                 applicationForm.getId(), MessageTemplateUtil.getRepairDispatch(applicationForm.getId()),
-                applicationForm.getId(), ListUtils.newArrayList(model.getRepairUserId())));
+                applicationForm.getId(), ListUtils.newArrayList(model.getRepairUserId()), ListUtils.newArrayList(repairUser.getEmail())));
     }
 
     @Override
@@ -383,9 +391,10 @@ public class RepairApplicationFormServiceImpl extends BaseServiceImpl<RepairAppl
         } else {
             super.modModelByPrimaryKey(applicationForm);
             // 发送通知给主管,主管是验收人,他收到通知,进行调拨给使用人员
+            SysUser checkUser = userMapper.selectByPrimaryKey(applicationForm.getCheckUserId());
             SpringContextHolder.publishEvent(new WorkplaceBacklogEvent(WorkplaceBacklogTypeEnum.REPAIR.getValue(), WorkplaceBacklogDetailTypeEnum.REPAIR_FINISH.getValue(),
                     applicationForm.getId(), MessageTemplateUtil.getRepairCheck(applicationForm.getId()),
-                    applicationForm.getId(), ListUtils.newArrayList(applicationForm.getCheckUserId())));
+                    applicationForm.getId(), ListUtils.newArrayList(applicationForm.getCheckUserId()), ListUtils.newArrayList(checkUser.getEmail())));
         }
     }
 
@@ -405,9 +414,10 @@ public class RepairApplicationFormServiceImpl extends BaseServiceImpl<RepairAppl
         info.setStatus(SbInfoStatusEnum.IN_USE.getValue());
         sbInfoService.modModelByPrimaryKey(info);
 
+        SysUser noticeUser = userMapper.selectByPrimaryKey(applicationForm.getRepairUserId());
         SpringContextHolder.publishEvent(new WorkplaceBacklogEvent(WorkplaceBacklogTypeEnum.REPAIR.getValue(), WorkplaceBacklogDetailTypeEnum.REPAIR_OK.getValue(),
                 applicationForm.getId(), MessageTemplateUtil.getRepairOk(applicationForm.getId()),
-                applicationForm.getId(), ListUtils.newArrayList(applicationForm.getRepairUserId())));
+                applicationForm.getId(), ListUtils.newArrayList(applicationForm.getRepairUserId()), ListUtils.newArrayList(noticeUser.getEmail())));
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -420,9 +430,10 @@ public class RepairApplicationFormServiceImpl extends BaseServiceImpl<RepairAppl
         applicationForm.setUpdateTime(LocalDateTime.now());
         super.modModelByPrimaryKey(applicationForm);
 
+        SysUser noticeUser = userMapper.selectByPrimaryKey(applicationForm.getRepairUserId());
         SpringContextHolder.publishEvent(new WorkplaceBacklogEvent(WorkplaceBacklogTypeEnum.REPAIR.getValue(), WorkplaceBacklogDetailTypeEnum.REPAIR_BACK.getValue(),
                 dto.getId(), MessageTemplateUtil.getRepairBack(applicationForm.getId()),
-                applicationForm.getId(), ListUtils.newArrayList(applicationForm.getRepairUserId())));
+                applicationForm.getId(), ListUtils.newArrayList(applicationForm.getRepairUserId()), ListUtils.newArrayList(noticeUser.getEmail())));
     }
 
     @Override
@@ -451,9 +462,10 @@ public class RepairApplicationFormServiceImpl extends BaseServiceImpl<RepairAppl
                 update.setRepairUserId(repairManager.getUserId());
                 update.setStatus(RepairApplicationFormStatusEnum.ALLOCATED.getValue());
                 mapper.updateByPrimaryKeySelective(update);
+
                 SpringContextHolder.publishEvent(new WorkplaceBacklogEvent(WorkplaceBacklogTypeEnum.REPAIR.getValue(), WorkplaceBacklogDetailTypeEnum.REPAIR_APPLICATION.getValue(),
                         item.getId(), MessageTemplateUtil.getRepairApplicationForReceive(item.getId()),
-                        item.getId(), Arrays.asList(repairManager.getUserId())));
+                        item.getId(), Arrays.asList(repairManager.getUserId()), Arrays.asList(repairManager.getEmail())));
             });
         }
     }
@@ -497,11 +509,10 @@ public class RepairApplicationFormServiceImpl extends BaseServiceImpl<RepairAppl
     private void sendOverTimeNotice(List<SysUser> users, List<RepairApplicationForm> tasks) {
         if (CollectionUtil.isNotEmpty(users) && CollectionUtil.isNotEmpty(tasks)) {
             List<String> userIds = users.stream().map(item -> item.getUserId()).collect(Collectors.toList());
-            tasks.forEach(item -> {
-                SpringContextHolder.publishEvent(new WorkplaceBacklogEvent(WorkplaceBacklogTypeEnum.REPAIR_NOT_FINISH.getValue(), WorkplaceBacklogDetailTypeEnum.REPAIR_APPLICATION.getValue(),
-                        item.getId(), MessageTemplateUtil.getRepairApplicationForNotFinishNotic(item.getId(), 3),
-                        item.getId(), userIds));
-            });
+            List<String> mails = users.stream().map(item -> item.getEmail()).collect(Collectors.toList());
+            tasks.forEach(item -> SpringContextHolder.publishEvent(new WorkplaceBacklogEvent(WorkplaceBacklogTypeEnum.REPAIR_NOT_FINISH.getValue(), WorkplaceBacklogDetailTypeEnum.REPAIR_APPLICATION.getValue(),
+                    item.getId(), MessageTemplateUtil.getRepairApplicationForNotFinishNotic(item.getId(), 3),
+                    item.getId(), userIds, mails)));
         }
     }