24282 1 rok temu
rodzic
commit
18236f0496

+ 1 - 1
sd-business/src/main/java/com/sd/business/entity/sku/po/Sku.java

@@ -21,7 +21,7 @@ public class Sku extends BasePo {
     /**
      * 万里牛uid
      */
-    private String wlnUid;
+    private String wlnSkuId;
 
     /**
      * 万里牛分类id

+ 6 - 1
sd-business/src/main/java/com/sd/business/entity/sku/po/SkuSpec.java

@@ -23,7 +23,12 @@ public class SkuSpec extends BasePo {
     /**
      * 万里牛id
      */
-    private String wlnUid;
+    private String wlnSkuId;
+
+    /**
+     * 万里牛id
+     */
+    private String wlnSkuSpecId;
 
     /**
      * sku id

+ 80 - 49
sd-wln/src/main/java/com/sd/wln/service/impl/WlnSkuServiceImpl.java

@@ -57,6 +57,9 @@ public class WlnSkuServiceImpl implements WlnSkuService {
         }
     }
 
+    /**
+     * 同步sku分类
+     */
     private void syncSkuClassify() {
         List<JSONObject> list;
 
@@ -78,16 +81,16 @@ public class WlnSkuServiceImpl implements WlnSkuService {
         for (int i = 0; i < list.size(); i++) {
             JSONObject item = list.get(i);
 
-            String catagoryid = item.getString("catagoryid");
+            String catagoryId = item.getString("catagoryid");
             String name = item.getString("catagory_name");
             String parentId = item.getString("parentid");
 
-            SkuClassify skuClassify = skuClassifyMap.get(catagoryid);
+            SkuClassify skuClassify = skuClassifyMap.get(catagoryId);
             if (skuClassify == null) {
                 skuClassify = new SkuClassify();
                 skuClassify.setId(IdWorker.getId());
             }
-            skuClassify.setWlnCatagoryId(catagoryid);
+            skuClassify.setWlnCatagoryId(catagoryId);
             skuClassify.setName(name);
             skuClassify.setWlnParentId(parentId);
             skuClassify.setSort(i);
@@ -95,8 +98,8 @@ public class WlnSkuServiceImpl implements WlnSkuService {
         }
 
         // 赋值parentId
-        Map<String, Long> map = skuClassifyList.stream().collect(
-                Collectors.toMap(SkuClassify::getWlnCatagoryId, SkuClassify::getId, (t1, t2) -> t1));
+        Map<String, Long> map = skuClassifyList.stream()
+                .collect(Collectors.toMap(SkuClassify::getWlnCatagoryId, SkuClassify::getId, (t1, t2) -> t1));
         for (SkuClassify skuClassify : skuClassifyList) {
             skuClassify.setParentId(map.getOrDefault(skuClassify.getWlnParentId(), 0L));
         }
@@ -105,75 +108,99 @@ public class WlnSkuServiceImpl implements WlnSkuService {
         skuClassifyService.saveOrUpdateBatch(skuClassifyList);
     }
 
+    /**
+     * 同步sku
+     */
     private void syncSku() {
-        Sku tempSku = skuService.getOne(q -> q.orderByDesc(BasePo::getUpdateTime));
-        Long modifyTime;
-        if (tempSku == null) {
-            modifyTime = 965381503L;
-        } else {
-            modifyTime = tempSku.getUpdateTime().getTime() + 1;
-        }
-
-        int page = 1;
-        int size;
-        List<JSONObject> wlnSkuList = new ArrayList<>();
-        do {
-            try {
-                List<JSONObject> itemList = WlnUtil.getSkuList(page, 200, modifyTime);
-                wlnSkuList.addAll(itemList);
-                page++;
-                size = itemList.size();
-            } catch (Exception e) {
-                log.error("sku同步失败", e);
-                throw new ServiceException("sku同步失败");
-            }
-        } while (size == 200);
 
+        // 获取万里牛sku列表
+        List<JSONObject> wlnSkuList = getWlnSkuList();
         if (wlnSkuList.isEmpty()) {
             return;
         }
 
-        LogicHolder.setLogicHolder(true);
+        List<String> wlnSkuIdList = wlnSkuList.stream().map(item -> item.getString("sys_goods_uid")).collect(Collectors.toList());
 
+        LogicHolder.setLogicHolder(true);
         // 产品分类map
         Map<String, Long> skuClassifyMap = skuClassifyService.mapKV(SkuClassify::getWlnCatagoryId, BaseIdPo::getId, null);
-
         // 产品map
-        Map<String, Sku> skuMap = skuService.mapKEntity(Sku::getWlnUid, null);
-
+        Map<String, Sku> skuMap = skuService.mapKEntity(Sku::getWlnSkuId, q -> q.in(Sku::getWlnSkuId, wlnSkuIdList));
         // 产品规格map
-        Map<Long, Map<String, SkuSpec>> specMap = skuSpecService.list(q -> q.isNotNull(SkuSpec::getWlnUid)).stream()
-                .collect(Collectors.groupingBy(SkuSpec::getSkuId, Collectors.toMap(SkuSpec::getWlnUid, Function.identity())));
-
+        Map<Long, Map<String, SkuSpec>> specMap = skuSpecService.list(q -> q.in(SkuSpec::getWlnSkuId, wlnSkuIdList)).stream()
+                .collect(Collectors.groupingBy(SkuSpec::getSkuId, Collectors.toMap(SkuSpec::getWlnSkuSpecId, Function.identity())));
         LogicHolder.clear();
 
         List<Sku> newSkuList = new ArrayList<>();
         List<SkuSpec> newSkuSpecList = new ArrayList<>();
 
         for (JSONObject wlnSku : wlnSkuList) {
-            Sku sku = skuMap.get(wlnSku.getString("sys_goods_uid"));
-            if (sku == null) {
-                sku = createSku(wlnSku, skuClassifyMap);
-                if (sku == null) {
-                    continue;
-                }
-                newSkuList.add(sku);
+            Sku tempSku = createSku(wlnSku, skuClassifyMap);
+            if (tempSku == null) {
+                continue;
+            }
+            Sku oldSku = skuMap.get(tempSku.getWlnSkuId());
+            if (oldSku != null) {
+                tempSku.setId(oldSku.getId());
             }
+            newSkuList.add(tempSku);
 
             List<JSONObject> specList = wlnSku.getJSONArray("specs").toJavaList(JSONObject.class);
             for (JSONObject wlnSkuSpec : specList) {
-                Map<String, SkuSpec> skuSpecMap = specMap.get(sku.getId());
-                if (skuSpecMap != null && skuSpecMap.get(wlnSkuSpec.getString("sys_spec_uid")) != null) {
-                    continue;
+                SkuSpec tempSkuSpec = createSkuSpec(wlnSkuSpec, tempSku);
+
+                SkuSpec oldSkuSpec = null;
+                Map<String, SkuSpec> oldSkuSpecMap = specMap.get(tempSku.getId());
+                if (oldSkuSpecMap != null) {
+                    oldSkuSpec = oldSkuSpecMap.get(tempSkuSpec.getWlnSkuSpecId());
                 }
-                newSkuSpecList.add(createSkuSpec(wlnSkuSpec, sku));
+                if (oldSkuSpec != null) {
+                    tempSkuSpec.setId(oldSkuSpec.getId());
+                }
+
+                newSkuSpecList.add(tempSkuSpec);
             }
         }
 
-        skuService.saveBatch(newSkuList);
-        skuSpecService.saveBatch(newSkuSpecList);
+        skuService.saveOrUpdateBatch(newSkuList);
+        skuSpecService.saveOrUpdateBatch(newSkuSpecList);
+    }
+
+    /**
+     * 获取万里牛sku列表
+     */
+    private List<JSONObject> getWlnSkuList() {
+        Sku lastSku = skuService.getOne(q -> q.orderByDesc(BasePo::getUpdateTime));
+
+        Long modifyTime;
+        if (lastSku == null) {
+            modifyTime = 965381503L;
+        } else {
+            modifyTime = lastSku.getUpdateTime().getTime() + 1;
+        }
+
+        int page = 1;
+        int size;
+        List<JSONObject> wlnSkuList = new ArrayList<>();
+        do {
+            try {
+                List<JSONObject> itemList = WlnUtil.getSkuList(page, 200, modifyTime);
+                wlnSkuList.addAll(itemList);
+                page++;
+                size = itemList.size();
+            } catch (Exception e) {
+                log.error("sku同步失败", e);
+                throw new ServiceException("sku同步失败");
+            }
+        } while (size == 200);
+
+        return wlnSkuList;
     }
 
+
+    /**
+     * 创建sku
+     */
     private Sku createSku(JSONObject wlnSku, Map<String, Long> skuClassifyMap) {
 
         String catagoryId = wlnSku.getString("catagory_id");
@@ -189,7 +216,7 @@ public class WlnSkuServiceImpl implements WlnSkuService {
         Sku sku = new Sku();
         sku.setId(IdWorker.getId());
         sku.setWlnCatagoryId(catagoryId);
-        sku.setWlnUid(wlnSku.getString("sys_goods_uid"));
+        sku.setWlnSkuId(wlnSku.getString("sys_goods_uid"));
         sku.setSource(2);
         sku.setSkuClassifyId(skuClassifyId);
         sku.setCode(wlnSku.getString("goods_code"));
@@ -200,11 +227,15 @@ public class WlnSkuServiceImpl implements WlnSkuService {
         return sku;
     }
 
+    /**
+     * 创建sku规格
+     */
     private SkuSpec createSkuSpec(JSONObject wlnSku, Sku sku) {
         SkuSpec skuSpec = new SkuSpec();
         skuSpec.setId(IdWorker.getId());
-        skuSpec.setWlnUid(wlnSku.getString("sys_spec_uid"));
         skuSpec.setSkuId(sku.getId());
+        skuSpec.setWlnSkuId(sku.getWlnSkuId());
+        skuSpec.setWlnSkuSpecId(wlnSku.getString("sys_spec_uid"));
         skuSpec.setSpecImgUrl(wlnSku.getString("pic"));
         skuSpec.setCode(wlnSku.getString("spec_code"));
         skuSpec.setName(sku.getName() + ":" + wlnSku.getString("spec1") + wlnSku.getString("spec2"));

+ 7 - 1
sd-wln/src/main/java/com/sd/wln/util/WlnUtil.java

@@ -2,6 +2,7 @@ package com.sd.wln.util;
 
 import cn.hutool.core.io.IoUtil;
 import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.MapUtil;
@@ -19,6 +20,7 @@ import org.apache.http.impl.client.HttpClients;
 import org.apache.http.util.EntityUtils;
 
 import java.io.IOException;
+import java.util.Collections;
 import java.util.List;
 
 public class WlnUtil {
@@ -61,7 +63,11 @@ public class WlnUtil {
         if (code != 0) {
             throw new ServiceException(result);
         }
-        return json.getJSONArray("data").toJavaList(JSONObject.class);
+        JSONArray data = json.getJSONArray("data");
+        if (data == null) {
+            return Collections.emptyList();
+        }
+        return data.toJavaList(JSONObject.class);
     }
 
     /**