BaseController.java 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package com.poyee.base.controller;
  2. import com.poyee.base.dto.BaseDto;
  3. import com.poyee.base.dto.BaseReq;
  4. import com.poyee.base.dto.UserInfo;
  5. import com.poyee.base.service.BaseService;
  6. import com.poyee.common.exception.AuthException;
  7. import com.poyee.i18n.I18nUtils;
  8. import com.poyee.util.DateUtils;
  9. import com.poyee.util.ServletUtils;
  10. import lombok.extern.slf4j.Slf4j;
  11. import org.apache.commons.lang.StringUtils;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import javax.servlet.http.HttpServletRequest;
  14. import java.lang.reflect.Field;
  15. import java.util.Date;
  16. import java.util.Objects;
  17. import static com.poyee.i18n.I18nMessageEnums.GET_USER_INFO_ERROR;
  18. import static com.poyee.i18n.I18nMessageEnums.NO_PERMISSION;
  19. /**
  20. *
  21. */
  22. @Slf4j
  23. public abstract class BaseController<S extends BaseService<T, R>, T extends BaseReq, R extends BaseDto> {
  24. @Autowired
  25. protected S baseService;
  26. /**
  27. * 日志
  28. * @param label
  29. * @param obj
  30. */
  31. public void console(String label, Object obj ){
  32. //当前操作用户 及 角色 ,操作时间
  33. String userName = "游客";
  34. String roleCode = "游客";
  35. try{
  36. UserInfo userInfo = ServletUtils.getUserInfo();
  37. String name = StringUtils.isNotBlank(userInfo.getDisplayName()) ? userInfo.getDisplayName() : userInfo.getSub();
  38. if(StringUtils.isBlank(name)){
  39. userName = StringUtils.isNotBlank(userInfo.getUserId()) ? "用户id:"+userInfo.getUserId() : userName;
  40. }
  41. String role = userInfo.getRoleCode();
  42. if (StringUtils.isBlank(role)) {
  43. roleCode = userInfo.isMerchant() ? "商户" : roleCode;
  44. }
  45. } catch (Exception e) {
  46. log.error("当前用户[{}] 角色【{}】获取用户信息异常", userName, roleCode, e);
  47. } finally {
  48. log.info("{} {}\n" + " 当前用户[{}] 角色【{}】操作时间[{}] ", label, obj,
  49. userName, roleCode , DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, new Date()));
  50. }
  51. }
  52. /**
  53. * 检查商户权限
  54. * @param p
  55. * @param <P>
  56. */
  57. public <P extends BaseReq> void checkAndSetMerchantId(P p){
  58. try {
  59. UserInfo userInfo = ServletUtils.getUserInfo();
  60. if(userInfo.isMerchant()) {
  61. //解析 p 中的user_id
  62. if (Objects.nonNull(p)) {
  63. Field merchantId = p.getClass().getDeclaredField("merchantId");
  64. if (Objects.nonNull(merchantId)) {
  65. merchantId.setAccessible(true);
  66. String typeName = merchantId.getType().getName();
  67. if (Objects.equals("java.lang.Long", typeName)) {
  68. merchantId.set(p, Long.valueOf(userInfo.getMerchantId()));
  69. } else if (Objects.equals("java.lang.Integer", typeName)) {
  70. merchantId.set(p, userInfo.getMerchantId());
  71. }
  72. }
  73. }
  74. }
  75. } catch (NoSuchFieldException ne) {
  76. log.error("请求参数中无userId",ne);
  77. throw new AuthException(402, I18nUtils.get(NO_PERMISSION, "【权限不足】"));
  78. } catch (Exception e) {
  79. log.error("获取用户信息失败",e);
  80. throw new AuthException(I18nUtils.get(GET_USER_INFO_ERROR));
  81. }
  82. }
  83. /**
  84. * 获取request
  85. */
  86. public HttpServletRequest getRequest() {
  87. return ServletUtils.getRequest();
  88. }
  89. }