基于java+springboot+vue的房地产销售管理系统

项目介绍

社会和科技的不断进步带来更便利的生活,计算机技术也越来越平民化。二十一世纪是数据时代,各种信息经过统计分析都可以得到想要的结果,所以也可以更好的为人们工作、生活服务。房屋是生活条件的一部分,所以需求量非常大。把计算机技术和房地产销售相结合可以更符合现代、用户的要求,实现更为方便的销售房屋的方式。

本基于JAVA的房地产销售管理系统采用JAVA语言和Vue技术,框架采用Springboot,搭配Mysql数据库,运行在Idea里。本基于JAVA的房地产销售管理系统提供管理员、客户、销售经理三种角色的服务。总的功能包括房产的查询、预约、评价、购买和论坛管理等。本系统可以帮助管理员、销售经理更新房产信息和管理预约、购买信息,帮助客户实现在线的预约方式,并可以实现购买。本系统采用成熟技术开发可以完成房地产销售管理的相关工作。
在这里插入图片描述

开发环境

编程语言:Java
数据库 :Mysql
系统架构:B/S
后端框架:SpringBoot
编译工具:idea或者eclipse,jdk1.8,maven
支持定做:java/php/python/android/小程序vue/爬虫/c#/asp.net

系统实现

4.1用户登录功能的详细实现
用户登录界面起到验证身份的作用,本界面采用风景图片背景进行设计。在用户登录界面里设置了程序的名称和用户、密码、客户注册的文本框。在文本框下是登录按钮。用户在信息输入完成后可以使用登录按钮进行相对应的操作,还加入了登录安全的简单文字提醒。用户登录功能的实现界面如下图4-1所示:
在这里插入图片描述

图4-1用户登录实现界面

4.2管理员权限的功能实现
4.2.1客户信息管理功能的详细实现
管理员负责客户信息的录入和管理,客户的地址、联系方式等都可以由管理员在此功能里看到。管理员查询客户信息的功能实现如下图4-2所示:
在这里插入图片描述

图4-2管理员查询客户信息的实现界面

4.2.2房产管理功能的详细实现
管理员可以对房产的信息进行管理、审核。本功能可以实现房产的定时更新和审核管理。管理员查询房产信息的实现界面如下图4-3所示:
在这里插入图片描述

图4-3管理员查询房产信息的实现界面

4.2.3预约看房功能的详细实现
本功能包括查询已有的所有预约看房信息和删除预约看房信息。预约看房查询功能的实现详情如下图4-4所示:
在这里插入图片描述

图4-4预约看房查询功能的实现界面

4.2.4论坛管理功能的详细实现
管理员可以查询论坛和审核管理客户发布的帖子。论坛管理功能的实现界面如下图4-5所示:
在这里插入图片描述

图4-5论坛管理功能的实现界面

4.2.5购置房产管理功能的详细实现
管理员可以管理客户的购置房产信息,也可以查询和删除购置房产内容。购置房产管理功能的实现界面如下图4-6所示:
在这里插入图片描述

图4-6购置房产管理功能的实现界面

4.2.6个人中心管理功能的详细实现
管理员可以对个人的资料进行修改和管理,管理员还可以在本功能里修改密码。管理员查询个人资料的实现界面如下图4-7所示:
在这里插入图片描述

图4-7个人中心管理功能的实现界面

4.2.7客户打分管理功能的实现界面
管理员可以查询客户的打分详情,并进行查询等操作。客户打分管理功能的实现界面如下图4-8所示:
在这里插入图片描述

图4-8客户打分管理功能的实现界面

4.2.8基础数据管理功能的实现界面
管理员可以管理房产户型和公告类型。实现界面如下图4-9所示:
在这里插入图片描述

图4-9基础数据管理功能的实现界面

4.2.9轮播图管理功能的实现界面
可以设置轮播图。实现界面如下图4-10所示:
在这里插入图片描述

图4-10轮播图管理功能的实现界面

