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

---
 doc/宁夏-中盛建材.sql                                                                 |    5 ++
 src/main/java/com/ruoyi/production/service/impl/ProductMaterialServiceImpl.java |    6 ++
 src/main/java/com/ruoyi/production/pojo/ProductMaterialSku.java                 |    3 +
 src/main/resources/mapper/production/ProductMaterialSkuMapper.xml               |    1 
 src/main/java/com/ruoyi/framework/util/AliDingUtils.java                        |   54 +++++++++++++++++++++++++-
 5 files changed, 64 insertions(+), 5 deletions(-)

diff --git "a/doc/\345\256\201\345\244\217-\344\270\255\347\233\233\345\273\272\346\235\220.sql" "b/doc/\345\256\201\345\244\217-\344\270\255\347\233\233\345\273\272\346\235\220.sql"
index 1164c9f..944b4ba 100644
--- "a/doc/\345\256\201\345\244\217-\344\270\255\347\233\233\345\273\272\346\235\220.sql"
+++ "b/doc/\345\256\201\345\244\217-\344\270\255\347\233\233\345\273\272\346\235\220.sql"
@@ -536,4 +536,7 @@
 
 ALTER TABLE `product-inventory-management-zsjc`.`production_product_route_item_file`
     MODIFY COLUMN `file_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '鏂囦欢瀛樺偍鍦板潃' AFTER `file_name`,
-    MODIFY COLUMN `url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '鏂囦欢璁块棶鍦板潃' AFTER `file_url`;
\ No newline at end of file
+    MODIFY COLUMN `url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '鏂囦欢璁块棶鍦板潃' AFTER `file_url`;
+
+ALTER TABLE `product-inventory-management-zsjc`.`product_material_sku`
+    ADD COLUMN `type` int NULL COMMENT '鏁版嵁鏉ユ簮(1-瀹滄惌/2-閽夐拤)' AFTER `update_time`;
\ No newline at end of file
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) {
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductMaterialSku.java b/src/main/java/com/ruoyi/production/pojo/ProductMaterialSku.java
index 4678b5c..1d21049 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductMaterialSku.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductMaterialSku.java
@@ -63,4 +63,7 @@
     @ApiModelProperty("淇敼鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime updateTime;
+
+    @ApiModelProperty("鏁版嵁鏉ユ簮(1-瀹滄惌/2-閽夐拤)")
+    private Long type;
 }
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductMaterialServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductMaterialServiceImpl.java
index 3ce997f..d28ed6b 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductMaterialServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductMaterialServiceImpl.java
@@ -106,7 +106,10 @@
 
             String searchFieldJson = searchConditions.toJSONString();
 
-            JSONArray dataArr = AliDingUtils.getFormDataList(aliDingConfig, aliDingConfig.getMaterialCodeFormUuid(), searchFieldJson, productMaterialSkuService, ProductMaterialSku::getFormModifiedTime);
+            LambdaQueryWrapper<ProductMaterialSku> countWrapper = new LambdaQueryWrapper<>();
+            countWrapper.eq(ProductMaterialSku::getType, 1L);
+
+            JSONArray dataArr = AliDingUtils.getFormDataList(aliDingConfig, aliDingConfig.getMaterialCodeFormUuid(), searchFieldJson, productMaterialSkuService, ProductMaterialSku::getFormModifiedTime, countWrapper);
 
             if (dataArr.isEmpty()) {
                 log.info("娌℃湁鏇村鏂版暟鎹渶瑕佸悓姝�");
@@ -169,6 +172,7 @@
             sku.setFormModifiedTime(AliDingUtils.parseUtcTime(item.getString("modifiedTimeGMT")));
             sku.setCreateTime(now);
             sku.setUpdateTime(now);
+            sku.setType(1L);
 
             list.add(sku);
         }
diff --git a/src/main/resources/mapper/production/ProductMaterialSkuMapper.xml b/src/main/resources/mapper/production/ProductMaterialSkuMapper.xml
index 678bb12..20cd175 100644
--- a/src/main/resources/mapper/production/ProductMaterialSkuMapper.xml
+++ b/src/main/resources/mapper/production/ProductMaterialSkuMapper.xml
@@ -17,6 +17,7 @@
         <result property="formModifiedTime" column="form_modified_time"/>
         <result property="createTime" column="create_time"/>
         <result property="updateTime" column="update_time"/>
+        <result property="type" column="type"/>
     </resultMap>
 
     <select id="selectSkuWithMaterialPage" resultType="com.ruoyi.production.dto.ProductMaterialSkuDto">

--
Gitblit v1.9.3