线上旺店通销售出库单对接星辰销售订单-ok
成功实现企业信息化的关键在于高效、准确的数据集成。本案例将深入探讨如何通过轻易云数据集成平台,将旺店通·企业奇门中的销售出库单数据无缝对接并写入到金蝶云星辰V2中。该解决方案不仅确保了数据的实时性和完整性,还大幅提升了业务运作效率。
为实现这一目标,我们需使用两个关键API:wdt.stockout.order.query.trade用于从旺店通·企业奇门系统中获取销售出库单数据,/jdy/v2/scm/sal_order则是向金蝶云星辰V2写入相应的销售订单。
首先,通过调用 wdt.stockout.order.query.trade 接口,从旺店通获取原始的销售出库单数据。在这个过程中,需要考虑API接口分页和限流问题,以确保所有订单都能被顺利抓取。此外,针对不同业务场景,可根据具体需求自定义数据转换逻辑,确保从源头上处理好数据格式差异,并准备好适合金蝶云星辰V2输入的数据结构。
其次,在传输大量销售信息至金蝶云星辰时,高吞吐量的数据写入能力成为决定项目成功与否的重要因素。利用 /jdy/v2/scm/sal_order API,可以将批量整理后的销售信息快速、稳定地写入到金蝶云系统,为后续业务环节提供精准的数据支持。同时,通过设置可靠的错误重试机制,能够有效应对在网络波动或API响应异常情况下造成的失败请求,保证最终的一致性。
此外,为预防因意外导致的信息丢失及加强整体任务管理,我们还引入了集中监控和告警系统。这些工具可以实时跟踪每个数据集成任务状态与性能,并及时发出异常报警,让技术团队迅速定位问题并进行修复。
最后,为实现全流程可视化管理,本方案借助轻易云的平台特性,通过统一视图展示整个数据流设计,这使得优化配置更加直观,使得技术人员可以更加灵活地调整各项参数,以达到最佳效果。

调用源系统旺店通·企业奇门接口wdt.stockout.order.query.trade获取并加工数据
在数据集成生命周期的第一步中,调用源系统接口以获取原始数据是至关重要的一环。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口wdt.stockout.order.query.trade,并对获取的数据进行初步加工。
接口调用配置
首先,我们需要配置接口调用的元数据。以下是该接口的详细配置:
- API: 
wdt.stockout.order.query.trade - 请求方法: 
POST - 主要字段:
order_no: 订单编号stockout_id: 出库单IDconsign_time: 发货时间(需转换为consign_date)
 
请求参数配置
为了实现增量数据获取,我们需要设置请求参数。以下是关键的请求参数及其描述:
- start_time: 开始时间,用于增量获取数据,格式为
yyyy-MM-dd HH:mm:ss。该值通常取自上次同步时间({{LAST_SYNC_TIME|datetime}})。 - end_time: 结束时间,用于增量获取数据,格式为
yyyy-MM-dd HH:mm:ss。该值通常取当前时间({{CURRENT_TIME|datetime}})。 - status: 状态过滤,取值范围包括:5已取消,55已审核,95已发货,105部分打款,110已完成,113异常发货。我们选择了95、105、110和113状态。
 - shop_no: 店铺编号,用于区分不同店铺的数据。
 - warehouse_no: 仓库编号,用于区分不同仓库的数据。
 - page_size和page_no: 分页参数,每页返回的数据条数和页号。
 
以下是一个示例请求配置:
{
    "start_time": "{{LAST_SYNC_TIME|datetime}}",
    "end_time": "{{CURRENT_TIME|datetime}}",
    "status": "95,105,110,113",
    "shop_no": "指定店铺编号",
    "warehouse_no": "指定仓库编号",
    "page_size": "{PAGINATION_PAGE_SIZE}",
    "page_no": "{PAGINATION_START_PAGE}"
}
数据清洗与转换
在接收到原始数据后,我们需要对其进行清洗和转换,以便后续处理。以下是主要的清洗与转换操作:
- 
字段重命名:
- 将原始字段
consign_time重命名为consign_date。 
 - 将原始字段
 - 
