From 8bca6289be590b24ad1214cb12579d8d8e4b0f2f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=B5=B5=E5=95=B8=E9=9D=9E?= <8153694@qq.com>
Date: Tue, 21 Nov 2023 10:48:12 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=B5=84=E6=BA=90=E8=87=AA?=
 =?UTF-8?q?=E5=8A=A8=E5=88=B7=E6=96=B0=E8=8E=B7=E5=8F=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../xhx/base/login/web/LoginController.java   | 49 +++++++++++++------
 .../service/impl/ResourceServiceImpl.java     | 11 ++++-
 2 files changed, 42 insertions(+), 18 deletions(-)

diff --git a/portal-manager/src/main/java/com/mortals/xhx/base/login/web/LoginController.java b/portal-manager/src/main/java/com/mortals/xhx/base/login/web/LoginController.java
index e9d1ed18..4ba0daf6 100644
--- a/portal-manager/src/main/java/com/mortals/xhx/base/login/web/LoginController.java
+++ b/portal-manager/src/main/java/com/mortals/xhx/base/login/web/LoginController.java
@@ -6,14 +6,18 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.mortals.framework.exception.AppException;
 import com.mortals.framework.service.IAuthTokenService;
+import com.mortals.framework.service.ICacheService;
 import com.mortals.framework.service.IUser;
 import com.mortals.framework.util.DateUtils;
 import com.mortals.framework.util.StringUtils;
 import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
+import com.mortals.xhx.base.system.resource.service.ResourceService;
 import com.mortals.xhx.base.system.valid.service.ValidCodeService;
 import com.mortals.xhx.common.code.YesNoEnum;
+import com.mortals.xhx.common.key.RedisKey;
 import com.mortals.xhx.common.pdu.SitePdu;
 import com.mortals.xhx.common.utils.LoginAESUtil;
+import com.mortals.xhx.common.utils.MenuEncodeUtil;
 import com.mortals.xhx.feign.model.IApiModelFeign;
 import com.mortals.xhx.feign.rsp.ApiResp;
 import com.mortals.xhx.module.menu.model.MenuEntity;
@@ -22,6 +26,7 @@ import com.mortals.xhx.module.user.model.UserEntity;
 import com.mortals.xhx.module.user.service.UserService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -43,9 +48,13 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
     private IApiModelFeign apiModelFeign;
     @Autowired
     private ValidCodeService validCodeService;
+    @Autowired
+    private ICacheService cacheService;
+    @Autowired
+    private ResourceService resourceService;
 
     private static final String AES_KEY = "0000000671595991";
-    private static final String AES_IV  = "tdrdadq59tbss5n7";
+    private static final String AES_IV = "tdrdadq59tbss5n7";
 
     @RequestMapping("login")
     public String login(@RequestBody LoginForm loginForm) throws Exception {
@@ -59,15 +68,15 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
             ret.put(KEY_RESULT_MSG, "鏈幏鍙栧埌鐢ㄦ埛淇℃伅锛岃閲嶆柊鐧诲綍");
             return ret.toJSONString();
         }
