基于Springboot+vue的垃圾分类网站设计与实现

news2024/11/26 4:43:44

 博主介绍:  

大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。
我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下进行项目开发,具有丰富的项目经验和开发技能。我的代码风格规范、优美、易读性强,同时也注重性能优化、代码重构等方面的实践和经验总结。
我有丰富的成品Java毕设项目经验,能够为学生提供各类个性化的开题框架和实际运作方案。同时我也提供相关的学习资料、程序开发、技术解答、代码讲解、文档报告等专业服务。

🍅文末获取源码联系🍅

👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟

Java项目精品实战案例(300套)

垃圾分类网站源码下载地址:

https://download.csdn.net/download/weixin_54828627/87663229

一、效果演示

二、前言介绍

本论文主要论述了如何使用JAVA语言开发一个垃圾分类网站 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述垃圾分类网站的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分析设计。

本系统的使用可以实现本垃圾分类网站管理的信息化,可以方便管理员进行更加方便快捷的管理,可以提高管理人员的工作效率。

三、主要技术

技术名作用
Springboot后端框架
Vue前端框架
MySQL数据库

四、系统设计(部分)

4.1、主要功能模块设计      

垃圾分类网站的主要使用者分为管理员和用户、垃圾分类管理员,实现功能包括管理员:首页、个人中心、用户管理、垃圾分类管理员管理、垃圾分类管理、垃圾类型管理、垃圾图谱管理、系统管理,垃圾分类管理员;首页、个人中心、用户管理、垃圾分类管理员管理、垃圾分类管理、垃圾类型管理、垃圾图谱管理,用户前台;首页、垃圾分类、垃圾图谱、个人中心、后台管理等功能。由于本网站的功能模块设计比较全面,所以使得整个垃圾分类网站信息管理的过程得以实现。   

4.2、登录流程设计

五、运行截图

5.1、用户前台功能模块

垃圾分类网站 ,在系统首页可以查看首页、垃圾分类、垃圾图谱、个人中心、后台管理等内容,如图5-1所示。

图5-1系统功能界面图

5.1.1、用户登录、用户注册

图5-2用户登录、用户注册界面图

5.1.2、垃圾分类

 图5-3垃圾分类界面图

5.1.3、垃圾图谱

 图5-4垃圾图谱界面图

5.2、管理员功能模块

管理员登录,通过填写注册时输入的用户名、密码、角色进行登录,如图5-5所示。

 图5-5管理员登录界面图

管理员登录进入垃圾分类网站可以查看首页、个人中心、用户管理、垃圾分类管理员管理、垃圾分类管理、垃圾类型管理、垃圾图谱管理、系统管理等信息。

5.2.1、用户管理

 图5-6用户管理界面图

 图5-7垃圾分类管理员管理界面图

5.2.2、垃圾分类管理

 图5-8垃圾分类管理界面图

5.2.3、垃圾类型管理

 图5-9垃圾类型管理界面图

5.2.4、垃圾图谱管理

图5-10垃圾图谱管理界面图

5.2.5、轮播图

图5-11轮播图管理界面图

5.3、垃圾分类管理员功能模块

垃圾分类管理员登录进入垃圾分类网站可以查看首页、个人中心、用户管理、垃圾分类管理员管理、垃圾分类管理、垃圾类型管理、垃圾图谱管理等内容。

5.3.1、个人信息

图5-12个人信息界面图

六、数据库设计(部分)

本垃圾分类网站采用的是MYSQL数据库,数据存储快,因为垃圾分类网站 ,主要的就是对信息的管理,信息内容比较多,这就需要好好的设计一个好的数据库,分类要清楚,不能添加信息的时候,造成信息太过混乱,设计好的数据库首先就需要先把各个实体之间的关系表达明确,系统的E-R图如下图所示:

1、用户信息实体图如图4-5所示:

图4-5 用户信息实体图

2、垃圾分类信息实体图如图4-6所示:

 

图4-6 垃圾分类信息实体图

七、代码参考 

package com.controller;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ResourceUtils;
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.annotation.IgnoreAuth;
import com.baidu.aip.face.AipFace;
import com.baidu.aip.face.MatchRequest;
import com.baidu.aip.util.Base64Util;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.ConfigEntity;
import com.service.CommonService;
import com.service.ConfigService;
import com.utils.BaiduUtil;
import com.utils.FileUtil;
import com.utils.R;

/**
 * 通用接口
 */
@RestController
public class CommonController{
	@Autowired
	private CommonService commonService;
	
	@Autowired
	private ConfigService configService;
	
