FieldMetaObjectHandler.java 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package edu.travel.config;
  2. import cn.hutool.core.util.ObjectUtil;
  3. import com.alibaba.fastjson.JSON;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
  6. import edu.travel.DateUtil;
  7. import edu.travel.cache.util.RedisKey;
  8. import org.apache.ibatis.reflection.MetaObject;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.data.redis.core.StringRedisTemplate;
  11. import org.springframework.security.core.Authentication;
  12. import org.springframework.security.core.context.SecurityContextHolder;
  13. import org.springframework.stereotype.Component;
  14. import org.springframework.web.context.request.RequestContextHolder;
  15. import org.springframework.web.context.request.ServletRequestAttributes;
  16. import javax.servlet.http.HttpServletRequest;
  17. import java.util.Date;
  18. /**
  19. * @author 畅
  20. * 通用字段处理
  21. */
  22. @Component
  23. public class FieldMetaObjectHandler implements MetaObjectHandler {
  24. @Autowired
  25. private StringRedisTemplate stringRedisTemplate;
  26. private final static String UPDATE_USER_ID = "updateUserId";
  27. private final static String UPDATE_TIME = "updateTime";
  28. private final static String CREATE_USER_ID = "createUserId";
  29. private final static String CREATE_TIME = "createTime";
  30. private final static String PROJECT = "project";
  31. private final static String DELETE_FLAG = "deleteFlag";
  32. @Override
  33. public void insertFill(MetaObject metaObject) {
  34. HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();
  35. Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
  36. Object principal = authentication.getPrincipal();
  37. if (principal == null) {
  38. return;
  39. }
  40. Long userId = null;
  41. //时区
  42. String s =null;
  43. if (!(principal instanceof String && "anonymousUser".equals(principal))) {
  44. //走登录用户
  45. String jsonString = JSON.toJSONString(principal);
  46. JSONObject jsonObject = JSON.parseObject(jsonString);
  47. userId = jsonObject.getLong("id");
  48. s = stringRedisTemplate.opsForValue().get(RedisKey.USER_COUNTRY + userId);
  49. }
  50. if (metaObject.hasSetter(CREATE_USER_ID)) {
  51. this.strictInsertFill(metaObject, CREATE_USER_ID, String.class, userId != null ? userId.toString() : "");
  52. }
  53. if (metaObject.hasSetter(CREATE_TIME)) {
  54. this.strictInsertFill(metaObject, CREATE_TIME, Date.class, ObjectUtil.isEmpty(s)? new Date() : DateUtil.convertServerTimeToUserDateTime(s));
  55. }
  56. if (metaObject.hasSetter(PROJECT)) {
  57. this.strictInsertFill(metaObject, PROJECT, String.class, request.getHeader("project"));
  58. }
  59. if (metaObject.hasSetter(DELETE_FLAG)) {
  60. this.strictInsertFill(metaObject, DELETE_FLAG, Integer.class, 0);
  61. }
  62. }
  63. @Override
  64. public void updateFill(MetaObject metaObject) {
  65. Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
  66. JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(principal));
  67. String userId = jsonObject.getLong("id").toString();
  68. String s = stringRedisTemplate.opsForValue().get(RedisKey.USER_COUNTRY + userId);
  69. if (metaObject.hasSetter(UPDATE_USER_ID)) {
  70. this.strictInsertFill(metaObject, UPDATE_USER_ID, String.class, userId);
  71. }
  72. if (metaObject.hasSetter(UPDATE_TIME)) {
  73. this.strictInsertFill(metaObject, UPDATE_TIME, Date.class,ObjectUtil.isEmpty(s)? new Date() : DateUtil.convertServerTimeToUserDateTime(s));
  74. }
  75. }
  76. }