技术实现:轻松集成旺店通与金蝶云星空销售出库单

  • 轻易云集成顾问-曹润

案例分享:旺店通·企业奇门数据集成到金蝶云星空的技术实现

在商业系统对接中,如何确保不同平台的数据能够准确、高效地传递并转化为业务价值,是每一个系统集成顾问需要解决的重要问题。本文将以一个具体案例——“03-旺店通销售出库单对接金蝶销售出库单(线上)_组织公式_合并v2”为例,分享我们在轻易云数据集成平台上完成此任务的技术细节。

确保集成不漏单及实时监控

首先,为了确保从旺店通·企业奇门获取的数据不漏单,我们调取了 wdt.stockout.order.query.trade 接口,该接口允许我们定时可靠地抓取最新的销售出库单数据。通过设置合理的轮询机制,每隔固定时间段自动调用该API,并使用事务处理和日志记录功能来跟踪每次抓取的数据详情,从而保障数据完整性与操作透明度。

批量快速写入金蝶云星空

为了应对大量订单数据快速写入至金蝶云星空,我们采用了其提供的 batchSave API,这使得批量处理成为可能。例如,当有多个销售出库单需要同步时,可以一次性打包发送到目标系统,而非逐条插入数据库,不但提高了效率,还降低了网络开销。在这一步骤中,必须特别注意的是两个平台之间的数据格式差异,通过配置转换规则,实现两者之间无缝衔接。

处理分页和限流问题

在实际运行过程中,由于接口存在分页限制以及访问频率控制,需要妥善处理分页和限流问题。面对这些挑战,我们引入了分布式任务调度机制:对于每次调用接口所返回的数据页码信息进行标记、计算剩余未处理页数,同时设计重试逻辑,以便应付暂时性的网络或服务异常,为连续性和稳定性提供保障。

以上即是本案例的一些关键步骤与核心要点,下面将详细展开各个环节中的具体实现方法及代码示例。 系统集成平台API接口配置

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

在轻易云数据集成平台的生命周期中,调用源系统接口是数据处理的第一步。本文将详细探讨如何通过调用旺店通·企业奇门接口wdt.stockout.order.query.trade来获取销售出库单数据,并对其进行初步加工。

接口配置与请求参数

首先,我们需要配置接口及其请求参数。根据元数据配置,接口采用POST方法,主要参数如下:

  • start_time: 开始时间,用于增量获取数据,格式为yyyy-MM-dd HH:mm:ss
  • end_time: 结束时间,用于增量获取数据,格式为yyyy-MM-dd HH:mm:ss
  • status: 状态码,用于筛选不同状态的订单。
  • src_order_no: 系统订单编号。
  • src_tid: 原始单号。
  • stockout_no: 出库单号。
  • shop_no: 店铺编号,用于区分不同店铺的数据。
  • shop_nos: 批量店铺编号,用英文逗号隔开,最多支持20个店铺。
  • warehouse_no: 仓库编号,用于区分不同仓库的数据。

此外,还包括分页参数:

  • page_size: 每页返回的数据条数,默认值为100。
  • page_no: 页号,不传值默认从0页开始。

数据请求与清洗

在实际操作中,我们会根据业务需求设置具体的时间范围和状态码。例如,为了获取前一天的数据,可以将start_timeend_time分别设置为前一天的开始和结束时间:

{
  "start_time": "_function from_unixtime(({CURRENT_TIME}-86400),'%Y-%m-%d 00:00:00')",
  "end_time": "_function from_unixtime(({CURRENT_TIME}-86400),'%Y-%m-%d 23:59:59')"
}

通过这种方式,我们可以实现增量数据的获取。

数据转换与格式化

在获取到原始数据后,需要对部分字段进行转换和格式化。根据元数据配置,我们需要将字段consign_time转换为consign_date,并且格式化为日期类型:

"formatResponse": [
  {
    "old": "consign_time",
    "new": "consign_date",
    "format": "date"
  }
]

此外,对于嵌套结构的字段如details_list,我们可以使用“平铺”操作,将其展开成扁平结构,以便后续处理:

"beatFlat": ["details_list"]

分页处理

由于每次请求返回的数据条数有限,我们需要通过分页参数来循环获取所有数据。默认情况下,每页返回100条记录,从第0页开始:

"otherRequest": [
  {
    "field": "page_size",
    "value": "100"
  },
  {
    "field": "page_no",
    "value": "{PAGINATION_START_PAGE}"
  }
]

在实际操作中,可以根据返回结果中的总记录数和每页记录数计算总页数,并依次发起多次请求以获取完整数据集。

异常处理与补偿机制

为了确保数据完整性,我们还需要考虑异常情况。例如,如果某次任务执行失败,可以通过补偿机制重新发起请求。元数据配置中定义了定时任务(crontab)和接管字段(takeOverRequest),用于在特定时间点自动补偿缺失的数据:

"omissionRemedy": {
  "crontab": "45 8,20 * * *",
  "takeOverRequest": [
    {
      "field": "start_time",
      "value": "_function from_unixtime(({CURRENT_TIME}-86400-86400),'%Y-%m-%d 00:00:00')"
    },
    {
      "field": "end_time",
      "value": "_function from_unixtime(({CURRENT_TIME}-86400-86400),'%Y-%m-%d 23:59:59')"
    }
  ]
}

通过以上步骤,我们可以高效地调用旺店通·企业奇门接口获取销售出库单数据,并对其进行初步加工,为后续的数据转换与写入打下坚实基础。 电商OMS与WMS系统接口开发配置

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

在数据集成生命周期的第二步,我们将已经集成的源平台数据进行ETL转换,使其符合目标平台金蝶云星空API接口的接收格式,并最终写入目标平台。本文将详细探讨这一过程中涉及的技术细节和元数据配置。

