同步测试,修改org表
This commit is contained in:
@@ -132,7 +132,17 @@ huawei.OBS.fileMaxSize=10 #\u6587\u4EF6\u4E0A\u4F20\u6700\u5927M\u6570
|
||||
|
||||
logging.level.com.adc: debug
|
||||
|
||||
# ==== IAM????
|
||||
iam.url=https://iamuat.faw-vw.com/
|
||||
iam.appkey=xxxx
|
||||
iam.appSecret=xxx
|
||||
# CMP???????????
|
||||
cmp.url=https://cmp-uat.faw-vw.in/employee/v1/
|
||||
cmp.appkey=TI062S001Uat
|
||||
cmp.appSecret=ee493505524d4f628e52058f4df3a4fb
|
||||
|
||||
# CMP???????????
|
||||
#cmp.url=https://cmp.faw-vw.in/employee/v1/
|
||||
#cmp.appkey=TI062S001Uat
|
||||
#cmp.appSecret=ee493505524d4f628e52058f4df3a4fb
|
||||
|
||||
# SSO????
|
||||
sso.url=https://iamuat.faw-vw.com/
|
||||
sso.clientId=43da19911e74a14dd5d9
|
||||
sso.clientSecret=67da1e83183e854535cae9027cfbdb12cbc3
|
||||
@@ -75,6 +75,4 @@ spring.activiti.database-schema-update=true
|
||||
# ????????:true-???????false-??
|
||||
spring.activiti.check-process-definitions=false
|
||||
|
||||
iam.url=https://iamuat.faw-vw.com/
|
||||
iam.appkey=1
|
||||
iam.appSecret=1
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import cn.hutool.http.HttpRequest;
|
||||
import com.adc.da.sync.service.dao.mysql.SyncIAMLogDao;
|
||||
import com.adc.da.sync.service.entity.SyncIAMLogEO;
|
||||
import com.adc.da.sync.service.enums.SyncTypeEnum;
|
||||
import com.adc.da.sync.service.utils.SignUtils;
|
||||
import com.adc.da.sys.constant.SysConstants;
|
||||
import com.adc.da.sys.constant.UserBelongEnum;
|
||||
import com.adc.da.sys.entity.OrgEO;
|
||||
@@ -12,17 +13,19 @@ import com.adc.da.sys.entity.UserEO;
|
||||
import com.adc.da.sys.service.OrgEOService;
|
||||
import com.adc.da.sys.service.iservice.IUserEoService;
|
||||
import com.adc.da.sys.util.EncryptUtil;
|
||||
import com.adc.da.sys.vo.iam.CmpOrgResult;
|
||||
import com.adc.da.sys.vo.iam.CmpUserResult;
|
||||
import com.adc.da.sys.vo.iam.OrgVoIAM;
|
||||
import com.adc.da.sys.vo.iam.OrgsShortVoIAM;
|
||||
import com.adc.da.sys.vo.iam.UserVoIAM;
|
||||
import com.adc.da.util.utils.GsonUtil;
|
||||
import com.adc.da.util.utils.StringUtils;
|
||||
import com.auth0.jwt.JWT;
|
||||
import com.auth0.jwt.algorithms.Algorithm;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
@@ -34,34 +37,26 @@ public class SyncIAMTimer {
|
||||
/**
|
||||
* IAM的前缀地址
|
||||
*/
|
||||
@Value("${iam.url}")
|
||||
private String iamUrl;
|
||||
@Value("${cmp.url}")
|
||||
private String cmpUrl="https://cmp-uat.faw-vw.in/employee/v1/";
|
||||
|
||||
@Value("${iam.appkey}")
|
||||
private String appkey;
|
||||
@Value("${cmp.appkey}")
|
||||
private String appkey = "TI062S001Uat";
|
||||
|
||||
@Value("${iam.appSecret}")
|
||||
private String appSecret;
|
||||
@Value("${cmp.appSecret}")
|
||||
private String appSecret = "ee493505524d4f628e52058f4df3a4fb";
|
||||
|
||||
/**
|
||||
* 组织机构全量同步接口地址
|
||||
*/
|
||||
public static final String ORG_FULL_URL = "/esc-idm/api/v1/org/listAll";
|
||||
private String xCustom = "Insight Library"; // 写死的
|
||||
|
||||
/**
|
||||
* 组织机构增量同步接口地址
|
||||
*/
|
||||
public static final String ORG_INCREMENT_URL = "/esc-idm/api/v1/org/list";
|
||||
|
||||
/**
|
||||
* 用户全量同步接口地址
|
||||
*/
|
||||
public static final String USER_FULL_URL = "/esc-idm/api/v1/account/listAll";
|
||||
public static final String ORG_INCREMENT_URL = "/pageOrgs";
|
||||
|
||||
/**
|
||||
* 用户增量同步接口地址
|
||||
*/
|
||||
public static final String USER_INCREMENT_URL = "/esc-idm/api/v1/account/list";
|
||||
public static final String USER_INCREMENT_URL = "/pageEmployees";
|
||||
|
||||
@Resource
|
||||
SyncIAMLogDao syncIAMLogDao;
|
||||
@@ -74,132 +69,81 @@ public class SyncIAMTimer {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SyncIAMTimer syncIAMTimer = new SyncIAMTimer();
|
||||
syncIAMTimer.syncOrgFullData();
|
||||
syncIAMTimer.syncOrgIncrData(1, 10);
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步组织机构-全量数据并入库
|
||||
* @Param syncModel 同步模式
|
||||
* 同步组织机构-增量数据并入库
|
||||
*
|
||||
* @Param pageIndex 页码,默认为1,小于1按1处理
|
||||
* @Param pageSize 每页条数,默认10,小于1按1处 于1000按1000处理
|
||||
*/
|
||||
public void syncOrgFullData(){
|
||||
String syncUrl = this.iamUrl + ORG_FULL_URL;
|
||||
String jwtToken = this.getJwtToken(this.appkey, this.appSecret);
|
||||
public void syncOrgIncrData(int pageIndex, int pageSize){
|
||||
String syncUrl = this.cmpUrl + ORG_INCREMENT_URL + "?pageIndex=" + pageIndex + "&pageSize=" + pageSize;
|
||||
|
||||
Date syncStartTime = new Date();
|
||||
String gmtDate = SignUtils.getGMTDate();
|
||||
String sign = SignUtils.generate(HttpMethod.GET, syncUrl, this.xCustom, this.appkey, gmtDate, this.appSecret);
|
||||
|
||||
String orgDataStr = HttpRequest.post(syncUrl)
|
||||
String orgDataStr = HttpRequest.get(syncUrl)
|
||||
.header("Content-Type", "application/json")
|
||||
.header("Authorization", jwtToken)//头信息,多个头信息多次调用此方法即可
|
||||
.header("Date", gmtDate)
|
||||
.header("X-HMAC-ACCESS-KEY", this.appkey)
|
||||
.header("X-HMAC-ALGORITHM", "hmac-sha256")
|
||||
.header("X-HMAC-SIGNED-HEADERS", "x-custom")
|
||||
.header("x-custom", this.xCustom)
|
||||
.header("X-HMAC-SIGNATURE", sign)
|
||||
.timeout(10 * 60 * 1000) //超时,毫秒
|
||||
.execute().body();
|
||||
|
||||
List<OrgVoIAM> orgVoIAMList = GsonUtil.json2Collection(orgDataStr, OrgVoIAM.class);
|
||||
|
||||
// 同步的VO 转换成 数据库EO
|
||||
List<OrgEO> orgEOList = new ArrayList<>();
|
||||
for (OrgVoIAM orgVoIAM : orgVoIAMList){
|
||||
OrgEO orgEO = this.transOrgIAMVoToOrgEO(orgVoIAM);
|
||||
orgEOList.add(orgEO);
|
||||
CmpOrgResult cmpOrgResult = GsonUtil.json2T(orgDataStr, CmpOrgResult.class);
|
||||
if (cmpOrgResult != null){
|
||||
List<OrgVoIAM> orgVoIAMList = cmpOrgResult.getData();
|
||||
|
||||
// 同步的VO 转换成 数据库EO
|
||||
List<OrgEO> orgEOList = new ArrayList<>();
|
||||
for (OrgVoIAM orgVoIAM : orgVoIAMList){
|
||||
OrgEO orgEO = this.transOrgIAMVoToOrgEO(orgVoIAM);
|
||||
orgEOList.add(orgEO);
|
||||
}
|
||||
|
||||
this.orgEOService.saveOrUpdateBatch(orgEOList);
|
||||
|
||||
this.addSyncLog(null, new Date(), SyncTypeEnum.ORG_INCREMENT_DATA.getValue());
|
||||
}
|
||||
|
||||
// 以 部门编码 为主键,所以直接调整即可
|
||||
this.orgEOService.saveOrUpdateBatch(orgEOList);
|
||||
|
||||
this.addSyncLog(null, syncStartTime, SyncTypeEnum.ORG_FULL_DATA.getValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步组织机构-增量数据并入库
|
||||
* @Param syncModel 同步模式
|
||||
*/
|
||||
public void syncOrgIncrData(){
|
||||
String syncUrl = this.iamUrl + ORG_INCREMENT_URL;
|
||||
String jwtToken = this.getJwtToken(appkey, appSecret);
|
||||
|
||||
Date syncStartTime = new Date();
|
||||
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.set(Calendar.HOUR_OF_DAY, (c.get(Calendar.HOUR_OF_DAY) - 24));//HOUR_OF_DAY 指一天中的小时
|
||||
Long incrementStartTime = c.getTimeInMillis(); // 每天同步前一天的数据,需要当前时间往前诺一天
|
||||
|
||||
String orgDataStr = HttpRequest.post(syncUrl)
|
||||
.header("Content-Type", "application/json")
|
||||
.header("Authorization", jwtToken)//头信息,多个头信息多次调用此方法即可
|
||||
.form("startTime", incrementStartTime)
|
||||
.timeout(10 * 60 * 1000) //超时,毫秒
|
||||
.execute().body();
|
||||
|
||||
List<OrgVoIAM> orgVoIAMList = GsonUtil.json2Collection(orgDataStr, OrgVoIAM.class);
|
||||
|
||||
// 同步的VO 转换成 数据库EO
|
||||
List<OrgEO> orgEOList = new ArrayList<>();
|
||||
for (OrgVoIAM orgVoIAM : orgVoIAMList){
|
||||
OrgEO orgEO = this.transOrgIAMVoToOrgEO(orgVoIAM);
|
||||
orgEOList.add(orgEO);
|
||||
public void syncUserIncrData(int pageIndex, int pageSize, String enterTime){
|
||||
String syncUrl = this.cmpUrl + USER_INCREMENT_URL + "?pageIndex=" + pageIndex + "&pageSize=" + pageSize;
|
||||
if (StringUtils.isNotEmpty(enterTime)){
|
||||
syncUrl += "&enterTime=" + enterTime;
|
||||
}
|
||||
|
||||
this.orgEOService.saveOrUpdateBatch(orgEOList);
|
||||
|
||||
this.addSyncLog(null, syncStartTime, SyncTypeEnum.ORG_INCREMENT_DATA.getValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步用户-全量数据并入库
|
||||
* @Param syncModel 同步模式
|
||||
*/
|
||||
public void syncUserFullData(){
|
||||
String syncUrl = this.iamUrl + USER_FULL_URL;
|
||||
String jwtToken = this.getJwtToken(appkey, appSecret);
|
||||
|
||||
Date syncStartTime = new Date();
|
||||
|
||||
String userDataStr = HttpRequest.post(syncUrl)
|
||||
.header("Content-Type", "application/json")
|
||||
.header("Authorization", jwtToken)//头信息,多个头信息多次调用此方法即可
|
||||
.timeout(10 * 60 * 1000) //超时,毫秒
|
||||
.execute().body();
|
||||
|
||||
List<UserVoIAM> userVoIAMList = GsonUtil.json2Collection(userDataStr, UserVoIAM.class);
|
||||
CmpUserResult cmpUserResult = GsonUtil.json2T(userDataStr, CmpUserResult.class);
|
||||
if (cmpUserResult != null){
|
||||
List<UserVoIAM> userVoIAMList =cmpUserResult.getData();
|
||||
|
||||
// 同步的VO 转换成 数据库EO,并存库
|
||||
for (UserVoIAM userVoIAM : userVoIAMList){
|
||||
UserEO userEO = this.transUserIAMVoToUserEO(userVoIAM);
|
||||
this.iUserEoService.syncSaveOrUpdate(userEO);
|
||||
// 同步的VO 转换成 数据库EO,并存库
|
||||
for (UserVoIAM userVoIAM : userVoIAMList){
|
||||
UserEO userEO = this.transUserIAMVoToUserEO(userVoIAM);
|
||||
this.iUserEoService.syncSaveOrUpdate(userEO);
|
||||
}
|
||||
|
||||
this.addSyncLog(null, new Date(), SyncTypeEnum.USER_INCREMENT_DATA.getValue());
|
||||
}
|
||||
|
||||
this.addSyncLog(null, syncStartTime, SyncTypeEnum.ORG_FULL_DATA.getValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步组织机构-增量数据并入库
|
||||
* @Param syncModel 同步模式
|
||||
*/
|
||||
public void syncUserIncrData(){
|
||||
String syncUrl = this.iamUrl + USER_INCREMENT_URL;
|
||||
String jwtToken = this.getJwtToken(appkey, appSecret);
|
||||
|
||||
Date syncStartTime = new Date();
|
||||
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.set(Calendar.HOUR_OF_DAY, (c.get(Calendar.HOUR_OF_DAY) - 24));//HOUR_OF_DAY 指一天中的小时
|
||||
Long incrementStartTime = c.getTimeInMillis(); // 每天同步前一天的数据,需要当前时间往前诺一天
|
||||
|
||||
String userDataStr = HttpRequest.post(syncUrl)
|
||||
.header("Content-Type", "application/json")
|
||||
.header("Authorization", jwtToken)//头信息,多个头信息多次调用此方法即可
|
||||
.form("startTime", incrementStartTime)
|
||||
.timeout(10 * 60 * 1000) //超时,毫秒
|
||||
.execute().body();
|
||||
|
||||
List<UserVoIAM> userVoIAMList = GsonUtil.json2Collection(userDataStr, UserVoIAM.class);
|
||||
|
||||
// 同步的VO 转换成 数据库EO,并存库
|
||||
for (UserVoIAM userVoIAM : userVoIAMList){
|
||||
UserEO userEO = this.transUserIAMVoToUserEO(userVoIAM);
|
||||
this.iUserEoService.syncSaveOrUpdate(userEO);
|
||||
}
|
||||
|
||||
this.addSyncLog(null, syncStartTime, SyncTypeEnum.USER_INCREMENT_DATA.getValue());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -237,16 +181,16 @@ public class SyncIAMTimer {
|
||||
*/
|
||||
public OrgEO transOrgIAMVoToOrgEO(OrgVoIAM orgVoIAM) {
|
||||
OrgEO orgEO = new OrgEO();
|
||||
orgEO.setId(orgVoIAM.getOrgCode());
|
||||
orgEO.setOrgCode(orgVoIAM.getOrgCode());
|
||||
orgEO.setOrgName(orgVoIAM.getOrgName());
|
||||
orgEO.setOrgLevel(orgVoIAM.getOrgLevel());
|
||||
orgEO.setSupOrgCode(orgVoIAM.getSupOrgCode());
|
||||
orgEO.setOrgShortName(orgVoIAM.getOrgShortName());
|
||||
orgEO.setAttribution(orgVoIAM.getAttribution());
|
||||
orgEO.setBmdm14(orgVoIAM.getBmdm14());
|
||||
orgEO.setStatus(orgVoIAM.getStatus());
|
||||
orgEO.setUpdateTime(orgVoIAM.getUpdateTime());
|
||||
// orgEO.setId(orgVoIAM.getOrgCode());
|
||||
// orgEO.setOrgCode(orgVoIAM.getOrgCode());
|
||||
// orgEO.setOrgName(orgVoIAM.getOrgName());
|
||||
// orgEO.setOrgLevel(orgVoIAM.getOrgLevel());
|
||||
// orgEO.setSupOrgCode(orgVoIAM.getSupOrgCode());
|
||||
// orgEO.setOrgShortName(orgVoIAM.getOrgShortName());
|
||||
// orgEO.setAttribution(orgVoIAM.getAttribution());
|
||||
// orgEO.setBmdm14(orgVoIAM.getBmdm14());
|
||||
// orgEO.setStatus(orgVoIAM.getStatus());
|
||||
// orgEO.setUpdateTime(orgVoIAM.getUpdateTime());
|
||||
|
||||
return orgEO;
|
||||
}
|
||||
@@ -257,45 +201,37 @@ public class SyncIAMTimer {
|
||||
* @return
|
||||
*/
|
||||
public UserEO transUserIAMVoToUserEO(UserVoIAM userVoIAM) {
|
||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
|
||||
UserEO userEO = new UserEO();
|
||||
// 转换基础数据
|
||||
userEO.setUsid(userVoIAM.getUserUiD());
|
||||
userEO.setUsid(userVoIAM.getEmployeeID());
|
||||
userEO.setIsSelf(UserBelongEnum.IAM.getValue());
|
||||
userEO.setPassword(EncryptUtil.encrypt(SysConstants.DEFAULT_PASSWORD));
|
||||
userEO.setDelFlag(0);
|
||||
userEO.setAccount(userVoIAM.getWorkNo());
|
||||
userEO.setAccount(userVoIAM.getAccount());
|
||||
userEO.setCellPhoneNumber(userVoIAM.getMobile() == null ? EncryptUtil.encrypt("") : EncryptUtil.encrypt(userVoIAM.getMobile()));
|
||||
userEO.setCreateTime(userVoIAM.getUpdateTime());
|
||||
userEO.setUpdateTime(userVoIAM.getUpdateTime());
|
||||
userEO.setCreateTime(userVoIAM.getEnterTime());
|
||||
userEO.setUpdateTime(userVoIAM.getEnterTime());
|
||||
userEO.setEmail(userVoIAM.getEmail() == null ? EncryptUtil.encrypt("") : EncryptUtil.encrypt(userVoIAM.getEmail()));
|
||||
userEO.setUsname(userVoIAM.getUserName());
|
||||
userEO.setDutyCode(userVoIAM.getDutyCode());
|
||||
userEO.setDutyName(userVoIAM.getDutyName());
|
||||
userEO.setUsname(userVoIAM.getCnName());
|
||||
userEO.setStatus(userVoIAM.getStatus());
|
||||
userEO.setLevelId(userVoIAM.getLevelId());
|
||||
userEO.setZj(userVoIAM.getZj());
|
||||
userEO.setLevelId(userVoIAM.getLevelID());
|
||||
userEO.setLevelId(userVoIAM.getLevelName());
|
||||
userEO.setZj(userVoIAM.getZJ());
|
||||
|
||||
// 转换org的关联数据
|
||||
List<OrgEO> orgList = new ArrayList<>();
|
||||
if (userVoIAM.getOrgs() != null){
|
||||
for (OrgsShortVoIAM orgsShortVoIAM :userVoIAM.getOrgs()) {
|
||||
OrgEO orgEO = new OrgEO();
|
||||
orgEO.setId(orgsShortVoIAM.getOrgCode());
|
||||
orgEO.setOrgCode(orgsShortVoIAM.getOrgCode());
|
||||
orgEO.setOrgName(orgsShortVoIAM.getOrgName());
|
||||
orgEO.setOrgShortName(orgsShortVoIAM.getOrgShortName());
|
||||
OrgEO orgEO = new OrgEO();
|
||||
orgEO.setId(userVoIAM.getDepartID());
|
||||
orgEO.setDepartmentCode(userVoIAM.getDepartmentCode());
|
||||
orgEO.setLongName(userVoIAM.getDepartmentName());
|
||||
|
||||
orgList.add(orgEO);
|
||||
}
|
||||
}
|
||||
List<OrgEO> orgList = new ArrayList<>();
|
||||
orgList.add(orgEO);
|
||||
userEO.setOrgEOList(orgList);
|
||||
|
||||
// 固定角色数据
|
||||
List<String> roleIdList = new ArrayList<>();
|
||||
// TODO 根据level固定为一般管理人员 或 总监
|
||||
if ("0.5".equals(userEO.getLevelId())){
|
||||
if ("1".equals(userEO.getLevelId()) || "2".equals(userEO.getLevelId()) || "3".equals(userEO.getLevelId()) || "4".equals(userEO.getLevelId())){
|
||||
roleIdList.add("1");
|
||||
} else {
|
||||
roleIdList.add("2");
|
||||
|
||||
@@ -4,9 +4,7 @@ package com.adc.da.sync.service.enums;
|
||||
*/
|
||||
public enum SyncTypeEnum {
|
||||
|
||||
USER_FULL_DATA("USER_FULL_DATA","用户数据-全量同步"),
|
||||
USER_INCREMENT_DATA("USER_INCREMENT_DATA","用户数据-增量同步"),
|
||||
ORG_FULL_DATA("ORG_FULL_DATA","组织机构数据-全量同步"),
|
||||
ORG_INCREMENT_DATA("ORG_INCREMENT_DATA","组织机构数据-增量同步");
|
||||
|
||||
private String label;
|
||||
|
||||
@@ -0,0 +1,114 @@
|
||||
package com.adc.da.sync.service.utils;
|
||||
|
||||
import org.springframework.http.HttpMethod;
|
||||
|
||||
import javax.crypto.Mac;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
import javax.xml.bind.DatatypeConverter;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
import java.security.InvalidKeyException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @author tao.sun.MS
|
||||
* @date 2022/1/29
|
||||
*/
|
||||
public class SignUtils {
|
||||
|
||||
public static String generate(HttpMethod method, String url, String custom, String accessKey, String gmtDate, String secretKey) {
|
||||
String[] urlContents = url.split("\\?");
|
||||
String uri = dealUri(urlContents[0]);
|
||||
String queryString = "";
|
||||
if (urlContents.length > 1) {
|
||||
queryString = dealQueryString(urlContents[1]);
|
||||
}
|
||||
String signString = method + "\n" + uri + "\n" + queryString + "\n" + accessKey + "\n" + gmtDate + "\n" + dealHeaders(custom);
|
||||
return sha256_HMAC(secretKey, signString);
|
||||
}
|
||||
|
||||
public static String generateUrlSignature(String url, String secretKey) {
|
||||
String[] urlContents = url.split("\\?");
|
||||
String uri = dealUri(urlContents[0]);
|
||||
return sha256_HMAC(secretKey, uri).replace("=", "*");
|
||||
}
|
||||
|
||||
/**
|
||||
* sha256_HMAC加密
|
||||
* @param secret 秘钥
|
||||
* @param message 消息
|
||||
* @return 加密后字符串
|
||||
*/
|
||||
public static String sha256_HMAC(String secret, String message) {
|
||||
String sign = "";
|
||||
try {
|
||||
Mac harsher = Mac.getInstance("HmacSHA256");
|
||||
harsher.init(new SecretKeySpec(secret.getBytes(), "HmacSHA256"));
|
||||
|
||||
byte[] hash = harsher.doFinal(message.getBytes());
|
||||
|
||||
// to lowercase hexit
|
||||
sign = DatatypeConverter.printBase64Binary(hash);
|
||||
}
|
||||
catch (NoSuchAlgorithmException | InvalidKeyException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return sign;
|
||||
}
|
||||
|
||||
public static String dealUri(String uri) {
|
||||
if (uri == null || uri.isEmpty()) {
|
||||
return "/";
|
||||
} else {
|
||||
if (uri.startsWith("/")) {
|
||||
return uri;
|
||||
} else {
|
||||
return "/" + uri;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static String dealQueryString(String queryString) {
|
||||
if (queryString == null || queryString.isEmpty()) {
|
||||
return "";
|
||||
} else {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
String[] queryParams = queryString.split("&");
|
||||
int i = 0;
|
||||
while (i < queryParams.length) {
|
||||
String[] queryContent = queryParams[i].split("=");
|
||||
if (queryContent.length > 1) {
|
||||
params.put(queryContent[0], queryContent[1]);
|
||||
} else {
|
||||
params.put(queryContent[0], "");
|
||||
}
|
||||
i++;
|
||||
}
|
||||
List<Map.Entry<String, String>> parameters = new LinkedList<>(params.entrySet());
|
||||
parameters.sort(Map.Entry.comparingByKey());
|
||||
StringBuilder sortedQueryString = new StringBuilder();
|
||||
for (Map.Entry<String, String> parameter : parameters) {
|
||||
try {
|
||||
sortedQueryString.append(parameter.getKey()).append("=").append(URLEncoder.encode(parameter.getValue(), "UTF-8")).append("&");
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
// 去掉多余的&
|
||||
sortedQueryString.deleteCharAt(sortedQueryString.length() - 1);
|
||||
return sortedQueryString.toString();
|
||||
}
|
||||
}
|
||||
|
||||
public static String dealHeaders(String custom) {
|
||||
return "x-custom:" + custom + "\n";
|
||||
}
|
||||
|
||||
public static String getGMTDate() {
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("EEE, d MMM yyyy hh:mm:ss z", Locale.ENGLISH);
|
||||
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
|
||||
return sdf.format(Calendar.getInstance().getTime());
|
||||
}
|
||||
}
|
||||
@@ -99,7 +99,7 @@ public class OrgEOController extends BaseController<OrgEO> {
|
||||
LocalDateTime dateTime = LocalDateTime.now();
|
||||
String currentDateTimeString = dateTime.format(formatter);
|
||||
orgEO.setUpdateTime(currentDateTimeString);
|
||||
orgEO.setStatus(1);
|
||||
// orgEO.setStatus(1);
|
||||
return orgEOService.saveOrUpdateSingleton(orgEO);
|
||||
}
|
||||
|
||||
|
||||
@@ -24,56 +24,65 @@ public class OrgEO extends BaseEntity implements Serializable {
|
||||
/**
|
||||
* 部门编码
|
||||
*/
|
||||
@TableField("org_code")
|
||||
private String orgCode;
|
||||
@TableField("DEPARTMENT_CODE")
|
||||
private String DepartmentCode;
|
||||
|
||||
|
||||
/**
|
||||
* 部门短名称
|
||||
*/
|
||||
@TableField("SHORT_NAME")
|
||||
private String ShortName;
|
||||
|
||||
/**
|
||||
* 部门名称
|
||||
*/
|
||||
@TableField("ORG_NAME")
|
||||
private String orgName;
|
||||
@TableField("LONG_NAME")
|
||||
private String LongName;
|
||||
|
||||
/**
|
||||
* 部门级别
|
||||
* 父部门id
|
||||
*/
|
||||
@TableField("ORG_LEVEL")
|
||||
private Integer orgLevel;
|
||||
@TableField("PARENT_ID")
|
||||
private String ParentID;
|
||||
|
||||
/**
|
||||
* 父部门编码
|
||||
* 部门路径
|
||||
*/
|
||||
@TableField("SUP_ORG_CODE")
|
||||
private String supOrgCode;
|
||||
|
||||
/**
|
||||
* 部门简称
|
||||
*/
|
||||
@TableField("ORG_SHORT_NAME")
|
||||
private String orgShortName;
|
||||
|
||||
/**
|
||||
* 归属地
|
||||
*/
|
||||
@TableField("ATTRIBUTION")
|
||||
private String attribution;
|
||||
@TableField("DEPARTMENT_PATH")
|
||||
private String DepartmentPath;
|
||||
|
||||
/**
|
||||
* 部门14位码
|
||||
*/
|
||||
@TableField("BMDM_14")
|
||||
private String bmdm14;
|
||||
private String BMDM14;
|
||||
|
||||
/**
|
||||
* 状态,1正常,0停用,-1删除
|
||||
* 部门级别
|
||||
*/
|
||||
@TableField("STATUS")
|
||||
private Integer status;
|
||||
@TableField("LEVEL")
|
||||
private String LeveL;
|
||||
|
||||
/**
|
||||
* 更新时间,格式:yyyy-MM-dd HH:mm:ss
|
||||
* 部门层级深度
|
||||
*/
|
||||
@TableField("DEPTH")
|
||||
private Integer Depth;
|
||||
|
||||
/**
|
||||
* 子组织个数
|
||||
*/
|
||||
@TableField("VCOUNT")
|
||||
private String Vcount;
|
||||
|
||||
/**
|
||||
* 归属地
|
||||
*/
|
||||
@TableField("ATTRIBUTION")
|
||||
private String Attribution;
|
||||
|
||||
@TableField("UPDATE_TIME")
|
||||
private String updateTime;
|
||||
private String UpdateTime;
|
||||
|
||||
}
|
||||
|
||||
@@ -95,17 +95,17 @@ public class UserEO extends BaseEntity implements Serializable {
|
||||
@TableField("USNAME")
|
||||
private String usname;
|
||||
|
||||
/**
|
||||
* 职位编码
|
||||
*/
|
||||
@TableField("DUTY_CODE")
|
||||
private String dutyCode;
|
||||
|
||||
/**
|
||||
* 职位名称
|
||||
*/
|
||||
@TableField("DUTY_NAME")
|
||||
private String dutyName;
|
||||
// /**
|
||||
// * 职位编码
|
||||
// */
|
||||
// @TableField("DUTY_CODE")
|
||||
// private String dutyCode;
|
||||
//
|
||||
// /**
|
||||
// * 职位名称
|
||||
// */
|
||||
// @TableField("DUTY_NAME")
|
||||
// private String dutyName;
|
||||
|
||||
/**
|
||||
* 员工状态:0停用,1启用,2密码错误锁定,3管理员强制锁定
|
||||
@@ -119,6 +119,12 @@ public class UserEO extends BaseEntity implements Serializable {
|
||||
@TableField("LEVEL_ID")
|
||||
private String levelId;
|
||||
|
||||
/**
|
||||
* 级别ID
|
||||
*/
|
||||
@TableField("LEVEL_NAME")
|
||||
private String levelName;
|
||||
|
||||
/**
|
||||
* 职级
|
||||
*/
|
||||
|
||||
@@ -33,16 +33,18 @@ public class OrgEOService extends ServiceImpl<OrgEODao, OrgEO> implements IOrgEo
|
||||
}
|
||||
|
||||
public void delete(String ids) {
|
||||
String[] idArray = ids.split(",");
|
||||
OrgEO orgEO = new OrgEO();
|
||||
orgEO.setStatus(-1);
|
||||
QueryWrapper<OrgEO> orgEOQueryWrapper = new QueryWrapper<>();
|
||||
orgEOQueryWrapper.in("org_code",idArray);
|
||||
baseMapper.update(orgEO,orgEOQueryWrapper);
|
||||
// TODO 没有状态字段了,直接删了把
|
||||
// String[] idArray = ids.split(",");
|
||||
// OrgEO orgEO = new OrgEO();
|
||||
// orgEO.setStatus(-1);
|
||||
// QueryWrapper<OrgEO> orgEOQueryWrapper = new QueryWrapper<>();
|
||||
// orgEOQueryWrapper.in("org_code",idArray);
|
||||
// baseMapper.update(orgEO,orgEOQueryWrapper);
|
||||
}
|
||||
|
||||
public List<OrgEO> selectList(OrgEO orgEO) {
|
||||
orgEO.setStatus(1);
|
||||
// TODO 无状态字段了
|
||||
// orgEO.setStatus(1);
|
||||
List<OrgEO> orgEOList = baseMapper.selectListByVO(orgEO);
|
||||
return orgEOList;
|
||||
}
|
||||
@@ -60,7 +62,7 @@ public class OrgEOService extends ServiceImpl<OrgEODao, OrgEO> implements IOrgEo
|
||||
* @return
|
||||
*/
|
||||
public ResponseMessage saveOrUpdateSingleton(OrgEO orgEO) {
|
||||
if (StringUtils.isEmpty(orgEO.getOrgCode())){
|
||||
if (StringUtils.isEmpty(orgEO.getDepartmentCode())){
|
||||
return Result.error("部门编码不能为空");
|
||||
}
|
||||
long count = baseMapper.selectCountByOrgCode(orgEO);
|
||||
@@ -68,7 +70,7 @@ public class OrgEOService extends ServiceImpl<OrgEODao, OrgEO> implements IOrgEo
|
||||
return Result.error("部门编码重复");
|
||||
}
|
||||
if(StringUtils.isBlank(orgEO.getId())){
|
||||
orgEO.setId(orgEO.getOrgCode());
|
||||
orgEO.setId(orgEO.getDepartmentCode());
|
||||
baseMapper.insert(orgEO);
|
||||
}else{
|
||||
baseMapper.updateById(orgEO);
|
||||
|
||||
@@ -159,7 +159,7 @@ public class UserEOServiceImpl implements IUserEoService {
|
||||
eo.getOrgEOList().forEach(c -> {
|
||||
UserOrgEO userOrgEO = new UserOrgEO();
|
||||
userOrgEO.setUserId(eo.getUsid());
|
||||
userOrgEO.setOrgId(c.getOrgCode());
|
||||
userOrgEO.setOrgId(c.getId());
|
||||
userOrgEODao.insert(userOrgEO);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.adc.da.sys.vo.iam;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* CMP对接返回的统一格式
|
||||
*/
|
||||
@Data
|
||||
public class CmpOrgResult {
|
||||
|
||||
private int code;
|
||||
|
||||
private int resultCode;
|
||||
|
||||
private String message;
|
||||
|
||||
private String traceId;
|
||||
|
||||
private List<OrgVoIAM> data;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.adc.da.sys.vo.iam;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* CMP对接返回的统一格式(用户同步)
|
||||
*/
|
||||
@Data
|
||||
public class CmpUserResult {
|
||||
|
||||
private int code;
|
||||
|
||||
private int resultCode;
|
||||
|
||||
private String message;
|
||||
|
||||
private String traceId;
|
||||
|
||||
private List<UserVoIAM> data;
|
||||
|
||||
}
|
||||
@@ -8,49 +8,59 @@ import lombok.Data;
|
||||
@Data
|
||||
public class OrgVoIAM {
|
||||
|
||||
/**
|
||||
* 部门ID
|
||||
*/
|
||||
private String DepartmentID;
|
||||
|
||||
/**
|
||||
* 部门编码
|
||||
*/
|
||||
private String orgCode;
|
||||
|
||||
/**
|
||||
* 部门名称
|
||||
*/
|
||||
private String orgName;
|
||||
|
||||
/**
|
||||
* 部门级别
|
||||
*/
|
||||
private Integer orgLevel;
|
||||
|
||||
/**
|
||||
* 父部门编码
|
||||
*/
|
||||
private String supOrgCode;
|
||||
private String DepartmentCode;
|
||||
|
||||
/**
|
||||
* 部门简称
|
||||
*/
|
||||
private String orgShortName;
|
||||
private String ShortName;
|
||||
|
||||
/**
|
||||
* 部门全称
|
||||
*/
|
||||
private String LongName;
|
||||
|
||||
/**
|
||||
* 上级部门id
|
||||
*/
|
||||
private String ParentID;
|
||||
|
||||
/**
|
||||
* 部门路径
|
||||
*/
|
||||
private String DepartmentPath;
|
||||
|
||||
/**
|
||||
* 部门14位编码
|
||||
*/
|
||||
private String BMDM14;
|
||||
|
||||
/**
|
||||
* 部门级别
|
||||
*/
|
||||
private String LeveL;
|
||||
|
||||
/**
|
||||
* 部门层级深度
|
||||
*/
|
||||
private Integer Depth;
|
||||
|
||||
/**
|
||||
* 子组织个数
|
||||
*/
|
||||
private String Vcount;
|
||||
|
||||
/**
|
||||
* 归属地
|
||||
*/
|
||||
private String attribution;
|
||||
|
||||
/**
|
||||
* 部门14位码
|
||||
*/
|
||||
private String bmdm14;
|
||||
|
||||
/**
|
||||
* 状态,1正常,0停用,-1删除
|
||||
*/
|
||||
private Integer status;
|
||||
|
||||
/**
|
||||
* 更新时间,格式:yyyy-MM-dd HH:mm:ss
|
||||
*/
|
||||
private String updateTime;
|
||||
private String Attribution;
|
||||
|
||||
}
|
||||
|
||||
@@ -11,126 +11,113 @@ import java.util.List;
|
||||
public class UserVoIAM {
|
||||
|
||||
/**
|
||||
* 用户UID
|
||||
* 员工号
|
||||
*/
|
||||
private String userUiD;
|
||||
private String EmployeeID;
|
||||
|
||||
/**
|
||||
* 姓名
|
||||
* 域账户
|
||||
*/
|
||||
private String userName;
|
||||
private String Account;
|
||||
|
||||
/**
|
||||
* 姓
|
||||
* 入公司方式
|
||||
*/
|
||||
private String lastName;
|
||||
private String ACTREA;
|
||||
|
||||
/**
|
||||
* 名
|
||||
* 中文名称
|
||||
*/
|
||||
private String firstName;
|
||||
private String CnName;
|
||||
|
||||
/**
|
||||
* 中文名
|
||||
* 生日
|
||||
*/
|
||||
private String zhName;
|
||||
private String Birthday;
|
||||
|
||||
/**
|
||||
* 英文名
|
||||
*/
|
||||
private String enName;
|
||||
private String EnName;
|
||||
|
||||
/**
|
||||
* 姓名首字母
|
||||
* 性别
|
||||
*/
|
||||
private String pinyin;
|
||||
private String Gender;
|
||||
|
||||
/**
|
||||
* 生日,格式:1980-01-01
|
||||
* 部门ID (直属组织)
|
||||
*/
|
||||
private String birthday;
|
||||
private String DepartID;
|
||||
|
||||
/**
|
||||
* 性别,1男,0女
|
||||
* 部门编号(直属组织)
|
||||
*/
|
||||
private String gender;
|
||||
private String DepartmentCode;
|
||||
|
||||
/**
|
||||
* 员工号
|
||||
* 部门名称(直属组织)
|
||||
*/
|
||||
private String workNo;
|
||||
private String DepartmentName;
|
||||
|
||||
/**
|
||||
* 邮箱
|
||||
* 职务ID
|
||||
*/
|
||||
private String email;
|
||||
private String JobID;
|
||||
|
||||
/**
|
||||
* 职位编码
|
||||
* 职务名称
|
||||
*/
|
||||
private String dutyCode;
|
||||
|
||||
/**
|
||||
* 职位名称
|
||||
*/
|
||||
private String dutyName;
|
||||
private String JobName;
|
||||
|
||||
/**
|
||||
* 员工类型ID:1为劳动合同工,3为外聘员工,4为劳务人员,5为返聘人员,6为外籍员工
|
||||
*/
|
||||
private String employeeTypeId;
|
||||
private String EmployeeTypeID;
|
||||
|
||||
/**
|
||||
* 员工状态:0停用,1启用,2密码错误锁定,3管理员强制锁定
|
||||
* 员工状态
|
||||
*/
|
||||
private String status;
|
||||
private String Status;
|
||||
|
||||
/**
|
||||
* 级别ID
|
||||
* 级别ID:1为总经理,2为副总经理,3为公司工会主席,4为高级经理,5为二级经理,6为三级经理,9为代理二级经理
|
||||
*/
|
||||
private String levelId;
|
||||
private String LevelID;
|
||||
|
||||
/**
|
||||
* 级别名称
|
||||
*/
|
||||
private String LevelName;
|
||||
|
||||
/**
|
||||
* 邮箱
|
||||
*/
|
||||
private String Email;
|
||||
|
||||
/**
|
||||
* 手机号码
|
||||
*/
|
||||
private String mobile;
|
||||
private String Mobile;
|
||||
|
||||
/**
|
||||
* 数组:
|
||||
* 10为管理人员在岗,11为管理人员退休,12为管理人员放假,
|
||||
* 13为管理人员待岗;20为工人在岗,21为工人退养,
|
||||
* 22为工人放假,23为工人待岗
|
||||
* 员工子组代码:10为管理人员在岗,11为管理人员退休,12为管理人员放假,13为管理人员待岗;20为工人在岗,21为工人退养,22为工人放假,23为工
|
||||
* 人待岗
|
||||
*/
|
||||
private String persk;
|
||||
private String Persk;
|
||||
|
||||
/**
|
||||
* 地区
|
||||
* 入职时间
|
||||
*/
|
||||
private String ort01;
|
||||
private String EnterTime;
|
||||
|
||||
/**
|
||||
* 职务
|
||||
* 在职状态
|
||||
*/
|
||||
private String outlookJob;
|
||||
private String POSSC;
|
||||
|
||||
/**
|
||||
* 职级
|
||||
*/
|
||||
private String zj;
|
||||
|
||||
/**
|
||||
* 更新时间:2022-10-28 11:11:45
|
||||
*/
|
||||
private String updateTime;
|
||||
|
||||
/**
|
||||
* 部门信息
|
||||
*/
|
||||
List<OrgsShortVoIAM> orgs;
|
||||
|
||||
/**
|
||||
* 用户类型信息
|
||||
*/
|
||||
List<UserTypesVoIAM> useTypes;
|
||||
|
||||
private String ZJ;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user