Java项目:12 Springboot的垃圾回收管理系统

这篇具有很好参考价值的文章主要介绍了Java项目:12 Springboot的垃圾回收管理系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者主页:源码空间codegym

简介:Java领域优质创作者、Java项目、学习资料、技术互助

文中获取源码

1.介绍

垃圾分类查询管理系统,对不懂的垃圾进行查询进行分类并可以预约上门回收垃圾。
让用户自己分类垃圾,
按国家标准自己分类,
然后在网上提交订单,
专门有人负责回收,
统一回收到垃圾处理站,
然后工人开始再次分类,
将可再次循环使用的贩卖给工厂(以后有钱自己开)。
订单处理完(一般7天内),
将一部分钱返还给用户。
让垃圾变成钱!

1.1 功能点

序号 功能点
1 用户管理
2 页面管理
3 角色管理
4 首页
5 贡献管理
6 垃圾管理
7 全国统计
8 搜索记录
9 分类管理
10 分类列表
11 垃圾列表
12 修改奖励
13 我的收益
14 随机数据
15 分类统计
16 投放统计
17 公告管理
18 公告列表
19 发布公告
21 每日垃圾
22 贡献记录
23 预约管理

2.软件架构

JDK 1.8
SpringBoot 2.2.6.RELEASE
freemarker 2.3.28
mybatis-plus 3.2.0
shiro 1.3.2

运行指导

idea导入源码空间站顶目教程说明(Vindows版)-ssm篇:

http://mtw.so/5MHvZq

源码地址:http://codegym.top。

3.安装启动

Java项目:12 Springboot的垃圾回收管理系统,源码资源,java,spring boot,开发语言

启动后访问地址:http://127.0.0.1:8083/
用户名:admin、密码:123456
Java项目:12 Springboot的垃圾回收管理系统,源码资源,java,spring boot,开发语言

4.运行截图

Java项目:12 Springboot的垃圾回收管理系统,源码资源,java,spring boot,开发语言

Java项目:12 Springboot的垃圾回收管理系统,源码资源,java,spring boot,开发语言

Java项目:12 Springboot的垃圾回收管理系统,源码资源,java,spring boot,开发语言

Java项目:12 Springboot的垃圾回收管理系统,源码资源,java,spring boot,开发语言

Java项目:12 Springboot的垃圾回收管理系统,源码资源,java,spring boot,开发语言

Java项目:12 Springboot的垃圾回收管理系统,源码资源,java,spring boot,开发语言

Java项目:12 Springboot的垃圾回收管理系统,源码资源,java,spring boot,开发语言

Java项目:12 Springboot的垃圾回收管理系统,源码资源,java,spring boot,开发语言

Java项目:12 Springboot的垃圾回收管理系统,源码资源,java,spring boot,开发语言

Java项目:12 Springboot的垃圾回收管理系统,源码资源,java,spring boot,开发语言

Java项目:12 Springboot的垃圾回收管理系统,源码资源,java,spring boot,开发语言

Java项目:12 Springboot的垃圾回收管理系统,源码资源,java,spring boot,开发语言

Java项目:12 Springboot的垃圾回收管理系统,源码资源,java,spring boot,开发语言

Java项目:12 Springboot的垃圾回收管理系统,源码资源,java,spring boot,开发语言

Java项目:12 Springboot的垃圾回收管理系统,源码资源,java,spring boot,开发语言

Java项目:12 Springboot的垃圾回收管理系统,源码资源,java,spring boot,开发语言

代码

CustomRealm

package com.gcms.shiro;

import com.gcms.mapper.UserMapper;
import com.gcms.mapper.UserRoleMapper;
import com.gcms.pojo.User;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.subject.Subject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.*;

@Component
public class CustomRealm extends AuthorizingRealm {
	/** 用户信息service */
	private final UserMapper userMapper;
	/** 用户权限service */
	private final UserRoleMapper userRoleMapper;
	/** logback日志记录 */
	private final Logger logger = LoggerFactory.getLogger(CustomRealm.class);

	private static Map<String, Session> sessionMap = new HashMap<>();

