diff --git a/adc-da-main/src/main/resources/application-dev.properties b/adc-da-main/src/main/resources/application-dev.properties
index b53670e..458e4cc 100644
--- a/adc-da-main/src/main/resources/application-dev.properties
+++ b/adc-da-main/src/main/resources/application-dev.properties
@@ -86,11 +86,6 @@ MAIL_POP_PORT=110
#MAIL_USERNAME=64459@Any3.com
#MAIL_PASSWORD=65316975Xiaoq
-
-
-
-
-
IPANDPORT=http://localhost:7061/
#redis
@@ -133,10 +128,8 @@ huawei.OBS.fileMaxSize=10 #文件上传最大M数
logging.level.com.adc: debug
-
-# ======= ddm权限接口 集成 =========
-ddm-identity=changan_test
-ddm-company=9
-ddm-ras-public-key=
-
+# ==== IAM????
+iam.url=https://iamuat.faw-vw.com/
+iam.appkey=xxxx
+iam.appSecret=xxx
diff --git a/adc-da-sys/pom.xml b/adc-da-sys/pom.xml
index 1784a17..6ad4eea 100644
--- a/adc-da-sys/pom.xml
+++ b/adc-da-sys/pom.xml
@@ -170,6 +170,11 @@
1.4.7
+
+ com.auth0
+ java-jwt
+ 3.10.2
+
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 a0b9512..7c37348 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
@@ -1,4 +1,230 @@
package com.adc.da.sync.service;
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.http.Header;
+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.sys.dao.mysql.OrgEODao;
+import com.adc.da.sys.entity.OrgEO;
+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.vo.iam.OrgVoIAM;
+import com.adc.da.sys.vo.iam.UserVoIAM;
+import com.adc.da.util.utils.GsonUtil;
+import com.auth0.jwt.JWT;
+import com.auth0.jwt.algorithms.Algorithm;
+import org.springframework.beans.factory.annotation.Value;
+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;
+import java.util.List;
+
+@Service
public class SyncIAMTimer {
+
+ /**
+ * IAM的前缀地址
+ */
+ @Value("${iam.url}")
+ private String iamUrl;
+
+ @Value("${iam.appkey}")
+ private String appkey;
+
+ @Value("${iam.appSecret}")
+ private String appSecret;
+
+ /**
+ * 组织机构全量同步接口地址
+ */
+ 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 USER_FULL_URL = "/esc-idm/api/v1/account/listAll";
+
+ /**
+ * 用户增量同步接口地址
+ */
+ public static final String USER_INCREMENT_URL = "/esc-idm/api/v1/account/list";
+
+ @Resource
+ SyncIAMLogDao syncIAMLogDao;
+
+ @Resource
+ OrgEOService orgEOService;
+
+ @Resource
+ IUserEoService iUserEoService;
+
+ /**
+ * 同步组织机构-全量数据并入库
+ * @Param syncModel 同步模式
+ */
+ public void syncOrgFullData(){
+ String syncUrl = this.iamUrl + ORG_FULL_URL;
+ String jwtToken = this.getJwtToken(appkey, appSecret);
+
+ Date syncStartTime = new Date();
+
+ String orgDataStr = HttpRequest.post(syncUrl)
+ .header("Content-Type", "application/json")
+ .header("Authorization", jwtToken)//头信息,多个头信息多次调用此方法即可
+ .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);
+ }
+
+ // 需要处理 ,比较后再更新
+ this.orgEOService.saveBatch(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);
+ }
+
+ this.orgEOService.saveBatch(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);
+
+ // 同步的VO 转换成 数据库EO,并存库
+ for (UserVoIAM userVoIAM : userVoIAMList){
+ UserEO userEO = this.transUserIAMVoToUserEO(userVoIAM);
+ // 需要处理 ,比较后再更新
+ this.iUserEoService.save(userEO);
+ }
+
+ this.addSyncLog(null, syncStartTime, SyncTypeEnum.ORG_FULL_DATA.getValue());
+ }
+
+ /**
+ * 根据key和secret获取JWT_TOKEN
+ * @param appKey
+ * @param appSecret
+ * @return
+ */
+ public String getJwtToken(String appKey, String appSecret) {
+ String token = JWT.create()
+ .withIssuer(appKey)
+ .withIssuedAt(new Date())
+ .withJWTId(IdUtil.fastSimpleUUID())
+ .sign(Algorithm.HMAC256(appSecret));
+ return String.join(" ", "Bearer", token);
+ }
+
+ /**
+ * 添加同步日志到库中
+ * @param incrementStartTime 增量同步时间,可能为空
+ */
+ private void addSyncLog(String incrementStartTime, Date syncStartDate, String syncType) {
+ SyncIAMLogEO syncIAMLogEO = new SyncIAMLogEO();
+ syncIAMLogEO.setIncrementStartTime(incrementStartTime);
+ syncIAMLogEO.setSyncStartDate(syncStartDate);
+ syncIAMLogEO.setSyncEndDate(new Date());
+ syncIAMLogEO.setSyncType(syncType);
+ this.syncIAMLogDao.insert(syncIAMLogEO);
+ }
+
+ /**
+ * 对 对接的组织机构实体 转换为 数据库的实体
+ * @param orgVoIAM
+ * @return
+ */
+ public OrgEO transOrgIAMVoToOrgEO(OrgVoIAM orgVoIAM) {
+ OrgEO orgEO = new OrgEO();
+ 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;
+ }
+
+ /**
+ * 对 对接的用户实体 转换为 数据库的实体
+ * @param userVoIAM
+ * @return
+ */
+ public UserEO transUserIAMVoToUserEO(UserVoIAM userVoIAM) {
+ UserEO userEO = new UserEO();
+
+ // 转换基础数据
+
+ // 转换org的关联数据
+
+ return userEO;
+ }
+
}
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 941d805..41d2b1d 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,8 +4,10 @@ package com.adc.da.sync.service.enums;
*/
public enum SyncTypeEnum {
- USER_DATA("USER_DATA","用户数据"),
- ORG_DATA("ORG_DATA","组织机构数据");
+ 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;
private String value;
diff --git a/adc-da-sys/src/main/java/com/adc/da/sys/constant/UserBelongEnum.java b/adc-da-sys/src/main/java/com/adc/da/sys/constant/UserBelongEnum.java
new file mode 100644
index 0000000..2ae0ffb
--- /dev/null
+++ b/adc-da-sys/src/main/java/com/adc/da/sys/constant/UserBelongEnum.java
@@ -0,0 +1,26 @@
+package com.adc.da.sys.constant;
+/***
+ * 同步类型枚举
+ */
+public enum UserBelongEnum {
+
+ LOCAL("1","本地新增用户"),
+ IAM("0","IAm同步用户");
+
+ private String label;
+ private String value;
+
+ private UserBelongEnum(String value, String label) {
+ this.value = value;
+ this.label = label;
+ }
+ public String getValue() {
+ return value;
+ }
+
+ public String getLabel() {
+ return label;
+ }
+
+
+}
diff --git a/adc-da-sys/src/main/java/com/adc/da/sys/controller/UserEOController.java b/adc-da-sys/src/main/java/com/adc/da/sys/controller/UserEOController.java
index 31acb10..dcecb09 100644
--- a/adc-da-sys/src/main/java/com/adc/da/sys/controller/UserEOController.java
+++ b/adc-da-sys/src/main/java/com/adc/da/sys/controller/UserEOController.java
@@ -74,7 +74,7 @@ public class UserEOController extends BaseController {
JsonElement element = parser.parse(data);
UserEO eo = gson.fromJson(element, UserEO.class);
- eo.setPassword("HZWLsoft.com123");
+ eo.setPassword("catarc2013");
if (StringUtils.isBlank(eo.getAccount())) {
return Result.error("用户名不能为空!");
}
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 1fda33e..f72ee8f 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
@@ -3,6 +3,7 @@ package com.adc.da.sys.service;
import java.text.SimpleDateFormat;
import java.util.*;
+import com.adc.da.sys.constant.UserBelongEnum;
import com.adc.da.sys.dao.mysql.UserRoleEODao;
import com.adc.da.sys.entity.RoleEO;
import com.adc.da.sys.entity.UserRoleEO;
@@ -86,7 +87,7 @@ public class UserEOServiceImpl implements IUserEoService {
* 1代表本系统自建用户
* 0代表同步过来的用户
*/
- eo.setIsSelf("1");
+ eo.setIsSelf(UserBelongEnum.LOCAL.getValue());
eo.setUsid(com.adc.da.util.utils.UUID.randomUUID10());
dao.insert(eo);
} else {
@@ -206,10 +207,10 @@ public class UserEOServiceImpl implements IUserEoService {
UserEO userEO = new UserEO();
BeanUtils.copyProperties(userImportVO, userEO);
userEO.setDelFlag(0);
- userEO.setIsSelf("1");
+ userEO.setIsSelf(UserBelongEnum.LOCAL.getValue());
userEO.setUsid(com.adc.da.util.utils.UUID.randomUUID10());
userEO.setCellPhoneNumber(userImportVO.getCellPhoneNumber() == null ? EncryptUtil.encrypt("") : EncryptUtil.encrypt(userImportVO.getCellPhoneNumber()));
- userEO.setPassword(EncryptUtil.encrypt("EI$XIL@vdc9ptev7"));
+ userEO.setPassword(EncryptUtil.encrypt("catarc2013"));
userEO.setEmail(userImportVO.getEmail() == null ? EncryptUtil.encrypt("") : EncryptUtil.encrypt(userImportVO.getEmail()));
userEO.setCreateTime(simpleDateFormat.format(date));
userEO.setUpdateTime(simpleDateFormat.format(date));