Browse Source

userutil改造

tanzhongran 4 years ago
parent
commit
435e5b51be

+ 4 - 1
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/infrastructure/interceptor/TokenInterceptor.java

@@ -36,6 +36,9 @@ public class TokenInterceptor implements HandlerInterceptor {
     @Autowired
     private RedisClient redisClient;
 
+    @Autowired
+    private UserUtil userUtil;
+
     @Override
     public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object object) throws Exception {
         // 如果不是映射到方法直接通过
@@ -83,7 +86,7 @@ public class TokenInterceptor implements HandlerInterceptor {
                 Long factoryId = userMap.get("factoryId").asLong();
                 userInfo.setFactoryId(factoryId);
             }
-            UserUtil.setUser(userInfo);
+            userUtil.setUser(userInfo);
         } catch (JWTDecodeException j) {
             throw new BusinessException(401,"用户认证失败");
         }

+ 32 - 4
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/infrastructure/util/UserUtil.java

@@ -1,6 +1,8 @@
 package com.abi.qms.platform.infrastructure.util;
 
 import com.abi.qms.platform.dao.entity.UserInfo;
+import com.abi.qms.platform.dao.mapper.UserInfoMapper;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 /**
@@ -11,18 +13,44 @@ import org.springframework.stereotype.Component;
 @Component
 public class UserUtil {
 
-    private static final InheritableThreadLocal<UserInfo> USER_THREAD_LOCAL = new InheritableThreadLocal();
+    @Autowired
+    private UserInfoMapper userInfoMapper;
 
-    public static void setUser(UserInfo userInfo) {
+    /**
+     * 仅token中的user信息
+     */
+    private final InheritableThreadLocal<UserInfo> USER_THREAD_LOCAL = new InheritableThreadLocal();
+
+    public void setUser(UserInfo userInfo) {
         USER_THREAD_LOCAL.set(userInfo);
     }
 
