odoo切换查询方式

odoo切换查询方式
YXY 1 year ago
parent 093ffe7098
commit 7ef48fc857

@ -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<String> 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","<calculated when request is sent>");
builder.add("Cookie","session_id=89f4e593efb9f18ecfab96627b50e43c74ac5508");
return builder.build();
}
public OdooRequest(String model, List args, JSONObject context, List<String> 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();
}
}

@ -3,12 +3,11 @@ package com.ruoyi.quartz.helper;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.ruoyi.quartz.domain.CJTRequest; import com.ruoyi.quartz.domain.CJTRequest;
import com.ruoyi.quartz.domain.CJTRequestBody; import com.ruoyi.quartz.domain.CJTRequestBody;
import com.ruoyi.quartz.domain.CJTRequestBodyQueryDetail;
import com.ruoyi.quartz.domain.CJTResponseBody; import com.ruoyi.quartz.domain.CJTResponseBody;
import com.ruoyi.quartz.domain.OdooRequest;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import okhttp3.*; import okhttp3.*;
import org.assertj.core.util.Lists;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Arrays; import java.util.Arrays;
@ -22,6 +21,8 @@ import java.util.concurrent.TimeUnit;
@Slf4j @Slf4j
public class OkHttpHelper { public class OkHttpHelper {
private static OkHttpClient client = new OkHttpClient().newBuilder() private static OkHttpClient client = new OkHttpClient().newBuilder()
.callTimeout(10, TimeUnit.SECONDS) .callTimeout(10, TimeUnit.SECONDS)
.connectTimeout(10, TimeUnit.SECONDS) .connectTimeout(10, TimeUnit.SECONDS)
@ -51,18 +52,28 @@ public class OkHttpHelper {
return null; return null;
} }
public static void main(String[] args) {
// resetTicket();
// getToken();
saleOrderOpenApi();
}
private static void resetTicket(){ public static JSONObject postOdoo(OdooRequest req) {
CJTRequest cjtRequest = new CJTRequest("https://openapi.chanjet.com/auth/appTicket/resend" String url = req.getUrl();
,"wwjSb5Vl" String body = req.buildRequestBody();
,"C661F71361CC4C5636396480FF08BBA4"); Request request = new Request.Builder()
post(cjtRequest); .headers(req.buildHeaders())
int i = 0; .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;
} }
/** /**

@ -15,8 +15,9 @@ import com.ruoyi.flyingbook.domain.lark.LarkTableRequest;
import com.ruoyi.flyingbook.mapper.ErpLarkRelationMapper; import com.ruoyi.flyingbook.mapper.ErpLarkRelationMapper;
import com.ruoyi.flyingbook.mapper.LarkCompanyRelationMapper; import com.ruoyi.flyingbook.mapper.LarkCompanyRelationMapper;
import com.ruoyi.flyingbook.mapper.LarkTableRelationMapper; import com.ruoyi.flyingbook.mapper.LarkTableRelationMapper;
import com.ruoyi.quartz.domain.CJTJobContext;
import com.ruoyi.quartz.domain.OdooContext; import com.ruoyi.quartz.domain.OdooContext;
import com.ruoyi.quartz.domain.OdooRequest;
import com.ruoyi.quartz.helper.OkHttpHelper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -25,7 +26,6 @@ import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl; import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
@ -33,7 +33,6 @@ import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static java.util.Arrays.asList; import static java.util.Arrays.asList;
import static java.util.Collections.emptyList;
import static java.util.Collections.emptyMap; 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_OFFSET_KEY = "offset";
private static final String PAGE_LIMIT_KEY = "limit"; 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) { public void execute(Integer warehouseId) {
try { try {
if (Boolean.FALSE.equals(syncFlag)) { //todo yxy
return; // if (Boolean.FALSE.equals(syncFlag)) {
} // return;
// }
log.info("===================== {} strat ======================", this.getClassName()); log.info("===================== {} strat ======================", this.getClassName());
//初始化调用对象 //初始化调用对象
OdooContext context = initContext(warehouseId); OdooContext context = initContext(warehouseId);
@ -117,17 +117,15 @@ public abstract class OdooAbstrackob {
private void batchCreate(OdooContext context, Map<String, Integer> pageMap, LarkTableRequest larkRequest, List<String> errorList,Integer retryCount) { private void batchCreate(OdooContext context, Map<String, Integer> pageMap, LarkTableRequest larkRequest, List<String> errorList,Integer retryCount) {
//查询结果 //查询结果
List<Object> dateList = new ArrayList<>(); List<JSONObject> dateList = new ArrayList<>();
List<Integer> retryPageList = new ArrayList<>(); List<Integer> retryPageList = new ArrayList<>();
List<ErpLarkRelation> waitCreateRelation = new ArrayList<>(); List<ErpLarkRelation> waitCreateRelation = new ArrayList<>();
do { do {
dateList = getDate(context, pageMap, context.getWarehouseId(), retryPageList); dateList = getDate(context, pageMap, context.getWarehouseId(), retryPageList);
List<JSONObject> midDateList = dateList.stream().map(r -> {
return (JSONObject) JSONObject.toJSON(r); if (CollectionUtils.isNotEmpty(dateList)) {
}).collect(Collectors.toList()); Map<String, String> relationMap = getLarkRelation(dateList, context.getWarehouseId());
if (CollectionUtils.isNotEmpty(midDateList)) { for (JSONObject jsonObject : dateList) {
Map<String, String> relationMap = getLarkRelation(midDateList, context.getWarehouseId());
for (JSONObject jsonObject : midDateList) {
sync(jsonObject, errorList, relationMap, larkRequest, waitCreateRelation, context.getWarehouseId()); sync(jsonObject, errorList, relationMap, larkRequest, waitCreateRelation, context.getWarehouseId());
} }
} }
@ -253,29 +251,51 @@ public abstract class OdooAbstrackob {
return jsonArray; return jsonArray;
} }
public List<Object> getDate(OdooContext odooContext, Map<String, Integer> pageMap, Integer warehouseId, List<Integer> retryPageList) { // public List<Object> getDate(OdooContext odooContext, Map<String, Integer> pageMap, Integer warehouseId, List<Integer> retryPageList) {
// try {
// XmlRpcClient models = odooContext.getModels();
// Integer uid = getUserId();
// String modelName = getQueryModelName();
// List<Object> 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<JSONObject> getDate(OdooContext odooContext, Map<String, Integer> pageMap, Integer warehouseId, List<Integer> retryPageList) {
List<JSONObject> resultList = new ArrayList<>();
try { try {
XmlRpcClient models = odooContext.getModels(); Map<String, List<String>> queryFieldMap = getQueryFieldMap(warehouseId);
Integer uid = getUserId(); JSONObject context = null;
String modelName = getQueryModelName(); if (warehouseId != null){
List<Object> ids = asList((Object[]) models.execute(GET_DATA_P_METHOD_NAME, asList( context = new JSONObject();
GET_DATA_DB, uid, GET_DATA_PASSWORD, context.put("warehouse_id",warehouseId);
modelName, "search", //product.product 表名 }
getQueryConditionList(), //查询条件 OdooRequest odooRequest = new OdooRequest(getQueryModelName(),getQueryConditionList(),context,queryFieldMap.get("fields"),pageMap.get(PAGE_OFFSET_KEY));
pageMap//分页 JSONObject jsonObject = OkHttpHelper.postOdoo(odooRequest);
))); JSONArray result = jsonObject.getJSONArray("result");
for (int i = 0; i < result.size(); i++) {
return asList((Object[]) models.execute(GET_DATA_P_METHOD_NAME, asList( resultList.add(result.getJSONObject(i));
GET_DATA_DB, uid, GET_DATA_PASSWORD, }
modelName, "read",
asList(ids),
getQueryFieldMap(warehouseId)
)));
} catch (Exception e) { } catch (Exception e) {
log.error("{} 获取数据失败", this.getClassName(), e); log.error("{} 获取数据失败", this.getClassName(), e);
retryPageList.add(pageMap.get(PAGE_OFFSET_KEY)); retryPageList.add(pageMap.get(PAGE_OFFSET_KEY));
} }
return null; return resultList;
} }
public OdooContext initContext(Integer warehouseId) { public OdooContext initContext(Integer warehouseId) {

@ -46,10 +46,6 @@ public class ProductProductJob extends OdooAbstrackob {
@Override @Override
protected Map<String, List<String>> getQueryFieldMap(Integer warehouseId) { protected Map<String, List<String>> 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() {{ return new HashMap() {{
put("fields", Arrays.asList("id", "default_code", "name", "description_purchase" put("fields", Arrays.asList("id", "default_code", "name", "description_purchase"
, "qty_available", "incoming_qty", "packaging_ids", "standard_price", "free_qty", "categ_id")); , "qty_available", "incoming_qty", "packaging_ids", "standard_price", "free_qty", "categ_id"));

Loading…
Cancel
Save