Ver Fonte

sku分类同步

24282 há 1 ano atrás
pai
commit
3763a4e92f

+ 10 - 6
sd-business/src/main/java/com/sd/business/entity/sku/po/SkuClassify.java

@@ -1,8 +1,7 @@
 package com.sd.business.entity.sku.po;
 
-import com.ruoyi.common.core.domain.BasePo;
 import com.baomidou.mybatisplus.annotation.TableName;
-import java.util.Date;
+import com.ruoyi.common.core.domain.BasePo;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -30,13 +29,18 @@ public class SkuClassify extends BasePo {
     private String name;
 
     /**
-     * 排序
+     * 万里牛catagoryid
      */
-    private Integer sort;
+    private String wlnCatagoryid;
 
     /**
-     * 所有父级id
+     * 万里牛parentid
      */
-    private String ancestors;
+    private String wlnParentid;
+
+    /**
+     * 排序
+     */
+    private Integer sort;
 
 }

+ 0 - 305
sd-wln/src/main/java/com/sd/wln/api/HttpUtils.java

@@ -1,305 +0,0 @@
-package com.sd.wln.api;
-
-import cn.hutool.json.JSONUtil;
-import com.ruoyi.common.constant.Constants;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpStatus;
-import org.apache.http.StatusLine;
-import org.apache.http.client.ClientProtocolException;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
-import org.apache.http.util.EntityUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import javax.net.ssl.*;
-import java.io.*;
-import java.net.ConnectException;
-import java.net.SocketTimeoutException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.security.cert.X509Certificate;
-
-/**
- * 通用http发送方法
- */
-public class HttpUtils {
-
-    private static final Logger log = LoggerFactory.getLogger(HttpUtils.class);
-
-    /**
-     * 向指定 URL 发送GET方法的请求
-     *
-     * @param url   发送请求的 URL
-     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
-     * @return 所代表远程资源的响应结果
-     */
-    public static String sendGet(String url, String param) {
-        return sendGet(url, param, Constants.UTF8);
-    }
-
-    /**
-     * 向指定 URL 发送GET方法的请求
-     *
-     * @param url         发送请求的 URL
-     * @param param       请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
-     * @param contentType 编码类型
-     * @return 所代表远程资源的响应结果
-     */
-    public static String sendGet(String url, String param, String contentType) {
-        StringBuilder result = new StringBuilder();
-        BufferedReader in = null;
-        try {
-            String urlNameString = url + "?" + param;
-            log.info("sendGet - {}", urlNameString);
-            URL realUrl = new URL(urlNameString);
-            URLConnection connection = realUrl.openConnection();
-            connection.setRequestProperty("accept", "*/*");
-            connection.setRequestProperty("connection", "Keep-Alive");
-            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
-            connection.connect();
-            in = new BufferedReader(new InputStreamReader(connection.getInputStream(), contentType));
-            String line;
-            while ((line = in.readLine()) != null) {
-                result.append(line);
-            }
-            log.info("recv - {}", result);
-        } catch (ConnectException e) {
-            log.error("调用HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param, e);
-        } catch (SocketTimeoutException e) {
-            log.error("调用HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param, e);
-        } catch (IOException e) {
-            log.error("调用HttpUtils.sendGet IOException, url=" + url + ",param=" + param, e);
-        } catch (Exception e) {
-            log.error("调用HttpsUtil.sendGet Exception, url=" + url + ",param=" + param, e);
-        } finally {
-            try {
-                if (in != null) {
-                    in.close();
-                }
-            } catch (Exception ex) {
-                log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
-            }
-        }
-        return result.toString();
-    }
-
-    /**
-     * 向指定 URL 发送POST方法的请求
-     *
-     * @param url   发送请求的 URL
-     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
-     * @return 所代表远程资源的响应结果
-     */
-    public static String sendPostTOPA(String url, String param) {
-        PrintWriter out = null;
-        BufferedReader in = null;
-        StringBuilder result = new StringBuilder();
-        try {
-            String urlNameString = url;
-            log.info("sendPost - {}", urlNameString);
-            URL realUrl = new URL(urlNameString);
-            URLConnection conn = realUrl.openConnection();
-            conn.setRequestProperty("accept", "*/*");
-            conn.setRequestProperty("connection", "Keep-Alive");
-            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
-            conn.setRequestProperty("Accept-Charset", "utf-8");
-            conn.setRequestProperty("contentType", "utf-8");
-            conn.setDoOutput(true);
-            conn.setDoInput(true);
-            out = new PrintWriter(conn.getOutputStream());
-            out.print(param);
-            out.flush();
-            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
-            String line;
-            while ((line = in.readLine()) != null) {
-                result.append(line);
-            }
-            log.info("recv - {}", result);
-        } catch (ConnectException e) {
-            log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e);
-        } catch (SocketTimeoutException e) {
-            log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e);
-        } catch (IOException e) {
-            log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e);
-        } catch (Exception e) {
-            log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e);
-        } finally {
-            try {
-                if (out != null) {
-                    out.close();
-                }
-                if (in != null) {
-                    in.close();
-                }
-            } catch (IOException ex) {
-                log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
-            }
-        }
-        return result.toString();
-    }
-
-    public static String sendSSLPost(String url, String param) {
-        StringBuilder result = new StringBuilder();
-        String urlNameString = url + "?" + param;
-        try {
-            log.info("sendSSLPost - {}", urlNameString);
-            SSLContext sc = SSLContext.getInstance("SSL");
-            sc.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom());
-            URL console = new URL(urlNameString);
-            HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
-            conn.setRequestProperty("accept", "*/*");
-            conn.setRequestProperty("connection", "Keep-Alive");
-            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
-            conn.setRequestProperty("Accept-Charset", "utf-8");
-            conn.setRequestProperty("contentType", "utf-8");
-            conn.setDoOutput(true);
-            conn.setDoInput(true);
-
-            conn.setSSLSocketFactory(sc.getSocketFactory());
-            conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
-            conn.connect();
-            InputStream is = conn.getInputStream();
-            BufferedReader br = new BufferedReader(new InputStreamReader(is));
-            String ret = "";
-            while ((ret = br.readLine()) != null) {
-                if (ret != null && !"".equals(ret.trim())) {
-                    result.append(new String(ret.getBytes("ISO-8859-1"), "utf-8"));
-                }
-            }
-            log.info("recv - {}", result);
-            conn.disconnect();
-            br.close();
-        } catch (ConnectException e) {
-            log.error("调用HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e);
-        } catch (SocketTimeoutException e) {
-            log.error("调用HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e);
-        } catch (IOException e) {
-            log.error("调用HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e);
-        } catch (Exception e) {
-            log.error("调用HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e);
-        }
-        return result.toString();
-    }
-
-    /**
-     * post请求
-     * @param url
-     * @return
-     */
-    public static String sendPost(String url, Object param) {
-        String params = JSONUtil.toJsonStr(param);
-        CloseableHttpClient httpclient = HttpClients.createDefault();
-        HttpPost httpPost = new HttpPost(url);
-        httpPost.setHeader("Accept", "application/json");
-        httpPost.setHeader("Content-Type", "application/json");
-        httpPost.setHeader("User-Agent", "PostmanRuntime/7.29.2");
-        httpPost.setHeader("Accept", "*/*");
-        String charSet = "UTF-8";
-        StringEntity entity = new StringEntity(params, charSet);
-        httpPost.setEntity(entity);
-        CloseableHttpResponse response = null;
-        try {
-            response = httpclient.execute(httpPost);
-            StatusLine status = response.getStatusLine();
-            int state = status.getStatusCode();
-            if (state == HttpStatus.SC_OK) {
-                HttpEntity responseEntity = response.getEntity();
-                String jsonString = EntityUtils.toString(responseEntity);
-//                String a = new String(jsonString.getBytes("ISO-8859-1"),charSet);
-                return jsonString;
-            }
-        } catch (ClientProtocolException e) {
-            e.printStackTrace();
-        } catch (IOException e) {
-            e.printStackTrace();
-        } finally {
-            if (response != null) {
-                try {
-                    response.close();
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
-            }
-            try {
-                httpclient.close();
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        }
-        return null;
-    }
-
-    /**
-     * post请求
-     * @param url
-     * @return
-     */
-    public static String getPost(String url, Object param,Object address) {
-        String params = JSONUtil.toJsonStr(param);
-        CloseableHttpClient httpclient = HttpClients.createDefault();
-        HttpPost httpPost = new HttpPost(url);
-        httpPost.setHeader("Accept", "application/json");
-        httpPost.setHeader("Content-Type", "application/json");
-        httpPost.setHeader("User-Agent", "PostmanRuntime/7.29.2");
-        httpPost.setHeader("Accept", "*/*");
-        String charSet = "UTF-8";
-        StringEntity entity = new StringEntity(params, charSet);
-        httpPost.setEntity(entity);
-        CloseableHttpResponse response = null;
-        try {
-            response = httpclient.execute(httpPost);
-            StatusLine status = response.getStatusLine();
-            int state = status.getStatusCode();
-            if (state == HttpStatus.SC_OK) {
-                HttpEntity responseEntity = response.getEntity();
-                String jsonString = EntityUtils.toString(responseEntity);
-//                String a = new String(jsonString.getBytes("ISO-8859-1"),charSet);
-                return jsonString;
-            }
-        } catch (ClientProtocolException e) {
-            e.printStackTrace();
-        } catch (IOException e) {
-            e.printStackTrace();
-        } finally {
-            if (response != null) {
-                try {
-                    response.close();
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
-            }
-            try {
-                httpclient.close();
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        }
-        return null;
-    }
-
-    private static class TrustAnyTrustManager implements X509TrustManager {
-        @Override
-        public void checkClientTrusted(X509Certificate[] chain, String authType) {
-        }
-
-        @Override
-        public void checkServerTrusted(X509Certificate[] chain, String authType) {
-        }
-
-        @Override
-        public X509Certificate[] getAcceptedIssuers() {
-            return new X509Certificate[]{};
-        }
-    }
-
-    private static class TrustAnyHostnameVerifier implements HostnameVerifier {
-        @Override
-        public boolean verify(String hostname, SSLSession session) {
-            return true;
-        }
-    }
-
-}

+ 0 - 19
sd-wln/src/main/java/com/sd/wln/api/SkuClassifyParam.java

@@ -1,19 +0,0 @@
-package com.sd.wln.api;
-
-
-import lombok.Data;
-
-/**
- * @Author
- * @Description //TODO
- * @Date 2023年07月03日 15:01
- **/
-@Data
-public class SkuClassifyParam extends Signature {
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * 公司id(具体可以咨询下万里牛客服)
-     */
-    private String com_uid;
-}

+ 0 - 122
sd-wln/src/main/java/com/sd/wln/api/WanliAPIConstant.java

@@ -1,122 +0,0 @@
-package com.sd.wln.api;
-
-/**
- * 万里牛常量
- */
-public class WanliAPIConstant {
-
-    private static final String PREFIX = "https://open-api.hupun.com/api/";
-
-    /**
-     * 密钥相关
-     */
-    public static class BASIC_KEY {
-        /**
-         * 生产密钥key
-         */
-        public static final String APP_KEY = "3923521627";
-//        /**
-//         * 测试密钥key
-//         */
-//        public static final String APP_KEY = "3823532979";
-
-        /**
-         * 生产密钥key
-         */
-        public static final String APP_SECRET = "ee6f90783e1c3ba72098137e9a6e8ec3";
-
-//        /**
-//         * 测试密钥key
-//         */
-//        public static final String APP_SECRET = "ea5b29320cb3d15a9883c1fa4654bd02";
-
-    }
-
-    /**
-     * 文件相关API
-     */
-    public static class FILE_API {
-        //批量创建文件夹
-        public static final String createBatchFile =  "http://192.168.2.201:8125/saas/file/operationFile/insertMkDir";
-
-        //创建文件夹
-        public static final String insertFolder =  "http://192.168.2.201:8125/saas/file/operationFile/insertFolder";
-
-        //删除文件夹
-        public static final String deleteFile =  "http://192.168.2.201:8125/saas/file/operationFile/deleteFile";
-
-        //判断路径下是否存在文件夹或者文件
-        public static final String isNoFile =  "http://192.168.2.201:8125/saas/file/operationFile/isNoFile";
-
-        //读取共享文件夹下文件详情
-        public static final String getFileDetails =  "http://192.168.2.201:8125/saas/file/operationFile/getFileDetails";
-
-        //读取共享文件夹下文件名称
-        public static final String getFileName =  "http://192.168.2.201:8125/saas/file/operationFile/getFileName";
-
-        //下载文件到指定文件夹
-        public static final String  downloadFileToFolder =  "http://192.168.2.201:8125/saas/file/operationFile/downloadFileToFolder";
-
-        //判断路径下是否存在文件夹或者文件
-        public static final String checkFile =  "http://192.168.2.201:8125/saas/file/operationFile/isNoFile";
-
-        //实现文件夹的复制功能
-        public static final String copeFile =  "http://192.168.2.201:8125/saas/file/operationFile/copeFile";
-    }
-    /**
-     * 销售相关API
-     */
-    public static class MARKET_API {
-        /**
-         * 查询订单;任意查询时间,查询范围与当前时间对比不能超过3个月;
-         * 任意查询时间,单次查询的开始时间与结束时间不能超过7天;
-         * 非bill_code查询,其他查询条件时间参数不能为空;
-         * 查询范围返回订单条数不能超过10000,如果超过需要缩小范围再次查询;
-         * 接口涉及客户敏感信息字段一律返回为空处理.对外开放
-         */
-        public static final String getTrades = PREFIX + "erp/opentrade/list/trades";
-
-        /**
-         * 描述:查询万里牛系统售后单;查询维度不能超过当前时间三个月,
-         * 接口仅支持返回七天的数据;bill_code与时间参数不能同时为空;
-         * 接口涉及客户敏感信息字段一律返回为空处理.对外开放
-         */
-        public static final String getReturnOrder = PREFIX + "erp/open/return/order/list";
-    }
-
-
-    /**
-     * 商品相关API
-     */
-    public static class GOODS_API {
-        /**
-         * 获取商品分类
-         */
-        public static final String getGoodsCatagory = PREFIX + "/erp/goods/catagory/query";
-
-        /**
-         * 查询商品规格列表,spec_code,item_code,modify_time,bar_code至少一个不能为空——对外开放
-         */
-        public static final String getGoods = PREFIX + "erp/goods/spec/open/query/goodswithspeclist";
-
-        /**
-         * 库存同步,将万里牛ERP的库存覆盖同步(一次性支持80个sku);
-         */
-        public static final String inventorySyn = PREFIX + "erp/open/inventory/syn";
-    }
-    /**
-     * 基础信息API
-     */
-    public static class BASIC_API {
-        /**
-         * 查询商品规格集合编码,其中spec_code,item_code,modify_time,bar_code不能同时为空——对外开放
-         */
-        public static final String getGoodsSpec = PREFIX + "erp/goods/spec/open/query";
-
-        /**
-         * 获取商品对应关系,以规格列表形式返回;shop_name和shop_nick不能同时为空
-         */
-        public static final String getGoodsRelation = PREFIX + "erp/goods/item/correspondence";
-    }
-
-}

+ 20 - 0
sd-wln/src/main/java/com/sd/wln/constants/WlnConstant.java

@@ -0,0 +1,20 @@
+package com.sd.wln.constants;
+
+public class WlnConstant {
+
+    /**
+     * key
+     */
+    public static final String APP_KEY = "3923521627";
+
+    /**
+     * secret
+     */
+    public static final String APP_SECRET = "ee6f90783e1c3ba72098137e9a6e8ec3";
+
+    /**
+     * 公司id(具体可以咨询下万里牛客服)
+     */
+    public static final String COM_UID = "22768050183124";
+
+}

+ 0 - 32
sd-wln/src/main/java/com/sd/wln/controller/WanliController.java

@@ -1,32 +0,0 @@
-package com.sd.wln.controller;
-
-import com.ruoyi.common.annotation.Anonymous;
-import com.ruoyi.common.core.domain.R;
-import com.sd.wln.api.SkuClassifyParam;
-import com.sd.wln.service.WanliService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-
-/**
- * @Author
- * @Description //TODO
- * @Date 2023年07月03日 14:36
- **/
-@Anonymous
-@RestController
-@RequestMapping("/wanli")
-public class WanliController {
-
-    @Resource
-    WanliService wanliService;
-
-    @PostMapping("/importClssify")
-    public R importClssify(@RequestBody SkuClassifyParam param){
-        return R.ok(wanliService.importClssify(param));
-    }
-}

+ 10 - 23
sd-wln/src/main/java/com/sd/wln/api/Signature.java → sd-wln/src/main/java/com/sd/wln/entity/Signature.java

@@ -14,9 +14,10 @@
  *  this software without specific prior written permission.
  *  Author: Chill 庄骞 (smallchill@163.com)
  */
-package com.sd.wln.api;
+package com.sd.wln.entity;
 
 import com.ruoyi.common.utils.sign.Md5Utils;
+import com.sd.wln.constants.WlnConstant;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -72,34 +73,20 @@ public class Signature implements Serializable {
      */
     private Long start_time;
 
-    public void setNull(){
-        //清空参数
-        this._app = null;
-        this._t = null;
-        this._sign = null;
-        this._sign_kind = null;
-        this._s = null;
-    }
     /**
      * 生成签名
      */
     public void generate(String param) {
         long time = System.currentTimeMillis();
-        String p = WanliAPIConstant.BASIC_KEY.APP_SECRET
-                + "_app="+WanliAPIConstant.BASIC_KEY.APP_KEY+"&"
-                + "_t="+time+"&"
+        String str = WlnConstant.APP_SECRET
+                + "_app=" + WlnConstant.APP_KEY + "&"
+                + "_t=" + time + "&"
                 + param
-                + WanliAPIConstant.BASIC_KEY.APP_SECRET;
-        set_app(WanliAPIConstant.BASIC_KEY.APP_KEY);
-        set_sign(Md5Utils.hash(p));
-        set_t(time);
-    }
+                + WlnConstant.APP_SECRET;
 
-    /**
-     * 默认分页
-     */
-    public void defaultPage() {
-        this.page = 1;
-        this.limit = 200;
+        _app = WlnConstant.APP_KEY;
+        _sign = Md5Utils.hash(str);
+        _t = time;
     }
+
 }

+ 15 - 0
sd-wln/src/main/java/com/sd/wln/entity/SkuClassifyParam.java

@@ -0,0 +1,15 @@
+package com.sd.wln.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class SkuClassifyParam extends Signature {
+
+    /**
+     * 公司id(具体可以咨询下万里牛客服)
+     */
+    private String com_uid;
+
+}

+ 29 - 0
sd-wln/src/main/java/com/sd/wln/scheduled/WlnSyncTask.java

@@ -0,0 +1,29 @@
+package com.sd.wln.scheduled;
+
+import com.sd.wln.service.WlnSkuService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+@Component
+public class WlnSyncTask {
+
+    @Autowired
+    private WlnSkuService wlnSkuService;
+
+    /**
+     * 每天同步库存
+     */
+    // @Scheduled(cron = "0 0 1 * * ?")
+    @Scheduled(cron = "0/1 * * * * ?")
+    public void syncSku() {
+        for (int i = 0; i < 3; i++) {
+            boolean flag = wlnSkuService.SyncSkuClassify();
+            if (flag) {
+                break;
+            }
+        }
+
+    }
+
+}

+ 0 - 19
sd-wln/src/main/java/com/sd/wln/service/ISynchroTimeApi.java

@@ -1,19 +0,0 @@
-package com.sd.wln.service;
-
-import com.sd.business.entity.synchro.po.SynchroTime;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-
-/**
- * 同步时间api
- */
-public interface ISynchroTimeApi {
-
-    /**
-     * 添加抓取记录
-     * @return
-     */
-    @PostMapping("/save")
-    boolean save(@RequestBody SynchroTime synchroTime);
-
-}

+ 0 - 7
sd-wln/src/main/java/com/sd/wln/service/WanliService.java

@@ -1,7 +0,0 @@
-package com.sd.wln.service;
-
-import com.sd.wln.api.SkuClassifyParam;
-
-public interface WanliService {
-    Integer importClssify(SkuClassifyParam param);
-}

+ 0 - 8
sd-wln/src/main/java/com/sd/wln/service/WanliSkuService.java

@@ -1,8 +0,0 @@
-package com.sd.wln.service;
-
-import cn.hutool.json.JSONObject;
-import com.sd.wln.api.SkuClassifyParam;
-
-public interface WanliSkuService {
-    JSONObject getSkuClassIfy(SkuClassifyParam param);
-}

+ 7 - 0
sd-wln/src/main/java/com/sd/wln/service/WlnSkuService.java

@@ -0,0 +1,7 @@
+package com.sd.wln.service;
+
+public interface WlnSkuService {
+
+    boolean SyncSkuClassify();
+
+}

+ 0 - 27
sd-wln/src/main/java/com/sd/wln/service/impl/SynchroTimeApi.java

@@ -1,27 +0,0 @@
-package com.sd.wln.service.impl;
-
-import com.sd.business.entity.synchro.po.SynchroTime;
-import com.sd.business.service.synchro.SynchroTimeService;
-import com.sd.wln.service.ISynchroTimeApi;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-
-import javax.annotation.Resource;
-
-/**
- * @Author
- * @Description //TODO
- * @Date 2023年07月04日 16:28
- **/
-
-public class SynchroTimeApi implements ISynchroTimeApi {
-
-    @Resource
-    private SynchroTimeService synchroTimeService;
-
-    @PostMapping("save")
-    @Override
-    public boolean save(@RequestBody SynchroTime synchroTime) {
-        return synchroTimeService.save(synchroTime);
-    }
-}

+ 0 - 106
sd-wln/src/main/java/com/sd/wln/service/impl/WanliServiceImpl.java

@@ -1,106 +0,0 @@
-package com.sd.wln.service.impl;
-
-import cn.hutool.json.JSONArray;
-import cn.hutool.json.JSONObject;
-import cn.hutool.json.JSONUtil;
-import com.ruoyi.common.utils.MapUtil;
-import com.sd.business.entity.sku.vo.SkuClassifyVo;
-import com.sd.business.service.sku.SkuClassifyService;
-import com.sd.wln.api.HttpUtils;
-import com.sd.wln.api.SkuClassifyParam;
-import com.sd.wln.api.WanliAPIConstant;
-import com.sd.wln.service.WanliService;
-import com.sd.wln.service.WanliSkuService;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * @Author
- * @Description //TODO
- * @Date 2023年07月03日 14:37
- **/
-@Service
-public class WanliServiceImpl implements WanliService {
-    @Resource
-    SkuClassifyService skuClassifyService;
-    @Resource
-    WanliSkuService wanliSkuService;
-
-    @Override
-    public Integer importClssify(SkuClassifyParam param) {
-        List<SkuClassifyVo> skuClassifyList = skuClassifyService.getList();
-        List<Long> ids = skuClassifyList.stream().map(SkuClassifyVo::getId).collect(Collectors.toList());
-        JSONObject jsonObject = wanliSkuService.getSkuClassIfy(param);
-        JSONArray dataArray = JSONUtil.parseArray(jsonObject.get("data"));
-        List<SkuClassifyVo> skuClassifyVoList = new ArrayList<>();
-        for (int i=0;i<dataArray.size();i++){
-            SkuClassifyVo skuClassifyVo = new SkuClassifyVo();
-            JSONObject data = JSONUtil.parseObj(dataArray.get(i));
-            if(data.containsKey("catagoryid")){
-                skuClassifyVo.setId((Long) data.get("catagoryid"));
-            }
-            if(data.containsKey("catagory_name")){
-                skuClassifyVo.setName(data.get("catagory_name").toString());
-            }
-            if(data.containsKey("parentid")){
-                skuClassifyVo.setParentId((Long) data.get("parentid"));
-            }else{
-                skuClassifyVo.setParentId(0L);
-            }
-            skuClassifyVo.setCreateTime(new Date());
-            if(!ids.contains(skuClassifyVo.getId())){
-                skuClassifyVoList.add(skuClassifyVo);
-            }
-        }
-        for (SkuClassifyVo s:skuClassifyVoList){
-            List<Long> parentCategory = getParentCategory(s.getId(), skuClassifyVoList);
-            s.setAncestors(StringUtils.join(parentCategory,","));
-        }
-        skuClassifyService.saveBatch(skuClassifyVoList);
-        return skuClassifyVoList.size();
-    }
-    public static void main(String[] args) {
-        SkuClassifyParam param = new SkuClassifyParam();
-        param.setPage(1);
-        param.setLimit(50);
-        param.setCom_uid("22768050183124");
-        param.generate(MapUtil.createLinkString(MapUtil.beanToMap(param)));
-        String result = HttpUtils.sendPost(WanliAPIConstant.GOODS_API.getGoodsCatagory,MapUtil.beanToMap(param));
-        JSONObject jsonObject = JSONUtil.parseObj(result);
-    }
-
-
-    /**
-     * 获取当前节点得所有父级ID
-     * @param id
-     * @param skuClassifyVoList
-     * @return
-     */
-    private static List<Long> getParentCategory(Long id, List<SkuClassifyVo> skuClassifyVoList) {
-        //递归获取父级ids,不包含自己
-        List<Long> parentIds = new ArrayList<>();
-        parentIds.add(0L);
-        getParentTaxCompanyIds(skuClassifyVoList, id, parentIds);
-        return parentIds;
-    }
-
-    private static void getParentTaxCompanyIds(List<SkuClassifyVo> skuClassifyVos, Long id, List<Long> parentIds) {
-        for (SkuClassifyVo taxCompany : skuClassifyVos) {
-            if (taxCompany.getParentId()==0) {
-                continue;
-            }
-            //判断是否有父节点
-            if (id.equals(taxCompany.getId())) {
-                parentIds.add(taxCompany.getParentId());
-                getParentTaxCompanyIds(skuClassifyVos, taxCompany.getParentId(), parentIds);
-            }
-        }
-    }
-}

+ 0 - 28
sd-wln/src/main/java/com/sd/wln/service/impl/WanliSkuServiceImpl.java

@@ -1,28 +0,0 @@
-package com.sd.wln.service.impl;
-
-import cn.hutool.json.JSONObject;
-import cn.hutool.json.JSONUtil;
-import com.ruoyi.common.utils.MapUtil;
-import com.sd.wln.api.HttpUtils;
-import com.sd.wln.api.SkuClassifyParam;
-import com.sd.wln.api.WanliAPIConstant;
-import com.sd.wln.service.WanliSkuService;
-import org.springframework.stereotype.Service;
-
-/**
- * @Author
- * @Description //TODO
- * @Date 2023年07月03日 15:29
- **/
-@Service
-public class WanliSkuServiceImpl implements WanliSkuService {
-
-    @Override
-    public JSONObject getSkuClassIfy(SkuClassifyParam param) {
-
-        param.generate(MapUtil.createLinkString(MapUtil.beanToMap(param)));
-        String skuResult = HttpUtils.sendPost(WanliAPIConstant.GOODS_API.getGoodsCatagory, MapUtil.beanToMap(param));
-        JSONObject jsonObject = JSONUtil.parseObj(skuResult);
-        return jsonObject;
-    }
-}

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

@@ -0,0 +1,80 @@
+package com.sd.wln.service.impl;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.sd.business.entity.sku.po.SkuClassify;
+import com.sd.business.service.sku.SkuClassifyService;
+import com.sd.wln.service.WlnSkuService;
+import com.sd.wln.util.WlnUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+public class WlnSkuServiceImpl implements WlnSkuService {
+
+    @Autowired
+    private SkuClassifyService skuClassifyService;
+
+    @Override
+    public boolean SyncSkuClassify() {
+
+        int page = 1;
+        int size;
+        List<JSONObject> list = new ArrayList<>();
+
+        // 查询万里牛sku分类
+        do {
+            try {
+                List<JSONObject> skuClassifyList = WlnUtil.getSkuClassifyList(page, 50);
+                list.addAll(skuClassifyList);
+                size = skuClassifyList.size();
+            } catch (Exception e) {
+                log.error("sku分类同步错误", e);
+                return false;
+            }
+        } while (size >= 50);
+
+        // 查询数据库sku分类
+        List<SkuClassify> mysqlSkuClassifyList = skuClassifyService.list();
+        Map<String, SkuClassify> skuClassifyMap = mysqlSkuClassifyList.stream()
+                .collect(Collectors.toMap(SkuClassify::getWlnCatagoryid, Function.identity()));
+
+        // 去重合并
+        List<SkuClassify> skuClassifyList = new ArrayList<>();
+        for (int i = 0; i < list.size(); i++) {
+            JSONObject item = list.get(i);
+            String catagoryid = item.getString("catagoryid");
+
+            SkuClassify skuClassify = skuClassifyMap.get(catagoryid);
+            if (skuClassify == null) {
+                skuClassify = new SkuClassify();
+                skuClassify.setId(IdWorker.getId());
+            }
+            skuClassify.setName(item.getString("catagory_name"));
+            skuClassify.setWlnCatagoryid(catagoryid);
+            skuClassify.setWlnParentid(item.getString("parentid"));
+            skuClassify.setSort(i);
+            skuClassifyList.add(skuClassify);
+        }
+
+        // 赋值parentId
+        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));
+        }
+
+        // 更新数据库
+        skuClassifyService.saveOrUpdateBatch(skuClassifyList);
+        return true;
+    }
+
+}

+ 0 - 40
sd-wln/src/main/java/com/sd/wln/timer/Schedule.java

@@ -1,40 +0,0 @@
-package com.sd.wln.timer;
-
-import cn.hutool.extra.spring.SpringUtil;
-import com.sd.wln.service.ISynchroTimeApi;
-import com.sd.wln.api.SkuClassifyParam;
-import com.sd.wln.service.WanliService;
-import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-
-/**
- * @Author
- * @Description //TODO
- * @Date 2023年07月04日 16:12
- **/
-@Component
-@EnableScheduling
-public class Schedule {
-    /**
-     * 分类拉取---定时器--每天1点执行
-     */
-    @Scheduled(cron = "0 0 1 * * ?")
-    private void configureTasksGetProductCategory(){
-        SkuClassifyParam param = new SkuClassifyParam();
-        param.setCom_uid("22768050183124");
-        WanliService wanliService = SpringUtil.getBean(WanliService.class);
-        ISynchroTimeApi iSynchroTimeApi = SpringUtil.getBean(ISynchroTimeApi.class);
-        int result = wanliService.importClssify(param);
-        if(result>0){
-//            //插入一条新的爬取记录
-//            SynchroTime synchroTime = new SynchroTime();
-//            synchroTime.setModel(SynchroTimeModelEnum.MODEL_PRODUCT_CATEGORY.getValue());
-//            synchroTime.setSynchroTime(System.currentTimeMillis());
-//            synchroTime.setSize(result);
-//            synchroTime.setResult(0);
-//            synchroTime.setType(0);
-//            iSynchroTimeApi.save(synchroTime);
-        }
-    }
-}

+ 73 - 0
sd-wln/src/main/java/com/sd/wln/util/WlnUtil.java

@@ -0,0 +1,73 @@
+package com.sd.wln.util;
+
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.MapUtil;
+import com.sd.wln.constants.WlnConstant;
+import com.sd.wln.entity.SkuClassifyParam;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+
+import java.io.IOException;
+import java.util.List;
+
+public class WlnUtil {
+
+    // 万里牛路径前缀
+    private static final String PREFIX = "https://open-api.hupun.com/api/";
+
+    public static List<JSONObject> getSkuClassifyList(Integer page, Integer limit) throws Exception {
+
+        SkuClassifyParam param = new SkuClassifyParam();
+        param.setPage(page);
+        param.setLimit(limit);
+        param.setCom_uid(WlnConstant.COM_UID);
+
+        String linkString = MapUtil.createLinkString(MapUtil.beanToMap(param));
+        param.generate(linkString);
+
+        String result = sendPost(PREFIX + "/erp/goods/catagory/query", param);
+
+        JSONObject json = JSONObject.parseObject(result);
+        Integer code = json.getInteger("code");
+        if (code != 0) {
+            throw new ServiceException(result);
+        }
+
+        return json.getJSONArray("data").toJavaList(JSONObject.class);
+    }
+
+
+    /**
+     * post请求
+     */
+    private static String sendPost(String url, Object param) throws IOException {
+        String params = JSONUtil.toJsonStr(param);
+        StringEntity entity = new StringEntity(params, "UTF-8");
+
+        HttpPost httpPost = new HttpPost(url);
+        httpPost.setHeader("Accept", "application/json");
+        httpPost.setHeader("Content-Type", "application/json");
+        httpPost.setHeader("User-Agent", "PostmanRuntime/7.29.2");
+        httpPost.setHeader("Accept", "*/*");
+        httpPost.setEntity(entity);
+        CloseableHttpClient httpclient = HttpClients.createDefault();
+        CloseableHttpResponse response = null;
+        try {
+            response = httpclient.execute(httpPost);
+            HttpEntity responseEntity = response.getEntity();
+            return EntityUtils.toString(responseEntity);
+        } finally {
+            IoUtil.close(response);
+            IoUtil.close(httpclient);
+        }
+    }
+
+}