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