Browse Source

登录日志保存改为异步方法

gaoxiong 11 months ago
parent
commit
701e58be2e
15 changed files with 172 additions and 133 deletions
  1. 12 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/model/LoginUser.java
  2. 8 0
      soc-auth/src/main/java/com/xunmei/auth/SocAuthApplication.java
  3. 1 1
      soc-auth/src/main/java/com/xunmei/auth/controller/TokenController.java
  4. 20 24
      soc-auth/src/main/java/com/xunmei/auth/service/SysLoginService.java
  5. 4 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/constant/SecurityConstants.java
  6. 11 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/utils/JwtUtils.java
  7. 52 55
      soc-common/soc-common-security/src/main/java/com/xunmei/common/security/service/TokenService.java
  8. 10 0
      soc-common/soc-common-security/src/main/java/com/xunmei/common/security/utils/SecurityUtils.java
  9. 0 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/dto/web/TaskStatisticDto.java
  10. 7 23
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillTaskServiceImpl.java
  11. 5 4
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/panel/service/impl/PanelServiceImpl.java
  12. 32 23
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/question/service/impl/QuestionServiceImpl.java
  13. 1 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/gx/service/ResumptionServiceImpl.java
  14. 3 0
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/SocSystemApplication.java
  15. 6 2
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysUserController.java

+ 12 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/model/LoginUser.java

@@ -1,5 +1,6 @@
 package com.xunmei.system.api.model;
 
+import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.domain.SysUser;
 
 import java.io.Serializable;
@@ -94,7 +95,18 @@ public class LoginUser implements Serializable
      * 来源 0:系统添加.1:fjnx同步
      */
     private Integer source;
+    /**
+     * 机构信息
+     */
+    private SysOrg sysOrg;
 
