Java项目:社区物业管理系统(Spring Boot + SpringMVC + MyBatis+ Mysql + druid +HTML+CSS+JavaScrip+ Layui)

该系统是一个基于SpringBoot、SpringMVC、MyBatis、MySQL、Druid等技术的社区物业管理平台。管理员可进行车位、物业费用、投诉、报修等管理,业主可以查询费用和报修情况。系统使用Layui前端框架,并提供了用户管理、登录、分页查询等功能。
摘要由CSDN通过智能技术生成

项目介绍 :

Spring Boot + SpringMVC + MyBatis+ Mysql + druid +HTML+CSS+JavaScrip+ Layui 开发的社区物业管理系统

运行环境:

最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。

IDE环境:

Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以
内置功能

技术栈

  • 数据库:MySQL 5.7.33
  • 后端技术:SpringBoot 2.3.0,MyBatisPlus
  • 数据连接池:Druid
  • 前端技术:Layui,Ajax,Json等
  • Web容器:Apache Tomcat 8
  • 项目管理工具:Maven 3.6.0
  • 版本控制工具:Git
  • 开发工具:IDEA

管理员角色包含以下功能:

  1. 管理员登录
  2. 车位收费管理
  3. 物业收费管理
  4. 投诉信息管理
  5. 报修信息管理
  6. 楼宇管理
  7. 房屋管理
  8. 业主管理
  9. 车位管理
  10. 抄表管理
  11. 用户管理
  12. 报修统计分析

业主角色包含以下功能

  1. 业主登录
  2. 车位费查询
  3. 物业费查询
  4. 我的投诉列表
  5. 我的报修列表

数据库设计

请添加图片描述

预览项目

登录模块
在这里插入图片描述
物业收费管理
在这里插入图片描述
业主管理
在这里插入图片描述
车位管理
在这里插入图片描述
投诉信息管理
在这里插入图片描述
楼宇管理
在这里插入图片描述
车位收费管理
在这里插入图片描述

保修信息管理在这里插入图片描述
保修统计分析
在这里插入图片描述

用户管理控制层:



/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author 
 * @since 2020-10-28
 */
@Api(tags = {""})
@RestController
@RequestMapping("/userinfo")
public class UserinfoController {

    private Logger log = LoggerFactory.getLogger(getClass());

    @Resource
    private IUserinfoService userinfoService;

    @Resource
    private IOwnerService ownerService;

    @RequestMapping("/queryUserInfoAll")
    public JsonObject queryUserInfoAll(@RequestParam(defaultValue = "1") Integer page,
                                    @RequestParam(defaultValue = "15") Integer limit,
                                    Userinfo userinfo){
        JsonObject object=new JsonObject();
        PageInfo<Userinfo> pageInfo= userinfoService.findUserinfoAll(page,limit,userinfo);
        object.setCode(0);
        object.setMsg("ok");
        object.setCount(pageInfo.getTotal());
        object.setData(pageInfo.getList());
        return object;
    }

    @ApiOperation(value = "删除")
    @RequestMapping("/deleteByIds")
    public R delete(String  ids){
        List<String> list= Arrays.asList(ids.split(","));
        //遍历遍历进行删除
        for(String id:list){
            Userinfo user = userinfoService.findById(Long.parseLong(id));
            ownerService.deleteOwnerUserByUserName(user.getUsername());
            userinfoService.delete(Long.parseLong(id));
        }
        return R.ok();
    }


    @ApiOperation(value = "新增")
    @RequestMapping("/add")
    public R add(@RequestBody Userinfo userinfo){
        userinfoService.add(userinfo);
        return R.ok();
    }


    @ApiOperation(value = "更新")
    @RequestMapping("/update")
    public R update(String oldPwd,String newPwd,Integer id){
        //根据id获取当前的数据记录
        Userinfo user=userinfoService.findById(new Long(id));
        if(oldPwd.equals(user.getPassword())){//输入的老密码和原密码一致
            user.setPassword(newPwd);
            userinfoService.updateData(user);
            return R.ok();
        }else{
            return R.fail("两次密码不一致");
        }
    }

    @ApiOperation(value = "查询分页数据")
    @ApiImplicitParams({
        @ApiImplicitParam(name = "page", value = "页码"),
        @ApiImplicitParam(name = "pageCount", value = "每页条数")
    })
    @GetMapping()
    public IPage<Userinfo> findListByPage(@RequestParam Integer page,
                                          @RequestParam Integer pageCount){
        return userinfoService.findListByPage(page, pageCount);
    }

    @ApiOperation(value = "id查询")
    @GetMapping("{id}")
    public Userinfo findById(@PathVariable Long id){
        return userinfoService.findById(id);
    }

}



用户信息主页

<div class="layuimini-container layuimini-page-anim">
    <div class="layuimini-main layui-form">

        <div class="demoTable">
            用户类型:
            <div class="layui-inline">
                <select name="type" id="type" lay-verify="required"  lay-search="">
                    <option value="">请选择用户类型</option>
                    <option value="1">管理员</option>
                    <option value="0">业主</option>
                </select>
            </div>
            <button class="layui-btn" data-type="reload">搜索</button>
        </div>

        <script type="text/html" id="toolbarDemo">
            <div class="layui-btn-container">
                <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add"> 添加 </button>
                <button class="layui-btn layui-btn-sm layui-btn-danger data-delete-btn" lay-event="delete"> 删除 </button>
            </div>
        </script>

        <table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>

        <script type="text/html" id="currentTableBar">

          <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">修改密码</a>
          <a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>

        </script>

    </div>
