src/main/java/com/whyc/controller/MailController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/whyc/listener/TaskListener.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/whyc/mapper/MailQueueMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/whyc/pojo/MailQueue.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/whyc/service/BOMFeedbakService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/whyc/service/MailQueueService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/whyc/service/MailService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/whyc/task/MailQueueTask.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/whyc/controller/MailController.java
@@ -11,8 +11,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.mail.MessagingException; @RestController @RequestMapping("mail") @Api(tags = "邮件") @@ -23,9 +21,8 @@ @ApiOperation("发送邮件") @PostMapping("sendMail") public Response sendMail(@RequestBody MailDTO mailDTO) throws MessagingException { service.sendMail(mailDTO); return new Response().set(1,null,"发送完成"); public Response sendMail(@RequestBody MailDTO mailDTO){ return service.sendMail(mailDTO); } } src/main/java/com/whyc/listener/TaskListener.java
New file @@ -0,0 +1,34 @@ package com.whyc.listener; import com.whyc.task.MailQueueTask; import org.springframework.beans.factory.annotation.Autowired; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; import java.util.Timer; @WebListener public class TaskListener implements ServletContextListener { /**一月执行一次*/ public static final Long fourSeconds = 4*1000L; private Timer timer; @Autowired private MailQueueTask mailQueueTask; @Override public void contextInitialized(ServletContextEvent servletContextEvent) { timer = new Timer("Task定时任务",true); timer.schedule(mailQueueTask,0,fourSeconds); } @Override public void contextDestroyed(ServletContextEvent servletContextEvent) { timer.cancel(); } } src/main/java/com/whyc/mapper/MailQueueMapper.java
New file @@ -0,0 +1,6 @@ package com.whyc.mapper; import com.whyc.pojo.MailQueue; public interface MailQueueMapper extends CustomMapper<MailQueue>{ } src/main/java/com/whyc/pojo/MailQueue.java
New file @@ -0,0 +1,73 @@ package com.whyc.pojo; import com.baomidou.mybatisplus.annotation.TableName; import java.util.Date; @TableName("tb_mail_queue") public class MailQueue { private Integer id; private String mails; private String title; private String content; private Long senderUserId; private String senderUserName; private Date createTime; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getMails() { return mails; } public void setMails(String mails) { this.mails = mails; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public Long getSenderUserId() { return senderUserId; } public void setSenderUserId(Long senderUserId) { this.senderUserId = senderUserId; } public String getSenderUserName() { return senderUserName; } public void setSenderUserName(String senderUserName) { this.senderUserName = senderUserName; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } } src/main/java/com/whyc/service/BOMFeedbakService.java
@@ -6,6 +6,7 @@ import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.whyc.dto.FileDirPath; import com.whyc.dto.MailDTO; import com.whyc.dto.Response; import com.whyc.dto.ZipUtils; import com.whyc.mapper.BOMFeedbakMapper; @@ -14,7 +15,6 @@ import com.whyc.pojo.DocUser; import com.whyc.util.ActionUtil; import com.whyc.util.CommonUtil; import com.whyc.util.MailUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -33,7 +33,7 @@ @Autowired(required = false) private BOMFeedbakMapper mapper; @Autowired private MailUtil mailUtil; private MailService mailService; @Resource private DocUserMapper userMapper; @@ -248,9 +248,15 @@ } } String subject = "Bom问题反馈-"+senderName; String subject = "【Bom问题反馈】-"+senderName; String content = feedback.getContent(); mailUtil.sendMailBatch(senderName,receiverMailList,subject,content); MailDTO mailDTO = new MailDTO(); mailDTO.setTitle(subject); mailDTO.setContent(content); mailDTO.setMailList(receiverMailList); mailService.sendMail(mailDTO); //mailUtil.sendMailBatch(senderName,receiverMailList,subject,content); return new Response().set(1,true,"反馈完成"); } //根据文件路径下载 @@ -315,9 +321,14 @@ } if(receiverMailList.size()>0) { String subject = "Bom问题反馈-" + senderName + ",并由" + appendUsername + "转发给您"; String subject = "【Bom问题反馈】-" + senderName + ",由" + appendUsername + "转发给您"; String content = feedback.getContent(); mailUtil.sendMailBatch(senderName, receiverMailList, subject, content); MailDTO mailDTO = new MailDTO(); mailDTO.setTitle(subject); mailDTO.setContent(content); mailDTO.setMailList(receiverMailList); mailService.sendMail(mailDTO); //mailUtil.sendMailBatch(senderName, receiverMailList, subject, content); } return new Response().setII(1,"追加反馈用户完成"); } src/main/java/com/whyc/service/MailQueueService.java
New file @@ -0,0 +1,28 @@ package com.whyc.service; import com.whyc.mapper.MailQueueMapper; import com.whyc.pojo.MailQueue; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; @Service public class MailQueueService { @Resource private MailQueueMapper mapper; public void add(MailQueue queue) { mapper.insert(queue); } public List<MailQueue> getList() { return mapper.selectList(null); } public void deleteById(Integer id) { mapper.deleteById(id); } } src/main/java/com/whyc/service/MailService.java
@@ -2,6 +2,8 @@ import com.whyc.constant.UserOperation; import com.whyc.dto.MailDTO; import com.whyc.dto.Response; import com.whyc.pojo.MailQueue; import com.whyc.util.ActionUtil; import com.whyc.util.MailUtil; import org.springframework.beans.factory.annotation.Autowired; @@ -9,6 +11,9 @@ import org.springframework.transaction.annotation.Transactional; import javax.mail.MessagingException; import java.util.Arrays; import java.util.Date; import java.util.LinkedList; import java.util.List; @Service @@ -20,23 +25,59 @@ @Autowired private DocLogService logService; @Autowired private MailQueueService mailQueueService; @Transactional public void sendMail(MailDTO mailDTO) throws MessagingException { public Response sendMail(MailDTO mailDTO) { Long uId = ActionUtil.getUser().getId(); String name=ActionUtil.getUser().getName(); mailUtil.sendMailBatch(name,mailDTO.getMailList(),mailDTO.getTitle(),mailDTO.getContent()); //日志 StringBuilder mailUserStr = new StringBuilder(); List<String> mailList = mailDTO.getMailList(); for (int i = 0; i < mailList.size(); i++) { if(i==0){ mailUserStr.append(mailList.get(i)); }else{ mailUserStr.append(","+mailList.get(i)); } } try { mailUtil.sendMailBatch(name,mailDTO.getMailList(),mailDTO.getTitle(),mailDTO.getContent()); String msgDetail = "发送给邮箱"+mailUserStr+",标题为:"+mailDTO.getTitle()+",内容为:"+mailDTO.getContent(); logService.record(uId,name, UserOperation.TYPE_SEND_MAIL.getType(),"邮件发送",msgDetail); //日志 List<String> mailList = mailDTO.getMailList(); for (int i = 0; i < mailList.size(); i++) { if(i==0){ mailUserStr.append(mailList.get(i)); }else{ mailUserStr.append(","+mailList.get(i)); } } String msgDetail = "发送给邮箱" + mailUserStr + ",标题为:" + mailDTO.getTitle() + ",内容为:" + mailDTO.getContent(); logService.record(uId, name, UserOperation.TYPE_SEND_MAIL.getType(), "邮件发送", msgDetail); return new Response().set(1,true,"发送完成"); } catch (MessagingException ex) { //邮件发送异常,存入数据库待重新发送列表 MailQueue queue = new MailQueue(); queue.setMails(mailUserStr.toString()); queue.setTitle(mailDTO.getTitle()); queue.setContent(mailDTO.getContent()); queue.setCreateTime(new Date()); queue.setSenderUserId(uId); queue.setSenderUserName(name); mailQueueService.add(queue); return new Response().set(1,false,"发送失败,网络异常,网络恢复后自动延时发送"); } } public void sendQueueMail(MailQueue queue) { Long uId = queue.getSenderUserId(); String name = queue.getSenderUserName(); String mails = queue.getMails(); String[] mailSplits = mails.split(","); List<String> mailList = new LinkedList<>(Arrays.asList(mailSplits)); try{ mailUtil.sendMailBatch(name,mailList,queue.getTitle(),queue.getContent()); //删除 数据库邮件队列表中 已被发送的邮件记录 mailQueueService.deleteById(queue.getId()); //日志 String msgDetail = "发送给邮箱" + mails + ",标题为:" + queue.getTitle() + ",内容为:" + queue.getContent(); logService.record(uId, name, UserOperation.TYPE_SEND_MAIL.getType(), "邮件发送", msgDetail); } catch (MessagingException ex) { //邮件发送异常 //System.out.println("邮件发送异常,后续会持续发送直到成功"); } } } src/main/java/com/whyc/task/MailQueueTask.java
New file @@ -0,0 +1,30 @@ package com.whyc.task; import com.whyc.pojo.MailQueue; import com.whyc.service.MailQueueService; import com.whyc.service.MailService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.List; import java.util.TimerTask; @Component public class MailQueueTask extends TimerTask { @Autowired private MailQueueService mailQueueService; @Autowired private MailService mailService; @Override public void run() { //查询邮件队列中的待发送列表 List<MailQueue> sendingList = mailQueueService.getList(); //发送邮件 for (MailQueue queue : sendingList) { mailService.sendQueueMail(queue); } } }