• 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

    三,系统展示

    用户登陆

    首页仪表盘

    小区管理

    房产管理

    业主相关信息管理

    车位信息及使用管理

    业务相关服务管理模块

    小区资产管理

    小区收费管理

    管理员管理

    用户组角色管理

    系统设置

    1.  导入项目到IDE工具(如Eclipse)
    
    2.  导入数据库文件estatedb.sql到MySQL
    
    3.  修改src/main/resources/application.yml文件中的数据库链接地址、账号密码
    
    4.  运行启动类com.es.estatemanagement.EstateManagementApplication,启动项目,默认端口为8888
    
    5.  浏览器访问http://localhost:8888/,进入首页

    四,核心代码展示

    1. package com.es.estatemanagement.controller;
    2. import com.es.estatemanagement.common.MessageConstant;
    3. import com.es.estatemanagement.common.PageResult;
    4. import com.es.estatemanagement.common.Result;
    5. import com.es.estatemanagement.common.StatusCode;
    6. import com.es.estatemanagement.domain.Building;
    7. import com.es.estatemanagement.domain.Community;
    8. import com.es.estatemanagement.service.BuildingService;
    9. import com.es.estatemanagement.service.CommunityService;
    10. import com.github.pagehelper.Page;
    11. import org.springframework.beans.factory.annotation.Autowired;
    12. import org.springframework.web.bind.annotation.PathVariable;
    13. import org.springframework.web.bind.annotation.RequestBody;
    14. import org.springframework.web.bind.annotation.RequestMapping;
    15. import org.springframework.web.bind.annotation.RestController;
    16. import java.util.List;
    17. import java.util.Map;
    18. /**
    19. * @Auth: znz
    20. * @Desc:
    21. */
    22. @RestController
    23. @RequestMapping("/building")
    24. public class BuildingController {
    25. @Autowired
    26. private BuildingService buildingService;
    27. @RequestMapping("/find")
    28. public Result find(){
    29. List all = buildingService.findAll();
    30. return new Result(false,200,"请求成功adasdasdas",all);
    31. }
    32. @RequestMapping("/search")
    33. public PageResult search(@RequestBody Map searchMap){
    34. Page page = buildingService.search(searchMap);
    35. return new PageResult(true, StatusCode.OK, MessageConstant.COMMUNITY_SEARCH_SUCCESS,page.getResult(),page.getTotal());
    36. }
    37. @RequestMapping("/add")
    38. public Result add(@RequestBody Building community){
    39. Boolean add = buildingService.add(community);
    40. return new Result(true,StatusCode.OK,MessageConstant.COMMUNITY_ADD_SUCCESS);
    41. }
    42. @RequestMapping("/findById")
    43. public Result findById(Integer id){
    44. Building community = buildingService.findById(id);
    45. return new Result(true,StatusCode.OK,MessageConstant.COMMUNITY_FIND_BY_ID_SUCCESS,community);
    46. }
    47. @RequestMapping("/update")
    48. public Result update(@RequestBody Building community){
    49. Boolean add = buildingService.update(community);
    50. return new Result(true,StatusCode.OK,MessageConstant.COMMUNITY_UPDATE_SUCCESS);
    51. }
    52. @RequestMapping("/del")
    53. public Result del(@RequestBody List ids){
    54. Boolean flag = buildingService.del(ids);
    55. return new Result(true,StatusCode.OK,MessageConstant.COMMUNITY_DELETE_SUCCESS);
    56. }
    57. }

    1. package com.es.estatemanagement.controller;
    2. import com.es.estatemanagement.common.MessageConstant;
    3. import com.es.estatemanagement.common.PageResult;
    4. import com.es.estatemanagement.common.Result;
    5. import com.es.estatemanagement.common.StatusCode;
    6. import com.es.estatemanagement.domain.Community;
    7. import com.es.estatemanagement.service.CommunityService;
    8. import com.github.pagehelper.Page;
    9. import org.springframework.beans.factory.annotation.Autowired;
    10. import org.springframework.web.bind.annotation.*;
    11. import java.util.List;
    12. import java.util.Map;
    13. /**
    14. * @Auth: zhuan
    15. * @Desc: 小区管理控制层:只负责接收前端浏览器发送的请求和请求参数,调用service层获取业务逻辑加工处理后的数据
    16. */
    17. @RestController
    18. @RequestMapping("/community")
    19. public class CommunityController {
    20. @Autowired
    21. private CommunityService communityService;
    22. @RequestMapping("/find")
    23. public Result find(){
    24. List all = communityService.findAll();
    25. return new Result(false,200,"请求成功adasdasdas",all);
    26. }
    27. @RequestMapping("/search")
    28. public PageResult search(@RequestBody Map searchMap){
    29. Page page = communityService.search(searchMap);
    30. return new PageResult(true, StatusCode.OK, MessageConstant.COMMUNITY_SEARCH_SUCCESS,page.getResult(),page.getTotal());
    31. }
    32. @RequestMapping("/add")
    33. public Result add(@RequestBody Community community){
    34. Boolean add = communityService.add(community);
    35. return new Result(true,StatusCode.OK,MessageConstant.COMMUNITY_ADD_SUCCESS);
    36. }
    37. @RequestMapping("/findById")
    38. public Result findById(Integer id){
    39. Community community = communityService.findById(id);
    40. return new Result(true,StatusCode.OK,MessageConstant.COMMUNITY_FIND_BY_ID_SUCCESS,community);
    41. }
    42. @RequestMapping("/update")
    43. public Result update(@RequestBody Community community){
    44. Boolean add = communityService.update(community);
    45. return new Result(true,StatusCode.OK,MessageConstant.COMMUNITY_UPDATE_SUCCESS);
    46. }
    47. // /community/updateStatus/0/1
    48. @RequestMapping("/updateStatus/{status}/{id}")
    49. public Result updateStatus(@PathVariable("status") String status,@PathVariable("id") Integer id){
    50. Boolean flag = communityService.updateStatus(status,id);
    51. return new Result(true,StatusCode.OK,MessageConstant.COMMUNITY_UPDATE_STATUS_SUCCESS);
    52. }
    53. @RequestMapping("/del")
    54. public Result del(@RequestBody List ids){
    55. Boolean flag = communityService.del(ids);
    56. return new Result(true,StatusCode.OK,MessageConstant.COMMUNITY_DELETE_SUCCESS);
    57. }
    58. }

    1. package com.es.estatemanagement.controller;
    2. import java.io.BufferedOutputStream;
    3. import java.io.File;
    4. import java.io.FileOutputStream;
    5. import java.io.IOException;
    6. import java.util.Arrays;
    7. import java.util.HashMap;
    8. import java.util.Iterator;
    9. import java.util.Map;
    10. import java.util.UUID;
    11. import javax.servlet.http.HttpServletRequest;
    12. import javax.servlet.http.HttpServletResponse;
    13. import com.es.estatemanagement.common.MessageConstant;
    14. import com.es.estatemanagement.common.Result;
    15. import com.es.estatemanagement.common.StatusCode;
    16. import org.apache.commons.fileupload.servlet.ServletFileUpload;
    17. import org.springframework.util.FileCopyUtils;
    18. import org.springframework.web.bind.annotation.RequestMapping;
    19. import org.springframework.web.bind.annotation.RequestParam;
    20. import org.springframework.web.bind.annotation.RestController;
    21. import org.springframework.web.multipart.MultipartFile;
    22. import org.springframework.web.multipart.MultipartHttpServletRequest;
    23. import com.alibaba.fastjson.JSONObject;
    24. /**
    25. * @Auth: zhuan
    26. * @Desc: 文件上传-控制器
    27. */
    28. @RestController
    29. @RequestMapping("/estate")
    30. public class FileController {
    31. /**
    32. * 功能描述: 上传文件
    33. * @param file 上传文件的参数名,必须和前端参数名称一致
    34. * @param request 请求对象
    35. * @param response 响应对象
    36. * @return : com.es.estatemanagement.common.Result
    37. */
    38. @RequestMapping(value="/fileupload")
    39. public Result uploads(@RequestParam("file")MultipartFile file, HttpServletRequest request,HttpServletResponse response) throws IOException {
    40. //获取当前项目所在绝对路径
    41. String absolutePath = System.getProperty("user.dir");
    42. //当前项目名称,可以自定义
    43. String projectName = "/estate-management";
    44. //文件上传后所在绝对路径
    45. String savePath = absolutePath+"/src/main/resources/static/fileupload/";
    46. //保存在数据库的文件地址
    47. String saveUrl = "/fileupload/";
    48. // 定义允许上传的文件扩展名
    49. HashMap extMap = new HashMap();
    50. extMap.put("image", "gif,jpg,jpeg,png,bmp");
    51. // 最大文件大小
    52. long maxSize = 10000000; //10M
    53. response.setContentType("text/html; charset=UTF-8");
    54. if (!ServletFileUpload.isMultipartContent(request)) {
    55. return new Result(false, StatusCode.ERROR,MessageConstant.NO_FILE_SELECTED);
    56. }
    57. File uploadDir = new File(savePath);
    58. // 判断文件夹是否存在,如果不存在则创建文件夹
    59. if (!uploadDir.exists()) {
    60. uploadDir.mkdirs();
    61. }
    62. // 检查目录写权限
    63. if (!uploadDir.canWrite()) {
    64. return new Result(false, StatusCode.ERROR,MessageConstant.NO_WRITE_PERMISSION);
    65. }
    66. String dirName = request.getParameter("dir");
    67. if (dirName == null) {
    68. dirName = "image";
    69. }
    70. if (!extMap.containsKey(dirName)) {
    71. return new Result(false, StatusCode.ERROR,MessageConstant.INCORRECT_DIRECTORY_NAME);
    72. }
    73. MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request;
    74. Map fileMap = mRequest.getFileMap();
    75. String fileName = null;
    76. Iterator> iter = fileMap.entrySet().iterator();
    77. for (String s : fileMap.keySet()) {
    78. }
    79. for (Iterator> it = fileMap.entrySet().iterator(); it.hasNext();) {
    80. Map.Entry entry = it.next();
    81. MultipartFile mFile = entry.getValue();
    82. fileName = mFile.getOriginalFilename();
    83. // 检查文件大小
    84. if (mFile.getSize() > maxSize) {
    85. return new Result(false, StatusCode.ERROR,MessageConstant.SIZE_EXCEEDS__LIMIT);
    86. }
    87. String fileExt = fileName.substring(fileName.lastIndexOf(".")+1);
    88. if (!Arrays. asList(extMap.get(dirName).split(",")).contains(fileExt)) {
    89. return new Result(false, StatusCode.ERROR,MessageConstant.FILE_TYPE_ERROR);
    90. }
    91. UUID uuid = UUID.randomUUID();
    92. String path = savePath + uuid.toString() +"."+ fileExt;
    93. System.out.println("文件存储地址:【"+path+"】");
    94. saveUrl = saveUrl + uuid.toString() +"."+ fileExt;
    95. try {
    96. BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(path));
    97. FileCopyUtils.copy(mFile.getInputStream(), outputStream);
    98. } catch (IOException e) {
    99. e.printStackTrace();
    100. }
    101. }
    102. return new Result(true,StatusCode.OK, MessageConstant.COMMUNITY_PIC_UPLOAD_SUCCESS,saveUrl);
    103. }
    104. /**
    105. * 功能描述: 删除文件
    106. * @param fileName 文件名称参数,和前台传递的参数保持一致
    107. * @return : com.es.estatemanagement.common.Result
    108. */
    109. @RequestMapping(value="/delfile")
    110. public Result fileDel(@RequestParam String fileName){
    111. String name = fileName.replace("/fileupload/","");
    112. //获取当前项目所在绝对路径
    113. String absolutePath = System.getProperty("user.dir");
    114. //当前项目名称,可以自定义
    115. String projectName = "/estate-management";
    116. //文件上传后所在绝对路径
    117. String savePath = absolutePath+projectName+"/src/main/resources/static/fileupload/";
    118. File file = new File(savePath+name);
    119. if (file.exists()){//文件是否存在
    120. file.delete();//删除文件
    121. }
    122. return new Result(true,StatusCode.OK, MessageConstant.COMMUNITY_PIC_DEL_SUCCESS);
    123. }
    124. }

    五,项目总结

    1. 系统上传的文件会存放在项目目录/src/main/resources/static/fileupload
    
    2. 项目使用的MySQL驱动版本是5.1.30,如果MySQL版本是8.0以上,需要将pom.xml中的MySQL驱动版本改为8.0以上版本,或者直接将`5.1.30`删除即可。因为Springboot使用的默认MySQL驱动版本为8.0.20  
    
    4. 小区管理模块实现了从前端到控制层、业务层、持久层的完整功能,可以参照该模块实现其他功能。
    
    5. 本系统使用了Mybatis插件TkMapper,TkMapper又名通用 Mapper,封装了对单表的 CRUD 操作。通用 Mapper 可以极大的方便开发人员。可以随意的按照自己的需要选择通用方法,还可以很方便的开发自己的通用方法。

     

  • 相关阅读:
    linux系统Jenkins工具介绍
    云原生Kubernetes:K8S配置资源管理
    MySQL详细讲解(基础篇)
    leetcode:1579. 保证图可完全遍历【并查集思路】
    WPF 控件专题 RadioButton详解
    通过webkitAnimationEnd实现轮播动画
    数据库范式理论
    组合数+dp
    Vue - 生成二维码(把链接地址或字符文字转成二维码,扫描后可打开显示)
    1区TOP计算机SCI,CCF推荐,对国人友好,正在征稿中~
  • 原文地址:https://blog.csdn.net/BS009/article/details/126551165