QX Garage汽修门店数字化系统
SOFTWARE DESIGN DOCUMENT

汽修门店数字化系统 · 开发设计文档

文档编号 QX-SDD-2026-001 │ 版本 V1.0 │ 2026-11-08 │ 对应需求 QX-SRS-2026-001 V1.0

项目代号QX-Garage
交付形态Web 管理端 + 技师安卓 APK + 客户微信小程序 + 定时任务与消息服务
部署形态托管(乙方云主机)/私有化(甲方服务器),同一套镜像两种部署
首版范围标准版功能集(轻量版为其子集,连锁版加多租户与总部视角)
关联文档《需求说明书 QX-SRS-2026-001》《建设与运维服务报价单》《AI 自助修改能力方案 QX-AI-2026-001》
三条设计红线: ① 门店网络一断,前台还能开单;② 源码可交付,第三方能接手;③ 门店差异靠配置,不靠分支代码。 后面所有技术选择都以这三条为约束。

1 设计目标与原则

目标设计手段验证方式
单人可交付、可维护单体优先、模块内聚、模板库复用、无重型中间件依赖新环境 30 分钟内跑起来
断网可用前端本地库 + 出站队列 + 幂等键拔网线做 5 单,恢复后数据一致
多端一致uni-app 一套代码出小程序 / H5 / APK;业务接口统一同一工单在三端显示一致
可交付源码无闭源商业组件、无加密狗、构建脚本随源码交付甲方服务器从零构建成功
门店差异可配置字典、参数、价目表、流程开关全部落库新增一家店不改代码,仅配置
升级不打断营业蓝绿切换(托管)/停服窗口 ≤ 10 分钟(私有化)升级演练两次

2 总体架构

采用「前后端分离 + 单体服务 + 异步任务」的务实架构。单体不是妥协,而是为了单店场景下的部署简单与交付成本可控; 模块间以包边界隔离,为后续拆分预留接口。

┌─────────────────────────── 客户端 ───────────────────────────┐
│  Web 管理端(Vue3)   技师 APK(uni-app)   客户小程序(uni-app)   │
│  前台/库管/老板      报工·领料·拍照      查记录·确认·评价      │
└───────────────┬───────────────────┬──────────────────────────┘
                │ HTTPS / JSON      │ HTTPS
┌───────────────▼───────────────────▼──────────────────────────┐
│                    Nginx(TLS 终止 / 静态资源 / 限流)          │
└───────────────┬──────────────────────────────────────────────┘
┌───────────────▼──────────────────────────────────────────────┐
│  应用服务 Spring Boot 3(单体,按模块分包)                     │
│  ├ auth 认证授权      ├ cus 客户车辆     ├ biz 工单报价结算     │
│  ├ inv 库存采购       ├ fin 收款挂账     ├ mkt 提醒营销         │
│  ├ rpt 看板报表       ├ sys 系统管理     ├ job 定时任务         │
│  └ integration 微信/短信/支付/发票 适配层                       │
└──────┬───────────────┬───────────────┬───────────────────────┘
       │               │               │
┌──────▼─────┐  ┌──────▼─────┐  ┌──────▼──────┐  ┌───────────┐
│ MySQL 8    │  │ Redis      │  │ MinIO/本地  │  │ 外部通道  │
│ 业务数据    │  │ 缓存·锁·队列│  │ 图片附件    │  │ 微信/短信 │
└────────────┘  └────────────┘  └─────────────┘  └───────────┘

2.1 分层职责

层职责不做的事
接入层TLS、静态资源、压缩、限流、请求体大小限制不做业务判断
接口层(Controller)参数校验、鉴权注解、DTO 转换、统一响应包装不写业务逻辑、不直接访问 DAO
应用层(Service)用例编排、事务边界、幂等控制、领域校验不拼 SQL、不处理 HTTP
领域层(Domain)实体、值对象、状态机、计价规则、库存扣减规则不依赖框架
基础设施层MyBatis 映射、Redis、文件存储、第三方适配不含业务规则

3 技术选型

