package com.zy.asrs.framework.common; 
 | 
  
 | 
import com.zy.asrs.framework.annotations.CoolTranslate; 
 | 
  
 | 
import java.lang.reflect.*; 
 | 
import java.nio.charset.StandardCharsets; 
 | 
import java.security.MessageDigest; 
 | 
import java.util.HashMap; 
 | 
import java.util.List; 
 | 
import java.util.Map; 
 | 
import java.util.Set; 
 | 
  
 | 
/** 
 | 
 * Created by vincent on 2019-06-09 
 | 
 */ 
 | 
public class Cools { 
 | 
  
 | 
    public static boolean isEmpty(Object... objects) { 
 | 
        for (Object obj : objects){ 
 | 
            if (isEmpty(obj)){ 
 | 
                return true; 
 | 
            } 
 | 
        } 
 | 
        return false; 
 | 
    } 
 | 
  
 | 
    @SuppressWarnings("rawtypes") 
 | 
    public static boolean isEmpty(Object o) { 
 | 
        if (o == null) { 
 | 
            return true; 
 | 
        } 
 | 
        if (o instanceof String) { 
 | 
            if (o.toString().trim().equals("")) { 
 | 
                return true; 
 | 
            } 
 | 
        } else if (o instanceof List) { 
 | 
            if (((List) o).size() == 0) { 
 | 
                return true; 
 | 
            } 
 | 
        } else if (o instanceof Map) { 
 | 
            if (((Map) o).size() == 0) { 
 | 
                return true; 
 | 
            } 
 | 
        } else if (o instanceof Set) { 
 | 
            if (((Set) o).size() == 0) { 
 | 
                return true; 
 | 
            } 
 | 
        } else if (o instanceof Object[]) { 
 | 
            if (((Object[]) o).length == 0) { 
 | 
                return true; 
 | 
            } 
 | 
        } else if (o instanceof int[]) { 
 | 
            if (((int[]) o).length == 0) { 
 | 
                return true; 
 | 
            } 
 | 
        } else if (o instanceof long[]) { 
 | 
            if (((long[]) o).length == 0) { 
 | 
                return true; 
 | 
            } 
 | 
        } 
 | 
        return false; 
 | 
    } 
 | 
  
 | 
    public static int sqlLimitIndex(Integer pageIndex, Integer pageSize){ 
 | 
        return (pageIndex - 1) * pageSize; 
 | 
    } 
 | 
  
 | 
    public static String enToken(String username, String password){ 
 | 
        return AesUtils.encrypt(username, zerofill(password, 16)); 
 | 
    } 
 | 
  
 | 
    public static String deTokn(String token, String password){ 
 | 
        return AesUtils.decrypt(token, zerofill(password, 16)); 
 | 
    } 
 | 
  
