ETL转换及写入金蝶云星空技术案例解析

  • 轻易云集成顾问-姚缘
### 吉客云·奇门数据集成到金蝶云星空的案例分享:销售订单转销售出库单 在系统集成项目中,高效地实现吉客云·奇门与金蝶云星空之间的数据对接是一个关键的挑战。本文将以实际运行方案`(吉客云奇门->金蝶)(线上)销售订单->销售出库单9090`为例,深入探讨如何顺利完成这一任务。 为了确保吉客云·奇门的数据准确无误地被写入到金蝶云星空,我们首先利用其API接口`jackyun.tradenotsensitiveinfos.list.get`来定时抓取数据。这一过程不仅需要解决分页和限流问题,还要处理两者间的数据格式差异。与此同时,为提高大批量数据传输的效率,我们采用了轻易平台提供的批量集成功能,通过调用金蝶云星空的`batchSave`接口,实现快速写入。 具体实施过程中,透明化和实时监控机制尤为重要。在操作每一步时,可以借助日志记录功能追踪数据流动状态,并在出现异常情况时及时进行错误重试。此外,对接双方的一些特性也需特别注意,例如金蝶云星空所需的数据映射规则、字段匹配以及必要的转换逻辑。这些都将在后续步骤详细解析,以保障整个流程高效稳定。 通过以上技术手段,不仅可以确保业务环节中的每一个订单精准传递,同时也极大程度上提升了企业运营效率及可靠性。在下一部分中,我们将详述从获取吉客云·奇门接口数据,到最终写入金蝶云星空各个技术细节与最佳实践。 ![用友BIP接口开发配置](https://pic.qeasy.cloud/D23.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云·奇门接口获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用吉客云·奇门接口`jackyun.tradenotsensitiveinfos.list.get`,并对返回的数据进行初步加工处理。 #### 接口配置与请求参数 首先,我们需要配置接口的元数据,以便正确调用吉客云·奇门的API。以下是该接口的元数据配置: ```json { "api": "jackyun.tradenotsensitiveinfos.list.get", "effect": "QUERY", "method": "POST", "number": "tradeNo", "id": "tradeNo", "idCheck": true, "request": [ {"field":"startModified","label":"startModified","type":"string","value":"{{LAST_SYNC_TIME|datetime}}"}, {"field":"endModified","label":"endModified","type":"string","value":"{{CURRENT_TIME|datetime}}"}, {"field":"pageSize","label":"pageSize","type":"string","describe":"111","value":"{PAGINATION_PAGE_SIZE}"}, {"field":"pageIndex","label":"pageIndex","type":"string","describe":"111","value":"{PAGINATION_START_PAGE}"}, {"field":"fields","label":"fields","type":"string","describe":"111","value": "tradeNo,orderNo,shopName,companyName,warehouseName,logisticName,mainPostid,goodsDetail.goodsNo,flagNames,columnExt,sourceAfterNo,goodsDetail.outerId,pickUpCode,expense.expenseFee,expense.expenseItemName,billDate,goodsPlatDiscountFee,goodsDetail.shareOrderDiscountFee,goodsDetail.shareOrderPlatDiscountFee,customizeGoodsColumn9,goodsDetail.goodsId,goodsDetail.goodsNo,goodsDetail.goodsName,goodsDetail.specName,goodsDetail.barcode,goodsDetail.sellCount,goodsDetail.unit,goodsDetail.sellPrice,goodsDetail.sellTotal,goodsDetail.cost,goodsDetail.discountTotal,goodsDetail.discountPoint,taxFee,taxRate" }, {"field": "isDelete", "label": "isDelete", "type": "string"}, {"field": "tradeStatus", "label": "tradeStatus", "type": "string", "value": "9090"}, {"field": "tradeTypeList", "label": "tradeTypeList", "type": "string", "value": "1,2,3,4,5,6,7,9,10,11,13,91,92" ,"parser":{"name":"StringToArray","params": ","}} ], "condition":[ [{"field":"shopCode","logic":"neqv2","value":"0007"},{"field":"goodsDetail.goodsNo","logic":"neqv2","value":"88888"},{"field":"goodsDelivery.tradeId"}] ], "beatFlat":["goodsDelivery"] } ``` #### 请求参数解析 1. **时间参数**:`startModified`和`endModified`分别表示查询的起始和结束时间,使用动态变量`{{LAST_SYNC_TIME|datetime}}`和`{{CURRENT_TIME|datetime}}`来获取。 2. **分页参数**:`pageSize`和`pageIndex`用于分页查询,确保每次请求的数据量适中。 3. **字段选择**:通过`fields`字段指定需要返回的数据字段,包括订单号、商品详情等。 4. **过滤条件**:使用条件过滤器,如排除特定店铺代码(如不等于“0007”)和特定商品编号(如不等于“88888”)。 #### 数据请求与清洗 在完成接口配置后,通过POST方法发送请求以获取数据。返回的数据可能包含多个嵌套结构,如商品详情(`goodsDetail`)和商品交付信息(`goodsDelivery`)。我们需要对这些嵌套结构进行扁平化处理,以便后续的数据转换与写入。 以下是一个简单的Python示例,用于发送请求并处理返回的数据: ```python import requests import json url = 'https://api.jackyun.com/tradenotsensitiveinfos/list/get' headers = {'Content-Type': 'application/json'} payload = { 'startModified': '2023-01-01T00:00:00Z', 'endModified': '2023-01-31T23:59:59Z', 'pageSize': 100, 'pageIndex': 1, 'fields': 'tradeNo,...', # 完整字段列表见上文 'isDelete': False, 'tradeStatus': '9090', 'tradeTypeList': [1,...] # 完整类型列表见上文 } response = requests.post(url, headers=headers, data=json.dumps(payload)) data = response.json() # 扁平化处理示例 def flatten_data(data): flat_data = [] for item in data['result']: base_info = {k: item[k] for k in item if k != 'goodsDetail'} for detail in item['goodsDetail']: flat_item = {**base_info} flat_item.update(detail) flat_data.append(flat_item) return flat_data flat_data = flatten_data(data) ``` #### 数据转换与写入准备 在完成数据清洗后,可以将扁平化后的数据传递给下一个阶段进行转换与写入。此过程包括将数据映射到目标系统所需的格式,并执行必要的转换逻辑,如单位换算、字段重命名等。 通过上述步骤,我们实现了从吉客云·奇门接口获取并初步加工数据,为后续的数据集成奠定了基础。这一过程展示了如何利用轻易云数据集成平台的强大功能,实现高效、透明的数据处理。 ![打通企业微信数据接口](https://pic.qeasy.cloud/S5.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台ETL转换与写入金蝶云星空API接口技术案例 在数据集成过程中,将源平台的数据转换为目标平台所能接收的格式并写入,是一个至关重要的步骤。本文将详细探讨如何利用轻易云数据集成平台,将吉客云奇门的销售订单数据转换为金蝶云星空API接口所能接收的格式,并最终写入金蝶云星空系统。 #### 数据请求与清洗 首先,我们从吉客云奇门获取销售订单数据。这一步骤包括数据请求和初步清洗,确保数据完整性和一致性。假设我们已经完成了这部分工作,接下来进入关键的ETL(Extract, Transform, Load)过程。 #### 数据转换与写入 我们需要将已清洗的数据转换为金蝶云星空API接口所能接受的格式。以下是具体的元数据配置及其应用: ##### API接口配置 ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "tradeNo", "bodyName": "details", "bodySum": ["goodsDetail_goodsDelivery_sendCount"], "header": ["tradeNo", "shopCode", "warehouseCode", "sourceTradeNos", "consignTime", "onlineTradeNo"], "body": ["goodsDetail_goodsNo", "goodsDetail_goodsDelivery_sendCount", "goodsDetail_goodsDelivery_batchamount", "goodsDetail_goodsDelivery_batchNo", "goodsDetail_shareFavourableAfterFee", "goodsDetail_sellTotal", "goodsDetail_sellCount"] }, ... } ``` 该配置定义了如何将源数据映射到目标API接口字段中。主要包括以下几个部分: 1. **API基本信息**:`api`字段指定了调用的API名称`batchSave`,`method`字段指定了HTTP方法为POST。 2. **操作配置**:通过`operation`字段定义了合并策略、主键字段、明细体名称以及汇总字段等。 3. **请求参数映射**:通过`request`数组定义了各个字段的映射关系。 ##### 请求参数映射 ```json [ {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"XSCKD01_SYS"}, {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{tradeNo}"}, {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{{consignTime|date}}"}, {"field":"FSaleOrgId","label":"销售组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"}, {"field":"FCustomerID","label":"客户","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{shopCode}"}, ... ] ``` 每个请求参数都包含以下信息: - `field`: 对应金蝶云星空中的字段名。 - `label`: 字段标签,用于描述该字段。 - `type`: 字段类型,如字符串、日期等。 - `describe`: 字段描述。 - `parser`: 用于解析和转换值的解析器,例如`ConvertObjectParser`。 - `value`: 映射值,可以是静态值或动态值(如模板变量)。 ##### 明细信息映射 ```json { "field": "FEntity", ... "children": [ {"field": "FCustMatID", ...}, {"field": "FMaterialID", ...}, {"field": "FBarcode", ...}, {"field": "FRealQty", ...}, ... ] } ``` 明细信息通过嵌套结构进行映射,每个子字段都包含类似的配置,确保每个明细项都能正确映射到目标系统中。 ##### 特殊处理逻辑 在某些情况下,需要对特定字段进行特殊处理。例如,计算含税单价和判断是否赠品: ```json {"field": "FTaxPrice", ... , "value": "_function {{details.goodsDetail_shareFavourableAfterFee}}/{{details.goodsDetail_sellCount}}"}, {"field": "FIsFree", ... , "value": "_function CASE WHEN {{details.goodsDetail_sellTotal}}>0 THEN 'false' ELSE 'true' END"} ``` 这些特殊处理逻辑通过自定义函数实现,以满足业务需求。 #### 数据写入 最后,通过调用配置好的API接口,将转换后的数据写入金蝶云星空系统。整个过程由轻易云数据集成平台自动化执行,确保高效、准确地完成数据集成任务。 以上即是利用轻易云数据集成平台,将吉客云奇门销售订单数据转换并写入金蝶云星空API接口的技术案例。通过合理配置元数据和请求参数,实现了不同系统间的数据无缝对接。 ![用友与外部系统接口集成开发](https://pic.qeasy.cloud/T16.png~tplv-syqr462i7n-qeasy.image)