scope: org:history:update
| 项目 | 说明 |
|---|---|
| 接口路径 | POST /open/api/v1/org/updateOrgHistory |
| Content-Type | application/json |
| 所需权限 | org:history:update |
| 接口说明 | 更新指定组织的某一条历史记录,支持修改该记录的组织属性和生效日期 |
id 对应的目标历史记录作为基础数据dataMap 中传入的字段会覆盖该记录中对应的字段dataMap 只需要传入你想修改的字段即可| 参数名 | 类型 | 是否必填 | 说明 | 示例 |
|---|---|---|---|---|
corpId | String | 是 | 企业ID | "ding4c7c311a701851ac35c2f4657eb6378f" |
orgId | String | 是 | 组织ID | "org_14bfa9a7264848ea929a03151121816c" |
id | String | 是 | 历史记录ID(MongoDB ObjectId),可通过「获取组织历史记录列表」接口返回的 dataMap.id 获取 | "69899f58e4b03ff088d62d62" |
effectDate | String | 是 | 生效日期,格式: yyyy-MM-dd | "2027-06-01" |
dataMap | Object | 是 | 组织数据,key 为字段ID,value 为字段值 | 见下方说明 |
| fieldId(key) | 字段名 | 字段类型 | 是否必填 | 值格式说明 |
|---|---|---|---|---|
name | 组织名称 | string | 是 | 文本字符串 |
order | 组织序号 | number | 是 | 整数 |
code | 组织编码 | string | 否 | 文本字符串 |
type | 组织类型 | selection(单选) | 是 | 选项 value 值,可选:businessGroup(事业群)、subCorporation(子公司)、department(部门)、corporation(公司)、group(门店) |
managerEmpId | 组织负责人 | emp(多选) | 否 | 员工ID数组,如 ["emp_xxx", "emp_yyy"] |
parentOrgId | 上级组织 | org | 是 | 组织ID字符串 |
costCenterId | 成本中心 | costCenter | 否 | 成本中心ID字符串 |
contractCompany | 合同公司 | object | 否 | 合同公司ID字符串 |
注意:必填字段在增量合并后校验,如果目标记录中已有值且你不需要修改,则无需重复传入。
fieldId 和类型通过「获取组织字段定义」接口获取。不同字段类型的值格式如下:| 字段类型 | 值格式 | 示例 |
|---|---|---|
string(文本) | 字符串 | "文本内容" |
number(数字) | 数字 | 123 |
date(日期) | 日期字符串,格式 yyyy-MM-dd | "2027-06-01" |
selection(单选) | 选项的 value 值 | "selection_a8ebd5c1cdec43028a667f509da6304c" |
selection(多选,multiSelect=true) | 选项 value 值的数组 | ["selection_xxx", "selection_yyy"] |
{
"corpId": "ding4c7c311a701851ac35c2f4657eb6378f",
"orgId": "org_14bfa9a7264848ea929a03151121816c",
"id": "693c1f4fc27987593f469002",
"effectDate": "2025-12-12",
"dataMap": {
"name": "新的组织名称"
}
}{
"corpId": "ding4c7c311a701851ac35c2f4657eb6378f",
"orgId": "org_14bfa9a7264848ea929a03151121816c",
"id": "693c1f4fc27987593f469002",
"effectDate": "2025-12-12",
"dataMap": {
"name": "新的组织名称",
"code": "NEW_CODE",
"type": "department",
"field_org_sele_004": "selection_a8ebd5c1cdec43028a667f509da6304c"
}
}| 参数名 | 类型 | 说明 |
|---|---|---|
data | Object | 响应数据体 |
success | Boolean | 请求是否成功 |
errorCode | String | 错误编码,正常为 null |
errorMsg | String | 错误信息,正常为 null |
| 参数名 | 类型 | 说明 |
|---|---|---|
corpId | String | 企业ID |
orgId | String | 组织ID |
id | String | 历史记录ID |
errorMsg | Map<String, String> | 错误信息。null 表示操作成功;非 null 时,key 为字段ID,value 为错误提示 |
{
"data": {
"corpId": "ding4c7c311a701851ac35c2f4657eb6378f",
"orgId": "org_14bfa9a7264848ea929a03151121816c",
"id": "693c1f4fc27987593f469002",
"errorMsg": null
},
"success": true,
"errorCode": null,
"errorMsg": null
}{
"data": {
"corpId": "ding4c7c311a701851ac35c2f4657eb6378f",
"orgId": "org_14bfa9a7264848ea929a03151121816c",
"id": "invalid_id",
"errorMsg": {
"orgId": "记录不存在"
}
},
"success": true,
"errorCode": null,
"errorMsg": null
}{
"data": {
"corpId": "ding4c7c311a701851ac35c2f4657eb6378f",
"orgId": "org_14bfa9a7264848ea929a03151121816c",
"id": "693c1f4fc27987593f469002",
"errorMsg": {
"name": "组织名称不能为空",
"field_org_numb_002": "请输入正确的数字"
}
},
"success": true,
"errorCode": null,
"errorMsg": null
}{
"success": false,
"errorCode": "400",
"errorMsg": "企业ID不能为空"
}| 序号 | 校验项 | 错误信息 | 错误字段 key |
|---|---|---|---|
| 1 | 企业ID不能为空 | 企业ID不能为空 | 参数校验层返回 |
| 2 | 组织ID不能为空 | 组织ID不能为空 | 参数校验层返回 |
| 3 | 历史记录ID不能为空 | 记录ID不能为空 | 参数校验层返回 |
| 4 | 生效日期不能为空 | 生效日 期不能为空 | 参数校验层返回 |
| 5 | 组织数据不能为空 | 组织数据不能为空 | 参数校验层返回 |
| 6 | 记录ID必须存在 | 记录不存在 | orgId |
| 7 | 组织字段级校验不通过 | 根据具体字段返回 | 对应字段ID |
请求进入
│
├── 1. 参数校验(corpId / orgId / id / effectDate / dataMap 不能为空)
│
├── 2. 权限校验(需要 org:history:update 权限)
│
├── 3. 查询该组织的所有历史记录,根据 id 查找目标记录
│ └── 未找到 → 返回"记录不存在"
│
├── 4. 获取企业的字段定义
│
├── 5. 将 dataMap 转换为 OrgModel 对象
│
├── 6. 增量合并:用新数据覆盖目标记录中对应的字段
│
├── 7. 更新生效日期
│
├── 8. 执行字段校验(必填性、格式、有效性、业务规则)
│ └── 校验不通过 → 返回字段级错误信息
│
├── 9. 保存更新后的记录
│
├── 10. 发布组织变更事件(通知下游系统)
│
└── 返回成功响应(errorMsg = null)| 对比项 | 添加(addOrgHistory) | 更新(updateOrgHistory) |
|---|---|---|
| 操作对象 | 在最新记录基础上创建新记录 | 修改 id 指定的已有记录 |
| 是否需要 id | 不需要 | 需要,指定要更新哪条记录 |
| 合并基础 | 最新一条历史记录 | id 对应的目标记录 |
| 结果 | 多一条历史记录 | 记录总数不变,目标记录内容被更新 |
dataMap 只需传入要修改的字段,未传入的字段会沿用目标记录原有的值success 始终为 true,需要通过 data.errorMsg 是否为 null 来判断操作是否真正成功value(如 "selection_xxx"),而不是显示文本id 字段的值可通过「获取组织历史记录列表」接口返回的 dataMap.id 获取effectDate 会覆盖目标记录的原生效日期ORG_RECORD_UPDATE),下游系统可监听该事件进行相应处理