Bläddra i källkod

feature(人员增量同步开发): 人员增量同步开发

人员增量同步开发
mazq 3 år sedan
förälder
incheckning
b7bdbdfbcc

+ 5 - 0
dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/constance/UserApiConstance.java

@@ -6,6 +6,11 @@ package com.dragoninfo.dcuc.auth.constance;
  */
 public class UserApiConstance {
 
+    /**
+     * 人员基础信息api
+     */
+    public static final String USER_INFO_SYNC_API = "/api/user-service/v1/users/search";
+
     /**
      * 警员同步API
      */

+ 65 - 1
dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/sub/business/impl/SubSyncBusinessImpl.java

@@ -714,8 +714,9 @@ public class SubSyncBusinessImpl implements ISubSyncBusiness {
                 //避免同步时用户中心更新的数据未被同步过来
                 //被同步的会在下次同步时再更新一次
                 Date updateTime = new Date();
-
                 watch.start("getUserInfoAddFromRemote");
+                //获取删除人员信息
+                getDelUserInfoFromRemote(subSyncConfig.getPageSize(), syncStartTime, headers);
                 //增量同步用户信息
                 String addUserInfoStatus = getAddUserInfo(subSyncConfig.getPageSize(), syncStartTime, headers);
                 watch.stop();
@@ -748,6 +749,69 @@ public class SubSyncBusinessImpl implements ISubSyncBusiness {
         };
     }
 
+    private void getDelUserInfoFromRemote(Integer pageSize, Date syncStartTime, List<Header> headers) {
+        int currentPage = 1;
+        Integer totalPage = null;
+        ApiSearchReq apiSearchReq = new ApiSearchReq();
+        //设置分页参数
+        ApiPageReq pageReq = new ApiPageReq();
+        pageReq.setSize(pageSize);
+        //设置同步时间
+        Map<String, SearchParam> filters = new HashMap<>();
+        SearchParam updateTimeSearch = new SearchParam();
+        updateTimeSearch.setOperator(SearchOperator.ge.name());
+        String dateFormat = DateUtils.getDateFormat(syncStartTime, DateConst.HYPHEN_DISPLAY_TIME);
+        updateTimeSearch.setValue(dateFormat);
+        filters.put("beginUpdateTime", updateTimeSearch);
+        SearchParam deleteSearch = new SearchParam();
+        deleteSearch.setOperator(SearchOperator.eq.name());
+        deleteSearch.setValue(BooleanEnum.TRUE.value);
+        filters.put("deleted", deleteSearch);
+        apiSearchReq.setFilters(filters);
+        apiSearchReq.setPage(pageReq);
+        String url = Joiner.on("").join(authConfig.getUserCenterUrl(), UserApiConstance.USER_INFO_SYNC_API);
+        logger.info("-------------getAddDelUserInfoFromRemote START-----------");
+        do {
+            logger.info("getAddDelUserInfoFromRemote currentPage:{}", currentPage);
+            pageReq.setFrom(currentPage);
+            String result = HttpUtil.postJSON(url, JSON.toJSONString(apiSearchReq), headers,null);
+            if (StringUtils.isBlank(result)) {
+               break ;
+            }
+            //从结果解析用户数据保存到原始数据表
+            ApiResult apiResult = JSON.parseObject(result, ApiResult.class);
+            if(!ResultEnum.SUCCESS.getKey().equals(apiResult.getStatusCode())) {
+                logger.info("getAddDelUserInfoFromRemote ERROR:{}, PAGE NO:{}",apiResult.getMessage(), currentPage);
+                break ;
+            }
+            JSONObject obj = (JSONObject) apiResult.getResult();
+            ApiResultPage<JSONObject> page = JSON.parseObject(obj.toJSONString(), new TypeReference<ApiResultPage<JSONObject>>(){});
+            //从结果解析总页数
+            totalPage = getTotalPage(pageSize, totalPage, page.getTotal().intValue());
+            //解析请求结果
+            saveDelUserOri(page);
+        } while (++currentPage <= totalPage);
+        logger.info("-------------getAddDelUserInfoFromRemote END-----------");
+    }
+
+    private void saveDelUserOri(ApiResultPage<JSONObject> page) {
+        List<JSONObject> content = page.getContent();
+        List<AuthUserAddOriginal> collect = content.stream().map(json -> {
+            AuthUserAddOriginal userOri = new AuthUserAddOriginal();
+            String idcard = json.getString("idcard");
+            String userDeleted = json.getString("deleted");
+            Date updateTime = json.getDate("updateTime");
+            String userType = json.getString("userType");
+            userOri.setIdcard(idcard);
+            userOri.setUserType(userType);
+            userOri.setUserDeleted(userDeleted);
+            userOri.setUserUpdateTime(updateTime);
+            return userOri;
+        }).collect(Collectors.toList());
+        //过程数据保存
+        userAddOriginalService.batchSave(collect);
+    }
+
     private void addUserInfoSync() {
         diffTypeAddUserSync(UserTypeEnum.POLICE);
         diffTypeAddUserSync(UserTypeEnum.HELPER);