
1. 項目背景與意義隨著消費者對食品安全和農產品品質的關注度不斷提升傳統農產品流通環節中信息不透明、來源難追溯、責任難界定等問題日益突出。農產品從田間到餐桌往往要經歷種植、加工、倉儲、運輸、銷售等多個環節任何一個環節出現問題都可能導致質量安全隱患難以定位。基于 Java 的智農農產品溯源系統正是為了解決上述痛點而設計。系統以二維碼或溯源碼為載體將農產品全生命周期信息進行數字化記錄和關聯實現「源頭可查、去向可追、責任可究」。其核心意義體現在以下幾個方面保障食品安全消費者掃碼即可查看農產品的產地、施肥用藥、檢測報告等關鍵信息增強消費信任。提升管理效率農業生產企業可通過系統統一管理批次、庫存和流通記錄減少人工臺賬成本。支撐監管決策監管部門可基于溯源數據快速定位問題批次提高應急處置能力。塑造品牌價值透明化的溯源信息有助于優質農產品建立差異化品牌形象提升市場競爭力。2. 系統技術棧本系統采用經典的企業級 Java 技術體系兼顧開發效率、穩定性和可維護性。整體技術棧如下層次技術選型說明前端HTML、CSS、JavaScript、Vue.js / Layui負責頁面渲染與交互管理端與消費者查詢端分離后端框架Spring Boot、Spring MVC、MyBatis / MyBatis-Plus提供 RESTful 接口、業務邏輯處理與數據持久化數據庫MySQL 5.7存儲用戶、農產品、批次、溯源記錄等核心業務數據緩存Redis緩存熱點查詢數據提升掃碼溯源響應速度權限認證Spring Security JWT實現登錄認證與基于角色的訪問控制文件存儲本地存儲 / 阿里云 OSS保存農產品圖片、檢測報告等附件二維碼生成ZXing為每個農產品批次生成唯一溯源碼與二維碼構建部署Maven、Docker、Nginx自動化構建、容器化部署與反向代理3. 系統核心功能模塊系統按角色劃分為管理員、生產企業、消費者三類用戶核心功能模塊如下用戶管理模塊支持用戶注冊、登錄、角色分配與個人信息維護。農產品管理模塊生產企業錄入農產品基礎信息包括名稱、品種、產地、圖片等。批次管理模塊對同一生產條件下的農產品進行批次劃分生成唯一溯源碼。溯源記錄模塊記錄種植、施肥、采摘、檢測、倉儲、運輸等環節的操作信息。溯源查詢模塊消費者通過掃描二維碼或輸入溯源碼查看完整溯源鏈路。數據統計模塊管理端按時間、品類、產地等維度統計溯源數據輔助決策。4. 數據庫設計數據庫是溯源系統的核心支撐。以下為主要數據表的設計要點user 表存儲用戶賬號、密碼BCrypt 加密、角色類型、聯系方式等。product 表存儲農產品基礎信息包括名稱、品種、產地、規格、圖片地址等。batch 表存儲批次信息包括批次編號、關聯產品、生產日期、溯源碼等。trace_record 表存儲溯源環節記錄包括環節名稱、操作人、操作時間、描述、圖片等。detection_report 表存儲檢測報告信息包括檢測機構、檢測結果、報告文件等。其中batch 表與 trace_record 表通過批次編號建立一對多關聯構成溯源鏈路的骨干。5. 核心代碼實現下面給出系統后端幾個關鍵模塊的核心代碼示例。5.1 實體類設計以批次實體 Batch 為例使用 MyBatis-Plus 注解簡化開發import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.time.LocalDateTime; Data TableName(batch) public class Batch { TableId(type IdType.AUTO) private Long id; /** 批次編號 */ private String batchNo; /** 關聯農產品ID */ private Long productId; /** 生產日期 */ private LocalDateTime produceDate; /** 唯一溯源碼 */ private String traceCode; /** 批次狀態0-生產中 1-已上市 2-已下架 */ private Integer status; private LocalDateTime createTime; }5.2 生成溯源碼與二維碼批次創建時系統生成唯一溯源碼并調用 ZXing 生成二維碼圖片import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatWriter; import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import java.nio.file.Path; import java.nio.file.Paths; import java.util.HashMap; import java.util.Map; import java.util.UUID; public class QrCodeUtil { /** 生成唯一溯源碼 */ public static String generateTraceCode() { return ZN System.currentTimeMillis() UUID.randomUUID().toString().substring(0, 6); } /** 生成二維碼圖片到指定路徑 */ public static void createQrCode(String content, String filePath) throws Exception { int width 300; int height 300; MapEncodeHintType, Object hints new HashMap(); hints.put(EncodeHintType.CHARACTER_SET, UTF-8); BitMatrix bitMatrix new MultiFormatWriter() .encode(content, BarcodeFormat.QR_CODE, width, height, hints); Path path Paths.get(filePath); MatrixToImageWriter.writeToPath(bitMatrix, png, path); } }5.3 溯源查詢接口消費者輸入溯源碼后后端按批次查詢完整溯源鏈路并返回import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.List; import java.util.Map; RestController RequestMapping(/api/trace) public class TraceController { Autowired private BatchService batchService; Autowired private TraceRecordService traceRecordService; Autowired private ProductService productService; /** 根據溯源碼查詢完整溯源信息 */ GetMapping(/query) public MapString, Object queryByTraceCode(RequestParam String traceCode) { MapString, Object result new HashMap(); Batch batch batchService.getByTraceCode(traceCode); if (batch null) { result.put(code, 404); result.put(msg, 未查詢到該溯源碼對應的農產品); return result; } // 查詢農產品基礎信息 Product product productService.getById(batch.getProductId()); // 查詢該批次下的全部溯源記錄 ListTraceRecord records traceRecordService.listByBatchId(batch.getId()); result.put(code, 200); result.put(msg, 查詢成功); result.put(product, product); result.put(batch, batch); result.put(records, records); return result; } }5.4 溯源記錄添加生產企業在各環節完成后向指定批次追加溯源記錄import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.time.LocalDateTime; RestController RequestMapping(/api/record) public class TraceRecordController { Autowired private TraceRecordService traceRecordService; /** 添加一條溯源記錄 */ PostMapping(/add) public MapString, Object addRecord(RequestBody TraceRecord record) { MapString, Object result new HashMap(); record.setCreateTime(LocalDateTime.now()); boolean saved traceRecordService.save(record); if (saved) { result.put(code, 200); result.put(msg, 溯源記錄添加成功); } else { result.put(code, 500); result.put(msg, 溯源記錄添加失敗); } return result; } }6. 系統部署與運行系統采用前后端分離架構后端打包為可執行 Jar 包前端靜態資源由 Nginx 托管。推薦部署方式如下環境要求JDK 1.8、MySQL 5.7、Redis、Maven 3.6。數據庫初始化執行項目提供的 SQL 腳本創建數據庫表結構。后端啟動執行mvn clean package打包再運行java -jar zn-trace-system.jar。前端部署將前端構建產物上傳至 Nginx 的 html 目錄并配置反向代理轉發 API 請求。7. 總結與展望基于 Java 的智農農產品溯源系統通過 Spring Boot MyBatis-Plus MySQL 的技術組合實現了農產品從生產到銷售的全鏈路信息追溯有效提升了食品安全保障能力和企業管理效率。系統架構清晰、擴展性良好后續可進一步引入區塊鏈技術增強數據防篡改能力或結合物聯網設備實現環境數據的自動采集與上鏈推動智慧農業向更深層次發展。