1. API接口配置

在将数据写入金蝶云星空时,我们使用了batchSave API接口,并通过POST方法进行数据传输。以下是主要的API配置参数:

{
    "api": "batchSave",
    "method": "POST",
    "idCheck": true,
    "operation": {
        "rowsKey": "array",
        "rows": 1,
        "method": "batchArraySave"
    },
    "groupCalculate": {
        "headerGroup": ["shop_no", "warehouse_no", "consign_date"],
        "bodyGroup": ["details_list_goods_no"],
        "bodyName": "details",
        "targetBodyName": "FEntity",
        "bodyMaxLine": 500,
        "calculate": {
            "details_list_goods_count": "$sum",
            "details_list_paid": "$sum"
        }
    }
}

2. 请求字段映射与转换

为了确保数据能够正确地传输到金蝶云星空,需要对请求字段进行映射和转换。以下是关键字段及其转换逻辑:

  • 单据类型(FBillTypeID): 固定值为WDTXSCKD,通过ConvertObjectParser解析。
  • 单据编号(FBillNo): 根据店铺的email是否为空来决定单号。
  • 日期(FDate): 直接取自源数据中的consign_date
  • 销售组织(FSaleOrgId): 根据店铺编码进行条件判断。
  • 客户(FCustomerID): 如果email为空,则返回默认值,否则取店铺编号。
  • 销售部门(FSaleDeptID): 使用ConvertObjectParser解析。
  • 发货组织(FStockOrgId): 根据邮编信息进行条件判断。
  • 备注(FNOTE): 如果email为空,则返回格式化后的店铺编号。

示例如下:

[
    {
        "field":"FBillTypeID",
        "label":"单据类型",
        "type":"string",
        "value":"WDTXSCKD",
        ...
    },
    {
        ...
    },
    {
        ...
    }
]

3. 明细信息处理

明细信息是整个ETL过程中的核心部分,需要特别关注。以下是明细信息的配置和处理逻辑:

{
    ...
    {
        "field":"FEntity",
        ...
        "children":[
            {
                ...
                {
                    ...
                    {
                        ...
                        {
                            ...
                            {
                                ...
                                {
                                    ...
                                    {
                                        ...
                                        {
                                            ...
                                            {
                                                ...
                                                {"field":"FMaterialID","label":"物料编码","type":"string","value":"_function CASE '_findCollection find email from f9720649-c4cb-3d51-8bb0-e633ee48e23c where shop_no={shop_no} _endFind' WHEN '' THEN 'FX-0001' ELSE '{{details.details_list_goods_no}}' END","parent":"FEntity","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
                                                {"field":"FRealQty","label":"实发数量","type":"string","value":"{{details.details_list_goods_count}}","parent":"FEntity"},
                                                {"field":"FEntryTaxRate","label":"税率","type":"string","value":"{tax_rate}","parent":"FEntity"},
                                                {"field":"FTaxPrice","label":"含税单价","type":"string","value":"_function round({{details.details_list_paid}}\/{{details.details_list_goods_count}},7)","parent":"FEntity"},
                                                {"field":"FStockID","label":"仓库","type":"string","value":"_function CASE '_findCollection find email from f9720649-c4cb-3d51-8bb0-e633ee48e23c where shop_no={shop_no} _endFind' WHEN '' THEN 'TEST' ELSE '{warehouse_no}' END","parent":"FEntity","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
                                                {"field":"FStockStatusID","label":"库存状态","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"KCZT01_SYS"}
                                            ]
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        ]
    },
    ...
}

4. 财务信息处理

财务信息部分同样需要进行详细配置,以确保数据的一致性和准确性:

{
    ...
    {
        ...
        {"field":...},
        {"field":...},
        {"field":
            [
                {"field":
                    [
                        {"field":
                            [
                                {"field":
                                    [
                                        {"field":
                                            [
                                                {"field":
                                                    [
                                                        {"field":
                                                            [
                                                                {"field":
                                                                    [
                                                                        {"field":
                                                                            [
                                                                                {"field":
                                                                                    [
                                                                                        {"field":
                                                                                            [
                                                                                                {"field":
                                                                                                    [
                                                                                                        {"field":
                                                                                                            [
                                                                                                                ...,
                                                                                                                ...,
                                                                                                                ...,
                                                                                                                ...,
                                                                                                                ...,
                                                                                                                ...,
                                                                                                                ...,
                                                                                                                ...,
                                                                                                                ...,
                                                                                                                ...,
                                                                                                            ]
                                                                                                        }
                                                                                                    ]
                                                                                                }
                                                                                            ]
                                                                                        }
                                                                                    ]
                                                                                }
                                                                            ]
                                                                        },
                                                                        ...,
                                                                        ...,
                                                                        ...,
                                                                        ...,
                                                                        ...,
                                                                        ...,
                                                                    ]
                                                                },
                                                                ...,
                                                                ...,
                                                                ...,
                                                                ...,
                                                                ...,
                                                            ]
                                                        },
                                                        ...,
                                                        ...,
                                                        ...,
                                                        ...,
                                                    ]
                                                },
                                                ...,
                                                ...,
                                            ]
                                        },
                                        ...,
                                        ..., 
                                    ]
                                },
                                ..., 
                                ..., 
                            ]
                        }, 
                        ..., 
                        ..., 
                    ] 
                }, 
                ..., 
                ..., 
            ] 
         }, 
         ..., 
         ..., 
     }  
}

通过以上详细的元数据配置和字段映射,我们能够确保源平台的数据经过ETL转换后,能够准确无误地写入到金蝶云星空中。这一过程不仅提高了数据处理的效率,还保证了数据的一致性和完整性。 轻易云数据集成平台金蝶集成接口配置

更多系统对接方案