数据集成与ETL:从旺店通调拨单到金蝶云星空的技术实现

  • 轻易云集成顾问-何语琴
### 案例分享:旺店通·企业奇门数据集成到金蝶云星空 在本案例中,我们将解析一个具体的系统对接集成任务,涉及将旺店通·企业奇门中的调拨单数据高效同步至金蝶云星空。该方案名为“旺店通调拨单同步--114”,通过特定API接口实现数据的可靠抓取和批量写入。 #### 接口概述 为了实现这一目标,我们主要使用两个关键API: - 旺店通·企业奇门获取数据的API:`wdt.stock.transfer.query` - 金蝶云星空写入数据的API:`batchSave` #### 数据获取与处理 首先,通过调用`wdt.stock.transfer.query`接口从旺店通·企业奇门系统中提取调拨单数据。为了确保高吞吐量的数据处理能力,并应对分页与限流问题,需要设计合理的数据抓取策略,例如按批次进行请求,同时使用可靠的日志记录来跟踪每次接口调用状态。 ```python import requests def get_transfer_data(offset, limit): url = "https://api.wdt.com/enterprise/query" params = { "method": "wdt.stock.transfer.query", "offset": offset, "limit": limit, # 其他必要参数如认证信息等... } response = requests.get(url, params=params) if response.status_code == 200: return response.json() else: # 错误处理逻辑 pass # 示例调用 transfer_data = get_transfer_data(0, 100) ``` #### 数据转换与映射 在获得原始数据后,需要通过自定义的数据转换逻辑,将其格式调整为金蝶云星空所需的格式。这一步骤至关重要,特别是要注意字段类型和命名规范之间的差异,通过可视化的数据流设计工具,可以直观地管理这些转换规则。 ```python def transform_to_kingdee_format(raw_data): transformed_data = [] for item in raw_data["data"]: transformed_item = { "field1_in_kingdee": item["field1_in_wdt"], # 更多字段映射... } transformed_data.append(transformed_item) return {"data": transformed_data} # 示例转换过程 transformed_result = transform_to_kingdee_format(transfer_data) ``` #### 数据写入及监控配置 最后,经由转化后的数据需要利用`batchSave` API批量写入至金蝶云星空。在此过程中,为了确保不漏单且所有操作均有据可查,应设置实时监控机制及错误重试机制,以应对可能出现的问题,如网络波动或接口响应异常 ![如何对接钉钉API接口](https://pic.qeasy.cloud/D5.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台调用旺店通·企业奇门接口获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stock.transfer.query`,并对获取的数据进行初步加工。 #### 接口调用配置 首先,我们需要配置元数据以便正确调用`wdt.stock.transfer.query`接口。以下是元数据配置的关键部分: ```json { "api": "wdt.stock.transfer.query", "method": "POST", "number": "transfer_no", "id": "transfer_id", "pagination": { "pageSize": 100 }, "idCheck": true, "request": [ {"field":"start_time","label":"开始时间","type":"datetime","value":"{{LAST_SYNC_TIME|datetime}}"}, {"field":"end_time","label":"结束时间","type":"datetime","value":"{{CURRENT_TIME|datetime}}"}, {"field":"from_warehouse_no","label":"源仓库","type":"string"}, {"field":"to_warehouse_no","label":"目标仓库","type":"string"}, {"field":"status","label":"调拨单状态","type":"string","value":"90"} ], "otherRequest": [ {"field":"page_size","label":"分页大小","type":"string","value":"{PAGINATION_PAGE_SIZE}"}, {"field":"page_no","label":"页号","type":"string","value":"{PAGINATION_START_PAGE}"} ], "condition_bk": [ [{"field": "remark", "logic": "like", "value": "114"}] ] } ``` #### 请求参数详解 - **开始时间和结束时间**:通过`start_time`和`end_time`字段,我们可以指定查询的时间范围。这里使用了动态变量`{{LAST_SYNC_TIME|datetime}}`和`{{CURRENT_TIME|datetime}}`,确保每次同步时都能获取最新的数据。 - **源仓库和目标仓库**:通过`from_warehouse_no`和`to_warehouse_no`字段,可以指定调拨单的源仓库和目标仓库。 - **调拨单状态**:通过设置状态为90,过滤出特定状态的调拨单。 - **分页参数**:为了处理大批量数据,设置了分页参数,包括每页大小(page_size)和页号(page_no)。 #### 数据请求与清洗 在成功调用接口并获取数据后,需要对数据进行初步清洗。这一步骤包括但不限于以下操作: 1. **去除冗余字段**:只保留必要的字段,如调拨单号(transfer_no)、调拨单ID(transfer_id)等。 2. **格式转换**:将日期格式统一转换为标准格式,以便后续处理。 3. **数据过滤**:根据业务需求进一步过滤不符合条件的数据。例如,通过条件备份(condition_bk)中的逻辑条件,只保留备注包含“114”的记录。 #### 实际案例 假设我们需要从2023年1月1日到2023年1月31日之间,查询所有状态为90、备注包含“114”的调拨单。具体请求参数如下: ```json { "start_time": "2023-01-01T00:00:00", "end_time": "2023-01-31T23:59:59", "status": "90", "remark_like": "%114%", "page_size": 100, "page_no": 1 } ``` 通过上述配置,我们可以顺利调用接口并获取所需数据。接下来,我们需要对返回的数据进行清洗和转换,以便后续写入目标系统。 #### 数据转换与写入 在完成数据请求与清洗后,将清洗后的数据转换为目标系统所需的格式,并写入目标系统。这一步通常包括以下操作: 1. **字段映射**:将源系统字段映射到目标系统对应字段。 2. **数据验证**:确保所有必填字段都有值,并符合目标系统的数据规范。 3. **批量写入**:为了提高效率,可以采用批量写入的方式,将处理好的数据一次性写入目标系统。 通过以上步骤,我们可以实现从旺店通·企业奇门接口到目标系统的数据无缝对接,提高业务透明度和效率。 以上就是使用轻易云数据集成平台调用旺店通·企业奇门接口获取并加工数据的详细技术流程。希望这些技术细节能为您的实际项目提供有价值的参考。 ![钉钉与ERP系统接口开发配置](https://pic.qeasy.cloud/S17.png~tplv-syqr462i7n-qeasy.image) ### 数据集成与ETL转换:从旺店通调拨单到金蝶云星空API接口 在数据集成过程中,将源平台的数据转换为目标平台所能接收的格式是关键步骤之一。本文将深入探讨如何利用轻易云数据集成平台,将旺店通调拨单的数据通过ETL转换,最终写入金蝶云星空API接口。 #### API接口配置与调用 首先,我们需要了解金蝶云星空API接口的配置。根据元数据配置,目标API为`batchSave`,请求方法为`POST`。我们需要确保请求中的字段和数据格式符合金蝶云星空的要求。 ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "request": [ {"field":"FBillNo","label":"单据编号","type":"string","value":"{transfer_no}-TC"}, {"field":"FBillTypeID","label":"单据类型","type":"string","value":"ZJDB01_SYS","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"FBizType","label":"业务类型","type":"string","value":"NORMAL"}, {"field":"FTransferDirect","label":"调拨方向","type":"string","value":"GENERAL"}, {"field":"FTransferBizType","label":"调拨类型","type":"string","value":"InnerOrgTransfer"}, {"field":"FStockOutOrgId","label":"调出库存组织","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"114"}, {"field":"FOwnerOutIdHead","label":"调出货主","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"114"}, {"field":"FStockOrgId","label":"调入库存组织","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"114"}, {"field":"FDate","label":"日期","type":"string","value":"{created}"}, {"field":"FNote","label":"备注","type":"string","value":"{remark}"}, { "field": "FBillEntry", "label": "明细信息", "type": "array", "children": [ {"field": "FMaterialId", "label": "物料编码", "type": "string", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}, "value": "{{details_list.spec_no}}", "parent": "FBillEntry"}, {"field": "FCMKBarCode", "label": "零售条形码", "type": "string", "parent": "FBillEntry"}, {"field": "FQty", "label": "调拨数量", "type": "string", "value": "{{details_list.num}}", "parent": "FBillEntry"}, {"field": "FSrcStockId", "label": "调出仓库", "type": "string", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}, "value": "{from_warehouse_no}", "parent": "FBillEntry"}, {"field": "FDestStockId", "label": "调入仓库", "type": "string", "value: "{to_warehouse_no}", parser: {name: ConvertObjectParser, params: FNumber}, parent: FBillEntry}, { field: FNoteEntry, label: 备注, type: string, value: {{details_list.remark}}, parent: FBillEntry }, { field: FISFREE, label: 赠品, type: string, parent: FBillEntry } ], value: details_list } ], otherRequest:[ { field:"FormId", label:"业务对象表单Id", type:"string", value:"STK_TransferDirect"}, { field:"IsAutoSubmitAndAudit", label:"提交并审核", type:"bool", value:"true"}, { field:"IsVerifyBaseDataField", label:"验证基础资料", type:"bool", value:"true"}, { field:"Operation", label:"执行的操作", type:"string", value:"Save"} ] } ``` #### 数据转换与清洗 在数据转换过程中,我们需要对源平台的数据进行清洗和格式化,以满足目标平台的需求。例如,将旺店通的字段映射到金蝶云星空所需的字段,并进行必要的格式转换。 1. **单据编号(FBillNo)**: - 来源字段:`transfer_no` - 转换规则:在原始编号后添加后缀`-TC` 2. **单据类型(FBillTypeID)**: - 固定值:`ZJDB01_SYS` - 使用解析器`ConvertObjectParser`进行对象转换 3. **业务类型(FBizType)**: - 固定值:`NORMAL` 4. **调拨方向(FTransferDirect)**: - 固定值:`GENERAL` 5. **日期(FDate)**: - 来源字段:`created` 6. **备注(FNote)**: - 来源字段:`remark` 7. **明细信息(FBillEntry)**: - 包含多个子字段,如物料编码、零售条形码、调拨数量等,每个子字段都需要对应源数据进行映射和转换。 #### 数据写入 完成数据清洗和转换后,即可将处理后的数据通过API接口写入到金蝶云星空。以下是一个示例请求体: ```json { FormId: 'STK_TransferDirect', IsAutoSubmitAndAudit: true, IsVerifyBaseDataField: true, Operation: 'Save', array:[ { FBillNo:'12345-TC', FBillTypeID:{ FNumber:'ZJDB01_SYS'}, FBizType:'NORMAL', FTransferDirect:'GENERAL', FTransferBizType:'InnerOrgTransfer', FStockOutOrgId:{ FNumber:'114'}, FOwnerOutIdHead:{ FNumber:'114'}, FStockOrgId:{ FNumber:'114'}, FDate:'2023-10-01', FNote:'This is a remark.', FBillEntry:[ { FMaterialId:{ FNumber:'SPEC001'}, FCMKBarCode:'', FQty:'100', FSrcStockId:{ FNumber:'WH001'}, FDestStockId:{ FNumber:'WH002'}, FNoteEntry:'', FISFREE:'' } ] } ] } ``` 通过上述步骤,我们实现了从旺店通到金蝶云星空的数据ETL转换,并成功将处理后的数据写入目标平台。这一过程不仅提升了数据处理效率,还确保了数据的一致性和准确性。 ![金蝶与CRM系统接口开发配置](https://pic.qeasy.cloud/T5.png~tplv-syqr462i7n-qeasy.image)