从金蝶到管易云:销售订单的数据转换与写入流程

  • 轻易云集成顾问-杨嫦
### 金蝶云星辰V2数据集成到管易云的技术案例分享 在系统对接集成中,如何实现金蝶云星辰V2与管易云之间的无缝数据同步一直是一个技术挑战。本文将详细探讨销售订单从金蝶 --> 管易的数据传输过程,通过使用轻易云数据集成平台,我们成功地解决了这一难题,实现了高效、可靠的数据同步。 #### 集成概述与关键技术点 本次案例中的核心任务是确保通过API接口(/jdy/v2/scm/sal_order)定时抓取金蝶云星辰V2的新销售订单,并将这些订单快速而准确地批量写入到管易云(gy.erp.trade.add)。要做到这一点,需要克服以下几个重要的技术问题: 1. **保障不漏单**:为了避免任何销售订单在传输过程中丢失,必须设计一套严密的检查和重试机制。在每次数据抓取后,我们都会记录当前读取的位置与时间标记,以便在下一次调用时能够精准定位未处理的数据。 2. **分页和限流处理**:由于API接口通常会针对响应结果进行分页且存在调用次数限制,为保证稳定性,我们依赖于巧妙设计的数据分页策略以及调用速率控制,在确保业务连续性的同时,也不会触发服务商的限流保护。 3. **格式差异转换**:金蝶云星辰V2和管易云之间的数据格式并不统一,因此需要对获取到的数据进行必要字段映射和转换。这不仅涉及基础字段匹配,还需考虑一些特殊逻辑转化,如编码标准不同、日期格式差异等。 4. **实时监控与日志记录**:为提升透明度,我们实现了全流程实时监控,每个步骤操作都被精细化记录。从初始请求发送,到返回结果解析,再至最终提交,都具备完整可追溯性,可以随时查看历史操作日志以追踪潜在问题。 5. **异常处理及错误重试机制**:当出现网络波动或意外故障导致某些请求失败时,系统会自动触发重试逻辑,并根据设定条件界限迅速恢复正常。例如,当检测到频繁超时报错,将切换备用通道继续尝试,而非直接放弃任务。 综上所述,这个项目充分利用轻易云提供的平台优势,通过合理配置元数据管理、灵活调度策略,以及完备的错误处理方案,达成了预期目标,将原本复杂繁琐的数据集成工作简化为一套高效可靠的方法论。如有进一步需求,请继续参阅具体实施内容。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/D1.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星辰V2接口获取并加工销售订单数据 在轻易云数据集成平台中,调用源系统接口是数据集成生命周期的第一步。本文将详细探讨如何通过调用金蝶云星辰V2接口`/jdy/v2/scm/sal_order`获取销售订单数据,并对其进行初步加工。 #### 接口调用配置 首先,我们需要配置元数据以便正确调用金蝶云星辰V2的API接口。以下是元数据配置的关键字段: - **api**: `/jdy/v2/scm/sal_order` - **effect**: `QUERY` - **method**: `GET` - **number**: `bill_no` - **id**: `id` - **name**: `{random}` - **idCheck**: `true` 这些字段定义了我们将要查询的API路径、请求方法以及一些必要的标识符。 #### 请求参数配置 为了确保我们能够准确获取所需的数据,必须配置请求参数。以下是一些关键参数及其描述: 1. **search**: 模糊搜索,类型为字符串,用于根据关键词进行模糊匹配。 2. **create_start_time** 和 **create_end_time**: 创建时间范围,分别表示开始和结束时间的时间戳(毫秒)。 3. **modify_start_time** 和 **modify_end_time**: 修改时间范围,分别表示开始和结束时间的时间戳(毫秒)。默认值为上次同步时间和当前时间。 4. **page** 和 **page_size**: 分页参数,分别表示当前页码和每页显示条数。 5. **start_bill_date** 和 **end_bill_date**: 单据日期范围,格式为`yyyy-MM-dd`。 6. **bill_status**: 单据状态,已审核为“C”,未审核为“Z”。 7. **bill_close_state**: 单据关闭状态,包括未关闭“C”、已关闭“S”和手动关闭“H”。 8. **bill_source**: 单据来源,默认值为“APP”。 9. **real_io_status** 和 **io_status**: 出库状态和执行状态,用于过滤不同状态的单据。 10. **total_fields**: 合计值字段,用于指定需要统计的合计值字段。 11. **order_by**: 排序说明,用于指定排序规则。 12. **show_material_total**: 是否统计商品种类和数量到单据,布尔类型。 #### 示例请求 以下是一个示例请求,通过GET方法调用API并传递上述参数: ```http GET /jdy/v2/scm/sal_order?search=&create_start_time=1672531199000&create_end_time=1672617599000&modify_start_time=1672531199000&modify_end_time=1672617599000&page=1&page_size=10&start_bill_date=&end_bill_date=&bill_status=C&bill_close_state=&bill_source=APP&real_io_status=&io_status=&total_fields=total,totalunsettleamount,totalinsamount,totalamount&order_by=&show_material_total=false Host: api.kingdee.com Authorization: Bearer {access_token} ``` #### 数据处理与清洗 在成功获取到销售订单数据后,需要对数据进行初步处理与清洗,以确保其适用于后续的数据转换与写入阶段。以下是一些常见的数据处理步骤: 1. **字段映射与重命名** - 将原始数据中的字段映射到目标系统所需的字段名称。例如,将`bill_no`映射为`order_number`。 2. **数据类型转换** - 将字符串类型的日期转换为标准日期格式,以便于后续处理。 3. **缺失值处理** - 对于缺失或异常的数据进行填补或剔除,以确保数据完整性。 4. **过滤无效记录** - 根据业务需求过滤掉不符合条件的记录,例如未审核或已关闭的单据。 #### 自动填充响应 在元数据配置中,我们设置了`autoFillResponse=true`,这意味着平台会自动填充响应结果中的相关信息。这一步骤简化了开发过程,使得我们可以更专注于业务逻辑而非底层实现细节。 通过上述步骤,我们能够高效地从金蝶云星辰V2接口获取并加工销售订单数据,为后续的数据转换与写入奠定坚实基础。在实际应用中,可以根据具体业务需求进一步优化和调整这些配置,以达到最佳效果。 ![用友与外部系统接口集成开发](https://pic.qeasy.cloud/S24.png~tplv-syqr462i7n-qeasy.image) ### 数据转换与写入:从金蝶到管易云的销售订单同步 在数据集成的过程中,将源平台的数据转换为目标平台所能接受的格式是关键的一步。本文将详细探讨如何利用轻易云数据集成平台,将金蝶系统中的销售订单数据,通过ETL(提取、转换、加载)过程,转换并写入到管易云API接口中。 #### 1. API接口元数据配置 首先,我们需要了解管易云API接口的元数据配置。以下是针对`gy.erp.trade.add` API接口的详细配置: ```json { "api": "gy.erp.trade.add", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ {"field":"shop_code","label":"店铺代码","type":"string","describe":"店铺代码","value":"_mongoQuery 15d531c8-d0e3-3799-887c-30c9dd36c109 findField=content.number where={\"content.id\" : {\"$eq\":\"{customer_id}\"}}"}, {"field":"vip_code","label":"会员代码","type":"string","describe":"会员代码","value":"{contact_linkman}"}, {"field":"platform_code","label":"平台单号","type":"string","describe":"平台单号","value":"{bill_no}"}, {"field":"warehouse_code","label":"仓库代码","type":"string","describe":"仓库代码","value":"{stock_number}"}, {"field":"business_man_code","label":"业务员","type":"string","describe":"业务员"}, {"field":"express_code","label":"物流公司","type":"string","describe":"物流公司","value":"{f_logistics_id}"}, {"field":"post_fee","label":"物流费用","type":"float","describe":"物流费用"}, {"field":"currency_code","label":"币别代码","type":"string","describe":"币别代码"}, {"field":"seller_memo","label":"卖家备注","type": "string", "describe": "卖家备注", "value": "_function REPLACE( '{remark}' ,'\\n','')"}, {"field": "cod", "label": "是否货到付款", "type": "bool", "describe": "是否货到付款"}, {"field": "deal_datetime", "label": "拍单时间", "type": "datetime", "describe": "拍单时间", "value": "{create_time}"}, {"field": "order_type_code", "label": "订单类型", "type": "string", "describe": "Sales-销售订单\nReturn-换货订单\nCharge-费用订单\nDelivery-补发货订单\nInvoice-补发票订单", "value": "Sales" }, {"field": "plan_delivery_date", "label": "预计发货时间", "type": "datetime", "describe": "预计发货时间" }, {"field": "cod_fee", "label": "买家到付服务费", "type": "float", "describe": "买家到付服务费" }, {"field": "other_service_fee", "label": "其他服务费", "type": "float", "describe": "其他服务费" }, {"field": "buyer_memo", "label": "买家留言", "type": ![金蝶云星空API接口配置](https://pic.qeasy.cloud/T6.png~tplv-syqr462i7n-qeasy.image)