From bcade2329d95aa805bc86d7e19a735d3a94c592b Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期三, 16 六月 2021 23:36:26 +0800
Subject: [PATCH] 优化 实体展缓问题

---
 java110-utils/src/main/java/com/java110/utils/util/BeanConvertUtil.java |   67 +++++++++++++++++++++++++++++----
 1 files changed, 58 insertions(+), 9 deletions(-)

diff --git a/java110-utils/src/main/java/com/java110/utils/util/BeanConvertUtil.java b/java110-utils/src/main/java/com/java110/utils/util/BeanConvertUtil.java
old mode 100644
new mode 100755
index ec1ebc7..840961f
--- a/java110-utils/src/main/java/com/java110/utils/util/BeanConvertUtil.java
+++ b/java110-utils/src/main/java/com/java110/utils/util/BeanConvertUtil.java
@@ -1,17 +1,24 @@
 package com.java110.utils.util;
 
 
+import com.alibaba.fastjson.JSONObject;
 import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.beanutils.ConvertUtils;
 import org.apache.commons.beanutils.Converter;
 import org.apache.commons.beanutils.PropertyUtils;
+import org.apache.commons.lang3.reflect.FieldUtils;
+import org.springframework.cglib.beans.BeanCopier;
+import org.springframework.cglib.beans.BeanMap;
 
+import java.lang.reflect.Field;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 /**
  * @ClassName BeanConvertUtil
@@ -29,9 +36,9 @@
     static {
         ConvertUtils.register(new Converter() { //娉ㄥ唽涓�涓棩鏈熻浆鎹㈠櫒
 
-            public Object convert(Class type, Object value) {
+        	public <T> T convert(Class<T> type, Object value) {
                 Date date1 = null;
-                if (value instanceof String) {
+                if (value instanceof String && type.getClass().equals(Date.class)) {
                     String date = (String) value;
                     SimpleDateFormat sdf = null;
                     if (date.contains(":")) {
@@ -44,11 +51,13 @@
                     } catch (ParseException e) {
                         e.printStackTrace();
                     }
-                    return date1;
+                    return type.cast(date1);
                 }
-                return value;
+                return null;
             }
+
         }, Date.class);
+
 
         ConvertUtils.register(new Java110StringConvert(), String.class);
     }
@@ -67,11 +76,38 @@
     public static <T1, T2> T2 covertBean(T1 orgBean, T2 dstBean) {
 
         try {
-            BeanUtils.copyProperties(dstBean, orgBean);
+            //BeanUtils.copyProperties(dstBean, orgBean);
+            if (orgBean instanceof Map) {
+                BeanMap beanMap = BeanMap.create(dstBean);
+                //beanMap.putAll((Map)orgBean);
+                objectFieldsPutMap(dstBean, beanMap, (Map) orgBean);
+                return dstBean;
+            }
+            final BeanCopier beanCopier = BeanCopier.create(orgBean.getClass(), dstBean.getClass(), true);
+            beanCopier.copy(orgBean, dstBean, new Java110Converter());
         } catch (Exception e) {
+            e.printStackTrace();
             throw new RuntimeException("bean杞崲bean澶辫触", e);
         }
         return dstBean;
+    }
+
+    private static void objectFieldsPutMap(Object dstBean, BeanMap beanMap, Map<String,Object> orgMap) {
+        //Field[] fields = dstBean.getClass().getDeclaredFields();
+        Field[] fields = FieldUtils.getAllFields(dstBean.getClass());
+        for (Field field : fields) {
+            if (!orgMap.containsKey(field.getName())) {
+                continue;
+            }
+            Class<?> dstClass = field.getType();
+            //System.out.println("瀛楁绫诲瀷" + dstClass);
+
+            Object value = orgMap.get(field.getName());
+            //String 杞琩ate
+            Object tmpValue = Java110Converter.getValue(value, dstClass);
+            //System.out.println("tmpValue"+value.toString());
+            beanMap.put(field.getName(), tmpValue);
+        }
     }
 
     /**
@@ -89,7 +125,7 @@
         T2 returnModel = null;
         try {
             returnModel = t.newInstance();
-            BeanUtils.copyProperties(returnModel, orgBean);
+            covertBean(orgBean, returnModel);
         } catch (Exception e) {
             e.printStackTrace();
             throw new RuntimeException("bean杞崲bean澶辫触", e);
@@ -123,15 +159,28 @@
      * @return map瀵硅薄
      */
     public static Map beanCovertMap(Object orgBean) {
-        Map newMap = null;
 
+        Map<String, Object> map = new HashMap();
         try {
-            newMap = PropertyUtils.describe(orgBean);
+            BeanMap beanMap = BeanMap.create(orgBean);
+            for (Object key : beanMap.keySet()) {
+                map.put(key + "", beanMap.get(key));
+            }
         } catch (Exception e) {
             throw new RuntimeException("bean杞崲Map澶辫触", e);
         }
+        return map;
+    }
 
-        return newMap;
+    /**
+     * bean杞崲涓簃ap瀵硅薄
+     *
+     * @param orgBean 鍘熷bean
+     * @return map瀵硅薄
+     */
+    public static JSONObject beanCovertJson(Object orgBean) {
+
+        return JSONObject.parseObject(JSONObject.toJSONString(orgBean));
     }
 
 

--
Gitblit v1.8.0