ETL转换实践:采购入库单同步至金蝶云星空

  • 轻易云集成顾问-林峰

案例分享:采购入库单同步 - 聚水潭数据集成到金蝶云星空

在实际业务场景中,如何高效、准确地将聚水潭系统中的数据同步到金蝶云星空,是许多企业面临的核心技术挑战。在本案例中,我们专注于“采购入库单”的同步,展示了一套完整且可行的数据集成方案。

首先,通过调用聚水潭提供的API接口/open/purchasein/query,定时可靠地抓取采购入库单数据。为了保证数据不漏单,我们实施了分页和限流策略,在处理大批量数据时,每次获取一定数量的数据,并逐步迭代全部记录。

# 示例代码片段:通过分页从聚水潭API抓取数据
import requests

def fetch_purchase_in_data(page, limit):
    url = "https://api.jushuitan.com/open/purchasein/query"
    params = {
        "page": page,
        "limit": limit,
        # 其他必要参数如token等
    }
    response = requests.get(url, params=params)
    return response.json()

data = fetch_purchase_in_data(1, 100) # 获取第一页,每页100条记录

在实现大量数据快速写入金蝶云星空方面,我们使用了其提供的batchSave API。为了应对两者之间的数据格式差异,我们采用了定制化的数据映射方式,将从聚水潭获取到的采购入库单据转换为符合金蝶云输入要求的格式。同时,为确保写入过程中的异常情况得到妥善处置,实现了错误重试机制,对失败项进行自动重新提交。

此外,通过建立实时监控与日志记录流程,可以监控每一步操作,包括请求状态、处理时间以及异常情况。这不仅提高了处理透明度,也为后续问题排查提供了依据。

# 示例代码片段:批量写入到金蝶云星空并处理异常重试
import json

def map_to_kingdee_format(data):
    # 将聚水潭格式转换为金蝶云格式的方法实现细节略过...
    return transformed_data

def batch_save_to_kingdee(data):
    url = "https://api.kingdee.com/batchSave"
    headers = {"Content-Type": "application/json"}

    for attempt in range(3):  # 最多尝试三次
        response = requests.post(url, headers=headers, data=json.dumps(map_to_kingdee_format(data)))

        if response.status_code == 200:
            return True

        log_error("Failed to save data", details=response.text)

return False

