ETL转换:从退换管理数据到金蝶云星辰V2的应用

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

系统对接集成案例分享:退换管理对接销售退货单

在本文中,我们将深入探讨一个具体的系统对接集成案例,即将旺店通·企业奇门的数据高效地集成到金蝶云星辰V2。该方案的核心任务是实现“退换管理对接销售退货单”,确保数据全程透明、无缝流转。

首先,确保从旺店通·企业奇门获取准确、完整的数据至关重要。我们通过调用其接口wdt.refund.query来定时抓取最新的退换信息,并解决了分页和限流的问题,从源头上避免了漏单现象。

其次,为应对大量数据快速写入到金蝶云星辰V2的需求,我们设计了批量处理机制,通过API /jdy/v2/scm/sal_in_bound执行大规模数据导入。同时,在整个过程中,每条数据都经过严格的数据格式转换,保证与目标系统完全兼容。此外,还设置了完善的异常处理机制和错误重试策略,以应付各种可能发生的不确定因素,提高整体可靠性。

为了进一步提高监控和日志记录功能,我们引入实时监控模块,对整个流程中的每一步进行全面记录。一旦发现任何问题,可以迅速定位并解决,为业务连续性提供坚实保障。同时,为适应不同客户特定需求,针对金蝶云星辰V2实施了定制化的数据映射策略,使得各个环节高度匹配,实现了一站式自动化操作。

如此一来,“退换管理对接销售退货单”方案不仅提升了操作效率,大幅降低人为误差,同时也为企业后续扩展其他类似应用场景提供了一套成熟可行的方法论。 金蝶云星空API接口配置

调用旺店通·企业奇门接口wdt.refund.query获取并加工数据

在数据集成的生命周期中,第一步是调用源系统接口获取数据。本文将深入探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口wdt.refund.query来获取退换管理相关的数据,并对这些数据进行初步加工。

接口调用配置

首先,我们需要配置接口调用的元数据。根据提供的元数据配置,可以看到该接口使用POST方法进行请求,主要参数如下:

  • process_status: 退换单处理状态,默认值为90(已完成)。
  • time_type: 时间类型,默认值为0(最后更新时间)。
  • start_timeend_time: 用于增量获取数据的时间范围。
  • page_size: 每页返回的数据条数,默认值为40。
  • shop_no: 店铺编号列表。
  • page_no: 页号,默认从0页开始。

此外,还可以通过传递特定字段如refund_nosrc_refund_notrade_notid等来精确查询特定的退换单。

请求参数设置

在实际操作中,我们需要根据业务需求设置具体的请求参数。例如:

{
  "process_status": "90",
  "time_type": "0",
  "start_time": "{{LAST_SYNC_TIME|datetime}}",
  "end_time": "{{CURRENT_TIME|datetime}}",
  "page_size": "40",
  "shop_no": "KH01301,KH01138,KH01141,KH01146,KH01135,KH01136,KH01138,KH01139,KH01140,KH01143,KH01142,KH01144,KH01147,KH01137,KH01148,KH01149,KH01236,KH01235,KH01234,KH01245,KH01227,KH01310,DP18DDGW",
  "page_no": "0"
}

上述参数配置将请求所有状态为已完成(90)的退换单,并按最后更新时间增量获取,从上次同步时间到当前时间的数据,每页返回40条记录。

数据清洗与转换

在获取到原始数据后,需要对其进行清洗和转换,以便后续处理和分析。以下是一些常见的数据清洗与转换操作:

  1. 字段映射:将原始数据中的字段映射到目标系统所需的字段。例如,将原始字段refund_id映射为目标系统中的id字段。
  2. 数据过滤:根据业务规则过滤掉不需要的数据。例如,只保留处理状态为已完成(90)的记录。
  3. 格式转换:将日期时间格式统一转换为目标系统所需的格式。

示例代码如下:

def clean_and_transform(data):
    cleaned_data = []
    for record in data:
        if record['process_status'] == '90':
            transformed_record = {
                'id': record['refund_id'],
                'refund_number': record['refund_no'],
                'status': record['process_status'],
                'last_update': convert_datetime_format(record['last_update'])
            }
            cleaned_data.append(transformed_record)
    return cleaned_data

def convert_datetime_format(date_str):
    # 假设原始日期格式为 yyyy-MM-dd HH:mm:ss
    # 转换为目标格式 yyyy/MM/dd HH:mm:ss
    from datetime import datetime
    dt = datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S')
    return dt.strftime('%Y/%m/%d %H:%M:%S')

自动填充响应

轻易云平台提供了自动填充响应功能,可以自动将API响应中的字段填充到预定义的数据结构中。这极大地简化了开发工作,提高了效率。

{
  "autoFillResponse": true,
  "responseMapping": {
    "id": "refund_id",
    "name": "refund_no",
    // 更多映射关系...
  }
}

通过以上配置和代码示例,我们可以高效地调用旺店通·企业奇门接口获取退换管理相关的数据,并对其进行清洗和转换,为后续的数据处理和分析打下坚实基础。 如何对接用友BIP接口

退换管理对接销售退货单的ETL转换与写入金蝶云星辰V2API接口

在数据集成的生命周期中,将已经集成的源平台数据进行ETL转换,并转为目标平台所能接收的格式是至关重要的一步。本文将详细探讨如何利用轻易云数据集成平台,将退换管理的数据转换为金蝶云星辰V2API接口所能接收的格式,并最终写入目标平台。

