Commit 5a1491d7fdc510c2fb20e85ad99d1a3e10c4dc92

Authored by YunaiV
1 parent 9528698a

短信提交 2021-04-01,重构返回的结果

Showing 21 changed files with 174 additions and 140 deletions
src/main/java/cn/iocoder/dashboard/common/exception/ErrorCode.java
1 1 package cn.iocoder.dashboard.common.exception;
2 2  
  3 +import cn.iocoder.dashboard.common.exception.enums.GlobalErrorCodeConstants;
3 4 import cn.iocoder.dashboard.common.exception.enums.ServiceErrorCodeRange;
4 5 import lombok.Data;
5 6  
6 7 /**
7 8 * 错误码对象
8 9 *
9   - * 全局错误码,占用 [0, 999],参见 {@link GlobalException}
  10 + * 全局错误码,占用 [0, 999], 参见 {@link GlobalErrorCodeConstants}
10 11 * 业务异常错误码,占用 [1 000 000 000, +∞),参见 {@link ServiceErrorCodeRange}
11 12 *
12 13 * TODO 错误码设计成对象的原因,为未来的 i18 国际化做准备
... ... @@ -21,11 +22,11 @@ public class ErrorCode {
21 22 /**
22 23 * 错误提示
23 24 */
24   - private final String message;
  25 + private final String msg;