	private static AipFace client = null;
	
	private static String BAIDU_DITU_AK = null;
	
	@RequestMapping("/location")
	public R location(String lng,String lat) {
		if(BAIDU_DITU_AK==null) {
			BAIDU_DITU_AK = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "baidu_ditu_ak")).getValue();
			if(BAIDU_DITU_AK==null) {
				return R.error("请在配置管理中正确配置baidu_ditu_ak");
			}
		}
		Map<String, String> map = BaiduUtil.getCityByLonLat(BAIDU_DITU_AK, lng, lat);
		return R.ok().put("data", map);
	}
	
	/**
	 * 人脸比对
	 * 
	 * @param face1 人脸1
	 * @param face2 人脸2
	 * @return
	 */
	@RequestMapping("/matchFace")
	public R matchFace(String face1, String face2) {
		if(client==null) {
			/*String AppID = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "AppID")).getValue();*/
			String APIKey = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "APIKey")).getValue();
			String SecretKey = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "SecretKey")).getValue();
			String token = BaiduUtil.getAuth(APIKey, SecretKey);
			if(token==null) {
				return R.error("请在配置管理中正确配置APIKey和SecretKey");
			}
			client = new AipFace(null, APIKey, SecretKey);
			client.setConnectionTimeoutInMillis(2000);
			client.setSocketTimeoutInMillis(60000);
		}
		JSONObject res = null;
		try {
			File file1 = new File(ResourceUtils.getFile("classpath:static/upload").getAbsolutePath()+"/"+face1);
			File file2 = new File(ResourceUtils.getFile("classpath:static/upload").getAbsolutePath()+"/"+face2);
			String img1 = Base64Util.encode(FileUtil.FileToByte(file1));
			String img2 = Base64Util.encode(FileUtil.FileToByte(file2));
			MatchRequest req1 = new MatchRequest(img1, "BASE64");
			MatchRequest req2 = new MatchRequest(img2, "BASE64");
			ArrayList<MatchRequest> requests = new ArrayList<MatchRequest>();
			requests.add(req1);
			requests.add(req2);
			res = client.match(requests);
			System.out.println(res.get("result"));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			return R.error("文件不存在");
		} catch (IOException e) {
			e.printStackTrace();
		} 
		return R.ok().put("data", com.alibaba.fastjson.JSONObject.parse(res.get("result").toString()));
	}
    
	/**
	 * 获取table表中的column列表(联动接口)
	 * @param table
	 * @param column
	 * @return
	 */
	@IgnoreAuth
	@RequestMapping("/option/{tableName}/{columnName}")
	public R getOption(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName,String level,String parent) {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("table", tableName);
		params.put("column", columnName);
		if(StringUtils.isNotBlank(level)) {
			params.put("level", level);
		}
		if(StringUtils.isNotBlank(parent)) {
			params.put("parent", parent);
		}
		List<String> data = commonService.getOption(params);
		return R.ok().put("data", data);
	}
	
	/**
	 * 根据table中的column获取单条记录
	 * @param table
	 * @param column
	 * @return
	 */
	@IgnoreAuth
	@RequestMapping("/follow/{tableName}/{columnName}")
	public R getFollowByOption(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName, @RequestParam String columnValue) {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("table", tableName);
		params.put("column", columnName);
		params.put("columnValue", columnValue);
		Map<String, Object> result = commonService.getFollowByOption(params);
		return R.ok().put("data", result);
	}
	
	/**
	 * 修改table表的sfsh状态
	 * @param table
	 * @param map
	 * @return
	 */
	@RequestMapping("/sh/{tableName}")
	public R sh(@PathVariable("tableName") String tableName, @RequestBody Map<String, Object> map) {
		map.put("table", tableName);
		commonService.sh(map);
		return R.ok();
	}
	
	/**
	 * 获取需要提醒的记录数
	 * @param tableName
	 * @param columnName
	 * @param type 1:数字 2:日期
	 * @param map
	 * @return
	 */
	@IgnoreAuth
	@RequestMapping("/remind/{tableName}/{columnName}/{type}")
	public R remindCount(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("table", tableName);
		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));
			}
		}
		
		int count = commonService.remindCount(map);
		return R.ok().put("count", count);
	}
	
	/**
	 * 单列求和
	 */
	@IgnoreAuth
	@RequestMapping("/cal/{tableName}/{columnName}")
	public R cal(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName) {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("table", tableName);
		params.put("column", columnName);
		Map<String, Object> result = commonService.selectCal(params);
		return R.ok().put("data", result);
	}
	
	/**
	 * 分组统计
	 */
	@IgnoreAuth
	@RequestMapping("/group/{tableName}/{columnName}")
	public R group(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName) {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("table", tableName);
		params.put("column", columnName);
		List<Map<String, Object>> result = commonService.selectGroup(params);
		return R.ok().put("data", result);
	}
	
	/**
	 * (按值统计)
	 */
	@IgnoreAuth
	@RequestMapping("/value/{tableName}/{xColumnName}/{yColumnName}")
	public R value(@PathVariable("tableName") String tableName, @PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName) {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("table", tableName);
		params.put("xColumn", xColumnName);
		params.put("yColumn", yColumnName);
		List<Map<String, Object>> result = commonService.selectValue(params);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		for(Map<String, Object> m : result) {
			for(String k : m.keySet()) {
				if(m.get(k) instanceof Date) {
					m.put(k, sdf.format((Date)m.get(k)));
				}
			}
		}
		return R.ok().put("data", result);
	}
	
}

