旺店通销售出库单集成到金蝶云星空的技术实现
在本案例中,我们将分享如何通过轻易云数据集成平台,实现旺店通·企业奇门的数据无缝对接至金蝶云星空,具体涉及将销售出库单(渠道关联)信息成功迁移到金蝶系统中。为了确保整个过程高效、可靠且透明,对各项技术细节进行了优化与详细配置。
首先,我们需要调用旺店通·企业奇门提供的API接口wdt.stockout.order.query.trade来获取最新的销售出库单数据。在获取过程中,由于数据量庞大且接口有分页和限流限制,需要合理设计调度任务,定时抓取并进行缓存处理,避免漏单现象。这一步骤通过批次操作及多线程技术,大幅度提升了数据提取效率。
随后,将抓取的数据迅速写入到金蝶云星空,其中利用其提供的批量保存接口batchSave。考虑到两端系统在字段格式及结构上的差异,通过定制化的数据映射以及转换逻辑,使得传输的数据能够完美适配目标系统。同时,为解决可能发生的异常情况,如网络故障或API响应错误,实现了完善的错误重试机制,并实时监控处理过程中的所有日志记录,以确保每条数据都得到妥善处理。
下面是关键步骤和代码示例:
import requests
import json
# Step 1: Fetch data from 旺店通 using API
def fetch_wdt_data(api_url, params):
    response = requests.get(api_url, params=params)
    if response.status_code == 200:
        return response.json()
    else:
        # Implement retry mechanism or log error
        pass
# Example parameters for fetching data
params = {
    'token': 'your_api_token',
    'start_time': '2023-01-01',
}
wdt_data = fetch_wdt_data('https://api.wangdian.cn/wdtstockoutorderquerytrade', params)
# Step 2: Transform and map the fetched data to fit 金蝶's format
def transform_data(wdt_records):
    transformed_records = []
    for record in wdt_records:
        transformed_record = {
            # Map fields accordingly here...
        }
        transformed_records.append(transformed_record)
    return transformed_records
