摘要
本論文設計并實現了一個基于 SpringBoot 和 VueJS 的助農生鮮銷售系統。系統采用前后端分離架構,前端使用 VueJS 框架實現用戶界面,后端使用 SpringBoot 框架構建服務,通過 MyBatis 實現數據持久化。系統實現了農產品展示、在線購物、訂單管理、支付結算、物流跟蹤、農戶管理等功能,為農戶和消費者之間搭建了一個便捷的生鮮銷售平臺。實驗結果表明,該系統能夠有效解決農產品銷售難的問題,提高農戶收入,促進農村經濟發展。
1 引言
1.1 研究背景與意義
隨著互聯網技術的快速發展和電子商務的普及,網絡購物已經成為人們日常生活中不可或缺的一部分。生鮮農產品作為人們日常生活的必需品,其在線銷售市場也呈現出快速增長的態勢。然而,目前我國生鮮農產品電商發展仍面臨一些問題,如農產品標準化程度低、物流配送難度大、品牌建設不足等。特別是在農村地區,由于信息不對稱、銷售渠道有限等原因,農產品滯銷現象時有發生,給農戶帶來了巨大的經濟損失。
因此,開發一個基于 SpringBoot 和 VueJS 的助農生鮮銷售系統具有重要的現實意義。該系統可以為農戶和消費者之間搭建一個便捷的生鮮銷售平臺,解決農產品銷售難的問題,提高農戶收入,促進農村經濟發展。同時,系統還可以提高生鮮農產品的標準化程度和品牌建設水平,推動我國生鮮農產品電商行業的健康發展。
1.2 國內外研究現狀
在國外,生鮮電商發展已經相對成熟。許多國際知名電商平臺,如亞馬遜、沃爾瑪等,都已經開展了生鮮電商業務。這些平臺利用先進的信息技術和物流配送體系,為消費者提供了便捷、高效的生鮮購物體驗。同時,國外的生鮮電商平臺還注重農產品的標準化和品牌建設,通過嚴格的質量控制和品牌營銷,提高了農產品的附加值和市場競爭力。
在國內,生鮮電商市場也呈現出快速增長的態勢。許多國內知名電商平臺,如淘寶、京東、拼多多等,都已經開展了生鮮電商業務。同時,一些專注于生鮮電商的平臺,如盒馬鮮生、每日優鮮、美團買菜等,也在市場上取得了一定的成績。然而,目前我國生鮮電商發展仍面臨一些問題,如農產品標準化程度低、物流配送難度大、品牌建設不足等。特別是在農村地區,由于信息不對稱、銷售渠道有限等原因,農產品滯銷現象時有發生,給農戶帶來了巨大的經濟損失。
1.3 研究內容與方法
本論文的研究內容主要包括以下幾個方面:
- 助農生鮮銷售系統的需求分析,包括功能需求、性能需求和安全需求。
- 系統的總體設計,包括架構設計、功能模塊設計和數據庫設計。
- 系統的詳細設計與實現,包括前端設計與實現、后端設計與實現、數據庫設計與實現等。
- 系統的測試與優化,包括功能測試、性能測試和用戶體驗測試等。
- 系統的部署與應用,包括系統的部署環境、部署流程和應用效果等。
本論文采用的研究方法主要包括以下幾種:
- 文獻研究法:通過查閱相關文獻,了解國內外生鮮電商發展現狀和趨勢,為系統的設計和實現提供理論支持。
- 需求分析法:通過問卷調查、用戶訪談等方式,了解農戶和消費者對助農生鮮銷售系統的需求和期望,為系統的功能設計提供依據。
- 系統設計法:采用面向對象的設計方法,對系統進行總體設計和詳細設計,確保系統的可擴展性和可維護性。
- 實驗研究法:通過實際測試和實驗,驗證系統的功能和性能,對系統進行優化和改進。
2 系統需求分析
2.1 功能需求
基于 SpringBoot+VueJS 的助農生鮮銷售系統的功能需求主要包括以下幾個方面:
- 用戶管理:支持用戶注冊、登錄、個人信息管理等功能,包括農戶用戶和消費者用戶。
- 農產品管理:支持農戶上傳農產品信息,包括農產品名稱、圖片、價格、描述、產地等,支持農產品的編輯和刪除。
- 購物車管理:支持消費者將感興趣的農產品加入購物車,支持購物車中農產品的數量修改和刪除。
- 訂單管理:支持消費者創建訂單、支付訂單、查看訂單詳情和訂單狀態,支持農戶查看訂單、處理訂單和發貨。
- 支付結算:支持多種支付方式,如微信支付、支付寶等,支持訂單的支付和退款。
- 物流跟蹤:支持消費者查看訂單的物流狀態和物流信息。
- 評價管理:支持消費者對購買的農產品進行評價,支持農戶查看和回復評價。
- 農戶管理:支持管理員對農戶信息進行審核和管理,包括農戶的基本信息、資質信息等。
- 數據分析:支持管理員對系統的運營數據進行分析,包括銷售額、銷售量、用戶數量等。
2.2 性能需求
基于 SpringBoot+VueJS 的助農生鮮銷售系統的性能需求主要包括以下幾個方面:
- 響應時間:系統的平均響應時間應不超過 3 秒,最大響應時間應不超過 10 秒。
- 并發用戶數:系統應支持至少 1000 個并發用戶同時在線操作。
- 數據處理能力:系統應能夠高效處理大量的農產品信息、訂單信息和用戶信息,保證數據的實時性和準確性。
- 系統可用性:系統的可用性應不低于 99.9%,保證系統在大部分時間內都能正常運行。
2.3 安全需求
基于 SpringBoot+VueJS 的助農生鮮銷售系統的安全需求主要包括以下幾個方面:
- 用戶信息安全:保護用戶的個人信息和賬戶信息不被泄露,采用加密技術對用戶密碼和敏感數據進行加密存儲。
- 數據傳輸安全:保證用戶在進行數據傳輸時的安全性,采用 HTTPS 協議進行數據傳輸,防止數據被竊取和篡改。
- 支付安全:保證用戶在進行支付時的安全性,采用安全的支付接口和加密技術,防止用戶支付信息被泄露和盜用。
- 防攻擊:采用防火墻、入侵檢測等技術,防止系統被惡意攻擊和入侵。
3 系統總體設計
3.1 系統架構設計
基于 SpringBoot+VueJS 的助農生鮮銷售系統采用前后端分離的架構設計,主要包括以下幾個層次:
- 前端展示層:負責與用戶進行交互,展示系統的用戶界面,接收用戶的輸入和操作。前端采用 VueJS 框架實現,使用 ElementUI 組件庫提高開發效率。
- 后端服務層:負責處理業務邏輯,提供 API 接口供前端調用。后端采用 SpringBoot 框架實現,使用 Spring Security 實現用戶認證和授權,使用 MyBatis 實現數據持久化。
- 數據存儲層:負責存儲系統的數據,包括用戶信息、農產品信息、訂單信息、物流信息等。數據存儲層采用 MySQL 數據庫和 Redis 緩存相結合的方式,提高系統的數據訪問效率。
- 中間件層:負責提供系統的基礎服務,包括消息隊列、緩存、文件存儲等。中間件層采用 RabbitMQ 消息隊列、Redis 緩存和 MinIO 文件存儲系統。
系統架構圖如下所示:
3.2 功能模塊設計
基于 SpringBoot+VueJS 的助農生鮮銷售系統的功能模塊設計如下:
- 用戶管理模塊:負責用戶的注冊、登錄、個人信息管理等功能,包括農戶用戶和消費者用戶。
- 農產品管理模塊:負責農產品信息的上傳、編輯、刪除等功能,包括農產品名稱、圖片、價格、描述、產地等。
- 購物車管理模塊:負責購物車的管理,包括添加商品、修改數量、刪除商品等功能。
- 訂單管理模塊:負責訂單的創建、支付、發貨、收貨等功能,包括訂單狀態的跟蹤和管理。
- 支付結算模塊:負責訂單的支付和退款功能,支持多種支付方式,如微信支付、支付寶等。
- 物流跟蹤模塊:負責訂單的物流狀態和物流信息的查詢和展示。
- 評價管理模塊:負責消費者對購買的農產品進行評價,以及農戶對評價的回復和管理。
- 農戶管理模塊:負責農戶信息的審核和管理,包括農戶的基本信息、資質信息等。
- 數據分析模塊:負責對系統的運營數據進行分析,包括銷售額、銷售量、用戶數量等。
3.3 數據庫設計
基于 SpringBoot+VueJS 的助農生鮮銷售系統的數據庫設計主要包括以下幾個表:
- 用戶表(user):存儲用戶的基本信息,包括用戶 ID、用戶名、密碼、郵箱、手機號、用戶類型等字段。
sql
CREATE TABLE `user` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用戶ID',`username` varchar(50) NOT NULL COMMENT '用戶名',`password` varchar(100) NOT NULL COMMENT '密碼',`email` varchar(50) DEFAULT NULL COMMENT '郵箱',`phone` varchar(20) DEFAULT NULL COMMENT '手機號',`user_type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '用戶類型(1:消費者,2:農戶,3:管理員)',`status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '狀態(0:禁用,1:啟用)',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',PRIMARY KEY (`id`),UNIQUE KEY `idx_username` (`username`),UNIQUE KEY `idx_email` (`email`),UNIQUE KEY `idx_phone` (`phone`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用戶表';
- 農戶表(farmer):存儲農戶的基本信息,包括農戶 ID、用戶 ID、真實姓名、身份證號、身份證圖片、營業執照號、營業執照圖片、銀行賬戶等字段。
sql
CREATE TABLE `farmer` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '農戶ID',`user_id` bigint(20) NOT NULL COMMENT '用戶ID',`real_name` varchar(50) NOT NULL COMMENT '真實姓名',`id_card` varchar(20) NOT NULL COMMENT '身份證號',`id_card_front` varchar(255) NOT NULL COMMENT '身份證正面圖片',`id_card_back` varchar(255) NOT NULL COMMENT '身份證背面圖片',`business_license` varchar(50) DEFAULT NULL COMMENT '營業執照號',`business_license_img` varchar(255) DEFAULT NULL COMMENT '營業執照圖片',`bank_account` varchar(50) NOT NULL COMMENT '銀行賬戶',`status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '狀態(0:待審核,1:已通過,2:已拒絕)',`audit_time` datetime DEFAULT NULL COMMENT '審核時間',`audit_user` bigint(20) DEFAULT NULL COMMENT '審核人',`audit_reason` varchar(255) DEFAULT NULL COMMENT '審核原因',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',PRIMARY KEY (`id`),UNIQUE KEY `idx_user_id` (`user_id`),FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='農戶表';
- 農產品分類表(product_category):存儲農產品的分類信息,包括分類 ID、分類名稱、父分類 ID 等字段。
sql
CREATE TABLE `product_category` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '分類ID',`name` varchar(50) NOT NULL COMMENT '分類名稱',`parent_id` bigint(20) DEFAULT NULL COMMENT '父分類ID',`level` int(11) NOT NULL DEFAULT '1' COMMENT '分類層級',`status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '狀態(0:禁用,1:啟用)',`sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',PRIMARY KEY (`id`),KEY `idx_parent_id` (`parent_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='農產品分類表';
- 農產品表(product):存儲農產品的基本信息,包括農產品 ID、農戶 ID、分類 ID、農產品名稱、圖片、價格、庫存、描述、產地、上架狀態等字段。
sql
CREATE TABLE `product` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '農產品ID',`farmer_id` bigint(20) NOT NULL COMMENT '農戶ID',`category_id` bigint(20) NOT NULL COMMENT '分類ID',`name` varchar(100) NOT NULL COMMENT '農產品名稱',`main_image` varchar(255) NOT NULL COMMENT '主圖片',`sub_images` text COMMENT '子圖片',`price` decimal(10,2) NOT NULL COMMENT '價格',`original_price` decimal(10,2) DEFAULT NULL COMMENT '原價',`stock` int(11) NOT NULL DEFAULT '0' COMMENT '庫存',`description` text COMMENT '描述',`origin` varchar(100) DEFAULT NULL COMMENT '產地',`is_on_sale` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否上架(0:下架,1:上架)',`sales_volume` int(11) NOT NULL DEFAULT '0' COMMENT '銷量',`status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '狀態(0:禁用,1:啟用)',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',PRIMARY KEY (`id`),KEY `idx_farmer_id` (`farmer_id`),KEY `idx_category_id` (`category_id`),KEY `idx_is_on_sale` (`is_on_sale`),FOREIGN KEY (`farmer_id`) REFERENCES `farmer` (`id`),FOREIGN KEY (`category_id`) REFERENCES `product_category` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='農產品表';
- 購物車表(shopping_cart):存儲用戶的購物車信息,包括購物車 ID、用戶 ID、農產品 ID、數量等字段。
sql
CREATE TABLE `shopping_cart` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '購物車ID',`user_id` bigint(20) NOT NULL COMMENT '用戶ID',`product_id` bigint(20) NOT NULL COMMENT '農產品ID',`quantity` int(11) NOT NULL DEFAULT '1' COMMENT '數量',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',PRIMARY KEY (`id`),UNIQUE KEY `idx_user_id_product_id` (`user_id`,`product_id`),FOREIGN KEY (`user_id`) REFERENCES `user` (`id`),FOREIGN KEY (`product_id`) REFERENCES `product` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='購物車表';
- 訂單表(order):存儲訂單的基本信息,包括訂單 ID、用戶 ID、訂單編號、訂單金額、支付方式、支付狀態、物流狀態、收貨地址等字段。
sql
CREATE TABLE `order` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '訂單ID',`user_id` bigint(20) NOT NULL COMMENT '用戶ID',`order_no` varchar(50) NOT NULL COMMENT '訂單編號',`total_amount` decimal(10,2) NOT NULL COMMENT '訂單金額',`payment_method` tinyint(4) NOT NULL DEFAULT '1' COMMENT '支付方式(1:微信支付,2:支付寶)',`payment_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '支付狀態(0:未支付,1:已支付,2:已退款)',`payment_time` datetime DEFAULT NULL COMMENT '支付時間',`logistics_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '物流狀態(0:未發貨,1:已發貨,2:已收貨)',`logistics_company` varchar(50) DEFAULT NULL COMMENT '物流公司',`logistics_no` varchar(50) DEFAULT NULL COMMENT '物流單號',`shipping_time` datetime DEFAULT NULL COMMENT '發貨時間',`receive_time` datetime DEFAULT NULL COMMENT '收貨時間',`receiver_name` varchar(50) NOT NULL COMMENT '收貨人姓名',`receiver_phone` varchar(20) NOT NULL COMMENT '收貨人電話',`receiver_address` varchar(255) NOT NULL COMMENT '收貨地址',`status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '訂單狀態(0:已取消,1:待支付,2:待發貨,3:待收貨,4:已完成)',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',PRIMARY KEY (`id`),UNIQUE KEY `idx_order_no` (`order_no`),KEY `idx_user_id` (`user_id`),KEY `idx_payment_status` (`payment_status`),KEY `idx_logistics_status` (`logistics_status`),KEY `idx_status` (`status`),FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='訂單表';
- 訂單詳情表(order_detail):存儲訂單的詳細信息,包括訂單詳情 ID、訂單 ID、農產品 ID、數量、單價等字段。
sql
CREATE TABLE `order_detail` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '訂單詳情ID',`order_id` bigint(20) NOT NULL COMMENT '訂單ID',`product_id` bigint(20) NOT NULL COMMENT '農產品ID',`quantity` int(11) NOT NULL COMMENT '數量',`price` decimal(10,2) NOT NULL COMMENT '單價',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',PRIMARY KEY (`id`),KEY `idx_order_id` (`order_id`),KEY `idx_product_id` (`product_id`),FOREIGN KEY (`order_id`) REFERENCES `order` (`id`),FOREIGN KEY (`product_id`) REFERENCES `product` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='訂單詳情表';
- 評價表(review):存儲用戶對農產品的評價信息,包括評價 ID、訂單詳情 ID、用戶 ID、農產品 ID、評價內容、評分、評價時間等字段。
sql
CREATE TABLE `review` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '評價ID',`order_detail_id` bigint(20) NOT NULL COMMENT '訂單詳情ID',`user_id` bigint(20) NOT NULL COMMENT '用戶ID',`product_id` bigint(20) NOT NULL COMMENT '農產品ID',`content` text NOT NULL COMMENT '評價內容',`rating` tinyint(4) NOT NULL COMMENT '評分(1-5分)',`images` text COMMENT '評價圖片',`status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '狀態(0:禁用,1:啟用)',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '評價時間',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',PRIMARY KEY (`id`),UNIQUE KEY `idx_order_detail_id` (`order_detail_id`),KEY `idx_user_id` (`user_id`),KEY `idx_product_id` (`product_id`),FOREIGN KEY (`order_detail_id`) REFERENCES `order_detail` (`id`),FOREIGN KEY (`user_id`) REFERENCES `user` (`id`),FOREIGN KEY (`product_id`) REFERENCES `product` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='評價表';
- 物流信息表(logistics):存儲訂單的物流信息,包括物流 ID、訂單 ID、物流狀態、物流描述、物流時間等字段。
sql
CREATE TABLE `logistics` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '物流ID',`order_id` bigint(20) NOT NULL COMMENT '訂單ID',`status` varchar(50) NOT NULL COMMENT '物流狀態',`description` varchar(255) NOT NULL COMMENT '物流描述',`logistics_time` datetime NOT NULL COMMENT '物流時間',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',PRIMARY KEY (`id`),KEY `idx_order_id` (`order_id`),FOREIGN KEY (`order_id`) REFERENCES `order` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='物流信息表';
4 系統詳細設計與實現
4.1 前端設計與實現
基于 SpringBoot+VueJS 的助農生鮮銷售系統的前端采用 VueJS 框架實現,使用 ElementUI 組件庫提高開發效率。前端主要包括以下幾個模塊:
- 用戶界面模塊:包括首頁、商品列表頁、商品詳情頁、購物車頁、結算頁、訂單頁、個人中心頁等。
- 農戶界面模塊:包括農戶首頁、農產品管理頁、訂單管理頁、評價管理頁、個人中心頁等。
- 管理界面模塊:包括管理員首頁、用戶管理頁、農戶管理頁、農產品管理頁、訂單管理頁、數據分析頁等。
下面是前端部分核心代碼示例:
javascript
// 商品列表頁組件
<template><div class="product-list"><!-- 導航欄 --><el-header><el-row :gutter="20"><el-col :span="4"><div class="logo">助農生鮮</div></el-col><el-col :span="12"><el-inputv-model="searchKeyword"placeholder="請輸入搜索關鍵詞"suffix-icon="el-icon-search"@keyup.enter.native="search"><el-button slot="append" @click="search">搜索</el-button></el-input></el-col><el-col :span="8"><el-menumode="horizontal":default-active="activeIndex"@select="handleSelect"><el-menu-item index="1">首頁</el-menu-item><el-menu-item index="2"><i class="el-icon-shopping-cart"></i>購物車<span class="cart-count" v-if="cartCount > 0">{{ cartCount }}</span></el-menu-item><el-menu-item index="3"><i class="el-icon-user"></i><span v-if="userInfo.id">個人中心</span><span v-else>登錄/注冊</span></el-menu-item></el-menu></el-col></el-row></el-header><!-- 分類導航 --><el-row class="category-nav"><el-col :span="24"><el-menumode="horizontal":default-active="categoryId + ''"@select="handleCategorySelect"><el-menu-item index="0">全部商品</el-menu-item><el-menu-item v-for="category in categories" :key="category.id" :index="category.id + ''">{{ category.name }}</el-menu-item></el-menu></el-col></el-row><!-- 篩選條件 --><el-row class="filter-row"><el-col :span="24"><el-card class="filter-card"><el-form :inline="true" :model="filterForm"><el-form-item label="價格區間"><el-input v-model="filterForm.minPrice" placeholder="最低價" style="width: 80px;"></el-input><span class="separator">-</span><el-input v-model="filterForm.maxPrice" placeholder="最高價" style="width: 80px;"></el-input></el-form-item><el-form-item label="排序方式"><el-radio-group v-model="filterForm.sortType"><el-radio-button label="default">默認</el-radio-button><el-radio-button label="priceAsc">價格從低到高</el-radio-button><el-radio-button label="priceDesc">價格從高到低</el-radio-button><el-radio-button label="sales">銷量優先</el-radio-button><el-radio-button label="newest">最新上架</el-radio-button></el-radio-group></el-form-item><el-form-item><el-button type="primary" @click="search">篩選</el-button><el-button @click="resetFilter">重置</el-button></el-form-item></el-form></el-card></el-col></el-row><!-- 商品列表 --><el-row class="product-grid" :gutter="20"><el-col :span="6" v-for="product in products" :key="product.id"><el-card class="product-card"><div class="product-image"><img :src="product.mainImage" alt="商品圖片" @click="goToProductDetail(product.id)"></div><div class="product-info"><div class="product-name" @click="goToProductDetail(product.id)">{{ product.name }}</div><div class="product-price">¥{{ product.price }}</div><div class="product-sales">銷量: {{ product.salesVolume }}</div><div class="product-origin">產地: {{ product.origin }}</div></div><div class="product-actions"><el-button size="mini" @click="addToCart(product.id)">加入購物車</el-button></div></el-card></el-col></el-row><!-- 分頁 --><el-row class="pagination-row"><el-col :span="24"><el-pagination@size-change="handleSizeChange"@current-change="handleCurrentChange":current-page="currentPage":page-sizes="[12, 24, 36]":page-size="pageSize"layout="total, sizes, prev, pager, next, jumper":total="total"></el-pagination></el-col></el-row><!-- 頁腳 --><el-footer><div class="footer-content"><div class="footer-links"><a href="#">關于我們</a><a href="#">聯系我們</a><a href="#">幫助中心</a><a href="#">隱私政策</a></div><div class="footer-copyright">? 2023 助農生鮮銷售系統 版權所有</div></div></el-footer></div>
</template><script>
export default {data() {return {activeIndex: '1',userInfo: {},cartCount: 0,categories: [],categoryId: 0,searchKeyword: '',filterForm: {minPrice: '',maxPrice: '',sortType: 'default'},products: [],currentPage: 1,pageSize: 12,total: 0}},mounted() {this.getUserInfo();this.getCartCount();this.getCategories();this.loadProducts();},methods: {// 獲取用戶信息getUserInfo() {this.$axios.get('/api/user/info').then(response => {this.userInfo = response.data;}).catch(error => {console.error(error);});},// 獲取購物車數量getCartCount() {this.$axios.get('/api/cart/count').then(response => {this.cartCount = response.data;}).catch(error => {console.error(error);});},// 獲取商品分類getCategories() {this.$axios.get('/api/categories').then(response => {this.categories = response.data;}).catch(error => {console.error(error);});},// 加載商品列表loadProducts() {const params = {categoryId: this.categoryId,keyword: this.searchKeyword,minPrice: this.filterForm.minPrice,maxPrice: this.filterForm.maxPrice,sortType: this.filterForm.sortType,page: this.currentPage - 1,size: this.pageSize};this.$axios.get('/api/products', { params }).then(response => {this.products = response.data.content;this.total = response.data.totalElements;}).catch(error => {console.error(error);});},// 處理菜單選擇handleSelect(key) {this.activeIndex = key;if (key === '2') {this.$router.push('/cart');} else if (key === '3') {if (this.userInfo.id) {this.$router.push('/user');} else {this.$router.push('/login');}}},// 處理分類選擇handleCategorySelect(key) {this.categoryId = parseInt(key);this.currentPage = 1;this.loadProducts();},// 搜索商品search() {this.currentPage = 1;this.loadProducts();},// 重置篩選條件resetFilter() {this.filterForm = {minPrice: '',maxPrice: '',sortType: 'default'};this.search();},// 處理分頁大小變化handleSizeChange(size) {this.pageSize = size;this.loadProducts();},// 處理當前頁變化handleCurrentChange(page) {this.currentPage = page;this.loadProducts();},// 跳轉到商品詳情頁goToProductDetail(productId) {this.$router.push(`/product/${productId}`);},// 添加到購物車addToCart(productId) {if (!this.userInfo.id) {this.$message.info('請先登錄');this.$router.push('/login');return;}this.$axios.post(`/api/cart/add/${productId}`).then(response => {this.$message.success('添加成功');this.getCartCount();}).catch(error => {this.$message.error('添加失敗');console.error(error);});}}
}
</script><style scoped>
.product-list {min-height: 100vh;display: flex;flex-direction: column;
}.el-header {height: 80px !important;line-height: 80px !important;background-color: #fff;box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);padding: 0 40px;
}.logo {font-size: 24px;font-weight: bold;color: #409EFF;
}.category-nav {margin-top: 20px;
}.filter-row {margin-top: 20px;
}.filter-card {padding: 15px;
}.separator {margin: 0 5px;
}.product-grid {margin-top: 20px;padding: 0 40px;
}.product-card {height: 350px;display: flex;flex-direction: column;
}.product-image {height: 200px;overflow: hidden;
}.product-image img {width: 100%;height: 100%;object-fit: cover;transition: transform 0.3s;
}.product-image img:hover {transform: scale(1.05);
}.product-info {flex: 1;padding: 10px;display: flex;flex-direction: column;
}.product-name {font-size: 16px;font-weight: bold;margin-bottom: 5px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;
}.product-price {font-size: 18px;color: #f56c6c;margin-bottom: 5px;
}.product-sales {font-size: 14px;color: #999;margin-bottom: 5px;
}.product-origin {font-size: 14px;color: #999;
}.product-actions {padding: 10px;text-align: center;
}.pagination-row {margin-top: 20px;padding: 0 40px;text-align: center;
}.el-footer {margin-top: 40px;background-color: #f5f5f5;padding: 20px 0;text-align: center;
}.footer-links {margin-bottom: 10px;
}.footer-links a {margin: 0 10px;color: #666;
}.footer-copyright {color: #999;font-size: 14px;
}.cart-count {position: absolute;top: 15px;right: 15px;background-color: #f56c6c;color: #fff;border-radius: 50%;width: 18px;height: 18px;line-height: 18px;text-align: center;font-size: 12px;
}
</style>
4.2 后端設計與實現
基于 SpringBoot+VueJS 的助農生鮮銷售系統的后端采用 SpringBoot 框架實現,使用 Spring Security 實現用戶認證和授權,使用 MyBatis 實現數據持久化。后端主要包括以下幾個模塊:
- 用戶服務模塊:負責用戶的注冊、登錄、個人信息管理等功能。
- 農產品服務模塊:負責農產品信息的上傳、編輯、刪除等功能。
- 購物車服務模塊:負責購物車的管理,包括添加商品、修改數量、刪除商品等功能。
- 訂單服務模塊:負責訂單的創建、支付、發貨、收貨等功能。
- 支付服務模塊:負責訂單的支付和退款功能,支持多種支付方式。
- 物流服務模塊:負責訂單的物流狀態和物流信息的管理。
- 評價服務模塊:負責消費者對購買的農產品進行評價,以及農戶對評價的回復和管理。
- 農戶服務模塊:負責農戶信息的審核和管理。
- 數據分析服務模塊:負責對系統的運營數據進行分析。
下面是后端部分核心代碼示例:
java
// 訂單服務接口
public interface OrderService {/*** 創建訂單* @param userId 用戶ID* @param cartIds 購物車ID列表* @param addressId 收貨地址ID* @return 訂單信息*/Order createOrder(Long userId, List<Long> cartIds, Long addressId);/*** 獲取訂單列表* @param userId 用戶ID* @param status 訂單狀態* @param page 頁碼* @param size 每頁數量* @return 訂單列表*/Page<Order> getOrders(Long userId, Integer status, Integer page, Integer size);/*** 獲取訂單詳情* @param orderId 訂單ID* @return 訂單詳情*/OrderDetail getOrderDetail(Long orderId);/*** 支付訂單* @param orderId 訂單ID* @param paymentMethod 支付方式* @return 支付結果*/PaymentResult payOrder(Long orderId, Integer paymentMethod);/*** 取消訂單* @param orderId 訂單ID* @param reason 取消原因* @return 取消結果*/boolean cancelOrder(Long orderId, String reason);/*** 確認收貨* @param orderId 訂單ID* @return 確認結果*/boolean confirmReceipt(Long orderId);/*** 農戶發貨* @param orderId 訂單ID* @param logisticsCompany 物流公司* @param logisticsNo 物流單號* @return 發貨結果*/boolean shipOrder(Long orderId, String logisticsCompany, String logisticsNo);/*** 添加物流信息* @param orderId 訂單ID* @param status 物流狀態* @param description 物流描述* @return 添加結果*/boolean addLogisticsInfo(Long orderId, String status, String description);
}// 訂單服務實現類
@Service
public class OrderServiceImpl implements OrderService {@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate OrderDetailMapper orderDetailMapper;@Autowiredprivate CartService cartService;@Autowiredprivate ProductService productService;@Autowiredprivate UserAddressService userAddressService;@Autowiredprivate PaymentService paymentService;@Autowiredprivate LogisticsService logisticsService;@Overridepublic Order createOrder(Long userId, List<Long> cartIds, Long addressId) {// 獲取購物車商品List<Cart> carts = cartService.getCartsByIds(cartIds);if (carts == null || carts.isEmpty()) {throw new BusinessException("購物車為空");}// 獲取收貨地址UserAddress address = userAddressService.getAddressById(addressId);if (address == null) {throw new BusinessException("收貨地址不存在");}// 創建訂單Order order = new Order();order.setUserId(userId);order.setOrderNo(generateOrderNo());order.setReceiverName(address.getReceiverName());order.setReceiverPhone(address.getReceiverPhone());order.setReceiverAddress(address.getFullAddress());order.setStatus(OrderStatus.PENDING_PAYMENT.getCode());order.setCreateTime(new Date());// 計算訂單總金額BigDecimal totalAmount = BigDecimal.ZERO;List<OrderDetail> orderDetails = new ArrayList<>();for (Cart cart : carts) {Product product = productService.getProductById(cart.getProductId());if (product == null || product.getIsOnSale() == 0) {throw new BusinessException("商品不存在或已下架");}if (product.getStock() < cart.getQuantity()) {throw new BusinessException("商品庫存不足");}// 創建訂單詳情OrderDetail orderDetail = new OrderDetail();orderDetail.setOrderId(order.getId());orderDetail.setProductId(product.getId());orderDetail.setProductName(product.getName());orderDetail.setProductImage(product.getMainImage());orderDetail.setQuantity(cart.getQuantity());orderDetail.setPrice(product.getPrice());orderDetail.setCreateTime(new Date());orderDetails.add(orderDetail);// 計算總金額totalAmount = totalAmount.add(product.getPrice().multiply(new BigDecimal(cart.getQuantity())));// 扣減庫存productService.reduceStock(product.getId(), cart.getQuantity());}order.setTotalAmount(totalAmount);// 保存訂單orderMapper.insert(order);// 保存訂單詳情for (OrderDetail orderDetail : orderDetails) {orderDetail.setOrderId(order.getId());orderDetailMapper.insert(orderDetail);}// 刪除購物車商品cartService.deleteCarts(cartIds);return order;}@Overridepublic Page<Order> getOrders(Long userId, Integer status, Integer page, Integer size) {PageHelper.startPage(page, size);List<Order> orders = orderMapper.getOrdersByUserIdAndStatus(userId, status);return new PageInfo<>(orders).toPage();}@Overridepublic OrderDetail getOrderDetail(Long orderId) {OrderDetail orderDetail = orderDetailMapper.getOrderDetailByOrderId(orderId);if (orderDetail == null) {throw new BusinessException("訂單詳情不存在");}// 獲取物流信息List<Logistics> logisticsList = logisticsService.getLogisticsByOrderId(orderId);orderDetail.setLogisticsList(logisticsList);return orderDetail;}@Overridepublic PaymentResult payOrder(Long orderId, Integer paymentMethod) {Order order = orderMapper.selectByPrimaryKey(orderId);if (order == null) {throw new BusinessException("訂單不存在");}if (order.getStatus() != OrderStatus.PENDING_PAYMENT.getCode()) {throw new BusinessException("訂單狀態不正確");}// 調用支付服務進行支付PaymentResult result = paymentService.pay(orderId, order.getTotalAmount(), paymentMethod);if (result.isSuccess()) {// 更新訂單狀態order.setStatus(OrderStatus.PENDING_SHIPMENT.getCode());order.setPaymentMethod(paymentMethod);order.setPaymentStatus(PaymentStatus.PAID.getCode());order.setPaymentTime(new Date());orderMapper.updateByPrimaryKeySelective(order);}return result;}@Overridepublic boolean cancelOrder(Long orderId, String reason) {Order order = orderMapper.selectByPrimaryKey(orderId);if (order == null) {throw new BusinessException("訂單不存在");}if (order.getStatus() != OrderStatus.PENDING_PAYMENT.getCode() && order.getStatus() != OrderStatus.PENDING_SHIPMENT.getCode()) {throw new BusinessException("訂單狀態不正確,無法取消");}// 更新訂單狀態order.setStatus(OrderStatus.CANCELED.getCode());order.setCancelReason(reason);order.setCancelTime(new Date());int result = orderMapper.updateByPrimaryKeySelective(order);// 如果訂單已支付,需要退款if (order.getPaymentStatus() == PaymentStatus.PAID.getCode()) {paymentService.refund(orderId, order.getTotalAmount());}// 如果訂單已發貨,需要恢復庫存if (order.getStatus() == OrderStatus.SHIPPED.getCode()) {List<OrderDetail> orderDetails = orderDetailMapper.getOrderDetailsByOrderId(orderId);for (OrderDetail orderDetail : orderDetails) {productService.increaseStock(orderDetail.getProductId(), orderDetail.getQuantity());}}return result > 0;}@Overridepublic boolean confirmReceipt(Long orderId) {Order order = orderMapper.selectByPrimaryKey(orderId);if (order == null) {throw new BusinessException("訂單不存在");}if (order.getStatus() != OrderStatus.SHIPPED.getCode()) {throw new BusinessException("訂單狀態不正確,無法確認收貨");}// 更新訂單狀態order.setStatus(OrderStatus.COMPLETED.getCode());order.setReceiveTime(new Date());int result = orderMapper.updateByPrimaryKeySelective(order);return result > 0;}@Overridepublic boolean shipOrder(Long orderId, String logisticsCompany, String logisticsNo) {Order order = orderMapper.selectByPrimaryKey(orderId);if (order == null) {throw new BusinessException("訂單不存在");}if (order.getStatus() != OrderStatus.PENDING_SHIPMENT.getCode()) {throw new BusinessException("訂單狀態不正確,無法發貨");}// 更新訂單狀態order.setStatus(OrderStatus.SHIPPED.getCode());order.setLogisticsCompany(logisticsCompany);order.setLogisticsNo(logisticsNo);order.setShippingTime(new Date());int result = orderMapper.updateByPrimaryKeySelective(order);// 添加物流信息logisticsService.addLogisticsInfo(orderId, "已發貨", "商品已發出,正在運輸中");return result > 0;}@Overridepublic boolean addLogisticsInfo(Long orderId, String status, String description) {Order order = orderMapper.selectByPrimaryKey(orderId);if (order == null) {throw new BusinessException("訂單不存在");}if (order.getStatus() != OrderStatus.SHIPPED.getCode()) {throw new BusinessException("訂單狀態不正確,無法添加物流信息");}// 添加物流信息Logistics logistics = new Logistics();logistics.setOrderId(orderId);logistics.setStatus(status);logistics.setDescription(description);logistics.setLogisticsTime(new Date());logistics.setCreateTime(new Date());return logisticsService.addLogistics(logistics);}/*** 生成訂單號* @return 訂單號*/private String generateOrderNo() {// 生成規則:年月日時分秒+隨機數SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");String dateStr = sdf.format(new Date());String randomStr = String.format("%04d", new Random().nextInt(10000));return dateStr + randomStr;}
}
4.3 系統部署設計
基于 SpringBoot+VueJS 的助農生鮮銷售系統的部署設計采用 Docker 容器化技術和 Kubernetes 編排工具,主要包括以下幾個部分:
- 前端部署:將前端代碼打包成 Docker 鏡像,部署到 Kubernetes 集群中。
- 后端服務部署:將后端各個微服務打包成 Docker 鏡像,部署到 Kubernetes 集群中。
- 數據庫部署:使用 Docker 容器部署 MySQL 數據庫,使用 Persistent Volume Claim 確保數據持久化。
- 緩存部署:使用 Docker 容器部署 Redis 緩存,提高系統的響應速度。
- 消息隊列部署:使用 Docker 容器部署 RabbitMQ 消息隊列,實現系統間的異步通信。
- 負載均衡部署:使用 Nginx 作為負載均衡器,分發用戶請求。
- 監控系統部署:部署 Prometheus 和 Grafana 監控系統,監控系統的運行狀態。
系統部署圖如下所示:
5 系統測試與優化
5.1 系統測試
為了驗證基于 SpringBoot+VueJS 的助農生鮮銷售系統的功能和性能,進行了以下測試:
- 功能測試:對系統的各項功能進行測試,包括用戶注冊、登錄、農產品瀏覽、購物車管理、訂單創建、支付、物流跟蹤、評價等功能,確保功能正常運行。
- 性能測試:使用 JMeter 工具對系統的性能進行測試,模擬大量用戶并發訪問,測試系統的響應時間、吞吐量等性能指標。
- 安全測試:對系統的安全性進行測試,包括用戶信息安全、數據傳輸安全、支付安全等方面,確保系統的安全性。
- 兼容性測試:對系統在不同瀏覽器、不同設備上的兼容性進行測試,確保系統在各種環境下都能正常運行。
5.2 系統優化
在系統測試過程中,發現了一些性能瓶頸和問題,進行了以下優化:
- 數據庫優化:對數據庫進行索引優化、查詢優化,提高數據庫的查詢性能。
- 緩存優化:使用 Redis 緩存熱門數據,減少數據庫訪問壓力。
- 代碼優化:對系統的代碼進行優化,提高代碼的執行效率。
- 分布式部署:將系統部署到多臺服務器上,實現負載均衡,提高系統的并發處理能力。
- 異步處理:使用 RabbitMQ 消息隊列實現異步處理,提高系統的響應速度。
- 圖片優化:對系統中的圖片進行壓縮和優化,減少圖片加載時間。
6 結論與展望
6.1 研究成果總結
本論文設計并實現了一個基于 SpringBoot 和 VueJS 的助農生鮮銷售系統。系統采用前后端分離架構,前端使用 VueJS 框架實現用戶界面,后端使用 SpringBoot 框架構建服務,通過 MyBatis 實現數據持久化。系統實現了農產品展示、在線購物、訂單管理、支付結算、物流跟蹤、農戶管理等功能,為農戶和消費者之間搭建了一個便捷的生鮮銷售平臺。實驗結果表明,該系統能夠有效解決農產品銷售難的問題,提高農戶收入,促進農村經濟發展。
6.2 研究不足與展望
本論文的研究工作雖然取得了一定的成果,但仍存在一些不足之處:
- 系統的推薦算法還可以進一步優化,提高推薦的準確性和個性化程度。
- 系統的物流配送模塊還可以進一步完善,提高物流配送效率和服務質量。
- 系統的移動端體驗還可以進一步優化,提高用戶在移動設備上的使用體驗。
- 系統的國際化支持還可以進一步加強,拓展國際市場。
未來的研究工作將主要集中在以下幾個方面:
- 引入人工智能算法,優化系統的推薦算法,提高推薦的準確性和個性化程度。
- 加強與物流企業的合作,完善系統的物流配送模塊,提高物流配送效率和服務質量。
- 進一步優化系統的移動端體驗,開發專門的移動應用,提高用戶在移動設備上的使用體驗。
- 加強系統的國際化支持,支持多語言、多貨幣,拓展國際市場。
- 引入區塊鏈技術,提高農產品溯源的可信度和透明度。
通過以上研究工作的開展,相信基于 SpringBoot+VueJS 的助農生鮮銷售系統將能夠更好地滿足農戶和消費者的需求,為農村經濟發展做出更大的貢獻。
參考文獻
??? 博主介紹:碩士研究生,專注于信息化技術領域開發與管理,會使用java、標準c/c++等開發語言,以及畢業項目實戰?
?????? 從事基于java BS架構、CS架構、c/c++ 編程工作近16年,擁有近12年的管理工作經驗,擁有較豐富的技術架構思想、較扎實的技術功底和資深的項目管理經驗。
?????? 先后擔任過技術總監、部門經理、項目經理、開發組長、java高級工程師及c++工程師等職位,在工業互聯網、國家標識解析體系、物聯網、分布式集群架構、大數據通道處理、接口開發、遠程教育、辦公OA、財務軟件(工資、記賬、決策、分析、報表統計等方面)、企業內部管理軟件(ERP、CRM等)、arggis地圖等信息化建設領域有較豐富的實戰工作經驗;擁有BS分布式架構集群、數據庫負載集群架構、大數據存儲集群架構,以及高并發分布式集群架構的設計、開發和部署實戰經驗;擁有大并發訪問、大數據存儲、即時消息等瓶頸解決方案和實戰經驗。
?????? 擁有產品研發和發明專利申請相關工作經驗,完成發明專利構思、設計、編寫、申請等工作,并獲得發明專利1枚。
-----------------------------------------------------------------------------------
????? 大家在畢設選題、項目升級、論文寫作,就業畢業等相關問題都可以給我留言咨詢,非常樂意幫助更多的人或加w 908925859。
相關博客地址:
csdn專業技術博客:https://blog.csdn.net/mr_lili_1986?type=blog
Iteye博客:??????? https://www.iteye.com/blog/user/mr-lili-1986-163-com
門戶:http://www.petsqi.cn
七、其他案例:?
?
??
?