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