基于区块链的农产品溯源系统

一、开发思路

本系统基于 若依(RuoYi) 快速开发平台与 FISCO-BCOS 联盟链构建,采用“链上存证 + 链下存储 + 智能合约状态机”的模式,实现农产品从生产、加工、运输到销售的全链路可信溯源。

1. 技术选型

层次 技术
前端 Vue + Element UI(若依内置)
后端 Spring Boot + MyBatis(若依内置)
权限 若依 RBAC + 数据权限
区块链 FISCO-BCOS 联盟链
合约 Solidity 智能合约
链下存储 MySQL + 本地文件/IPFS
开发平台 若依(RuoYi)

2. 核心设计思路

  • 复用若依内置能力:用户、角色、菜单、部门、数据权限、操作日志、通知公告、定时任务、字典管理、代码生成器。
  • 链上链下结合:链上存批次 ID、操作主体、操作类型、时间、数据哈希、状态;链下存图片、视频、详细描述。
  • 智能合约状态机:原料批次与成品批次分别定义状态,合约校验状态流转,防止越权操作。
  • 数量约束:原料批次记录总数量和剩余数量,创建成品批次时扣减,防止超量消耗。
  • 操作模板机制:按产品类型配置生产/加工操作模板,自动推荐,支持自定义,避免硬编码。
  • 数据权限隔离:利用若依部门数据权限,各企业只能查看和操作自己的数据。
  • 溯源码两阶段:加工包装时生成未激活二维码,销售商上架时激活,消费者扫码只看到已上架商品。

二、角色权限

系统角色包括:系统管理员/监管、生产商、加工商、运输商、销售商、消费者。质检环节暂不启用。

1. 角色权限矩阵

功能 管理员/监管 生产商 加工商 运输商 销售商 消费者
用户/角色/部门管理 ✔ ✖ ✖ ✖ ✖ ✖
主体资质管理 ✔ 维护自己 维护自己 维护自己 维护自己 ✖
创建原料批次 ✖ ✔ ✖ ✖ ✖ ✖
录入生产记录 ✖ ✔ 仅自己批次 ✖ ✖ ✖ ✖
确认采收 ✖ ✔ ✖ ✖ ✖ ✖
发起原料流转 ✖ ✔ ✖ ✖ ✖ ✖
接收原料批次 ✖ ✖ ✔ ✖ ✖ ✖
创建成品批次 ✖ ✖ ✔ ✖ ✖ ✖
录入加工记录 ✖ ✖ ✔ 仅自己成品 ✖ ✖ ✖
确认加工完成 ✖ ✖ ✔ ✖ ✖ ✖
生成溯源码 ✖ ✖ ✔ 包装时 ✖ ✖ ✖
发起运输 ✖ ✖ ✔ ✖ ✖ ✖
运输接单/提货/送达 ✖ ✖ ✖ ✔ 仅自己运输单 ✖ ✖
接收成品入库 ✖ ✖ ✖ ✖ ✔ ✖
上架/激活溯源码 ✖ ✖ ✖ ✖ ✔ ✖
销售记录 ✖ ✖ ✖ ✖ ✔ ✖
扫码查询溯源 ✔ ✔ ✔ ✔ ✔ ✔
提交反馈/投诉 ✖ ✖ ✖ ✖ ✖ ✔
全量审计 ✔ ✖ ✖ ✖ ✖ ✖
召回/下架 ✔ 可申请 可申请 可申请 可申请 ✖
统计报表 ✔ 自己数据 自己数据 自己数据 自己数据 ✖

2. 若依中的实现方式

  • 部门:每个企业/合作社建为一个部门。
  • 角色:生产商、加工商、运输商、销售商、监管员。
  • 数据权限:生产商仅本部门数据;加工商仅本部门数据;运输商仅本部门运输单;销售商仅本部门数据;监管全部数据。
  • 消费者:无需若依账号,通过独立 H5 查询接口访问。

三、主要功能

1. 系统管理(若依内置)

用户管理、角色管理、菜单管理、部门管理、岗位管理、字典管理、参数管理、通知公告、操作日志、登录日志、在线用户、定时任务、代码生成器、系统接口、服务监控、缓存监控。

2. 主体与资质管理

企业/合作社信息登记、营业执照、生产资质、基地/车间信息、资质到期提醒(可简化)。

3. 产品与模板管理

产品类型字典(苹果、生猪、牛奶等)、生产操作模板、加工操作模板、模板排序与必填项配置。

4. 原料批次管理

创建原料批次、填写总数量与单位、生成批次号、录入生产记录、确认采收、发起流转、查看剩余数量。

5. 成品批次管理

创建成品批次、关联原料批次、填写消耗数量与产出数量、录入加工记录、确认加工完成、生成溯源码。

6. 运输管理

创建运输单、选择运输商、运输商接单、提货交接、运输记录(轨迹、温度、异常)、送达签收。

7. 销售管理

成品入库、上架、激活溯源码、销售记录、下架/召回。

