轻易云数据集成平台详解:如何高效处理盘盈单数据

  • 轻易云集成顾问-贺强

旺店通·企业奇门数据集成到用友BIP案例分享:盘盈单-p

在本次技术案例中,我们将探讨如何实现旺店通·企业奇门的盘盈单数据集成至用友BIP系统。具体来说,本文将聚焦于通过调用wdt.stockin.order.query接口从旺店通·企业奇门获取库存盘盈信息,并利用用友BIP的API /yonbip/scm/othinrecord/single/save进行数据写入。

首先,方案采用高吞吐量的数据写入能力设计,以确保在快速抓取大量库存盘盈数据的同时,保证时效性。由于业务需求,每次运行都需要处理大批量的数据,这样就要求我们的系统不仅能够定时精准地抓取接口数据,还要能稳定可靠地完成向用友BIP的传输。

为了适应特定业务场景中的各种复杂逻辑,我们自定义了数据转换逻辑,对从旺店通·企业奇门获取到的数据进行了格式化处理。特别是针对分页和限流问题,通过合理配置和优化请求机制,实现了对分页结果的全量拉取与整合。此外,对于接口调用过程中可能出现的异常情况,我们设计了完善的错误重试机制以及实时监控与告警系统,以确保整个流程无缝衔接,不漏单、不失误。

最后,在实际实施过程中,集中式监控平台对每一次操作环节,包括API调用、数据转移、格式转换等,都提供了详细记录,使得任何潜在问题都可以被及时发现并解决。这一切不仅提高了整体效率,也为我们完美执行该项目奠定了坚实基础。

接下来的章节,我们将详细介绍具体实现步骤及核心代码片段,希望这份经验分享能为大家提供有价值的参考。 用友与MES系统接口开发配置

调用源系统旺店通·企业奇门接口wdt.stockin.order.query获取并加工数据

在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口wdt.stockin.order.query,以获取盘盈单相关的数据,并进行初步加工。

接口配置与调用

首先,我们需要配置并调用wdt.stockin.order.query接口。该接口使用POST方法,通过传递一系列参数来获取指定条件下的入库单信息。以下是详细的元数据配置:

{
  "api": "wdt.stockin.order.query",
  "method": "POST",
  "number": "stockin_no",
  "id": "stockin_no",
  "pagination": {
    "pageSize": 50
  },
  "idCheck": true,
  "request": [
    {
      "field": "start_time",
      "label": "开始时间",
      "type": "string",
      "describe": "按最后修改时间增量获取数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss",
      "value": "{{LAST_SYNC_TIME|datetime}}"
    },
    {
      "field": "end_time",
      "label": "结束时间",
      "type": "string",
      "describe": "按最后修改时间增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss",
      "value": "{{CURRENT_TIME|datetime}}"
    },
    {
      "field": "order_type",
      "label": "源单据类别",
      "type": "string",
      "describe": "源单据类别 1采购入库, 2调拨入库, 4盘盈入库, 5生产入库, 6其他入库, 7保修入库, 8纠错入库, 9初始化入库 10预入库11 JIT退货入库12 委外入库",
      "value":"6"
    },
    {
      "field":"status",
      "label":"入库单状态",
      "type":"string",
      "describe":"入库单状态10已取消20编辑中25待价格确认30待审核32待推送33推送失败35委外待入库60待结算80已完成(按照状态查询时必须传原单据类别,如果未传status则默认查询80已完成单据)",
      "value":"60,80"
    },
    {
      ...
    }
  ],
  ...
}

参数详解

  • start_timeend_time:用于按最后修改时间增量获取数据,确保我们只获取到自上次同步以来的新数据。
  • order_type:设置为6,表示我们只关心盘盈入库的数据。
  • status:设置为60,80,表示我们只获取状态为“待结算”和“已完成”的盘盈单。
  • warehouse_no, src_order_no, stockin_no:这些字段用于更精确地过滤数据,但在本例中不做强制要求。

分页处理

为了避免一次性拉取大量数据导致性能问题,我们采用分页机制。配置中的分页参数如下:

{
  ...
  “pagination”: {
    “pageSize”:50
   },
   ...
}

通过设置每页返回的数据条数为50,我们可以逐页拉取数据,并在后续处理过程中合并这些分页结果。

数据清洗与转换

在成功调用接口并获取到原始数据后,需要对其进行清洗和转换,以便后续写入目标系统。常见的清洗操作包括:

  1. 字段映射:将源系统中的字段名映射到目标系统的字段名。
  2. 格式转换:例如,将日期格式从字符串转换为标准日期类型。
  3. 过滤无效数据:移除不符合业务需求的数据记录。

以下是一个简单的数据清洗示例:

def clean_data(raw_data):
    cleaned_data = []
    for record in raw_data:
        cleaned_record = {
            'stock_in_number': record['stockin_no'],
            'warehouse_code': record['warehouse_no'],
            'order_status': record['status'],
            'last_modified': datetime.strptime(record['modified'], '%Y-%m-%d %H:%M:%S')
        }
        cleaned_data.append(cleaned_record)
    return cleaned_data

通过上述步骤,我们可以确保从旺店通·企业奇门接口获取到的数据经过清洗和转换后,能够顺利写入目标系统。

实时监控与日志记录

在整个过程中,实时监控和日志记录是确保数据集成过程顺利进行的重要手段。通过轻易云平台提供的可视化界面,我们可以实时监控每个环节的数据流动和处理状态,并及时发现和解决潜在问题。

