Преглед на файлове

统一平台登录接入

huiqi преди 5 месеца
родител
ревизия
ff2bba0fba

+ 4 - 4
takai-admin/src/main/java/com/takai/init/InitDataLoader.java

@@ -41,10 +41,10 @@ public class InitDataLoader implements CommandLineRunner {
 //        takaiService.initDeepseekInfo();
 //        System.out.println("========================初始化DeepSeek信息结束()");
 
-        log.info("===================获取建科统一用户平台信息Job开始执行==============");
+//        log.info("===================获取建科统一用户平台信息Job开始执行==============");
         threadPoolTaskExecutor.execute(() -> syncJkData());
-
-        log.info("===================获取建科统一用户平台信息Job执行结束==============");
+//
+//        log.info("===================获取建科统一用户平台信息Job执行结束==============");
     }
 
     private void syncJkData() {
@@ -52,7 +52,7 @@ public class InitDataLoader implements CommandLineRunner {
             log.info("===================开始获取部门信息==============");
             jkApiService.getJkDepts();
             log.info("===================开始获取岗位信息==============");
-            jkApiService.getJkPosts();
+//            jkApiService.getJkPosts();
             log.info("===================开始获取用户信息==============");
             jkApiService.getJkUsers();
         } catch (IOException e) {

+ 1 - 1
takai-admin/src/main/java/com/takai/web/controller/system/SysLoginController.java

@@ -70,7 +70,7 @@ public class SysLoginController
     public AjaxResult jkLogin(@RequestBody LoginBody loginBody)
     {
         AjaxResult ajax = AjaxResult.success();
-        Map<String, Object> map  = jkLoginService.login(loginBody.getCode());
+        Map<String, Object> map  = jkLoginService.login(loginBody.getCode(),loginBody.getRedirectUrl());
         ajax.put("data", map);
         return ajax;
     }

+ 12 - 0
takai-common/src/main/java/com/takai/common/core/domain/model/LoginBody.java

@@ -27,6 +27,10 @@ public class LoginBody
      */
     private String uuid;
 
+
+
+    private String redirectUrl;
+
     public String getUserName() {
         return userName;
     }
@@ -64,4 +68,12 @@ public class LoginBody
     {
         this.uuid = uuid;
     }
+
+    public String getRedirectUrl() {
+        return redirectUrl;
+    }
+
+    public void setRedirectUrl(String redirectUrl) {
+        this.redirectUrl = redirectUrl;
+    }
 }

+ 30 - 0
takai-common/src/main/java/com/takai/common/enums/UserTypeEnum.java

@@ -0,0 +1,30 @@
+package com.takai.common.enums;
+
+/**
+ * 用户状态
+ * 
+ * @author takai
+ */
+public enum UserTypeEnum
+{
+    SYS_USER("00", "系统用户"), JK_USER("01", "建科用户");
+
+    private final String code;
+    private final String info;
+
+    UserTypeEnum(String code, String info)
+    {
+        this.code = code;
+        this.info = info;
+    }
+
+    public String getCode()
+    {
+        return code;
+    }
+
+    public String getInfo()
+    {
+        return info;
+    }
+}

+ 5 - 2
takai-common/src/main/java/com/takai/common/utils/DateUtils.java

@@ -10,6 +10,8 @@ import java.time.ZoneId;
 import java.time.ZonedDateTime;
 import java.util.Calendar;
 import java.util.Date;
+
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.time.DateFormatUtils;
 
 /**
@@ -17,6 +19,7 @@ import org.apache.commons.lang3.time.DateFormatUtils;
  * 
  * @author takai
  */
+@Slf4j
 public class DateUtils extends org.apache.commons.lang3.time.DateUtils
 {
     public static String YYYY = "yyyy";
@@ -193,8 +196,8 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     public static long getTimeBeforeDays(int days)
     {
         Calendar calendar = Calendar.getInstance();
-        calendar.add(Calendar.DAY_OF_MONTH, -7);
-        System.out.println(calendar.getTime());
+        calendar.add(Calendar.DAY_OF_MONTH, -days);
+        log.info("日期:" + calendar.getTime());
         return calendar.getTimeInMillis();
     }
 }

+ 7 - 3
takai-framework/src/main/java/com/takai/framework/web/service/JkLoginService.java

@@ -20,6 +20,7 @@ import com.takai.framework.security.context.AuthenticationContextHolder;
 import com.takai.system.service.IJkApiService;
 import com.takai.system.service.ISysConfigService;
 import com.takai.system.service.ISysUserService;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.security.authentication.AuthenticationManager;
@@ -38,6 +39,7 @@ import java.util.concurrent.TimeUnit;
  * 
  * @author takai
  */
+@Slf4j
 @Component
 public class JkLoginService
 {
@@ -89,15 +91,17 @@ public class JkLoginService
         //bcc5e847c7d24319a49e752b4019ea7f
     }
 
-    public Map<String, Object> login(String code)
+    public Map<String, Object> login(String code,String redirectUrl)
     {
+        log.info("登录code:{}", code);
+        log.info("登录redirectUrl:{}", redirectUrl);
         String username = "";
         // 用户验证
         Authentication authentication = null;
         try
         {
-            Map<String, Object> resJson = jkApiService.getJkToken(code);
-            String.valueOf(resJson.get("userId"));
+            Map<String, Object> resJson = jkApiService.getJkToken(code,redirectUrl);
+            username = String.valueOf(resJson.get("userId"));
             String password = jkConfig.getJkPsw();
             UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password);
             AuthenticationContextHolder.setContext(authenticationToken);

+ 4 - 1
takai-framework/src/main/java/com/takai/framework/web/service/SysPasswordService.java

@@ -1,6 +1,9 @@
 package com.takai.framework.web.service;
 
 import java.util.concurrent.TimeUnit;
+
+import com.takai.common.enums.UserTypeEnum;
+import org.apache.xmlbeans.UserType;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.security.core.Authentication;
@@ -65,7 +68,7 @@ public class SysPasswordService
             throw new UserPasswordRetryLimitExceedException(maxRetryCount, lockTime);
         }
 
-        if (!matches(user, password))
+        if (!UserTypeEnum.JK_USER.getCode().equals(user.getUserType()) && !matches(user, password))
         {
             retryCount = retryCount + 1;
             AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL,

+ 1 - 1
takai-quartz/src/main/java/com/takai/quartz/task/JkTask.java

@@ -38,7 +38,7 @@ public class JkTask
             log.info("===================开始获取部门信息==============");
             jkApiService.getJkDepts();
             log.info("===================开始获取岗位信息==============");
-            jkApiService.getJkPosts();
+//            jkApiService.getJkPosts();
             log.info("===================开始获取用户信息==============");
             jkApiService.getJkUsers();
         } catch (IOException e) {

+ 1 - 1
takai-system/src/main/java/com/takai/system/service/IJkApiService.java

@@ -35,6 +35,6 @@ public interface IJkApiService
     /**
      * 通过code获取建科token
      */
-    Map<String, Object> getJkToken(String code) throws IOException;
+    Map<String, Object> getJkToken(String code, String redirectUrl) throws IOException;
 
 }

+ 29 - 23
takai-system/src/main/java/com/takai/system/service/impl/JkApiServiceImpl.java

@@ -5,7 +5,9 @@ import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import com.auth0.jwt.JWTCreator;
 import com.auth0.jwt.algorithms.Algorithm;
+import com.takai.common.enums.UserTypeEnum;
 import com.takai.common.utils.DateUtils;
+import com.takai.common.utils.SecurityUtils;
 import com.takai.common.utils.StringUtils;
 import com.takai.system.service.IJkApiService;
 import com.takai.common.annotation.DataSource;
@@ -75,6 +77,8 @@ public class JkApiServiceImpl implements IJkApiService {
 
     public static final String PARAM_CODE = "code";
 
+    public static final String PARAM_REDIRECT_URI = "redirect_uri";
+
     public static final String PARAM_ACCESS_TOKEN = "access_token";
 
     public static final String PARAM_IDS = "ids";
@@ -95,6 +99,8 @@ public class JkApiServiceImpl implements IJkApiService {
 
     public static final String GRANT_TYPE_AC = "authorization_code";
 
+    public static final int BEFORE_DAYS = 1000;
+
     private static final MediaType JSON_UTF8 = MediaType.get("application/json; charset=utf-8");
 
     private static final OkHttpClient client = new OkHttpClient();
@@ -128,11 +134,12 @@ public class JkApiServiceImpl implements IJkApiService {
             //建科用户状态,启用:1,停用:0,删除:-1
             String status = json.getString("app_account__status");
             status = status.equals("1") ? "0" : "1";
-            sysUser.setStatus("1");
+            sysUser.setStatus(status);
             sysUser.setPhonenumber(json.getString("idt_user__mobile"));
             sysUser.setWorkNo(json.getString("idt_user__work_no"));
             sysUser.setEmail(json.getString("idt_user__email"));
-            sysUser.setUserType("01");//建科用户
+            sysUser.setUserType(UserTypeEnum.JK_USER.getCode());//建科用户
+            sysUser.setPassword(SecurityUtils.encryptPassword(jkConfig.getJkPsw()));
             JSONArray orgs = json.getJSONArray("orgs");
             if(orgs.size() > 0) {
                 sysUser.setDeptId(orgs.getJSONObject(0).getLong("idt_org__id"));
@@ -164,7 +171,7 @@ public class JkApiServiceImpl implements IJkApiService {
             SysDept sysDept = new SysDept();
             JSONObject json = jsonArray.getJSONObject(i);
             sysDept.setDeptId(json.getLong("idt_org__id"));
-            sysDept.setDeptName(json.getString("idt_org__org_name"));
+            sysDept.setDeptName(json.getString("idt_org__name"));
             sysDept.setParentId(json.getLong("idt_org__parent_id"));
             sysDept.setAncestors(json.getString("idt_org__org_path").substring(1).replaceAll("/",","));
             //部门状态,启用:1,停用:0
@@ -287,11 +294,11 @@ public class JkApiServiceImpl implements IJkApiService {
         return false;
     }
 
-    public Map<String, Object> getJkToken(String code) throws IOException {
+    public Map<String, Object> getJkToken(String code, String redirectUrl) throws IOException {
         String token = "";
         JSONObject userJson = null;
         try {
-            Request request = buildTokenRequest(code);
+            Request request = buildTokenRequest(code, redirectUrl);
             Response response = client.newCall(request).execute();
             String responseBody = response.body().string();
             logger.info("获取建科token返回信息:" + responseBody);
@@ -304,7 +311,7 @@ public class JkApiServiceImpl implements IJkApiService {
             if(!StringUtils.isEmpty(token)) {
                 //token 换取用户信息
                 Request pReq = buildProfileRequest(token);
-                Response pResp = client.newCall(request).execute();
+                Response pResp = client.newCall(pReq).execute();
                 String pRespBody = pResp.body().string();
                 if (!pResp.isSuccessful()) {
                     throw new IOException("token换取建科用户信息失败 " + pRespBody);
@@ -321,8 +328,8 @@ public class JkApiServiceImpl implements IJkApiService {
         }
         JSONObject attrs = userJson.getJSONObject("attributes");
         Map<String, Object> map = new HashMap<>();
-        map.put("userId", attrs.getString("sysadmintest"));
-        map.put("nickName", attrs.getString("sysadmintest"));
+        map.put("userId", attrs.getString("account_no"));
+        map.put("nickName", attrs.getString("account_no"));
         map.put("token", token);
         return map;
     }
@@ -336,7 +343,7 @@ public class JkApiServiceImpl implements IJkApiService {
 
     private Request buildRequest(String url,int page) {
         Map<String, Object> requestBodyMap = new HashMap<>();
-        requestBodyMap.put(PARAM_ST, getStartTime());
+        requestBodyMap.put(PARAM_ST, getStartTimeBeforeDays(BEFORE_DAYS));
         requestBodyMap.put(PARAM_PAGE, page);
         requestBodyMap.put(PARAM_SIZE, DEFAULT_SIZE);
         // 将 Map 转换为 JSON 字符串
@@ -355,24 +362,22 @@ public class JkApiServiceImpl implements IJkApiService {
         return request;
     }
 
-    private Request buildTokenRequest(String code) {
-        Map<String, Object> requestBodyMap = new HashMap<>();
-        requestBodyMap.put(PARAM_GRANT_TYPE, GRANT_TYPE_AC);
-        requestBodyMap.put(PARAM_CLIENT_ID, jkConfig.getIamClientID());
-        requestBodyMap.put(PARAM_CLIENT_SECRET, jkConfig.getIamClientSecret());
-        requestBodyMap.put(PARAM_CODE, code);
-        // 将 Map 转换为 JSON 字符串
-        String requestBodyJson = JSON.toJSONString(requestBodyMap);
+    private Request buildTokenRequest(String code, String redirectUrl) {
+        String completeUrl = jkConfig.getIamTokenUrl() + "?" +PARAM_GRANT_TYPE + "=" + GRANT_TYPE_AC
+                + "&" +PARAM_CLIENT_ID + "=" + jkConfig.getIamClientID()
+                + "&" +PARAM_CLIENT_SECRET + "=" + jkConfig.getIamClientSecret()
+                + "&" +PARAM_CODE + "=" + code
+                + "&" +PARAM_REDIRECT_URI + "=" + redirectUrl;
 
         // 构建请求体
-        RequestBody body = RequestBody.create(JSON_UTF8,requestBodyJson);
+        RequestBody body = RequestBody.create(JSON_UTF8,"");
         Request request = new Request.Builder()
                 .addHeader("accept", "*/*")
                 .addHeader("Content-Type", "application/json")
                 .post(body)
-                .url(jkConfig.getIamTokenUrl()).get().build();
+                .url(completeUrl).build();
         logger.info("code换取token接口请求head:{}", request.headers().toString());
-        logger.info("code换取token接口请求body:{}", request.body().toString());
+        logger.info("code换取token接口请求url:{}", completeUrl);
         return request;
     }
 
@@ -392,7 +397,7 @@ public class JkApiServiceImpl implements IJkApiService {
                 .post(body)
                 .url(jkConfig.getIamCallbackUrl()).build();
         logger.info("回调接口请求head:{}", request.headers().toString());
-        logger.info("回调接口请求body:{}", request.body().toString());
+        logger.info("回调接口请求body:{}", requestBodyJson);
         return request;
     }
 
@@ -403,15 +408,16 @@ public class JkApiServiceImpl implements IJkApiService {
         String url = urlBuilder.build().toString();
         Request request = new Request.Builder()
                 .url(url)
+                .get()
                 .build();
 
         logger.info("token获取用户信息请求url", url);
         return request;
     }
 
-    private String getStartTime() {
+    private String getStartTimeBeforeDays(int days) {
         //7天内数据
-        return String.valueOf(DateUtils.getTimeBeforeDays(7));
+        return String.valueOf(DateUtils.getTimeBeforeDays(days));
     }
 
     private boolean isJsonObject(String data) {

+ 7 - 6
takai-system/src/main/java/com/takai/system/service/impl/SysDeptServiceImpl.java

@@ -213,12 +213,13 @@ public class SysDeptServiceImpl implements ISysDeptService
     public int insertDept(SysDept dept)
     {
         SysDept info = deptMapper.selectDeptById(dept.getParentId());
-        // 如果父节点不为正常状态,则不允许新增子节点
-        if (!UserConstants.DEPT_NORMAL.equals(info.getStatus()))
-        {
-            throw new ServiceException("部门停用,不允许新增");
-        }
-        dept.setAncestors(info.getAncestors() + "," + dept.getParentId());
+//        if(info != null) {
+//            // 如果父节点不为正常状态,则不允许新增子节点
+//            if (!UserConstants.DEPT_NORMAL.equals(info.getStatus())) {
+//                throw new ServiceException("部门停用,不允许新增");
+//            }
+//            dept.setAncestors(info.getAncestors() + "," + dept.getParentId());
+//        }
         return deptMapper.insertDept(dept);
     }
 

+ 2 - 1
takai-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -9,6 +9,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="deptId"       column="dept_id"      />
         <result property="userName"     column="user_name"    />
         <result property="nickName"     column="nick_name"    />
+		<result property="userType"     column="user_type"    />
         <result property="email"        column="email"        />
         <result property="phonenumber"  column="phonenumber"  />
         <result property="sex"          column="sex"          />
@@ -47,7 +48,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 	
 	<sql id="selectUserVo">
-        select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, 
+        select u.user_id, u.dept_id, u.user_name, u.nick_name, u.user_type, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
         d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,
         r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
         from sys_user u