成都淮州新城建设投资有限公司网站,注册深圳公司不在深圳经营,手机和pc合一的网站,北京做软件最好的公司作者主页#xff1a;源码空间codegym 简介#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 1.介绍
垃圾分类查询管理系统#xff0c;对不懂的垃圾进行查询进行分类并可以预约上门回收垃圾。 让用户自己分类垃圾#xff0c; 按国家标准自己分类… 作者主页源码空间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.安装启动 启动后访问地址http://127.0.0.1:8083/ 用户名admin、密码123456
4.运行截图 代码
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 MapString, Session sessionMap new HashMap();Autowiredpublic 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*/Overrideprotected 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*/Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {// 从shro里面获取用户对象User user (User) SecurityUtils.getSubject().getPrincipal();SimpleAuthorizationInfo info new SimpleAuthorizationInfo();// 角色列表ListString roles null;// 获得该用户角色if (null ! user) {roles userRoleMapper.getRoles(user.getId());} else {logger.warn(用户session失效!);}SetString set new HashSet();// 需要将 role 封装到 Set 作为 info.setRoles() 的参数for (String role : roles) {set.add(role);}// 设置该用户拥有的角色info.setRoles(set);return info;}
}MyUtils
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 booleanBR*/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 booleanBR*/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 StringBR*/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 StringBR*/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 StringBR*/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 StringBR*/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 intBR*/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 StringBR*/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 StringBR*/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 StringBR*/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 StringBR*/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 DateBR*/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:ssBR* * param time* return DateBR*/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 StringBR*/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 StringBR*/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);}}