新增产品QC
This commit is contained in:
303
docs/backend-api.md
Normal file
303
docs/backend-api.md
Normal file
@@ -0,0 +1,303 @@
|
||||
# Corewing QC 后端接口文档
|
||||
|
||||
> 基础路径: `/api/qc`
|
||||
|
||||
## 通用响应结构
|
||||
|
||||
所有接口统一返回 `Result<T>`:
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "操作成功",
|
||||
"data": T,
|
||||
"success": true
|
||||
}
|
||||
```
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|---------|---------|---------------------------|
|
||||
| code | Integer | 状态码 |
|
||||
| message | String | 消息内容 |
|
||||
| data | T | 业务数据 |
|
||||
| success | Boolean | 是否成功 |
|
||||
|
||||
---
|
||||
|
||||
## 1. 验证无线板
|
||||
|
||||
验证 BLE MAC 地址对应的无线板是否已在系统中注册。
|
||||
|
||||
- **URL**: `POST /api/qc/wireless/validate-wireless`
|
||||
- **Content-Type**: `application/json`
|
||||
|
||||
### 请求体
|
||||
|
||||
```json
|
||||
{
|
||||
"mac": "AA:BB:CC:DD:EE:FF"
|
||||
}
|
||||
```
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|------|--------|------|----------------------------------|
|
||||
| mac | String | 是 | BLE MAC 地址,即设备 SN |
|
||||
|
||||
### 响应
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "验证通过",
|
||||
"data": true,
|
||||
"success": true
|
||||
}
|
||||
```
|
||||
|
||||
- `data = true` — 设备已注册,允许进行 QC 测试
|
||||
- `data = false` / `success = false` — 设备未注册或验证失败,APP 端将**作废本次测试**
|
||||
|
||||
---
|
||||
|
||||
## 2. 上传测试记录
|
||||
|
||||
上传完整的 QC 测试结果(含所有步骤数据和照片 URL)。
|
||||
|
||||
- **URL**: `POST /api/qc/test/upload`
|
||||
- **Content-Type**: `application/json`
|
||||
|
||||
### 请求体
|
||||
|
||||
```json
|
||||
{
|
||||
"testNo": "WL-20260227-001",
|
||||
"productType": "WIRELESS_BOARD",
|
||||
"sn": "AA:BB:CC:DD:EE:FF",
|
||||
"operatorId": "OP001",
|
||||
"operatorName": "张三",
|
||||
"phoneModel": "Pixel 7",
|
||||
"appVersion": "1.0.0",
|
||||
"status": "PASS",
|
||||
"createTime": "1740000000000",
|
||||
"updatedAt": "1740001000000",
|
||||
"uploadTime": "1740002000000",
|
||||
"steps": [
|
||||
{
|
||||
"stepIndex": 1,
|
||||
"stepName": "BLE连接与特征订阅",
|
||||
"result": "PASS",
|
||||
"dataJson": "{\"deviceName\":\"CoreWing-001\",\"deviceMac\":\"AA:BB:CC:DD:EE:FF\",\"validated\":true}",
|
||||
"duration": 5200,
|
||||
"completedAt": "1740000500000"
|
||||
}
|
||||
],
|
||||
"photoUrls": [
|
||||
"https://qc.corewing.com/photos/xxx.jpg"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|--------------|------------------|------|------------------------------------------------|
|
||||
| testNo | String | 是 | 测试单号,格式: `WL-yyyyMMdd-NNN` 或 `FC-yyyyMMdd-NNN` |
|
||||
| productType | String | 是 | `WIRELESS_BOARD` / `FLIGHT_CONTROLLER` |
|
||||
| sn | String | 是 | 产品序列号(无线板为 BLE MAC 地址) |
|
||||
| operatorId | String | 是 | 测试员 ID |
|
||||
| operatorName | String | 是 | 测试员姓名 |
|
||||
| phoneModel | String | 否 | 测试手机型号 |
|
||||
| appVersion | String | 否 | APP 版本号 |
|
||||
| status | String | 是 | `PASS` / `FAIL` |
|
||||
| createTime | String | 是 | 创建时间(毫秒时间戳字符串) |
|
||||
| updatedAt | String | 否 | 最后更新时间(毫秒时间戳字符串) |
|
||||
| uploadTime | String | 否 | 上传时间(毫秒时间戳字符串) |
|
||||
| steps | StepResultData[] | 是 | 步骤结果数组 |
|
||||
| photoUrls | String[] | 否 | 已上传照片的远程 URL 列表 |
|
||||
|
||||
**StepResultData:**
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|-------------|--------|------|--------------------------------------|
|
||||
| stepIndex | int | 是 | 步骤序号(从 1 开始) |
|
||||
| stepName | String | 是 | 步骤名称 |
|
||||
| result | String | 否 | `PASS` / `FAIL` / null(未完成) |
|
||||
| dataJson | String | 否 | 步骤详细数据 JSON 字符串 |
|
||||
| duration | long | 否 | 步骤耗时(毫秒) |
|
||||
| completedAt | String | 否 | 完成时间(毫秒时间戳字符串) |
|
||||
|
||||
### 响应
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "上传成功",
|
||||
"data": "https://qc.corewing.com/report/WL-20260227-001",
|
||||
"success": true
|
||||
}
|
||||
```
|
||||
|
||||
- `data` — 测试报告 URL(可为 null)
|
||||
|
||||
---
|
||||
|
||||
## 3. 上传照片
|
||||
|
||||
上传测试步骤关联的照片。
|
||||
|
||||
- **URL**: `POST /api/qc/test/upload-photo`
|
||||
- **Content-Type**: `multipart/form-data`
|
||||
|
||||
### 请求参数
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|--------|---------------|------|------------------|
|
||||
| testNo | String (text) | 是 | 测试单号 |
|
||||
| photo | File | 是 | 照片文件 (JPEG等)|
|
||||
|
||||
### 响应
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "上传成功",
|
||||
"data": {
|
||||
"url": "https://qc.corewing.com/photos/xxx.jpg"
|
||||
},
|
||||
"success": true
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. 验证 SN
|
||||
|
||||
验证序列号是否有效(飞控板扫码流程使用)。
|
||||
|
||||
- **URL**: `POST /api/qc/test/validate-sn`
|
||||
- **Content-Type**: `application/json`
|
||||
|
||||
### 请求体
|
||||
|
||||
```json
|
||||
{
|
||||
"sn": "FC-SN-20260001"
|
||||
}
|
||||
```
|
||||
|
||||
### 响应
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "SN 有效",
|
||||
"data": true,
|
||||
"success": true
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 获取测试配置
|
||||
|
||||
获取指定产品类型的测试参数/阈值。
|
||||
|
||||
- **URL**: `GET /api/qc/config/test-params?productType=WIRELESS_BOARD`
|
||||
|
||||
### 响应
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"success": true,
|
||||
"data": { }
|
||||
}
|
||||
```
|
||||
|
||||
> `data` 结构由后端自定义,APP 当前未使用。
|
||||
|
||||
---
|
||||
|
||||
## 6. 查询 SN 历史记录
|
||||
|
||||
- **URL**: `GET /api/qc/test/history?sn=AA:BB:CC:DD:EE:FF`
|
||||
|
||||
### 响应
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"success": true,
|
||||
"data": { }
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. 获取测试报告
|
||||
|
||||
- **URL**: `GET /api/qc/test/report?testNo=WL-20260227-001`
|
||||
|
||||
### 响应
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"success": true,
|
||||
"data": "https://qc.corewing.com/report/WL-20260227-001"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 枚举值参考
|
||||
|
||||
### productType(产品类型)
|
||||
|
||||
| 值 | 说明 |
|
||||
|---------------------|--------|
|
||||
| WIRELESS_BOARD | 无线板 |
|
||||
| FLIGHT_CONTROLLER | 飞控板 |
|
||||
|
||||
### status(测试状态)
|
||||
|
||||
| 值 | 说明 |
|
||||
|-------------|----------|
|
||||
| IN_PROGRESS | 进行中 |
|
||||
| PASS | 通过 |
|
||||
| FAIL | 失败 |
|
||||
| UPLOADED | 已上传 |
|
||||
|
||||
### result(步骤结果)
|
||||
|
||||
| 值 | 说明 |
|
||||
|------|------|
|
||||
| PASS | 通过 |
|
||||
| FAIL | 失败 |
|
||||
|
||||
### 无线板测试步骤(7 步)
|
||||
|
||||
| stepIndex | stepName |
|
||||
|-----------|------------------------|
|
||||
| 1 | BLE连接与特征订阅 |
|
||||
| 2 | 安装无线板/外观检查 |
|
||||
| 3 | 供电测试(4.5V) |
|
||||
| 4 | Type-C USB测试 |
|
||||
| 5 | BLE信号质量测试 |
|
||||
| 6 | MAVLink心跳通信测试 |
|
||||
| 7 | 激活/入库 |
|
||||
|
||||
### 飞控板测试步骤(12 步)
|
||||
|
||||
| stepIndex | stepName |
|
||||
|-----------|-----------------|
|
||||
| 1 | USB串口连接 |
|
||||
| 2 | 安装SD卡与装夹 |
|
||||
| 3 | 心跳检测 |
|
||||
| 4 | IMU测试 |
|
||||
| 5 | 气压计测试 |
|
||||
| 6 | GPS模块检测 |
|
||||
| 7 | RC输入测试 |
|
||||
| 8 | ADC接口测试 |
|
||||
| 9 | PWM输出测试 |
|
||||
| 10 | 图传与OSD检查 |
|
||||
| 11 | 参数重置 |
|
||||
| 12 | 数据上传/结束 |
|
||||
81
docs/schema.sql
Normal file
81
docs/schema.sql
Normal file
@@ -0,0 +1,81 @@
|
||||
-- ============================================================
|
||||
-- Corewing QC 后端数据库建表 SQL(MySQL)
|
||||
-- ============================================================
|
||||
|
||||
|
||||
CREATE TABLE `flight_controller` (
|
||||
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
||||
`sn` VARCHAR(64) NOT NULL COMMENT '序列号',
|
||||
`model` VARCHAR(64) DEFAULT NULL COMMENT '型号',
|
||||
`batch_no` VARCHAR(64) DEFAULT NULL COMMENT '批次号',
|
||||
`status` VARCHAR(32) NOT NULL DEFAULT 'REGISTERED' COMMENT '状态: REGISTERED / QC_PASS / QC_FAIL / ACTIVATED',
|
||||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_sn` (`sn`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='飞控板设备注册表';
|
||||
|
||||
|
||||
CREATE TABLE `qc_test_record` (
|
||||
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
||||
`test_no` VARCHAR(32) NOT NULL COMMENT '测试单号,格式: WL-yyyyMMdd-NNN / FC-yyyyMMdd-NNN',
|
||||
`product_type` VARCHAR(32) NOT NULL COMMENT '产品类型: WIRELESS_BOARD / FLIGHT_CONTROLLER',
|
||||
`sn` VARCHAR(64) NOT NULL COMMENT '产品序列号(无线板为 BLE MAC)',
|
||||
`operator_id` VARCHAR(32) NOT NULL COMMENT '测试员 ID',
|
||||
`operator_name` VARCHAR(64) NOT NULL COMMENT '测试员姓名',
|
||||
`phone_model` VARCHAR(64) DEFAULT NULL COMMENT '测试手机型号',
|
||||
`app_version` VARCHAR(16) DEFAULT NULL COMMENT 'APP 版本',
|
||||
`status` VARCHAR(16) NOT NULL COMMENT '测试结果: PASS / FAIL',
|
||||
`create_time` DATETIME NOT NULL COMMENT 'APP 端创建时间',
|
||||
`updated_at` DATETIME DEFAULT NULL COMMENT 'APP 端最后更新时间',
|
||||
`upload_time` DATETIME DEFAULT NULL COMMENT 'APP 端上传时间',
|
||||
`report_url` VARCHAR(512) DEFAULT NULL COMMENT '测试报告 URL',
|
||||
`server_create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '服务端入库时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_test_no` (`test_no`),
|
||||
KEY `idx_sn` (`sn`),
|
||||
KEY `idx_product_type` (`product_type`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='QC 测试记录主表';
|
||||
|
||||
|
||||
CREATE TABLE `qc_step_result` (
|
||||
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
||||
`test_record_id` BIGINT NOT NULL COMMENT '关联 qc_test_record.id',
|
||||
`step_index` INT NOT NULL COMMENT '步骤序号(从 1 开始)',
|
||||
`step_name` VARCHAR(64) NOT NULL COMMENT '步骤名称',
|
||||
`result` VARCHAR(8) DEFAULT NULL COMMENT '步骤结果: PASS / FAIL / NULL',
|
||||
`data_json` TEXT DEFAULT NULL COMMENT '步骤详细数据 JSON',
|
||||
`duration` BIGINT DEFAULT 0 COMMENT '步骤耗时(毫秒)',
|
||||
`completed_at` DATETIME DEFAULT NULL COMMENT '步骤完成时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_test_record_id` (`test_record_id`),
|
||||
UNIQUE KEY `uk_record_step` (`test_record_id`, `step_index`),
|
||||
CONSTRAINT `fk_step_record` FOREIGN KEY (`test_record_id`)
|
||||
REFERENCES `qc_test_record` (`id`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='QC 步骤结果表';
|
||||
|
||||
|
||||
CREATE TABLE `qc_photo` (
|
||||
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
||||
`test_record_id` BIGINT NOT NULL COMMENT '关联 qc_test_record.id',
|
||||
`test_no` VARCHAR(32) NOT NULL COMMENT '测试单号',
|
||||
`url` VARCHAR(512) NOT NULL COMMENT '照片远程 URL',
|
||||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_test_no` (`test_no`),
|
||||
CONSTRAINT `fk_photo_record` FOREIGN KEY (`test_record_id`)
|
||||
REFERENCES `qc_test_record` (`id`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='QC 测试照片表';
|
||||
|
||||
|
||||
-- ============================================================
|
||||
-- 示例数据(可选)
|
||||
-- ============================================================
|
||||
|
||||
-- 注册一批无线板
|
||||
-- INSERT INTO `wireless_board` (`mac`) VALUES
|
||||
-- ('AA:BB:CC:DD:EE:01'),
|
||||
-- ('AA:BB:CC:DD:EE:02'),
|
||||
-- ('AA:BB:CC:DD:EE:03');
|
||||
Reference in New Issue
Block a user