refactor: remove company management APIs

This commit is contained in:
Frudrax Cheng
2026-06-05 18:00:14 +08:00
parent efdde0ab28
commit 698c22cd08
16 changed files with 1631 additions and 3738 deletions
+72 -58
View File
@@ -1,6 +1,6 @@
# 浙江贝凡溯源管理平台 - 后端服务 (Go 版本)
# 浙江贝凡溯源赋码平台 - 后端服务 (Go 版本)
这是一个使用 Go 语言开发的溯源管理平台后端服务,提供序列号生成、查询、管理等功能。
这是一个使用 Go 语言开发的溯源赋码平台后端服务,提供权限下发、产品溯源、项目工单、售后工单等功能。
## 技术栈
@@ -31,10 +31,11 @@ backend-go/
├── controllers/ # 控制器层,处理 HTTP 请求
│ ├── aftersales_controller.go # 售后工单接口
│ ├── auth_controller.go # 认证相关接口
│ ├── companies_controller.go # 企业管理接口
│ ├── dashboard_controller.go # 控制台统计接口
│ ├── employees_controller.go # 员工赋码接口
│ ├── helper.go # 控制器通用辅助函数
│ ├── serials_controller.go # 序列号管理接口
│ ├── product_traces_controller.go # 产品溯源接口
│ ├── project_orders_controller.go # 项目工单接口
│ └── users_controller.go # 员工主档管理接口(仅管理员)
├── database/ # 数据库连接和操作
│ └── database.go # 数据库初始化、连接池配置
@@ -47,17 +48,18 @@ backend-go/
├── middleware/ # 中间件层
│ └── auth.go # JWT 认证、管理员/技术员权限检查
├── models/ # 数据模型和 DTO
│ └── models.go # User、Company、Serial、AftersalesOrder 等模型定义
│ └── models.go # User、Company、EmployeeSerial、ProductTrace、AftersalesOrder、ProjectOrder 等模型定义
├── routes/ # 路由配置
│ └── routes.go # API 路由注册
├── services/ # 业务逻辑层
│ ├── aftersales_service.go # 售后工单业务逻辑
│ ├── auth_service.go # 认证业务逻辑
│ ├── companies_service.go # 企业管理业务逻辑
│ ├── dashboard_service.go # 控制台统计业务逻辑
│ ├── employees_service.go # 员工赋码业务逻辑
│ ├── serials_service.go # 序列号业务逻辑
│ ├── product_traces_service.go # 产品溯源业务逻辑
│ ├── project_orders_service.go # 项目工单业务逻辑
│ ├── aftersales_service_test.go # 售后工单单元测试
│ ├── services_test.go # 认证/序列号/员工/企业单元测试
│ ├── services_test.go # 认证/员工赋码单元测试
│ ├── users_service.go # 员工主档/后台账号业务逻辑
│ └── users_service_test.go # 员工主档/后台账号单元测试
├── tests/ # 集成测试
@@ -220,7 +222,7 @@ http://localhost:3000/swagger/index.html
- **交互式测试**: 直接在浏览器中测试 API 端点
- **请求/响应示例**: 查看每个接口的请求参数和响应格式
- **认证支持**: 支持 Bearer Token 认证,可以输入 JWT 令牌进行测试
- **按分组浏览**: API 按功能模块分组(认证、序列号管理、企业管理等)
- **按分组浏览**: API 按功能模块分组(认证、控制台、权限下发、产品溯源、项目工单、售后工单等)
### 重新生成 Swagger 文档
@@ -248,59 +250,71 @@ go run github.com/swaggo/swag/cmd/swag@v1.16.6 init -g main.go
> 错误提示已做用户友好化,例如登录失败统一返回:`用户名或密码不正确`。
### 序列号管理
### 控制台
| 方法 | 路径 | 描述 | 需要认证 | 角色 |
| ---- | ----------------------------------- | ---------------- | -------- | ------ |
| POST | `/api/serials/generate` | 生成序列号 | 是 | 管理员 |
| POST | `/api/serials/generate-with-prefix` | 带前缀生成序列号 | 是 | 管理员 |
| POST | `/api/serials/:serialNumber/qrcode` | 生成序列号二维码 | 是 | 管理员 |
| GET | `/api/serials/:serialNumber/query` | 查询序列号信息 | 否 | 任何 |
| GET | `/api/serials` | 获取序列号列表 | 是 | 管理员 |
| PATCH | `/api/serials/:serialNumber` | 更新序列号信息 | 是 | 管理员 |
| PUT | `/api/serials/:serialNumber` | 更新序列号信息 | 是 | 管理员 |
| POST | `/api/serials/:serialNumber/revoke` | 吊销序列号 | 是 | 管理员 |
| 方法 | 路径 | 描述 | 需要认证 | 角色 |
| ---- | ---- | ---- | -------- | ---- |
| GET | `/api/dashboard/stats` | 获取工单统计和最近售后工单 | 是 | 管理员 |
### 企业管理
企业管理用于维护授权代理商/企业码主体,供客户扫码查询代理商授权状态;它不是售后客户名录。
| 方法 | 路径 | 描述 | 需要认证 | 角色 |
| ------ | ----------------------------- | ------------ | -------- | ------ |
| GET | `/api/companies/stats/overview` | 获取企业统计概览 | 是 | 管理员 |
| GET | `/api/companies` | 获取企业列表 | 是 | 管理员 |
| GET | `/api/companies/:companyName` | 获取企业详情 | 是 | 管理员 |
| POST | `/api/companies` | 创建新企业 | 是 | 管理员 |
| PATCH | `/api/companies/:companyName` | 更新企业信息 | 是 | 管理员 |
| PUT | `/api/companies/:companyName` | 更新企业信息 | 是 | 管理员 |
| POST | `/api/companies/:companyName/revoke` | 吊销企业及序列号 | 是 | 管理员 |
| DELETE | `/api/companies/:companyName/serials/:serialNumber` | 删除企业下序列号 | 是 | 管理员 |
| DELETE | `/api/companies/:companyName` | 删除企业 | 是 | 管理员 |
### 员工赋码
### 权限下发(员工赋码)
| 方法 | 路径 | 描述 | 需要认证 | 角色 |
| ---- | -------------------------------------- | ------------------ | -------- | ------ |
| POST | `/api/employee-serials/generate` | 生成员工序列号 | 是 | 管理员 |
| GET | `/api/employee-serials` | 获取员工序列号列表 | 是 | 管理员 |
| GET | `/api/employee-serials/:serialNumber/query` | 查询员工序列号信息 | 否 | 任何 |
| POST | `/api/employee-serials/generate` | 生成员工权限码 | 是 | 管理员 |
| GET | `/api/employee-serials` | 获取员工权限码列表 | 是 | 管理员 |
| GET | `/api/employee-serials/:serialNumber/query` | 查询员工权限码信息 | 否 | 任何 |
| POST | `/api/employee-serials/:serialNumber/qrcode` | 生成员工二维码 | 是 | 管理员 |
| PATCH | `/api/employee-serials/:serialNumber` | 更新员工序列号信息 | 是 | 管理员 |
| PUT | `/api/employee-serials/:serialNumber` | 更新员工序列号信息 | 是 | 管理员 |
| POST | `/api/employee-serials/:serialNumber/revoke` | 吊销员工序列号 | 是 | 管理员 |
| PATCH | `/api/employee-serials/:serialNumber` | 更新员工权限码信息 | 是 | 管理员 |
| PUT | `/api/employee-serials/:serialNumber` | 更新员工权限码信息 | 是 | 管理员 |
| POST | `/api/employee-serials/:serialNumber/revoke` | 吊销员工权限码 | 是 | 管理员 |
### Node 对齐说明
- Go 版路由已与 `backend-node` 对齐(含 `PATCH` 更新接口、企业详情、企业吊销、删除企业下单个序列号)。
- 企业统计与企业详情接口统一返回 `{ message, data }` 结构。
- 序列号相关返回字段已对齐前端使用(如 `serialNumber``validUntil``createdBy``status`)。
**员工序列号特点**:
- 无有效期限制(与企业赋码不同)
**员工权限码特点**:
- 无有效期限制
- 创建员工主档时会自动生成 1 个员工码,并通过 `employeeId` 绑定员工
- 包含岗位(position)和员工姓名(employeeName)信息
- 序列号格式: `EMP26xxxxxx`(EMP + 年份后两位 + 6位随机字符)
### 产品溯源
| 方法 | 路径 | 描述 | 需要认证 | 角色 |
| ---- | ---- | ---- | -------- | ---- |
| GET | `/api/product-traces/:serialNumber/query` | 公开查询产品溯源信息 | 否 | 任何 |
| POST | `/api/product-traces` | 创建产品溯源 | 是 | 管理员 |
| GET | `/api/product-traces` | 产品溯源列表 | 是 | 管理员 |
| GET | `/api/product-traces/:serialNumber` | 产品溯源详情 | 是 | 管理员 |
| PATCH | `/api/product-traces/:serialNumber` | 更新产品溯源 | 是 | 管理员 |
| POST | `/api/product-traces/:serialNumber/qrcode` | 生成产品二维码 | 是 | 管理员 |
| POST | `/api/product-traces/:serialNumber/wechat-qrcode` | 上传公众号二维码 | 是 | 管理员 |
| POST | `/api/product-traces/:serialNumber/revoke` | 停用产品溯源 | 是 | 管理员 |
| DELETE | `/api/product-traces/:serialNumber` | 删除产品溯源 | 是 | 管理员 |
**产品溯源字段顺序**:
企业名称、地址、电话、设备信息、质保期、出厂日期、产品序列号、官网链接(可选)、公众号二维码(可选)。
### 项目工单
| 方法 | 路径 | 描述 | 需要认证 | 角色 |
| ---- | ---- | ---- | -------- | ---- |
| GET | `/api/project-orders/:serialNumber/query` | 公开查询项目工单 | 否 | 任何 |
| POST | `/api/project-orders/:serialNumber/site-images` | 上传现场图片 | 否 | 任何 |
| POST | `/api/project-orders/:serialNumber/complete` | 工程师提交完成 | 否 | 任何 |
| POST | `/api/project-orders` | 创建项目工单 | 是 | 管理员/技术员 |
| GET | `/api/project-orders` | 项目工单列表 | 是 | 管理员/技术员 |
| GET | `/api/project-orders/:serialNumber` | 项目工单详情 | 是 | 管理员/技术员 |
| PATCH | `/api/project-orders/:serialNumber` | 更新项目工单 | 是 | 管理员/技术员 |
| POST | `/api/project-orders/:serialNumber/qrcode` | 生成项目工单二维码 | 是 | 管理员/技术员 |
| POST | `/api/project-orders/:serialNumber/submit` | 后台提交项目完成 | 是 | 管理员/技术员 |
| POST | `/api/project-orders/:serialNumber/reassign` | 工单分配 | 是 | 管理员 |
| POST | `/api/project-orders/:serialNumber/force-close` | 强制完成 | 是 | 管理员 |
| DELETE | `/api/project-orders/:serialNumber` | 删除项目工单 | 是 | 管理员 |
**项目工单特点**:
- 用于现场勘查、现场实施等项目任务
- 工单号格式: `zjbf-xm-YYMMDDNN`
- 现场图片最多 18 张
- 仅需要工程师签名,无客户签字环节
- 完成状态使用 `已完成`
### 售后工单
| 方法 | 路径 | 描述 | 需要认证 | 角色 |
@@ -321,7 +335,7 @@ go run github.com/swaggo/swag/cmd/swag@v1.16.6 init -g main.go
- 服务类型枚举:`software`(软件故障)、`hardware`(硬件故障)、`maintenance`(售后维保)
- 工单号格式: `zjbf-sh-YYMMDDNN`(年份后 2 位 + 月份 2 位 + 日期 2 位 + 当天序号至少 2 位,例:`zjbf-sh-26052801`
- 序号按天重置,软删除工单不释放编号(避免回收造成混淆)
- 工单里的企业名称是售后客户信息,只保存在工单中,不会自动创建或关联企业管理记录
- 工单里的企业名称是售后客户信息,只保存在工单中
- 二维码扫码后客户在网页签名(canvas)后点「已授权」确认;选择「未授权」需填写退回原因
- 签名以 PNG dataURL 形式持久化到工单(`signature` 字段),管理员详情页可查看留底
- 签名校验:必须为 `data:image/png;base64,``data:image/jpeg;base64,` 前缀,解码后 200B500KB
@@ -329,7 +343,7 @@ go run github.com/swaggo/swag/cmd/swag@v1.16.6 init -g main.go
- 工单状态机: `created``pending_confirmation``closed` / `rejected`,被退回后可重新提交
- 公开查询不返回手机号(脱敏)
### 员工管理(仅管理员)
### 权限下发(仅管理员)
| 方法 | 路径 | 描述 | 需要认证 | 角色 |
| ------ | ----------------------------------- | -------------------------- | -------- | ------------- |
@@ -341,7 +355,7 @@ go run github.com/swaggo/swag/cmd/swag@v1.16.6 init -g main.go
| DELETE | `/api/employees/:id` | 删除员工 | 是 | 管理员 |
**员工角色**:
- `admin`:管理员,拥有全部后台权限,包括企业管理、员工管理、工单分配、强制关闭和删除工单
- `admin`:管理员,拥有全部后台权限,包括权限下发、产品溯源、工单分配、强制关闭和删除工单
- `technician`:技术员,仅拥有工单模块权限,可创建/处理工单,可使用 `assignable` 查询可分配同事
- `employee`:员工,无后台登录权限,不需要密码,仅用于员工主档和员工码查询
@@ -375,13 +389,13 @@ go tool cover -html=coverage.out
### 当前测试覆盖
- **services/**: 包含 AuthService、SerialsService、EmployeeSerialsService、CompaniesService、AftersalesService 和 UsersService 的完整单元测试
- **services/**: 包含 AuthService、EmployeeSerialsService、AftersalesService、ProjectOrdersService、ProductTracesService 和 UsersService 的单元测试
- 用户认证测试(登录、获取用户信息、修改密码、更新资料)
- 序列号管理测试(生成、查询、更新、吊销、分页列表)
- 员工赋码测试(生成、查询、更新、吊销、二维码生成)
- 企业统计测试(统计概览)
- 售后工单测试(YYMMDDNN 序号生成、状态机、客户确认手机号校验、强制关闭)
- 员工管理测试(创建员工自动生成员工码、重复工号、自降级保护、最后管理员保护、密码重置
- 项目工单测试(创建、完成、现场图片、工程师签名
- 产品溯源测试(创建、查询、二维码、公众号二维码)
- 权限下发测试(创建员工自动生成员工码、重复工号、自降级保护、最后管理员保护、密码重置)
- **tests/**: 集成测试(健康检查、登录流程)
## 代码检查