dingdanquanliucheng/开发细节/05-开发实施与部署准备清单.md

447 lines
19 KiB
Markdown
Raw Normal View History

2026-05-14 13:51:06 +08:00
# 开发实施与部署准备清单
## 1. 文档定位
本文用于补齐《开发任务清单与验收标准.md》和 `开发细节` 前 4 份文档之外的实施准备内容,重点解决以下问题:
- 开发前需要准备哪些账号、环境、配置和资料。
- 前后端、小程序、数据库、第三方服务按什么顺序开发和联调。
- 测试环境、生产环境如何部署、初始化和验收。
- 哪些事项不应写死在代码里,需要通过环境变量或后台配置管理。
本文不替代以下文档:
| 文档 | 职责 |
| --- | --- |
| `01-页面级原型字段说明.md` | 页面、字段、按钮、筛选项、弹窗和权限状态 |
| `02-API细化设计.md` | 接口 request/response、枚举、错误码和业务规则 |
| `03-数据库调整设计.md` | 表结构调整、迁移 SQL、初始化配置 |
| `04-测试用例清单.md` | 可执行测试用例和验收通过标准 |
## 2. 技术栈落地约定
| 层级 | 技术 | 约定 |
| --- | --- | --- |
| 后端 | Python + FastAPI | 提供 HTTP/JSON API统一响应、统一错误码、JWT 鉴权 |
| ORM/迁移 | SQLAlchemy + Alembic | 所有表结构变更必须走 migration |
| 数据库 | MySQL 8.0+ | 字符集 `utf8mb4`,金额使用 decimal不使用 float |
| 缓存/任务 | 一期可先用数据库 + 定时任务 | 如后续引入 Redis/Celery需另行补充部署说明 |
| WEB 前端 | Vue 3 + Vite + Element Plus + Pinia + Vue Router | 业务员端和管理后台可共用工程能力,也可拆成两个入口 |
| 小程序 | 微信原生小程序 | 管理层端、司机端按原生 WXML/WXSS/JS 开发 |
| 文件存储 | 阿里云 OSS | 图片、视频、导入文件、导出文件、附件统一存储 |
| AI/OCR | 阿里云模型/OCR | 通过后端适配层调用,禁止前端直接持有密钥 |
| 部署 | Nginx + 后端进程服务 + MySQL | 生产环境必须使用 HTTPS |
## 3. 开发前必备资料
### 3.1 业务资料
| 资料 | 用途 | 责任方 | 状态 |
| --- | --- | --- | --- |
| 角色清单 | 初始化管理员、管理层、业务员、司机权限 | 甲方确认 | 待准备 |
| 初始用户清单 | 初始化登录账号 | 甲方提供 | 待准备 |
| 产品分类初始数据 | 初始化 `product_category` | 甲方提供 | 待准备 |
| 产品资料样例 | 产品管理、订单录入联调 | 甲方提供 | 待准备 |
| 客户资料样例 | 客户导入、订单录入联调 | 甲方提供 | 待准备 |
| 工厂/供应商资料 | 下发文本、司机任务分配 | 甲方提供 | 待准备 |
| 下发工厂文本样例 | 生成和确认下发文本 | 甲方提供 | 待准备 |
| AI/OCR 样例图片 | OCR 字段识别、人工修正联调 | 甲方提供 | 待准备 |
| 报表统计口径确认 | 月/季/年、分类、提成汇总 | 甲方确认 | 待准备 |
### 3.2 微信小程序资料
| 资料 | 说明 | 状态 |
| --- | --- | --- |
| 小程序 AppID | 管理层端和司机端是否共用 AppID 需确认 | 待准备 |
| 小程序主体认证 | 发布正式版前必须完成 | 待准备 |
| 服务器域名备案 | API 域名必须备案并支持 HTTPS | 待准备 |
| request 合法域名 | 后端 API 域名加入白名单 | 待准备 |
| uploadFile 合法域名 | OSS 上传域名加入白名单 | 待准备 |
| downloadFile 合法域名 | OSS 下载或 CDN 域名加入白名单 | 待准备 |
| 体验成员名单 | 联调和验收阶段使用 | 待准备 |
### 3.3 阿里云资料
| 资料 | 说明 | 状态 |
| --- | --- | --- |
| OSS Bucket | 建议区分测试和生产 Bucket | 待准备 |
| OSS Endpoint | 与 Bucket 所在地域一致 | 待准备 |
| OSS 访问域名 | 可使用默认域名或绑定自定义域名/CDN | 待准备 |
| OSS AccessKey | 后端服务端使用,禁止前端写死 | 待准备 |
| OSS 上传大小限制 | 图片、视频、导入文件分别设置上限 | 待确认 |
| OSS 生命周期策略 | 临时文件、导出文件是否自动清理 | 待确认 |
| 阿里云 OCR/模型服务 | 开通服务、确认地域、模型能力 | 待准备 |
| AI/OCR 调用凭证 | 后端环境变量管理 | 待准备 |
| AI/OCR 费用预算 | 设置费用告警,避免失控调用 | 待确认 |
## 4. 环境规划
### 4.1 环境划分
| 环境 | 用途 | 数据要求 | 外部服务 |
| --- | --- | --- | --- |
| 本地开发环境 | 开发调试 | 可使用本地 MySQL 或开发库 | 可使用测试 OSS/OCR |
| 测试环境 | 前后端联调、验收测试 | 独立测试库,允许构造数据 | 使用测试 Bucket 和测试配置 |
| 生产环境 | 正式业务使用 | 真实业务库,必须备份 | 使用生产 Bucket、生产域名、生产凭证 |
### 4.2 推荐目录结构
```text
project/
backend/
app/
migrations/
tests/
requirements.txt
.env.example
frontend/
web-admin/
web-sales/
mini-manager/
mini-driver/
docs/
deploy/
```
说明:
- 当前文档在项目根目录维护,后续实现时可将部署脚本放入 `deploy/`
- 如果 WEB 管理后台和业务员端共用一个 Vue 工程,应通过路由和权限区分入口。
- 如果拆分两个 Vue 工程,需要共用 API SDK、枚举和响应处理逻辑避免字段重复维护。
## 5. 后端环境变量清单
后端必须提供 `.env.example`,真实 `.env` 不提交代码仓库。
| 变量名 | 示例 | 说明 |
| --- | --- | --- |
| `APP_ENV` | `dev/test/prod` | 当前环境 |
| `APP_NAME` | `order-flow` | 应用名称 |
| `API_PREFIX` | `/api` | API 前缀 |
| `SECRET_KEY` | `change-me` | JWT 签名密钥,生产必须更换 |
| `JWT_EXPIRE_MINUTES` | `1440` | token 有效期 |
| `MYSQL_HOST` | `127.0.0.1` | MySQL 地址 |
| `MYSQL_PORT` | `3306` | MySQL 端口 |
| `MYSQL_DATABASE` | `order_flow` | 数据库名 |
| `MYSQL_USER` | `order_user` | 数据库用户 |
| `MYSQL_PASSWORD` | `password` | 数据库密码 |
| `SQL_ECHO` | `false` | 是否输出 SQL |
| `ALIYUN_OSS_BUCKET` | `bucket-name` | OSS Bucket |
| `ALIYUN_OSS_ENDPOINT` | `oss-cn-hangzhou.aliyuncs.com` | OSS Endpoint |
| `ALIYUN_OSS_ACCESS_KEY_ID` | `xxx` | OSS AccessKey ID |
| `ALIYUN_OSS_ACCESS_KEY_SECRET` | `xxx` | OSS AccessKey Secret |
| `ALIYUN_OSS_PUBLIC_BASE_URL` | `https://cdn.example.com` | 文件访问基础域名 |
| `OSS_UPLOAD_MAX_IMAGE_MB` | `10` | 图片上传上限 |
| `OSS_UPLOAD_MAX_VIDEO_MB` | `200` | 视频上传上限 |
| `ALIYUN_AI_REGION` | `cn-hangzhou` | AI/OCR 地域 |
| `ALIYUN_AI_ACCESS_KEY_ID` | `xxx` | AI/OCR AccessKey ID |
| `ALIYUN_AI_ACCESS_KEY_SECRET` | `xxx` | AI/OCR AccessKey Secret |
| `ALIYUN_OCR_MODEL` | `default` | OCR/模型服务标识 |
| `CORS_ALLOW_ORIGINS` | `https://admin.example.com` | WEB 跨域白名单 |
| `LOG_LEVEL` | `INFO` | 日志级别 |
## 6. 前端和小程序配置清单
### 6.1 Vue WEB 配置
| 配置 | 示例 | 说明 |
| --- | --- | --- |
| `VITE_API_BASE_URL` | `https://api.example.com/api` | 后端 API 地址 |
| `VITE_APP_TITLE` | `订单全流程系统` | 页面标题 |
| `VITE_UPLOAD_MODE` | `oss-token` | 通过后端获取 OSS 上传凭证 |
| `VITE_ENV_NAME` | `test/prod` | 页面展示和问题定位 |
前端不得配置任何 OSS 或 AI 密钥。
### 6.2 微信小程序配置
| 配置 | 示例 | 说明 |
| --- | --- | --- |
| `appId` | 微信公众平台 AppID | `project.config.json` 使用 |
| `apiBaseUrl` | `https://api.example.com/api` | 小程序请求后端 |
| `ossUploadDomain` | `https://bucket.oss-cn-hangzhou.aliyuncs.com` | 上传域名需加白名单 |
| `envName` | `test/prod` | 环境识别 |
发布前必须确认:
- API 域名、上传域名、下载域名均已加入小程序合法域名。
- 生产域名证书有效且证书链完整。
- 小程序体验版能在真实微信环境调用 API 和上传文件。
## 7. 数据库实施准备
### 7.1 建库要求
| 项 | 要求 |
| --- | --- |
| MySQL 版本 | 8.0+ |
| 字符集 | `utf8mb4` |
| 排序规则 | 建议 `utf8mb4_0900_ai_ci` 或统一使用项目约定 |
| 时区 | 统一使用 `Asia/Shanghai` |
| 金额字段 | `decimal(18,2)` |
| 数量字段 | `decimal(18,4)` 或与数据库设计保持一致 |
### 7.2 迁移顺序
| 顺序 | 内容 | 说明 |
| --- | --- | --- |
| 1 | 导入基础表结构 | 基于 `数据库.sql` |
| 2 | 执行结构调整 migration | 对应 `03-数据库调整设计.md` |
| 3 | 初始化角色、菜单、权限 | 支撑登录和页面权限 |
| 4 | 初始化系统配置 | 如 `arrears_generate_mode=delivered` |
| 5 | 初始化产品分类 | 默认分类可后续在后台维护 |
| 6 | 初始化管理员账号 | 首次登录后台使用 |
| 7 | 导入测试数据 | 测试环境使用,生产谨慎执行 |
### 7.3 初始化数据清单
| 数据 | 必需 | 说明 |
| --- | --- | --- |
| 管理员角色 `admin` | 是 | 拥有全部系统管理权限 |
| 管理层角色 `manager` | 是 | 审批、下发确认、任务分配、报表 |
| 业务员角色 `salesman` | 是 | 录单、本人订单、提醒 |
| 司机角色 `driver` | 是 | 本人任务、接单、揽货、送达 |
| 菜单数据 | 是 | 对应 Vue 和小程序页面入口 |
| 权限编码 | 是 | 对应按钮和接口权限 |
| 初始管理员 | 是 | 首次登录使用,首次登录后应修改密码 |
| 产品分类 | 是 | 默认可初始化工业品、日用品,也允许后台新增 |
| 系统配置 | 是 | 欠款生成模式、提醒周期、OSS/AI 摘要配置 |
| 测试客户/产品/工厂 | 测试环境必需 | 用于联调和验收 |
## 8. 开发实施顺序
### 8.1 阶段一:基础工程
| 任务 | 产物 | 验证 |
| --- | --- | --- |
| 后端 FastAPI 工程初始化 | 后端服务、健康检查、统一响应 | `/health` 可访问 |
| 数据库连接和 migration | SQLAlchemy、Alembic | 可创建和升级数据库 |
| JWT 登录鉴权 | 登录、当前用户、退出 | token 有效和失效场景通过 |
| 角色菜单权限 | 用户、角色、菜单、授权接口 | `/api/auth/me` 返回菜单权限 |
| 前端工程初始化 | Vue 工程、小程序工程 | 本地可启动 |
### 8.2 阶段二:基础资料
| 任务 | 产物 | 验证 |
| --- | --- | --- |
| 客户管理 | 客户 CRUD、导入 | 去重和导入统计正确 |
| 产品分类和产品管理 | 分类 CRUD、产品 CRUD | 产品可关联分类 |
| 工厂/供应商管理 | 工厂 CRUD、模板类型 | 下发文本可引用工厂 |
| OSS 文件服务 | 上传凭证、附件记录 | 图片/视频上传并写库 |
### 8.3 阶段三:订单主流程
| 任务 | 产物 | 验证 |
| --- | --- | --- |
| 订单创建和编辑 | 订单主表、明细、费用计算 | 金额和利润计算正确 |
| 提交审核 | `draft -> pending_approve` | 重复提交被拦截 |
| 管理层审批 | `pending_approve -> approved/rejected` | 审批记录和通知正确 |
| 下发工厂文本 | 生成、复制、确认 | 确认后进入 `pending_factory` |
| 取消流程 | `cancel_pending` 和取消审批 | 拒绝后恢复原状态 |
### 8.4 阶段四:履约和物流
| 任务 | 产物 | 验证 |
| --- | --- | --- |
| 手动创建司机任务 | 管理层/管理员分配任务 | 司机端可见本人任务 |
| 司机任务流转 | 接单、揽货、送达 | 状态流转正确 |
| 揽货附件 | 图片、视频上传 | OSS 和附件记录正确 |
| 手动物流节点 | 节点录入、轨迹查询 | 按时间展示轨迹 |
| 欠款生成 | shipped/delivered 两种模式 | 生成节点符合配置 |
### 8.5 阶段五提醒、AI 和报表
| 任务 | 产物 | 验证 |
| --- | --- | --- |
| 提醒中心 | 欠款、物流超时、沉默客户 | 不重复生成无效提醒 |
| AI/OCR 识别 | 上传图片、识别、保存结果 | 原始结果和置信度留存 |
| 人工修正 | 修正结果和留痕 | 不覆盖原始识别结果 |
| 报表统计 | 月/季/年、分类、固定提成 | 与数据库手工核对一致 |
| 报表导出 | 导出文件写入 OSS | 文件内容与页面一致 |
### 8.6 阶段六:联调验收
| 任务 | 产物 | 验证 |
| --- | --- | --- |
| 接口契约联调 | 前后端字段一致 | 无临时字段依赖 |
| 小程序真机联调 | 管理层端、司机端 | 登录、审批、任务、上传可用 |
| 全流程 E2E | 从录单到送达、欠款、报表 | 核心流程跑通 |
| 权限回归 | 四类角色越权测试 | 越权被拦截 |
| 验收测试 | 执行 `04-测试用例清单.md` | 阻断和严重缺陷为 0 |
## 9. 联调检查清单
### 9.1 后端自测
- 所有接口返回统一结构:`code/message/data`。
- 所有受保护接口无 token 返回 `40002`
- 越权访问返回 `40003` 或按安全策略返回 `40004`
- 非法状态流转返回 `40005`
- 业务重复数据返回 `40006`
- 第三方服务失败返回 `40008``40009`
- 关键写操作写入 `audit_log`
### 9.2 Vue WEB 联调
- 登录后菜单和按钮由 `/api/auth/me` 控制。
- 业务员端不能看到成本、利润、回扣等无权限字段。
- 管理后台可维护用户、角色、菜单、产品分类、产品、客户、工厂、配置。
- 表格分页参数与 API 文档一致:`page_no/page_size`。
- 金额显示保留 2 位小数,数量按业务字段要求显示。
- 文件上传先取后端上传凭证,再上传 OSS再保存附件记录。
### 9.3 小程序联调
- 真机能访问 API 域名。
- 真机能上传图片和视频到 OSS。
- 管理层端能完成审批、取消审批、下发确认、任务分配。
- 司机端只显示本人任务。
- 司机端揽货必须上传照片。
- token 过期后跳转登录页。
### 9.4 第三方服务联调
- OSS 上传、下载、删除或过期策略符合预期。
- AI/OCR 成功调用时保存 `raw_result`、`confidence`、`suggested_result`。
- AI/OCR 失败时不影响订单主流程,只返回明确错误并记录日志。
- 费用告警已开启。
## 10. 部署准备
### 10.1 服务器准备
| 项 | 要求 |
| --- | --- |
| 操作系统 | Linux 服务器,建议 Ubuntu LTS 或 CentOS/Rocky |
| Python | 3.11+ |
| Node.js | 20 LTS |
| MySQL | 8.0+ |
| Nginx | 用于 HTTPS、静态资源、反向代理 |
| 磁盘 | 预留数据库备份和日志空间 |
| 时间同步 | 开启 NTP避免 token 和日志时间异常 |
### 10.2 后端部署
| 步骤 | 说明 |
| --- | --- |
| 安装依赖 | 使用虚拟环境安装 `requirements.txt` |
| 配置环境变量 | 根据第 5 节配置 `.env` |
| 执行 migration | 升级数据库到最新版本 |
| 初始化数据 | 角色、菜单、权限、配置、管理员 |
| 启动服务 | 使用 systemd/supervisor 管理进程 |
| 健康检查 | `/health` 返回正常 |
| 日志检查 | 启动日志无异常,错误日志可追踪 |
### 10.3 Vue WEB 部署
| 步骤 | 说明 |
| --- | --- |
| 安装依赖 | `npm install` 或约定包管理器 |
| 配置环境变量 | 设置 API 地址和环境名 |
| 构建 | 生成静态资源 |
| Nginx 发布 | 配置静态目录和 history 路由 fallback |
| 验证 | 登录、刷新页面、接口调用正常 |
### 10.4 小程序发布
| 步骤 | 说明 |
| --- | --- |
| 配置 AppID | 微信开发者工具项目配置 |
| 配置环境 | API 地址、上传域名 |
| 上传体验版 | 添加体验成员 |
| 真机测试 | 登录、审批、任务、上传、OCR |
| 提交审核 | 确认类目、隐私协议、接口域名 |
| 发布正式版 | 审核通过后发布 |
## 11. Nginx 配置要求
| 项 | 要求 |
| --- | --- |
| HTTPS | 生产环境必须启用 |
| API 反向代理 | `/api` 转发到 FastAPI 服务 |
| 静态资源 | Vue dist 目录由 Nginx 托管 |
| 上传大小 | `client_max_body_size` 大于业务上传上限 |
| 超时 | AI/OCR 接口可适当提高代理超时 |
| 日志 | 开启 access/error 日志 |
| 安全头 | 建议配置基础安全响应头 |
## 12. 备份和恢复
| 内容 | 要求 |
| --- | --- |
| 数据库备份 | 生产环境每日自动备份,至少保留 7-30 天 |
| OSS 文件 | 开启版本控制或生命周期策略,按成本决定 |
| 配置备份 | `.env`、Nginx 配置、部署脚本需安全备份 |
| 恢复演练 | 上线前至少完成一次测试库恢复验证 |
| 导出文件 | 可设置生命周期自动清理 |
## 13. 安全要求
- OSS、AI、JWT、数据库密码不得提交代码仓库。
- 生产环境禁止使用默认管理员密码。
- 后端必须控制字段权限,前端隐藏不能作为安全边界。
- 业务员只能访问本人订单、客户和提醒。
- 司机只能访问本人任务。
- 管理后台系统管理接口默认仅管理员可用。
- 所有关键写操作必须有审计日志。
- 文件上传必须限制类型、大小和业务归属。
- AI/OCR 输入图片必须来自已授权 OSS 文件或后端可校验的文件地址。
## 14. 上线前验收检查
| 检查项 | 标准 |
| --- | --- |
| 数据库迁移 | 测试和生产 migration 可重复执行且可回滚 |
| 初始化数据 | 角色、菜单、权限、配置、管理员存在 |
| 登录鉴权 | 四类角色登录和 token 过期处理正常 |
| 核心流程 | 录单、审批、下发、任务、揽货、送达、欠款、报表跑通 |
| 取消流程 | `cancel_pending`、取消审批通过/拒绝正确 |
| 欠款模式 | `shipped``delivered` 两种模式验证通过 |
| OSS | 图片、视频、导入、导出均可用 |
| AI/OCR | 成功、失败、人工修正均验证通过 |
| 小程序 | 体验版真机通过,合法域名配置正确 |
| 权限 | 越权访问被后端拦截 |
| 审计日志 | 关键操作可追溯 |
| 备份 | 数据库备份任务已配置并验证恢复 |
| 缺陷 | 阻断缺陷 0严重缺陷 0 |
## 15. 交付物清单
| 交付物 | 内容 | 验收方式 |
| --- | --- | --- |
| 后端源码 | FastAPI、模型、服务、接口、任务、第三方适配 | 接口和测试通过 |
| 数据库迁移 | Alembic migration、初始化数据脚本 | 新库可完整初始化 |
| Vue WEB | 业务员端、管理后台 | 浏览器可访问并完成流程 |
| 小程序源码 | 管理层端、司机端 | 微信开发者工具和真机可运行 |
| 部署配置 | Nginx、服务进程、环境变量模板 | 新环境可按文档部署 |
| 测试报告 | 用例执行结果、缺陷记录 | 验收标准满足 |
| 操作说明 | 角色登录、录单、审批、任务、配置、报表 | 业务人员可按说明操作 |
## 16. 仍需甲方确认或提供的事项
| 事项 | 影响 | 建议完成时间 |
| --- | --- | --- |
| 小程序 AppID 和合法域名 | 影响小程序真机联调和发布 | 开发联调前 |
| 阿里云 OSS Bucket 和凭证 | 影响文件上传、司机揽货、AI 图片识别 | 文件模块开发前 |
| 阿里云 OCR/模型凭证和预算 | 影响 AI/OCR 开发和联调 | AI 模块开发前 |
| 初始用户、角色权限范围 | 影响权限初始化和页面入口 | 基础工程阶段 |
| 产品分类初始数据 | 影响产品录入和报表分类 | 基础资料阶段 |
| 下发工厂文本模板样例 | 影响下发文本生成效果 | 订单主流程阶段 |
| 服务器和域名 | 影响测试环境、生产环境部署 | 联调前 |
| 视觉风格或 UI 参考 | 影响页面观感,不影响字段级功能开发 | 前端开发前 |
## 17. 开发启动判定
满足以下条件即可正式启动开发:
- 后端、Vue、小程序技术栈已确认。
- 数据库设计和 API 细化文档已确认。
- 至少有测试环境 MySQL 可用。
- 至少有测试 OSS Bucket 和上传凭证可用。
- 小程序 AppID 可在联调前提供。
- 初始角色和管理员账号规则已确认。
- 核心流程验收用例已确认。
如果 AI/OCR 凭证暂未准备好,可以先实现后端适配层和 mock provider但真实上线前必须完成阿里云真实服务联调。