基于SpringBoot+微信小程序的农产品销售平台

news2024/7/4 4:37:47

基于SpringBoot+微信小程序的农产品销售平台

✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌

🍅文末获取项目下载方式🍅


一、项目背景介绍:

随着人们收入的不断增加、生活水平的普遍提高,对生活质量的要求也日益凸显。而作为关乎每个人的生命、健康安全的食品卫生、质量无疑更被人们所重视。所以,…
2.
其他国家的绿色有机食品所占其国家食品市场比重比较大,如德国在99年便已达到40%,美国24%,日本30%,而中国当时还不足1%,显然差距很大。中国…
3.
就目前国内市场上的各种农产品市场情况来看,为广大消费者提供服务的,大部分是农副产品市场,而其中都是多个商贩分散经营这样一来,很多对农副产品卫.

二、项目技术简介:

  1. JAVA:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
  2. Vue:Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的JavaScript框架。它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,帮助开发者高效地开发用户界面。
    Vue是一个独立的社区驱动的项目,它是由尤雨溪在2014年作为其个人项目创建, 是一个成熟的、经历了无数实战考验的框架,它是目前生产环境中使用最广泛的JavaScript框架之一,可以轻松处理大多数web应用的场景,并且几乎不需要手动优化,并且Vue完全有能力处理大规模的应用。
  3. Element-UI:Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库。
  4. SpringBoot:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
  5. Mybatis-Plus:MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为 简化开发、提高效率而生。
  6. smart:微信小程序,小程序的一种,英文名Wechat Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用。
    全面开放申请后,主体类型为企业、政府、媒体、其他组织或个人的开发者,均可申请注册小程序。微信小程序、微信订阅号、微信服务号、微信企业号是并行的体系。

    微信小程序是一种不用下载就能使用的应用,也是一项创新,经过将近两年的发展,已经构造了新的微信小程序开发环境和开发者生态。微信小程序也是这么多年来中国IT行业里一个真正能够影响到普通程序员的创新成果,已经有超过150万的开发者加入到了微信小程序的开发,与我们一起共同发力推动微信小程序的发展,微信小程序应用数量超过了一百万,覆盖200多个细分的行业,日活用户达到两个亿,微信小程序还在许多城市实现了支持地铁、公交服务。微信小程序发展带来更多的就业机会,2017年小程序带动就业104万人,社会效应不断提升。

三、系统功能模块介绍:

功能模块图

四、数据库设计:

1:‘管理员’(admins)

字段名类型默认值列注释
idbigintNULL主键ID
user_namevarcharNULL用户名(select)
pass_wordvarcharNULL密码
head_imgvarcharNULL头像(img)
nick_namevarcharNULL姓名
create_timedatetimeNULL创建时间

2:‘购物车表’(cart)

字段名类型默认值列注释
idbigintNULL主键ID
user_idbigintNULL用户ID
farm_idbigintNULL农产品ID
numintNULL数量
create_timedatetimeNULL创建时间

3:‘农产品信息表’(farm)

字段名类型默认值列注释
idbigintNULL农产品ID
namevarcharNULL农产品名称
infotextNULL简介
unitvarcharNULL单位
pricevarcharNULL单价
detailtextNULL详细信息
create_timedatetimeNULL创建时间
img_urlvarcharNULL展示大图
type_idbigintNULL分类ID
is_indexintNULL首页推荐[0:是,1:否]
bannerintNULL轮播[0:是,1:否]

4:‘农产品详情图片表’(farm_imgs)

字段名类型默认值列注释
idbigintNULL主键ID
img_urlvarcharNULL图片链接
farm_idbigintNULL农产品ID

5:‘订单详情表’(order_detail)

字段名类型默认值列注释
idbigintNULL主键ID
farm_idbigintNULL农产品ID
numintNULL数量
order_idbigintNULL订单ID
create_timedatetimeNULL创建时间

6:‘订单表’(orders)

