Springboot+Vue实现物业管理系统

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 使用SpringBoot+Mybatis+BootStrap+Layui+VUE制作的智慧小区物业管理系统。本系统采用了 B/S 架构,Java、Html、Css、Js 等技术,使用了主流的后台开发框架SpringBoot(SpringMVC+Spring+Mybatis),前端开发框架使用了 LayUI、Vue、JQuery 以及 Vue的前端组件库 Element-UI,采用了开源的轻量级数据库 Mysql 进行开发。实现了小区管理、房产管理、设备管理、业主管理、服务管理、车位管理等主要功能。...

项目编号:BS-XX-137

一,项目简介

使用SpringBoot+Mybatis+BootStrap+Layui+VUE制作的智慧小区物业管理系统。 本系统采用了 B/S 架构,Java、Html、Css、Js 等技术,使用了主流的后台开发框架SpringBoot(SpringMVC+Spring+Mybatis),前端开发框架使用了 LayUI、Vue、JQuery 以及 Vue的前端组件库 Element-UI,采用了开源的轻量级数据库 Mysql 进行开发。实现了小区管理、房产管理、设备管理、业主管理、服务管理、车位管理等主要功能。提升物业管理水平,提高工作效率,降低成本,便于物业快速回收物业费;扩大服务范围和能力,方便住户,提升用户满意度;为物业公司扩展了新的收入渠道:租赁中介、社区团购、物业服务;为住户缴纳物业费、水电、停车费等生活费用,提供在线支付,方便快捷。

二,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

后台开发技术:Springboot+Mybatis

前端开发技术:Vue+Layui+Jquery

三,系统展示

用户登陆

image.gif编辑

首页仪表盘

image.gif编辑

小区管理

image.gif编辑

房产管理

image.gif编辑

业主相关信息管理

image.gif编辑

车位信息及使用管理

image.gif编辑

业务相关服务管理模块

image.gif编辑

小区资产管理

image.gif编辑

小区收费管理

image.gif编辑

管理员管理

image.gif编辑

用户组角色管理

image.gif编辑

系统设置

image.gif编辑

1.  导入项目到IDE工具(如Eclipse)


2.  导入数据库文件estatedb.sql到MySQL


3.  修改src/main/resources/application.yml文件中的数据库链接地址、账号密码


4.  运行启动类com.es.estatemanagement.EstateManagementApplication,启动项目,默认端口为8888


5.  浏览器访问http://localhost:8888/,进入首页

四,核心代码展示

package com.es.estatemanagement.controller;
import com.es.estatemanagement.common.MessageConstant;
import com.es.estatemanagement.common.PageResult;
import com.es.estatemanagement.common.Result;
import com.es.estatemanagement.common.StatusCode;
import com.es.estatemanagement.domain.Building;
import com.es.estatemanagement.domain.Community;
import com.es.estatemanagement.service.BuildingService;
import com.es.estatemanagement.service.CommunityService;
import com.github.pagehelper.Page;
import org.springframework.beans.factory.annotation.Autowired;
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.RestController;
import java.util.List;
import java.util.Map;
/**
 * @Auth: znz
 * @Desc:
 */
