package com.ruoyi.framework.config; 
 | 
  
 | 
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; 
 | 
import com.ruoyi.common.utils.SecurityUtils; 
 | 
import com.ruoyi.common.utils.StringUtils; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.apache.ibatis.reflection.MetaObject; 
 | 
import org.springframework.stereotype.Component; 
 | 
  
 | 
import java.sql.Timestamp; 
 | 
import java.util.Date; 
 | 
import java.util.Objects; 
 | 
import java.util.function.Supplier; 
 | 
  
 | 
/** 
 | 
 * Mybatis 自动填充功能 
 | 
 * Mybatis 起始版本 3.3.0(推荐使用) 
 | 
 * 
 | 
 * @author ruoyi 
 | 
 */ 
 | 
  
 | 
@Slf4j 
 | 
@Component 
 | 
public class MyMetaObjectHandler implements MetaObjectHandler { 
 | 
  
 | 
    @Override 
 | 
    public void insertFill(MetaObject metaObject) { 
 | 
        log.info("自动填充-insert"); 
 | 
        // 起始版本 3.3.0(推荐使用) 
 | 
        this.strictInsertFill(metaObject, "createTime", Date.class, new Timestamp(System.currentTimeMillis())); 
 | 
        this.strictInsertFill(metaObject, "operTime", Date.class, new Timestamp(System.currentTimeMillis())); 
 | 
        this.strictInsertFill(metaObject, "loginTime", Date.class, new Timestamp(System.currentTimeMillis())); 
 | 
        if (StringUtils.isNotNull(SecurityUtils.getAuthentication())) { 
 | 
            this.strictInsertFill(metaObject, "createBy", String.class, SecurityUtils.getUsername()); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateFill(MetaObject metaObject) { 
 | 
        log.info("自动填充-update"); 
 | 
        // 起始版本 3.3.0(推荐) 
 | 
        this.strictUpdateFill(metaObject, "updateTime", Date.class, new Timestamp(System.currentTimeMillis())); 
 | 
        if (StringUtils.isNotNull(SecurityUtils.getAuthentication())) { 
 | 
            this.strictUpdateFill(metaObject, "updateBy", String.class, SecurityUtils.getUsername()); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 严格模式填充策略,默认有值不覆盖,如果提供的值为null也不填充 
 | 
     * modify-author: fsd 
 | 
     * modify-issue: 重写strictFillStrategy方法,解决null值不自动填充问题 
 | 
     * 
 | 
     * @param metaObject metaObject meta object parameter 
 | 
     * @param fieldName  java bean property name 
 | 
     * @param fieldVal   java bean property value of Supplier 
 | 
     * @return this 
 | 
     * @since 3.3.0 
 | 
     */ 
 | 
    @Override 
 | 
    public MetaObjectHandler strictFillStrategy(MetaObject metaObject, String fieldName, Supplier<?> fieldVal) { 
 | 
        Object obj = fieldVal.get(); 
 | 
        if (Objects.nonNull(obj)) { 
 | 
            metaObject.setValue(fieldName, obj); 
 | 
        } 
 | 
        return this; 
 | 
    } 
 | 
} 
 |