轻易云平台助力旺店通数据高效导入MySQL的技术实现

  • 轻易云集成顾问-曹润

旺店通·旗舰奇门数据集成到MySQL的技术案例分享

在当今复杂多变的商业环境中,实现高效的数据对接和集成至关重要。本案例将详细解析如何将旺店通·旗舰奇门中的供应商信息数据,通过API接口wdt.setting.purchaseprovider.querydetail,成功集成到BI泰海系统使用的MySQL数据库中。

首先,我们需要解决以下几个关键问题:

  1. 定时可靠地抓取旺店通·旗舰奇门接口数据:通过设置周期性任务,确保每次都能准确无误地获取最新供应商信息。
  2. 大量数据快速写入到MySQL:利用轻易云平台提供的高吞吐量能力,将大批量的数据迅速导入目标数据库。
  3. 处理分页和限流问题:针对旺店通·旗舰奇门接口可能存在的分页限制和调用频率限制,设计合理有效的数据拉取机制。
  4. 自定义数据转换逻辑以适应业务需求:实现源端与目的端之间的数据格式映射,从而满足不同系统间的数据结构差异。

本例具体运行方案是从“旺店通旗舰版-供应商信息查询”到“BI泰海-供应商信息表”的一次完整且高效的数据对接。以下内容将聚焦于:

  1. 如何正确配置及调用接口wdt.setting.purchaseprovider.querydetail来提取所需供应商信息。
  2. 针对各项API出错重试机制以及异常处理策略,以确保流程稳定可控。
  3. 在不断变化和增长的信息体量下,怎样通过集中监控与告警系统实时跟踪执行状态,并快速响应潜在的问题。

为了达到最优性能表现,我们采用了轻易云平台内置的可视化数据流设计工具,使整个集成过程更加直观、透明;同时,引入了自定义转换规则,将获取的JSON格式原始数据精准映射并写入MySQL。这不仅保证了数据的一致性,还极大提升了操作效率与维护便捷度。

下一步我们会深入探讨如何编排这些技术细节,实现一个从API调用、数据清洗转换,到最终落地存储全流程自动化、高效运转的大规模集成解决方案。通过此案例,希望为企业提供一套可以借鉴实施的方法论,为实现多源异构系统间互联互通积累宝贵经验。 电商OMS与ERP系统接口开发配置

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

在数据集成生命周期的第一步,调用源系统的API接口是至关重要的环节。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·旗舰奇门接口wdt.setting.purchaseprovider.querydetail来获取供应商信息,并对数据进行初步加工。

接口调用配置

首先,我们需要配置元数据,以便正确调用wdt.setting.purchaseprovider.querydetail接口。以下是该接口的元数据配置:

{
  "api": "wdt.setting.purchaseprovider.querydetail",
  "method": "POST",
  "number": "{provider_no}",
  "id": "{provider_id}",
  "request": [
    {
      "field": "pager",
      "label": "分页参数",
      "type": "object",
      "children": [
        {
          "field": "page_size",
          "label": "分页大小",
          "type": "string",
          "value": "50",
          "parent": "pager"
        },
        {
          "field": "page_no",
          "label": "页号",
          "type": "string",
          "value": "1",
          "parent": "pager"
        }
      ]
    },
    {
      "field": "params",
      "label": "业务参数",
      "type": "object",
      "children": [
        {
          "field": "modified_begin",
          "label": "开始时间",
          "type": "string",
          "value": "{{LAST_SYNC_TIME|datetime}}"
        },
        {
          "field": "modified_end",
          "label": "结束时间",
          "type":"string",
          “value”: "{{CURRENT_TIME|datetime}}"
        }
      ]
    }
  ],
  “autoFillResponse”: true
}

请求参数解析

在上述配置中,request字段包含了两个主要部分:分页参数和业务参数。

  1. 分页参数(pager)

    • page_size: 每页返回的数据条数,设置为50。
    • page_no: 当前请求的页码,初始值为1。
  2. 业务参数(params)

    • modified_begin: 数据修改的开始时间,使用变量{{LAST_SYNC_TIME|datetime}}动态获取上次同步时间。
    • modified_end: 数据修改的结束时间,使用变量{{CURRENT_TIME|datetime}}动态获取当前时间。

这些参数确保了我们能够按需分页获取供应商信息,并且只获取指定时间范围内的数据。

数据请求与清洗

在完成元数据配置后,我们通过轻易云平台发起POST请求,调用该API接口。响应的数据将自动填充到预定义的结构中(autoFillResponse: true),这一步骤极大简化了数据处理流程。

示例代码片段

