当前位置: 首页 > news >正文

SpringBoot+Vue小区物业管理系统 附带详细运行指导视频

文章目录

  • 一、项目演示
  • 二、项目介绍
  • 三、运行截图
  • 四、主要代码
    • 1.用户登录代码
    • 2.查询小区信息代码
    • 3.保存缴费信息代码

一、项目演示

项目演示地址: 视频地址

二、项目介绍

项目描述:这是一个基于SpringBoot+Vue框架开发的小区物业管理系统。首先,这是一个前后端分离的项目,代码简洁规范,注释说明详细,易于理解和学习。其次,这项目功能丰富,具有一个小区物业管理系统该有的所有功能。

项目功能:此项目分为三个角色:业主物业员工管理员业主有登录、管理个人信息、查看物业员工和管理员信息、查看所属小区信息、查询个人房屋信息、查看所属小区的车位信息、查看个人缴费信息、支付缴费、查看所属小区公告信息、管理个人维修信息、管理个人投诉信息、查看个人数据统计等等功能。物业员工有登录、管理所属小区的业主信息、管理个人信息、查看管理员信息、查看所属小区信息、管理所属小区的楼栋信息和房屋信息、管理所属小区的车位信息、管理所属小区业主的缴费信息、管理个人发布的公告信息、受理所属小区业主的维修、投诉信息、查看所属小区数据统计等等功能。管理员有登录、管理个人信息、管理所有业主信息、管理所有物业员工信息、管理所有小区信息、管理所有楼栋、房屋信息、管理所有车位信息、管理所有缴费信息。管理所有公告信息、管理所有维修信息、管理所有投诉信息、查看数据统计等等功能。

应用技术:SpringBoot + Vue3 + MySQL + MyBatis + Redis + ElementUI-Plus + XXL-JOB

运行环境:IntelliJ IDEA2019.3.5 + MySQL5.7(项目压缩包中自带) + Redis5.0.5(项目压缩包中自带) + JDK1.8 + Maven3.6.3(项目压缩包中自带)+ Node14.16.1(项目压缩包中自带)

三、运行截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、主要代码

