Kaynağa Gözat

优化用户信息查询

xiaochan 4 ay önce
ebeveyn
işleme
857642dd04

+ 9 - 0
src/main/java/thyyxxk/webserver/dao/his/hutoolcache/HutoolCacheDao.java

@@ -62,9 +62,18 @@ public interface HutoolCacheDao {
     @Select("select role_id from dj_user_role where user_code=#{code}")
     List<Integer> selectUserRoles(String code);
 
+    @Select("select hz_day  from zd_unit_code where code = #{deptCode}")
+    Integer getDeptHzDayByCode(@Param("deptCode") String deptCode);
+
     @Select("select dept_code from zy_part_time_dept where code=#{code}")
     List<String> selectUserPartTimeDept(String code);
 
+    @Select("select RTRIM(code) " +
+            "from zd_unit_code " +
+            "where ${ew.sqlSegment}" +
+            "and isnull(del_flag, 0) = 0")
+    List<String> selectChildDeptByCodeList(@Param(Constants.WRAPPER) QueryWrapper<?> queryWrapper);
+
     @Select(" select rtrim(code) as code,rtrim(name) as name,rtrim(py_code) as pyCode," +
             "rtrim(yb_code) as ybCode from zy_zd_relative_code where code = #{code}")
     RelativeCache.Relative selectRelative(String code);

+ 1 - 21
src/main/java/thyyxxk/webserver/service/LoginService.java

@@ -59,28 +59,8 @@ public class LoginService {
             return ResultVoUtil.fail(ExceptionEnum.INVALID_PASSWORD, userInfo);
         }
         String token = TokenUtil.getInstance().createToken(tempUserInfo.getCode());
-        try {
-            String qxwxToken = tokenService.getWeComAddressBookToken();
-            JSONObject json = srvc.getUserinfo(qxwxToken, tempUserInfo.getCodeRs());
-            tempUserInfo.setAvatar(json.getString("avatar"));
-        } catch (Exception ignored) {
-        }
-        tempUserInfo.setDeptName(deptCache.get(tempUserInfo.getDeptCode()).getName());
-        Set<String> deptList = publicServer.getDept(true, tempUserInfo);
-        if (!deptList.isEmpty()) {
-            Map<String, String> tempMap = new HashMap<>(deptList.size());
-            deptList.forEach(item -> {
-                if (item != null) {
-                    tempMap.put(item, deptCache.getDeptName(item));
-                }
-            });
-            tempUserInfo.setPartTimeDeptMap(tempMap);
-        }
-        tempUserInfo.setHzDay(dao.getDeptHzDayByCode(userInfo.getDeptCode()));
+        tempUserInfo = userCache.get(tempUserInfo.getCode());
         tempUserInfo.setToken(token);
-        tempUserInfo.setRoles(dao.selectUserRoles(tempUserInfo.getCode()));
-        tempUserInfo.setPartTimeDept(dao.selectUserPartTimeDept(userInfo.getCode()));
-        userCache.put(tempUserInfo.getCode(), tempUserInfo);
         return ResultVoUtil.success(tempUserInfo);
     }
 

+ 35 - 5
src/main/java/thyyxxk/webserver/service/hutoolcache/UserCache.java

@@ -2,24 +2,26 @@ package thyyxxk.webserver.service.hutoolcache;
 
 import cn.hutool.cache.Cache;
 import cn.hutool.cache.CacheUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import thyyxxk.webserver.dao.his.hutoolcache.HutoolCacheDao;
 import thyyxxk.webserver.entity.login.UserInfo;
+import thyyxxk.webserver.service.PublicServer;
+import thyyxxk.webserver.utils.ListUtil;
 import thyyxxk.webserver.utils.TokenUtil;
 
-import java.util.List;
+import java.util.*;
 
 @Service
+@RequiredArgsConstructor
 public class UserCache implements HutoolCacheInterface<UserInfo> {
     private final HutoolCacheDao dao;
+    private final DeptCache deptCache;
     private static final int CACHE_SIZE = 512;
     private final Cache<String, UserInfo> cache = CacheUtil.newLFUCache(CACHE_SIZE);
 
-    @Autowired
-    public UserCache(HutoolCacheDao dao) {
-        this.dao = dao;
-    }
 
     @Override
     public void put(String key, UserInfo value) {
@@ -69,11 +71,39 @@ public class UserCache implements HutoolCacheInterface<UserInfo> {
             dao.delNewUserToDjUserBase(userInfo.getCode());
             dao.insertNewUserToDjUserBase(userInfo);
         }
+        userInfo.setDeptName(deptCache.getDeptName(userInfo.getDeptCode()));
+        userInfo.setHzDay(dao.getDeptHzDayByCode(userInfo.getDeptCode()));
         userInfo.setRoles(dao.selectUserRoles(code));
         userInfo.setPartTimeDept(dao.selectUserPartTimeDept(userInfo.getCode()));
+
+        Set<String> deptList = getDept(userInfo.getDeptCode(), userInfo.getPartTimeDept());
+        if (!deptList.isEmpty()) {
+            Map<String, String> tempMap = new HashMap<>(deptList.size());
+            deptList.forEach(item -> {
+                if (item != null) {
+                    tempMap.put(item, deptCache.getDeptName(item));
+                }
+            });
+            userInfo.setPartTimeDeptMap(tempMap);
+        }
         return userInfo;
     }
 
+    private Set<String> getDept(String code, List<String> partTimeDept) {
+        Set<String> list = new HashSet<>();
+        if (ListUtil.notBlank(partTimeDept)) {
+            list.addAll(partTimeDept);
+        }
+        list.add(code);
+        QueryWrapper<?> qw = new QueryWrapper<>();
+        qw.in("parent_code", list);
+        List<String> temp = dao.selectChildDeptByCodeList(qw);
+        if (ListUtil.notBlank(temp)) {
+            list.addAll(temp);
+        }
+        return list;
+    }
+
     public UserInfo getUserInfoByToken() {
         return get(TokenUtil.getInstance().getTokenUserId());
     }