字段名类型默认值列注释
idbigintNULL主键ID
order_novarcharNULL订单编号
create_timedatetimeNULL创建时间
total_pricevarcharNULL总价
statusintNULL订单状态[0:代付款,1:待发货,2:已发货,3:已完成,4:已退单]
user_idbigintNULL用户ID
addressvarcharNULL收货地址

7:‘农产品分类表’(type)

字段名类型默认值列注释
idbigintNULL主键ID
type_namevarcharNULL分类名称
create_timedatetimeNULL创建时间

8:‘用户收藏表’(user_collect)

字段名类型默认值列注释
idbigintNULL主键ID
farm_idbigintNULL农产品ID
user_idbigintNULL用户ID
create_timedatetimeNULL

9:‘用户表’(users)

字段名类型默认值列注释
idbigintNULL主键ID
user_namevarcharNULL用户名
pass_wordvarcharNULL密码
addressvarcharNULL收货地址
nick_namevarcharNULL昵称
head_imgvarcharNULL头像
create_timedatetimeNULL创建时间

五、功能模块:

  1. 小程序首页:轮播图,产品推荐,协同过滤,后台设置

    小程序首页

  2. 农产品分类:关键词模糊搜索,分类搜索

    农产品分类

  3. 农产品详情:详细信息,添加至购物车

    农产品详情

  4. 用户购物车:农产品购买

    用户购物车

  5. 个人中心:个人信息,历史订单

    个人中心

  6. 后台管理:用户管理,管理员管理,农产品管理,订单管理,商品分类管理,轮播图设置

    后台管理

六、代码示例:

小程序首页
async getBanner() {
				let res = await homeApi.getBanner()
				this.bannerList = res.data
				let arr = res.data
				if (arr && arr.length > 0) {
					let arr1 = []
					for (let i in arr) {
						arr1.push(arr[i].imgUrl)
					}
					this.bannerImgList = arr1
				}
				console.log("页面home中方法getBanner(获取首页轮播图)返回结果为:", res.data)
			},
			click(e) {
				console.log(this.bannerList[e])
				uni.navigateTo({
					url: "/pages/detail/detail?framId=" + this.bannerList[e].id
				})
			},
			async getIndexData() {
				let res = await homeApi.getIndexData()
				this.indexList = res.data
				console.log("页面home中方法getIndexData(获取首页推荐)返回结果为:", res.data)
			},
农产品分类
getDataList() {
				console.log(this.pageSize)
				let param = {}
				param.current = this.pageNum
				param.pageSize = this.pageSize
				param.typeId = this.typeId
				param.name = this.keyword
				this.farmPage(param)
			},
			typeClick(item) {
				this.typeId = this.typeList[item.index].key
				this.pageNum = 1
				this.getDataList()
			},
			searchClick() {
				this.pageNum = 1
				this.getDataList()
			},
			async getAllType() {
				let res = await typeApi.getAllType()
				this.typeList = res.data
				let arr = res.data
				if (arr && arr.length > 0) {
					this.typeId = arr[0].key
					let arr1 = []
					for (let i in arr) {
						arr1.push({
							name: arr[i].value
						})
					}
					this.typeNameList = arr1
				}
				this.getDataList()
				console.log("页面type中方法getAllType(获取所有分类)返回结果为:", res.data)
			},
			async farmPage(param) {
				let res = await typeApi.farmPage(param)
				if (this.pageNum == 1) {
					this.itemList = res.data.records
				} else {
					this.itemList = [...this.itemList, ...res.data.records]
				}
				this.totalPage = res.data.pages
				console.log("====", res.data)
			}
