From 8a857fe1b0b69dafbdaa15b45edab03a2c3bcdb2 Mon Sep 17 00:00:00 2001
From: 田源 <lastanimals@163.com>
Date: 星期二, 09 七月 2024 09:52:47 +0800
Subject: [PATCH] 成员管理表格查询 增删改 分配成员 统计 下载导入模板

---
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LoginServiceImpl.java |  160 ++++++++++++++++++++--------------------------------
 1 files changed, 62 insertions(+), 98 deletions(-)

diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LoginServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LoginServiceImpl.java
index 17aa5b1..aba5f04 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LoginServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LoginServiceImpl.java
@@ -1,28 +1,30 @@
 package com.vci.web.service.impl;
 
-import com.vci.client.logon.base.LogonHandler;
+import com.vci.client.mw.ClientSessionUtility;
+import com.vci.corba.common.PLException;
+import com.vci.corba.common.data.InvocationInfo;
+import com.vci.corba.framework.data.DeptInfo;
 import com.vci.corba.framework.data.LoginResult;
 import com.vci.corba.framework.data.LoginState;
+import com.vci.corba.framework.data.MachineInfo;
 import com.vci.frameworkcore.ajaxTask.SmUserUnLockTask;
 import com.vci.frameworkcore.ajaxTask.SmUserUnLockTaskManager;
 import com.vci.frameworkcore.compatibility.ISmFunctionQueryService;
 import com.vci.frameworkcore.compatibility.SmRoleQueryServiceI;
 import com.vci.frameworkcore.compatibility.SmUserQueryServiceI;
+import com.vci.frameworkcore.enumpck.ResourceControlTypeEnum;
+import com.vci.frameworkcore.pagemodel.SmFunctionVO;
 import com.vci.frameworkcore.pagemodel.SmUserVO;
 import com.vci.frameworkcore.properties.VciSecurityManageProperties;
 import com.vci.starter.web.annotation.bus.VciLoginAfter;
 import com.vci.starter.web.annotation.bus.VciLogoutBefore;
 import com.vci.starter.web.annotation.bus.VciLogoutPlugin;
-import com.vci.starter.web.constant.TokenKeyConstant;
 import com.vci.starter.web.exception.VciBaseException;
 import com.vci.starter.web.interceptor.VciSessionForLoginI;
 import com.vci.starter.web.pagemodel.RequestClientInfo;
 import com.vci.starter.web.pagemodel.SessionInfo;
 import com.vci.starter.web.pagemodel.TokenVO;
-import com.vci.starter.web.util.ApplicationContextProvider;
-import com.vci.starter.web.util.JwtUtils;
-import com.vci.starter.web.util.Md5;
-import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.util.*;
 import com.vci.web.bo.LoginResultBO;
 import com.vci.web.constant.CacheNameConstant;
 import com.vci.web.dto.LoginUserDTO;
@@ -33,16 +35,15 @@
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import java.lang.reflect.Method;
-import java.util.ArrayList;
 import java.util.Date;
-import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
-import java.util.concurrent.TimeUnit;
 
 import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.*;
 
@@ -142,15 +143,17 @@
         }
 
         //闇�瑕佺湅鐪嬫槸鍚﹀凡缁忕櫥褰曚簡
-        String loginKey = CacheNameConstant.cacheKey(CacheNameConstant.VCI_USER_LOGIN, userDTO.getUserId());
-        if(redisService.hasKey(loginKey) && !userDTO.isForceLogin() && securityManageProperties.isUserOneLogin()){
+        String userIdTokenKey = CacheNameConstant.cacheKey(CacheNameConstant.USERID_TOKEN_KEY, userDTO.getUserId().trim());
+        if(redisService.hasKey(userIdTokenKey) && !userDTO.isForceLogin() && securityManageProperties.isUserOneLogin()){
             loginResult.setFailCode(USER_IS_LOGINED);
             loginResult.setFailMsg("褰撳墠鐢ㄦ埛宸茬粡鍦ㄥ叾浠栧湴鏂圭櫥褰曪紒");
             return loginResult;
         }
         //璇存槑宸茬粡鐧诲綍浜嗭紝閭e簲璇ュ彇娑堝師鏉ョ殑鐧诲綍
-        if (redisService.hasKey(loginKey) && userDTO.isForceLogin() && securityManageProperties.isUserOneLogin()) {
-            redisService.deleteObject(CacheNameConstant.VCI_USER_LOGIN);
+        if (redisService.hasKey(userIdTokenKey) && userDTO.isForceLogin() && securityManageProperties.isUserOneLogin()) {
+            String tokenKey = redisService.getCacheObject(userIdTokenKey);
+            redisService.deleteObject(tokenKey);
+            redisService.deleteObject(userIdTokenKey);
         }
 
         //2.鑾峰彇鐢ㄦ埛鐨勫璞�.
@@ -172,16 +175,28 @@
         }
 
         //4銆佽皟鐢ㄥ钩鍙扮櫥褰曟帴鍙o紝杩涜鐧诲綍
-        LogonHandler handler = new LogonHandler();
+        MachineInfo machine = getMachieInfo(clientInfo);
+        machine.country = clientInfo.getCountry();
+        machine.language = clientInfo.getLanguage();
+        machine.osUser = clientInfo.getOsUser();
+        machine.machine = clientInfo.getMachine();
+
+        String token = null;
         try {
-            LoginResult chkRes = handler.checkLogin(userDTO.getUserId(), userDTO.getPassword());
+            LoginResult chkRes = platformClientUtil.getFrameworkService().checkLogin(userDTO.getUserId(),userDTO.getPassword(), machine);
             loginResult.setFailCode(getErrorCode(chkRes));
             loginResult.setFailMsgArray(new String[]{userDTO.getUserId(), String.valueOf(chkRes.auxInfo)});
             if(chkRes.state == LoginState.Error || chkRes.state == LoginState.Locked || chkRes.state == LoginState.Freeze){
                 return loginResult;
             }
+            token = chkRes.token;
         } catch (Exception e) {
             loginResult.setFailCode(SYSTEM_ERROR);
+            loginResult.setFailMsgArray(new String[]{userDTO.getUserId()});
+            return loginResult;
+        }
+        if(StringUtils.isBlank(token)){
+            loginResult.setFailMsg(TOKEN_EMPTY);
             loginResult.setFailMsgArray(new String[]{userDTO.getUserId()});
             return loginResult;
         }
@@ -284,10 +299,25 @@
         user.setPwdWrongCount(0);
 
         SessionInfo sessionInfo = new SessionInfo();
+        sessionInfo.setToken(token);
+
+        //鍒濆鍖栧钩鍙扮殑token
+        sessionForLogin.initInvocationInfo(sessionInfo);
+
         //鎷疯礉鐢ㄦ埛鐨勬柊鍒皊ession浼氳瘽涓�
         copyUser2SessionInfo(user, sessionInfo, userDTO.getLangCode());
         //鎷疯礉璇锋眰淇℃伅鍒皊ession浼氳瘽涓�
         copyRequest2SessionInfo(clientInfo, sessionInfo);
+
+        //鑾峰彇浜哄憳鎵�灞炵殑閮ㄩ棬淇℃伅
+        try {
+            DeptInfo deptInfo = platformClientUtil.getFrameworkService().fetchDeptByUserId(user.getOid());
+            sessionInfo.setDeptOid(deptInfo.id);
+            sessionInfo.setDeptName(deptInfo.name);
+            sessionInfo.setDeptNum(deptInfo.num);
+        } catch (PLException e) {
+            throw new VciBaseException("鑾峰彇鐢ㄦ埛鎵�灞為儴闂ㄥけ璐�:"+e.getMessage());
+        }
 
         /** //鏌ヨ鎵�鏈夌殑瑙掕壊
         List<SmRoleVO> roleVOList = roleQueryService.listRoleByUserOid(user.getOid(), null);
@@ -306,14 +336,21 @@
             sessionInfo.setFunctionOids(new ArrayList());
         }*/
 
-        loginResult.setSuccess(true);
-        sessionInfo.setToken(Md5.md5(VciBaseUtil.getPk() + "_" + user.getId()));
-        loginResult.setSessionInfo(sessionInfo);
-
         //娣诲姞鍒颁細璇濅俊鎭�
-        saveSessionInfo(sessionInfo);
+        TokenVO tokenVO = saveSessionInfo(sessionInfo);
+        loginResult.setTokenVO(tokenVO);
 
+        loginResult.setSuccess(true);
         return loginResult;
+    }
+
+    private MachineInfo getMachieInfo(RequestClientInfo clientInfo) {
+        MachineInfo machine = new MachineInfo();
+        machine.country = clientInfo.getCountry();
+        machine.language = clientInfo.getLanguage();
+        machine.osUser = clientInfo.getOsUser();
+        machine.machine = clientInfo.getMachine();
+        return machine;
     }
 
     /**
@@ -322,14 +359,7 @@
      * @Return com.vci.frameworkcore.pagemodel.SmUserVO
      */
     private SmUserVO getUserByUserId(String userId) {
-        String userKey = CacheNameConstant.cacheKey(CacheNameConstant.VCI_USER,userId);
-        String userOid = redisService.getCacheObject(userKey);
-        String oidKey = CacheNameConstant.cacheKey(CacheNameConstant.VCI_USER_OID, userOid);
-        SmUserVO userVO = redisService.getCacheObject(oidKey);
-        if(userVO == null || StringUtils.isBlank(userVO.getOid())){
-            userVO = userQueryService.getUserByUserId(userId);
-        }
-        return userVO;
+        return userQueryService.getUserByUserId(userId);
     }
 
 
@@ -403,16 +433,12 @@
      * 淇濆瓨浼氳瘽淇℃伅
      * @param sessionInfo 浼氳瘽淇℃伅
      */
