From 8b9ad09c481799f975c8d1a81bc0695e4abb137a Mon Sep 17 00:00:00 2001 From: "xuetao.li" Date: Tue, 16 May 2023 17:29:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E6=B5=8B=E8=AF=95=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E6=94=B9org=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/application-dev.properties | 18 +- .../src/main/resources/application.properties | 4 +- .../com/adc/da/sync/service/SyncIAMTimer.java | 230 +++++++----------- .../da/sync/service/enums/SyncTypeEnum.java | 2 - .../adc/da/sync/service/utils/SignUtils.java | 114 +++++++++ .../da/sys/controller/OrgEOController.java | 2 +- .../java/com/adc/da/sys/entity/OrgEO.java | 65 ++--- .../java/com/adc/da/sys/entity/UserEO.java | 28 ++- .../com/adc/da/sys/service/OrgEOService.java | 20 +- .../adc/da/sys/service/UserEOServiceImpl.java | 2 +- .../com/adc/da/sys/vo/iam/CmpOrgResult.java | 23 ++ .../com/adc/da/sys/vo/iam/CmpUserResult.java | 23 ++ .../java/com/adc/da/sys/vo/iam/OrgVoIAM.java | 76 +++--- .../java/com/adc/da/sys/vo/iam/UserVoIAM.java | 107 ++++---- 14 files changed, 415 insertions(+), 299 deletions(-) create mode 100644 adc-da-sys/src/main/java/com/adc/da/sync/service/utils/SignUtils.java create mode 100644 adc-da-sys/src/main/java/com/adc/da/sys/vo/iam/CmpOrgResult.java create mode 100644 adc-da-sys/src/main/java/com/adc/da/sys/vo/iam/CmpUserResult.java diff --git a/adc-da-main/src/main/resources/application-dev.properties b/adc-da-main/src/main/resources/application-dev.properties index aa2e423..81fe9f3 100644 --- a/adc-da-main/src/main/resources/application-dev.properties +++ b/adc-da-main/src/main/resources/application-dev.properties @@ -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 \ No newline at end of file +# 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 \ No newline at end of file diff --git a/adc-da-main/src/main/resources/application.properties b/adc-da-main/src/main/resources/application.properties index cb13bb5..b958990 100644 --- a/adc-da-main/src/main/resources/application.properties +++ b/adc-da-main/src/main/resources/application.properties @@ -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 + diff --git a/adc-da-sys/src/main/java/com/adc/da/sync/service/SyncIAMTimer.java b/adc-da-sys/src/main/java/com/adc/da/sync/service/SyncIAMTimer.java index efeca15..02da389 100644 --- a/adc-da-sys/src/main/java/com/adc/da/sync/service/SyncIAMTimer.java +++ b/adc-da-sys/src/main/java/com/adc/da/sync/service/SyncIAMTimer.java @@ -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 orgVoIAMList = GsonUtil.json2Collection(orgDataStr, OrgVoIAM.class); - // 同步的VO 转换成 数据库EO - List 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 orgVoIAMList = cmpOrgResult.getData(); + + // 同步的VO 转换成 数据库EO + List 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 orgVoIAMList = GsonUtil.json2Collection(orgDataStr, OrgVoIAM.class); - - // 同步的VO 转换成 数据库EO - List 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 userVoIAMList = GsonUtil.json2Collection(userDataStr, UserVoIAM.class); + CmpUserResult cmpUserResult = GsonUtil.json2T(userDataStr, CmpUserResult.class); + if (cmpUserResult != null){ + List 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 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 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 orgList = new ArrayList<>(); + orgList.add(orgEO); userEO.setOrgEOList(orgList); // 固定角色数据 List 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"); diff --git a/adc-da-sys/src/main/java/com/adc/da/sync/service/enums/SyncTypeEnum.java b/adc-da-sys/src/main/java/com/adc/da/sync/service/enums/SyncTypeEnum.java index 41d2b1d..da07f7b 100644 --- a/adc-da-sys/src/main/java/com/adc/da/sync/service/enums/SyncTypeEnum.java +++ b/adc-da-sys/src/main/java/com/adc/da/sync/service/enums/SyncTypeEnum.java @@ -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; diff --git a/adc-da-sys/src/main/java/com/adc/da/sync/service/utils/SignUtils.java b/adc-da-sys/src/main/java/com/adc/da/sync/service/utils/SignUtils.java new file mode 100644 index 0000000..bcdeba6 --- /dev/null +++ b/adc-da-sys/src/main/java/com/adc/da/sync/service/utils/SignUtils.java @@ -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 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> parameters = new LinkedList<>(params.entrySet()); + parameters.sort(Map.Entry.comparingByKey()); + StringBuilder sortedQueryString = new StringBuilder(); + for (Map.Entry 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()); + } +} \ No newline at end of file diff --git a/adc-da-sys/src/main/java/com/adc/da/sys/controller/OrgEOController.java b/adc-da-sys/src/main/java/com/adc/da/sys/controller/OrgEOController.java index d47f96b..60122d1 100644 --- a/adc-da-sys/src/main/java/com/adc/da/sys/controller/OrgEOController.java +++ b/adc-da-sys/src/main/java/com/adc/da/sys/controller/OrgEOController.java @@ -99,7 +99,7 @@ public class OrgEOController extends BaseController { LocalDateTime dateTime = LocalDateTime.now(); String currentDateTimeString = dateTime.format(formatter); orgEO.setUpdateTime(currentDateTimeString); - orgEO.setStatus(1); +// orgEO.setStatus(1); return orgEOService.saveOrUpdateSingleton(orgEO); } diff --git a/adc-da-sys/src/main/java/com/adc/da/sys/entity/OrgEO.java b/adc-da-sys/src/main/java/com/adc/da/sys/entity/OrgEO.java index 4615cb3..bedb84b 100644 --- a/adc-da-sys/src/main/java/com/adc/da/sys/entity/OrgEO.java +++ b/adc-da-sys/src/main/java/com/adc/da/sys/entity/OrgEO.java @@ -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; } diff --git a/adc-da-sys/src/main/java/com/adc/da/sys/entity/UserEO.java b/adc-da-sys/src/main/java/com/adc/da/sys/entity/UserEO.java index 65ae593..1e9b970 100644 --- a/adc-da-sys/src/main/java/com/adc/da/sys/entity/UserEO.java +++ b/adc-da-sys/src/main/java/com/adc/da/sys/entity/UserEO.java @@ -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; + /** * 职级 */ diff --git a/adc-da-sys/src/main/java/com/adc/da/sys/service/OrgEOService.java b/adc-da-sys/src/main/java/com/adc/da/sys/service/OrgEOService.java index 407756f..54e7bdb 100644 --- a/adc-da-sys/src/main/java/com/adc/da/sys/service/OrgEOService.java +++ b/adc-da-sys/src/main/java/com/adc/da/sys/service/OrgEOService.java @@ -33,16 +33,18 @@ public class OrgEOService extends ServiceImpl implements IOrgEo } public void delete(String ids) { - String[] idArray = ids.split(","); - OrgEO orgEO = new OrgEO(); - orgEO.setStatus(-1); - QueryWrapper 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 orgEOQueryWrapper = new QueryWrapper<>(); +// orgEOQueryWrapper.in("org_code",idArray); +// baseMapper.update(orgEO,orgEOQueryWrapper); } public List selectList(OrgEO orgEO) { - orgEO.setStatus(1); + // TODO 无状态字段了 +// orgEO.setStatus(1); List orgEOList = baseMapper.selectListByVO(orgEO); return orgEOList; } @@ -60,7 +62,7 @@ public class OrgEOService extends ServiceImpl 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 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); diff --git a/adc-da-sys/src/main/java/com/adc/da/sys/service/UserEOServiceImpl.java b/adc-da-sys/src/main/java/com/adc/da/sys/service/UserEOServiceImpl.java index 32eaa3a..f640675 100644 --- a/adc-da-sys/src/main/java/com/adc/da/sys/service/UserEOServiceImpl.java +++ b/adc-da-sys/src/main/java/com/adc/da/sys/service/UserEOServiceImpl.java @@ -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); }); } diff --git a/adc-da-sys/src/main/java/com/adc/da/sys/vo/iam/CmpOrgResult.java b/adc-da-sys/src/main/java/com/adc/da/sys/vo/iam/CmpOrgResult.java new file mode 100644 index 0000000..f60f6ab --- /dev/null +++ b/adc-da-sys/src/main/java/com/adc/da/sys/vo/iam/CmpOrgResult.java @@ -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 data; + +} diff --git a/adc-da-sys/src/main/java/com/adc/da/sys/vo/iam/CmpUserResult.java b/adc-da-sys/src/main/java/com/adc/da/sys/vo/iam/CmpUserResult.java new file mode 100644 index 0000000..c561655 --- /dev/null +++ b/adc-da-sys/src/main/java/com/adc/da/sys/vo/iam/CmpUserResult.java @@ -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 data; + +} diff --git a/adc-da-sys/src/main/java/com/adc/da/sys/vo/iam/OrgVoIAM.java b/adc-da-sys/src/main/java/com/adc/da/sys/vo/iam/OrgVoIAM.java index b239672..a54402e 100644 --- a/adc-da-sys/src/main/java/com/adc/da/sys/vo/iam/OrgVoIAM.java +++ b/adc-da-sys/src/main/java/com/adc/da/sys/vo/iam/OrgVoIAM.java @@ -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; } diff --git a/adc-da-sys/src/main/java/com/adc/da/sys/vo/iam/UserVoIAM.java b/adc-da-sys/src/main/java/com/adc/da/sys/vo/iam/UserVoIAM.java index 5f9c83f..48343b6 100644 --- a/adc-da-sys/src/main/java/com/adc/da/sys/vo/iam/UserVoIAM.java +++ b/adc-da-sys/src/main/java/com/adc/da/sys/vo/iam/UserVoIAM.java @@ -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 orgs; - - /** - * 用户类型信息 - */ - List useTypes; - + private String ZJ; }