八、技术交流

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

精彩专栏推荐订阅:下方专栏👇🏻👇🏻👇🏻👇🏻

Java项目精品实战案例(300套)

​​​​

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

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

相关文章

学生速看!免费领取一台阿里云服务器申请全流程

阿里云学生服务器优惠活动&#xff1a;高效计划&#xff0c;可以免费领取一台阿里云服务器&#xff0c;如果你是一名高校学生&#xff0c;想搭建一个linux学习环境、git代码托管服务器&#xff0c;或者创建个人博客网站记录自己的学习成长历程&#xff0c;拥有一台云服务器是很…

MT4开户平台交易注意事项有哪些?

很多投资者都会选择MT4平台进行开户交易&#xff0c;毕竟MT4平台的起步时间比较早&#xff0c;对一些关注资金安全的投资者来说&#xff0c;MT4平台无疑是他们最佳的选择&#xff0c;那么&#xff0c;在MT4开户平台交易就一定不会发生失误吗&#xff1f;答案就是&#xff1a;不…

红帽考试常见问题解答

问&#xff1a;红帽考试结束后&#xff0c;何时可以收到成绩&#xff1f; 答&#xff1a;美国认证中心会在 3&#xff5e;5 个工作日内将成绩通知邮件发给考生&#xff0c;请注意提供正确的联系信息。例外情况&#xff1a;一些邮件服务器会错误地将结果电子邮件作为垃圾邮件处…

【Python 随练】相反顺序输出字符串

题目 利用递归函数调用方式&#xff0c;将所输入的 5 个字符&#xff0c;以相反顺序打印出来。 简介 在本篇博客中&#xff0c;我们将使用递归函数来解决一个字符打印的问题。我们将介绍递归的概念&#xff0c;并提供一个完整的代码示例来实现将输入的字符以相反顺序打印出来…

驱动开发:基于事件同步的反向通信

在之前的文章中LyShark一直都在教大家如何让驱动程序与应用层进行正向通信&#xff0c;而在某些时候我们不仅仅只需要正向通信&#xff0c;也需要反向通信&#xff0c;例如杀毒软件如果驱动程序拦截到恶意操作则必须将这个请求动态的转发到应用层以此来通知用户&#xff0c;而这…

Apache Superset 身份认证绕过漏洞(CVE-2023-27524)

漏洞简介 Apache Superset是一个开源的数据可视化和数据探测平台&#xff0c;它基于Python构建&#xff0c;使用了一些类似于Django和Flask的Python web框架。提供了一个用户友好的界面&#xff0c;可以轻松地创建和共享仪表板、查询和可视化数据&#xff0c;也可以集成到其他…

二进制搭建 Kubernetes v1.20

k8s集群master01&#xff1a;192.168.179.25 kube-apiserver kube-controller-manager kube-scheduler etcd k8s集群master02&#xff1a;192.168.179.26 k8s集群node01&#xff1a;192.168.179.23 kubelet kube-proxy docker k8s集群node02&#xff1a;192.168.179.22 …

.env 环境变量使用,React项目中使用 .env.*等文件使用

