c957173ee521096a8c5d1c132f71ac17c6e324ef.svn-base 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. package org.jeecg.config.mybatis;
  2. import lombok.extern.slf4j.Slf4j;
  3. import org.apache.ibatis.binding.MapperMethod.ParamMap;
  4. import org.apache.ibatis.executor.Executor;
  5. import org.apache.ibatis.mapping.MappedStatement;
  6. import org.apache.ibatis.mapping.SqlCommandType;
  7. import org.apache.ibatis.plugin.*;
  8. import org.apache.shiro.SecurityUtils;
  9. import org.jeecg.common.system.vo.LoginUser;
  10. import org.jeecg.common.util.oConvertUtils;
  11. import org.springframework.stereotype.Component;
  12. import java.lang.reflect.Field;
  13. import java.util.Date;
  14. import java.util.Properties;
  15. /**
  16. * mybatis拦截器,自动注入创建人、创建时间、修改人、修改时间
  17. * @Author scott
  18. * @Date 2019-01-19
  19. *
  20. */
  21. @Slf4j
  22. @Component
  23. @Intercepts({ @Signature(type = Executor.class, method = "update", args = { MappedStatement.class, Object.class }) })
  24. public class MybatisInterceptor implements Interceptor {
  25. @Override
  26. public Object intercept(Invocation invocation) throws Throwable {
  27. MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];
  28. String sqlId = mappedStatement.getId();
  29. log.debug("------sqlId------" + sqlId);
  30. SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType();
  31. Object parameter = invocation.getArgs()[1];
  32. log.debug("------sqlCommandType------" + sqlCommandType);
  33. if (parameter == null) {
  34. return invocation.proceed();
  35. }
  36. if (SqlCommandType.INSERT == sqlCommandType) {
  37. LoginUser sysUser = this.getLoginUser();
  38. Field[] fields = oConvertUtils.getAllFields(parameter);
  39. for (Field field : fields) {
  40. log.debug("------field.name------" + field.getName());
  41. try {
  42. if ("createBy".equals(field.getName())) {
  43. field.setAccessible(true);
  44. Object local_createBy = field.get(parameter);
  45. field.setAccessible(false);
  46. if (local_createBy == null || local_createBy.equals("")) {
  47. if (sysUser != null) {
  48. // 登录人账号
  49. field.setAccessible(true);
  50. field.set(parameter, sysUser.getUsername());
  51. field.setAccessible(false);
  52. }
  53. }
  54. }
  55. // 注入创建时间
  56. if ("createTime".equals(field.getName())) {
  57. field.setAccessible(true);
  58. Object local_createDate = field.get(parameter);
  59. field.setAccessible(false);
  60. if (local_createDate == null || local_createDate.equals("")) {
  61. field.setAccessible(true);
  62. field.set(parameter, new Date());
  63. field.setAccessible(false);
  64. }
  65. }
  66. //注入部门编码
  67. if ("sysOrgCode".equals(field.getName())) {
  68. field.setAccessible(true);
  69. Object local_sysOrgCode = field.get(parameter);
  70. field.setAccessible(false);
  71. if (local_sysOrgCode == null || local_sysOrgCode.equals("")) {
  72. // 获取登录用户信息
  73. if (sysUser != null) {
  74. field.setAccessible(true);
  75. field.set(parameter, sysUser.getOrgCode());
  76. field.setAccessible(false);
  77. }
  78. }
  79. }
  80. } catch (Exception e) {
  81. }
  82. }
  83. }
  84. if (SqlCommandType.UPDATE == sqlCommandType) {
  85. LoginUser sysUser = this.getLoginUser();
  86. Field[] fields = null;
  87. if (parameter instanceof ParamMap) {
  88. ParamMap<?> p = (ParamMap<?>) parameter;
  89. //update-begin-author:scott date:20190729 for:批量更新报错issues/IZA3Q--
  90. if (p.containsKey("et")) {
  91. parameter = p.get("et");
  92. } else {
  93. parameter = p.get("param1");
  94. }
  95. //update-end-author:scott date:20190729 for:批量更新报错issues/IZA3Q-
  96. //update-begin-author:scott date:20190729 for:更新指定字段时报错 issues/#516-
  97. if (parameter == null) {
  98. return invocation.proceed();
  99. }
  100. //update-end-author:scott date:20190729 for:更新指定字段时报错 issues/#516-
  101. fields = oConvertUtils.getAllFields(parameter);
  102. } else {
  103. fields = oConvertUtils.getAllFields(parameter);
  104. }
  105. for (Field field : fields) {
  106. log.debug("------field.name------" + field.getName());
  107. try {
  108. if ("updateBy".equals(field.getName())) {
  109. //获取登录用户信息
  110. if (sysUser != null) {
  111. // 登录账号
  112. field.setAccessible(true);
  113. field.set(parameter, sysUser.getUsername());
  114. field.setAccessible(false);
  115. }
  116. }
  117. if ("updateTime".equals(field.getName())) {
  118. field.setAccessible(true);
  119. field.set(parameter, new Date());
  120. field.setAccessible(false);
  121. }
  122. } catch (Exception e) {
  123. e.printStackTrace();
  124. }
  125. }
  126. }
  127. return invocation.proceed();
  128. }
  129. @Override
  130. public Object plugin(Object target) {
  131. return Plugin.wrap(target, this);
  132. }
  133. @Override
  134. public void setProperties(Properties properties) {
  135. // TODO Auto-generated method stub
  136. }
  137. //update-begin--Author:scott Date:20191213 for:关于使用Quzrtz 开启线程任务, #465
  138. private LoginUser getLoginUser() {
  139. LoginUser sysUser = null;
  140. try {
  141. sysUser = SecurityUtils.getSubject().getPrincipal() != null ? (LoginUser) SecurityUtils.getSubject().getPrincipal() : null;
  142. } catch (Exception e) {
  143. //e.printStackTrace();
  144. sysUser = null;
  145. }
  146. return sysUser;
  147. }
  148. //update-end--Author:scott Date:20191213 for:关于使用Quzrtz 开启线程任务, #465
  149. }