From 9c622c05702484fa4942647099cdbdbb3bec50bc Mon Sep 17 00:00:00 2001
From: fujunling <2984387807@qq.com>
Date: 星期一, 19 六月 2023 10:19:56 +0800
Subject: [PATCH] 解决proxy冲突
---
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/BeanUtil.java | 175 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 175 insertions(+), 0 deletions(-)
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/BeanUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/BeanUtil.java
new file mode 100644
index 0000000..a4cb62e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/BeanUtil.java
@@ -0,0 +1,175 @@
+package com.vci.ubcs.starter.web.util;
+
+
+import com.vci.ubcs.starter.web.toolmodel.DateConverter;
+import org.springframework.cglib.beans.BeanCopier;
+import org.springframework.cglib.core.Converter;
+
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+public class BeanUtil {
+ private static final ConcurrentMap<String, BeanCopier> beanCopierMap = new ConcurrentHashMap();
+
+ public BeanUtil() {
+ }
+
+ public static BeanCopier getBeanCopier(Class<?> source, Class<?> target, boolean useConverter) {
+ String beanCopierKey = generateBeanKey(source, target);
+ if (beanCopierMap.containsKey(beanCopierKey)) {
+ return (BeanCopier)beanCopierMap.get(beanCopierKey);
+ } else {
+ BeanCopier beanCopier = BeanCopier.create(source, target, useConverter);
+ beanCopierMap.putIfAbsent(beanCopierKey, beanCopier);
+ return (BeanCopier)beanCopierMap.get(beanCopierKey);
+ }
+ }
+
+ public static String generateBeanKey(Class<?> source, Class<?> target) {
+ return source.getName() + "@" + target.getName();
+ }
+
+ 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);
+ }
+
+ }
+
+ public static void convert(Object source, Object target) {
+ convert(source, target, true);
+ }
+
+ public static class DeepCopyConverter implements Converter {
+ private Object target;
+
+ public DeepCopyConverter(Object target) {
+ this.target = target;
+ }
+
+ @Override
+ public Object convert(Object value, Class targetClazz, Object methodName) {
+ if (value instanceof List) {
+ List values = (List)value;
+ List retList = new ArrayList(values.size());
+ this.copyForCollection(values, retList, methodName);
+ return retList;
+ } else {
+ if (value instanceof Set) {
+ Set values = (Set)value;
+ Set retSet = new HashSet();
+ this.copyForCollection(values, retSet, methodName);
+ } else if (value instanceof Vector) {
+ Vector values = (Vector)value;
+ Vector retVector = new Vector();
+ this.copyForCollection(values, retVector, methodName);
+ } else if (value instanceof Map) {
+ Map values = (Map)value;
+ Map retMap = new HashMap();
+ Iterator var6 = values.keySet().iterator();
+
+ while(var6.hasNext()) {
+ Object key = var6.next();
+ Object mapValue = values.get(key);
+ String tempFieldName = methodName.toString().replace("set", "");
+ String fieldName = tempFieldName.substring(0, 1).toLowerCase() + tempFieldName.substring(1);
+ Class clazz = ClassUtil.getElementType(this.target.getClass(), fieldName);
+ Object targetAttr = null;
+
+ try {
+ targetAttr = clazz.newInstance();
+ } catch (Throwable var15) {
+ }
+
+ BeanUtil.convert(mapValue, targetAttr);
+ retMap.put(key, targetAttr);
+ }
+ } else if (!ClassUtil.isPrimitive(targetClazz)) {
+ Object targetAttr = null;
+
+ try {
+ targetAttr = targetClazz.newInstance();
+ } catch (Throwable var14) {
+ }
+
+ BeanUtil.convert(value, targetAttr);
+ return targetAttr;
+ }
+
+ if (value instanceof Boolean && targetClazz.equals(String.class)) {
+ return String.valueOf(value);
+ } else if (!(value instanceof String) || !targetClazz.equals(Boolean.class) && !targetClazz.equals(Boolean.TYPE)) {
+ if (value instanceof Date && targetClazz.equals(String.class)) {
+ return VciDateUtil.date2Str((Date)value, "yyyy-MM-dd HH:mm:ss.SSS");
+ } else if (value instanceof String && targetClazz.equals(Date.class)) {
+ DateConverter dateConverter = new DateConverter();
+ dateConverter.setAsText((String)value);
+ return dateConverter.getValue();
+ } else {
+ return value;
+ }
+ } else {
+ return "true".equalsIgnoreCase((String)value) ? true : false;
+ }
+ }
+ }
+
+ private void copyForCollection(Collection<?> sourceCollection, Collection targetCollection, Object methodName) {
+ Iterator var4 = sourceCollection.iterator();
+
+ while(true) {
+ while(var4.hasNext()) {
+ Object source = var4.next();
+ if (source instanceof Collection) {
+ List<Object> targetValues = new ArrayList();
+ this.copyForCollection((Collection)source, targetValues, methodName);
+ targetCollection.add(targetValues);
+ } else {
+ String tempFieldName;
+ String fieldName;
+ Class clazz;
+ Object targetAttr;
+ if (!(source instanceof Map)) {
+ tempFieldName = methodName.toString().replace("set", "");
+ fieldName = tempFieldName.substring(0, 1).toLowerCase() + tempFieldName.substring(1);
+ clazz = ClassUtil.getElementType(this.target.getClass(), fieldName);
+ targetAttr = null;
+
+ try {
+ targetAttr = clazz.newInstance();
+ } catch (Throwable var13) {
+ }
+
+ BeanUtil.convert(source, targetAttr);
+ targetCollection.add(targetAttr);
+ } else {
+ tempFieldName = methodName.toString().replace("set", "");
+ fieldName = tempFieldName.substring(0, 1).toLowerCase() + tempFieldName.substring(1);
+ clazz = ClassUtil.getElementType(this.target.getClass(), fieldName);
+ targetAttr = null;
+
+ try {
+ targetAttr = clazz.newInstance();
+ } catch (Throwable var14) {
+ }
+
+ Map map = (Map)source;
+ Iterator var11 = map.keySet().iterator();
+
+ while(var11.hasNext()) {
+ Object key = var11.next();
+ VciBaseUtil.setValueForField(key.toString(), targetAttr, VciBaseUtil.getStringValueFromObject(map.get(key)));
+ }
+
+ targetCollection.add(targetAttr);
+ }
+ }
+ }
+
+ return;
+ }
+ }
+ }
+}
--
Gitblit v1.9.3