瀏覽代碼

建科统一身份认证平台接入

S0025136190 5 月之前
父節點
當前提交
9461b30159

+ 3 - 1
takai-admin/src/main/resources/application.yml

@@ -209,7 +209,9 @@ jk:
   #clientSecret
   iamClientSecret: 13845f824b5d9f4f2a58159109aac317263d
   #用户接口url
-  iamUserUrl: http://esc.sribs.com.cn:8080/esc-idm/api/v1/account/list
+  iamUserUrl: https://esctest.sribs.com.cn/esc-idm/api/v1/account/list
+  #用户回调接口,每次用户接口调用成功后都要回调一次接口
+  iamCallbackUrl: https://esctest.sribs.com.cn/esc-idm/api/v1/account/callback
   #部门接口url
   iamDeptUrl: https://esctest.sribs.com.cn/esc-idm/api/v1/org/listAll
   #岗位接口url

+ 2 - 0
takai-common/src/main/java/com/takai/common/config/JkConfig.java

@@ -22,6 +22,8 @@ public class JkConfig {
 
     private String iamUserUrl;
 
+    private String iamCallbackUrl;
+
     private String iamDeptUrl;
 
     private String iamPostUrl;

+ 11 - 0
takai-common/src/main/java/com/takai/common/core/domain/entity/SysUser.java

@@ -93,6 +93,8 @@ public class SysUser extends BaseEntity
     /** 角色ID */
     private Long roleId;
 
+    private String userType;
+
     public SysUser()
     {
 
@@ -309,6 +311,14 @@ public class SysUser extends BaseEntity
         this.workNo = workNo;
     }
 
+    public String getUserType() {
+        return userType;
+    }
+
+    public void setUserType(String userType) {
+        this.userType = userType;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
@@ -316,6 +326,7 @@ public class SysUser extends BaseEntity
             .append("deptId", getDeptId())
             .append("userName", getUserName())
             .append("nickName", getNickName())
+            .append("userType", getUserType())
             .append("email", getEmail())
             .append("phonenumber", getPhonenumber())
             .append("sex", getSex())

+ 9 - 0
takai-common/src/main/java/com/takai/common/utils/DateUtils.java

@@ -8,6 +8,7 @@ import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.ZoneId;
 import java.time.ZonedDateTime;
+import java.util.Calendar;
 import java.util.Date;
 import org.apache.commons.lang3.time.DateFormatUtils;
 
@@ -188,4 +189,12 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
         ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
         return Date.from(zdt.toInstant());
     }
+
+    public static long getTimeBeforeDays(int days)
+    {
+        Calendar calendar = Calendar.getInstance();
+        calendar.add(Calendar.DAY_OF_MONTH, -7);
+        System.out.println(calendar.getTime());
+        return calendar.getTimeInMillis();
+    }
 }

+ 79 - 5
takai-system/src/main/java/com/takai/system/service/impl/JkApiServiceImpl.java

@@ -5,6 +5,7 @@ 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.utils.DateUtils;
 import com.takai.common.utils.StringUtils;
 import com.takai.system.service.IJkApiService;
 import com.takai.common.annotation.DataSource;