农产品详情
async addOrder() {
				if (!this.isLogin) {
					Util.showMyToast("尚未登录")
					uni.navigateTo({
						url: '/pages/login/login'
					})
					return
				}
				if (!this.userInfo.address) {
					Util.showMyToast("请前往个人中心完善收货地址")
					return
				}
				let param = {}
				param.totalPrice = this.detail.price
				param.status = 0
				param.userId = this.userInfo.id
				param.address = this.userInfo.address
				let res = await orderApi.ordersSaveUpdate(param)
				let id = res.data.id
				let orderDetail = {}
				orderDetail.farmId = this.farmId
				orderDetail.num = 1
				orderDetail.orderId = id
				let res1 = orderApi.orderDetailSaveUpdate(orderDetail)
				Util.showMyToast("添加订单成功!")
			},
用户购物车
async addCard() {
				if (!this.isLogin) {
					Util.showMyToast("尚未登录")
					uni.navigateTo({
						url: '/pages/login/login'
					})
					return
				}
				let param = {}
				param.userId = this.userInfo.id
				param.farmId = this.farmId
				param.num = 1
				let res = cartApi.cartSaveUpdate(param)
				Util.showMyToast("添加购物车成功!")
			},
个人中心
async submit() {
				if (this.userInfo.passWord) {
					if (!this.userInfo.nextPassword) {
						Util.showMyToast("请第二次输入密码")
						return
					}
					if (this.userInfo.nextPassword != this.userInfo.passWord) {
						Util.showMyToast("两次密码不一致")
						return
					}
				}
				let param = {}
				param.id = this.userInfo.id
				param.nickName = this.userInfo.nickName
				if (this.userInfo.passWord) {
					param.passWord = this.userInfo.passWord
				}
				param.address = this.userInfo.address
				let res = mineApi.userSaveUpdate(param)
				app.globalData.userInfo = this.userInfo
				Util.showMyToast("修改成功")
				uni.navigateTo({
					url: '/pages/mine/mine'
				})
			}
后台管理
  @GetMapping("/banner")
    public ReturnMsg getBanner() {
        LambdaQueryWrapper<FarmDTO> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(FarmDTO::getBanner, 0);
        return ReturnMsg.ok(baseService.list(queryWrapper));
    }

    @GetMapping("/index")
    public ReturnMsg getIndexData() {
        LambdaQueryWrapper<FarmDTO> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(FarmDTO::getIsIndex, 0);
        return ReturnMsg.ok(baseService.list(queryWrapper));
    }

七、项目总结:

农产品销售平台的开发制作,从题目确定到成品完成,自己投入的精力与心血是非常多的。从农产品销售平台的前台页面实现,到农产品销售平台的后台代码的编辑,我用到的软件包括了数据库软件MySQL,Java开发工具IDEA,办公软件Office,浏览器软件Fireworks,图像处理软件Photoshop等,这也是我第一次使用Java语言,开发的这个比较简单的农产品销售平台。

 农产品销售平台开发过程中,自己之前觉得比较抽象的许多门课程,例如数据库原理,软件工程,动态网站开发等课程开始变得很清晰,只有自己独立开发程序,才会觉得这些开发类的课程在实践中具有的重要作用。为了让自己设计的作品能够顺利的完成,我把所学知识全部运用在程序的开发流程中,包括了程序的需求分析环节,程序的编码环节,程序的测试环节等,让程序软件在开发周期内完成制作,并能够保证程序质量达标,力求程序开发流程规范化,程序对应的配套文档标准化。

    本次开发的系统整体界面还是比较清晰简明,功能上面考虑得比较全,几乎可以满足用户使用要求。尽管我对这次的毕设付出了许多的努力,但是程序还是有很多不足的地方,系统界面整体感觉还行,但是字体字号的选取上面还是有些不符合现实审美,在程序的CSS样式编码上面,我还有许多不熟悉的地方,虽然经过反复的测试与调试选中了现在这样的程序界面,但是我还是明显感觉到自己对一些常用CSS样式的不熟悉,编码过程中,我还要多次进行资料查看才知道。另外我编写的代码写作不是很规范,可读性比较差,幸运的是,我最终还是实现了系统中所要求的功能。