25 26  
26 27 public ErrorCode(Integer code, String message) {
27 28 this.code = code;
28   - this.message = message;
  29 + this.msg = message;
29 30 }
30 31  
31 32 }
... ...
src/main/java/cn/iocoder/dashboard/common/exception/ServiceException.java
... ... @@ -30,7 +30,7 @@ public final class ServiceException extends RuntimeException {
30 30  
31 31 public ServiceException(ErrorCode errorCode) {
32 32 this.code = errorCode.getCode();
33   - this.message = errorCode.getMessage();
  33 + this.message = errorCode.getMsg();
34 34 }
35 35  
36 36 public ServiceException(Integer code, String message) {
... ...
src/main/java/cn/iocoder/dashboard/common/exception/util/ServiceExceptionUtil.java
... ... @@ -47,12 +47,12 @@ public class ServiceExceptionUtil {
47 47 // ========== 和 ServiceException 的集成 ==========
48 48  
49 49 public static ServiceException exception(ErrorCode errorCode) {
50   - String messagePattern = MESSAGES.getOrDefault(errorCode.getCode(), errorCode.getMessage());
  50 + String messagePattern = MESSAGES.getOrDefault(errorCode.getCode(), errorCode.getMsg());
51 51 return exception0(errorCode.getCode(), messagePattern);
52 52 }
53 53  
54 54 public static ServiceException exception(ErrorCode errorCode, Object... params) {
55   - String messagePattern = MESSAGES.getOrDefault(errorCode.getCode(), errorCode.getMessage());
  55 + String messagePattern = MESSAGES.getOrDefault(errorCode.getCode(), errorCode.getMsg());
56 56 return exception0(errorCode.getCode(), messagePattern, params);
57 57 }
58 58  
... ...
src/main/java/cn/iocoder/dashboard/common/pojo/CommonResult.java
... ... @@ -30,7 +30,7 @@ public class CommonResult<T> implements Serializable {
30 30 /**
31 31 * 错误提示,用户可阅读
32 32 *
33   - * @see ErrorCode#getMessage() ()
  33 + * @see ErrorCode#getMsg() ()
34 34 */
35 35 private String msg;
36 36  
... ... @@ -56,7 +56,7 @@ public class CommonResult<T> implements Serializable {
56 56 }
57 57  
58 58 public static <T> CommonResult<T> error(ErrorCode errorCode) {
59   - return error(errorCode.getCode(), errorCode.getMessage());
  59 + return error(errorCode.getCode(), errorCode.getMsg());
60 60 }
61 61  
62 62 public static <T> CommonResult<T> success(T data) {
... ...
src/main/java/cn/iocoder/dashboard/framework/sms/core/client/SmsClient.java
1 1 package cn.iocoder.dashboard.framework.sms.core.client;
2 2  
3   -import cn.iocoder.dashboard.framework.sms.core.SmsResultDetail;
  3 +import cn.iocoder.dashboard.framework.sms.core.client.dto.SmsResultDetail;
4 4 import cn.iocoder.dashboard.framework.sms.core.client.dto.SmsSendRespDTO;
5 5  
6 6 import javax.servlet.ServletRequest;
... ...
src/main/java/cn/iocoder/dashboard/framework/sms/core/client/SmsCodeMapping.java 0 → 100644
  1 +package cn.iocoder.dashboard.framework.sms.core.client;
  2 +
  3 +import cn.iocoder.dashboard.common.exception.ErrorCode;
  4 +import cn.iocoder.dashboard.framework.sms.core.enums.SmsFrameworkErrorCodeConstants;
  5 +
  6 +import java.util.function.Function;
  7 +
  8 +/**
  9 + * 将 API 的错误码,转换为通用的错误码
  10 + *
  11 + * @see SmsCommonResult
  12 + * @see SmsFrameworkErrorCodeConstants
  13 + *
  14 + * @author 芋道源码
  15 + */
  16 +public interface SmsCodeMapping extends Function<String, ErrorCode> {
  17 +}
... ...
src/main/java/cn/iocoder/dashboard/framework/sms/core/client/SmsCommonResult.java
1 1 package cn.iocoder.dashboard.framework.sms.core.client;
2 2  
3 3 import cn.hutool.core.exceptions.ExceptionUtil;
  4 +import cn.hutool.core.lang.Assert;
  5 +import cn.iocoder.dashboard.common.exception.ErrorCode;
4 6 import cn.iocoder.dashboard.common.pojo.CommonResult;
5   -import cn.iocoder.dashboard.framework.sms.core.enums.SmsSendFailureTypeEnum;
  7 +import cn.iocoder.dashboard.framework.sms.core.enums.SmsFrameworkErrorCodeConstants;
6 8 import lombok.Data;
7 9 import lombok.EqualsAndHashCode;
8 10 import lombok.ToString;
... ... @@ -40,20 +42,27 @@ public class SmsCommonResult&lt;T&gt; extends CommonResult&lt;T&gt; {
40 42 private SmsCommonResult() {
41 43 }
42 44  
43   - public static SmsCommonResult success(SmsSendFailureTypeEnum sendFailureType,
44   - String apiSendCode, String apiSendMsg, String apiRequestId, String apiSerialNo) {
45   - SmsCommonResult result = new SmsCommonResult().setSuccess(true).setApiSendCode(apiSendCode).setApiSendMsg(apiSendMsg)
46   - .setApiRequestId(apiRequestId).setApiSerialNo(apiSerialNo);
47   - if (sendFailureType != null) {
48   - result.setSendFailureType(sendFailureType.getType()).setSendFailureMsg(sendFailureType.getMsg());
  45 + public static <T> SmsCommonResult<T> build(String apiCode, String apiMsg, String apiRequestId,
  46 + T data, SmsCodeMapping codeMapping) {
  47 + Assert.notNull(codeMapping, "参数 codeMapping 不能为空");
  48 + SmsCommonResult<T> result = new SmsCommonResult<T>().setApiCode(apiCode).setApiMsg(apiMsg).setApiRequestId(apiRequestId);
  49 + result.setData(data);
  50 + // 翻译错误码
  51 + if (codeMapping != null) {
  52 + ErrorCode errorCode = codeMapping.apply(apiCode);
  53 + if (errorCode == null) {
  54 + errorCode = SmsFrameworkErrorCodeConstants.SMS_UNKNOWN;
  55 + }
  56 + result.setCode(errorCode.getCode()).setMsg(errorCode.getMsg());
49 57 }
50 58 return result;
51 59 }
52 60  
53   - public static SmsCommonResult error(Throwable ex) {
54   - return new SmsCommonResult().setSuccess(false)
55   - .setSendFailureType(SmsSendFailureTypeEnum.SMS_SEND_EXCEPTION.getType())
56   - .setSendFailureMsg(ExceptionUtil.getRootCauseMessage(ex));
  61 + public static <T> SmsCommonResult<T> error(Throwable ex) {
  62 + SmsCommonResult<T> result = new SmsCommonResult<>();
  63 + result.setCode(SmsFrameworkErrorCodeConstants.EXCEPTION.getCode());
  64 + result.setMsg(ExceptionUtil.getRootCauseMessage(ex));
  65 + return result;
57 66 }
58 67  
59 68 }
... ...
src/main/java/cn/iocoder/dashboard/framework/sms/core/SmsResultDetail.java renamed to src/main/java/cn/iocoder/dashboard/framework/sms/core/client/dto/SmsResultDetail.java
1   -package cn.iocoder.dashboard.framework.sms.core;
  1 +package cn.iocoder.dashboard.framework.sms.core.client.dto;
2 2  
3 3 import cn.iocoder.dashboard.modules.system.enums.sms.SysSmsSendStatusEnum;
4 4 import lombok.Data;
... ...
src/main/java/cn/iocoder/dashboard/framework/sms/core/client/dto/SmsSendRespDTO.java
1 1 package cn.iocoder.dashboard.framework.sms.core.client.dto;
2 2  
  3 +import lombok.Data;
  4 +
3 5 /**
4 6 * 短信发送响应 DTO
5 7 *
6 8 * @author 芋道源码
7 9 */
  10 +@Data
8 11 public class SmsSendRespDTO {
9 12  
10 13 /**
... ...
src/main/java/cn/iocoder/dashboard/framework/sms/core/client/impl/AbstractSmsClient.java
1 1 package cn.iocoder.dashboard.framework.sms.core.client.impl;
2 2  
  3 +import cn.iocoder.dashboard.framework.sms.core.client.SmsCodeMapping;
3 4 import cn.iocoder.dashboard.framework.sms.core.client.SmsCommonResult;
4 5 import cn.iocoder.dashboard.framework.sms.core.client.SmsClient;
5 6 import cn.iocoder.dashboard.framework.sms.core.client.dto.SmsSendRespDTO;
... ... @@ -21,14 +22,19 @@ public abstract class AbstractSmsClient implements SmsClient {
21 22 * 短信渠道配置
22 23 */
23 24 protected volatile SmsChannelProperties properties;
  25 + /**
  26 + * 错误码枚举类
  27 + */
  28 + protected final SmsCodeMapping codeMapping;
24 29  
25 30 /**
26 31 * 短信客户端有参构造函数
27 32 *
28 33 * @param properties 短信配置
29 34 */
30   - public AbstractSmsClient(SmsChannelProperties properties) {
  35 + public AbstractSmsClient(SmsChannelProperties properties, SmsCodeMapping codeMapping) {
31 36 this.properties = properties;
  37 + this.codeMapping = codeMapping;
32 38 }
33 39  
34 40 /**
... ...
src/main/java/cn/iocoder/dashboard/framework/sms/core/client/impl/aliyun/AliyunSmsClient.java
... ... @@ -4,9 +4,9 @@ import cn.hutool.core.collection.CollectionUtil;
4 4 import cn.hutool.core.date.DateUtil;
5 5 import cn.hutool.core.util.StrUtil;
6 6 import cn.iocoder.dashboard.framework.sms.core.client.SmsCommonResult;
7   -import cn.iocoder.dashboard.framework.sms.core.SmsResultDetail;
  7 +import cn.iocoder.dashboard.framework.sms.core.client.dto.SmsResultDetail;
  8 +import cn.iocoder.dashboard.framework.sms.core.client.dto.SmsSendRespDTO;
8 9 import cn.iocoder.dashboard.framework.sms.core.client.impl.AbstractSmsClient;
9   -import cn.iocoder.dashboard.framework.sms.core.enums.SmsSendFailureTypeEnum;
10 10 import cn.iocoder.dashboard.framework.sms.core.property.SmsChannelProperties;
11 11 import cn.iocoder.dashboard.modules.system.enums.sms.SysSmsSendStatusEnum;
12 12 import cn.iocoder.dashboard.util.json.JsonUtils;
... ... @@ -48,7 +48,7 @@ public class AliyunSmsClient extends AbstractSmsClient {
48 48 private volatile IAcsClient acsClient;
49 49  
50 50 public AliyunSmsClient(SmsChannelProperties properties) {
51   - super(properties);
  51 + super(properties, new AliyunSmsCodeMapping());
52 52 }
53 53  
54 54 @Override
... ... @@ -59,7 +59,8 @@ public class AliyunSmsClient extends AbstractSmsClient {
59 59 }
60 60  
61 61 @Override
62   - protected SmsCommonResult doSend(Long sendLogId, String mobile, String apiTemplateId, Map<String, Object> templateParams) throws Exception {
  62 + protected SmsCommonResult<SmsSendRespDTO> doSend(Long sendLogId, String mobile,
  63 + String apiTemplateId, Map<String, Object> templateParams) throws Throwable {
63 64 // 构建参数
64 65 SendSmsRequest request = new SendSmsRequest();
65 66 request.setSysMethod(MethodType.POST);
... ... @@ -73,25 +74,16 @@ public class AliyunSmsClient extends AbstractSmsClient {
73 74 // 执行发送
74 75 SendSmsResponse sendResult = acsClient.getAcsResponse(request);
75 76 // 解析结果
76   - return SmsCommonResult.success(parseSendFailureType(sendResult.getCode()), // 将 API 短信平台,解析成统一的错误码
77   - sendResult.getCode(), sendResult.getMessage(), sendResult.getRequestId(), sendResult.getBizId());
  77 + SmsSendRespDTO data = null;
  78 + if (sendResult.getBizId() != null) {
  79 + data = new SmsSendRespDTO().setSerialNo(sendResult.getBizId());
  80 + }
  81 + return SmsCommonResult.build(sendResult.getCode(), sendResult.getMessage(), sendResult.getRequestId(), data, codeMapping);
78 82 } catch (ClientException ex) {
79   - return SmsCommonResult.success(parseSendFailureType(ex.getErrCode()), // 将 API 短信平台,解析成统一的错误码
80   - ex.getErrCode(), formatResultMsg(ex), ex.getRequestId(), null);
  83 + return SmsCommonResult.build(ex.getErrCode(), formatResultMsg(ex), ex.getRequestId(), null, codeMapping);
81 84 }
82 85 }
83 86  
84   - private static SmsSendFailureTypeEnum parseSendFailureType(String code) {
85   - switch (code) {
86   - case "OK": return null;
87   - case "MissingAccessKeyId": return SmsSendFailureTypeEnum.SMS_CHANNEL_API_KEY_MISSING;
88   - case "isp.RAM_PERMISSION_DENY": return SmsSendFailureTypeEnum.SMS_CHANNEL_PERMISSION_DENY;
89   - case "isv.INVALID_PARAMETERS": return SmsSendFailureTypeEnum.SMS_API_PARAM_ERROR;
90   - case "isv.BUSINESS_LIMIT_CONTROL": return SmsSendFailureTypeEnum.SMS_SEND_LIMIT_CONTROL;
91   - }
92   - return SmsSendFailureTypeEnum.SMS_UNKNOWN;
93   - }
94   -
95 87 private static String formatResultMsg(ClientException ex) {
96 88 if (StrUtil.isEmpty(ex.getErrorDescription())) {
97 89 return ex.getMessage();
... ...
src/main/java/cn/iocoder/dashboard/framework/sms/core/client/impl/aliyun/AliyunSmsCodeMapping.java 0 → 100644
  1 +package cn.iocoder.dashboard.framework.sms.core.client.impl.aliyun;
  2 +
  3 +import cn.iocoder.dashboard.common.exception.ErrorCode;
  4 +import cn.iocoder.dashboard.framework.sms.core.client.SmsCodeMapping;
  5 +
  6 +import static cn.iocoder.dashboard.framework.sms.core.enums.SmsFrameworkErrorCodeConstants.*;
  7 +
  8 +/**
  9 + * 阿里云的 SmsCodeMapping 实现类
  10 + *
  11 + * @author 芋道源码
  12 + */
  13 +public class AliyunSmsCodeMapping implements SmsCodeMapping {
  14 +
  15 + @Override
  16 + public ErrorCode apply(String apiCode) {
  17 + switch (apiCode) {
  18 + case "OK": return null;
  19 + case "MissingAccessKeyId": return SMS_CHANNEL_API_KEY_MISSING;
  20 + case "isp.RAM_PERMISSION_DENY": return SMS_CHANNEL_PERMISSION_DENY;
  21 + case "isv.INVALID_PARAMETERS": return SMS_API_PARAM_ERROR;
  22 + case "isv.BUSINESS_LIMIT_CONTROL": return SMS_SEND_LIMIT_CONTROL;
  23 + }
  24 + return SMS_UNKNOWN;
  25 + }
  26 +
  27 +}
... ...
src/main/java/cn/iocoder/dashboard/framework/sms/core/client/impl/yunpian/YunpianSmsClient.java
... ... @@ -6,11 +6,11 @@ import cn.hutool.core.date.DateUtil;
6 6 import cn.hutool.core.util.CharsetUtil;
7 7 import cn.hutool.core.util.StrUtil;
8 8 import cn.hutool.core.util.URLUtil;
9   -import cn.iocoder.dashboard.framework.sms.core.SmsConstants;
10 9 import cn.iocoder.dashboard.framework.sms.core.client.SmsCommonResult;
11   -import cn.iocoder.dashboard.framework.sms.core.SmsResultDetail;
  10 +import cn.iocoder.dashboard.framework.sms.core.client.dto.SmsResultDetail;
  11 +import cn.iocoder.dashboard.framework.sms.core.client.dto.SmsSendRespDTO;
12 12 import cn.iocoder.dashboard.framework.sms.core.client.impl.AbstractSmsClient;
13   -import cn.iocoder.dashboard.framework.sms.core.enums.SmsSendFailureTypeEnum;
  13 +import cn.iocoder.dashboard.framework.sms.core.enums.SmsConstants;
14 14 import cn.iocoder.dashboard.framework.sms.core.property.SmsChannelProperties;
15 15 import cn.iocoder.dashboard.modules.system.enums.sms.SysSmsSendStatusEnum;
16 16 import cn.iocoder.dashboard.util.json.JsonUtils;
... ... @@ -29,8 +29,6 @@ import java.util.List;
29 29 import java.util.Map;
30 30 import java.util.StringJoiner;
31 31  
32   -import static com.yunpian.sdk.constant.Code.*;
33   -
34 32 /**
35 33 * 云片短信客户端的实现类
36 34 *
... ... @@ -49,7 +47,7 @@ public class YunpianSmsClient extends AbstractSmsClient {
49 47 };
50 48  
51 49 public YunpianSmsClient(SmsChannelProperties properties) {
52   - super(properties);
  50 + super(properties, new YunpianSmsCodeMapping());
53 51 }
54 52  
55 53 @Override
... ... @@ -66,7 +64,8 @@ public class YunpianSmsClient extends AbstractSmsClient {
66 64 }
67 65  
68 66 @Override
69   - protected SmsCommonResult doSend(Long sendLogId, String mobile, String apiTemplateId, Map<String, Object> templateParams) throws Throwable {
  67 + protected SmsCommonResult<SmsSendRespDTO> doSend(Long sendLogId, String mobile,
  68 + String apiTemplateId, Map<String, Object> templateParams) throws Throwable {
70 69 // 构建参数
71 70 Map<String, String> request = new HashMap<>();
72 71 request.put(YunpianConstant.APIKEY, properties.getApiKey());
... ... @@ -82,8 +81,12 @@ public class YunpianSmsClient extends AbstractSmsClient {
82 81 throw sendResult.getThrowable();
83 82 }
84 83 // 解析结果
85   - return SmsCommonResult.success(parseSendFailureType(sendResult), // 将 API 短信平台,解析成统一的错误码
86   - String.valueOf(sendResult.getCode()), formatResultMsg(sendResult), null, getApiSerialNo(sendResult));
  84 + SmsSendRespDTO data = null;
  85 + if (sendResult.getData() != null) {
  86 + data = new SmsSendRespDTO().setSerialNo(String.valueOf(sendResult.getData().getSid()));
  87 + }
  88 + return SmsCommonResult.build(String.valueOf(sendResult.getCode()), formatResultMsg(sendResult), null,
  89 + data, codeMapping);
87 90 }
88 91  
89 92 private static String formatTplValue(Map<String, Object> templateParams) {
... ... @@ -103,25 +106,6 @@ public class YunpianSmsClient extends AbstractSmsClient {
103 106 return sendResult.getMsg() + " => " + sendResult.getDetail();
104 107 }
105 108  
106   - private static SmsSendFailureTypeEnum parseSendFailureType(Result<SmsSingleSend> sendResult) {
107   - Integer code = sendResult.getCode();
108   - switch (code) {
109   - case OK: return null;
110   - case ARGUMENT_MISSING: return SmsSendFailureTypeEnum.SMS_API_PARAM_ERROR;
111   - case BAD_ARGUMENT_FORMAT: return SmsSendFailureTypeEnum.SMS_TEMPLATE_PARAM_ERROR;
112   - case TPL_NOT_FOUND: return SmsSendFailureTypeEnum.SMS_TEMPLATE_NOT_EXISTS;
113   - case TPL_NOT_VALID: return SmsSendFailureTypeEnum.SMS_TEMPLATE_INVALID;
114   - }
115   - return SmsSendFailureTypeEnum.SMS_UNKNOWN;
116   - }
117   -
118   - private static String getApiSerialNo(Result<SmsSingleSend> sendResult) {
119   - if (sendResult.getData() == null) {
120   - return null;
121   - }
122   - return String.valueOf(sendResult.getData().getSid());
123   - }
124   -
125 109 /**
126 110 * 云片的比较复杂,又是加密又是套娃的
127 111 */
... ...
src/main/java/cn/iocoder/dashboard/framework/sms/core/client/impl/yunpian/YunpianSmsCodeMapping.java 0 → 100644
  1 +package cn.iocoder.dashboard.framework.sms.core.client.impl.yunpian;
  2 +
  3 +import cn.iocoder.dashboard.common.exception.ErrorCode;
  4 +import cn.iocoder.dashboard.framework.sms.core.client.SmsCodeMapping;
  5 +
  6 +import static cn.iocoder.dashboard.common.exception.enums.GlobalErrorCodeConstants.SUCCESS;
  7 +import static cn.iocoder.dashboard.framework.sms.core.enums.SmsFrameworkErrorCodeConstants.*;
  8 +import static com.yunpian.sdk.constant.Code.*;
  9 +
  10 +/**
  11 + * 云片的 SmsCodeMapping 实现类
  12 + *
  13 + * @author 芋道源码
  14 + */
  15 +public class YunpianSmsCodeMapping implements SmsCodeMapping {
  16 +
  17 + @Override
  18 + public ErrorCode apply(String apiCode) {
  19 + int code = Integer.parseInt(apiCode);
  20 + switch (code) {
  21 + case OK: return SUCCESS;
  22 + case ARGUMENT_MISSING: return SMS_API_PARAM_ERROR;
  23 + case BAD_ARGUMENT_FORMAT: return SMS_TEMPLATE_PARAM_ERROR;
  24 + case TPL_NOT_FOUND: return SMS_TEMPLATE_NOT_EXISTS;
  25 + case TPL_NOT_VALID: return SMS_TEMPLATE_INVALID;
  26 + }
  27 + return SMS_UNKNOWN;
  28 + }
  29 +
  30 +}
... ...
src/main/java/cn/iocoder/dashboard/framework/sms/core/SmsConstants.java renamed to src/main/java/cn/iocoder/dashboard/framework/sms/core/enums/SmsConstants.java
1   -package cn.iocoder.dashboard.framework.sms.core;
  1 +package cn.iocoder.dashboard.framework.sms.core.enums;
2 2  
3 3 /**
4 4 * 短信相关常量类
... ...
src/main/java/cn/iocoder/dashboard/framework/sms/core/enums/SmsFrameworkErrorCodeConstants.java 0 → 100644
  1 +package cn.iocoder.dashboard.framework.sms.core.enums;
  2 +
  3 +import cn.iocoder.dashboard.common.exception.ErrorCode;
  4 +
  5 +/**
  6 + * 短信框架的错误码枚举
  7 + *
  8 + * 短信框架,使用 2-001-000-000 段
  9 + *
  10 + * @author 芋道源码
  11 + */
  12 +public interface SmsFrameworkErrorCodeConstants {
  13 +
  14 + // ========== 渠道相关 2001000100 ==========
  15 + ErrorCode SMS_CHANNEL_CLIENT_NOT_EXISTS = new ErrorCode(2001000100, "短信渠道的客户端不存在");
  16 + ErrorCode SMS_CHANNEL_API_KEY_MISSING = new ErrorCode(2001000101, "API Key 不存在");
  17 + ErrorCode SMS_CHANNEL_PERMISSION_DENY = new ErrorCode(2001000102, "没有发送短信的权限");
  18 +
  19 + // ========== 模板相关(200 开头) ==========
  20 + ErrorCode SMS_TEMPLATE_NOT_EXISTS = new ErrorCode(200, "短信模板不存在");
  21 + ErrorCode SMS_TEMPLATE_DISABLE = new ErrorCode(201, "短信模板被禁用"); // 例如说,我们在管理后台禁用了
  22 + ErrorCode SMS_TEMPLATE_INVALID = new ErrorCode(202, "短信模板不可用"); // 例如说,短信模板正在审核中
  23 + ErrorCode SMS_TEMPLATE_PARAM_ERROR = new ErrorCode(203, "模板参数不正确");
  24 +
  25 + // ========== 其它相关(900 开头) ==========
  26 + ErrorCode SMS_API_PARAM_ERROR = new ErrorCode(900, "请求参数缺失");
  27 +
  28 + ErrorCode SMS_SEND_LIMIT_CONTROL = new ErrorCode(997, "业务限流"); // 将短信发送频率限制在正常的业务限流范围内。默认短信验证码:使用同一签名,对同一个手机号验证码,支持 1 条 / 分钟,5 条 / 小时,累计 10 条 / 天。
  29 + ErrorCode EXCEPTION = new ErrorCode(998, "调用异常");
  30 + ErrorCode SMS_UNKNOWN = new ErrorCode(999, "未知错误,需要解析");
  31 +
  32 +}
... ...
src/main/java/cn/iocoder/dashboard/framework/sms/core/enums/SmsSendFailureTypeEnum.java deleted
1   -package cn.iocoder.dashboard.framework.sms.core.enums;
2   -
3   -import lombok.AllArgsConstructor;
4   -import lombok.Getter;
5   -
6   -/**
7   - * 短信的发送失败类型的枚举
8   - *
9   - * @author 芋道源码
10   - */
11   -@Getter
12   -@AllArgsConstructor
13   -public enum SmsSendFailureTypeEnum {
14   -
15   - // ========== 渠道相关(100 开头) ==========
16   - SMS_CHANNEL_CLIENT_NOT_EXISTS(100, "短信渠道的客户端不存在"),
17   - SMS_CHANNEL_API_KEY_MISSING(101, "API Key 不存在"),
18   - SMS_CHANNEL_PERMISSION_DENY(102, "没有发送短信的权限"),
19   -
20   - // ========== 模板相关(200 开头) ==========
21   - SMS_TEMPLATE_NOT_EXISTS(200, "短信模板不存在"),
22   - SMS_TEMPLATE_DISABLE(201, "短信模板被禁用"), // 例如说,我们在管理后台禁用了
23   - SMS_TEMPLATE_INVALID(202, "短信模板不可用"), // 例如说,短信模板正在审核中
24   - SMS_TEMPLATE_PARAM_ERROR(203, "模板参数不正确"),
25   -
26   - // ========== 其它相关(900 开头) ==========
27   - SMS_API_PARAM_ERROR(900, "请求参数缺失"),
28   -
29   - SMS_SEND_LIMIT_CONTROL(997, "业务限流"), // 将短信发送频率限制在正常的业务限流范围内。默认短信验证码:使用同一签名,对同一个手机号验证码,支持 1 条 / 分钟,5 条 / 小时,累计 10 条 / 天。
30   - SMS_SEND_EXCEPTION(998, "发送异常"),
31   - SMS_UNKNOWN(999, "未知错误,需要解析")
32   - ;
33   -
34   - /**
35   - * 失败类型
36   - */
37   - private final int type;
38   - /**
39   - * 失败提示
40   - */
41   - private final String msg;
42   -
43   -}
src/main/java/cn/iocoder/dashboard/framework/web/core/handler/GlobalExceptionHandler.java
... ... @@ -3,7 +3,6 @@ package cn.iocoder.dashboard.framework.web.core.handler;
3 3 import cn.hutool.core.exceptions.ExceptionUtil;
4 4 import cn.hutool.core.map.MapUtil;
5 5 import cn.hutool.extra.servlet.ServletUtil;
6   -import cn.iocoder.dashboard.common.exception.GlobalException;
7 6 import cn.iocoder.dashboard.common.exception.ServiceException;
8 7 import cn.iocoder.dashboard.common.pojo.CommonResult;
9 8 import cn.iocoder.dashboard.framework.logger.apilog.core.service.ApiErrorLogFrameworkService;
... ... @@ -96,9 +95,6 @@ public class GlobalExceptionHandler {
96 95 if (ex instanceof AccessDeniedException) {
97 96 return accessDeniedExceptionHandler(request, (AccessDeniedException) ex);
98 97 }
99   - if (ex instanceof GlobalException) {
100   - return globalExceptionHandler(request, (GlobalException) ex);
101   - }
102 98 return defaultExceptionHandler(request, ex);
103 99 }
104 100  
... ... @@ -223,25 +219,6 @@ public class GlobalExceptionHandler {
223 219 }
224 220  
225 221 /**
226   - * 处理全局异常 ServiceException
227   - *
228   - * 例如说,Dubbo 请求超时,调用的 Dubbo 服务系统异常
229   - */
230   - @ExceptionHandler(value = GlobalException.class)
231   - public CommonResult<?> globalExceptionHandler(HttpServletRequest req, GlobalException ex) {
232   - // 系统异常时,才打印异常日志
233   - if (INTERNAL_SERVER_ERROR.getCode().equals(ex.getCode())) {
234   - // 插入异常日志
235   - this.createExceptionLog(req, ex);
236   - // 普通全局异常,打印 info 日志即可
237   - } else {
238   - log.info("[globalExceptionHandler]", ex);
239   - }
240   - // 返回 ERROR CommonResult
241   - return CommonResult.error(ex);
242   - }
243   -
244   - /**
245 222 * 处理系统异常,兜底处理所有的一切
246 223 */
247 224 @ExceptionHandler(value = Exception.class)
... ... @@ -250,7 +227,7 @@ public class GlobalExceptionHandler {
250 227 // 插入异常日志
251 228 this.createExceptionLog(req, ex);
252 229 // 返回 ERROR CommonResult
253   - return CommonResult.error(INTERNAL_SERVER_ERROR.getCode(), INTERNAL_SERVER_ERROR.getMessage());
  230 + return CommonResult.error(INTERNAL_SERVER_ERROR.getCode(), INTERNAL_SERVER_ERROR.getMsg());
254 231 }
255 232  
256 233 private void createExceptionLog(HttpServletRequest req, Throwable e) {
... ...
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/SysSmsSendLogService.java
1 1 package cn.iocoder.dashboard.modules.system.service.sms;
2 2  
3   -import cn.iocoder.dashboard.framework.sms.core.enums.SmsSendFailureTypeEnum;
4 3 import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
5 4  
6 5 import java.util.Map;
... ...
src/main/java/cn/iocoder/dashboard/modules/system/service/user/SysUserServiceImpl.java
... ... @@ -358,7 +358,7 @@ public class SysUserServiceImpl implements SysUserService {
358 358 }
359 359 // 如果存在,判断是否允许更新
360 360 if (!isUpdateSupport) {
361   - respVO.getFailureUsernames().put(importUser.getUsername(), USER_USERNAME_EXISTS.getMessage());
  361 + respVO.getFailureUsernames().put(importUser.getUsername(), USER_USERNAME_EXISTS.getMsg());
362 362 return;
363 363 }
364 364 SysUserDO updateUser = SysUserConvert.INSTANCE.convert(importUser);
... ...
src/test/java/cn/iocoder/dashboard/util/AssertUtils.java
... ... @@ -62,7 +62,7 @@ public class AssertUtils {
62 62 ServiceException serviceException = assertThrows(ServiceException.class, executable);
63 63 // 校验错误码
64 64 Assertions.assertEquals(errorCode.getCode(), serviceException.getCode(), "错误码不匹配");
65   - String message = ServiceExceptionUtil.doFormat(errorCode.getCode(), errorCode.getMessage(), messageParams);
  65 + String message = ServiceExceptionUtil.doFormat(errorCode.getCode(), errorCode.getMsg(), messageParams);
66 66 Assertions.assertEquals(message, serviceException.getMessage(), "错误提示不匹配");
67 67 }
68 68  
... ...