	@Autowired
	public CustomRealm(UserMapper userMapper, UserRoleMapper userRoleMapper) {
		this.userMapper = userMapper;
		this.userRoleMapper = userRoleMapper;
	}


	/**
	 * @Override
	 * @see org.apache.shiro.realm.AuthenticatingRealm#doGetAuthenticationInfo(AuthenticationToken)
	 *      <BR>
	 *      Method name: doGetAuthenticationInfo <BR>
	 *      获取身份验证信息 Description: Shiro中,最终是通过 Realm 来获取应用程序中的用户、角色及权限信息的。 <BR>
	 * @param authenticationToken 用户身份信息 token
	 * @return 返回封装了用户信息的 AuthenticationInfo 实例
	 * @throws AuthenticationException <BR>
	 */
	@Override
	protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken)
			throws AuthenticationException {
		// 获取token令牌
		UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
		// 从数据库获取对应用户名密码的用户
		User user = userMapper.getByName(token.getUsername());
		if (null == user) {
			logger.warn("{}---用户不存在", token.getUsername());
			// 向前台抛出用户不存在json对象
			throw new AccountException("USERNAME_NOT_EXIST");
		}
		String password = user.getPassword();
		if (null == password) {
			logger.warn("{}---用户不存在", token.getUsername());
			// 向前台抛出用户不存在json对象
			throw new AccountException("USERNAME_NOT_EXIST");
		} else if (!password.equals(new String((char[]) token.getCredentials()))) {
			logger.warn("{}---输入密码错误", token.getUsername());
			// 向前台抛出输入密码错误json对象
			throw new AccountException("PASSWORD_ERR");
		}
		logger.info("{}---身份认证成功", user.getName());
		Subject subject = SecurityUtils.getSubject();
		// 设置shiro session过期时间(单位是毫秒!)
		subject.getSession().setTimeout(7_200_000);

		Session s = subject.getSession();
		String uid = user.getId()+"";

		try {
			Session s2 = sessionMap.get(uid);
			if (s2 != null) {
				s2.setTimeout(0);
				sessionMap.remove(s2);
			}
		} catch (Exception e) {
			// 已经退出,但是还是有他。
			sessionMap.remove(s);
		}
		// 把这个人登录的信息给放进全局变量
		sessionMap.put(uid, s);

		return new SimpleAuthenticationInfo(user, password, getName());
	}

	/**
	 * @Override
	 * @see AuthorizingRealm#doGetAuthorizationInfo(PrincipalCollection)
	 *      <BR>
	 *      Method name: doGetAuthorizationInfo <BR>
	 *      Description: 获取授权信息 <BR>
	 * @param principalCollection
	 * @return <BR>
	 */
	@Override
	protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
		// 从shro里面获取用户对象
		User user = (User) SecurityUtils.getSubject().getPrincipal();
		SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
		// 角色列表
		List<String> roles = null;
		// 获得该用户角色
		if (null != user) {
			roles = userRoleMapper.getRoles(user.getId()+"");
		} else {
			logger.warn("用户session失效!");
		}
		Set<String> set = new HashSet<>();
		// 需要将 role 封装到 Set 作为 info.setRoles() 的参数
		for (String role : roles) {
			set.add(role);
		}
		// 设置该用户拥有的角色
		info.setRoles(set);
		return info;
	}
}

MyUtils文章来源地址https://www.toymoban.com/news/detail-820264.html

package com.gcms.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.*;
import java.text.Format;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * class name:MyUtils <BR>
 */
public class MyUtils {


	private MyUtils() {
		throw new IllegalStateException("Utility class");
	}

	/** logback日志记录 */
	private static final Logger logger = LoggerFactory.getLogger(MyUtils.class);

