2 Коммиты 97b9f7f57d ... 1c74ec2f58

Автор SHA1 Сообщение Дата
  1811872455@163.com 1c74ec2f58 Merge remote-tracking branch 'origin/master' 2 дней назад
  1811872455@163.com c1352fd119 拆分邮件,多数据源 2 дней назад
44 измененных файлов с 291 добавлено и 253 удалено
  1. 5 0
      java/storlead-api/src/main/resources/application-dev.yml
  2. 5 0
      java/storlead-api/src/main/resources/application-test.yml
  3. 3 1
      java/storlead-api/src/main/resources/application.yml
  4. 5 0
      java/storlead-framework/storlead-common/src/main/java/com/storlead/framework/common/constant/DSConstants.java
  5. 1 1
      java/storlead-framework/storlead-common/src/main/java/com/storlead/framework/common/dto/query/QueryBaseDTO.java
  6. 113 113
      java/storlead-framework/storlead-mybatis/src/main/java/com/storlead/framework/mybatis/datasource/ModuleDefaultDataSourceAspect.java
  7. 1 1
      java/storlead-framework/storlead-mybatis/src/main/java/com/storlead/framework/mybatis/query/QueryBaseEntity.java
  8. 0 3
      java/storlead-framework/storlead-web/src/main/java/com/storlead/framework/web/filter/AuthRequestFilter.java
  9. 3 3
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/AttachmentMapper.java
  10. 3 3
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/ClientSentEmailsMapper.java
  11. 3 3
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/EmailBlacklistRecordMapper.java
  12. 3 3
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/EmailFileFolderMapper.java
  13. 3 3
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/EmailFolderRuleMapper.java
  14. 2 2
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/EmailFoldersMapper.java
  15. 2 2
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/EmailTemplatesMapper.java
  16. 5 5
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/EmailsMapper.java
  17. 3 3
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/FoldersMapper.java
  18. 3 3
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/MailAttachmentMapper.java
  19. 2 2
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/MailDelayPullRecordMapper.java
  20. 2 2
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/MailServerPortConfigMapper.java
  21. 3 3
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/MailTempAttachmentMapper.java
  22. 2 2
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/MailboxAutoReplySetMapper.java
  23. 2 2
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/SmtpPopSettingsMapper.java
  24. 3 3
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/UserEmailFolderMapper.java
  25. 3 3
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/UserMailTrackRecordMapper.java
  26. 12 0
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/support/MailBaseMapper.java
  27. 3 3
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/AttachmentServiceImpl.java
  28. 3 3
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/ClientSentEmailsServiceImpl.java
  29. 3 3
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/EmailBlacklistRecordServiceImpl.java
  30. 3 3
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/EmailFileFolderServiceImpl.java
  31. 6 6
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/EmailFolderRuleServiceImpl.java
  32. 3 3
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/EmailFoldersServiceImpl.java
  33. 3 3
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/EmailTemplatesServiceImpl.java
  34. 33 36
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/EmailsServiceImpl.java
  35. 3 3
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/FoldersServiceImpl.java
  36. 3 3
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/MailAttachmentServiceImpl.java
  37. 3 3
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/MailDelayPullRecordServiceImpl.java
  38. 3 3
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/MailServerPortConfigServiceImpl.java
  39. 3 3
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/MailTempAttachmentServiceImpl.java
  40. 3 3
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/MailboxAutoReplySetServiceImpl.java
  41. 3 3
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/SmtpPopSettingsServiceImpl.java
  42. 3 3
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/UserEmailFolderServiceImpl.java
  43. 3 3
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/UserMailTrackRecordServiceImpl.java
  44. 15 0
      java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/support/MailDataSourceServiceImpl.java

+ 5 - 0
java/storlead-api/src/main/resources/application-dev.yml

@@ -99,6 +99,11 @@ spring:
           url: jdbc:mysql://mysql.test.storlead.com:39091/sp_sales_test?useSSL=false&useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true
           username: root
           password: rCgRgLjH99Xvg5BN
+        mail:
+          driver-class-name: com.mysql.jdbc.Driver
+          url: jdbc:mysql://mysql.test.storlead.com:39091/sp_email_platform_test?useSSL=false&useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true
+          username: root
+          password: rCgRgLjH99Xvg5BN
         management:
           driver-class-name: com.mysql.jdbc.Driver
           url: jdbc:mysql://mysql.test.storlead.com:39091/storlead_test?useSSL=false&autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&noDatetimeStringSync=true&serverTimezone=Asia/Shanghai

+ 5 - 0
java/storlead-api/src/main/resources/application-test.yml

@@ -98,6 +98,11 @@ spring:
           url: jdbc:mysql://mysql.test.storlead.com:39091/sp_sales_test?useSSL=false&useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true
           username: root
           password: rCgRgLjH99Xvg5BN
+        mail:
+          driver-class-name: com.mysql.jdbc.Driver
+          url: jdbc:mysql://mysql.test.storlead.com:39091/sp_email_platform_test?useSSL=false&useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true
+          username: root
+          password: rCgRgLjH99Xvg5BN
         management:
           driver-class-name: com.mysql.jdbc.Driver
           url: jdbc:mysql://mysql.test.storlead.com:39091/storlead_test?useSSL=false&autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&noDatetimeStringSync=true&serverTimezone=Asia/Shanghai

+ 3 - 1
java/storlead-api/src/main/resources/application.yml

@@ -91,9 +91,11 @@ storlead:
       - packages:
           - com.storlead.sales.service
           - com.storlead.sales.mapper
+        datasource: sales
+      - packages:
           - com.storlead.mail.service
           - com.storlead.mail.mapper
-        datasource: sales
+        datasource: mail
 
 management:
   health:

+ 5 - 0
java/storlead-framework/storlead-common/src/main/java/com/storlead/framework/common/constant/DSConstants.java