@@ -76,6 +77,10 @@ public class JkApiServiceImpl implements IJkApiService {
 
     public static final String PARAM_ACCESS_TOKEN = "access_token";
 
+    public static final String PARAM_IDS = "ids";
+
+    public static final String PARAM_ERRORS = "errors";
+
     public static final int DEFAULT_SIZE = 100;
 
     public static final String CODE_SUCCESS = "0";
@@ -86,6 +91,8 @@ public class JkApiServiceImpl implements IJkApiService {
 
     public static final String LIST = "list";
 
+    public static final String INTERFACE_USER = "用户";
+
     public static final String GRANT_TYPE_AC = "authorization_code";
 
     private static final MediaType JSON_UTF8 = MediaType.get("application/json; charset=utf-8");
@@ -100,7 +107,7 @@ public class JkApiServiceImpl implements IJkApiService {
     @Override
     public List<SysUser> getJkUsers() throws IOException {
         List<SysUser> userList = new ArrayList<>();
-        List<JSONObject> dataList = getApiData(jkConfig.getIamUserUrl(),"用户");
+        List<JSONObject> dataList = getApiData(jkConfig.getIamUserUrl(),INTERFACE_USER);
         for(JSONObject jsonObject : dataList) {
             List<SysUser> users = buildSysUserList(jsonObject.getJSONArray(LIST));
             //保存用户到用户表
@@ -125,6 +132,7 @@ public class JkApiServiceImpl implements IJkApiService {
             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");//建科用户
             JSONArray orgs = json.getJSONArray("orgs");
             if(orgs.size() > 0) {
                 sysUser.setDeptId(orgs.getJSONObject(0).getLong("idt_org__id"));
@@ -221,6 +229,10 @@ public class JkApiServiceImpl implements IJkApiService {
                 String code = jsonObject.getString("code");
                 if (CODE_SUCCESS.equals(code)) {
                     JSONObject dataObject = jsonObject.getJSONObject(DATA);
+                    //如果是用户接口,调用回调函数
+                    if(INTERFACE_USER.equals(objectName)) {
+                        doUserCallback(dataObject);
+                    }
                     objectList.add(dataObject);
                     total = dataObject.getInteger(TOTAL);
                     page++;
@@ -233,6 +245,46 @@ public class JkApiServiceImpl implements IJkApiService {
         return objectList;
     }
 
+    private boolean doUserCallback(JSONObject dataObject) {
+        String ids = "";
+        JSONArray jsonArray = dataObject.getJSONArray(LIST);
+        for(int i = 0; i < jsonArray.size(); i++) {
+            SysUser sysUser = new SysUser();
+            JSONObject json = jsonArray.getJSONObject(i);
+            if(!"".equals(ids)) {
+                ids += ",";
+            }
+            ids += json.getString("app_account__id");
+        }
+        Request request = buildCallbackRequest(ids);
+        int i = 0;
+        while(i < 3) {//重试3次
+            try {
+                if(i > 0) {
+                    Thread.sleep(i*1000);
+                }
+                Response response = client.newCall(request).execute();
+                logger.info("回调建科用户接口返回:" + response.body().string());
+
+                if (!response.isSuccessful()) {
+                    logger.error("回调建科用户接口失败 " + response.body().string());
+                    i++;
+                    continue;
+                }
+                JSONObject jsonObject =JSON.parseObject(response.body().string());
+                //“0”为成功其余均为失败
+                String code = jsonObject.getString("code");
+                if (CODE_SUCCESS.equals(code)) {
+                    return true;
+                }
+            } catch (Exception e) {
+                logger.error("回调建科用户接口息失败 ", e);
+                i++;
+            }
+        }
+        return false;
+    }
+
     public Map<String, Object> getJkToken(String code) throws IOException {
         String token = "";
         JSONObject userJson = null;
@@ -293,8 +345,8 @@ public class JkApiServiceImpl implements IJkApiService {
                 .addHeader("Content-Type", "application/json")
                 .post(body)
                 .url(url).build();
-//        logger.info("请求head:{}", request.headers().toString());
-//        logger.info("请求body:{}", request.body().toString());
+        logger.info("请求head:{}", request.headers().toString());
+        logger.info("请求body:{}", request.body().toString());
         return request;
     }
 
@@ -314,7 +366,28 @@ public class JkApiServiceImpl implements IJkApiService {
                 .addHeader("Content-Type", "application/json")
                 .post(body)
                 .url(jkConfig.getIamTokenUrl()).get().build();
-        logger.info("请求head:{}", request.headers().toString());
+        logger.info("code换取token接口请求head:{}", request.headers().toString());
+        logger.info("code换取token接口请求body:{}", request.body().toString());
+        return request;
+    }
+
+    private Request buildCallbackRequest(String ids) {
+        Map<String, Object> requestBodyMap = new HashMap<>();
+        requestBodyMap.put(PARAM_IDS, ids);
+        requestBodyMap.put(PARAM_ERRORS, new ArrayList<>());
+        // 将 Map 转换为 JSON 字符串
+        String requestBodyJson = JSON.toJSONString(requestBodyMap);
+
+        // 构建请求体
+        RequestBody body = RequestBody.create(JSON_UTF8,requestBodyJson);
+        Request request = new Request.Builder()
+                .addHeader("accept", "*/*")
+                .addHeader("Authorization", createJkToken())
+                .addHeader("Content-Type", "application/json")
+                .post(body)
+                .url(jkConfig.getIamCallbackUrl()).build();
+        logger.info("回调接口请求head:{}", request.headers().toString());
+        logger.info("回调接口请求body:{}", request.body().toString());
         return request;
     }
 
@@ -332,7 +405,8 @@ public class JkApiServiceImpl implements IJkApiService {
     }
 
     private String getStartTime() {
-        return String.valueOf(System.currentTimeMillis());
+        //7天内数据
+        return String.valueOf(DateUtils.getTimeBeforeDays(7));
     }
 
     private boolean isJsonObject(String data) {

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

@@ -152,6 +152,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="deptId != null and deptId != 0">dept_id,</if>
  			<if test="userName != null and userName != ''">user_name,</if>
  			<if test="nickName != null and nickName != ''">nick_name,</if>
+		    <if test="userType != null and userType != ''">user_type,</if>
  			<if test="email != null and email != ''">email,</if>
  			<if test="avatar != null and avatar != ''">avatar,</if>
  			<if test="phonenumber != null and phonenumber != ''">phonenumber,</if>
@@ -166,6 +167,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="deptId != null and deptId != ''">#{deptId},</if>
  			<if test="userName != null and userName != ''">#{userName},</if>
  			<if test="nickName != null and nickName != ''">#{nickName},</if>
+		   <if test="userType != null and userType != ''">#{userType},</if>
  			<if test="email != null and email != ''">#{email},</if>
  			<if test="avatar != null and avatar != ''">#{avatar},</if>
  			<if test="phonenumber != null and phonenumber != ''">#{phonenumber},</if>