日期格式转换:
- 将字段
consign_date的日期格式进行标准化处理。 
 - 将字段
 
示例代码如下:
def transform_data(raw_data):
    transformed_data = []
    for record in raw_data:
        transformed_record = {
            "order_no": record["order_no"],
            "stockout_id": record["stockout_id"],
            "consign_date": format_date(record["consign_time"])
        }
        transformed_data.append(transformed_record)
    return transformed_data
def format_date(date_str):
    # 假设输入日期格式为 'yyyy-MM-dd HH:mm:ss'
    from datetime import datetime
    date_obj = datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S')
    return date_obj.strftime('%Y-%m-%d')
条件过滤
根据业务需求,我们可能需要对返回的数据进行条件过滤。例如,仅保留特定店铺和仓库的数据:
"condition":[
  [
    {"field":"shop_no","logic":"neqv2","value":"KH01181"},
    {"field":"warehouse_no","logic":"in","value":"CK00001,CK00002,CK00008,CK00009,CK00010,CK00011,CK00012,CK00013,CK00014"}
  ]
]
通过上述条件过滤,可以确保仅处理符合业务需求的数据,从而提高数据处理效率。
自动填充响应
为了简化后续处理流程,我们可以启用自动填充响应功能,使得平台自动将处理后的数据填充到目标系统中。这一步骤可以通过配置元数据中的autoFillResponse:true来实现。
综上所述,通过轻易云数据集成平台调用旺店通·企业奇门接口并对数据进行初步加工,可以高效地实现不同系统间的数据无缝对接,为后续的数据处理和分析奠定坚实基础。

