| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 | package org.jeecg.config.mybatis;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.apache.shiro.SecurityUtils;import org.jeecg.common.system.vo.LoginUser;import org.jeecg.common.util.oConvertUtils;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.debug("------sqlCommandType------" + sqlCommandType);		if (parameter == null) {			return invocation.proceed();		}		if (SqlCommandType.INSERT == sqlCommandType) {			LoginUser sysUser = this.getLoginUser();			Field[] fields = oConvertUtils.getAllFields(parameter);			for (Field field : fields) {				log.debug("------field.name------" + field.getName());				try {					if ("createBy".equals(field.getName())) {						field.setAccessible(true);						Object local_createBy = field.get(parameter);						field.setAccessible(false);						if (local_createBy == null || local_createBy.equals("")) {							if (sysUser != null) {								// 登录人账号								field.setAccessible(true);								field.set(parameter, sysUser.getUsername());								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);						}					}					//注入部门编码					if ("sysOrgCode".equals(field.getName())) {						field.setAccessible(true);						Object local_sysOrgCode = field.get(parameter);						field.setAccessible(false);						if (local_sysOrgCode == null || local_sysOrgCode.equals("")) {							// 获取登录用户信息							if (sysUser != null) {								field.setAccessible(true);								field.set(parameter, sysUser.getOrgCode());								field.setAccessible(false);							}						}					}				} catch (Exception e) {				}			}		}		if (SqlCommandType.UPDATE == sqlCommandType) {			LoginUser sysUser = this.getLoginUser();			Field[] fields = null;			if (parameter instanceof ParamMap) {				ParamMap<?> p = (ParamMap<?>) parameter;				//update-begin-author:scott date:20190729 for:批量更新报错issues/IZA3Q--				if (p.containsKey("et")) {					parameter = p.get("et");				} else {					parameter = p.get("param1");				}				//update-end-author:scott date:20190729 for:批量更新报错issues/IZA3Q-				//update-begin-author:scott date:20190729 for:更新指定字段时报错 issues/#516-				if (parameter == null) {					return invocation.proceed();				}				//update-end-author:scott date:20190729 for:更新指定字段时报错 issues/#516-				fields = oConvertUtils.getAllFields(parameter);			} else {				fields = oConvertUtils.getAllFields(parameter);			}			for (Field field : fields) {				log.debug("------field.name------" + field.getName());				try {					if ("updateBy".equals(field.getName())) {						//获取登录用户信息						if (sysUser != null) {							// 登录账号							field.setAccessible(true);							field.set(parameter, sysUser.getUsername());							field.setAccessible(false);						}					}					if ("updateTime".equals(field.getName())) {						field.setAccessible(true);						field.set(parameter, new Date());						field.setAccessible(false);					}				} catch (Exception e) {					e.printStackTrace();				}			}		}		return invocation.proceed();	}	@Override	public Object plugin(Object target) {		return Plugin.wrap(target, this);	}	@Override	public void setProperties(Properties properties) {		// TODO Auto-generated method stub	}	//update-begin--Author:scott  Date:20191213 for:关于使用Quzrtz 开启线程任务, #465	private LoginUser getLoginUser() {		LoginUser sysUser = null;		try {			sysUser = SecurityUtils.getSubject().getPrincipal() != null ? (LoginUser) SecurityUtils.getSubject().getPrincipal() : null;		} catch (Exception e) {			//e.printStackTrace();			sysUser = null;		}		return sysUser;	}	//update-end--Author:scott  Date:20191213 for:关于使用Quzrtz 开启线程任务, #465}
 |