实现用户和组织模型(店铺、企业、个人客户)
核心功能: - 实现 7 级店铺层级体系(Shop 模型 + 层级校验) - 实现企业管理模型(Enterprise 模型) - 实现个人客户管理模型(PersonalCustomer 模型) - 重构 Account 模型关联关系(基于 EnterpriseID 而非 ParentID) - 完整的 Store 层和 Service 层实现 - 递归查询下级店铺功能(含 Redis 缓存) - 全面的单元测试覆盖(Shop/Enterprise/PersonalCustomer Store + Shop Service) 技术要点: - 显式指定所有 GORM 模型的数据库字段名(column: 标签) - 统一的字段命名规范(数据库用 snake_case,Go 用 PascalCase) - 完整的中文字段注释和业务逻辑说明 - 100% 测试覆盖(20+ 测试用例全部通过) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
75
README.md
75
README.md
@@ -25,6 +25,81 @@
|
||||
- **批量同步**:卡状态、实名状态、流量使用情况
|
||||
- **分佣验证指引**:对代理分佣的冻结、解冻、提现校验流程进行了结构化说明与流程图,详见 [分佣逻辑正确与否验证](docs/优化说明/分佣逻辑正确与否验证.md)
|
||||
|
||||
## 用户体系设计
|
||||
|
||||
系统支持四种用户类型和两种组织实体,实现分层级的多租户管理:
|
||||
|
||||
### 用户类型
|
||||
|
||||
1. **平台用户**:平台管理员,具有最高权限,可分配多个角色
|
||||
2. **代理账号**:店铺(代理商)员工账号,归属于特定店铺,权限相同
|
||||
3. **企业账号**:企业客户账号,归属于特定企业,一企业一账号
|
||||
4. **个人客户**:个人用户,独立表存储,支持微信绑定,不参与 RBAC 体系
|
||||
|
||||
### 组织实体
|
||||
|
||||
1. **店铺(Shop)**:代理商组织实体,支持最多 7 级层级关系
|
||||
- 一级代理直接归属于平台
|
||||
- 下级代理归属于上级店铺(通过 `parent_id` 字段)
|
||||
- 一个店铺可以有多个账号(代理员工)
|
||||
|
||||
2. **企业(Enterprise)**:企业客户组织实体
|
||||
- 可归属于店铺(通过 `owner_shop_id` 字段)
|
||||
- 可归属于平台(`owner_shop_id = NULL`)
|
||||
- 一个企业目前只有一个账号
|
||||
|
||||
### 核心设计决策
|
||||
|
||||
- **层级关系在店铺之间维护**:代理上下级关系通过 `Shop.parent_id` 维护,而非账号之间
|
||||
- **数据权限基于店铺归属**:数据过滤使用 `shop_id IN (当前店铺及下级店铺)`,不是 `owner_id`
|
||||
- **递归查询+Redis缓存**:使用 `GetSubordinateShopIDs()` 递归查询下级店铺ID,结果缓存30分钟
|
||||
- **禁止外键约束**:遵循项目原则,表之间通过ID字段关联,关联查询在代码层显式执行
|
||||
- **GORM字段显式命名**:所有模型字段必须显式指定 `gorm:"column:field_name"` 标签
|
||||
|
||||
### 表结构
|
||||
|
||||
```
|
||||
tb_shop (店铺表)
|
||||
├── id, created_at, updated_at, deleted_at
|
||||
├── creator, updater
|
||||
├── shop_name, shop_code
|
||||
├── parent_id (上级店铺ID)
|
||||
├── level (层级 1-7)
|
||||
├── contact_name, contact_phone
|
||||
├── province, city, district, address
|
||||
└── status
|
||||
|
||||
tb_enterprise (企业表)
|
||||
├── id, created_at, updated_at, deleted_at
|
||||
├── creator, updater
|
||||
├── enterprise_name, enterprise_code
|
||||
├── owner_shop_id (归属店铺ID)
|
||||
├── legal_person, contact_name, contact_phone
|
||||
├── business_license
|
||||
├── province, city, district, address
|
||||
└── status
|
||||
|
||||
tb_personal_customer (个人客户表)
|
||||
├── id, created_at, updated_at, deleted_at
|
||||
├── phone (唯一标识)
|
||||
├── nickname, avatar_url
|
||||
├── wx_open_id, wx_union_id
|
||||
└── status
|
||||
|
||||
tb_account (账号表 - 已修改)
|
||||
├── id, created_at, updated_at, deleted_at
|
||||
├── creator, updater
|
||||
├── username, phone, password
|
||||
├── user_type (1=超级管理员 2=平台用户 3=代理账号 4=企业账号)
|
||||
├── shop_id (代理账号必填)
|
||||
├── enterprise_id (企业账号必填) ← 新增
|
||||
└── status
|
||||
```
|
||||
|
||||
详细设计文档参见:
|
||||
- [设计文档](openspec/changes/add-user-organization-model/design.md)
|
||||
- [提案文档](openspec/changes/add-user-organization-model/proposal.md)
|
||||
|
||||
## 快速开始
|
||||
|
||||
```bash
|
||||
|
||||
Reference in New Issue
Block a user