4.3客户权限的功能详细实现
4.3.1个人中心管理功能的详细界面实现
当客户登录进系统后可以修改自己的资料,可以使自己信息的保持正确性。客户修改个人资料的实现界面如下图4-11所示:
在这里插入图片描述

图4-11修改个人资料功能的运行界面

4.3.2房产查询功能的详细实现
用户可以根据房产名称搜索相对应的房产,用户查询房产的界面实现如下图4-12所示:
在这里插入图片描述

图4-12房产查询功能的运行界面

4.3.3预约看房功能的详细实现
在本功能里客户可以查看自己预约的所有房产信息。预约看房功能的实现界面如下图4-13所示:
在这里插入图片描述

图4-13预约看房功能的运行界面

4.3.4论坛管理功能的详细实现
客户可以发布帖子和查看帖子的回复信息。论坛管理功能的实现界面如下图4-14所示:
在这里插入图片描述

图4-14论坛管理功能的实现界面

4.3.5购置房产管理功能的详细实现
客户可以在线购置房产,也可以查询自己的详细购置内容。购置房产管理功能的实现界面如下图4-15所示:
在这里插入图片描述

图4-15购置房产管理功能的实现界面

4.3.6客户打分功能的详细实现
完成销售后,客户可以进行打分。客户打分的实现界面如下图4-16所示:
在这里插入图片描述

图4-16客户打分功能的运行界面

4.4销售经理权限功能的实现
  销售经理的功能和管理员的类似,功能包括房产信息管理、预约看房管理、论坛管理、公告管理、购置房产管理、客户打分管理。销售经理权限的功能实现界面如下图4-17所示:
在这里插入图片描述

图4.17销售经理权限功能的实现界面

核心代码

package com.controller;

import java.io.File;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.*;
import java.lang.reflect.InvocationTargetException;

import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;

/**
 * 客户打分
 * 后端接口
 * @author
 * @email
*/
@RestController
@Controller
@RequestMapping("/kehudafen")
public class KehudafenController {
    private static final Logger logger = LoggerFactory.getLogger(KehudafenController.class);

    @Autowired
    private KehudafenService kehudafenService;


    @Autowired
    private TokenService tokenService;
    @Autowired
    private DictionaryService dictionaryService;

    //级联表service
    @Autowired
    private YonghuService yonghuService;
    @Autowired
    private YuangongService yuangongService;



    /**
    * 后端列表
    */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永不会进入");
        else if("客户".equals(role))
            params.put("yonghuId",request.getSession().getAttribute("userId"));
        else if("销售经理".equals(role))
            params.put("yuangongId",request.getSession().getAttribute("userId"));
        if(params.get("orderBy")==null || params.get("orderBy")==""){
            params.put("orderBy","id");
        }
        PageUtils page = kehudafenService.queryPage(params);