 | 
    public static String zerofill(String msg, Integer count){ 
 | 
        if (msg.length() == count){ 
 | 
            return msg; 
 | 
        } else if (msg.length() > count){ 
 | 
            return msg.substring(0, 16); 
 | 
        } else { 
 | 
            StringBuilder msgBuilder = new StringBuilder(msg); 
 | 
            for (int i = 0; i<count-msg.length(); i++){ 
 | 
                msgBuilder.append("0"); 
 | 
            } 
 | 
            return msgBuilder.toString(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 截取字符串(默认end=true) 
 | 
     * @param str 被截字符串 
 | 
     * @param end true:最后一个字符 / false:第一个字符 
 | 
     */ 
 | 
    public static String deleteChar(String str, boolean end){ 
 | 
        if (isEmpty(str)){ 
 | 
            return ""; 
 | 
        } 
 | 
        if (end){ 
 | 
            return str.substring(0, str.length()-1); 
 | 
        } else { 
 | 
            return str.substring(1); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public static String deleteChar(String str){ 
 | 
        return deleteChar(str, true); 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * map 转 对象 
 | 
     */ 
 | 
    public static <T> T conver(Map<? extends String, ?> map, Class<T> cls){ 
 | 
        T instance = null; 
 | 
        try { 
 | 
            Constructor<T> constructor = cls.getDeclaredConstructor(); 
 | 
            boolean constructorAccessible = constructor.isAccessible(); 
 | 
            constructor.setAccessible(true); 
 | 
            instance = constructor.newInstance(); 
 | 
            constructor.setAccessible(constructorAccessible); 
 | 
        } catch (IllegalAccessException | InstantiationException | NoSuchMethodException | InvocationTargetException e) { 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
        Class<?> prototype = cls; 
 | 
        do { 
 | 
            for (Field field : prototype.getDeclaredFields()){ 
 | 
                if (Modifier.isFinal(field.getModifiers()) 
 | 
                        || Modifier.isStatic(field.getModifiers()) 
 | 
                        || Modifier.isTransient(field.getModifiers())){ 
 | 
                    continue; 
 | 
                } 
 | 
                String fieldName = field.getName(); 
 | 
                Object val = null; 
 | 
                if (map.containsKey(fieldName)){ 
 | 
                    val = map.get(fieldName); 
 | 
                } 
 | 
                if (val != null){ 
 | 
                    boolean fieldAccessible = field.isAccessible(); 
 | 
                    field.setAccessible(true); 
 | 
                    Class<?> type = field.getType(); 
 | 
                    try { 
 | 
                        Constructor<?> constructor = type.getDeclaredConstructor(String.class); 
 | 
                        boolean constructorAccessible = constructor.isAccessible(); 
 | 
                        constructor.setAccessible(true); 
 | 
                        field.set(instance, constructor.newInstance(String.valueOf(val))); 
 | 
                        constructor.setAccessible(constructorAccessible); 
 | 
                    } catch (IllegalAccessException 
 | 
                            | InstantiationException 
 | 
                            | InvocationTargetException 
 | 
                            | NoSuchMethodException e) { 
 | 
                        System.err.println("convert error ===> Class["+prototype+"],Field:["+fieldName+"],Type:["+type+"],Value:["+val+"]"); 
 | 
                    } 
 | 
                    field.setAccessible(fieldAccessible); 
 | 
                } 
 | 
            } 
 | 
            prototype = prototype.getSuperclass(); 
 | 
        } while (!Object.class.equals(prototype)); 
 | 
        return instance; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 对象 转 map 
 | 
     */ 
 | 
    public static Map<String, Object> conver(Object obj){ 
 | 
        Class<?> cls = obj.getClass(); 
 | 
        Field[] fields = getAllFields(cls); 
 | 
        Map<String, Object> map = new HashMap<>(); 
 | 
        for (Field field : fields) { 
 | 
            if (Modifier.isFinal(field.getModifiers()) 
 | 
                    || Modifier.isStatic(field.getModifiers()) 
 | 
                    || Modifier.isTransient(field.getModifiers())){ 
 | 
                continue; 
 | 
            } 
 | 
            String key = field.getName(); 
 | 
            boolean flag = field.isAccessible(); 
 | 
            field.setAccessible(true); 
 | 
            Object val = null; 
 | 
            try { 
 | 
                val = field.get(obj); 
 | 
            } catch (IllegalAccessException e) { 
 | 
                e.printStackTrace(); 
 | 
            } 
 | 
            field.setAccessible(flag); 
 | 
            if (val != null){ 
 | 
                map.put(key, val); 
 | 
            } 
 | 
        } 
 | 
        return map; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取指定Class(及其SuperClass)的成员变量 
 | 
     */ 
 | 
    public static Field[] getAllFields(Class<?> cls){ 
 | 
        return getAllFields(cls, null); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 递归合并基类Field 
 | 
     */ 
 | 
    private static Field[] getAllFields(Class<?> cls, Field[] params){ 
 | 
        Field[] fields = (params == null) ? cls.getDeclaredFields() : params; 
 | 
        Class<?> superCls = cls.getSuperclass(); 
 | 
        if (superCls == null || superCls == Object.class){ 
 | 
            return fields; 
 | 
        } 
 | 
        Field[] superClsFields = superCls.getDeclaredFields(); 
 | 
        fields = addAll(fields, superClsFields); 
 | 
        return getAllFields(superCls, fields); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据fieldName获取Field对象 
 | 
     */ 
 | 
    public static Field getField(Class<?> cls, String fieldName) { 
 | 
        Field[] allFields = getAllFields(cls); 
 | 
        for (Field field : allFields) { 
 | 
            if (field.getName().equals(fieldName)) { 
 | 
                return field; 
 | 
            } 
 | 
        } 
 | 
        return null; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取对象中某个Field的值 
 | 
     */ 
 | 
    public static Object getFieldValue(Object obj, Field field) { 
 | 
        if (null == field) { 
 | 
            return null; 
 | 
        } else { 
 | 
            if (obj instanceof Class) { 
 | 
                obj = null; 
 | 
            } 
 | 
            if (!field.isAccessible()) { 
 | 
                field.setAccessible(true); 
 | 
            } 
 | 
            try { 
 | 
                return field.get(obj); 
 | 
            } catch (IllegalAccessException e) { 
 | 
                throw new RuntimeException(e); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 数组叠加 
 | 
     */ 
 | 
    @SuppressWarnings("unchecked") 
 | 
    public static <T> T[] addAll(T[] array1, T... array2) { 
 | 
        if (array1 == null) { 
 | 
            return clone(array2); 
 | 
        } else if (array2 == null) { 
 | 
            return clone(array1); 
 | 
        } else { 
 | 
            Class<?> cls = array1.getClass().getComponentType(); 
 | 
            T[] joinedArray = (T[]) Array.newInstance(cls, array1.length + array2.length); 
 | 
            System.arraycopy(array1, 0, joinedArray, 0, array1.length); 
 | 
  
 | 
            try { 
 | 
                System.arraycopy(array2, 0, joinedArray, array1.length, array2.length); 
 | 
                return joinedArray; 
 | 
            } catch (ArrayStoreException e) { 
 | 
                Class<?> type2 = array2.getClass().getComponentType(); 
 | 
                if (!cls.isAssignableFrom(type2)) { 
 | 
                    throw new RuntimeException("Cannot store " + type2.getName() + " in an array of " + cls.getName(), e); 
 | 
                } else { 
 | 
                    throw e; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 克隆 
 | 
     */ 
 | 
    private static <T> T[] clone(T[] array) { 
 | 
        return array == null ? null : array.clone(); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * map操作 
 | 
     */ 
 | 
    public static CoolMap add(String key,Object value){ 
 | 
        CoolMap map = new CoolMap(); 
 | 
        map.put(key, value); 
 | 
        return map; 
 | 
    } 
 | 
  
 | 
    public static class CoolMap extends HashMap<String, Object>{ 
 | 
  
 | 
        public CoolMap add(String key,Object value){ 
 | 
            this.put(key, value); 
 | 
            return this; 
 | 
        } 
 | 
  
 | 
        public CoolMap $(String key,Object value){ 
 | 
            this.put(key, value); 
 | 
            return this; 
 | 
        } 
 | 
  
 | 
    } 
 | 
  
 | 
    public static String md5(String string){ 
 | 
        try{ 
 | 
            MessageDigest md5 = MessageDigest.getInstance("MD5"); 
 | 
            byte[] bytes = md5.digest(string.getBytes(StandardCharsets.UTF_8)); 
 | 
            char[] chars = new char[bytes.length * 2]; 
 | 
            for (int i = 0; i < bytes.length; i++) { 
 | 
                int b = bytes[i]; 
 | 
                chars[i * 2] = hexDigits[(b & 0xF0) >> 4]; 
 | 
                chars[i * 2 + 1] = hexDigits[b & 0x0F]; 
 | 
            } 
 | 
            return new String(chars).toLowerCase(); 
 | 
        } catch (Exception e) { 
 | 
            e.printStackTrace(); 
 | 
            throw new RuntimeException("md5加密失败,str=".concat(string)); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private static char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; 
 | 
  
 | 
    public static Map<String, Object> translate(Object obj){ 
 | 
        Class<?> cls = obj.getClass(); 
 | 
        Field[] fields = getAllFields(cls); 
 | 
        Map<String, Object> map = new HashMap<>(); 
 | 
        for (Field field : fields) { 
 | 
            String key = field.getName(); 
 | 
            if (field.isAnnotationPresent(CoolTranslate.class)){ 
 | 
                CoolTranslate annotation = field.getAnnotation(CoolTranslate.class); 
 | 
                if (!isEmpty(annotation.value())) { 
 | 
                    key = annotation.value(); 
 | 
                } 
 | 
            } 
 | 
            boolean flag = field.isAccessible(); 
 | 
            field.setAccessible(true); 
 | 
            Object val = null; 
 | 
            try { 
 | 
                val = field.get(obj); 
 | 
            } catch (IllegalAccessException e) { 
 | 
                e.printStackTrace(); 
 | 
            } 
 | 
            field.setAccessible(flag); 
 | 
            if (val != null){ 
 | 
                map.put(key, val); 
 | 
            } 
 | 
        } 
 | 
        return map; 
 | 
    } 
 | 
  
 | 
    public static boolean eq(String str, String str0) { 
 | 
        if (Cools.isEmpty(str) && Cools.isEmpty(str0)) { 
 | 
            return true; 
 | 
        } 
 | 
        if (Cools.isEmpty(str) && !Cools.isEmpty(str0)) { 
 | 
            return false; 
 | 
        } 
 | 
        if (Cools.isEmpty(str0) && !Cools.isEmpty(str)) { 
 | 
            return false; 
 | 
        } 
 | 
        if (str.equals(str0)) { 
 | 
            return true; 
 | 
        } 
 | 
        return false; 
 | 
    } 
 | 
  
 | 
} 
 |