轻易云数据集成平台:ETL转换与金蝶云星辰V2API接口对接技术案例
在数据集成的生命周期中,ETL(Extract, Transform, Load)转换是一个关键步骤。本文将详细探讨如何使用轻易云数据集成平台,将源平台的数据转换为金蝶云星辰V2API接口所能接收的格式,并最终写入目标平台。
API接口配置
根据元数据配置,我们需要将线上旺店通销售出库单的数据转换并写入金蝶云星辰V2。以下是具体的API接口配置:
{
    "api": "/jdy/v2/scm/sal_order",
    "effect": "EXECUTE",
    "method": "POST",
    "idCheck": true,
    "request": [
        {"field":"bill_no","label":"订单编码","type":"string","describe":"销售订单编码","value":"{stockout_no}"},
        {"field":"remark","label":"单据备注","type":"string","describe":"备注","value":"{remark}"},
        {"field":"customerid_id","label":"客户ID","type":"string","describe":"旺店通订单上店铺编码"},
        {"field":"bill_date","label":"订单日期","type":"string","describe":"销售订单日期{consign_time}","value":"{consign_time}"},
        {"field":"customer_number","label":"客户编码","type":"string","describe":"单据来源","value":"{shop_no}"},
        {"field":"operation_key","label":"操作类型","type":"string","value":"audit"},
        {"field":"bill_stock_id","label":"仓库","type":"string",
         "value": "_mongoQuery dcf15639-66d6-3904-821c-5bc5e2d89a62 findField=content.id where={\"content.number\":{\"$eq\":\"{warehouse_no}\"}}"},
        {"field":"emp_number","label":"业务员","type":"string","value": "ZY00007"},
        {
            "field": "custom_field",
            "label": "自定义字段",
            "type": "object",
            "children": [
                {"field": "custom_field__1__4xieazfpq8cdhjia", "label": "订单编号", "type": "string", "value": "{trade_no}"},
                {"field": "custom_field__1__45nbzlh8blt7", "label": "分销名称", "type": "string", "value": "{fenxiao_nick}"}
            ]
        },
        {
            "field": "material_entity",
            "label": "分录明细",
            "type": "array",
            "describe": "分录明细",
            "value": "details_list",
            "children":[
                {"field": "material_number", 
                 "label": 物料编码,
                 type: string,
                 describe: 物料编码,
                 value: {{details_list.spec_no}}},
                {"field": qty,
                 label: 数量,
                 type: string,
                 describe: 数量,
                 value: {{details_list.goods_count}}},
                {
                    field: unit_id,
                    label: 单位,
                    type: string,
                    describe: 单位,
                    value: _mongoQuery b88a7889-af5d-3efd-aac4-d4960eae6748 findField=content.base_unit_id where={\"content.number\":{\"$eq\":\"{{details_list.spec_no}}\"}},
                    default: 6
                },
                {
                    field: price,
                    label: 单价,
                    type: string,
                    describe: 单价,
                    value: _function ('{{details_list.sell_price}}'*'{{details_list.goods_count}}'+'{{details_list.share_post}}')\/{{details_list.goods_count}}
                },
                {
                    field: sp_id,
                    label: 仓位ID,
                    type: string,
                    value: _function case '{warehouse_no}' when 'CK00001' then '1099179991205176320' else '' end
                },
                {
                    field:is_free,label:"是否赠品",type:"string",value:"_function case '{{details_list.sell_price}}' when '0.0000' then 'true' else 'false' end"
                },
                {
                    field:"stock_id",label:"仓库id",type:"string",value:"_mongoQuery dcf15639-66d6-3904-821c-5bc5e2d89a62 findField=content.id where={\"content.number\":{\"$eq\":\"{warehouse_no}\"}}"
                },
                {
                    field:"comment",label:"商品行备注",type:"string",value:"_function case when '{shop_no}' in ('KH01227','KH01310','KH00772') then '{trade_no}({cs_remark})' when '{{details_list.sell_price}}' ='0.0000' then '{src_trade_no}({cs_remark})' else '' end"
                }
            ]
        }
    ]
}
数据字段解析与转换
- 
订单基础信息
bill_no:从源数据中的stockout_no字段提取,用于标识销售订单编码。remark:从源数据中的remark字段提取,作为单据备注。customerid_id:直接映射旺店通订单上的店铺编码。bill_date:从源数据中的consign_time字段提取,表示销售订单日期。customer_number:从源数据中的shop_no字段提取,表示客户编码。operation_key:固定值为audit,表示操作类型。
 - 
仓库信息
bill_stock_id: 使用MongoDB查询,根据仓库编号获取对应的仓库ID。
 - 
业务员信息
emp_number: 固定值为ZY00007.
 - 
自定义字段
custom_field__1__4xieazfpq8cdhjia: 映射源数据中的订单编号(trade_no)。custom_field__1__45nbzlh8blt7: 映射源数据中的分销名称(fenxiao_nick)。
 - 
分录明细
- 每个分录明细包含多个字段,如物料编码、数量、单位、单价等:
material_number: 映射源数据中的规格编号(spec_no)。qty: 映射源数据中的商品数量(goods_count)。unit_id: 使用MongoDB查询,根据规格编号获取对应的单位ID,默认值为6。price: 使用函数计算每个商品的单价,公式为(sell_price * goods_count + share_post) / goods_count。sp_id: 使用条件判断,根据仓库编号设置仓位ID。is_free: 使用条件判断,如果售价为0,则标记为赠品。stock_id: 使用MongoDB查询,根据仓库编号获取对应的仓库ID。comment: 根据不同条件设置商品行备注。
 
 - 每个分录明细包含多个字段,如物料编码、数量、单位、单价等:
 
数据写入目标平台
通过上述配置和转换,将处理后的数据发送到金蝶云星辰V2API接口。整个过程确保了数据格式符合目标平台的要求,并且每个字段都进行了适当的处理和映射。
这种方法不仅提高了数据集成的效率,还确保了数据的一致性和准确性。在实际应用中,可以根据具体需求进一步优化和调整元数据配置,以满足不同业务场景的需求。
