如何将吉客云奇门销售退货单数据写入金蝶云星空

  • 轻易云集成顾问-黄宏棵
### 吉客云·奇门数据集成到金蝶云星空的技术落地:实现系统对接与销售退货单处理 在业务流程复杂且需要高效管理数据的现代环境下,系统间的数据集成至关重要。本文将专注于探讨利用轻易云数据集成平台,通过配置元数据,实现吉客云·奇门中的(线下)销售退货单无缝对接至金蝶云星空。我们具体实施了一个从获取接口数据、批量写入、定时抓取到异常处理及监控的一整套解决方案。 首先,在这一案例中,我们使用吉客云·奇门API `jackyun.tradenotsensitiveinfos.list.get` 来获取销售退货单的基础数据信息。由于该接口可能会返回分页结果,并且有调用次数限制,因此,我们在调用过程中需特别关注如何处理分页和限流问题,以确保不会漏掉任何订单记录。在这一点上,采用了自动化脚本结合定时任务调度来可靠抓取所需数据。 针对海量的数据写入需求,我们通过金蝶云星空提供的 `batchSave` API 实现批量快速写入。这不仅提高了效率,同时也简化了整个操作过程。当面对吉客云·奇门与金蝶云星空之间存在的数据格式差异时,我们通过自定义映射规则和转换逻辑,将两者进行有效对接,使得各项字段能无缝衔接。 为了保障整个流程中的每一步都能够得到实时监控并记录日志,对于所有请求及响应信息,关键步骤均设置详细日志文件。同时,在发生异常情况下,还设计了一套错误重试机制以最大程度降低业务影响,如遇特定错误码或网络波动,将重新发起请求直至成功。 此外,还必须考虑不同系统间的数据规范和约束要求,比如在向金蝶云星空输入数据之前,执行严格的数据校验以及预处理环节,以满足其标准要求,并避免后续环节出现问题。 这仅仅是开始部分,随后的章节将深入讲解具体实现细节,包括代码示例、实际操作截图及关键配置步骤等内容,以帮助读者更好地理解并复现这一完整方案。在这个综合案例中,各种技术手段和最佳实践相互融合,为企业构建高效稳定的跨系统数据信息流提供坚实保障。 ![打通钉钉数据接口](https://pic.qeasy.cloud/D12.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台调用吉客云·奇门接口获取并加工数据 在数据集成的生命周期中,第一步是从源系统获取数据并进行初步加工。本文将详细探讨如何通过轻易云数据集成平台调用吉客云·奇门接口`jackyun.tradenotsensitiveinfos.list.get`来实现这一过程。 #### 接口配置与请求参数 为了调用`jackyun.tradenotsensitiveinfos.list.get`接口,我们需要配置相应的元数据。以下是该接口的元数据配置: ```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,sellPrice,sellTotal,cost,discountTotal,taxFee" }, {"field": "isDelete", "label": "isDelete", "type": "string"}, {"field": "tradeStatus", "label": "tradeStatus", "type": "string", "value": "9090"}, {"field": "tradeTypeList", "label": "tradeTypeList", "type": "string", "value": ["8", "12"], "parser":{"name":"StringToArray","params": ","}} ], ... } ``` #### 请求参数解析 1. **时间范围参数**: - `startModified` 和 `endModified` 用于指定查询的时间范围,分别代表上次同步时间和当前时间。 - 时间格式通过模板变量 `{{LAST_SYNC_TIME|datetime}}` 和 `{{CURRENT_TIME|datetime}}` 动态生成。 2. **分页参数**: - `pageSize` 和 `pageIndex` 用于分页查询,确保一次请求不会返回过多的数据。 - 分页大小和起始页通过 `{PAGINATION_PAGE_SIZE}` 和 `{PAGINATION_START_PAGE}` 动态设置。 3. **字段选择**: - `fields` 参数指定了需要返回的字段列表,包括订单号、商品详情、费用信息等。 - 字段列表非常详细,涵盖了销售退货单所需的所有信息。 4. **过滤条件**: - `isDelete` 用于过滤已删除的数据。 - `tradeStatus` 设置为 `9090`,表示只查询特定状态的交易。 - `tradeTypeList` 包含值 `8` 和 `12`,表示只查询特定类型的交易,通过解析器将字符串转换为数组。 #### 数据清洗与转换 在获取到原始数据后,需要对其进行清洗和转换,以便后续处理。以下是一些关键步骤: 1. **字段平铺**: - 使用元数据中的 `"beatFlat":["goodsDetail","goodsDelivery"]` 配置,将嵌套字段平铺到顶层结构中,方便后续处理。 2. **条件过滤**: - 根据元数据中的 `"condition"` 配置,对返回的数据进行二次过滤。例如,只保留 shopCode 为 `0007` 或包含 `YF` 的记录,并且 goodsNo 不等于 `88888` 且 goodsDelivery 不为空。 3. **数据格式化**: - 对日期、数值等字段进行格式化处理,确保符合目标系统的要求。例如,将日期格式统一为 ISO 标准,将金额字段保留两位小数等。 #### 实际案例 假设我们需要从吉客云·奇门获取某个时间段内所有销售退货单,并将其导入到金蝶系统中。具体步骤如下: 1. **配置请求参数**: ```json { ... {"startModified": "{{2023-01-01T00:00:00Z}}"}, {"endModified": "{{2023-01-31T23:59:59Z}}"}, ... {"pageSize": 100}, {"pageIndex": 1}, ... } ``` 2. **发送请求并接收响应**: ```python response = requests.post(api_url, json=request_payload) data = response.json() ``` 3. **处理响应数据**: ```python for record in data['records']: if record['shopCode'] == '0007' or 'YF' in record['shopCode']: if record['goodsDetail']['goodsNo'] != '88888' and record['goodsDelivery'] is not None: # 平铺嵌套字段 flat_record = flatten(record) # 格式化日期和金额 flat_record['billDate'] = format_date(flat_record['billDate']) flat_record['sellTotal'] = format_amount(flat_record['sellTotal']) # 将处理后的记录写入目标系统 write_to_kingdee(flat_record) ``` 通过上述步骤,我们可以高效地从吉客云·奇门获取销售退货单,并进行必要的数据清洗和转换,为后续的数据写入做好准备。这不仅提高了数据处理的效率,也确保了数据的一致性和准确性。 ![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/S26.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将销售退货单数据转换并写入金蝶云星空API接口 在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL转换,并转为目标平台所能接收的格式。本文将详细探讨如何使用轻易云数据集成平台,将吉客云奇门的销售退货单数据转换为金蝶云星空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", "customerCode", "onlineTradeNo"], "body": ["goodsDetail_goodsNo", "goodsDetail_goodsDelivery_sendCount", "goodsDetail_goodsDelivery_batchamount", "goodsDetail_goodsDelivery_batchNo", "goodsDetail_shareFavourableAfterFee", "goodsDetail_sellTotal", "goodsDetail_sellCount"] }, ... } ``` #### 请求参数映射 在请求参数映射中,我们需要将源平台的数据字段映射到目标平台所需的字段。以下是具体字段映射配置: ```json { ... "request": [ {"field":"FBillNo","label":"单据编号","type":"string","value":"{tradeNo}"}, {"field":"FDate","label":"日期","type":"string","value":"{consignTime}"}, {"field":"FRetcustId","label":"退货客户","type":"string","value":"{customerCode}","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"FBillTypeID","label":"单据类型","type":"string","value":"XSTHD01_SYS","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"FHeadNote","label":"备注","type":"string","value":"{onlineTradeNo}"}, {"field":"FEntity","label":"明细信息","type":"array","value":"details", ... } ], ... } ``` #### 明细信息配置 对于明细信息,我们需要特别注意数组类型字段的处理。以下是明细信息字段的具体配置: ```json { ... {"field": "FEntity", "label": "明细信息", "type": "array", "value": "details", ... } } ``` 每个子字段的详细配置如下: ```json { ... {"field": "FMaterialId", ... }, {"field": "FMustqty", ... }, {"field": ...}, } ``` #### 特殊字段处理 在处理特殊字段时,例如批号、税率和是否赠品等,需要根据业务逻辑进行相应的转换。例如: ```json { ... {"field": ..., ... }, {"field": ..., ... }, } ``` 这些特殊字段的处理方式可以通过自定义函数或条件表达式来实现。例如,判断是否为赠品可以使用如下表达式: ```json {"field": ..., ... "value": "_function CASE WHEN {{details.goodsDetail_sellTotal}}>0 THEN 'false' ELSE 'true' END"} ``` #### 提交与审核 最后,我们需要设置一些其他请求参数,以确保数据能够正确提交并审核: ```json { ... {"field": ..., ... "value": true}, ... } ``` 通过上述配置,轻易云数据集成平台能够将吉客云奇门的销售退货单数据成功转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。这一过程不仅提高了数据处理效率,还确保了各系统间的数据一致性和准确性。 ![钉钉与ERP系统接口开发配置](https://pic.qeasy.cloud/T21.png~tplv-syqr462i7n-qeasy.image)