소스 검색

业务设计文档

Sherlock 1 개월 전
부모
커밋
002badb5d7
1개의 변경된 파일993개의 추가작업 그리고 0개의 파일을 삭제
  1. 993 0
      2026-04-07-tianhe-miniapp-design.md

+ 993 - 0
2026-04-07-tianhe-miniapp-design.md

@@ -0,0 +1,993 @@
+# 天河基地小程序 - 软件需求文档
+
+**版本**:1.1
+**日期**:2026-04-07
+**状态**:草稿(已经 Spec Review 修订)
+
+---
+
+## 第一章 项目概述
+
+### 1.1 项目背景与目标
+
+**项目名称**:天河基地小程序
+**委托方**:天河基地(甲方)
+**开发方**:乙方技术团队
+
+**项目背景**:天河基地是以企业服务为核心的产业园区,需要一个数字化服务平台,整合园区入驻、活动、会场预约、成果对接等服务,并结合 AI 智能能力提升服务效率。
+
+**核心目标**:
+- 为企业/个人用户提供一站式园区服务入口
+- 通过飞书集成实现审批流程数字化
+- 通过 AI 能力降低信息填写门槛、提升运营洞察
+
+**交付时间**:合同签订后 **25 个工作日**内提交完整功能初版用于内部测试
+
+---
+
+### 1.2 技术架构选型
+
+| 层级 | 技术选型 |
+|------|---------|
+| 前端 | 微信原生小程序(WXML / WXSS / JavaScript)|
+| 后端 | Python(建议 FastAPI 或 Django REST Framework)|
+| 数据库 | MySQL 8.0+(关系型)|
+| 文件存储 | 腾讯云 COS 或微信云存储 |
+| AI 能力 | 接入大模型 API(如 GPT / 文心 / 通义)|
+| OCR | 腾讯云 OCR 或百度 OCR |
+| 地图 | 微信内置地图 / 腾讯地图 API |
+| 短信 | 腾讯云短信 / 阿里云短信 |
+| 第三方集成 | 飞书开放平台 API |
+| 消息推送 | 微信订阅消息 + 飞书机器人 |
+
+---
+
+### 1.3 开发周期与功能优先级
+
+**优先级定义**:
+- **P0(必须上线)**:基础功能,影响核心流程
+- **P1(应该上线)**:常规功能,提升体验
+- **P2(可延后)**:AI 增强功能,迭代优化
+
+**交付计划建议**:
+
+| 阶段 | 时间 | 目标 |
+|------|------|------|
+| 第1周 | Day 1-5 | 架构搭建、用户认证、首页、关于基地 |
+| 第2周 | Day 6-10 | 企业服务中心(入驻申请、场地展示、成果供需)+ 飞书集成启动(不可晚于 Day 6,需与客户 IT 团队联调)|
+| 第3周 | Day 11-15 | 活动与会场预约、飞书集成完成 |
+| 第4周 | Day 16-20 | 平台管理后台、消息通知、SMS 集成 |
+| 第5周 | Day 21-25 | AI 功能(P2 项目,可能延期至上线后迭代)、集成测试、联调 |
+
+> **注意**:AI 增强功能(P2)时间预算紧张,建议与甲方确认:P2 功能可在正式上线后第一个迭代版本补齐,不影响25日交付验收。
+
+---
+
+## 第二章 用户角色与权限矩阵
+
+### 2.1 角色定义
+
+| 角色 | 标识 | 说明 |
+|------|------|------|
+| 游客 | GUEST | 未登录用户,只能浏览公开信息 |
+| 注册用户 | USER | 微信登录后的普通用户 |
+| 企业用户 | ENTERPRISE | 完成企业认证的用户,可发布需求、申请入驻 |
+| 社区合伙人 | PARTNER | 审核通过后,拥有部分后台查看权限 |
+| 管理员 | ADMIN | 后台全权管理,内容审核、数据统计 |
+
+### 2.2 权限矩阵
+
+| 功能模块 | 游客 | 注册用户 | 企业用户 | 合伙人 | 管理员 |
+|---------|------|---------|---------|-------|-------|
+| 首页浏览 | ✅ | ✅ | ✅ | ✅ | ✅ |
+| 活动报名 | ❌ | ✅ | ✅ | ✅ | ✅ |
+| 活动报名信息查看 | ❌ | ❌ | ❌ | ✅ | ✅ |
+| 入驻申请 | ❌ | ✅ | ✅ | ✅ | ✅ |
+| 发布需求(找人才/资金)| ❌ | ❌ | ✅ | ✅ | ✅ |
+| 提交其他需求 | ❌ | ✅ | ✅ | ✅ | ✅ |
+| 问题反馈 | ❌ | ✅ | ✅ | ✅ | ✅ |
+| 会场预约 | ❌ | ✅ | ✅ | ✅ | ✅ |
+| 收藏/关注内容 | ❌ | ✅ | ✅ | ✅ | ✅ |
+| 内容审核 | ❌ | ❌ | ❌ | ❌ | ✅ |
+| 用户管理 | ❌ | ❌ | ❌ | ❌ | ✅ |
+| 数据统计后台 | ❌ | ❌ | ❌ | ❌ | ✅ |
+| 评分管理 | ❌ | ❌ | ❌ | ❌ | ✅ |
+
+---
+
+## 第三章 功能模块需求
+
+### 3.1 平台首页
+
+#### 用户故事
+- 作为**游客**,我希望打开小程序就能看到基地动态、活动公告、空间介绍,了解园区
+- 作为**注册用户**,我希望首页能展示与我相关的推荐内容
+- 作为**企业用户**,我希望快速入口能直达入驻申请、需求发布等核心功能
+
+#### 业务流程
+```
+用户打开小程序
+  ├── 未登录 → 展示公开内容(Banner/活动/空间)
+  └── 已登录 → 展示个性化内容 + 快捷入口
+        ├── Banner 轮播(后台配置)
+        ├── 活动公告栏(近2周活动)
+        ├── 空间展示(办公/商业/会场)
+        ├── 科技成果对接入口
+        ├── 企业需求发布入口
+        ├── 技术经理人平台入口
+        └── 申请成为社区合伙人入口
+```
+
+#### 数据模型与字段
+
+**Banner 表(`banner`)**
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | INT PK | 主键 |
+| title | VARCHAR(100) | 标题 |
+| image_url | VARCHAR(255) | 图片链接 |
+| link_type | ENUM('page','url','none') | 跳转类型 |
+| link_target | VARCHAR(255) | 跳转目标路径或 URL |
+| sort_order | INT | 排序权重 |
+| is_active | BOOLEAN | 是否启用 |
+| created_at | DATETIME | 创建时间 |
+
+#### API 接口清单
+
+| 方法 | 路径 | 说明 | 优先级 |
+|------|------|------|-------|
+| GET | `/api/v1/banners` | 获取首页 Banner 列表 | P0 |
+| GET | `/api/v1/home/activities` | 获取近2周活动(最多10条)| P0 |
+| GET | `/api/v1/home/spaces/summary` | 获取空间展示摘要 | P0 |
+| GET | `/api/v1/home/achievements` | 获取科技成果展示列表 | P0 |
+| POST | `/api/v1/partner/apply` | 提交社区合伙人申请 | P1 |
+| GET | `/api/v1/admin/partner-applications` | 后台查看合伙人申请列表 | P1 |
+| PUT | `/api/v1/admin/partner-applications/{id}/review` | 审核合伙人申请 | P1 |
+| GET | `/api/v1/admin/activity-registrations` | 合伙人/管理员查看活动报名信息 | P1 |
+
+---
+
+### 3.2 企业服务中心
+
+#### 用户故事
+- 作为**企业用户**,我希望在线提交入驻申请,并实时追踪审批进度
+- 作为**企业用户**,我希望发布招聘、融资等需求,让其他用户看到
+- 作为**企业用户**,我希望对场地/设施问题进行反馈并跟踪处理进度
+- 作为**管理员**,我希望在飞书内完成审批,结果自动同步到小程序
+
+#### 业务流程
+
+**入驻申请流程:**
+```
+企业用户填写多步骤申请表单
+  → 上传营业执照等材料(OCR 自动识别填充)
+  → 提交申请
+  → 飞书审批流程触发(通知审批人)
+  → 审批进度实时同步到小程序
+  → 审批通过 → 企业状态升级为"入驻企业"
+  → 审批拒绝 → 通知用户并说明原因
+```
+
+**成果供需发布流程:**
+```
+企业用户填写需求(找人才/找资金/找政策/找技术)
+  → AI 辅助生成标题和描述(可选)
+  → 提交审核
+  → 管理员审核通过后公开展示
+  → 其他用户可查看并联系
+```
+
+**问题反馈流程:**
+```
+用户提交反馈(场地/设施/服务)
+  → AI 自动分类工单类型
+  → 分配给对应处理人
+  → 处理人更新进度(用户实时可见)
+  → 问题解决 → 用户满意度评价
+```
+
+#### 数据模型与字段
+
+**企业信息表(`enterprise`)**
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | INT PK | 主键 |
+| user_id | INT FK | 关联用户 |
+| name | VARCHAR(100) | 企业名称 |
+| unified_credit_code | VARCHAR(50) | 统一社会信用代码 |
+| industry | VARCHAR(50) | 所属行业 |
+| scale | ENUM('1-10','11-50','51-200','200+') | 企业规模 |
+| business_license_url | VARCHAR(255) | 营业执照图片 |
+| status | ENUM('pending','approved','rejected') | 认证状态 |
+| created_at | DATETIME | 创建时间 |
+| updated_at | DATETIME | 更新时间 |
+
+**入驻申请表(`settlement_application`)**
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | INT PK | 主键 |
+| user_id | INT FK | 提交用户(直接关联,支持快速查询"我的申请")|
+| enterprise_id | INT FK | 关联企业 |
+| project_name | VARCHAR(100) | 项目名称 |
+| project_desc | TEXT | 项目简介 |
+| space_type | ENUM('office','commercial') | 需求空间类型 |
+| space_area | DECIMAL(8,2) | 需求面积(㎡)|
+| budget | DECIMAL(10,2) | 预算(元/月)|
+| attachments | JSON | 附件 URL 列表 |
+| feishu_approval_id | VARCHAR(100) | 飞书审批实例 ID(审批触发后填写)|
+| status | ENUM('draft','submitted','reviewing','approved','rejected') | 申请状态 |
+| reject_reason | TEXT | 拒绝原因 |
+| created_at | DATETIME | 创建时间 |
+| updated_at | DATETIME | 更新时间 |
+
+**场地表(`space`)**
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | INT PK | 主键 |
+| name | VARCHAR(100) | 场地名称 |
+| type | ENUM('office','commercial') | 场地类型 |
+| images | JSON | 图片列表 |
+| floor | VARCHAR(20) | 楼层 |
+| area | DECIMAL(8,2) | 面积(㎡)|
+| price_per_month | DECIMAL(10,2) | 月租金(元)|
+| description | TEXT | 详情描述 |
+| is_available | BOOLEAN | 是否可租 |
+| sort_order | INT | 排序 |
+| created_at | DATETIME | 创建时间 |
+| updated_at | DATETIME | 更新时间 |
+
+**成果供需表(`requirement_post`)**
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | INT PK | 主键 |
+| user_id | INT FK | 发布用户(所有用户可发布"其他需求")|
+| enterprise_id | INT FK NULLABLE | 发布企业(企业用户发布人才/资金等需求时填写)|
+| type | ENUM('talent','funding','policy','technology','other') | 需求类型('other' 类型无需企业认证)|
+| title | VARCHAR(200) | 标题(可 AI 生成)|
+| description | TEXT | 详细描述(可 AI 生成)|
+| budget | DECIMAL(10,2) | 预算/金额(可选)|
+| attachments | JSON | 附件 URL 列表 |
+| status | ENUM('pending','published','rejected') | 审核状态 |
+| view_count | INT | 浏览次数 |
+| created_at | DATETIME | 创建时间 |
+| updated_at | DATETIME | 更新时间 |
+
+> **业务规则**:type 为 'talent'/'funding'/'technology' 时,`enterprise_id` 必填(需企业用户权限);type 为 'other'/'policy' 时,`enterprise_id` 可为 NULL(注册用户即可发布)。
+
+**技术成果表(`tech_achievement`)**
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | INT PK | 主键 |
+| title | VARCHAR(200) | 成果名称 |
+| institution | VARCHAR(100) | 来源高校/院所 |
+| description | TEXT | 成果描述 |
+| images | JSON | 图片列表 |
+| contact_name | VARCHAR(50) | 联系人 |
+| contact_phone | VARCHAR(20) | 联系电话 |
+| status | ENUM('pending','published','archived') | 状态(archived 表示已下架)|
+| created_at | DATETIME | 创建时间 |
+| updated_at | DATETIME | 更新时间 |
+
+**技术经理人表(`tech_manager`)**
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | INT PK | 主键 |
+| name | VARCHAR(50) | 姓名 |
+| avatar_url | VARCHAR(255) | 头像 |
+| title | VARCHAR(100) | 职称/头衔 |
+| expertise | VARCHAR(200) | 擅长领域 |
+| description | TEXT | 个人简介 |
+| contact_phone | VARCHAR(20) | 联系电话 |
+| is_active | BOOLEAN | 是否展示 |
+| sort_order | INT | 排序 |
+| created_at | DATETIME | 创建时间 |
+| updated_at | DATETIME | 更新时间 |
+
+> 技术经理人为管理员维护的静态数据,通过后台 CRUD 管理。
+
+**用户收藏表(`user_favorite`)**
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | INT PK | 主键 |
+| user_id | INT FK | 关联用户 |
+| target_type | ENUM('activity','requirement','achievement','tech_manager','policy') | 收藏内容类型 |
+| target_id | INT | 被收藏内容的 ID |
+| created_at | DATETIME | 收藏时间 |
+
+> UNIQUE 约束:`(user_id, target_type, target_id)`,防止重复收藏。
+
+**社区合伙人申请表(`partner_application`)**
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | INT PK | 主键 |
+| user_id | INT FK | 申请用户 |
+| name | VARCHAR(50) | 姓名 |
+| company | VARCHAR(100) | 单位 |
+| reason | TEXT | 申请理由 |
+| status | ENUM('pending','approved','rejected') | 审核状态 |
+| reject_reason | TEXT | 拒绝原因 |
+| created_at | DATETIME | 申请时间 |
+| updated_at | DATETIME | 更新时间 |
+
+**问题工单表(`feedback_ticket`)**
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | INT PK | 主键 |
+| user_id | INT FK | 提交用户 |
+| category | ENUM('space','facility','service','other') | 问题分类(AI 自动分类)|
+| title | VARCHAR(200) | 问题标题 |
+| content | TEXT | 问题详情 |
+| attachments | JSON | 图片附件 |
+| assignee_id | INT FK | 处理人 |
+| status | ENUM('pending','processing','resolved','closed') | 工单状态 |
+| satisfaction | TINYINT | 满意度评分(1-5)|
+| created_at | DATETIME | 创建时间 |
+| resolved_at | DATETIME | 解决时间 |
+| updated_at | DATETIME | 更新时间 |
+
+#### API 接口清单
+
+| 方法 | 路径 | 说明 | 优先级 |
+|------|------|------|-------|
+| POST | `/api/v1/settlement/apply` | 提交入驻申请 | P0 |
+| GET | `/api/v1/settlement/status` | 查询我的申请状态 | P0 |
+| GET | `/api/v1/spaces` | 获取场地列表 | P0 |
+| GET | `/api/v1/spaces/{id}` | 获取场地详情 | P0 |
+| GET | `/api/v1/achievements` | 获取科技成果列表 | P0 |
+| GET | `/api/v1/tech-managers` | 获取技术经理人列表 | P0 |
+| GET | `/api/v1/requirements` | 获取成果供需列表 | P0 |
+| POST | `/api/v1/requirements` | 发布需求(人才/资金等)| P0 |
+| GET | `/api/v1/requirements/{id}` | 需求详情 | P0 |
+| POST | `/api/v1/feedback` | 提交问题反馈 | P0 |
+| GET | `/api/v1/feedback/mine` | 查看我的反馈工单列表 | P0 |
+| GET | `/api/v1/feedback/{id}` | 查看工单详情及进度 | P0 |
+| POST | `/api/v1/feedback/{id}/rate` | 提交满意度评价 | P0 |
+| POST | `/api/v1/favorites` | 添加收藏 | P1 |
+| DELETE | `/api/v1/favorites/{target_type}/{target_id}` | 取消收藏 | P1 |
+| GET | `/api/v1/favorites` | 我的收藏列表(可按 target_type 筛选)| P1 |
+| POST | `/api/v1/ai/generate-content` | AI 辅助生成需求标题/描述 | P2 |
+| POST | `/api/v1/ocr/business-license` | 营业执照 OCR 识别 | P1 |
+| POST | `/api/v1/ai/classify-feedback` | AI 自动分类工单 | P2 |
+| GET | `/api/v1/ai/recommend-spaces` | AI 智能推荐场地(别名同 recommend-venues)| P2 |
+
+---
+
+### 3.3 活动与会场
+
+#### 用户故事
+- 作为**注册用户**,我希望浏览活动列表并在线报名,收到活动提醒
+- 作为**注册用户**,我希望查看会场详情并在线预约会议室
+- 作为**管理员**,我希望审批会场申请并自动推送门禁密码给预约人
+
+#### 业务流程
+
+**活动报名流程:**
+```
+用户浏览活动列表(支持卡片/瀑布流)
+  → 查看活动详情(图片/时间/地点定位)
+  → 选择报名方式
+      ├── 扫二维码报名
+      └── 小程序内填写信息报名
+  → 报名成功 → 微信订阅消息通知
+  → 活动开始前3天自动提醒
+```
+
+**会场预约流程:**
+```
+用户浏览会场列表(按时间/容量/设施筛选)
+  → 查看会场详情(图片/规格/租金)
+  → 选择预约类型
+      ├── 共享会议室 → 直接选时间段预约
+      └── 大型会场 → 填写申请资料 + 上传文件
+  → 提交预约
+  → 管理员审批(大型会场)或直接确认(共享会议室)
+  → 预约成功 → 推送确认通知 + 门禁密码
+  → 使用后自动统计会场使用率
+```
+
+#### 数据模型与字段
+
+**活动表(`activity`)**
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | INT PK | 主键 |
+| title | VARCHAR(200) | 活动名称 |
+| cover_image | VARCHAR(255) | 封面图 |
+| images | JSON | 活动图片列表 |
+| content | TEXT | 活动详情(富文本)|
+| start_time | DATETIME | 开始时间 |
+| end_time | DATETIME | 结束时间 |
+| location | VARCHAR(200) | 活动地点 |
+| latitude | DECIMAL(10,7) | 纬度 |
+| longitude | DECIMAL(10,7) | 经度 |
+| signup_type | ENUM('qrcode','inapp','both') | 报名方式 |
+| qrcode_url | VARCHAR(255) | 二维码图片 |
+| max_participants | INT | 最大报名人数(0为不限)|
+| current_participants | INT | 当前报名人数 |
+| status | ENUM('draft','published','cancelled','ended') | 活动状态 |
+| created_by | INT FK | 创建管理员 |
+| created_at | DATETIME | 创建时间 |
+| updated_at | DATETIME | 更新时间 |
+
+**活动报名表(`activity_registration`)**
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | INT PK | 主键 |
+| activity_id | INT FK | 关联活动 |
+| user_id | INT FK | 报名用户 |
+| name | VARCHAR(50) | 姓名 |
+| phone | VARCHAR(20) | 手机号 |
+| company | VARCHAR(100) | 单位(可选)|
+| extra_info | JSON | 自定义报名字段 |
+| status | ENUM('registered','cancelled') DEFAULT 'registered' | 报名状态 |
+| registered_at | DATETIME | 报名时间 |
+| updated_at | DATETIME | 更新时间 |
+
+> UNIQUE 约束:`(activity_id, user_id)`,防止重复报名。取消报名通过 status 字段标记,不删除记录。
+
+**会场表(`venue`)**
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | INT PK | 主键 |
+| name | VARCHAR(100) | 会场名称 |
+| type | ENUM('meeting_room','conference','hall') | 类型 |
+| images | JSON | 图片列表 |
+| capacity | INT | 容纳人数 |
+| area | DECIMAL(8,2) | 面积(㎡)|
+| floor | VARCHAR(20) | 楼层 |
+| price_per_hour | DECIMAL(8,2) | 每小时租金 |
+| facilities | JSON | 设施列表(投影/白板/空调等)|
+| is_shared | BOOLEAN | 是否共享会议室(直接预约)|
+| is_active | BOOLEAN | 是否可预约 |
+| created_at | DATETIME | 创建时间 |
+| updated_at | DATETIME | 更新时间 |
+
+**会场预约表(`venue_booking`)**
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | INT PK | 主键 |
+| venue_id | INT FK | 关联会场 |
+| user_id | INT FK | 预约用户 |
+| enterprise_id | INT FK NULLABLE | 关联企业(可选)|
+| start_time | DATETIME | 预约开始时间 |
+| end_time | DATETIME | 预约结束时间 |
+| purpose | TEXT | 使用目的 |
+| participants_count | INT | 参与人数 |
+| attachments | JSON | 申请附件(大型会场)|
+| feishu_approval_id | VARCHAR(100) NULLABLE | 飞书审批实例 ID(大型会场审批触发后填写)|
+| access_code | VARCHAR(20) | 门禁密码(审批通过后生成)|
+| status | ENUM('pending','approved','rejected','cancelled','completed') | 预约状态 |
+| reject_reason | TEXT | 拒绝原因 |
+| created_at | DATETIME | 创建时间 |
+| updated_at | DATETIME | 更新时间 |
+
+#### API 接口清单
+
+| 方法 | 路径 | 说明 | 优先级 |
+|------|------|------|-------|
+| GET | `/api/v1/activities` | 活动列表(分页+筛选)| P0 |
+| GET | `/api/v1/activities/{id}` | 活动详情 | P0 |
+| POST | `/api/v1/activities/{id}/register` | 活动报名 | P0 |
+| PUT | `/api/v1/activities/{id}/cancel-registration` | 取消报名 | P0 |
+| GET | `/api/v1/my/activity-registrations` | 我的报名记录 | P0 |
+| GET | `/api/v1/venues` | 会场列表(支持筛选)| P0 |
+| GET | `/api/v1/venues/{id}` | 会场详情 | P0 |
+| GET | `/api/v1/venues/{id}/availability` | 查询会场可用时间段 | P0 |
+| POST | `/api/v1/venues/{id}/book` | 提交会场预约 | P0 |
+| GET | `/api/v1/my/venue-bookings` | 我的预约记录 | P0 |
+| GET | `/api/v1/ai/recommend-activities` | AI 推荐活动 | P2 |
+
+---
+
+### 3.4 AI 智能助手
+
+#### 用户故事
+- 作为**用户**,我希望发布需求时 AI 能根据关键词自动生成标题和描述
+- 作为**用户**,我希望活动开始前3天收到自动提醒
+- 作为**管理员**,我希望 AI 自动分类反馈工单,减少人工分拣
+
+#### AI 能力清单与调用策略
+
+| AI 功能 | 触发时机 | 调用方式 | 降级方案 | 优先级 |
+|---------|---------|---------|---------|-------|
+| 智能表单填写 | OCR 识别营业执照后 | 同步调用 | 用户手动填写 | P1 |
+| 需求内容生成 | 用户输入关键词时 | 异步调用 | 用户自行编写 | P2 |
+| 智能场地推荐 | 用户进入找场地页面 | 异步调用 | 展示全部列表 | P2 |
+| 工单自动分类 | 用户提交反馈后 | 异步调用 | 默认分类"其他" | P2 |
+| 活动智能推荐 | 用户进入活动列表 | 异步调用 | 按时间排序 | P2 |
+| AI 数据分析报告 | 管理员触发/定时任务 | 异步调用 | 展示原始数据 | P2 |
+| 满意度分析 | 评价数据积累后 | 定时批处理 | 跳过 | P2 |
+
+#### 数据模型与字段
+
+**AI 调用日志表(`ai_call_log`)**
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | INT PK | 主键 |
+| user_id | INT FK | 调用用户 |
+| feature | VARCHAR(50) | 功能标识 |
+| input | TEXT | 输入内容 |
+| output | TEXT | AI 输出内容 |
+| tokens_used | INT | Token 消耗 |
+| latency_ms | INT | 响应时长(ms)|
+| status | ENUM('success','failed','fallback') | 调用状态 |
+| created_at | DATETIME | 调用时间 |
+
+#### API 接口清单
+
+| 方法 | 路径 | 说明 | 优先级 |
+|------|------|------|-------|
+| POST | `/api/v1/ai/generate-content` | AI 生成需求标题/描述 | P2 |
+| POST | `/api/v1/ai/classify-feedback` | AI 分类工单 | P2 |
+| POST | `/api/v1/ai/recommend-venues` | 智能推荐场地(统一入口)| P2 |
+| GET | `/api/v1/ai/recommend-activities` | 推荐活动列表 | P2 |
+| POST | `/api/v1/ai/analysis-report` | 生成数据分析报告 | P2 |
+
+---
+
+### 3.5 系统集成
+
+#### 3.5.1 飞书集成
+
+**审批流程集成**:
+
+```
+入驻申请提交
+  → 后端调用飞书审批 API 创建审批实例
+  → 飞书推送审批任务给审批人
+  → 审批人在飞书完成审批
+  → 飞书回调 Webhook 通知后端
+  → 后端更新申请状态
+  → 微信订阅消息通知申请人结果
+```
+
+**飞书集成配置(环境变量 + 运营配置表)**
+
+> **安全说明**:飞书 `app_id` 和 `app_secret` 通过环境变量注入(`FEISHU_APP_ID` / `FEISHU_APP_SECRET`),不存入数据库,与 Section 5.2 安全要求保持一致。
+
+数据库仅存储非敏感运营配置:
+
+**飞书运营配置表(`feishu_config`)**
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | INT PK | 主键(单行)|
+| approval_code | VARCHAR(100) | 审批定义 Code |
+| webhook_token | VARCHAR(100) | 回调验证 Token |
+| is_active | BOOLEAN | 是否启用飞书集成 |
+| updated_at | DATETIME | 最后更新时间 |
+
+#### 3.5.2 OCR 识别
+
+| 识别场景 | 文件类型 | 提取字段 |
+|---------|---------|---------|
+| 营业执照 | 图片/PDF | 企业名称、统一社会信用代码、法人姓名、注册地址 |
+| 项目计划书 | PDF/Word | 项目名称、团队规模(辅助填写)|
+
+#### 3.5.3 短信服务
+
+短信服务用于手机号验证码绑定,作为微信授权的补充渠道。
+
+| 使用场景 | 说明 |
+|---------|------|
+| 手机号绑定验证码 | 用户绑定手机号时发送 6 位验证码,有效期 5 分钟 |
+| 关键审批结果备用通知 | 当用户未订阅微信模板消息时,可通过短信通知审批结果(可选)|
+
+**验证码记录表(`sms_verification`)**
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | INT PK | 主键 |
+| phone | VARCHAR(20) | 手机号 |
+| code | VARCHAR(10) | 验证码 |
+| purpose | VARCHAR(50) | 用途(当前值:bind_phone;预留扩展)|
+| is_used | BOOLEAN | 是否已使用 |
+| expired_at | DATETIME | 过期时间 |
+| created_at | DATETIME | 创建时间 |
+
+#### 3.5.4 消息通知策略
+
+| 通知场景 | 通知方式 | 接收方 |
+|---------|---------|-------|
+| 入驻申请审批结果 | 微信订阅消息 | 申请人 |
+| 新入驻申请待审批 | 飞书消息 | 管理员 |
+| 活动报名成功 | 微信订阅消息 | 报名人 |
+| 活动开始前3天提醒 | 微信订阅消息 | 报名人 |
+| 会场预约审批结果 | 微信订阅消息 | 预约人 |
+| 会场门禁密码 | 微信订阅消息 | 预约人 |
+| 反馈工单状态变更 | 微信订阅消息 | 提交人 |
+| 需求审核结果 | 微信订阅消息 | 发布企业 |
+| 手机号绑定验证码 | 短信 | 绑定用户 |
+
+#### API 接口清单
+
+| 方法 | 路径 | 说明 | 优先级 |
+|------|------|------|-------|
+| POST | `/api/v1/feishu/callback` | 飞书审批回调 Webhook | P1 |
+| POST | `/api/v1/ocr/business-license` | 营业执照 OCR | P1 |
+| POST | `/api/v1/sms/send` | 发送手机号验证码 | P1 |
+| POST | `/api/v1/notify/send` | 内部触发通知(系统调用)| P1 |
+
+---
+
+### 3.6 平台管理后台
+
+#### 用户故事
+- 作为**管理员**,我希望管理所有用户、审核内容、配置 Banner
+- 作为**管理员**,我希望看到运营数据看板并生成报告
+
+#### 数据模型与字段
+
+**用户表(`user`)**
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | INT PK | 主键 |
+| openid | VARCHAR(100) UNIQUE | 微信 OpenID(应用维度唯一标识)|
+| union_id | VARCHAR(100) NULLABLE | 微信 UnionID(跨应用唯一标识,有开放平台时填写)|
+| nickname | VARCHAR(50) | 微信昵称 |
+| avatar_url | VARCHAR(255) | 头像 |
+| phone | VARCHAR(20) | 手机号(加密存储)|
+| role | ENUM('user','enterprise','partner','admin') | 角色 |
+| is_active | BOOLEAN | 是否启用 |
+| created_at | DATETIME | 注册时间 |
+| last_login_at | DATETIME | 最后登录时间 |
+
+**评分配置表(`score_config`)**
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | INT PK | 主键 |
+| category | ENUM('settlement','development') | 评分类别(入驻/发展)|
+| dimension | VARCHAR(100) | 评分维度名称 |
+| weight | DECIMAL(5,2) | 权重(%)|
+| description | TEXT | 维度说明 |
+
+**项目评分表(`enterprise_score`)**
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | INT PK | 主键 |
+| enterprise_id | INT FK | 关联企业 |
+| config_id | INT FK | 评分维度 |
+| score | DECIMAL(5,2) | 得分 |
+| remark | TEXT | 备注 |
+| scored_by | INT FK | 评分管理员 |
+| scored_at | DATETIME | 评分时间 |
+| updated_at | DATETIME | 更新时间 |
+
+#### API 接口清单(后台)
+
+| 方法 | 路径 | 说明 | 优先级 |
+|------|------|------|-------|
+| GET | `/api/v1/admin/users` | 用户列表 | P0 |
+| PUT | `/api/v1/admin/users/{id}/role` | 修改用户角色 | P0 |
+| GET | `/api/v1/admin/applications` | 入驻申请列表 | P0 |
+| PUT | `/api/v1/admin/applications/{id}/review` | 审核入驻申请 | P0 |
+| GET | `/api/v1/admin/requirements` | 需求列表审核 | P0 |
+| PUT | `/api/v1/admin/requirements/{id}/review` | 审核需求发布 | P0 |
+| GET | `/api/v1/admin/feedback` | 工单列表 | P0 |
+| PUT | `/api/v1/admin/feedback/{id}/assign` | 分配工单 | P0 |
+| PUT | `/api/v1/admin/feedback/{id}/resolve` | 标记工单解决 | P0 |
+| GET | `/api/v1/admin/bookings` | 会场预约列表 | P0 |
+| PUT | `/api/v1/admin/bookings/{id}/review` | 审批会场预约 | P0 |
+| POST | `/api/v1/admin/banners` | 新增 Banner | P0 |
+| GET | `/api/v1/admin/banners` | 后台 Banner 列表(含未启用)| P0 |
+| PUT | `/api/v1/admin/banners/{id}` | 编辑 Banner | P0 |
+| DELETE | `/api/v1/admin/banners/{id}` | 删除 Banner | P0 |
+| POST | `/api/v1/admin/activities` | 新增活动 | P0 |
+| PUT | `/api/v1/admin/activities/{id}` | 编辑活动 | P0 |
+| GET | `/api/v1/admin/stats/overview` | 运营数据概览 | P1 |
+| GET | `/api/v1/admin/stats/venues` | 会场使用统计 | P1 |
+| GET | `/api/v1/admin/scores` | 企业评分列表 | P1 |
+| POST | `/api/v1/admin/scores` | 录入评分 | P1 |
+| GET | `/api/v1/admin/ai/insight-report` | AI 生成洞察报告 | P2 |
+| POST | `/api/v1/admin/applications/{id}/export-materials` | 一键生成企业完整申报材料(附件下载)| P1 |
+| POST | `/api/v1/admin/tech-managers` | 新增技术经理人 | P0 |
+| PUT | `/api/v1/admin/tech-managers/{id}` | 编辑技术经理人 | P0 |
+| DELETE | `/api/v1/admin/tech-managers/{id}` | 删除技术经理人 | P0 |
+| POST | `/api/v1/admin/spaces` | 新增场地 | P0 |
+| PUT | `/api/v1/admin/spaces/{id}` | 编辑场地 | P0 |
+| DELETE | `/api/v1/admin/spaces/{id}` | 删除场地 | P0 |
+| POST | `/api/v1/admin/venues` | 新增会场 | P0 |
+| PUT | `/api/v1/admin/venues/{id}` | 编辑会场 | P0 |
+| DELETE | `/api/v1/admin/venues/{id}` | 删除会场 | P0 |
+| PUT | `/api/v1/admin/activities/{id}/status` | 变更活动状态(发布/取消/结束)| P0 |
+| POST | `/api/v1/admin/achievements` | 新增科技成果 | P0 |
+| GET | `/api/v1/admin/achievements` | 后台科技成果列表(含待审核)| P0 |
+| PUT | `/api/v1/admin/achievements/{id}` | 编辑科技成果 | P0 |
+| DELETE | `/api/v1/admin/achievements/{id}` | 删除/下架科技成果 | P0 |
+
+---
+
+### 3.7 关于基地
+
+#### 数据模型
+
+**基地信息表(`base_info`)**
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | INT PK | 主键(单行配置)|
+| name | VARCHAR(100) | 基地名称 |
+| intro | TEXT | 图文介绍(富文本)|
+| images | JSON | 图片列表 |
+| contact_phone | VARCHAR(20) | 客服电话 |
+| address | VARCHAR(200) | 地址 |
+| latitude | DECIMAL(10,7) | 纬度 |
+| longitude | DECIMAL(10,7) | 经度 |
+| updated_at | DATETIME | 最后更新时间 |
+
+#### API 接口清单
+
+| 方法 | 路径 | 说明 | 优先级 |
+|------|------|------|-------|
+| GET | `/api/v1/base-info` | 获取基地介绍 | P0 |
+| PUT | `/api/v1/admin/base-info` | 后台更新基地介绍 | P0 |
+
+---
+
+## 第四章 通用能力
+
+### 4.1 认证与授权
+
+#### 登录流程
+```
+用户点击微信授权登录
+  → 小程序调用 wx.login() 获取 code
+  → 后端用 code + AppID + AppSecret 换取 openid + session_key(+ union_id 如有)
+  → 后端生成 access_token(7天)和 refresh_token(30天)返回前端
+  → 前端将两个 token 存入 wx.setStorageSync
+  → 后续请求携带 Authorization: Bearer <access_token>
+  → access_token 过期 → 前端用 refresh_token 静默换取新 access_token
+  → refresh_token 过期 → 要求用户重新登录
+```
+
+#### JWT Token 设计
+
+**access_token**(有效期7天):
+
+| 字段 | 说明 |
+|------|------|
+| sub | 用户 ID |
+| role | 用户角色 |
+| exp | 过期时间(7天)|
+| iat | 签发时间 |
+
+> 注意:`openid` 不写入 JWT payload(openid 是敏感的稳定标识符,JWT payload 仅 base64 编码非加密;后端通过 `sub` 查 user 表获取 openid)。
+
+**refresh_token**(有效期30天):独立生成的不透明随机字符串,存储于后端 Redis,与 `user_id` 关联。
+
+**`POST /api/v1/auth/refresh` 请求体**:
+```json
+{ "refresh_token": "<refresh_token_value>" }
+```
+返回新的 `access_token`(不更新 refresh_token)。
+
+#### API 接口清单
+
+| 方法 | 路径 | 说明 | 优先级 |
+|------|------|------|-------|
+| POST | `/api/v1/auth/wx-login` | 微信登录,返回 JWT | P0 |
+| POST | `/api/v1/auth/refresh` | 刷新 Token | P0 |
+| GET | `/api/v1/auth/profile` | 获取当前用户信息 | P0 |
+| PUT | `/api/v1/auth/profile` | 更新个人/企业信息 | P0 |
+| POST | `/api/v1/auth/phone` | 绑定手机号(微信授权)| P0 |
+
+#### 权限中间件设计
+
+```python
+# 后端统一鉴权中间件
+# 装饰器 @require_role(roles=['admin', 'enterprise'])
+# → 解析 JWT → 校验 role → 通过/拒绝(403)
+```
+
+---
+
+### 4.2 消息通知
+
+#### 微信订阅消息模板
+
+| 消息模板 | 触发事件 | 关键字段 |
+|---------|---------|---------|
+| 审批结果通知 | 入驻申请/会场预约审批完成 | 申请类型、结果、时间、备注 |
+| 活动报名成功 | 用户报名后 | 活动名称、时间、地点 |
+| 活动提醒 | 活动开始前3天定时任务触发 | 活动名称、开始时间、地点 |
+| 工单状态变更 | 反馈工单处理进度更新 | 工单编号、状态、处理说明 |
+| 门禁密码通知 | 会场预约通过后 | 会场名称、使用时间、门禁密码 |
+
+**定时任务设计(APScheduler / Celery)**:
+
+| 任务 | 触发方式 | 频率 |
+|------|---------|------|
+| 活动开始前3天提醒 | Cron 每日上午9点 | 每天 |
+| AI 数据洞察报告生成 | Cron 每周一 | 每周 |
+| 会场使用率统计 | Cron 每日凌晨 | 每天 |
+
+---
+
+### 4.3 文件上传
+
+#### 上传策略
+
+```
+前端直传腾讯云 COS:
+  → 前端请求后端获取预签名 URL
+  → 前端直接上传文件到 COS
+  → 上传成功后将文件 URL 保存到业务字段
+
+支持的文件类型:
+  - 图片:JPG / PNG / WEBP(最大 10MB)
+  - 文档:PDF / DOC / DOCX(最大 20MB)
+  - 压缩包:ZIP(最大 50MB)
+```
+
+#### 文件记录表(`file_record`)
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | INT PK | 主键 |
+| user_id | INT FK | 上传用户 |
+| file_name | VARCHAR(200) | 原始文件名 |
+| file_url | VARCHAR(255) | COS 存储 URL |
+| file_size | INT | 文件大小(字节)|
+| file_type | VARCHAR(50) | 文件 MIME 类型 |
+| business_type | VARCHAR(50) | 业务用途标识 |
+| created_at | DATETIME | 上传时间 |
+
+#### API 接口清单
+
+| 方法 | 路径 | 说明 | 优先级 |
+|------|------|------|-------|
+| POST | `/api/v1/upload/presign` | 获取 COS 预签名上传 URL | P0 |
+
+---
+
+### 4.4 AI 能力集成
+
+#### 集成架构
+
+```
+业务逻辑层
+  → AI 服务层(统一封装)
+      ├── 调用大模型 API(GPT / 文心 / 通义,可配置切换)
+      ├── 超时控制(5秒 timeout,在 8秒端到端 SLA 预算内)
+      ├── 失败重试(最多2次)
+      └── 降级处理(返回空结果,前端展示默认态)
+```
+
+> **时间预算说明**:AI 接口端到端 SLA 为 ≤ 8s(Section 5.1)。其中大模型调用 timeout 设为 5s,加上重试和降级逻辑,总时间仍在 8s 以内。
+
+#### Prompt 模板
+
+| 功能 | Prompt 策略 |
+|------|------------|
+| 生成需求标题/描述 | System: 你是企业服务助手;User: 基于以下关键词生成{type}需求的标题和描述:{keywords} |
+| 工单自动分类 | System: 对问题反馈进行分类,输出 JSON;User: {feedback_content} |
+| 场地推荐 | System: 根据企业特��推荐合适场地;User: 企业规模{scale},行业{industry},预算{budget} |
+| 数据分析报告 | System: 你是数据分析师;User: 基于以下运营数据生成洞察报告:{stats_data} |
+
+---
+
+### 4.5 通用列表接口规范
+
+所有分页列表接口��一使用以下参数和响应格式:
+
+**请求查询参数**:
+
+| 参数 | 类型 | 默认值 | 说明 |
+|------|------|-------|------|
+| page | INT | 1 | 页码(从1开始)|
+| page_size | INT | 20 | 每页条数(最大50)|
+
+**标准响应格式**:
+```json
+{
+  "total": 100,
+  "page": 1,
+  "page_size": 20,
+  "items": [...]
+}
+```
+
+筛选参数各接口独立定义(如 `status`、`type`、`start_date` 等),在各模块 API 清单中标注。
+
+---
+
+## 第五章 非功能需求
+
+### 5.1 性能要求
+
+| 指标 | 要求 |
+|------|------|
+| 普通接口响应时间 | ≤ 500ms(P95)|
+| 列表接口响应时间 | ≤ 1s(P95)|
+| AI 接口响应时间 | ≤ 8s(含超时降级)|
+| OCR 接口响应时间 | ≤ 3s |
+| 并发用户支持 | 初期支持 200 并发 |
+| 小程序首屏加载 | ≤ 2s(4G 网络)|
+
+### 5.2 安全要求
+
+| 类别 | 要求 |
+|------|------|
+| 接口鉴权 | 所有非公开接口必须携带有效 JWT |
+| 权限校验 | 后端强制校验 role,不依赖前端隐藏 |
+| 敏感数据 | 飞书 Secret、数据库密码等通过环境变量注入,不写入代码 |
+| 文件安全 | 上传文件类型白名单校验,限制文件大小 |
+| SQL 注入 | 使用 ORM(SQLAlchemy)参数化查询,禁止拼接 SQL |
+| 手机号 | 数据库中加密存储,仅展示时脱敏(138****8888)|
+| HTTPS | 所有接口强制 HTTPS |
+| 频率限制 | AI 接口每用户每分钟最多10次 |
+
+### 5.3 兼容性要求
+
+| 类别 | 要求 |
+|------|------|
+| 微信基础库 | ≥ 2.20.0 |
+| 微信版本 | 支持近2年主流版本 |
+| 手机系统 | iOS 13+ / Android 8+ |
+| 屏幕适配 | 375px 基准,支持主流机型(iPhone SE ~ Pro Max)|
+
+### 5.4 数据备份
+
+| 类别 | 要求 |
+|------|------|
+| 数据库备份 | 每日自动备份,保留30天 |
+| 文件存储 | COS 开启跨区域复制 |
+| 备份恢复 | RTO ≤ 4小时,RPO ≤ 24小时 |
+
+### 5.5 部署要求
+
+| 组件 | 建议方案 |
+|------|---------|
+| 后端服务 | 腾讯云 CVM / 容器(Docker + Nginx)|
+| 数据库 | 腾讯云 MySQL(RDS)|
+| 文件存储 | 腾讯云 COS |
+| 缓存 | Redis(Session / 接口缓存)|
+| 任务队列 | Celery + Redis(异步任务 / 定时任务)|
+| 日志 | 结构化日志 + 腾讯云日志服务 |
+
+---
+
+## 附录:数据库表清单
+
+| 表名 | 说明 |
+|------|------|
+| `user` | 用户信息 |
+| `enterprise` | 企业信息 |
+| `settlement_application` | 入驻申请 |
+| `space` | 场地信息 |
+| `requirement_post` | 成果供需发布 |
+| `tech_achievement` | 科技成果 |
+| `tech_manager` | 技术经理人 |
+| `feedback_ticket` | 问题工单 |
+| `activity` | 活动信息 |
+| `activity_registration` | 活动报名 |
+| `venue` | 会场信息 |
+| `venue_booking` | 会场预约 |
+| `banner` | 首页 Banner |
+| `base_info` | 基地介绍 |
+| `score_config` | 评分维度配置 |
+| `enterprise_score` | 企业评分记录 |
+| `feishu_config` | 飞书运营配置(非敏感字段)|
+| `file_record` | 文件上传记录 |
+| `ai_call_log` | AI 调用日志 |
+| `user_favorite` | 用户收藏/关注 |
+| `partner_application` | 社区合伙人申请 |
+| `sms_verification` | 短信验证码记录 |