From 592bf3dcbfcdcdf800bdd9d6bf470cbe2a94c68d Mon Sep 17 00:00:00 2001
From: YXY <932687738@qq.com>
Date: Sun, 9 Apr 2023 23:40:42 +0800
Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E5=AE=9A=E6=97=B6?=
=?UTF-8?q?=E4=BB=BB=E5=8A=A1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ruoyi/common/enums/EventOperateType.java | 3 +-
.../common/enums/TableRelationTypeEnum.java | 3 +-
ruoyi-flyingbook/pom.xml | 2 +-
.../domain/LarkCompanyTableInfo.java | 25 ++++
.../com/ruoyi/flyingbook/domain/MailInfo.java | 2 +
.../flyingbook/domain/lark/LarkRequest.java | 2 +
.../com/ruoyi/flyingbook/mail/MailHelper.java | 136 +++++++-----------
.../ruoyi/flyingbook/mail/MailHttpHelper.java | 108 ++++++++++++++
.../flyingbook/mail/MailTencentHelper.java | 107 ++++++++++++++
.../flyingbook/mail/request/MailRequest.java | 20 +--
.../mapper/LarkTableRelationMapper.java | 3 +
.../mapper/LarkTableRelationMapper.xml | 113 ++++++++++-----
.../main/resources/mapper/MailInfoMapper.xml | 15 +-
ruoyi-quartz/pom.xml | 4 +
.../com/ruoyi/quartz/task/MailSyncTask.java | 94 ++++++++++++
15 files changed, 505 insertions(+), 132 deletions(-)
create mode 100644 ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/LarkCompanyTableInfo.java
create mode 100644 ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mail/MailHttpHelper.java
create mode 100644 ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mail/MailTencentHelper.java
create mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/MailSyncTask.java
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/EventOperateType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/EventOperateType.java
index 96f014c..9b8680e 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/EventOperateType.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/EventOperateType.java
@@ -13,7 +13,8 @@ public enum EventOperateType {
CREATE("CREATE", "创建"),
UPDATE("UPDATE", "更新"),
DELETE("DELETE", "删除"),
- STOP("STOP", "终止");
+ STOP("STOP", "终止"),
+ SYNC_MAIL("SYNC_MAIL", "同步邮件"),;
private final String code;
private final String info;
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/TableRelationTypeEnum.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/TableRelationTypeEnum.java
index a207960..fe90dea 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/TableRelationTypeEnum.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/TableRelationTypeEnum.java
@@ -12,7 +12,8 @@ public enum TableRelationTypeEnum {
*/
MAINTENANCE_ROW_RELATION("MAINTENANCE_ROW_RELATION", "维护表之间的字段关系"),
SINGLE_DIRECTION("SINGLE_DIRECTION", "单向传递"),
- DOUBLE_DIRECTION("DOUBLE_DIRECTION", "双向传递");
+ DOUBLE_DIRECTION("DOUBLE_DIRECTION", "双向传递"),
+ SYNC_EMAIL("SYNC_EMAIL", "同步邮箱"),;
private String code;
private String info;
diff --git a/ruoyi-flyingbook/pom.xml b/ruoyi-flyingbook/pom.xml
index b6d07e9..27f1ad4 100644
--- a/ruoyi-flyingbook/pom.xml
+++ b/ruoyi-flyingbook/pom.xml
@@ -60,7 +60,7 @@
com.sun.mail
javax.mail
- 1.5.5
+ 1.6.2
diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/LarkCompanyTableInfo.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/LarkCompanyTableInfo.java
new file mode 100644
index 0000000..912bc47
--- /dev/null
+++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/LarkCompanyTableInfo.java
@@ -0,0 +1,25 @@
+package com.ruoyi.flyingbook.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 【请填写功能名称】对象 lark_table_relation
+ *
+ * @author ruoyi
+ * @date 2023-03-15
+ */
+@Data
+public class LarkCompanyTableInfo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private Long id;
+ private String appId;
+ private String appSecret;
+ private String fromAppToken;
+ private String fromTableId;
+ private String toAppToken;
+ private String toTableId;
+
+}
diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/MailInfo.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/MailInfo.java
index 45f84b7..ede2e77 100644
--- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/MailInfo.java
+++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/MailInfo.java
@@ -13,6 +13,8 @@ public class MailInfo extends BaseEntity {
private Long id;
+ private Long larkTableId;
+
/** 邮件服务器地址 */
private String mailServer;
diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/lark/LarkRequest.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/lark/LarkRequest.java
index f3016c7..6f41aa5 100644
--- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/lark/LarkRequest.java
+++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/lark/LarkRequest.java
@@ -15,6 +15,8 @@ import java.util.List;
@AllArgsConstructor
public class LarkRequest {
+ private Long id;
+
private String appId;
private String appSecret;
diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mail/MailHelper.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mail/MailHelper.java
index 9c54058..b6a4f29 100644
--- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mail/MailHelper.java
+++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mail/MailHelper.java
@@ -1,107 +1,79 @@
package com.ruoyi.flyingbook.mail;
-import com.ruoyi.flyingbook.mail.request.MailRequest;
+import com.lark.oapi.service.bitable.v1.model.CreateAppTableRecordRespBody;
+import com.ruoyi.common.enums.EventOperateType;
+import com.ruoyi.flyingbook.LarkHelper.LarkTableHelper;
+import com.ruoyi.flyingbook.domain.Event;
+import com.ruoyi.flyingbook.domain.EventLog;
+import com.ruoyi.flyingbook.domain.lark.LarkTableRequest;
+import com.ruoyi.flyingbook.mapper.EventLogMapper;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
-import javax.mail.*;
+import javax.mail.Flags;
+import javax.mail.Message;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeUtility;
-import javax.mail.search.*;
-import java.security.Security;
-import java.util.Properties;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
/**
* @author yuxiangyong
- * @create 2023-04-09 15:28
+ * @create 2023-04-09 20:27
*/
@Slf4j
-@Component
public class MailHelper {
- /**
- * ssl加密
- */
- private static final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
+ @Autowired
+ private LarkTableHelper larkTableHelper;
+ @Autowired
+ private EventLogMapper eventLogMapper;
- public static void main(String[] args) {
- MailHelper mailHelper = new MailHelper();
- MailRequest req = new MailRequest("imap.qq.com",993,"932687738","ohziejkxqvsgbbag");
- mailHelper.receiveMail(req);
- }
+ protected void parseMsg(Message[] messages,LarkTableRequest add) {
- public void receiveMail(MailRequest req){
- Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
- // 定义连接imap服务器的属性信息
- String portStr = String.valueOf(req.getEmailPort());
- Properties props = new Properties();
- props.setProperty("mail.imap.socketFactory.class", SSL_FACTORY);
- props.setProperty("mail.imap.socketFactory.fallback", "false");
- props.setProperty("mail.transport.protocol", req.getEmailProtocol());
- props.setProperty("mail.imap.port", portStr);
- props.setProperty("mail.imap.socketFactory.port", portStr);
- //创建会话
- Session session = Session.getInstance(props, new Authenticator() {
- @Override
- protected PasswordAuthentication getPasswordAuthentication() {
- return new PasswordAuthentication(req.getUserName(),req.getAuthorizationCode());
- }
- });
- Store store = null;
- Folder folder = null;
- try {
- //存储对象
- store = session.getStore(req.getEmailProtocol());
- //连接
- store.connect(req.getEmailServer(),req.getEmailPort(),req.getUserName(),req.getAuthorizationCode());
- // 获得收件箱
- folder = store.getFolder(req.getReceiveFolder());
- // 以读写模式打开收件箱
- folder.open(Folder.READ_WRITE);
- //false 表示未读
- FlagTerm flagTerm = new FlagTerm(new Flags(Flags.Flag.SEEN),false);
- //获得收件箱的邮件列表
- Message[] messages = folder.search(flagTerm);
- // 打印不同状态的邮件数量
- log.info("收件箱中共{}封邮件!\n共{}封未读邮件!\n共{}封新邮件!\n共{}封已删除邮件!",
- messages.length,
- folder.getUnreadMessageCount(),
- folder.getNewMessageCount(),
- folder.getDeletedMessageCount());
- log.info("------------------------开始解析邮件----------------------------------");
- for (int i = 0; i < messages.length; i++) {
- Message message = messages[i];
- parseMsg(message);
- //设置已读
- message.setFlag(Flags.Flag.SEEN,true);
- }
- } catch (Exception e) {
- log.error("邮件解析失败",e);
- } finally {
+ /**
+ * 意向度、现有学历、学生姓名、报名时间、手机号码、省市、备注、回放记录、业务员、信息完成度、数据来源、目标国家、所属学校、邮箱来源
+ */
+ List logs = new ArrayList<>();
+ for (Message message : messages) {
try {
- if (folder != null) {
- folder.close(false);
- }
- if (store != null) {
- store.close();
- }
- } catch (MessagingException e) {
- log.error("邮件解析失败",e);
+ System.out.println("消息:" + message.getSubject());
+ String from = MimeUtility.decodeText(message.getFrom()[0].toString());
+ InternetAddress internetAddress = new InternetAddress(from);
+ System.out.println("发件人:" + internetAddress.getPersonal() + '(' + internetAddress.getAddress() + ')');
+ String recordId = syncLarkTable(message,add);
+ this.buildLog(logs,message,recordId,null);
+ message.setFlag(Flags.Flag.SEEN, true);
+ } catch (Exception e) {
+ this.buildLog(logs,message,null,e);
}
}
+ if (CollectionUtils.isNotEmpty(logs)){
+ eventLogMapper.insertBatchEventLog(logs);
+ }
}
- private void parseMsg(Message message){
- try {
- System.out.println("消息:"+ message.getSubject());
- String from = MimeUtility.decodeText(message.getFrom()[0].toString());
- InternetAddress internetAddress = new InternetAddress(from);
- System.out.println("发件人:" + internetAddress.getPersonal() + '(' + internetAddress.getAddress() + ')');
-
- }catch (Exception e){
+ private void buildLog(List logs,Message message,String recordId,Exception e){
+ EventLog log = e != null ?
+ new EventLog(null, EventOperateType.SYNC_MAIL.getCode(), message.toString())
+ : new EventLog(null, EventOperateType.SYNC_MAIL.getCode(), message.toString(),null,e.getMessage());
+ log.setRemark(recordId);
+ logs.add(log);
+ }
- }
+ private String syncLarkTable(Message message,LarkTableRequest add){
+ Map body = this.buildBody(message);
+ add.setBody(body);
+ CreateAppTableRecordRespBody respBody = larkTableHelper.addTableRecord(add);
+ return respBody.getRecord().getRecordId();
+ }
+ protected Map buildBody(Message message){
+ return new HashMap<>();
}
+
}
diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mail/MailHttpHelper.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mail/MailHttpHelper.java
new file mode 100644
index 0000000..5ebe718
--- /dev/null
+++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mail/MailHttpHelper.java
@@ -0,0 +1,108 @@
+package com.ruoyi.flyingbook.mail;
+
+import com.ruoyi.flyingbook.domain.lark.LarkTableRequest;
+import com.ruoyi.flyingbook.mail.request.MailRequest;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.mail.*;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeUtility;
+import javax.mail.search.FlagTerm;
+import java.security.Security;
+import java.util.Properties;
+
+/**
+ * @author yuxiangyong
+ * @create 2023-04-09 15:28
+ */
+@Slf4j
+@Component
+public class MailHttpHelper extends MailHelper{
+
+ public static void main(String[] args) {
+ MailHttpHelper mailHelper = new MailHttpHelper();
+ MailRequest req = new MailRequest("xjia.synology.me",5000,"xjzsb","12345678");
+// req = new MailRequest("imap.qq.com",993,"932687738","lwoapikuenmzbfaj");
+ mailHelper.test(req);
+ }
+
+ public void test(MailRequest req){
+ try {
+ Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
+ Properties props = new Properties();
+ props.setProperty("mail.debug","true");
+// props.setProperty("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
+// props.setProperty("mail.pop3.socketFactory.fallback", "false");
+ props.setProperty("mail.transport.protocol", "pop3");
+ Session session = Session.getInstance(props, new Authenticator() {
+ @Override
+ protected PasswordAuthentication getPasswordAuthentication() {
+ return new PasswordAuthentication(req.getUserName(),req.getAuthorizationCode());
+ }
+ });
+ Store store = session.getStore("pop3");
+ store.connect(req.getEmailServer(),req.getEmailPort(),req.getUserName(), req.getAuthorizationCode());
+ Folder inbox = store.getFolder("INBOX");
+ }catch (Exception e){
+ log.info("",e);
+ }
+ }
+
+ public void receiveMail(MailRequest req, LarkTableRequest add){
+ // 定义连接imap服务器的属性信息
+ String portStr = String.valueOf(req.getEmailPort());
+ Properties props = new Properties();
+ props.setProperty("mail.smtp.ssl.enable","false");
+ props.setProperty("mail.imap.starttls.enable","true");
+ props.setProperty("mail.imap.socketFactory.fallback", "false");
+ props.setProperty("mail.transport.protocol", req.getEmailProtocol());
+ props.setProperty("mail.imap.port", portStr);
+ props.setProperty("mail.imap.socketFactory.port", portStr);
+ props.setProperty("mail.debug","false");
+ //创建会话
+ Session session = Session.getInstance(props, new Authenticator() {
+ @Override
+ protected PasswordAuthentication getPasswordAuthentication() {
+ return new PasswordAuthentication(req.getUserName(),req.getAuthorizationCode());
+ }
+ });
+ Store store = null;
+ Folder folder = null;
+ try {
+ //存储对象
+ store = session.getStore(req.getEmailProtocol());
+ //连接
+ store.connect(req.getEmailServer(),req.getEmailPort(),req.getUserName(),req.getAuthorizationCode());
+ // 获得收件箱
+ folder = store.getFolder(req.getReceiveFolder());
+ // 以读写模式打开收件箱
+ folder.open(Folder.READ_WRITE);
+ //false 表示未读
+ FlagTerm flagTerm = new FlagTerm(new Flags(Flags.Flag.SEEN),false);
+ //获得收件箱的邮件列表
+ Message[] messages = folder.search(flagTerm);
+ // 打印不同状态的邮件数量
+ log.info("收件箱中共{}封邮件!\n共{}封未读邮件!\n共{}封新邮件!\n共{}封已删除邮件!",
+ messages.length,
+ folder.getUnreadMessageCount(),
+ folder.getNewMessageCount(),
+ folder.getDeletedMessageCount());
+ log.info("------------------------开始解析邮件----------------------------------");
+// this.parseMsg(messages,add);
+ } catch (Exception e) {
+ log.error("邮件解析失败",e);
+ } finally {
+ try {
+ if (folder != null) {
+ folder.close(false);
+ }
+ if (store != null) {
+ store.close();
+ }
+ } catch (MessagingException e) {
+ log.error("邮件解析失败",e);
+ }
+ }
+ }
+}
diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mail/MailTencentHelper.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mail/MailTencentHelper.java
new file mode 100644
index 0000000..80b45d3
--- /dev/null
+++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mail/MailTencentHelper.java
@@ -0,0 +1,107 @@
+package com.ruoyi.flyingbook.mail;
+
+import com.ruoyi.flyingbook.mail.request.MailRequest;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.mail.*;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeUtility;
+import javax.mail.search.*;
+import java.security.Security;
+import java.util.Properties;
+
+/**
+ * @author yuxiangyong
+ * @create 2023-04-09 15:28
+ */
+@Slf4j
+@Component
+public class MailTencentHelper {
+
+ /**
+ * ssl加密
+ */
+ private static final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
+
+ public static void main(String[] args) {
+ MailTencentHelper mailHelper = new MailTencentHelper();
+ MailRequest req = new MailRequest("imap.qq.com",993,"932687738","ohziejkxqvsgbbag");
+ mailHelper.receiveMail(req);
+ }
+
+ public void receiveMail(MailRequest req){
+ Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
+ // 定义连接imap服务器的属性信息
+ String portStr = String.valueOf(req.getEmailPort());
+ Properties props = new Properties();
+ props.setProperty("mail.imap.socketFactory.class", SSL_FACTORY);
+ props.setProperty("mail.imap.socketFactory.fallback", "false");
+ props.setProperty("mail.transport.protocol", req.getEmailProtocol());
+ props.setProperty("mail.imap.port", portStr);
+ props.setProperty("mail.imap.socketFactory.port", portStr);
+
+ //创建会话
+ Session session = Session.getInstance(props, new Authenticator() {
+ @Override
+ protected PasswordAuthentication getPasswordAuthentication() {
+ return new PasswordAuthentication(req.getUserName(),req.getAuthorizationCode());
+ }
+ });
+ Store store = null;
+ Folder folder = null;
+ try {
+ //存储对象
+ store = session.getStore(req.getEmailProtocol());
+ //连接
+ store.connect(req.getEmailServer(),req.getEmailPort(),req.getUserName(),req.getAuthorizationCode());
+ // 获得收件箱
+ folder = store.getFolder(req.getReceiveFolder());
+ // 以读写模式打开收件箱
+ folder.open(Folder.READ_WRITE);
+ //false 表示未读
+ FlagTerm flagTerm = new FlagTerm(new Flags(Flags.Flag.SEEN),false);
+ //获得收件箱的邮件列表
+ Message[] messages = folder.search(flagTerm);
+ // 打印不同状态的邮件数量
+ log.info("收件箱中共{}封邮件!\n共{}封未读邮件!\n共{}封新邮件!\n共{}封已删除邮件!",
+ messages.length,
+ folder.getUnreadMessageCount(),
+ folder.getNewMessageCount(),
+ folder.getDeletedMessageCount());
+ log.info("------------------------开始解析邮件----------------------------------");
+ for (int i = 0; i < messages.length; i++) {
+ Message message = messages[i];
+ parseMsg(message);
+ //设置已读
+ message.setFlag(Flags.Flag.SEEN,true);
+ }
+ } catch (Exception e) {
+ log.error("邮件解析失败",e);
+ } finally {
+ try {
+ if (folder != null) {
+ folder.close(false);
+ }
+ if (store != null) {
+ store.close();
+ }
+ } catch (MessagingException e) {
+ log.error("邮件解析失败",e);
+ }
+ }
+ }
+
+ private void parseMsg(Message message){
+ try {
+ System.out.println("消息:"+ message.getSubject());
+ String from = MimeUtility.decodeText(message.getFrom()[0].toString());
+ InternetAddress internetAddress = new InternetAddress(from);
+ System.out.println("发件人:" + internetAddress.getPersonal() + '(' + internetAddress.getAddress() + ')');
+
+ }catch (Exception e){
+
+ }
+
+ }
+}
diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mail/request/MailRequest.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mail/request/MailRequest.java
index 6af378c..3e0aa43 100644
--- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mail/request/MailRequest.java
+++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mail/request/MailRequest.java
@@ -1,5 +1,6 @@
package com.ruoyi.flyingbook.mail.request;
+import com.ruoyi.flyingbook.domain.MailInfo;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -53,15 +54,6 @@ public class MailRequest {
}
}
- public MailRequest(String emailServer, Integer emailPort, String userName, String authorizationCode, Boolean readFeedback) {
- this.emailServer = emailServer;
- this.emailPort = emailPort;
- this.userName = userName;
- this.authorizationCode = authorizationCode;
- this.readFeedback = readFeedback;
- this.fillDefault(readFeedback);
- }
-
public MailRequest(String emailServer, Integer emailPort, String userName, String authorizationCode) {
this.emailServer = emailServer;
this.emailPort = emailPort;
@@ -69,4 +61,14 @@ public class MailRequest {
this.authorizationCode = authorizationCode;
this.fillDefault(Boolean.TRUE);
}
+
+ public MailRequest(MailInfo info,Boolean readFeedback) {
+ this.emailServer = info.getMailServer();
+ this.emailPort = Integer.valueOf(info.getMailPort());
+ this.userName = info.getMailUserName();
+ this.authorizationCode = info.getMailAuthorizationCode();
+ this.emailProtocol = info.getMailProtocol();
+ this.receiveFolder = info.getMailReceiveFolder();
+ this.readFeedback = Boolean.TRUE.equals(readFeedback);
+ }
}
diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mapper/LarkTableRelationMapper.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mapper/LarkTableRelationMapper.java
index 227fb05..66a202b 100644
--- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mapper/LarkTableRelationMapper.java
+++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mapper/LarkTableRelationMapper.java
@@ -1,6 +1,7 @@
package com.ruoyi.flyingbook.mapper;
+import com.ruoyi.flyingbook.domain.LarkCompanyTableInfo;
import com.ruoyi.flyingbook.domain.LarkTableRelation;
import org.apache.ibatis.annotations.Param;
@@ -62,4 +63,6 @@ public interface LarkTableRelationMapper
*/
public int deleteLarkTableRelationByIds(Long[] ids);
+ public List queryListByIdListJoinLarkCompany(@Param("ids") List tableIds, @Param("flag") Long flag, @Param("relationType") String relationType);
+
}
diff --git a/ruoyi-flyingbook/src/main/resources/mapper/LarkTableRelationMapper.xml b/ruoyi-flyingbook/src/main/resources/mapper/LarkTableRelationMapper.xml
index 13ea82a..e78b564 100644
--- a/ruoyi-flyingbook/src/main/resources/mapper/LarkTableRelationMapper.xml
+++ b/ruoyi-flyingbook/src/main/resources/mapper/LarkTableRelationMapper.xml
@@ -1,48 +1,73 @@
+ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+ "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- select id, lark_company_relation_id, from_app_token, from_table_id, to_app_token, to_table_id, create_by, create_time, update_by, update_time, flag, remark,relation_type from lark_table_relation
+ select id,
+ lark_company_relation_id,
+ from_app_token,
+ from_table_id,
+ to_app_token,
+ to_table_id,
+ create_by,
+ create_time,
+ update_by,
+ update_time,
+ flag,
+ remark,
+ relation_type
+ from lark_table_relation
-
\ No newline at end of file
diff --git a/ruoyi-flyingbook/src/main/resources/mapper/MailInfoMapper.xml b/ruoyi-flyingbook/src/main/resources/mapper/MailInfoMapper.xml
index 0a10bea..74ae45c 100644
--- a/ruoyi-flyingbook/src/main/resources/mapper/MailInfoMapper.xml
+++ b/ruoyi-flyingbook/src/main/resources/mapper/MailInfoMapper.xml
@@ -6,6 +6,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+
@@ -21,12 +22,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- select id, mail_server, mail_port, mail_protocol, mail_user_name, mail_authorization_code, mail_receive_folder, create_by, create_time, update_by, update_time, flag, remark from mail_info
+ select id,lark_table_id, mail_server, mail_port, mail_protocol, mail_user_name, mail_authorization_code, mail_receive_folder, create_by, create_time, update_by, update_time, flag, remark from mail_info
-
+
-
+
+ and lark_table_id = #{larkTableId}
and mail_server = #{mailServer}
and mail_port = #{mailPort}
and mail_protocol = #{mailProtocol}
@@ -42,9 +44,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where id = #{id}
-
+
insert into mail_info
+ lark_table_id,
mail_server,
mail_port,
mail_protocol,
@@ -59,6 +62,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
remark,
+ #{larkTableId},
#{mailServer},
#{mailPort},
#{mailProtocol},
@@ -74,9 +78,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-
+
update mail_info
+ lark_table_id = #{larkTableId},
mail_server = #{mailServer},
mail_port = #{mailPort},
mail_protocol = #{mailProtocol},
diff --git a/ruoyi-quartz/pom.xml b/ruoyi-quartz/pom.xml
index 864ece1..b438e64 100644
--- a/ruoyi-quartz/pom.xml
+++ b/ruoyi-quartz/pom.xml
@@ -34,6 +34,10 @@
com.ruoyi
ruoyi-common
+
+ com.ruoyi
+ ruoyi-flyingbook
+
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/MailSyncTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/MailSyncTask.java
new file mode 100644
index 0000000..5a379dd
--- /dev/null
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/MailSyncTask.java
@@ -0,0 +1,94 @@
+package com.ruoyi.quartz.task;
+
+import com.ruoyi.common.enums.FlagStatus;
+import com.ruoyi.common.enums.TableRelationTypeEnum;
+import com.ruoyi.flyingbook.domain.LarkCompanyTableInfo;
+import com.ruoyi.flyingbook.domain.MailInfo;
+import com.ruoyi.flyingbook.domain.lark.LarkTableRequest;
+import com.ruoyi.flyingbook.mail.MailHttpHelper;
+import com.ruoyi.flyingbook.mail.request.MailRequest;
+import com.ruoyi.flyingbook.mapper.LarkTableRelationMapper;
+import com.ruoyi.flyingbook.service.IMailInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * 定时任务调度测试
+ *
+ * @author ruoyi
+ */
+@Slf4j
+@Component("mailSyncTask")
+public class MailSyncTask {
+
+ @Autowired
+ private MailHttpHelper mailHttpHelper;
+
+ @Autowired
+ private IMailInfoService iMailInfoService;
+ @Autowired
+ private LarkTableRelationMapper larkTableRelationMapper;
+
+ public void syncMail() {
+ log.info("MailSyncTask start");
+ MailInfo mailInfo = new MailInfo();
+ mailInfo.setFlag(FlagStatus.OK.getCode());
+ List mailInfos = iMailInfoService.selectMailInfoList(mailInfo);
+ log.info("MailSyncTask execute size:{}", mailInfos.size());
+ Map larkMap = this.getLarkMap(mailInfos);
+
+ for (MailInfo info : mailInfos) {
+ LarkTableRequest addRequest = larkMap.get(info.getLarkTableId());
+ if (addRequest == null) {
+ log.info("待同步邮箱未配置飞书相关信息,mailInfo:{}", info);
+ continue;
+ }
+ MailRequest request = new MailRequest(info, Boolean.TRUE);
+ mailHttpHelper.receiveMail(request,addRequest);
+ }
+ log.info("MailSyncTask end");
+ }
+
+ private Map getLarkMap(List mailInfos) {
+ List tableIds = mailInfos.stream()
+ .filter(r -> {
+ return r.getLarkTableId() != null;
+ })
+ .map(MailInfo::getLarkTableId)
+ .distinct()
+ .collect(Collectors.toList());
+ if (CollectionUtils.isEmpty(tableIds)) {
+ return new HashMap<>();
+ }
+ List larkCompanyTableInfos = larkTableRelationMapper.queryListByIdListJoinLarkCompany(tableIds, FlagStatus.OK.getCode(), TableRelationTypeEnum.SYNC_EMAIL.getCode());
+ return larkCompanyTableInfos.stream()
+ .filter(r -> {
+ return r.getId() != null
+ && StringUtils.isNotBlank(r.getAppId())
+ && StringUtils.isNotBlank(r.getAppSecret())
+ && StringUtils.isNotBlank(r.getToAppToken())
+ && StringUtils.isNotBlank(r.getToTableId());
+ })
+ .map(r -> {
+ LarkTableRequest request = new LarkTableRequest();
+ request.setId(r.getId());
+ request.setAppId(r.getAppId());
+ request.setAppSecret(r.getAppSecret());
+ request.setAppToken(r.getToAppToken());
+ request.setAppTable(r.getToTableId());
+ return request;
+ })
+ .collect(
+ Collectors.toMap(LarkTableRequest::getId, Function.identity(), (k1, k2) -> k1)
+ );
+ }
+}