wangxy 3 дней назад
Родитель
Сommit
363ab6cb5b

+ 25 - 3
fs-service/src/main/java/com/fs/his/service/impl/FsStoreProductServiceImpl.java

@@ -935,9 +935,9 @@ public class FsStoreProductServiceImpl implements IFsStoreProductService {
     private int syncProductWindow(LocalDateTime windowBegin, LocalDateTime windowEnd, int pageSize) {
         int pageIndex = 1;
         int syncCount = 0;
-        boolean hasNext = true;
+        Set<String> syncedSkuIds = new HashSet<>();
 
-        while (hasNext) {
+        while (true) {
             ProductQueryRequestDTO queryDTO = new ProductQueryRequestDTO();
             queryDTO.setModifiedBegin(formatDateTime(windowBegin));
             queryDTO.setModifiedEnd(formatDateTime(windowEnd));
@@ -950,14 +950,25 @@ public class FsStoreProductServiceImpl implements IFsStoreProductService {
                 break;
             }
 
+            int currentPageNewSkuCount = 0;
             for (ProductResponseDTO.ProductInfo erpProduct : response.getDatas()) {
                 if (StringUtils.isBlank(erpProduct.getSkuId())) {
                     continue;
                 }
+                if (!syncedSkuIds.add(erpProduct.getSkuId())) {
+                    continue;
+                }
+                currentPageNewSkuCount++;
                 syncCount += syncSingleProductFromErp(erpProduct);
             }
 
-            hasNext = Boolean.TRUE.equals(response.getHasNext());
+            Integer pageCount = response.getPageCount();
+            if ((pageCount != null && pageIndex >= pageCount)
+                    || !Boolean.TRUE.equals(response.getHasNext())
+                    || response.getDatas().size() < pageSize
+                    || currentPageNewSkuCount == 0) {
+                break;
+            }
             pageIndex++;
         }
         return syncCount;
@@ -1060,6 +1071,9 @@ public class FsStoreProductServiceImpl implements IFsStoreProductService {
     }
 
     private void updateAttrValueByErpData(FsStoreProduct product,FsStoreProductAttrValue attr, ProductResponseDTO.ProductInfo erpProduct) {
+        if (!hasAttrValueUpdateData(erpProduct)) {
+            return;
+        }
         FsStoreProductAttrValue updateAttr = new FsStoreProductAttrValue();
         updateAttr.setId(attr.getId());
         updateAttr.setPrice(erpProduct.getSalePrice());
@@ -1072,6 +1086,14 @@ public class FsStoreProductServiceImpl implements IFsStoreProductService {
         syncProductAttrDefinition(product.getProductId());
     }
 
+    private boolean hasAttrValueUpdateData(ProductResponseDTO.ProductInfo erpProduct) {
+        return erpProduct.getSalePrice() != null
+                || erpProduct.getCostPrice() != null
+                || erpProduct.getMarketPrice() != null
+                || StringUtils.isNotBlank(erpProduct.getPic())
+                || erpProduct.getWeight() != null;
+    }
+
     private Long getStoreIdByErpBrand(String brand) {
         if (StringUtils.isBlank(brand)) {
             return null;

+ 1 - 0
fs-service/src/main/resources/mapper/his/FsStoreProductAttrValueMapper.xml

@@ -123,6 +123,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="brokerageThree != null">brokerage_three = #{brokerageThree},</if>
             <if test="giveIntegral != null">give_integral = #{giveIntegral},</if>
             <if test="doctorBrokerage != null">doctor_brokerage = #{doctorBrokerage},</if>
+            id = id
         </trim>
         where id = #{id}
     </update>