package com.lx.conf;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.lx.context.SessionUser;
import com.lx.utils.FitAbstractEntityInfo;
import org.apache.ibatis.reflection.MetaObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* mybatisplus自定义填充公共字段 ,即没有传的字段自动填充
* @author liu wei ping
*/
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(MyMetaObjectHandler.class);
/**
* 新增填充
* @param metaObject
*/
@Override
public void insertFill(MetaObject metaObject) {
LOGGER.info("insert公共字段填充Start");
Date now = new Date();
Object createUserId = getFieldValByName("createUserId", metaObject);
Object createTime = getFieldValByName("createTime", metaObject);
Object createUserName = getFieldValByName("createUserName", metaObject);
Object locno = getFieldValByName("locno", metaObject);
SessionUser sessionUser = FitAbstractEntityInfo.loadCurrentUser();
if (createUserId == null) {
setFieldValByName("createUserId", sessionUser.getUserId(), metaObject);
}
if (createTime == null) {
setFieldValByName("createTime", now, metaObject);
}
if (createUserName == null) {
setFieldValByName("createUserName", sessionUser.getUserName(), metaObject);
}
if (locno == null) {
setFieldValByName("locno", sessionUser.getLocno(), metaObject);
}
LOGGER.info("公共字段填充end");
}
/**
* 更新填充
* @param metaObject
*/
@Override
public void updateFill(MetaObject metaObject) {
LOGGER.info("update公共字段填充Start");
Object updateUserId = getFieldValByName("updateUserId", metaObject);
Object updateUserName = getFieldValByName("updateUserName", metaObject);
Object updateTime = getFieldValByName("updateTime", metaObject);
Object locno = getFieldValByName("locno", metaObject);
SessionUser sessionUser = FitAbstractEntityInfo.loadCurrentUser();
if (updateUserName == null) {
setFieldValByName("updateUserName", sessionUser.getUserName(), metaObject);
}
if (updateUserId == null) {
setFieldValByName("updateUserId", sessionUser.getUserId(), metaObject);
}
if (updateTime == null) {
setFieldValByName("updateTime", new Date(), metaObject);
}
if (locno == null) {
setFieldValByName("locno", sessionUser.getLocno(), metaObject);
}
LOGGER.info("update公共字段填充end");
}
}
package com.lx.context;
/**
*
* @author liu wei ping
*
*/
public class SessionUser {
private String userId;
private String userName;
private String userAccount;
/**
* 仓库编码
*/
private String locno;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserAccount() {
return userAccount;
}
public void setUserAccount(String userAccount) {
this.userAccount = userAccount;
}
public String getLocno() {
return locno;
}
public void setLocno(String locno) {
this.locno = locno;
}
}
package com.lx.utils;
import com.lx.context.SessionUser;
/**
* 填充抽象实体属性
*
* @author liu wei ping
* @date 2018/11/21
**/
public final class FitAbstractEntityInfo {
private FitAbstractEntityInfo() {
}
private static final String DEFAULT_OPERATOR_ID = "system";
private static final String DEFAULT_OPERATOR_NAME = "超级管理员";
private static final String DEFAULT_LOCNO = "0";
/**
* 用于填充AbstractBaseEntity实体类的公共属性(用于新增时进行默认值填充)
*
* @param entity
*/
/* public static void fitAbstractEntityCommProperyForAdd(AbstractBaseEntity entity) {
UserInfo userInfo = ContextUtils.getUserInfo();
if (userInfo != null && userInfo.getExtendsProps() != null) {
String operateUserName = userInfo.getNickname();
String operateUserId = userInfo.getUsername();
entity.setCreateUserName(operateUserName);
entity.setCreateUserId(operateUserId);
} else {
entity.setCreateUserId(DEFAULT_OPERATOR_ID);
entity.setCreateUserName(DEFAULT_OPERATOR_NAME);
}
Date date = new Date();
entity.setCreateTime(date);
entity.setDelFlag(GlobalConstants.DELETE_NO);
entity.setUpdateUserName(null);
entity.setUpdateTime(null);
entity.setUpdateUserId(null);
}
*//**
* 用于填充AbstractBaseEntity实体类的公共属性(用于新增时进行默认值填充)
*
* @param entity
*//*
public static void fitAbstractEntityCommProperyForEdit(AbstractBaseEntity entity) {
UserInfo userInfo = ContextUtils.getUserInfo();
if (userInfo != null && userInfo.getExtendsProps() != null) {
String operateUserName = userInfo.getNickname();
String operateUserId = userInfo.getUsername();
entity.setUpdateUserName(operateUserName);
entity.setUpdateUserId(operateUserId);
} else {
entity.setUpdateUserId(DEFAULT_OPERATOR_ID);
entity.setUpdateUserName(DEFAULT_OPERATOR_NAME);
}
Date date = new Date();
entity.setUpdateTime(date);
entity.setDelFlag(GlobalConstants.DELETE_NO);
entity.setCreateUserName(null);
entity.setCreateUserId(null);
entity.setCreateTime(null);
}
*//**
* 用于填充AbstractBaseEntity实体类的公共属性(用于新增时进行默认值填充)
*
* @param entity
*//*
public static void fitAbstractWarehouseEntityCommProperyForAdd(AbstractWarehouseBaseEntity entity) {
if (null != entity) {
String locno = FitAbstractEntityInfo.loadCurrentUserLocno();
entity.setLocno(locno);
FitAbstractEntityInfo.fitAbstractEntityCommProperyForAdd(entity);
}
}
*//**
* 用于填充AbstractBaseEntity实体类的公共属性(用于新增时进行默认值填充)
*
* @param entity
*//*
public static void fitAbstractWarehouseEntityCommProperyForEdit(AbstractWarehouseBaseEntity entity) {
if (null != entity) {
String locno = FitAbstractEntityInfo.loadCurrentUserLocno();
entity.setLocno(locno);
FitAbstractEntityInfo.fitAbstractEntityCommProperyForEdit(entity);
}
}*/
/**
* 获取当前用户所属仓库
*
* @return
*/
public static String loadCurrentUserLocno() {
/*UserInfo userInfo = ContextUtils.getUserInfo();
if (userInfo != null && userInfo.getExtendsProps() != null) {
Map<String, String> map = userInfo.getExtendsProps();
return map.get("depotCode") != null ? map.get("depotCode") : DEFAULT_LOCNO;
}*/
return FitAbstractEntityInfo.DEFAULT_LOCNO;
}
public static SessionUser loadCurrentUser() {
SessionUser user = new SessionUser();
//UserInfo userInfo = ContextUtils.getUserInfo();
/*if (userInfo != null) {
user.setLocno(loadCurrentUserLocno());
user.setUserId(userInfo.getUsername());
user.setUserName(userInfo.getNickname());
return user;
}*/
user.setLocno(loadCurrentUserLocno());
user.setUserId(DEFAULT_OPERATOR_ID);
user.setUserName(DEFAULT_OPERATOR_NAME);
user.setUserAccount(DEFAULT_OPERATOR_ID);
return user;
}
}
效果演示图如下: