diff --git a/cf-framework/cf-spring-boot-starter-web/src/main/java/com/cf/imes/framework/errorcode/core/generator/ErrorCodeAutoGeneratorImpl.java b/cf-framework/cf-spring-boot-starter-web/src/main/java/com/cf/imes/framework/errorcode/core/generator/ErrorCodeAutoGeneratorImpl.java index f408dadbe..8effe683e 100644 --- a/cf-framework/cf-spring-boot-starter-web/src/main/java/com/cf/imes/framework/errorcode/core/generator/ErrorCodeAutoGeneratorImpl.java +++ b/cf-framework/cf-spring-boot-starter-web/src/main/java/com/cf/imes/framework/errorcode/core/generator/ErrorCodeAutoGeneratorImpl.java @@ -13,6 +13,7 @@ import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.event.EventListener; import org.springframework.scheduling.annotation.Async; +import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -44,16 +45,52 @@ public class ErrorCodeAutoGeneratorImpl implements ErrorCodeAutoGenerator { @EventListener(ApplicationReadyEvent.class) @Async // 异步,保证项目的启动过程,毕竟非关键流程 public void execute() { - // 第一步,解析错误码 List autoGenerateDTOs = parseErrorCode(); log.info("[execute][解析到错误码数量为 ({}) 个]", autoGenerateDTOs.size()); - // 第二步,写入到 system 服务 - try { - errorCodeApi.autoGenerateErrorCodeList(autoGenerateDTOs).checkError(); - log.info("[execute][写入到 system 组件完成]"); - } catch (Exception ex) { - log.error("[execute][写入到 system 组件失败({})]", ExceptionUtil.getRootCauseMessage(ex)); + // 手动重试配置 + int maxAttempts = 5; + int attempt = 0; + boolean success = false; + long initialDelay = 1000; // 初始延迟1秒 + long maxDelay = 10000; // 最大延迟10秒 + + while (attempt < maxAttempts && !success) { + attempt++; + try { + errorCodeApi.autoGenerateErrorCodeList(autoGenerateDTOs).checkError(); + log.info("[execute][第 {} 次尝试 - 写入到 system 组件成功]", attempt); + success = true; + } catch (Exception ex) { + // 特别处理UnknownHostException + if (ExceptionUtil.getRootCause(ex) instanceof UnknownHostException) { + log.warn("[execute][第 {} 次尝试 - DNS解析失败,等待重试]", attempt); + } else { + log.warn("[execute][第 {} 次尝试 - 请求失败({})]", + attempt, ExceptionUtil.getRootCauseMessage(ex)); + } + + if (attempt >= maxAttempts) { + log.error("[execute][写入到 system 组件失败,已达到最大重试次数({})]", + ExceptionUtil.getRootCauseMessage(ex)); + break; + } + + // 每次重试间隔时间指数增长:1s, 2s, 4s, 8s, 10s(最大10s) + long delay = Math.min( + (long) (initialDelay * Math.pow(2, attempt - 1)), + maxDelay + ); + + try { + log.info("[execute][等待 {}ms 后进行第 {} 次重试]", delay, attempt + 1); + Thread.sleep(delay); + } catch (InterruptedException ie) { + Thread.currentThread().interrupt(); + log.error("[execute][重试过程被中断]"); + break; + } + } } } diff --git a/cf-module-prod-plan/cf-module-prod-plan-api/src/main/java/com/cf/imes/module/plan/enums/ErrorCodeConstants.java b/cf-module-prod-plan/cf-module-prod-plan-api/src/main/java/com/cf/imes/module/plan/enums/ErrorCodeConstants.java index 406d78b1f..bbceccca1 100644 --- a/cf-module-prod-plan/cf-module-prod-plan-api/src/main/java/com/cf/imes/module/plan/enums/ErrorCodeConstants.java +++ b/cf-module-prod-plan/cf-module-prod-plan-api/src/main/java/com/cf/imes/module/plan/enums/ErrorCodeConstants.java @@ -23,5 +23,5 @@ public class ErrorCodeConstants { public static final ErrorCode ORDER_IMPORT_PLATE_GOODS_NOMATCH_ERROR = new ErrorCode(1_005_000_013, "导入失败,板材库中无板材匹配,商品编码:{},商品名称:{},材质:{},颜色:{},厚度:{},品牌:{}"); public static final ErrorCode WEBCAD_ORDER_IMPORT_PEEK_NOT_EXIST_ERROR = new ErrorCode(1_005_000_014, "导入失败:数据源不存在,请检查消息可靠性"); public static final ErrorCode WEBCAD_ORDER_IMPORT_ORDER_UPDATE_CONCURRENCY_ERROR = new ErrorCode(1_005_000_015, "导入失败:生产单号【{}】板件数量已发生改变,请重新导入"); - public static final ErrorCode WEBCAD_ORDER_IMPORT_GOODS_UPDATE_CONCURRENCY_ERROR = new ErrorCode(1_005_000_015, "导入失败:材质【{}】板件数量已发生改变,请重新导入"); + public static final ErrorCode WEBCAD_ORDER_IMPORT_GOODS_UPDATE_CONCURRENCY_ERROR = new ErrorCode(1_005_000_016, "导入失败:材质【{}】板件数量已发生改变,请重新导入"); } diff --git a/cf-module-report/cf-module-report-api/src/main/java/com/cf/imes/module/report/enums/ErrorCodeConstants.java b/cf-module-report/cf-module-report-api/src/main/java/com/cf/imes/module/report/enums/ErrorCodeConstants.java index 2a16fb33a..1a7038dab 100644 --- a/cf-module-report/cf-module-report-api/src/main/java/com/cf/imes/module/report/enums/ErrorCodeConstants.java +++ b/cf-module-report/cf-module-report-api/src/main/java/com/cf/imes/module/report/enums/ErrorCodeConstants.java @@ -23,7 +23,7 @@ public final class ErrorCodeConstants { public static final ErrorCode DATASOURCE_CONNECT_FAIL = new ErrorCode(1_004_002_002, "报表数据源连接失败"); public static final ErrorCode DATASOURCE_SPRINGBEAN_GET_FAIL = new ErrorCode(1_004_002_003, "无法获取springbean【{}】"); public static final ErrorCode DATASOURCE_SPRINGBEAN_METHODS_GET_FAIL = new ErrorCode(1_004_002_004, "获取springbean方法列表失败,请检查】"); - public static final ErrorCode DATASOURCE_BUILDIN_OPERATION_PERMISSION_ERROR = new ErrorCode(1_004_001_002, "内置数据源操作权限不足"); + public static final ErrorCode DATASOURCE_BUILDIN_OPERATION_PERMISSION_ERROR = new ErrorCode(1_004_002_005, "内置数据源操作权限不足"); // ========== UREPORT dataset模块 1-003-003-000 ========== diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java index a78031e2f..70204c967 100644 --- a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java @@ -159,7 +159,7 @@ public class ErrorCodeConstants { public static final ErrorCode SOCIAL_CLIENT_WEIXIN_MINI_APP_PHONE_CODE_ERROR = new ErrorCode(1_002_018_200, "获得手机号失败"); public static final ErrorCode SOCIAL_CLIENT_NOT_EXISTS = new ErrorCode(1_002_018_201, "社交客户端不存在"); - public static final ErrorCode SOCIAL_CLIENT_UNIQUE = new ErrorCode(1_002_018_201, "社交客户端已存在配置"); + public static final ErrorCode SOCIAL_CLIENT_UNIQUE = new ErrorCode(1_002_018_202, "社交客户端已存在配置"); // ========== 系统敏感词 1-002-019-000 ========= public static final ErrorCode SENSITIVE_WORD_NOT_EXISTS = new ErrorCode(1_002_019_000, "系统敏感词在所有标签中都不存在"); @@ -293,12 +293,12 @@ public class ErrorCodeConstants { - //=========== 包裹信息 1-002-040-000 ============ - public static final ErrorCode THE_CURRENT_PACKAGE_TYPE_IS_INCORRECT = new ErrorCode(1_002_040_002, "当前包裹类型错误"); - public static final ErrorCode FAILED_TO_MODIFY_THE_STATUS_OF_THE_CURRENT_PRODUCTION_ORDER = new ErrorCode(1_002_040_003, "修改当前生产单的工序状态和生产单的状态失败"); - public static final ErrorCode NO_OPTIMIZATION_INFORMATION_AVAILABLE = new ErrorCode(1_002_040_004, "当前订单无优化信息"); - public static final ErrorCode NO_PRODUCTION_ORDER_INFORMATION_AVAILABLE = new ErrorCode(1_002_040_005, "已经是{}一条了"); - public static final ErrorCode ORDER_IS_PACK_ERROR = new ErrorCode(1_002_040_006, "生产单' {} '已经完成全部打包,无法进行分堆"); + //=========== 包裹信息 1-002-047-000 ============ + public static final ErrorCode THE_CURRENT_PACKAGE_TYPE_IS_INCORRECT = new ErrorCode(1_002_047_002, "当前包裹类型错误"); + public static final ErrorCode FAILED_TO_MODIFY_THE_STATUS_OF_THE_CURRENT_PRODUCTION_ORDER = new ErrorCode(1_002_047_003, "修改当前生产单的工序状态和生产单的状态失败"); + public static final ErrorCode NO_OPTIMIZATION_INFORMATION_AVAILABLE = new ErrorCode(1_002_047_004, "当前订单无优化信息"); + public static final ErrorCode NO_PRODUCTION_ORDER_INFORMATION_AVAILABLE = new ErrorCode(1_002_047_005, "已经是{}一条了"); + public static final ErrorCode ORDER_IS_PACK_ERROR = new ErrorCode(1_002_047_006, "生产单' {} '已经完成全部打包,无法进行分堆"); //=========== 断言提示信息 1-002-041-000 ============ @@ -427,21 +427,21 @@ public class ErrorCodeConstants { public static final ErrorCode PRODUCTS_NO_DELETE = new ErrorCode(1_002_043_013, "当前产品以上架,无法删除,请下架后再删除"); public static final ErrorCode PRODUCTS_NO_UPDATE = new ErrorCode(1_002_043_014, "当前产品以上架,无法进行修改"); public static final ErrorCode PRODUCTS_DETAIL_NO_UPDATE = new ErrorCode(1_002_043_016, "定价规则对应的产品已上架,无法进行修改"); - public static final ErrorCode ADVERTISEMENT_START_TIME_ERROR = new ErrorCode(1_003_043_017, "广告开始时间选择有误,应等于或大于当日"); - public static final ErrorCode ADVERTISEMENT_TIME_ERROR = new ErrorCode(1_003_043_018, "时间选择有误,结束时间应大于或等于开始时间"); - public static final ErrorCode ADVERTISEMENT_NAME_IS_EXIST = new ErrorCode(1_003_043_019, "当前名称的广告已存在,请重新命名"); - public static final ErrorCode ADVERTISEMENT_NO_DELETE = new ErrorCode(1_003_043_020, "当前广告已经发布,无法删除,请结束发布后再删除"); - public static final ErrorCode ADVERTISEMENT_REPUBLISH_NO_TIME = new ErrorCode(1_003_043_021, "广告重新发布,应重新选择投放时间"); - public static final ErrorCode RECHARGE_ACTIVE_NAME_IS_EXIST = new ErrorCode(1_004_043_022, "当前赠送金活动名称已存在,请修改"); - public static final ErrorCode IMAGE_UPLOAD_ERROR = new ErrorCode(1_004_043_023, "图片上传失败,请重试或重新选择图片"); + public static final ErrorCode ADVERTISEMENT_START_TIME_ERROR = new ErrorCode(1_002_043_017, "广告开始时间选择有误,应等于或大于当日"); + public static final ErrorCode ADVERTISEMENT_TIME_ERROR = new ErrorCode(1_002_043_018, "时间选择有误,结束时间应大于或等于开始时间"); + public static final ErrorCode ADVERTISEMENT_NAME_IS_EXIST = new ErrorCode(1_002_043_019, "当前名称的广告已存在,请重新命名"); + public static final ErrorCode ADVERTISEMENT_NO_DELETE = new ErrorCode(1_002_043_020, "当前广告已经发布,无法删除,请结束发布后再删除"); + public static final ErrorCode ADVERTISEMENT_REPUBLISH_NO_TIME = new ErrorCode(1_002_043_021, "广告重新发布,应重新选择投放时间"); + public static final ErrorCode RECHARGE_ACTIVE_NAME_IS_EXIST = new ErrorCode(1_002_043_022, "当前赠送金活动名称已存在,请修改"); + public static final ErrorCode IMAGE_UPLOAD_ERROR = new ErrorCode(1_002_043_023, "图片上传失败,请重试或重新选择图片"); - //=========== 支付相关 1-002-044-000 ============ - public static final ErrorCode PAY_CHANNEL_NOT_SUPPORT = new ErrorCode(1_002_044_000, "暂不支持的支付渠道,请使用其他支付渠道"); - public static final ErrorCode PAY_ORDER_NOT_EXIST = new ErrorCode(1_002_044_001, "支付订单不存在,支付编号:{},请重新发起支付"); - public static final ErrorCode PAY_ORDER_CHANNEL_QUERY_NOT_EXIST = new ErrorCode(1_002_044_002, "如果您已确认扫码支付,请稍后刷新页面,支付平台可能存在延迟到账"); - public static final ErrorCode PAY_ORDER_NOTIFY_DATA_PARSE_ERROR = new ErrorCode(1_002_044_003, "解析支付回调数据异常"); - public static final ErrorCode PAY_ORDER_STATUS_IS_NOT_WAITING = new ErrorCode(1_002_044_004, "支付订单不处于待支付"); - public static final ErrorCode PAY_ORDER_SUBMIT_CHANNEL_ERROR = new ErrorCode(1_002_044_005, "发起渠道支付异常,请联系客服"); + //=========== 支付相关 1-002-048-000 ============ + public static final ErrorCode PAY_CHANNEL_NOT_SUPPORT = new ErrorCode(1_002_048_000, "暂不支持的支付渠道,请使用其他支付渠道"); + public static final ErrorCode PAY_ORDER_NOT_EXIST = new ErrorCode(1_002_048_001, "支付订单不存在,支付编号:{},请重新发起支付"); + public static final ErrorCode PAY_ORDER_CHANNEL_QUERY_NOT_EXIST = new ErrorCode(1_002_048_002, "如果您已确认扫码支付,请稍后刷新页面,支付平台可能存在延迟到账"); + public static final ErrorCode PAY_ORDER_NOTIFY_DATA_PARSE_ERROR = new ErrorCode(1_002_048_003, "解析支付回调数据异常"); + public static final ErrorCode PAY_ORDER_STATUS_IS_NOT_WAITING = new ErrorCode(1_002_048_004, "支付订单不处于待支付"); + public static final ErrorCode PAY_ORDER_SUBMIT_CHANNEL_ERROR = new ErrorCode(1_002_048_005, "发起渠道支付异常,请联系客服"); //=========== 产品相关 1-002-045-000 ============ public static final ErrorCode PRODUCTS_NO_EXIST = new ErrorCode(1_002_045_001, "当前产品不存在"); @@ -453,6 +453,7 @@ public class ErrorCodeConstants { public static final ErrorCode PRODUCTS_DURATION_NUM_ERR = new ErrorCode(1_002_045_007, "产品定价规则,时长数据设置有误"); public static final ErrorCode PRODUCTS_DURATION_INT_ERR = new ErrorCode(1_002_045_008, "产品定价规则:时长必须为整数且大于 0"); public static final ErrorCode PRODUCTS_DURATION_UNIT_ERR = new ErrorCode(1_002_045_009, "产品定价规则,时长单位设置有误"); + public static final ErrorCode RECHARGE_ACTIVE_NO_EXIST = new ErrorCode(1_002_045_010, "当前赠送金活动不存在"); //=========== 广告相关 1-002-046-000 ============ public static final ErrorCode ADVERTISEMENT_POSITION_NO_EXIST = new ErrorCode(1_002_046_001, "广告所选放置位置不存在"); @@ -463,14 +464,9 @@ public class ErrorCodeConstants { public static final ErrorCode ADVERTISEMENT_END_ERROR2 = new ErrorCode(1_002_046_006, "当前广告已结束,无需立即结束"); public static final ErrorCode ADVERTISEMENT_FAIL = new ErrorCode(1_002_046_007, "自动发布失败"); - public static final ErrorCode RECHARGE_ACTIVE_NO_EXIST = new ErrorCode(1_004_001_001, "当前赠送金活动不存在"); - - - //=========== 解析器管理 1-002-044-000 ============ public static final ErrorCode PARSER_NO_EXIST = new ErrorCode(1_002_044_001, "当前解析器不存在,请重新选择"); - public static final ErrorCode PARSER_TEMPLATE_NO_EXIST = new ErrorCode(1_002_044_002, "当前解析器模板不存在,请重新选择");