</div>

<script>
    layui.use(['form', 'table','miniPage','element'], function () {
        var $ = layui.jquery,
            form = layui.form,
            table = layui.table,
            element=layui.element;
            miniPage = layui.miniPage;

        table.render({
            elem: '#currentTableId',
            url: 'userinfo/queryUserInfoAll',
            toolbar: '#toolbarDemo',
            defaultToolbar: ['filter', 'exports', 'print', {
                title: '提示',
                layEvent: 'LAYTABLE_TIPS',
                icon: 'layui-icon-tips'
            }],
            cols: [[
                {type: "checkbox", width: 50},
                //{field: 'id', width: 80, title: 'ID', sort: true},
                {field: 'username',width: 100, title: '用户名'},
                {field: 'status', width: 80, title: '状态',
                    templet:function(res){
                        if(res.type=='1'){
                            return '<span class="layui-badge layui-bg-green">管理员</span>';
                        }else{
                            return '<span class="layui-badge layui-bg-orange">业主</span>';
                        }
                    }},
                {title: '操作', minWidth: 150, toolbar: '#currentTableBar', align: "center"}
            ]],
            limits: [10, 15, 20, 25, 50, 100],
            limit: 15,
            page: true,
            id:'testReload',
            skin: 'line'
        });

        var $ = layui.$, active = {
            reload: function(){
                var type = $('#type');
                //执行重载
                table.reload('testReload', {
                    page: {
                        curr: 1 //重新从第 1 页开始
                    }
                    ,where: {
                        type:type.val()
                    }
                }, 'data');
            }
        };

        $('.demoTable .layui-btn').on('click', function(){
            var type = $(this).data('type');
            active[type] ? active[type].call(this) : '';
        });

        form.render('select');//让下拉框在页面上显示

        /**
         * toolbar事件监听
         */
        table.on('toolbar(currentTableFilter)', function (obj) {
            if (obj.event === 'add') {   // 监听添加操作
                var content = miniPage.getHrefContent('page/base/admin/add.html');
                var openWH = miniPage.getOpenWidthHeight();

                var index = layer.open({
                    title: '添加管理员',
                    type: 1,
                    shade: 0.2,
                    maxmin:true,
                    shadeClose: true,
                    area: [openWH[0] + 'px', openWH[1] + 'px'],
                    offset: [openWH[2] + 'px', openWH[3] + 'px'],
                    content: content,
                });
                $(window).on("resize", function () {
                    layer.full(index);
                });
            } else  if (obj.event === 'delete') {  // 监听删除操作
                var checkStatus = table.checkStatus(obj.config.id)
                    , data = checkStatus.data;
                /**
                 *  首先判断是否选择信息,如果没有提示
                 *  如果有
                 *     1、获取选中的id集合
                 *     2、通过ajax请求发送id集合,进行业务处理
                 */
                if(data.length==0){
                    layer.msg("请选要删除的记录信息");
                }else{
                    //获取删除id的集合
                    var ids=getCheckId(data);
                    layer.confirm("确定是否删除?",function(index){
                        deleteByIds(ids,index);
                    })
                }
                 // layer.alert(JSON.stringify(data));
            }
        });

        /**
         * 获取批量删除选中的id集合
         */
        function getCheckId(data){
            var arr=new Array();
            for(var i=0;i<data.length;i++){
                arr.push(data[i].id);
            }
            return arr.join(",");
        };

        /**
         * 删除功能的实现
         */
        function deleteByIds(ids,index){
            $.ajax({
                url:"userinfo/deleteByIds",
                type:"POST",
                data:{"ids":ids},
                success:function(result){
                    if(result.code==200){
                        layer.msg("删除成功",{
                            icon:6,
                            time:500
                        },function(){
                            parent.window.location.reload();//重新页面
                            var iframeIndex = parent.layer.getFrameIndex(window.name);
                            parent.layer.close(iframeIndex);
                        });

                    }else{
                        layer.msg("删除失败");
                    }
                }
            })
            return false;
        };
        //监听表格复选框选择
        table.on('checkbox(currentTableFilter)', function (obj) {
            console.log(obj)
        });



        table.on('tool(currentTableFilter)', function (obj) {
            var data = obj.data;
            if (obj.event === 'edit') {
                //修改密码
                var content = miniPage.getHrefContent('page/base/admin/edit.html');
                var openWH = miniPage.getOpenWidthHeight();
                var index = layer.open({
                    title: '修改密码',
                    type: 1,
                    shade: 0.2,
                    maxmin:true,
                    shadeClose: true,
                    area: ['60%','60%'],
                    content: content,
                });
                $("#userId").val(data.id);
                $(window).on("resize", function () {
                    layer.full(index);
                });
                return false;

            } else if (obj.event === 'delete') {
                layer.confirm('确定是否删除', function (index) {
                    //调用删除功能即可
                    deleteByIds(data.id,index);
                    layer.close(index);
                });
            }
        });

    });
</script>

创作不易,源码非无偿提供,需要获取源码的私信博主

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java水泥工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值