Quellcode durchsuchen

fix: banner 日志打印

YunaiV vor 1 Jahr
Ursprung
Commit
105f1a2707

+ 5 - 7
yudao-framework/yudao-spring-boot-starter-banner/src/main/java/cn/iocoder/yudao/framework/banner/core/BannerApplicationRunner.java

@@ -17,20 +17,18 @@ import java.util.concurrent.TimeUnit;
 public class BannerApplicationRunner implements ApplicationRunner {
 
     @Override
-    public void run(ApplicationArguments args) throws Exception {
+    public void run(ApplicationArguments args) {
         ThreadUtil.execute(() -> {
             ThreadUtil.sleep(1, TimeUnit.SECONDS); // 延迟 1 秒,保证输出到结尾
             log.info("\n----------------------------------------------------------\n\t" +
                             "项目启动成功!\n\t" +
                             "接口文档: \t{} \n\t" +
                             "开发文档: \t{} \n\t" +
-                            "视频教程: \t{} \n\t" +
-                            "源码解析: \t{} \n" +
+                            "视频教程: \t{} \n" +
                             "----------------------------------------------------------",
                     "https://doc.iocoder.cn/api-doc/",
                     "https://doc.iocoder.cn",
-                    "https://t.zsxq.com/02Yf6M7Qn",
-                    "https://t.zsxq.com/02B6ujIee");
+                    "https://t.zsxq.com/02Yf6M7Qn");
 
             // 数据报表
             if (isNotPresent("cn.iocoder.yudao.module.report.framework.security.config.SecurityConfiguration")) {
@@ -44,11 +42,11 @@ public class BannerApplicationRunner implements ApplicationRunner {
             if (isNotPresent("cn.iocoder.yudao.module.mp.framework.mp.config.MpConfiguration")) {
                 System.out.println("[微信公众号 yudao-module-mp - 已禁用][参考 https://doc.iocoder.cn/mp/build/ 开启]");
             }
-            // 商城
+            // 商城系统
             if (isNotPresent("cn.iocoder.yudao.module.trade.framework.web.config.TradeWebConfiguration")) {
                 System.out.println("[商城系统 yudao-module-mall - 已禁用][参考 https://doc.iocoder.cn/mall/build/ 开启]");
             }
-            // 支付
+            // 支付平台
             if (isNotPresent("cn.iocoder.yudao.module.pay.framework.pay.config.PayConfiguration")) {
                 System.out.println("[支付系统 yudao-module-pay - 已禁用][参考 https://doc.iocoder.cn/pay/build/ 开启]");
             }

+ 52 - 0
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/handler/GlobalExceptionHandler.java

@@ -2,6 +2,7 @@ package cn.iocoder.yudao.framework.web.core.handler;
 
 import cn.hutool.core.exceptions.ExceptionUtil;
 import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.apilog.core.service.ApiErrorLog;
 import cn.iocoder.yudao.framework.apilog.core.service.ApiErrorLogFrameworkService;
 import cn.iocoder.yudao.framework.common.exception.ServiceException;
@@ -219,6 +220,13 @@ public class GlobalExceptionHandler {
      */
     @ExceptionHandler(value = Exception.class)
     public CommonResult<?> defaultExceptionHandler(HttpServletRequest req, Throwable ex) {
+        // 情况一:处理表不存在的异常
+        CommonResult<?> tableNotExistsResult = handleTableNotExists(ex);
+        if (tableNotExistsResult != null) {
+            return tableNotExistsResult;
+        }
+
+        // 情况二:处理异常
         log.error("[defaultExceptionHandler]", ex);
         // 插入异常日志
         this.createExceptionLog(req, ex);
@@ -269,4 +277,48 @@ public class GlobalExceptionHandler {
         errorLog.setExceptionTime(LocalDateTime.now());
     }
 
+    /**
+     * 处理 Table 不存在的异常情况
+     *
+     * @param ex 异常
+     * @return 如果是 Table 不存在的异常,则返回对应的 CommonResult
+     */
+    private CommonResult<?> handleTableNotExists(Throwable ex) {
+        String message = ExceptionUtil.getRootCauseMessage(ex);
+        if (!message.contains("doesn't exist")) {
+            return null;
+        }
+        // 1. 数据报表
+        if (message.contains("report_")) {
+            log.error("[报表模块 yudao-module-report - 表结构未导入][参考 https://doc.iocoder.cn/report/ 开启]");
+            return CommonResult.error(NOT_IMPLEMENTED.getCode(),
+                    "[报表模块 yudao-module-report - 表结构未导入][参考 https://doc.iocoder.cn/report/ 开启]");
+        }
+        // 2. 工作流
+        if (message.contains("bpm_")) {
+            log.error("[工作流模块 yudao-module-bpm - 表结构未导入][参考 https://doc.iocoder.cn/bpm/ 开启]");
+            return CommonResult.error(NOT_IMPLEMENTED.getCode(),
+                    "[工作流模块 yudao-module-bpm - 表结构未导入][参考 https://doc.iocoder.cn/bpm/ 开启]");
+        }
+        // 3. 微信公众号
+        if (message.contains("mp_")) {
+            log.error("[微信公众号 yudao-module-mp - 表结构未导入][参考 https://doc.iocoder.cn/mp/build/ 开启]");
+            return CommonResult.error(NOT_IMPLEMENTED.getCode(),
+                    "[微信公众号 yudao-module-mp - 表结构未导入][参考 https://doc.iocoder.cn/mp/build/ 开启]");
+        }
+        // 4. 商城系统
+        if (StrUtil.containsAny(message, "product_", "promotion_", "trade_")) {
+            log.error("[商城系统 yudao-module-mall - 已禁用][参考 https://doc.iocoder.cn/mall/build/ 开启]");
+            return CommonResult.error(NOT_IMPLEMENTED.getCode(),
+                    "[商城系统 yudao-module-mall - 已禁用][参考 https://doc.iocoder.cn/mall/build/ 开启]");
+        }
+        // 5. 支付平台
+        if (message.contains("pay_")) {
+            log.error("[支付模块 yudao-module-pay - 表结构未导入][参考 https://doc.iocoder.cn/pay/build/ 开启]");
+            return CommonResult.error(NOT_IMPLEMENTED.getCode(),
+                    "[支付模块 yudao-module-pay - 表结构未导入][参考 https://doc.iocoder.cn/pay/build/ 开启]");
+        }
+        return null;
+    }
+
 }

+ 10 - 1
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/account/MpAccountServiceImpl.java

@@ -27,6 +27,7 @@ import org.springframework.validation.annotation.Validated;
 import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
@@ -68,7 +69,15 @@ public class MpAccountServiceImpl implements MpAccountService {
         // 注意:忽略自动多租户,因为要全局初始化缓存
         TenantUtils.executeIgnore(() -> {
             // 第一步:查询数据
-            List<MpAccountDO> accounts = mpAccountMapper.selectList();
+            List<MpAccountDO> accounts = Collections.emptyList();
+            try {
+                accounts = mpAccountMapper.selectList();
+            } catch (Throwable ex) {
+                if (!ex.getMessage().contains("doesn't exist")) {
+                    throw ex;
+                }
+                log.error("[微信公众号 yudao-module-mp - 表结构未导入][参考 https://doc.iocoder.cn/mp/build/ 开启]");
+            }
             log.info("[initLocalCacheIfUpdate][缓存公众号账号,数量为:{}]", accounts.size());
 
             // 第二步:构建缓存。创建或更新支付 Client

+ 10 - 1
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/channel/PayChannelServiceImpl.java

@@ -27,6 +27,7 @@ import javax.annotation.Resource;
 import javax.validation.Validator;
 import java.time.LocalDateTime;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
@@ -64,7 +65,15 @@ public class PayChannelServiceImpl implements PayChannelService {
         // 注意:忽略自动多租户,因为要全局初始化缓存
         TenantUtils.executeIgnore(() -> {
             // 第一步:查询数据
-            List<PayChannelDO> channels = channelMapper.selectList();
+            List<PayChannelDO> channels = Collections.emptyList();
+            try {
+                channels = channelMapper.selectList();
+            } catch (Throwable ex) {
+                if (!ex.getMessage().contains("doesn't exist")) {
+                    throw ex;
+                }
+                log.error("[支付模块 yudao-module-pay - 表结构未导入][参考 https://doc.iocoder.cn/pay/build/ 开启]");
+            }
             log.info("[initLocalCache][缓存支付渠道,数量为:{}]", channels.size());
 
             // 第二步:构建缓存:创建或更新支付 Client