LAOP-admin/PRD-无人机信息开放平台小程序.md
2026-09-18 16:45:38 +08:00

998 lines
47 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 翼云Hub · 产品文档(PRD)
> **Slogan**:全链路低空体系聚合,打破供需两端信息壁垒。
> **版本 v1.0** · 待开发
> **主色**:`#5E46F6`(深紫主色)/ `#7C6AF8`(辅)/ `#F2EFFE`(底)/ `#FFFFFF`(卡)/ `#F59E0B`(金色点缀)
> **导航**:4 个底部一级 Tab(**首页 / 任务中心 / 研学与课程 / 个人中心**)
> **参考原型**:图2(首页结构)· 图3(个人中心结构)· 图1(功能菜单来源)
---
## 0. 修订记录
| 版本 | 日期 | 主要变更 |
|------|------|----------|
| v1.0 | 待开发 | 初版产品需求文档,以图 1 功能菜单为蓝本,4 Tab 结构(首页 / 任务中心 / 研学与课程 / 个人中心) |
---
## 1. 背景与机会
### 1.1 背景
国内民用无人机产业进入"持证合规 + 商业落地"双驱动的爆发期。CAAC(民用无人驾驶航空器综合管理平台)2024 年起强制要求超 250g 机型实名注册、操控员持证;植保、巡检、航拍、表演四大场景的商业订单快速放量,但供需两端存在明显错配。
- **需求侧(商家/客户)**:临时用机、航拍交付、植保作业、应急巡检,缺可信飞手,缺合同/合规保障
- **供给侧(飞手)**:持证后无稳定接单渠道,资质难被看见
- **服务端(培训机构、维修点、保险公司、租赁商)**:缺精准流量
行业缺少一个"**开放聚合 + 资质可信 + 交易闭环**"的信息平台。
### 1.2 目标(北极星指标)
| 阶段 | 目标 | 北极星指标 |
|------|------|------------|
| M3 | 上线跑通 | 认证飞手数 ≥ 3,000;认证商家数 ≥ 500 |
| M6 | 双边活跃 | 月成交任务数 ≥ 2,000;月活飞手 ≥ 5,000 |
| M12 | 行业心智 | CAAC 报名转化率行业第一;"找飞手"心智占位 |
### 1.3 用户角色
| 角色 | 占比 | 核心诉求 | 关键场景 |
|------|------|----------|----------|
| **C1 飞手** | 50% | 接单变现、资质展示、考证指引 | 任务中心接单、飞手中心、刷题 |
| **C2 商家/客户** | 30% | 发布需求、找可信飞手、合规交付 | 任务中心发单、查附近、CAAC 报名 |
| **C3 培训机构** | 10% | 招生、课程展示、品牌曝光 | 商家认证、题库合作 |
| **C4 服务商** | 10% | 流量、订单分发 | 商家认证 |
---
## 2. 导航与功能架构
### 2.1 底部 Tab(4 个)
| 序号 | Tab | 定位 | 核心目的 |
|------|-----|------|----------|
| ① | **首页** | 流量分发中枢 | 黄金位 + 9 宫格 + 供需双广场 + 优质任务 1 条 |
| ② | **任务中心** | 交易主战场 | 任务列表 + 多维度筛选 + 抢单 |
| ③ | **研学与课程** | 内容/服务留存 | 课程展示 + 预约 |
| ④ | **个人中心** | 身份与认证 | 我的任务 + 飞手/商家双身份认证 + 推广 |
### 2.2 全量功能清单(按图 1 + 业务扩展)
| 一级 Tab | 二级入口 | 三级 / 页面 | 价值 | 优先级 |
|----------|----------|-------------|------|--------|
| **首页** | 城市定位 | 定位选择 | LBS 入口 | P0 |
| | 顶部轮播 | CAAC 报名 / 招商 / 表演 | 运营位 | P0 |
| | 公告条 | 最新政策 / 新闻 | 内容置顶 | P0 |
| | 9 宫格金刚区(详见 2.3) | 9 个入口 | 流量分发 | P0 |
| | **供需双广场**(独立菜单) | 商家发单 · 飞手接单 | **核心交易入口** | **P0** |
| | **优质任务**(仅 1 张) | 首页露出 1 张顶部任务 | 转化错点 | P0 |
| **任务中心** | 筛选按钮 | 推荐 / 附近 / 高价 / 长期 | 排序入口 | P0 |
| | **⚙ 筛选按钮** | 7 组 / 55 个筛选项(右侧抽屉) | 精准筛选 | P0 |
| | 任务列表(横向大卡) | 1 优质 + 多普通任务 | 抢单入口 | P0 |
| | 任务详情 | 详情页 + IM + 接单 | 成交 | P0 |
| **研学与课程** | 分类 Tab | 全部 / 认知启蒙 / 技能进阶 / 创新应用 / 竞赛辅导 | 内容导航 | P0 |
| | 课程列表 | 卡片列表(6门真实案例课程) | 内容/服务留存 | **P0** |
| | 课程详情 | 课程信息 + 预约入口 | 深度了解 | P0 |
| | 研学预约 | 填写信息提交预约 | 核心转化 | **P0** |
| **个人中心** | 我的任务(3 态) | 待接单 / 进行中 / 已完成 | 任务管理 | **P0** |
| | 飞手推广 | 老带新得积分 | 拉新 | P0 |
| | 认证与工具 | 飞手认证 / 商家认证 / 我的发布 / 实名认证 | **身份门槛** | **P0** |
| | | 飞手中心 / 商家中心 | 身份聚合 | P0 |
### 2.3 首页 9 宫格金刚区(9 个入口)
| # | 入口 | 跳转 | 备注 |
|---|------|------|------|
| 1 | CAAC 报名 | 报名页 | 强引流,潜在客转化 |
| 2 | 无人机表演 | 表演列表 | 高客单 |
| 3 | 实力商家 | 商家列表 | 信任锚点 |
| 4 | 本地飞手 | 飞手列表 | 信任锚点 |
| 5 | 培训考试 | 培训模块 | 留存 + 引流 |
| 6 | 发布任务 | 发布任务页(需商家认证) | 商家侧入口 |
| 7 | 我要接单 | 任务中心(需飞手认证) | 飞手侧入口 |
| 8 | 飞手推广 | 推广页(带 HOT 角标) | 拉新 |
| 9 | **滴滴打无人机** | 调度页(类打车模式) | **新功能·核心亮点** |
---
## 3. 功能关联分析(核心)
### 3.1 三大 Tab 关联总览
```
┌──────────────────────────────────────────────────────────┐
│ 首页(流量分发中枢) │
│ 轮播位 ─→ 强运营:CAAC报名 / 表演 / 招商 │
│ 公告 ─→ 政策更新、行业新闻(点击跳行业动态详情) │
│ 金刚区(9 宫格) ─→ 功能分发 │
│ ├─ CAAC报名 ──→ 飞手认证 ──→ 训练题库 │
│ ├─ 无人机表演 ──→ 任务中心(高客单任务) │
│ ├─ 实力商家 ──→ 商家认证入口(个人中心) │
│ ├─ 本地飞手 ──→ 飞手认证入口(个人中心) │
│ ├─ 培训考试 ──→ 附近商家 + 题库刷题 │
│ ├─ 发布任务 ──→ 商家认证校验(个人中心) │
│ └─ 我要接单 ──→ 飞手认证校验(个人中心) │
└──────────────────────────────────────────────────────────┘
│ │
▼ ▼
研学与课程 个人中心 · 身份
(内容留存) 飞手 ←─→ 商家
│ │
└──────────┬────────────┘
▼
┌─────────────────┐
│ 任务中心 │
│ 商家发单/飞手接单│
│ (需对应身份认证)│
└─────────────────┘
```
### 3.2 关键功能关联(10 条)
| # | 触发点 | 关联点 | 业务价值 |
|---|--------|--------|----------|
| 1 | CAAC 报名点击 | → 飞手认证引导页 | 流量 → 认证漏斗 |
| 2 | 实力商家 / 本地飞手 | → 详情页 + IM + 收藏 | 信任 → 咨询 → 成交 |
| 3 | 培训考试题库 | → 错题 → 课程推荐 | 学习 → 报名 → 机构 |
| 4 | 商家发单 | → 校验商家认证状态 | 未认证阻断 + 引导 |
| 5 | 飞手接单 | → 校验飞手认证 + 保险 | 风控前置 |
| 6 | 任务中心"优质任务"标签 | → 付费订阅 / 会员 | GMV 提升 |
| 7 | 飞手推广 | → 老带新积分 | 拉新 |
| 8 | 附近商家 | → 定位授权 + 商家详情 | LBS 转化 |
| 9 | 研学课程详情 | → 相关任务 / 商家挂载 | 内容 → 交易 |
| 11 | 滴滴打无人机 | → 无人机飞手网络 → 配送任务派单 | 新增核心功能 |
| 10 | 资质中心 | → 过期提醒 + 续期 | 长期留存 |
### 3.3 首页信息流(自上而下)
```
1. 状态栏
2. 城市定位(如:全国 / 上海)+ 消息/设置
3. 轮播图(CAAC 报名 / 招商 / 表演)
4. 公告条(最新政策 / 新闻)
5. 9 宫格金刚区(9 个入口,详见 2.3)
6. 供需双广场(独立菜单 · 仿图 1)
左卡:📤 商家发单 │ 右卡:🛩 飞手接单
7. 滴滴打无人机(同城即时配送)
地图动画示意(无人机飞手轨迹)
配送流程 4 步:骑手取货 → 无人机起飞 → 配送中 → 预计到达
底部快捷下单栏:30 分钟必达 · 支持紧急件
8. 研学体系(首页展示课程 · 2~3 张横向卡)
① [两天一晚世园无人机研学课程] ¥1,388/期
② [无人机技能进阶营(3-5天)] ¥2,680/期
③ [鄂尔多斯雏鹰计划] ¥3,200/期
```
### 3.4 任务中心 Tab
```
顶部筛选按钮栏:
[⚙ 筛选▾] [📍 附近] ← 推荐/高价/长期 已合并到筛选面板
点击 [⚙ 筛选] → 右侧抽屉式筛选面板(7 组 / 55 个筛选项):
· 任务分类(7) 全部 / 植保 / 航拍 / 巡检 / 表演 / 吊运 / 测绘
· 任务状态(5) 全部 / 待接单 / 已接单 / 执行中 / 已完成
· 价格预算(5+输入)不限 / 0-3千 / 3-10千 / 1-5万 / 5万以上 + 自定义
· 所在地区(9) 全国 + 8 省市
· 人员数量(5) 不限 / 1人 / 2人 / 3-5人 / 5人以上
· 发布时间(5) 全部 / 今天 / 3天内 / 本周内 / 本月内
· 其他筛选(5) 优质任务 / 含飞手险 / 长期合作 / 急单 / 团队单
主体任务卡(仿图 1 横向大卡):
· 头部:标签(分类 + 优质 + 状态)+ 地点
· 标题:粗体任务名
· 左图右信息卡:地点 / 人数 / 时间
· 底部:价格(左侧大字号)+ 操作按钮(查看附近飞手 / 去抢单)
· 描述:飞手险 + 任务详情(实景文字)
优质任务强化(仅首卡):
· 金色边框 + 米黄渐变背景 + 金色 ★ 徽标
· 金色价格 + 金色 CTA 按钮
· 右上角金色光晕
```
### 3.5 滴滴打无人机 Tab(独立 Tab)
> 核心定位:同城即时配送平台,配送端为无人机(类比美团/闪送,骑手换无人机)
```
核心业务流程:
用户下单 → 系统派单给附近无人机 → 无人机取货起飞 → 配送中(实时轨迹)→ 送达
功能清单:
· 一键下单:填写取货/收货地址 + 物品重量/类型 → 生成订单
· 配送地图:无人机轨迹实时展示(起飞点→配送中→到达)
· 配送流程:4 步追踪(骑手取货 / 无人机起飞 / 配送中 / 预计到达)
· 计价规则:按距离 + 重量 + 时效(普通件/加急件)
· 配送范围:同城 30 分钟必达,支持紧急件
· 飞手/商家入驻:认证后接入配送网络
展示 4 步配送流程示例(首页版):
① ✓ 骑手取货 09:14
② ✓ 无人机起飞 09:16 [T100 起飞]
③ 🚁 配送中 09:17 [飞行高度 120m · 时速 60km/h]
④ ◎ 预计到达 09:25 [送货上门]
底部下单栏:30 分钟内送达 · 支持紧急件 [立即下单]
```
### 3.6 研学与课程 Tab
```
分类 Tab:全部 / 认知启蒙 / 技能进阶 / 创新应用 / 竞赛辅导
课程卡片字段:
· 标签(热门/推荐/新开)+ 分类标签 + 对象年龄
· 课程名 + 地点 + 时长
· 课程亮点(3项展开)
· 价格 + [立即预约] 按钮
展示 6 门真实课程案例:
① 两天一晚世园无人机研学课程(北京)¥1,388/期 [热门·青少年·认知启蒙]
② 无人机技能进阶营(3-5天)¥2,680/期 [技能进阶·初中生]
③ 鄂尔多斯科技馆「雏鹰计划」(8天16课)¥3,200 [创新应用·高中生]
④ 「越州蒲公英计划」青少年无人机研学(绍兴)¥680 [竞赛辅导·青少年]
⑤ 「智趣少年营」无人机兴趣课程(社区)¥380 [趣味科普·零基础]
⑥ 「小小农发人」无人机农业研学之旅(简阳)¥280 [农业应用·亲子]
预约交互:[立即预约] → 弹出预约表单(姓名/手机/人数/备注)→ 提交成功提示
```
### 3.6 个人中心信息流(自上而下)
```
1. 顶部渐变区(无右上角图标):
👤 头像 + 登录/注册按钮
2. 我的任务(3 态):
[📋 待接单 2] [🛩 进行中 1] [✓ 已完成]
3. 飞手推广 Banner:
📢 邀请飞手认证 · 认证得积分 · 积分可提现 [去推广 ›]
4. 认证与工具:
上排 4:[飞手认证] [商家认证] [我的发布] [实名认证]
下排 2:[🏆飞手中心] [🏬商家中心]
```
> ❌ 已删除模块:我的服务(优惠券/商家发货/分销绑定/收货地址)、信息完善、飞手资质、商家资质、功能关联导览、个人中心右上角 3 图标(App/消息/设置)。
---
## 4. 核心流程
### 4.1 飞手入驻
注册 / 微信一键登录 → 飞手认证(上传 CAAC 执照 + 身份证 + 机型)→ 审核(1 工作日)→ 通过 → 进入任务中心接单
### 4.2 商家发单
注册 → 商家认证(营业执照 + 法人身份证 + 经营范围)→ 审核 → 通过 → 任务中心 → 发布任务(类型 / 地点 / 时间 / 预算 / 机型要求)→ 飞手接单 → 双方 IM 确认 → 线下执行 → 平台评价 → 抽佣结算
### 4.3 任务状态机
```
待接单 → 已接单(待执行)→ 执行中 → 待验收 → 已完成
↓
异常:取消 / 申诉 / 退款
```
### 4.4 认证状态机
```
未认证 → 资料上传中 → 审核中(≤24h)→ 已认证(有效 1 年)→ 即将过期(30 天)→ 过期
↓
续期申请
```
### 4.5 筛选交互流程
点击 [⚙ 筛选] → 右侧抽屉滑入 → 7 组筛选项可点击切换 → 自定义价格输入 → [重置全部] 或 [确认筛选 (12)] → 关闭抽屉 → 列表刷新 + 提示"筛选已应用"
---
## 5. 信息架构
### 5.1 页面清单(28 个)
| 模块 | 页面 |
|------|------|
| 通用 | 启动页、登录/注册、消息中心、定位选择 |
| 首页 | 首页、新闻列表、新闻详情、CAAC 报名、无人机表演列表 / 详情 |
| 商家 / 飞手 | 实力商家列表 / 详情、本地飞手列表 / 详情 |
| 培训 | 培训考试首页、附近商家(培训)、题库刷题、错题本 |
| 任务中心 | 任务中心首页、发布任务、我要接单、任务详情、任务管理、筛选面板 |
| 研学与课程 | 列表(全部 / 认知启蒙 / 技能进阶 / 创新应用 / 竞赛辅导)、详情、预约 |
| 我的 | 我的首页(任务 3 态)、飞手推广、飞手认证、商家认证、我的发布、实名认证、飞手中心、商家中心、关于我们 |
### 5.2 底部 Tab(4 个 · 按图 1 一级菜单)
- **首页**:流量分发
- **任务中心**:核心交易(独立 Tab · 必到)
- **行业动态**:资讯流
- **个人中心**:身份与认证
> 与图 1 一级菜单对应关系:图 1 的"首页" = 本文档的首页 + 任务中心(交易功能下沉到 Tab);图 1 的"行业动态" = 研学与课程 Tab;图 1 的"个人中心" = 同名 Tab。
---
## 6. UI 规范
### 6.1 色彩系统
| 用途 | 颜色 | 备注 |
|------|------|------|
| **主色** | **`#5E46F6`** = `rgb(94,70,246)` | 品牌色 · 按钮 / Tag / 强调 / Tab 选中 / 阴影 |
| 辅助紫 | `#7C6AF8` | 次级按钮、渐变起点 |
| 浅紫底 | `#F2EFFE` | 页面背景、Tab 浅态 |
| 卡片白 | `#FFFFFF` | 内容卡 |
| 文字主 | `#1A1730` | 标题 |
| 文字次 | `#5E5870` | 描述 |
| 文字弱 | `#9D97AE` | 提示 |
| 成功 | `#22C55E` | 认证通过 |
| 警告 | `#F59E0B` | 即将过期 |
| 错误 | `#EF4444` | 失败 |
| **金色点缀** | **`#F59E0B`** | **优质任务标签 / 价格 / CTA / 边框** |
### 6.2 字体
- iOS:PingFang SC
- Android:系统默认
- 字号阶梯:11 / 12 / 13 / 14 / 15 / 17 / 20 / 24 / 32
### 6.3 圆角 / 阴影
- 卡圆角:12-16 px
- 按钮圆角:8-14 px
- 头像圆角:50%
- 卡阴影:`0 2px 12px rgba(94,70,246,0.10)` ——`--shadow`
- 任务中心卡阴影:`0 4px 16px rgba(94,70,246,0.12)` ——`--shadow-md`
- 大阴影(轮播 / Banner):`0 8px 24px rgba(94,70,246,0.18)` ——`--shadow-lg`
- 优质任务金色阴影:`0 6px 20px rgba(245,158,11,0.22)`
---
## 7. 关键指标
| 指标 | 目标(M3) | 监控位 |
|------|------------|--------|
| CAAC 报名点击 → 提交转化率 | ≥ 35% | 首页轮播点击 |
| 飞手认证完成率 | ≥ 60% | 引导页漏斗 |
| 任务中心点击率 | ≥ 50% | 首页"供需双广场" + "优质任务" |
| 优质任务点击 → 接单 | ≥ 20% | 任务中心首卡 |
| 任务平均成交时长 | ≤ 4h | 任务详情 |
| 7 日留存 | ≥ 30% | 启动埋点 |
| 研学与课程 Tab PV | 首页 PV 的 30% | Tab 切换埋点 |
| 筛选面板使用率 | ≥ 15% | 任务中心 Tab |
---
## 8. 风险与对策
| 风险 | 等级 | 对策 |
|------|------|------|
| 飞手资质造假 | 高 | 接入 CAAC 接口核验执照真伪 + 履约保证金 |
| 商家拖欠 / 跑单 | 高 | 平台担保支付 + 评价 + 黑名单 |
| 飞手人身安全 | 中 | 保险合作 + 紧急 SOS 按钮 + 行程共享 |
| 监管政策变化 | 中 | 法务对接民航局,配置审核人力 |
| 冷启动供需 | 中 | 地推:先与 3-5 家培训机构、2-3 个无人机协会合作 |
| 优质任务供给不足 | 中 | 平台补贴 + 头部商家 BD |
| 首页任务中心被弱化 | 中 | 顶部"优质任务"金色强化 + 供需双广场独立菜单导流 |
| 低空配送合规(飞行审批/空域限制) | 高 | 对接 UOM 平台获取飞行许可;设置电子围栏自动拦截禁飞区订单 |
| 配送延误/事故(天气/机械故障) | 中 | 无人机状态实时监控;天气预警自动暂停;备用机调度机制 |
---
## 9. 版本规划
| 版本 | 时间 | 内容 |
|------|------|------|
| v1.0 | 待开发 | 首页 + 任务中心 + 研学与课程 + 个人中心,4 Tab 完整功能 |
| v2.0 | M3 | 培训题库 + 保险合作 + 智能匹配 |
| v3.0 | M6+ | 行业 SaaS + AR 展示 + 地图找飞手 |
---
## 10. 附录:与原图功能对照表
### 10.1 一级菜单对照
| 图 1 一级菜单 | 本文档 Tab | 关键二级 |
|--------------|-----------|----------|
| 首页 | **首页 + 任务中心** | 9 宫格 + 供需双广场 + 滴滴打无人机 + 研学体系 |
| 行业动态 | **研学与课程** | 列表 + 详情 + 预约(6 门课程) |
| 个人中心 | **个人中心** | 任务 3 态 + 飞手 / 商家双身份认证 + 推广 |
### 10.2 二级菜单对照
| 图 1 二级菜单 | 本文档对应 | 实现位置 |
|--------------|------------|----------|
| 新闻咨询 | ✓ | 首页轮播 + 公告(研学与课程内容) |
| CAAC 报名 | ✓ | 首页 9 宫格 #1 + 独立页 |
| 无人机表演 | ✓ | 首页 9 宫格 #2 + 独立板块 |
| 实力商家 | ✓ | 首页 9 宫格 #3 + 商家列表 |
| 本地飞手 | ✓ | 首页 9 宫格 #4 + 飞手列表 |
| 培训考试 | ✓ | 首页 9 宫格 #5 + 培训模块 |
| **供需双广场** | ✓(**独立菜单**) | 首页 6 区(左:商家发单 / 右:飞手接单) |
| **优质任务** | ✓ | 首页 7 区(仅 1 张金色强化卡)+ 任务中心首卡 |
| 信息完善 | ❌(已删除) | 个人中心(合并到飞手 / 商家认证流程中) |
| 飞手认证 | ✓ | 个人中心「认证与工具」上排 #1 |
| 飞手资质中心 | ❌(已删除) | 资质合并到飞手认证页面 |
| 商家认证 | ✓ | 个人中心「认证与工具」上排 #2 |
| 商家资质中心 | ❌(已删除) | 资质合并到商家认证页面 |
| 关于我们 | ✓ | 个人中心底部 |
---
## 11. 数据库设计(DDL)
> 数据库类型:MySQL 8.0
> 字符集:`utf8mb4` / 排序规则:`utf8mb4_unicode_ci`
> 所有表均含 `created_at` / `updated_at` 通用字段;主键均使用 `BIGINT` 自增;软删除用 `deleted_at`
---
### 11.1 公告表 `announcement`
| 字段 | 类型 | 说明 | 约束 |
|------|------|------|------|
| id | BIGINT | 主键 | PK, AUTO_INCREMENT |
| title | VARCHAR(100) | 公告标题 | NOT NULL |
| content | TEXT | 公告正文 | |
| valid_from | DATETIME | 生效开始时间 | |
| valid_to | DATETIME | 生效结束时间 | |
| status | TINYINT | 状态:0隐藏 1显示 | DEFAULT 1 |
| sort_order | INT | 排序,越小越靠前 | DEFAULT 0 |
| publisher_id | BIGINT | 发布人ID(关联user.id) | |
| created_at | DATETIME | 创建时间 | DEFAULT CURRENT_TIMESTAMP |
| updated_at | DATETIME | 更新时间 | |
| deleted_at | DATETIME | 软删除时间 | |
```sql
CREATE TABLE announcement (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
title VARCHAR(100) NOT NULL COMMENT '公告标题',
content TEXT COMMENT '公告正文',
valid_from DATETIME COMMENT '生效开始时间',
valid_to DATETIME COMMENT '生效结束时间',
status TINYINT DEFAULT 1 COMMENT '状态:0隐藏 1显示',
sort_order INT DEFAULT 0 COMMENT '排序',
publisher_id BIGINT COMMENT '发布人ID',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted_at DATETIME DEFAULT NULL COMMENT '软删除时间',
INDEX idx_status_sort (status, sort_order),
INDEX idx_valid_period (valid_from, valid_to)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='公告表';
```
---
### 11.2 任务表 `task`
| 字段 | 类型 | 说明 | 约束 |
|------|------|------|------|
| id | BIGINT | 主键 | PK, AUTO_INCREMENT |
| task_no | VARCHAR(32) | 任务编号(全局唯一) | UNIQUE |
| name | VARCHAR(100) | 任务名称 | NOT NULL |
| type | VARCHAR(20) | 任务类型:植保/吊运/航拍/巡检/清洗/表演/测绘 | NOT NULL |
| province | VARCHAR(20) | 省份 | |
| city | VARCHAR(20) | 城市 | |
| district | VARCHAR(20) | 区县 | |
| address | VARCHAR(200) | 详细地址 | |
| latitude | DECIMAL(10,6) | 纬度坐标 | |
| longitude | DECIMAL(10,6) | 经度坐标 | |
| scene_images | JSON | 作业场景图(file_id数组) | |
| required_count | INT | 需求人数 | DEFAULT 1 |
| start_time | DATETIME | 开始时间 | NOT NULL |
| end_time | DATETIME | 结束时间 | |
| reward | DECIMAL(10,2) | 报酬(元) | NOT NULL |
| insurance_require | JSON | 保险要求:三者险/飞手险/机身险 | |
| contact_name | VARCHAR(50) | 联系人姓名 | |
| contact_phone | VARCHAR(20) | 联系电话 | NOT NULL |
| remark | TEXT | 备注 | |
| status | TINYINT | 状态:0草稿 1待接单 2已接单 3执行中 4已完成 5已取消 | DEFAULT 0 |
| is_premium | TINYINT | 是否优质任务:0否 1是 | DEFAULT 0 |
| premium_cost | INT | 优质任务积分消耗 | DEFAULT 0 |
| publisher_id | BIGINT | 发布人ID(关联user.id) | NOT NULL |
| accepted_pilot_id | BIGINT | 接单飞手ID(关联pilot.id) | |
| platform_fee | DECIMAL(10,2) | 平台服务费 | DEFAULT 0.00 |
| created_at | DATETIME | 创建时间 | DEFAULT CURRENT_TIMESTAMP |
| updated_at | DATETIME | 更新时间 | |
| deleted_at | DATETIME | 软删除时间 | |
```sql
CREATE TABLE task (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
task_no VARCHAR(32) NOT NULL COMMENT '任务编号(全局唯一)',
name VARCHAR(100) NOT NULL COMMENT '任务名称',
type VARCHAR(20) NOT NULL COMMENT '任务类型:植保/吊运/航拍/巡检/清洗/表演/测绘',
province VARCHAR(20) COMMENT '省份',
city VARCHAR(20) COMMENT '城市',
district VARCHAR(20) COMMENT '区县',
address VARCHAR(200) COMMENT '详细地址',
latitude DECIMAL(10,6) COMMENT '纬度坐标',
longitude DECIMAL(10,6) COMMENT '经度坐标',
scene_images JSON COMMENT '作业场景图(file_id数组)',
required_count INT DEFAULT 1 COMMENT '需求人数',
start_time DATETIME NOT NULL COMMENT '开始时间',
end_time DATETIME COMMENT '结束时间',
reward DECIMAL(10,2) NOT NULL COMMENT '报酬(元)',
insurance_require JSON COMMENT '保险要求:三者险/飞手险/机身险',
contact_name VARCHAR(50) COMMENT '联系人姓名',
contact_phone VARCHAR(20) NOT NULL COMMENT '联系电话',
remark TEXT COMMENT '备注',
status TINYINT DEFAULT 0 COMMENT '状态:0草稿 1待接单 2已接单 3执行中 4已完成 5已取消',
is_premium TINYINT DEFAULT 0 COMMENT '是否优质任务:0否 1是',
premium_cost INT DEFAULT 0 COMMENT '优质任务积分消耗',
publisher_id BIGINT NOT NULL COMMENT '发布人ID',
accepted_pilot_id BIGINT COMMENT '接单飞手ID',
platform_fee DECIMAL(10,2) DEFAULT 0.00 COMMENT '平台服务费',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted_at DATETIME DEFAULT NULL COMMENT '软删除时间',
UNIQUE KEY uk_task_no (task_no),
INDEX idx_type_status (type, status),
INDEX idx_city_status (city, status),
INDEX idx_publisher (publisher_id),
INDEX idx_pilot (accepted_pilot_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务表';
```
---
### 11.3 商家表 `merchant`
| 字段 | 类型 | 说明 | 约束 |
|------|------|------|------|
| id | BIGINT | 主键 | PK, AUTO_INCREMENT |
| user_id | BIGINT | 关联用户ID | UNIQUE, NOT NULL |
| name | VARCHAR(100) | 商家名称 | NOT NULL |
| address | VARCHAR(200) | 商家地址 | |
| door_image | BIGINT | 门头照片file_id | |
| license_file_id | BIGINT | 营业执照file_id | |
| contact_name | VARCHAR(50) | 联系人 | |
| contact_phone | VARCHAR(20) | 联系电话 | |
| latitude | DECIMAL(10,6) | 纬度 | |
| longitude | DECIMAL(10,6) | 经度 | |
| service_types | JSON | 服务类型数组 | |
| description | TEXT | 商家简介 | |
| cert_status | TINYINT | 认证状态:0未认证 1认证中 2已认证 3认证失败 | DEFAULT 0 |
| cert_time | DATETIME | 认证时间 | |
| rating | DECIMAL(2,1) | 评分(1.0-5.0) | DEFAULT 5.0 |
| order_count | INT | 成交订单数 | DEFAULT 0 |
| created_at | DATETIME | 创建时间 | DEFAULT CURRENT_TIMESTAMP |
| updated_at | DATETIME | 更新时间 | |
| deleted_at | DATETIME | 软删除时间 | |
```sql
CREATE TABLE merchant (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
user_id BIGINT NOT NULL COMMENT '关联用户ID',
name VARCHAR(100) NOT NULL COMMENT '商家名称',
address VARCHAR(200) COMMENT '商家地址',
door_image BIGINT COMMENT '门头照片file_id',
license_file_id BIGINT COMMENT '营业执照file_id',
contact_name VARCHAR(50) COMMENT '联系人',
contact_phone VARCHAR(20) COMMENT '联系电话',
latitude DECIMAL(10,6) COMMENT '纬度',
longitude DECIMAL(10,6) COMMENT '经度',
service_types JSON COMMENT '服务类型数组',
description TEXT COMMENT '商家简介',
cert_status TINYINT DEFAULT 0 COMMENT '认证状态:0未认证 1认证中 2已认证 3认证失败',
cert_time DATETIME COMMENT '认证时间',
rating DECIMAL(2,1) DEFAULT 5.0 COMMENT '评分(1.0-5.0)',
order_count INT DEFAULT 0 COMMENT '成交订单数',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted_at DATETIME DEFAULT NULL COMMENT '软删除时间',
UNIQUE KEY uk_user (user_id),
INDEX idx_cert_status (cert_status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商家表';
```
---
### 11.4 飞手表 `pilot`
| 字段 | 类型 | 说明 | 约束 |
|------|------|------|------|
| id | BIGINT | 主键 | PK, AUTO_INCREMENT |
| user_id | BIGINT | 关联用户ID | UNIQUE, NOT NULL |
| name | VARCHAR(50) | 姓名(实名) | NOT NULL |
| phone | VARCHAR(20) | 手机号 | NOT NULL |
| birthday | DATE | 出生年月 | |
| age | TINYINT | 年龄(自动计算) | |
| avatar_file_id | BIGINT | 头像file_id | |
| cert_status | TINYINT | 认证状态:0未认证 1认证中 2已认证 3认证失败 | DEFAULT 0 |
| cert_time | DATETIME | 认证时间 | |
| license_type | VARCHAR(20) | CAAC执照类型:AOPA/UTC/ASFC | |
| license_no | VARCHAR(50) | CAAC执照编号 | |
| license_file_id | BIGINT | 执照图片file_id | |
| drone_models | JSON | 可操控机型数组 | |
| service_cities | JSON | 服务城市数组 | |
| bio | VARCHAR(200) | 个人简介 | |
| rating | DECIMAL(2,1) | 评分 | DEFAULT 5.0 |
| order_count | INT | 完成任务数 | DEFAULT 0 |
| insurance_expire | DATE | 飞手险到期日 | |
| created_at | DATETIME | 创建时间 | DEFAULT CURRENT_TIMESTAMP |
| updated_at | DATETIME | 更新时间 | |
| deleted_at | DATETIME | 软删除时间 | |
```sql
CREATE TABLE pilot (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
user_id BIGINT NOT NULL COMMENT '关联用户ID',
name VARCHAR(50) NOT NULL COMMENT '姓名(实名)',
phone VARCHAR(20) NOT NULL COMMENT '手机号',
birthday DATE COMMENT '出生年月',
age TINYINT COMMENT '年龄(自动计算)',
avatar_file_id BIGINT COMMENT '头像file_id',
cert_status TINYINT DEFAULT 0 COMMENT '认证状态:0未认证 1认证中 2已认证 3认证失败',
cert_time DATETIME COMMENT '认证时间',
license_type VARCHAR(20) COMMENT 'CAAC执照类型:AOPA/UTC/ASFC',
license_no VARCHAR(50) COMMENT 'CAAC执照编号',
license_file_id BIGINT COMMENT '执照图片file_id',
drone_models JSON COMMENT '可操控机型数组',
service_cities JSON COMMENT '服务城市数组',
bio VARCHAR(200) COMMENT '个人简介',
rating DECIMAL(2,1) DEFAULT 5.0 COMMENT '评分',
order_count INT DEFAULT 0 COMMENT '完成任务数',
insurance_expire DATE COMMENT '飞手险到期日',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted_at DATETIME DEFAULT NULL COMMENT '软删除时间',
UNIQUE KEY uk_user (user_id),
INDEX idx_cert_status (cert_status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='飞手表';
```
---
### 11.5 题库表 `exam_bank`
| 字段 | 类型 | 说明 | 约束 |
|------|------|------|------|
| id | BIGINT | 主键 | PK, AUTO_INCREMENT |
| name | VARCHAR(100) | 题库名称 | NOT NULL |
| cover_image | BIGINT | 封面图file_id | |
| description | TEXT | 题库描述 | |
| question_count | INT | 题目数量 | DEFAULT 0 |
| difficulty | TINYINT | 难度:1简单 2中等 3困难 | DEFAULT 1 |
| status | TINYINT | 状态:0禁用 1启用 | DEFAULT 1 |
| created_at | DATETIME | 创建时间 | DEFAULT CURRENT_TIMESTAMP |
| updated_at | DATETIME | 更新时间 | |
| deleted_at | DATETIME | 软删除时间 | |
```sql
CREATE TABLE exam_bank (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
name VARCHAR(100) NOT NULL COMMENT '题库名称',
cover_image BIGINT COMMENT '封面图file_id',
description TEXT COMMENT '题库描述',
question_count INT DEFAULT 0 COMMENT '题目数量',
difficulty TINYINT DEFAULT 1 COMMENT '难度:1简单 2中等 3困难',
status TINYINT DEFAULT 1 COMMENT '状态:0禁用 1启用',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted_at DATETIME DEFAULT NULL COMMENT '软删除时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='题库表';
```
---
### 11.6 习题表 `exam_question`
| 字段 | 类型 | 说明 | 约束 |
|------|------|------|------|
| id | BIGINT | 主键 | PK, AUTO_INCREMENT |
| bank_id | BIGINT | 所属题库ID | NOT NULL |
| content | TEXT | 题目内容 | NOT NULL |
| options | JSON | 选项数组(含ABCD四选项) | |
| question_type | TINYINT | 题型:1单选 2多选 3判断 | NOT NULL |
| answer | VARCHAR(10) | 标准答案(如:A 或 AB) | NOT NULL |
| explanation | TEXT | 答案解析 | |
| difficulty | TINYINT | 难度:1简单 2中等 3困难 | DEFAULT 1 |
| score | TINYINT | 分值(单选/多选) | DEFAULT 5 |
| sort_order | INT | 排序 | DEFAULT 0 |
| used_count | INT | 被使用次数 | DEFAULT 0 |
| created_at | DATETIME | 创建时间 | DEFAULT CURRENT_TIMESTAMP |
| updated_at | DATETIME | 更新时间 | |
| deleted_at | DATETIME | 软删除时间 | |
```sql
CREATE TABLE exam_question (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
bank_id BIGINT NOT NULL COMMENT '所属题库ID',
content TEXT NOT NULL COMMENT '题目内容',
options JSON COMMENT '选项数组([{"key":"A","val":"..."},...])',
question_type TINYINT NOT NULL COMMENT '题型:1单选 2多选 3判断',
answer VARCHAR(10) NOT NULL COMMENT '标准答案(如:A 或 AB)',
explanation TEXT COMMENT '答案解析',
difficulty TINYINT DEFAULT 1 COMMENT '难度:1简单 2中等 3困难',
score TINYINT DEFAULT 5 COMMENT '分值',
sort_order INT DEFAULT 0 COMMENT '排序',
used_count INT DEFAULT 0 COMMENT '被使用次数',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted_at DATETIME DEFAULT NULL COMMENT '软删除时间',
INDEX idx_bank (bank_id),
INDEX idx_type (question_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='习题表';
```
---
### 11.7 课程表 `course`
| 字段 | 类型 | 说明 | 约束 |
|------|------|------|------|
| id | BIGINT | 主键 | PK, AUTO_INCREMENT |
| name | VARCHAR(100) | 课程名称 | NOT NULL |
| tags | JSON | 标签数组(认知启蒙/技能进阶/创新应用/竞赛辅导) | |
| category | VARCHAR(20) | 分类 | |
| target_age | VARCHAR(20) | 适合年龄 | |
| location | VARCHAR(200) | 上课地点 | |
| latitude | DECIMAL(10,6) | 纬度 | |
| longitude | DECIMAL(10,6) | 经度 | |
| description | TEXT | 课程描述 | |
| highlights | JSON | 课程亮点(3项) | |
| duration_desc | VARCHAR(50) | 课时说明 | |
| capacity_min | INT | 最小人数 | DEFAULT 1 |
| capacity_max | INT | 最大人数 | DEFAULT 20 |
| images | JSON | 课程图片file_id数组 | |
| price | DECIMAL(10,2) | 课程价格 | NOT NULL |
| merchant_id | BIGINT | 所属商家ID | |
| status | TINYINT | 状态:0下架 1上架 2已满员 | DEFAULT 1 |
| view_count | INT | 浏览次数 | DEFAULT 0 |
| book_count | INT | 已预约人数 | DEFAULT 0 |
| rating | DECIMAL(2,1) | 课程评分 | DEFAULT 5.0 |
| created_at | DATETIME | 创建时间 | DEFAULT CURRENT_TIMESTAMP |
| updated_at | DATETIME | 更新时间 | |
| deleted_at | DATETIME | 软删除时间 | |
```sql
CREATE TABLE course (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
name VARCHAR(100) NOT NULL COMMENT '课程名称',
tags JSON COMMENT '标签数组(认知启蒙/技能进阶/创新应用/竞赛辅导)',
category VARCHAR(20) COMMENT '分类',
target_age VARCHAR(20) COMMENT '适合年龄',
location VARCHAR(200) COMMENT '上课地点',
latitude DECIMAL(10,6) COMMENT '纬度',
longitude DECIMAL(10,6) COMMENT '经度',
description TEXT COMMENT '课程描述',
highlights JSON COMMENT '课程亮点(3项)',
duration_desc VARCHAR(50) COMMENT '课时说明',
capacity_min INT DEFAULT 1 COMMENT '最小人数',
capacity_max INT DEFAULT 20 COMMENT '最大人数',
images JSON COMMENT '课程图片file_id数组',
price DECIMAL(10,2) NOT NULL COMMENT '课程价格',
merchant_id BIGINT COMMENT '所属商家ID',
status TINYINT DEFAULT 1 COMMENT '状态:0下架 1上架 2已满员',
view_count INT DEFAULT 0 COMMENT '浏览次数',
book_count INT DEFAULT 0 COMMENT '已预约人数',
rating DECIMAL(2,1) DEFAULT 5.0 COMMENT '课程评分',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted_at DATETIME DEFAULT NULL COMMENT '软删除时间',
INDEX idx_category (category),
INDEX idx_status (status),
INDEX idx_merchant (merchant_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='课程表';
```
---
### 11.8 用户表 `user`
| 字段 | 类型 | 说明 | 约束 |
|------|------|------|------|
| id | BIGINT | 主键 | PK, AUTO_INCREMENT |
| openid | VARCHAR(64) | 微信openId | UNIQUE, NOT NULL |
| nickname | VARCHAR(50) | 用户昵称 | |
| avatar_url | VARCHAR(500) | 头像URL | |
| phone | VARCHAR(20) | 手机号 | |
| gender | TINYINT | 性别:0未知 1男 2女 | DEFAULT 0 |
| bio | VARCHAR(200) | 个人简介 | |
| role_type | TINYINT | 角色类型:1普通用户 2飞手 3商家 4机构 | DEFAULT 1 |
| points | INT | 积分余额 | DEFAULT 0 |
| is_pilot_bound | TINYINT | 是否已绑定飞手身份 | DEFAULT 0 |
| is_merchant_bound | TINYINT | 是否已绑定商家身份 | DEFAULT 0 |
| pilot_id | BIGINT | 关联飞手ID | |
| merchant_id | BIGINT | 关联商家ID | |
| status | TINYINT | 账号状态:0禁用 1正常 | DEFAULT 1 |
| last_login_at | DATETIME | 最后登录时间 | |
| created_at | DATETIME | 注册时间 | DEFAULT CURRENT_TIMESTAMP |
| updated_at | DATETIME | 更新时间 | |
| deleted_at | DATETIME | 软删除时间 | |
```sql
CREATE TABLE `user` (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
openid VARCHAR(64) NOT NULL COMMENT '微信openId',
nickname VARCHAR(50) COMMENT '用户昵称',
avatar_url VARCHAR(500) COMMENT '头像URL',
phone VARCHAR(20) COMMENT '手机号',
gender TINYINT DEFAULT 0 COMMENT '性别:0未知 1男 2女',
bio VARCHAR(200) COMMENT '个人简介',
role_type TINYINT DEFAULT 1 COMMENT '角色类型:1普通用户 2飞手 3商家 4机构',
points INT DEFAULT 0 COMMENT '积分余额',
is_pilot_bound TINYINT DEFAULT 0 COMMENT '是否已绑定飞手身份',
is_merchant_bound TINYINT DEFAULT 0 COMMENT '是否已绑定商家身份',
pilot_id BIGINT COMMENT '关联飞手ID',
merchant_id BIGINT COMMENT '关联商家ID',
status TINYINT DEFAULT 1 COMMENT '账号状态:0禁用 1正常',
last_login_at DATETIME COMMENT '最后登录时间',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted_at DATETIME DEFAULT NULL COMMENT '软删除时间',
UNIQUE KEY uk_openid (openid),
INDEX idx_phone (phone)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
```
---
### 11.9 任务执行记录表 `task_record`
| 字段 | 类型 | 说明 | 约束 |
|------|------|------|------|
| id | BIGINT | 主键 | PK, AUTO_INCREMENT |
| task_id | BIGINT | 任务ID | NOT NULL |
| user_id | BIGINT | 关联用户ID | NOT NULL |
| pilot_id | BIGINT | 接单飞手ID | |
| merchant_id | BIGINT | 发单商家ID | |
| status | TINYINT | 状态:1待接单 2已接单 3执行中 4已完成 5已取消 | DEFAULT 1 |
| apply_time | DATETIME | 申请/接单时间 | |
| accept_time | DATETIME | 飞手接单时间 | |
| start_time | DATETIME | 实际开始时间 | |
| finish_time | DATETIME | 完成时间 | |
| cancel_time | DATETIME | 取消时间 | |
| cancel_reason | VARCHAR(200) | 取消原因 | |
| insurance_verified | TINYINT | 保险是否校验:0否 1是 | DEFAULT 0 |
| actual_reward | DECIMAL(10,2) | 实际报酬 | |
| platform_fee | DECIMAL(10,2) | 平台服务费 | |
| rating | TINYINT | 用户评分(1-5) | |
| rating_comment | VARCHAR(200) | 评价内容 | |
| created_at | DATETIME | 创建时间 | DEFAULT CURRENT_TIMESTAMP |
| updated_at | DATETIME | 更新时间 | |
| deleted_at | DATETIME | 软删除时间 | |
```sql
CREATE TABLE task_record (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
task_id BIGINT NOT NULL COMMENT '任务ID',
user_id BIGINT NOT NULL COMMENT '关联用户ID',
pilot_id BIGINT COMMENT '接单飞手ID',
merchant_id BIGINT COMMENT '发单商家ID',
status TINYINT DEFAULT 1 COMMENT '状态:1待接单 2已接单 3执行中 4已完成 5已取消',
apply_time DATETIME COMMENT '申请/接单时间',
accept_time DATETIME COMMENT '飞手接单时间',
start_time DATETIME COMMENT '实际开始时间',
finish_time DATETIME COMMENT '完成时间',
cancel_time DATETIME COMMENT '取消时间',
cancel_reason VARCHAR(200) COMMENT '取消原因',
insurance_verified TINYINT DEFAULT 0 COMMENT '保险是否校验:0否 1是',
actual_reward DECIMAL(10,2) COMMENT '实际报酬',
platform_fee DECIMAL(10,2) COMMENT '平台服务费',
rating TINYINT COMMENT '用户评分(1-5)',
rating_comment VARCHAR(200) COMMENT '评价内容',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted_at DATETIME DEFAULT NULL COMMENT '软删除时间',
UNIQUE KEY uk_task_user (task_id, user_id),
INDEX idx_user_status (user_id, status),
INDEX idx_pilot_status (pilot_id, status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务执行记录表';
```
---
### 11.10 文件表 `file`
| 字段 | 类型 | 说明 | 约束 |
|------|------|------|------|
| id | BIGINT | 主键 | PK, AUTO_INCREMENT |
| file_name | VARCHAR(200) | 原始文件名 | NOT NULL |
| file_key | VARCHAR(200) | 存储路径/OSS Key | NOT NULL |
| file_suffix | VARCHAR(10) | 文件后缀 | |
| file_url | VARCHAR(500) | 访问URL | |
| file_size | BIGINT | 文件大小(字节) | |
| file_type | VARCHAR(20) | 类型:营业执照/图片/飞手执照/其他 | |
| uploader_id | BIGINT | 上传用户ID | |
| status | TINYINT | 状态:0禁用 1正常 | DEFAULT 1 |
| created_at | DATETIME | 上传时间 | DEFAULT CURRENT_TIMESTAMP |
| deleted_at | DATETIME | 软删除时间 | |
```sql
CREATE TABLE `file` (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
file_name VARCHAR(200) NOT NULL COMMENT '原始文件名',
file_key VARCHAR(200) NOT NULL COMMENT '存储路径/OSS Key',
file_suffix VARCHAR(10) COMMENT '文件后缀',
file_url VARCHAR(500) COMMENT '访问URL',
file_size BIGINT COMMENT '文件大小(字节)',
file_type VARCHAR(20) COMMENT '类型:营业执照/图片/飞手执照/其他',
uploader_id BIGINT COMMENT '上传用户ID',
status TINYINT DEFAULT 1 COMMENT '状态:0禁用 1正常',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间',
deleted_at DATETIME DEFAULT NULL COMMENT '软删除时间',
INDEX idx_type (file_type),
INDEX idx_uploader (uploader_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文件表';
```
---
### 11.11 课程预约表 `course_appointment`
| 字段 | 类型 | 说明 | 约束 |
|------|------|------|------|
| id | BIGINT | 主键 | PK, AUTO_INCREMENT |
| user_id | BIGINT | 用户ID | NOT NULL |
| course_id | BIGINT | 课程ID | NOT NULL |
| merchant_id | BIGINT | 商家ID | |
| appointment_date | DATETIME | 预约时间 | NOT NULL |
| person_count | INT | 预约人数 | DEFAULT 1 |
| contact_name | VARCHAR(50) | 联系人姓名 | |
| contact_phone | VARCHAR(20) | 联系人电话 | |
| remark | VARCHAR(200) | 备注 | |
| status | TINYINT | 状态:1已预约 2已确认 3已完成 4已取消 | DEFAULT 1 |
| confirm_time | DATETIME | 商家确认时间 | |
| cancel_time | DATETIME | 取消时间 | |
| cancel_reason | VARCHAR(200) | 取消原因 | |
| amount | DECIMAL(10,2) | 支付金额 | DEFAULT 0.00 |
| pay_status | TINYINT | 支付状态:0未支付 1已支付 2已退款 | DEFAULT 0 |
| created_at | DATETIME | 预约时间 | DEFAULT CURRENT_TIMESTAMP |
| updated_at | DATETIME | 更新时间 | |
| deleted_at | DATETIME | 软删除时间 | |
```sql
CREATE TABLE course_appointment (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
user_id BIGINT NOT NULL COMMENT '用户ID',
course_id BIGINT NOT NULL COMMENT '课程ID',
merchant_id BIGINT COMMENT '商家ID',
appointment_date DATETIME NOT NULL COMMENT '预约时间',
person_count INT DEFAULT 1 COMMENT '预约人数',
contact_name VARCHAR(50) COMMENT '联系人姓名',
contact_phone VARCHAR(20) COMMENT '联系人电话',
remark VARCHAR(200) COMMENT '备注',
status TINYINT DEFAULT 1 COMMENT '状态:1已预约 2已确认 3已完成 4已取消',
confirm_time DATETIME COMMENT '商家确认时间',
cancel_time DATETIME COMMENT '取消时间',
cancel_reason VARCHAR(200) COMMENT '取消原因',
amount DECIMAL(10,2) DEFAULT 0.00 COMMENT '支付金额',
pay_status TINYINT DEFAULT 0 COMMENT '支付状态:0未支付 1已支付 2已退款',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '预约时间',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted_at DATETIME DEFAULT NULL COMMENT '软删除时间',
UNIQUE KEY uk_user_course_date (user_id, course_id, appointment_date),
INDEX idx_course_status (course_id, status),
INDEX idx_merchant (merchant_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='课程预约表';
```
---
### 11.12 表间关系(ER)
```
user ─────┬── 1:1 pilot(飞手身份)
└── 1:1 merchant(商家身份)
└── 1:N task_record(我的任务)
└── 1:N course_appointment(课程预约)
pilot ────── N:1 task_record(接单飞手)
merchant ─── N:1 task_record(发单商家)
N:1 course(商家开课)
task ──────── 1:1 task_record(任务→执行记录)
course ────── 1:N course_appointment(课程→预约)
file ──────── N:1 user(上传者)
N:1 pilot(执照图片)
N:1 merchant(营业执照)
N:1 task(作业场景图)
N:1 course(课程图片)
exam_bank ── 1:N exam_question(题库→习题)
```