使用管易云API接口实现历史发货单数据清洗与写入步骤

  • 轻易云集成顾问-冯潇
### 管易销售发货单到金蝶销售出库单的系统对接集成案例分享 在实际业务场景中,将管易云·奇门中的历史订单数据集成到金蝶云星空,以实现电商平台与ERP系统之间的数据同步,是一项常见但极具挑战性的任务。本篇将聚焦于使用轻易云数据集成平台,为"管易销售发货单-->金蝶销售出库单(电商 历史订单)"方案提供技术详细。 首先,重要的一环是通过管易云·奇门API `gy.erp.trade.deliverys.history.get` 接口,实现历史发货单数据的可靠抓取。为确保高吞吐量和稳定性,我们设计了定时任务定期调用该接口,并处理分页和限流问题。此外,集中监控和告警体系能够实时跟踪任务状态,一旦出现异常,如API请求失败或响应时间过长,即刻触发告警机制,保障集成过程不漏单。 获取到的原始数据往往未必完全符合目标系统金蝶云星空的需求,因此我们需要进行自定义的数据转换逻辑。这一步骤涉及字段映射、格式转化等操作,以确保输入数据与目标系统所需格式一致。在这方面,可视化的数据流设计工具发挥了巨大的优势,使得复杂的数据转换过程变得直观且可管理。 接下来,通过调用金蝶云星空的 `batchSave` API,我们将处理后的批量资料快速写入至其数据库内。同样地,为应对可能出现的异常情况,还部署了错误重试机制,当写入操作失败时自动重新尝试。 归根结底,无论是接口间数据结构差异、分页限流处理,还是批量写入与监控告警,各个环节都严密结合,从而实现高效、安全、可靠的数据集成。 ![如何开发用友BIP接口](https://pic.qeasy.cloud/D19.png~tplv-syqr462i7n-qeasy.image) ### 使用管易云·奇门接口gy.erp.trade.deliverys.history.get获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何使用管易云·奇门接口`gy.erp.trade.deliverys.history.get`获取销售发货单的历史数据,并对其进行初步加工。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。根据提供的元数据配置,我们可以看到该接口采用POST方法进行请求,主要用于查询历史发货单数据。以下是关键字段的配置: - `start_create` 和 `end_create`: 用于指定创建时间的开始和结束段。 - `start_modify_date` 和 `end_modify_date`: 用于指定修改时间的开始和结束段。 - `delivery`: 发货状态,值为1表示发货成功。 - `start_delivery_date` 和 `end_delivery_date`: 发货时间的开始和结束段,分别使用上次同步时间和当前时间作为默认值。 - 其他字段如`warehouse_code`、`shop_code`、`outer_code`等,用于进一步过滤查询结果。 分页参数也需要特别注意: - `page_no`: 页码,默认值为1。 - `page_size`: 每页大小,默认值为20。 #### 请求示例 基于上述配置,我们可以构建一个请求示例: ```json { "api": "gy.erp.trade.deliverys.history.get", "method": "POST", "params": { "start_create": "2023-01-01T00:00:00", "end_create": "2023-01-31T23:59:59", "delivery": 1, "start_delivery_date": "{{LAST_SYNC_TIME|datetime}}", "end_delivery_date": "{{CURRENT_TIME|datetime}}", "page_no": 1, "page_size": 20 } } ``` #### 数据清洗与转换 在获取到原始数据后,需要对其进行清洗和转换,以便后续写入目标系统。在这个过程中,可以利用平台提供的自动填充响应功能(autoFillResponse),简化部分字段的处理。 例如,对于返回的数据结构中的发货单列表(deliverys),我们可以直接映射到目标系统所需的字段格式。同时,根据条件过滤掉不需要的数据,如平台编码不包含特定字符串或订单类型不为礼品等。 以下是一个简单的数据清洗示例: ```python def clean_data(raw_data): cleaned_data = [] for record in raw_data['deliverys']: if record['platform_code'] not in ['XXXSDD', 'CKSQ'] and \ record['details']['order_type'] not in ['gift', 'Maintain'] and \ record['details']['item_code'] != 'fapiao': cleaned_record = { 'code': record['code'], 'warehouse_code': record['warehouse_code'], 'shop_code': record['shop_code'], 'outer_code': record['outer_code'], 'mail_no': record['mail_no'], 'delivery_date': record['delivery_date'] } cleaned_data.append(cleaned_record) return cleaned_data ``` #### 数据写入 经过清洗和转换的数据可以直接写入目标系统。在轻易云数据集成平台中,这一步通常通过配置相应的目标系统接口来实现。确保每个字段都正确映射,并根据业务需求进行必要的数据校验和处理。 例如,将清洗后的数据写入金蝶销售出库单时,可以配置相应的API接口,并确保字段匹配: ```json { "api": "kingdee.sales.outbound.add", "method": "POST", "params": { // 映射后的字段 } } ``` 通过以上步骤,我们实现了从管易云·奇门接口获取历史发货单数据,并对其进行清洗、转换和写入目标系统的完整流程。这不仅提高了数据处理效率,也确保了数据的一致性和准确性。 ![金蝶与CRM系统接口开发配置](https://pic.qeasy.cloud/S22.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台:将源数据转换为金蝶云星空API格式并写入 在轻易云数据集成平台中,ETL(提取、转换、加载)过程的第二步至关重要,即将已经集成的源平台数据进行转换,使其符合目标平台金蝶云星空API接口的要求,并最终写入目标平台。本文将深入探讨如何利用元数据配置完成这一过程。 #### 元数据配置解析 元数据配置是ETL过程中的核心部分,它定义了如何将源数据映射到目标系统所需的格式。以下是对关键元数据字段的详细解析: 1. **单据类型(FBillTypeID)** - 配置:`{"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"XSCKD12_SYS"}` - 解析:使用`ConvertObjectParser`将固定值`XSCKD12_SYS`转换为目标系统可识别的单据类型编码。 2. **单据编号(FBillNo)** - 配置:`{"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号"}` - 解析:直接从源数据中提取,无需额外转换。 3. **日期(FDate)** - 配置:`{"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{{delivery_statusInfo.delivery_date}}"}` - 解析:通过模板变量从源数据中提取发货日期。 4. **销售组织(FSaleOrgId)和发货组织(FStockOrgId)** - 配置示例: ```json {"field":"FSaleOrgId","label":"销售组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_function CASE '{shop_code}' WHEN 'SXF001' THEN '103' WHEN 'SXF002' THEN '103' ELSE '100' END"} ``` - 解析:根据店铺代码动态映射销售组织和发货组织,使用SQL风格的CASE语句实现条件判断。 5. **客户(FCustomerID)** - 配置:`{"field":"FCustomerID","label":"客户","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find FNumber from dc704b79-f3da-309a-9d2d-88456a5cbcd9 where F_352_waibuma={shop_code}"}` - 解析:通过`_findCollection`函数从指定集合中查找客户编码,结合店铺代码进行匹配。 6. **货主类型和货主(FOwnerTypeIdHead, FOwnerIdHead)** - 配置示例: ```json {"field":"FOwnerTypeIdHead","label":"货主类型","type":"string","describe":"货主类型","value":"BD_OwnerOrg"}, {"field":"FOwnerIdHead","label":"货主","type": "string", "describe": "货主", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}, "value": "_function CASE '{shop_code}' WHEN 'SXF001' THEN '103' ELSE '100' END"} ``` - 解析:固定值和动态映射相结合,确保货主信息准确无误。 7. **明细信息(FEntity)** - 配置: ```json {"field": "FEntity", "label": "明细信息", "type": "array", "describe": "明细信息", "value": "details", "children":[ {"field": "FMaterialID", "label": "物料编码", "type": "string", "describe": "基础资料", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}, "value": "_findCollection find FNumber from a430738b-c21a-3683-832c-4b519dc241ba where F_UQRW_Text={{details.item_code}}"}, {"field": "FUnitID", "label": "库存单位", "type": "string", "value": "_findCollection find FBaseUnitId_FNumber from a430738b-c21a-3683-832c-4b519dc241ba where F_UQRW_Text={{details.item_code}}"}, {"field": "FRealQty", "label": “实发数量”, “type”: “string”, “describe”: “数量”, “value”: “{{details.qty}}”} ]} ``` - 解析:通过嵌套结构处理复杂的明细信息,每个子字段均有独立的转换逻辑,如物料编码、库存单位等。 8. **物流跟踪明细(FOutStockTrace)** - 配置: ```json {"field": “FOutStockTrace”, “label”: “物流跟踪明细”, “type”: “array”, “children”: [ {"field”: “FCarryBillNo”, “label”: “物流单号”, “type”: “string”, “value”: "{express_no}"}, {"field”: “FLogComId”, “label”: “物流公司”, “type”: ”string”, ”parser”: {“name”: ”ConvertObjectParser”, ”params”: ”FCODE”}, ”mapping”:{“target”:”6567f13a3b91c238504d2c66”,”direction”:”positive”}}, {"field”:”FPhoneNumber”,”label”:”寄件人手机号”,”type”:”string”,”value”:"_function RIGHT('{receiver_mobile}', 4)"} ]} ``` - 解析:处理物流相关信息,包括物流单号、公司及寄件人手机号等,通过函数和映射实现复杂字段转换。 #### API调用与写入 在完成所有字段的转换后,最终需要通过API接口将处理后的数据写入金蝶云星空。以下是关键步骤: 1. **定义业务对象表单ID** ```json {"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"SAL_OUTSTOCK"} ``` 2. **执行操作** ```json {"field":"Operation","label":"执行的操作","type":"string","describe":"执行的操作","value":"Save"} ``` 3. **提交并审核** ```json {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","describe":"提交并审核","value":"true"} ``` 4. **批量保存方法调用** ```json { operation: { rowsKey: 'array', rows: 1, method: 'batchArraySave' } } ``` 通过上述步骤,轻易云数据集成平台能够有效地将源平台的数据经过ETL处理后,转换为金蝶云星空API接口所能接受的格式,并成功写入目标系统。这一过程确保了不同系统间的数据无缝对接,提高了业务流程的自动化和效率。 ![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/T27.png~tplv-syqr462i7n-qeasy.image)