package cn.smartpilot.yangjiang.utils;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import javax.xml.bind.annotation.XmlElement;
public class UpdateLogUtil {
@SuppressWarnings({ "rawtypes", "unused" })
public static String UpdateLog(String userName,Object obj_old,Object obj_new) {
Class clas_old = obj_old.getClass();
Class clas_new = obj_new.getClass();
if(!(clas_old.isInstance(obj_new))){
System.out.println("UpdateLogUtil.UpdateLog:传入的两个java对象类型不一致!");
return "UpdateLogUtil.UpdateLog:传入的两个java对象类型不一致!";
}
Field[] fields = clas_old.getDeclaredFields();
String remark = "";
for (Field field : fields) {
String name = field.getName();
String type = field.getType().getName();
field.setAccessible(true); //设置些属性是可以访问的
Object val_old = null;
Object val_new = null;
try {
val_old = field.get(obj_old);//得到此属性的修改前值
val_new = field.get(obj_new);//得到此属性的修改后值
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
//bigdecimal 类型的数据要去掉小数点后尾部的0不一致造成数据比对差异
// if(type.equals("java.math.BigDecimal") && val_old!=null && val_new!=null ){
// BigDecimal val_old_big = new BigDecimal(String.valueOf(val_old));
// BigDecimal val_new_big = new BigDecimal(String.valueOf(val_new));
// if(String.valueOf(val_old_big).indexOf(".")!= -1 || String.valueOf(val_new_big).indexOf(".")!= -1 ){//由于无法获取精度值,只能对所有带小数点的数据进行处理
// DecimalFormat formatter1=new DecimalFormat("#.##");
// val_old = formatter1.format(val_old_big);
// val_new = formatter1.format(val_new_big);
// }
// }
DecimalFormat formatter1=new DecimalFormat("#.##");
try {
val_old = formatter1.format(val_old);
} catch (Exception e) {
}
try {
val_new = formatter1.format(val_new);
} catch (Exception e) {
}
if(!(StringUtil.isEmpty(val_old) && StringUtil.isEmpty(val_new))) {
if(!String.valueOf(val_old).equals(String.valueOf(val_new))){
if(StringUtil.isEmpty(val_old)) {
val_old = "暂定";
}
if(StringUtil.isEmpty(val_new)) {
val_new = "暂定";
}
//保存处理数据
// System.out.println("UpdateLogUtil.UpdateLog:"+name+"--"+val_old+"----"+val_new);
//1、获取属性上的指定类型的注解
Annotation annotation = field.getAnnotation(XmlElement.class);
//有该类型的注解存在
if (annotation!=null) {
//强制转化为相应的注解
XmlElement xmlElement = (XmlElement) annotation;
//3、获取属性上的指定类型的注解的指定方法
if (xmlElement.name().equals("##default")) {
// System.out.println("UpdateLogUtil.UpdateLog:属性【"+name+"】注解使用的name是默认值: "+xmlElement.name());
remark += userName+"修改了" +xmlElement.name()+",修改前:" + String.valueOf(val_old)+"、修改后:"+String.valueOf(val_new)+";";
}else {
// System.out.println("UpdateLogUtil.UpdateLog:属性【"+name+"】注解使用的name是自定义的值: "+xmlElement.name());
remark += userName+"修改了" +xmlElement.name()+"修改前:" + String.valueOf(val_old)+"、修改后:"+String.valueOf(val_new)+";";
}
}
}
}
}
return remark;
}
}