package com.ruoyi.common.handler; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import com.ruoyi.common.utils.SecurityUtils; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.time.LocalDateTime; @Component public class MyMetaObjectHandler implements MetaObjectHandler { private static final String SYSTEM_USER = "system"; @Override public void insertFill(MetaObject meta) { LocalDateTime now = LocalDateTime.now(); String userId = getUserId(); if (hasField(meta, "createBy")) { strictInsertFill(meta, "createBy", String.class, userId); } if (hasField(meta, "updateBy")) { strictInsertFill(meta, "updateBy", String.class, userId); } if (hasField(meta, "createTime")) { strictInsertFill(meta, "createTime", LocalDateTime.class, now); } if (hasField(meta, "updateTime")) { strictInsertFill(meta, "updateTime", LocalDateTime.class, now); } } @Override public void updateFill(MetaObject meta) { LocalDateTime now = LocalDateTime.now(); String userId = getUserId(); if (hasField(meta, "updateBy")) { strictUpdateFill(meta, "updateBy", String.class, userId); } if (hasField(meta, "updateTime")) { setFieldValByName("updateTime", now, meta); } } private String getUserId() { try { Long uid = SecurityUtils.getLoginUser().getUserId(); return uid != null ? uid.toString() : SYSTEM_USER; } catch (Exception e) { return SYSTEM_USER; } } private boolean hasField(MetaObject meta, String fieldName) { if (meta == null || fieldName == null) { return false; } return meta.hasGetter(fieldName) || meta.hasSetter(fieldName); } }