@RestController
@RequestMapping("/building")
public class BuildingController {
    @Autowired
    private BuildingService buildingService;
    @RequestMapping("/find")
    public Result find(){
        List<Building> all = buildingService.findAll();
        return new Result(false,200,"请求成功adasdasdas",all);
    }
    @RequestMapping("/search")
    public PageResult search(@RequestBody Map searchMap){
        Page<Building> page = buildingService.search(searchMap);
        return new PageResult(true, StatusCode.OK, MessageConstant.COMMUNITY_SEARCH_SUCCESS,page.getResult(),page.getTotal());
    }
    @RequestMapping("/add")
    public Result add(@RequestBody Building community){
        Boolean add = buildingService.add(community);
        return new Result(true,StatusCode.OK,MessageConstant.COMMUNITY_ADD_SUCCESS);
    }
    @RequestMapping("/findById")
    public Result findById(Integer id){
        Building community = buildingService.findById(id);
        return new Result(true,StatusCode.OK,MessageConstant.COMMUNITY_FIND_BY_ID_SUCCESS,community);
    }
    @RequestMapping("/update")
    public Result update(@RequestBody Building community){
        Boolean add = buildingService.update(community);
        return new Result(true,StatusCode.OK,MessageConstant.COMMUNITY_UPDATE_SUCCESS);
    }
    @RequestMapping("/del")
    public Result del(@RequestBody List<Integer> ids){
        Boolean flag = buildingService.del(ids);
        return new Result(true,StatusCode.OK,MessageConstant.COMMUNITY_DELETE_SUCCESS);
    }
}

image.gif

package com.es.estatemanagement.controller;
import com.es.estatemanagement.common.MessageConstant;
import com.es.estatemanagement.common.PageResult;
import com.es.estatemanagement.common.Result;
import com.es.estatemanagement.common.StatusCode;
import com.es.estatemanagement.domain.Community;
import com.es.estatemanagement.service.CommunityService;
import com.github.pagehelper.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
 * @Auth: zhuan
 * @Desc: 小区管理控制层:只负责接收前端浏览器发送的请求和请求参数,调用service层获取业务逻辑加工处理后的数据
 */
@RestController
@RequestMapping("/community")
public class CommunityController {
    @Autowired
    private CommunityService communityService;
    @RequestMapping("/find")
    public Result find(){
        List<Community> all = communityService.findAll();
        return new Result(false,200,"请求成功adasdasdas",all);
    }
    @RequestMapping("/search")
    public PageResult search(@RequestBody Map searchMap){
        Page<Community> page = communityService.search(searchMap);
        return new PageResult(true, StatusCode.OK, MessageConstant.COMMUNITY_SEARCH_SUCCESS,page.getResult(),page.getTotal());
    }
    @RequestMapping("/add")
    public Result add(@RequestBody Community community){
        Boolean add = communityService.add(community);
        return new Result(true,StatusCode.OK,MessageConstant.COMMUNITY_ADD_SUCCESS);
    }
    @RequestMapping("/findById")
    public Result findById(Integer id){
        Community community = communityService.findById(id);
        return new Result(true,StatusCode.OK,MessageConstant.COMMUNITY_FIND_BY_ID_SUCCESS,community);
    }
    @RequestMapping("/update")
    public Result update(@RequestBody Community community){
        Boolean add = communityService.update(community);
        return new Result(true,StatusCode.OK,MessageConstant.COMMUNITY_UPDATE_SUCCESS);
    }
    // /community/updateStatus/0/1
    @RequestMapping("/updateStatus/{status}/{id}")
    public Result updateStatus(@PathVariable("status") String status,@PathVariable("id") Integer id){
        Boolean flag = communityService.updateStatus(status,id);
        return new Result(true,StatusCode.OK,MessageConstant.COMMUNITY_UPDATE_STATUS_SUCCESS);
    }
    @RequestMapping("/del")
    public Result del(@RequestBody List<Integer> ids){
        Boolean flag = communityService.del(ids);
        return new Result(true,StatusCode.OK,MessageConstant.COMMUNITY_DELETE_SUCCESS);
    }
}

image.gif

package com.es.estatemanagement.controller;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.es.estatemanagement.common.MessageConstant;
import com.es.estatemanagement.common.Result;
import com.es.estatemanagement.common.StatusCode;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import com.alibaba.fastjson.JSONObject;
/**
 * @Auth: zhuan
 * @Desc: 文件上传-控制器
 */
