轻易云数据集成平台:从旺店通到金蝶云星空的高效ETL方案

  • 轻易云集成顾问-李国敏
### 基于轻易云平台的旺店通·企业奇门数据集成到金蝶云星空案例分享 在系统对接和数据集成领域,实现高效且可靠的数据传输是提升业务运作效率的重要一环。本次案例展示的是如何利用轻易云数据集成平台,将旺店通·企业奇门的销售订单数据无缝对接并批量写入到金蝶云星空系统,以支持“京采”项目下的销售订单管理。 #### 1. 旺店通·企业奇门API接口调用与数据抓取 我们首先通过调用**wdt.trade.query**接口,从旺店通·企业奇门获取销售订单的数据。这部分需要特别注意分页处理和限流问题。为了确保抓取过程稳定,我们设计了一套定时任务机制,每隔一定时间自动触发API请求,并在每次请求后进行异常处理及错误重试,确保不漏任何单据。 ```python def fetch_data_from_wdt(page_no, page_size): api_url = "https://api.wangdian.cn/wdt/trade/query" params = { "page_no": page_no, "page_size": page_size, # 其他必须参数 } response = requests.post(api_url, data=params) if response.status_code == 200: return response.json() else: log_error(response) ``` #### 2. 数据格式转换与映射 由于两套系统之间的数据格式存在差异,在成功获取到从旺店通返回的JSON格式销售订单后,我们需进行字段映射及格式转换。例如,针对客户信息、商品明细等关键字段,通过自定义脚本实现自动化转换,使其符合金蝶云星空所要求的标准格式。 ```python def transform_data(wdt_data): transformed_data = [] for order in wdt_data.get('orders', []): transformed_order = { "orderNo": order["trade_no"], "customerName": order["buyer_nick"], # 更多字段映射... } transformed_data.append(transformed_order) return transformed_data ``` #### 3. 数据写入到金蝶云星空 完成数据转化后,即可通过**batchSave** API接口将销售订单批量写入到金蝶云星空。这一步骤不仅实现了高效的大规模数据导入,还引进了实时监控和日志记录机制,以便随时跟踪每个单据的状态,大大提高透明度。如果出现类似网络中断或服务不可用等异常情况,会有完善的重试策略来保证操作可追溯,并最大程度降低事务失败率。 ```python def save_to_kingdee(data_batch): api_url = "https://api.king ![金蝶与CRM系统接口开发配置](https://pic.qeasy.cloud/D11.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台调用旺店通·企业奇门接口wdt.trade.query获取并加工数据 在数据集成的生命周期中,调用源系统接口是关键的第一步。本文将详细探讨如何使用轻易云数据集成平台,通过调用旺店通·企业奇门接口`wdt.trade.query`来获取并加工销售订单数据。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。以下是元数据配置的详细信息: ```json { "api": "wdt.trade.query", "effect": "QUERY", "method": "POST", "number": "{trade_no}", "id": "{trade_id}", "idCheck": true, "request": [ {"field": "status", "label": "status", "type": "string", "describe": "111", "value": "55,95,105,110,113"}, {"field": "start_time", "label": "start_time", "type": "string", "describe": "111", "value": "{{LAST_SYNC_TIME|datetime}}"}, {"field": "end_time", "label": "end_time", "type": "string", "describe": "111", "value": "{{CURRENT_TIME|datetime}}"}, {"field": "src_tid", "label": "src_tid", "type": "string", "describe": ":111"}, {"field": ":trade_no", ":label: ":trade_no:", ":type: ":string:", ":describe: ":111:"}, {"field: ":shop_no:", ":label: ":shop_no:", ":type: ":string:", ":describe: ":111:"}, {"field: ":warehouse_no:", ":label: ":warehouse_no:", ":type: ":string:", ":describe: :111:"}, {"field: :goodstax:, :label::goodstax:, :type::string:, :describe::111:"}, {"field::has_logistics_no:, :label::has_logistics_no:, :type::string:, :describe::111:"}, {"field::src:, :label::src:, :type::string:, :describe::111:"}, {"field::logistics_no:, :label::logistics_no:, :type::string:, :describe::111:"} ], otherRequest:[ { field: 'page_size', label:'page_size', type:'string', describe:'每页返回的数据条数,输入值范围1~100,不传本参数,输入值默认为40,使用举例单击这里', value:'{PAGINATION_PAGE_SIZE}' }, { field:'page_no', label:'page_no', type:'string', describe:'不传值默认从0页开始', value:'{PAGINATION_START_PAGE}' } ], autoFillResponse:true, condition:[ [ { field:'shop_no', logic:'in', value:'hnjbtdzjsy,hbxrg01,hbmy,bjjbtxfp01,bjjbtdnbg01,hblyd01,HBJBu01,hbmybg,hnjbtxfp,PDD-888,BJCHX001,ydkj01,mydsc,hbtcgdsc01,HBJBT,tcgfsqpl,jbtdjk0001' } ], [ { field:'shop_no', logic:'in', value:'TM-001,TB-004,TM-002,TM-003,pdd45160519010,624825402,447737594,130293985' }, { field:'warehouse_no', logic:'in', value:'004,009,047,048,051,050,052' } ], [ { field:'shop_no', logic:'in', value:'SX2,3D,5D,2D,KS2D' }, { field:'warehouse_no', logic:'in', value='022,003,013' } ] ] } ``` #### 请求参数解析 在请求参数中,我们需要特别关注以下几个字段: 1. **status**:订单状态,多个状态以逗号分隔。 2. **start_time** 和 **end_time**:时间范围,用于限定查询的订单时间段。 3. **shop_no** 和 **warehouse_no**:店铺编号和仓库编号,用于进一步过滤订单。 这些字段通过模板变量(如`{{LAST_SYNC_TIME|datetime}}`和`{{CURRENT_TIME|datetime}}`)动态填充,以确保每次请求的数据都是最新的。 #### 条件过滤 条件过滤部分定义了多个逻辑条件,用于精确筛选所需的数据。例如: ```json [ { field: 'shop_no', logic: 'in', value: 'hnjbtdzjsy,hbxrg01,hbmy,bjjbtxfp01,bjjbtdnbg01,hblyd01,...' }, { field: 'warehouse_no', logic: 'in', value: '004,009,...' } ] ``` 这些条件确保我们只获取特定店铺和仓库的订单数据,从而提高查询效率和准确性。 #### 数据请求与清洗 在完成接口调用配置后,我们可以发起请求并获取原始数据。接下来是数据清洗阶段,这一步至关重要,因为它决定了后续数据处理的质量。常见的数据清洗操作包括: - 去除重复记录 - 格式化日期和时间 - 校验字段完整性和一致性 例如,对于日期字段,我们可以使用轻易云提供的内置函数进行格式化: ```python def format_date(date_str): return datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S').strftime('%Y-%m-%d') ``` #### 数据转换与写入 经过清洗后的数据需要进行转换,以符合目标系统的要求。常见的数据转换操作包括: - 字段映射:将源系统字段映射到目标系统字段 - 数据类型转换:例如,将字符串类型转换为日期类型 - 数据聚合:根据业务需求对数据进行汇总或分组 最后,将转换后的数据写入目标系统。这一步通常涉及到目标系统API的调用或数据库操作。 通过以上步骤,我们实现了从旺店通·企业奇门接口获取并加工销售订单数据,为后续的数据处理和分析奠定了坚实基础。在整个过程中,轻易云平台提供了全透明可视化的操作界面,使得每个环节都清晰易懂,并实时监控数据流动和处理状态,大大提升了业务透明度和效率。 ![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/S4.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将旺店通销售订单数据转换并写入金蝶云星空 在数据集成生命周期的第二阶段,我们需要将已经集成的源平台数据进行ETL转换,使其符合目标平台金蝶云星空API接口所能接收的格式,并最终写入目标平台。本文将详细探讨如何通过轻易云数据集成平台实现这一过程。 #### 配置元数据 首先,我们需要配置元数据,以确保数据能够正确地映射和转换。以下是关键字段及其配置: 1. **单据编号 (FBillNo)** - 类型:字符串 - 值:`{trade_no}` 2. **单据类型 (FBillTypeID)** - 类型:字符串 - 解析器:`ConvertObjectParser`,参数为`FNumber` - 值:`XSDD01_SYS` 3. **销售组织 (FSaleOrgId)** - 类型:字符串 - 解析器:`ConvertObjectParser`,参数为`FNumber` - 值:`{shop_no}` - 映射方向:正向 4. **日期 (FDate)** - 类型:字符串 - 值:`{trade_time}` 5. **客户 (FCustId)** - 类型:字符串 - 解析器:`ConvertObjectParser`,参数为`FNumber` - 值:`{shop_name}` - 映射方向:正向 6. **销售部门 (FSaleDeptId)** - 类型:字符串 - 解析器:`ConvertObjectParser`,参数为`FName` - 值:基于MongoDB查询结果 7. **销售员 (FSalerId)** - 类型:字符串 - 解析器:`ConvertObjectParser`,参数为`FNumber` - 值:基于MongoDB查询结果 8. **备注 (FNote)** - 类型:字符串 - 值:`{cs_remark}` 9. **订单明细 (FSaleOrderEntry)** 包含多个子字段,如物料编码、计价数量、税率等,每个字段都需要根据具体要求进行配置。 #### 数据转换与写入流程 1. **请求构建** 根据元数据配置,我们构建一个HTTP POST请求,将源平台的数据字段映射到目标平台的相应字段。例如: ```json { "FormId": "SAL_SaleOrder", "Operation": "BatchSave", "IsAutoSubmitAndAudit": false, "IsVerifyBaseDataField": true, "Model": { "FBillNo": "{trade_no}", "FBillTypeID": {"FNumber": "XSDD01_SYS"}, "FSaleOrgId": {"FNumber": "{shop_no}"}, "FDate": "{trade_time}", "FCustId": {"FNumber": "{shop_name}"}, // 其他字段... "FSaleOrderEntry": [ { "FMaterialId": {"FNumber": "{goods_no}"}, "FPriceUnitQty": "{num}", // 其他子字段... } ] } } ``` 2. **数据清洗与转换** 在这个步骤中,我们使用轻易云提供的解析器和映射工具,将源数据清洗并转换为目标格式。例如,通过 `ConvertObjectParser` 将原始客户名称转换为金蝶系统中的客户编号。 3. **写入目标平台** 通过调用金蝶云星空API的 `batchSave` 方法,将转换后的数据写入目标系统。确保请求方法为POST,并且包含所有必要的头信息和认证信息。 ```http POST /k3cloud/api/batchSave HTTP/1.1 Host: k3cloud.example.com Content-Type: application/json Authorization: Bearer <token> { // 请求体内容... } ``` #### 注意事项 - 确保所有必填字段均已正确映射和填充。 - 使用合适的解析器来处理复杂的数据转换需求。 - 在实际操作中,根据具体业务需求调整元数据配置和请求结构。 通过以上步骤,我们可以高效地将旺店通销售订单管理系统的数据转换并写入到金蝶云星空,实现不同系统间的数据无缝对接。这不仅提升了业务效率,还确保了数据的一致性和准确性。 ![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/T7.png~tplv-syqr462i7n-qeasy.image)