以下是一个示例代码片段,用于发起请求并处理响应数据:

import requests
import json
from datetime import datetime

# 定义请求URL和头部信息
url = 'https://api.wangdian.cn/openapi2/wdt.setting.purchaseprovider.querydetail'
headers = {'Content-Type': 'application/json'}

# 获取当前时间和上次同步时间
current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
last_sync_time = '2023-09-01 00:00:00' # 示例值,应从数据库或配置中读取

# 构建请求体
payload = {
    'pager': {
        'page_size': '50',
        'page_no': '1'
    },
    'params': {
        'modified_begin': last_sync_time,
        'modified_end': current_time
    }
}

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

# 检查响应状态码并处理响应数据
if response.status_code == 200:
    data = response.json()
    # 数据清洗与转换逻辑
    suppliers = data.get('suppliers', [])
    for supplier in suppliers:
        # 对每个供应商信息进行必要的清洗与转换
        print(supplier)
else:
    print(f"Error: {response.status_code}, {response.text}")

数据转换与写入

在获取并清洗完供应商信息后,我们需要将其转换为目标系统所需的格式,并写入BI泰海-供应商信息表。这一步骤通常包括字段映射、格式转换以及数据验证等操作。

示例代码片段

以下是一个简单的数据转换示例:

# 假设suppliers包含了从API响应中提取的数据列表
transformed_data = []
for supplier in suppliers:
    transformed_supplier = {
        '供应商编号': supplier['provider_no'],
        '供应商名称': supplier['name'],
        '联系人': supplier['contact'],
        '联系电话': supplier['phone'],
        # 更多字段映射...
    }
    transformed_data.append(transformed_supplier)

# 将转换后的数据写入目标系统(例如数据库)
# 此处省略具体数据库操作代码,根据实际情况实现

通过上述步骤,我们完成了从旺店通·旗舰奇门接口获取、清洗、转换并写入供应商信息到目标系统的全过程。这一过程充分利用了轻易云平台提供的全生命周期管理功能,实现了高效、透明的数据集成。 泛微OA与ERP系统接口开发配置

使用轻易云数据集成平台进行ETL转换并写入MySQL API接口

在数据集成生命周期的第二步,我们将已经集成的源平台数据进行ETL(提取、转换、加载)转换,最终写入目标平台MySQL API接口。以下是详细的技术步骤和实现细节。

数据提取与清洗

首先,从源平台(旺店通旗舰版)提取供应商信息。假设我们已经通过轻易云数据集成平台完成了数据请求和初步清洗,获得了以下格式的数据:

{
  "provider_id": "123",
  "provider_no": "P001",
  "provider_name": "供应商A",
  "contact": "张三",
  "follower_name": "李四",
  "telno": "010-12345678",
  "mobile": "13800138000",
  "fax": "010-87654321",
  "zip": "100000",
  "email": "example@example.com",
  "qq": "12345678",
  "wangwang": "supplierA_ww",
  "address": "北京市朝阳区某街道某号",
  "website": "http://www.example.com",
  "arrive_cycle_days": "7",
  "last_purchase_time": "2023-01-01T00:00:00Z",
  "remark": "",
  "is_disabled": false,
  "deleted": false,
  "modified": "2023-01-02T00:00:00Z",
  "created": "2022-12-31T00:00:00Z"
}

数据转换

接下来,我们需要将上述数据转换为目标平台MySQL API接口能够接收的格式。根据元数据配置,目标API接口需要的数据格式如下:

