博主介绍:✌全网粉丝3W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战✌
博主作品:《微服务实战》专栏是本人的实战经验总结,《Spring家族及微服务系列》专注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源码解读、热门面试题、架构设计等。除此之外还有不少文章等你来细细品味,更多惊喜等着你哦
🍅文末关注公众号获取联系🍅精彩专栏推荐订阅👇🏻👇🏻 不然下次找不到哟
✨【微服务】Nacos为什么丢弃短连接(http)而选择拥抱长连接(gRPC)
目录
一、行业痛点与功能需求
1、物业行业痛点
2、产品核心功能(费用管理)
2.1、费用管理
2.2、业主报修
2.3、日常管理
二、系统设计
1、系统运行环境
2、系统架构设计
3、登录设计
4、项目模块设计
三、数据库设计
1、用户实体
2、房屋实体
3、小区实体
四、功能截图
1、登录界面
2、我的小区
3、业主管理
3.1、业主信息
4、资产管理
4.1、楼栋信息
4.2、单元信息
4.3、房屋信息
5、智慧停车
5.1、停车场管理
5.2、车位信息
5.3、业主车辆
6、巡检管理
6.1、巡检点
6.2、巡检路线
6.3、巡检计划
五、实现代码
1、控制器
2、接口
3、实现类
六、获取源码
一、行业痛点与功能需求
1、物业行业痛点
2、产品核心功能(费用管理)
2.1、费用管理
2.2、业主报修
2.3、日常管理
二、系统设计
1、系统运行环境
开发系统:Windows10
架构模式:MVC/前后端分离
JDK版本:Java JDK1.8
开发工具:IDEA
数据库版本: mysql5.7
数据库可视化工具: SQL yog或Navicat for MySQL
服务器:SpringBoot自带 apache tomcat
主要技术:Java、SpringBoot2.7、MyBatis-plus、SpringSecurity、JWT、MySQL、Redis、Html、Vue、Elementui等
2、系统架构设计
3、登录设计
借鉴微服务单点登录设计
4、项目模块设计
三、数据库设计
1、用户实体
2、房屋实体
3、小区实体
四、功能截图
1、登录界面
2、我的小区
配置物业公司管理的小区,部署一套系统,可配置多个不同小区,减少物业的持有成本
3、业主管理
3.1、业主信息
小区业主管理,或者业主成员管理。其中业主成员包括家庭成员、租客、或者其他成员。添加类型不限。
4、资产管理
4.1、楼栋信息
4.2、单元信息
1)根据楼栋查询单元
2)单元列表
4.3、房屋信息
1)房屋列表
添加房屋功能点设计:
2)选择楼栋
3)选择单元
4)添加房屋
5、智慧停车
配置社区的停车场地,可对多块场地进行管理。对其中的车位、车辆信息进行登记,车辆黑名单、车位数、进出记录查询,或无人值守设置收费二维码等。
5.1、停车场管理
5.2、车位信息
1)列表
2)新增窗口
停车场需要查询停车场管理列表
5.3、业主车辆
1)列表
新增业主车辆功能点设计界面:
2)选择车位
3)选择业主
4)填写车辆信息
6、巡检管理
小区日常巡逻巡检。包括对设备、环境卫生等检查。可设置线路,制定巡检计划及任务检查。
6.1、巡检点
6.2、巡检路线
6.3、巡检计划
五、实现代码
1、控制器
@RestController
@AllArgsConstructor
@RequestMapping("/api/room")
public class RoomController {
private IRoomService roomService;
@GetMapping
public Object loadRooms(@RequestParam Map<String, String> query) {
PageInfo<RoomVO> pageInfo = roomService.loadRooms(query);
return R.ok(pageInfo);
}
@GetMapping("/ownerRooms")
public Object loadOwnerRoomInfos(@RequestParam Map<String, String> query) {
PageInfo<RoomVO> pageInfo = roomService.loadOwnerRoomInfos(query);
return R.ok(pageInfo);
}
@GetMapping("{ownerId}")
public Object loadRoomsByOwnerId(@PathVariable String ownerId) {
List<RoomVO> roomVoList = roomService.loadRoomsByOwnerId(ownerId);
return R.ok(roomVoList);
}
@PostMapping
public Object addRoom(@RequestBody RoomDTO roomDTO) {
String s = roomService.addRoom(roomDTO);
return R.ok(s);
}
@PutMapping
public Object editRoom(@RequestBody RoomDTO roomDTO) {
String s = roomService.editRoom(roomDTO);
return R.ok(s);
}
@DeleteMapping("{roomId}")
public Object deleteRoom(@PathVariable String roomId) {
String s = roomService.deleteRoomById(roomId);
return R.ok(s);
}
}
2、接口
public interface IRoomService extends IService<Room> {
PageInfo<RoomVO> loadRooms(Map<String, String> query);
PageInfo<RoomVO> loadOwnerRoomInfos(Map<String, String> query);
List<String> selectRoomIdByViewId(String floorId, String unitId);
List<RoomVO> loadRoomsByOwnerId(String ownerId);
String addRoom(RoomDTO roomDTO);
String editRoom(RoomDTO roomDTO);
String deleteRoomById(String roomId);
}
3、实现类
@Service
public class RoomServiceImpl extends ServiceImpl<RoomMapper, Room> implements IRoomService {
@Override
public PageInfo<RoomVO> loadRooms(Map<String, String> query) {
CriticalQuery criticalQuery = CriticalQuery.create(query);
PageParam pageParam = criticalQuery.pageParam();
IPage<RoomVO> page = new Page<>(pageParam.getPage(), pageParam.getSize());
QueryWrapper<Object> wrapper = criticalQuery.queryWrapper();
page = baseMapper.loadRooms(page, wrapper);
PageInfo<RoomVO> pageInfo = PageInfo.of(page.getCurrent(), page.getSize());
List<RoomVO> voList = page.getRecords();
pageInfo.setTotal(page.getTotal()).setList(voList);
return pageInfo;
}
@Override
public PageInfo<RoomVO> loadOwnerRoomInfos(Map<String, String> query) {
CriticalQuery criticalQuery = CriticalQuery.create(query);
PageParam pageParam = criticalQuery.pageParam();
IPage<RoomVO> page = new Page<>(pageParam.getPage(), pageParam.getSize());
QueryWrapper<Object> wrapper = criticalQuery.queryWrapper();
page = baseMapper.loadOwnerRoomInfos(page, wrapper);
PageInfo<RoomVO> pageInfo = PageInfo.of(page.getCurrent(), page.getSize());
List<RoomVO> voList = page.getRecords();
pageInfo.setTotal(page.getTotal()).setList(voList);
return pageInfo;
}
@Override
public List<String> selectRoomIdByViewId(String floorId, String unitId) {
return baseMapper.selectRoomIdByViewId(floorId, unitId);
}
@Override
public List<RoomVO> loadRoomsByOwnerId(String ownerId) {
List<String> roomIds = baseMapper.selectRoomIdByOwnerId(ownerId);
List<RoomVO> roomVoList = Lists.newArrayList();
roomIds.forEach(id -> {
RoomVO roomVo = baseMapper.loadRoomsByOwnerId(id);
roomVoList.add(roomVo);
});
return roomVoList;
}
@Override
public String addRoom(RoomDTO roomDTO) {
Room room = BeanCopyUtil.copyProperties(roomDTO, Room::new);
room.setUserId(SecurityUtils.getUserId());
room.setCreateTime(LocalDateTime.now());
save(room);
return room.getRoomId();
}
@Override
public String editRoom(RoomDTO roomDTO) {
Room room = BeanCopyUtil.copyProperties(roomDTO, Room::new);
room.setUserId(SecurityUtils.getUserId());
updateById(room);
return room.getRoomId();
}
@Override
public String deleteRoomById(String roomId) {
return String.valueOf(baseMapper.deleteById(roomId));
}
}
六、获取源码
大家点赞、收藏、关注、评论啦 、关注下方公众号获取联系方式👇🏻👇🏻