gongchunyi
3 天以前 f833aea25970ebc7171815fd0b44e45473082691
src/main/java/com/ruoyi/framework/util/AliDingUtils.java
@@ -46,11 +46,28 @@
     * @return 对应表单的数据
     */
    public static <T> JSONArray getFormDataList(AliDingConfig aliDingConfig, String formUuid, String searchFieldJson, IService<T> service, SFunction<T, ?> timeField) {
        return getFormDataList(aliDingConfig, formUuid, searchFieldJson, service, timeField, new LambdaQueryWrapper<>());
    }
    /**
     * 根据表单 ID 获取宜搭数据,带自定义记录数查询条件,用于判断是否进行全量同步
     */
    public static <T> JSONArray getFormDataList(AliDingConfig aliDingConfig, String formUuid, String searchFieldJson, IService<T> service, SFunction<T, ?> timeField, LambdaQueryWrapper<T> countWrapper) {
        //  获取 accessToken
        String accessToken = getAccessToken(aliDingConfig);
        //  获取最后同步时间
        LocalDateTime lastSyncTime = getLastSyncTime(service, timeField);
        log.info("开始同步数据,本地最后修改时间: {}", lastSyncTime);
        //  先获取宜搭总数(不带时间参数)与本地记录数对比
        long remoteTotalCount = getRemoteTotalCount(aliDingConfig, formUuid, searchFieldJson, accessToken);
        long localCount = service.count(countWrapper);
        //  判断是否需要全部更新
        LocalDateTime lastSyncTime = null;
        if (remoteTotalCount == localCount) {
             lastSyncTime = getLastSyncTime(service, timeField);
             log.info("开始增量同步数据,本地最后修改时间: {}", lastSyncTime);
        } else {
             log.info("本地数据条数({})与远程数据总条数({})不一致,进行全量同步", localCount, remoteTotalCount);
        }
        JSONArray allData = new JSONArray();
        int pageNumber = 1;
@@ -116,6 +133,37 @@
    }
    /**
     * 获取远程查询的总数量(不带时间参数限制)
     */
    private static long getRemoteTotalCount(AliDingConfig aliDingConfig, String formUuid, String searchFieldJson, String accessToken) {
        JSONObject searchParam = new JSONObject();
        searchParam.put("appType", aliDingConfig.getAppType());
        searchParam.put("systemToken", aliDingConfig.getSystemToken());
        searchParam.put("userId", aliDingConfig.getUserId());
        searchParam.put("formUuid", formUuid);
        searchParam.put("currentPage", 1);
        searchParam.put("pageSize", 1);
        if (StringUtils.isNotEmpty(searchFieldJson)) {
            searchParam.put("searchFieldJson", searchFieldJson);
        }
        String dataRes = HttpUtils.sendPostJson(
                aliDingConfig.getSearchFormDataUrl(),
                searchParam.toJSONString(),
                StandardCharsets.UTF_8.name(),
                null,
                accessToken
        );
        if (StringUtils.isEmpty(dataRes)) {
            return 0;
        }
        JSONObject resultObj = JSON.parseObject(dataRes);
        return resultObj.getLongValue("totalCount");
    }
    /**
     * 获取钉钉 AccessToken
     */
    private static String getAccessToken(AliDingConfig aliDingConfig) {