同步测试,修改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
# ==== 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;
}