层面选型版本理由
Web 管理端Vue 3 + TypeScript + Vite + Element PlusVue 3.4+国内生态成熟,门店一体机兼容好,AI 生成质量高
移动端uni-app(Vue 3 语法)3.x一套代码出小程序 / H5 / APK,wgt 热更新成熟
后端Spring Boot 3 + JDK 173.2+私有化环境常见、招聘容易、第三方对接 SDK 齐全
持久层MyBatis-Plus3.5+SQL 可控,复杂报表好写,门店侧 DBA 能看懂
数据库MySQL 8.0(兼容 MariaDB 10.11)8.0.36私有化客户常已有;分区与窗口函数够用
缓存/队列Redis 77.2验证码、会话、分布式锁、轻量队列(Stream)
文件存储MinIO(S3 协议)或本地磁盘RELEASE.2024+可私有化,接口标准,迁移成本低
任务调度Spring Scheduler + Redis 分布式锁—单机场景无需引入 XXL-Job;多店再升级
部署Docker Compose24+一键起停,门店/小客户足够;规模上来再上 K8s
监控Spring Actuator + Prometheus + 日志轮转—轻量、可私有化、不依赖云厂商

4 模块设计

模块与需求编号、模板编号一一对应,便于排期与验收对齐。

模块包名核心职责覆盖需求模板
认证授权auth登录、令牌、RBAC、数据范围、密码策略FR-31、FR-33—
客户车辆cus客户档案、车辆档案、标签、欠款视图FR-02T05
工单biz.order接车开单、状态机、派工、追加、返修FR-01、03、07、09、13T01、T03
报价biz.quote价目、算价、版本、推送、客户确认、改价审批FR-04~06T02
结算fin.settle结算单、组合支付、折扣审批、日结月结FR-14、16、18T04
挂账fin.credit欠款台账、还款冲销、账龄FR-15T04
库存inv配件主数据、出入库、盘点、预警、批次成本FR-19~22T07
采购inv.purchase采购单、退货、供应商对账、应付FR-23T08
提醒营销mkt到期推算、提醒任务、回访、优惠券FR-24、25、27T06、T12
报表rpt看板聚合、提成计算、导出FR-29、30、32T10、T09
系统sys参数、字典、日志、版本发布、备份任务FR-33、34—
集成integration微信、支付、短信、发票、打印适配第 8 章接口—

4.1 工单状态机

CREATED ──派工──▶ ASSIGNED ──开工──▶ WORKING ──完工──▶ DONE
   │                  │                  │              │
   │                  │                  │              └─结算─▶ SETTLED ──交车──▶ CLOSED
   │                  │                  └─待料─▶ WAITING_PART ──到货──▶ WORKING
   │                  └─取消─▶ CANCELLED(需审批)
   └─客户不确认报价─▶ QUOTE_PENDING(超 24h 提醒)
禁止跳转:CREATED → DONE;SETTLED → WORKING(需返修单,另立工单并关联)

5 数据模型

5.1 表清单

表名说明关键索引
cus_customer客户uk(mobile)、idx(name)
cus_vehicle车辆uk(plate_no)、idx(customer_id)、idx(next_service_mileage)
biz_order工单主表uk(order_no)、idx(vehicle_id,created_at)、idx(status)
biz_order_item工单明细(项目/配件)idx(order_id)、idx(part_id)
biz_quote报价单(含版本)idx(order_id,version)
biz_quote_confirm客户确认记录uk(quote_id)
biz_work_log施工报工与照片idx(order_id)、idx(tech_id,work_date)
inv_part配件主数据uk(part_code)、idx(name)、idx(category)
inv_stock库存余额(按仓库/批次)uk(part_id,warehouse_id,batch_no)
inv_stock_log库存流水idx(part_id,created_at)、idx(ref_no)
inv_purchase / inv_purchase_item采购与明细idx(supplier_id,status)
fin_settle结算单uk(order_id)、idx(settle_date)
fin_payment收款流水idx(settle_id)、idx(pay_time)
fin_credit挂账台账idx(customer_id,status)、idx(due_date)
mkt_remind提醒任务idx(remind_date,status)、idx(vehicle_id)
mkt_coupon / mkt_coupon_log优惠券与核销idx(customer_id,status)
sys_user / sys_role / sys_user_role / sys_permission账号与权限uk(username)
sys_config / sys_dict参数与字典uk(config_key)、uk(dict_type,dict_code)
sys_audit_log操作日志idx(user_id,created_at)、idx(target_type,target_id)
sys_app_version客户端版本与升级包uk(platform,version_code)
sys_outbox出站消息队列(离线补偿)idx(status,next_retry_at)

5.2 核心表结构(节选)

