第 01 章

快速开始与系统架构

环境要求、部署步骤、环境变量清单、分层架构与三大核心业务调用链。

1.1 环境要求

依赖版本 / 要求用途是否必需
JDK21运行时必需
Maven3.8+构建必需
MySQL8.x(utf8mb4)业务库 translation,15+ 张表必需
Redis6.x+登录 Token、翻译缓存、验证码必需
MinIO任意近期版本文档原文 / 译文对象存储使用文档翻译时必需
RocketMQ4.9+订单超时自动取消可选(APP_MQ_ENABLED=false 可关闭)
Elasticsearch—预留搜索能力可选,代码层未强依赖
通义千问 API KeyDashScopeLLM 翻译 / 客服 / 润色 / 质量评估使用 QWEN 引擎时必需
阿里云翻译 AKalimt 服务机器翻译引擎与语种检测使用 ALIBABA_CLOUD 引擎时必需
支付宝 / 微信支付商户参数—扫码支付使用支付功能时必需
未配置外部服务会怎样?

系统不会因此不可用:翻译引擎未配置或调用失败时自动降级到内置 Mock 演示引擎(返回演示译文并自动退回点数); RocketMQ 未启用时订单不会自动取消(可手动取消或管理端处理);MinIO 未配置时文档翻译链路不可用,其余功能正常。

1.2 部署步骤

  1. 初始化数据库 创建数据库 translation(utf8mb4),执行 database/translation_init_*.sql 完整初始化快照(建表 + 初始数据)。
  2. 准备中间件 启动 MySQL / Redis / MinIO(可选 RocketMQ),将 application.yml 或环境变量中的连接地址指向实际实例。
  3. 配置密钥环境变量 按 1.3 节清单配置通义千问、阿里云翻译、支付渠道等密钥(生产环境务必注入 JWT_SECRET)。
  4. 构建并启动 见下方命令,应用监听 8090 端口。
  5. 验证 访问 http://localhost:8090/ 进入首页;GET /actuator/health 应返回 UP;GET /api/translation/health 返回服务版本。
# 开发模式启动
mvn clean spring-boot:run

# 或打包运行
mvn clean package -DskipTests
java -jar target/ai-translation-assistant-1.0.0.jar

1.3 环境变量清单

变量用途默认 / 占位
QWEN_WEATHER_API_KEY通义千问 DashScope API Keyyour_qwen_api_key_here
ALIYUN_ACCESS_KEY_ID阿里云翻译 AccessKey IDyour-access-key-id
ALIYUN_ACCESS_KEY_SECRET阿里云翻译 AccessKey Secretyour-access-key-secret
JWT_SECRETJWT 签名密钥(≥32 字节,生产必须覆盖默认值)配置文件默认值
APP_BASE_URL支付扫码回调主机地址http://localhost:8090
APP_MQ_ENABLED是否启用 RocketMQ 消费者(订单超时取消)false
PAY_ALIPAY_SANDBOX支付宝沙箱开关true
PAY_ALIPAY_APP_ID / _PRIVATE_KEY / _PUBLIC_KEY / _NOTIFY_URL支付宝应用参数与回调地址空 / 默认回调 /api/payment/notify/alipay
PAY_WECHAT_APP_ID / _MCHID / _SERIAL_NO / _API_V3_KEY / _PRIVATE_KEY_PATH / _NOTIFY_URL微信支付商户参数空

1.4 系统分层架构

代码包根为 com.terry.xu.translation,自上而下分为六层,依赖方向单向向下:

层包职责
Web 接入层application/controllerREST 控制器 + 页面控制器(PageController),参数校验、用户上下文注入
安全application/securityAuthTokenInterceptor 拦截鉴权、JwtUtil 令牌签发校验、UserContext 当前用户
异常 / 响应application/handler、facadeGlobalExceptionHandler 全局异常矩阵;ApiResponse / PagedResponse 统一契约
业务逻辑层business/service翻译编排、RAG 检索、SSE 流式推送、文档策略工厂、订单支付、术语、质量、润色
支付通道paymentPaymentChannelService 接口 + Registry + 支付宝 / 微信 / 银联三渠道实现
领域 / 持久层domain、persistent/mapper实体、枚举、DTO;MyBatis-Plus Mapper
横向组件
  • ApiResponseAdvice:自动将控制器返回值包装为统一响应结构(SSE / 二进制 / 已包装体除外)。
  • RequestLoggingFilter:请求日志过滤器,记录出入参摘要。
  • OrderCancelProducer / Listener:RocketMQ 延时消息生产与消费(订单超时取消)。
  • 线程池:document.translation.executor(文档异步翻译,4 核心 / 8 最大 / 50 队列)与 chat.sse.executor(SSE 推送,8 核心 / 20 最大 / 500 队列,前缀 chat-sse-)。

1.5 三大核心业务调用链

① 文本翻译(POST /api/translation/translate)
  1. 参数与语言对校验Bean Validation 校验请求体,校验语言对是否受支持(auto 源语言合法)。
  2. 查翻译缓存命中 @Cacheable("translationCache") 直接返回,不扣点。
  3. 扣点点数优先、会员额度补足;不足抛 InsufficientPointsException → HTTP 402。
  4. RAG 增强检索术语库与历史翻译,Embedding 向量相似度重排,注入引擎提示词上下文。
  5. 引擎路由ALIBABA_CLOUD → 阿里云 TranslateGeneral;QWEN → 通义千问;其他 → Mock。
  6. 落缓存与存档写入翻译缓存,保存 TranslationRecord 记录,返回带计费信息的响应。
② 文档翻译(POST /api/document/upload → start → progress)
  1. 上传文件校验(8 种格式 / 50MB)后存入 MinIO,落库 document_translations。
  2. 启动异步任务POST /start/{id} 按页数预扣点数,提交 document.translation.executor 线程池。
  3. 策略解析与翻译按扩展名选择解析器(PDFBox / POI / 纯文本),提取文本行批量翻译,失败重试,仍失败保留原文。
  4. 回写与上传译文回写文档字节,上传 MinIO,更新进度与状态(COMPLETED / FAILED)。
  5. 下载GET /download-url/{id} 生成 600 秒预签名下载链接。
③ 会员订单与支付
  1. 下单POST /api/membership/order 创建 PENDING 订单(49/139/299 元),订单号 MO+毫秒时间戳,30 分钟有效期。
  2. 延时取消发送 RocketMQ 延时消息(delayLevel=16 ≈ 30 分钟),超时未支付自动置 CANCELLED。
  3. 预下单POST /api/payment/prepay 走支付宝当面付 / 微信 Native 生成二维码串。
  4. 支付确认支付宝异步回调验签置 PAID;或测试流程 POST /api/payment/confirm 主动确认。
  5. 权益生效开通会员(按月数授予月度额度),赠送点数入账。