综上所述,通过合理配置和调用旺店通·企业奇门接口wdt.stockin.order.query,结合有效的数据清洗与转换策略,可以高效地实现盘盈单相关数据的集成,为后续的数据处理和分析打下坚实基础。 电商OMS与ERP系统接口开发配置

轻易云数据集成平台:将源数据转换并写入用友BIPAPI接口

在轻易云数据集成平台中,ETL(Extract, Transform, Load)过程是数据集成生命周期的核心环节之一。本文将深入探讨如何将已经集成的源平台数据进行ETL转换,并转为用友BIPAPI接口所能够接收的格式,最终写入目标平台。

数据请求与清洗

在数据请求与清洗阶段,我们从源系统获取原始数据,并进行必要的数据清洗和预处理。这一步骤确保了后续的ETL转换能够顺利进行。以下是一个简单的数据请求示例:

{
    "source_system": "ERP",
    "query": "SELECT * FROM stock_in WHERE status = 'pending'"
}

数据转换与写入

在完成初步的数据请求与清洗后,接下来进入关键的ETL转换阶段。我们需要将清洗后的数据转换为用友BIPAPI接口所能接收的格式,并通过API写入目标系统。下面是具体的元数据配置和实现细节。

API接口配置

根据提供的元数据配置,我们需要向/yonbip/scm/othinrecord/single/save API端点发送POST请求。以下是完整的元数据配置:

{
    "api": "/yonbip/scm/othinrecord/single/save",
    "method": "POST",
    "idCheck": true,
    "request": [
        {
            "field": "resubmitCheckKey",
            "label": "保证请求的幂等性",
            "type": "string",
            "describe": "该值由客户端生成,并且必须是全局唯一的,长度不能超过32位。",
            "value": "{stockin_no}"
        },
        {
            "field": "id",
            "label": "主表id",
            "type": "string",
            "value": "{src_order_id}"
        },
        {
            "field": "needCalcLines",
            "label": "表体行计算标识",
            "type": "string",
            "describe": "",
            "value": false
        },
        {
            ...
        }
    ]
}
数据字段映射

在实际操作中,我们需要将源系统中的字段映射到目标系统所需的字段。例如:

  • stockin_no 映射到 resubmitCheckKey
  • src_order_id 映射到 id
  • check_time 映射到 vouchdate
  • warehouse_no 映射到 warehouse

这些字段映射确保了数据的一致性和完整性。

子表处理

对于包含子表的数据,如其他入库单子表,需要特别注意其结构和字段映射。例如:

{
    ...
    {
        "field":"othInRecords",
        ...
        {
            ...
            {
                ...
                {
                    ...
                    {
                        ...
                        {
                            ...
                            {
                                ...
                                {
                                    ...
                                    {
                                        ...
                                        {
                                            ...
                                            {
                                                ...
                                                {
                                                    ...
                                                    {
                                                        ...
                                                        {
                                                            ...
                                                            {
                                                                ...
                                                                {
                                                                    ...
                                                                    {"field":"qty","label":"数量,实收数量与应收数量不能同时为空","type":"string","describe":"例:10","value":"{{details_list.goods_count}}","parent":"othInRecords"},
                                                                    {"field":"unit","label":"主计量单位,传入id或code","type":"string","describe":"例:KGM","value":"_findCollection find code from f9eedcc9-f1ff-31c0-9081-6aee9cf21740 where name={goods_unit}","parent":"othInRecords"},
                                                                    {"field":"invExchRate","label":"换算率","type":"string","describe":"例:件(精度2)","value":"1","parent":"details"},
                                                                    {"field":"subQty","label":"件数","type":"string","describe":"","value":"{{details_list.goods_count}}"}
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        {"field":"memo",...,"value":"{{details_list.remark}}"}
    ]
}

实现代码示例

以下是一个基于上述配置和映射关系的实现代码示例:

import requests
import json

# 定义API端点和头信息
url = 'https://api.yonyoucloud.com/yonbip/scm/othinrecord/single/save'
headers = {'Content-Type': 'application/json'}

# 构建请求体
payload = {
    'resubmitCheckKey': 'unique_key_123',
    'id': 'order_id_456',
    'needCalcLines': False,
    'code': 'QTRK0000001',
    'defines!define1': 'outer_no_789',
    'org': '_findCollection find org_code from 4f73f755-1c4f-33e6-b5a1-7e3b8d894800 where code=warehouse_no_101112',
    'accountOrg': '_findCollection find org_code from 4f73f755-1c4f-33e6-b5a1-7e3b8d894800 where code=warehouse_no_101112',
    'vouchdate': '2023-10-01',
    'bustype': '001',
    'warehouse': 'ck01',
    'memo': '',
    '_status': 'Insert',
    'othInRecords': [
        {'id': '', 
         'rowno': 1, 
         ...,
         '_status': 'Insert'}
     ]
}

# 发送POST请求
response = requests.post(url, headers=headers, data=json.dumps(payload))

# 检查响应状态码及内容
if response.status_code == 200:
    print('Data successfully written to target platform.')
else:
    print(f'Failed to write data. Status code: {response.status_code}, Response: {response.text}')

通过上述步骤,我们成功地将源平台的数据进行了ETL转换,并通过用友BIPAPI接口写入了目标平台。这一过程不仅确保了数据的一致性和准确性,还大大提升了业务流程的自动化程度。 企业微信与ERP系统接口开发配置

更多系统对接方案