A11 数据同步系统 - ID 标识规范
一、核心设计哲学
1.1 设计原则
ID 设计原则 │ ├── 服务器统一分配原则 │ ├── 所有有效 ID 均由服务器生成 │ ├── 客户端不得自行指定有效 ID │ └── 客户端提交时 ID 字段可省略或填 0 │ ├── 符号语义分离原则 │ ├── 负数 → 机构/系统实体 │ ├── 正数 → 人员实体 │ └── 零值 → 未确认占位符 │ ├── 权限自然继承原则 │ ├── -1 代表 ROOT_ORG(根组织) │ ├── i64::MAX 代表 SUPER_ADMIN(超级管理员) │ └── i64::MIN 代表 DELETED_ORG(删除回收站) │ └── 排序天然有序原则 ├── 正数(人员)排在负数(机构)之后 ├── 同符号内权重小的优先 └── 权重相同数值小的优先
1.2 一句话理解
负数管组织,正数管人员,零是临时工,极值管全局
二、ID 分类总览
2.1 按符号分类
ID 符号分类 │ ├── 负数(-1, -2, -3 ...) │ ├── 实体类型:机构/系统实体 │ ├── 包含:Organization、Project、Team │ ├── 符号位:1 │ └── 特征:系统级实体,统一管理 │ ├── 正数(1, 2, 3 ...) │ ├── 实体类型:人员实体 │ ├── 包含:Person │ ├── 符号位:0 │ └── 特征:业务人员,身份绑定 │ ├── 零(0) │ ├── 实体类型:未确认占位符 │ ├── 权限:无任何权限 │ └── 用途:临时标识,等待服务器分配有效 ID │ ├── i64::MIN(-9223372036854775808) │ ├── 实体类型:删除回收站 │ ├── 符号位:1(机构类) │ └── 用途:已删除实体的归档容器 │ └── i64::MAX(9223372036854775807) ├── 实体类型:超级管理员 ├── 符号位:0(人员类) └── 用途:根组织(-1)的全权代理人
2.2 快速对照表
| ID 范围/值 | 符号 | 实体类型 | 权限特征 |
|---|
-1, -2, -3... | 负 | 机构/系统实体 | 系统级管理 |
1, 2, 3... | 正 | 人员实体 | 业务身份 |
0 | 正 | 未确认占位符 | ❌ 无任何权限 |
i64::MIN | 负 | 删除回收站 | 🗑️ 归档容器 |
i64::MAX | 正 | 超级管理员 | 👑 全局代理人 |
三、64 位 ID 位域结构
3.1 位域分配
64 位 ID 结构
| 位域 | 符号位 | 权重位 | 数值位 |
|---|
| 位位置 | 第 63 位 | 第 62-48 位 | 第 47-0 位 |
| 位数 | 1 位 | 15 位 | 48 位 |
| 取值范围 | 0或1 | 1~32767 | 0~2^48-1 |
| 默认值 | - | 1 | 0 |
| 语义 | 0= 人员实体
1= 机构实体 | 排序权重(越小越靠前) | 唯一标识(0 保留给根/占位符) |
位域分配速查表
| 位域 | 位数 | 位置 | 用途 | 取值说明 |
|---|
| 符号位 | 1 | 63 | 区分实体类型 | 0=人员,1=机构 |
| 权重位 | 15 | 62-48 | 控制排序 | 1~32767,越小越靠前 |
| 数值位 | 48 | 47-0 | 唯一标识 | 1~2^48-1,0保留 |
四、取值对照表
| 位域 | 最小值 | 最大值 | 默认值 | 说明 |
|---|
| 符号位 | 0 | 1 | - | 0=人员,1=机构 |
| 权重位 | 1 | 32767 | 1 | 权重值 |
| 数值位 | 0 | 2^48-1 | 0 | 唯一标识,0 保留 |
| 组合(符号位=0) | 1 | 2^63-2 | - | 人员实体 ID 范围 |
| 组合(符号位=1) | -1 | -2^63+1 | - | 机构实体 ID 范围 |
五、特殊 ID 位域解析表
| 特殊 ID | 符号位 | 权重位 | 数值位 | 说明 |
|---|
0 | 0 | 全0 | 全0 | 未确认人员占位符,❌ 无任何权限 |
-1 | 1 | 全0 | 1 | 系统根组织 ROOT_ORG |
-2 | 1 | 全0 | 2 | 普通机构实体示例 |
1 | 0 | 1 | 1 | 普通人员实体示例 |
i64::MIN | 1 | 全0 | 全0 | 删除回收站 DELETED_ORG |
i64::MAX | 0 | 全1 | 全1 | 超级管理员 SUPER_ADMIN |
六、排序规则表
| 优先级 | 比较维度 | 规则 | 说明 |
|---|
| 1 | 符号位 | 正数(0)排在负数(1)之前 | 人员实体排在机构实体前面 |
| 2 | 权重位 | 权重值小的排在前面 | 同类型内,权重小者优先 |
| 3 | 数值位 | 数值小的排在前面 | 权重相同时,数值小者优先 |
七、ID 操作函数示例
// 提取符号位(0=人员,1=机构)fnsign(id:i64)->i8{((id>>63)&1)asi8}// 提取权重位(15位,1-32767)fnweight(id:i64)->u16{((id>>48)&0x7FFF)asu16}// 提取数值位(48位,0-2^48-1)fnvalue(id:i64)->u64{(id&0x0000FFFFFFFFFFFF)asu64}// 判断是否为机构实体fnis_organization(id:i64)->bool{id<0&&id!=i64::MIN}// 判断是否为人员实体fnis_person(id:i64)->bool{id>0&&id!=i64::MAX}// 判断是否为根组织fnis_root_org(id:i64)->bool{id==-1}// 判断是否为超级管理员fnis_super_admin(id:i64)->bool{id==i64::MAX}// 判断是否为删除回收站fnis_deleted_org(id:i64)->bool{id==i64::MIN}
八、常量定义表
| 常量名称 | 值 | 说明 |
|---|
SIGN_MASK | 0x8000000000000000 | 符号位掩码 |
WEIGHT_MASK | 0x7FFF000000000000 | 权重位掩码 |
VALUE_MASK | 0x0000FFFFFFFFFFFF | 数值位掩码 |
DEFAULT_WEIGHT | 1 | 默认权重值 |
RESERVED_VALUE | 0 | 保留数值(根/占位符) |
i64::MIN | -9,223,372,036,854,775,808 | 删除回收站 |
i64::MAX | 9,223,372,036,854,775,807 | 超级管理员 |
ROOT_ORG | -1 | 根组织 ID |
UNCONFIRMED | 0 | 未确认人员 ID |