北森接口对接
This commit is contained in:
parent
e730c6f8cc
commit
c8368082b4
|
|
@ -0,0 +1,16 @@
|
|||
package com.engine.hzzx.entity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2025/03/13
|
||||
* @version: 1.0
|
||||
*/
|
||||
@Data
|
||||
public class Department {
|
||||
private String name;
|
||||
private String shortName;
|
||||
private String code;
|
||||
private String oId;
|
||||
}
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
package com.engine.hzzx.entity;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2025/03/13
|
||||
* @version: 1.0
|
||||
*/
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
public class Employee {
|
||||
private String lastSchool;
|
||||
private String modifiedTime;
|
||||
private String nation;
|
||||
private long userID;
|
||||
private String major;
|
||||
private String applicantIdV6;
|
||||
private String createdTime;
|
||||
private int applicantId;
|
||||
private Date certificateValidityTerm;
|
||||
private int nationality;
|
||||
private int sourceType;
|
||||
private String name;
|
||||
private boolean stdIsDeleted;
|
||||
private int gender;
|
||||
private String iDType;
|
||||
private String backupMail;
|
||||
private String certificateStartDate;
|
||||
private String businessModifiedTime;
|
||||
private long businessModifiedBy;
|
||||
private String _Name;
|
||||
private String educationLevel;
|
||||
private long modifiedBy;
|
||||
private String email;
|
||||
private String objectId;
|
||||
private String politicalStatus;
|
||||
private long createdBy;
|
||||
private int age;
|
||||
private String departmentCode;
|
||||
private String positionCode;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Employee{" +
|
||||
"lastSchool='" + lastSchool + '\'' +
|
||||
", modifiedTime='" + modifiedTime + '\'' +
|
||||
", nation='" + nation + '\'' +
|
||||
", userID=" + userID +
|
||||
", major='" + major + '\'' +
|
||||
", applicantIdV6='" + applicantIdV6 + '\'' +
|
||||
", createdTime='" + createdTime + '\'' +
|
||||
", applicantId=" + applicantId +
|
||||
", certificateValidityTerm=" + certificateValidityTerm +
|
||||
", nationality=" + nationality +
|
||||
", sourceType=" + sourceType +
|
||||
", name='" + name + '\'' +
|
||||
", stdIsDeleted=" + stdIsDeleted +
|
||||
", gender=" + gender +
|
||||
", iDType='" + iDType + '\'' +
|
||||
", backupMail='" + backupMail + '\'' +
|
||||
", certificateStartDate='" + certificateStartDate + '\'' +
|
||||
", businessModifiedTime='" + businessModifiedTime + '\'' +
|
||||
", businessModifiedBy=" + businessModifiedBy +
|
||||
", _Name='" + _Name + '\'' +
|
||||
", educationLevel='" + educationLevel + '\'' +
|
||||
", modifiedBy=" + modifiedBy +
|
||||
", email='" + email + '\'' +
|
||||
", objectId='" + objectId + '\'' +
|
||||
", politicalStatus='" + politicalStatus + '\'' +
|
||||
", createdBy=" + createdBy +
|
||||
", age=" + age +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
package com.engine.hzzx.entity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2025/03/13
|
||||
* @version: 1.0
|
||||
*/
|
||||
@Data
|
||||
public class Position {
|
||||
private String name;
|
||||
private String code;
|
||||
private String oId;
|
||||
}
|
||||
|
|
@ -0,0 +1,229 @@
|
|||
package weaver.interfaces.hzzx.cronjob;
|
||||
|
||||
import cn.hutool.http.HttpRequest;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.engine.hzzx.entity.Department;
|
||||
import com.engine.hzzx.entity.Employee;
|
||||
import com.engine.hzzx.entity.Position;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import weaver.common.DateUtil;
|
||||
import weaver.conn.RecordSet;
|
||||
import weaver.interfaces.schedule.BaseCronJob;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2025/03/12
|
||||
* @version: 1.0
|
||||
*/
|
||||
public class SyncBeiSenInfoJob extends BaseCronJob {
|
||||
private static final String TOKEN_URL = "https://openapi.italent.cn/token";
|
||||
private static final String GET_EMPLOYMENT_URL = "https://openapi.italent.cn/TenantBaseExternal/api/v5/Employee/GetByTimeWindow";
|
||||
private static final String GET_DEPARTMENT_URL = "https://openapi.italent.cn/TenantBaseExternal/api/v5/Organization/GetByIds";
|
||||
private static final String GET_POSITION_URL = "https://openapi.italent.cn/TenantBaseExternal/api/v5/Position/GetByOIds";
|
||||
|
||||
private static final String APP_KEY = "EE7D602509E04A59AE5DEFF0841F6A1C";
|
||||
private static final String APP_SECRET = "F5229D9D83BF45DEBFA1EF8DAC13C0339D0074419CFE45FA8BAC2A0B9D170798";
|
||||
|
||||
|
||||
RecordSet rs = new RecordSet();
|
||||
|
||||
@Override
|
||||
public void execute() {
|
||||
String accessToken = getToken();
|
||||
// 获取近两天的数据
|
||||
String startTime = DateUtil.getYesterday() + "T00:00:00";
|
||||
String stopTime = DateUtil.getCurrentDate() + "T23:59:59";
|
||||
int[] empStatus = {1};
|
||||
int[] employType = {0};
|
||||
int[] internshipType = {2};
|
||||
List<Employee> employeeList = new ArrayList<>();
|
||||
getPendingEmployment(startTime, stopTime, empStatus, employType, accessToken, "", employeeList);
|
||||
|
||||
if (CollectionUtils.isNotEmpty(employeeList)) {
|
||||
// 遍历待入职信息,插入数据库
|
||||
for (Employee employee : employeeList) {
|
||||
rs.writeLog("遍历待入职信息", employee.toString());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
List<Employee> internshipList = new ArrayList<>();
|
||||
getPendingEmployment(startTime, stopTime, empStatus, internshipType, accessToken, "", internshipList);
|
||||
if (CollectionUtils.isNotEmpty(internshipList)) {
|
||||
// 遍历实习生信息,插入数据库
|
||||
for (Employee employee : internshipList) {
|
||||
rs.writeLog("遍历实习生信息", employee.toString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取待入职信息
|
||||
*
|
||||
* @param startTime
|
||||
* @param stopTime
|
||||
* @param empStatus
|
||||
* @param accessToken
|
||||
* @param scrollId
|
||||
* @param employeeList
|
||||
* @return
|
||||
*/
|
||||
private String getPendingEmployment(String startTime, String stopTime, int[] empStatus, int[] employType, String accessToken, String scrollId, List<Employee> employeeList) {
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("startTime", startTime);
|
||||
json.put("stopTime", stopTime);
|
||||
json.put("empStatus", empStatus);
|
||||
json.put("employType", employType);
|
||||
if (StringUtils.isNotBlank(scrollId)) {
|
||||
json.put("scrollId", scrollId);
|
||||
}
|
||||
rs.writeLog("GetByTimeWindow,入参", json.toString());
|
||||
String response = HttpRequest.post(GET_EMPLOYMENT_URL)
|
||||
.header("Authorization", "Bearer " + accessToken)
|
||||
.body(json.toString())
|
||||
.contentType("application/json")
|
||||
.execute()
|
||||
.body();
|
||||
rs.writeLog("GetByTimeWindow,返参", response);
|
||||
JSONObject jsonObject = JSONObject.parseObject(response);
|
||||
|
||||
String code = jsonObject.getString("code");
|
||||
if (!"200".equals(code)) {
|
||||
throw new RuntimeException("GetByTimeWindow接口调用失败");
|
||||
}
|
||||
scrollId = jsonObject.getString("scrollId");
|
||||
JSONArray data = jsonObject.getJSONArray("data");
|
||||
if (data.size() == 0) {
|
||||
return "";
|
||||
}
|
||||
|
||||
for (int i = 0; i < data.size(); i++) {
|
||||
JSONObject dataObject = data.getJSONObject(i);
|
||||
JSONObject employeeInfo = dataObject.getJSONObject("employeeInfo");
|
||||
JSONObject recordInfo = dataObject.getJSONObject("recordInfo");
|
||||
String oIdDepartment = recordInfo.getString("oIdDepartment");
|
||||
String oIdJobPosition = recordInfo.getString("oIdJobPosition");
|
||||
Department department = getDepartment(oIdDepartment, accessToken);
|
||||
Position position = getPosition(oIdJobPosition, accessToken);
|
||||
|
||||
Employee employeeObject = JSONObject.parseObject(employeeInfo.toJSONString(), Employee.class);
|
||||
if (null != department) {
|
||||
employeeObject.setDepartmentCode(department.getCode());
|
||||
}
|
||||
if (null != position) {
|
||||
employeeObject.setPositionCode(position.getCode());
|
||||
}
|
||||
employeeList.add(employeeObject);
|
||||
}
|
||||
return getPendingEmployment(startTime, stopTime, empStatus, employType, accessToken, scrollId, employeeList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取access_token
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
private String getToken() {
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("grant_type", "client_credentials");
|
||||
json.put("app_key", APP_KEY);
|
||||
json.put("app_secret", APP_SECRET);
|
||||
rs.writeLog("获取token,入参", json.toString());
|
||||
String response = HttpRequest.post(TOKEN_URL)
|
||||
.body(json.toString())
|
||||
.contentType("application/json")
|
||||
.execute()
|
||||
.body();
|
||||
rs.writeLog("获取token,返参", response);
|
||||
JSONObject jsonObject = JSONObject.parseObject(response);
|
||||
|
||||
String accessToken = jsonObject.getString("access_token");
|
||||
if (StringUtils.isBlank(accessToken)) {
|
||||
throw new RuntimeException("获取token失败");
|
||||
}
|
||||
return accessToken;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取部门信息
|
||||
*
|
||||
* @param oId
|
||||
* @param accessToken
|
||||
* @return
|
||||
*/
|
||||
private Department getDepartment(String oId, String accessToken) {
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("oIds", new String[]{oId});
|
||||
rs.writeLog("GET_DEPARTMENT_URL,入参", json.toString());
|
||||
String response = HttpRequest.post(GET_DEPARTMENT_URL)
|
||||
.header("Authorization", "Bearer " + accessToken)
|
||||
.body(json.toString())
|
||||
.contentType("application/json")
|
||||
.execute()
|
||||
.body();
|
||||
rs.writeLog("GET_DEPARTMENT_URL,返参", response);
|
||||
JSONObject jsonObject = JSONObject.parseObject(response);
|
||||
|
||||
String code = jsonObject.getString("code");
|
||||
if (!"200".equals(code)) {
|
||||
throw new RuntimeException("GET_DEPARTMENT_URL接口调用失败");
|
||||
}
|
||||
JSONArray data = jsonObject.getJSONArray("data");
|
||||
if (data.size() == 0) {
|
||||
return null;
|
||||
}
|
||||
Department department = new Department();
|
||||
JSONObject dataObject = data.getJSONObject(0);
|
||||
department.setOId(dataObject.getString("oId"));
|
||||
department.setName(dataObject.getString("name"));
|
||||
department.setShortName(dataObject.getString("shortName"));
|
||||
return department;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取职位信息
|
||||
*
|
||||
* @param oId
|
||||
* @param accessToken
|
||||
* @return
|
||||
*/
|
||||
private Position getPosition(String oId, String accessToken) {
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("oIds", new String[]{oId});
|
||||
rs.writeLog("GET_POSITION_URL,入参", json.toString());
|
||||
String response = HttpRequest.post(GET_POSITION_URL)
|
||||
.header("Authorization", "Bearer " + accessToken)
|
||||
.body(json.toString())
|
||||
.contentType("application/json")
|
||||
.execute()
|
||||
.body();
|
||||
rs.writeLog("GET_POSITION_URL,返参", response);
|
||||
JSONObject jsonObject = JSONObject.parseObject(response);
|
||||
|
||||
String code = jsonObject.getString("code");
|
||||
if (!"200".equals(code)) {
|
||||
throw new RuntimeException("GET_POSITION_URL接口调用失败");
|
||||
}
|
||||
JSONArray data = jsonObject.getJSONArray("data");
|
||||
if (data.size() == 0) {
|
||||
return null;
|
||||
}
|
||||
JSONObject dataObject = data.getJSONObject(0);
|
||||
|
||||
Position position = new Position();
|
||||
position.setOId(dataObject.getString("oId"));
|
||||
position.setName(dataObject.getString("name"));
|
||||
position.setCode(dataObject.getString("code"));
|
||||
return position;
|
||||
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue