From 145e82ce09bd73bfe11afabd70a00f01a88d4be6 Mon Sep 17 00:00:00 2001
From: wangting <wangting@vci-tech.com>
Date: 星期三, 18 十二月 2024 17:37:00 +0800
Subject: [PATCH] 图标管理
---
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/BeanUtilForVCI.java | 204 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 204 insertions(+), 0 deletions(-)
diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/BeanUtilForVCI.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/BeanUtilForVCI.java
index 0fc3a78..379ad98 100644
--- a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/BeanUtilForVCI.java
+++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/BeanUtilForVCI.java
@@ -1,12 +1,17 @@
package com.vci.starter.web.util;
+import com.vci.starter.web.toolmodel.DateConverter;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.cglib.beans.BeanCopier;
+import org.springframework.cglib.core.Converter;
import org.springframework.util.CollectionUtils;
import java.lang.reflect.Field;
import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
/**
* 涓氬姟绫诲瀷涓撶敤鐨勬嫹璐濆伐鍏凤紝杩欎釜鏄祬鎷疯礉锛�
@@ -19,6 +24,11 @@
* 鏃ュ織
*/
private static Logger logger = LoggerFactory.getLogger(BeanUtilForVCI.class);
+
+ /**
+ * 瀛樻斁鎷疯礉瀵硅薄鐨勭紦瀛�
+ */
+ private static final ConcurrentMap<String, BeanCopier> beanCopierMap = new ConcurrentHashMap<>();
/**
* 鎷疯礉鏁版嵁
@@ -255,4 +265,198 @@
}
}
+ /**
+ * 鑾峰彇绫绘嫹璐濈殑瀵硅薄
+ * @param source 婧愬璞$被
+ * @param target 鐩爣瀵硅薄绫�
+ * @param useConverter 鏄惁浣跨敤杞崲鍣�
+ * @return 鎷疯礉瀵硅薄
+ */
+ public static BeanCopier getBeanCopier(Class<?> source, Class<?> target,boolean useConverter) {
+ String beanCopierKey = generateBeanKey(source, target);
+ if (beanCopierMap.containsKey(beanCopierKey)) {
+ return beanCopierMap.get(beanCopierKey);
+ } else {
+ BeanCopier beanCopier = BeanCopier.create(source, target, useConverter);
+ beanCopierMap.putIfAbsent(beanCopierKey, beanCopier);
+ }
+ return beanCopierMap.get(beanCopierKey);
+ }
+
+ /**
+ * 鐢熸垚涓や釜绫荤殑key,鐢ㄤ簬瀛樻斁鍒扮紦瀛樹箣涓�
+ * @param source 婧愬璞$被鍨�
+ * @param target 鐩爣瀵硅薄绫�
+ * @return 涓や釜绫荤殑鍚嶇О杩炴帴鍒颁竴璧峰悗鐨勫悕瀛�
+ */
+ public static String generateBeanKey(Class<?> source, Class<?> target) {
+ return source.getName() + "@" + target.getName();
+ }
+
+ /**
+ * 涓や釜瀵硅薄涔嬮棿杞崲
+ * @param source 婧愬璞�
+ * @param target 鐩爣瀵硅薄
+ * @param useConvert 鏄惁浣跨敤榛樿鐨勮浆鎹㈠櫒锛岃鍦ㄥ嚭鐜板睘鎬у悕绉扮浉鍚岃�岀被鍨嬩笉鍚岋紝鎴栬�呮湁瀵硅薄绫诲瀷锛岄泦鍚堝睘鎬ф椂鎵嶈浆鎹�
+ */
+ public static void convert(Object source,Object target,boolean useConvert){
+ if(source != null && target !=null){
+ BeanCopier beanCopier = getBeanCopier(source.getClass(),target.getClass(),useConvert);
+ beanCopier.copy(source,target,useConvert?new DeepCopyConverter(target):null);
+ }
+ }
+
+ /**
+ * 涓や釜瀵硅薄涔嬮棿杞崲
+ * @param source 婧愬璞�
+ * @param target 鐩爣瀵硅薄
+ * @return 鐩爣瀵硅薄
+ */
+ public static void convert(Object source,Object target){
+ convert(source,target,true);
+ }
+
+ /**
+ * 娣卞害鎷疯礉杞崲鍣�
+ */
+ public static class DeepCopyConverter implements Converter {
+
+ /**
+ * 鐩爣瀵硅薄
+ */
+ private Object target;
+
+ /**
+ * 鏋勯�犳柟娉�
+ * @param target 鐩爣瀵硅薄
+ */
+ public DeepCopyConverter(Object target) {
+ this.target = target;
+ }
+
+ /**
+ * 鎵ц鎷疯礉
+ * @param value 婧愬璞$殑灞炴�х殑鍊�
+ * @param targetClazz 鐩爣瀵硅薄鐨勫睘鎬х殑绫�
+ * @param methodName set鏂规硶鐨勫悕瀛�
+ * @return 杞崲鍚庣殑鍊�
+ */
+ @Override
+ public Object convert(Object value, Class targetClazz, Object methodName) {
+ if (value instanceof List) {
+ List values = (List) value;
+ List retList = new ArrayList<>(values.size());
+ copyForCollection(values,retList,methodName);
+ return retList;
+ } else if(value instanceof Set){
+ Set values = (Set) value;
+ Set retSet = new HashSet<>();
+ copyForCollection(values,retSet,methodName);
+ } else if(value instanceof Vector){
+ Vector values = (Vector)value;
+ Vector retVector = new Vector();
+ copyForCollection(values,retVector,methodName);
+ }else if (value instanceof Map) {
+ Map values = (Map)value;
+ Map retMap = new HashMap();
+ for (final Object key : values.keySet()) {
+ Object mapValue = values.get(key);
+ String tempFieldName = methodName.toString().replace("set",
+ "");
+ String fieldName = tempFieldName.substring(0, 1)
+ .toLowerCase() + tempFieldName.substring(1);
+ Class clazz = ClassUtilForVCI.getElementType(target.getClass(), fieldName);
+ Object targetAttr = null;
+ try{
+ targetAttr = clazz.newInstance();
+ }catch (Throwable e){
+ //鏂扮殑瀵硅薄鐨勫睘鎬у垵濮嬪寲鍑洪敊
+ }
+ BeanUtilForVCI.convert(mapValue, targetAttr);
+ retMap.put(key,targetAttr);
+ }
+ } else if (!ClassUtilForVCI.isPrimitive(targetClazz)) {
+ //杩欎釜鏄璞$被鍨�
+ Object targetAttr = null;
+ try{
+ targetAttr = targetClazz.newInstance();
+ }catch (Throwable e){
+ //鏂扮殑瀵硅薄灞炴�у垵濮嬪寲鍑洪敊
+ }
+ BeanUtilForVCI.convert(value, targetAttr);
+ return targetAttr;
+ }
+ if(value instanceof Boolean && targetClazz.equals(String.class)){
+ //浠巄oolean鎷疯礉鍒皊tring
+ return String.valueOf(value);
+ }
+ if(value instanceof String && (targetClazz.equals(Boolean.class)
+ || targetClazz.equals(boolean.class))){
+ //浠嶴tring鎷疯礉鍒癰oolean
+ if("true".equalsIgnoreCase((String)value)){
+ return true;
+ }else{
+ return false;
+ }
+ }
+ if(value instanceof Date && targetClazz.equals(String.class)){
+ //鏃堕棿鏍煎紡
+ return VciDateUtil.date2Str((Date)value,VciDateUtil.DateTimeMillFormat);
+ }
+ if(value instanceof String && targetClazz.equals(Date.class)){
+ //杞崲
+ DateConverter dateConverter = new DateConverter();
+ dateConverter.setAsText((String)value);
+ return dateConverter.getValue();
+ }
+ return value;
+ }
+
+ /**
+ * 澶勭悊闆嗗悎灞炴��
+ * @param sourceCollection 婧愬璞′腑闆嗗悎灞炴�х殑鐨勫��
+ * @param targetCollection 鐩爣瀵硅薄鐨勯泦鍚堝睘鎬х殑鍊�
+ * @param methodName setter鏂规硶
+ */
+ private void copyForCollection(Collection<?> sourceCollection,Collection targetCollection,Object methodName){
+ for (final Object source : sourceCollection) {
+ if(source instanceof Collection){
+ List<Object> targetValues = new ArrayList<>();
+ copyForCollection((Collection<?>)source,targetValues,methodName);
+ targetCollection.add(targetValues);
+ }else if(source instanceof Map){
+ String tempFieldName = methodName.toString().replace("set",
+ "");
+ String fieldName = tempFieldName.substring(0, 1)
+ .toLowerCase() + tempFieldName.substring(1);
+ Class clazz = ClassUtilForVCI.getElementType(target.getClass(), fieldName);
+ Object targetAttr = null;
+ try {
+ targetAttr = clazz.newInstance();
+ } catch (Throwable e) {
+ //鏂扮殑瀵硅薄鐨勫睘鎬у垵濮嬪寲鍑洪敊
+ }
+ Map map = (Map) source;
+ for(Object key : map.keySet()){
+ VciBaseUtil.setValueForField(key.toString(),targetAttr,VciBaseUtil.getStringValueFromObject(map.get(key)));
+ }
+ targetCollection.add(targetAttr);
+ }else {
+ String tempFieldName = methodName.toString().replace("set",
+ "");
+ String fieldName = tempFieldName.substring(0, 1)
+ .toLowerCase() + tempFieldName.substring(1);
+ Class clazz = ClassUtilForVCI.getElementType(target.getClass(), fieldName);
+ Object targetAttr = null;
+ try {
+ targetAttr = clazz.newInstance();
+ } catch (Throwable e) {
+ //鏂扮殑瀵硅薄鐨勫睘鎬у垵濮嬪寲鍑洪敊
+ }
+ BeanUtilForVCI.convert(source, targetAttr);
+ targetCollection.add(targetAttr);
+ }
+ }
+ }
+ }
}
--
Gitblit v1.9.3