版本:1.1 日期:2026-04-07 状态:草稿(已经 Spec Review 修订)
项目名称:天河基地小程序 委托方:天河基地(甲方) 开发方:乙方技术团队
项目背景:天河基地是以企业服务为核心的产业园区,需要一个数字化服务平台,整合园区入驻、活动、会场预约、成果对接等服务,并结合 AI 智能能力提升服务效率。
核心目标:
交付时间:合同签订后 25 个工作日内提交完整功能初版用于内部测试
| 层级 | 技术选型 |
|---|---|
| 前端 | 微信原生小程序(WXML / WXSS / JavaScript) |
| 后端 | Python(建议 FastAPI 或 Django REST Framework) |
| 数据库 | MySQL 8.0+(关系型) |
| 文件存储 | 腾讯云 COS 或微信云存储 |
| AI 能力 | 接入大模型 API(如 GPT / 文心 / 通义) |
| OCR | 腾讯云 OCR 或百度 OCR |
| 地图 | 微信内置地图 / 腾讯地图 API |
| 短信 | 腾讯云短信 / 阿里云短信 |
| 第三方集成 | 飞书开放平台 API |
| 消息推送 | 微信订阅消息 + 飞书机器人 |
优先级定义:
交付计划建议:
| 阶段 | 时间 | 目标 |
|---|---|---|
| 第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日交付验收。
| 角色 | 标识 | 说明 |
|---|---|---|
| 游客 | GUEST | 未登录用户,只能浏览公开信息 |
| 注册用户 | USER | 微信登录后的普通用户 |
| 企业用户 | ENTERPRISE | 完成企业认证的用户,可发布需求、申请入驻 |
| 社区合伙人 | PARTNER | 审核通过后,拥有部分后台查看权限 |
| 管理员 | ADMIN | 后台全权管理,内容审核、数据统计 |
| 功能模块 | 游客 | 注册用户 | 企业用户 | 合伙人 | 管理员 |
|---|---|---|---|---|---|
| 首页浏览 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 活动报名 | ❌ | ✅ | ✅ | ✅ | ✅ |
| 活动报名信息查看 | ❌ | ❌ | ❌ | ✅ | ✅ |
| 入驻申请 | ❌ | ✅ | ✅ | ✅ | ✅ |
| 发布需求(找人才/资金) | ❌ | ❌ | ✅ | ✅ | ✅ |
| 提交其他需求 | ❌ | ✅ | ✅ | ✅ | ✅ |
| 问题反馈 | ❌ | ✅ | ✅ | ✅ | ✅ |
| 会场预约 | ❌ | ✅ | ✅ | ✅ | ✅ |
| 收藏/关注内容 | ❌ | ✅ | ✅ | ✅ | ✅ |
| 内容审核 | ❌ | ❌ | ❌ | ❌ | ✅ |
| 用户管理 | ❌ | ❌ | ❌ | ❌ | ✅ |
| 数据统计后台 | ❌ | ❌ | ❌ | ❌ | ✅ |
| 评分管理 | ❌ | ❌ | ❌ | ❌ | ✅ |
用户打开小程序
├── 未登录 → 展示公开内容(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 | 创建时间 |
| 方法 | 路径 | 说明 | 优先级 |
|---|---|---|---|
| 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 |
入驻申请流程:
企业用户填写多步骤申请表单
→ 上传营业执照等材料(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 | 更新时间 |
| 方法 | 路径 | 说明 | 优先级 |
|---|---|---|---|
| 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天自动提醒
会场预约流程:
用户浏览会场列表(按时间/容量/设施筛选)
→ 查看会场详情(图片/规格/租金)
→ 选择预约类型
├── 共享会议室 → 直接选时间段预约
└── 大型会场 → 填写申请资料 + 上传文件
→ 提交预约
→ 管理员审批(大型会场)或直接确认(共享会议室)
→ 预约成功 → 推送确认通知 + 门禁密码
→ 使用后自动统计会场使用率
活动表(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 | 更新时间 |
| 方法 | 路径 | 说明 | 优先级 |
|---|---|---|---|
| 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 |
| 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 | 调用时间 |
| 方法 | 路径 | 说明 | 优先级 |
|---|---|---|---|
| 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 |
审批流程集成:
入驻申请提交
→ 后端调用飞书审批 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 | 最后更新时间 |
| 识别场景 | 文件类型 | 提取字段 |
|---|---|---|
| 营业执照 | 图片/PDF | 企业名称、统一社会信用代码、法人姓名、注册地址 |
| 项目计划书 | PDF/Word | 项目名称、团队规模(辅助填写) |
短信服务用于手机号验证码绑定,作为微信授权的补充渠道。
| 使用场景 | 说明 |
|---|---|
| 手机号绑定验证码 | 用户绑定手机号时发送 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天提醒 | 微信订阅消息 | 报名人 |
| 会场预约审批结果 | 微信订阅消息 | 预约人 |
| 会场门禁密码 | 微信订阅消息 | 预约人 |
| 反馈工单状态变更 | 微信订阅消息 | 提交人 |
| 需求审核结果 | 微信订阅消息 | 发布企业 |
| 手机号绑定验证码 | 短信 | 绑定用户 |
| 方法 | 路径 | 说明 | 优先级 |
|---|---|---|---|
| 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 |
用户表(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 | 更新时间 |
| 方法 | 路径 | 说明 | 优先级 |
|---|---|---|---|
| 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 |
基地信息表(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 | 最后更新时间 |
| 方法 | 路径 | 说明 | 优先级 |
|---|---|---|---|
| GET | /api/v1/base-info |
获取基地介绍 | P0 |
| PUT | /api/v1/admin/base-info |
后台更新基地介绍 | P0 |
用户点击微信授权登录
→ 小程序调用 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 过期 → 要求用户重新登录
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 请求体:
{ "refresh_token": "<refresh_token_value>" }
返回新的 access_token(不更新 refresh_token)。
| 方法 | 路径 | 说明 | 优先级 |
|---|---|---|---|
| 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 |
# 后端统一鉴权中间件
# 装饰器 @require_role(roles=['admin', 'enterprise'])
# → 解析 JWT → 校验 role → 通过/拒绝(403)
| 消息模板 | 触发事件 | 关键字段 |
|---|---|---|
| 审批结果通知 | 入驻申请/会场预约审批完成 | 申请类型、结果、时间、备注 |
| 活动报名成功 | 用户报名后 | 活动名称、时间、地点 |
| 活动提醒 | 活动开始前3天定时任务触发 | 活动名称、开始时间、地点 |
| 工单状态变更 | 反馈工单处理进度更新 | 工单编号、状态、处理说明 |
| 门禁密码通知 | 会场预约通过后 | 会场名称、使用时间、门禁密码 |
定时任务设计(APScheduler / Celery):
| 任务 | 触发方式 | 频率 |
|---|---|---|
| 活动开始前3天提醒 | Cron 每日上午9点 | 每天 |
| AI 数据洞察报告生成 | Cron 每周一 | 每周 |
| 会场使用率统计 | Cron 每日凌晨 | 每天 |
前端直传腾讯云 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 | 上传时间 |
| 方法 | 路径 | 说明 | 优先级 |
|---|---|---|---|
| POST | /api/v1/upload/presign |
获取 COS 预签名上传 URL | P0 |
业务逻辑层
→ AI 服务层(统一封装)
├── 调用大模型 API(GPT / 文心 / 通义,可配置切换)
├── 超时控制(5秒 timeout,在 8秒端到端 SLA 预算内)
├── 失败重试(最多2次)
└── 降级处理(返回空结果,前端展示默认态)
时间预算说明:AI 接口端到端 SLA 为 ≤ 8s(Section 5.1)。其中大模型调用 timeout 设为 5s,加上重试和降级逻辑,总时间仍在 8s 以内。
| 功能 | Prompt 策略 |
|---|---|
| 生成需求标题/描述 | System: 你是企业服务助手;User: 基于以下关键词生成{type}需求的标题和描述:{keywords} |
| 工单自动分类 | System: 对问题反馈进行分类,输出 JSON;User: {feedback_content} |
| 场地推荐 | System: 根据企业特��推荐合适场地;User: 企业规模{scale},行业{industry},预算{budget} |
| 数据分析报告 | System: 你是数据分析师;User: 基于以下运营数据生成洞察报告:{stats_data} |
所有分页列表接口��一使用以下参数和响应格式:
请求查询参数:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| page | INT | 1 | 页码(从1开始) |
| page_size | INT | 20 | 每页条数(最大50) |
标准响应格式:
{
"total": 100,
"page": 1,
"page_size": 20,
"items": [...]
}
筛选参数各接口独立定义(如 status、type、start_date 等),在各模块 API 清单中标注。
| 指标 | 要求 |
|---|---|
| 普通接口响应时间 | ≤ 500ms(P95) |
| 列表接口响应时间 | ≤ 1s(P95) |
| AI 接口响应时间 | ≤ 8s(含超时降级) |
| OCR 接口响应时间 | ≤ 3s |
| 并发用户支持 | 初期支持 200 并发 |
| 小程序首屏加载 | ≤ 2s(4G 网络) |
| 类别 | 要求 |
|---|---|
| 接口鉴权 | 所有非公开接口必须携带有效 JWT |
| 权限校验 | 后端强制校验 role,不依赖前端隐藏 |
| 敏感数据 | 飞书 Secret、数据库密码等通过环境变量注入,不写入代码 |
| 文件安全 | 上传文件类型白名单校验,限制文件大小 |
| SQL 注入 | 使用 ORM(SQLAlchemy)参数化查询,禁止拼接 SQL |
| 手机号 | 数据库中加密存储,仅展示时脱敏(138****8888) |
| HTTPS | 所有接口强制 HTTPS |
| 频率限制 | AI 接口每用户每分钟最多10次 |
| 类别 | 要求 |
|---|---|
| 微信基础库 | ≥ 2.20.0 |
| 微信版本 | 支持近2年主流版本 |
| 手机系统 | iOS 13+ / Android 8+ |
| 屏幕适配 | 375px 基准,支持主流机型(iPhone SE ~ Pro Max) |
| 类别 | 要求 |
|---|---|
| 数据库备份 | 每日自动备份,保留30天 |
| 文件存储 | COS 开启跨区域复制 |
| 备份恢复 | RTO ≤ 4小时,RPO ≤ 24小时 |
| 组件 | 建议方案 |
|---|---|
| 后端服务 | 腾讯云 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 |
短信验证码记录 |