API接口配置

首先,我们需要明确目标平台金蝶云星辰V2API接口的配置。以下是元数据配置:

{
  "api": "/jdy/v2/scm/sal_in_bound",
  "method": "POST",
  "idCheck": true,
  "autoCheck": "sal_bill_inbound",
  "request": [
    {"field":"bill_date","label":"出库日期","type":"date","describe":"格式:2019-01-01  {modified}","value":"{modified}"},
    {"field":"customer_number","label":"客户编码","type":"string","value":"{shop_no}"},
    {"field":"bill_no","label":"单据编码","type":"string","value":"{refund_no}"},
    {"field":"operation_key","label":"操作类型","type":"string","value":"audit"},
    {"field":"remark","label":"单据备注","type":"string","value":"{warehouse_no}"},
    {"field":"custom_field","label":"订单号","type":"object","value":"refund_order_list",
      "children":[
        {"field":"custom_field__1__3bleb98xieh42h","label":"订单号详情","type":"string","value":"{{refund_order_list.sales_tid}}"}
      ]
    },
    {"field":"material_entity","label":"material_entity","type":"array","value":"refund_order_list",
      "children":[
        {"field":"material_number","label":"商品编码","type":"string","value":"{{refund_order_list.spec_no}}"},
        {"field":"all_amount","label":"价税合计","type":"string","value":"{{refund_order_list.refund_order_amount}}"},
        {"field":"stock_number","label":"仓库编码","type":"string","value":"{warehouse_no}"},
        {"field": "qty", "label": "数量", "type": "float", "value": "{{refund_order_list.stockin_num}}"},
        {"field": "is_free", "label": "是否赠品", "type": "string", 
          "value": "_function case '{{refund_order_list.refund_order_amount}}' when '0.0000' then 'true' else 'false' end"
        },
        {"field": "kf_date", "label": "生产日期", "type": "string", "value": "2023-05-01"},
        {"field": "unit_id", "label": "单位id", 
          "value": "_mongoQuery b88a7889-af5d-3efd-aac4-d4960eae6748 findField=content.base_unit_id where={\"content.number\":{\"$eq\":\"{{refund_order_list.spec_no}}\"}}"
        },
        {"field": "kf_period", "label": "保质期天数", type: “string”, value: “365”},
        {
          “field”: “kf_type”, “label”: “保质期类型”, 
          “value”: "_mongoQuery 5526d22d-75c0-35e7-895d-f0e67f04e2cc findField=content.kf_period_type where={\"content.number\":{\"$eq\":\"{{refund_order_list.spec_no}}\"}}"
        },
        {
          “field”: “valid_date”, “label”: “有效天数”, type: “string”, value: “2024-04-30”
        },
        {
          “field”: “sp_number”, “label”: “仓位”, type: “string”, 
          value: "_function case '{warehouse_no}' when 'CK00001' then 'A0001' else '' end"
        },
        {
          field: ‘price’, label: ‘单价’, type: ‘string’, 
          value: "_function case '{{refund_order_list.refund_order_amount}}'/'{{refund_order_list.stockin_num}}' when '0' then '0' else {{refund_order_list.refund_order_amount}}/{{refund_order_list.stockin_num}} end"
        }
      ]
    }
  ]
}

数据清洗与转换

在进行数据写入之前,必须确保数据经过清洗和转换,以符合目标API接口的要求。具体步骤如下:

  1. 日期字段处理

    • bill_date 字段需要按照指定格式(例如:2019-01-01)进行转换。
    • 使用 {modified} 占位符动态替换为实际日期。
  2. 字符串字段映射

    • customer_number 映射为 {shop_no}
    • bill_no 映射为 {refund_no}
    • remark 映射为 {warehouse_no}
  3. 嵌套对象与数组处理

    • custom_fieldmaterial_entity 是复杂结构,需要分别处理其子字段。
    • 对于 custom_field,我们提取 sales_tid 并映射到 custom_field__1__3bleb98xieh42h
    • 对于 material_entity,我们需要处理多个子字段,包括商品编码、价税合计、仓库编码、数量等。
  4. 逻辑判断与计算

    • 对于是否赠品字段 (is_free),通过判断退款金额是否为零来确定。
    • 单价 (price) 的计算需要根据退款金额和数量进行除法运算,并处理除零情况。
  5. 数据库查询

    • 使用 _mongoQuery 方法从MongoDB中查询单位ID和保质期类型等信息。

数据写入

经过上述步骤的数据清洗和转换后,即可调用金蝶云星辰V2API接口进行数据写入。具体调用方式如下:

import requests

url = 'https://api.kingdee.com/jdy/v2/scm/sal_in_bound'
headers = {'Content-Type': 'application/json'}
data = {
    # 填充经过清洗和转换后的数据
}

response = requests.post(url, headers=headers, json=data)

if response.status_code == 200:
    print('Data successfully written to Kingdee Cloud V2')
else:
    print(f'Failed to write data: {response.text}')

通过上述方法,我们实现了从退换管理系统到金蝶云星辰V2API接口的数据ETL转换与写入。这不仅提高了数据处理的效率,也确保了数据的一致性和准确性。 钉钉与CRM系统接口开发配置

更多系统对接方案