提交 9e3badc9 authored 作者: 梁业锦's avatar 梁业锦 💬 提交者: Messenger902

- 多线程形式改善代码

上级 9481b5d9
...@@ -229,7 +229,7 @@ ...@@ -229,7 +229,7 @@
#{itemUrl}, #{itemUrl},
#{itemImg}, #{itemImg},
#{itemTags}, #{itemTags},
#{itemLabel} #{itemLabel},
#{itemNum}, #{itemNum},
#{itemCount}, #{itemCount},
#{itemSku}, #{itemSku},
......
...@@ -23,6 +23,10 @@ import java.net.URL; ...@@ -23,6 +23,10 @@ import java.net.URL;
import java.util.Arrays; import java.util.Arrays;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
/** /**
* 商品导入功能 * 商品导入功能
...@@ -64,25 +68,32 @@ public class ImpartCode { ...@@ -64,25 +68,32 @@ public class ImpartCode {
*/ */
private final String API_URL = "https://mollykitty.myshopify.com/admin/api/" + VERSION + "/products.json"; private final String API_URL = "https://mollykitty.myshopify.com/admin/api/" + VERSION + "/products.json";
/**
* 任务用线程池
*/
ExecutorService executorService = Executors.newCachedThreadPool();
/** /**
* 根据分类进行导入 * 根据分类进行导入
*/ */
@Test @Test
public void goImport() { public void goImport() {
List<String> list = Arrays.asList("Men", "Women", "Children", "Afri Home", "Cosmetics", "Hair", "Sportswear", "Electronics"); List<String> list = Arrays.asList("Men", "Women", "Children", "Afri Home", "Cosmetics", "Hair", "Sportswear", "Electronics");
// 创建线程池
for (String product_type : list) { for (String product_type : list) {
// 记录商品数量 // 记录商品数量
int productCount = 0; int productCount = 0;
// 记录页数 // 记录页数
int pageSize = 1; int pageSize = 1;
// 测试数量 // 测试数量
String link = "https://mollykitty.myshopify.com/admin/api/" + VERSION + "/products/count.json" + "?&product_type=" + product_type; String link = "https://mollykitty.myshopify.com/admin/api/" + VERSION + "/products/count.json" + "?product_type=" + product_type;
String data = HttpRequest.get(link) String data = HttpRequest.get(link)
.header("Authorization", "Basic N2YwZTA0OGFjNDAxNmI5MzU3YmIxZWIyMjE3ZTQyMDE6MWM5N2ExMjIyYzViNDBlMDU5N2M4MTZjNmRmZWNhYzA=") .header("Authorization", "Basic N2YwZTA0OGFjNDAxNmI5MzU3YmIxZWIyMjE3ZTQyMDE6MWM5N2ExMjIyYzViNDBlMDU5N2M4MTZjNmRmZWNhYzA=")
.execute().body(); .execute().body();
System.err.println(product_type + ":" + data); System.err.println(product_type + ":" + data);
// 导入请求 // 导入请求
link = API_URL + "?&product_type=" + product_type; link = "https://mollykitty.myshopify.com/admin/api/" + VERSION + "/products.json" + "?product_type=" + product_type + "&limit=250";
// 开始第一次导入商品 // 开始第一次导入商品
importMethod(link, pageSize, productCount); importMethod(link, pageSize, productCount);
// 获取第一次循环的请求头 // 获取第一次循环的请求头
...@@ -109,7 +120,6 @@ public class ImpartCode { ...@@ -109,7 +120,6 @@ public class ImpartCode {
// 死循环的终点为获取下一页链接抛出数组越界异常 // 死循环的终点为获取下一页链接抛出数组越界异常
break; break;
} }
} }
} }
...@@ -118,11 +128,15 @@ public class ImpartCode { ...@@ -118,11 +128,15 @@ public class ImpartCode {
/** /**
* 商品导入处理 * 商品导入处理
* *
* @param data 接口返回数据 * @param link 请求链接
* @param pageSize 正在导入的页数 * @param pageSize 正在导入的页数
* @param productCount 正在导入的商品数量 * @param productCount 正在导入的商品数量
*/ */
private void importMethod(String data, int pageSize, int productCount) { private void importMethod(String link, int pageSize, int productCount) {
// 请求
String data = HttpRequest.get(link)
.header("Authorization", "Basic N2YwZTA0OGFjNDAxNmI5MzU3YmIxZWIyMjE3ZTQyMDE6MWM5N2ExMjIyYzViNDBlMDU5N2M4MTZjNmRmZWNhYzA=")
.execute().body();
// 格式化 // 格式化
JSONObject jsonObject = JSONObject.fromObject(data); JSONObject jsonObject = JSONObject.fromObject(data);
// 取每个数组中的 products 数组节点 // 取每个数组中的 products 数组节点
...@@ -141,12 +155,14 @@ public class ImpartCode { ...@@ -141,12 +155,14 @@ public class ImpartCode {
Date date = new Date(); Date date = new Date();
// 商品的平台 id // 商品的平台 id
String id = productsObj.getString("id"); String id = productsObj.getString("id");
try {
// 查询该商品的 id 是否已保存 // 查询该商品的 id 是否已保存
if (tbCfStationItemDao.queryByCode(id) != null) { if (tbCfStationItemDao.queryByCode(id) != null) {
// 继续循环 // 跳过循环
continue; continue;
} }
// 线程任务
Runnable runnable = () -> {
try {
// 用于记录 option 的属性名 // 用于记录 option 的属性名
int optionNum = 0; int optionNum = 0;
// 下方商品主体信息需要的商品属性,以"/"隔开 // 下方商品主体信息需要的商品属性,以"/"隔开
...@@ -227,7 +243,7 @@ public class ImpartCode { ...@@ -227,7 +243,7 @@ public class ImpartCode {
skusEntity.setCreateTime(date); skusEntity.setCreateTime(date);
skusEntity.setUpdateTime(date); skusEntity.setUpdateTime(date);
skusEntity.setSkuDesc(variantsObj.getString("title")); skusEntity.setSkuDesc(variantsObj.getString("title"));
System.out.println(optionBuilder.toString());
skusEntity.setSkuName(optionBuilder.toString()); skusEntity.setSkuName(optionBuilder.toString());
skusEntity.setSkuPrice(price); skusEntity.setSkuPrice(price);
skusEntity.setSkuCount(quantity); skusEntity.setSkuCount(quantity);
...@@ -235,7 +251,13 @@ public class ImpartCode { ...@@ -235,7 +251,13 @@ public class ImpartCode {
tbCfItemSkusDao.save(skusEntity); tbCfItemSkusDao.save(skusEntity);
tbCfStationItem.setItemCount(quantity.longValue()); tbCfStationItem.setItemCount(quantity.longValue());
// 商品的原价
String compare_at_price = variantsObj.getString("compare_at_price");
if (!"null".equals(compare_at_price)) {
tbCfStationItem.setItemPrice(new BigDecimal(compare_at_price));
} else {
tbCfStationItem.setItemPrice(null); tbCfStationItem.setItemPrice(null);
}
// 商品的折扣价 // 商品的折扣价
tbCfStationItem.setDiscountPrice(price); tbCfStationItem.setDiscountPrice(price);
} }
...@@ -320,6 +342,7 @@ public class ImpartCode { ...@@ -320,6 +342,7 @@ public class ImpartCode {
InputStream inputStream = getImageStream(src); InputStream inputStream = getImageStream(src);
byte[] bytes = toByteArray(inputStream); byte[] bytes = toByteArray(inputStream);
String url = OssUtil.upload(bytes, id + "_station.jpg", "zion"); String url = OssUtil.upload(bytes, id + "_station.jpg", "zion");
System.err.println("主图的链接为: " + url);
tbCfStationItem.setItemImg(url); tbCfStationItem.setItemImg(url);
tbCfStationItem.setEnableFlag(2); tbCfStationItem.setEnableFlag(2);
...@@ -362,6 +385,9 @@ public class ImpartCode { ...@@ -362,6 +385,9 @@ public class ImpartCode {
tbProductMissEntity.setCreateTime(new Date()); tbProductMissEntity.setCreateTime(new Date());
tbProductMissDao.save(tbProductMissEntity); tbProductMissDao.save(tbProductMissEntity);
} }
};
// 提交任务执行
executorService.submit(runnable);
} }
} }
......
package test;
/**
* 商品导入的任务块
*
* @author 爱酱油不爱醋
* @version 1.0
*/
public class ImportTask implements Runnable {
@Override
public void run() {
}
}
...@@ -3,6 +3,7 @@ package test; ...@@ -3,6 +3,7 @@ package test;
import cn.hutool.core.lang.Console; import cn.hutool.core.lang.Console;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpRequest;
import com.google.gson.annotations.JsonAdapter;
import com.platform.controller.api.ProductExitException; import com.platform.controller.api.ProductExitException;
import com.platform.dao.*; import com.platform.dao.*;
import com.platform.entity.*; import com.platform.entity.*;
...@@ -114,21 +115,36 @@ public class TestApi { ...@@ -114,21 +115,36 @@ public class TestApi {
*/ */
@Test @Test
public void linkTest() { public void linkTest() {
String link = "https://mollykitty.myshopify.com/admin/api/2020-01/products.json?vendor=%E6%B3%B0%E9%82%A6%E6%9C%8D%E9%A5%B0&limit=1&vendor=戴菊"; String link = "https://mollykitty.myshopify.com/admin/api/2020-01/products.json?vendor=%E6%B3%B0%E9%82%A6%E6%9C%8D%E9%A5%B0&limit=100&vendor=戴菊";
link = HttpRequest.get(link) link = HttpRequest.get(link)
.header("Authorization", "Basic N2YwZTA0OGFjNDAxNmI5MzU3YmIxZWIyMjE3ZTQyMDE6MWM5N2ExMjIyYzViNDBlMDU5N2M4MTZjNmRmZWNhYzA=") .header("Authorization", "Basic N2YwZTA0OGFjNDAxNmI5MzU3YmIxZWIyMjE3ZTQyMDE6MWM5N2ExMjIyYzViNDBlMDU5N2M4MTZjNmRmZWNhYzA=")
.execute().body(); .execute().body();
JSONObject json = JSONObject.fromObject(link); JSONObject json = JSONObject.fromObject(link);
JSONObject product = json.getJSONArray("products").getJSONObject(0); JSONArray productArr = json.getJSONArray("products");
String tags = product.getString("tags"); for (int j = 0; j < productArr.size(); j++) {
JSONObject product = productArr.getJSONObject(j);
JSONArray variantsArr = product.getJSONArray("variants");
for (int i = 0; i < variantsArr.size(); i++) {
JSONObject variantsObj = variantsArr.getJSONObject(i);
String compare_at_price = variantsObj.getString("compare_at_price");
if (!"null".equals(compare_at_price)) {
System.out.println(compare_at_price);
}
}
}
/*String tags = product.getString("tags");
String[] s = tags.split(","); String[] s = tags.split(",");
Console.error(Arrays.toString(s)); Console.error(Arrays.toString(s));
for (String i : s) { for (String i : s) {
if (i.indexOf("#") == 0) { if (i.indexOf("#") == 0) {
System.out.println(i); System.out.println(i);
} }
} }*/
} }
/** /**
......
truncate from tb_category_template;
DELETE from tb_cf_category;
DELETE from tb_cf_goodstwotype;
DELETE from tb_cf_goodstype;
DELETE from tb_cf_item_desc;
DELETE from tb_cf_item_skus;
DELETE from tb_cf_option;
DELETE from tb_cf_station_item;
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论