【毕设选题】基于区块链的农产品溯源系统
基于区块链的农产品溯源系统
一、开发思路
本系统基于 若依(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 |
六、设计亮点总结
- 若依深度复用:用户、角色、部门、数据权限、日志、定时任务、字典、代码生成器全部复用。
- FISCO-BCOS 联盟链:多机构共同维护,权限可控,数据不可篡改。
- 链上链下结合:链上存哈希和状态,链下存图片和报告原文。
- 数量守恒:原料总数量与剩余数量跟踪,防止超量消耗。
- 多对多关联:一批原料可产出多个成品,一个成品可关联多批原料。
- 模板可配置:按产品类型推荐操作模板,支持自定义,避免硬编码。
- 状态机严格:原料与成品状态分离,合约校验流转。
- 溯源码两阶段:包装时生成未激活,上架时激活,符合真实扫码场景。
- 异常可发现:滞留批次、超量消耗、哈希不一致均可被定时任务发现。
- 监管穿透:全量审计 + 链上回执 + 操作日志,支持召回。
本方案在毕设周期内可实现,且具备完整的业务闭环、技术亮点和答辩说服力。




