| | |
| | | * @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; |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取远程查询的总数量(不带时间参数限制) |
| | | */ |
| | | 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) { |