同步测试,修改org表

This commit is contained in:
xuetao.li
2023-05-16 17:29:40 +08:00
parent a5e11115d3
commit 8b9ad09c48
14 changed files with 415 additions and 299 deletions
@@ -132,7 +132,17 @@ huawei.OBS.fileMaxSize=10 #\u6587\u4EF6\u4E0A\u4F20\u6700\u5927M\u6570
logging.level.com.adc: debug logging.level.com.adc: debug
# ==== IAM???? # CMP???????????
iam.url=https://iamuat.faw-vw.com/ cmp.url=https://cmp-uat.faw-vw.in/employee/v1/
iam.appkey=xxxx cmp.appkey=TI062S001Uat
iam.appSecret=xxx 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-?? # ????????:true-???????false-??
spring.activiti.check-process-definitions=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.dao.mysql.SyncIAMLogDao;
import com.adc.da.sync.service.entity.SyncIAMLogEO; import com.adc.da.sync.service.entity.SyncIAMLogEO;
import com.adc.da.sync.service.enums.SyncTypeEnum; 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.SysConstants;
import com.adc.da.sys.constant.UserBelongEnum; import com.adc.da.sys.constant.UserBelongEnum;
import com.adc.da.sys.entity.OrgEO; 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.OrgEOService;
import com.adc.da.sys.service.iservice.IUserEoService; import com.adc.da.sys.service.iservice.IUserEoService;
import com.adc.da.sys.util.EncryptUtil; 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.OrgVoIAM;
import com.adc.da.sys.vo.iam.OrgsShortVoIAM;
import com.adc.da.sys.vo.iam.UserVoIAM; import com.adc.da.sys.vo.iam.UserVoIAM;
import com.adc.da.util.utils.GsonUtil; import com.adc.da.util.utils.GsonUtil;
import com.adc.da.util.utils.StringUtils;
import com.auth0.jwt.JWT; import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.algorithms.Algorithm;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
@@ -34,34 +37,26 @@ public class SyncIAMTimer {
/** /**
* IAM的前缀地址 * IAM的前缀地址
*/ */
@Value("${iam.url}") @Value("${cmp.url}")
private String iamUrl; private String cmpUrl="https://cmp-uat.faw-vw.in/employee/v1/";
@Value("${iam.appkey}") @Value("${cmp.appkey}")
private String appkey; private String appkey = "TI062S001Uat";
@Value("${iam.appSecret}") @Value("${cmp.appSecret}")
private String appSecret; private String appSecret = "ee493505524d4f628e52058f4df3a4fb";
/** private String xCustom = "Insight Library"; // 写死的
* 组织机构全量同步接口地址
*/
public static final String ORG_FULL_URL = "/esc-idm/api/v1/org/listAll";
/** /**
* 组织机构增量同步接口地址 * 组织机构增量同步接口地址
*/ */
public static final String ORG_INCREMENT_URL = "/esc-idm/api/v1/org/list"; public static final String ORG_INCREMENT_URL = "/pageOrgs";
/**
* 用户全量同步接口地址
*/
public static final String USER_FULL_URL = "/esc-idm/api/v1/account/listAll";
/** /**
* 用户增量同步接口地址 * 用户增量同步接口地址
*/ */
public static final String USER_INCREMENT_URL = "/esc-idm/api/v1/account/list"; public static final String USER_INCREMENT_URL = "/pageEmployees";
@Resource @Resource
SyncIAMLogDao syncIAMLogDao; SyncIAMLogDao syncIAMLogDao;
@@ -74,132 +69,81 @@ public class SyncIAMTimer {
public static void main(String[] args) { public static void main(String[] args) {
SyncIAMTimer syncIAMTimer = new SyncIAMTimer(); 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(){ public void syncOrgIncrData(int pageIndex, int pageSize){
String syncUrl = this.iamUrl + ORG_FULL_URL; String syncUrl = this.cmpUrl + ORG_INCREMENT_URL + "?pageIndex=" + pageIndex + "&pageSize=" + pageSize;
String jwtToken = this.getJwtToken(this.appkey, this.appSecret);
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("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) //超时,毫秒 .timeout(10 * 60 * 1000) //超时,毫秒
.execute().body(); .execute().body();
List<OrgVoIAM> orgVoIAMList = GsonUtil.json2Collection(orgDataStr, OrgVoIAM.class);
// 同步的VO 转换成 数据库EO CmpOrgResult cmpOrgResult = GsonUtil.json2T(orgDataStr, CmpOrgResult.class);
List<OrgEO> orgEOList = new ArrayList<>(); if (cmpOrgResult != null){
for (OrgVoIAM orgVoIAM : orgVoIAMList){ List<OrgVoIAM> orgVoIAMList = cmpOrgResult.getData();
OrgEO orgEO = this.transOrgIAMVoToOrgEO(orgVoIAM);
orgEOList.add(orgEO); // 同步的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 同步模式 * @Param syncModel 同步模式
*/ */
public void syncOrgIncrData(){ public void syncUserIncrData(int pageIndex, int pageSize, String enterTime){
String syncUrl = this.iamUrl + ORG_INCREMENT_URL; String syncUrl = this.cmpUrl + USER_INCREMENT_URL + "?pageIndex=" + pageIndex + "&pageSize=" + pageSize;
String jwtToken = this.getJwtToken(appkey, appSecret); if (StringUtils.isNotEmpty(enterTime)){
syncUrl += "&enterTime=" + enterTime;
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);
} }
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); String jwtToken = this.getJwtToken(appkey, appSecret);
Date syncStartTime = new Date();
String userDataStr = HttpRequest.post(syncUrl) String userDataStr = HttpRequest.post(syncUrl)
.header("Content-Type", "application/json") .header("Content-Type", "application/json")
.header("Authorization", jwtToken)//头信息,多个头信息多次调用此方法即可 .header("Authorization", jwtToken)//头信息,多个头信息多次调用此方法即可
.timeout(10 * 60 * 1000) //超时,毫秒 .timeout(10 * 60 * 1000) //超时,毫秒
.execute().body(); .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,并存库 // 同步的VO 转换成 数据库EO,并存库
for (UserVoIAM userVoIAM : userVoIAMList){ for (UserVoIAM userVoIAM : userVoIAMList){
UserEO userEO = this.transUserIAMVoToUserEO(userVoIAM); UserEO userEO = this.transUserIAMVoToUserEO(userVoIAM);
this.iUserEoService.syncSaveOrUpdate(userEO); 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) { public OrgEO transOrgIAMVoToOrgEO(OrgVoIAM orgVoIAM) {
OrgEO orgEO = new OrgEO(); OrgEO orgEO = new OrgEO();
orgEO.setId(orgVoIAM.getOrgCode()); // orgEO.setId(orgVoIAM.getOrgCode());
orgEO.setOrgCode(orgVoIAM.getOrgCode()); // orgEO.setOrgCode(orgVoIAM.getOrgCode());
orgEO.setOrgName(orgVoIAM.getOrgName()); // orgEO.setOrgName(orgVoIAM.getOrgName());
orgEO.setOrgLevel(orgVoIAM.getOrgLevel()); // orgEO.setOrgLevel(orgVoIAM.getOrgLevel());
orgEO.setSupOrgCode(orgVoIAM.getSupOrgCode()); // orgEO.setSupOrgCode(orgVoIAM.getSupOrgCode());
orgEO.setOrgShortName(orgVoIAM.getOrgShortName()); // orgEO.setOrgShortName(orgVoIAM.getOrgShortName());
orgEO.setAttribution(orgVoIAM.getAttribution()); // orgEO.setAttribution(orgVoIAM.getAttribution());
orgEO.setBmdm14(orgVoIAM.getBmdm14()); // orgEO.setBmdm14(orgVoIAM.getBmdm14());
orgEO.setStatus(orgVoIAM.getStatus()); // orgEO.setStatus(orgVoIAM.getStatus());
orgEO.setUpdateTime(orgVoIAM.getUpdateTime()); // orgEO.setUpdateTime(orgVoIAM.getUpdateTime());
return orgEO; return orgEO;
} }
@@ -257,45 +201,37 @@ public class SyncIAMTimer {
* @return * @return
*/ */
public UserEO transUserIAMVoToUserEO(UserVoIAM userVoIAM) { public UserEO transUserIAMVoToUserEO(UserVoIAM userVoIAM) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
UserEO userEO = new UserEO(); UserEO userEO = new UserEO();
// 转换基础数据 // 转换基础数据
userEO.setUsid(userVoIAM.getUserUiD()); userEO.setUsid(userVoIAM.getEmployeeID());
userEO.setIsSelf(UserBelongEnum.IAM.getValue()); userEO.setIsSelf(UserBelongEnum.IAM.getValue());
userEO.setPassword(EncryptUtil.encrypt(SysConstants.DEFAULT_PASSWORD)); userEO.setPassword(EncryptUtil.encrypt(SysConstants.DEFAULT_PASSWORD));
userEO.setDelFlag(0); userEO.setDelFlag(0);
userEO.setAccount(userVoIAM.getWorkNo()); userEO.setAccount(userVoIAM.getAccount());
userEO.setCellPhoneNumber(userVoIAM.getMobile() == null ? EncryptUtil.encrypt("") : EncryptUtil.encrypt(userVoIAM.getMobile())); userEO.setCellPhoneNumber(userVoIAM.getMobile() == null ? EncryptUtil.encrypt("") : EncryptUtil.encrypt(userVoIAM.getMobile()));
userEO.setCreateTime(userVoIAM.getUpdateTime()); userEO.setCreateTime(userVoIAM.getEnterTime());
userEO.setUpdateTime(userVoIAM.getUpdateTime()); userEO.setUpdateTime(userVoIAM.getEnterTime());
userEO.setEmail(userVoIAM.getEmail() == null ? EncryptUtil.encrypt("") : EncryptUtil.encrypt(userVoIAM.getEmail())); userEO.setEmail(userVoIAM.getEmail() == null ? EncryptUtil.encrypt("") : EncryptUtil.encrypt(userVoIAM.getEmail()));
userEO.setUsname(userVoIAM.getUserName()); userEO.setUsname(userVoIAM.getCnName());
userEO.setDutyCode(userVoIAM.getDutyCode());
userEO.setDutyName(userVoIAM.getDutyName());
userEO.setStatus(userVoIAM.getStatus()); userEO.setStatus(userVoIAM.getStatus());
userEO.setLevelId(userVoIAM.getLevelId()); userEO.setLevelId(userVoIAM.getLevelID());
userEO.setZj(userVoIAM.getZj()); userEO.setLevelId(userVoIAM.getLevelName());
userEO.setZj(userVoIAM.getZJ());
// 转换org的关联数据 // 转换org的关联数据
List<OrgEO> orgList = new ArrayList<>(); OrgEO orgEO = new OrgEO();
if (userVoIAM.getOrgs() != null){ orgEO.setId(userVoIAM.getDepartID());
for (OrgsShortVoIAM orgsShortVoIAM :userVoIAM.getOrgs()) { orgEO.setDepartmentCode(userVoIAM.getDepartmentCode());
OrgEO orgEO = new OrgEO(); orgEO.setLongName(userVoIAM.getDepartmentName());
orgEO.setId(orgsShortVoIAM.getOrgCode());
orgEO.setOrgCode(orgsShortVoIAM.getOrgCode());
orgEO.setOrgName(orgsShortVoIAM.getOrgName());
orgEO.setOrgShortName(orgsShortVoIAM.getOrgShortName());
orgList.add(orgEO); List<OrgEO> orgList = new ArrayList<>();
} orgList.add(orgEO);
}
userEO.setOrgEOList(orgList); userEO.setOrgEOList(orgList);
// 固定角色数据 // 固定角色数据
List<String> roleIdList = new ArrayList<>(); List<String> roleIdList = new ArrayList<>();
// TODO 根据level固定为一般管理人员 或 总监 // 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"); roleIdList.add("1");
} else { } else {
roleIdList.add("2"); roleIdList.add("2");
@@ -4,9 +4,7 @@ package com.adc.da.sync.service.enums;
*/ */
public enum SyncTypeEnum { public enum SyncTypeEnum {
USER_FULL_DATA("USER_FULL_DATA","用户数据-全量同步"),
USER_INCREMENT_DATA("USER_INCREMENT_DATA","用户数据-增量同步"), USER_INCREMENT_DATA("USER_INCREMENT_DATA","用户数据-增量同步"),
ORG_FULL_DATA("ORG_FULL_DATA","组织机构数据-全量同步"),
ORG_INCREMENT_DATA("ORG_INCREMENT_DATA","组织机构数据-增量同步"); ORG_INCREMENT_DATA("ORG_INCREMENT_DATA","组织机构数据-增量同步");
private String label; 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(); LocalDateTime dateTime = LocalDateTime.now();
String currentDateTimeString = dateTime.format(formatter); String currentDateTimeString = dateTime.format(formatter);
orgEO.setUpdateTime(currentDateTimeString); orgEO.setUpdateTime(currentDateTimeString);
orgEO.setStatus(1); // orgEO.setStatus(1);
return orgEOService.saveOrUpdateSingleton(orgEO); return orgEOService.saveOrUpdateSingleton(orgEO);
} }
@@ -24,56 +24,65 @@ public class OrgEO extends BaseEntity implements Serializable {
/** /**
* 部门编码 * 部门编码
*/ */
@TableField("org_code") @TableField("DEPARTMENT_CODE")
private String orgCode; private String DepartmentCode;
/**
* 部门短名称
*/
@TableField("SHORT_NAME")
private String ShortName;
/** /**
* 部门名称 * 部门名称
*/ */
@TableField("ORG_NAME") @TableField("LONG_NAME")
private String orgName; private String LongName;
/** /**
* 部门级别 * 部门id
*/ */
@TableField("ORG_LEVEL") @TableField("PARENT_ID")
private Integer orgLevel; private String ParentID;
/** /**
* 部门编码 * 部门路径
*/ */
@TableField("SUP_ORG_CODE") @TableField("DEPARTMENT_PATH")
private String supOrgCode; private String DepartmentPath;
/**
* 部门简称
*/
@TableField("ORG_SHORT_NAME")
private String orgShortName;
/**
* 归属地
*/
@TableField("ATTRIBUTION")
private String attribution;
/** /**
* 部门14位码 * 部门14位码
*/ */
@TableField("BMDM_14") @TableField("BMDM_14")
private String bmdm14; private String BMDM14;
/** /**
* 状态,1正常,0停用,-1删除 * 部门级别
*/ */
@TableField("STATUS") @TableField("LEVEL")
private Integer status; 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") @TableField("UPDATE_TIME")
private String updateTime; private String UpdateTime;
} }
@@ -95,17 +95,17 @@ public class UserEO extends BaseEntity implements Serializable {
@TableField("USNAME") @TableField("USNAME")
private String usname; private String usname;
/** // /**
* 职位编码 // * 职位编码
*/ // */
@TableField("DUTY_CODE") // @TableField("DUTY_CODE")
private String dutyCode; // private String dutyCode;
//
/** // /**
* 职位名称 // * 职位名称
*/ // */
@TableField("DUTY_NAME") // @TableField("DUTY_NAME")
private String dutyName; // private String dutyName;
/** /**
* 员工状态:0停用,1启用,2密码错误锁定,3管理员强制锁定 * 员工状态:0停用,1启用,2密码错误锁定,3管理员强制锁定
@@ -119,6 +119,12 @@ public class UserEO extends BaseEntity implements Serializable {
@TableField("LEVEL_ID") @TableField("LEVEL_ID")
private String levelId; 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) { public void delete(String ids) {
String[] idArray = ids.split(","); // TODO 没有状态字段了,直接删了把
OrgEO orgEO = new OrgEO(); // String[] idArray = ids.split(",");
orgEO.setStatus(-1); // OrgEO orgEO = new OrgEO();
QueryWrapper<OrgEO> orgEOQueryWrapper = new QueryWrapper<>(); // orgEO.setStatus(-1);
orgEOQueryWrapper.in("org_code",idArray); // QueryWrapper<OrgEO> orgEOQueryWrapper = new QueryWrapper<>();
baseMapper.update(orgEO,orgEOQueryWrapper); // orgEOQueryWrapper.in("org_code",idArray);
// baseMapper.update(orgEO,orgEOQueryWrapper);
} }
public List<OrgEO> selectList(OrgEO orgEO) { public List<OrgEO> selectList(OrgEO orgEO) {
orgEO.setStatus(1); // TODO 无状态字段了
// orgEO.setStatus(1);
List<OrgEO> orgEOList = baseMapper.selectListByVO(orgEO); List<OrgEO> orgEOList = baseMapper.selectListByVO(orgEO);
return orgEOList; return orgEOList;
} }
@@ -60,7 +62,7 @@ public class OrgEOService extends ServiceImpl<OrgEODao, OrgEO> implements IOrgEo
* @return * @return
*/ */
public ResponseMessage saveOrUpdateSingleton(OrgEO orgEO) { public ResponseMessage saveOrUpdateSingleton(OrgEO orgEO) {
if (StringUtils.isEmpty(orgEO.getOrgCode())){ if (StringUtils.isEmpty(orgEO.getDepartmentCode())){
return Result.error("部门编码不能为空"); return Result.error("部门编码不能为空");
} }
long count = baseMapper.selectCountByOrgCode(orgEO); long count = baseMapper.selectCountByOrgCode(orgEO);
@@ -68,7 +70,7 @@ public class OrgEOService extends ServiceImpl<OrgEODao, OrgEO> implements IOrgEo
return Result.error("部门编码重复"); return Result.error("部门编码重复");
} }
if(StringUtils.isBlank(orgEO.getId())){ if(StringUtils.isBlank(orgEO.getId())){
orgEO.setId(orgEO.getOrgCode()); orgEO.setId(orgEO.getDepartmentCode());
baseMapper.insert(orgEO); baseMapper.insert(orgEO);
}else{ }else{
baseMapper.updateById(orgEO); baseMapper.updateById(orgEO);
@@ -159,7 +159,7 @@ public class UserEOServiceImpl implements IUserEoService {
eo.getOrgEOList().forEach(c -> { eo.getOrgEOList().forEach(c -> {
UserOrgEO userOrgEO = new UserOrgEO(); UserOrgEO userOrgEO = new UserOrgEO();
userOrgEO.setUserId(eo.getUsid()); userOrgEO.setUserId(eo.getUsid());
userOrgEO.setOrgId(c.getOrgCode()); userOrgEO.setOrgId(c.getId());
userOrgEODao.insert(userOrgEO); 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 @Data
public class OrgVoIAM { public class OrgVoIAM {
/**
* 部门ID
*/
private String DepartmentID;
/** /**
* 部门编码 * 部门编码
*/ */
private String orgCode; private String DepartmentCode;
/**
* 部门名称
*/
private String orgName;
/**
* 部门级别
*/
private Integer orgLevel;
/**
* 父部门编码
*/
private String supOrgCode;
/** /**
* 部门简称 * 部门简称
*/ */
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; private String Attribution;
/**
* 部门14位码
*/
private String bmdm14;
/**
* 状态,1正常,0停用,-1删除
*/
private Integer status;
/**
* 更新时间,格式:yyyy-MM-dd HH:mm:ss
*/
private String updateTime;
} }
@@ -11,126 +11,113 @@ import java.util.List;
public class UserVoIAM { 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 JobName;
/**
* 职位名称
*/
private String dutyName;
/** /**
* 员工类型ID:1为劳动合同工,3为外聘员工,4为劳务人员,5为返聘人员,6为外籍员工 * 员工类型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; private String ZJ;
/**
* 更新时间:2022-10-28 11:11:45
*/
private String updateTime;
/**
* 部门信息
*/
List<OrgsShortVoIAM> orgs;
/**
* 用户类型信息
*/
List<UserTypesVoIAM> useTypes;
} }