【奇葩需求之记录对象不同的日志】

梦想和远方

开发就是苦力,最近有一个这样的需求:
用日志记录被修改的数据 那些字段被修改了。

好吧。胳膊拧不过大腿,**的。干就完事儿。
需求分析:不河里。

需求实现:很(bu)难(gan)。

要记录 那些被修改了 需要知道修改前后的字段值 并进行比较和记录。即 数据库原来的数据 和前端传递的值进行比较。

import org.apache.commons.lang3.StringUtils;

import java.lang.reflect.Field;
import java.util.*;    
    /**
     * @param clazz   类类型
     * @param a       之前的对象
     * @param b       值后的对象
     * @param ignores 忽略不需要比较的对象
     * @param <T>
     * @return 不一样的值 key:属性,value 比较前后的值
     * @throws IllegalAccessException
     */    
    public <T> Map<String, String> findNotEqualFields(Class<T> clazz, T a, T b, Set<String> ignores) throws IllegalAccessException {
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
        }
        Map map = null;
        for (Field field : fields) {
            if (ignores != null && ignores.contains(field.getName())) {
                continue;
            }
            if (!Objects.equals(field.get(a), field.get(b))) {
                if (map == null) {
                    map = new HashMap();
                    map.put("修改时间",new Date());
                }
                map.put(field.getName(), StringUtils.join("修改前:", field.get(a), ",", "修改后:", field.get(b), ";"));
            }
        }
        return map;
    }

最近又来了一个需求 【人员和机构信息同步】【全量的】

需要比较对象是否不一致,不一致的用update,一致的数据不更新。

 

需求分析:不河里。

需求实现:*******

难道不知道用 消息发通知的形式,修改那些数据 发个通知给下游。然后就可以定向修改那些数据。

全量数据比较 加修改 这样的奇葩需求 完全是上游设计的失误。

实现方案:

1.比较那些不一样的 记录不一样的数据 并修改

 /**
     * @param clazz
     * @param a
     * @param b
     * @param ignores
     * @param <T>
     * @return
     * @throws IllegalAccessException
     */
    public <T> Boolean isAllEquals(Class<T> clazz, T a, T b, Set<String> ignores) throws IllegalAccessException {
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
        }

        for (Field field : fields) {
            if (ignores != null && ignores.contains(field.getName())) {
                continue;
            }
            if (!Objects.equals(field.get(a), field.get(b))) {
                return false;
            }
        }
        return true;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值