商城订单数据处理流程:从MySQL提取到销帮帮合同写入的实现方法
### 案例分析:3查询商城订单到销帮帮合同接口 (线上:4802697)
在实际业务场景中,将MySQL数据库中的商城订单数据集成到销帮帮的合同接口(/pro/v2/api/contract/add)是一个典型且常见的需求。本文将直接剖析该系统对接案例,深入探讨从MySQL获取数据并推送至销帮帮这一过程中的关键技术点和实现细节。
#### 数据获取与定时抓取
首先,通过MySQL API(select)定期抽取最新的商城订单数据,是整个流程的第一步。在此步骤中,我们采用了可靠的抓取机制,以确保数据不遗漏,包括:
- **周期性任务调度**:利用轻易云的数据集成平台内置的调度功能,实现定时、可靠的数据拉取。
- **分页与限流**:通过适当设置分页大小和限流参数,有效防止单次拉取过多数据导致系统性能瓶颈,同时保证每一次查询都能成功返回结果,避免出现漏单情况。
#### 自定义转换逻辑与格式处理
由于MySQL数据库结构与销帮帮API所需的数据格式存在差异,在进行数据传递前需要做一定程度上的自定义转换。这一过程中涉及:
- **字段映射**:根据销帮帮API要求,对从MySQL取得的原始字段进行重新命名或组合。
- **数据类型转换**:确保不同类型的数据能够正确互转,例如日期格式、金额单位等。
这些操作通过轻易云提供的可视化设计工具可以很方便地完成,让复杂的数据变换过程变得直观易懂。
#### 数据写入及性能优化
在将处理好的数据批量写入到销帮帮合同时,为了充分发挥高吞吐量优势,并提升整体系统性能,这里应用了一些优化策略,如下:
- **分批提交**:为了提高写入效率,每次提交一组合理数量(如500条)的合同信息,避免单个请求负载过大造成超时或失败。
- **重试机制**:针对可能出现网络波动或其他异常情况,设计了多级错误重试机制,以在短时间内快速恢复正常运行状态,保障任务完成率。
此外,由于具备集中监控和告警系统,可以实时跟踪每个集成任务进展情况,并及时响应异常事件,从而有效维护整个链路稳定性。
综上所述,该案例展示了如何借助轻易云平台灵活配置元数据、高效整合不同系统间的信息资源,以及应对具体技术挑战的方法。接下来我们会详细描述具体实现方案及代码示例。
![用友与外部系统接口集成开发](https://pic.qeasy.cloud/D17.png~tplv-syqr462i7n-qeasy.image)
### 调用源系统MySQL接口select获取并加工数据
在数据集成的生命周期中,第一步是从源系统调用数据接口并进行初步加工。本文将详细探讨如何通过轻易云数据集成平台调用MySQL接口`select`来获取商城订单数据,并进行必要的预处理。
#### 接口配置与请求参数
首先,我们需要配置MySQL接口的元数据,以便正确地从源系统获取所需的数据。以下是元数据配置的关键部分:
```json
{
"api": "select",
"effect": "QUERY",
"method": "POST",
"number": "order_code",
"id": "order_code",
"idCheck": true,
"request": [
{
"field": "main_params",
"label": "main_params",
"type": "object",
"describe": "111",
"value": "1",
"children": [
{"field": "order_status", "label": "订单状态", "type": "string", "value": "2"},
{"field": "update_time",
"label": "创建时间",
"type": "datetime",
"value":"_function SUBTIME( '{{LAST_SYNC_TIME|datetime}}' ,'05:01:01')"},
{"field": "limit",
"label":"limit",
"type":"string",
"value":"{PAGINATION_PAGE_SIZE}"},
{"field":"offset",
"label":"offset",
"type":"string",
"value":"{PAGINATION_START_ROW}"},
{"field":"customer_source",
"label":"crm表单ID",
"type":"string",
"value":"2246775"}
]
},
{
...
}
],
...
}
```
#### 主查询语句与扩展查询语句
在元数据配置中,主查询语句和扩展查询语句是获取和处理数据的核心部分。
**主查询语句 (`main_sql`):**
```sql
SELECT middle_order.order_code, middle_order.user_id, middle_order.whether_to_sign_new, middle_order.quotation_desc3, middle_order.order_amount, middle_order.product_amount, middle_order.other_amount, middle_order.discount, middle_order.account_receivable, middle_order.discount_amount, middle_order.sales_amount, middle_order.client_type, middle_order.order_status, middle_order.audit_time, middle_order.create_time, middle_order.update_time, middle_order.customer_code, middle_order.customer_name, middle_order.customer_id, middle_order.customer_source, middle_order.crm_user_id, middle_order.user_name, middle_order.business_user_id, middle_order.business_user_name,middle_order.file_address
FROM middle_order
WHERE middle_order.`order_status` = :order_status
AND middle_order.crm= 1
AND middle_order.customer_id!=''
AND middle_order.client_type= :customer_source
AND middle_order.`update_time`>= :update_time
ORDER BY middle_order.`create_time` ASC
LIMIT :limit OFFSET :offset
```
**扩展查询语句 (`extend_sql_1`):**
```sql
SELECT
middle_order_details.order_code,
middle_order_details.create_time,
middle_order_details.update_time,
middle_order_details.product_no,
middle_order_details.product_name,
middle_order_details.product_number,
middle_order_details.product_price,
middle_order_details.sales_price,
middle_order_details.total_product_price,
middle_order_details.total_sales_price
FROM middle_order_details
WHERE middle_order_details.`order_code`= :order_code
```
#### 数据请求与清洗
在执行上述SQL查询时,需要传递适当的参数以确保查询结果准确无误。以下是关键参数及其作用:
- `order_status`: 用于过滤订单状态。
- `update_time`: 用于筛选最近更新的数据。
- `limit` 和 `offset`: 用于分页控制,确保每次请求的数据量适中。
- `customer_source`: 用于指定CRM表单ID。
通过这些参数,我们可以灵活地控制数据请求的范围和粒度,从而提高数据处理效率。
#### 数据转换与写入
在获取并清洗完原始数据后,下一步是将其转换为目标系统所需的格式,并写入目标数据库。这一步通常涉及复杂的数据映射和转换逻辑,但在本文中不做详细探讨。
#### 实践案例
假设我们需要从商城订单系统中提取所有状态为“已完成”的订单,并将其同步到销帮帮合同接口。我们可以按照以下步骤进行操作:
1. **配置元数据**:如上所述,设置好主查询和扩展查询的SQL语句,以及必要的请求参数。
2. **执行查询**:通过轻易云平台发起POST请求,执行主查询语句获取订单基本信息。
3. **处理结果**:根据返回的订单编码,再次发起POST请求,执行扩展查询语句获取订单详情信息。
4. **数据清洗**:对返回的数据进行必要的格式化和清洗操作,以满足目标系统的要求。
5. **写入目标系统**:将处理后的数据写入销帮帮合同接口。
通过以上步骤,我们实现了从源系统MySQL接口select获取并加工商城订单数据的全过程。这不仅提高了数据集成效率,还确保了业务流程的透明性和可追溯性。
![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/S12.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台实现商城订单到销帮帮合同接口的ETL转换
在数据集成生命周期的第二阶段,我们将重点探讨如何将已集成的源平台数据进行ETL(提取、转换、加载)处理,转为目标平台销帮帮API接口所能接收的格式,并最终写入目标平台。本文将详细介绍如何配置元数据,以实现这一过程。
#### API接口配置
我们使用销帮帮提供的API接口`/pro/v2/api/contract/add`,通过POST方法提交合同数据。以下是元数据配置的关键字段及其含义:
```json
{
"api": "/pro/v2/api/contract/add",
"effect": "EXECUTE",
"method": "POST",
"number": "id",
"id": "id",
"name": "id",
"idCheck": true,
...
}
```
#### 请求参数配置
请求参数包括多个字段,其中一些字段是简单的字符串映射,而另一些则需要进行复杂的数据转换和处理。以下是主要字段及其配置说明:
1. **基础字段映射**
- `corpid` 和 `userId` 是固定值或简单映射值。
- `formId` 是表单ID,直接映射为固定值 `4802697`。
2. **合同基本信息**
- `serialNo`:合同编号,映射为 `{order_code}`。
- `text_15`:签约状态,映射为 `{whether_to_sign_new}`。
- `text_2`:客户名称(CRM客户ID),映射为 `{customer_id}`。
- `text_8`:签订人(crm用户ID),映射为 `{business_user_id}`。
- `date_1`:签订日期,通过函数 `_function UNIX_TIMESTAMP( {{create_time|UNIX_TIMESTAMP}} )` 转换时间戳。
3. **关联产品信息**
- `array_4`:关联产品,是一个数组字段,需要对每个产品进行详细配置,包括单价、折扣、售价等信息。通过 `_mongoQuery` 查询产品ID,并映射其他相关字段。
4. **付款时效**
- `array_5`:付款时效,通过解析器将字符串转换为数组。
5. **拆扣和优惠金额**
- `text_23`:拆扣,通过 `_function CASE WHEN ... THEN ... END` 实现条件判断。
- `num_28`:优惠金额,通过 `_function {product_amount}-{sales_amount}` 计算得出。
6. **其他费用和合同金额**
- `num_27` 和 `num_1` 分别表示其他费用和合同金额,直接映射相应值。
7. **客户信息**
- 客户创建日期、客户名称等信息通过 `_mongoQuery` 查询获取,并进行相应的字段映射。
#### 数据清洗与转换
在数据清洗与转换过程中,我们需要特别注意以下几点:
1. **时间戳转换**:
使用 `_function UNIX_TIMESTAMP( {{create_time|UNIX_TIMESTAMP}} )` 将原始时间格式转换为Unix时间戳,以符合目标平台要求。
2. **条件判断**:
使用 `_function CASE WHEN ... THEN ... END` 实现对拆扣范围的判断,根据不同区间设置不同的值。
3. **数组解析**:
对于需要解析为数组的字段,如付款时效和协同人等,通过解析器 `"parser":{"name":"StringToArray","params":","}` 将字符串按指定分隔符解析为数组格式。
4. **MongoDB查询**:
对于需要从MongoDB查询的数据,如关联产品信息和客户地址等,通过 `_mongoQuery` 实现动态查询,并将结果映射到相应字段。
#### 数据写入
完成所有数据清洗与转换后,通过POST请求将整理好的数据发送到销帮帮API接口,实现最终的数据写入。确保所有必填字段都已正确配置,并且数据格式符合API要求,以保证写入操作成功执行。
以上是使用轻易云数据集成平台实现商城订单到销帮帮合同接口ETL转换的详细步骤和技术要点。通过合理配置元数据和有效的数据处理方法,可以确保源平台的数据顺利转化并写入目标平台,实现系统间的数据无缝对接。
![用友与MES系统接口开发配置](https://pic.qeasy.cloud/T5.png~tplv-syqr462i7n-qeasy.image)