org.sophon.module.sms.integration.client.dto.SmsInvokeResult Maven / Gradle / Ivy
package org.sophon.module.sms.integration.client.dto;
import java.io.Serializable;
import org.apache.commons.lang3.StringUtils;
import org.sophon.commons.exception.ErrorCodeMapping;
import org.sophon.commons.exception.SophonException;
import lombok.Data;
import lombok.ToString;
import lombok.experimental.Accessors;
/**
* 短信的 调用结果包装类
*
* 考虑到不同的平台,返回的 code 和 msg 是不同的,所以统一额外返回 {@link #apiCode} 和 {@link #apiMsg} 字段
*
* 另外,一些短信平台(例如说阿里云、腾讯云)会返回一个请求编号,用于排查请求失败的问题,我们设置到 {@link #apiRequestId} 字段
*
* @author moushaokun
* @since time: 2023-03-13 10:53
*/
@Data
@ToString
@Accessors(chain = true)
public class SmsInvokeResult implements Serializable {
private static final long serialVersionUID = 5477428092949269543L;
/**
* API 返回错误码
*
* 由于第三方的错误码可能是字符串,所以使用 String 类型
*/
private String apiCode;
/**
* API 返回提示
*/
private String apiMsg;
/**
* API 请求编号
*/
private String apiRequestId;
/**
* 请求结果
*/
private T data;
/**
* 是否成功过
*/
private boolean success;
/**
* 异常信息
*/
private SophonException exception;
private SmsInvokeResult() {
}
public static SmsInvokeResult build(boolean success, String apiCode, String apiMsg,
String apiRequestId, T data,
ErrorCodeMapping errorCodeMapping) {
SmsInvokeResult result = new SmsInvokeResult<>();
result.setSuccess(success);
result.setApiCode(apiCode);
result.setApiMsg(apiMsg);
result.setApiRequestId(apiRequestId);
result.setData(data);
if (!success && StringUtils.isNotBlank(apiCode) && errorCodeMapping != null) {
result.setException(new SophonException(errorCodeMapping.apply(apiCode)));
}
return result;
}
public static SmsInvokeResult error(SophonException exception) {
SmsInvokeResult result = new SmsInvokeResult<>();
result.setSuccess(false);
result.setException(exception);
return result;
}
public static SmsInvokeResult success(T data) {
SmsInvokeResult result = new SmsInvokeResult<>();
result.setSuccess(true);
result.setData(data);
return result;
}
}