|
|
@@ -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) {
|