比较两个对象的内容
工作中有一个需求,就是对数据库查询出来的内容比较差异,话不多说,上代码。。。
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版权协议,转载请附上原文出处链接和本声明。