+    public SysOrg getSysOrg() {
+        return sysOrg;
+    }
+
+    public void setSysOrg(SysOrg sysOrg) {
+        this.sysOrg = sysOrg;
+    }
 
     public String getPlatformType() {
         return platformType;

+ 8 - 0
soc-auth/src/main/java/com/xunmei/auth/SocAuthApplication.java

@@ -1,12 +1,18 @@
 package com.xunmei.auth;
 
+import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.security.annotation.EnableSocFeignClients;
 import com.xunmei.common.swagger.annotation.EnableCustomSwagger2;
+import com.xunmei.system.api.RemoteUserService;
+import com.xunmei.system.api.domain.SysUser;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
 import org.springframework.cloud.context.config.annotation.RefreshScope;
 
+import javax.annotation.PostConstruct;
+
 /**
  * 认证授权中心
  * 
@@ -23,4 +29,6 @@ public class SocAuthApplication
         SpringApplication.run(SocAuthApplication.class, args);
         System.out.println("(♥◠‿◠)ノ゙  认证授权中心启动成功   ლ(´ڡ`ლ)゙ ");
     }
+
+
 }

+ 1 - 1
soc-auth/src/main/java/com/xunmei/auth/controller/TokenController.java

@@ -181,7 +181,7 @@ public class TokenController {
                 if(userInfo == null){
                     return R.fail("无效的用户数据");
                 }
-                 Map<String, Object> systemToken = tokenService.createToken(userInfo);
+                Map<String, Object> systemToken = tokenService.createToken(userInfo);
                 logger.debug("token登录:5、生成系统自身Token完成,token:{}",token);
                 return R.ok(systemToken);
             }else{

+ 20 - 24
soc-auth/src/main/java/com/xunmei/auth/service/SysLoginService.java

@@ -26,7 +26,7 @@ import org.springframework.stereotype.Component;
  * @author xunmei
  */
 @Component
-public class SysLoginService{
+public class SysLoginService {
     @Autowired
     private RemoteUserService remoteUserService;
 
@@ -40,7 +40,6 @@ public class SysLoginService{
     private FJNXLoginService fjnxLoginService;
 
 
-
     /**
      * 登录
      */
@@ -69,6 +68,7 @@ public class SysLoginService{
             throw new ServiceException("很遗憾,访问IP已被列入系统黑名单");
         }
         // 查询用户信息
+        //TODO 优化点2 : 考虑使用缓存,减少数据库查询
         R<LoginUser> userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER);
 
         if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData())) {
@@ -92,45 +92,40 @@ public class SysLoginService{
             throw new ServiceException("对不起,您的账号:" + username + " 已停用");
         }
         // 如果人员是从统一门户同步过来的人, 先尝试走行方的账号密码验证
-        if(ObjectUtil.equal(userInfo.getSource(),1))
-        {
-            try{
-                LoginBody login=new LoginBody();
+        if (ObjectUtil.equal(userInfo.getSource(), 1)) {
+            try {
+                LoginBody login = new LoginBody();
                 login.setUsername(username);
                 login.setPassword(SecurityUtils.decryptSm4(password));
                 //登录统一运营
                 String token = fjnxLoginService.webLoginByPass(login);
                 // 如果统一门户验证失败, 再走本系统默认密码验证
-                if(StringUtils.isEmpty(token)){
+                if (StringUtils.isEmpty(token)) {
                     passwordService.validate(user, password, platformType);
                 }
             }
             // 如果统一门户验证失败, 再走本系统默认密码验证
-            catch (Exception e){
+            catch (Exception e) {
                 // 发现是因为这两种错误登录失败,将错误抛出
-                if("登录失败,账号或密码错误".equals(e.getMessage()) || "登录失败,请到统一运营门户输入账号完成维护".equals(e.getMessage()))
-                {
+                if ("登录失败,账号或密码错误".equals(e.getMessage()) || "登录失败,请到统一运营门户输入账号完成维护".equals(e.getMessage())) {
                     throw e;
                 }
                 passwordService.validate(user, password, platformType);
             }
-        }
-        else
-        {
+        } else {
             passwordService.validate(user, password, platformType);
         }
         recordLogService.recordLogininfor(username, Constants.LOGIN_SUCCESS, "登录成功", platformType);
         return userInfo;
     }
 
-    public LoginUser switchUser(Long subUserId,String platformType) {
+    public LoginUser switchUser(Long subUserId, String platformType) {
 
         SysUser swichUser = remoteUserService.getUserById(subUserId, SecurityConstants.INNER);
-        if(ObjectUtil.isEmpty(swichUser))
-        {
+        if (ObjectUtil.isEmpty(swichUser)) {
             throw new ServiceException("切换用户:" + subUserId + " 不存在");
         }
-        String username=swichUser.getUsername();
+        String username = swichUser.getUsername();
         // 用户名不在指定范围内 错误
         if (username.length() < UserConstants.USERNAME_MIN_LENGTH
                 || username.length() > UserConstants.USERNAME_MAX_LENGTH) {
@@ -177,25 +172,26 @@ public class SysLoginService{
 
     /**
      * 用户名登录
+     *
      * @param username
      * @param loginType
      * @return
      */
-    public LoginUser loginToken(String username,String loginType){
+    public LoginUser loginToken(String username, String loginType) {
         R<LoginUser> userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER);
-        if(StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData())){
-            recordLogService.recordLogininfor(username,Constants.LOGIN_FAIL,"登录用户不存在",loginType);
-            throw new RuntimeException("登录用户:"+ username + "不存在");
+        if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData())) {
+            recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在", loginType);
+            throw new RuntimeException("登录用户:" + username + "不存在");
         }
 
-        if(R.FAIL == userResult.getCode()){
+        if (R.FAIL == userResult.getCode()) {
             throw new RuntimeException(userResult.getMsg());
         }
 
-        LoginUser userInfo= userResult.getData();
+        LoginUser userInfo = userResult.getData();
         userInfo.setPlatformType(loginType);
         passwordService.clearLoginRecordCache(username);
-        recordLogService.recordLogininfor(username,Constants.LOGIN_SUCCESS,"登录成功",loginType);
+        recordLogService.recordLogininfor(username, Constants.LOGIN_SUCCESS, "登录成功", loginType);
         return userInfo;
     }
 }

+ 4 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/constant/SecurityConstants.java

@@ -57,4 +57,8 @@ public class SecurityConstants
      * 角色权限
      */
     public static final String ROLE_PERMISSION = "role_permission";
+    /**
+     * 客户端类型
+     */
+    public static final String PLATFORM_TYPE = "platform_type";
 }

+ 11 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/utils/JwtUtils.java

@@ -101,6 +101,17 @@ public class JwtUtils
     }
 
     /**
+     * 根据token令牌 获取客户端类型
+     * @param token 令牌
+     * @return 客户端类型
+     */
+    public static String getPlatformType(String token)
+    {
+        Claims claims = parseToken(token);
+        return getValue(claims, SecurityConstants.PLATFORM_TYPE);
+    }
+
+    /**
      * 根据身份信息获取用户ID
      * 
      * @param claims 身份信息

+ 52 - 55
soc-common/soc-common-security/src/main/java/com/xunmei/common/security/service/TokenService.java

@@ -58,30 +58,27 @@ public class TokenService {
      * 创建令牌
      */
     public Map<String, Object> createToken(LoginUser loginUser) {
-        Long userId = loginUser.getSysUser().getId();
 
+        Long userId = loginUser.getSysUser().getId();
         String userName = loginUser.getSysUser().getName();
-        if(StringUtils.isEmpty(loginUser.getToken())){
-            String token = userId + "_"+ loginUser.getPlatformType()+"_" + IdUtils.fastUUID();
-            loginUser.setToken(token);
-        }
-
+        String token = IdUtils.fastUUID();
+        loginUser.setToken(token);
         loginUser.setUserid(userId);
         loginUser.setUsername(userName);
         loginUser.setOrgId(loginUser.getSysUser().getOrgId());
         loginUser.setName(loginUser.getSysUser().getName());
         loginUser.setIpaddr(IpUtils.getIpAddr());
-        long configExpireTime =  getTokenExpireTime(loginUser.getPlatformType());
-        refreshTokenNew(loginUser,configExpireTime);
+        long configExpireTime = getTokenExpireTime(loginUser.getPlatformType());
+        refreshTokenNew(loginUser, configExpireTime);
 
         // Jwt存储信息
         Map<String, Object> claimsMap = new HashMap<String, Object>();
         claimsMap.put(SecurityConstants.USER_KEY, loginUser.getToken());
+        claimsMap.put(SecurityConstants.PLATFORM_TYPE, loginUser.getPlatformType());
         claimsMap.put(SecurityConstants.DETAILS_USER_ID, userId);
         claimsMap.put(SecurityConstants.DETAILS_USERNAME, userName);
         claimsMap.put(SecurityConstants.DETAILS_MASTER_USER_ID, loginUser.getMasterUserId());
         claimsMap.put(SecurityConstants.DETAILS_MASTERUSERNAME, loginUser.getMasterUserName());
-
         // 接口返回信息
         Map<String, Object> rspMap = new HashMap<String, Object>();
         rspMap.put("access_token", JwtUtils.createToken(claimsMap));
@@ -91,7 +88,6 @@ public class TokenService {
 
     /**
      * 创建令牌
-     *
      */
     public Map<String, Object> createTokenNew(LoginUser loginUser, Integer loginFrom) {
         //现场大屏登录也是 走APP登录接口,但是请求携带了 loginFrom 参数;根据 loginFrom 转换 PlatformType 值
@@ -157,13 +153,14 @@ public class TokenService {
         try {
             if (StringUtils.isNotEmpty(token)) {
                 String userkey = JwtUtils.getUserKey(token);
-                user = RedisUtils.getCacheObject(getTokenKey(userkey));
-                //user = redisService.getCacheObject(getTokenKey(userkey));
-                return user;
+                String userId = JwtUtils.getUserId(token);
+                String platformType = JwtUtils.getPlatformType(token);
+                user = RedisUtils.getCacheObject(getTokenKey(userkey, userId, platformType));
             }
+            return user;
         } catch (Exception e) {
+            return user;
         }
-        return user;
     }
 
     /**
@@ -181,8 +178,10 @@ public class TokenService {
     public void delLoginUser(String token) {
         if (StringUtils.isNotEmpty(token)) {
             String userkey = JwtUtils.getUserKey(token);
+            String userId = JwtUtils.getUserId(token);
+            String platformType = JwtUtils.getPlatformType(token);
             //redisService.deleteObject(getTokenKey(userkey));
-            RedisUtils.deleteObject(getTokenKey(userkey));
+            RedisUtils.deleteObject(getTokenKey(userkey, userId, platformType));
         }
     }
 
@@ -195,7 +194,7 @@ public class TokenService {
         long expireTime = loginUser.getExpireTime();
         long currentTime = System.currentTimeMillis();
         if (expireTime - currentTime <= MILLIS_MINUTE_TEN) {
-            logger.info("Token 即将过期,刷新Token 有效时间,{}",loginUser.getToken());
+            logger.info("Token 即将过期,刷新Token 有效时间,{}", loginUser.getToken());
             refreshToken(loginUser);
         }
     }
@@ -220,7 +219,7 @@ public class TokenService {
 //        RedisUtils.setCacheObject(userKey, loginUser, Duration.ofMinutes(expireTime));
 //        //redisService.deleteByPrefix(userKey);
 //        // redisService.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
-        refreshTokenNew(loginUser,expireTime);
+        refreshTokenNew(loginUser, expireTime);
     }
 
     /**
@@ -228,66 +227,66 @@ public class TokenService {
      *
      * @param loginUser 登录信息
      */
-    public void refreshTokenNew(LoginUser loginUser,long configExpireTime) {
+    public void refreshTokenNew(LoginUser loginUser, long configExpireTime) {
         loginUser.setLoginTime(System.currentTimeMillis());
         loginUser.setExpireTime(loginUser.getLoginTime() + configExpireTime * MILLIS_MINUTE);
         // 根据uuid将loginUser缓存
-        String userKey = getTokenKey(loginUser.getToken());
+        String userKey = getTokenKey(loginUser.getToken(), String.valueOf(loginUser.getUserid()), loginUser.getPlatformType());
 //        remoteUserService.userLoginInfo(loginUser.getUserid(), DateUtils.getNowDate(), loginUser.getIpaddr(), SecurityConstants.INNER);
         //登陆后删除之前的token
         // admin 用户的 ID 是1 按前缀删除缓存时 会把其他人的Token都删除掉, 固排除 admin
-        if(!"admin".equals(loginUser.getSysUser().getUsername())){
-            String userKeyPrefix= getTokenKey(loginUser.getUserid().toString()+"_"+loginUser.getPlatformType());
+ /*       if (!"admin".equals(loginUser.getSysUser().getUsername())) {
+            String userKeyPrefix = getTokenKey(loginUser.getUserid().toString() + "_" + loginUser.getPlatformType());
             RedisUtils.deleteByPrefix(userKeyPrefix);
-        }
+        }*/
 
         RedisUtils.setCacheObject(userKey, loginUser, Duration.ofMinutes(configExpireTime));
         //redisService.deleteByPrefix(userKey);
         // redisService.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
     }
 
-    private String getTokenKey(String token) {
-        return ACCESS_TOKEN + token;
+    /**
+     * 登录token记录数据
+     *
+     * @param token       令牌
+     * @param userId      用户id
+     * @param patformType 平台类型
+     * @return
+     */
+    private String getTokenKey(String token, String userId, String patformType) {
+        return ACCESS_TOKEN + userId + ":" + patformType + ":" + token;
     }
 
-    private Long getTokenExpireTime(String platformType)
-    {
+    private Long getTokenExpireTime(String platformType) {
         long configExpireTime = 0;
         String configExpireTimeStr = "";
-        if(platformType != null){
-            if(Constants.LOGIN_TYPE_2.equals(platformType)){
+        if (platformType != null) {
+            if (Constants.LOGIN_TYPE_2.equals(platformType)) {
                 //大屏
-                String screenCacheKey=CacheConstants.SYS_CONFIG_KEY+SystemParameterConstant.TOKEN_LARGESCREEN_EXPIRETIME;
-                configExpireTimeStr= getConfigValueFromRedis(screenCacheKey);
-            }
-            else if(Constants.LOGIN_TYPE_0.equals(platformType)){
+                String screenCacheKey = CacheConstants.SYS_CONFIG_KEY + SystemParameterConstant.TOKEN_LARGESCREEN_EXPIRETIME;
+                configExpireTimeStr = getConfigValueFromRedis(screenCacheKey);
+            } else if (Constants.LOGIN_TYPE_0.equals(platformType)) {
                 //app
-                String appCacheKey=CacheConstants.SYS_CONFIG_KEY+SystemParameterConstant.TOKEN_APP_EXPIRETIME;
-                configExpireTimeStr= getConfigValueFromRedis(appCacheKey);
-            }else if(Constants.LOGIN_TYPE_1.equals(platformType)){
+                String appCacheKey = CacheConstants.SYS_CONFIG_KEY + SystemParameterConstant.TOKEN_APP_EXPIRETIME;
+                configExpireTimeStr = getConfigValueFromRedis(appCacheKey);
+            } else if (Constants.LOGIN_TYPE_1.equals(platformType)) {
                 //web
-                String webCacheKey=CacheConstants.SYS_CONFIG_KEY+SystemParameterConstant.TOKEN_WEB_EXPIRETIME;
-                configExpireTimeStr= getConfigValueFromRedis(webCacheKey);
+                String webCacheKey = CacheConstants.SYS_CONFIG_KEY + SystemParameterConstant.TOKEN_WEB_EXPIRETIME;
+                configExpireTimeStr = getConfigValueFromRedis(webCacheKey);
             }
         }
-        if(StringUtils.isNotEmpty(configExpireTimeStr))
-        {
-            configExpireTime=  Long.parseLong(configExpireTimeStr);
-        }
-        else{
-            configExpireTime=expireTime;
+        if (StringUtils.isNotEmpty(configExpireTimeStr)) {
+            configExpireTime = Long.parseLong(configExpireTimeStr);
+        } else {
+            configExpireTime = expireTime;
         }
         return configExpireTime;
     }
 
-    private String getConfigValueFromRedis(String cacheKey)
-    {
-        if(RedisUtils.hasKey(cacheKey))
-        {
+    private String getConfigValueFromRedis(String cacheKey) {
+        if (RedisUtils.hasKey(cacheKey)) {
             return RedisUtils.getCacheObject(cacheKey);
-        }
-        else
-        {
+        } else {
             return null;
         }
     }
@@ -297,17 +296,15 @@ public class TokenService {
         // loginFrom 0 大屏,1 app ,2 web
         // 大屏登录时会带入 logFrom 参数
         //移动端端登录
-        if (logFrom==null || logFrom==1) {
+        if (logFrom == null || logFrom == 1) {
             // app
             return Constants.LOGIN_TYPE_0;
         }
-        if(logFrom==0)
-        {
+        if (logFrom == 0) {
             // 大屏
             return Constants.LOGIN_TYPE_2;
         }
-        if(logFrom==2)
-        {
+        if (logFrom == 2) {
             // web
             return Constants.LOGIN_TYPE_1;
         }

+ 10 - 0
soc-common/soc-common-security/src/main/java/com/xunmei/common/security/utils/SecurityUtils.java

@@ -12,6 +12,7 @@ import com.xunmei.common.core.constant.TokenConstants;
 import com.xunmei.common.core.context.SecurityContextHolder;
 import com.xunmei.common.core.utils.ServletUtils;
 import com.xunmei.common.core.utils.StringUtils;
+import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.model.LoginUser;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@@ -122,6 +123,15 @@ public class SecurityUtils {
     }
 
     /**
+     * 获取机构信息
+     * @return
+     */
+    public static SysOrg getUserSysOrg(){
+        LoginUser loginUser = SecurityContextHolder.get(SecurityConstants.LOGIN_USER, LoginUser.class);
+        return loginUser.getSysOrg();
+    }
+
+    /**
      * 获取请求token
      */
     public static String getToken() {

+ 0 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/dto/web/TaskStatisticDto.java

@@ -1,6 +1,5 @@
 package com.xunmei.core.board.dto.web;
 
-import jdk.nashorn.internal.runtime.arrays.IntElements;
 import lombok.Data;
 
 import javax.validation.constraints.NotNull;

+ 7 - 23
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillTaskServiceImpl.java

@@ -62,6 +62,7 @@ import com.xunmei.system.api.domain.SysDictData;
 import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.domain.SysUser;
 import com.xunmei.system.api.function.RemoteCallHandlerExecutor;
+import com.xunmei.system.api.model.LoginUser;
 import com.xunmei.system.api.vo.SysOrgVO;
 import io.netty.util.internal.StringUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -1362,17 +1363,9 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
 
     @Override
     public List<PanelListVo> selectCurUserTaskList(PanelListDto panelListDto) {
-        SysOrg sysOrg =null;
-        String cacheKey=CacheConstants.ORG_CACHE_SINGLE_KEY+panelListDto.getOrgId().toString();
-        if(RedisUtils.hasKey(cacheKey))
-        {
-            sysOrg= RedisUtils.getCacheObject(cacheKey);
-        }
-        else {
-             sysOrg = RemoteCallHandlerExecutor.executeRemoteCall(() ->
-                    orgService.selectSysOrgById(panelListDto.getOrgId(), SecurityConstants.FROM_SOURCE), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
-        }
-
+/*        SysOrg sysOrg = RemoteCallHandlerExecutor.executeRemoteCall(() ->
+                orgService.selectSysOrgById(panelListDto.getOrgId(), SecurityConstants.FROM_SOURCE), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);*/
+        SysOrg sysOrg = SecurityUtils.getUserSysOrg();
         panelListDto.setOrgType(sysOrg.getType());
         panelListDto.setOrgPath(sysOrg.getPath());
         List<Integer> statusList = new ArrayList<>();
@@ -1411,18 +1404,9 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
 
     @Override
     public List<PanelListVo> selectRecList(PanelListDto panelListDto) {
-        SysOrg sysOrg =null;
-        String cacheKey=CacheConstants.ORG_CACHE_SINGLE_KEY+panelListDto.getOrgId().toString();
-        if(RedisUtils.hasKey(cacheKey))
-        {
-            sysOrg= RedisUtils.getCacheObject(cacheKey);
-        }
-        else {
-            sysOrg = RemoteCallHandlerExecutor.executeRemoteCall(() ->
-                    orgService.selectSysOrgById(panelListDto.getOrgId(), SecurityConstants.FROM_SOURCE), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
-        }
-//        SysOrg sysOrg = RemoteCallHandlerExecutor.executeRemoteCall(() ->
-//                orgService.selectSysOrgById(panelListDto.getOrgId(), SecurityConstants.FROM_SOURCE), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
+        /*SysOrg sysOrg = RemoteCallHandlerExecutor.executeRemoteCall(() ->
+                orgService.selectSysOrgById(panelListDto.getOrgId(), SecurityConstants.FROM_SOURCE), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);*/
+        SysOrg sysOrg = SecurityUtils.getUserSysOrg();
         panelListDto.setOrgType(sysOrg.getType());
         panelListDto.setOrgPath(sysOrg.getPath());
         List<PanelListVo> waitRecTaskList = new ArrayList<>();

+ 5 - 4
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/panel/service/impl/PanelServiceImpl.java

@@ -18,6 +18,7 @@ import com.xunmei.common.core.domain.panel.vo.PanelListVo;
 import com.xunmei.common.core.domain.panel.vo.PanelResultVo;
 import com.xunmei.common.core.domain.panel.vo.WebPanelResult;
 import com.xunmei.common.core.web.page.TableDataInfo;
+import com.xunmei.common.redis.utils.RedisUtils;
 import com.xunmei.common.security.utils.SecurityUtils;
 import com.xunmei.core.drill.service.ICoreDrillTaskService;
 import com.xunmei.core.edu.service.ICoreEduTrainingTaskService;
@@ -121,11 +122,11 @@ public class PanelServiceImpl implements PanelService {
                 resumptionService.selectCurUserTaskList(panelListDto), threadPoolTaskExecutor
         );
 
-        //布撤防
+    /*    //布撤防
         CompletableFuture<List<PanelListVo>> protectionTaskFuture = CompletableFuture.supplyAsync(() ->
                 protectionService.selectCurUserTaskList(panelListDto), threadPoolTaskExecutor
         );
-
+*/
         //监控调阅任务
         CompletableFuture<List<PanelListVo>> monitorTaskFuture = CompletableFuture.supplyAsync(() ->
                 coreMonitoringRetrievalTaskService.selectCurUserTaskList(panelListDto), threadPoolTaskExecutor
@@ -171,14 +172,14 @@ public class PanelServiceImpl implements PanelService {
         );
 
         CompletableFuture<Void> allQueries = CompletableFuture.allOf(
-                resumptionTaskFuture, protectionTaskFuture, monitorTaskFuture, evaluateTaskFuture,
+                resumptionTaskFuture, monitorTaskFuture, evaluateTaskFuture,
                 safetyTaskFuture, drillTaskFuture, eduTrainingTaskFuture, recLitFuture, questionTaskFuture, letterOutInFuture
         );
 
         allQueries.get(TIMEOUT, TimeUnit.SECONDS);
 
         List<PanelListVo> resultList = Stream.of(
-                        resumptionTaskFuture.join(), protectionTaskFuture.join(), monitorTaskFuture.join(), evaluateTaskFuture.join(),
+                        resumptionTaskFuture.join(), monitorTaskFuture.join(), evaluateTaskFuture.join(),
                         safetyTaskFuture.join(), drillTaskFuture.join(), eduTrainingTaskFuture.join(), recLitFuture.join(),
                         questionTaskFuture.join(), letterOutInFuture.join()
                 )

+ 32 - 23
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/question/service/impl/QuestionServiceImpl.java

@@ -62,6 +62,7 @@ import javax.servlet.http.HttpServletResponse;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 import static org.apache.poi.ss.usermodel.BorderStyle.*;
@@ -347,7 +348,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
      */
     @Override
     public WebPanelResult selectWebIndexData(PanelListDto req) {
-        Long confirmButton = 2353L;
+        String confirmButton = "question:list:confirm";
         LambdaQueryWrapper<Question> wrapper = generateCurUserTaskWrapper(req, confirmButton, null, null);
         int waitConfirm = 0;
         if (!wrapper.isEmptyOfWhere()) {
@@ -371,7 +372,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
      */
     @Override
     public WebPanelResult selectWebIndexData2(PanelListDto req) {
-        LambdaQueryWrapper<Question> wrapper = generateCurUserTaskWrapper(req, null, null, 2355L);
+        LambdaQueryWrapper<Question> wrapper = generateCurUserTaskWrapper(req, null, null, "question:reform:reform");
         int waitRectification = 0;
         if (!wrapper.isEmptyOfWhere()) {
             waitRectification = baseMapper.selectCount(wrapper).intValue();
@@ -409,43 +410,47 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
      */
     @Override
     public List<PanelListVo> selectCurUserTaskList(PanelListDto panelListDto) {
-        Long confirmButton = 2353L;
+        /**
+         * kkk
+         *question:list:confirm
+         * question:list:confirmDissent
+         * question:reform:reform
+         */
+        String confirmKey = "question:list:confirm";
+        String confirmDissentKey = "question:list:confirmDissent";
+        String reformKey = "question:reform:reform";
+ /*       Long confirmButton = 2353L;
         Long dissentButton = 2354L;
-        Long reformButton = 2355L;
-        return selectCurUserTaskList(panelListDto, confirmButton, dissentButton, reformButton);
+        Long reformButton = 2355L;*/
+        return selectCurUserTaskList(panelListDto, confirmKey, confirmDissentKey, reformKey);
     }
 
-    private LambdaQueryWrapper<Question> generateCurUserTaskWrapper(PanelListDto panelListDto, Long confirmButton, Long dissentButton, Long reformButton) {
+    private LambdaQueryWrapper<Question> generateCurUserTaskWrapper(PanelListDto panelListDto, String confirmButton, String dissentButton, String reformButton) {
         LambdaQueryWrapper<Question> wrapper = new LambdaQueryWrapper<>();
-        List<Long> btns = new ArrayList<>();
-        if (ObjectUtil.isNotNull(confirmButton)) {
-            btns.add(confirmButton);
-        }
-        if (ObjectUtil.isNotNull(dissentButton)) {
-            btns.add(dissentButton);
-        }
-        if (ObjectUtil.isNotNull(reformButton)) {
-            btns.add(reformButton);
-        }
+        boolean isCheckSub = ObjectUtil.isNull(confirmButton) &&
+                ObjectUtil.isNull(dissentButton) &&
+                ObjectUtil.isNull(reformButton);
 
-        if (ObjectUtil.isEmpty(btns)) {
-            throw new ServiceException("至少需要一个按钮权限");
+        if (isCheckSub) {
+            throw new ServiceException("至少需要一个按钮权限: confirmButton, dissentButton, reformButton 均为 null");
         }
 
 //        if (!ObjectUtil.equal(userId, SecurityUtils.getUserId())) {
 //            log.error("用户id不一致:" + userId + "-" + SecurityUtils.getUserId());
 //        }
+        Set<String> permissions = SecurityUtils.getLoginUser().getPermissions();
+        // permissions 包含字符串
 
-        List<Long> ownPermission = remoteUserService.checkUserPermission(btns, panelListDto.getUserId(), SecurityConstants.INNER);
-        if (ownPermission.contains(reformButton)) {
+        /*List<Long> ownPermission = remoteUserService.checkUserPermission(btns, panelListDto.getUserId(), SecurityConstants.INNER);*/
+        if (permissions.contains(reformButton)) {
             wrapper.or(w -> w.eq(Question::getOrgId, panelListDto.getOrgId()).eq(Question::getReformStatus, QuestionReformEnum.Unreform.getValue()));
         }
 
-        if (ownPermission.contains(confirmButton)) {
+        if (permissions.contains(confirmButton)) {
             wrapper.or(w -> w.eq(Question::getOrgId, panelListDto.getOrgId()).eq(Question::getConfirmStatus, QuestionConfirmEnum.Unconfirm.getValue()));
         }
 
-        if (ownPermission.contains(dissentButton)) {
+        if (permissions.contains(dissentButton)) {
             wrapper.or(w -> w.eq(Question::getSubmitorId, panelListDto.getUserId())
                     .eq(Question::getConfirmStatus, QuestionConfirmEnum.Dissent.getValue()));
         }
@@ -453,12 +458,13 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
         return wrapper;
     }
 
-    private List<PanelListVo> selectCurUserTaskList(PanelListDto panelListDto, Long confirmButton, Long dissentButton, Long reformButton) {
+    private List<PanelListVo> selectCurUserTaskList(PanelListDto panelListDto, String confirmButton, String dissentButton, String reformButton) {
         LambdaQueryWrapper<Question> wrapper = generateCurUserTaskWrapper(panelListDto, confirmButton, dissentButton, reformButton);
         wrapper.orderByAsc(Question::getConfirmStatus).orderByDesc(Question::getReformDeadline);
         if (wrapper.isEmptyOfWhere()) {
             return new ArrayList<>();
         } else {
+
             wrapper.select(Question::getId,
                     Question::getQuestionDesc,
                     Question::getOrgId,
@@ -467,6 +473,9 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
                     Question::getSubmitTime,
                     Question::getReformDeadline);
             List<Question> list = baseMapper.selectList(wrapper);
+
+
+
             List<PanelListVo> vos = list.stream().map(item -> {
                 PanelListVo vo = new PanelListVo();
                 vo.setId(item.getId());

+ 1 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/gx/service/ResumptionServiceImpl.java

@@ -197,6 +197,7 @@ public class ResumptionServiceImpl implements ResumptionService {
                     if (ObjectUtil.isNull(point.getRectificationDeadline()) || !NumberUtil.isNumber(point.getRectificationDeadline())) {
                         throw new ServiceException("整改期限为空或不是有效的数值");
                     }
+                    //TODO 获取机构数据,应从缓存中获取
                     SysOrg org = remoteOrgService.selectSysOrgById(sysResumption.getOrgId(), SecurityConstants.INNER);
 
                     Question question = Question.builder()

+ 3 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/SocSystemApplication.java

@@ -11,6 +11,8 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.web.client.RestTemplate;
 
+import javax.annotation.PostConstruct;
+
 /**
  * 系统模块
  * 
@@ -35,4 +37,5 @@ public class SocSystemApplication
     public RestTemplate restTemplate(){
         return new RestTemplate();
     }
+
 }

+ 6 - 2
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysUserController.java

@@ -154,14 +154,18 @@ public class SysUserController extends BaseController {
             return R.fail("用户名或密码错误");
         }
         //获取当前用户的角色数据。
-        List<SysRole> sysRoles = roleService.selectRolesByUserId(sysUser.getId());
-        sysUser.setRoles(sysRoles);
+   /*     List<SysRole> sysRoles = roleService.selectRolesByUserId(sysUser.getId());
+        sysUser.setRoles(sysRoles);*/
 
         // 角色集合
         Set<String> roles = permissionService.getRolePermission(sysUser);
         // 权限集合
         Set<String> permissions = permissionService.getMenuPermission(sysUser);
+        // 获取机构数据
+        SysOrg sysOrg = orgMapper.selectById(sysUser.getOrgId());
+
         LoginUser sysUserVo = new LoginUser();
+        sysUserVo.setSysOrg(sysOrg);
         sysUserVo.setOrgId(sysUser.getOrgId());
         sysUserVo.setName(sysUser.getName());
         sysUserVo.setSource(sysUser.getSource());