摘要
本论文设计并实现了一个基于 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
七、其他案例: