diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/OdooRequest.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/OdooRequest.java new file mode 100644 index 0000000..7db2296 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/OdooRequest.java @@ -0,0 +1,85 @@ +package com.ruoyi.quartz.domain; + +import com.alibaba.fastjson.JSONObject; +import lombok.Data; +import lombok.NoArgsConstructor; +import okhttp3.Headers; + +import java.io.Serializable; +import java.util.List; + +/** + * @author yuxiangyong + * @create 2023-07-17 20:31 + */ +@Data +@NoArgsConstructor +public class OdooRequest implements Serializable { + + private String url="http://47.115.191.117:8869/web/dataset/call_kw"; + + /** + * 查询的模板:product.product + */ + private String model; + /** + * 查询方式:search_read + */ + private String method = "search_read"; + /** + * 查询条件 + */ + private List args; + /** + * 查询条件 + */ + private JSONObject context; + /** + * 查询字段集合 + */ + private List fields; + /** + * 当前页 + */ + private Integer offset = 0; + /** + * 每页的条数 + */ + private Integer limit = 500; + + public Headers buildHeaders(){ + Headers.Builder builder = new Headers.Builder(); + builder.add("Content-Type","application/json"); + builder.add("Content-Length",""); + builder.add("Cookie","session_id=89f4e593efb9f18ecfab96627b50e43c74ac5508"); + return builder.build(); + } + + public OdooRequest(String model, List args, JSONObject context, List fields, Integer offset) { + this.model = model; + this.args = args; + this.context = context; + this.fields = fields; + this.offset = offset; + } + + public String buildRequestBody(){ + JSONObject body = new JSONObject(); + body.put("jsonrpc","2.0"); + body.put("method","call"); + JSONObject params = new JSONObject(); + params.put("model",model); + params.put("method",method); + params.put("args",args); + JSONObject kwargs = new JSONObject(); + if (context != null){ + kwargs.put("context",context); + } + kwargs.put("fields",fields); + kwargs.put("offset",offset); + kwargs.put("limit",limit); + params.put("kwargs",kwargs); + body.put("params",params); + return body.toJSONString(); + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/helper/OkHttpHelper.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/helper/OkHttpHelper.java index 3d0a19d..87d5ffd 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/helper/OkHttpHelper.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/helper/OkHttpHelper.java @@ -3,12 +3,11 @@ package com.ruoyi.quartz.helper; import com.alibaba.fastjson.JSONObject; import com.ruoyi.quartz.domain.CJTRequest; import com.ruoyi.quartz.domain.CJTRequestBody; -import com.ruoyi.quartz.domain.CJTRequestBodyQueryDetail; import com.ruoyi.quartz.domain.CJTResponseBody; +import com.ruoyi.quartz.domain.OdooRequest; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import okhttp3.*; -import org.assertj.core.util.Lists; import java.nio.charset.StandardCharsets; import java.util.Arrays; @@ -22,6 +21,8 @@ import java.util.concurrent.TimeUnit; @Slf4j public class OkHttpHelper { + + private static OkHttpClient client = new OkHttpClient().newBuilder() .callTimeout(10, TimeUnit.SECONDS) .connectTimeout(10, TimeUnit.SECONDS) @@ -51,18 +52,28 @@ public class OkHttpHelper { return null; } - public static void main(String[] args) { -// resetTicket(); -// getToken(); - saleOrderOpenApi(); - } - private static void resetTicket(){ - CJTRequest cjtRequest = new CJTRequest("https://openapi.chanjet.com/auth/appTicket/resend" - ,"wwjSb5Vl" - ,"C661F71361CC4C5636396480FF08BBA4"); - post(cjtRequest); - int i = 0; + public static JSONObject postOdoo(OdooRequest req) { + String url = req.getUrl(); + String body = req.buildRequestBody(); + Request request = new Request.Builder() + .headers(req.buildHeaders()) + .method("POST", + RequestBody.create(MediaType.get("application/json"), + body)) + .url(url) + .build(); + try { + Response execute = client.newCall(request).execute(); + ResponseBody responseBody = execute.body(); + if (responseBody != null){ + String string = responseBody.string(); + return JSONObject.parseObject(string); + } + } catch (Exception e) { + log.error("http get 请求失败--{}", e); + } + return null; } /** diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/odoo/OdooAbstrackob.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/odoo/OdooAbstrackob.java index a8bf2e8..c1a10d3 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/odoo/OdooAbstrackob.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/odoo/OdooAbstrackob.java @@ -15,8 +15,9 @@ import com.ruoyi.flyingbook.domain.lark.LarkTableRequest; import com.ruoyi.flyingbook.mapper.ErpLarkRelationMapper; import com.ruoyi.flyingbook.mapper.LarkCompanyRelationMapper; import com.ruoyi.flyingbook.mapper.LarkTableRelationMapper; -import com.ruoyi.quartz.domain.CJTJobContext; import com.ruoyi.quartz.domain.OdooContext; +import com.ruoyi.quartz.domain.OdooRequest; +import com.ruoyi.quartz.helper.OkHttpHelper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -25,7 +26,6 @@ import org.apache.xmlrpc.client.XmlRpcClient; import org.apache.xmlrpc.client.XmlRpcClientConfigImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; import java.net.MalformedURLException; import java.net.URL; @@ -33,7 +33,6 @@ import java.util.*; import java.util.stream.Collectors; import static java.util.Arrays.asList; -import static java.util.Collections.emptyList; import static java.util.Collections.emptyMap; /** @@ -68,13 +67,14 @@ public abstract class OdooAbstrackob { private static final String PAGE_OFFSET_KEY = "offset"; private static final String PAGE_LIMIT_KEY = "limit"; - private static final Integer PAGE_SIZE = 20; + private static final Integer PAGE_SIZE = 500; public void execute(Integer warehouseId) { try { - if (Boolean.FALSE.equals(syncFlag)) { - return; - } + //todo yxy +// if (Boolean.FALSE.equals(syncFlag)) { +// return; +// } log.info("===================== {} strat ======================", this.getClassName()); //初始化调用对象 OdooContext context = initContext(warehouseId); @@ -117,17 +117,15 @@ public abstract class OdooAbstrackob { private void batchCreate(OdooContext context, Map pageMap, LarkTableRequest larkRequest, List errorList,Integer retryCount) { //查询结果 - List dateList = new ArrayList<>(); + List dateList = new ArrayList<>(); List retryPageList = new ArrayList<>(); List waitCreateRelation = new ArrayList<>(); do { dateList = getDate(context, pageMap, context.getWarehouseId(), retryPageList); - List midDateList = dateList.stream().map(r -> { - return (JSONObject) JSONObject.toJSON(r); - }).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(midDateList)) { - Map relationMap = getLarkRelation(midDateList, context.getWarehouseId()); - for (JSONObject jsonObject : midDateList) { + + if (CollectionUtils.isNotEmpty(dateList)) { + Map relationMap = getLarkRelation(dateList, context.getWarehouseId()); + for (JSONObject jsonObject : dateList) { sync(jsonObject, errorList, relationMap, larkRequest, waitCreateRelation, context.getWarehouseId()); } } @@ -253,29 +251,51 @@ public abstract class OdooAbstrackob { return jsonArray; } - public List getDate(OdooContext odooContext, Map pageMap, Integer warehouseId, List retryPageList) { +// public List getDate(OdooContext odooContext, Map pageMap, Integer warehouseId, List retryPageList) { +// try { +// XmlRpcClient models = odooContext.getModels(); +// Integer uid = getUserId(); +// String modelName = getQueryModelName(); +// List ids = asList((Object[]) models.execute(GET_DATA_P_METHOD_NAME, asList( +// GET_DATA_DB, uid, GET_DATA_PASSWORD, +// modelName, "search", //product.product 表名 +// getQueryConditionList(), //查询条件 +// pageMap//分页 +// ))); +// +// return asList((Object[]) models.execute(GET_DATA_P_METHOD_NAME, asList( +// GET_DATA_DB, uid, GET_DATA_PASSWORD, +// modelName, "read", +// asList(ids), +// getQueryFieldMap(warehouseId) +// ))); +// } catch (Exception e) { +// log.error("{} 获取数据失败", this.getClassName(), e); +// retryPageList.add(pageMap.get(PAGE_OFFSET_KEY)); +// } +// return null; +// } + + public List getDate(OdooContext odooContext, Map pageMap, Integer warehouseId, List retryPageList) { + List resultList = new ArrayList<>(); try { - XmlRpcClient models = odooContext.getModels(); - Integer uid = getUserId(); - String modelName = getQueryModelName(); - List ids = asList((Object[]) models.execute(GET_DATA_P_METHOD_NAME, asList( - GET_DATA_DB, uid, GET_DATA_PASSWORD, - modelName, "search", //product.product 表名 - getQueryConditionList(), //查询条件 - pageMap//分页 - ))); - - return asList((Object[]) models.execute(GET_DATA_P_METHOD_NAME, asList( - GET_DATA_DB, uid, GET_DATA_PASSWORD, - modelName, "read", - asList(ids), - getQueryFieldMap(warehouseId) - ))); + Map> queryFieldMap = getQueryFieldMap(warehouseId); + JSONObject context = null; + if (warehouseId != null){ + context = new JSONObject(); + context.put("warehouse_id",warehouseId); + } + OdooRequest odooRequest = new OdooRequest(getQueryModelName(),getQueryConditionList(),context,queryFieldMap.get("fields"),pageMap.get(PAGE_OFFSET_KEY)); + JSONObject jsonObject = OkHttpHelper.postOdoo(odooRequest); + JSONArray result = jsonObject.getJSONArray("result"); + for (int i = 0; i < result.size(); i++) { + resultList.add(result.getJSONObject(i)); + } } catch (Exception e) { log.error("{} 获取数据失败", this.getClassName(), e); retryPageList.add(pageMap.get(PAGE_OFFSET_KEY)); } - return null; + return resultList; } public OdooContext initContext(Integer warehouseId) { diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/odoo/ProductProductJob.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/odoo/ProductProductJob.java index d565cb7..b58f18a 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/odoo/ProductProductJob.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/odoo/ProductProductJob.java @@ -46,10 +46,6 @@ public class ProductProductJob extends OdooAbstrackob { @Override protected Map> getQueryFieldMap(Integer warehouseId) { -// return new HashMap() {{ -// put("fields", Arrays.asList("id","default_code", "name", "description_purchase" -// , "qty_available", "incoming_qty","cost","categ_id.name", "packaging_ids")); -// }}; return new HashMap() {{ put("fields", Arrays.asList("id", "default_code", "name", "description_purchase" , "qty_available", "incoming_qty", "packaging_ids", "standard_price", "free_qty", "categ_id"));