@RestController
@RequestMapping("/estate")
public class FileController {
  /**
   * 功能描述: 上传文件
   * @param file  上传文件的参数名,必须和前端参数名称一致
   * @param request 请求对象
   * @param response  响应对象
   * @return : com.es.estatemanagement.common.Result
   */
  @RequestMapping(value="/fileupload")
  public Result uploads(@RequestParam("file")MultipartFile file, HttpServletRequest request,HttpServletResponse response) throws IOException {
    //获取当前项目所在绝对路径
    String absolutePath = System.getProperty("user.dir");
    //当前项目名称,可以自定义
    String projectName = "/estate-management";
    //文件上传后所在绝对路径
    String savePath = absolutePath+"/src/main/resources/static/fileupload/";
    //保存在数据库的文件地址
    String saveUrl = "/fileupload/";
    // 定义允许上传的文件扩展名
    HashMap<String, String> extMap = new HashMap<String, String>();
    extMap.put("image", "gif,jpg,jpeg,png,bmp");
    // 最大文件大小
    long maxSize = 10000000; //10M
    response.setContentType("text/html; charset=UTF-8");
    if (!ServletFileUpload.isMultipartContent(request)) {
      return new Result(false, StatusCode.ERROR,MessageConstant.NO_FILE_SELECTED);
    }
    File uploadDir = new File(savePath);
    // 判断文件夹是否存在,如果不存在则创建文件夹
    if (!uploadDir.exists()) {
      uploadDir.mkdirs();
    }
    // 检查目录写权限
    if (!uploadDir.canWrite()) {
      return new Result(false, StatusCode.ERROR,MessageConstant.NO_WRITE_PERMISSION);
    }
    String dirName = request.getParameter("dir");
    if (dirName == null) {
      dirName = "image";
    }
    if (!extMap.containsKey(dirName)) {
      return new Result(false, StatusCode.ERROR,MessageConstant.INCORRECT_DIRECTORY_NAME);
    }
    MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request;
    Map<String, MultipartFile> fileMap = mRequest.getFileMap();
    String fileName = null;
    Iterator<Map.Entry<String, MultipartFile>> iter = fileMap.entrySet().iterator();
    for (String s : fileMap.keySet()) {
    }
    for (Iterator<Map.Entry<String, MultipartFile>> it = fileMap.entrySet().iterator(); it.hasNext();) {
      Map.Entry<String, MultipartFile> entry = it.next();
      MultipartFile mFile = entry.getValue();
      fileName = mFile.getOriginalFilename();
      // 检查文件大小
      if (mFile.getSize() > maxSize) {
        return new Result(false, StatusCode.ERROR,MessageConstant.SIZE_EXCEEDS__LIMIT);
      }
      String fileExt = fileName.substring(fileName.lastIndexOf(".")+1);
      if (!Arrays.<String> asList(extMap.get(dirName).split(",")).contains(fileExt)) {
        return new Result(false, StatusCode.ERROR,MessageConstant.FILE_TYPE_ERROR);
      }
      UUID uuid = UUID.randomUUID();
      String path = savePath + uuid.toString() +"."+ fileExt;
      System.out.println("文件存储地址:【"+path+"】");
      saveUrl = saveUrl  + uuid.toString() +"."+ fileExt;
      try {
        BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(path));
        FileCopyUtils.copy(mFile.getInputStream(), outputStream);
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    return new Result(true,StatusCode.OK, MessageConstant.COMMUNITY_PIC_UPLOAD_SUCCESS,saveUrl);
  }
  /**
   * 功能描述: 删除文件
   * @param fileName  文件名称参数,和前台传递的参数保持一致
   * @return : com.es.estatemanagement.common.Result
   */
  @RequestMapping(value="/delfile")
  public Result fileDel(@RequestParam String fileName){
    String name = fileName.replace("/fileupload/","");
    //获取当前项目所在绝对路径
    String absolutePath = System.getProperty("user.dir");
    //当前项目名称,可以自定义
    String projectName = "/estate-management";
    //文件上传后所在绝对路径
    String savePath = absolutePath+projectName+"/src/main/resources/static/fileupload/";
    File file = new File(savePath+name);
    if (file.exists()){//文件是否存在
      file.delete();//删除文件
    }
    return new Result(true,StatusCode.OK, MessageConstant.COMMUNITY_PIC_DEL_SUCCESS);
  }
}

image.gif

五,项目总结

1. 系统上传的文件会存放在项目目录/src/main/resources/static/fileupload


2. 项目使用的MySQL驱动版本是5.1.30,如果MySQL版本是8.0以上,需要将pom.xml中的MySQL驱动版本改为8.0以上版本,或者直接将`<version>5.1.30</version>`删除即可。因为Springboot使用的默认MySQL驱动版本为8.0.20  


4. 小区管理模块实现了从前端到控制层、业务层、持久层的完整功能,可以参照该模块实现其他功能。


5. 本系统使用了Mybatis插件TkMapper,TkMapper又名通用 Mapper,封装了对单表的 CRUD 操作。通用 Mapper 可以极大的方便开发人员。可以随意的按照自己的需要选择通用方法,还可以很方便的开发自己的通用方法。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
数据库
基于springboot+mybatisplus+vue的课程学分管理系统
基于springboot+mybatisplus+vue的课程学分管理系统
154 0
基于springboot+mybatisplus+vue的课程学分管理系统
|
SQL 前端开发 JavaScript
基于Springboot+Vue+Mybatis的小说阅读管理系统
基于Springboot+Vue+Mybatis的小说阅读管理系统
632 2
基于Springboot+Vue+Mybatis的小说阅读管理系统
基于Springboot+Mybatisplus+Vue的在线购物平台管理系统
基于Springboot+Mybatisplus+Vue的在线购物平台管理系统
232 1
基于Springboot+Mybatisplus+Vue的在线购物平台管理系统
|
SQL 前端开发 JavaScript
基于Springboot+MybatisPlus+Vue的前后端分离电子商城系统
基于Springboot+MybatisPlus+Vue的前后端分离电子商城系统
419 0
基于Springboot+MybatisPlus+Vue的前后端分离电子商城系统
|
SQL 前端开发 JavaScript
基于Springboot+MyBatisPlus+Vue前后端分离大学生毕业论文答辩系统
基于Springboot+MyBatisPlus+Vue前后端分离大学生毕业论文答辩系统
641 0
基于Springboot+MyBatisPlus+Vue前后端分离大学生毕业论文答辩系统
|
前端开发 JavaScript Java
基于springboot+vue前后端分离的学生在线考试管理系统
基于springboot+vue前后端分离的学生在线考试管理系统
290 0
基于springboot+vue前后端分离的学生在线考试管理系统
|
前端开发 JavaScript Java
有关后端使用Springboot导出Excel,前端使用vue实现Excel下载的功能实现
有关后端使用Springboot导出Excel,前端使用vue实现Excel下载的功能实现
572 0
|
关系型数据库 MySQL Java
搭建自己第一个springboot+vue程序
尝试用Linux部署springboot项目 通过安装java jdk mysql环境后 将项目部署到服务器 进行调试
搭建自己第一个springboot+vue程序
|
存储 监控 JavaScript
基于SpringBoot+Redis+Vue的后台管理系统开源项目,附源码地址
项目名称 eladmin (权限管理系统) 简介 eladmin 是一款基于 Spring Boot 2.1.0 、 Jpa、 Spring Security、redis、Vue 的前后端分离的后台管理系统,项目采用分模块开发方式, 权限控制采用 RBAC,支持数据字典与数据权限管理,支持一键生成前后端代码,支持动态路由。
基于Springboot+MybatisPlus+Vue的在线课程管理系统
基于Springboot+MybatisPlus+Vue的在线课程管理系统
160 0
基于Springboot+MybatisPlus+Vue的在线课程管理系统