From 2a9c68fe5130227d88b71e8eb57aced6b10d4d91 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期三, 17 十二月 2025 15:47:35 +0800
Subject: [PATCH] 【丽水】统计随访数据 增加redis记录结果 提高查询效率

---
 ruoyi-common/src/main/java/com/ruoyi/common/utils/reflect/ReflectUtils.java |  168 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 168 insertions(+), 0 deletions(-)

diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/reflect/ReflectUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/reflect/ReflectUtils.java
index b19953e..0bb9968 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/reflect/ReflectUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/reflect/ReflectUtils.java
@@ -6,7 +6,13 @@
 import java.lang.reflect.Modifier;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.Validate;
 import org.apache.poi.ss.usermodel.DateUtil;
@@ -407,4 +413,166 @@
         }
         return new RuntimeException(msg, e);
     }
+
+    /**
+     * 姣旇緝涓や釜鐩稿悓绫诲瀷瀵硅薄鐨勬墍鏈夊瓧娈靛�兼槸鍚︾浉绛�
+     * 浣跨敤鍙嶅皠鑾峰彇鎵�鏈夊瓧娈碉紙鍖呮嫭鐖剁被瀛楁锛夛紝骞堕�愪釜姣旇緝
+     *
+     * @param obj1 绗竴涓璞�
+     * @param obj2 绗簩涓璞�
+     * @return 濡傛灉鎵�鏈夊瓧娈靛�奸兘鐩哥瓑杩斿洖true锛屽惁鍒欒繑鍥瀎alse
+     * *绀轰緥1锛氭瘮杈冩墍鏈夊瓧娈�
+     *      *   boolean result = ReflectUtils.equalsAllFields(user1, user2);
+     */
+    public static boolean equalsAllFields(Object obj1, Object obj2)
+    {
+        return equalsAllFields(obj1, obj2, new String[]{});
+    }
+
+    /**
+     * 姣旇緝涓や釜鐩稿悓绫诲瀷瀵硅薄鐨勬墍鏈夊瓧娈靛�兼槸鍚︾浉绛夛紙鍙帓闄ゆ寚瀹氬瓧娈碉級
+     * 浣跨敤鍙嶅皠鑾峰彇鎵�鏈夊瓧娈碉紙鍖呮嫭鐖剁被瀛楁锛夛紝骞堕�愪釜姣旇緝
+     *
+     * @param obj1 绗竴涓璞�
+     * @param obj2 绗簩涓璞�
+     * @param excludeFields 瑕佹帓闄ょ殑瀛楁鍚嶇О鏁扮粍
+     * @return 濡傛灉鎵�鏈夊瓧娈靛�奸兘鐩哥瓑杩斿洖true锛屽惁鍒欒繑鍥瀎alse
+     * // 绀轰緥2锛氭帓闄ゅ垎椤靛弬鏁�
+     *      *   boolean result = ReflectUtils.equalsAllFields(vo1, vo2, "pageNum", "pageSize");
+     */
+    public static boolean equalsAllFields(Object obj1, Object obj2, String... excludeFields)
+    {
+        // 涓や釜瀵硅薄閮戒负null锛岃涓虹浉绛�
+        if (obj1 == null && obj2 == null) return true;
+
+        // 鍙湁涓�涓负null锛屼笉鐩哥瓑
+        if (obj1 == null || obj2 == null) return false;
+
+        // 濡傛灉鏄悓涓�涓璞″紩鐢紝鐩存帴杩斿洖true
+        if (obj1 == obj2) return true;
+
+        // 绫诲瀷涓嶅悓锛屼笉鐩哥瓑
+        if (!obj1.getClass().equals(obj2.getClass())) return false;
+
+        // 灏嗘帓闄ゅ瓧娈佃浆鎹负Set锛屼究浜庡揩閫熸煡鎵�
+        Set<String> excludeFieldSet = new HashSet<>(Arrays.asList(excludeFields));
+
+        // 鑾峰彇鎵�鏈夊瓧娈碉紙鍖呮嫭鐖剁被瀛楁锛�
+        List<Field> allFields = getAllFields(obj1);
+
+        // 閫愪釜姣旇緝瀛楁鍊�
+        for (Field field : allFields)
+        {
+            // 璺宠繃鎺掗櫎鐨勫瓧娈�
+            if (excludeFieldSet.contains(field.getName())) continue;
+
+            // 璺宠繃static鍜宼ransient瀛楁
+            if (Modifier.isStatic(field.getModifiers()) || Modifier.isTransient(field.getModifiers()))
+            {
+                continue;
+            }
+
+            try{
+                makeAccessible(field);
+                Object value1 = field.get(obj1);
+                Object value2 = field.get(obj2);
+
+                // 浣跨敤Objects.equals杩涜姣旇緝锛屽彲浠ユ纭鐞唍ull鍊�
+                if (!Objects.equals(value1, value2))
+                {
+                    //logger.debug("瀛楁 [{}] 鐨勫�间笉鐩哥瓑: obj1={}, obj2={}", field.getName(), value1, value2);
+                    return false;
+                }
+            }catch (IllegalAccessException e)
+            {
+                //logger.error("璁块棶瀛楁 [{}] 鏃跺彂鐢熼敊璇�: {}", field.getName(), e.getMessage());
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * 鑾峰彇瀵硅薄鐨勬墍鏈夊瓧娈碉紙鍖呮嫭鐖剁被瀛楁锛�
+     *
+     * @param obj 鐩爣瀵硅薄
+     * @return 鎵�鏈夊瓧娈电殑鍒楄〃
+     */
+    public static List<Field> getAllFields(Object obj)
+    {
+        List<Field> allFields = new ArrayList<>();
+        Class<?> clazz = obj.getClass();
+
+        // 寰幆鍚戜笂閬嶅巻鐖剁被锛岃幏鍙栨墍鏈夊瓧娈�
+        while (clazz != null && clazz != Object.class)
+        {
+            Field[] fields = clazz.getDeclaredFields();
+            allFields.addAll(Arrays.asList(fields));
+            clazz = clazz.getSuperclass();
+        }
+
+        return allFields;
+    }
+
+    /**
+     * 姣旇緝涓や釜瀵硅薄鎸囧畾瀛楁鐨勫�兼槸鍚︾浉绛�
+     *
+     * @param obj1 绗竴涓璞�
+     * @param obj2 绗簩涓璞�
+     * @param includeFields 瑕佹瘮杈冪殑瀛楁鍚嶇О鏁扮粍
+     * @return 濡傛灉鎸囧畾瀛楁鍊奸兘鐩哥瓑杩斿洖true锛屽惁鍒欒繑鍥瀎alse
+     *
+     *   // 绀轰緥3锛氬彧姣旇緝鍏抽敭瀛楁
+     *   boolean result = ReflectUtils.equalsSpecifiedFields(user1, user2, "userId", "userName", "email");
+     */
+    public static boolean equalsSpecifiedFields(Object obj1, Object obj2, String... includeFields)
+    {
+        // 涓や釜瀵硅薄閮戒负null锛岃涓虹浉绛�
+        if (obj1 == null && obj2 == null) return true;
+
+        // 鍙湁涓�涓负null锛屼笉鐩哥瓑
+        if (obj1 == null || obj2 == null) return false;
+
+        // 濡傛灉鏄悓涓�涓璞″紩鐢紝鐩存帴杩斿洖true
+        if (obj1 == obj2) return true;
+
+        // 绫诲瀷涓嶅悓锛屼笉鐩哥瓑
+        if (!obj1.getClass().equals(obj2.getClass())) return false;
+
+        // 濡傛灉娌℃湁鎸囧畾瀛楁锛岃繑鍥瀟rue
+        if (includeFields == null || includeFields.length == 0) return true;
+
+        // 閫愪釜姣旇緝鎸囧畾瀛楁鐨勫��
+        for (String fieldName : includeFields)
+        {
+            Field field = getAccessibleField(obj1, fieldName);
+            if (field == null)
+            {
+                //logger.warn("鍦� [{}] 涓湭鎵惧埌瀛楁 [{}]", obj1.getClass().getName(), fieldName);
+                continue;
+            }
+
+            try
+            {
+                makeAccessible(field);
+                Object value1 = field.get(obj1);
+                Object value2 = field.get(obj2);
+
+                // 浣跨敤Objects.equals杩涜姣旇緝锛屽彲浠ユ纭鐞唍ull鍊�
+                if (!Objects.equals(value1, value2))
+                {
+                    //logger.debug("瀛楁 [{}] 鐨勫�间笉鐩哥瓑: obj1={}, obj2={}", fieldName, value1, value2);
+                    return false;
+                }
+            }
+            catch (IllegalAccessException e)
+            {
+                //logger.error("璁块棶瀛楁 [{}] 鏃跺彂鐢熼敊璇�: {}", fieldName, e.getMessage());
+                return false;
+            }
+        }
+
+        return true;
+    }
 }

--
Gitblit v1.9.3