        //字典表数据转换
        List<KehudafenView> list =(List<KehudafenView>)page.getList();
        for(KehudafenView c:list){
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(c, request);
        }
        return R.ok().put("data", page);
    }

    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        KehudafenEntity kehudafen = kehudafenService.selectById(id);
        if(kehudafen !=null){
            //entity转view
            KehudafenView view = new KehudafenView();
            BeanUtils.copyProperties( kehudafen , view );//把实体数据重构到view中

                //级联表
                YonghuEntity yonghu = yonghuService.selectById(kehudafen.getYonghuId());
                if(yonghu != null){
                    BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setYonghuId(yonghu.getId());
                }
                //级联表
                YuangongEntity yuangong = yuangongService.selectById(kehudafen.getYuangongId());
                if(yuangong != null){
                    BeanUtils.copyProperties( yuangong , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setYuangongId(yuangong.getId());
                }
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view, request);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("ve")
    public R save(@RequestBody KehudafenEntity kehudafen, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,kehudafen:{}",this.getClass().getName(),kehudafen.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永远不会进入");
        else if("销售经理".equals(role))
            kehudafen.setYuangongId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
        else if("客户".equals(role))
            kehudafen.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));

        Wrapper<KehudafenEntity> queryWrapper = new EntityWrapper<KehudafenEntity>()
            .eq("yuangong_id", kehudafen.getYuangongId())
            .eq("yonghu_id", kehudafen.getYonghuId())
            .eq("kehudafen_number", kehudafen.getKehudafenNumber())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        KehudafenEntity kehudafenEntity = kehudafenService.selectOne(queryWrapper);
        if(kehudafenEntity==null){
            kehudafen.setInsertTime(new Date());
            kehudafen.setCreateTime(new Date());
            kehudafenService.insert(kehudafen);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 后端修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody KehudafenEntity kehudafen, HttpServletRequest request){
        logger.debug("update方法:,,Controller:{},,kehudafen:{}",this.getClass().getName(),kehudafen.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(false)
//            return R.error(511,"永远不会进入");
//        else if("销售经理".equals(role))
//            kehudafen.setYuangongId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
//        else if("客户".equals(role))
//            kehudafen.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
        //根据字段查询是否有相同数据
        Wrapper<KehudafenEntity> queryWrapper = new EntityWrapper<KehudafenEntity>()
            .notIn("id",kehudafen.getId())
            .andNew()
            .eq("yuangong_id", kehudafen.getYuangongId())
            .eq("yonghu_id", kehudafen.getYonghuId())
            .eq("kehudafen_number", kehudafen.getKehudafenNumber())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        KehudafenEntity kehudafenEntity = kehudafenService.selectOne(queryWrapper);
        if(kehudafenEntity==null){
            kehudafenService.updateById(kehudafen);//根据id更新
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 删除
    */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids){
        logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
        kehudafenService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }


    /**
     * 批量上传
     */
    @RequestMapping("/batchInsert")
    public R save( String fileName){
        logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
        try {
            List<KehudafenEntity> kehudafenList = new ArrayList<>();//上传的东西
            Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
            Date date = new Date();
            int lastIndexOf = fileName.lastIndexOf(".");
            if(lastIndexOf == -1){
                return R.error(511,"该文件没有后缀");
            }else{
                String suffix = fileName.substring(lastIndexOf);
                if(!".xls".equals(suffix)){
                    return R.error(511,"只支持后缀为xls的excel文件");
                }else{
                    URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
                    File file = new File(resource.getFile());
                    if(!file.exists()){
                        return R.error(511,"找不到上传文件,请联系管理员");
                    }else{
                        List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
                        dataList.remove(0);//删除第一行,因为第一行是提示
                        for(List<String> data:dataList){
                            //循环
                            KehudafenEntity kehudafenEntity = new KehudafenEntity();
//                            kehudafenEntity.setYuangongId(Integer.valueOf(data.get(0)));   //销售经理 要改的
//                            kehudafenEntity.setYonghuId(Integer.valueOf(data.get(0)));   //客户 要改的
//                            kehudafenEntity.setKehudafenNumber(Integer.valueOf(data.get(0)));   //分数 要改的
//                            kehudafenEntity.setInsertTime(date);//时间
//                            kehudafenEntity.setCreateTime(date);//时间
                            kehudafenList.add(kehudafenEntity);


                            //把要查询是否重复的字段放入map中
                        }

                        //查询是否重复
                        kehudafenService.insertBatch(kehudafenList);
                        return R.ok();
                    }
                }
            }
        }catch (Exception e){
            return R.error(511,"批量插入数据异常,请联系管理员");
        }
    }





    /**
    * 前端列表
    */
    @IgnoreAuth
    @RequestMapping("st")
    public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));

        // 没有指定排序字段就默认id倒序
        if(StringUtil.isEmpty(String.valueOf(params.get("orderBy")))){
            params.put("orderBy","id");
        }
        PageUtils page = kehudafenService.queryPage(params);

        //字典表数据转换
        List<KehudafenView> list =(List<KehudafenView>)page.getList();
        for(KehudafenView c:list)
            dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段
        return R.ok().put("data", page);
    }

    /**
    * 前端详情
    */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        KehudafenEntity kehudafen = kehudafenService.selectById(id);
            if(kehudafen !=null){


                //entity转view
                KehudafenView view = new KehudafenView();
                BeanUtils.copyProperties( kehudafen , view );//把实体数据重构到view中

                //级联表
                    YonghuEntity yonghu = yonghuService.selectById(kehudafen.getYonghuId());
                if(yonghu != null){
                    BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setYonghuId(yonghu.getId());
                }
                //级联表
                    YuangongEntity yuangong = yuangongService.selectById(kehudafen.getYuangongId());
                if(yuangong != null){
                    BeanUtils.copyProperties( yuangong , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setYuangongId(yuangong.getId());
                }
                //修改对应字典表字段
                dictionaryService.dictionaryConvert(view, request);
                return R.ok().put("data", view);
            }else {
                return R.error(511,"查不到数据");
            }
    }


    /**
    * 前端保存
    */
    @RequestMapping("/add")
    public R add(@RequestBody KehudafenEntity kehudafen, HttpServletRequest request){
        logger.debug("add方法:,,Controller:{},,kehudafen:{}",this.getClass().getName(),kehudafen.toString());
        Wrapper<KehudafenEntity> queryWrapper = new EntityWrapper<KehudafenEntity>()
            .eq("yuangong_id", kehudafen.getYuangongId())
            .eq("yonghu_id", kehudafen.getYonghuId())
            .eq("kehudafen_number", kehudafen.getKehudafenNumber())
            ;
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        KehudafenEntity kehudafenEntity = kehudafenService.selectOne(queryWrapper);
        if(kehudafenEntity==null){
            kehudafen.setInsertTime(new Date());
            kehudafen.setCreateTime(new Date());
        kehudafenService.insert(kehudafen);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }


}

