4. 看板技术栈选型与项目初始化

食品批次追溯看板的核心任务,是把分散在原料入库、生产投料、质检、仓储、出库等环节的批次数据,汇聚成一条可查询、可下钻、可告警的时间链。技术栈选型要围绕这个任务展开:前端负责把批次链路和统计指标讲清楚,后端负责稳定地组织追溯关系,数据库负责在批次号、时间、物料之间快速定位。本节先给出选型判断,再落到脚手架初始化与协作规范,让项目从第一天起就具备可维护的骨架。

一、前端可视化库:按“图表职责”分工,而非只选一个

三个候选库的定位差异明显。ECharts 提供开箱即用的图表类型与交互,适合看板中的产量趋势、合格率分布、批次状态占比、库存水位等标准统计图;AntV 体系(以 G2/G6 为代表)在图形语法和关系图上更灵活,G6 尤其适合绘制“原料批次—生产批次—成品批次”的追溯关系网络;D3 控制力最强,适合自定义时间轴、桑基图或特殊标注,但开发成本高,不适合作为看板的主力图表库。

对追溯看板而言,推荐组合是:ECharts 作为主力统计图库,AntV G6 承担批次关系图,D3 仅在确有定制需求时局部引入。这样既保证开发效率,又保留关系可视化的表达力。选型时可用一张对比表固化判断依据:

维度EChartsAntV(G2/G6)D3
标准统计图开发效率高,配置式较高,需理解图形语法低,需手写绘制逻辑
批次关系网络一般强(G6)强但成本高
定制自由度中较高最高
团队上手成本低中高
适用定位趋势、占比、排行追溯链路、关系拓扑特殊定制图形

需要提醒的是,图表库只是渲染层,真正决定看板质量的是数据接口的粒度。前端应约定按“批次维度 + 时间维度 + 指标维度”取数,避免把聚合逻辑散落在各个图表配置里。

二、后端框架与数据库选型

后端推荐使用 Spring Boot(Java)或 FastAPI(Python)。若团队已有 Java 生态与权限体系,Spring Boot 配合 MyBatis-Plus 更稳妥;若追溯规则中涉及较多数据清洗与算法处理,FastAPI 更轻快。两者都能满足 REST 接口、定时任务与权限控制的需求。关键不在框架本身,而在于把“批次追溯查询”设计成独立服务:输入批次号,输出上游原料批次、下游成品批次、关键工序时间点与质检结论。

数据库建议采用关系型数据库为主、时序或缓存为辅的组合。MySQL 或 PostgreSQL 存储批次主数据、工序记录、质检结果与关联关系,利用批次号、物料编码、时间字段建立联合索引;Redis 缓存高频查询的批次链路结果,降低看板刷新压力。若企业已有 MES/ERP 数据,应通过中间表或同步任务接入,而不是让看板直接跨库查询。下面是一个批次关联表的核心字段示例:

CREATE TABLE batch_link (
  id            BIGINT PRIMARY KEY,
  batch_no      VARCHAR(64) NOT NULL,   -- 当前批次号
  parent_batch  VARCHAR(64),            -- 上游原料批次
  material_code VARCHAR(64) NOT NULL,
  process_step  VARCHAR(64),            -- 工序名称
  event_time    DATETIME NOT NULL,
  quality_flag  TINYINT DEFAULT 0,      -- 0合格 1待检 2不合格
  KEY idx_batch (batch_no),
  KEY idx_parent (parent_batch),
  KEY idx_time (event_time)
);

索引设计要贴合查询路径:看板最常见的操作是“按批次号查链路”和“按时间段统计合格率”,因此 batch_no 与 event_time 必须有索引,parent_batch 索引用于反向追溯。

三、项目脚手架搭建

前端可用 Vite 创建 Vue 3 或 React 工程,按“页面—组件—图表—接口”分层:views 放看板页面,components/charts 封装 ECharts 与 G6 组件,api 统一管理请求与错误处理。后端用 Spring Initializr 或 FastAPI 模板生成基础工程,划分 controller、service、mapper、entity 四层,并把数据库连接、跨域、日志配置写入统一配置文件。初始化完成后,先跑通一个最小闭环:前端请求 /api/batch/{batchNo}/chain,后端返回一条示例链路,前端用 G6 渲染出节点与连线。这个闭环跑通,后续图表才有可靠的数据基础。

追溯看板技术栈与批次数据流 数据源 原料入库记录 生产投料与工序 质检与出入库 后端服务 Spring Boot / FastAPI 批次链路查询接口 权限与告警规则 存储层 MySQL/PostgreSQL 批次关联表 + 索引 Redis 链路缓存 前端看板 ECharts 统计图 G6 批次关系图 D3 局部定制 批次链路示例(原料 → 生产 → 成品) 原料批次 RM-2405 入库 05-02 生产批次 PR-0518 投料 05-18 成品批次 FG-0521 质检合格 出库单 SO-0603 可反向追溯 查询路径:按 batch_no 查链路 → 按 parent_batch 反向追溯 → 按 event_time 统计合格率

四、版本控制与协作规范

项目初始化阶段就要把协作规则写进仓库,而不是等冲突发生后再补。建议采用主干加短分支模型:main 保持可演示状态,功能分支以 feature/批次链路查询 这类语义化命名,合并前必须通过接口联调与图表渲染检查。提交信息统一为“类型: 简述”,例如 feat: 新增批次链路接口、fix: 修正合格率统计口径。仓库根目录放置 README,写清启动命令、环境变量、数据库初始化脚本位置与示例批次号,让新成员能在半小时内跑通最小闭环。

初始化检查建议:前端能渲染一条示例链路;后端接口返回结构稳定;数据库脚本可重复执行;README 中的启动步骤经他人验证可复现。四项都满足,再进入看板页面开发。

最后强调一个容易被忽略的点:选型不是一次性决策。若后续发现 G6 关系图在批次节点超过数百时性能下降,应提前约定聚合展示与按需展开策略;若统计口径频繁变化,应把指标计算下沉到后端,而不是在前端图表配置中反复修改。技术栈的价值,最终体现在追溯查询是否快、链路是否准、协作是否顺。