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
- }
|