Refactor employee management
This commit is contained in:
@@ -35,7 +35,7 @@ backend-go/
|
||||
│ ├── employees_controller.go # 员工赋码接口
|
||||
│ ├── helper.go # 控制器通用辅助函数
|
||||
│ ├── serials_controller.go # 序列号管理接口
|
||||
│ └── users_controller.go # 用户管理接口(仅管理员)
|
||||
│ └── users_controller.go # 员工主档管理接口(仅管理员)
|
||||
├── database/ # 数据库连接和操作
|
||||
│ └── database.go # 数据库初始化、连接池配置
|
||||
├── docs/ # Swagger API 文档(自动生成)
|
||||
@@ -58,8 +58,8 @@ backend-go/
|
||||
│ ├── serials_service.go # 序列号业务逻辑
|
||||
│ ├── aftersales_service_test.go # 售后工单单元测试
|
||||
│ ├── services_test.go # 认证/序列号/员工/企业单元测试
|
||||
│ ├── users_service.go # 用户管理业务逻辑
|
||||
│ └── users_service_test.go # 用户管理单元测试
|
||||
│ ├── users_service.go # 员工主档/后台账号业务逻辑
|
||||
│ └── users_service_test.go # 员工主档/后台账号单元测试
|
||||
├── tests/ # 集成测试
|
||||
│ └── main_test.go # 端到端测试
|
||||
├── data/ # 数据目录(SQLite 数据库存储位置)
|
||||
@@ -197,7 +197,7 @@ curl -X GET http://localhost:3000/api/health
|
||||
```bash
|
||||
curl -X POST http://localhost:3000/api/auth/login \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"username":"admin","password":"password123"}'
|
||||
-d '{"username":"admin","password":"Beifan@2026"}'
|
||||
```
|
||||
|
||||
首次启动且用户表为空时,系统会自动创建默认管理员账号(请在生产环境立即修改密码):
|
||||
@@ -227,11 +227,11 @@ http://localhost:3000/swagger/index.html
|
||||
如果修改了代码中的 API 注解,需要重新生成 Swagger 文档:
|
||||
|
||||
```bash
|
||||
# 确保已安装 swag 工具
|
||||
go install github.com/swaggo/swag/cmd/swag@latest
|
||||
|
||||
# 生成文档
|
||||
swag init -g main.go
|
||||
make swagger
|
||||
|
||||
# 或直接执行
|
||||
go run github.com/swaggo/swag/cmd/swag@v1.16.6 init -g main.go
|
||||
|
||||
# 文档将生成在 docs/ 目录下
|
||||
```
|
||||
@@ -254,9 +254,9 @@ swag init -g main.go
|
||||
| ---- | ----------------------------------- | ---------------- | -------- | ------ |
|
||||
| POST | `/api/serials/generate` | 生成序列号 | 是 | 管理员 |
|
||||
| POST | `/api/serials/generate-with-prefix` | 带前缀生成序列号 | 是 | 管理员 |
|
||||
| POST | `/api/serials/:serialNumber/qrcode` | 生成序列号二维码 | 是 | 任何 |
|
||||
| POST | `/api/serials/:serialNumber/qrcode` | 生成序列号二维码 | 是 | 管理员 |
|
||||
| GET | `/api/serials/:serialNumber/query` | 查询序列号信息 | 否 | 任何 |
|
||||
| GET | `/api/serials` | 获取序列号列表 | 是 | 任何 |
|
||||
| GET | `/api/serials` | 获取序列号列表 | 是 | 管理员 |
|
||||
| PATCH | `/api/serials/:serialNumber` | 更新序列号信息 | 是 | 管理员 |
|
||||
| PUT | `/api/serials/:serialNumber` | 更新序列号信息 | 是 | 管理员 |
|
||||
| POST | `/api/serials/:serialNumber/revoke` | 吊销序列号 | 是 | 管理员 |
|
||||
@@ -280,9 +280,9 @@ swag init -g main.go
|
||||
| 方法 | 路径 | 描述 | 需要认证 | 角色 |
|
||||
| ---- | -------------------------------------- | ------------------ | -------- | ------ |
|
||||
| POST | `/api/employee-serials/generate` | 生成员工序列号 | 是 | 管理员 |
|
||||
| GET | `/api/employee-serials` | 获取员工序列号列表 | 是 | 任何 |
|
||||
| GET | `/api/employee-serials` | 获取员工序列号列表 | 是 | 管理员 |
|
||||
| GET | `/api/employee-serials/:serialNumber/query` | 查询员工序列号信息 | 否 | 任何 |
|
||||
| POST | `/api/employee-serials/:serialNumber/qrcode` | 生成员工二维码 | 是 | 任何 |
|
||||
| POST | `/api/employee-serials/:serialNumber/qrcode` | 生成员工二维码 | 是 | 管理员 |
|
||||
| PATCH | `/api/employee-serials/:serialNumber` | 更新员工序列号信息 | 是 | 管理员 |
|
||||
| PUT | `/api/employee-serials/:serialNumber` | 更新员工序列号信息 | 是 | 管理员 |
|
||||
| POST | `/api/employee-serials/:serialNumber/revoke` | 吊销员工序列号 | 是 | 管理员 |
|
||||
@@ -295,7 +295,8 @@ swag init -g main.go
|
||||
|
||||
**员工序列号特点**:
|
||||
- 无有效期限制(与企业赋码不同)
|
||||
- 包含部门(department)和员工姓名(employeeName)信息
|
||||
- 创建员工主档时会自动生成 1 个员工码,并通过 `employeeId` 绑定员工
|
||||
- 包含岗位(position)和员工姓名(employeeName)信息
|
||||
- 序列号格式: `EMP26xxxxxx`(EMP + 年份后两位 + 6位随机字符)
|
||||
|
||||
### 售后工单
|
||||
@@ -325,25 +326,26 @@ swag init -g main.go
|
||||
- 工单状态机: `created` → `pending_confirmation` → `closed` / `rejected`,被退回后可重新提交
|
||||
- 公开查询不返回手机号(脱敏)
|
||||
|
||||
### 用户管理(仅管理员)
|
||||
### 员工管理(仅管理员)
|
||||
|
||||
| 方法 | 路径 | 描述 | 需要认证 | 角色 |
|
||||
| ------ | ----------------------------------- | -------------------------- | -------- | ------------- |
|
||||
| GET | `/api/users/assignable` | 可分配用户列表(用于售后) | 是 | 管理员/技术员 |
|
||||
| POST | `/api/users` | 创建用户 | 是 | 管理员 |
|
||||
| GET | `/api/users` | 用户列表(分页+筛选) | 是 | 管理员 |
|
||||
| PATCH | `/api/users/:id` | 更新用户姓名/邮箱/角色 | 是 | 管理员 |
|
||||
| POST | `/api/users/:id/reset-password` | 重置用户密码 | 是 | 管理员 |
|
||||
| DELETE | `/api/users/:id` | 删除用户 | 是 | 管理员 |
|
||||
| POST | `/api/employees` | 创建员工并自动生成员工码 | 是 | 管理员 |
|
||||
| GET | `/api/employees` | 员工列表(分页+筛选) | 是 | 管理员 |
|
||||
| PATCH | `/api/employees/:id` | 更新员工姓名/电话/工号/岗位/角色 | 是 | 管理员 |
|
||||
| POST | `/api/employees/:id/reset-password` | 重置后台账号密码 | 是 | 管理员 |
|
||||
| DELETE | `/api/employees/:id` | 删除员工 | 是 | 管理员 |
|
||||
|
||||
**用户角色**:
|
||||
- `admin`:完整权限,包括用户管理、强制关闭工单、工单分配(重新分配技术员)、删除工单
|
||||
- `technician`:可创建/编辑自己负责的售后工单,可使用 `assignable` 查询同事
|
||||
- `user`:保留角色(暂未实际启用)
|
||||
**员工角色**:
|
||||
- `admin`:管理员,拥有全部后台权限,包括企业管理、员工管理、工单分配、强制关闭和删除工单
|
||||
- `technician`:技术员,仅拥有工单模块权限,可创建/处理工单,可使用 `assignable` 查询可分配同事
|
||||
- `employee`:员工,无后台登录权限,不需要密码,仅用于员工主档和员工码查询
|
||||
|
||||
**保护规则**:
|
||||
- 不能删除自己;不能将自己的 admin 角色降级;不能删除最后一个 admin
|
||||
- 默认创建用户密码 bcrypt 加密存储
|
||||
- 创建 `admin` / `technician` 必须设置初始密码,密码 bcrypt 加密存储
|
||||
- 创建 `employee` 不要求密码,且不能登录后台
|
||||
|
||||
## 测试
|
||||
|
||||
@@ -376,7 +378,7 @@ go tool cover -html=coverage.out
|
||||
- 员工赋码测试(生成、查询、更新、吊销、二维码生成)
|
||||
- 企业统计测试(统计概览)
|
||||
- 售后工单测试(YYMMDDNN 序号生成、状态机、客户确认手机号校验、强制关闭)
|
||||
- 用户管理测试(重复用户名、自降级保护、最后管理员保护、密码重置)
|
||||
- 员工管理测试(创建员工自动生成员工码、重复工号、自降级保护、最后管理员保护、密码重置)
|
||||
- **tests/**: 集成测试(健康检查、登录流程)
|
||||
|
||||
## 代码检查
|
||||
|
||||
Reference in New Issue
Block a user