|
@@ -0,0 +1,108 @@
|
|
|
+package cn.com.ctop.toutiao.modules.operation.util;
|
|
|
+
|
|
|
+import cn.com.ctop.common.module.entity.SysUser;
|
|
|
+import cn.com.ctop.toutiao.modules.operation.entity.BytedanceOperationLog;
|
|
|
+import org.omg.PortableInterceptor.SYSTEM_EXCEPTION;
|
|
|
+
|
|
|
+import java.beans.Introspector;
|
|
|
+import java.beans.PropertyDescriptor;
|
|
|
+import java.lang.reflect.Method;
|
|
|
+import java.security.Timestamp;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+public class GetChangeDateUtil {
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * <p>Title: compareFields</p>
|
|
|
+ * <p>Description: </p> 比较两个实体属性值
|
|
|
+ * @param obj1
|
|
|
+ * @param obj2
|
|
|
+ * @param ignoreArr 忽略的字段
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static Map<String, List<Object>> compareFields(Object obj1, Object obj2, String[] ignoreArr) {
|
|
|
+ try{
|
|
|
+ Map<String, List<Object>> map = new HashMap<String, List<Object>>();
|
|
|
+ List<String> ignoreList = null;
|
|
|
+ if(ignoreArr != null && ignoreArr.length > 0){
|
|
|
+ // array转化为list
|
|
|
+ ignoreList = Arrays.asList(ignoreArr);
|
|
|
+ }
|
|
|
+ if (obj1.getClass() == obj2.getClass()) {// 只有两个对象都是同一类型的才有可比性
|
|
|
+ Class clazz = obj1.getClass();
|
|
|
+ // 获取object的属性描述
|
|
|
+ PropertyDescriptor[] pds = Introspector.getBeanInfo(clazz,
|
|
|
+ Object.class).getPropertyDescriptors();
|
|
|
+ for (PropertyDescriptor pd : pds) {// 这里就是所有的属性了
|
|
|
+ String name = pd.getName();// 属性名
|
|
|
+ if(ignoreList == null || !ignoreList.contains(name)){// 如果当前属性选择忽略比较,跳到下一次循环
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ Method readMethod = pd.getReadMethod();// get方法
|
|
|
+ // 在obj1上调用get方法等同于获得obj1的属性值
|
|
|
+ Object o1 = readMethod.invoke(obj1);
|
|
|
+ // 在obj2上调用get方法等同于获得obj2的属性值
|
|
|
+ Object o2 = readMethod.invoke(obj2);
|
|
|
+ if(o1 == null && o2 == null){ //o1 旧 o2新 如果两个都是空就跳过
|
|
|
+ continue;
|
|
|
+ }else if(o1 == null && o2 != null){ //如果O1旧的没有 O2新的有
|
|
|
+ List<Object> list = new ArrayList<Object>();
|
|
|
+ list.add("旧(null)");
|
|
|
+ list.add("新"+"("+String.valueOf(o2)+")");
|
|
|
+ map.put(name, list);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (!o1.equals(o2)) {// 比较这两个值是否相等,不等就可以放入map了 //如果旧的和新的不相等
|
|
|
+ List<Object> list = new ArrayList<Object>();
|
|
|
+
|
|
|
+ if(o2==null) {
|
|
|
+ list.add("旧"+"("+String.valueOf(o1)+")");
|
|
|
+ list.add("新()");
|
|
|
+ }else {
|
|
|
+ list.add("旧"+"("+String.valueOf(o1)+")");
|
|
|
+ list.add("新"+"("+String.valueOf(o2)+")");
|
|
|
+ }
|
|
|
+ map.put(name, list);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return map;
|
|
|
+ }catch(Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String makeOperationContent(Object obj1, Object obj2, String[] ignoreArr){
|
|
|
+
|
|
|
+
|
|
|
+ Map<String, List<Object>> bject = GetChangeDateUtil.compareFields(obj1,obj2,ignoreArr);
|
|
|
+ Set<String> names = bject.keySet();
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
+ for (String name: names
|
|
|
+ ) {
|
|
|
+ sb.append(name + "由【"+bject.get(name).get(0) +"】改为了【"+ bject.get(name).get(1)+"】");
|
|
|
+ sb.append(",");
|
|
|
+// System.out.println(name + "由【"+bject.get(name).get(0) +"】改为了【"+ bject.get(name).get(1)+"】");
|
|
|
+ }
|
|
|
+ return sb.substring(0,sb.length() - 1 >= 0 ? sb.length() - 1 : 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void main(String[] args) {
|
|
|
+
|
|
|
+ SysUser user1 = new SysUser();
|
|
|
+ user1.setRealname("张三");
|
|
|
+// user1.setLeaderName("领导1号");
|
|
|
+// user1.setDepartName("研发部门");
|
|
|
+// user1.setRoleName("用户");
|
|
|
+ SysUser user2 = new SysUser();
|
|
|
+ user2.setRealname("张三");
|
|
|
+// user2.setLeaderName("领导2号");
|
|
|
+// user2.setDepartName("组织架构部门");
|
|
|
+// user2.setRoleName("管理员");
|
|
|
+ String s = makeOperationContent(user1, user2, new String[]{"leaderName", "departName","roleName"});
|
|
|
+
|
|
|
+ System.out.println(s);
|
|
|
+
|
|
|
+ }
|
|
|
+}
|