1.用户登录代码

	/*** 用户登录操作* @param userDTO* @return*/@Overridepublic ResponseDTO<UserDTO> login(UserDTO userDTO) {// 进行是否为空判断if(CommonUtil.isEmpty(userDTO.getPhone())){return ResponseDTO.errorByMsg(CodeMsg.PHONE_EMPTY);}if(CommonUtil.isEmpty(userDTO.getPassword())){return ResponseDTO.errorByMsg(CodeMsg.PASSWORD_EMPTY);}// 对比昵称和密码是否正确UserExample userExample = new UserExample();userExample.createCriteria().andPhoneEqualTo(userDTO.getPhone()).andPasswordEqualTo(userDTO.getPassword()).andRoleIdEqualTo(userDTO.getRoleId());List<User> userList = userMapper.selectByExample(userExample);if(userList == null || userList.size() != 1){return ResponseDTO.errorByMsg(CodeMsg.PHONE_PASSWORD_ERROR);}// 生成登录token并存入Redis中UserDTO selectedUserDTO = CopyUtil.copy(userList.get(0), UserDTO.class);String token = UuidUtil.getShortUuid();selectedUserDTO.setToken(token);//把token存入redis中 有效期1小时stringRedisTemplate.opsForValue().set("USER_" + token, JSON.toJSONString(selectedUserDTO), 3600, TimeUnit.SECONDS);return ResponseDTO.successByMsg(selectedUserDTO, "登录成功!");}

2.查询小区信息代码

	/*** 分页获取小区数据* @param pageDTO* @return*/@Overridepublic ResponseDTO<PageDTO<DistrictDTO>> getDistrictList(PageDTO<DistrictDTO> pageDTO) {DistrictExample districtExample = new DistrictExample();// 不知道当前页多少,默认为第一页if(pageDTO.getPage() == null){pageDTO.setPage(1);}// 不知道每页多少条记录,默认为每页5条记录if(pageDTO.getSize() == null){pageDTO.setSize(5);}DistrictExample.Criteria c1 = districtExample.createCriteria();if(pageDTO.getParam() != null) {DistrictDTO districtDTO = pageDTO.getParam();if(!CommonUtil.isEmpty(districtDTO.getName())) {c1.andNameLike("%" + districtDTO.getName() + "%");}if(!CommonUtil.isEmpty(districtDTO.getLocation())) {c1.andLocationLike("%" + districtDTO.getLocation() + "%");}if(!CommonUtil.isEmpty(districtDTO.getId())) {c1.andIdEqualTo(districtDTO.getId());}}PageHelper.startPage(pageDTO.getPage(), pageDTO.getSize());// 分页查出小区数据List<District> districtList = districtMapper.selectByExample(districtExample);PageInfo<District> pageInfo = new PageInfo<>(districtList);// 获取数据的总数pageDTO.setTotal(pageInfo.getTotal());// 将domain类型数据  转成 DTO类型数据List<DistrictDTO> districtDTOList = CopyUtil.copyList(districtList, DistrictDTO.class);for(DistrictDTO districtDTO : districtDTOList) {// 查询此小区的楼栋数BuildingExample buildingExample = new BuildingExample();buildingExample.createCriteria().andDistrictIdEqualTo(districtDTO.getId());List<Building> buildingList = buildingMapper.selectByExample(buildingExample);int buildingTotal = (int) buildingList.stream().map(Building::getName).distinct().count();districtDTO.setBuildingTotal(buildingTotal);// 查询此小区的房屋数List<String> buildingIdList = buildingList.stream().map(Building::getId).collect(Collectors.toList());if(buildingIdList.size() > 0) {HouseExample houseExample = new HouseExample();houseExample.createCriteria().andBuildingIdIn(buildingIdList);int houseTotal = houseMapper.selectByExample(houseExample).size();districtDTO.setHouseTotal(houseTotal);} else {districtDTO.setHouseTotal(0);}// 查询此小区的车位数ParkingExample parkingExample = new ParkingExample();parkingExample.createCriteria().andDistrictIdEqualTo(districtDTO.getId());districtDTO.setParkingTotal(parkingMapper.selectByExample(parkingExample).size());}pageDTO.setList(districtDTOList);return ResponseDTO.success(pageDTO);}

3.保存缴费信息代码

	/*** 保存缴费信息* @param feeDTO* @return*/@Overridepublic ResponseDTO<Boolean> saveFee(FeeDTO feeDTO) {// 进行统一表单验证CodeMsg validate = ValidateEntityUtil.validate(feeDTO);if (!validate.getCode().equals(CodeMsg.SUCCESS.getCode())) {return ResponseDTO.errorByMsg(validate);}Fee fee = CopyUtil.copy(feeDTO, Fee.class);User user = userMapper.selectByPrimaryKey(fee.getUserId());if(user == null) {return ResponseDTO.errorByMsg(CodeMsg.USER_NOT_EXIST);}// 准备创建xxl-job任务DefaultXxlJobAddParam defaultXxlJobAddParam = new DefaultXxlJobAddParam();defaultXxlJobAddParam.setAuthor("杨杨吖");defaultXxlJobAddParam.setJobDesc("缴费逾期罚金处理任务");defaultXxlJobAddParam.setExecutorHandler("feeHandler");Calendar calendar = Calendar.getInstance();if(fee.getDeadTime() != null) {calendar.setTime(fee.getDeadTime());int day = calendar.get(Calendar.DAY_OF_MONTH);
//            defaultXxlJobAddParam.setScheduleConf("0/0 0/0 0/0 " + day + "/1 * ?");defaultXxlJobAddParam.setScheduleConf("0/0 0/0 0/0 * * ?");}if(CommonUtil.isEmpty(fee.getId())) {// 添加操作fee.setId(UuidUtil.getShortUuid());fee.setCreateTime(new Date());if(fee.getDeadTime() != null) {defaultXxlJobAddParam.setExecutorParam(fee.getId());Integer taskId = xxlJobService.add(defaultXxlJobAddParam);xxlJobService.start(taskId);fee.setTaskId(String.valueOf(taskId));}if(feeMapper.insertSelective(fee) == 0) {return ResponseDTO.errorByMsg(CodeMsg.FEE_ADD_ERROR);}} else {// 修改操作Fee feeDB = feeMapper.selectByPrimaryKey(fee.getId());if(!FeeStateEnum.PAYED.getCode().equals(feeDB.getState()) && FeeStateEnum.PAYED.getCode().equals(fee.getState())) {fee.setPayTime(new Date());xxlJobService.remove(Integer.parseInt(feeDB.getTaskId()));}if(feeDB.getDeadTime().getTime() != fee.getDeadTime().getTime()) {defaultXxlJobAddParam.setExecutorParam(feeDB.getId());Integer taskId = xxlJobService.add(defaultXxlJobAddParam);xxlJobService.start(taskId);fee.setTaskId(String.valueOf(taskId));}if(feeMapper.updateByPrimaryKeySelective(fee) == 0) {return ResponseDTO.errorByMsg(CodeMsg.FEE_EDIT_ERROR);}}return ResponseDTO.successByMsg(true, "保存成功!");}

相关文章:

SpringBoot+Vue小区物业管理系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1.用户登录代码2.查询小区信息代码3.保存缴费信息代码 一、项目演示 项目演示地址&#xff1a; 视频地址 二、项目介绍 项目描述&#xff1a;这是一个基于SpringBootVue框架开发的小区物业管理系统。首先&#xf…...

在不使用js在情况下只用css实现瀑布流效果

使用到的是grid 布局&#xff0c;需要注意的是grid-template-rows: masonry; 目前只有Firefox 浏览器支持这个效果&#xff0c;而且还是一个实验性属性需要在设置里面开发实验性选项才行。 实例 <!DOCTYPE html> <html> <head><title>Document</ti…...

AMS(ActivityManagerService)源码解析2,Android应用是如何被启动的

一个Android应用是如何被启动的 前言总结1. 启动Application1.1 拉起一个新的进程1.2 启动Application1.3 AMS阶段1.4 创建Instrumentation和Application 2. 启动Activity2.1 回到AMS&#xff0c;启动第一个Activity 参考资料 前言 基于源码API 28&#xff0c;30以后的版本启动…...

数据库事务隔离级别

前几天项目上合作公司的系统出现了一次死锁&#xff0c;突然想到由于近几年开发设计的系统并发用户比较少&#xff0c;很久没有碰到过死锁了&#xff0c;因此对死锁的概念也比较生疏了&#xff0c;需要温习一下。 事务 先从最基本的概念开始&#xff0c;事务、及其ACID特性。…...

Pytest 记录日志输出到控制台和写入文件

目录 自定义日志记录器和内置的日志记录器 项目代码 项目目录树 自定义日志记录器 函数源代码 pytest中定义和覆盖日志记录信息 使用cli定义Logging 使用pytest.ini定义Logging 修改单个测试级别的日志 日志输出的重要性不言而喻&#xff0c;不仅可以观测执行过程&…...

LINUX网络FTP服务

一、FTP服务 FTP服务&#xff1a;file transfer protocol :文件传输协议。在网络上进行双向传输&#xff0c;也是一个应用程序。不同的操作系统有不同的FTP软件&#xff0c;但使用的协议是一样的。 FTP协议基于TCP协议&#xff0c;有两个端口&#xff0c;即20和21。 20端口&…...

10 C++11

10 C11 1、类型推导1.1 auto关键字1.2 auto类型推断本质 2、类型计算2.1 类型计算分类2.2 类型计算的四种规则2.3 返回值类型计算 3、列表初始化4、Lambda表达式4.1 前置知识4.2 Lambda表达式4.3 捕获表 5、右值引用5.1 概念5.2 左值引用和右值引用 6、移动语义 1、类型推导 1…...

java的封装

为什么要封装&#xff1f;在java的面向对象的思想中&#xff0c;封装是指将类的实现细节包装&#xff0c;隐藏起来的方法。封装可以防止本类的代码和数据被外部定义的代码随机访问。 如何进行封装&#xff1f; 在定义一个类时&#xff0c;将类中的属性私有化&#xff0c;即使…...

为什么选择海外服务器?

如何选择跨境电商服务器&#xff1a;详细指南 选择合适的服务器是跨境电商企业成功的基础。服务器的性能和稳定性直接影响着网站的访问速度、用户体验和安全性&#xff0c;进而影响着企业的销量和利润。那么&#xff0c;跨境电商企业该如何选择服务器呢&#xff1f; 1. 确定目…...

k8s+springcloud+nacos部署配置

1 k8s 部署nacos-2.1.2配置k8s-nacos-statefulSet.yaml文件 apiVersion: v1 kind: Service metadata:name: nacos-headlessnamespace: rz-dtlabels:app: nacosannotations:service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" spec:# 3个端口打开&…...

梯度提升决策树(GBDT)

GBDT&#xff08;Gradient Boosting Decision Tree&#xff09;&#xff0c;全名叫梯度提升决策树&#xff0c;是一种迭代的决策树算法&#xff0c;又叫 MART&#xff08;Multiple Additive Regression Tree&#xff09;&#xff0c;它通过构造一组弱的学习器&#xff08;树&am…...

数据结构之B树的原理与业务场景

B树是一种自平衡的树形数据结构&#xff0c;它能够保持数据有序&#xff0c;并且可以高效地进行查找、顺序访问、插入和删除操作。B树的设计是为了优化磁盘I/O操作&#xff0c;因为它可以减少磁盘访问次数&#xff0c;这在数据库和文件系统中非常有用。 1. B树的原理 节点的出…...

【Android面试八股文】你能说一说线程池管理线程的原理吗?

面试官(Interviewer): 欢迎参加面试,今天我们会讨论一些关于 Java 线程池管理的问题。你能给我解释一下 ThreadPoolExecutor 是如何管理线程的吗? 候选人(Candidate): 当然可以,ThreadPoolExecutor 是 Java 中用于创建和管理线程池的核心类。它通过一组核心参数来控制线…...

springer 在线投稿编译踩坑

springer投稿&#xff0c;在线编译踩坑总结 注意&#xff1a; 有的期刊需要双栏&#xff0c;而预定义的模板中可能为单栏&#xff0c;需要增加iicol选项。 例如&#xff1a; \documentclass[sn-mathphys-num]{sn-jnl}% —>\documentclass[sn-mathphys-num, iicol]{sn-jnl}…...

固态硬盘的指标

固态硬盘的指标主要包括以下几个方面&#xff1a; 接口类型&#xff1a;这是固态硬盘与外部设备连接的方式&#xff0c;常见的接口类型有SATA、PCIe和NVMe等。不同的接口类型决定了固态硬盘的传输速度和性能。例如&#xff0c;PCIe接口的固态硬盘通常比SATA接口的固态硬盘具有…...

mysql 分组后每个取最新的一条记录

在MySQL中&#xff0c;若要从一个分组中获取每组的最新一条记录&#xff08;通常基于时间戳或其他递增的列&#xff09;&#xff0c;可以使用子查询或者窗口函数&#xff08;如果MySQL版本支持&#xff09;。 以下是两种不同的实现方法&#xff1a; 方法1: 使用子查询和LIMIT…...

Java语法和基本结构介绍

Java语法和基本结构是Java编程的基础&#xff0c;它决定了Java代码的书写方式和程序的结构。以下是Java语法和基本结构的一些关键点&#xff1a; 1.标识符和关键字&#xff1a;Java中的标识符是用来标识变量、函数、类或其他用户自定义元素的名称。关键字是预留的标识符&#x…...

TDengine 3.3.0.0 引入图形化管理工具、复合主键等 13 项关键更新

在涛思数据研发团队的努力下&#xff0c;TDengine 3.3.0.0 版本终于和大家见面了。这一版本中&#xff0c;我们引入了多项革新功能和性能优化&#xff0c;力求在为用户提供极致体验的同时&#xff0c;不断推动技术的前沿。 此次更新不仅针对开源社区版本&#xff0c;进行了一系…...

C++基础之红黑树

二叉搜索树 二叉搜索树&#xff08;Binary Search Tree&#xff0c;BST&#xff09;是一种二叉树&#xff0c;具有以下性质&#xff1a; 左子树节点值小于根节点值&#xff1a;对于树中的每个节点 x&#xff0c;其左子树中所有节点的值都小于 x 的值。右子树节点值大于根节点值…...

ClickHouse数据库对比、适用场景与入门指南

本文全面对比了ClickHouse与其他数据库&#xff08;如StarRocks、HBase、MySQL、Hive、Elasticsearch等&#xff09;的性能、功能、适用场景&#xff0c;并提供了ClickHouse的教学入门指南&#xff0c;旨在帮助读者选择合适的数据库产品并快速掌握ClickHouse的使用。 文章目录 …...

举例说明 如何通过SparkUI和日志定位任务莫名失败?

有一个Task OOM&#xff1a; 通过概览信息&#xff0c;发现Stage 10的Task 36失败了4次导致Job失败。概览信息中显示最后一次失败的退出代码&#xff08;exit code&#xff09;是143&#xff0c;意味着发生了内存溢出&#xff08;OOM&#xff0c;即Out of Memory&#xff09;。…...

Vue前端通过Axios的post方式传输数据,后端为什么一直接收的值是null?

沃靠!这个细节太细了,搞了我两个多小时才找到这个bug。 一、 首先官方文档给我的post请求的例子是这样的: axios.post(/user, {firstName: Fred,lastName: Flintstone}).then(function (response) {console.log(response);}).catch(function (error) {console.log(error);})…...

外链建设如何进行?

理解dofollow和nofollow链接&#xff0c;所谓dofollow链接&#xff0c;就是可以传递权重到你的网站的链接&#xff0c;这种链接对你的网站排名非常有帮助&#xff0c;这种链接可以推动你的网站在搜索结果中的位置向上爬&#xff0c;但一个网站全是这种有用的链接&#xff0c;反…...

深入理解Java正则表达式及其应用

正则表达式是一种强大的文本匹配和处理工具&#xff0c;可以在字符串中查找、替换、提取符合特定模式的内容。Java作为一种广泛应用的编程语言&#xff0c;提供了丰富的正则表达式支持。本文将深入探讨Java正则表达式的基本概念、语法以及常见应用场景&#xff0c;帮助读者全面…...

Gstreamer学习3----灌数据给管线之appsrc

参考资料 Basic tutorial 8: Short-cutting the pipeline gstreamer向appsrc发送帧画面的代码_gst appsrc可变帧率-CSDN博客 在官网教程Basic tutorial 8: Short-cutting the pipeline 里面&#xff0c;讲了一个例子&#xff0c;push音频数据给管线&#xff0c;视频的例子更…...

【深度学习量化交易1】一个金融小白尝试量化交易的设想、畅享和遐想

关注我的朋友们可能知道&#xff0c;我经常在信号处理的领域出没&#xff0c;时不时会发一些信号处理、深度学习科普向的文章。 不过算法研究久了&#xff0c;总想做一些更有趣的事情。 比如用深度学习算法赚大钱。。毕竟有什么事情能比暴富更有意思呢。 一、神经网络与彩票…...

【0基础学爬虫】爬虫基础之自动化工具 DrissionPage 的使用

概述 前三期文章中已经介绍到了 Selenium 与 Playwright 、Pyppeteer 的使用方法&#xff0c;它们的功能都非常强大。而本期要讲的 DrissionPage 更为独特&#xff0c;强大&#xff0c;而且使用更为方便&#xff0c;目前检测少&#xff0c;强烈推荐&#xff01;&#xff01;&a…...

c++_0基础_讲解7 练习

这一讲我为大家准备了几道题目&#xff0c;大家试着独自做一下&#xff08;可能来自不同网站&#xff09; 整数大小比较 - 洛谷 题目描述 输入两个整数&#xff0c;比较它们的大小。若 x>yx>y &#xff0c;输出 > &#xff1b;若 xyxy &#xff0c;输出 &#xff…...

docker一些常用命令以及镜像构建完后部署到K8s上

docker一些常用命令以及镜像构建完后部署到K8s上 1.创建文件夹2.删除文件3.复制现有文件内容到新建文件4.打开某个文件5.查看文件列表6.解压文件&#xff08;tar格式&#xff09;7.解压镜像8.查看镜像9.删除镜像10.查看容器11.删除容器12.停止运行容器13.构建镜像14.启动容器15…...

在typora中利用正则表达式,批量处理图片

一&#xff0c;png格式 在 Typora 中批量将 HTML 图片标签转换为简化的 Markdown 图片链接&#xff0c;且忽略 alt 和 style 属性&#xff0c;可以按照以下步骤操作&#xff1a; 打开 Typora 并加载你的文档。按下 Ctrl H&#xff08;在 Windows/Linux 上&#xff09;或 Cmd…...

广州网站建设推广易尚/谷歌三件套下载

再谈区块链在积分领域的应用 路云区链 | 31. Aug, 2016 | 3 次阅读 传统积分应用存在的问题 负债型积分总体问题&#xff1a; 1、具有零散、消费乏力、使用限制多、兑换繁琐、难以流通的特点。如A商家“发行”的积分&#xff0c;B商家不给予通兑。 2、同时&#xff0c;…...

梅州网站建设/seo外包方案

select * from slot_value_temp force index(idx_slot_type_id) WHERE slot_type_id xxxxxx; 不定期更新转载于:https://www.cnblogs.com/zhzhang/p/8127586.html...

网络用户提要求找人帮忙做的网站/百度搜索官网

&#x1f4e2;前言&#x1f332;原题样例&#xff1a;旋转字符串&#x1f33b;C#方法&#xff1a;判断子串&#x1f33b;Java 方法&#xff1a;判断子串&#x1f4ac;总结&#x1f4e2;前言 &#x1f680; 算法题 &#x1f680; &#x1f332; 每天打卡一道算法题&#xff0c;…...

淘宝客做网站怎么做/哈尔滨seo优化软件

后面两张success plot分别是按照threshold和auc排序 各tracker说明&#xff1a; Year2015&#xff1a; 【CF2】 实验结果比论文中的结果好&#xff0c;原因是我运行的是作者后期又更新过的代码&#xff0c;作者添加了仿DSST的尺度更新&#xff0c;而在原论文中实现上&#xff…...

性用品微商做的最好的网站/竞价托管如何托管

抽象工厂模式 抽象工厂模式其实是通过工厂模式实现的&#xff0c;也可以说是工厂模式的扩展。那什么是抽象工厂模式呢&#xff1f;好&#xff0c;先来看看这样一个问题&#xff1a;假设我们玩一个横版过关的游戏&#xff0c;当前关卡有好几类怪物(如&#xff1a;精灵类&#x…...

wordpress主题可以更改主页布局/网络营销的推广

createWriteStream是Node.js中的一个方法&#xff0c;可以用来创建一个可写流。可写流是一种用于写入数据的流。它允许我们在不断写入数据的同时将数据写入文件或其他目标。可写流是流的一种&#xff0c;流是Node.js中的一种抽象概念&#xff0c;表示一个数据流的生成器。可写流…...