旺店通·旗舰版数据抓取到金蝶云星空的实践案例

  • 轻易云集成顾问-叶威宏

案例分享:旺店通·旗舰版数据集成到金蝶云星空

在本文中,我们将详细探讨如何高效地实现旺店通·旗舰版与金蝶云星空的系统对接,特别是围绕“入库瞬时成本-生产入库单-1”方案的实施过程。该技术案例主要涵盖了API接口调用、数据格式转换、分页处理以及异常管理等关键步骤。

为了确保从旺店通·旗舰版获取的数据不漏单且快速写入金蝶云星空,我们利用statistic.StockinCollect.queryCostWithDetail API进行数据抓取,并通过batchSave API实现批量写入。这不仅优化了数据传输效率,还保证了数据的一致性和完整性。

具体而言,以下几个方面值得关注:

1. 定时可靠的数据抓取: 采用定时任务机制,从旺店通·旗舰版接口定期抓取最新的库存成本信息。通过合理配置调度频率和重试机制,有效避免漏单现象。

2. 批量写入及映射处理: 在大量数据需要导入金蝶云星空时,通过批量操作显著提升传输速度。同时,实现自定义的数据映射逻辑,以适应两套系统不同的数据格式要求。

3. 分页与限流策略: 由于API接口可能存在请求次数和响应时间限制,需要采取分页策略并设置合理的限流参数,保证每次请求都能成功返回所需的数据集。

4. 异常处理与监控日志: 建立异常捕获和错误重试机制,在出现接口调用失败或网络波动情况下自动重新尝试。同时,通过实时监控日志记录分析各个环节中的潜在问题,以便后续优化调整。

这一系列措施结合起来,不仅确保了整个对接过程的稳定性和可靠性,也为企业提供了一种高效而透明的数据集成解决方案。在接下来的部分中,我们将逐步深入解读具体实施细节,包括API参数配置、转换规则定义以及运行效果反馈等内容。 打通钉钉数据接口

调用旺店通·旗舰版接口获取并加工数据

在数据集成生命周期的第一步中,调用源系统接口是关键的一环。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·旗舰版的statistic.StockinCollect.queryCostWithDetail接口获取并加工数据。

接口概述

接口名称:statistic.StockinCollect.queryCostWithDetail

请求方法:POST

主要功能:查询入库瞬时成本的详细信息

元数据配置解析

元数据配置是实现接口调用和数据处理的基础。以下是对元数据配置的详细解析:

{
  "api": "statistic.StockinCollect.queryCostWithDetail",
  "effect": "QUERY",
  "method": "POST",
  "number": "stockin_no",
  "id": "stockin_id",
  "name": "stockout_no",
  "idCheck": true,
  "request": [
    {
      "field": "params",
      "label": "查询参数",
      "type": "object",
      "children": [
        {
          "field": "start_time",
          "label": "开始时间",
          "type": "string",
          "describe": "起始时间(发货时间),若无出库单号则为必填。",
          "value": "{{LAST_SYNC_TIME|datetime}}"
        },
        {
          "field": "end_time",
          "label": "结束时间",
          "type": "string",
          "describe": "结束时间(发货时间)",
          "value": "{{CURRENT_TIME|datetime}}"
        },
        {
          "field": "warehouse_no",
          "label": "仓库编号",
          "type": "string",
          ...

请求参数详解

  • start_timeend_time:这两个字段用于指定查询的时间范围,分别代表起始和结束时间。使用模板变量 {{LAST_SYNC_TIME|datetime}}{{CURRENT_TIME|datetime}} 自动填充上次同步时间和当前时间。
  • warehouse_no:仓库编号,用于指定查询哪个仓库的数据。
  • stockin_no:入库单号,可以填写多个单号,使用英文逗号分隔。
  • time_type:时间查询类型,默认值为2,即按审核时间查询。

分页参数:

  • page_size:每页返回的数据条数,默认设置为100。
  • page_no:页码,用于分页查询。

数据请求与清洗

在调用接口后,我们需要对返回的数据进行清洗和加工。以下是一个示例流程:

  1. 发送请求

    import requests
    import json
    
    url = 'https://api.wangdian.cn/openapi2/statistic.StockinCollect.queryCostWithDetail'
    headers = {'Content-Type': 'application/json'}
    payload = {
       'params': {
           'start_time': '2023-01-01T00:00:00',
           'end_time': '2023-01-31T23:59:59',
           'warehouse_no': 'WH001',
           'stockin_no': '',
           'time_type': '2'
       },
       'pager': {
           'page_size': '100',
           'page_no': '1'
       }
    }
    
    response = requests.post(url, headers=headers, data=json.dumps(payload))
    data = response.json()
  2. 数据清洗: 获取到的数据可能包含多余或格式不一致的信息,需要进行清洗。例如,将日期格式统一、过滤掉无效记录等。

  3. 转换与写入: 清洗后的数据可以根据业务需求进行转换,然后写入目标系统或数据库。

实践案例

假设我们需要获取2023年1月某仓库的所有入库单瞬时成本,并将其写入本地数据库。具体步骤如下:

  1. 配置请求参数

    {
     ...
     {
       ...
       {
         ...
         {"field":"start_time","value":"2023-01-01T00:00:00"},
         {"field":"end_time","value":"2023-01-31T23:59:59"},
         {"field":"warehouse_no","value":"WH001"}
       }
     }
     ...
    }
  2. 发送请求并处理响应

    # 上文代码中的请求部分
  3. 清洗和转换数据

    cleaned_data = []
    
    for record in data['data']:
       if record['status'] == 'valid':
           cleaned_record = {
               'stockin_id': record['stockin_id'],
               'cost': float(record['cost']),
               ...
           }
           cleaned_data.append(cleaned_record)
    
    # 写入数据库

通过上述步骤,我们能够高效地从旺店通·旗舰版获取所需的入库瞬时成本数据,并进行必要的清洗和转换,为后续的数据处理打下坚实基础。 如何对接金蝶云星空API接口

轻易云数据集成平台ETL转换与金蝶云星空API接口对接

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

API接口配置

我们使用金蝶云星空的batchSave API接口,通过POST方法将处理后的数据写入目标系统。以下是元数据配置的具体细节:

{
    "api": "batchSave",
    "method": "POST",
    "idCheck": true,
    "operation": {
        "rowsKey": "array",
        "rows": 20,
        "method": "batchArraySave"
    },
    "request": [
        {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{stockin_no}"},
        {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"QTRKD01_SYS"},
        {"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"},
        {"field":"FStockDirect","label":"库存方向","type":"string","describe":"下拉列表","value":"1"},
        {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{{check_time|datetime}}"},
        {"field":"FDEPTID","label":"部门","type":"string","describe":"基础资料","value":"BM000032", "parser":{"name":"ConvertObjectParser", "params": "FNumber"}},
        {"field": "FOwnerTypeIdHead", "label": "货主类型", "type": "string", "describe": "多类别基础资料列表", "value": "BD_OwnerOrg"},
        {"field": "FOwnerIdHead", "label": "货主", "type": "string", "describe": "多类别基础资料",  "parser":{"name":    "ConvertObjectParser",  "params":   "FNumber"},     "value":    "100"},
        {"field":   "FNOTE",    "label":    "备注",   "type":     "string",   "describe":     "多行文本"},
        {
            "field":    "FEntity",
            "label":    "明细信息",
            "type":     "array",
            children: [
                {"field":       "FMATERIALID",      "label":        "物料编码",         "type":         "string",       "describe":         "基础资料",         "parser":{"name":
                    ConvertObjectParser, params: FNumber}, value: {{detail_list.spec_no}}, parent: FEntity},
                { field: FSTOCKID, label: 收货仓库, type: string, describe: 基础资料, parser:{name: ConvertObjectParser, params:FNumber}, value:{warehouse_no}, parent:FEntity},
                { field:FQty, label:实收数量, type:string, describe:数量, value:{{detail_list.num}}, parent:FEntity},
                { field:FPrice, label:成本价, type:string, describe:单价,parent:FEntity},
                { field:FEntryNote,label:备注,type:string, describe:多行文本,value:{{detail_list.remark}},parent:FEntity},
                { parent:FEntity,label:成本价(旺店通),field:F_TPRO_Decimal2,type:string,value:{{detail_list.checked_cost_price}}},
                { parent:FEntity,label:库存状态, field:FSTOCKSTATUSID,type:string,value:_function case '{defect}' when true then 'KCZT08_SYS' else 'KCZT01_SYS' end , parser:{name:
                    ConvertObjectParser , params : FNumber}},
                { field:F_UBGN_Decimal,label : 总成本(旺店通), type : string , value:_function {{detail_list.checked_cost_price}}*{{detail_list.num}}}
            ],
            value : detail_list
        },
        { label : 对应旺店通单据 , field : F_TPRO_Text6 , type : string , value : 入库瞬时成本-生产入库单 },
        { field : F_TPRO_Text5 , label : 操作人 , type : string , value : {operator_name}},
        { field : F_UBGN_LargeText , label : 备注(旺店通) , type : string , value : {remark}}
    ],
    otherRequest:[
        { field:"FormId", label:"业务对象表单Id", type:"string", describe:"必须填写金蝶的表单ID如:PUR_PurchaseOrder", value:"STK_MISCELLANEOUS"},
        { field:"IsVerifyBaseDataField", label:"验证基础资料", type:"bool", describe:"是否验证所有的基础资料有效性,布尔类,默认false(非必录)", value:"false"},
        { field:"Operation", label:"执行的操作", type:"string", value:"Save"},
        { field:"IsAutoSubmitAndAudit", label:"提交并审核", type:"bool", value:"true"}
    ]
}

数据转换与写入

在ETL过程中,我们需要将源数据根据金蝶云星空API接口要求进行转换。以下是关键字段及其转换逻辑:

  1. 单据编号 (FBillNo)

    • 从源数据字段 stockin_no 中提取。
  2. 单据类型 (FBillTypeID)

    • 固定值 QTRKD01_SYS,通过 ConvertObjectParser 转换为目标系统识别的格式。
  3. 库存组织 (FStockOrgId)

    • 固定值 100,同样通过 ConvertObjectParser 转换。
  4. 日期 (FDate)

    • 使用模板语言从源数据中的 check_time 字段提取,并转换为标准日期格式。
  5. 部门 (FDEPTID)

    • 固定值 BM000032,通过 ConvertObjectParser 转换。
  6. 明细信息 (FEntity)

    • 包含多个子字段,如物料编码、收货仓库、实收数量等,这些字段均从源数据中的相应字段提取,并通过 ConvertObjectParser 或其他逻辑进行处理。
  7. 库存状态 (FSTOCKSTATUSID)

    • 使用条件表达式 _function case '{defect}' when true then 'KCZT08_SYS' else 'KCZT01_SYS' end 根据源数据中的缺陷标识进行判断和转换。
  8. 总成本 (F_UBGN_Decimal)

    • 使用计算表达式 _function {{detail_list.checked_cost_price}}*{{detail_list.num}} 动态计算总成本。

执行操作

在完成上述字段映射和转换后,我们通过以下操作参数完成数据写入:

  • FormId:设置为 STK_MISCELLANEOUS,表示业务对象表单ID。
  • IsVerifyBaseDataField:设置为 false,表示不验证所有基础资料有效性。
  • Operation:设置为 Save,表示执行保存操作。
  • IsAutoSubmitAndAudit:设置为 true,表示自动提交并审核。

小结

通过上述配置和转换逻辑,我们成功实现了将源平台的数据经过ETL处理后,通过金蝶云星空API接口写入目标系统。这一过程不仅确保了数据的一致性和准确性,还极大提升了业务流程的自动化水平。 如何开发企业微信API接口

更多系统对接方案