mapped_data = transform_data(wdt_data['orders'])
# Step 3: Write data into 金蝶 using batchSave API
def write_to_kingdee(api_url, token, records):
    headers = {'Content-Type': 'application/json'}
    payload = {
        "records": records,
        "token": token,
       # Other necessary parameters...
   }
   response = requests.post(api_url, headers=headers, json=payload

### 调用旺店通·企业奇门接口获取并加工数据
在数据集成过程中,调用源系统的API接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockout.order.query.trade`,并对获取的数据进行初步加工。
#### 接口概述
接口`wdt.stockout.order.query.trade`用于查询销售出库单信息。该接口支持POST请求,并且可以根据多种条件进行查询,例如时间范围、订单状态、店铺编号等。以下是该接口的元数据配置:
```json
{
  "api": "wdt.stockout.order.query.trade",
  "effect": "QUERY",
  "method": "POST",
  "number": "order_no",
  "id": "stockout_id",
  "name": "order_no",
  "idCheck": true,
  "request": [
    {"field": "start_time", "label": "开始时间", "type": "datetime", "describe": "增量获取数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss", "value": "{{LAST_SYNC_TIME|datetime}}"},
    {"field": "end_time", "label": "结束时间", "type": "datetime", "describe": "增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss", "value": "{{CURRENT_TIME|datetime}}"},
    {"field": "status", "label": "状态", "type": "string", "describe":"5已取消,55已审核,95已发货,105 部分打款,110已完成,113:异常发货","value":"95"},
    {"field":"src_order_no","label":"系统订单编号","type":"string","describe":"系统订单编号"},
    {"field":"src_tid","label":"原始单号","type":"string","describe":"原始单号"},
    {"field":"stockout_no","label":"出库单号","type":"string","describe":"出库单号"},
    {"field":"shop_no","label":"店铺编号","type":"string","describe":"代表店铺所有属性的唯一编码,用于店铺区分,ERP内支持自定义(ERP店铺界面设置),用于获取指定店铺单据数据信息","value":"HBJBT01"},
    {"field":"warehouse_no","label":"仓库编号","type":"string","describe":"代表仓库所有属性的唯一编码,用于仓库区分,ERP内支持自定义(ERP仓库界面设置),用于获取指定仓库单据数据信息(不支持一次推送多个仓库编号)"},
    {"field":"is_by_modified","label":"is_by_modified","type":"string","describe":"is_by_modified"}
  ],
  ...
}
数据请求与清洗
在调用该接口时,我们需要传递一系列参数来限定查询条件。以下是主要参数及其作用:
start_time和end_time: 用于限定查询的时间范围,这两个参数通常使用上次同步时间和当前时间。status: 用于过滤订单状态,例如“95”表示已发货。shop_no: 店铺编号,用于区分不同店铺的数据。warehouse_no: 仓库编号,用于区分不同仓库的数据。
这些参数确保我们能够精确地获取所需的数据,并避免冗余信息。
数据转换与写入
在获取到原始数据后,需要对其进行一定的转换,以便写入目标系统。在这个过程中,我们通常会进行以下操作:
- 字段映射: 将源系统中的字段映射到目标系统中的相应字段。例如,将
order_no映射到目标系统中的订单编号字段。 - 数据清洗: 去除无效或重复的数据,并确保数据格式符合目标系统的要求。
 - 增量更新: 根据上次同步的时间戳,仅处理新增或更新的数据,以提高效率。
 
实际案例
假设我们需要从旺店通中获取某一时段内所有已发货的销售出库单,并将其写入金蝶系统。我们可以按照以下步骤进行配置和处理:
- 
配置请求参数:
{ ... {"field": "start_time", ... , "value": "{{LAST_SYNC_TIME|datetime}}"}, {"field": "end_time", ... , "value": "{{CURRENT_TIME|datetime}}"}, {"field": "status", ... , "value": "95"}, ... } - 
调用API: 使用轻易云平台提供的可视化界面配置上述参数,并发送POST请求以获取数据。
 - 
处理返回结果: 对返回的数据进行字段映射和清洗,例如:
{ ... {source_field: 'order_no', target_field: 'kd_order_no'}, {source_field: 'stockout_id', target_field: 'kd_stockout_id'}, ... } - 
写入目标系统: 将处理后的数据通过轻易云平台写入金蝶系统,实现数据的无缝对接。
 
通过上述步骤,我们可以高效地完成从旺店通到金蝶系统的数据集成。这不仅提高了业务流程的自动化程度,也确保了数据的一致性和准确性。

使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口
在数据集成的生命周期中,第二步至关重要,即将已经集成的源平台数据进行ETL(提取、转换、加载)转换,使其符合目标平台金蝶云星空API接口所能接收的格式,并最终写入目标平台。本文将详细探讨如何利用轻易云数据集成平台配置元数据,实现这一过程。
1. 配置API接口
为了将数据写入金蝶云星空,我们需要配置API接口。根据提供的元数据配置,目标API为batchSave,使用POST方法提交请求。以下是关键配置:
{
  "api": "batchSave",
  "effect": "EXECUTE",
  "method": "POST",
  "idCheck": true,
  "operation": {
    "method": "batchArraySave",
    "rows": 1,
    "rowsKey": "array"
  },
  ...
}
2. 数据字段映射与转换
在进行ETL转换时,需要确保源平台的数据字段能够正确映射到目标平台的字段,并进行必要的格式转换。以下是一些关键字段的配置示例:
- 
单据类型 (
FBillTypeID):{ "field": "FBillTypeID", "label": "单据类型", "type": "string", "describe": "单据类型", "parser": { "name": "ConvertObjectParser", "params": "FNumber" }, "value": "XSCKD01_SYS" } - 
单据编号 (
FBillNo):{ "field": "FBillNo", "label": "单据编号", "type": "string", "describe": "单据编号", "value": "{order_no}" } - 
日期 (
FDate):{ "field": "FDate", "label": `日期{stock_check_time}`, "type": `string`, `describe`: `日期`, `value`: `{consign_time}` } - 
发货组织 (
FStockOrgId):{ `field`: `FStockOrgId`, `label`: `发货组织`, `type`: `string`, `describe`: `组织`, `parser`: { `name`: `ConvertObjectParser`, `params`: `FNumber` }, `value`: `_function case when '{warehouse_no}' in ('047','048','051') then '105' when '{warehouse_no}' in ('050','052','049','053','055','057') then '114' else '100' end` } 
3. 明细信息处理
对于明细信息,需要特别注意数组结构和子字段的处理。例如,物料编码和实发数量等字段:
- 物料编码 (
FMaterialID): 
{
   `field`: `FMaterialID`,
   `label`: `物料编码`,
   `type`: `string`,
   `describe`: `物料编码`,
   `parser`: {
     `name`: ConvertObjectParser,
     params: FNumber
   },
   value: {{details_list.goods_no}}
}
- 实发数量 (
FRealQty): 
{
   field: FRealQty,
   label: 实发数量,
   type: string,
   describe: 实发数量,
   value: {{details_list.goods_count}}
}
4. 特殊字段处理
有些字段需要特殊处理,例如根据条件判断值或通过查询获取值:
- 是否赠品 (
FIsFree): 
{
   field: FIsFree,
   label: 是否赠品,
   type: string,
   describe: 是否赠品,
   value: _function CASE WHEN {{details_list.sell_price}}>0 THEN 'false' ELSE 'true' END
}
- 税率 (
FEntryTaxRate): 
{
   field: FEntryTaxRate,
   label: 税率,
   type: string,
   describe: 税率,
   value: _mongoQuery findField=content.FEntryTaxRate where={content.FBillNo:{eq:{src_trade_no}},content.FMaterialId_Fnumber:{eq:{details_list.goods_no}}}
}
总结
通过上述步骤,我们可以利用轻易云数据集成平台,将源平台的数据进行ETL转换,并写入到金蝶云星空API接口中。这一过程涉及多个关键技术点,包括API接口配置、数据字段映射与转换、明细信息处理以及特殊字段处理。通过合理配置元数据,可以确保数据在不同系统之间无缝对接,实现高效的数据集成。