	/**
	 * Method name: isEmail <BR>
	 * Description: 判断是不是邮箱,是就返回true <BR>
	 * Remark: <BR>
	 * 
	 * @param email
	 * @return boolean<BR>
	 */
	public static boolean isEmail(String email) {
		String regex = "^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$";
		if (email.matches(regex)) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * Method name: isPhoneNum <BR>
	 * Description: 判断手机号是不是正确,是就返回true <BR>
	 * Remark: <BR>
	 * 
	 * @param phoneNume
	 * @return boolean<BR>
	 */
	public static boolean isPhoneNum(String phoneNume) {
		String pattern = "^((1[3,5,8][0-9])|(14[5,7])|(17[0,6,7,8])|(19[7]))\\d{8}$";
		if (phoneNume.matches(pattern)) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * Method name: nowDate <BR>
	 * Description: 返回当前日期和时间yyyy-MM-dd HH:mm:ss <BR>
	 * Remark: <BR>
	 * 
	 * @return String<BR>
	 */
	public static String getNowDateTime() {
		String dateTime = "";
		String pattern = "yyyy-MM-dd HH:mm:ss";
		Date date = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		dateTime = sdf.format(date);
		return dateTime;
	}

	/**
	 * Method name: getNowDateYMD <BR>
	 * Description: 返回当前日期和时间 yyyy-MM-dd <BR>
	 * Remark: <BR>
	 * 
	 * @return String<BR>
	 */
	public static String getNowDateYMD() {
		String dateTime = "";
		String pattern = "yyyy-MM-dd";
		Date date = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		dateTime = sdf.format(date);
		return dateTime;
	}

	/**
	 * Method name: getNowDateCHYMD <BR>
	 * Description: 返回当前日期和时间 yyyy年MM月dd日<BR>
	 * Remark: <BR>
	 * 
	 * @return String<BR>
	 */
	public static String getNowDateCHYMD() {
		String dateTime = "";
		String pattern = "yyyy年MM月dd日";
		Date date = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		dateTime = sdf.format(date);
		return dateTime;
	}

	/**
	 * Method name: getAutoNumber <BR>
	 * Description: 根据时间获取编号:年月日+4位数字 <BR>
	 * Remark: 格式:201809200001 <BR>
	 * 
	 * @return String<BR>
	 */
	public static synchronized String getAutoNumber() {
		String autoNumber = "";
		int number = 0;
		String oldDate = "";
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
		String nowDate = sdf.format(new Date());
		File f2 = new File(MyUtils.class.getResource("").getPath());
		String path = f2.getAbsolutePath();

		File f = new File(path + "/date.txt");

		try {
			BufferedReader br = new BufferedReader(new FileReader(f));
			String line = "";
			try {
				line = br.readLine();
				String[] sb = line.split(",");
				oldDate = sb[0];
				if (oldDate.equals(nowDate)) {
					number = Integer.parseInt(sb[1]);
				} else {
					number = 0;
				}
				br.close();
			} catch (IOException e) {
				logger.error("根据时间获取编号出现异常", e);
			}

			autoNumber += nowDate;
			number++;
			int i = 1;
			int n = number;
			while ((n = n / 10) != 0) {
				i++;
			}
			for (int j = 0; j < 4 - i; j++) {
				autoNumber += "0";
			}
			autoNumber += number;

			try {
				BufferedWriter bw = new BufferedWriter(new FileWriter(f));
				bw.write(nowDate + "," + number);
				bw.close();
			} catch (IOException e) {
				logger.error("根据时间获取编号出现异常", e);
			}

		} catch (FileNotFoundException e) {
			logger.error("根据时间获取编号出现异常", e);
		}

		return autoNumber;
	}

	/**
	 * Method name: get2DateDay <BR>
	 * Description: 获取两个日期之间的天数 <BR>
	 * Remark: 如2018-09-01 和 2018-09-017 返回就是17天<BR>
	 * 
	 * @param startDate
	 * @param endDate
	 * @return int<BR>
	 */
	public static int get2DateDay(String startDate, String endDate) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date date1 = null;
		Date date2 = null;
		long days = 0;
		try {
			date1 = sdf.parse(startDate);
			date2 = sdf.parse(endDate);
			days = (date2.getTime() - date1.getTime()) / (24 * 3600 * 1000);

		} catch (ParseException e) {
			logger.error("获取两个日期之间的天数出现异常", e);
		}

		return (int) days + 1;
	}

	/**
	 * Method name: toLowCase <BR>
	 * Description: 第一个字母小写 <BR>
	 * Remark: <BR>
	 * 
	 * @param s
	 * @return String<BR>
	 */
	public static String toLowCase(String s) {
		return s.substring(0, 1).toLowerCase() + s.substring(1, s.length());
	}

	/**
	 * Method name: setStartUP <BR>
	 * Description: 第一个字母大写 <BR>
	 * Remark: <BR>
	 * 
	 * @param s
	 * @return String<BR>
	 */
	public static String setStartUP(String s) {
		return s.substring(0, 1).toUpperCase() + s.substring(1, s.length());
	}

	/**
	 * Method name: getUp_ClassName <BR>
	 * Description: 根据表名获取类名不带后缀Bean <BR>
	 * Remark: <BR>
	 * 
	 * @param s
	 * @return String<BR>
	 */
	public static String getUp_ClassName(String s) {
		String cName = "";
		// 首字母大写
		cName = s.substring(1, 2).toUpperCase() + s.substring(2, s.length());

		String[] tem = cName.split("_");
		int len = tem.length;
		cName = tem[0];
		for (int i = 1; i < len; i++) {
			cName += setStartUP(tem[i]);
		}
		// tables.add(cName);//把所有的表添加到这里
		return cName;
	}

	/**
	 * Method name: getFiled2Pro <BR>
	 * Description: 根据字段名获取属性 <BR>
	 * Remark: <BR>
	 * 
	 * @return String<BR>
	 */
	public static String getFiled2Pro(String s) {
		String pName = "";
		String[] tem = s.split("_");

		int len = tem.length;
		pName = tem[0];
		for (int i = 1; i < len; i++) {
			pName += setStartUP(tem[i]);
		}
		return pName;
	}


	/**
	 * Method name: getStringDate <BR>
	 * Description: 根据字符串转成日期类型yyyt-MM-dd <BR>
	 * 
	 * @param time
	 * @return Date<BR>
	 */
	public static Date getStringDate(String time) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date date = null;
		try {
			date = sdf.parse(time);
		} catch (ParseException e) {
			logger.error("日期转换出错:", e);
		}
		return date;
	}

