package cn.besteam.config.mybatis;
|
|
import cn.besteam.common.util.oConvertUtils;
|
import cn.besteam.modules.shiro.authc.util.EnvUtils;
|
import cn.besteam.modules.system.entity.SysUser;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.ibatis.binding.MapperMethod.ParamMap;
|
import org.apache.ibatis.executor.Executor;
|
import org.apache.ibatis.mapping.MappedStatement;
|
import org.apache.ibatis.mapping.SqlCommandType;
|
import org.apache.ibatis.plugin.*;
|
import org.springframework.stereotype.Component;
|
|
import java.lang.reflect.Field;
|
import java.util.Date;
|
import java.util.Properties;
|
|
/**
|
* mybatis拦截器,自动注入创建人、创建时间、修改人、修改时间
|
*
|
* @author scott
|
* @date 2019-01-19
|
*/
|
@Slf4j
|
@Component
|
@Intercepts({@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})})
|
public class MybatisInterceptor implements Interceptor {
|
|
@Override
|
public Object intercept(Invocation invocation) throws Throwable {
|
|
MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];
|
String sqlId = mappedStatement.getId();
|
// log.debug("------sqlId------" + sqlId);
|
SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType();
|
Object parameter = invocation.getArgs()[1];
|
// log.info("------sqlCommandType------" + sqlCommandType);
|
if (parameter == null) {
|
return invocation.proceed();
|
}
|
if (SqlCommandType.INSERT == sqlCommandType) {
|
Field[] fields = parameter.getClass().getDeclaredFields();
|
for (Field field : fields) {
|
// log.debug("------field.name------" + field.getName());
|
try {
|
if ("creator".equals(field.getName())) {
|
field.setAccessible(true);
|
Object local_createBy = field.get(parameter);
|
field.setAccessible(false);
|
if (local_createBy == null || local_createBy.equals("")) {
|
String creator = null;
|
// 获取登录用户信息
|
SysUser user = EnvUtils.getUser();
|
if (user != null) {
|
// 登录账号
|
creator = user.getName();
|
}
|
if (!oConvertUtils.isEmpty(creator)) {
|
field.setAccessible(true);
|
field.set(parameter, creator);
|
field.setAccessible(false);
|
}
|
}
|
}
|
if ("createBy".equals(field.getName())) {
|
field.setAccessible(true);
|
Object local_createBy = field.get(parameter);
|
field.setAccessible(false);
|
if (local_createBy == null || local_createBy.equals("")) {
|
Integer createBy = null;
|
// 获取登录用户信息
|
SysUser user = EnvUtils.getUser();
|
if (user != null) {
|
// 登录账号
|
createBy = user.getId();
|
}
|
if (!oConvertUtils.isEmpty(createBy)) {
|
field.setAccessible(true);
|
field.set(parameter, createBy);
|
field.setAccessible(false);
|
}
|
}
|
}
|
// 注入创建时间
|
if ("createTime".equals(field.getName())) {
|
field.setAccessible(true);
|
Object local_createDate = field.get(parameter);
|
field.setAccessible(false);
|
if (local_createDate == null || local_createDate.equals("")) {
|
field.setAccessible(true);
|
field.set(parameter, new Date());
|
field.setAccessible(false);
|
}
|
}
|
} catch (Exception e) {
|
}
|
}
|
}
|
if (SqlCommandType.UPDATE == sqlCommandType) {
|
Field[] fields = null;
|
if (parameter instanceof ParamMap) {
|
ParamMap<?> p = (ParamMap<?>) parameter;
|
if (p.containsKey("et")) {
|
parameter = p.get("et");
|
} else {
|
parameter = p.get("param1");
|
}
|
fields = parameter.getClass().getDeclaredFields();
|
} else {
|
fields = parameter.getClass().getDeclaredFields();
|
}
|
for (Field field : fields) {
|
// log.debug("------field.name------" + field.getName());
|
try {
|
if ("updateBy".equals(field.getName())) {
|
field.setAccessible(true);
|
Object local_updateBy = field.get(parameter);
|
field.setAccessible(false);
|
if (local_updateBy == null || local_updateBy.equals("")) {
|
Integer updateBy = null;
|
// 获取登录用户信息
|
SysUser user = EnvUtils.getUser();
|
if (user != null) {
|
// 登录账号
|
updateBy = user.getId();
|
}
|
if (!oConvertUtils.isEmpty(updateBy)) {
|
field.setAccessible(true);
|
field.set(parameter, updateBy);
|
field.setAccessible(false);
|
}
|
}
|
}
|
if ("updateTime".equals(field.getName())) {
|
field.setAccessible(true);
|
Object local_updateDate = field.get(parameter);
|
field.setAccessible(false);
|
if (local_updateDate == null || local_updateDate.equals("")) {
|
field.setAccessible(true);
|
field.set(parameter, new Date());
|
field.setAccessible(false);
|
}
|
}
|
} catch (Exception e) {
|
}
|
}
|
}
|
return invocation.proceed();
|
}
|
|
@Override
|
public Object plugin(Object target) {
|
|
return Plugin.wrap(target, this);
|
}
|
|
@Override
|
public void setProperties(Properties properties) {
|
//
|
}
|
|
}
|