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