	/**
	 * Method name: getStringDate <BR>
	 * Description: 根据字符串转成日期类型yyyt-MM-dd HH:mm:ss<BR>
	 * 
	 * @param time
	 * @return Date<BR>
	 */
	public static Date getStringDateTime(String time) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date date = null;
		try {
			date = sdf.parse(time);
		} catch (ParseException e) {
			logger.error("日期转换出错:", e);
		}
		return date;
	}

	/**
	 * Method name: getNowDateFirstDay <BR>
	 * Description: 根据系统时间获取当月第一天 <BR>
	 * 
	 * @return String<BR>
	 */
	public static String getNowDateFirstDay() {
		Format format = new SimpleDateFormat("yyyy-MM-dd");
		// 获取当前月第一天:
		Calendar c = Calendar.getInstance();
		c.add(Calendar.MONTH, 0);
		c.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
		return format.format(c.getTime());
	}

	/**
	 * Method name: getNowDateLastDay <BR>
	 * Description: 根据系统时间获取当月最后一天 <BR>
	 * 
	 * @return String<BR>
	 */
	public static String getNowDateLastDay() {
		Format format = new SimpleDateFormat("yyyy-MM-dd");
		// 获取当前月最后一天
		Calendar ca = Calendar.getInstance();
		ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
		return format.format(ca.getTime());
	}
	
	/**
	 * 根据日期对象获取yyyy年MM月dd字符串
	 * @param date
	 * @return
	 */
	public static String getDate2String(Date date) {
		Format format = new SimpleDateFormat("yyyy年MM月dd日  HH时mm分ss秒");
		return format.format(date);
	}

}

