4. 看板技术栈选型与项目初始化
食品批次追溯看板的核心任务,是把分散在原料入库、生产投料、质检、仓储、出库等环节的批次数据,汇聚成一条可查询、可下钻、可告警的时间链。技术栈选型要围绕这个任务展开:前端负责把批次链路和统计指标讲清楚,后端负责稳定地组织追溯关系,数据库负责在批次号、时间、物料之间快速定位。本节先给出选型判断,再落到脚手架初始化与协作规范,让项目从第一天起就具备可维护的骨架。
一、前端可视化库:按“图表职责”分工,而非只选一个
三个候选库的定位差异明显。ECharts 提供开箱即用的图表类型与交互,适合看板中的产量趋势、合格率分布、批次状态占比、库存水位等标准统计图;AntV 体系(以 G2/G6 为代表)在图形语法和关系图上更灵活,G6 尤其适合绘制“原料批次—生产批次—成品批次”的追溯关系网络;D3 控制力最强,适合自定义时间轴、桑基图或特殊标注,但开发成本高,不适合作为看板的主力图表库。
对追溯看板而言,推荐组合是:ECharts 作为主力统计图库,AntV G6 承担批次关系图,D3 仅在确有定制需求时局部引入。这样既保证开发效率,又保留关系可视化的表达力。选型时可用一张对比表固化判断依据:
| 维度 | ECharts | AntV(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 渲染出节点与连线。这个闭环跑通,后续图表才有可靠的数据基础。
四、版本控制与协作规范
项目初始化阶段就要把协作规则写进仓库,而不是等冲突发生后再补。建议采用主干加短分支模型:main 保持可演示状态,功能分支以 feature/批次链路查询 这类语义化命名,合并前必须通过接口联调与图表渲染检查。提交信息统一为“类型: 简述”,例如 feat: 新增批次链路接口、fix: 修正合格率统计口径。仓库根目录放置 README,写清启动命令、环境变量、数据库初始化脚本位置与示例批次号,让新成员能在半小时内跑通最小闭环。
最后强调一个容易被忽略的点:选型不是一次性决策。若后续发现 G6 关系图在批次节点超过数百时性能下降,应提前约定聚合展示与按需展开策略;若统计口径频繁变化,应把指标计算下沉到后端,而不是在前端图表配置中反复修改。技术栈的价值,最终体现在追溯查询是否快、链路是否准、协作是否顺。