一、公共.env环境变量 二、.env.*环境变量(例如&#xff1a;.env.test 环境变量) 公共 .env 环境变量 在项目开发中&#xff0c;我们不可避免的会需要使用 .env 环境变量&#xff0c;例如在定义接口 api 的 baseURL 时&#xff0c;会根据不同的环境&#xff0c;配置不同的根…

偶数分频器电路设计

目录 偶数分频器电路设计 1、偶数分频器电路简介 2、实验任务 3、程序设计 方法1&#xff1a; 3.1、8分频电路代码如下&#xff1a; 3.2、仿真验证 3.2.1、编写 TB 文件 3.2.2、仿真验证 方法2&#xff1a; 4、计数器进行分频 4.1、仿真测试 偶数分频器电路设计 分…

软件设计原则与设计模式

设计中各各原则同时兼有或冲突&#xff0c;不存在包含所有原则的设计 一&#xff1a;单一职责原则又称单一功能原则 核心&#xff1a;解耦和增强内聚性&#xff08;高内聚&#xff0c;低耦合&#xff09; 描述&#xff1a;类被修改的几率很大&#xff0c;因此应该专注于单一的…

YOLOv5 vs YOLOv8

1 概述 YOLOv8 是 ultralytics 公司在 2023 年 1月 10 号开源的 YOLOv5 的下一个重大更新版本。 https://github.com/ultralytics/yolov5 https://github.com/ultralytics/ultralytics 2 网络结构 YOLOv5 N/S/M/L/X 骨干网络的通道数设置使用同一套缩放系数&#xff1b; YOLO…

Axure教程——滑动解锁

本文将教大家如何用AXURE中的动态面板制作滑动解锁 一 、效果 预览地址&#xff1a;https://6dnu91.axshare.com 二、功能 滑动滑块从左到右&#xff0c;提示验证成功 三、制作 拖入一个动态面板组件&#xff0c;如图&#xff1a; 点击动态面板进入&#xff0c;拖入一个矩形…

【生态经济学】R语言机器学习方法在生态经济学领域中的实践技术

查看原文>>>基于R语言机器学习方法在生态经济学领域中的实践技术 近年来&#xff0c;人工智能领域已经取得突破性进展&#xff0c;对经济社会各个领域都产生了重大影响&#xff0c;结合了统计学、数据科学和计算机科学的机器学习是人工智能的主流方向之一&#xff0c…

RK3288 Android logo

一、Android 系统开机logo的修改 安卓系统的开机分为u-boot logo 和 kernel logo开机logo图片必须是 bmp 格式&#xff0c;并且分辨率必须为偶数将制作好的BMP格式logo图片放置Android源码kernel目录下&#xff0c;重新编译即可 二、Android logo常见问题分析 1、RK3288 Andr…

基于SSM+jsp的电子商城系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

IT云运维技术分享

1 运维体系 1.1 市场对运维的需求 时代发展到今天&#xff0c;社会的生活方式与生产方式的全面的数字化&#xff0c;无论是传统企业还是互联网企业&#xff0c;都在全面上云&#xff0c;这也意味着企业的关键业务乃至“身家性命”都已经全部放在 IT 系统之上&#xff0c;因此…

UWB自组网定位方案_基于UWB技术的消防应急救援定位解决方案

目前国内应急救援市场都是基于被动定位应用&#xff0c;在特殊情况下救援也大多处于单兵作战的情况&#xff0c;并不能及时知道自己和自己组员的位置信息和状态&#xff0c;且没有场景感知和室内外一体位置信息结合&#xff0c;使相关救援人员处于更加危险境地。本篇就带大家详…

【SWAT水文模型】Tips1:土地利用/土壤类型以全国数据分类

Tips1&#xff1a;土地利用/土壤类型以全国数据分类 1 土壤类型处理Step1 从全国土壤数据库中裁剪得到研究区域内土壤类型Step2 确定研究区域内重分类标准及类型 参考 1 土壤类型处理 直接对全国土壤类型数据进行分类&#xff0c;在SWAT模型中输入全国土壤类型&#xff0c;亦可…

【Linux】文件权限解析

一、Linux用户分类 Linux下有两种用户&#xff1a;超级用户&#xff08;root&#xff09;、普通用户 超级用户&#xff1a;可以再linux系统下做任何事情&#xff0c;不受限制 普通用户&#xff1a;在linux下做有限的事情。 超级用户的命令提示符是“#”&#xff0c;普通用户的…

近期煤矿事故及电力综合自动化系统的介绍

安科瑞虞佳豪 5月29日&#xff0c;山西灵石红杏鑫鼎泰煤业有限公司发生一起死亡1人的安全事故&#xff1b;5月24日&#xff0c;山西华阳集团新能股份有限公司二矿发生一起死亡1人的安全事故。 ​山西省应急管理厅、山西省地方煤矿安全监督管理局责令山西灵石红杏鑫鼎泰煤业有…