8. 溯源码管理

生成二维码、绑定成品批次、激活/未激活状态、召回状态。

9. 消费者查询

扫码查询、展示全链路信息、链上哈希验证、反馈投诉。

10. 区块链存证

FISCO-BCOS SDK 集成、合约调用、交易回执查询、链上哈希与链下数据比对、定时校验。

11. 统计报表

批次统计、产量统计、销量统计、异常批次统计、操作统计。


四、流程示例

以 陕西洛川红富士苹果 为例:生产商 1000 kg 苹果 → 加工商分别生产苹果脆片、苹果汁、苹果酱 → 运输商配送 → 销售商上架 → 消费者扫码。

角色

管理员/监管、生产商、加工商、运输商、销售商、消费者。

状态定义

原料批次:
CREATED → PRODUCING → HARVESTED → TRANSFERRED → RECEIVED → PARTIALLY_CONSUMED → CONSUMED → RECALLED

成品批次:
CREATED → PROCESSING → PROCESSED → SHIPPING_REQUESTED → IN_TRANSIT → IN_STOCK → ON_SALE → SOLD → RECALLED

溯源码:
CREATED → ACTIVATED → RECALLED


步骤 1:管理员初始化

  • 创建部门:绿源合作社、鲜果加工、顺达冷链、优选超市、市场监管局。
  • 创建角色并分配菜单权限。
  • 配置产品类型字典和操作模板。
  • 部署 UserContract 和 TraceContract。

产品状态:无。


步骤 2:生产商创建原料批次

  • 生产商登录,创建原料批次 APPLE-2026-001。
  • 产品类型:苹果;总数量:1000 kg;单位:kg。
  • 系统推荐生产操作模板:施肥、灌溉、疏果、套袋、采收。
  • 链上 createBatch(),记录 totalQuantity=1000, remainingQuantity=1000。

原料批次状态:CREATED


步骤 3:生产商录入生产记录

  • 按模板录入施肥、灌溉、疏果、套袋记录,可自定义添加“修剪枝条”。
  • 每条记录计算哈希并上链。
  • 若依操作日志自动记录。

原料批次状态:PRODUCING


步骤 4:生产商确认采收

  • 录入采收记录。
  • 点击“确认采收完成”。
  • 系统校验至少一条采收记录。
  • 链上 updateStatus(HARVESTED)。

原料批次状态:HARVESTED


步骤 5:生产商发起流转给加工商

  • 选择加工商“鲜果加工有限公司”,发起流转。
  • 链上 transferBatch()。
  • 若依通知公告提醒加工商。

原料批次状态:TRANSFERRED


步骤 6:加工商确认接收

  • 加工商在“待接收批次”中确认接收。
  • 链上 receiveBatch()。
  • 此时未创建成品批次,系统不会自动创建。

原料批次状态:RECEIVED
原料剩余数量:1000 kg

说明:加工商接收后未加工时,原料状态为 RECEIVED,成品批次不存在。若长期不创建成品,定时任务会标记为“滞留批次”并通知监管。


步骤 7:加工商创建第一个成品批次(苹果脆片)

  • 创建成品批次 APPLE-CHIP-2026-001。
  • 关联原料批次 APPLE-2026-001。
  • 消耗数量:300 kg;产出:60 kg。
  • 系统校验 300 ≤ 1000,通过。
  • 链上 createBatch()、linkBatch()、consumeRawMaterial(300)。

原料批次状态:PARTIALLY_CONSUMED
原料剩余数量:700 kg
成品批次状态:CREATED


步骤 8:加工商录入加工记录

  • 系统推荐加工模板:清洗、切片、烘干、包装。
  • 加工商按模板录入,可自定义添加“挑选分级”。
  • 每条记录哈希上链。

成品批次状态:PROCESSING
原料批次状态:PARTIALLY_CONSUMED


步骤 9:加工商确认加工完成

  • 点击“确认加工完成”。
  • 系统校验:成品已创建、已关联原料、有加工记录、消耗已扣减。
  • 链上 updateStatus(PROCESSED)。

成品批次状态:PROCESSED
原料批次状态:仍为 PARTIALLY_CONSUMED(还有剩余)


步骤 10:加工商生成溯源码(未激活)

  • 在包装环节生成二维码,印在包装上。
  • 链上 createTraceCode()。

溯源码状态:CREATED(未激活)
扫码提示:“该商品尚未上架,请通过正规渠道购买。”


步骤 11:加工商创建第二个成品批次(苹果汁)

  • 创建 APPLE-JUICE-2026-001,关联同一原料批次。
  • 消耗 400 kg,产出 350 L。
  • 校验 400 ≤ 700,通过。

原料剩余数量:300 kg
原料批次状态:PARTIALLY_CONSUMED
成品批次状态:CREATED


步骤 12:加工商创建第三个成品批次(苹果酱)

  • 创建 APPLE-JAM-2026-001,关联同一原料批次。
  • 消耗 300 kg,产出 120 kg。
  • 校验 300 ≤ 300,通过。

