博主主页:一季春秋
博主简介:专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。
主要内容:毕业设计(Java项目、小程序、安卓等)、简历模板、学习资料、技术咨询。精彩专栏推荐订阅👇🏻👇🏻 不然下次找不到哟
SpringBoot+Vue项目持续更新中
🍅文末获取联系🍅
目录
一、项目介绍
课题主要分为四大模块:即管理员模块,物业管理模块、业主模块和维修员模块,主要功能包括:个人中心、物业管理、业主管理、维修员管理、小区公告管理、小区信息管理、房产信息管理、车位信息管理、停车位管理、停车信息管理、缴费信息管理、投诉分类管理、投诉信息管理、投诉处理管理、报修信息管理、维修处理管理、服务评价管理、活动信息管理等。
二、项目主要技术
开发语言:Java
使用框架:spring boot
前端技术:JavaScript、Vue 、css3
开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code
数据库:MySQL 5.7/8.0
数据库管理工具:phpstudy/Navicat
JDK版本:jdk1.8
Maven: apache-maven 3.8.1-bin
三、系统需求分析
3.1 系统功能需求分析
在功能方面,不需要用户在指定场所进行物业管理,要保证可以在很大程度上满足用户解决物业管理问题,满足用户需求,改善人们生活。
后台管理页面:分别是管理员、物业管理、业主和维修员登录本系统。管理员输入管理员账号密码后,校验无误后方可进入后台管理主界面,对物业管理、业主和维修员使用的权限管理,设置小区公告等管理以及对活动信息进行管理
管理员用例图依据管理员的权限需求以及对系统的管理需求进行分析,主要包括了个人中心、物业管理、业主管理、维修员管理、小区公告管理、小区信息管理、房产信息管理、车位信息管理、停车位管理、停车信息管理、缴费信息管理、投诉分类管理、投诉信息管理、投诉处理管理、报修信息管理、维修处理管理、服务评价管理、活动信息管理等,管理员用例图如下所示:
(2)物业管理用例图
物业管理用例图根据物业管理的需求进行分析,包括个人中心、业主管理、小区公告管理、小区信息管理、房产信息管理、车位信息管理、停车位管理、停车信息管理、缴费信息管理、投诉信息管理、投诉处理管理、报修信息管理、维修处理管理、服务评价管理、活动信息管理等。物业管理用例图如下所示:
(3)业主用例图
业主用例图根据物业管理的需求进行分析,包括个人中心、小区公告管理、小区信息管理、车位信息管理、停车位管理、停车信息管理、缴费信息管理、投诉信息管理、投诉处理管理、报修信息管理、维修处理管理、服务评价管理、活动信息管理等。业主用例图如下所示:
(4)维修员用例图
维修员用例图根据物业管理的需求进行分析,包括系统首页、个人中心、报修信息管理、维修处理管理、服务评价管理等。维修员用例图如下所示:
3.2 系统结构
物业管理系统分为四个部分,即管理员管理、物业管理、业主管理和维修员管理。该系统是根据用户的实际需求开发的,贴近生活。从管理员处获得的指定账号和密码可用于进入系统和使用相关的系统应用程序。管理员拥有最大的权限,其次是物业管理、业主和维修员。管理员一般负责整个系统的运行维护和总体协调。
四、系统的实现
4.1 管理员模块实现
系统登录,在登录页面选择权限,在正确输入用户名、密码后,进入操作系统进行操作;如图所示。
管理员点击物业管理。在物业管理页面输入账号可以查询,新增或删除物业管理列表,并根据需要对物业管理详情信息进行查看详情、修改或删除操作。
管理员点击业主管理。在业主页面输入用户名可以查询、新增或删除业主列表,并根据需要对业主详情信息进行查看详情、修改或删除操作。
管理员点击维修员管理。在维修员页面输入工号、姓名和性别可以查询、新增或删除维修员列表,并根据需要对维修员详情信息进行查看详情、修改或删除操作。
管理员点击小区信息管理。在小区信息页面输入小区名称、小区类型和物业名称可以查询或删除小区信息列表,并根据需要对小区信息详情信息进行查看详情、修改或删除操作。
管理员点击车位信息管理。在车位信息页面输入车位区号、车位编号和类型可以查询或删除车位信息列表,并根据需要对车位信息详情信息进行查看详情、修改或删除操作。
管理员点击缴费信息管理。在缴费信息页面输入订单编号、缴费名称和业主姓名可以查询或删除缴费信息列表,并根据需要对缴费信息详情信息进行查看详情、修改或删除操作。
管理员点击服务评价管理。在服务评价页面输入名称、姓名和服务评价可以查询或删除服务评价列表,并根据需要对服务评价详情信息进行查看详情、修改或删除操作。
4.2 物业管理模块实现
物业管理进入主页面,主要功能包括对系统首页、个人中心、业主管理、小区公告管理、小区信息管理、房产信息管理、车位信息管理、停车位管理、停车信息管理、缴费信息管理、投诉信息管理、投诉处理管理、报修信息管理、维修处理管理、服务评价管理、活动信息管理等功能进行操作。
物业管理点击小区公告管理。在小区公告页面输入标题、类型和发布时间可以查询、新增或删除小区公告列表,并根据需要对小区公告详情信息进行查看详情、修改或删除操作。
物业管理点击房产信息管理。在房产信息页面输入房产名、房屋类型、单元号、楼栋和房屋状态可以查询、新增或删除房产信息列表,并根据需要对房产信息详情信息进行查看详情、修改、发货或删除操作。
物业管理点击活动信息管理。在活动信息页面输入活动名称和活动类型可以查询、新增或删除活动信息列表,并根据需要对活动信息详情信息进行查看详情、修改或删除操作。
4.3 业主模块实现
业主进入主页面,主要功能包括对系统首页、个人中心、小区公告管理、小区信息管理、车位信息管理、停车位管理、停车信息管理、缴费信息管理、投诉信息管理、投诉处理管理、报修信息管理、维修处理管理、服务评价管理、活动信息管理等功能进行操作。
业主点击停车位管理。在停车位页面输入车场名称、车位区号、车位编号、车场类型和状态可以查询停车位列表,并根据需要对停车位详情信息进行查看详情或停车操作。
业主点击投诉信息管理。在投诉信息页面输入投诉分类、投诉时间、业主姓名和处理状态可以查询、新增或删除投诉信息列表,并根据需要对投诉信息详情信息进行查看详情、修改或删除操作。
4.4 维修员模块实现
维修员进入主页面,主要功能包括对系统首页、个人中心、报修信息管理、维修处理管理、服务评价管理等功能进行操作。
维修员点击报修信息管理。在报修信息页面输入报修物品、报修日期和处理状态可以查询报修信息列表,并根据需要对报修信息详情信息进行查看详情或处理操作。
维修员点击维修处理管理。在维修处理页面输入报修物品、业主姓名和处理时间可以查询或删除维修处理列表,并根据需要对维修处理详情信息进行查看详情、修改、评价或删除操作。
五、实现代码
物业管理
/**
* 物业管理
* 后端接口
* @author
* @email
* @date 2023-03-31 13:56:00
*/
@RestController
@RequestMapping("/wuyeguanli")
public class WuyeguanliController {
@Autowired
private WuyeguanliService wuyeguanliService;
@Autowired
private TokenService tokenService;
/**
* 登录
*/
@IgnoreAuth
@RequestMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
WuyeguanliEntity u = wuyeguanliService.selectOne(new EntityWrapper<WuyeguanliEntity>().eq("zhanghao", username));
if(u==null || !u.getMima().equals(MD5Util.md5(password))) {
return R.error("账号或密码不正确");
}
String token = tokenService.generateToken(u.getId(), username,"wuyeguanli", "物业管理" );
return R.ok().put("token", token);
}
/**
* 注册
*/
@IgnoreAuth
@RequestMapping("/register")
public R register(@RequestBody WuyeguanliEntity wuyeguanli){
//ValidatorUtils.validateEntity(wuyeguanli);
WuyeguanliEntity u = wuyeguanliService.selectOne(new EntityWrapper<WuyeguanliEntity>().eq("zhanghao", wuyeguanli.getZhanghao()));
if(u!=null) {
return R.error("注册用户已存在");
}
Long uId = new Date().getTime();
wuyeguanli.setId(uId);
wuyeguanli.setMima(MD5Util.md5(wuyeguanli.getMima()));
wuyeguanliService.insert(wuyeguanli);
return R.ok();
}
/**
* 退出
*/
@RequestMapping("/logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
/**
* 获取用户的session用户信息
*/
@RequestMapping("/session")
public R getCurrUser(HttpServletRequest request){
Long id = (Long)request.getSession().getAttribute("userId");
WuyeguanliEntity u = wuyeguanliService.selectById(id);
return R.ok().put("data", u);
}
/**
* 密码重置
*/
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request){
WuyeguanliEntity u = wuyeguanliService.selectOne(new EntityWrapper<WuyeguanliEntity>().eq("zhanghao", username));
if(u==null) {
return R.error("账号不存在");
}
u.setMima(MD5Util.md5("123456"));
wuyeguanliService.updateById(u);
return R.ok("密码已重置为:123456");
}
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,WuyeguanliEntity wuyeguanli,
HttpServletRequest request){
EntityWrapper<WuyeguanliEntity> ew = new EntityWrapper<WuyeguanliEntity>();
PageUtils page = wuyeguanliService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, wuyeguanli), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,WuyeguanliEntity wuyeguanli,
HttpServletRequest request){
EntityWrapper<WuyeguanliEntity> ew = new EntityWrapper<WuyeguanliEntity>();
PageUtils page = wuyeguanliService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, wuyeguanli), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( WuyeguanliEntity wuyeguanli){
EntityWrapper<WuyeguanliEntity> ew = new EntityWrapper<WuyeguanliEntity>();
ew.allEq(MPUtil.allEQMapPre( wuyeguanli, "wuyeguanli"));
return R.ok().put("data", wuyeguanliService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(WuyeguanliEntity wuyeguanli){
EntityWrapper< WuyeguanliEntity> ew = new EntityWrapper< WuyeguanliEntity>();
ew.allEq(MPUtil.allEQMapPre( wuyeguanli, "wuyeguanli"));
WuyeguanliView wuyeguanliView = wuyeguanliService.selectView(ew);
return R.ok("查询物业管理成功").put("data", wuyeguanliView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
WuyeguanliEntity wuyeguanli = wuyeguanliService.selectById(id);
return R.ok().put("data", wuyeguanli);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
WuyeguanliEntity wuyeguanli = wuyeguanliService.selectById(id);
return R.ok().put("data", wuyeguanli);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody WuyeguanliEntity wuyeguanli, HttpServletRequest request){
wuyeguanli.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(wuyeguanli);
WuyeguanliEntity u = wuyeguanliService.selectOne(new EntityWrapper<WuyeguanliEntity>().eq("zhanghao", wuyeguanli.getZhanghao()));
if(u!=null) {
return R.error("用户已存在");
}
wuyeguanli.setId(new Date().getTime());
wuyeguanli.setMima(MD5Util.md5(wuyeguanli.getMima()));
wuyeguanliService.insert(wuyeguanli);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody WuyeguanliEntity wuyeguanli, HttpServletRequest request){
wuyeguanli.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(wuyeguanli);
WuyeguanliEntity u = wuyeguanliService.selectOne(new EntityWrapper<WuyeguanliEntity>().eq("zhanghao", wuyeguanli.getZhanghao()));
if(u!=null) {
return R.error("用户已存在");
}
wuyeguanli.setId(new Date().getTime());
wuyeguanli.setMima(MD5Util.md5(wuyeguanli.getMima()));
wuyeguanliService.insert(wuyeguanli);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
@Transactional
public R update(@RequestBody WuyeguanliEntity wuyeguanli, HttpServletRequest request){
//ValidatorUtils.validateEntity(wuyeguanli);
WuyeguanliEntity wuyeguanliEntity = wuyeguanliService.selectById(wuyeguanli.getId());
if(StringUtils.isNotBlank(wuyeguanli.getMima()) && !wuyeguanli.getMima().equals(wuyeguanliEntity.getMima())) {
wuyeguanli.setMima(MD5Util.md5(wuyeguanli.getMima()));
}
wuyeguanliService.updateById(wuyeguanli);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
wuyeguanliService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<WuyeguanliEntity> wrapper = new EntityWrapper<WuyeguanliEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = wuyeguanliService.selectCount(wrapper);
return R.ok().put("count", count);
}
}