From 521aaeb3cbaa38d4d483171b21dc14b037d7e2ab Mon Sep 17 00:00:00 2001
From: YXY <932687738@qq.com>
Date: Tue, 25 Jul 2023 22:50:26 +0800
Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E6=8E=A5odoo=20CJT=E8=B4=A6=E5=8F=B7?=
=?UTF-8?q?=E5=88=86=E5=88=AB=E5=AF=B9=E5=BA=94=E9=A3=9E=E4=B9=A6=E8=B4=A6?=
=?UTF-8?q?=E5=8F=B7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/com/ruoyi/common/enums/AppType.java | 8 +-
.../common/enums/TableRelationTypeEnum.java | 7 +-
ruoyi-quartz/pom.xml | 5 +
.../com/ruoyi/quartz/domain/OdooContext.java | 28 ++
.../task/CJT/ManufactureOrderSyncJob.java | 6 +
.../task/CJT/PurchaseArrivalOpenSyncJob.java | 6 +
.../quartz/task/CJT/PurchaseOrderSyncJob.java | 6 +
.../quartz/task/CJT/SaleDeliverySyncJob.java | 6 +
.../quartz/task/CJT/SaleDispatchSyncJob.java | 5 +
.../quartz/task/CJT/SaleOrderSyncJob.java | 6 +
.../task/CJT/SyncAccountsJobAbstract.java | 4 +-
.../quartz/task/odoo/OdooAbstrackob.java | 274 ++++++++++++++++++
.../quartz/task/odoo/ProductProduceJob.java | 56 ++++
13 files changed, 413 insertions(+), 4 deletions(-)
create mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/OdooContext.java
create mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/odoo/OdooAbstrackob.java
create mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/odoo/ProductProduceJob.java
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/AppType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/AppType.java
index 5b90a61..63dfe05 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/AppType.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/AppType.java
@@ -14,7 +14,13 @@ public enum AppType {
SYNC_EMAIL("SYNC_EMAIL", "同步邮箱"),
SCHEDULED_REMINDERS("SCHEDULED_REMINDERS", "定时提醒"),
SYNC_EXTERNAL_DATA_TO_MULTI_TABLE("SYNC_EXTERNAL_DATA_TO_MULTI_TABLE", "同步外部数据到多维表格"),
- SYNC_CJT_DATA_TO_MULTI_TABLE("SYNC_CJT_DATA_TO_MULTI_TABLE", "同步CJT数据到多维表格");
+ SYNC_CJT_MANUFACTURE_ORDER_DATA_TO_MULTI_TABLE("SYNC_CJT_MANUFACTURE_ORDER_DATA_TO_MULTI_TABLE", "同步CJT生产加工单数据到多维表格"),
+ SYNC_CJT_PURCHASE_ARRIVAL_ORDER_DATA_TO_MULTI_TABLE("SYNC_CJT_PURCHASE_ARRIVAL_ORDER_DATA_TO_MULTI_TABLE", "同步CJT进货单数据到多维表格"),
+ SYNC_CJT_PURCHASE_ORDER_DATA_TO_MULTI_TABLE("SYNC_CJT_PURCHASE_ORDER_DATA_TO_MULTI_TABLE", "同步CJT采购订单数据到多维表格"),
+ SYNC_CJT_SALE_DELIVERY_DATA_TO_MULTI_TABLE("SYNC_CJT_SALE_DELIVERY_DATA_TO_MULTI_TABLE", "同步CJT销货单数据到多维表格"),
+ SYNC_CJT_SALE_ORDER_DATA_TO_MULTI_TABLE("SYNC_CJT_SALE_ORDER_DATA_TO_MULTI_TABLE", "同步CJT销售订单数据到多维表格"),
+ SYNC_CJT_SALE_DISPATCH_DATA_TO_MULTI_TABLE("SYNC_CJT_SALE_DISPATCH_DATA_TO_MULTI_TABLE", "同步CJT销售出库单数据到多维表格"),
+ SYNC_ODOO_DATA_TO_MULTI_TABLE("SYNC_ODOO_DATA_TO_MULTI_TABLE", "同步odoo数据到多维表格");
private final String code;
private final String info;
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/TableRelationTypeEnum.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/TableRelationTypeEnum.java
index 5c9ff6f..ded67eb 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/TableRelationTypeEnum.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/TableRelationTypeEnum.java
@@ -22,7 +22,12 @@ public enum TableRelationTypeEnum {
SYNC_CJT_PURCHASE_ORDER("SYNC_CJT_PURCHASE_ORDER", "同步畅捷通采购订单"),
SYNC_CJT_SALE_DELIVERY("SYNC_CJT_SALE_DELIVERY", "同步畅捷通销货单"),
SYNC_CJT_SALE_ORDER("SYNC_CJT_SALE_ORDER", "同步畅捷通销售订单"),
- SYNC_CJT_SALE_DISPATCH("SYNC_CJT_SALE_DISPATCH", "同步畅捷通销售出库单");
+ SYNC_CJT_SALE_DISPATCH("SYNC_CJT_SALE_DISPATCH", "同步畅捷通销售出库单"),
+ SYNC_ODOO_ACCOUNT_MOVE_LINE("SYNC_ODOO_ACCOUNT_MOVE_LINE", "每天晚上7点后更新"),
+ SYNC_ODOO_PRODUCT_PRODUCT("SYNC_ODOO_PRODUCT_PRODUCT", "周日一更"),
+ SYNC_ODOO_PRODUCT_PACKING("SYNC_ODOO_PRODUCT_PACKING", "周日一更"),
+ SYNC_ODOO_PRODUCT_PRODUCT1("SYNC_ODOO_PRODUCT_PRODUCT1", "周日一更"),
+ SYNC_ODOO_STOCK_QUANT("SYNC_ODOO_STOCK_QUANT", "每天晚上7点后更新");
private String code;
private String info;
diff --git a/ruoyi-quartz/pom.xml b/ruoyi-quartz/pom.xml
index 5d2c7ad..d8e941c 100644
--- a/ruoyi-quartz/pom.xml
+++ b/ruoyi-quartz/pom.xml
@@ -43,6 +43,11 @@
okhttp
4.9.1
+
+ org.apache.xmlrpc
+ xmlrpc-client
+ 3.1.3
+
\ No newline at end of file
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/OdooContext.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/OdooContext.java
new file mode 100644
index 0000000..8693a3e
--- /dev/null
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/OdooContext.java
@@ -0,0 +1,28 @@
+package com.ruoyi.quartz.domain;
+
+import com.ruoyi.flyingbook.domain.LarkCompanyRelation;
+import com.ruoyi.flyingbook.domain.LarkTableRelation;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.apache.xmlrpc.client.XmlRpcClient;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author yuxiangyong
+ * @create 2023-07-17 20:31
+ */
+@Data
+@NoArgsConstructor
+public class OdooContext implements Serializable {
+
+ private XmlRpcClient models;
+ private Integer uid;
+
+ /**
+ * 飞书权限相关即待同步飞书多维表格配置
+ */
+ private LarkCompanyRelation companyRelation;
+ private LarkTableRelation tableRelation;
+}
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/ManufactureOrderSyncJob.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/ManufactureOrderSyncJob.java
index 69a8d0d..9be720e 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/ManufactureOrderSyncJob.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/ManufactureOrderSyncJob.java
@@ -1,5 +1,6 @@
package com.ruoyi.quartz.task.CJT;
+import com.ruoyi.common.enums.AppType;
import com.ruoyi.common.enums.TableRelationTypeEnum;
import org.apache.commons.collections4.map.CaseInsensitiveMap;
import org.springframework.stereotype.Component;
@@ -34,6 +35,11 @@ public class ManufactureOrderSyncJob extends SyncAccountsJobAbstract{
super.executeSync();
}
+ @Override
+ protected AppType syncLarkAppType() {
+ return AppType.SYNC_CJT_MANUFACTURE_ORDER_DATA_TO_MULTI_TABLE;
+ }
+
@Override
protected List getUniqueFields() {
return Arrays.asList(
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/PurchaseArrivalOpenSyncJob.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/PurchaseArrivalOpenSyncJob.java
index 207c7f0..dd2f9ad 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/PurchaseArrivalOpenSyncJob.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/PurchaseArrivalOpenSyncJob.java
@@ -1,5 +1,6 @@
package com.ruoyi.quartz.task.CJT;
+import com.ruoyi.common.enums.AppType;
import com.ruoyi.common.enums.TableRelationTypeEnum;
import org.apache.commons.collections4.map.CaseInsensitiveMap;
import org.springframework.stereotype.Component;
@@ -18,6 +19,11 @@ public class PurchaseArrivalOpenSyncJob extends SyncAccountsJobAbstract{
private static final String urlPath = "/tplus/api/v2/PurchaseArrivalOpenApi/FindVoucherList";
+ @Override
+ protected AppType syncLarkAppType() {
+ return AppType.SYNC_CJT_PURCHASE_ARRIVAL_ORDER_DATA_TO_MULTI_TABLE;
+ }
+
@Override
protected TableRelationTypeEnum syncLarkType() {
return TableRelationTypeEnum.SYNC_CJT_PURCHASE_ARRIVAL_ORDER;
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/PurchaseOrderSyncJob.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/PurchaseOrderSyncJob.java
index 1410f97..3f83ee9 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/PurchaseOrderSyncJob.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/PurchaseOrderSyncJob.java
@@ -1,5 +1,6 @@
package com.ruoyi.quartz.task.CJT;
+import com.ruoyi.common.enums.AppType;
import com.ruoyi.common.enums.TableRelationTypeEnum;
import org.apache.commons.collections4.map.CaseInsensitiveMap;
import org.springframework.stereotype.Component;
@@ -18,6 +19,11 @@ public class PurchaseOrderSyncJob extends SyncAccountsJobAbstract{
private static final String urlPath = "/tplus/api/v2/PurchaseOrderOpenApi/FindVoucherList";
+ @Override
+ protected AppType syncLarkAppType() {
+ return AppType.SYNC_CJT_PURCHASE_ORDER_DATA_TO_MULTI_TABLE;
+ }
+
@Override
protected TableRelationTypeEnum syncLarkType() {
return TableRelationTypeEnum.SYNC_CJT_PURCHASE_ORDER;
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/SaleDeliverySyncJob.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/SaleDeliverySyncJob.java
index 34ae123..16ebfd2 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/SaleDeliverySyncJob.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/SaleDeliverySyncJob.java
@@ -1,5 +1,6 @@
package com.ruoyi.quartz.task.CJT;
+import com.ruoyi.common.enums.AppType;
import com.ruoyi.common.enums.TableRelationTypeEnum;
import org.apache.commons.collections4.map.CaseInsensitiveMap;
import org.springframework.stereotype.Component;
@@ -18,6 +19,11 @@ public class SaleDeliverySyncJob extends SyncAccountsJobAbstract{
private static final String urlPath = "/tplus/api/v2/SaleDeliveryOpenApi/FindVoucherList";
+ @Override
+ protected AppType syncLarkAppType() {
+ return AppType.SYNC_CJT_SALE_DELIVERY_DATA_TO_MULTI_TABLE;
+ }
+
@Override
protected TableRelationTypeEnum syncLarkType() {
return TableRelationTypeEnum.SYNC_CJT_SALE_DELIVERY;
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/SaleDispatchSyncJob.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/SaleDispatchSyncJob.java
index 9ee6c4b..61b2090 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/SaleDispatchSyncJob.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/SaleDispatchSyncJob.java
@@ -1,5 +1,6 @@
package com.ruoyi.quartz.task.CJT;
+import com.ruoyi.common.enums.AppType;
import com.ruoyi.common.enums.TableRelationTypeEnum;
import org.apache.commons.collections4.map.CaseInsensitiveMap;
import org.springframework.stereotype.Component;
@@ -18,6 +19,10 @@ public class SaleDispatchSyncJob extends SyncAccountsJobAbstract{
private static final String urlPath = "/tplus/api/v2/SaleDispatchOpenApi/FindVoucherList";
+ @Override
+ protected AppType syncLarkAppType() {
+ return AppType.SYNC_CJT_SALE_DISPATCH_DATA_TO_MULTI_TABLE;
+ }
@Override
protected TableRelationTypeEnum syncLarkType() {
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/SaleOrderSyncJob.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/SaleOrderSyncJob.java
index fe2acb7..ad42bea 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/SaleOrderSyncJob.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/SaleOrderSyncJob.java
@@ -1,5 +1,6 @@
package com.ruoyi.quartz.task.CJT;
+import com.ruoyi.common.enums.AppType;
import com.ruoyi.common.enums.TableRelationTypeEnum;
import org.apache.commons.collections4.map.CaseInsensitiveMap;
import org.springframework.stereotype.Component;
@@ -18,6 +19,11 @@ public class SaleOrderSyncJob extends SyncAccountsJobAbstract{
private static final String urlPath = "/tplus/api/v2/SaleOrderOpenApi/FindVoucherList";
+ @Override
+ protected AppType syncLarkAppType() {
+ return AppType.SYNC_CJT_SALE_ORDER_DATA_TO_MULTI_TABLE;
+ }
+
@Override
protected TableRelationTypeEnum syncLarkType() {
return TableRelationTypeEnum.SYNC_CJT_SALE_ORDER;
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/SyncAccountsJobAbstract.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/SyncAccountsJobAbstract.java
index 6bf6d6c..45c6d53 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/SyncAccountsJobAbstract.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/SyncAccountsJobAbstract.java
@@ -110,6 +110,7 @@ public abstract class SyncAccountsJobAbstract {
/**
* 获取同步多维表格类型配置
*/
+ protected abstract AppType syncLarkAppType();
protected abstract TableRelationTypeEnum syncLarkType();
/**
@@ -197,7 +198,6 @@ public abstract class SyncAccountsJobAbstract {
//批量同步飞书
List errorCodeList = syncLarkBatch(response.getColumns(), rows, existKeyMap,addRecordRequest);
if (!CollectionUtils.isEmpty(errorCodeList)){
- //todo 报错日志
String errorKey = String.join(",", errorCodeList);
throw new RuntimeException(String.format("存在同步失败的记录 %s",errorKey));
}
@@ -350,7 +350,7 @@ public abstract class SyncAccountsJobAbstract {
*/
private void initLarkInfo(CJTJobContext context) {
LarkCompanyRelation companyRelationQuery = new LarkCompanyRelation();
- companyRelationQuery.setAppType(AppType.SYNC_CJT_DATA_TO_MULTI_TABLE.getCode());
+ companyRelationQuery.setAppType(syncLarkAppType().getCode());
companyRelationQuery.setFlag(FlagStatus.OK.getCode());
List larkCompanyRelations = larkCompanyRelationMapper.selectLarkCompanyRelationList(companyRelationQuery);
LarkCompanyRelation companyRelation = larkCompanyRelations.get(0);
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
new file mode 100644
index 0000000..b42d2cf
--- /dev/null
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/odoo/OdooAbstrackob.java
@@ -0,0 +1,274 @@
+package com.ruoyi.quartz.task.odoo;
+
+import com.alibaba.fastjson.JSONObject;
+import com.lark.oapi.service.bitable.v1.model.CreateAppTableRecordRespBody;
+import com.ruoyi.common.enums.AppType;
+import com.ruoyi.common.enums.FlagStatus;
+import com.ruoyi.common.enums.TableRelationTypeEnum;
+import com.ruoyi.flyingbook.LarkHelper.LarkRobotHelper;
+import com.ruoyi.flyingbook.LarkHelper.LarkTableHelper;
+import com.ruoyi.flyingbook.domain.ErpLarkRelation;
+import com.ruoyi.flyingbook.domain.LarkCompanyRelation;
+import com.ruoyi.flyingbook.domain.LarkTableRelation;
+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 lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.xmlrpc.XmlRpcException;
+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;
+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;
+
+/**
+ * @author yuxiangyong
+ * @create 2023-07-23 18:18
+ */
+@Slf4j
+public abstract class OdooAbstrackob {
+ @Autowired
+ protected ErpLarkRelationMapper erpLarkRelationMapper;
+ @Autowired
+ private LarkCompanyRelationMapper larkCompanyRelationMapper;
+ @Autowired
+ private LarkTableRelationMapper larkTableRelationMapper;
+ @Autowired
+ private LarkTableHelper larkTableHelper;
+ @Autowired
+ private LarkRobotHelper larkRobotHelper;
+ @Value("${lark.robot.group}")
+ private String ROBOT_GROUP;
+
+ public static final String ACCOUNT_MOVE_LINE_MODEL_NAME = "account.move.line";
+ public static final String PRODUCT_PRODUCT_MODEL_NAME = "product.product";
+ public static final String PRODUCT_PACKING_MODEL_NAME = "product_packaging";
+ public static final String PRODUCT_PRODUCT_MODEL_NAME2 = "product_product";
+ public static final String STOCK_QUANT_MODEL_NAME = "stock_quant";
+
+ private static final String GET_DATA_DB = "Fortune_test0716";
+ private static final String GET_DATA_NAME = "test";
+ private static final String GET_DATA_PASSWORD = "00cc06962c4583e562f7f3fcad2f38ef840e1d02";
+ private static final String GET_DATA_P_METHOD_NAME = "execute_kw";
+
+ private static final String INIT_URL = "http://47.115.191.117:8869";
+
+ private static final String PAGE_OFFSET_KEY = "offset";
+ private static final String PAGE_LIMIT_KEY = "limit";
+ private static final Integer PAGE_SIZE = 20;
+
+ protected void execute() {
+ try {
+ log.info("===================== {} strat ======================", this.getClassName());
+ //初始化调用对象
+ OdooContext context = initContext();
+ //初始化飞书信息
+ initLarkInfo(context);
+ //分页调用接口批量更新
+ batchSync(context);
+ } catch (Exception e) {
+ log.error("{} 执行失败"
+ , getClassName()
+ , e);
+ larkRobotHelper.sendMessageByBot(ROBOT_GROUP, buildRobotErrorMessage(e));
+ } finally {
+ log.info("===================== {} end ======================", this.getClassName());
+ }
+ }
+
+ private Map getPageMap() {
+ return new HashMap() {{
+ put(PAGE_OFFSET_KEY, 0);//分页
+ put(PAGE_LIMIT_KEY, PAGE_SIZE);
+ }};
+ }
+
+ private void batchSync(OdooContext context) {
+ //分页对象
+ Map pageMap = getPageMap();
+ //查询结果
+ List dateList = new ArrayList<>();
+ //错误信息
+ List errorList = new ArrayList<>();
+ //构建飞书请求对象
+ LarkCompanyRelation companyRelation = context.getCompanyRelation();
+ LarkTableRelation tableRelation = context.getTableRelation();
+ LarkTableRequest larkRequest = new LarkTableRequest(companyRelation.getAppId(), companyRelation.getSecret(), tableRelation.getToAppToken(), tableRelation.getToTableId());
+ //待创建关联关系
+ List waitCreateRelation = new ArrayList<>();
+ do {
+ dateList = getDate(context, pageMap, errorList);
+ Map relationMap = getLarkRelation(dateList);
+ for (JSONObject jsonObject : dateList) {
+ sync(jsonObject, errorList, relationMap, larkRequest,waitCreateRelation);
+ }
+ } while (dateList == null || (CollectionUtils.isNotEmpty(dateList) && dateList.size() == PAGE_SIZE));
+ if (!CollectionUtils.isEmpty(errorList)) {
+ String errorKey = String.join(",", errorList);
+ throw new RuntimeException(String.format("存在同步失败的记录 %s", errorKey));
+ }
+ if (CollectionUtils.isNotEmpty(waitCreateRelation)){
+ erpLarkRelationMapper.batchInsert(waitCreateRelation);
+ }
+ }
+
+ private void sync(JSONObject jsonObject, List errorList
+ , Map relationMap, LarkTableRequest larkRequest
+ , List waitCreateRelation) {
+ String uniqueKey = null;
+ try {
+ Map larkBodyMap = this.buildLarkBodyMap(jsonObject);
+ larkRequest.setBody(larkBodyMap);
+ uniqueKey = buildUniqueKey(jsonObject);
+ String larkRecord = relationMap.get(uniqueKey);
+ if (StringUtils.isNotBlank(larkRecord)) {
+ larkRequest.setRecord(larkRecord);
+ larkTableHelper.updateTableRecord(larkRequest);
+ } else {
+ CreateAppTableRecordRespBody respBody = larkTableHelper.addTableRecord(larkRequest);
+ waitCreateRelation.add(buildErpLarkRelation(uniqueKey,respBody.getRecord().getRecordId()));
+ }
+ } catch (Exception e) {
+ log.error("{} addOrUpdate exception {}", this.getClassName(),uniqueKey, e);
+ errorList.add(String.format("【%s,%s】",uniqueKey,e.getMessage()));
+ }
+ }
+
+ //构建飞书行与cjt唯一键的对应关系对象
+ private ErpLarkRelation buildErpLarkRelation(String key, String larkKey) {
+ ErpLarkRelation erpLarkRelation = new ErpLarkRelation();
+ erpLarkRelation.setKey(key);
+ erpLarkRelation.setLarkKey(larkKey);
+ erpLarkRelation.setMethod(syncLarkType().getCode());
+ erpLarkRelation.setFlag(FlagStatus.OK.getCode());
+ erpLarkRelation.setCreateBy("SYSTEM");
+ erpLarkRelation.setCreateTime(new Date());
+ return erpLarkRelation;
+ }
+
+ private String buildRobotErrorMessage(Exception e) {
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("同步任务", getClassName());
+ jsonObject.put("异常信息", e.getMessage());
+ return jsonObject.toJSONString();
+ }
+
+ private Map getLarkRelation(List dateList) {
+ List uniqueKeyList = dateList.stream().map(r -> {
+ return buildUniqueKey(r);
+ }).distinct().collect(Collectors.toList());
+ if (CollectionUtils.isEmpty(uniqueKeyList)) {
+ return new HashMap<>();
+ }
+ return erpLarkRelationMapper.queryListByKeyList(uniqueKeyList, syncLarkType().getCode())
+ .stream().collect(Collectors.toMap(ErpLarkRelation::getKey, ErpLarkRelation::getLarkKey, (k1, k2) -> k1));
+ }
+
+ /**
+ * 生成调用接口的token信息
+ */
+ private void initLarkInfo(OdooContext context) {
+ LarkCompanyRelation companyRelationQuery = new LarkCompanyRelation();
+ companyRelationQuery.setAppType(AppType.SYNC_ODOO_DATA_TO_MULTI_TABLE.getCode());
+ companyRelationQuery.setFlag(FlagStatus.OK.getCode());
+ List larkCompanyRelations = larkCompanyRelationMapper.selectLarkCompanyRelationList(companyRelationQuery);
+ LarkCompanyRelation companyRelation = larkCompanyRelations.get(0);
+ context.setCompanyRelation(companyRelation);
+ LarkTableRelation tableRelationQuery = new LarkTableRelation();
+ tableRelationQuery.setLarkCompanyRelationId(companyRelation.getId());
+ tableRelationQuery.setFlag(FlagStatus.OK.getCode());
+ tableRelationQuery.setRelationType(syncLarkType().getCode());
+ List larkTableRelations = larkTableRelationMapper.selectLarkTableRelationList(tableRelationQuery);
+ LarkTableRelation tableRelation = larkTableRelations.get(0);
+ context.setTableRelation(tableRelation);
+ }
+
+ private String getClassName() {
+ return this.getClass().getSimpleName();
+ }
+
+ //获取查询model名称
+ protected abstract String buildUniqueKey(JSONObject body);
+
+ //获取查询model名称
+ protected abstract String getQueryModelName();
+
+ //获取查询条件
+ protected abstract List getQueryConditionList();
+
+ //获取查询字段信息
+ protected abstract Map> getQueryFieldMap();
+
+ //构建飞书请求体信息
+ protected abstract Map buildLarkBodyMap(JSONObject date);
+
+ //获取待同步飞书表格信息
+ protected abstract TableRelationTypeEnum syncLarkType();
+
+ public List getDate(OdooContext odooContext, Map pageMap, List errorList) {
+ try {
+ XmlRpcClient models = odooContext.getModels();
+ Integer uid = getUserId();
+ String modelName = getQueryModelName();
+ List