package com.kcim.common.config;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.ClassUtils;

import java.util.Date;

/**
 * @program: CostAccount
 * @description:
 * @author: Wang.YS
 * @create: 2023-09-20 14:03
 **/
@Configuration
public class MybatisPlusMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        fillValueByName("createTime", new Date(), metaObject, false);
        fillValueByName("updateTime", new Date(), metaObject, false);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        fillValueByName("updateTime", new Date(), metaObject, false);

    }
    /**
     * 填充数据具体实现
     *
     * @param filedName  字段名
     * @param fieldVal   字段值
     * @param metaObject 元对象
     * @param isCover    是否覆盖原有内容
     */
    private static void fillValueByName(String filedName, Object fieldVal, MetaObject metaObject, Boolean isCover) {
        // 如果该对象没有setter，直接返回
        if (!metaObject.hasSetter(filedName)) {
            return;
        }
        // 用户需要手动设置的值
        Object value = metaObject.getValue(filedName);
        String valueStr = StrUtil.str(value, "UTF-8");
        // 如果不为空，并且不覆盖
        if (StrUtil.isNotBlank(valueStr) && !isCover) {
            return;
        }
        // 类型相同设置
        Class<?> type = metaObject.getGetterType(filedName);
        if (ClassUtils.isAssignableValue(type, fieldVal)) {
            metaObject.setValue(filedName, fieldVal);
        }
    }
}
