Files
dealerhub/README.md
T

4.4 KiB
Raw Blame History

dealerhub · 经销商 SaaS

类似管家婆的进销存+财务+分销管理 SaaS。技术栈:Django 5.2 + DRF + adrf + Granian + PostgreSQL。

目录结构

dealerhub/
├── PLAN.md            # 总体实施计划(5 个阶段)
├── README.md          # 本文件
└── backend/           # Django 后端
    ├── manage.py
    ├── requirements.in
    ├── pytest.ini
    ├── conftest.py
    ├── config/        # 项目配置(settings/{base,dev,prod,test}.py + asgi.py)
    ├── apps/          # 业务应用
    │   ├── core/      # 多租户/多组织/审计日志
    │   └── catalog/   # 商品中心
    ├── tests/         # 集成测试
    └── .env

快速开始

1. 安装依赖(本机已有 Django 5.2.16 + DRF + adrf + Granian 2.8)

pip install -r backend/requirements.txt

2. 初始化数据库(SQLite)

cd backend
python manage.py migrate
python manage.py seed_initial_data
python manage.py createsuperuser

3. 启动 Granian(ASGI)

cd backend
sh infra/scripts/run_dev.sh
# 或直接:
DJANGO_SETTINGS_MODULE=config.settings.dev granian config.asgi:application \
    --interface asgi --host 0.0.0.0 --port 8000 --reload

4. 验证

curl http://127.0.0.1:8000/api/v1/ping/

返回示例:

{
  "ok": true,
  "service": "dealerhub",
  "ts": "2026-09-07T00:30:00+00:00",
  "versions": {
    "python": "3.12.x",
    "django": "5.2.x",
    "granian": "2.8.x"
  }
}

5. 运行测试

cd backend
pytest

6. 构建生产镜像(自包含前端)

生产镜像使用仓库根目录作为构建上下文,Docker 多阶段构建会自动编译 Vue 前端并把产物交给 Django:

# 在仓库根目录执行
DJANGO_SECRET_KEY='replace-me' POSTGRES_PASSWORD='replace-me' \\
  docker compose -f backend/infra/docker/docker-compose.yml config
DJANGO_SECRET_KEY='replace-me' POSTGRES_PASSWORD='replace-me' \\
  docker compose -f backend/infra/docker/docker-compose.yml build backend

本地演示账套:

cd backend
python manage.py seed_demo --reset
python manage.py seed_full_finance

seed_demo --reset 会重建商城、库存、销售、采购、应收和六档账龄数据;seed_full_finance 为全部启用租户初始化科目和会计期间。生产环境请通过部署密钥注入 DJANGO_SECRET_KEY 与 POSTGRES_PASSWORD,不要把凭据写进仓库。

当前阶段

AGI 迭代基线(2026-09-12):进销存、财务、商城和扩展模块已形成可运行闭环,当前本地回归为 509 passed / 4 skipped(SQLite),513 passed(PostgreSQL 5433,含 4 并发用例),前端 npm run build ✅ + npm test ✅ 11/11(见 PROGRESS_AGI_ITERATION_6.md)。

  • ✅ Django + DRF + adrf + Granian 异步链路打通
  • ✅ 多租户数据过滤、JWT 鉴权与审计日志
  • ✅ 商品、批次、单位换算、自动取价、最低售价、抹零、信用额度
  • ✅ 销售/采购开单、过账、库存 FEFO、应收应付与财务报表
  • ✅ 商城、渠道、通知预警、开放 API、打印和 AI 录单
  • ✅ Docker 多阶段构建:自动编译前端并复制到 Django 静态目录
  • ✅ 前端交易金额/单位换算回归测试与 npm test
  • ⏳ PostgreSQL 并发用例需在可用的 PG 环境执行(本地 SQLite 回归跳过 4 项)

多租户调用示例

# 1. 拿 token
TOKEN=$(curl -s -X POST http://127.0.0.1:8000/api/v1/auth/token/ \
    -H "Content-Type: application/json" \
    -d '{"username":"alice","password":"alice12345"}' | jq -r .access)

# 2. 带 X-Tenant-Id 调业务 API
curl -H "Authorization: Bearer $TOKEN" \
     -H "X-Tenant-Id: default" \
     http://127.0.0.1:8000/api/v1/catalog/products/

架构预留点

详见 PLAN.md §"关键架构决策记录"。已落地:

  • ✅ 多租户单数据库(tenant_id 列隔离)
  • ✅ 多组织预留(Org 模型 + org_path)
  • ✅ 软删除(is_deleted)
  • ✅ 扩展 JSON(ext_data)
  • ✅ 来源渠道(source_channel,预留 AI/电商对接)

待落地(阶段 3):

  • ⏳ 多币种/多税率
  • ⏳ 财务模块对接接口(LedgerAdapter)
  • ⏳ 电商平台对接(ChannelAdapter)
  • ⏳ 工作流引擎(StateMachine 服务化)
  • ⏳ 插件钩子(HookRegistry)
  • ⏳ 报表元数据
  • ⏳ AI Agent 接入点
  • ⏳ 开放 API + Webhook