package com.vci.starter.web.pagemodel; import com.vci.starter.web.constant.PltWebConstant; import com.vci.starter.web.enumpck.ResultCodeEnum; import org.apache.commons.lang3.StringUtils; import javax.servlet.http.HttpServletResponse; import java.util.Arrays; import java.util.Collection; import java.util.List; /** * 统一的数据返回对象,保证feign、restTemplate或者其他rest请求客户端可以统一处理 * @author weidy * @date 2019/12/3 6:57 PM */ public class BaseResult implements java.io.Serializable{ /** * 禁止修改这个值 */ private static final long serialVersionUID = 4746146117790499683L; /** * 是否成功 */ private boolean success = false; /** * 提示信息 */ private String msg = ""; /** * 提示消息多语 */ private Object[] msgObjs; /** * 包含数据对象 */ private T obj = null; /** * 业务编码 */ private int code = ResultCodeEnum.FAIL.code; /** * 链路的ID,用于追查错误信息 */ private String traceId; /** * 请求链路的ID,不是日志的链路,可以用于控制幂等性 */ private String requestTraceId; /** * 异常的类名称 */ private String exceptionClassName; /** * 异常的编号 */ private String exceptionCode; /** * 异常的错误对象 */ private Object[] exceptionObjs; /** * 完成时间 */ private long finishTime; /** * 列表总数,extjs和easyui使用total,layui使用count,这里统一为total,layui可以在table.js里修改源码, */ private long total = 0; /** * 数据,easyui使用的rows, extjs和layui默认为data;easyui也可以修改为data,因此均使用data */ private Collection data ; /** * 树的数据 */ private Collection treeData; public Object[] getMsgObjs() { return msgObjs; } public void setMsgObjs(Object[] msgObjs) { this.msgObjs = msgObjs; } public boolean isSuccess() { return success; } public void setSuccess(boolean success) { this.success = success; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public T getObj() { return obj; } public void setObj(T obj) { this.obj = obj; } public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getTraceId() { return traceId; } public void setTraceId(String traceId) { this.traceId = traceId; } public String getRequestTraceId() { return requestTraceId; } public void setRequestTraceId(String requestTraceId) { this.requestTraceId = requestTraceId; } public String getExceptionClassName() { return exceptionClassName; } public void setExceptionClassName(String exceptionClassName) { this.exceptionClassName = exceptionClassName; } public String getExceptionCode() { return exceptionCode; } public void setExceptionCode(String exceptionCode) { this.exceptionCode = exceptionCode; } public Object[] getExceptionObjs() { return exceptionObjs; } public void setExceptionObjs(Object[] exceptionObjs) { this.exceptionObjs = exceptionObjs; } public long getFinishTime() { return finishTime; } public void setFinishTime(long finishTime) { this.finishTime = finishTime; } public long getTotal() { return total; } public void setTotal(long total) { this.total = total; } public Collection getData() { return data; } public void setData(Collection data) { this.data = data; } public Collection getTreeData() { return treeData; } public void setTreeData(Collection treeData) { this.treeData = treeData; } /** * 成功,没有任何返回信息 * @return 返回统一数据对象 */ public static BaseResult success(){ return success(null); } /** * 成功,有返回数据 * @param obj 返回的数据 * @param 数据类型 * @return 返回统一数据对象 */ public static BaseResult success(T obj){ BaseResult baseResult = new BaseResult<>(); baseResult.setSuccess(true); baseResult.setCode(ResultCodeEnum.SUCCESS.code); baseResult.setObj(obj); return baseResult; } /** * 成功,有返回数据 * @param obj 返回的数据 * @param 数据类型 * @param msg 提示信息 * @return 返回统一数据对象 */ public static BaseResult success(T obj,String msg){ BaseResult baseResult = new BaseResult<>(); baseResult.setSuccess(true); baseResult.setCode(ResultCodeEnum.SUCCESS.code); baseResult.setObj(obj); baseResult.setMsg(msg); return baseResult; } /** * 成功,有返回数据 * @param obj 返回的数据 * @param 数据类型 * @param msg 提示信息 * @param msgObjs 用于格式化消息用的对象 * @return 返回统一数据对象 */ public static BaseResult success(T obj,String msg,Object...msgObjs){ BaseResult baseResult = new BaseResult<>(); baseResult.setSuccess(true); baseResult.setCode(ResultCodeEnum.SUCCESS.code); baseResult.setObj(obj); baseResult.setMsg(msg); return baseResult; } /** * 成功,而且有提示信息 * @param msg 提示信息 * @return 返回统一数据对象 */ public static BaseResult successMsg(String msg){ BaseResult baseResult = new BaseResult(); baseResult.setSuccess(true); baseResult.setCode(ResultCodeEnum.SUCCESS.code); baseResult.setMsg(msg); return baseResult; } /** * 成功,而且有提示信息 * @param msg 提示信息 * @param msgObjs 用于格式化消息用的对象 * @return 返回统一数据对象 */ public static BaseResult successMsg(String msg,Object...msgObjs){ BaseResult baseResult = new BaseResult(); baseResult.setSuccess(true); baseResult.setCode(ResultCodeEnum.SUCCESS.code); baseResult.setMsg(msg); baseResult.setMsgObjs(msgObjs); return baseResult; } /** * 失败,包含错误信息 * @param msg 消息内容 * @return 返回统一数据对象 */ public static BaseResult fail(String msg){ return makeResult(ResultCodeEnum.FAIL.code,msg,null); } /** * 失败,包含错误信息,且包含用于格式化消息用的对象 * @param msg 消息内容 * @param msgObjs 用于格式化消息用的对象 * @return 返回统一数据对象 */ public static BaseResult fail(String msg,Object...msgObjs){ BaseResult baseResult = makeResult(ResultCodeEnum.FAIL.code,msg,null); baseResult.setMsgObjs(msgObjs); return baseResult; } /** * 错误,包含错误信息 * @param msg 错误消息 * @return 返回统一数据对象 */ public static BaseResult error(String msg){ return makeResult(ResultCodeEnum.INTERNAL_SERVER_ERROR.code,msg,null); } /** * 创建返回对象 * @param code 状态码 * @param msg 错误消息 * @param obj 数据对象 * @param 数据对象的所属类型 * @return 统一数据对象 */ public static BaseResult makeResult(int code,String msg,T obj){ BaseResult baseResult = new BaseResult<>(); baseResult.setSuccess(false); baseResult.setCode(code); baseResult.setMsg(msg); baseResult.setObj(obj); return baseResult; } /** * 根据列表获取统一数据对象 * @param dataGrid 列表数据 * @param 列表的元素类型 * @return 统一数据对象 */ public static BaseResult dataGrid(DataGrid dataGrid){ BaseResult baseResult = new BaseResult<>(); if(dataGrid ==null){ baseResult.setCode(ResultCodeEnum.SUCCESS.code); baseResult.setSuccess(true); }else{ if(StringUtils.isNotBlank(dataGrid.getMsg())){ baseResult.setCode(ResultCodeEnum.FAIL.code); baseResult.setSuccess(false); baseResult.setMsg(dataGrid.getMsg()); }else{ baseResult.setCode(ResultCodeEnum.SUCCESS.code); baseResult.setSuccess(true); baseResult.setData(dataGrid.getData()); baseResult.setTotal(dataGrid.getTotal()); } } return baseResult; } /** * 返回list * * @param data 数据 * @param T 泛型标记 * @return R */ public static BaseResult dataList(T data) { return dataList(data, PltWebConstant.DEFAULT_SUCCESS_MESSAGE); } /** * 返回list * * @param data 数据 * @param msg 消息 * @param T 泛型标记 * @return R */ public static BaseResult dataList(T data, String msg) { return dataList(HttpServletResponse.SC_OK, data, msg); } /** * 返回list * * @param code 状态码 * @param data 数据 * @param msg 消息 * @param T 泛型标记 * @return R */ public static BaseResult dataList(int code, T data, String msg) { return new BaseResult<>(code, data, data == null ? PltWebConstant.DEFAULT_NULL_MESSAGE : msg); } private BaseResult(int code, T data, String msg) { this.code = code; this.data = (Collection) data; this.msg = msg; this.success = ResultCodeEnum.SUCCESS.code == code; } public BaseResult() { } /** * 根据列表获取统一数据对象 * @param treeList 树节点集合 * @return 统一数据对象 */ public static BaseResult tree(Collection treeList){ BaseResult baseResult = new BaseResult<>(); baseResult.setCode(ResultCodeEnum.SUCCESS.code); baseResult.setSuccess(true); baseResult.setTreeData(treeList); return baseResult; } @Override public String toString() { return "BaseResult{" + "success=" + success + ", msg='" + msg + '\'' + ", obj=" + obj + ", code='" + code + '\'' + ", traceId='" + traceId + '\'' + ", requestTraceId='" + requestTraceId + '\'' + ", exceptionClassName='" + exceptionClassName + '\'' + ", exceptionCode='" + exceptionCode + '\'' + ", exceptionObjs=" + Arrays.toString(exceptionObjs) + ", finishTime=" + finishTime + ", total=" + total + ", data=" + data + ", treeData=" + treeData + '}'; } }