From f833aea25970ebc7171815fd0b44e45473082691 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期五, 10 四月 2026 09:58:54 +0800
Subject: [PATCH] fix: 产品维护拉取数据时,未更新从平台拉取并且已删除的产品数据

---
 src/main/java/com/ruoyi/framework/util/AliDingUtils.java |   54 +++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 51 insertions(+), 3 deletions(-)

diff --git a/src/main/java/com/ruoyi/framework/util/AliDingUtils.java b/src/main/java/com/ruoyi/framework/util/AliDingUtils.java
index cfa260e..1470847 100644
--- a/src/main/java/com/ruoyi/framework/util/AliDingUtils.java
+++ b/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) {

--
Gitblit v1.9.3