-    public static UserInfo getUser() {
+    public UserInfo getUser() {
         return USER_THREAD_LOCAL.get();
     }
 
-    public static void releaseUser() {
+    public void releaseUser() {
         USER_THREAD_LOCAL.remove();
     }
 
+    /**
+     * 查询数据库后完整的user信息
+     */
+    private final InheritableThreadLocal<UserInfo> USER_WHOLE_THREAD_LOCAL = new InheritableThreadLocal();
+
+    private synchronized void initWholeUser() {
+        if(USER_WHOLE_THREAD_LOCAL.get()!=null){
+            return;
+        }
+        UserInfo wholeUser = userInfoMapper.selectById(USER_THREAD_LOCAL.get().getId());
+        USER_WHOLE_THREAD_LOCAL.set(wholeUser);
+    }
+
+    public UserInfo getWholeUser() {
+        if(USER_WHOLE_THREAD_LOCAL.get()==null && USER_THREAD_LOCAL.get()!=null && USER_THREAD_LOCAL.get().getId()!=null){
+            initWholeUser();
+        }
+        return USER_WHOLE_THREAD_LOCAL.get();
+    }
+
 }

+ 5 - 2
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/FactoryServiceImpl.java

@@ -64,6 +64,9 @@ public class FactoryServiceImpl implements FactoryService {
     @Autowired
     private QrPackageMapper qrPackageMapper;
 
+    @Autowired
+    private UserUtil userUtil;
+
     /**
      * 供应商新增修改
      **/
@@ -288,8 +291,8 @@ public class FactoryServiceImpl implements FactoryService {
         ListPackageFactorySelectRes listPackageFactorySelectRes = new ListPackageFactorySelectRes();
         QueryWrapper<BaseFactory> param = new QueryWrapper<>();
         //数据权限隔离,如果登录账号是包材厂,只能看账号包材厂的数据。否则看全部
-        if (UserUtil.getUser().getFactoryId() != null) {
-            param.eq("id", UserUtil.getUser().getFactoryId());
+        if (userUtil.getUser().getFactoryId() != null) {
+            param.eq("id", userUtil.getUser().getFactoryId());
             listPackageFactorySelectRes.setLoginType(LoginTypeEnum.PACKAGE.getCode());
         } else {
             listPackageFactorySelectRes.setLoginType(LoginTypeEnum.NOT_PACKAGE.getCode());

+ 5 - 2
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/LoginServiceImpl.java

@@ -55,6 +55,9 @@ public class LoginServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo> impl
     @Autowired
     private RedisClient redisClient;
 
+    @Autowired
+    private UserUtil userUtil;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public LoginRes login(LoginReq req) {
@@ -68,7 +71,7 @@ public class LoginServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo> impl
             if (Objects.isNull(userRole)) {
                 throw new BusinessException("该用户的角色不存在");
             }
-            UserUtil.setUser(userInfo);
+            userUtil.setUser(userInfo);
             String token = getToken(userInfo);
             String redisTokenKey = MessageFormat.format("{0}:{1}",TOKEN_KEY,token);
             redisClient.set(redisTokenKey,true,2, TimeUnit.HOURS);
@@ -91,7 +94,7 @@ public class LoginServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo> impl
         if (ObjectUtil.isNotEmpty(userInfo)) {
             userInfo.setPassword(req.getPassword());
             userInfoMapper.updateById(userInfo);
-            UserUtil.releaseUser();
+            userUtil.releaseUser();
             //删除redis用户token信息
             String userToken = TOKEN_KEY_USER_ID + userInfo.getId();
             if (!redisClient.hasKey(userToken)) {

+ 6 - 3
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/QrBoxCodeFormatImpl.java

@@ -44,6 +44,9 @@ public class QrBoxCodeFormatImpl implements QrBoxCodeFormatService {
     @Autowired
     private QrBoxCodeFormatSplitMapper qrBoxCodeFormatSplitMapper;
 
+    @Autowired
+    private UserUtil userUtil;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void saveBoxCodeFormat(SaveBoxCodeFormatReq req) {
@@ -60,7 +63,7 @@ public class QrBoxCodeFormatImpl implements QrBoxCodeFormatService {
         //2-箱码幅面放入数据
         qrBoxCodeFormat.setQrRepertoryId(req.getQrRepertoryId());
         //若当前登录用户为包材厂用户,则该选项默认选择该用户所在的包材厂,不可修改
-        qrBoxCodeFormat.setFactoryId(UserUtil.getUser().getFactoryId() != null ? UserUtil.getUser().getFactoryId() : req.getFactoryId());
+        qrBoxCodeFormat.setFactoryId(userUtil.getUser().getFactoryId() != null ? userUtil.getUser().getFactoryId() : req.getFactoryId());
         qrBoxCodeFormat.setName(req.getName());
         qrBoxCodeFormat.setColorPerRollScalar(req.getColorPerRollScalar());
         qrBoxCodeFormat.setFormatNumber(req.getFormatNumber());
@@ -111,8 +114,8 @@ public class QrBoxCodeFormatImpl implements QrBoxCodeFormatService {
     @Override
     public ListBoxCodeFormatRes listBoxCodeFormat(ListBoxCodeFormatReq req) {
         //数据权限隔离,如果登录账号是包材厂,只能看账号包材厂的数据。否则看全部
-        if (UserUtil.getUser().getFactoryId() != null) {
-            req.setFactoryId(UserUtil.getUser().getFactoryId());
+        if (userUtil.getUser().getFactoryId() != null) {
+            req.setFactoryId(userUtil.getUser().getFactoryId());
         }
         //分页查询
         IPage<QrBoxCodeFormatVO> iPage = qrBoxCodeFormatMapper.listBoxCodeFormat(PageUtil.createPage(req), req);

+ 4 - 1
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/QrFormatServiceImpl.java

@@ -58,6 +58,9 @@ public class QrFormatServiceImpl implements QrFormatService {
     @Autowired
     private QrVariableMapper qrVariableMapper;
 
+    @Autowired
+    private UserUtil userUtil;
+
     /**
      * 保存码格式
      */
@@ -91,7 +94,7 @@ public class QrFormatServiceImpl implements QrFormatService {
         //2-保存数据
         qrFormat = addQrFormat(req);
         // 新增or修改
-        Long userId = UserUtil.getUser().getId();
+        Long userId = userUtil.getUser().getId();
         qrFormat.setUpdateBy(userId);
         if (qrFormatId != null) {
             qrFormatMapper.updateById(qrFormat);

+ 9 - 12
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/QrPackageServiceImpl.java

@@ -31,13 +31,7 @@ import com.abi.qms.platform.dto.res.GetQrPackageDetailRes;
 import com.abi.qms.platform.dto.res.ListQrPackageRes;
 import com.abi.qms.platform.dto.res.ValidSAPOrderNoAndMaterialRes;
 import com.abi.qms.platform.infrastructure.mq.GenerateCodeConsumer;
-import com.abi.qms.platform.infrastructure.util.AssertUtil;
-import com.abi.qms.platform.infrastructure.util.FreeMarkerUtils;
-import com.abi.qms.platform.infrastructure.util.PageUtil;
-import com.abi.qms.platform.infrastructure.util.RandomCodeUtils;
-import com.abi.qms.platform.infrastructure.util.SendmailUtil;
-import com.abi.qms.platform.infrastructure.util.SmsUtil;
-import com.abi.qms.platform.infrastructure.util.UserUtil;
+import com.abi.qms.platform.infrastructure.util.*;
 import com.abi.qms.platform.service.QrPackageService;
 import com.abi.task.common.api.exception.BusinessException;
 import com.abi.task.common.api.exception.ErrorCodeEnum;
@@ -104,6 +98,9 @@ public class QrPackageServiceImpl implements QrPackageService {
     @Autowired
     private RedisClient redisClient;
 
+    @Autowired
+    private UserUtil userUtil;
+
     /**
      * 保存码包
      */
@@ -167,9 +164,9 @@ public class QrPackageServiceImpl implements QrPackageService {
         // copy属性值
         qrPackage = PojoConverterUtils.copy(req, QrPackage.class);
         //若当前登录用户为包材厂用户,则该选项默认选择该用户所在的包材厂,不可修改
-        qrPackage.setFactoryCoverId(UserUtil.getUser().getFactoryId() != null ? UserUtil.getUser().getFactoryId() : req.getFactoryCoverId());
+        qrPackage.setFactoryCoverId(userUtil.getUser().getFactoryId() != null ? userUtil.getUser().getFactoryId() : req.getFactoryCoverId());
         // 新增or修改
-        Long userId = UserUtil.getUser().getId();
+        Long userId = userUtil.getUser().getId();
         qrPackage.setUpdateBy(userId);
         if (qrPackageId != null) {
             // 修改时,需要重置码包的状态为待审核
@@ -251,8 +248,8 @@ public class QrPackageServiceImpl implements QrPackageService {
     @Override
     public ListQrPackageRes listQrPackage(ListQrPackageReq req) {
         //数据权限隔离,如果登录账号是包材厂,只能看账号包材厂的数据。否则看全部
-        if (UserUtil.getUser().getFactoryId() != null) {
-            req.setFactoryCoverId(UserUtil.getUser().getFactoryId());
+        if (userUtil.getUser().getFactoryId() != null) {
+            req.setFactoryCoverId(userUtil.getUser().getFactoryId());
         }
 
         // 分页查询
@@ -392,7 +389,7 @@ public class QrPackageServiceImpl implements QrPackageService {
         }
 
         // 插入码包下载记录
-        Long userId = UserUtil.getUser().getId();
+        Long userId = userUtil.getUser().getId();
         QrPackageDownloadRecord downloadRecord = new QrPackageDownloadRecord()
                 .setCreateBy(userId)
                 .setQrPackageId(qrPackage.getId());

+ 4 - 1
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/QrRepertoryServiceImpl.java

@@ -58,6 +58,9 @@ public class QrRepertoryServiceImpl implements QrRepertoryService {
     @Autowired
     private QrFormatMapper qrFormatMapper;
 
+    @Autowired
+    private UserUtil userUtil;
+
     /**
      * 保存码库
      */
@@ -114,7 +117,7 @@ public class QrRepertoryServiceImpl implements QrRepertoryService {
         }
 
         // 新增or修改
-        Long userId = UserUtil.getUser().getId();
+        Long userId = userUtil.getUser().getId();
         qrRepertory.setUpdateBy(userId);
         if (qrRepertoryId != null) {
             qrRepertoryMapper.updateById(qrRepertory);

+ 7 - 4
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/RoleManagerServiceImpl.java

@@ -53,6 +53,9 @@ public class RoleManagerServiceImpl implements RoleManagerService {
     @Autowired
     private UserInfoMapper userInfoMapper;
 
+    @Autowired
+    private UserUtil userUtil;
+
     /**
      * 创建角色
      **/
@@ -178,7 +181,7 @@ public class RoleManagerServiceImpl implements RoleManagerService {
     @Override
     public ListRoleRes listRole(ListRoleReq req) {
         //获取当前登录的用户
-        UserInfo user = UserUtil.getUser();
+        UserInfo user = userUtil.getUser();
         //获取当前用户的角色
         UserRole role = getRoleByCode(user.getRoleCode());
 
@@ -208,7 +211,7 @@ public class RoleManagerServiceImpl implements RoleManagerService {
     @Override
     public ListResourceRes listResource() {
         //获取当前登录的用户
-        UserInfo user = UserUtil.getUser();
+        UserInfo user = userUtil.getUser();
         //获取当前用户的角色
         UserRole role = getRoleByCode(user.getRoleCode());
 
@@ -245,7 +248,7 @@ public class RoleManagerServiceImpl implements RoleManagerService {
     @Override
     public ListResourceTreeByRoleCodeRes listResourceTreeByRoleCode(ListResourceTreeByRoleCodeReq req) {
         //获取当前登录的用户
-        UserInfo user = UserUtil.getUser();
+        UserInfo user = userUtil.getUser();
         //获取当前用户的角色
         UserRole role = getRoleByCode(user.getRoleCode());
         //UserRole role = getRoleByCode("20000000051");
@@ -336,7 +339,7 @@ public class RoleManagerServiceImpl implements RoleManagerService {
     @Override
     public ListLoginUserResourceRes listLoginUserResource() {
         //获取当前登录的用户
-        UserInfo user = UserUtil.getUser();
+        UserInfo user = userUtil.getUser();
         //获取当前用户的角色
         UserRole role = getRoleByCode(user.getRoleCode());
         //UserRole role = getRoleByCode("20000000051");

+ 10 - 6
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/UserManagerServiceImpl.java

@@ -4,11 +4,13 @@ import cn.hutool.core.util.ObjectUtil;
 import com.abi.qms.platform.dao.entity.UserInfo;
 import com.abi.qms.platform.dao.entity.UserMappingInfoRole;
 import com.abi.qms.platform.dao.entity.UserRole;
-import com.abi.qms.platform.infrastructure.exception.ErrorCodeEnum;
 import com.abi.qms.platform.dao.mapper.UserInfoMapper;
 import com.abi.qms.platform.dao.mapper.UserMappingInfoRoleMapper;
 import com.abi.qms.platform.dao.mapper.UserRoleMapper;
-import com.abi.qms.platform.dto.req.*;
+import com.abi.qms.platform.dto.req.BatchEnableUserReq;
+import com.abi.qms.platform.dto.req.CreateUserReq;
+import com.abi.qms.platform.dto.req.ListUserReq;
+import com.abi.qms.platform.dto.req.UpdateUserReq;
 import com.abi.qms.platform.dto.res.GetUserInfoRes;
 import com.abi.qms.platform.dto.res.ListRoleTreeRes;
 import com.abi.qms.platform.dto.res.ListUserRes;
@@ -16,7 +18,6 @@ import com.abi.qms.platform.infrastructure.util.PageUtil;
 import com.abi.qms.platform.infrastructure.util.UserUtil;
 import com.abi.qms.platform.service.RoleManagerService;
 import com.abi.qms.platform.service.UserManagerService;
-import com.abi.task.common.api.base.BaseResponse;
 import com.abi.task.common.api.exception.BusinessException;
 import com.abi.task.common.utils.PojoConverterUtils;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -54,6 +55,9 @@ public class UserManagerServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo
     @Autowired
     private RoleManagerService roleManagerService;
 
+    @Autowired
+    private UserUtil userUtil;
+
     /**
      * 创建用户
      **/
@@ -83,7 +87,7 @@ public class UserManagerServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo
         userInfo.setFactoryId(createUserReq.getFactoryId());
         userInfo.setRoleCode(createUserReq.getRoleCode());
 
-        UserInfo loginUser = UserUtil.getUser();
+        UserInfo loginUser = userUtil.getUser();
         userInfo.setCreateBy(loginUser.getId());
         save(userInfo);
         userInfo.setLinkFlag(loginUser.getLinkFlag() + userInfo.getId() + ",");
@@ -138,7 +142,7 @@ public class UserManagerServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo
     @Override
     public ListRoleTreeRes listRoleTree() {
         //获取当前登录的用户
-        UserInfo user = UserUtil.getUser();
+        UserInfo user = userUtil.getUser();
         //获取当前用户的角色
         UserRole role = roleManagerService.getRoleByCode(user.getRoleCode());
 
@@ -170,7 +174,7 @@ public class UserManagerServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo
      **/
     @Override
     public ListUserRes listUser(ListUserReq listUserReq) {
-        UserInfo user = UserUtil.getUser();
+        UserInfo user = userUtil.getUser();
         listUserReq.setLinkFlag("," + user.getId() + ",");
         IPage iPage = userInfoMapper.selectUserInfoPage(PageUtil.createPage(listUserReq), listUserReq);
         List<UserInfo> records = iPage.getRecords();