package com.artfess.base.handler; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Date; import javax.annotation.Resource; import com.artfess.base.context.BaseContext; import org.apache.commons.lang.StringUtils; import org.apache.ibatis.reflection.MetaObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; /** * 字段自动填充处理器 * * @company 广州宏天软件股份有限公司 * @author heyifan * @email heyf@jee-soft.cn * @date 2020年4月8日 */ @Component public class AutoFillMetaObjectHandler implements MetaObjectHandler{ private final Logger logger = LoggerFactory.getLogger(getClass()); @Resource BaseContext baseContext; @Override public void insertFill(MetaObject metaObject) { logger.info("start insert fill ...."); String createBy = baseContext.getCurrentUserId(); String createOrgId = baseContext.getCurrentOrgId(); if(StringUtils.isBlank(createBy)){ createBy = "admin"; } if(StringUtils.isBlank(createOrgId)){ createOrgId = "1432534718389293056"; } this.strictInsertFill(metaObject, "createBy", String.class, createBy); this.strictInsertFill(metaObject, "createOrgId", String.class, createOrgId); this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, (LocalDateTime)getSetterTypeOfLocal(metaObject, "createTime")); } @Override public void updateFill(MetaObject metaObject) { logger.info("start update fill ...."); String updateBy = baseContext.getCurrentUserId(); if(StringUtils.isBlank(updateBy)){ updateBy = "admin"; } this.strictUpdateFill(metaObject, "updateBy", String.class, updateBy); this.setFieldValByName("updateTime", getSetterTypeOfLocal(metaObject, "updateTime"), metaObject); } /** * 通过属性元信息获取指定属性的当前值 *
主要解决不同的日期类型的字段当前值
* @param metaObject * @param propertyName * @return */ private Object getSetterTypeOfLocal(MetaObject metaObject, String propertyName){ Class> targetType = metaObject.getSetterType(propertyName); Object obj = null; if(LocalDateTime.class.equals(targetType)) { obj = LocalDateTime.now(); } else if(LocalDate.class.equals(targetType)) { obj = LocalDate.now(); } else if(Date.class.equals(targetType)) { obj = new Date(); } return obj; } }