八、源码获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取联系方式👇🏻👇🏻👇🏻

链接点击直达:下载链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/517324.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Test Doubles测试替身: Testing in Distributed Systems and Real World

什么是Test Doubles In software testing, we developed unit tests and integration tests to test the codes functionality. However, in the real world, it is very common for a piece of code to interact with external components, for example, databases, public A…

【人工智能概论】pyplot作图中文显示、逐点坐标显示、保存图像

【人工智能概论】pyplot作图中文显示、逐点标记、保存图像 文章目录 【人工智能概论】pyplot作图中文显示、逐点标记、保存图像一. 简单的绘图二. 逐点坐标显示三. 中文显示四. 中文显示可能遇到的问题——缺少字体4.1 下载 SimHei.ttf4.2 复制 SimHei.ttf 到 Matplotlib 的 fo…

好的Robots.txt设计对Google收录有很大的帮助

Robots.txt 文件是用于指导搜索引擎爬虫在网站上爬行的标准。正确地设计 Robots.txt 文件可以帮助 Google 爬虫更好地理解您的网站结构&#xff0c;从而提高您的网站在 Google 搜索引擎上的收录率。 以下是一些设计 Robots.txt 文件的技巧&#xff0c;可以帮助 Google 爬虫更好…

security 报错:There is no PasswordEncoder mapped for the id “null“

security在登录的时候 无法登录成功 首先解读错误 下面百度翻译 安全框架设置了登录验证 说你没有密码编辑器 解决方法 一: 往容器中注册一个PasswordEncoder 解决方法二: 设置用户权限和角色的时候添加方法,加进去一个PasswordEncoder 只需要解决方案的话 下面的内容…

K8S系列之污点和容忍度详细分析

架构图 本篇文档主要介绍污点和容忍度的关系。 污点和容忍度 污点顾名思义就是脏的东西&#xff0c;给节点添加污点来限制pod调度到该节点上&#xff0c;如果pod可以容忍这种污点就可以被调度到有污点的节点上&#xff0c;如果不能容忍就不能被调度到该节点上。 污点作用于节…

排队领奖模式吸引新消费者,电商平台如何创新引流拓客?

在当前的电商市场中&#xff0c;由于竞争日趋激烈&#xff0c;很多电商平台产生了引流拓客缺乏新意的难题&#xff0c;即很难找到新的流量&#xff0c;并且难以把这些流量转化为消费者。在这个瞬息万变的时代&#xff0c;当然是谁有创意谁能吸引消费者&#xff0c;谁才能当道。…

Sequence-to-Sequence Knowledge Graph Completion and Question Answering

[2203.10321] Sequence-to-Sequence Knowledge Graph Completion and Question Answering (arxiv.org) 目录 1 Abstract 2 Introduction 3 KGT5 Model 3.1 Textual Representations & Verbalization 3.2 Training KGT5 for Link Prediction 3.3 Link Prediction Inf…

Inception Network

文章目录 一、Inception Network简介二、CNN的痛点三、Inception Network1. 1x1卷积核1.1 升维/降维&#xff1a;1.2. 调节参数数量&#xff1a;1.3. 增加非线性特性&#xff1a; 2. Inception原始模型3. Inception Module4. Inception Network 四、代码示例 一、Inception Net…

接口自动化测试 vs. UI自动化测试:为什么前者更快,更省力,更稳定?

从入门到精通&#xff01;企业级接口自动化测试实战&#xff0c;详细教学&#xff01;&#xff08;自学必备视频&#xff09; 目录 前言&#xff1a; 一、什么是接口自动化测试和 UI 自动化测试 二、为什么接口自动化测试效率比 UI 自动化测试高 1.执行速度 2.维护成本 3.…

AI人工智能与机器人的探索和应用1.1