{
    api: 'execute',
    effect: 'EXECUTE',
    method: 'POST',
    idCheck: true,
    request: [
        {
            field: 'main_params',
            label: 'main_params',
            type: 'object',
            describe: '111',
            children: [
                { field: 'provider_id', label: '供应商id', type: 'string', value: '{provider_id}' },
                { field: 'provider_no', label: '供应商编号', type: 'string', value: '{provider_no}' },
                { field: 'provider_name', label: '供应商名称', type: 'string', value: '{provider_name}' },
                { field: 'contact', label: '联系人', type: 'string', value: '{contact}' },
                { field: 'follower_name', label: '跟进人', type: 'string', value: '{follower_name}' },
                { field: 'telno', label: '固话', type: 'string', value: '{telno}' },
                { field:'mobile', label:'手机', type:'string', value:'{mobile}'},
                { field:'fax', label:'传真', type:'string', value:'{fax}'},
                { field:'zip', label:'邮编', type:'string', value:'{zip}'},
                { field:'email', label:'邮件', type:'string', value:'{email}'},
                { field:'qq', label:'QQ' ,type:'string' ,value:'{qq}'},
                { field:'wangwang' ,label :'旺旺' ,type :'string' ,value :'{wangwang}'},
                { field :'address' ,label :'地址' ,type :'string' ,value :'{address}'},
                { field :'website' ,label :'网址' ,type :'string' ,value :'{website}'},
                { field :'arrive_cycle_days' ,label :'到货天数' ,type :'string' ,value :'{arrive_cycle_days}'},
                {field :'last_purchase_time' ,label :'上次采购日期' ,type :'string' ,value : '{{last_purchase_time|datetime}}'},
                {field :'remark' ,label :'备注' ,type :'string' ,value :'{remark }'},
                {field :'is_disabled ',label :'停用 ',type :' string ',value :'{is_disabled }'},
                {field :'deleted ',label :‘是否删除 ’,type :‘ string ’,value :‘{deleted }’},
                {field :‘modified ’,label :‘最后修改时间 ’,type :‘ string ’,value :‘{{modified |datetime }}’},
                {field :‘created ’,label :‘创建时间 ’,type :‘ string ’,value :‘{{created |datetime }}’}
            ]
        }
    ],
    otherRequest:[
        {
            field:"main_sql", 
            label:"main_sql", 
            type:"string", 
            describe:"111", 
            value:"REPLACE INTO wdt_setting_purchaseprovider_querydetail (provider_id, provider_no, provider_name, contact, follower_name, telno, mobile, fax, zip, email, qq, wangwang, address, website, arrive_cycle_days,last_purchase_time, remark,is_disabled, deleted, modified, created) VALUES (:provider_id,:provider_no,:provider_name,:contact,:follower_name,:telno,:mobile,:fax,:zip,:email,:qq,:wangwang,:address,:website,:arrive_cycle_days,:last_purchase_time,:remark,:is_disabled,:deleted,:modified,:created);"
        }
    ]
}

数据加载

将转换后的数据通过API接口写入目标平台MySQL。具体操作如下:

  1. 构建请求体:根据元数据配置,将提取的数据映射到API请求体中。
{
    api:"execute",
    effect:"EXECUTE",
    method:"POST",
    idCheck:true,
    request:[
        {
            main_params:{
              provider_id:"123",
              provider_no:"P001",
              provider_name:"供应商A",
              contact:"张三",
              follower_name:"李四",
              telno:"010-12345678",
              mobile:"13800138000",
              fax:"010-87654321",
              zip:"100000",
              email:"example@example.com",
              qq:"12345678", 
              wangwang :"supplierA_ww", 
              address :"北京市朝阳区某街道某号", 
              website :"http://www.example.com", 
              arrive_cycle_days :"7", 
              last_purchase_time :"2023-01-01T00:00:00Z ", 
              remark :" ", 
              is_disabled:false ,
              deleted:false ,
              modified :"2023-01-02T00:00:00Z ", 
              created :"2022-12-31T00:00:00Z "
          }
      }
   ],
   otherRequest:[
       {
           main_sql:
           `REPLACE INTO wdt_setting_purchaseprovider_querydetail (
               provider_id,
               provider_no,
               provider_name,
               contact,
               follower_name,
               telno,
               mobile,
               fax,
               zip,
               email,
               qq,
               wangwang,
               address,
               website,
               arrive_cycle_days,
               last_purchase_time,
               remark,
               is_disabled,
               deleted,
               modified ,
               created
           ) VALUES (
             ':provider_id',
             ':provider_no',
             ':provider_name',
             ':contact',
             ':follower_name',
             ':telno',
             ':mobile',
             ':fax',
             ':zip',
             ':email',
             ':qq',
             ':wangwang',
             ':address ',
             ':website ',
             ':arrive_cycle_days ',
             ':last_purchase_time ',
             ':remark ',
             ':is_disabled ',
             ':deleted ',
             ':modified ',
             ':created '
           );`
       }
   ]
}
  1. 发送HTTP请求:使用HTTP POST方法,将构建好的请求体发送到目标MySQL API接口。
const axios = require('axios');

axios.post('https://api.example.com/execute',{
    api:"execute ",
    effect :"EXECUTE ",
    method :"POST ",
    idCheck:true ,
    request:[...],
    otherRequest:[...]
}).then(response=>{
   console.log(response.data);
}).catch(error=>{
   console.error(error);
});

通过以上步骤,我们成功地将从源平台提取并清洗后的供应商信息,经过ETL转换后,写入到了目标平台MySQL数据库中。这一过程充分利用了轻易云数据集成平台提供的元数据配置,实现了不同系统间的数据无缝对接和高效管理。 金蝶与MES系统接口开发配置

更多系统对接方案