使用轻易云平台实现销售订单跨系统数据转换与集成

  • 轻易云集成顾问-卢剑航
### 销售订单对接案例分享:从旺店通·企业奇门到金蝶云星空的高效数据集成 在销售订单管理中,跨系统的数据集成经常面临诸多技术挑战。此次我们聚焦一个实际案例——将旺店通·企业奇门的销售订单数据集成到金蝶云星空,以期通过该解决方案提升整体业务流程和系统协同效率。本方案命名为“销售订单对接(非一键代发)”。 #### 集成背景及目标 本次数据集成旨在实现定时可靠地抓取旺店通·企业奇门接口`wdt.trade.query`获取销售订单,并快速批量写入至金蝶云星空,通过调用其API接口`batchSave`完成数据保存。这一过程中需要重点关注如何确保不漏单、大量数据快速写入、处理分页和限流问题,以及应对两大平台间可能存在的数据格式差异。 #### 系统对接分析 1. **如何调用旺店通·企业奇门接口wdt.trade.query**: 旺店通提供了丰富的API接口,其中`wdt.trade.query`用于获取已生成的销售订单数据,该接口具有较强的数据检索能力,但也需注意其分页机制和速率限制。为此,我们采用了定时任务策略,每隔一定时间触发一次查询请求,保证能实时准确拉取最新订单。 2. **处理分页与限流问题**: 由于每个请求返回的数据量有限且有速率限制,因此需设计合理的分页机制,并引入重试策略以确保所有页面均被成功读取。在本案中,通过设置适当的page_size参数以及计算每页偏移量来遍历全部待提取记录。此外,还使用了累积次数控制器,当达到上限时自动暂停并等待冷却期后再继续执行,从而有效防止触发频率限制错误。 3. **大量数据快速写入到金蝶云星空**: 在获取完整要传输的销售订单后,利用金蝶云星空提供的批量保存API `batchSave`实现高效存储。针对批处理操作,需要特别优化提交速度及失败后的回滚与重试逻辑,以确保全部数据能够安全稳定地导入目的库中。同时,在映射规则方面,也进行了一系列定制化调整,使得两端字段对应关系更加匹配准确。 综上所述,本示范案例详细解析了如何配置使用轻易云等平台功能模块,实现从源头抓取、清洗转换,到最终落地目的库的一条龙服务。只有深刻理解各环节之间潜在逻辑关联和互动细节才能达致最佳效果,而上述过程正是 ![打通企业微信数据接口](https://pic.qeasy.cloud/D10.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·企业奇门接口wdt.trade.query获取并加工数据 在数据集成生命周期的第一步中,调用源系统接口获取数据是至关重要的一环。本文将深入探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.trade.query`,并对获取的数据进行初步加工。 #### 接口概述 `wdt.trade.query`接口用于查询销售订单信息,支持多种查询条件和分页功能。该接口采用POST请求方式,返回符合条件的订单数据。 #### 请求参数配置 在调用该接口时,需要配置一系列请求参数,以确保能够准确获取所需的数据。以下是关键请求参数及其配置说明: 1. **status(订单状态)**: - 类型:string - 描述:订单状态。如果不传该字段则查询所有订单。 - 示例值:5(已取消)、10(待付款)等。 2. **start_time(开始时间)**: - 类型:string - 描述:按最后修改时间增量获取数据,格式为`yyyy-MM-dd HH:mm:ss`。 - 示例值:`{{LAST_SYNC_TIME|datetime}}` 3. **end_time(结束时间)**: - 类型:string - 描述:按最后修改时间增量获取数据,格式为`yyyy-MM-dd HH:mm:ss`。 - 示例值:`{{CURRENT_TIME|datetime}}` 4. **src_tid(原始单号)**: - 类型:string - 描述:如果使用原始单号,其余参数不起效。 5. **trade_no(订单编号)**: - 类型:string - 描述:系统订单编号,默认单号为JY开头。 6. **shop_nos(店铺编号)**: - 类型:string - 描述:代表店铺所有属性的唯一编码,用于区分不同店铺的数据。 7. **warehouse_no(仓库编号)**: - 类型:string - 描述:代表仓库所有属性的唯一编码,用于区分不同仓库的数据。 8. **page_size(分页大小)**: - 类型:string - 描述:每页返回的数据条数,范围1~100。 - 示例值:40 9. **page_no(页号)**: - 类型:string - 描述:分页页码,从0页开始。 #### 数据过滤与条件设置 为了确保获取的数据符合业务需求,可以在请求中添加过滤条件。例如: - 订单状态大于等于95,即已发货或更高状态。 - 仓库编号不包含特定值,如“WH”开头的仓库。 - 排除特定销售人员和客户,如“穆思乐”和销售员ID为6的记录。 这些条件可以通过以下配置实现: ```json "condition":[[ {"field":"trade_status","logic":"egt","value":"95"}, {"field":"warehouse_no","logic":"notlike","value":"WH"}, {"field":"fullname","logic":"neqv2","value":"穆思乐"}, {"field":"salesman_id","logic":"neqv2","value":"6"}, {"field":"goods_list.refund_status","logic":"neqv2","value":"5"}, {"field":"shop_no","logic":"notin","value":"202009,203003,202006"} ]] ``` #### 数据请求与清洗 在完成请求参数和过滤条件的配置后,可以通过轻易云平台发起API调用。平台会自动处理请求并返回结果。在数据返回后,需要对数据进行清洗和初步加工,以便后续的数据转换与写入操作。 清洗过程包括但不限于: - 去除无效或重复记录。 - 格式化日期和数值字段。 - 根据业务规则进行数据校验和修正。 #### 实际案例应用 假设我们需要获取最近一天内所有已发货且未退款的订单,并排除特定仓库和销售人员。可以按照以下步骤配置并调用接口: 1. 设置时间范围: ```json "start_time": "{{LAST_SYNC_TIME|datetime}}", "end_time": "{{CURRENT_TIME|datetime}}" ``` 2. 添加过滤条件: ```json "condition":[[ {"field":"trade_status","logic":"egt","value":"95"}, {"field":"warehouse_no","logic":"notlike","value":"WH"}, {"field":"fullname","logic":"neqv2","value":"穆思乐"}, {"field":"salesman_id","logic":"neqv2","value":"6"}, {"field":"goods_list.refund_status","logic":"neqv2","value":"5"} ]] ``` 3. 配置分页参数: ```json "page_size": 40, "page_no": 0 ``` 通过上述配置,可以高效地从旺店通系统中提取符合业务需求的订单数据,并为后续的数据处理做好准备。这一步骤不仅确保了数据的准确性和完整性,还为整个数据集成流程奠定了坚实基础。 ![打通金蝶云星空数据接口](https://pic.qeasy.cloud/S26.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将销售订单数据转换并写入金蝶云星空API接口 在数据集成过程中,第二步至关重要,即将已经集成的源平台数据进行ETL(提取、转换、加载)转换,并转为目标平台所能接收的格式。本文将详细探讨如何利用轻易云数据集成平台,将销售订单数据转换并通过金蝶云星空API接口写入目标系统。 #### 配置元数据 为了实现这一目标,我们需要配置元数据,以确保数据能够正确映射到金蝶云星空的API接口。以下是一个详细的元数据配置示例: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{trade_no}"}, {"field":"FBillTypeID","label":"单据类型","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"XSDD11_SYS"}, {"field":"FSaleOrgId","label":"销售组织","type":"string","describe":"销售组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"}, {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{trade_time}"}, {"field":"FCustId","label":"客户","type":"string","describe":"客户","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{shop_no}"}, {"field":"FSaleDeptId","label":"销售部门","type":"string","value":"BM003","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"F_RDIY_Text","label":"原始订单","type":"string","value":"{src_tids}"}, {"field":"FSalerId","label":"销售员","type": "string", "describe": "销售员", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}, "value": "YG0002_GW002_1"}, {"field": "FNote", "label": "备注", "type": "string", "describe": "备注", "value": "{remark}"}, {"field": "F_RDIY_Text2", "label": "F分销商", "type": "string", "value": "{fenxiao_nick}"}, { "field": "FSaleOrderFinance", "label": "财务信息", "type": "object", ... }, { ... } ], ... } ``` #### 数据转换与映射 在上述配置中,每个字段都包含了其在源平台中的对应值。例如,`FBillNo` 对应于 `{trade_no}`,这意味着我们需要从源平台的数据中提取 `trade_no` 并将其映射到金蝶云星空的 `FBillNo` 字段。 一些字段需要特殊处理,例如 `FCustId`,它使用了 `ConvertObjectParser` 来解析其值。这种解析器通常用于将源系统中的值转换为目标系统所需的格式或编码。 #### 嵌套对象和数组处理 对于复杂的数据结构,如嵌套对象和数组,我们需要特别注意其配置。例如,财务信息 `FSaleOrderFinance` 和订单明细 `FSaleOrderEntry` 都是嵌套结构: ```json { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { field: 'FSaleOrderEntry', label: '订单明细', type: 'array', describe: '订单明细', children: [ { field: 'FMaterialId', label: '物料编码', type: 'string', describe: '物料编码', parser: { name: 'ConvertObjectParser', params: 'FNumber' }, value: '{{goods_list.spec_no}}' }, { field: 'FTaxPrice', label: '含税单价', type: 'string', describe: '含税单价', value: '{{goods_list.share_price}}' }, { field: 'FEntryTaxRate', label: '税率', type: 'string', describe: '税率', value: '_function {{goods_list.tax_rate}}*100' }, { field: 'FQty', label: '销售数量', type: 'string', describe: '销售数量', value: '{{goods_list.num}}' }, { field: 'FStockOrgId', label: '库存组织', type:' string ', describe:' 库存组织 ', parser:{ name:' ConvertObjectParser ', params:' FNumber'}, value:'100'}, { field:' FIsFree ', label:' 是否赠品 ', type:' string ', value:' _function case {{goods_list.order_price}} when ''0.0000'' then ''true'' else ''false'' end'}, { field:' FSOStockId ', label:' 仓库 ', type:' string ', value:'{warehouse_no}', parser:{ name:' ConvertObjectParser ', params:' FNumber'}}, { field:' F_RDIY_Amount4 ', label:' F分摊邮费 ', type:' string ', value:'{share_post}'}, { field:' F_RDIY_Text6 ', label:' 子订单主键 ', type:' string ', value:''{{goods_list.rec_id}}'} ] } ] } ] } ] } ] } ] } } ``` 在这个例子中,我们定义了一个数组 `FSaleOrderEntry`,其中每个元素都包含多个字段,如 `FMaterialId`, `FTaxPrice`, `FQty` 等。每个字段都从源平台的数据中提取相应的值,并进行必要的转换。 #### API调用与写入 完成所有字段的映射和转换后,我们可以使用 HTTP POST 方法将数据发送到金蝶云星空 API 接口。以下是一个示例请求: ```json { ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., } ``` #### 总结 通过以上步骤,我们可以利用轻易云数据集成平台,将复杂的销售订单数据进行ETL转换,并通过金蝶云星空API接口成功写入目标系统。这一过程不仅提高了数据处理效率,还确保了不同系统之间的数据一致性和准确性。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/T10.png~tplv-syqr462i7n-qeasy.image)