比较两个对象的差异

比较两个对象的内容

工作中有一个需求,就是对数据库查询出来的内容比较差异,话不多说,上代码。。。
1、这里是入参

public MkReMarketEntityChageApproveDetailModel getApproveDetail(MkReMarketEntityChagApproveQueryDTO queryDTO) {
		MkReMarketEntityChageApproveDetailModel resultModel = new MkReMarketEntityChageApproveDetailModel();
        // 获取企业变更前,变更后基本信息
        queryDTO.setChangedType("1");
        queryDTO.setStatus("1");
        MkReMarketEntityChageApproveDetailModel before = this.baseMapper.selectEnterpriseInfo(queryDTO);
        if (Objects.isNull(before)){
            throw new BusinessException("查询不到审批信息");
        }
        BeanUtils.copyProperties(before,resultModel);
        queryDTO.setChangedType("2");
        queryDTO.setStatus("2");
        MkReMarketEntityChageApproveDetailModel later = this.baseMapper.selectEnterpriseInfo(queryDTO);
        if (Objects.isNull(later)){
            throw new BusinessException("查询不到审批信息");
        }
        //信息对比
        Map<String, Map<String, Object>> stringMapMap = compareFields(before, later);
        resultModel.setChageInfo(stringMapMap);
        return resultModel;
}

2、调用compareFields方法

public static Map<String, Map<String,Object>> compareFields(Object oldObject, Object newObject) {
        Map<String, Map<String, Object>> map = null;
        try{
            if (oldObject.getClass() == newObject.getClass()) {
                map = new HashMap<String, Map<String,Object>>();
                Class clazz = oldObject.getClass();
                PropertyDescriptor[] strs = Introspector.getBeanInfo(clazz,Object.class).getPropertyDescriptors();
                for (PropertyDescriptor str : strs) {
                    String name = str.getName();
                    Method readMethod = str.getReadMethod();
                    // 在oldObject上调用get方法等同于获得oldObject的属性值
                    Object oldValue = readMethod.invoke(oldObject);
                    // 在newObject上调用get方法等同于获得newObject的属性值
                    Object newValue = readMethod.invoke(newObject);
                    if(oldValue instanceof List){
                        continue;
                    }
                    if(newValue instanceof List){
                        continue;
                    }
                    if(oldValue instanceof Timestamp){
                        oldValue = new Date(((Timestamp) oldValue).getTime());
                    }
                    if(newValue instanceof Timestamp){
                        newValue = new Date(((Timestamp) newValue).getTime());
                    }
                    if(oldValue == null && newValue == null){
                        continue;
                    }else if(oldValue == null && newValue != null){
                        Map<String,Object> valueMap = new HashMap<String,Object>();
                        valueMap.put("oldValue",oldValue);
                        valueMap.put("newValue",newValue);
                        valueMap.put("name",getName(name));
                        map.put(name, valueMap);

                        continue;
                    }

                    if (!oldValue.equals(newValue)) {// 比较这两个值是否相等,不等就可以放入map了
                        Map<String,Object> valueMap = new HashMap<String,Object>();
                        valueMap.put("oldValue",oldValue);
                        valueMap.put("newValue",newValue);
                        valueMap.put("name",getName(name));
                        map.put(name, valueMap);
                    }
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        return map;
    }
private static String getName(String key){
	String name ="";
	switch (key){
		...
		case "contactsName":
                name ="常用联系人";
                break;
            case "contactsCellPhone":
                name ="手机号码";
                break;
            case "EMail":
                name ="电子邮件";
                break;
         ...
        }
        return name;
  }

显示效果
在这里插入图片描述


版权声明:本文为weixin_42516484原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。