24282 hace 2 años
padre
commit
f8d0b5c7e5

+ 1 - 5
src/main/java/com/fjhx/email/config/exception/ServiceException.java

@@ -12,14 +12,10 @@ public class ServiceException extends RuntimeException {
 
     private final Integer errorCode;
 
-    private final String errorMsg;
-
     // 传入业务异常说明
     public ServiceException(String errorMsg, Object... params) {
-        super(errorMsg = StrUtil.format(errorMsg, params));
+        super(StrUtil.format(errorMsg, params));
         this.errorCode = HttpStatus.HTTP_BAD_REQUEST;
-        this.errorMsg = errorMsg;
     }
 
-
 }

+ 1 - 1
src/main/java/com/fjhx/email/config/exception/UnifiedExceptionHandler.java

@@ -27,7 +27,7 @@ public class UnifiedExceptionHandler {
      */
     @ExceptionHandler(value = ServiceException.class)
     public R handleServiceException(ServiceException e) {
-        return R.error(e.getErrorCode(), e.getErrorMsg());
+        return R.error(e.getErrorCode(), e.getMessage());
     }
 
     /**

+ 8 - 8
src/main/java/com/fjhx/email/entity/dto/MailSyncInfo.java

@@ -2,11 +2,11 @@ package com.fjhx.email.entity.dto;
 
 
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
+import org.springframework.context.annotation.Configuration;
 
 import java.util.List;
 
-@Component
+@Configuration
 public class MailSyncInfo {
 
     /**
@@ -45,32 +45,32 @@ public class MailSyncInfo {
     public static List<MailboxInfo> mailboxInfoList;
 
     @Value("${mail.minWaitingTime}")
-    public static void setMinWaitingTime(Long minWaitingTime) {
+    public void setMinWaitingTime(Long minWaitingTime) {
         MailSyncInfo.minWaitingTime = minWaitingTime * 1000;
     }
 
     @Value("${mail.initDay}")
-    public static void setInitDay(Integer initDay) {
+    public void setInitDay(Integer initDay) {
         MailSyncInfo.initDay = initDay;
     }
 
     @Value("${mail.awaitTimeout}")
-    public static void setAwaitTimeout(Integer awaitTimeout) {
+    public void setAwaitTimeout(Integer awaitTimeout) {
         MailSyncInfo.awaitTimeout = awaitTimeout;
     }
 
     @Value("${mail.errorNumber}")
-    public static void setErrorNumber(Integer errorNumber) {
+    public void setErrorNumber(Integer errorNumber) {
         MailSyncInfo.errorNumber = errorNumber;
     }
 
     @Value("${mail.mailType}")
-    public static void setMailType(Integer mailType) {
+    public void setMailType(Integer mailType) {
         MailSyncInfo.mailType = mailType;
     }
 
     @Value("${mail.urlPrefix}")
-    public static void setUrlPrefix(String urlPrefix) {
+    public void setUrlPrefix(String urlPrefix) {
         MailSyncInfo.urlPrefix = urlPrefix;
     }
 

+ 26 - 0
src/main/java/com/fjhx/email/service/impl/CoreServiceImpl.java

@@ -2,11 +2,13 @@ package com.fjhx.email.service.impl;
 
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.IORuntimeException;
 import cn.hutool.core.thread.ThreadUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson2.JSON;
 import com.fjhx.email.config.TaskPoolConfig;
 import com.fjhx.email.config.base.BaseEntity;
+import com.fjhx.email.config.exception.ServiceException;
 import com.fjhx.email.entity.*;
 import com.fjhx.email.entity.dto.MailFolderInfo;
 import com.fjhx.email.entity.dto.MailInfo;
@@ -14,6 +16,7 @@ import com.fjhx.email.entity.dto.MailSyncInfo;
 import com.fjhx.email.entity.dto.MailboxInfo;
 import com.fjhx.email.service.*;
 import com.fjhx.email.utils.EmailUtil;
+import com.fjhx.email.utils.HxHttpUtil;
 import com.sun.mail.imap.IMAPMessage;
 import com.sun.mail.imap.IMAPStore;
 import com.sun.mail.util.MailConnectException;
@@ -91,7 +94,25 @@ public class CoreServiceImpl implements ApplicationRunner {
     @Override
     public void run(ApplicationArguments args) {
 
+        try {
+            List<Long> onlineUserIdList = HxHttpUtil.getOnlineUserIdList();
 
+        } catch (IORuntimeException e) {
+            log.error("获取主服务在线用户超时");
+            ThreadUtil.sleep(1000 * 5);
+            run(args);
+            return;
+        } catch (ServiceException e) {
+            log.error("主服务返回信息错误:{}", e.getMessage());
+            ThreadUtil.sleep(1000 * 5);
+            run(args);
+            return;
+        } catch (Exception e) {
+            log.error("解析错误", e);
+            ThreadUtil.sleep(1000 * 5);
+            run(args);
+            return;
+        }
 
         // 发起邮件同步
         new Thread(this::monitorMail).start();
@@ -118,6 +139,11 @@ public class CoreServiceImpl implements ApplicationRunner {
         List<MailboxInfo> mailboxInfoList = new ArrayList<>(MailSyncInfo.mailboxInfoList);
         int mailboxSize = mailboxInfoList.size();
 
+        if (mailboxSize == 0) {
+            ThreadUtil.sleep(MailSyncInfo.minWaitingTime);
+            return;
+        }
+
         // 开始处理时间
         long start = System.currentTimeMillis();
 

+ 27 - 0
src/main/java/com/fjhx/email/utils/HxHttpUtil.java

@@ -0,0 +1,27 @@
+package com.fjhx.email.utils;
+
+import cn.hutool.core.convert.Convert;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson2.JSON;
+import com.fjhx.email.config.base.R;
+import com.fjhx.email.config.exception.ServiceException;
+import com.fjhx.email.entity.dto.MailSyncInfo;
+
+import java.util.List;
+
+public class HxHttpUtil {
+
+    /**
+     * 获取在线用户id
+     */
+    public static List<Long> getOnlineUserIdList() {
+        String url = MailSyncInfo.urlPrefix + "getOnlineUserIdList";
+        String result = HttpUtil.get(url);
+        R r = JSON.parseObject(result, R.class);
+        if (!r.getSuccess()) {
+            throw new ServiceException(r.getMessage());
+        }
+        return Convert.toList(Long.class, r.getData());
+    }
+
+}

+ 1 - 1
src/main/resources/application-dev.yml

@@ -17,4 +17,4 @@ mail:
   # 获取邮箱类型 1国内邮箱 2国外邮箱
   mailType: 1
   # 调用主服务url前缀
-  urlPrefix: http://localhost:9898/
+  urlPrefix: http://localhost:9898/open/mail/