1. 项目背景与核心价值
茶叶作为我国传统农产品代表,其质量安全与品牌价值直接关联消费者信任度。去年参与某茶叶龙头企业调研时,发现他们仍在使用纸质记录结合Excel表格管理茶园种植数据,一次虫害防治记录缺失导致整批茶叶出口被拒,损失高达37万元。这个痛点直接催生了本系统的设计初衷——构建覆盖"茶园到茶杯"全链条的数字追溯体系。
传统茶叶行业存在三大核心痛点:
- 生产环节:农事记录依赖手工填写,易出现数据篡改、遗漏
- 加工环节:温湿度等关键参数缺乏实时监控
- 流通环节:经销商窜货、以次充好现象频发
本系统采用SpringBoot+MyBatis技术栈,通过区块链存证和物联网设备对接,实现:
- 种植阶段:记录施肥/施药时间、剂量及操作人员
- 加工阶段:采集杀青温度、揉捻时长等工艺参数
- 仓储物流:监控温湿度变化及地理位置轨迹
- 销售终端:消费者扫码即可查看全生命周期数据
关键创新点:将欧盟EU 178/2002食品安全追溯法规要求与我国有机茶认证标准GB/T 19630-2019相结合,设计符合国际规范的本土化追溯字段体系
2. 技术架构设计解析
2.1 整体技术选型
采用分层架构设计,具体技术组合如下:
| 层级 | 技术方案 | 选型理由 |
|---|---|---|
| 前端 | Vue.js + ElementUI | 快速构建管理后台,支持数据看板可视化 |
| 后端 | SpringBoot 2.7 + MyBatis-Plus | 简化SSM配置,内置健康检查等生产级特性 |
| 数据库 | MySQL 8.0 + Redis | 事务型数据与缓存分离,支持地理空间数据存储 |
| 安全认证 | JWT + OAuth2 | 满足多角色(茶农、质检员、经销商)分级授权 |
| 区块链 | Hyperledger Fabric私有链 | 关键操作数据上链,实现防篡改 |
| 物联网对接 | MQTT协议 | 低功耗连接茶园传感器设备 |
2.2 核心业务流程设计
以茶叶批次为主线的状态机设计:
java复制public enum TeaStatus {
PLANTING(1, "种植中"),
HARVEST(2, "已采收"),
PROCESSING(3, "加工中"),
QUALITY_CHECK(4, "质检中"),
WAREHOUSE(5, "仓储中"),
DISTRIBUTION(6, "运输中"),
RETAIL(7, "已上架");
// 省略状态转换校验逻辑
}
关键设计考量:
- 采用"一物一码"原则,每个茶包赋予独立QR码
- 状态变更需关联操作人、时间戳及环境参数
- 加工环节设置质量检查卡点,不合格批次自动隔离
3. 核心功能实现细节
3.1 区块链数据存证
采用Hyperledger Fabric的智能合约实现关键数据上链:
java复制@Transaction
public void recordTeaAction(String batchId, String actionType,
String operator, String sensorData) {
ChaincodeStub stub = ctx.getStub();
String compositeKey = stub.createCompositeKey("TeaTrace", batchId);
String record = String.format("%s|%s|%s|%s",
Instant.now().toString(), actionType, operator, sensorData);
stub.putStringState(compositeKey, record);
}
上链策略配置:
- 强制上链:农事操作、质检结果、所有权转移
- 选择性上链:环境传感器数据(每小时抽样)
- 不上链:日常查询日志
3.2 物联网数据采集
茶园传感器网络拓扑:
code复制[土壤湿度传感器] --LoRa--> [边缘网关] --4G--> [MQTT Broker] --WebSocket--> [业务服务器]
数据处理流水线:
- 原始数据校验:剔除超出合理范围的异常值
- 数据补全:使用线性插值法处理缺失数据点
- 特征提取:计算每日平均温湿度、极值等指标
实测发现:在云南高山茶园场景下,LORA设备需配置10分钟心跳间隔,否则电池续航不足2个月
4. 典型问题解决方案
4.1 批次关联难题
初期采用数据库外键关联导致查询性能低下,优化方案:
- 引入Elasticsearch建立批次索引
- 使用GraphQL实现按需查询
- 对加工流水线关系采用图数据库Neo4j存储
查询性能对比:
| 方案 | 1000批次查询耗时 | 并发支持 |
|---|---|---|
| 纯MySQL | 2.4s | 15qps |
| ES+MySQL | 320ms | 50qps |
| ES+Neo4j | 180ms | 80qps |
4.2 移动端适配挑战
茶农端APP需适配低端安卓设备,采取以下优化:
- 图片压缩:使用WebP格式替代JPEG
- 数据同步:采用差分更新策略
- 离线操作:利用IndexedDB缓存未提交记录
5. 质量追溯标准实现
根据国际食品法典委员会CODEX STAN 178-1991标准,设计核心追溯字段:
| 阶段 | 必填字段 | 验证规则 |
|---|---|---|
| 种植 | 农药使用记录 | 必须关联采购发票编号 |
| 加工 | 杀青温度曲线 | 需满足±2℃工艺标准 |
| 质检 | 农残检测报告 | 必须由CMA认证机构出具 |
| 物流 | 温湿度监控日志 | 每30分钟记录一次 |
实现类结构示例:
java复制public class TeaBatch {
@TableId(type = IdType.ASSIGN_UUID)
private String batchId;
@TableField(validate = @Validate(clazz = PesticideValidator.class))
private List<PesticideRecord> pesticideRecords;
@TableField(typeHandler = TemperatureCurveHandler.class)
private TemperatureCurve processingCurve;
}
6. 安全防护措施
6.1 数据安全策略
- 敏感字段加密:采用国密SM4算法加密农药使用记录
- 访问控制:基于RBAC模型实现5级权限划分
- 审计日志:记录所有数据修改操作,保留6个月
6.2 防伪技术实现
- 动态二维码:每次验证后更新校验码
- 纹理识别:采集茶叶包装袋微观纹理特征
- 区块链验证:提供公开数据校验接口
7. 部署实施要点
生产环境推荐配置:
- 服务器:4核8G内存(单节点支持200茶园接入)
- 数据库:MySQL主从复制+读写分离
- 监控:Prometheus+Grafana监控JVM状态
性能调优经验:
- MyBatis二级缓存大小设置为堆内存的1/4
- SpringBoot actuator端点需配置IP白名单
- Redis连接池最大等待时间设为500ms
在浙江安吉某茶场实际部署中发现:当茶园传感器同时在线超过150台时,需调整MQTT的max_connections参数,否则会出现设备断连。这个经验后来写入了我们的部署手册的"高并发场景"章节。