From 9b4433fddf5b401edb0aace8a404ac733b122702 Mon Sep 17 00:00:00 2001
From: 田源 <tianyuan@vci-tech.com>
Date: 星期四, 03 四月 2025 14:35:02 +0800
Subject: [PATCH] 添加非密字段显示

---
 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