文章来源于&#xff1a;https://mp.weixin.qq.com/s/fqivYVdakVKG-zDVfD4Qzg 研究机器人和人工智能的技术已有多年了&#xff0c;想来想去&#xff0c;觉得还是有必要对过往的技术做一些凝练和总结。在此过程中&#xff0c;除了能够将知识系统化&#xff0c;构建自己的知识体系…

三次输错密码后,系统是怎么做到不让我继续尝试的?

故事背景 忘记密码这件事&#xff0c;相信绝大多数人都遇到过&#xff0c;输一次错一次&#xff0c;错到几次以上&#xff0c;就不允许你继续尝试了。 但当你尝试重置密码&#xff0c;又发现新密码不能和原密码重复&#xff1a; 相信此刻心情只能用一张图形容&#xff1a; 虽…

python二次加工标准类型 | 包装与授权

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

洽洽离年轻人更近了,陈先保离百亿KPI呢?

文|螳螂观察 作者|图霖 留给陈先保实现百亿营收的时间不多了。 过去几年&#xff0c;洽洽凭借着在产品端、市场端、供应端的绝对实力&#xff0c;守住了休闲零食行业龙头的地位。但最新发布的2023年第一季度业绩报告&#xff0c;却出现了6年来首次营收、净利双双下降。 报告…

Excel大数据量单元格快速填充

个人简介&#xff1a;一个从会计转行数据分析师的三旬老汉 擅长领域&#xff1a;数据分析、数据仓库、大数据 博客内容&#xff1a;平时会将自己工作中遇到的问题进行归纳总结&#xff0c;分享给各位小伙伴&#xff0c;意在帮助大家少加班、不掉发&#xff0c;让我们相互学习&a…

const/static修饰成员函数+初始化列表

一、const修饰成员函数 首先&#xff0c;我们知道&#xff0c;所有的成员函数&#xff08;除static修饰的&#xff09;&#xff0c;编译器都会隐式传递一个this指针。 它的默认类型为 Type* const this&#xff0c;即this指针只能指向最左边的第一个传入的对象。 const修饰成…

Docker容器体系结构及特点

Docker容器体系结构及特点 Docker是一个应用容器引擎&#xff0c;通过Docker&#xff0c;管理员可以非常方便地对容器进行管理。Docker基于Go语言开发&#xff0c;并且遵从Apache 2.0开源协议。 Docker提供了对容器镜像的打包封装功能。利用Docker&#xff0c;开发者可以将他…

2023 最新版IntelliJ IDEA 2023.1创建Java Web 项目详细步骤(图文详解)

文章目录 &#x1f9ed; 版本情况JavaIDEATomcatmaven &#x1f30f; 创建步骤&#x1f697; 1、依次点击File >> New >> Project&#x1f693; 2、选择New Project 输入自己的项目名&#xff0c;选择JDK版本&#xff0c;而后点击create进行创建&#x1f695; 3、鼠…

开新能源汽车有充电焦虑吗?2022年国内充电桩数量已达521万台

哈喽大家好&#xff0c;新能源汽车的不断普及使充电桩市场快速发展起来&#xff0c;同时充电桩的技术正在不断改进&#xff0c;包括充电速度、安全性、互联网功能等多个方面。相比与日渐壮大的新能源汽车用户规模&#xff0c;充电桩的建设相对发展速度较慢&#xff0c;近几年来…

网络编程代码实例:守护进程版

文章目录 前言代码仓库内容目录结构代码结果总结参考资料作者的话 前言 网络编程代码实例&#xff1a;守护进程版。 代码仓库 yezhening/Environment-and-network-programming-examples: 环境和网络编程实例 (github.com)Environment-and-network-programming-examples: 环境…

XShell配置以及使用教程

目录 1、XShell介绍 2、安装XShell 1. 双击运行XShell安装文件&#xff0c;并点击“下一步” 2. 点击“我接受许可证协议中的条款”&#xff0c;点击“下一步” 3. 点击“浏览”更改默认安装路径&#xff0c;点击“下一步” 4. 直接点击“安装” 5. 安装完成&#xff0…