扩展信息根、子档案同步

接口信息

项目 内容
接口 POST /common/thirdparty/syn/extend-infos?platform=didi
Method POST
数据格式 application/json
接口说明 根档案新增、停用和恢复;子档案新增、名称/父级修改、级联删除及重建。同步返回失败项;目前仅支持滴滴。

请求由现有 outing 入口按 COMPANY_ID 获取公司 ID。内部服务调用路径为 /common/thirdparty/syn/extend-infos/inner?platform=didi&companyId={companyId},请求体与业务入口相同。业务调用方无需提供滴滴凭据、已有绑定或操作类型。

内部同步入口的 companyId 必须与当前认证公司身份一致,不能通过更改查询参数切换到其他公司。以下示例仅展示业务字段,调用时仍需沿用既有认证及公司上下文。

请求参数

Query 参数

字段名称 字段类型 字段描述 是否必填
platform String 第三方平台标识;首期仅支持 didi 是

Body 参数

字段名称 字段类型 字段描述 是否必填 长度限制(字节)
bizId String 业务唯一识别码,响应原样返回 是 255
timestamp Long 正数 Unix 毫秒时间戳,最多 15 位 是 无
data Array 非空档案扁平数组;同公司、平台内根和子编码全局唯一,同批不可重复 是 无

data[] 参数

字段名称 字段类型 字段描述 是否必填 长度限制
code String 档案稳定编码;根映射 root_code,子映射 code 是 最多 150 字符
name String 根名称仅创建时使用;子档案创建、更新时使用 是 最多 150 字符
enabledFlag String 根 Y/N 为启用/停用;子 Y 为新增、更新或重建,N 为级联删除 是 1 字节
rootCode String 根档案可不传或等于自身 code;子档案必须传所属根编码 子档案必填 最多 150 字符
parentCode String 父级子档案编码,不得等于自身或根编码;新增不传为根下第一级,更新不传不改父级 否 最多 150 字符

已确认创建的根档案再次提交新 name 不修改滴滴根名称。子档案同状态仍发送名称/父级更新。数组顺序不要求父级在前;先处理根,再按父子依赖新增/更新子项,最后删除。关联主体和跨根迁移不支持。不能通过空 parentCode 清除父级。

子档案 N 会删除自身及全部下级,不等同于停用。删除前查询滴滴树,无法确认范围则拒绝删除;若范围包含本批期望 Y 的子档案,也拒绝删除。已保存的下级绑定结果一并回写为 N 或未知。Y 会重新查询实际存在性,已删除项即使本地旧状态为 Y 也走重建;恢复父级不会自动恢复下级,同步源需提供下级的名称和层级重新提交。未提交的档案不是隐式删除对象,但可能受祖先级联删除影响。

根、子档案的判定

请求形态 判定 说明
不传 rootCode,或 rootCode 等于自身 code 根档案 兼容原根档案请求;不能传 parentCode
rootCode 不等于自身 code,不传 parentCode 根下第一级子档案或不调整父级的已有子档案 新增时放在根下;更新时保留原父级,不会自动移到根下
rootCode 不等于自身 code,并传 parentCode 指定父级的子档案 parentCode 是父级子档案编码,不是根编码;父级必须已存在,或在本批成功创建

rootCode、parentCode 可省略或为 null,但不能传空字符串。接口不接收嵌套的 children 或滴滴原始 item_list,所有根、子档案都直接列在 data 数组中。name 在删除、停用或恢复请求中仍必填。

同步规则

档案类型 期望状态及前置状态 处理方式
根 Y,尚未确认绑定 新增根档案;新增错误不自动转为更新或确认成功
根 Y,已有绑定 需要恢复或上次结果未知时发送恢复;已确认启用且无未知结果时跳过
根 N,已有绑定 需要停用或上次结果未知时发送停用;已确认停用且无未知结果时跳过
根 N,无绑定 通常跳过;旧创建结果未知时尝试停用,并按配置判定明确不存在
子 Y,滴滴有效树中存在 更新名称及传入的父级,即使本地已是 Y 也不跳过
子 Y,滴滴有效树中不存在 新增或重建,名称与父级取本次请求
子 N,滴滴有效树中存在 删除该子档案及其全部下级
子 N,滴滴有效树中不存在 不再调用删除;有旧绑定则确认已删除,无绑定且本轮未确认存在时跳过

请求是增量同步,不是全量替换。修改已有根下的子档案时,可以只提交子档案,不必重复提交根或未变更的兄弟节点。根、父级本次未提交时,必须在滴滴侧已存在;不能依赖本表恢复历史层级。父级创建失败时不发送依赖子项,根同步失败时不继续处理其本批子档案。

同批不允许同一根为 N 而其子项为 Y,也不允许跨根父级关系、重复编码或层级成环。层级校验可能在读取滴滴树后按根分组执行;整个请求不是跨服务原子事务,一组失败不代表其他根组未执行。

请求示例

1. 同批新增根和多级子档案

前提:本地尚未确认 cost 的绑定,需要新增该根及其子档案。编码仅作示例,请使用本公司、平台内未被其他根或子档案占用的稳定编码。

POST /common/thirdparty/syn/extend-infos?platform=didi
Content-Type: application/json
COMPANY_ID: 100
{
  "bizId": "extend-create-tree-001",
  "timestamp": 1793174400000,
  "data": [
    {"code": "cost", "name": "费用分类", "enabledFlag": "Y"},
    {"code": "cost-travel", "name": "差旅", "enabledFlag": "Y", "rootCode": "cost"},
    {"code": "cost-taxi", "name": "用车", "enabledFlag": "Y", "rootCode": "cost", "parentCode": "cost-travel"}
  ]
}

2. 已有根下追加子档案

前提:cost 根档案已存在。本次只新增其下第一级 cost-meal,不影响其他子档案。

{
  "bizId": "extend-add-child-001",
  "timestamp": 1793174400000,
  "data": [
    {"code": "cost-meal", "name": "餐饮", "enabledFlag": "Y", "rootCode": "cost"}
  ]
}

3. 修改子档案名称或父级

前提:cost-taxi、目标父级 cost-traffic 均已存在且同属 cost 根。下例将子档案改名,并移到目标父级下。仅改名时省略 parentCode 即可,原父级保持不变。

{
  "bizId": "extend-update-child-001",
  "timestamp": 1793174400000,
  "data": [
    {"code": "cost-taxi", "name": "市内交通", "enabledFlag": "Y", "rootCode": "cost", "parentCode": "cost-traffic"}
  ]
}

不能用 parentCode: ""、parentCode: null 或省略字段,将已有多级子档案移到根下第一级;当前实现不提供该种父级清除操作。

4. 删除子档案及全部下级

下例会级联删除 cost-travel 的全部下级,不只是删除本次提交的这一条。 调用方应先确认业务影响,且不要在同批要求其仍处于该子树内的下级为 Y。

{
  "bizId": "extend-delete-child-001",
  "timestamp": 1793174400000,
  "data": [
    {"code": "cost-travel", "name": "差旅", "enabledFlag": "N", "rootCode": "cost"}
  ]
}

5. 恢复已删除的父、子档案

前提:cost 根仍存在,cost-travel 和 cost-taxi 已删除。恢复需要重新提交各节点的名称和层级;仅传父级不会自动恢复其下级。下例先重建父级,再重建其子项。

{
  "bizId": "extend-restore-children-001",
  "timestamp": 1793174400000,
  "data": [
    {"code": "cost-travel", "name": "差旅", "enabledFlag": "Y", "rootCode": "cost"},
    {"code": "cost-taxi", "name": "用车", "enabledFlag": "Y", "rootCode": "cost", "parentCode": "cost-travel"}
  ]
}

6. 停用或恢复根档案

根档案继续使用原请求结构,不传 rootCode、parentCode。下例停用根;恢复时把 enabledFlag 改为 Y。根的停用/恢复不会走子档案的删除/重建动作。

{
  "bizId": "extend-disable-root-001",
  "timestamp": 1793174400000,
  "data": [
    {"code": "cost", "name": "费用分类", "enabledFlag": "N"}
  ]
}

响应参数

字段名称 字段类型 字段描述
resCode Integer 200000 成功;500000 请求或逐项同步失败;500502 有结果保存失败
resMsg String 本次处理说明
bizId String 请求中的业务唯一识别码
data Array 仅含本批失败档案;全部成功或跳过时为 []

data[] 参数

字段名称 字段类型 字段描述
code String 失败项对应的请求编码
reason String 失败、结果未知或结果保存未确认的原因

首次同步没有绑定记录时继续处理,outing 不向 thirdparty 的该条明细传 binding;查到旧记录时附加对应绑定。绑定查询抛错、入参校验或服务调用整体失败时,错误由 resCode、resMsg 表达,data=[]。逐项失败按请求顺序返回;成功项不出现在 data 中。

响应示例

全部成功或无需同步:

{
  "resCode": 200000,
  "resMsg": "成功",
  "bizId": "extend-create-tree-001",
  "data": []
}

部分失败:

{
  "resCode": 500000,
  "resMsg": "部分档案同步失败",
  "bizId": "extend-create-tree-001",
  "data": [
    {"code": "cost-taxi", "reason": "滴滴拒绝同步"}
  ]
}

结果保存失败示例

{
  "resCode": 500502,
  "resMsg": "同步结果保存失败",
  "bizId": "extend-update-child-001",
  "data": [
    {"code": "cost-taxi", "reason": "同步结果保存失败"}
  ]
}

results matching ""

    No results matching ""