-        if(loginForm.getType()!=null&&loginForm.getType()==2){
-            loginName = LoginAESUtil.decrypt(loginName,AES_KEY,AES_IV,LoginAESUtil.AES_CBC);
-            password = LoginAESUtil.decrypt(password,AES_KEY,AES_IV,LoginAESUtil.AES_CBC);
+        if (loginForm.getType() != null && loginForm.getType() == 2) {
+            loginName = LoginAESUtil.decrypt(loginName, AES_KEY, AES_IV, LoginAESUtil.AES_CBC);
+            password = LoginAESUtil.decrypt(password, AES_KEY, AES_IV, LoginAESUtil.AES_CBC);
         }
         UserEntity userEntity = null;
         try {
             loginForm.validate();
-            boolean validCode = validCodeService.doCheckImageValidCode(loginForm.getMark(),super.getRequestIP(request),loginForm.getSecurityCode());
-            if(!validCode){
+            boolean validCode = validCodeService.doCheckImageValidCode(loginForm.getMark(), super.getRequestIP(request), loginForm.getSecurityCode());
+            if (!validCode) {
                 throw new AppException("楠岃瘉鐮侀敊璇�");
             }
             userEntity = userService.userdoLogin(loginName, password, ip);
@@ -82,15 +91,23 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
             List<MenuEntity> menuList = menuService.findTreeMenuByUser(userEntity);
             userEntity.setMenuList(menuList);
             data.put("user", userEntity);
-            if(userEntity.getId()==1 && StringUtils.isEmpty(userEntity.getAreaCodes())){
+            Set<String> urls = new HashSet<>();
+            String menuUrl = cacheService.hget(RedisKey.KEY_USER_MENU_CACHE, userEntity.getId().toString(), String.class);
+            if (ObjectUtils.isEmpty(menuUrl)) {
+                urls = resourceService.findUrlSetByUserId(userEntity.getId());
+                menuUrl = MenuEncodeUtil.generateMenuUrlCode(urls);
+                cacheService.hset(RedisKey.KEY_USER_MENU_CACHE, userEntity.getId().toString(), menuUrl);
+            }
+            data.put("urls", urls);
+            if (userEntity.getId() == 1 && StringUtils.isEmpty(userEntity.getAreaCodes())) {
                 JSONArray siteList = new JSONArray();
                 JSONObject siteObject = new JSONObject();
-                siteObject.put("id",0);
-                siteObject.put("siteName","鏃犵珯鐐�");
+                siteObject.put("id", 0);
+                siteObject.put("siteName", "鏃犵珯鐐�");
                 siteList.add(siteObject);
                 data.put("siteList", siteList);
-            }else {
-                if(StringUtils.isNotEmpty(userEntity.getAreaCodes())){
+            } else {
+                if (StringUtils.isNotEmpty(userEntity.getAreaCodes())) {
                     SitePdu sitePdu = new SitePdu();
                     List<String> areaCodeList = Arrays.asList(userEntity.getAreaCodes().split(","));
                     sitePdu.setAreaCodeList(areaCodeList);
@@ -99,12 +116,12 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
                     if (apiResp.getCode() != YesNoEnum.YES.getValue()) {
                         throw new AppException("鑾峰彇鐢ㄦ埛绔欑偣鍒楄〃鏍戞暟鎹け璐ワ細" + apiResp.getMsg());
                     }
-                    if(apiResp.getData().get("data")!=null) {
+                    if (apiResp.getData().get("data") != null) {
                         data.put("siteList", apiResp.getData().get("data"));
-                    }else {
+                    } else {
                         data.put("siteList", Collections.emptyList());
                     }
-                }else {
+                } else {
                     data.put("siteList", Collections.emptyList());
                 }
             }
@@ -120,9 +137,9 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
             return ret.toJSONString();
         } catch (Exception e) {
             log.error("login error ", e);
-            if(e instanceof AppException){
+            if (e instanceof AppException) {
                 ret.put(KEY_RESULT_CODE, ((AppException) e).getCode());
-            }else {
+            } else {
                 ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
             }
             ret.put(KEY_RESULT_MSG, super.convertException(e));
diff --git a/portal-manager/src/main/java/com/mortals/xhx/base/system/resource/service/impl/ResourceServiceImpl.java b/portal-manager/src/main/java/com/mortals/xhx/base/system/resource/service/impl/ResourceServiceImpl.java
index 328f7151..7b297c95 100644
--- a/portal-manager/src/main/java/com/mortals/xhx/base/system/resource/service/impl/ResourceServiceImpl.java
+++ b/portal-manager/src/main/java/com/mortals/xhx/base/system/resource/service/impl/ResourceServiceImpl.java
@@ -71,7 +71,14 @@ public class ResourceServiceImpl extends AbstractCRUDServiceImpl<ResourceDao, Re
     @Override
     public Set<String> findUrlSetByUserId(Long userId) throws AppException {
         Set<String> urls = new HashSet<>();
-        List<ResourceEntity> resList = this.findListByUserId(userId);
+        List<ResourceEntity> resList = new ArrayList<>();
+        if (1L == userId) {
+            //绠$悊鍛�
+            resList = this.find(new ResourceQuery());
+        } else {
+            resList = this.findListByUserId(userId);
+        }
+
         for (ResourceEntity res : resList) {
             String url = res.getUrl();
             if (StringUtils.isEmpty(url)) {
@@ -92,7 +99,7 @@ public class ResourceServiceImpl extends AbstractCRUDServiceImpl<ResourceDao, Re
     public Rest<String> refreshResourceUrl(String packageName, Context context) {
         List<Class<?>> classList = ControllerScanUtil.getAllClassByPackageName(packageName);
         //System.out.println(classList); //鑾峰彇鍒颁簡鎵€鏈夌殑绫�
-        List<ResourceEntity> newResourcelist = ControllerScanUtil.getAnnotationInfo(classList).stream().filter(f->!ObjectUtils.isEmpty(f.getUrl())).collect(Collectors.toList());
+        List<ResourceEntity> newResourcelist = ControllerScanUtil.getAnnotationInfo(classList).stream().filter(f -> !ObjectUtils.isEmpty(f.getUrl())).collect(Collectors.toList());
 
         Map<String, List<ResourceEntity>> localResourceMap = this.find(new ResourceQuery()).stream().collect(Collectors.groupingBy(x -> x.getName()));
         Map<String, List<ResourceEntity>> newResourceMap = newResourcelist.stream().collect(Collectors.groupingBy(x -> x.getName()));
-- 
2.24.3