Java项目-基于springboot框架的线上买菜系统项目实战(附源码+文档)
作者:计算机学长阿伟
开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。
开发运行环境
- 开发语言:Java
- 数据库:MySQL
- 技术:SpringBoot、Vue、Mybaits Plus、ELementUI
- 工具:IDEA/Ecilpse、Navicat、Maven
源码下载地址:
https://download.csdn.net/download/weixin_53180424/89909211
一、项目简介
本项目是一个线上买菜系统,旨在为用户提供便捷的在线买菜体验。系统通过清晰的导航栏设计,使用户能够快速找到所需的功能区域。导航栏从左到右依次包括“首页”、“商品信息”、“公告信息”、“个人中心”、“后台管理”和“购物车”等选项。用户可以在“首页”浏览推荐菜品和优惠活动;在“商品信息”中查找各类食材的详细信息;通过“公告信息”了解最新优惠和活动通知;在“个人中心”管理个人信息和订单;而“后台管理”则专为管理员设计,用于监控和管理整个系统的运营状态。此外,“购物车”功能方便用户将选购的商品进行结算。整个系统设计简洁明了,功能全面,为用户提供了高效、便捷的在线买菜服务。
二、系统项目部分截图
2.1后台系统部分页面效果
2.2前台系统部分页面效果
三、部分核心代码
package com.controller;import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;import com.entity.AddressEntity;
import com.entity.view.AddressView;import com.service.AddressService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
import java.io.IOException;/*** 地址* 后端接口*/
@RestController
@RequestMapping("/address")
public class AddressController {@Autowiredprivate AddressService addressService;/*** 后端列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params,AddressEntity address,HttpServletRequest request){if(!request.getSession().getAttribute("role").toString().equals("管理员")) {address.setUserid((Long)request.getSession().getAttribute("userId"));}EntityWrapper<AddressEntity> ew = new EntityWrapper<AddressEntity>();PageUtils page = addressService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, address), params), params));return R.ok().put("data", page);}/*** 前端列表*/@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params,AddressEntity address, HttpServletRequest request){if(!request.getSession().getAttribute("role").toString().equals("管理员")) {address.setUserid((Long)request.getSession().getAttribute("userId"));}EntityWrapper<AddressEntity> ew = new EntityWrapper<AddressEntity>();PageUtils page = addressService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, address), params), params));return R.ok().put("data", page);}/*** 列表*/@RequestMapping("/lists")public R list( AddressEntity address){EntityWrapper<AddressEntity> ew = new EntityWrapper<AddressEntity>();ew.allEq(MPUtil.allEQMapPre( address, "address")); return R.ok().put("data", addressService.selectListView(ew));}/*** 查询*/@RequestMapping("/query")public R query(AddressEntity address){EntityWrapper< AddressEntity> ew = new EntityWrapper< AddressEntity>();ew.allEq(MPUtil.allEQMapPre( address, "address")); AddressView addressView = addressService.selectView(ew);return R.ok("查询地址成功").put("data", addressView);}/*** 后端详情*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") Long id){AddressEntity address = addressService.selectById(id);return R.ok().put("data", address);}/*** 前端详情*/@IgnoreAuth@RequestMapping("/detail/{id}")public R detail(@PathVariable("id") Long id){AddressEntity address = addressService.selectById(id);return R.ok().put("data", address);}/*** 后端保存*/@RequestMapping("/save")public R save(@RequestBody AddressEntity address, HttpServletRequest request){address.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(address);address.setUserid((Long)request.getSession().getAttribute("userId"));Long userId = (Long)request.getSession().getAttribute("userId");if(address.getIsdefault().equals("是")) {addressService.updateForSet("isdefault='否'", new EntityWrapper<AddressEntity>().eq("userid", userId));}address.setUserid(userId);addressService.insert(address);return R.ok();}/*** 前端保存*/@RequestMapping("/add")public R add(@RequestBody AddressEntity address, HttpServletRequest request){address.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(address);address.setUserid((Long)request.getSession().getAttribute("userId"));Long userId = (Long)request.getSession().getAttribute("userId");if(address.getIsdefault().equals("是")) {addressService.updateForSet("isdefault='否'", new EntityWrapper<AddressEntity>().eq("userid", userId));}address.setUserid(userId);addressService.insert(address);return R.ok();}/*** 修改*/@RequestMapping("/update")@Transactionalpublic R update(@RequestBody AddressEntity address, HttpServletRequest request){//ValidatorUtils.validateEntity(address);if(address.getIsdefault().equals("是")) {addressService.updateForSet("isdefault='否'", new EntityWrapper<AddressEntity>().eq("userid", request.getSession().getAttribute("userId")));}addressService.updateById(address);//全部更新return R.ok();}/*** 获取默认地址*/@RequestMapping("/default")public R defaultAddress(HttpServletRequest request){Wrapper<AddressEntity> wrapper = new EntityWrapper<AddressEntity>().eq("isdefault", "是").eq("userid", request.getSession().getAttribute("userId"));AddressEntity address = addressService.selectOne(wrapper);return R.ok().put("data", address);}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Long[] ids){addressService.deleteBatchIds(Arrays.asList(ids));return R.ok();}/*** 提醒接口*/@RequestMapping("/remind/{columnName}/{type}")public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, @PathVariable("type") String type,@RequestParam Map<String, Object> map) {map.put("column", columnName);map.put("type", type);if(type.equals("2")) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Calendar c = Calendar.getInstance();Date remindStartDate = null;Date remindEndDate = null;if(map.get("remindstart")!=null) {Integer remindStart = Integer.parseInt(map.get("remindstart").toString());c.setTime(new Date()); c.add(Calendar.DAY_OF_MONTH,remindStart);remindStartDate = c.getTime();map.put("remindstart", sdf.format(remindStartDate));}if(map.get("remindend")!=null) {Integer remindEnd = Integer.parseInt(map.get("remindend").toString());c.setTime(new Date());c.add(Calendar.DAY_OF_MONTH,remindEnd);remindEndDate = c.getTime();map.put("remindend", sdf.format(remindEndDate));}}Wrapper<AddressEntity> wrapper = new EntityWrapper<AddressEntity>();if(map.get("remindstart")!=null) {wrapper.ge(columnName, map.get("remindstart"));}if(map.get("remindend")!=null) {wrapper.le(columnName, map.get("remindend"));}if(!request.getSession().getAttribute("role").toString().equals("管理员")) {wrapper.eq("userid", (Long)request.getSession().getAttribute("userId"));}int count = addressService.selectCount(wrapper);return R.ok().put("count", count);}}
获取源码或文档
如需对应的论文或文档,以及其他定制需求,也可以下方添加联系我。
相关文章:

Java项目-基于springboot框架的线上买菜系统项目实战(附源码+文档)
作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…...
API接口的未来趋势:智能化、自动化与集成化的发展
在当今数字化驱动的世界中,应用程序编程接口(API)已成为连接不同软件、平台和服务的关键桥梁。随着技术的不断进步,API接口的未来趋势将聚焦于智能化、自动化与集成化的发展。本文将深入探讨这些趋势,并分析其在推动数…...

Yolo系列 V1和V2的对比
在计算机视觉领域中,目标检测是一个核心问题,旨在识别图像中所有感兴趣的目标,并给出它们的类别和位置。近年来,随着深度学习技术的发展,目标检测领域取得了巨大的进步。Yolo(You Only Look Once࿰…...

安装vue发生异常: idealTree:nodejs: sill idealTree buildDeps
一、异常 C:\>npm install vue -g npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIREDnpm ERR! request to https://registry.npm.taobao.org/vue failed, reason: certificate has expired 二、原因 请求 https://registry.npm.taobao.org 失败,证…...

SQL基础练习
SQL语句的下载脚本链接!!! 【免费】SQL练习资源-具体练习操作可以查看我发布的文章资源-CSDN文库https://download.csdn.net/download/Z0412_J0103/89908378 1 查看所有数据库 SHOW DATABASES; 结果展示: 2 创建库 方法一&#…...

Python 如何处理大规模数据库表的迁移与数据迁移的高效执行
Python 如何处理大规模数据库表的迁移与数据迁移的高效执行 引言 在现代应用开发中,随着业务需求的增长,数据库表结构和数据往往需要进行迁移和更新。迁移(Migration)是指对数据库表的结构、数据类型、索引、约束等进行修改或更新…...
如何在 MySQL 中处理大量的 DELETE 操作
全文目录: 开篇语前言摘要简介概述DELETE 操作的基本概念常用的 DELETE 方法 核心源码解读简单 DELETE 语句批量 DELETE 示例 案例分析案例1:使用简单 DELETE 删除用户数据案例2:使用分批 DELETE 应用场景演示场景1:用户管理系统场…...

技嘉主板怎么开启TPM_技嘉主板开启TPM2.0教程
在win11最低要求是提示,电脑必须满足 TPM 2.0,并开需要开启TPM 才能正常安装windows11系统,有很多技嘉主板的用户问我,技嘉主板怎么开启tpm功能呢?下面小编就给大家详细介绍一下技嘉主板开启tpm功能的方法。 如何确认你…...
正在等待缓存锁:无法获得锁 /var/lib/dpkg/lock-frontend。锁正由进程 5427(unattended-upgr)持有
这段信息表示你的系统正在等待一个锁文件 (/var/lib/dpkg/lock-frontend) 解除。锁文件用于防止多个进程同时修改系统的包管理器(apt 或 dpkg),避免冲突或损坏系统。 在这种情况下,进程 unattended-upgr(自动升级进程…...
js实现简单的【发布者-订阅者模式】
发布订阅模式是什么 发布订阅模式是一种代码的设计模式,它允许对象间进行松散耦合的通信。 发布者(Publishers)不会直接调用订阅者(Subscribers),相反,它们通过事件通道发布消息;订…...

java学习--集合(大写四.4)
4.collection子接口:List 4.1 List接口存储数据特点 List接口中存储数据的特点:用于存储有序\可以重复的数据. 可以使用List替代数组,动态数组 4.2List接口常用方法 4.2.1、第一波: Collection中声明的15个方法 4.2.2、第二波:因为List是…...

CSS3文本阴影、文本换行、文本溢出、文本修饰、文本描边的使用
1.文本阴影:text-shadow 2.文本换行: white-space:pre(可以理解为按原文显示) white-space:pre-wrap(不会超出父容器) 3.文本溢出 text-overflow:ellipsis一般配合文本…...
Python实现股票自动交易:步骤、要点与注意事项有哪些?
炒股自动化:申请官方API接口,散户也可以 python炒股自动化(0),申请券商API接口 python炒股自动化(1),量化交易接口区别 Python炒股自动化(2):获取…...
闪存----
闪存是一种非易失性存储设备,用于在电子设备中存储数据。使用固态电子存储技术,不含运动部件,因此具有更高的耐久性和更快的访问速度。闪存能够永久的保存数据,即使在断电的情况下也不会丢失。 闪存的速度主要得益于 非机械结构、…...

Spring Boot论坛网站:安全特性与性能优化
4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 图4-1系统工作原理…...

【MATLAB源码-第261期】基于matlab的帝企鹅优化算法(EPO)机器人栅格路径规划,输出做短路径图和适应度曲线
操作环境: MATLAB 2022a 1、算法描述 帝企鹅优化算法(Emperor Penguin Optimizer,简称EPO)是一种基于自然现象的优化算法,灵感来自于帝企鹅在南极极寒环境中的生活习性。帝企鹅是一种群居动物,生活在极端…...
Spring Boot 核心理解-profile
在 Spring Boot 中,application.properties 和 application.yml 是用来管理应用程序配置的主要文件。为了方便在不同的环境(如 dev、test、prod)下进行配置管理,Spring Boot 提供了 Profile 的概念,这使得我们可以针对…...
docker清理未使用的 Docker 资源
docker system prune --all --forcedocker system prune --all --force 是一个 Docker 命令,用于清理未使用的 Docker 资源。具体含义如下: docker system prune:这个命令会清理所有未使用的 Docker 资源,包括未使用的容器、网络…...
新网虚拟主机wordpress伪静态规则
先在WordPress安装目录下的创建.htaccess 文件,并在该文件中添加以下规则: BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ [L] RewriteCond %{REQUEST_FILENAME} !f RewriteCond %{REQUEST_…...
Spring Cloud LoadBalancer
什么是负载均衡? 如果一个服务对应多个实例,我们需要把流量合理的分配给多个实例;当服务流量增⼤时, 通常会采⽤增加机器的⽅式进⾏扩容, 负载均衡就是⽤来在多个机器或者其他资源,中, 按照⼀定的规则合理分配负载. 服务端负载…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...

欢乐熊大话蓝牙知识17:多连接 BLE 怎么设计服务不会乱?分层思维来救场!
多连接 BLE 怎么设计服务不会乱?分层思维来救场! 作者按: 你是不是也遇到过 BLE 多连接时,调试现场像网吧“掉线风暴”? 温度传感器连上了,心率带丢了;一边 OTA 更新,一边通知卡壳。…...

【Zephyr 系列 16】构建 BLE + LoRa 协同通信系统:网关转发与混合调度实战
🧠关键词:Zephyr、BLE、LoRa、混合通信、事件驱动、网关中继、低功耗调度 📌面向读者:希望将 BLE 和 LoRa 结合应用于资产追踪、环境监测、远程数据采集等场景的开发者 📊篇幅预计:5300+ 字 🧭 背景与需求 在许多 IoT 项目中,单一通信方式往往难以兼顾近场数据采集…...