package com.example.agvcontroller.protocol; 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 T conver(Map map, Class cls){ T instance = null; try { Constructor 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 conver(Object obj){ Class cls = obj.getClass(); Field[] fields = getAllFields(cls); Map 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[] 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[] 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{ 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 translate(Object obj){ // Class cls = obj.getClass(); // Field[] fields = getAllFields(cls); // Map 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; } }