论文参考

在这里插入图片描述

目 录
摘 要 1
Abstract 2
第1章 绪论 6
1.1课题研究背景与现状 6
1.2课题实现目的和研究意义 6
1.3课题研究内容 7
1.4论文结构安排 7
第2章 系统分析 8
2.1系统开发中使用相关技术介绍 8
2.1.1JAVA介绍 8
2.1.2Mysql数据库介绍 8
2.1.3B/s架构介绍 9
2.1.4 Tomcat服务器介绍 9
2.1.5Vue技术介绍 10
2.2系统可行性分析 10
2.2.1经济可行性分析 10
2.2.2操作可行性分析 11
2.2.3技术可行性分析 11
2.3系统需求分析 11
2.4系统性能分析 11
2.5系统功能分析 12
2.6系统操作流程分析 13
第3章 系统设计 15
3.1系统功能结构设计 15
3.2数据库设计 15
3.2.1数据ER图设计 16
3.2.2数据库表设计 17
第4章 系统详细实现 25
4.1用户登录功能的详细实现 25
4.2管理员权限的功能实现 25
4.2.1客户信息管理功能的详细实现 25
4.2.2房产管理功能的详细实现 26
4.2.3预约看房功能的详细实现 26
4.2.4论坛管理功能的详细实现 27
4.2.5购置房产管理功能的详细实现 27
4.2.6个人中心管理功能的详细实现 28
4.2.7客户打分管理功能的实现界面 28
4.2.8基础数据管理功能的实现界面 29
4.2.9轮播图管理功能的实现界面 29
4.3客户权限的功能详细实现 30
4.3.1个人中心管理功能的详细界面实现 30
4.3.2房产查询功能的详细实现 30
4.3.3预约看房功能的详细实现 31
4.3.4论坛管理功能的详细实现 31
4.3.5购置房产管理功能的详细实现 32
4.3.6客户打分功能的详细实现 32
4.4销售经理权限功能的实现 33
第5章 系统测试 34
5.1系统测试的方法与选择 34
5.2测试环境与测试条件 34
5.3详细功能测试 34
5.3.1用户登录功能的测试 34
5.3.2房产管理功能的测试 35
5.3.3预约看房功能的测试 36
5.3.4购置房产功能的测试 36
5.4测试总结 37
总 结 38
参考文献 39
致 谢 40

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

q_2781179521

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

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

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

打赏作者

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

抵扣说明:

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

余额充值