基于javaweb+mysql的springboot家庭财务管理系统(java+springboot+ssm+mysql+maven+thymeleaf+html)
运行环境
Java≥8、MySQL≥5.7
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb+mysql的SpringBoot家庭财务管理系统(java+springboot+ssm+mysql+maven+thymeleaf+html)
一、项目简述
功能: 家庭财务管理系统,具有收入统计,支出统计,汇总报 表,工资录入,其他收入等录入开支信息,echart图标插 件弓I入展示,分页查询,角色管理,用户管理,权限管理 等功能
二、项目运行
环境配置: jdk8+tomcat8+mysql+Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都主持)
项目技术: Thymeleaf+SpringBoot+Mybatis+html+css+JavaScript+Echart
UserInfoController userInfoController = (UserInfoController) controller;
String userinfoStr = getCookieUser(request);
UserInfo userInfo = new UserInfo();
userInfo.setId(Integer.parseInt(userinfoStr.split("_")[1]));
userInfo.setUsername(userinfoStr.split("_")[0]);
userInfo = userInfoController.getUserInfo(userInfo);
userInfoController.setSessionUserInfo(userInfo,session);
return true;
}
}
}
//如果是移动端登录,则跳过登录验证
if ("client".equals(request.getHeader("token"))){
return true;
}
String uri = request.getRequestURI();
// System.out.println("session:"+uri);
//是登录页面或者静态资源,不拦截
if("/".equals(uri) || "/login.html".equals(uri) || "/login.do".equals(uri) || uri.contains("/static/")){
// System.out.println("---放行---");
}else {
//不是登录页面,则验证是否有session,没有则跳转到登录页面
if (session.getAttribute(Config.CURRENT_USERNAME) == null){
response.sendRedirect("/login.html");
return false;
}
}
return true;
}
// @Override
// public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle");
// }
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// System.out.println(request.getRequestURI());
String uri = request.getRequestURI();
if("/logout".equals(uri) && request.getSession().getAttribute(Config.CURRENT_USERNAME) == null){
response.sendRedirect("/login.html");
}
}
@RequestMapping("/getPayways")
public Result<Payway> getAllPayways(){
try {
List<Payway> payways = billService.getAllPayways();
if (payways!=null && payways.size()>0){
return ResultUtil.success(payways);
}else {
return ResultUtil.unSuccess();
}
} catch (Exception e) {
return ResultUtil.error(e);
}
}
}
/**
* description: TODO
*/
public class SessionInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// System.out.println("token: "+request.getHeader("token"));
System.out.println(request.getRequestURL());
HttpSession session = request.getSession();
//若session中没有用户信息 但cookie中存在用户信息,
//则通过cookie中的信息重新初始化该用户信息,达到免登录的效果
if(session.getAttribute(Config.CURRENT_USERNAME) == null && getCookieUser(request)!=null){
// System.out.println(HandlerMethod.class +"==="+ handler.getClass());
if(HandlerMethod.class.equals(handler.getClass())){
Object controller = ((HandlerMethod) handler).getBean();
userid = userInfo == null? request.getHeader("userid") : userInfo.getId().toString();
}
sb.setLength(0);
sb.append("用户编号【")
.append(userid)
.append("】正在访问:")
.append(request.getRequestURL().toString());
logger.info(sb.toString());
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
if (!request.getRequestURI().contains("/static/")){
sb.setLength(0);
sb.append("Method:").append(((HandlerMethod)handler).getShortLogMessage());
logger.info(sb.toString());
Map<String, String[]> parameters = request.getParameterMap();
if (parameters.size() > 0){
sb.setLength(0);
sb.append("Parameters: {");
for (String key : parameters.keySet()){
String value = parameters.get(key)[0];
if (value != null && !value.isEmpty()){
sb.append(key +":"+parameters.get(key)[0]+",");
}
}
if (sb.lastIndexOf(",")!=-1){
sb.deleteCharAt(sb.lastIndexOf(","));
}
sb.append("}");
logger.info(sb.toString());
}
}
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
sb.setLength(0);
sb.append("用户编号【")
.append(userid)
.append("】")
.append(request.getRequestURL().toString())
.append(" 访问结束... ");
logger.info(sb.toString());
/**
* description: TODO
*/
public class LoggerInterceptor implements HandlerInterceptor {
private static Logger logger = LoggerFactory.getLogger(LoggerInterceptor.class);
private static HttpSession session;
private static String userid;
private static StringBuilder sb = new StringBuilder();
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (session==null && (session = request.getSession()) != null){
UserInfo userInfo = (UserInfo)session.getAttribute(Config.CURRENT_USERNAME);
userid = userInfo == null? request.getHeader("userid") : userInfo.getId().toString();
}
sb.setLength(0);
sb.append("用户编号【")
.append(userid)
.append("】正在访问:")
.append(request.getRequestURL().toString());
logger.info(sb.toString());
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
if (!request.getRequestURI().contains("/static/")){
sb.setLength(0);
sb.append("Method:").append(((HandlerMethod)handler).getShortLogMessage());
logger.info(sb.toString());
Map<String, String[]> parameters = request.getParameterMap();
if (parameters.size() > 0){
sb.setLength(0);
sb.append("Parameters: {");
for (String key : parameters.keySet()){
String value = parameters.get(key)[0];
if (value != null && !value.isEmpty()){
sb.append(key +":"+parameters.get(key)[0]+",");
}
}
if (sb.lastIndexOf(",")!=-1){
sb.deleteCharAt(sb.lastIndexOf(","));
int num = userInfoService.add(userInfo);
if(num>0){
return ResultUtil.success();
}else {
return ResultUtil.unSuccess();
}
}catch (Exception e){
return ResultUtil.error(e);
}
}
@RequestMapping("/user/update")
public @ResponseBody Result updateUser(UserInfo userInfo){
try {
int num = userInfoService.update(userInfo);
if(num>0){
return ResultUtil.success();
}else {
return ResultUtil.unSuccess();
}
}catch (Exception e){
return ResultUtil.error(e);
}
}
@RequestMapping("/user/del/{id}")
public @ResponseBody Result deleteUser(@PathVariable String id){
try {
int num = userInfoService.delete(id);
if(num>0){
return ResultUtil.success();
}else {
return ResultUtil.unSuccess();
}
}catch (Exception e){
return ResultUtil.error(e);
}
}
@RequestMapping("/getSessionUser")
@ResponseBody
public UserInfo getSessionUser(HttpSession session){
UserInfo sessionUser = (UserInfo) session.getAttribute(Config.CURRENT_USERNAME);
sessionUser.setPassword(null);
return ResultUtil.success(role);
}else {
return ResultUtil.unSuccess();
}
}catch (Exception e){
return ResultUtil.error(e);
}
}
/**
* 登录时将用户信息加入cookie中
* @param response
*/
private void setCookieUser(HttpServletRequest request, HttpServletResponse response){
UserInfo user = getSessionUser(request.getSession());
Cookie cookie = new Cookie(Config.CURRENT_USERNAME,user.getUsername()+"_"+user.getId());
//cookie 保存7天
cookie.setMaxAge(60*60*24*7);
response.addCookie(cookie);
}
/**
* 注销时删除cookie信息
* @param request
* @param response
*/
private void delCookieUser(HttpServletRequest request, HttpServletResponse response){
UserInfo user = getSessionUser(request.getSession());
Cookie cookie = new Cookie(Config.CURRENT_USERNAME,user.getUsername()+"_"+user.getId());
cookie.setMaxAge(-1);
response.addCookie(cookie);
}
/**
* 通过用户信息获取用户权限信息,并存入session中
* @param userInfo
* @param session
* @return
*/
public UserInfo setSessionUserInfo(UserInfo userInfo, HttpSession session){
List<Privilege> privileges = privilegeService.getPrivilegeByRoleid(userInfo.getRoleid());
userInfo.setPrivileges(privileges);
session.setAttribute(Config.CURRENT_USERNAME,userInfo);
List<Privilege> privileges = privilegeService.getPrivilegeByRoleid(userInfo.getRoleid());
userInfo.setPrivileges(privileges);
session.setAttribute(Config.CURRENT_USERNAME,userInfo);
return userInfo;
}
public UserInfo getUserInfo(UserInfo userInfo){
return userInfoService.getUserInfo(userInfo);
}
}
/**
* description: TODO
*/
@RestController
@RequestMapping("/bills")
public class BillController {
@Resource
private BillService billService;
/**
* 适用于统计图
* @param bill
* @return
//将用户信息存入session
userInfo = setSessionUserInfo(userInfo,request.getSession());
//将当前用户信息存入cookie
setCookieUser(request,response);
return ResultUtil.success("登录成功", userInfo);
}
}
@RequestMapping("/users/getUsersByWhere/{pageNo}/{pageSize}")
public @ResponseBody Result getUsersByWhere(UserInfo userInfo, @PathVariable int pageNo, @PathVariable int pageSize, HttpSession session){
if ("".equals(userInfo.getHouseid())){
userInfo.setHouseid(null);
}
if (userInfo.getRoleid() == -1){
userInfo.setRoleid(Config.getSessionUser(session).getRoleid());
}
Utils.log(userInfo.toString());
PageModel model = new PageModel<>(pageNo,userInfo);
model.setPageSize(pageSize);
return userInfoService.getUsersByWhere(model);
}
@RequestMapping("/user/add")
public @ResponseBody Result addUser(UserInfo userInfo){
System.out.println(userInfo);
try {
int num = userInfoService.add(userInfo);
if(num>0){
return ResultUtil.success();
}else {
return ResultUtil.unSuccess();
}
}catch (Exception e){
return ResultUtil.error(e);
}
}
@RequestMapping("/user/update")
public @ResponseBody Result updateUser(UserInfo userInfo){
try {
int num = userInfoService.update(userInfo);
/**
* description: TODO
*/
@RestController
@RequestMapping("/bills")
public class BillController {
@Resource
private BillService billService;
/**
* 适用于统计图
* @param bill
* @return
*/
@RequestMapping("/getBillsToChart")
public Result<Bill> findByWhereNoPage(Bill bill, HttpSession session){
bill = getHouseBill(bill,session);
return billService.findByWhereNoPage(bill);
}
@RequestMapping("/getBillsByWhere/{type}/{pageNo}/{pageSize}")
public Result<Bill> getBillsByWhere(Bill bill,@PathVariable String type, @PathVariable int pageNo, @PathVariable int pageSize, HttpSession session){
if("-1".equals(bill.getPayway())){
HttpSession session = request.getSession();
//若session中没有用户信息 但cookie中存在用户信息,
//则通过cookie中的信息重新初始化该用户信息,达到免登录的效果
if(session.getAttribute(Config.CURRENT_USERNAME) == null && getCookieUser(request)!=null){
// System.out.println(HandlerMethod.class +"==="+ handler.getClass());
if(HandlerMethod.class.equals(handler.getClass())){
Object controller = ((HandlerMethod) handler).getBean();
if (controller instanceof UserInfoController){
UserInfoController userInfoController = (UserInfoController) controller;
String userinfoStr = getCookieUser(request);
UserInfo userInfo = new UserInfo();
userInfo.setId(Integer.parseInt(userinfoStr.split("_")[1]));
userInfo.setUsername(userinfoStr.split("_")[0]);
userInfo = userInfoController.getUserInfo(userInfo);
userInfoController.setSessionUserInfo(userInfo,session);
return true;
}
}
}
//如果是移动端登录,则跳过登录验证
if ("client".equals(request.getHeader("token"))){
return true;
}
String uri = request.getRequestURI();
// System.out.println("session:"+uri);
//是登录页面或者静态资源,不拦截
if("/".equals(uri) || "/login.html".equals(uri) || "/login.do".equals(uri) || uri.contains("/static/")){
// System.out.println("---放行---");
}else {
//不是登录页面,则验证是否有session,没有则跳转到登录页面
if (session.getAttribute(Config.CURRENT_USERNAME) == null){
response.sendRedirect("/login.html");
return false;
}
}
return true;
/**
* 登录时将用户信息加入cookie中
* @param response
*/
private void setCookieUser(HttpServletRequest request, HttpServletResponse response){
UserInfo user = getSessionUser(request.getSession());
Cookie cookie = new Cookie(Config.CURRENT_USERNAME,user.getUsername()+"_"+user.getId());
//cookie 保存7天
cookie.setMaxAge(60*60*24*7);
response.addCookie(cookie);
}
/**
* 注销时删除cookie信息
* @param request
* @param response
*/
private void delCookieUser(HttpServletRequest request, HttpServletResponse response){
UserInfo user = getSessionUser(request.getSession());
Cookie cookie = new Cookie(Config.CURRENT_USERNAME,user.getUsername()+"_"+user.getId());
cookie.setMaxAge(-1);
response.addCookie(cookie);
}
/**
* 通过用户信息获取用户权限信息,并存入session中
* @param userInfo
* @param session
* @return
*/
public UserInfo setSessionUserInfo(UserInfo userInfo, HttpSession session){
List<Privilege> privileges = privilegeService.getPrivilegeByRoleid(userInfo.getRoleid());
userInfo.setPrivileges(privileges);
session.setAttribute(Config.CURRENT_USERNAME,userInfo);
return userInfo;
}
public UserInfo getUserInfo(UserInfo userInfo){
return userInfoService.getUserInfo(userInfo);
}
}
return ResultUtil.unSuccess();
}
}catch (Exception e){
return ResultUtil.error(e);
}
}
@RequestMapping("/updateBill")
public Result update(Bill bill, HttpSession session){
if (Config.getSessionUser(session)!=null){
bill.setUserid(Config.getSessionUser(session).getId());
}
Utils.log(bill.toString());
try {
int num = billService.update(bill);
if(num>0){
return ResultUtil.success("修改成功!",null);
}else {
return ResultUtil.unSuccess();
}
}catch (Exception e){
return ResultUtil.error(e);
}
}
@RequestMapping("/delBill")
public Result del(int id){
try {
int num = billService.del(id);
if(num>0){
return ResultUtil.success("删除成功!",null);
}else {
return ResultUtil.unSuccess();
}
}catch (Exception e){
return ResultUtil.error(e);
}
}
@RequestMapping("/getPayways")
public Result<Payway> getAllPayways(){
}catch (Exception e){
return ResultUtil.error(e);
}
}
@RequestMapping("/getRole/{id}")
public @ResponseBody Result getRoleById(@PathVariable String id){
try {
Role role = userInfoService.getRoleById(id);
if(role != null){
return ResultUtil.success(role);
}else {
return ResultUtil.unSuccess();
}
}catch (Exception e){
return ResultUtil.error(e);
}
}
/**
* 登录时将用户信息加入cookie中
* @param response
*/
private void setCookieUser(HttpServletRequest request, HttpServletResponse response){
UserInfo user = getSessionUser(request.getSession());
Cookie cookie = new Cookie(Config.CURRENT_USERNAME,user.getUsername()+"_"+user.getId());
//cookie 保存7天
cookie.setMaxAge(60*60*24*7);
response.addCookie(cookie);
}
/**
* 注销时删除cookie信息
* @param request
* @param response
*/
private void delCookieUser(HttpServletRequest request, HttpServletResponse response){
UserInfo user = getSessionUser(request.getSession());
Cookie cookie = new Cookie(Config.CURRENT_USERNAME,user.getUsername()+"_"+user.getId());
cookie.setMaxAge(-1);
response.addCookie(cookie);
}
/**
* 通过用户信息获取用户权限信息,并存入session中
* @param userInfo
* @param session
* @return
*/
public UserInfo setSessionUserInfo(UserInfo userInfo, HttpSession session){
privilegeService.addDefaultPrivilegesWhenAddRole(roleid);
return ResultUtil.unSuccess();
}
}catch (Exception e){
return ResultUtil.error(e);
}
}
@RequestMapping("/getRole/{id}")
public @ResponseBody Result getRoleById(@PathVariable String id){
try {
Role role = userInfoService.getRoleById(id);
if(role != null){
return ResultUtil.success(role);
}else {
return ResultUtil.unSuccess();
}
}catch (Exception e){
return ResultUtil.error(e);
}
}
/**
* 登录时将用户信息加入cookie中
* @param response
*/
private void setCookieUser(HttpServletRequest request, HttpServletResponse response){
UserInfo user = getSessionUser(request.getSession());
Cookie cookie = new Cookie(Config.CURRENT_USERNAME,user.getUsername()+"_"+user.getId());
//cookie 保存7天
cookie.setMaxAge(60*60*24*7);
response.addCookie(cookie);
}
/**
* 注销时删除cookie信息
* @param request
* @param response
*/
private void delCookieUser(HttpServletRequest request, HttpServletResponse response){
UserInfo user = getSessionUser(request.getSession());
Cookie cookie = new Cookie(Config.CURRENT_USERNAME,user.getUsername()+"_"+user.getId());
cookie.setMaxAge(-1);
response.addCookie(cookie);
}
}else {
return ResultUtil.unSuccess();
}
}catch (Exception e){
return ResultUtil.error(e);
}
}
@RequestMapping("/delBill")
public Result del(int id){
try {
int num = billService.del(id);
if(num>0){
return ResultUtil.success("删除成功!",null);
}else {
return ResultUtil.unSuccess();
}
}catch (Exception e){
return ResultUtil.error(e);
}
}
@RequestMapping("/getPayways")
public Result<Payway> getAllPayways(){
try {
List<Payway> payways = billService.getAllPayways();
if (payways!=null && payways.size()>0){
return ResultUtil.success(payways);
}else {
return ResultUtil.unSuccess();
}
} catch (Exception e) {
return ResultUtil.error(e);
}
}
}
/**
return null;
}
}
}
/**
* description: TODO
*/
public class LoggerInterceptor implements HandlerInterceptor {
private static Logger logger = LoggerFactory.getLogger(LoggerInterceptor.class);
private static HttpSession session;
private static String userid;
private static StringBuilder sb = new StringBuilder();
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (session==null && (session = request.getSession()) != null){
UserInfo userInfo = (UserInfo)session.getAttribute(Config.CURRENT_USERNAME);
userid = userInfo == null? request.getHeader("userid") : userInfo.getId().toString();
}
sb.setLength(0);
sb.append("用户编号【")
.append(userid)
.append("】正在访问:")
.append(request.getRequestURL().toString());
@RequestMapping(value = "/login.do")
@ResponseBody
public Result getUserInfo(UserInfo userInfo, HttpServletRequest request, HttpServletResponse response){
boolean userIsExisted = userInfoService.userIsExisted(userInfo);
System.out.println(userIsExisted + " - " + request.getHeader("token"));
userInfo = getUserInfo(userInfo);
if("client".equals(request.getHeader("token")) && !userIsExisted){
//用户不存在
return ResultUtil.success(-1);
}
if (userIsExisted && userInfo == null){
return ResultUtil.unSuccess("用户名或密码错误!");
}else {
//将用户信息存入session
userInfo = setSessionUserInfo(userInfo,request.getSession());
//将当前用户信息存入cookie
setCookieUser(request,response);
return ResultUtil.success("登录成功", userInfo);
}
}
@RequestMapping("/users/getUsersByWhere/{pageNo}/{pageSize}")
public @ResponseBody Result getUsersByWhere(UserInfo userInfo, @PathVariable int pageNo, @PathVariable int pageSize, HttpSession session){
if ("".equals(userInfo.getHouseid())){
userInfo.setHouseid(null);
}
if (userInfo.getRoleid() == -1){
userInfo.setRoleid(Config.getSessionUser(session).getRoleid());
}
Utils.log(userInfo.toString());
PageModel model = new PageModel<>(pageNo,userInfo);
model.setPageSize(pageSize);
return userInfoService.getUsersByWhere(model);
}
@RequestMapping("/user/add")
public @ResponseBody Result addUser(UserInfo userInfo){
System.out.println(userInfo);
try {
int num = userInfoService.add(userInfo);
if(num>0){
return ResultUtil.success();
}else {
return ResultUtil.unSuccess();
}
}catch (Exception e){
return ResultUtil.error(e);
}
}
@RequestMapping("/user/update")
public @ResponseBody Result updateUser(UserInfo userInfo){
try {
* 适用于统计图
* @param bill
* @return
*/
@RequestMapping("/getBillsToChart")
public Result<Bill> findByWhereNoPage(Bill bill, HttpSession session){
bill = getHouseBill(bill,session);
return billService.findByWhereNoPage(bill);
}
@RequestMapping("/getBillsByWhere/{type}/{pageNo}/{pageSize}")
public Result<Bill> getBillsByWhere(Bill bill,@PathVariable String type, @PathVariable int pageNo, @PathVariable int pageSize, HttpSession session){
if("-1".equals(bill.getPayway())){
bill.setPayway(null);
}
bill.setType(type);
bill = getHouseBill(bill,session);
System.out.println(bill);
PageModel model = new PageModel<>(pageNo,bill);
model.setPageSize(pageSize);
return billService.findByWhere(model);
}
@RequestMapping("/getBillsByUserid/{userid}/{pageNo}/{pageSize}/{year}/{month}")
public Result getBillsByUserid(@PathVariable Integer userid, @PathVariable int pageNo, @PathVariable int pageSize, @PathVariable int year, @PathVariable int month){
Bill bill = new Bill();
bill.setUserid(userid);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
bill.setStartTime(year+"-0"+month+"-01");
try {
Date date = sdf.parse(year+"-0"+(month+1)+"-01");
date.setDate(date.getDate()-1);
bill.setEndTime(sdf.format(date));
} catch (ParseException e) {
e.printStackTrace();
}
PageModel model = new PageModel<>(pageNo,bill);
model.setPageSize(pageSize);
Result result = billService.findByWhere(model);
List<Map<String,String>> r = billService.getMonthlyInfo(model);
Map<String,String> map = new HashMap<>();
for (Map<String,String> m: r) {
map.put(m.get("typeid"),String.format("%.2f",m.get("sum(money)")));
}
result.setData(map);
return result;
}
private Bill getHouseBill(Bill bill, HttpSession session) {
UserInfo currentUser = Config.getSessionUser(session);
//当登录用户为家主时,查询默认查询全家账单情况
//当登录用户为普通用户时,仅查询当前用户的账单
if (currentUser.getRoleid() == 2){
bill.setHouseid(currentUser.getHouseid());