-- 工单主表
CREATE TABLE biz_order (
  id            BIGINT PRIMARY KEY AUTO_INCREMENT,
  order_no      VARCHAR(24)  NOT NULL COMMENT 'RO+日期+序号',
  customer_id   BIGINT       NOT NULL,
  vehicle_id    BIGINT       NOT NULL,
  mileage_in    INT          NOT NULL COMMENT '进厂里程',
  fuel_level    TINYINT      NULL     COMMENT '油量 0-8',
  status        VARCHAR(20)  NOT NULL DEFAULT 'CREATED',
  advisor_id    BIGINT       NULL     COMMENT '服务顾问',
  tech_id       BIGINT       NULL     COMMENT '主修技师',
  quote_amount  DECIMAL(12,2) NOT NULL DEFAULT 0,
  settle_amount DECIMAL(12,2) NOT NULL DEFAULT 0,
  promise_at    DATETIME     NULL     COMMENT '承诺交车时间',
  closed_at     DATETIME     NULL,
  remark        VARCHAR(500) NULL,
  created_at    DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at    DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  tenant_id     BIGINT       NOT NULL DEFAULT 1,
  UNIQUE KEY uk_order_no (order_no),
  KEY idx_vehicle (vehicle_id, created_at),
  KEY idx_status (tenant_id, status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 库存流水(只增不改,余额由流水推导 + 快照校验)
CREATE TABLE inv_stock_log (
  id          BIGINT PRIMARY KEY AUTO_INCREMENT,
  part_id     BIGINT NOT NULL,
  warehouse_id BIGINT NOT NULL DEFAULT 1,
  batch_no    VARCHAR(32) NULL,
  biz_type    VARCHAR(16) NOT NULL COMMENT 'PURCHASE/ISSUE/RETURN/ADJUST/CHECK',
  qty         DECIMAL(12,3) NOT NULL COMMENT '正入负出',
  unit_cost   DECIMAL(12,4) NULL,
  ref_type    VARCHAR(16) NULL COMMENT 'ORDER/PURCHASE/CHECK',
  ref_no      VARCHAR(32) NULL,
  operator_id BIGINT NOT NULL,
  created_at  DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  KEY idx_part_time (part_id, created_at),
  KEY idx_ref (ref_type, ref_no)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

5.3 关键设计说明

  • 库存只记流水:inv_stock 只存当前余额快照,任何变动必须写 inv_stock_log,两者由事务保证一致;每日 02:30 跑一次「流水汇总 = 余额」校验,不一致即告警。
  • 金额用 DECIMAL:禁止 float;单价 4 位小数、金额 2 位小数,四舍五入在服务端统一处理。
  • 软删除:主数据用 deleted_at,业务单据不删除,只做状态流转。
  • 多租户:所有业务表带 tenant_id,MyBatis 拦截器自动注入,连锁版按门店隔离。
  • 幂等:结算、收款、领料接口必须带 Idempotency-Key,服务端落 sys_outbox 去重。

6 接口设计

6.1 通用约定

  • 风格:REST + JSON,版本前缀 /api/v1。
  • 认证:Authorization: Bearer <access_token>,有效期 2 小时,refresh_token 14 天。
  • 响应:{ "code": 0, "msg": "ok", "data": {...}, "traceId": "..." },非 0 为业务错误。
  • 分页:?page=1&size=20&sort=created_at,desc,返回 {list,total,page,size}。
  • 时间:ISO 8601 带时区(2026-11-08T10:30:00+08:00)。
  • 幂等:POST 写操作支持 Idempotency-Key,24 小时内重复请求返回首次结果。

6.2 接口清单(首版)

方法路径说明权限
POST/auth/login账号密码登录公开
POST/auth/wx-login微信扫码/小程序登录公开
POST/auth/refresh刷新令牌登录
GET/customers · /customers/{id}客户查询、详情(含车辆与欠款)前台/老板
POST/customers新建客户前台
GET/vehicles/by-plate/{plate}按车牌带出档案(开单用)前台/技师
POST/orders接车开单前台
GET/orders/{id}工单详情按数据范围
PATCH/orders/{id}/status状态流转(派工/开工/完工/待料)前台/技师
POST/orders/{id}/items增加项目或配件前台/技师
POST/orders/{id}/quotes生成报价单(新版本)前台
POST/quotes/{id}/send推送微信/短信前台
POST/quotes/{id}/confirm客户确认(小程序,无需登录态,带签名 token)客户
POST/quotes/{id}/approve-discount折扣/改价审批老板
POST/orders/{id}/worklogs报工与照片技师
POST/orders/{id}/issue-parts领料出库技师/库管
POST/orders/{id}/settle结算(含组合支付)前台
POST/settles/{id}/payments追加收款/还款前台
GET/credits挂账台账(按账龄)老板/前台
GET/parts · POST /parts配件查询与维护库管
POST/stock/in · /stock/out · /stock/check入库、出库、盘点库管
GET/stock/alerts低库存预警库管/老板
GET/reminders · POST /reminders/{id}/send到期提醒名单与发送前台
GET/dashboard/summary看板汇总(日/周/月)老板
GET/reports/settlement-daily日结单老板/前台
GET/app/version客户端版本检查与升级包公开(带签名)
POST/sync/batch离线数据批量补传登录

6.3 示例:生成报价单

POST /api/v1/orders/10231/quotes
Authorization: Bearer <token>
Idempotency-Key: 7c1f9a2e-...

{
  "items": [
    {"type":"LABOR","name":"更换机油机滤","qty":1,"unitPrice":80},
    {"type":"PART","partId":8801,"qty":4,"unitPrice":95}
  ],
  "validHours": 24,
  "remark": "建议同时更换空气滤芯"
}

200 OK
{
  "code":0,"msg":"ok",
  "data":{
    "quoteId":5521,"version":2,
    "amount":460.00,
    "shareUrl":"https://qx.example.com/q/8f3a...",
    "expireAt":"2026-11-09T10:30:00+08:00"
  },
  "traceId":"a1b2c3"
}

7 关键流程设计

7.1 开单到结算(主链路)

前台            服务端                    库存            客户
 │  POST /orders  │                        │               │
 │───────────────▶│ 校验车牌/生成单号       │               │
 │◀───────────────│ 201 {orderId,no}       │               │
 │  POST /quotes  │                        │               │
 │───────────────▶│ 算价(价目表)→落库       │               │
 │                │ 推送微信(异步)          │               │
 │                │───────────────────────────────────────▶│ 收到报价
 │                │◀───────────────────────────────────────│ 确认
 │  POST issue    │                        │               │
 │───────────────▶│ 事务:扣库存+写流水      │               │
 │                │───────────────▶│ 余额更新        │
 │  POST settle   │                        │               │
 │───────────────▶│ 事务:结算+收款+状态     │               │
 │◀───────────────│ 200 {settleId}         │               │
失败处理:库存不足 → 409 + 可替代件;微信推送失败 → 落 sys_outbox 重试 3 次后降级短信

7.2 到期提醒

  1. 每日 06:30 定时任务扫描 cus_vehicle:里程预测(上次里程 + 年均里程 × 月数)或时间阈值(上次保养 + 6 个月)。
  2. 命中生成 mkt_remind 记录,状态 PENDING,按客户去重(30 天内不重复提醒同一车)。
  3. 前台在「今日待提醒」一键发送:优先微信模板消息,未关注则短信,均失败标记 FAILED 并转人工电话。
  4. 客户回厂开单后,自动把提醒标记 CONVERTED,用于统计回厂率。

7.3 安卓客户端升级

类型触发机制回滚
资源热更新启动或每 6 小时uni-app wgt 包(仅前端资源),下载校验 md5 后静默生效,下次启动加载保留上一版本 wgt,失败自动回退
整包升级原生能力变更时下载 APK → 校验签名与 md5 → FileProvider 拉起安装服务器保留上一版 APK
强制升级接口不兼容版本号低于 minVersion 时拦截主流程,只允许升级—
GET /api/v1/app/version?platform=android&versionCode=1042
{
  "code":0,"data":{
    "latest":{"versionCode":1051,"versionName":"1.5.1","type":"WGT",
              "url":"https://.../app-1051.wgt","md5":"9f2c...","size":1834211},
    "minVersionCode":1030,
    "force":false,
    "note":"修复结算页金额显示问题"
  }
}
升级不能丢单:升级前检查本地未提交队列,非空则提示「有 2 单未同步,请先联网提交」,避免升级包覆盖本地暂存。

7.4 离线同步

  • 前端用 IndexedDB 维护 outbox 表,每笔写操作带 clientId + seq。
  • 恢复网络后按 seq 顺序调用 /sync/batch,服务端按 clientId 幂等去重。
  • 冲突判定:服务端记录的 updated_at 晚于客户端基线时返回 409 CONFLICT,前端弹窗让前台选择「以本地为准」或「以服务器为准」。
  • 库存类操作不在离线范围(必须在线),避免超卖。

8 多端构建与发布

端技术构建产物发布方式注意
Web 管理端Vue3 + Vite静态资源Nginx 托管,版本目录 + 软链切换index.html 禁缓存,资源文件名带 hash
技师 APKuni-app → AndroidAPK(含 wgt)自有分发页扫码安装;应用商店可选需软著与 APP 备案;签名密钥离线保管
客户小程序uni-app → 微信小程序小程序包微信开发者工具上传 → 提审 → 发布类目选「汽车服务」,需服务类目资质
客户 H5uni-app → H5静态资源与 Web 同域部署微信内需配置 JS 安全域名
iOS—源码按需交付源码,由甲方自行上架首版不做 iOS 原生,客户侧走小程序
鸿蒙—源码按需评估(不建议本行业采购)需 DevEco 工具链,工时约 16 人时

8.1 构建流水线

git tag v1.5.1
  ├─ 后端:mvn -Pprod package → 镜像 app:1.5.1 → 推送仓库
  ├─ Web :pnpm build → dist-1.5.1 → 上传 /var/www/releases
  ├─ 小程序:uni build:mp-weixin → CI 上传体验版 → 人工提审
  └─ APK :uni build:app → 签名 → 生成 wgt + apk → 写入 sys_app_version

9 AI 辅助开发流水线

本项目以「模板库 + AI 生成 + 编译验证」的方式交付,AI 是产能工具,不是质量保证。每一环都有硬门禁:

阶段输入AI 做什么人工门禁
1 需求落表需求确认表 + 流程录屏把口头需求转成 FR 条目与字段清单与老板逐条确认,冻结版本
2 模板选型FR 清单匹配 T01~T15,给出差异点确认复用边界,非标部分单独估时
3 代码生成模板 + 字段映射生成 CRUD、页面、接口、迁移脚本Code Review:金额、库存、权限三处必查
4 编译构建源码自动修复编译错误(最多 3 轮)构建产物可安装、可启动
5 真机验证APK + 门店网络生成测试用例与边界数据20 笔真实工单跑通
6 回归与交付验收清单对比需求条目核对覆盖甲方签字,进入质保
三条禁止: 禁止把客户真实数据投喂给外部模型;禁止跳过真机验证直接上线;禁止在未评审的情况下让 AI 修改库存与结算逻辑。 生成代码必须经过与手写代码相同的评审与测试流程。

10 部署与运维

10.1 部署拓扑

Internet
   │ 443
┌──▼─────────────────────────────────────────┐
│ 云主机 / 门店服务器(4C8G 起,100G SSD)    │
│  ├ nginx        :443  静态 + 反代           │
│  ├ app          :8080  Spring Boot          │
│  ├ mysql        :3306  仅内网               │
│  ├ redis        :6379  仅内网               │
│  ├ minio        :9000  仅内网 / 或本地磁盘  │
│  └ backup cron  每日 02:00 全量 + 异地同步  │
└────────────────────────────────────────────┘

10.2 环境

环境用途数据升级策略
dev开发自测造数随时
staging甲方验收演练脱敏样本上线前 2 天
prod门店生产真实数据停服窗口 ≤ 10 分钟,提前 3 天预约

10.3 备份与恢复

  • 数据库:每日 02:00 mysqldump --single-transaction,压缩后保留 30 天;每月 1 日全量归档保留 12 个月。
  • 附件:MinIO 桶每日增量同步到备份目录,保留 30 天。
  • 演练:每季度做一次恢复演练,记录 RTO/RPO 实测值。
  • 私有化客户:提供备份脚本与恢复手册,备份介质由甲方提供。

10.4 监控与告警

指标阈值告警方式
接口 5xx 比例> 1%(5 分钟)企业微信机器人 + 短信
接口 P95 耗时> 2s(10 分钟)企业微信机器人
磁盘使用率> 85%短信
备份任务失败短信 + 电话
Outbox 积压> 100 条或最老超 30 分钟企业微信机器人
库存流水与余额不一致> 0 条短信(P1 工单)

11 安全设计

风险措施
越权访问接口级 @PreAuthorize + 数据范围拦截器(tenant/store/本人),默认拒绝
令牌泄露access 2 小时、refresh 14 天且可吊销;异地登录提醒;退出即失效
密码爆破bcrypt(cost=10);5 次失败锁定 10 分钟;登录失败不区分账号是否存在
SQL 注入全部参数化;禁止字符串拼接 SQL;导出类接口白名单字段
XSS / CSRF前端转义 + CSP;写接口校验 Origin;Cookie 仅 SameSite=Lax
文件上传白名单扩展名 + MIME 校验 + 大小限制 + 存储路径与文件名随机化,禁止执行权限
敏感数据手机号 AES-GCM 加密存储,展示脱敏;导出需二次验证并记日志
接口重放时间戳 + nonce + 签名;幂等键 24 小时
限流Nginx 层 IP 限流;登录、短信、报价推送单独配额
审计改价、折扣、库存调整、导出、删除全量入库,日志表禁止 UPDATE/DELETE
平台合规红线: 不使用个人微信机器人、群控或任何外挂式接入;所有消息与支付走官方接口。 微信对个人号自动化明确按「外挂」处理,存在封号与不正当竞争风险(已有判赔判例)。

12 性能与容量

场景数据量目标手段
工单列表10 万条< 1.5s复合索引 (tenant_id, status, created_at);只查必要字段;默认 20 条分页
看板汇总30 万条明细< 2s每小时预聚合到 rpt_daily;当日数据实时查 + 缓存 60s
库存校验5,000 SKU< 200ms余额表直接读;扣减用 UPDATE ... WHERE qty >= ? 乐观扣减
批量导入5,000 行< 3 分钟分批 500 行 + 异步任务 + 进度轮询
图片上传单张 2MB< 3s前端压缩到 1080p、WebP;直传 MinIO 预签名 URL

容量规划:单店首年数据约 2~5 GB(含图片 20~60 GB),4C8G + 100G SSD 足够;20 店以内单机可承载,超过 20 店建议拆库或上 K8s。

13 风险与对策

风险影响概率对策
微信接口/规则变更推送、支付失效中集成层做适配器与降级(短信/手工);关注官方公告;合同约定第三方变更免责
门店网络不稳无法开单高离线队列 + 本地暂存;上线前测速,必要时配 4G 备份路由
需求蔓延工期与毛利双杀高需求冻结 + 变更单 + 人时上限;单均人时超 1.4 倍即止损
数据迁移质量差上线延期、客诉中先抽样 50 条核对;字段缺失列清单由甲方确认
单人交付依赖人员变动导致断档中模板库 + 文档化 + 源码交付;关键模块双人 Review
AI 生成代码缺陷金额/库存错误中三处强制 Review(金额、库存、权限)+ 单元测试覆盖核心规则
模型调用成本失控毛利下降中模板复用降低生成轮次;设置单项目 token 预算与告警

14 附录

14.1 错误码

码含义前端处理
0成功—
1001参数校验失败字段级提示
1002未登录或令牌过期跳登录 / 静默刷新
1003无权限提示并隐藏入口
2001库存不足展示可替代件与到货时间
2002工单状态不允许该操作刷新详情
2003金额不平(组合支付)高亮差额
2004重复请求(幂等命中)直接使用首次结果
3001第三方通道失败降级提示 + 重试
3002数据冲突(离线同步)弹窗二选一

14.2 代码结构

qx-garage/
├─ server/                 Spring Boot
│  ├─ qx-common/           通用:响应、异常、工具、审计
│  ├─ qx-domain/           实体、状态机、计价与库存规则
│  ├─ qx-app/              用例编排、事务、DTO
│  ├─ qx-infra/            MyBatis、Redis、MinIO、第三方适配
│  └─ qx-boot/             启动、配置、定时任务
├─ web/                    Vue3 管理端
├─ mobile/                 uni-app(技师端 + 客户小程序)
├─ deploy/                 docker-compose、nginx、备份脚本
└─ docs/                   本套文档与接口说明

14.3 交付物清单

  • 可运行系统(含初始化数据与演示账号)
  • 源代码(server / web / mobile)与构建脚本
  • 数据库脚本(建表 + 字典 + 初始化)
  • 部署文档、备份恢复手册、升级说明
  • 操作手册(前台 / 技师 / 老板三份,图文)
  • 接口文档(OpenAPI 导出)与测试用例

本文档为 V1.0 首版,与需求说明书同步评审;技术选型如需调整须走变更单。文档编号 QX-SDD-2026-001。

QX Garage · 开发设计文档 V1.0 · 2026-11-08