success = batch_save_to_kingdee(data)
if not success:
   log_emergency("Critical failure in saving
![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/D5.png~tplv-syqr462i7n-qeasy.image)
### 调用聚水潭接口/open/purchasein/query获取并加工数据

在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用聚水潭接口`/open/purchasein/query`来获取采购入库单数据,并进行初步加工。

#### 接口配置与请求参数

首先,我们需要配置接口的元数据,以确保能够正确调用API并获取所需的数据。以下是元数据配置的关键部分:

```json
{
  "api": "/open/purchasein/query",
  "method": "POST",
  "number": "io_id",
  "id": "io_id",
  "pagination": {
    "pageSize": 50
  },
  "idCheck": true,
  "request": [
    {"field": "page_index", "label": "第几页", "type": "string", "value": "1"},
    {"field": "page_size", "label": "每页显示", "type": "string", "value": "50"},
    {"field": "modified_begin", "label": "修改起始时间", "type": "string", 
        "value":"{{LAST_SYNC_TIME|datetime}}"},
    {"field": "modified_end", "label":"结束时间","type":"string","value":"{{CURRENT_TIME|datetime}}"}
  ],
  ...
}

在上述配置中,api字段指定了要调用的接口路径,method字段指定了HTTP方法为POST。分页参数pagination中的pageSize设置为50,确保每次请求返回最多50条记录。请求参数包括分页信息和时间范围,通过动态模板变量如{{LAST_SYNC_TIME|datetime}}{{CURRENT_TIME|datetime}}来确定查询的时间窗口。

数据过滤与条件设置

为了避免获取不必要的数据,我们可以设置过滤条件。例如,排除特定仓库的数据:

"condition":[
  [{"field":"warehouse","logic":"neqv2","value":"致轩辅料仓库主仓"}]
]

此处使用逻辑运算符neqv2来排除仓库名为“致轩辅料仓库主仓”的记录,从而提高数据处理效率。

异常处理与补救机制

在实际操作中,可能会遇到网络波动或其他异常情况导致部分数据未能及时同步。为了确保数据完整性,可以配置定时任务和补救机制:

"omissionRemedy":{
  ...
  "takeOverRequest":[
    {"field":"modified_begin","label":"修改起始时间","type":"string",
        "value":"{{DAYS_AGO_3|datetime}}","id":"modified_beginZUwE2"}
  ]
}

这里设置了一个定时任务,每天凌晨2点执行,通过将起始时间设为三天前(即{{DAYS_AGO_3|datetime}}),重新拉取可能遗漏的数据。

数据清洗与转换

在获取到原始数据后,需要对其进行清洗和转换,以便后续处理。例如,可以对日期格式进行标准化,对数值字段进行单位转换等。这一步骤通常通过编写自定义脚本或使用平台提供的可视化工具来完成。

实际案例应用

假设我们需要同步过去一天内所有修改过的采购入库单,并排除特定仓库的数据。具体步骤如下:

  1. 配置请求参数:设置分页参数和时间范围。
  2. 调用API:通过POST请求获取第一页的数据。
  3. 检查响应:解析响应内容,提取有效记录。
  4. 循环处理:如果有多页数据,则循环调用API直至所有页面处理完毕。
  5. 清洗与转换:对获取的数据进行必要的清洗和格式转换。
  6. 写入目标系统:将处理后的数据写入目标数据库或系统。

通过以上步骤,我们可以高效地实现采购入库单的同步,并确保数据的一致性和完整性。这不仅提升了业务透明度,也为后续的数据分析和决策提供了可靠的基础。 如何对接金蝶云星空API接口

采购入库单同步至金蝶云星空API接口的ETL转换

在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,并转为目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。本文将详细探讨如何利用轻易云数据集成平台实现这一过程。

1. API接口配置

首先,我们需要了解金蝶云星空API接口的配置。根据元数据配置,目标API为batchSave,请求方法为POST。以下是主要字段及其配置:

  • FBillTypeID: 单据类型,固定值RKD01_SYS
  • FBusinessType: 业务类型,固定值CG
  • FPurchaseOrgId: 采购组织,固定值100
  • FStockOrgId: 收料组织,固定值100
  • FBillNo: 单据编号,对应源数据中的io_id
  • FSupplierId: 供应商,对应源数据中的supplier_id
  • FDate: 入库日期,对应源数据中的io_date
  • FSupplyId: 供货方,对应源数据中的supplier_id

这些字段通过解析器(如ConvertObjectParser)将源数据转换为目标格式。

2. 财务信息与明细信息

财务信息和明细信息是采购入库单的重要组成部分:

财务信息(FInStockFin)
  • FSettleOrgId: 结算组织,固定值100
  • FPayOrgId: 付款组织,固定值100
  • FSETTLECURRID: 结算币别,固定值PRE001
明细信息(FInStockEntry)

明细信息是一个数组,每个元素包含以下字段:

  • FMaterialId: 物料编码,对应源数据中的items.i_id
  • FRealQty: 实收数量,对应源数据中的items.qty
  • FPrice: 单价
  • FStockId: 仓库,固定值CK
  • FNote: 备注
  • FTaxPrice: 含税单价,对应源数据中的items.cost_price
  • FOWNERID: 货主,固定值100

3. 特殊字段处理

除了上述常规字段,还有一些特殊字段需要处理:

  • F_VPPH_Text: 聚水潭采购单号,对应源数据中的po_id
  • F_VPPH_LargeText: 聚水潭备注,对应源数据中的remark

这些字段在请求中直接映射到相应的源数据字段。

4. 请求参数构建

根据元数据配置,我们需要构建一个完整的请求参数对象。以下是一个示例:

{
    "FormId": "STK_InStock",
    "IsAutoSubmitAndAudit": true,
    "Operation": "Save",
    "IsVerifyBaseDataField": true,
    "SubSystemId": "21",
    "Model": {
        "FBillTypeID": {"FNumber": "RKD01_SYS"},
        "FBusinessType": "CG",
        "FPurchaseOrgId": {"FNumber": "100"},
        "FStockOrgId": {"FNumber": "100"},
        "FBillNo": "{io_id}",
        "FSupplierId": {"FNumber": "{supplier_id}"},
        "FDate": "{io_date}",
        "FSupplyId": {"FNumber": "{supplier_id}"},
        "FInStockFin": {
            "FSettleOrgId": {"FNumber": "100"},
            "FPayOrgId": {"FNumber": "100"},
            "FSETTLECURRID": {"FNumber": "PRE001"}
        },
        "FInStockEntry": [
            {
                "FMATERIALID":{"fnumber":"{{items.i_id}}"},
                "frealqty":"{{items.qty}}",
                ...
            }
        ],
        ...
    }
}

5. 数据转换与写入

在轻易云平台中,通过配置ETL流程,将上述请求参数对象发送至金蝶云星空API接口,实现采购入库单的数据同步。整个过程包括以下步骤:

  1. 从源系统获取原始数据。
  2. 使用解析器和映射规则,将原始数据转换为目标格式。
  3. 构建API请求参数。
  4. 调用金蝶云星空API接口,将转换后的数据写入目标系统。

通过这种方式,我们可以高效地完成采购入库单的数据同步,实现不同系统间的数据无缝对接。 打通金蝶云星空数据接口

更多系统对接方案