@@ -21,6 +21,11 @@ public class DSConstants {
      */
     public static final String DATASOURCE_SALES = "sales";
 
+    /**
+     * 邮件库(与 spring.datasource.dynamic.datasource.mail 的 key 一致)
+     */
+    public static final String DATASOURCE_MAIL = "mail";
+
     /**
      * 数据源分组 oa库
      */

+ 1 - 1
java/storlead-framework/storlead-common/src/main/java/com/storlead/framework/common/dto/query/QueryBaseDTO.java

@@ -17,7 +17,7 @@ public class QueryBaseDTO extends PageDTO {
     private String blurry;
 
     @ApiModelProperty(value = "菜单Id")
-    private Long scopeMenuId;
+    private String scopeMenuId;
 
     @ApiModelProperty(value = "数据权限范围sql")
     private String dataScopeSql;

+ 113 - 113
java/storlead-framework/storlead-mybatis/src/main/java/com/storlead/framework/mybatis/datasource/ModuleDefaultDataSourceAspect.java

@@ -1,113 +1,113 @@
-//package com.storlead.framework.mybatis.datasource;
-//
-//import com.baomidou.dynamic.datasource.annotation.DS;
-//import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
-//import lombok.RequiredArgsConstructor;
-//import lombok.extern.slf4j.Slf4j;
-//import org.aspectj.lang.ProceedingJoinPoint;
-//import org.aspectj.lang.annotation.Around;
-//import org.aspectj.lang.annotation.Aspect;
-//import org.aspectj.lang.annotation.Pointcut;
-//import org.aspectj.lang.reflect.MethodSignature;
-//import org.springframework.core.annotation.AnnotatedElementUtils;
-//import org.springframework.core.annotation.Order;
-//import org.springframework.stereotype.Component;
-//import org.springframework.util.StringUtils;
-//
-//import java.lang.reflect.Method;
-//
-///**
-// * 子模块默认数据源:按配置包前缀 push 数据源;若目标已标注 {@link DS} 则跳过,由官方 {@code @DS} 切面处理。
-// */
-//@Slf4j
-//@Aspect
-//@Component
-//@Order(0)
-//@RequiredArgsConstructor
-//public class ModuleDefaultDataSourceAspect {
-//
-//    private final ModuleDefaultDataSourceProperties properties;
-//
-//    @Pointcut("execution(* *(..)) && (within(com.storlead..service..*) || within(com.storlead..mapper..*))")
-//    public void moduleServiceOrMapperLayer() {
-//    }
-//
-//    @Around("moduleServiceOrMapperLayer()")
-//    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
-//        if (!properties.isModuleDefaultEnabled()) {
-//            return joinPoint.proceed();
-//        }
-//        if (hasDsAnnotation(joinPoint)) {
-//            return joinPoint.proceed();
-//        }
-//        String datasource = resolveDatasource(joinPoint);
-//        if (!StringUtils.hasText(datasource)) {
-//            return joinPoint.proceed();
-//        }
-//        DynamicDataSourceContextHolder.push(datasource);
-//        try {
-//            if (log.isDebugEnabled()) {
-//                log.debug("module default datasource [{}] -> {}", datasource, joinPoint.getSignature().toShortString());
-//            }
-//            return joinPoint.proceed();
-//        } finally {
-//            DynamicDataSourceContextHolder.poll();
-//        }
-//    }
-//
-//    private boolean hasDsAnnotation(ProceedingJoinPoint joinPoint) {
-//        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
-//        Method method = signature.getMethod();
-//        Class<?> declaringType = signature.getDeclaringType();
-//        if (AnnotatedElementUtils.hasAnnotation(method, DS.class)) {
-//            return true;
-//        }
-//        if (declaringType != null && AnnotatedElementUtils.hasAnnotation(declaringType, DS.class)) {
-//            return true;
-//        }
-//        return AnnotatedElementUtils.hasAnnotation(joinPoint.getTarget().getClass(), DS.class);
-//    }
-//
-//    /**
-//     * 最长包前缀匹配
-//     */
-//    private String resolveDatasource(ProceedingJoinPoint joinPoint) {
-//        String className = resolveBusinessClassName(joinPoint);
-//        String matchedDs = null;
-//        int matchedLen = -1;
-//        for (ModuleDefaultDataSourceProperties.ModuleDefaultRule rule : properties.getModuleDefaults()) {
-//            if (rule.getPackages() == null || !StringUtils.hasText(rule.getDatasource())) {
-//                continue;
-//            }
-//            for (String pkg : rule.getPackages()) {
-//                if (!StringUtils.hasText(pkg)) {
-//                    continue;
-//                }
-//                if (matchesPackage(className, pkg.trim()) && pkg.length() > matchedLen) {
-//                    matchedLen = pkg.length();
-//                    matchedDs = rule.getDatasource();
-//                }
-//            }
-//        }
-//        return matchedDs;
-//    }
-//
-//    private boolean matchesPackage(String className, String packagePrefix) {
-//        return className.equals(packagePrefix)
-//                || className.startsWith(packagePrefix + ".");
-//    }
-//
-//    /**
-//     * Mapper 为 JDK 代理时,用接口全限定名匹配包前缀。
-//     */
-//    private String resolveBusinessClassName(ProceedingJoinPoint joinPoint) {
-//        if (joinPoint.getSignature() instanceof MethodSignature) {
-//            MethodSignature signature = (MethodSignature) joinPoint.getSignature();
-//            Class<?> declaringType = signature.getDeclaringType();
-//            if (declaringType != null && declaringType.getName().startsWith("com.storlead.")) {
-//                return declaringType.getName();
-//            }
-//        }
-//        return joinPoint.getTarget().getClass().getName();
-//    }
-//}
+package com.storlead.framework.mybatis.datasource;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.core.annotation.AnnotatedElementUtils;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+
+import java.lang.reflect.Method;
+
+/**
+ * 子模块默认数据源:按配置包前缀 push 数据源;若目标已标注 {@link DS} 则跳过,由官方 {@code @DS} 切面处理。
+ */
+@Slf4j
+@Aspect
+@Component
+@Order(0)
+@RequiredArgsConstructor
+public class ModuleDefaultDataSourceAspect {
+
+    private final ModuleDefaultDataSourceProperties properties;
+
+    @Pointcut("execution(* *(..)) && (within(com.storlead..service..*) || within(com.storlead..mapper..*))")
+    public void moduleServiceOrMapperLayer() {
+    }
+
+    @Around("moduleServiceOrMapperLayer()")
+    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
+        if (!properties.isModuleDefaultEnabled()) {
+            return joinPoint.proceed();
+        }
+        if (hasDsAnnotation(joinPoint)) {
+            return joinPoint.proceed();
+        }
+        String datasource = resolveDatasource(joinPoint);
+        if (!StringUtils.hasText(datasource)) {
+            return joinPoint.proceed();
+        }
+        DynamicDataSourceContextHolder.push(datasource);
+        try {
+            if (log.isDebugEnabled()) {
+                log.debug("module default datasource [{}] -> {}", datasource, joinPoint.getSignature().toShortString());
+            }
+            return joinPoint.proceed();
+        } finally {
+            DynamicDataSourceContextHolder.poll();
+        }
+    }
+
+    private boolean hasDsAnnotation(ProceedingJoinPoint joinPoint) {
+        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
+        Method method = signature.getMethod();
+        Class<?> declaringType = signature.getDeclaringType();
+        if (AnnotatedElementUtils.hasAnnotation(method, DS.class)) {
+            return true;
+        }
+        if (declaringType != null && AnnotatedElementUtils.hasAnnotation(declaringType, DS.class)) {
+            return true;
+        }
+        return AnnotatedElementUtils.hasAnnotation(joinPoint.getTarget().getClass(), DS.class);
+    }
+
+    /**
+     * 最长包前缀匹配
+     */
+    private String resolveDatasource(ProceedingJoinPoint joinPoint) {
+        String className = resolveBusinessClassName(joinPoint);
+        String matchedDs = null;
+        int matchedLen = -1;
+        for (ModuleDefaultDataSourceProperties.ModuleDefaultRule rule : properties.getModuleDefaults()) {
+            if (rule.getPackages() == null || !StringUtils.hasText(rule.getDatasource())) {
+                continue;
+            }
+            for (String pkg : rule.getPackages()) {
+                if (!StringUtils.hasText(pkg)) {
+                    continue;
+                }
+                if (matchesPackage(className, pkg.trim()) && pkg.length() > matchedLen) {
+                    matchedLen = pkg.length();
+                    matchedDs = rule.getDatasource();
+                }
+            }
+        }
+        return matchedDs;
+    }
+
+    private boolean matchesPackage(String className, String packagePrefix) {
+        return className.equals(packagePrefix)
+                || className.startsWith(packagePrefix + ".");
+    }
+
+    /**
+     * Mapper 为 JDK 代理时,用接口全限定名匹配包前缀。
+     */
+    private String resolveBusinessClassName(ProceedingJoinPoint joinPoint) {
+        if (joinPoint.getSignature() instanceof MethodSignature) {
+            MethodSignature signature = (MethodSignature) joinPoint.getSignature();
+            Class<?> declaringType = signature.getDeclaringType();
+            if (declaringType != null && declaringType.getName().startsWith("com.storlead.")) {
+                return declaringType.getName();
+            }
+        }
+        return joinPoint.getTarget().getClass().getName();
+    }
+}

+ 1 - 1
java/storlead-framework/storlead-mybatis/src/main/java/com/storlead/framework/mybatis/query/QueryBaseEntity.java

@@ -27,7 +27,7 @@ public class QueryBaseEntity extends Page {
 
     @TableField(exist = false)
     @ApiModelProperty(value = "菜单Id")
-    private Long scopeMenuId;
+    private String scopeMenuId;
 
     @TableField(exist = false)
     @ApiModelProperty(value = "是否需要走权限:默认需要:1: 不需要,默认: 0 ,需要: 0")

+ 0 - 3
java/storlead-framework/storlead-web/src/main/java/com/storlead/framework/web/filter/AuthRequestFilter.java

@@ -124,17 +124,14 @@ public class AuthRequestFilter implements Filter, Ordered {
     private Boolean loginHandle(HttpServletRequest req) {
         // 获取URL
         String url = req.getRequestURI();
-        log.error("login--WebSocket ---- url---"+url);
         Boolean isNeedLogin = chainBlackAndWhiteUtil.IsWhiteUri(url);
         if (isNeedLogin) {
             return isNeedLogin;
         }
-        log.error("login--WebSocket ---- isNeedLogin---"+url);
         String token = req.getHeader(DefContants.ACCESS_TOKEN);
         if (StrUtil.isBlank(token)) {
             token = req.getHeader("Sec-WebSocket-Protocol");
             if (StrUtil.isNotBlank(token)) {
-                log.error("login--WebSocket ---- token---"+token);
                 req.setAttribute("token",token);
             }
         }

+ 3 - 3
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/AttachmentMapper.java

@@ -1,16 +1,16 @@
 package com.storlead.mail.mapper;
 
 import com.storlead.mail.pojo.entity.AttachmentEntity;
-import com.storlead.framework.mybatis.mapper.MyBaseMapper;
+import com.storlead.mail.mapper.support.MailBaseMapper;
 
 /**
  * <p>
- * 附件表 Mapper 接�
+ * 附件�Mapper 接�
  * </p>
  *
  * @author chenkq
  * @since 2024-05-28
  */
-public interface AttachmentMapper extends MyBaseMapper<AttachmentEntity> {
+public interface AttachmentMapper extends MailBaseMapper<AttachmentEntity> {
 
 }

+ 3 - 3
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/ClientSentEmailsMapper.java

@@ -1,16 +1,16 @@
 package com.storlead.mail.mapper;
 
 import com.storlead.mail.pojo.entity.ClientSentEmailsEntity;
-import com.storlead.framework.mybatis.mapper.MyBaseMapper;
+import com.storlead.mail.mapper.support.MailBaseMapper;
 
 /**
  * <p>
- * 邮件表 Mapper 接�
+ * 邮件�Mapper 接�
  * </p>
  *
  * @author chenkq
  * @since 2024-12-04
  */
-public interface ClientSentEmailsMapper extends MyBaseMapper<ClientSentEmailsEntity> {
+public interface ClientSentEmailsMapper extends MailBaseMapper<ClientSentEmailsEntity> {
 
 }

+ 3 - 3
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/EmailBlacklistRecordMapper.java

@@ -1,16 +1,16 @@
 package com.storlead.mail.mapper;
 
 import com.storlead.mail.pojo.entity.EmailBlacklistRecordEntity;
-import com.storlead.framework.mybatis.mapper.MyBaseMapper;
+import com.storlead.mail.mapper.support.MailBaseMapper;
 
 /**
  * <p>
- * 邮箱黑å��å�Mapper 接å�£
+ * 邮箱黑��Mapper 接�
  * </p>
  *
  * @author chenkq
  * @since 2024-10-31
  */
-public interface EmailBlacklistRecordMapper extends MyBaseMapper<EmailBlacklistRecordEntity> {
+public interface EmailBlacklistRecordMapper extends MailBaseMapper<EmailBlacklistRecordEntity> {
 
 }

+ 3 - 3
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/EmailFileFolderMapper.java

@@ -1,16 +1,16 @@
 package com.storlead.mail.mapper;
 
 import com.storlead.mail.pojo.entity.EmailFileFolderEntity;
-import com.storlead.framework.mybatis.mapper.MyBaseMapper;
+import com.storlead.mail.mapper.support.MailBaseMapper;
 
 /**
  * <p>
- * 文件夹 Mapper 接�
+ * 文件�Mapper 接�
  * </p>
  *
  * @author chenkq
  * @since 2024-11-04
  */
-public interface EmailFileFolderMapper extends MyBaseMapper<EmailFileFolderEntity> {
+public interface EmailFileFolderMapper extends MailBaseMapper<EmailFileFolderEntity> {
 
 }

+ 3 - 3
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/EmailFolderRuleMapper.java

@@ -1,16 +1,16 @@
 package com.storlead.mail.mapper;
 
 import com.storlead.mail.pojo.entity.EmailFolderRuleEntity;
-import com.storlead.framework.mybatis.mapper.MyBaseMapper;
+import com.storlead.mail.mapper.support.MailBaseMapper;
 
 /**
  * <p>
- * 用户邮件文件夹出入规åˆMapper 接å�£
+ * 用户邮件文件夹出入规�Mapper 接�
  * </p>
  *
  * @author chenkq
  * @since 2024-11-12
  */
-public interface EmailFolderRuleMapper extends MyBaseMapper<EmailFolderRuleEntity> {
+public interface EmailFolderRuleMapper extends MailBaseMapper<EmailFolderRuleEntity> {
 
 }

+ 2 - 2
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/EmailFoldersMapper.java

@@ -1,7 +1,7 @@
 package com.storlead.mail.mapper;
 
 import com.storlead.mail.pojo.entity.EmailFoldersEntity;
-import com.storlead.framework.mybatis.mapper.MyBaseMapper;
+import com.storlead.mail.mapper.support.MailBaseMapper;
 
 /**
  * <p>
@@ -11,6 +11,6 @@ import com.storlead.framework.mybatis.mapper.MyBaseMapper;
  * @author chenkq
  * @since 2024-05-28
  */
-public interface EmailFoldersMapper extends MyBaseMapper<EmailFoldersEntity> {
+public interface EmailFoldersMapper extends MailBaseMapper<EmailFoldersEntity> {
 
 }

+ 2 - 2
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/EmailTemplatesMapper.java

@@ -1,7 +1,7 @@
 package com.storlead.mail.mapper;
 
 import com.storlead.mail.pojo.entity.EmailTemplatesEntity;
-import com.storlead.framework.mybatis.mapper.MyBaseMapper;
+import com.storlead.mail.mapper.support.MailBaseMapper;
 
 /**
  * <p>
@@ -11,6 +11,6 @@ import com.storlead.framework.mybatis.mapper.MyBaseMapper;
  * @author chenkq
  * @since 2024-10-28
  */
-public interface EmailTemplatesMapper extends MyBaseMapper<EmailTemplatesEntity> {
+public interface EmailTemplatesMapper extends MailBaseMapper<EmailTemplatesEntity> {
 
 }

+ 5 - 5
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/EmailsMapper.java

@@ -3,7 +3,7 @@ package com.storlead.mail.mapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.storlead.mail.pojo.entity.EmailsEntity;
-import com.storlead.framework.mybatis.mapper.MyBaseMapper;
+import com.storlead.mail.mapper.support.MailBaseMapper;
 import com.storlead.mail.pojo.MailDTO;
 import com.storlead.mail.pojo.MailListDTO;
 import com.storlead.mail.pojo.vo.*;
@@ -16,13 +16,13 @@ import java.util.Set;
 
 /**
  * <p>
- * 邮件Mapper 接口
+ * 邮件��?Mapper 接口
  * </p>
  *
  * @author chenkq
  * @since 2024-05-28
  */
-public interface EmailsMapper extends MyBaseMapper<EmailsEntity> {
+public interface EmailsMapper extends MailBaseMapper<EmailsEntity> {
 
     void updateCleanBindCustomerMail();
 
@@ -68,7 +68,7 @@ public interface EmailsMapper extends MyBaseMapper<EmailsEntity> {
     IPage<EmailsEntity> pageListNewAllCus(IPage<EmailsEntity> page, @Param("dto") MailDTO dto);
 
     /**
-     * 汇总邮件数
+     * 汇总邮件数��?
      * @param stmpPopIdk
      * @param ownerBy
      * @return
@@ -76,7 +76,7 @@ public interface EmailsMapper extends MyBaseMapper<EmailsEntity> {
     NewMailCountTipVO countMailSummaryNum(Long smtpPopId, Long ownerBy);
 
     /**
-     * 汇总未跟进
+     * 汇总未跟进��?
      * @param stmpPopId
      * @param ownerBy
      * @return

+ 3 - 3
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/FoldersMapper.java

@@ -1,16 +1,16 @@
 package com.storlead.mail.mapper;
 
 import com.storlead.mail.pojo.entity.FoldersEntity;
-import com.storlead.framework.mybatis.mapper.MyBaseMapper;
+import com.storlead.mail.mapper.support.MailBaseMapper;
 
 /**
  * <p>
- * 文件夹�称 Mapper 接�
+ * 文件夹��Mapper 接�
  * </p>
  *
  * @author chenkq
  * @since 2024-05-28
  */
-public interface FoldersMapper extends MyBaseMapper<FoldersEntity> {
+public interface FoldersMapper extends MailBaseMapper<FoldersEntity> {
 
 }

+ 3 - 3
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/MailAttachmentMapper.java

@@ -5,18 +5,18 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.storlead.mail.pojo.entity.MailAttachmentEntity;
-import com.storlead.framework.mybatis.mapper.MyBaseMapper;
+import com.storlead.mail.mapper.support.MailBaseMapper;
 import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
- * 邮件附件表 Mapper 接�
+ * 邮件附件�Mapper 接�
  * </p>
  *
  * @author chenkq
  * @since 2024-06-14
  */
-public interface MailAttachmentMapper extends MyBaseMapper<MailAttachmentEntity> {
+public interface MailAttachmentMapper extends MailBaseMapper<MailAttachmentEntity> {
 
     IPage<MailAttachmentEntity> pageList(Page<MailAttachmentEntity> page, @Param(Constants.WRAPPER) Wrapper<MailAttachmentEntity> wrapper);
 

+ 2 - 2
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/MailDelayPullRecordMapper.java

@@ -1,7 +1,7 @@
 package com.storlead.mail.mapper;
 
 import com.storlead.mail.pojo.entity.MailDelayPullRecordEntity;
-import com.storlead.framework.mybatis.mapper.MyBaseMapper;
+import com.storlead.mail.mapper.support.MailBaseMapper;
 
 /**
  * <p>
@@ -11,6 +11,6 @@ import com.storlead.framework.mybatis.mapper.MyBaseMapper;
  * @author chenkq
  * @since 2024-08-24
  */
-public interface MailDelayPullRecordMapper extends MyBaseMapper<MailDelayPullRecordEntity> {
+public interface MailDelayPullRecordMapper extends MailBaseMapper<MailDelayPullRecordEntity> {
 
 }

+ 2 - 2
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/MailServerPortConfigMapper.java

@@ -1,7 +1,7 @@
 package com.storlead.mail.mapper;
 
 import com.storlead.mail.pojo.entity.MailServerPortConfigEntity;
-import com.storlead.framework.mybatis.mapper.MyBaseMapper;
+import com.storlead.mail.mapper.support.MailBaseMapper;
 
 /**
  * <p>
@@ -11,6 +11,6 @@ import com.storlead.framework.mybatis.mapper.MyBaseMapper;
  * @author chenkq
  * @since 2024-08-08
  */
-public interface MailServerPortConfigMapper extends MyBaseMapper<MailServerPortConfigEntity> {
+public interface MailServerPortConfigMapper extends MailBaseMapper<MailServerPortConfigEntity> {
 
 }

+ 3 - 3
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/MailTempAttachmentMapper.java

@@ -1,16 +1,16 @@
 package com.storlead.mail.mapper;
 
 import com.storlead.mail.pojo.entity.MailTempAttachmentEntity;
-import com.storlead.framework.mybatis.mapper.MyBaseMapper;
+import com.storlead.mail.mapper.support.MailBaseMapper;
 
 /**
  * <p>
- * 临时邮件附件表 Mapper 接�
+ * 临时邮件附件�Mapper 接�
  * </p>
  *
  * @author chenkq
  * @since 2024-08-09
  */
-public interface MailTempAttachmentMapper extends MyBaseMapper<MailTempAttachmentEntity> {
+public interface MailTempAttachmentMapper extends MailBaseMapper<MailTempAttachmentEntity> {
 
 }

+ 2 - 2
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/MailboxAutoReplySetMapper.java

@@ -1,7 +1,7 @@
 package com.storlead.mail.mapper;
 
 import com.storlead.mail.pojo.entity.MailboxAutoReplySetEntity;
-import com.storlead.framework.mybatis.mapper.MyBaseMapper;
+import com.storlead.mail.mapper.support.MailBaseMapper;
 
 /**
  * <p>
@@ -11,6 +11,6 @@ import com.storlead.framework.mybatis.mapper.MyBaseMapper;
  * @author chenkq
  * @since 2025-02-24
  */
-public interface MailboxAutoReplySetMapper extends MyBaseMapper<MailboxAutoReplySetEntity> {
+public interface MailboxAutoReplySetMapper extends MailBaseMapper<MailboxAutoReplySetEntity> {
 
 }

+ 2 - 2
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/SmtpPopSettingsMapper.java

@@ -1,7 +1,7 @@
 package com.storlead.mail.mapper;
 
 import com.storlead.mail.pojo.entity.SmtpPopSettingsEntity;
-import com.storlead.framework.mybatis.mapper.MyBaseMapper;
+import com.storlead.mail.mapper.support.MailBaseMapper;
 
 /**
  * <p>
@@ -11,6 +11,6 @@ import com.storlead.framework.mybatis.mapper.MyBaseMapper;
  * @author chenkq
  * @since 2024-05-28
  */
-public interface SmtpPopSettingsMapper extends MyBaseMapper<SmtpPopSettingsEntity> {
+public interface SmtpPopSettingsMapper extends MailBaseMapper<SmtpPopSettingsEntity> {
 
 }

+ 3 - 3
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/UserEmailFolderMapper.java

@@ -1,16 +1,16 @@
 package com.storlead.mail.mapper;
 
 import com.storlead.mail.pojo.entity.UserEmailFolderEntity;
-import com.storlead.framework.mybatis.mapper.MyBaseMapper;
+import com.storlead.mail.mapper.support.MailBaseMapper;
 
 /**
  * <p>
- * 用户文件夹 Mapper 接�
+ * 用户文件�Mapper 接�
  * </p>
  *
  * @author chenkq
  * @since 2024-11-12
  */
-public interface UserEmailFolderMapper extends MyBaseMapper<UserEmailFolderEntity> {
+public interface UserEmailFolderMapper extends MailBaseMapper<UserEmailFolderEntity> {
 
 }

+ 3 - 3
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/UserMailTrackRecordMapper.java

@@ -1,16 +1,16 @@
 package com.storlead.mail.mapper;
 
 import com.storlead.mail.pojo.entity.UserMailTrackRecordEntity;
-import com.storlead.framework.mybatis.mapper.MyBaseMapper;
+import com.storlead.mail.mapper.support.MailBaseMapper;
 
 /**
  * <p>
- * 当å‰�æ”¶å�–邮件的最新邮件记å½Mapper 接å�£
+ * 当�收�邮件的最新邮件记�Mapper 接�
  * </p>
  *
  * @author chenkq
  * @since 2024-11-19
  */
-public interface UserMailTrackRecordMapper extends MyBaseMapper<UserMailTrackRecordEntity> {
+public interface UserMailTrackRecordMapper extends MailBaseMapper<UserMailTrackRecordEntity> {
 
 }

+ 12 - 0
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/mapper/support/MailBaseMapper.java

@@ -0,0 +1,12 @@
+package com.storlead.mail.mapper.support;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.storlead.framework.common.constant.DSConstants;
+import com.storlead.framework.mybatis.mapper.MyBaseMapper;
+
+/**
+ * 邮件库 Mapper 基类,统一路由到 spring.datasource.dynamic.datasource.mail。
+ */
+@DS(DSConstants.DATASOURCE_MAIL)
+public interface MailBaseMapper<T> extends MyBaseMapper<T> {
+}

+ 3 - 3
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/AttachmentServiceImpl.java

@@ -3,18 +3,18 @@ package com.storlead.mail.service.impl;
 import com.storlead.mail.service.AttachmentService;
 import com.storlead.mail.pojo.entity.AttachmentEntity;
 import com.storlead.mail.mapper.AttachmentMapper;
-import com.storlead.framework.mybatis.service.impl.MyBaseServiceImpl;
+import com.storlead.mail.service.impl.support.MailDataSourceServiceImpl;
 import org.springframework.stereotype.Service;
 
 /**
  * <p>
- * 附件表 �务实现类
+ * 附件��务实现�
  * </p>
  *
  * @author chenkq
  * @since 2024-05-28
  */
 @Service
-public class AttachmentServiceImpl extends MyBaseServiceImpl<AttachmentMapper, AttachmentEntity> implements AttachmentService {
+public class AttachmentServiceImpl extends MailDataSourceServiceImpl<AttachmentMapper, AttachmentEntity> implements AttachmentService {
 
 }

+ 3 - 3
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/ClientSentEmailsServiceImpl.java

@@ -3,18 +3,18 @@ package com.storlead.mail.service.impl;
 import com.storlead.mail.service.ClientSentEmailsService;
 import com.storlead.mail.pojo.entity.ClientSentEmailsEntity;
 import com.storlead.mail.mapper.ClientSentEmailsMapper;
-import com.storlead.framework.mybatis.service.impl.MyBaseServiceImpl;
+import com.storlead.mail.service.impl.support.MailDataSourceServiceImpl;
 import org.springframework.stereotype.Service;
 
 /**
  * <p>
- * 邮件表 �务实现类
+ * 邮件��务实现�
  * </p>
  *
  * @author chenkq
  * @since 2024-12-04
  */
 @Service
-public class ClientSentEmailsServiceImpl extends MyBaseServiceImpl<ClientSentEmailsMapper, ClientSentEmailsEntity> implements ClientSentEmailsService {
+public class ClientSentEmailsServiceImpl extends MailDataSourceServiceImpl<ClientSentEmailsMapper, ClientSentEmailsEntity> implements ClientSentEmailsService {
 
 }

+ 3 - 3
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/EmailBlacklistRecordServiceImpl.java

@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.storlead.mail.service.EmailBlacklistRecordService;
 import com.storlead.mail.pojo.entity.EmailBlacklistRecordEntity;
 import com.storlead.mail.mapper.EmailBlacklistRecordMapper;
-import com.storlead.framework.mybatis.service.impl.MyBaseServiceImpl;
+import com.storlead.mail.service.impl.support.MailDataSourceServiceImpl;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
@@ -15,14 +15,14 @@ import java.util.stream.Collectors;
 
 /**
  * <p>
- * 邮箱黑�� �务实现类
+ * 邮箱黑���务实现�
  * </p>
  *
  * @author chenkq
  * @since 2024-10-31
  */
 @Service
-public class EmailBlacklistRecordServiceImpl extends MyBaseServiceImpl<EmailBlacklistRecordMapper, EmailBlacklistRecordEntity> implements EmailBlacklistRecordService {
+public class EmailBlacklistRecordServiceImpl extends MailDataSourceServiceImpl<EmailBlacklistRecordMapper, EmailBlacklistRecordEntity> implements EmailBlacklistRecordService {
 
     @Override
     public Set<String> getBlackEmaillist(Long userId) {

+ 3 - 3
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/EmailFileFolderServiceImpl.java

@@ -3,18 +3,18 @@ package com.storlead.mail.service.impl;
 import com.storlead.mail.service.EmailFileFolderService;
 import com.storlead.mail.pojo.entity.EmailFileFolderEntity;
 import com.storlead.mail.mapper.EmailFileFolderMapper;
-import com.storlead.framework.mybatis.service.impl.MyBaseServiceImpl;
+import com.storlead.mail.service.impl.support.MailDataSourceServiceImpl;
 import org.springframework.stereotype.Service;
 
 /**
  * <p>
- * 文件夹 �务实现类
+ * 文件��务实现�
  * </p>
  *
  * @author chenkq
  * @since 2024-11-04
  */
 @Service
-public class EmailFileFolderServiceImpl extends MyBaseServiceImpl<EmailFileFolderMapper, EmailFileFolderEntity> implements EmailFileFolderService {
+public class EmailFileFolderServiceImpl extends MailDataSourceServiceImpl<EmailFileFolderMapper, EmailFileFolderEntity> implements EmailFileFolderService {
 
 }

+ 6 - 6
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/EmailFolderRuleServiceImpl.java

@@ -6,7 +6,7 @@ import com.storlead.mail.pojo.entity.EmailFolderRuleEntity;
 import com.storlead.mail.pojo.entity.EmailsEntity;
 import com.storlead.mail.enums.EmailFolderlRuleEnum;
 import com.storlead.mail.mapper.EmailFolderRuleMapper;
-import com.storlead.framework.mybatis.service.impl.MyBaseServiceImpl;
+import com.storlead.mail.service.impl.support.MailDataSourceServiceImpl;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
@@ -17,14 +17,14 @@ import java.util.regex.Pattern;
 
 /**
  * <p>
- * 用户邮件文件夹出入规则 服务实现类
+ * 用户邮件文件夹出入规��?服务实现��?
  * </p>
  *
  * @author chenkq
  * @since 2024-11-12
  */
 @Service
-public class EmailFolderRuleServiceImpl extends MyBaseServiceImpl<EmailFolderRuleMapper, EmailFolderRuleEntity> implements EmailFolderRuleService {
+public class EmailFolderRuleServiceImpl extends MailDataSourceServiceImpl<EmailFolderRuleMapper, EmailFolderRuleEntity> implements EmailFolderRuleService {
 
     @Override
     public List<EmailFolderRuleEntity> getUserFolderRules(Long userId) {
@@ -45,7 +45,7 @@ public class EmailFolderRuleServiceImpl extends MyBaseServiceImpl<EmailFolderRul
         }
         for (EmailFolderRuleEntity rule : rolderRules) {
             if (EmailFolderlRuleEnum.EMAIL_FROM_EQ.code.equals(rule.getFolderRuleCode())) {
-                // 发件箱等
+                // 发件箱等��?
                 if (emails.getFrom().equals(rule.getCompareContent())) {
                     emails.setCustomFolderId(rule.getFolderId());
                     break;
@@ -63,9 +63,9 @@ public class EmailFolderRuleServiceImpl extends MyBaseServiceImpl<EmailFolderRul
                 Pattern pattern = Pattern.compile(domainRegex);
                 // 创建 Matcher 对象
                 Matcher matcher = pattern.matcher(emails.getFrom());
-                // 查找并提取 @ 后面的部分
+                // 查找并提��?@ 后面的部��?
                 if (matcher.find()) {
-                    String domain = matcher.group(1);  // 获取 @ 后面的部
+                    String domain = matcher.group(1);  // 获取 @ 后面的部��?
                     if (rule.getCompareContent().equals(domain)) {
                         emails.setCustomFolderId(rule.getFolderId());
                         break;

+ 3 - 3
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/EmailFoldersServiceImpl.java

@@ -3,18 +3,18 @@ package com.storlead.mail.service.impl;
 import com.storlead.mail.service.EmailFoldersService;
 import com.storlead.mail.pojo.entity.EmailFoldersEntity;
 import com.storlead.mail.mapper.EmailFoldersMapper;
-import com.storlead.framework.mybatis.service.impl.MyBaseServiceImpl;
+import com.storlead.mail.service.impl.support.MailDataSourceServiceImpl;
 import org.springframework.stereotype.Service;
 
 /**
  * <p>
- * 邮件文件夹关系表 服务实现
+ * 邮件文件夹关系表 服务实现��?
  * </p>
  *
  * @author chenkq
  * @since 2024-05-28
  */
 @Service
-public class EmailFoldersServiceImpl extends MyBaseServiceImpl<EmailFoldersMapper, EmailFoldersEntity> implements EmailFoldersService {
+public class EmailFoldersServiceImpl extends MailDataSourceServiceImpl<EmailFoldersMapper, EmailFoldersEntity> implements EmailFoldersService {
 
 }

+ 3 - 3
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/EmailTemplatesServiceImpl.java

@@ -3,18 +3,18 @@ package com.storlead.mail.service.impl;
 import com.storlead.mail.service.EmailTemplatesService;
 import com.storlead.mail.pojo.entity.EmailTemplatesEntity;
 import com.storlead.mail.mapper.EmailTemplatesMapper;
-import com.storlead.framework.mybatis.service.impl.MyBaseServiceImpl;
+import com.storlead.mail.service.impl.support.MailDataSourceServiceImpl;
 import org.springframework.stereotype.Service;
 
 /**
  * <p>
- * 邮件模板 服务实现
+ * 邮件模板 服务实现��?
  * </p>
  *
  * @author chenkq
  * @since 2024-10-28
  */
 @Service
-public class EmailTemplatesServiceImpl extends MyBaseServiceImpl<EmailTemplatesMapper, EmailTemplatesEntity> implements EmailTemplatesService {
+public class EmailTemplatesServiceImpl extends MailDataSourceServiceImpl<EmailTemplatesMapper, EmailTemplatesEntity> implements EmailTemplatesService {
 
 }

+ 33 - 36
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/EmailsServiceImpl.java

@@ -27,7 +27,7 @@ import com.storlead.mail.pojo.MailDTO;
 import com.storlead.mail.pojo.MailListDTO;
 import com.storlead.mail.pojo.SendMailDTO;
 import com.storlead.mail.service.*;
-import com.storlead.framework.mybatis.service.impl.MyBaseServiceImpl;
+import com.storlead.mail.service.impl.support.MailDataSourceServiceImpl;
 import com.storlead.mail.util.EmailHelper;
 import com.storlead.mail.util.EmailSenderWithThreadLocal;
 import com.storlead.mail.util.ReceiveMailQueueThreadPool;
@@ -64,7 +64,7 @@ import java.util.stream.Collectors;
 
 /**
  * <p>
- * 邮件表 服务实现类
+ * 邮件�?服务实现�?
  * </p>
  *
  * @author chenkq
@@ -72,7 +72,7 @@ import java.util.stream.Collectors;
  */
 @Log4j2
 @Service
-public class EmailsServiceImpl extends MyBaseServiceImpl<EmailsMapper, EmailsEntity> implements EmailsService {
+public class EmailsServiceImpl extends MailDataSourceServiceImpl<EmailsMapper, EmailsEntity> implements EmailsService {
 
 
     private final ConcurrentMap<String, Boolean> processedMessages = new ConcurrentHashMap<>();
@@ -231,10 +231,10 @@ public class EmailsServiceImpl extends MyBaseServiceImpl<EmailsMapper, EmailsEnt
                     message.setContent(multipart);
                     // 获取邮件大小
                     sizeInBytes = dto.getContent().length();
-                    // 发送消
+                    // 发送消�?
                 }
                 /**
-                 * 发送成功,存储邮箱 replyEmailId null
+                 * 发送成�?存储邮箱 replyEmailId null
                  */
                 if (Integer.valueOf(1).equals(dto.getIsReceipt())) {
                     message.addHeader("Disposition-Notification-To", smtpPop.getEmailAddress());
@@ -371,7 +371,7 @@ public class EmailsServiceImpl extends MyBaseServiceImpl<EmailsMapper, EmailsEnt
                     message.setContent(multipart);
                 }
                 /**
-                 * 发送成功,存储邮箱 replyEmailId null
+                 * 发送成�?存储邮箱 replyEmailId null
                  */
                 if (Integer.valueOf(1).equals(emails .getIsReceipt())) {
                     message.addHeader("Disposition-Notification-To", smtpPop.getEmailAddress());
@@ -399,7 +399,7 @@ public class EmailsServiceImpl extends MyBaseServiceImpl<EmailsMapper, EmailsEnt
         String taskId = smtpPop.getEmailAddress()+"_"+smtpPop.getOwnerBy().toString();
         ReceiveMailQueueThreadPool instance = ReceiveMailQueueThreadPool.getInstance();
         if (instance.getTaskInProgressByMail(taskId)) {
-            log.error("有任务正在进行--:>>>>>>>>>>>>>"+smtpPop.getEmailAddress());
+            log.error("有任务正在进�?-:>>>>>>>>>>>>>"+smtpPop.getEmailAddress());
             return;
         }
         instance.addTask(taskId,new Runnable() {
@@ -469,7 +469,7 @@ public class EmailsServiceImpl extends MyBaseServiceImpl<EmailsMapper, EmailsEnt
 //                        LambdaUpdateWrapper<SmtpPopSettingsEntity> updateWrapper = new LambdaUpdateWrapper<>();
 //                        updateWrapper.set(SmtpPopSettingsEntity::getEnabled,0);
 //                        updateWrapper.eq(SmtpPopSettingsEntity::getId, smtpPop.getId())
-//                                .setSql("connect_error_count = connect_error_count + 1"); // 原+ 1
+//                                .setSql("connect_error_count = connect_error_count + 1"); // 原�?+ 1
 //                        popSettingsService.update(updateWrapper);
 //                        // 禁止后续流程
 ////                        smtpPop.setEnabled(false);
@@ -555,7 +555,7 @@ public class EmailsServiceImpl extends MyBaseServiceImpl<EmailsMapper, EmailsEnt
     @Override
     public void pullHeadMail(List<Message> messages,SmtpPopSettingsEntity smtpPop, EmailBoxEnum boxEnum,Set<String> blackls,List<EmailFolderRuleEntity> folderRules,Boolean isBackTask) {
 //        Lock lock = userLockMap.computeIfAbsent(smtpPop.getOwnerBy(), id -> new ReentrantLock());
-        log.info("==========邮件入库开始=========="+boxEnum.code);
+        log.info("==========邮件入库开�?========="+boxEnum.code);
 
 //        if (lock.tryLock()) {
             try {
@@ -624,7 +624,7 @@ public class EmailsServiceImpl extends MyBaseServiceImpl<EmailsMapper, EmailsEnt
                         continue;
                     }
                     if (!CollectionUtils.isEmpty(folderRules)) {
-                        /** 处理文件夹入栈规**/
+                        /** 处理文件夹入栈规�?**/
                         folderRuleService.carveUpMailCustomFolder(entity, folderRules);
                     }
                     mesageIds.add(messageId);
@@ -649,7 +649,7 @@ public class EmailsServiceImpl extends MyBaseServiceImpl<EmailsMapper, EmailsEnt
                     }
                 }
                 log.info("==========邮件入库结束=========="+boxEnum.code);
-                String finalboxCode = boxEnum.code;  // 提前取
+                String finalboxCode = boxEnum.code;  // 提前取�?
                 Boolean finalIsBackTask = isBackTask;
                 List<Long> finalIsMailIds = entities.stream().map(EmailsEntity::getId).collect(Collectors.toList());
                 log.error("finalIsMailIds = "+finalIsMailIds);
@@ -657,9 +657,7 @@ public class EmailsServiceImpl extends MyBaseServiceImpl<EmailsMapper, EmailsEnt
                     CompletableFuture.runAsync(() -> {
                         updateFollowUpTime(entities, smtpPop.getOwnerBy());
                         // 发送新邮件提醒,绑定客户后,直接查询性能会好
-                        log.error("操作完绑定客户"+ JSON.toJSON(finalIsMailIds)+"__"+isBackTask+"___EmailBoxEnum.code___"+finalboxCode+"____="+EmailBoxEnum.INBOX.code.equals(finalboxCode));
                         if (!CollectionUtils.isEmpty(finalIsMailIds) && finalIsBackTask && EmailBoxEnum.INBOX.code.equals(finalboxCode)) {
-                            log.error("进入发送提醒");
                             sendNewMailRemind(finalIsMailIds,smtpPop.getOwnerBy(),smtpPop.getEmailAddress());
                         }
                     });
@@ -713,7 +711,7 @@ public class EmailsServiceImpl extends MyBaseServiceImpl<EmailsMapper, EmailsEnt
             Set<Long> toUserIds = new HashSet<>();
             toUserIds.add(userId);
 
-           Object myClassInstance = SpringContextUtils.getBean("messageService");
+            Object myClassInstance = SpringContextUtils.getBean("messageService");
             Class<?> clazz = myClassInstance.getClass();
 
 //            Class<?> clazz = Class.forName("com.storlead.message.service.impl.MessageService");
@@ -725,7 +723,6 @@ public class EmailsServiceImpl extends MyBaseServiceImpl<EmailsMapper, EmailsEnt
             log.error("autoMatchEventSendMessage error",e);
         }
     }
-
     public void autoReplyMails(List<EmailsEntity> entities){
         for (EmailsEntity entity : entities) {
             try {
@@ -800,7 +797,7 @@ public class EmailsServiceImpl extends MyBaseServiceImpl<EmailsMapper, EmailsEnt
                     LocalDateTime now = LocalDateTime.now();
                     // 今天23:59:59
                     LocalDateTime endOfDay = now.toLocalDate().atTime(23, 59, 59);
-                    // 计算剩余时间(秒
+                    // 计算剩余时间(秒�?
                     long timeout = ChronoUnit.SECONDS.between(now, endOfDay);
                     redisService.setCacheObject(key,"reply",timeout, TimeUnit.SECONDS);
 
@@ -913,7 +910,7 @@ public class EmailsServiceImpl extends MyBaseServiceImpl<EmailsMapper, EmailsEnt
                 mailConnection.getFolder(folder);
                 Map<String, MailAttachmentEntity> attachmentMapName = mAttachments.stream()
                         .collect(Collectors.toMap(
-                                attachment -> attachment.getFileName() + "." + attachment.getFileExt(), // 键:拼接 fileName fileExt
+                                attachment -> attachment.getFileName() + "." + attachment.getFileExt(), // 键:拼接 fileName �?fileExt
                                 attachment -> attachment,
                                 (existing, replacement) -> existing
                         ));
@@ -946,7 +943,7 @@ public class EmailsServiceImpl extends MyBaseServiceImpl<EmailsMapper, EmailsEnt
                                 File parentDir = file.getParentFile();
                                 // 如果父目录不存在,则递归创建
                                 if (parentDir != null && !parentDir.exists()) {
-                                    parentDir.mkdirs();  // mkdirs() 会创建所有必要的父目
+                                    parentDir.mkdirs();  // mkdirs() 会创建所有必要的父目�?
                                 }
                                 try (FileOutputStream output = new FileOutputStream(file)) {
                                     bodyPart.getInputStream().transferTo(output);
@@ -974,17 +971,17 @@ public class EmailsServiceImpl extends MyBaseServiceImpl<EmailsMapper, EmailsEnt
     public static Message[] mergeMessageArrays(Message[] array1, Message[] array2) {
         // 处理空数组的情况
         if (array1 == null && array2 == null) {
-            return new Message[0]; // 两个数组都为空,返回空数
+            return new Message[0]; // 两个数组都为空,返回空数�?
         } else if (array1 == null) {
-            return array2; // 如果第一个数组为空,返回第二个数
+            return array2; // 如果第一个数组为空,返回第二个数�?
         } else if (array2 == null) {
-            return array1; // 如果第二个数组为空,返回第一个数
+            return array1; // 如果第二个数组为空,返回第一个数�?
         }
-        // 如果两个数组都不为空,创建一个新Message[] 数组,大小为两个数组长度之和
+        // 如果两个数组都不为空,创建一个新�?Message[] 数组,大小为两个数组长度之和
         Message[] mergedArray = new Message[array1.length + array2.length];
         // 将第一个数组复制到新数组中
         System.arraycopy(array1, 0, mergedArray, 0, array1.length);
-        // 将第二个数组复制到新数组的后半部
+        // 将第二个数组复制到新数组的后半部�?
         System.arraycopy(array2, 0, mergedArray, array1.length, array2.length);
         return mergedArray;
     }
@@ -1034,7 +1031,7 @@ public class EmailsServiceImpl extends MyBaseServiceImpl<EmailsMapper, EmailsEnt
         ReceiveMailQueueThreadPool instance = ReceiveMailQueueThreadPool.getInstance();
         String taskName = smtpPop.getEmailAddress()+"_"+smtpPop.getOwnerBy().toString()+"_load_content";
         if (instance.getTaskInProgressByMail(taskName)) {
-            log.error("有任务正在进行--:>>>>>>>>>>>>>"+taskName);
+            log.error("有任务正在进�?-:>>>>>>>>>>>>>"+taskName);
         } else {
             instance.addTask(taskName,new Runnable() {
                 @Override
@@ -1082,7 +1079,7 @@ public class EmailsServiceImpl extends MyBaseServiceImpl<EmailsMapper, EmailsEnt
         ReceiveMailQueueThreadPool instance = ReceiveMailQueueThreadPool.getInstance();
         String taskName = smtpPop.getEmailAddress()+"_"+smtpPop.getOwnerBy()+"_load";
         if (instance.getTaskInProgressByMail(taskName)) {
-            log.error("有任务正在进行--:>>>>>>>>>>>>>"+taskName);
+            log.error("有任务正在进�?-:>>>>>>>>>>>>>"+taskName);
         } else {
             instance.addTask(taskName,new Runnable() {
                 @Override
@@ -1526,7 +1523,7 @@ public class EmailsServiceImpl extends MyBaseServiceImpl<EmailsMapper, EmailsEnt
 
     // 处理 HTML 内容中的图片引用,替换为 base64
 //    private String processHtmlWithBase64Images(String htmlContent, Multipart multipart) throws MessagingException, IOException {
-//        // 找到所有 <img> 标签并处理 src="cid:"
+//        // 找到所�?<img> 标签并处�?src="cid:"
 //        String regex = "src=\"cid:(.*?)\"";
 //        java.util.regex.Pattern pattern = java.util.regex.Pattern.compile(regex);
 //        java.util.regex.Matcher matcher = pattern.matcher(htmlContent);
@@ -1536,7 +1533,7 @@ public class EmailsServiceImpl extends MyBaseServiceImpl<EmailsMapper, EmailsEnt
 //            BodyPart imagePart = findImagePartByContentId(multipart, contentId);
 //
 //            if (imagePart != null) {
-//                // 转换图片为 Base64 并替换 HTML 中的 src="cid:..."
+//                // 转换图片�?Base64 并替�?HTML 中的 src="cid:..."
 //                String base64Image = convertImageToBase64(imagePart);
 //                htmlContent = htmlContent.replace("cid:" + contentId, "data:image/png;base64," + base64Image);
 //            }
@@ -1546,7 +1543,7 @@ public class EmailsServiceImpl extends MyBaseServiceImpl<EmailsMapper, EmailsEnt
 //    }
 
     private String processHtmlWithBase64Images(String htmlContent, BodyPart bodyPart) throws MessagingException, IOException {
-        // 找到所有 <img> 标签并处理 src="cid:"
+        // 找到所�?<img> 标签并处�?src="cid:"
         String contentId = ((MimeBodyPart) bodyPart).getContentID();
 //        String contentId = ((IMAPBodyPart) bodyPart).getContentID();
         if (StrUtil.isBlank(contentId)) {
@@ -1557,7 +1554,7 @@ public class EmailsServiceImpl extends MyBaseServiceImpl<EmailsMapper, EmailsEnt
         if (StrUtil.isNotBlank(contentId)) {
             BodyPart imagePart = bodyPart;
             if (imagePart != null) {
-                // 转换图片为 Base64 并替换 HTML 中的 src="cid:..."
+                // 转换图片�?Base64 并替�?HTML 中的 src="cid:..."
                 contentId = contentId.replaceAll("^<(.+)>$", "$1");
                 String base64Image = convertImageToBase64(imagePart);
                 htmlContent = htmlContent.replace("cid:" + contentId, "data:image/png;base64," + base64Image);
@@ -1566,21 +1563,21 @@ public class EmailsServiceImpl extends MyBaseServiceImpl<EmailsMapper, EmailsEnt
         return htmlContent;
     }
 
-    // 根据 Content-ID 查找对应的图片部
+    // 根据 Content-ID 查找对应的图片部�?
     private BodyPart findImagePartByContentId(Multipart multipart, String contentId) throws MessagingException {
         for (int i = 0; i < multipart.getCount(); i++) {
             BodyPart bodyPart = multipart.getBodyPart(i);
             if (bodyPart.getHeader("Content-ID") != null) {
                 String[] contentIdHeader = bodyPart.getHeader("Content-ID");
                 if (contentIdHeader[0].contains(contentId)) {
-                    return bodyPart; // 找到匹配的图
+                    return bodyPart; // 找到匹配的图�?
                 }
             }
         }
         return null; // 未找到匹配的图片
     }
 
-    // 将图片转换为 Base64 字符
+    // 将图片转换为 Base64 字符�?
     private String convertImageToBase64(BodyPart bodyPart) throws IOException, MessagingException {
         InputStream inputStream = bodyPart.getInputStream();
         ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
@@ -1870,7 +1867,7 @@ public class EmailsServiceImpl extends MyBaseServiceImpl<EmailsMapper, EmailsEnt
                     entity.setRecipientCcName(StringUtil.extractUsernames(entity.getRecipientCc()));
                 }
                 /**
-                 * 如果发件箱是内部邮箱,则代表是发出去的邮
+                 * 如果发件箱是内部邮箱,则代表是发出去的邮�?
                  */
                 if (internalMails.contains(entity.getFrom())) {
                     entity.setInOutMark(2);
@@ -1942,13 +1939,13 @@ public class EmailsServiceImpl extends MyBaseServiceImpl<EmailsMapper, EmailsEnt
             File parentDir = file.getParentFile();
             // 如果父目录不存在,则递归创建
             if (parentDir != null && !parentDir.exists()) {
-                parentDir.mkdirs();  // mkdirs() 会创建所有必要的父目
+                parentDir.mkdirs();  // mkdirs() 会创建所有必要的父目�?
             }
-            String content = "这是要写入文件的字符串内";
+            String content = "这是要写入文件的字符串内?";
 
             try (InputStream inputStream = new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8));
                  FileOutputStream output = new FileOutputStream(file)) {
-                inputStream.transferTo(output); // 将字符串流写入文
+                inputStream.transferTo(output); // 将字符串流写入文�?
             }
             System.out.println("-----------------------"+filePath);
         }catch (Exception e) {

+ 3 - 3
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/FoldersServiceImpl.java

@@ -3,18 +3,18 @@ package com.storlead.mail.service.impl;
 import com.storlead.mail.service.FoldersService;
 import com.storlead.mail.pojo.entity.FoldersEntity;
 import com.storlead.mail.mapper.FoldersMapper;
-import com.storlead.framework.mybatis.service.impl.MyBaseServiceImpl;
+import com.storlead.mail.service.impl.support.MailDataSourceServiceImpl;
 import org.springframework.stereotype.Service;
 
 /**
  * <p>
- * 文件夹�称 �务实现类
+ * 文件夹���务实现�
  * </p>
  *
  * @author chenkq
  * @since 2024-05-28
  */
 @Service
-public class FoldersServiceImpl extends MyBaseServiceImpl<FoldersMapper, FoldersEntity> implements FoldersService {
+public class FoldersServiceImpl extends MailDataSourceServiceImpl<FoldersMapper, FoldersEntity> implements FoldersService {
 
 }

+ 3 - 3
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/MailAttachmentServiceImpl.java

@@ -6,13 +6,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.storlead.mail.service.MailAttachmentService;
 import com.storlead.mail.pojo.entity.MailAttachmentEntity;
 import com.storlead.mail.mapper.MailAttachmentMapper;
-import com.storlead.framework.mybatis.service.impl.MyBaseServiceImpl;
+import com.storlead.mail.service.impl.support.MailDataSourceServiceImpl;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.stereotype.Service;
 
 /**
  * <p>
- * 邮件附件表 �务实现类
+ * 邮件附件��务实现�
  * </p>
  *
  * @author chenkq
@@ -20,7 +20,7 @@ import org.springframework.stereotype.Service;
  */
 @Service
 @Log4j2
-public class MailAttachmentServiceImpl extends MyBaseServiceImpl<MailAttachmentMapper, MailAttachmentEntity> implements MailAttachmentService {
+public class MailAttachmentServiceImpl extends MailDataSourceServiceImpl<MailAttachmentMapper, MailAttachmentEntity> implements MailAttachmentService {
 
     @Override
     public IPage<MailAttachmentEntity> pateList(Page<MailAttachmentEntity> page, Wrapper<MailAttachmentEntity> wrapper) {

+ 3 - 3
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/MailDelayPullRecordServiceImpl.java

@@ -3,18 +3,18 @@ package com.storlead.mail.service.impl;
 import com.storlead.mail.service.MailDelayPullRecordService;
 import com.storlead.mail.pojo.entity.MailDelayPullRecordEntity;
 import com.storlead.mail.mapper.MailDelayPullRecordMapper;
-import com.storlead.framework.mybatis.service.impl.MyBaseServiceImpl;
+import com.storlead.mail.service.impl.support.MailDataSourceServiceImpl;
 import org.springframework.stereotype.Service;
 
 /**
  * <p>
- * 邮件等待处理记录 服务实现
+ * 邮件等待处理记录 服务实现��?
  * </p>
  *
  * @author chenkq
  * @since 2024-08-24
  */
 @Service
-public class MailDelayPullRecordServiceImpl extends MyBaseServiceImpl<MailDelayPullRecordMapper, MailDelayPullRecordEntity> implements MailDelayPullRecordService {
+public class MailDelayPullRecordServiceImpl extends MailDataSourceServiceImpl<MailDelayPullRecordMapper, MailDelayPullRecordEntity> implements MailDelayPullRecordService {
 
 }

+ 3 - 3
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/MailServerPortConfigServiceImpl.java

@@ -3,18 +3,18 @@ package com.storlead.mail.service.impl;
 import com.storlead.mail.service.MailServerPortConfigService;
 import com.storlead.mail.pojo.entity.MailServerPortConfigEntity;
 import com.storlead.mail.mapper.MailServerPortConfigMapper;
-import com.storlead.framework.mybatis.service.impl.MyBaseServiceImpl;
+import com.storlead.mail.service.impl.support.MailDataSourceServiceImpl;
 import org.springframework.stereotype.Service;
 
 /**
  * <p>
- * 邮箱端口配置 服务实现
+ * 邮箱端口配置 服务实现��?
  * </p>
  *
  * @author chenkq
  * @since 2024-08-08
  */
 @Service
-public class MailServerPortConfigServiceImpl extends MyBaseServiceImpl<MailServerPortConfigMapper, MailServerPortConfigEntity> implements MailServerPortConfigService {
+public class MailServerPortConfigServiceImpl extends MailDataSourceServiceImpl<MailServerPortConfigMapper, MailServerPortConfigEntity> implements MailServerPortConfigService {
 
 }

+ 3 - 3
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/MailTempAttachmentServiceImpl.java

@@ -6,7 +6,7 @@ import com.storlead.mail.properties.MailFileProperties;
 import com.storlead.mail.service.MailTempAttachmentService;
 import com.storlead.mail.pojo.entity.MailTempAttachmentEntity;
 import com.storlead.mail.mapper.MailTempAttachmentMapper;
-import com.storlead.framework.mybatis.service.impl.MyBaseServiceImpl;
+import com.storlead.mail.service.impl.support.MailDataSourceServiceImpl;
 import org.apache.commons.io.FilenameUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
@@ -21,14 +21,14 @@ import java.util.UUID;
 
 /**
  * <p>
- * 临时邮件附件表 �务实现类
+ * 临时邮件附件��务实现�
  * </p>
  *
  * @author chenkq
  * @since 2024-08-09
  */
 @Service
-public class MailTempAttachmentServiceImpl extends MyBaseServiceImpl<MailTempAttachmentMapper, MailTempAttachmentEntity> implements MailTempAttachmentService {
+public class MailTempAttachmentServiceImpl extends MailDataSourceServiceImpl<MailTempAttachmentMapper, MailTempAttachmentEntity> implements MailTempAttachmentService {
 
     @Resource
     private MailFileProperties mailFileProperties;

+ 3 - 3
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/MailboxAutoReplySetServiceImpl.java

@@ -3,18 +3,18 @@ package com.storlead.mail.service.impl;
 import com.storlead.mail.service.MailboxAutoReplySetService;
 import com.storlead.mail.pojo.entity.MailboxAutoReplySetEntity;
 import com.storlead.mail.mapper.MailboxAutoReplySetMapper;
-import com.storlead.framework.mybatis.service.impl.MyBaseServiceImpl;
+import com.storlead.mail.service.impl.support.MailDataSourceServiceImpl;
 import org.springframework.stereotype.Service;
 
 /**
  * <p>
- * 邮箱自动回复内容 服务实现
+ * 邮箱自动回复内容 服务实现��?
  * </p>
  *
  * @author chenkq
  * @since 2025-02-24
  */
 @Service
-public class MailboxAutoReplySetServiceImpl extends MyBaseServiceImpl<MailboxAutoReplySetMapper, MailboxAutoReplySetEntity> implements MailboxAutoReplySetService {
+public class MailboxAutoReplySetServiceImpl extends MailDataSourceServiceImpl<MailboxAutoReplySetMapper, MailboxAutoReplySetEntity> implements MailboxAutoReplySetService {
 
 }

+ 3 - 3
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/SmtpPopSettingsServiceImpl.java

@@ -5,7 +5,7 @@ import com.storlead.framework.common.constant.CommonConstant;
 import com.storlead.mail.service.SmtpPopSettingsService;
 import com.storlead.mail.pojo.entity.SmtpPopSettingsEntity;
 import com.storlead.mail.mapper.SmtpPopSettingsMapper;
-import com.storlead.framework.mybatis.service.impl.MyBaseServiceImpl;
+import com.storlead.mail.service.impl.support.MailDataSourceServiceImpl;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -13,14 +13,14 @@ import java.util.Set;
 
 /**
  * <p>
- * 邮箱smtp_setting �务实现类
+ * 邮箱smtp_setting �务实现�
  * </p>
  *
  * @author chenkq
  * @since 2024-05-28
  */
 @Service
-public class SmtpPopSettingsServiceImpl extends MyBaseServiceImpl<SmtpPopSettingsMapper, SmtpPopSettingsEntity> implements SmtpPopSettingsService {
+public class SmtpPopSettingsServiceImpl extends MailDataSourceServiceImpl<SmtpPopSettingsMapper, SmtpPopSettingsEntity> implements SmtpPopSettingsService {
 
     @Override
     public SmtpPopSettingsEntity getDefaultSmtpPop(Long userId) {

+ 3 - 3
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/UserEmailFolderServiceImpl.java

@@ -3,18 +3,18 @@ package com.storlead.mail.service.impl;
 import com.storlead.mail.service.UserEmailFolderService;
 import com.storlead.mail.pojo.entity.UserEmailFolderEntity;
 import com.storlead.mail.mapper.UserEmailFolderMapper;
-import com.storlead.framework.mybatis.service.impl.MyBaseServiceImpl;
+import com.storlead.mail.service.impl.support.MailDataSourceServiceImpl;
 import org.springframework.stereotype.Service;
 
 /**
  * <p>
- * 用户文件夹 �务实现类
+ * 用户文件��务实现�
  * </p>
  *
  * @author chenkq
  * @since 2024-11-12
  */
 @Service
-public class UserEmailFolderServiceImpl extends MyBaseServiceImpl<UserEmailFolderMapper, UserEmailFolderEntity> implements UserEmailFolderService {
+public class UserEmailFolderServiceImpl extends MailDataSourceServiceImpl<UserEmailFolderMapper, UserEmailFolderEntity> implements UserEmailFolderService {
 
 }

+ 3 - 3
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/UserMailTrackRecordServiceImpl.java

@@ -3,18 +3,18 @@ package com.storlead.mail.service.impl;
 import com.storlead.mail.service.UserMailTrackRecordService;
 import com.storlead.mail.pojo.entity.UserMailTrackRecordEntity;
 import com.storlead.mail.mapper.UserMailTrackRecordMapper;
-import com.storlead.framework.mybatis.service.impl.MyBaseServiceImpl;
+import com.storlead.mail.service.impl.support.MailDataSourceServiceImpl;
 import org.springframework.stereotype.Service;
 
 /**
  * <p>
- * 当前收取邮件的最新邮件记录 服务实现类
+ * 当前收取邮件的最新邮件记��?服务实现��?
  * </p>
  *
  * @author chenkq
  * @since 2024-11-19
  */
 @Service
-public class UserMailTrackRecordServiceImpl extends MyBaseServiceImpl<UserMailTrackRecordMapper, UserMailTrackRecordEntity> implements UserMailTrackRecordService {
+public class UserMailTrackRecordServiceImpl extends MailDataSourceServiceImpl<UserMailTrackRecordMapper, UserMailTrackRecordEntity> implements UserMailTrackRecordService {
 
 }

+ 15 - 0
java/storlead-mail/storlead-mail-biz/src/main/java/com/storlead/mail/service/impl/support/MailDataSourceServiceImpl.java

@@ -0,0 +1,15 @@
+package com.storlead.mail.service.impl.support;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.storlead.framework.common.constant.DSConstants;
+import com.storlead.framework.mybatis.entity.SysBaseField;
+import com.storlead.framework.mybatis.mapper.MyBaseMapper;
+import com.storlead.framework.mybatis.service.impl.MyBaseServiceImpl;
+
+/**
+ * 邮件库 Service 基类,统一路由到 spring.datasource.dynamic.datasource.mail。
+ */
+@DS(DSConstants.DATASOURCE_MAIL)
+public abstract class MailDataSourceServiceImpl<M extends MyBaseMapper<T>, T extends SysBaseField>
+        extends MyBaseServiceImpl<M, T> {
+}