商城订单数据处理流程:从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)