diff --git a/src/main/java/com/yexuejc/base/pojo/ResponseVO.java b/src/main/java/com/yexuejc/base/pojo/BasicResponse.java similarity index 65% rename from src/main/java/com/yexuejc/base/pojo/ResponseVO.java rename to src/main/java/com/yexuejc/base/pojo/BasicResponse.java index 49edc92..6a0d9ba 100644 --- a/src/main/java/com/yexuejc/base/pojo/ResponseVO.java +++ b/src/main/java/com/yexuejc/base/pojo/BasicResponse.java @@ -11,7 +11,7 @@ import com.yexuejc.base.util.JsonUtil; * @author ISC * @date 2023/08/18 */ -public class ResponseVO implements Serializable { +public class BasicResponse implements Serializable { public enum Codes { /** 处理成功 */ SUCCESS("S"), @@ -38,10 +38,10 @@ public class ResponseVO implements Serializable { /** 业务异常 */ private String bizMessage; - public ResponseVO() { + public BasicResponse() { } - public ResponseVO(String code, String msg) { + public BasicResponse(String code, String msg) { this.code = code; this.message = msg; } @@ -50,7 +50,7 @@ public class ResponseVO implements Serializable { return code; } - public ResponseVO setCode(String code) { + public BasicResponse setCode(String code) { this.code = code; return this; } @@ -59,7 +59,7 @@ public class ResponseVO implements Serializable { return message; } - public ResponseVO setMessage(String message) { + public BasicResponse setMessage(String message) { this.message = message; return this; } @@ -68,7 +68,7 @@ public class ResponseVO implements Serializable { return bizCode; } - public ResponseVO setBizCode(String bizCode) { + public BasicResponse setBizCode(String bizCode) { this.bizCode = bizCode; return this; } @@ -77,7 +77,7 @@ public class ResponseVO implements Serializable { return bizMessage; } - public ResponseVO setBizMessage(String bizMessage) { + public BasicResponse setBizMessage(String bizMessage) { this.bizMessage = bizMessage; return this; } @@ -87,8 +87,8 @@ public class ResponseVO implements Serializable { * * @return */ - public static ResponseVO success() { - return new ResponseVO(Codes.SUCCESS.code, SymbolicConsts.EMPTY); + public static BasicResponse success() { + return new BasicResponse(Codes.SUCCESS.code, SymbolicConsts.EMPTY); } /** @@ -97,8 +97,8 @@ public class ResponseVO implements Serializable { * @param message * @return */ - public static ResponseVO success(String message) { - return new ResponseVO(Codes.SUCCESS.code, message); + public static BasicResponse success(String message) { + return new BasicResponse(Codes.SUCCESS.code, message); } /** @@ -107,8 +107,8 @@ public class ResponseVO implements Serializable { * @param message * @return */ - public static ResponseVO fail(String message) { - return new ResponseVO(Codes.SYSTEM_ERROR.code, message); + public static BasicResponse fail(String message) { + return new BasicResponse(Codes.SYSTEM_ERROR.code, message); } /** @@ -117,8 +117,8 @@ public class ResponseVO implements Serializable { * @param errorCode * @return */ - public static ResponseVO fail4Code(String errorCode) { - return new ResponseVO(errorCode, SymbolicConsts.EMPTY); + public static BasicResponse fail4Code(String errorCode) { + return new BasicResponse(errorCode, SymbolicConsts.EMPTY); } @@ -129,8 +129,8 @@ public class ResponseVO implements Serializable { * @param message * @return */ - public static ResponseVO fail(String errorCode, String message) { - return new ResponseVO(errorCode, message); + public static BasicResponse fail(String errorCode, String message) { + return new BasicResponse(errorCode, message); } @Override diff --git a/src/main/java/com/yexuejc/base/pojo/ListResponse.java b/src/main/java/com/yexuejc/base/pojo/ListResponse.java new file mode 100644 index 0000000..8624a07 --- /dev/null +++ b/src/main/java/com/yexuejc/base/pojo/ListResponse.java @@ -0,0 +1,123 @@ +package com.yexuejc.base.pojo; + +import java.util.List; + + +/** + * API結果が戻りする、集合型 + * + * @author ISC + * @date 2023/08/18 + */ + +public class ListResponse extends BasicResponse { + + /** 数据对象 */ + private List data; + /** 总件数 */ + private Long totalCount; + + public ListResponse() { + } + + public ListResponse(List data) { + this.data = data; + this.totalCount = data == null ? 0L : (long) data.size(); + } + + public ListResponse(List data, Long totalCount) { + this.data = data; + this.totalCount = totalCount; + } + + public ListResponse(String code, String msg, List data, Long totalCount) { + super(code, msg); + this.data = data; + this.totalCount = totalCount; + } + + public static ListResponse of(List pagedList, long count) { + return new ListResponse<>(pagedList, count); + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public Long getTotalCount() { + return totalCount; + } + + public void setTotalCount(Long totalCount) { + this.totalCount = totalCount; + } + + /** + * 创建成功结果 + * + * @param data + * @param + * @return + */ + public static ListResponse success(List data) { + return new ListResponse<>(data); + } + + /** + * 创建失败并设定message,默认code + * + * @param message + * @return + */ + public static ListResponse fail(String message) { + ListResponse vo = new ListResponse<>(); + vo.setCode(Codes.SYSTEM_ERROR.code).setMessage(message); + return vo; + } + + /** + * 创建失败并设定message,code + * + * @param errorCode + * @param message + * @return + */ + public static ListResponse fail(String errorCode, String message) { + ListResponse vo = new ListResponse<>(); + vo.setCode(errorCode).setMessage(message); + return vo; + } + + @Override + public ListResponse setCode(String code) { + super.setCode(code); + return this; + } + + @Override + public ListResponse setMessage(String message) { + super.setMessage(message); + return this; + } + + @Override + public ListResponse setBizCode(String errCode) { + super.setBizCode(errCode); + return this; + } + + @Override + public ListResponse setBizMessage(String errCodeDes) { + super.setBizMessage(errCodeDes); + return this; + } + + @Override + public String toString() { + return super.toString(); + } +} diff --git a/src/main/java/com/yexuejc/base/pojo/ListResponseVO.java b/src/main/java/com/yexuejc/base/pojo/ListResponseVO.java deleted file mode 100644 index e412191..0000000 --- a/src/main/java/com/yexuejc/base/pojo/ListResponseVO.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.yexuejc.base.pojo; - -import java.util.List; - -import com.yexuejc.base.constant.SymbolicConsts; - - -/** - * API結果が戻りする、集合型 - * - * @author ISC - * @date 2023/08/18 - */ - -public class ListResponseVO extends ResponseVO { - - private List data; - - public ListResponseVO() { - super(); - } - - public ListResponseVO(List data) { - this.data = data; - setMessage(SymbolicConsts.EMPTY); - setCode(Codes.SUCCESS.code); - } - - public ListResponseVO(List data, String code, String msg) { - super(code, msg); - this.data = data; - } - - public List getData() { - return data; - } - - public ListResponseVO setData(List data) { - this.data = data; - return this; - } - - /** - * 创建成功结果 - * @param data - * @return - * @param - */ - public static ListResponseVO success(List data) { - return new ListResponseVO<>(data); - } - - /** - * 创建失败并设定message,默认code - * @param message - * @return - */ - public static ListResponseVO fail(String message) { - ListResponseVO vo = new ListResponseVO<>(); - vo.setCode(Codes.SYSTEM_ERROR.code).setMessage(message); - return vo; - } - - /** - * 创建失败并设定message,code - * @param errorCode - * @param message - * @return - */ - public static ListResponseVO fail(String errorCode, String message) { - ListResponseVO vo = new ListResponseVO<>(); - vo.setCode(errorCode).setMessage(message); - return vo; - } - - @Override - public ListResponseVO setCode(String code) { - super.setCode(code); - return this; - } - - @Override - public ListResponseVO setMessage(String message) { - super.setMessage(message); - return this; - } - - @Override - public ListResponseVO setBizCode(String errCode) { - super.setBizCode(errCode); - return this; - } - - @Override - public ListResponseVO setBizMessage(String errCodeDes) { - super.setBizMessage(errCodeDes); - return this; - } - - @Override - public String toString() { - return super.toString(); - } -} diff --git a/src/main/java/com/yexuejc/base/pojo/ObjectResponseVO.java b/src/main/java/com/yexuejc/base/pojo/ObjectResponse.java similarity index 61% rename from src/main/java/com/yexuejc/base/pojo/ObjectResponseVO.java rename to src/main/java/com/yexuejc/base/pojo/ObjectResponse.java index 165aaf5..90bcdce 100644 --- a/src/main/java/com/yexuejc/base/pojo/ObjectResponseVO.java +++ b/src/main/java/com/yexuejc/base/pojo/ObjectResponse.java @@ -9,20 +9,20 @@ import com.yexuejc.base.constant.SymbolicConsts; * @author ISC * @date 2023/08/18 */ -public class ObjectResponseVO extends ResponseVO { +public class ObjectResponse extends BasicResponse { private T data; - public ObjectResponseVO() { + public ObjectResponse() { } - public ObjectResponseVO(T data) { + public ObjectResponse(T data) { this.data = data; setMessage(SymbolicConsts.EMPTY); setCode(Codes.SUCCESS.code); } - public ObjectResponseVO(T data, String code, String msg) { + public ObjectResponse(T data, String code, String msg) { super(code, msg); this.data = data; } @@ -32,7 +32,7 @@ public class ObjectResponseVO extends ResponseVO { return data; } - public ObjectResponseVO setData(T data) { + public ObjectResponse setData(T data) { this.data = data; return this; } @@ -43,8 +43,8 @@ public class ObjectResponseVO extends ResponseVO { * @return * @param */ - public static ObjectResponseVO success(T data) { - return new ObjectResponseVO<>(data); + public static ObjectResponse success(T data) { + return new ObjectResponse<>(data); } /** @@ -52,8 +52,8 @@ public class ObjectResponseVO extends ResponseVO { * @param message * @return */ - public static ObjectResponseVO fail(String message) { - ObjectResponseVO vo = new ObjectResponseVO<>(); + public static ObjectResponse fail(String message) { + ObjectResponse vo = new ObjectResponse<>(); vo.setCode(Codes.SYSTEM_ERROR.code).setMessage(message); return vo; } @@ -64,32 +64,32 @@ public class ObjectResponseVO extends ResponseVO { * @param message * @return */ - public static ObjectResponseVO fail(String errorCode, String message) { - ObjectResponseVO vo = new ObjectResponseVO<>(); + public static ObjectResponse fail(String errorCode, String message) { + ObjectResponse vo = new ObjectResponse<>(); vo.setCode(errorCode).setMessage(message); return vo; } @Override - public ObjectResponseVO setCode(String code) { + public ObjectResponse setCode(String code) { super.setCode(code); return this; } @Override - public ObjectResponseVO setMessage(String message) { + public ObjectResponse setMessage(String message) { super.setMessage(message); return this; } @Override - public ObjectResponseVO setBizCode(String bizCode) { + public ObjectResponse setBizCode(String bizCode) { super.setBizCode(bizCode); return this; } @Override - public ObjectResponseVO setBizMessage(String bizMessage) { + public ObjectResponse setBizMessage(String bizMessage) { super.setBizMessage(bizMessage); return this; } diff --git a/src/main/java/com/yexuejc/base/pojo/SignRequestVO.java b/src/main/java/com/yexuejc/base/pojo/SignRequest.java similarity index 93% rename from src/main/java/com/yexuejc/base/pojo/SignRequestVO.java rename to src/main/java/com/yexuejc/base/pojo/SignRequest.java index 1bc017e..ef0ed9f 100644 --- a/src/main/java/com/yexuejc/base/pojo/SignRequestVO.java +++ b/src/main/java/com/yexuejc/base/pojo/SignRequest.java @@ -10,7 +10,7 @@ import com.yexuejc.base.util.JsonUtil; * @author: maxf * @date: 2018/5/12 14:52 */ -public class SignRequestVO implements Serializable { +public class SignRequest implements Serializable { private static final long serialVersionUID = 9171765814642105098L; /** diff --git a/src/main/java/com/yexuejc/base/pojo/SignResponseVO.java b/src/main/java/com/yexuejc/base/pojo/SignResponse.java similarity index 65% rename from src/main/java/com/yexuejc/base/pojo/SignResponseVO.java rename to src/main/java/com/yexuejc/base/pojo/SignResponse.java index 8598113..44baa1a 100644 --- a/src/main/java/com/yexuejc/base/pojo/SignResponseVO.java +++ b/src/main/java/com/yexuejc/base/pojo/SignResponse.java @@ -6,7 +6,7 @@ package com.yexuejc.base.pojo; * @author maxiaofeng * @date 2025/9/25 17:35 */ -public class SignResponseVO extends ObjectResponseVO { +public class SignResponse extends ObjectResponse { /** * 签名 */ @@ -16,37 +16,37 @@ public class SignResponseVO extends ObjectResponseVO { return sign; } - public SignResponseVO setSign(String sign) { + public SignResponse setSign(String sign) { this.sign = sign; return this; } @Override - public SignResponseVO setData(T data) { + public SignResponse setData(T data) { super.setData(data); return this; } @Override - public SignResponseVO setMessage(String message) { + public SignResponse setMessage(String message) { super.setMessage(message); return this; } @Override - public SignResponseVO setCode(String code) { + public SignResponse setCode(String code) { super.setCode(code); return this; } @Override - public SignResponseVO setBizCode(String bizCode) { + public SignResponse setBizCode(String bizCode) { super.setBizCode(bizCode); return this; } @Override - public SignResponseVO setBizMessage(String message) { + public SignResponse setBizMessage(String message) { super.setBizMessage(message); return this; } diff --git a/src/main/java/com/yexuejc/base/util/ObjUtil.java b/src/main/java/com/yexuejc/base/util/ObjUtil.java index 55cf943..8a4e5f8 100644 --- a/src/main/java/com/yexuejc/base/util/ObjUtil.java +++ b/src/main/java/com/yexuejc/base/util/ObjUtil.java @@ -1,17 +1,32 @@ package com.yexuejc.base.util; -import com.yexuejc.base.annotation.ToUeProperty; - -import java.io.*; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.lang.reflect.Array; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.Collectors; +import com.yexuejc.base.annotation.ToUeProperty; +import com.yexuejc.base.exception.BaseException; + /** * 对象工具:对类的操作 * @@ -27,6 +42,160 @@ public class ObjUtil { private ObjUtil() { } + /** + * 将对象转换为BigDecimal + * + * @param obj 要转换的对象 + * @return BigDecimal + */ + public static BigDecimal parseBigDecimal(Object obj) { + if (StrUtil.isEmpty(obj)) { + return BigDecimal.ZERO; + } + if (obj instanceof BigDecimal) { + return (BigDecimal) obj; + } + return new BigDecimal(obj.toString()); + } + + /** + * 比较两个对象的长度或大小 + * + * @param obj1 第一个对象 + * @param obj2 第二个对象 + * @return 长度相等返回true,否则返回false + */ + public static boolean compareLength(Object obj1, Object obj2) { + // 如果两个对象都为null,返回true + if (obj1 == null && obj2 == null) { + return true; + } + + // 如果只有一个对象为null,返回false + if (obj1 == null || obj2 == null) { + return false; + } + + // 如果是字符串类型,比较字符数 + if (obj1 instanceof String && obj2 instanceof String) { + String str1 = (String) obj1; + String str2 = (String) obj2; + return str1.length() == str2.length(); + } + + // 如果是集合类型,比较元素数量 + if (obj1 instanceof Collection && obj2 instanceof Collection) { + Collection coll1 = (Collection) obj1; + Collection coll2 = (Collection) obj2; + return coll1.size() == coll2.size(); + } + + // 如果是数组类型,比较数组长度 + if (obj1.getClass().isArray() && obj2.getClass().isArray()) { + return java.lang.reflect.Array.getLength(obj1) == java.lang.reflect.Array.getLength(obj2); + } + + // 其他类型返回false + return false; + } + + + /** + * 判断多个对象是否相等 + * + * @param obj1 目标对象 + * @param tagObjs 标记对象 + * @return 多个对象是否相等的判断结果 + */ + public static boolean equals(Object obj1, Object... tagObjs) { + for (Object tagObj : tagObjs) { + if (!isEqual(obj1, tagObj)) { + return false; + } + } + return true; + } + + /** + * 判断两个对象是否相等 + * + * @param obj1 目标对象 + * @param obj2 标记对象 + * @return 对象是否相等的判断结果 + */ + private static boolean isEqual(Object obj1, Object obj2) { + // 使用标准的Objects.equals处理基本的相等情况 + if (java.util.Objects.equals(obj1, obj2)) { + return true; + } + // 特殊处理:将null与空字符串视为相等 + if ((obj1 == null && "".equals(obj2)) || (obj2 == null && "".equals(obj1))) { + return true; + } + + // 处理数值类型的比较 + if (obj1 instanceof Number && obj2 instanceof Number) { + Number n1 = (Number) obj1; + Number n2 = (Number) obj2; + return n1.doubleValue() == n2.doubleValue(); + } + + return false; + } + + + /** + * 获取对象的子对象 + *

支持的对象类型:String、数组和集合(List,Set)。不支持Map。

+ * + * @param obj 目标对象 + * @param beginIndex 开始索引 + * @param endIndex 结束索引 + * @return 子字符串 + * @throws BaseException 开始索引大于结束索引时抛出异常 + */ + @SuppressWarnings("unchecked") + public static T sub(T obj, int beginIndex, int endIndex) throws BaseException { + if (StrUtil.isEmpty(obj)) { + return obj; + } + if (beginIndex < 0) { + beginIndex = 0; + } + if (endIndex < beginIndex) { + throw new BaseException("开始索引大于结束索引。"); + } + + if (obj instanceof String) { + String str = (String) obj; + if (endIndex > str.length()) { + endIndex = str.length(); + } + return (T) str.substring(beginIndex, endIndex); + } + if (obj.getClass().isArray()) { + if (endIndex > Array.getLength(obj)) { + endIndex = Array.getLength(obj); + } + int newSize = endIndex - beginIndex; + T newArray = (T) Array.newInstance(obj.getClass().getComponentType(), newSize); + + for (int i = 0; i < newSize; i++) { + Array.set(newArray, i, Array.get(obj, beginIndex + i)); + } + return newArray; + } + if (obj instanceof Collection) { + Collection coll = (Collection) obj; + if (endIndex > coll.size()) { + endIndex = coll.size(); + } + int newSize = endIndex - beginIndex; + return (T) coll.stream().skip(beginIndex).limit(newSize).collect(Collectors.toList()); + } + throw new BaseException("不支持的类型。"); + } + /** *

把对象按照{@link ToUeProperty}注解转换

* 字段值为空不输出 @@ -228,10 +397,8 @@ public class ObjUtil { if (null == obj) { return false; } - boolean b = obj.getClass().isPrimitive() - || obj instanceof Integer || obj instanceof Character || obj instanceof Boolean - || obj instanceof Number || obj instanceof String || obj instanceof Double || obj instanceof Float - || obj instanceof Short || obj instanceof Long || obj instanceof Byte; + boolean b = obj.getClass() + .isPrimitive() || obj instanceof Integer || obj instanceof Character || obj instanceof Boolean || obj instanceof Number || obj instanceof String || obj instanceof Double || obj instanceof Float || obj instanceof Short || obj instanceof Long || obj instanceof Byte; if (b) { return true; } @@ -298,8 +465,7 @@ public class ObjUtil { } } catch (Exception e) { log.warning(lowerCaseFirstChar(f.getName()) + " field copy failed. " + e.getMessage()); - log.log(Level.FINER, lowerCaseFirstChar(f.getName()) + - " field copy failed. The exception information is as follows:", e); + log.log(Level.FINER, lowerCaseFirstChar(f.getName()) + " field copy failed. The exception information is as follows:", e); } }); return o; @@ -341,8 +507,7 @@ public class ObjUtil { } } catch (Exception e) { log.warning(lowerCaseFirstChar(fieldName) + " field copy failed. " + e.getMessage()); - log.log(Level.FINER, lowerCaseFirstChar(fieldName) + - " field copy failed. The exception information is as follows:", e); + log.log(Level.FINER, lowerCaseFirstChar(fieldName) + " field copy failed. The exception information is as follows:", e); } }); return o; @@ -359,9 +524,7 @@ public class ObjUtil { List methodList = new ArrayList<>(); Method[] methods = beanClass.getDeclaredMethods(); if (StrUtil.isNotEmpty(startsWith)) { - methodList.addAll(Arrays.stream(methods) - .filter(method -> method.getName().startsWith(startsWith)) - .collect(Collectors.toList())); + methodList.addAll(Arrays.stream(methods).filter(method -> method.getName().startsWith(startsWith)).collect(Collectors.toList())); } else { methodList.addAll(Arrays.asList(methods)); } @@ -404,9 +567,9 @@ public class ObjUtil { /** * 查找目标类中的字段 - * + * * @param targetClass 目标类 - * @param fieldName 字段名 + * @param fieldName 字段名 * @return 找到的字段,未找到返回null */ private static Field findTargetField(Class targetClass, String fieldName) { @@ -424,10 +587,10 @@ public class ObjUtil { /** * 查找setter方法 - * + * * @param targetClass 目标类 - * @param fieldName 字段名 - * @param paramType 参数类型 + * @param fieldName 字段名 + * @param paramType 参数类型 * @return 找到的setter方法,未找到返回null */ private static Method findSetterMethod(Class targetClass, String fieldName, Class paramType) { @@ -441,9 +604,9 @@ public class ObjUtil { /** * 复制字段值 - * - * @param source 源对象 - * @param target 目标对象 + * + * @param source 源对象 + * @param target 目标对象 * @param sourceField 源字段 * @param targetField 目标字段 * @throws IllegalAccessException 反射访问异常 @@ -460,10 +623,10 @@ public class ObjUtil { /** * 设置字段值 - * + * * @param target 目标对象 - * @param field 字段 - * @param value 值 + * @param field 字段 + * @param value 值 * @throws IllegalAccessException 反射访问异常 */ private static void setFieldValue(Object target, Field field, Object value) throws IllegalAccessException {