原料剩余数量:0
原料批次状态:CONSUMED
成品批次状态:CREATED


步骤 13:三个成品批次分别完成加工

  • 各自录入加工记录、确认加工完成。
  • 各自状态:PROCESSED
  • 原料批次状态:CONSUMED

步骤 14:加工商发起运输

  • 为每个成品批次创建运输单,选择运输商“顺达冷链”。
  • 链上 createShipment()。

成品批次状态:SHIPPING_REQUESTED


步骤 15:运输商接单提货

  • 运输商接单,到加工商处提货,双方签名。
  • 链上 acceptShipment()、addTransportRecord()。
  • 记录车牌、司机、轨迹、温度等,哈希上链。

成品批次状态:IN_TRANSIT


步骤 16:运输商送达,销售商接收

  • 运输商送达,销售商确认收货,双方签名。
  • 链上 confirmDelivery()、receiveBatch()。

成品批次状态:IN_STOCK


步骤 17:销售商上架,激活溯源码

  • 销售商绑定溯源码,上架销售。
  • 链上 activateCode()、updateStatus(ON_SALE)。

成品批次状态:ON_SALE
溯源码状态:ACTIVATED


步骤 18:消费者扫码查询

  • 消费者扫描苹果脆片包装二维码。
  • 后端查询链上哈希 + 链下数据,比对验证。
  • 展示全链路:
    • 原料批次:陕西洛川红富士苹果,总 1000 kg,剩余 0 kg
    • 生产商:绿源合作社
    • 生产记录:施肥、灌溉、疏果、套袋、采收
    • 加工商:鲜果加工有限公司
    • 加工记录:清洗、切片、烘干、包装
    • 运输商:顺达冷链
    • 运输记录:车牌、轨迹、温度、送达时间
    • 销售商:优选超市
    • 当前状态:已上架
  • 验证通过显示“数据未篡改”。

成品批次状态:ON_SALE 或 SOLD


步骤 19:销售记录

  • 销售商记录销售信息,链上 addRecord()。

成品批次状态:SOLD


步骤 20:监管审计与召回

  • 监管查看全量数据、操作日志、链上回执。
  • 发现异常,链上 recallBatch()。

成品批次状态:RECALLED
溯源码状态:RECALLED
消费者扫码显示召回预警。


五、状态流转总表

步骤 角色 操作 原料批次 成品批次 溯源码
1 管理员 初始化 — — —
2 生产商 创建原料批次 CREATED — —
3 生产商 录入生产记录 PRODUCING — —
4 生产商 确认采收 HARVESTED — —
5 生产商 发起流转 TRANSFERRED — —
6 加工商 确认接收 RECEIVED — —
7 加工商 创建成品批次 PARTIALLY_CONSUMED CREATED —
8 加工商 录入加工记录 PARTIALLY_CONSUMED PROCESSING —
9 加工商 确认加工完成 PARTIALLY_CONSUMED PROCESSED —
10 加工商 生成溯源码 PARTIALLY_CONSUMED PROCESSED CREATED
11 加工商 创建第二个成品 PARTIALLY_CONSUMED CREATED —
12 加工商 创建第三个成品 CONSUMED CREATED —
13 加工商 分别完成加工 CONSUMED PROCESSED CREATED
14 加工商 发起运输 CONSUMED SHIPPING_REQUESTED CREATED
15 运输商 接单提货 CONSUMED IN_TRANSIT CREATED
16 销售商 确认收货 CONSUMED IN_STOCK CREATED
17 销售商 上架激活 CONSUMED ON_SALE ACTIVATED
18 消费者 扫码查询 CONSUMED ON_SALE/SOLD ACTIVATED
19 销售商 销售记录 CONSUMED SOLD ACTIVATED
20 监管 召回 RECALLED RECALLED RECALLED

六、设计亮点总结

  1. 若依深度复用:用户、角色、部门、数据权限、日志、定时任务、字典、代码生成器全部复用。
  2. FISCO-BCOS 联盟链:多机构共同维护,权限可控,数据不可篡改。
  3. 链上链下结合:链上存哈希和状态,链下存图片和报告原文。
  4. 数量守恒:原料总数量与剩余数量跟踪,防止超量消耗。
  5. 多对多关联:一批原料可产出多个成品,一个成品可关联多批原料。
  6. 模板可配置:按产品类型推荐操作模板,支持自定义,避免硬编码。
  7. 状态机严格:原料与成品状态分离,合约校验流转。
  8. 溯源码两阶段:包装时生成未激活,上架时激活,符合真实扫码场景。
  9. 异常可发现:滞留批次、超量消耗、哈希不一致均可被定时任务发现。
  10. 监管穿透:全量审计 + 链上回执 + 操作日志,支持召回。

本方案在毕设周期内可实现,且具备完整的业务闭环、技术亮点和答辩说服力。