Springboot+Vue实现物业管理系统

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Springboot+Vue实现物业管理系统

项目编号: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.png

首页仪表盘

image.png

小区管理

image.png

房产管理

image.png

业主相关信息管理

image.png

车位信息及使用管理

image.png

业务相关服务管理模块

image.png

小区资产管理

image.png

小区收费管理

image.png

管理员管理

image.png

用户组角色管理

image.png

系统设置

image.png

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);
    }
}
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);
    }
}
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);
  }
}

五,项目总结


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 可以极大的方便开发人员。可以随意的按照自己的需要选择通用方法,还可以很方便的开发自己的通用方法。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
4月前
|
缓存 JavaScript PHP
斩获开发者口碑!SnowAdmin:基于 Vue3 的高颜值后台管理系统,3 步极速上手!
SnowAdmin 是一款基于 Vue3/TypeScript/Arco Design 的开源后台管理框架,以“清新优雅、开箱即用”为核心设计理念。提供角色权限精细化管理、多主题与暗黑模式切换、动态路由与页面缓存等功能,支持代码规范自动化校验及丰富组件库。通过模块化设计与前沿技术栈(Vite5/Pinia),显著提升开发效率,适合团队协作与长期维护。项目地址:[GitHub](https://github.com/WANG-Fan0912/SnowAdmin)。
702 5
|
4月前
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
408 1
|
5月前
|
前端开发 Java 关系型数据库
基于Java+Springboot+Vue开发的鲜花商城管理系统源码+运行
基于Java+Springboot+Vue开发的鲜花商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的鲜花商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。技术学习共同进步
404 7
|
4月前
|
供应链 JavaScript BI
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
这是一款专为小微企业打造的 SaaS ERP 管理系统,基于 SpringBoot+Vue+ElementUI+UniAPP 技术栈开发,帮助企业轻松上云。系统覆盖进销存、采购、销售、生产、财务、品质、OA 办公及 CRM 等核心功能,业务流程清晰且操作简便。支持二次开发与商用,提供自定义界面、审批流配置及灵活报表设计,助力企业高效管理与数字化转型。
424 2
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
|
7月前
|
前端开发 JavaScript Java
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
326 13
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
|
7月前
|
SQL JavaScript 安全
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
277 11
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
|
5月前
|
JavaScript 前端开发 Java
Spring Boot 与 Vue.js 前后端分离中的数据交互机制
本文深入探讨了Spring Boot与Vue.js在前后端分离架构下的数据交互机制。通过对比传统`model.addAttribute()`方法与RESTful API的设计,分析了两者在耦合性、灵活性及可扩展性方面的差异。Spring Boot以RESTful API提供数据服务,Vue.js借助Axios消费API并动态渲染页面,实现了职责分明的解耦架构。该模式显著提升了系统的灵活性和维护性,适用于复杂应用场景如论坛、商城系统等,为现代Web开发提供了重要参考。
432 0
|
8月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的留守儿童爱心网站设计与实现(计算机毕设项目实战+源码+文档)
博主是一位全网粉丝超过100万的CSDN特邀作者、博客专家,专注于Java、Python、PHP等技术领域。提供SpringBoot、Vue、HTML、Uniapp、PHP、Python、NodeJS、爬虫、数据可视化等技术服务,涵盖免费选题、功能设计、开题报告、论文辅导、答辩PPT等。系统采用SpringBoot后端框架和Vue前端框架,确保高效开发与良好用户体验。所有代码由博主亲自开发,并提供全程录音录屏讲解服务,保障学习效果。欢迎点赞、收藏、关注、评论,获取更多精品案例源码。
|
8月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的家政服务管理平台设计与实现(计算机毕设项目实战+源码+文档)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
|
8月前
|
JavaScript 搜索推荐 Java
基于SpringBoot+Vue实现的家乡特色推荐系统设计与实现(源码+文档+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!