使用轻易云实现跨平台数据传输与转换:从汤臣倍健到金蝶云星辰

  • 轻易云集成顾问-林峰
### 汤臣倍健营销云数据集成到金蝶云星辰V2:采购入库同步-广州闽福 在复杂的企业运营中,系统间的数据对接和集成至关重要。本文将深入探讨如何通过轻易云数据集成平台,实现汤臣倍健营销云与金蝶云星辰V2的高效数据整合,具体案例为“采购入库同步-广州闽福”。 首先,我们需要解决的是确保汤臣倍健营销云接口的数据可以准确无误地抓取并批量写入到金蝶云星辰V2。汤臣倍健开放了/erp/api/order/query/purInWarehsOrder接口用于获取其销售管理系统中的采购入库单据,而这些数据信息需要被定时、可靠地提取,并通过/jdy/v2/scm/pur_inbound API快速、大量写入至金蝶后端系统。 ### 确保数据不漏单及处理分页与限流 为了保证从汤臣倍健营销云获取的数据没有遗漏,并能有效处理大数据量下的分页和限流问题,我们设计了一个定时任务来调用其API。每一次调用都会检查当前页码是否存在未拉取或缺失的数据,对于缓慢响应和超出限制频次的问题,通过异步请求队列进行合理调度,以确保整体流程平稳运行。 ### 处理数据格式差异与映射 由于两套系统使用不同的数据结构,需要对源头拿到原始JSON对象进行字段的转化和映射。这一过程可以在轻易云可视化界面上设置自定义传输规则,将所有必要的信息转换为符合目标API要求的格式。此外,根据业务需求,还需补充一些例如仓库编码等固定字段值,从而满足金蝶ERP输入标准。 ### 异常处理与错误重试机制 任何跨平台、多来源的大规模数据传输都不可避免会遇到各种失败情况。如网络波动导致请求丢失、服务出现短暂不可用等。在这种情况下,自定义异常捕获逻辑及重试机制就显得尤为关键。一旦发生错误,自动记录日志并按照预设规则重新发起操作,保证最终所有有效信息都能够顺利进入目的端数据库中去。 以上内容只是本次技术方案实施过程的一部分核心要点。在接下来的章节里,我们将详细介绍实现整个方案过程中各个步骤所涉及的方法细节,包括接口调优、性能优化以及实时监控手段等等,使大家能更全面深刻理解这一完整的系统集成功能运作模式。 ![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/D23.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统汤臣倍健营销云接口/erp/api/order/query/purInWarehsOrder获取并加工数据 在轻易云数据集成平台的生命周期中,调用源系统接口是数据处理的第一步。本文将详细探讨如何通过调用汤臣倍健营销云的接口`/erp/api/order/query/purInWarehsOrder`来获取采购入库数据,并对其进行初步加工。 #### 接口调用配置 首先,我们需要配置API调用的元数据。以下是该接口的元数据配置: ```json { "api": "/erp/api/order/query/purInWarehsOrder", "effect": "QUERY", "method": "POST", "number": "number", "id": "id", "idCheck": true, "request": [ {"field": "tenantId", "label": "经销商id", "type": "string", "describe": "经销商id(必填,营销云id)如:08e2fd9d074f4ef7b5e6416b74d006d6", "value": "xxx"}, {"field": "yxyNumber", "label": "营销云销售订单号", "type": "string", "describe": "如:lzwhy0121012002,传此参数时,其他时间状态等条件无效"}, {"field": "number", "label": "系统订单号", "type": "string", "describe": "如:CGDD00000003744,传此参数时,其他时间状态等条件无效"}, {"field": "status", "label": "订单状态", "type": "string", "describe":"0:未审核1:已审核(已出库)","value":"1"}, {"field":"beginTime","label":"开始时间","type":"string","describe":"timeType为空或者0,基于创建时间查询,timeType为1,基于更新时间查询,格式:0000-00-00或0000-00-0000:00:00,如果不传单号此字段必填","value":"{{LAST_SYNC_TIME|datetime}}"}, {"field":"endTime","label":"结束时间","type":"string","describe":"timeType为空或者0,基于创建时间查询,timeType为1,基于更新时间查询,格式:0000-00-00或0000-00-0000:00:00,如果不传单号此字段必填","value":"{{CURRENT_TIME|datetime}}"}, {"field":"pageNo","label":"页码","type":"string","describe":"默认1","value":"1"}, {"field":"pageSize","label":"每页条数","type":"string","describe":"默认30","value":"30"}, {"field":"timeType","label":"时间段标志","type":"string","describe":"查询时间段标识,0:创建时间(默认),1:最后更新时间","value":"1"} ], ... } ``` #### 请求参数详解 在调用该API时,需要提供一系列请求参数: - `tenantId`: 经销商ID,这是一个必填项,用于标识具体的经销商。 - `yxyNumber`: 营销云销售订单号,当传递此参数时,其它条件将被忽略。 - `number`: 系统订单号,同样地,当传递此参数时,其它条件将被忽略。 - `status`: 订单状态,这里我们设置为`1`表示已审核(已出库)。 - `beginTime` 和 `endTime`: 时间范围,用于限定查询的数据范围。这里使用动态变量`{{LAST_SYNC_TIME|datetime}}`和`{{CURRENT_TIME|datetime}}`分别表示上次同步时间和当前时间。 - `pageNo` 和 `pageSize`: 分页参数,用于控制每次请求的数据量。 - `timeType`: 时间段标志,这里设置为`1`表示基于最后更新时间进行查询。 #### 数据请求与清洗 在完成API调用后,我们会得到一个包含采购入库订单信息的响应数据。接下来需要对这些数据进行清洗和初步加工,以便后续的数据转换与写入步骤。 例如,我们可以通过以下方式对响应数据进行过滤和清洗: ```json { ... // 自动填充响应 autoFillResponse: true, // 数据过滤条件 condition_bk: [ [{"field": 'itemList.materialNumber', 'logic': 'notlike', 'value': 'F.A'}] ], condition: [ [{"field": 'itemList.materialNumber', 'logic': 'notlike', 'value': 'F.A'}] ] } ``` 上述配置中,通过设置`autoFillResponse: true`可以自动填充响应数据。同时,我们定义了两个过滤条件(`condition_bk`和`condition`),用于排除物料编号中包含“F.A”的记录。这些过滤条件确保了我们只处理符合业务需求的数据。 #### 实践案例 假设我们需要从汤臣倍健营销云获取某个特定经销商在最近一次同步后的所有已审核采购入库订单,并且排除物料编号中包含“F.A”的记录。我们可以按照以下步骤进行操作: 1. 配置API请求参数,包括经销商ID、状态、时间范围等。 2. 调用API并获取响应数据。 3. 对响应数据进行过滤和清洗,排除不符合条件的记录。 4. 将清洗后的数据存储到目标系统中,以便后续处理。 通过以上步骤,我们能够高效地从源系统获取并加工所需的数据,为后续的数据转换与写入奠定基础。这种方法不仅提高了数据处理的效率,还确保了数据的一致性和准确性。 ![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/S21.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星辰V2API接口 在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL转换,转为目标平台所能接收的格式,并最终写入目标平台。本文将详细探讨如何使用轻易云数据集成平台,将采购入库数据转换为金蝶云星辰V2API接口所能接收的格式,并写入目标系统。 #### API接口配置与元数据定义 在本案例中,我们需要将采购入库数据同步到金蝶云星辰V2。为了实现这一目标,我们需要配置相应的API接口和元数据。以下是具体的元数据配置: ```json { "api": "/jdy/v2/scm/pur_inbound", "effect": "EXECUTE", "method": "POST", "number": "1", "id": "1", "name": "1", "idCheck": true, "request": [ {"field":"bill_date","label":"单据日期","type":"string","describe":"单据日期","value":"{{auditTime|date}}"}, {"field":"bill_no","label":"单据编码","type":"string","describe":"单据编码"}, {"field":"transtype","label":"业务类型","type":"string","describe":"数量","value":"2"}, {"field":"supplier_id","label":"供应商编码","type":"string","describe":"供应商编码","value":"1534696370303159296"}, {"field":"remark","label":"备注","type":"string","describe":"商品编码","value":"{remark}-来自营销云-{yxyNumber}"}, { "field": "custom_field", "label": "自定义字段", "type": "object", "children": [ {"field": "custom_field__1__2uvipsxiexanc2", "label": "营销云单号", "type": "string", "value": "{number}"} ] }, { "field": "material_entity", "label": "商品分录", "type": "array", "describe": "含税单价", "value": "itemList", "children":[ {"field": "material_number", "label": "商品编码", "type": "string", describe: 商品编码, value: "{extMaterialNo}"}, {"field": stock_id, label: 仓库编码, type: string, describe: 仓库编码, value: 1535524624127762432}, {"field": is_free, label: 是否赠品, type: int, describe: 是否赠品, value: false}, {"field": qty, label: 数量, type: string, describe: 数量, value: {{itemList.opernumber}}}, { field: unit_id, label: 单位, type: string, describe: 单位, value: _findCollection find base_unit_id from d34b034c-bf37-3451-bb0a-b9693a86279a where number={extMaterialNo} }, {field: batch_no, label: 批次号, type: string, value: {{itemList._Flot}}}, {field: kf_date, label: 生产日期, type: string, value: {{itemList._Fmfg}}}, {field:kf_period,label:"保质期天数",type:"string",value:"2"}, {field:"valid_date",label:"有效日期",type:"string",value:"{{itemList._Fexp}}"}, {field:kf_type,label:"保质期类型",type:"string",describe:"1\/天,2\/月,3\/年(保质期商品必填)",value:"3"}, {field:"tax_price",label:"含税单价",type:"string",describe:"含税单价",value:"_function {{itemList.taxlastmoney}}\/{{itemList.opernumber}}"}, {field:"cess",label:"税率",type:"string",describe:"税率"}, {field:"all_amount",label:"价税合计",type:string,value="{{itemList.taxlastmoney}}"} ] } ] } ``` #### 数据请求与清洗 首先,我们需要从源系统获取采购入库的数据。在轻易云平台上,可以通过配置相应的数据请求来实现这一点。假设我们已经成功获取了原始数据,接下来需要对这些数据进行清洗和预处理,以确保其符合目标系统的要求。 例如,对于日期字段`bill_date`,我们可以使用模板引擎将其格式化为目标系统所需的格式: ```json {"field":"bill_date","label":"单据日期","type":"string","describe":"单据日期","value":"{{auditTime|date}}"} ``` #### 数据转换与映射 在完成数据清洗后,我们需要根据元数据配置,将源系统的数据字段映射到目标系统的字段。例如,对于商品分录中的`material_number`字段,我们可以这样进行映射: ```json {"field": material_number,"label" : 商品编码,"type" : string,"describe" : 商品编码,"value" : "{extMaterialNo}"} ``` 类似地,对于其他字段,如仓库编码、数量、单位等,也需要按照元数据配置进行相应的映射和转换。 #### 数据写入 在完成所有必要的数据转换和映射后,我们可以通过调用金蝶云星辰V2API接口,将处理后的数据写入目标系统。具体来说,可以通过HTTP POST请求,将转换后的JSON对象发送到API端点`/jdy/v2/scm/pur_inbound`。 以下是一个示例代码片段,用于发送HTTP POST请求: ```python import requests url = 'https://api.kingdee.com/jdy/v2/scm/pur_inbound' headers = {'Content-Type': 'application/json'} data = { # 转换后的JSON对象 } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print('Data successfully written to Kingdee Cloud') else: print('Failed to write data:', response.text) ``` 通过上述步骤,我们可以实现从源系统到金蝶云星辰V2的无缝数据集成。轻易云平台提供了强大的ETL功能,使得这一过程变得高效且透明。 ![打通用友BIP数据接口](https://pic.qeasy.cloud/T11.png~tplv-syqr462i7n-qeasy.image)