diff --git a/common-lib/src/main/java/com/mortals/xhx/feign/device/IDeviceFeign.java b/common-lib/src/main/java/com/mortals/xhx/feign/device/IDeviceFeign.java
index ff017d524964274616c41d469849a150bcf51c77..1900ac20e7f744af5ce43a17eaabdabe6037df86 100644
--- a/common-lib/src/main/java/com/mortals/xhx/feign/device/IDeviceFeign.java
+++ b/common-lib/src/main/java/com/mortals/xhx/feign/device/IDeviceFeign.java
@@ -30,7 +30,7 @@ public interface IDeviceFeign extends IFeign {
      * @param devicePdu
      * @return
      */
-    @PostMapping(value = "/device/list")
+    @PostMapping(value = "/device/interlist")
     Rest<RespData<List<DevicePdu>>> list(@RequestBody DevicePdu devicePdu);
 
 
@@ -40,7 +40,7 @@ public interface IDeviceFeign extends IFeign {
      * @param id
      * @return
      */
-    @GetMapping(value = "/device/info")
+    @GetMapping(value = "/device/interinfo")
     Rest<DevicePdu> info(@RequestParam(value = "id") Long id);
 
 
diff --git a/common-lib/src/main/java/com/mortals/xhx/feign/user/IUserFeign.java b/common-lib/src/main/java/com/mortals/xhx/feign/user/IUserFeign.java
index 41065a679655e598554be14f31be1f074500b8c9..15b3f366089fbec4ed1aa64542210eac50e5e814 100644
--- a/common-lib/src/main/java/com/mortals/xhx/feign/user/IUserFeign.java
+++ b/common-lib/src/main/java/com/mortals/xhx/feign/user/IUserFeign.java
@@ -28,7 +28,7 @@ public interface IUserFeign extends IFeign {
      * @param userPdu
      * @return
      */
-    @PostMapping(value = "/user/list")
+    @PostMapping(value = "/user/interlist")
     Rest<RespData<List<UserPdu>>> list(@RequestBody UserPdu userPdu);
 
 
@@ -38,7 +38,7 @@ public interface IUserFeign extends IFeign {
      * @param id
      * @return
      */
-    @GetMapping(value = "/user/info")
+    @GetMapping(value = "/user/interinfo")
     Rest<UserPdu> info(@RequestParam(value = "id") Long id);
 
     /**
diff --git a/smart-office-manager/src/main/java/com/mortals/xhx/base/framework/interceptor/AuthTokenServiceImpl.java b/smart-office-manager/src/main/java/com/mortals/xhx/base/framework/interceptor/AuthTokenServiceImpl.java
index 4bf2ca6140e837744e81accac4d9c569af8dfb13..793d9d806fcc26f978e85e0eb6a51cfdb81f508e 100644
--- a/smart-office-manager/src/main/java/com/mortals/xhx/base/framework/interceptor/AuthTokenServiceImpl.java
+++ b/smart-office-manager/src/main/java/com/mortals/xhx/base/framework/interceptor/AuthTokenServiceImpl.java
@@ -1,6 +1,5 @@
 package com.mortals.xhx.base.framework.interceptor;
 
-import cn.hutool.core.codec.Base64;
 import com.alibaba.fastjson.JSONObject;
 import com.mortals.framework.ap.SysConstains;
 import com.mortals.framework.service.IAuthTokenService;
@@ -8,30 +7,42 @@ 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.xhx.base.system.resource.service.ResourceService;
 import com.mortals.xhx.base.system.user.model.UserEntity;
+import com.mortals.xhx.base.system.user.service.UserService;
+import com.mortals.xhx.common.key.RedisKey;
+import com.mortals.xhx.common.utils.MenuEncodeUtil;
 import io.jsonwebtoken.Claims;
 import io.jsonwebtoken.Jwts;
 import io.jsonwebtoken.SignatureAlgorithm;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Primary;
 import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.Base64;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * token楠岃瘉澶勭悊
  *
  * @author zxfei
  */
-
+@Primary
 @Service
 @Order(1)
 @Slf4j
 public class AuthTokenServiceImpl implements IAuthTokenService {
+
+    @Autowired
+    private UserService userService;
+
     // 浠ょ墝鑷畾涔夋爣璇�
     @Value("${token.header:Authorization}")
     private String header;
@@ -54,7 +65,6 @@ public class AuthTokenServiceImpl implements IAuthTokenService {
     @Value("${token.database:0}")
     private Integer portalDb;
 
-
     protected static final Long SECOND = 1l;
 
     protected static final Long SECOND_MINUTE = 60 * SECOND;
@@ -70,6 +80,10 @@ public class AuthTokenServiceImpl implements IAuthTokenService {
     @Autowired
     private ICacheService cacheService;
 
+    @Autowired
+    private ResourceService resourceService;
+
+
     /**
      * 鑾峰彇淇℃伅
      *
@@ -82,22 +96,39 @@ public class AuthTokenServiceImpl implements IAuthTokenService {
         String token = getToken(request);
         if (StringUtils.isNotEmpty(token)) {
             try {
+                boolean signed = Jwts.parser().isSigned(token);
+                if (!signed) {
+                    log.error("token闈炴硶锛�=>{}", token);
+                    return null;
+                }
                 Claims claims = parseToken(token);
                 String uuid = (String) claims.get(SysConstains.LOGIN_USER_KEY);
                 String userKey = getTokenKey(uuid);
-//                Rest<String> rest = userFeign.getToken(userKey);
-//                String userStr = rest.getData();
                 cacheService.select(portalDb);
-                 String userStr = cacheService.get(userKey);
-
+                String userStr = cacheService.get(userKey);
+                //鍒锋柊token鏃堕棿
+                UserEntity userEntity = JSONObject.parseObject(userStr, UserEntity.class);
+                if (!ObjectUtils.isEmpty(userEntity)) {
+                    verifyToken(userEntity);
+                }
                 cacheService.select(db);
-                if (StringUtils.isNotEmpty(userStr)) {
-                    UserEntity userEntity = JSONObject.parseObject(userStr, UserEntity.class);
-                    userEntity.setToken(token);
+                if (!ObjectUtils.isEmpty(userEntity)) {
+                    UserEntity temp = userService.getExtCache(userEntity.getLoginName());
+                    if (!ObjectUtils.isEmpty(temp)) {
+                        userEntity.setId(temp.getId());
+                    }
+                    //鏇存柊resource 璺緞
+                    String menuUrlCode = cacheService.hget(RedisKey.KEY_USER_MENU_CACHE, userEntity.getId().toString(), String.class);
+                    if (ObjectUtils.isEmpty(menuUrlCode)) {
+                        Set<String> urls = resourceService.findUrlSetByUserId(userEntity.getId());
+                        menuUrlCode = MenuEncodeUtil.generateMenuUrlCode(urls);
+                        cacheService.hset(RedisKey.KEY_USER_MENU_CACHE, userEntity.getId().toString(), menuUrlCode);
+                    }
+                    userEntity.setMenuUrl(menuUrlCode);
                     return userEntity;
                 }
             } catch (Exception e) {
-                log.error("瑙f瀽jwt token寮傚父锛�", e);
+                log.error("瑙f瀽jwt token寮傚父锛�,token:{}",token, e);
                 return null;
             }
         }
@@ -151,8 +182,8 @@ public class AuthTokenServiceImpl implements IAuthTokenService {
     public void verifyToken(IUser user) {
         long expireTime = user.getExpireTime();
         long currentTime = System.currentTimeMillis();
-        if (expireTime - currentTime <= SECOND_MINUTE_TEN) {
-            log.info("涓嶈冻鍗佸垎閽燂紝鍒锋柊杩囨湡鏃堕棿");
+        if (expireTime - currentTime <= SECOND_MINUTE_TEN*1000) {
+            log.info("涓嶈冻浜屽崄鍒嗛挓锛屽埛鏂拌繃鏈熸椂闂�");
             refreshToken(user);
         }
     }
@@ -164,7 +195,7 @@ public class AuthTokenServiceImpl implements IAuthTokenService {
      */
     public void refreshToken(IUser user) {
         //user.setLoginTime(System.currentTimeMillis());
-        user.setExpireTime(user.getLoginTime() == null ? System.currentTimeMillis() : user.getLoginTime() + expireTime * SECOND_MINUTE);
+        user.setExpireTime(user.getLoginTime() == null ? System.currentTimeMillis() : user.getLoginTime() + expireTime * SECOND_MINUTE*1000);
         // 鏍规嵁uuid灏唘ser缂撳瓨
         String userKey = getTokenKey(user.getToken());
         //璁剧疆鏈夋晥鏃堕棿 鍗曚綅绉�
@@ -182,9 +213,8 @@ public class AuthTokenServiceImpl implements IAuthTokenService {
         String token = Jwts.builder()
                 .setExpiration(DateUtils.addCurrDate(7))
                 .setClaims(claims)
-                .signWith(SignatureAlgorithm.HS256, Base64.encode(secret.getBytes())).compact();
-
-
+                .signWith(SignatureAlgorithm.HS256, Base64.getEncoder()
+                        .encodeToString(secret.getBytes())).compact();
         return token;
     }
 
@@ -197,7 +227,7 @@ public class AuthTokenServiceImpl implements IAuthTokenService {
     @Override
     public Claims parseToken(String token) {
         return Jwts.parser()
-                .setSigningKey(Base64.encode(secret.getBytes()))
+                .setSigningKey(Base64.getEncoder().encodeToString(secret.getBytes()))
                 .parseClaimsJws(token)
                 .getBody();
     }
@@ -232,4 +262,11 @@ public class AuthTokenServiceImpl implements IAuthTokenService {
     private String getTokenKey(String uuid) {
         return SysConstains.LOGIN_TOKEN_KEY + uuid;
     }
+
+
+    public static void main(String[] args) {
+        //  boolean signed = Jwts.parser().isSigned("123");
+        boolean signed = Jwts.parser().isSigned("eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJuaW5naGFvLm5ldCIsImV4cCI6IjE0Mzg5NTU0NDUiLCJuYW1lIjoid2FuZ2hhbyIsImFkbWluIjp0cnVlfQ.SwyHTEx_RQppr97g4J5lKXtabJecpejuef8AqKYMAJc");
+        System.out.println(signed);
+    }
 }
diff --git a/smart-office-manager/src/main/java/com/mortals/xhx/base/login/web/StandaloneLoginController.java b/smart-office-manager/src/main/java/com/mortals/xhx/base/login/web/StandaloneLoginController.java
index 96134db6d05597b3f65baa546fa6109f656d3e95..61e318d08aa66c8a530d1a8738287367c988eb17 100644
--- a/smart-office-manager/src/main/java/com/mortals/xhx/base/login/web/StandaloneLoginController.java
+++ b/smart-office-manager/src/main/java/com/mortals/xhx/base/login/web/StandaloneLoginController.java
@@ -74,7 +74,7 @@ public class StandaloneLoginController extends BaseCRUDJsonBodyMappingController
         try {
             loginForm.validate();
 
-            userEntity = userService.doLogin(loginName, password, ip);
+            //userEntity = userService.doLogin(loginName, password, ip);
             userEntity.setLastLoginAddress(ip);
 
             recordSysLog(request, userEntity, "鐢ㄦ埛鐧诲綍绯荤粺鎴愬姛!");
diff --git a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/resource/dao/ibatis/ResourceDaoImpl.java b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/resource/dao/ibatis/ResourceDaoImpl.java
index ea1abb2f230349f01cf8643ac1a4125a7d6abea8..b7df2d1c3c2238033b309a49af7451475e8adcc4 100644
--- a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/resource/dao/ibatis/ResourceDaoImpl.java
+++ b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/resource/dao/ibatis/ResourceDaoImpl.java
@@ -8,7 +8,6 @@ import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
 import com.mortals.framework.model.ParamDto;
 import com.mortals.xhx.base.system.resource.dao.ResourceDao;
 import com.mortals.xhx.base.system.resource.model.ResourceEntity;
-
 import org.springframework.stereotype.Repository;
 
 import java.util.HashMap;
diff --git a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/resource/model/ResourceEntity.java b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/resource/model/ResourceEntity.java
index 5c42586d34eb06c0cc99b07e17280038c86e86be..8ae450b7d91d59c86085ae1f55ca84ab328a5c30 100644
--- a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/resource/model/ResourceEntity.java
+++ b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/resource/model/ResourceEntity.java
@@ -8,10 +8,10 @@
 
 package com.mortals.xhx.base.system.resource.model;
 
-import java.util.Date;
-
 import com.mortals.framework.model.BaseEntityLong;
 
+import java.util.Date;
+
 /**
  * <p>Title: 璧勬簮淇℃伅</p>
  * <p>Description: ResourceEntity  </p>
diff --git a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/resource/service/impl/ResourceServiceImpl.java b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/resource/service/impl/ResourceServiceImpl.java
index eb1615990dac4d3267236c76c5a95d4325d6e953..15c6d9e7fdc76b8a84a84fc97f124de5c5d04687 100644
--- a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/resource/service/impl/ResourceServiceImpl.java
+++ b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/resource/service/impl/ResourceServiceImpl.java
@@ -15,7 +15,6 @@ import com.mortals.xhx.base.system.resource.dao.ResourceDao;
 import com.mortals.xhx.base.system.resource.model.ResourceEntity;
 import com.mortals.xhx.base.system.resource.model.ResourceQuery;
 import com.mortals.xhx.base.system.resource.service.ResourceService;
-
 import org.springframework.stereotype.Service;
 
 import java.util.HashSet;
diff --git a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/resource/web/ResourceController.java b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/resource/web/ResourceController.java
index 1958f87926dec3d3200b2ab80387888707fbbb90..c75ef9606437b03ee9b3073d14f3c660256e48ff 100644
--- a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/resource/web/ResourceController.java
+++ b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/resource/web/ResourceController.java
@@ -1,27 +1,22 @@
 package com.mortals.xhx.base.system.resource.web;
 
 
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
+import com.alibaba.fastjson.JSONObject;
 import com.mortals.framework.common.IBaseEnum;
 import com.mortals.framework.common.code.UserType;
+import com.mortals.framework.model.Context;
 import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
+import com.mortals.xhx.base.system.resource.model.ResourceEntity;
+import com.mortals.xhx.base.system.resource.service.ResourceService;
+import com.mortals.xhx.common.code.AuthType;
+import com.mortals.xhx.common.code.SourceType;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import com.alibaba.fastjson.JSONObject;
-import com.mortals.framework.model.Context;
-import com.mortals.framework.web.BaseCRUDJsonMappingController;
-import com.mortals.xhx.base.system.resource.model.ResourceEntity;
-import com.mortals.xhx.base.system.resource.service.ResourceService;
-import com.mortals.xhx.common.code.AuthType;
-import com.mortals.xhx.common.code.SourceType;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * 璧勬簮淇℃伅
diff --git a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/dao/ibatis/RoleAuthDaoImpl.java b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/dao/ibatis/RoleAuthDaoImpl.java
index e49065f0420f549bf35b44e1fdd246475400337b..899e2787e1534a47b4535294ccbb80937d2178a4 100644
--- a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/dao/ibatis/RoleAuthDaoImpl.java
+++ b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/dao/ibatis/RoleAuthDaoImpl.java
@@ -11,7 +11,6 @@ package com.mortals.xhx.base.system.role.dao.ibatis;
 import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
 import com.mortals.xhx.base.system.role.dao.RoleAuthDao;
 import com.mortals.xhx.base.system.role.model.RoleAuthEntity;
-
 import org.springframework.stereotype.Repository;
 
 /**
diff --git a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/dao/ibatis/RoleDaoImpl.java b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/dao/ibatis/RoleDaoImpl.java
index d80bc5003092f51e316b643fed6c8f94f5fc4701..34483bcd03b07b0af04240fcbd5c827495d1432c 100644
--- a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/dao/ibatis/RoleDaoImpl.java
+++ b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/dao/ibatis/RoleDaoImpl.java
@@ -11,7 +11,6 @@ package com.mortals.xhx.base.system.role.dao.ibatis;
 import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
 import com.mortals.xhx.base.system.role.dao.RoleDao;
 import com.mortals.xhx.base.system.role.model.RoleEntity;
-
 import org.springframework.stereotype.Repository;
 
 /**
diff --git a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/dao/ibatis/RoleUserDaoImpl.java b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/dao/ibatis/RoleUserDaoImpl.java
index 811745b5db4806fa4bc1a25bbb4919ebcd52b0e0..dea1aca59a94d781c7fba06151b047fae376534a 100644
--- a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/dao/ibatis/RoleUserDaoImpl.java
+++ b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/dao/ibatis/RoleUserDaoImpl.java
@@ -11,7 +11,6 @@ package com.mortals.xhx.base.system.role.dao.ibatis;
 import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
 import com.mortals.xhx.base.system.role.dao.RoleUserDao;
 import com.mortals.xhx.base.system.role.model.RoleUserEntity;
-
 import org.springframework.stereotype.Repository;
 
 /**
diff --git a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/model/RoleEntity.java b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/model/RoleEntity.java
index 8bea5f13bc1444cb8d0e7fa9573f3fa8e72a1837..5ed0f2c136ec02ec608b95044debe7b6d2a9540e 100644
--- a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/model/RoleEntity.java
+++ b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/model/RoleEntity.java
@@ -8,10 +8,10 @@
 
 package com.mortals.xhx.base.system.role.model;
 
-import java.util.Date;
-
 import com.mortals.framework.model.BaseEntityLong;
 
+import java.util.Date;
+
 /**
  * <p>Title: 瑙掕壊淇℃伅</p>
  * <p>Description: RoleEntity  </p>
@@ -22,11 +22,7 @@ import com.mortals.framework.model.BaseEntityLong;
  */
 public class RoleEntity extends BaseEntityLong{
 	private static final long serialVersionUID = 1547777703344L;
-
-
-	/** 鐢ㄦ埛ID */
-	private Long userId;
-
+	
 	/** 瑙掕壊鍚嶇О */
 	private String name;
 
diff --git a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/service/impl/RoleAuthServiceImpl.java b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/service/impl/RoleAuthServiceImpl.java
index 8beaea0d99a98569f8d23fd78fddf465e8f41863..55cc76f1728d385cdf3e5d0971d7c3ed6a9590a8 100644
--- a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/service/impl/RoleAuthServiceImpl.java
+++ b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/service/impl/RoleAuthServiceImpl.java
@@ -1,37 +1,44 @@
 /**
-* 鏂囦欢锛歊oleAuthServiceImpl.java
-* 鐗堟湰锛�1.0.0
-* 鏃ユ湡锛�
-* Copyright &reg; 
-* All right reserved.
-*/
+ * 鏂囦欢锛歊oleAuthServiceImpl.java
+ * 鐗堟湰锛�1.0.0
+ * 鏃ユ湡锛�
+ * Copyright &reg;
+ * All right reserved.
+ */
 
 package com.mortals.xhx.base.system.role.service.impl;
 
+import com.mortals.framework.service.ICacheService;
 import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
+import com.mortals.framework.util.DataUtil;
+import com.mortals.xhx.base.system.resource.service.ResourceService;
 import com.mortals.xhx.base.system.role.dao.RoleAuthDao;
 import com.mortals.xhx.base.system.role.model.RoleAuthEntity;
 import com.mortals.xhx.base.system.role.model.RoleAuthQuery;
 import com.mortals.xhx.base.system.role.service.RoleAuthService;
-
+import com.mortals.xhx.common.key.RedisKey;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+
+import static com.mortals.xhx.common.utils.MenuEncodeUtil.generateMenuUrlCode;
 
 /**
  * <p>Title: 瑙掕壊璧勬簮鏉冮檺</p>
  * <p>Description: RoleAuthServiceImpl service鎺ュ彛 </p>
  * <p>Copyright: Copyright &reg;  </p>
  * <p>Company: </p>
- * @author 
+ * @author
  * @version 1.0.0
  */
 @Service("roleAuthService")
-public class RoleAuthServiceImpl extends AbstractCRUDServiceImpl<RoleAuthDao,RoleAuthEntity,Long> implements RoleAuthService {
+public class RoleAuthServiceImpl extends AbstractCRUDServiceImpl<RoleAuthDao, RoleAuthEntity, Long> implements RoleAuthService {
 
+    @Autowired
+    private ICacheService cacheService;
+    @Autowired
+    private ResourceService resourceService;
 
     @Override
     public void doDistributionSource(RoleAuthQuery query) {
@@ -49,6 +56,18 @@ public class RoleAuthServiceImpl extends AbstractCRUDServiceImpl<RoleAuthDao,Rol
             list.add(entity);
         }
         this.dao.insertBatch(list);
+
+        this.updateUserMenuUrlCache();
     }
-	
+
+    private void updateUserMenuUrlCache() {
+        //鏇存柊鐢ㄦ埛鑿滃崟
+        Set<String> hkeys = cacheService.hkeys(RedisKey.KEY_USER_MENU_CACHE);
+        for (String userId : hkeys) {
+            Set<String> urls = resourceService.findUrlSetByUserId(DataUtil.converStr2Long(userId, 0L));
+            String menuUrlCode = generateMenuUrlCode(urls);
+            cacheService.hset(RedisKey.KEY_USER_MENU_CACHE, userId, menuUrlCode);
+        }
+    }
+
 }
\ No newline at end of file
diff --git a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/service/impl/RoleServiceImpl.java b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/service/impl/RoleServiceImpl.java
index 36c6c9a088f149ec4c1602005f132fb050531342..29028b8a1cc707939b570cac5cd6f7dd6179b8ba 100644
--- a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/service/impl/RoleServiceImpl.java
+++ b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/service/impl/RoleServiceImpl.java
@@ -1,10 +1,10 @@
 /**
-* 鏂囦欢锛歊oleServiceImpl.java
-* 鐗堟湰锛�1.0.0
-* 鏃ユ湡锛�
-* Copyright &reg; 
-* All right reserved.
-*/
+ * 鏂囦欢锛歊oleServiceImpl.java
+ * 鐗堟湰锛�1.0.0
+ * 鏃ユ湡锛�
+ * Copyright &reg;
+ * All right reserved.
+ */
 
 package com.mortals.xhx.base.system.role.service.impl;
 
@@ -15,7 +15,6 @@ import com.mortals.xhx.base.system.role.dao.RoleDao;
 import com.mortals.xhx.base.system.role.model.*;
 import com.mortals.xhx.base.system.role.service.RoleAuthService;
 import com.mortals.xhx.base.system.role.service.RoleService;
-
 import com.mortals.xhx.base.system.role.service.RoleUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -27,7 +26,7 @@ import java.util.Arrays;
  * <p>Description: RoleServiceImpl service鎺ュ彛 </p>
  * <p>Copyright: Copyright &reg;  </p>
  * <p>Company: </p>
- * @author 
+ * @author
  * @version 1.0.0
  */
 @Service("roleService")
@@ -56,5 +55,5 @@ public class RoleServiceImpl extends AbstractCRUDServiceImpl<RoleDao,RoleEntity,
         }).count();
         super.removeAfter(ids, context, result);
     }
-	
+
 }
\ No newline at end of file
diff --git a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/service/impl/RoleUserServiceImpl.java b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/service/impl/RoleUserServiceImpl.java
index 8251b7c55d3632f3a2902fcacc74693f947a8d09..a8a9abefb3827e203d5b273ccfa2bb8f4ee29673 100644
--- a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/service/impl/RoleUserServiceImpl.java
+++ b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/service/impl/RoleUserServiceImpl.java
@@ -1,37 +1,47 @@
 /**
-* 鏂囦欢锛歊oleUserServiceImpl.java
-* 鐗堟湰锛�1.0.0
-* 鏃ユ湡锛�
-* Copyright &reg; 
-* All right reserved.
-*/
+ * 鏂囦欢锛歊oleUserServiceImpl.java
+ * 鐗堟湰锛�1.0.0
+ * 鏃ユ湡锛�
+ * Copyright &reg;
+ * All right reserved.
+ */
 
 package com.mortals.xhx.base.system.role.service.impl;
 
+import com.mortals.framework.exception.AppException;
+import com.mortals.framework.model.Context;
+import com.mortals.framework.service.ICacheService;
 import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
+import com.mortals.framework.util.DataUtil;
+import com.mortals.xhx.base.system.resource.service.ResourceService;
 import com.mortals.xhx.base.system.role.dao.RoleUserDao;
 import com.mortals.xhx.base.system.role.model.RoleUserEntity;
 import com.mortals.xhx.base.system.role.model.RoleUserQuery;
 import com.mortals.xhx.base.system.role.service.RoleUserService;
-
+import com.mortals.xhx.common.key.RedisKey;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+
+import static com.mortals.xhx.common.utils.MenuEncodeUtil.generateMenuUrlCode;
 
 /**
  * <p>Title: 瑙掕壊鐢ㄦ埛</p>
  * <p>Description: RoleUserServiceImpl service鎺ュ彛 </p>
  * <p>Copyright: Copyright &reg;  </p>
  * <p>Company: </p>
- * @author 
+ * @author
  * @version 1.0.0
  */
 @Service("roleUserService")
-public class RoleUserServiceImpl extends AbstractCRUDServiceImpl<RoleUserDao,RoleUserEntity,Long> implements RoleUserService {
+public class RoleUserServiceImpl extends AbstractCRUDServiceImpl<RoleUserDao, RoleUserEntity, Long> implements RoleUserService {
+
+    @Autowired
+    private ICacheService cacheService;
 
+    @Autowired
+    private ResourceService resourceService;
 
     @Override
     public void doDistributionUser(RoleUserQuery query) {
@@ -50,6 +60,7 @@ public class RoleUserServiceImpl extends AbstractCRUDServiceImpl<RoleUserDao,Rol
             list.add(rolseUser);
         }
         this.dao.insertBatch(list);
+        updateUserMenuUrlCache();
     }
 
     @Override
@@ -68,8 +79,22 @@ public class RoleUserServiceImpl extends AbstractCRUDServiceImpl<RoleUserDao,Rol
             list.add(rolseUser);
         }
         this.dao.insertBatch(list);
+        updateUserMenuUrlCache();
     }
 
+    @Override
+    protected void removeAfter(Long[] ids, Context context, int result) throws AppException {
+        updateUserMenuUrlCache();
+    }
 
+    private void updateUserMenuUrlCache() {
+        //鏇存柊鐢ㄦ埛鑿滃崟
+        Set<String> hkeys = cacheService.hkeys(RedisKey.KEY_USER_MENU_CACHE);
+        for (String userId : hkeys) {
+            Set<String> urls = resourceService.findUrlSetByUserId(DataUtil.converStr2Long(userId, 0L));
+            String menuUrlCode = generateMenuUrlCode(urls);
+            cacheService.hset(RedisKey.KEY_USER_MENU_CACHE, userId, menuUrlCode);
+        }
+    }
 
 }
\ No newline at end of file
diff --git a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/web/RoleAuthController.java b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/web/RoleAuthController.java
index 5e43a945fb5f8bae4f6ffa1d7f74357323580a59..a983f7c2fbc480f7a6304e591dcbe2081059a443 100644
--- a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/web/RoleAuthController.java
+++ b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/web/RoleAuthController.java
@@ -3,20 +3,15 @@ package com.mortals.xhx.base.system.role.web;
 
 import com.alibaba.fastjson.JSONObject;
 import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
+import com.mortals.xhx.base.system.role.model.RoleAuthEntity;
 import com.mortals.xhx.base.system.role.model.RoleAuthQuery;
+import com.mortals.xhx.base.system.role.service.RoleAuthService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import com.mortals.framework.web.BaseCRUDJsonMappingController;
-import com.mortals.xhx.base.system.role.model.RoleAuthEntity;
-import com.mortals.xhx.base.system.role.service.RoleAuthService;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 /**
  * 瑙掕壊璧勬簮鏉冮檺
  *
diff --git a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/web/RoleController.java b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/web/RoleController.java
index 1c3aadfd75ca02f74d2561d2f9bcd4cd3af4f995..f491e678b00e3a11efe463778aa9b443167619fc 100644
--- a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/web/RoleController.java
+++ b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/web/RoleController.java
@@ -5,21 +5,18 @@ import com.alibaba.fastjson.JSONObject;
 import com.mortals.framework.common.IBaseEnum;
 import com.mortals.framework.common.code.UserType;
 import com.mortals.framework.model.Context;
-
 import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
-import com.mortals.framework.web.BasePhpCRUDJsonMappingController;
-import com.mortals.xhx.base.system.role.model.RoleQuery;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-import com.mortals.framework.web.BaseCRUDJsonMappingController;
 import com.mortals.xhx.base.system.role.model.RoleEntity;
 import com.mortals.xhx.base.system.role.model.RoleUserEntity;
 import com.mortals.xhx.base.system.role.service.RoleService;
 import com.mortals.xhx.base.system.role.service.RoleUserService;
 import com.mortals.xhx.common.code.RoleType;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
diff --git a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/web/RoleUserController.java b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/web/RoleUserController.java
index 39e025008240b32efdb7637cd8dff6abef56e5bf..63feafc8d7134265b39c87306f3e78a461002f73 100644
--- a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/web/RoleUserController.java
+++ b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/role/web/RoleUserController.java
@@ -7,26 +7,22 @@ import com.mortals.framework.ap.SysConstains;
 import com.mortals.framework.exception.AppException;
 import com.mortals.framework.model.BaseEntityLong;
 import com.mortals.framework.model.Context;
-
 import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
-import com.mortals.xhx.base.system.role.model.RoleUserQuery;
-import org.apache.commons.beanutils.MethodUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.mortals.framework.web.BaseCRUDJsonMappingController;
 import com.mortals.xhx.base.system.role.model.RoleEntity;
 import com.mortals.xhx.base.system.role.model.RoleUserEntity;
+import com.mortals.xhx.base.system.role.model.RoleUserQuery;
 import com.mortals.xhx.base.system.role.service.RoleService;
 import com.mortals.xhx.base.system.role.service.RoleUserService;
 import com.mortals.xhx.base.system.user.model.UserEntity;
 import com.mortals.xhx.base.system.user.model.UserQuery;
 import com.mortals.xhx.base.system.user.service.UserService;
+import org.apache.commons.beanutils.MethodUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
diff --git a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/dao/ibatis/UserDaoImpl.java b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/dao/ibatis/UserDaoImpl.java
index 9980470d15f7461aa956ece75e5d98338786b51c..e1f809d42f680d7ccaf21a0209cfc1fcb9f2fa60 100644
--- a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/dao/ibatis/UserDaoImpl.java
+++ b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/dao/ibatis/UserDaoImpl.java
@@ -8,11 +8,10 @@
 
 package com.mortals.xhx.base.system.user.dao.ibatis;
 
-import com.mortals.xhx.base.system.user.dao.UserDao;
-import com.mortals.xhx.base.system.user.model.UserEntity;
 import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
 import com.mortals.framework.model.ParamDto;
-
+import com.mortals.xhx.base.system.user.dao.UserDao;
+import com.mortals.xhx.base.system.user.model.UserEntity;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
diff --git a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/model/UserEntity.java b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/model/UserEntity.java
index 4c3278cfcaaa3b5606c9ed62656e7309665f5699..20f30ab91cacf06f7a8e70e1d98983fd7df4453e 100644
--- a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/model/UserEntity.java
+++ b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/model/UserEntity.java
@@ -131,8 +131,7 @@ public class UserEntity extends UserVo implements IUser {
 
     @Override
     public boolean isAdmin() {
-       // return super.getId() == null ? false : super.getId().longValue() == SysConstains.ADMIN_ID;
-        return true;
+        return super.getId() == null ? false : super.getId().longValue() == SysConstains.ADMIN_ID;
     }
 
     @Override
diff --git a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/model/UserEntityExt.java b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/model/UserEntityExt.java
deleted file mode 100644
index 204419c46c09c8a2bcf7fa7440d176673fde6b9b..0000000000000000000000000000000000000000
--- a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/model/UserEntityExt.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.mortals.xhx.base.system.user.model;
-
-import com.mortals.framework.model.BaseEntityLong;
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * Description:User
- * date: 2021-9-26 16:11:48
- */
-@Data
-public class UserEntityExt extends BaseEntityLong {
-    /**
-     * 绔欑偣鍚嶇О
-     */
-    private String siteName;
-
-    private String roleIds;
-    /**
-     * 鍞竴鏍囪瘑
-     */
-    private String token;
-    /**
-     * 鑿滃崟鏍�
-     */
-    private String menuUrl;
-
-    /**
-     * 鐧诲綍鏃堕棿
-     */
-    private Long loginTime;
-
-    /**
-     * 杩囨湡鏃堕棿
-     */
-    private Long expireTime;
-
-
-
-
-}
\ No newline at end of file
diff --git a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/model/UserQuery.java b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/model/UserQuery.java
index e8d58eec6228ef0f2916fe32ac87f9c94e2da1a9..0b76d804f0487404636a1117ca4f436ebcc46cb1 100644
--- a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/model/UserQuery.java
+++ b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/model/UserQuery.java
@@ -1,7 +1,6 @@
 package com.mortals.xhx.base.system.user.model;
 
 
-import java.util.Date;
 import java.util.List;
 /**
  * 鐢ㄦ埛淇℃伅涓氬姟鏌ヨ瀵硅薄
diff --git a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/model/vo/UserVo.java b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/model/vo/UserVo.java
index aae3f6758b2fca1af21230de5f16dd0c495fdf8b..ed02779044f07d409862f86e88013c02fdecebbd 100644
--- a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/model/vo/UserVo.java
+++ b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/model/vo/UserVo.java
@@ -4,9 +4,6 @@ package com.mortals.xhx.base.system.user.model.vo;
 import com.mortals.framework.model.BaseEntityLong;
 import lombok.Data;
 
-import java.util.ArrayList;
-import java.util.List;
-
 /**
  * 鐢ㄦ埛淇℃伅涓氬姟瑙嗗浘瀵硅薄
  *
@@ -15,6 +12,7 @@ import java.util.List;
  */
 @Data
 public class UserVo extends BaseEntityLong {
+
     /**
      * 绔欑偣鍚嶇О
      */
@@ -39,4 +37,8 @@ public class UserVo extends BaseEntityLong {
      * 杩囨湡鏃堕棿
      */
     private Long expireTime;
+
+    private String oldPassword;
+    private String newPassword;
+    private String siteIds;
 }
\ No newline at end of file
diff --git a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/service/UserService.java b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/service/UserService.java
index 741268692c12c00895ba1c6dce9a146e44ce24c8..f7e502d99cdc8007a023be5f7696dff4420565a1 100644
--- a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/service/UserService.java
+++ b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/service/UserService.java
@@ -8,9 +8,9 @@
 
 package com.mortals.xhx.base.system.user.service;
 
+import com.mortals.framework.common.Rest;
 import com.mortals.framework.exception.AppException;
-import com.mortals.framework.model.Result;
-import com.mortals.framework.service.ICRUDService;
+import com.mortals.framework.service.ICRUDCacheService;
 import com.mortals.framework.service.IUser;
 import com.mortals.xhx.base.system.menu.model.MenuEntity;
 import com.mortals.xhx.base.system.user.dao.UserDao;
@@ -28,17 +28,9 @@ import java.util.Set;
  * @version 1.0.0
  */
 
-public interface UserService extends ICRUDService<UserEntity,Long> {
-    /**
-     * 鐢ㄦ埛鐧诲綍
-     *
-     * @param loginName 鐧诲綍鐢ㄦ埛鍚�
-     * @param password  鐧诲綍瀵嗙爜
-     * @param loginIp   鐧诲綍IP
-     * @return
-     * @throws AppException
-     */
-     UserEntity doLogin(String loginName, String password, String loginIp) throws AppException;
+public interface UserService extends ICRUDCacheService<UserEntity,Long> {
+
+
 
     /**
      * 鏍¢獙鐢ㄦ埛鍚嶄笌瀵嗙爜鏄惁姝g‘
@@ -48,16 +40,7 @@ public interface UserService extends ICRUDService<UserEntity,Long> {
      * @return
      * @throws AppException
      */
-     UserEntity doCheckUser(String loginName, String password) throws AppException;
-
-    /**
-     * 妫€鏌ョ敤鎴锋槸鍚﹀瓨鍦�
-     *
-     * @param loginName 鐧诲綍鐢ㄦ埛鍚�
-     * @param userId    瀵嗙爜
-     * @return
-     */
-     boolean existUser(String loginName, Long userId) throws AppException;
+    UserEntity doCheckUser(String loginName, String password) throws AppException;
 
     /**
      * 閫氳繃鐧诲綍鐢ㄦ埛鑾峰彇鑿滃崟鍔熻兘鏉冮檺
@@ -73,49 +56,10 @@ public interface UserService extends ICRUDService<UserEntity,Long> {
      * @param userEntity
      * @return
      */
-     Set<Long> findAllAuthIds(UserEntity userEntity) throws AppException;
-
-    /**
-     * 鏌ヨ鐢ㄦ埛璁板綍
-     *
-     * @param platformId
-     * @param params
-     * @param currPage
-     * @param prePageResult
-     * @return
-     * @throws AppException
-     */
-     Result<UserEntity> find(Long platformId, UserEntity params, int currPage, int prePageResult) throws AppException;
-
-    /**
-     * 涓哄鎴峰垱寤虹敤鎴�
-     *
-     * @param currUser     褰撳墠鐢ㄦ埛
-     * @param customerId   瀹㈡埛ID
-     * @param customerName 瀹㈡埛鍚嶇О
-     * @param loginName
-     * @param password
-     * @param userName
-     * @param mobile
-     * @return
-     * @throws AppException
-     */
-     UserEntity createUser(IUser currUser, Long customerId, String customerName, String loginName, String password,
-                                 String userName, String mobile) throws AppException;
-
-    /**
-     * 鐢ㄦ埛淇敼瀵嗙爜
-     *
-     * @param loginName
-     * @param oldPwd
-     * @param newPwd
-     * @return
-     * @throws AppException
-     */
-     boolean updateUserPwd(String loginName, String oldPwd, String newPwd) throws AppException;
-
+    Set<Long> findAllAuthIds(UserEntity userEntity) throws AppException;
 
+    Rest<Void> refreshUser();
 
-      UserDao getUserDao();
+    UserDao getUserDao();
 
 }
\ No newline at end of file
diff --git a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/service/impl/UserServiceImpl.java b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/service/impl/UserServiceImpl.java
index cc0cf32509c85d23a759937c6b82cc7a7aa53129..5f9140bdb4dc9a57a7111f6879beddf5fe3cdc9c 100644
--- a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/service/impl/UserServiceImpl.java
+++ b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/service/impl/UserServiceImpl.java
@@ -9,13 +9,12 @@
 package com.mortals.xhx.base.system.user.service.impl;
 
 import com.mortals.framework.ap.SysConstains;
-import com.mortals.framework.common.code.UserType;
+import com.mortals.framework.common.Rest;
 import com.mortals.framework.exception.AppException;
 import com.mortals.framework.model.Context;
 import com.mortals.framework.model.PageInfo;
-import com.mortals.framework.model.Result;
 import com.mortals.framework.service.IUser;
-import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
+import com.mortals.framework.service.impl.AbstractCRUDCacheServiceImpl;
 import com.mortals.framework.util.SecurityUtil;
 import com.mortals.framework.util.StringUtils;
 import com.mortals.xhx.base.system.menu.model.MenuEntity;
@@ -24,14 +23,17 @@ import com.mortals.xhx.base.system.resource.model.ResourceEntity;
 import com.mortals.xhx.base.system.resource.service.ResourceService;
 import com.mortals.xhx.base.system.role.model.RoleUserEntity;
 import com.mortals.xhx.base.system.role.model.RoleUserQuery;
-import com.mortals.xhx.base.system.role.service.RoleService;
 import com.mortals.xhx.base.system.role.service.RoleUserService;
 import com.mortals.xhx.base.system.user.dao.UserDao;
 import com.mortals.xhx.base.system.user.model.UserEntity;
 import com.mortals.xhx.base.system.user.model.UserQuery;
 import com.mortals.xhx.base.system.user.service.UserService;
-
-
+import com.mortals.xhx.common.code.YesNoEnum;
+import com.mortals.xhx.common.pdu.RespData;
+import com.mortals.xhx.common.pdu.user.UserPdu;
+import com.mortals.xhx.feign.user.IUserFeign;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
@@ -49,69 +51,66 @@ import java.util.stream.Collectors;
  * @version 1.0.0
  */
 @Service("userService")
-public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity, Long> implements UserService {
+@Slf4j
+public class UserServiceImpl extends AbstractCRUDCacheServiceImpl<UserDao, UserEntity, Long> implements UserService {
 
 
     @Autowired
     private MenuService menuService;
     @Autowired
     private ResourceService resourceService;
-    @Autowired
-    private RoleService roleService;
+
     @Autowired
     private RoleUserService roleUserService;
 
-    private void doHandlerUser(UserEntity entity) throws AppException {
-        if (StringUtils.isNotEmpty(entity.getLoginPwd())) {
-            try {
-                entity.setLoginPwd(SecurityUtil.md5DoubleEncoding(entity.getLoginPwd()));
-            } catch (Exception e) {
-                throw new AppException("瀵嗙爜杞崲寮傚父");
-            }
-        } else {
-            entity.setLoginPwd(null);
-        }
-    }
+    @Autowired
+    private IUserFeign userFeign;
 
     @Override
-    protected void saveBefore(UserEntity entity, Context context) throws AppException {
-        if (!ObjectUtils.isEmpty(entity.getLoginName()) && existUser(entity.getLoginName(), entity.getId())) {
-            throw new AppException("鐧诲綍鍚嶅凡瀛樺湪锛�");
-        }
-        this.doHandlerUser(entity);
-
+    protected String getExtKey(UserEntity data) {
+        return data.getLoginName();
     }
 
+
     @Override
-    protected void updateBefore(UserEntity entity, Context context) throws AppException {
-//        if (entity.getId().longValue() == SysConstains.ADMIN_ID && !context.getUser().isAdmin()) {
-//            throw new AppException("浣犳病鏈夋潈闄愭墽琛岃鎿嶄綔");
-//        }
+    public UserEntity doCheckUser(String loginName, String password) throws AppException {
 
-        //鏇存柊涓嶆洿鏂板瘑鐮佸瓧娈�
-        entity.setLoginPwd(null);
-        this.doHandlerUser(entity);
-        //鏇存柊瑙掕壊
-        if(entity.getId().longValue() != SysConstains.ADMIN_ID &&!ObjectUtils.isEmpty(entity.getRoleIds())){
-            RoleUserQuery roleUserQuery = new RoleUserQuery();
-            roleUserQuery.setUserId(entity.getId());
-            List<Long> idList = Arrays.asList(entity.getRoleIds().split(",")).stream().map(Long::parseLong).collect(Collectors.toList());
-            roleUserQuery.setRoleIdList(idList);
-            roleUserService.doDistributionRole(roleUserQuery);
+        UserQuery params = new UserQuery();
+        params.setLoginName(loginName);
+        UserEntity sysUser = this.selectOne(params);
+        if (sysUser == null || !sysUser.getLoginName().equals(loginName)) {
+            return null;
         }
+        try {
+            if (!sysUser.getLoginPwd().equals(SecurityUtil.md5DoubleEncoding(password))) {
+                return null;
+            }
+        } catch (Exception e) {
+            log.error("鏌ヨ鐢ㄦ埛寮傚父锛宭oginName:" + loginName, e);
+            return null;
+        }
+        return sysUser;
     }
 
+
     @Override
     protected void saveAfter(UserEntity entity, Context context) throws AppException {
-        //鏇存柊瑙掕壊
-        if(!ObjectUtils.isEmpty(entity.getId())&&entity.getId().longValue() != SysConstains.ADMIN_ID &&!ObjectUtils.isEmpty(entity.getRoleIds())){
+        updateUserRole(entity);
+    }
+
+    @Override
+    protected void updateAfter(UserEntity entity, Context context) throws AppException {
+        updateUserRole(entity);
+    }
+
+    private void updateUserRole(UserEntity entity) {
+        if (!ObjectUtils.isEmpty(entity.getId()) && entity.getId().longValue() != SysConstains.ADMIN_ID && !ObjectUtils.isEmpty(entity.getRoleIds())) {
             RoleUserQuery roleUserQuery = new RoleUserQuery();
             roleUserQuery.setUserId(entity.getId());
             List<Long> idList = Arrays.asList(entity.getRoleIds().split(",")).stream().map(Long::parseLong).collect(Collectors.toList());
             roleUserQuery.setRoleIdList(idList);
             roleUserService.doDistributionRole(roleUserQuery);
         }
-        super.saveAfter(entity, context);
     }
 
     @Override
@@ -122,66 +121,8 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
             String roleIds = roleUserService.find(roleUserQuery).stream().map(RoleUserEntity::getRoleId).map(String::valueOf).collect(Collectors.joining(","));
             item.setRoleIds(roleIds);
         }).count();
-        super.findAfter(params, pageInfo, context, list);
-    }
-
-    @Override
-    protected UserEntity findBefore(UserEntity params, Context context) throws AppException {
-//        if (StringUtils.isNotEmpty(params.getDeptIds())) {
-//            params.setDeptIds(StringUtils.fillWithMark(params.getDeptIds(), ","));
-//        }
-        return super.findBefore(params, context);
-    }
-
-    @Override
-    protected UserEntity findBefore(UserEntity params, PageInfo pageInfo, Context context) throws AppException {
-//        if (StringUtils.isNotEmpty(params.getDeptIds())) {
-//            params.setDeptIds(StringUtils.fillWithMark(params.getDeptIds(), ","));
-//        }
-        return super.findBefore(params, pageInfo, context);
     }
 
-    public UserEntity findByLoginName(String loginName) {
-        UserQuery params = new UserQuery();
-        params.setLoginName(loginName);
-        List<UserEntity> userList = super.dao.getList(params);
-        if (userList != null && userList.size() > 0) {
-            return userList.get(0);
-        }
-        return null;
-    }
-
-    @Override
-    public UserEntity doLogin(String loginName, String password, String loginIp) throws AppException {
-        UserEntity sysUser = this.findByLoginName(loginName);
-        if (sysUser == null || !sysUser.getLoginName().equals(loginName)) {
-            throw new AppException("鐢ㄦ埛鍚嶄笉瀛樺湪锛�");
-        }
-        try {
-            if (!sysUser.getLoginPwd().equals(SecurityUtil.md5DoubleEncoding(password))) {
-                throw new AppException("鐧诲綍瀵嗙爜閿欒锛�");
-            }
-        } catch (Exception e) {
-            throw new AppException("瀵嗙爜楠岃鍑洪敊锛�", e);
-        }
-        return sysUser;
-    }
-
-    @Override
-    public UserEntity doCheckUser(String loginName, String password) throws AppException {
-        UserEntity sysUser = this.findByLoginName(loginName);
-        if (sysUser == null || !sysUser.getLoginName().equals(loginName)) {
-            return null;
-        }
-        try {
-            if (!sysUser.getLoginPwd().equals(SecurityUtil.md5DoubleEncoding(password))) {
-                return null;
-            }
-        } catch (Exception e) {
-            return null;
-        }
-        return sysUser;
-    }
 
     @Override
     public Set<Long> findAllAuthIds(UserEntity userEntity) throws AppException {
@@ -207,7 +148,7 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
                 urls.addAll(StringUtils.converStr2Set(url));
             }
         }
-        Set<Long> authIds = new HashSet<>();
+        Set<Long> authIds = new HashSet<Long>();
         Map<Long, MenuEntity> menuMap = new HashMap<Long, MenuEntity>();
         List<MenuEntity> userModuleList = this.menuService.findAllEnable();
         for (MenuEntity sysModule : userModuleList) {
@@ -215,7 +156,6 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
                 continue;
             }
             menuMap.put(sysModule.getId(), sysModule);
-
             if (!user.isAdmin() && urls.contains(StringUtils.trim(sysModule.getUrl()))) {
                 authIds.add(sysModule.getId());
             }
@@ -250,86 +190,85 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
     }
 
     @Override
-    public Result<UserEntity> find(Long platformId, UserEntity params, int currPage, int prePageResult) throws AppException {
-        PageInfo pageInfo = new PageInfo(prePageResult);
-        pageInfo.setCurrPage(currPage);
-        return super.find(params, pageInfo, null);
-    }
+    public Rest<Void> refreshUser() {
+        UserPdu userPdu = new UserPdu();
+        userPdu.setPage(1);
+        userPdu.setSize(-1);
+        Rest<RespData<List<UserPdu>>> resp = userFeign.list(userPdu);
+        if (resp.getCode() == YesNoEnum.YES.getValue()) {
+            List<UserPdu> userPduList = resp.getData().getData();
+            log.info("鐢ㄦ埛鎬绘暟閲忥細{}", userPduList.size());
+            if (!ObjectUtils.isEmpty(userPduList)) {
+                List<UserEntity> newUserList = userPduList.stream().map(newUser -> {
+                    UserEntity userEntity = new UserEntity();
+                    userEntity.initAttrValue();
+                    BeanUtils.copyProperties(newUser, userEntity, new String[]{"id", "lastLoginTime", "lastLoginAddress"});
+                    return userEntity;
+                }).collect(Collectors.toList());
 
-    @Override
-    public UserEntity createUser(IUser currUser, Long customerId, String customerName, String loginName, String password,
-                                 String userName, String mobile) throws AppException {
-        try {
-            UserEntity entity = new UserEntity();
-            entity.initAttrValue();
-            entity.setLoginName(loginName);
-            entity.setRealName(userName);
-            entity.setLoginPwd(password);
-            entity.setMobile(mobile);
-            entity.setUserType(UserType.CUSTOMER.getValue());
-            entity.setCreateTime(new Date());
-            if (currUser != null) {
-                entity.setCreateUser(currUser.getLoginName());
-                entity.setCreateUserName(currUser.getRealName());
-            }
-            this.doHandlerUser(entity);
-            dao.insert(entity);
-            return entity;
-        } catch (Exception e) {
-            log.error("缁欏鎴峰垱寤虹敤鎴峰紓甯�-->customerId:" + customerId + ",customerName:" + customerName + ",loginName:" + loginName +
-                    "-->鍘熷洜锛�" + e.getMessage());
-            return null;
-        }
-    }
+                List<UserEntity> saveUpdateUserList = newUserList.parallelStream().map(item -> {
+                    UserEntity extCache = this.getExtCache(item.getLoginName());
+                    if (ObjectUtils.isEmpty(extCache)) {
+                        item.setCreateUserId(1L);
+                        item.setCreateUserName("绯荤粺绠$悊鍛�");
+                        item.setCreateTime(new Date());
+                        return item;
+                    } else {
+                        //鏇存柊鐢ㄦ埛鍒楄〃
+                        item.setId(extCache.getId());
+                        item.setUpdateUserId(1L);
+                        item.setUpdateUserName("绯荤粺绠$悊鍛�");
+                        item.setUpdateTime(new Date());
+                        return item;
+                    }
+                }).collect(Collectors.toList());
+                Map<Boolean, List<UserEntity>> saveUpdateCollect = saveUpdateUserList.stream().collect(Collectors.partitioningBy(x -> x.getId() == null));
+                if (!ObjectUtils.isEmpty(saveUpdateCollect.get(true))) {
+                    //闇€瑕佹柊澧炵殑鐢ㄦ埛
+                    log.info("闇€瑕佹柊澧炵敤鎴锋暟閲忥細{}", saveUpdateCollect.get(true).size());
+                    saveUpdateCollect.get(true).stream().forEach(item -> {
+                        this.getUserDao().insert(item);
+                        this.putCache(item.getId() == null ? "" : item.getId().toString(), item);
+                        RoleUserQuery roleUserQuery = new RoleUserQuery();
+                        roleUserQuery.setUserId(item.getId());
+                        roleUserQuery.setRoleIdList(Arrays.asList(1L));
+                        roleUserService.doDistributionRole(roleUserQuery);
+                    });
+                }
 
-    @Override
-    public boolean existUser(String loginName, Long userId) throws AppException {
-        UserEntity sysUser = this.findByLoginName(loginName);
-        boolean bRet = false;
-        if (sysUser != null) {
-            if (userId == null || userId == 0 || userId.longValue() != sysUser.getId().longValue()) {
-                bRet = true;
+                if (!ObjectUtils.isEmpty(saveUpdateCollect.get(false))) {
+                    //闇€瑕佹柊澧炵殑鐢ㄦ埛
+                    log.info("闇€瑕佹洿鏂扮敤鎴锋暟閲忥細{}", saveUpdateCollect.get(false).size());
+                    saveUpdateCollect.get(false).stream().forEach(item -> {
+                        this.getUserDao().update(item);
+                        this.putCache(item.getId() == null ? "" : item.getId().toString(), item);
+                    });
+                }
+                //宸泦鍒犻櫎
+                Set<String> collectSet = newUserList.parallelStream().map(x -> x.getLoginName()).collect(Collectors.toSet());
+                Long[] removeUserIds = this.getCacheList().parallelStream().filter(f -> !collectSet.contains(f.getLoginName())).map(i -> i.getId()).distinct().toArray(Long[]::new);
+                if (!ObjectUtils.isEmpty(removeUserIds)) {
+                    log.info("闇€瑕佸垹闄ょ殑鏈湴鐢ㄦ埛鏁伴噺:{}", removeUserIds.length);
+                    this.remove(removeUserIds, null);
+                }
             }
+            //鏌ユ壘鏂板 涓庢洿鏂�
         }
-        return bRet;
+        return Rest.ok();
     }
 
     @Override
-    public boolean updateUserPwd(String loginName, String oldPwd, String newPwd) throws AppException {
-        UserEntity sysUser = this.findByLoginName(loginName);
-        if (sysUser == null || !sysUser.getLoginName().equals(loginName)) {
-            throw new AppException("甯愬彿閿欒锛�");
-        }
-        try {
-            if (!sysUser.getLoginPwd().equals(SecurityUtil.md5DoubleEncoding(oldPwd))) {
-                throw new AppException("鍘熷瀵嗙爜閿欒锛�");
-            }
-        } catch (Exception e) {
-            throw new AppException("瀵嗙爜楠岃鍑洪敊锛�", e);
-        }
-        try {
-            sysUser.setLoginPwd(SecurityUtil.md5DoubleEncoding(newPwd));
-        } catch (Exception e) {
-            throw new AppException("瀵嗙爜杞崲寮傚父锛�", e);
-        }
-        dao.update(sysUser);
-        return true;
+    protected void removeAfter(Long[] ids, Context context, int result) throws AppException {
+        super.removeAfter(ids, context, result);
+        RoleUserQuery roleUserQuery = new RoleUserQuery();
+        roleUserQuery.setUserIdList(Arrays.asList(ids));
+        Long[] userIds = roleUserService.find(roleUserQuery).stream().map(RoleUserEntity::getId).toArray(Long[]::new);
+        roleUserService.remove(userIds, context);
     }
 
-    @Override
-    public UserDao getUserDao() {
-        return getDao();
-    }
 
     @Override
-    protected void removeAfter(Long[] ids, Context context, int result) throws AppException {
-        Arrays.asList(ids).stream().peek(userId->{
-            RoleUserQuery roleUserQuery = new RoleUserQuery();
-            roleUserQuery.setUserId(userId);
-            Long[] userIds = roleUserService.find(roleUserQuery).stream().map(RoleUserEntity::getId).toArray(Long[]::new);
-            roleUserService.remove(userIds,context);
-        }).count();
-
-        super.removeAfter(ids, context, result);
+    public UserDao getUserDao() {
+        return this.getDao();
     }
 }
\ No newline at end of file
diff --git a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/web/UserController.java b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/web/UserController.java
index 13047fb246c73b2dae4f522efd57084cabe88e78..78c55acb21ea5b02bc4bdb3894dbfae5f479ce67 100644
--- a/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/web/UserController.java
+++ b/smart-office-manager/src/main/java/com/mortals/xhx/base/system/user/web/UserController.java
@@ -1,44 +1,40 @@
+/**
+ * 鏂囦欢锛歎serController.java
+ * 鐗堟湰锛�1.0.0
+ * 鏃ユ湡锛�
+ * Copyright &reg;
+ * All right reserved.
+ */
 package com.mortals.xhx.base.system.user.web;
 
 
-import com.alibaba.fastjson.JSONObject;
+import com.mortals.framework.annotation.UnAuth;
 import com.mortals.framework.common.IBaseEnum;
+import com.mortals.framework.common.Rest;
 import com.mortals.framework.common.code.UserType;
-import com.mortals.framework.exception.AppException;
 import com.mortals.framework.model.Context;
 import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
-import com.mortals.framework.web.BaseCRUDJsonMappingController;
-import com.mortals.xhx.base.framework.annotation.Operlog;
-import com.mortals.xhx.base.system.role.model.RoleQuery;
-import com.mortals.xhx.base.system.role.model.RoleUserEntity;
-import com.mortals.xhx.base.system.role.model.RoleUserQuery;
+import com.mortals.xhx.base.system.role.model.RoleEntity;
 import com.mortals.xhx.base.system.role.service.RoleService;
-import com.mortals.xhx.base.system.role.service.RoleUserService;
 import com.mortals.xhx.base.system.user.model.UserEntity;
 import com.mortals.xhx.base.system.user.service.UserService;
 import com.mortals.xhx.common.code.UserStatus;
-import io.jsonwebtoken.Claims;
-import io.jsonwebtoken.Jwts;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.util.ObjectUtils;
-import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.util.Base64;
-import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
- * 鐢ㄦ埛淇℃伅
- *
- * @author: zxfei
- * @date: 2022/5/7 15:42
+ * <p>Title: 鐢ㄦ埛淇℃伅</p>
+ * <p>Description: UserController  </p>
+ * <p>Copyright: Copyright &reg;  </p>
+ * <p>Company: </p>
+ * @author
+ * @version 1.0.0
  */
 @RestController
 @RequestMapping("user")
@@ -46,90 +42,28 @@ public class UserController extends BaseCRUDJsonBodyMappingController<UserServic
 
     @Autowired
     private RoleService roleService;
-    @Autowired
-    private RoleUserService roleUserService;
-
+    
     public UserController() {
         super.setModuleDesc("鐢ㄦ埛淇℃伅");
     }
 
     @Override
     protected void init(Map<String, Object> model, Context context) {
+
         this.addDict(model,"userType", IBaseEnum.getEnumMap(UserType.class));
         this.addDict(model,"status", UserStatus.getEnumMap());
-        this.addDict(model, "roleIds", roleService.find(new RoleQuery()).stream().collect(Collectors.toMap(x -> x.getId().toString(), y -> y.getName())));
-
-    }
-
-    @Override
-    protected void doListBefore(UserEntity query, Map<String, Object> model, Context context) throws AppException {
-        if (!StringUtils.isEmpty(query.getRealName())) {
-            query.setRealName("%".concat(query.getRealName()).concat("%"));
-        }
-        if (!StringUtils.isEmpty(query.getLoginName())) {
-            query.setLoginName("%".concat(query.getLoginName()).concat("%"));
-        }
-    }
-
-
-    @Override
-    protected int editAfter(Long id, Map<String, Object> model, UserEntity entity, Context context) throws AppException {
-        RoleUserQuery roleUserQuery = new RoleUserQuery();
-        roleUserQuery.setUserId(entity.getId());
-        String roleIds = roleUserService.find(roleUserQuery).stream().map(RoleUserEntity::getRoleId).map(String::valueOf).collect(Collectors.joining(","));
-        entity.setRoleIds(roleIds);
-        return super.editAfter(id, model, entity, context);
+        List<RoleEntity> roleList = roleService.find(new RoleEntity());
+        this.addDict(model,"roleId", roleList.stream().collect(Collectors.toMap(e->e.getId().toString(), e->e.getName())));
+        super.init(model, context);
     }
 
-    @Override
-    protected int saveAfter(UserEntity entity, Map<String, Object> model, Context context) throws AppException {
-        if (entity.getId() == getCurUser().getId()) {
-            // TODO: 2022/8/15 鏇存柊redis session淇℃伅
-            //saveCurrUserForSession(request, response, userService.get(form.getEntity().getId(), false));
-        }
-        return super.saveAfter(entity, model, context);
-    }
-
-
-//    @Override
-//    protected void saveBefore(UserEntity entity, Map<String, Object> model, Context context) throws AppException {
-//        if (!ObjectUtils.isEmpty(entity.getLoginName()) && service.existUser(entity.getLoginName(), entity.getId())) {
-//            throw new AppException("鐧诲綍鍚嶅凡瀛樺湪锛�");
-//        }
-//        super.saveBefore(entity, model, context);
-//    }
-
-
-    @RequestMapping(value = "change/password", method = RequestMethod.POST)
-    @Operlog(msg = "瀵嗙爜淇敼鎴愬姛!")
-    public String changePassword(@RequestParam String oldPwd, @RequestParam String newPwd) {
-        JSONObject ret = new JSONObject();
-        try {
-            service.updateUserPwd(super.getCurUser().getLoginName(), oldPwd, newPwd);
-            ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
-            ret.put(KEY_RESULT_MSG, "瀵嗙爜淇敼鎴愬姛锛�");
-        } catch (Exception e) {
-            ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
-            ret.put(KEY_RESULT_MSG, super.convertException(e));
-        }
-        return ret.toJSONString();
-    }
-
-
-    public static void main(String[] args) {
-
-        String token = "eyJhbGciOiJIUzI1NiJ9.eyJsb2dpbl91c2VyX2tleSI6IjIzNGE5NDA5ZDVhOTQ3MWNhMzdkYjZkYmMwY2JjZTc5In0.MWyQW40HYDxyUz7PJRf_nRsFPWx3Hr811Ime984nixs";
-        String secret = "026db82420614469897fcc2dc1b4ce38";
-        Claims claims = Jwts.parser()
-                .setSigningKey(Base64.getEncoder().encodeToString(secret.getBytes()))
-                .parseClaimsJws(token)
-                .getBody();
-
-        String uuid = (String) claims.get("login_user_key");
-
-        System.out.println(uuid);
-
 
+    @PostMapping({"refreshUser"})
+    @UnAuth
+    public Rest<Object> refreshUser() {
+        log.info("鍒锋柊鐢ㄦ埛");
+        this.service.refreshUser();
+        return Rest.ok("鐢ㄦ埛鍚屾鍒锋柊鎿嶄綔鎴愬姛");
     }
 
 }
\ No newline at end of file
diff --git a/smart-office-manager/src/main/java/com/mortals/xhx/common/key/RedisKey.java b/smart-office-manager/src/main/java/com/mortals/xhx/common/key/RedisKey.java
index 3320daefebde17948014859430e841731fdba1b7..b2e529a34401666a9e5cd4dbee8acd06c16bc6b5 100644
--- a/smart-office-manager/src/main/java/com/mortals/xhx/common/key/RedisKey.java
+++ b/smart-office-manager/src/main/java/com/mortals/xhx/common/key/RedisKey.java
@@ -23,4 +23,6 @@ public class RedisKey {
     public static final String KEY_PRODUCT_CACHE = "productDict";
 
     public static final String KEY_TOKEN_API_CACHE = "token:api:";
+
+    public static final String KEY_USER_MENU_CACHE = "user:menu";
 }
diff --git a/smart-office-manager/src/main/java/com/mortals/xhx/common/utils/MenuEncodeUtil.java b/smart-office-manager/src/main/java/com/mortals/xhx/common/utils/MenuEncodeUtil.java
new file mode 100644
index 0000000000000000000000000000000000000000..9de4fc113650d8e44ba74848042ff3b59db7f4f8
--- /dev/null
+++ b/smart-office-manager/src/main/java/com/mortals/xhx/common/utils/MenuEncodeUtil.java
@@ -0,0 +1,30 @@
+package com.mortals.xhx.common.utils;
+
+import com.mortals.framework.ap.GlobalSysInfo;
+import com.mortals.framework.ap.SysConstains;
+import com.mortals.framework.util.AESUtil;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.Set;
+
+@Slf4j
+public class MenuEncodeUtil {
+
+    public static String generateMenuUrlCode(Set<String> urls) {
+        try {
+            String securityKey = GlobalSysInfo.getPropertyValue(SysConstains.PROP_COOKIE_SECURITY_KEY);
+            StringBuilder sb = new StringBuilder();
+            if (urls != null && urls.size() > 0) {
+                for (String url : urls) {
+                    int index = url.hashCode() & (Integer.MAX_VALUE - 1);
+                    sb.append(index).append(",");
+                }
+            }
+            String menuUrl = sb.toString();
+            return AESUtil.encrypt(menuUrl, securityKey);
+        } catch (Throwable e) {
+            log.error("缂栫爜寮傚父",e);
+            return null;
+        }
+    }
+}
diff --git a/smart-office-manager/src/main/java/com/mortals/xhx/daemon/task/SyncUserTaskImpl.java b/smart-office-manager/src/main/java/com/mortals/xhx/daemon/task/SyncUserTaskImpl.java
index 845f9c3c8dd73252a7ae8ddb645dc8831bfe708e..7bf52e983d8b86634a84d33b7a18e2c74fbc842e 100644
--- a/smart-office-manager/src/main/java/com/mortals/xhx/daemon/task/SyncUserTaskImpl.java
+++ b/smart-office-manager/src/main/java/com/mortals/xhx/daemon/task/SyncUserTaskImpl.java
@@ -37,7 +37,8 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
     @Override
     public void excuteTask(ITask task) throws AppException {
         log.info("鍚屾鐢ㄦ埛浠诲姟");
-        UserPdu userPdu = new UserPdu();
+        userService.refreshUser();
+      /*  UserPdu userPdu = new UserPdu();
         userPdu.setPage(1);
         userPdu.setSize(-1);
         Rest<RespData<List<UserPdu>>> resp = userFeign.list(userPdu);
@@ -60,7 +61,7 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
                     userService.getUserDao().update(userEntity);
                 }
             });
-        }
+        }*/
     }