yml2213 d6b0e45c7b 偿还 lewan 工程债:模块拆分、默认角色降级与短链收口
将 kuaishou-cloud 大入口拆为 prepare/rebind/probe/refresh 等模块;默认角色仅作诊断;补充兑换状态单测;短链明确只读兼容历史链接。
2026-07-10 14:01:29 +08:00
2026-05-26 16:54:30 +08:00
2026-07-08 17:29:13 +08:00

order_site

快手自动发货与履约管理系统。

前后端分离架构:接收外部订单、按规则匹配发货平台、生成统一领取链接,并提供后台做平台配置、任务追踪和人工复核。

技术栈

技术
前端 React 19、Vite 8、Ant Design 6、React Router 7、TanStack Query、TypeScript
后端 Node.js、Express 5、TypeScript、PostgreSQL、node-pg-migrate
网关 Caddy
运行 Docker Compose(开发 / 生产分离)

目录结构

apps/
  backend/                  后端 API、任务编排、平台对接、数据库迁移
    src/
      db/migrations/        SQL 迁移(001 基线 + 后续渐进增量)
    data/                   本地运行数据与平台配置(敏感,默认不提交)
  frontend/                 React 管理后台 + 用户领取页
deploy/
  caddy/                    Caddy 反向代理
  docker/                   前后端 Dockerfile
  mac-dev.sh / ubuntu-deploy.sh
docs/                       平台接口、履约链路、部署说明
docker-compose.dev.yml      本地 Docker 开发环境
docker-compose.yml          生产 / 服务器 Compose

业务边界(简图)

91 卡券进单
  → 本系统建单 / 匹配商品 / 创建履约任务
  → 返回统一 claimUrl
用户打开领取页
  → 可选:快手行业电子凭证自动核销
  → kuaishou-cloud / kuaishou-feifei / 人工 完成发货
后台
  → 订单任务、平台配置、审计、人工复核

更完整的链路说明见:docs/履约配置/多发货平台与电子凭证整体链路.md

本地开发

推荐直接用 Docker,本机不必单独装 Node / PostgreSQL。

cp .env.mac-docker.example .env
docker compose -f docker-compose.dev.yml up -d --build

常用入口:

入口 地址
前端 / 后台 / 领取页 http://localhost
后端健康检查 http://localhost/health
后端就绪检查 http://localhost/health/ready
后端 API 前缀 http://localhost/api/v1/...

常用命令:

docker compose -f docker-compose.dev.yml ps
docker compose -f docker-compose.dev.yml logs -f backend
docker compose -f docker-compose.dev.yml logs -f frontend
docker compose -f docker-compose.dev.yml down

Mac 也可使用:

bash deploy/mac-dev.sh

开发验证

以容器内执行为准:

docker compose -f docker-compose.dev.yml exec -T backend npm test
docker compose -f docker-compose.dev.yml exec -T backend npm run typecheck
docker compose -f docker-compose.dev.yml exec -T backend npm run build
docker compose -f docker-compose.dev.yml exec -T frontend npm run typecheck
docker compose -f docker-compose.dev.yml exec -T frontend npm run build

数据库迁移

采用 基线 + 渐进增量 策略,由 node-pg-migrate 管理,记录表为 schema_migrations

文件 含义
001_init.sql 空库基线,建立完整业务结构
002_xxx.sql 后续结构变更的增量 SQL

约定:

  1. 不要修改已经应用到共享/生产环境的历史迁移文件。
  2. 结构变更一律新增迁移文件,不要回写 001_init.sql
  3. 空库按序号依次执行 001 → 002 → …;已有库只执行尚未记录的增量。
  4. 后端启动时自动 up;也可手动执行。

常用命令(容器内):

# 查看本地文件与数据库对齐状态
docker compose -f docker-compose.dev.yml exec -T backend npm run db:migrate:status

# 手动执行未应用迁移
docker compose -f docker-compose.dev.yml exec -T backend npm run db:migrate

# 创建下一份增量迁移(示例)
docker compose -f docker-compose.dev.yml exec -T backend npm run db:migrate:create -- add_task_priority

宿主机直连开发库(注意主机名):

cd apps/backend
DATABASE_URL=postgres://postgres:postgres@127.0.0.1:5432/order_site npm run db:migrate:status
DATABASE_URL=postgres://postgres:postgres@127.0.0.1:5432/order_site npm run db:migrate

本地需要清空数据重建库时(会丢开发数据):

docker compose -f docker-compose.dev.yml down
docker volume rm order_site_postgres_dev_data
docker compose -f docker-compose.dev.yml up -d --build

更多说明见 docs/部署启动与数据库重建.md

环境变量

本地:

cp .env.mac-docker.example .env

生产:

cp .env.server.example .env

常用变量:

变量 说明
APP_DOMAIN / CADDY_SITE_ADDR 对外域名与 Caddy 监听地址
CLAIM_BASE_URL 领取页完整前缀,如 https://域名/#/claim
DATABASE_URL PostgreSQL 连接串(容器内主机名用 postgres
ADMIN_SESSION_SECRET 后台登录态签名密钥
ADMIN_DEFAULT_USERS_JSON 默认后台用户
KAQUAN91_USER_ID / KAQUAN91_SECRET 91 卡券开放接口凭据

运行数据

环境 路径 / Volume
本地后端配置与日志 apps/backend/data
本地 PostgreSQL Docker volume postgres_dev_data
生产后端数据 apps/backend/data(与本地路径一致)
生产 PostgreSQL Docker volume postgres_data
生产 Caddy Docker volume caddy_data

注意:apps/backend/data/*.json 可能含账号、Cookie、token 等敏感信息,默认不进仓库;只保留 *.example.json 模板。

生产部署

cp .env.server.example .env
# 编辑真实配置后:
mkdir -p apps/backend/data
sudo chown -R 1001:1001 apps/backend/data
docker compose up -d --build

Ubuntu 一键脚本:

bash deploy/ubuntu-deploy.sh

首次若无 .env,脚本会从示例生成模板并退出;填好后再执行一次即可。脚本会检查 Docker、占位配置、数据目录权限,构建启动并等待健康检查。

生产入口示例:

  • 前端与领取页:https://你的域名/
  • 健康检查:https://你的域名/health
  • APIhttps://你的域名/api/v1/...

生产 Compose 会:启动 PostgreSQL → 后端自动迁移 → 初始化默认管理员 → 同步履约目录 → Caddy 暴露前端与 API。

主要模块

路径 职责
apps/backend/src/routes 开放接口 / 领取 / 后台 API
apps/backend/src/services/order 订单入库、商品匹配、任务同步
apps/backend/src/services/fulfillment 履约路由与执行器(cloud / feifei / 人工)
apps/backend/src/services/platforms 外部平台对接
apps/backend/src/services/admin 后台鉴权、读写、配置
apps/backend/src/repositories 数据访问
apps/backend/src/db/migrations 数据库迁移
apps/frontend/src/pages/admin 管理后台页面
apps/frontend/src/pages/claim 用户领取页

提交前检查

docker compose -f docker-compose.dev.yml exec -T backend npm test
docker compose -f docker-compose.dev.yml exec -T backend npm run typecheck
docker compose -f docker-compose.dev.yml exec -T frontend npm run typecheck

确认:

  • 未提交真实账号、Cookie、token、手机号或生产配置
  • .env 未入库
  • 结构变更的 migration 与业务代码同 PR 提交
  • 领取链接相关改动已在 Docker 环境验证
S
Description
No description provided
Readme
13 MiB
Languages
TypeScript 96.3%
CSS 2%
Shell 1.5%
Dockerfile 0.1%
JavaScript 0.1%