到了这里,关于Java项目:12 Springboot的垃圾回收管理系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2.6. Java内存管理与垃圾回收

    2.6.1. Java内存模型 在Java中,内存被划分为以下几个区域: 堆(Heap):存储对象实例和数组,是垃圾回收的主要区域。 栈(Stack):存储局部变量和方法调用。每个线程有自己的栈。 方法区(Method Area):存储类信息,如类的结构、方法、字段等。 本地方法栈(Native Method

    2024年02月07日
    浏览(30)
  • 基于Springboot的地方废物回收机构管理系统

    网络的广泛应用给生活带来了十分的便利。所以把地方废物回收机构管理与现在网络相结合,利用java技术建设地方废物回收机构管理系统,实现地方废物回收机构的信息化。 则对于进一步提高 地方废物回收机构管理 发展,丰富 地方废物回收机构管理 经验能起到不少的促进

    2024年02月08日
    浏览(28)
  • 3.Java面试题—JVM基础、内存管理、垃圾回收、JVM 调优

    一篇文章掌握整个JVM,JVM超详细解析!!! JVM (Java虚拟机) 是运行 Java 字节码 的 虚拟机 。 JVM 针对 不同系统 有 特定实现 ( Windows 、 Linux 等),目的是 同样的代码 在 不同平台 能运行出 相同的结果 。 Java 语言 要经过 编译 和 解释 两个步骤: 编译 :通过 编译器 将 代码 一

    2024年02月15日
    浏览(38)
  • 基于SpringBoot的垃圾分类管理系统

    基于SpringBoot+Vue的垃圾分类管理系统的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringBoot+MyBatis 工具:IDEA/Ecilpse、Navicat、Maven 主要功能:包括前台和后台两部分、首页列表展示、垃圾分类、垃圾图谱、查看详情、个人中心、后台系统、用户管理、垃圾分类管理、垃圾管

    2024年02月08日
    浏览(36)
  • JVM | 垃圾回收器(GC)- Java内存管理的守护者

    在编程世界中, 有效的内存管理 是至关重要的。这不仅确保了应用程序的稳定运行,还可以大大提高性能和响应速度。作为世界上最受欢迎的编程语言之一,通过Java虚拟机内部的垃圾回收器组件来自动管理内存,是成为之一的其中一项必不可少的技术点。 在许多传统的编程

    2024年02月09日
    浏览(39)
  • 深入探讨Java虚拟机(JVM):执行流程、内存管理和垃圾回收机制

    目录 什么是JVM? JVM 执行流程 JVM 运行时数据区 堆(线程共享) Java虚拟机栈(线程私有) 什么是线程私有? 程序计数器(线程私有) 方法区(线程共享) JDK 1.8 元空间的变化 运行时常量池 内存布局中的异常问题 1.  Java堆溢出 2.  虚拟机栈和本地方法栈溢出 JVM 类加载 1.

    2024年02月09日
    浏览(36)
  • Java项目:10 Springboot的电商书城管理系统

    作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 该系统分为前台展示和后台管理两大模块,前台主要是为消费者服务。该子系统实现了注册,登录,以及从浏览、下单到支付的整个流程,支付使用的是沙箱环境,属于模拟环

    2024年01月20日
    浏览(31)
  • Java项目:18 基于SpringBoot的学生成绩管理系统

    作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 基于springboot的学生成绩管理系统主要功能 分为两个端,教师和学生 教师的主要功能:学生信息、成绩信息的增删改查 学生的主要功能:我的成绩、我的总成绩的查看 1.运行环境:

    2024年02月21日
    浏览(36)
  • Java项目:03 基于Springboot的销售培训考评管理系统

    企业的销售要进行培训,由技术人员进行辅导并考评检测培训效果,所以有了这个小系统。 实现了系统的登录验证、请求拦截验证、基础模块(用户管理、角色管理、销售管理)、业务模块(评分管理、评分结果)。 除了基本的CRUD之外,其中评分结果模块实现了数据可视化

    2024年01月16日
    浏览(44)
  • 基于SpringBoot+Vue的地方废物回收机构管理系统设计与实现(源码+LW+部署文档等)

    博主介绍:   大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下进行项目开发,具有丰富的项目经验和开发技能。我的

    2024年02月14日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包