diff --git a/njcn-common/src/main/java/com/njcn/common/utils/PubUtils.java b/njcn-common/src/main/java/com/njcn/common/utils/PubUtils.java index e50c723..d1f0224 100644 --- a/njcn-common/src/main/java/com/njcn/common/utils/PubUtils.java +++ b/njcn-common/src/main/java/com/njcn/common/utils/PubUtils.java @@ -1,11 +1,23 @@ package com.njcn.common.utils; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.type.TypeFactory; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.exception.BusinessException; + +import java.io.IOException; +import java.lang.reflect.Method; +import java.lang.reflect.Type; import java.math.BigDecimal; import java.math.RoundingMode; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; +import java.text.SimpleDateFormat; +import java.time.Instant; +import java.util.*; +import java.util.concurrent.TimeUnit; /** * @author hongawen @@ -14,6 +26,9 @@ import java.util.Optional; */ public class PubUtils { + private final static ObjectMapper MAPPER = new ObjectMapper(); + + /** * 根据参数返回double的四舍五入值 * @@ -68,4 +83,128 @@ public class PubUtils { .orElse(Double.MIN_VALUE); } + /*** + * 将instant转为date 处理8小时误差 + * @author hongawen + * @date 2023/7/20 15:58 + * @param instant 日期 + * @return Instant + */ + public static Date instantToDate(Instant instant){ + return Date.from(instant.minusMillis(TimeUnit.HOURS.toMillis(8))); + } + + /** + * 根据起始时间和截止时间返回yyyy-MM-dd的日期, + * + * @param startTime 起始时间 + * @param endTime 截止时间 + */ + public static List getTimes(Date startTime, Date endTime) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + List result = new ArrayList<>(); + Calendar start = Calendar.getInstance(); + start.setTime(startTime); + Calendar end = Calendar.getInstance(); + end.setTime(endTime); + end.set(end.get(Calendar.YEAR), end.get(Calendar.MONTH), end.get(Calendar.DAY_OF_MONTH), 0, 0, 0); + long interval = end.getTimeInMillis() - start.getTimeInMillis(); + result.add(sdf.format(start.getTime())); + if (interval > 0) { + int days = (int) (interval / 86400000); + for (int i = 0; i < days; i++) { + start.add(Calendar.DAY_OF_MONTH, 1); + result.add(sdf.format(start.getTime())); + } + } + return result; + } + + /** + * 将当前时间的秒数置为0 + * + * @param date 时间 + */ + public static Date getSecondsAsZero(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.set(Calendar.SECOND, 0); + return calendar.getTime(); + } + + + /*** + * 将date转为instant 处理8小时误差 + * @author hongawen + * @date 2023/7/20 15:58 + * @param date 日期 + * @return Instant + */ + public static Instant dateToInstant(Date date){ + return date.toInstant().plusMillis(TimeUnit.HOURS.toMillis(8)); + } + + + /** + * 用于获取对象中,前缀一样,后缀为2~50的属性值 + * + * @param object 待操作对象 + * @param methodPrefix 方法前缀 + * @param number 方法后缀 + * @return 对象属性值 + */ + public static Float getValueByMethod(Object object, String methodPrefix, Integer number) { + try { + Method method = object.getClass().getMethod(methodPrefix + number); + return (Float) method.invoke(object); + } catch (Exception e) { + throw new BusinessException(CommonResponseEnum.REFLECT_METHOD_EXCEPTION); + } + } + + /** + * 根据参数返回float的四舍五入值 + * + * @param i 保留的位数 + * @param value float原值 + */ + public static Float floatRound(int i, float value) { + BigDecimal bp = new BigDecimal(value); + return bp.setScale(i, RoundingMode.HALF_UP).floatValue(); + } + + + /** + * 将JSON转为实体对象 + * + * @param jsonStr json + * @param targetType 对象类型 + * @param 对象 + */ + public static T json2obj(String jsonStr, Type targetType) { + try { + JavaType javaType = TypeFactory.defaultInstance().constructType(targetType); + MAPPER.registerModule(new JavaTimeModule()); + MAPPER.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + return MAPPER.readValue(jsonStr, javaType); + } catch (IOException e) { + throw new IllegalArgumentException("将JSON转换为对象时发生错误:" + jsonStr, e); + } + } + + /** + * 将实体对象转为JSON + * + * @param object 实体对象 + */ + public static String obj2json(Object object) { + try { + MAPPER.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); + return MAPPER.writeValueAsString(object); + } catch (IOException e) { + throw new IllegalArgumentException("将实体对象转为JSON时发生错误:" + object, e); + } + } + + }