
import java .lang.reflect.Field;
import java.util. HashMap ;
import java.util.Map;
import com.google.common.base.Objects;
/**
* 找出 不同的字段内容
*
*/public class ChangeUtils {
public static Map<String,String> bdNames = new HashMap<String, String >();
static {
bdNames.put("name", "名称");
bdNames.put("parent_id", "上级bdid");
bdNames.put("mobile", "手机号");
bdNames.put("limitNum", "关联客户上限");
bdNames.put("cloudControlWhiteDesc", "可购买权限");
bdNames.put("email", "邮箱");
bdNames.put("cloudControlDesc", "权限");
bdNames.put("bdBusinessTypeDesc", "业务标签");
bdNames.put("salesTypeName", "职位");
bdNames.put("whitelistLimitNum", "白名单上限");
bdNames.put("bu", "bu");
bdNames.put(" TypeName ", "一级类型");
bdNames.put("secondTypeName", "二级类型");
}
public static String compare(Object co, Object mo , Map<String,String> bdNames) throws Exception {
StringBuilder sb = new StringBuilder();
if (null == co || null == mo) {
return sb.toString();
}
if (co.getClass() != mo.getClass()) {
return sb.toString();
}
// 获取对象的class
Class cc = co.getClass();
Class mc = mo.getClass();
// 获取声明的变量
Field[] cfs = cc.getDeclaredFields();
Field[] mfs = mc.getDeclaredFields();
for (int i = 0; i < cfs.length; i++) {
Field cfield = cfs[i];
for (int j = 0; j < mfs.length; j++) {
Field mfield = mfs[j];
// 判断两个变量名是否一致
if (cfield.getName().equals(mfield.getName())) {
//获取变量名称
String fieldName = cfield.getName();
String fieldNameDesc = null;
if(bdNames.containsKey(fieldName) && bdNames.get(fieldName)!=null) {
fieldNameDesc = bdNames.get(fieldName);
}else {
break;
}
//组合变量的对应get方法 getId
String method = "get"+fieldName.substring(0, 1).toUpperCase()+fieldName.substring(1,fieldName.length());
//根据方法名称调用对象方法获取变量值
Object v1 = cc.getMethod(method).invoke(co);
Object v2 = mc.getMethod(method).invoke(mo);
if(null == v1 && null == v2) {
break;
}
if(null != v1 && null == v2) {
break;
}
//判断变量值是否为空
if(null == v1 || null == v2 || !Objects.equal(v1, v2)){
sb.append(" (").append(fieldNameDesc).append(")").append("以前:").append(v1).append("-->").append("现在: ").append(v2).append("; ");
//System.out.println(method+" v1:"+v1+"---"+"v2:"+v2);
}else {
break;
}
// 判断变量是否有自定义注解
/*boolean flag = cfield.is Annotation Present(Change.class);
if(flag){
//获取对象的自定义注解内容
Change f = cfield.getAnnotation(Change.class);
//判断变量值是否相同
if (!v1.equals(v2)){
//拼接 字符串 ,如编号:1改为2,姓名:张三改为李四,
sb.append(f.fieldName()+getString(v1,f.pattern())+f.expand()+f.extra()+getString(v2,f.pattern())+f.expand()+f.separator());
break;
}
}*/ }
}
}
return sb.toString();
}
}
日志记录使用:
OperateLog recordLog = new OperateLog(user.getUsername(),new Date(),( byte ) 2);
recordLog.setType(OperateTypeEnum.FirstType.bd_manage.getType());
recordLog.setKeyWord(String.valueOf(bdInfoRZ.getId()));
recordLog.setContentPre(bdOld==null?"":bdOld.getRemarkLog());
//这里
recordLog.setContent(ChangeUtils.compare(bdOld, bdInfoRZ, ChangeUtils.bdNames));
recordLog.setBdIds(String.valueOf(bdInfoRZ.getId()));
operateLogService.insertSelective(recordLog);