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 - - - and lark_company_relation_id = #{larkCompanyRelationId} - and relation_type = #{relationType} - and from_app_token = #{fromAppToken} - and from_table_id = #{fromTableId} - and to_app_token = #{toAppToken} - and to_table_id = #{toTableId} - and flag = #{flag} + + and lark_company_relation_id = #{larkCompanyRelationId} + and relation_type = #{relationType} + and from_app_token = #{fromAppToken} + and from_table_id = #{fromTableId} + and to_app_token = #{toAppToken} + and to_table_id = #{toTableId} + and flag = #{flag} - + - - + + insert into lark_table_relation lark_company_relation_id, @@ -57,7 +82,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" flag, remark, relation_type, - + #{larkCompanyRelationId}, #{fromAppToken}, @@ -71,7 +96,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{flag}, #{remark}, #{relationType}, - + @@ -94,13 +119,35 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - delete from lark_table_relation where id = #{id} + delete + from lark_table_relation + where id = #{id} - delete from lark_table_relation where id in + delete from lark_table_relation where id in #{id} + \ 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) + ); + } +}