-    private void saveSessionInfo(SessionInfo sessionInfo){
+    private TokenVO saveSessionInfo(SessionInfo sessionInfo){
         if(sessionForLogin == null){
             throw new VciBaseException("娌℃湁閰嶇疆浼氳瘽瀛樺偍鐨勬湇鍔�");
         }
-        //灏嗘潈闄愪俊鎭紝鏀惧叆redis缂撳瓨涓�備互闃叉session涓殑淇℃伅杩囧锛屽瓨鍏ユ暟鎹簱涓嚭鐜伴敊璇�
-        redisService.setCacheList(sessionInfo.getToken(),sessionInfo.getFunctionOids());
-        redisService.expire(sessionInfo.getToken(), 1, TimeUnit.HOURS);
-
-        sessionInfo.setFunctionOids(new ArrayList<>());
-        sessionForLogin.saveSessionInfo(sessionInfo);
+        WebThreadLocalUtil.setCurrentUserSessionInfoInThread(sessionInfo);
+        return sessionForLogin.createToken(sessionInfo);
     }
 
     /**
@@ -462,6 +488,7 @@
         sessionInfo.setRtxNo(user.getRtxNo());
         sessionInfo.setIMId(user.getIMNo());
         sessionInfo.setPortalId(user.getId());
+        sessionInfo.setLastLoginTime(user.getLastLoginTime()!=null?user.getLastLoginTime().getTime(): VciDateUtil.getNowTime());
     }
 
     /**
@@ -494,69 +521,6 @@
      */
     private void updateUserForLoginSuccess(String userOid){
         userQueryService.updateUserLoginTime(userOid);
-    }
-
-    /**
-     * 鍒涘缓璁稿彲鐨勪俊鎭�
-     *
-     * @param sessionInfo session鐨勪俊鎭�
-     * @return 璁稿彲淇℃伅
-     */
-    @Override
-    public TokenVO createToken(SessionInfo sessionInfo) {
-        return createToken(TokenKeyConstant.TOKEN_KEY_PREFIX_IN_REDIS, sessionInfo);
-    }
-
-    /**
-     * 鍒涘缓璁稿彲鐨勪俊鎭�
-     * @param key token鍦╮edis涓殑key
-     * @param sessionInfo session鐨勪俊鎭�
-     * @return 璁稿彲淇℃伅
-     */
-    @Override
-    public TokenVO createToken(String key, SessionInfo sessionInfo) {
-        if(StringUtils.isBlank(sessionInfo.getToken())) {
-            String token = Md5.md5(VciBaseUtil.getPk() + "_" + sessionInfo.getUserId());
-            sessionInfo.setToken(token);
-        }
-        if(StringUtils.isBlank(key)){
-            key = TokenKeyConstant.TOKEN_KEY_PREFIX_IN_REDIS;
-        }
-        refreshToken(key, sessionInfo);
-        Map<String,Object> claimsMap = new HashMap<>();
-        claimsMap.put(TokenKeyConstant.JWT_TOKEN_KEY,sessionInfo.getToken());
-        claimsMap.put(TokenKeyConstant.JWT_USER_KEY,sessionInfo.getUserOid());
-        claimsMap.put(TokenKeyConstant.JWT_USER_NAME_KEY,sessionInfo.getUserName());
-        claimsMap.put(TokenKeyConstant.JWT_USER_CODE_KEY,sessionInfo.getUserId());
-        TokenVO tokenVO = new TokenVO();
-        tokenVO.setAccessToken(JwtUtils.createToken(claimsMap));
-        tokenVO.setExpireTime(TokenKeyConstant.EXPIRATION);
-        return tokenVO;
-    }
-
-    /**
-     * 鍒锋柊token
-     * @param sessionInfo session鐨勪俊鎭�
-     */
-    @Override
-    public void refreshToken(SessionInfo sessionInfo) {
-        refreshToken(TokenKeyConstant.TOKEN_KEY_PREFIX_IN_REDIS, sessionInfo);
-    }
-
-    /**
-     * 鍒锋柊token
-     * @param key token鍦╮edis涓殑key
-     * @param sessionInfo session鐨勪俊鎭�
-     */
-    @Override
-    public void refreshToken(String key, SessionInfo sessionInfo) {
-        if(sessionInfo!=null && StringUtils.isNotBlank(sessionInfo.getToken())){
-            if(StringUtils.isBlank(key)){
-                key = TokenKeyConstant.TOKEN_KEY_PREFIX_IN_REDIS;
-            }
-            String redisKey = key + sessionInfo.getToken();
-            redisService.setCacheObject(redisKey, sessionInfo, webProperties.getClientSessionAliveMax()!=0?webProperties.getClientSessionAliveMax(): TokenKeyConstant.EXPIRATION, TimeUnit.MINUTES);
-        }
     }
 
     /**

--
Gitblit v1.9.3