更新sql和代码规范修改

This commit is contained in:
moxiangrong
2024-02-18 15:26:45 +08:00
parent 6f5e6e4662
commit c132b68745
1293 changed files with 43935 additions and 18456 deletions

View File

@ -25,9 +25,9 @@ public interface SmsClient {
/**
* 发送消息
*
* @param logId 日志编号
* @param mobile 手机号
* @param apiTemplateId 短信 API 的模板编号
* @param logId 日志编号
* @param mobile 手机号
* @param apiTemplateId 短信 API 的模板编号
* @param templateParams 短信模板参数。通过 List 数组,保证参数的顺序
* @return 短信发送结果
*/

View File

@ -8,10 +8,9 @@ import java.util.function.Function;
/**
* 将 API 的错误码,转换为通用的错误码
*
* @author yshop
* @see SmsCommonResult
* @see SmsFrameworkErrorCodeConstants
*
* @author yshop
*/
public interface SmsCodeMapping extends Function<String, ErrorCode> {
}

View File

@ -11,9 +11,9 @@ import lombok.ToString;
/**
* 短信的 CommonResult 拓展类
*
* <p>
* 考虑到不同的平台,返回的 code 和 msg 是不同的,所以统一额外返回 {@link #apiCode} 和 {@link #apiMsg} 字段
*
* <p>
* 另外,一些短信平台(例如说阿里云、腾讯云)会返回一个请求编号,用于排查请求失败的问题,我们设置到 {@link #apiRequestId} 字段
*
* @author yshop
@ -25,7 +25,7 @@ public class SmsCommonResult<T> extends CommonResult<T> {
/**
* API 返回错误码
*
* <p>
* 由于第三方的错误码可能是字符串,所以使用 String 类型
*/
private String apiCode;

View File

@ -40,7 +40,7 @@ public class SmsReceiveRespDTO {
private String serialNo;
/**
* 短信日志编号
*
* <p>
* 对应 SysSmsLogDO 的编号
*/
private Long logId;

View File

@ -21,7 +21,7 @@ public class SmsTemplateRespDTO {
private String content;
/**
* 审核状态
*
* <p>
* 枚举 {@link SmsTemplateAuditStatusEnum}
*/
private Integer auditStatus;

View File

@ -87,10 +87,12 @@ public class SmsClientFactoryImpl implements SmsClientFactory {
Assert.notNull(channelEnum, String.format("渠道类型(%s) 为空", channelEnum));
// 创建客户端
switch (channelEnum) {
case ALIYUN: return new AliyunSmsClient(properties);
case ALIYUN:
return new AliyunSmsClient(properties);
// case DEBUG_DING_TALK: return new DebugDingTalkSmsClient(properties);
// case TENCENT: return new TencentSmsClient(properties);
default: return new AliyunSmsClient(properties);
default:
return new AliyunSmsClient(properties);
}
// 创建失败,错误日志 + 抛出异常

View File

@ -114,10 +114,14 @@ public class AliyunSmsClient extends AbstractSmsClient {
@VisibleForTesting
Integer convertSmsTemplateAuditStatus(Integer templateStatus) {
switch (templateStatus) {
case 0: return SmsTemplateAuditStatusEnum.CHECKING.getStatus();
case 1: return SmsTemplateAuditStatusEnum.SUCCESS.getStatus();
case 2: return SmsTemplateAuditStatusEnum.FAIL.getStatus();
default: throw new IllegalArgumentException(String.format("未知审核状态(%d)", templateStatus));
case 0:
return SmsTemplateAuditStatusEnum.CHECKING.getStatus();
case 1:
return SmsTemplateAuditStatusEnum.SUCCESS.getStatus();
case 2:
return SmsTemplateAuditStatusEnum.FAIL.getStatus();
default:
throw new IllegalArgumentException(String.format("未知审核状态(%d)", templateStatus));
}
}
@ -150,7 +154,7 @@ public class AliyunSmsClient extends AbstractSmsClient {
/**
* 短信接收状态
*
* <p>
* 参见 https://help.aliyun.com/document_detail/101867.html 文档
*
* @author yshop
@ -196,14 +200,14 @@ public class AliyunSmsClient extends AbstractSmsClient {
private String bizId;
/**
* 用户序列号
*
* <p>
* 这里我们传递的是 SysSmsLogDO 的日志编号
*/
@JsonProperty("out_id")
private String outId;
/**
* 短信长度,例如说 1、2、3
*
* <p>
* 140 字节算一条短信,短信长度超过 140 字节时会拆分成多条短信发送
*/
@JsonProperty("sms_size")

View File

@ -7,7 +7,7 @@ import co.yixiang.yshop.framework.sms.core.enums.SmsFrameworkErrorCodeConstants;
/**
* 阿里云的 SmsCodeMapping 实现类
*
* <p>
* 参见 https://help.aliyun.com/document_detail/101346.htm 文档
*
* @author yshop
@ -17,25 +17,38 @@ public class AliyunSmsCodeMapping implements SmsCodeMapping {
@Override
public ErrorCode apply(String apiCode) {
switch (apiCode) {
case "OK": return GlobalErrorCodeConstants.SUCCESS;
case "OK":
return GlobalErrorCodeConstants.SUCCESS;
case "isv.ACCOUNT_NOT_EXISTS":
case "isv.ACCOUNT_ABNORMAL":
case "MissingAccessKeyId": return SmsFrameworkErrorCodeConstants.SMS_ACCOUNT_INVALID;
case "isp.RAM_PERMISSION_DENY": return SmsFrameworkErrorCodeConstants.SMS_PERMISSION_DENY;
case "MissingAccessKeyId":
return SmsFrameworkErrorCodeConstants.SMS_ACCOUNT_INVALID;
case "isp.RAM_PERMISSION_DENY":
return SmsFrameworkErrorCodeConstants.SMS_PERMISSION_DENY;
case "isv.INVALID_JSON_PARAM":
case "isv.INVALID_PARAMETERS": return SmsFrameworkErrorCodeConstants.SMS_API_PARAM_ERROR;
case "isv.BUSINESS_LIMIT_CONTROL": return SmsFrameworkErrorCodeConstants.SMS_SEND_BUSINESS_LIMIT_CONTROL;
case "isv.DAY_LIMIT_CONTROL": return SmsFrameworkErrorCodeConstants.SMS_SEND_DAY_LIMIT_CONTROL;
case "isv.SMS_CONTENT_ILLEGAL": return SmsFrameworkErrorCodeConstants.SMS_SEND_CONTENT_INVALID;
case "isv.SMS_TEMPLATE_ILLEGAL": return SmsFrameworkErrorCodeConstants.SMS_TEMPLATE_INVALID;
case "isv.INVALID_PARAMETERS":
return SmsFrameworkErrorCodeConstants.SMS_API_PARAM_ERROR;
case "isv.BUSINESS_LIMIT_CONTROL":
return SmsFrameworkErrorCodeConstants.SMS_SEND_BUSINESS_LIMIT_CONTROL;
case "isv.DAY_LIMIT_CONTROL":
return SmsFrameworkErrorCodeConstants.SMS_SEND_DAY_LIMIT_CONTROL;
case "isv.SMS_CONTENT_ILLEGAL":
return SmsFrameworkErrorCodeConstants.SMS_SEND_CONTENT_INVALID;
case "isv.SMS_TEMPLATE_ILLEGAL":
return SmsFrameworkErrorCodeConstants.SMS_TEMPLATE_INVALID;
case "isv.SMS_SIGNATURE_ILLEGAL":
case "isv.SIGN_NAME_ILLEGAL":
case "isv.SMS_SIGN_ILLEGAL": return SmsFrameworkErrorCodeConstants.SMS_SIGN_INVALID;
case "isv.SMS_SIGN_ILLEGAL":
return SmsFrameworkErrorCodeConstants.SMS_SIGN_INVALID;
case "isv.AMOUNT_NOT_ENOUGH":
case "isv.OUT_OF_SERVICE": return SmsFrameworkErrorCodeConstants.SMS_ACCOUNT_MONEY_NOT_ENOUGH;
case "isv.MOBILE_NUMBER_ILLEGAL": return SmsFrameworkErrorCodeConstants.SMS_MOBILE_INVALID;
case "isv.TEMPLATE_MISSING_PARAMETERS": return SmsFrameworkErrorCodeConstants.SMS_TEMPLATE_PARAM_ERROR;
default: return SmsFrameworkErrorCodeConstants.SMS_UNKNOWN;
case "isv.OUT_OF_SERVICE":
return SmsFrameworkErrorCodeConstants.SMS_ACCOUNT_MONEY_NOT_ENOUGH;
case "isv.MOBILE_NUMBER_ILLEGAL":
return SmsFrameworkErrorCodeConstants.SMS_MOBILE_INVALID;
case "isv.TEMPLATE_MISSING_PARAMETERS":
return SmsFrameworkErrorCodeConstants.SMS_TEMPLATE_PARAM_ERROR;
default:
return SmsFrameworkErrorCodeConstants.SMS_UNKNOWN;
}
}

View File

@ -24,7 +24,7 @@ import java.util.Map;
/**
* 基于钉钉 WebHook 实现的调试的短信客户端实现类
*
* <p>
* 考虑到省钱,我们使用钉钉 WebHook 模拟发送短信,方便调试。
*
* @author yshop
@ -61,7 +61,7 @@ public class DebugDingTalkSmsClient extends AbstractSmsClient {
/**
* 构建请求地址
*
* <p>
* 参见 https://developers.dingtalk.com/document/app/custom-robot-access/title-nfv-794-g71 文档
*
* @param path 请求路径

View File

@ -189,6 +189,7 @@ public class TencentSmsClient extends AbstractSmsClient {
/**
* 封装查询模版审核状态请求
*
* @param apiTemplateId api 的模版 id
* @return 查询模版审核状态请求
*/

View File

@ -9,7 +9,7 @@ import static co.yixiang.yshop.framework.sms.core.enums.SmsFrameworkErrorCodeCon
/**
* 腾讯云的 SmsCodeMapping 实现类
*
* <p>
* 参见 https://cloud.tencent.com/document/api/382/52075#.E5.85.AC.E5.85.B1.E9.94.99.E8.AF.AF.E7.A0.81
*
* @author : shiwp
@ -19,31 +19,47 @@ public class TencentSmsCodeMapping implements SmsCodeMapping {
@Override
public ErrorCode apply(String apiCode) {
switch (apiCode) {
case TencentSmsClient.API_SUCCESS_CODE: return GlobalErrorCodeConstants.SUCCESS;
case "FailedOperation.ContainSensitiveWord": return SMS_SEND_CONTENT_INVALID;
case TencentSmsClient.API_SUCCESS_CODE:
return GlobalErrorCodeConstants.SUCCESS;
case "FailedOperation.ContainSensitiveWord":
return SMS_SEND_CONTENT_INVALID;
case "FailedOperation.JsonParseFail":
case "MissingParameter.EmptyPhoneNumberSet":
case "LimitExceeded.PhoneNumberCountLimit":
case "FailedOperation.FailResolvePacket": return GlobalErrorCodeConstants.BAD_REQUEST;
case "FailedOperation.InsufficientBalanceInSmsPackage": return SMS_ACCOUNT_MONEY_NOT_ENOUGH;
case "FailedOperation.MarketingSendTimeConstraint": return SMS_SEND_MARKET_LIMIT_CONTROL;
case "FailedOperation.PhoneNumberInBlacklist": return SMS_MOBILE_BLACK;
case "FailedOperation.SignatureIncorrectOrUnapproved": return SMS_SIGN_INVALID;
case "FailedOperation.FailResolvePacket":
return GlobalErrorCodeConstants.BAD_REQUEST;
case "FailedOperation.InsufficientBalanceInSmsPackage":
return SMS_ACCOUNT_MONEY_NOT_ENOUGH;
case "FailedOperation.MarketingSendTimeConstraint":
return SMS_SEND_MARKET_LIMIT_CONTROL;
case "FailedOperation.PhoneNumberInBlacklist":
return SMS_MOBILE_BLACK;
case "FailedOperation.SignatureIncorrectOrUnapproved":
return SMS_SIGN_INVALID;
case "FailedOperation.MissingTemplateToModify":
case "FailedOperation.TemplateIncorrectOrUnapproved": return SMS_TEMPLATE_INVALID;
case "InvalidParameterValue.IncorrectPhoneNumber": return SMS_MOBILE_INVALID;
case "InvalidParameterValue.SdkAppIdNotExist": return SMS_APP_ID_INVALID;
case "FailedOperation.TemplateIncorrectOrUnapproved":
return SMS_TEMPLATE_INVALID;
case "InvalidParameterValue.IncorrectPhoneNumber":
return SMS_MOBILE_INVALID;
case "InvalidParameterValue.SdkAppIdNotExist":
return SMS_APP_ID_INVALID;
case "InvalidParameterValue.TemplateParameterLengthLimit":
case "InvalidParameterValue.TemplateParameterFormatError": return SMS_TEMPLATE_PARAM_ERROR;
case "LimitExceeded.PhoneNumberDailyLimit": return SMS_SEND_DAY_LIMIT_CONTROL;
case "InvalidParameterValue.TemplateParameterFormatError":
return SMS_TEMPLATE_PARAM_ERROR;
case "LimitExceeded.PhoneNumberDailyLimit":
return SMS_SEND_DAY_LIMIT_CONTROL;
case "LimitExceeded.PhoneNumberThirtySecondLimit":
case "LimitExceeded.PhoneNumberOneHourLimit": return SMS_SEND_BUSINESS_LIMIT_CONTROL;
case "LimitExceeded.PhoneNumberOneHourLimit":
return SMS_SEND_BUSINESS_LIMIT_CONTROL;
case "UnauthorizedOperation.RequestPermissionDeny":
case "FailedOperation.ForbidAddMarketingTemplates":
case "FailedOperation.NotEnterpriseCertification":
case "UnauthorizedOperation.IndividualUserMarketingSmsPermissionDeny": return SMS_PERMISSION_DENY;
case "UnauthorizedOperation.RequestIpNotInWhitelist": return SMS_IP_DENY;
case "AuthFailure.SecretIdNotFound": return SMS_ACCOUNT_INVALID;
case "UnauthorizedOperation.IndividualUserMarketingSmsPermissionDeny":
return SMS_PERMISSION_DENY;
case "UnauthorizedOperation.RequestIpNotInWhitelist":
return SMS_IP_DENY;
case "AuthFailure.SecretIdNotFound":
return SMS_ACCOUNT_INVALID;
}
return SmsFrameworkErrorCodeConstants.SMS_UNKNOWN;
}

View File

@ -4,7 +4,7 @@ import co.yixiang.yshop.framework.common.exception.ErrorCode;
/**
* 短信框架的错误码枚举
*
* <p>
* 短信框架,使用 2-001-000-000 段
*
* @author yshop

View File

@ -29,7 +29,7 @@ public class SmsChannelProperties {
private String signature;
/**
* 渠道编码
*
* <p>
* 枚举 {@link SmsChannelEnum}
*/
@NotEmpty(message = "渠道编码不能为空")