房屋租赁|房屋租赁系统|基于Springboot的房屋租赁系统设计与实现(源码+数据库+文档)
房屋租赁系统目录
目录
基于Springboot的房屋租赁系统设计与实现
一、前言
二、系统功能设计
三、系统实现
管理员功能模块
房主功能模块
用户功能模块
四、数据库设计
1、实体ER图
五、核心代码
六、论文参考
七、最新计算机毕设选题推荐
八、源码获取:
博主介绍:✌️大厂码农|毕设布道师,阿里云开发社区乘风者计划专家博主,CSDN平台Java领域优质创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。✌️
主要项目:小程序、SpringBoot、SSM、Vue、Html、Jsp、Nodejs等设计与开发。
🍅文末获取源码联系🍅
基于Springboot的房屋租赁系统设计与实现
一、前言
通过房屋租赁系统网站页面,
全面智能的房屋租赁管理系统,基于Spring Boot的房屋租赁系统,在研究目前国内外房屋出租管理系统情况的基础上,房屋租赁市场日益繁荣,建立了房屋租赁系统,系统中的功能模块主要是实现人中心、房屋类型管理、房屋信息、预约看房管理、合同信息管理、房屋报修管理、房屋评价管理、我要当房东管理、留言板管理、系统管理等功能部分;经过认真细致的研究,精心准备和规划,最后测试成功,系统可以正常使用。分析功能调整与房屋租赁系统实现的实际需求相结合,讨论了JSP开发房屋租赁系统的使用。
关键字:房屋租赁系统 springboot+vue
二、系统功能设计
房屋租赁系统的设计主要是为了满足用户的实际需求。 因此,它需要通过Internet实现,因此它必须具备硬件和软件基础。该平台最终可以通过科学技术和各种方式达到支持智能化的信息管理的目的。因此,它必须具备网络学习平台管理所需的环境和各种资料,并保证实现开放性,模块性和实用性三个原则。
房屋租赁系统的结构,系统实现的功能模块如下图4-1所示。
三、系统实现
管理员功能模块
管理员通过填写用户名、密码、选择权限进行登录,进入后台系统,如图5-1所示。
图5-1管理员登录界面图
管理员登录成功后,进入后台页面,可以进行查看个人中心、房屋类型管理、房屋信息、预约看房管理、合同信息管理、房屋报修管理、房屋评价管理、我要当房东管理、留言板管理、系统管理等功能模块,进行相对应操作。
房主管理:通过列表可以获取用户名、密码、姓名、头像、性别、职业、联系方式、身份证号、进行查看用户信息或修改删除操作还可以通过新增进行添加用户信息操作,如图5-2所示。
图5-2房东管理页面
房屋类型管理:通过列表可以进行查看房屋类型,进行查看详情或修改、删除操作,并通过新增进行添加类型信息,如图5-3所示。
图5-3房屋类型界面图
房屋信息管理:通过房屋信息列表可以查看房屋名称、房屋类型、房屋图片、出租方式、朝向楼层、面积、房屋状态、小区、详细地址、月租价格、押金、房屋设施、发布日期、房住帐号、房主姓名、等信息进行查看详细或修改或删除操作,并且可以通过查看评论进行在线回复信息或进行新增房屋信息,操作,如图54所示。
图5-4房屋信息界面图
公告信息管理:通过列表可以获取公告信息的标题、简介、图片等详细信息进行修改或删除操作,并且可以通过新增公告信息进行添加公告信息,如图5-5所示。
图5-5公告信息界面图
预约看房管理:通过列表可以获取预约编号、房屋名称、房屋类型、房屋状态、小区、月租价格、押金、租用月数、预约时间、用户名、姓名、身份证、联系电话、房主账号、房主姓名、审核回复、审核状态等信息,进行审核或删除操作,如图5-6所示。
图5-6预约看房界面图
我要当房东信息:通过列表可以查看房屋名称、房屋类型、图片、租赁方式、小区、月租价格、用户名、房屋详情、朝向楼层、面积、发布日期、联系电话等信息,进行查看详情或修改、删除操作或进行审核操作,如图5-7所示。
图5-7我要当房东界面图
房主功能模块
房主通过填写用户名、密码、选择权限进行登录,进入后台系统,如图5-8所示。
图5-8房主登录界面图
房主登录成功后,进入后台页面,可以进行查看个人中心、房屋信息管理、预约看房管理、合同信息管理、房屋报修管理、维修处理管理、房屋评价管理等功能模块,进行相对应操作。如图5-9所示。
图5-9房东信息页面
预约看房管理:通过列表可以获取预约编号、房屋名称、房屋类型、房屋状态、房屋状态、小区、月租价格、押金、租用月数、租用金额、预约时间、用户名、姓名、身份证、联系电话、房主账号、房主姓名、审核回复、审核状态等信息、进行查看详情信息操作,如图5-10所示。
图5-10预约看房管理界面图
合同信息管理:通过合同信息列表可以获取合同编号、合同名称、合同类型、小区、月租价格、租用月数,租用金额。押金,房租状态。合同金额,合同内容、生效日、有限期限,用户名,联系电话,房主账号,房主姓名、是否支付、审核回复等信息。进行查看查看操作。如图5-11所示。
图5-11合同信息管理界面图
维修处理管理:通过列表可以进行查看房屋名称、房屋类型、报修名称、类型、报修日期、维修日期、维修反馈、维修进度、更新日期、房主账号、房主姓名、用户名、联系电话等信息,进行查看详细信息操作,如图5-12所示。
图5-12维修处理界面图
房屋评价管理:通过列表可以获取合同编号、房屋名称、房屋类型、小区、评分、评价内容、评价日期、房主账号、用户名、联系电话、审核回复、审核状态等信息,进行查看详情操作,如图5-13所示。
图5-13房屋评价界面图
用户功能模块
通过房屋租赁系统网站页面可以查看首页、出租信息、求租信息、搜索信息、留言信息等功能模块,进行相对应操作。碧昂去可以通过会员登录、免费注册、忘记密码等信息,进行登录、注册或找回密码操作,通过输入用户名、密码、验证码等信息,进行登录,如图5-14所示。
图5-14 用户登录界面
用户通过登录进入房屋租赁系统页面可以进行查看系统的首页、房屋信息、我要当房东、公告信息、留言反馈、个人中心、后台管理等功能模块进行相对应操作。,如图5-15所示。
图5-2首页页面
用户通过点击个人中心可以进行查看个人中心的个人信息和我的收藏操作。
通过个人中心页面可以进行修改或更新个人信息的用户名、密码、性别、职业、联系方式、上传头像身份证号等信息进行更新信息操作。如图5-16所示。
图5-16个人信息页面
房屋信息用户通过点击房屋信息进入房屋信息,详情通过信息详情,可以过去房屋的房屋类型、租赁方式、朝向楼层、面积、房屋状态、小区、详细信息、月租价格、押金、房屋设施、发布日期、房屋帐号、房主姓名、等信息进行查看房屋详情和评论进行预约、收藏操作。如图5-17所示。
图5-17房屋信息页面
四、数据库设计
1、实体ER图
用户信息实体E-R图,如图4.2所示。
图4.2用户E-R图
房屋信息管理E-R图,如图4.3所示。
图4.3房屋信息E-R图
公告信息管理E-R图,如图4.4示。
图4.4公告E-R图
五、核心代码
package com.controller;import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;import com.entity.DiscussfangwuxinxiEntity;
import com.entity.view.DiscussfangwuxinxiView;import com.service.DiscussfangwuxinxiService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;/*** 房屋信息评论表* 后端接口* @author * @email * @date 2021-03-04 18:46:21*/
@RestController
@RequestMapping("/discussfangwuxinxi")
public class DiscussfangwuxinxiController {@Autowiredprivate DiscussfangwuxinxiService discussfangwuxinxiService;/*** 后端列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params,DiscussfangwuxinxiEntity discussfangwuxinxi, HttpServletRequest request){EntityWrapper<DiscussfangwuxinxiEntity> ew = new EntityWrapper<DiscussfangwuxinxiEntity>();PageUtils page = discussfangwuxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, discussfangwuxinxi), params), params));return R.ok().put("data", page);}/*** 前端列表*/@IgnoreAuth@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params,DiscussfangwuxinxiEntity discussfangwuxinxi, HttpServletRequest request){EntityWrapper<DiscussfangwuxinxiEntity> ew = new EntityWrapper<DiscussfangwuxinxiEntity>();PageUtils page = discussfangwuxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, discussfangwuxinxi), params), params));return R.ok().put("data", page);}/*** 列表*/@RequestMapping("/lists")public R list( DiscussfangwuxinxiEntity discussfangwuxinxi){EntityWrapper<DiscussfangwuxinxiEntity> ew = new EntityWrapper<DiscussfangwuxinxiEntity>();ew.allEq(MPUtil.allEQMapPre( discussfangwuxinxi, "discussfangwuxinxi")); return R.ok().put("data", discussfangwuxinxiService.selectListView(ew));}/*** 查询*/@RequestMapping("/query")public R query(DiscussfangwuxinxiEntity discussfangwuxinxi){EntityWrapper< DiscussfangwuxinxiEntity> ew = new EntityWrapper< DiscussfangwuxinxiEntity>();ew.allEq(MPUtil.allEQMapPre( discussfangwuxinxi, "discussfangwuxinxi")); DiscussfangwuxinxiView discussfangwuxinxiView = discussfangwuxinxiService.selectView(ew);return R.ok("查询房屋信息评论表成功").put("data", discussfangwuxinxiView);}/*** 后端详情*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") Long id){DiscussfangwuxinxiEntity discussfangwuxinxi = discussfangwuxinxiService.selectById(id);return R.ok().put("data", discussfangwuxinxi);}/*** 前端详情*/@RequestMapping("/detail/{id}")public R detail(@PathVariable("id") Long id){DiscussfangwuxinxiEntity discussfangwuxinxi = discussfangwuxinxiService.selectById(id);return R.ok().put("data", discussfangwuxinxi);}/*** 后端保存*/@RequestMapping("/save")public R save(@RequestBody DiscussfangwuxinxiEntity discussfangwuxinxi, HttpServletRequest request){discussfangwuxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(discussfangwuxinxi);discussfangwuxinxiService.insert(discussfangwuxinxi);return R.ok();}/*** 前端保存*/@RequestMapping("/add")public R add(@RequestBody DiscussfangwuxinxiEntity discussfangwuxinxi, HttpServletRequest request){discussfangwuxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(discussfangwuxinxi);discussfangwuxinxiService.insert(discussfangwuxinxi);return R.ok();}/*** 修改*/@RequestMapping("/update")public R update(@RequestBody DiscussfangwuxinxiEntity discussfangwuxinxi, HttpServletRequest request){//ValidatorUtils.validateEntity(discussfangwuxinxi);discussfangwuxinxiService.updateById(discussfangwuxinxi);//全部更新return R.ok();}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Long[] ids){discussfangwuxinxiService.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<DiscussfangwuxinxiEntity> wrapper = new EntityWrapper<DiscussfangwuxinxiEntity>();if(map.get("remindstart")!=null) {wrapper.ge(columnName, map.get("remindstart"));}if(map.get("remindend")!=null) {wrapper.le(columnName, map.get("remindend"));}int count = discussfangwuxinxiService.selectCount(wrapper);return R.ok().put("count", count);}}package com.controller;import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;import com.entity.FangwubaoxiuEntity;
import com.entity.view.FangwubaoxiuView;import com.service.FangwubaoxiuService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;/*** 房屋报修* 后端接口* @author * @email * @date 2021-03-04 18:46:21*/
@RestController
@RequestMapping("/fangwubaoxiu")
public class FangwubaoxiuController {@Autowiredprivate FangwubaoxiuService fangwubaoxiuService;/*** 后端列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params,FangwubaoxiuEntity fangwubaoxiu, HttpServletRequest request){String tableName = request.getSession().getAttribute("tableName").toString();if(tableName.equals("fangzhu")) {fangwubaoxiu.setFangzhuzhanghao((String)request.getSession().getAttribute("username"));}if(tableName.equals("yonghu")) {fangwubaoxiu.setYonghuming((String)request.getSession().getAttribute("username"));}EntityWrapper<FangwubaoxiuEntity> ew = new EntityWrapper<FangwubaoxiuEntity>();PageUtils page = fangwubaoxiuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, fangwubaoxiu), params), params));return R.ok().put("data", page);}/*** 前端列表*/@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params,FangwubaoxiuEntity fangwubaoxiu, HttpServletRequest request){EntityWrapper<FangwubaoxiuEntity> ew = new EntityWrapper<FangwubaoxiuEntity>();PageUtils page = fangwubaoxiuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, fangwubaoxiu), params), params));return R.ok().put("data", page);}/*** 列表*/@RequestMapping("/lists")public R list( FangwubaoxiuEntity fangwubaoxiu){EntityWrapper<FangwubaoxiuEntity> ew = new EntityWrapper<FangwubaoxiuEntity>();ew.allEq(MPUtil.allEQMapPre( fangwubaoxiu, "fangwubaoxiu")); return R.ok().put("data", fangwubaoxiuService.selectListView(ew));}/*** 查询*/@RequestMapping("/query")public R query(FangwubaoxiuEntity fangwubaoxiu){EntityWrapper< FangwubaoxiuEntity> ew = new EntityWrapper< FangwubaoxiuEntity>();ew.allEq(MPUtil.allEQMapPre( fangwubaoxiu, "fangwubaoxiu")); FangwubaoxiuView fangwubaoxiuView = fangwubaoxiuService.selectView(ew);return R.ok("查询房屋报修成功").put("data", fangwubaoxiuView);}/*** 后端详情*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") Long id){FangwubaoxiuEntity fangwubaoxiu = fangwubaoxiuService.selectById(id);return R.ok().put("data", fangwubaoxiu);}/*** 前端详情*/@RequestMapping("/detail/{id}")public R detail(@PathVariable("id") Long id){FangwubaoxiuEntity fangwubaoxiu = fangwubaoxiuService.selectById(id);return R.ok().put("data", fangwubaoxiu);}/*** 后端保存*/@RequestMapping("/save")public R save(@RequestBody FangwubaoxiuEntity fangwubaoxiu, HttpServletRequest request){fangwubaoxiu.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(fangwubaoxiu);fangwubaoxiuService.insert(fangwubaoxiu);return R.ok();}/*** 前端保存*/@RequestMapping("/add")public R add(@RequestBody FangwubaoxiuEntity fangwubaoxiu, HttpServletRequest request){fangwubaoxiu.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(fangwubaoxiu);fangwubaoxiuService.insert(fangwubaoxiu);return R.ok();}/*** 修改*/@RequestMapping("/update")public R update(@RequestBody FangwubaoxiuEntity fangwubaoxiu, HttpServletRequest request){//ValidatorUtils.validateEntity(fangwubaoxiu);fangwubaoxiuService.updateById(fangwubaoxiu);//全部更新return R.ok();}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Long[] ids){fangwubaoxiuService.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<FangwubaoxiuEntity> wrapper = new EntityWrapper<FangwubaoxiuEntity>();if(map.get("remindstart")!=null) {wrapper.ge(columnName, map.get("remindstart"));}if(map.get("remindend")!=null) {wrapper.le(columnName, map.get("remindend"));}String tableName = request.getSession().getAttribute("tableName").toString();if(tableName.equals("fangzhu")) {wrapper.eq("fangzhuzhanghao", (String)request.getSession().getAttribute("username"));}if(tableName.equals("yonghu")) {wrapper.eq("yonghuming", (String)request.getSession().getAttribute("username"));}int count = fangwubaoxiuService.selectCount(wrapper);return R.ok().put("count", count);}}
package com.controller;import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;import com.entity.FangwupingjiaEntity;
import com.entity.view.FangwupingjiaView;import com.service.FangwupingjiaService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;/*** 房屋评价* 后端接口* @author * @email * @date 2021-03-04 18:46:21*/
@RestController
@RequestMapping("/fangwupingjia")
public class FangwupingjiaController {@Autowiredprivate FangwupingjiaService fangwupingjiaService;/*** 后端列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params,FangwupingjiaEntity fangwupingjia, HttpServletRequest request){String tableName = request.getSession().getAttribute("tableName").toString();if(tableName.equals("fangzhu")) {fangwupingjia.setFangzhuzhanghao((String)request.getSession().getAttribute("username"));}if(tableName.equals("yonghu")) {fangwupingjia.setYonghuming((String)request.getSession().getAttribute("username"));}EntityWrapper<FangwupingjiaEntity> ew = new EntityWrapper<FangwupingjiaEntity>();PageUtils page = fangwupingjiaService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, fangwupingjia), params), params));return R.ok().put("data", page);}/*** 前端列表*/@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params,FangwupingjiaEntity fangwupingjia, HttpServletRequest request){EntityWrapper<FangwupingjiaEntity> ew = new EntityWrapper<FangwupingjiaEntity>();PageUtils page = fangwupingjiaService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, fangwupingjia), params), params));return R.ok().put("data", page);}/*** 列表*/@RequestMapping("/lists")public R list( FangwupingjiaEntity fangwupingjia){EntityWrapper<FangwupingjiaEntity> ew = new EntityWrapper<FangwupingjiaEntity>();ew.allEq(MPUtil.allEQMapPre( fangwupingjia, "fangwupingjia")); return R.ok().put("data", fangwupingjiaService.selectListView(ew));}/*** 查询*/@RequestMapping("/query")public R query(FangwupingjiaEntity fangwupingjia){EntityWrapper< FangwupingjiaEntity> ew = new EntityWrapper< FangwupingjiaEntity>();ew.allEq(MPUtil.allEQMapPre( fangwupingjia, "fangwupingjia")); FangwupingjiaView fangwupingjiaView = fangwupingjiaService.selectView(ew);return R.ok("查询房屋评价成功").put("data", fangwupingjiaView);}/*** 后端详情*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") Long id){FangwupingjiaEntity fangwupingjia = fangwupingjiaService.selectById(id);return R.ok().put("data", fangwupingjia);}/*** 前端详情*/@RequestMapping("/detail/{id}")public R detail(@PathVariable("id") Long id){FangwupingjiaEntity fangwupingjia = fangwupingjiaService.selectById(id);return R.ok().put("data", fangwupingjia);}/*** 后端保存*/@RequestMapping("/save")public R save(@RequestBody FangwupingjiaEntity fangwupingjia, HttpServletRequest request){fangwupingjia.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(fangwupingjia);fangwupingjiaService.insert(fangwupingjia);return R.ok();}/*** 前端保存*/@RequestMapping("/add")public R add(@RequestBody FangwupingjiaEntity fangwupingjia, HttpServletRequest request){fangwupingjia.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(fangwupingjia);fangwupingjiaService.insert(fangwupingjia);return R.ok();}/*** 修改*/@RequestMapping("/update")public R update(@RequestBody FangwupingjiaEntity fangwupingjia, HttpServletRequest request){//ValidatorUtils.validateEntity(fangwupingjia);fangwupingjiaService.updateById(fangwupingjia);//全部更新return R.ok();}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Long[] ids){fangwupingjiaService.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<FangwupingjiaEntity> wrapper = new EntityWrapper<FangwupingjiaEntity>();if(map.get("remindstart")!=null) {wrapper.ge(columnName, map.get("remindstart"));}if(map.get("remindend")!=null) {wrapper.le(columnName, map.get("remindend"));}String tableName = request.getSession().getAttribute("tableName").toString();if(tableName.equals("fangzhu")) {wrapper.eq("fangzhuzhanghao", (String)request.getSession().getAttribute("username"));}if(tableName.equals("yonghu")) {wrapper.eq("yonghuming", (String)request.getSession().getAttribute("username"));}int count = fangwupingjiaService.selectCount(wrapper);return R.ok().put("count", count);}}
六、论文参考
七、最新计算机毕设选题推荐
最新计算机软件毕业设计选题大全-CSDN博客
八、源码获取:
大家点赞、收藏、关注、评论啦 、👇🏻获取联系方式在文章末尾👇🏻
相关文章:
房屋租赁|房屋租赁系统|基于Springboot的房屋租赁系统设计与实现(源码+数据库+文档)
房屋租赁系统目录 目录 基于Springboot的房屋租赁系统设计与实现 一、前言 二、系统功能设计 三、系统实现 管理员功能模块 房主功能模块 用户功能模块 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取:…...
自然语言处理:词频-逆文档频率
介绍 大家好,博主又来给大家分享知识了。本来博主计划完成稠密向量表示的内容分享后,就开启自然语言处理中文本表示的讲解。可在整理分享资料的时候,博主发现还有个知识点,必须得单独拎出来好好说道说道。 这就是TF-IDF…...
Linux | 程序 / 进程调用库依赖关系查看
注:本文为 “Linux | 程序 / 进程调用库依赖” 相关文章合辑。 英文引文,机翻未校。 未整理去重。 How to Check Library Dependencies in Linux 如何在 Linux 系统中检查库依赖关系 Mohd Shakir Zakaria Programs on Linux often require external…...
3-4 WPS JS宏 工作表的新建、删除与错务内容处理(批量新建工作表)学习笔记
************************************************************************************************************** 点击进入 -我要自学网-国内领先的专业视频教程学习网站 *******************************************************************************************…...
泰勒公式详解与应用
前言 本文隶属于专栏《机器学习数学通关指南》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见《机器学习数学通关指南》 正文 📝 一句话总结 泰…...
计算机视觉(opencv-python)入门之图像的读取,显示,与保存
在计算机视觉领域,Python的cv2库是一个不可或缺的工具,它提供了丰富的图像处理功能。作为OpenCV的Python接口,cv2使得图像处理的实现变得简单而高效。 示例图片 目录 opencv获取方式 图像基本知识 颜色空间 RGB HSV 图像格式 BMP格式 …...
现代前端框架渲染机制深度解析:虚拟DOM到编译时优化
引言:前端框架的性能进化论 TikTok Web将React 18迁移至Vue 3后,点击响应延迟降低42%,内存占用减少35%。Shopify采用Svelte重构核心交互模块,首帧渲染速度提升580%。Discord在Next.js 14中启用React Server Components后…...
Selenium自动化测试:如何搭建自动化测试环境,搭建环境过程应该注意的问题
最近也有很多人私下问我,selenium学习难吗,基础入门的学习内容很多是3以前的版本资料,对于有基础的人来说,3到4的差别虽然有,但是不足以影响自己,但是对于没有学过的人来说,通过资料再到自己写的…...
Linux服务升级:Almalinux 升级 DeepSeek-R1
目录 一、实验 1.环境 2.Almalinux 部署 Ollama 3.Almalinux 升级 DeepSeek-R1 4.Almalinux 部署 docker 5. docker 部署 DeepSeek-R1 6.Almalinux 部署 Cpolar (内网穿透) 7.使用cpolar内网穿透 二、问题 1.构建容器失败 一、实验 1.环境 (1)…...
《HelloGitHub》第 107 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 Python、…...
【实战 ES】实战 Elasticsearch:快速上手与深度实践-1.3.2Kibana可视化初探
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 10分钟快速部署Kibana可视化平台1. Kibana与Elasticsearch关系解析1.1 架构关系示意图1.2 核心功能矩阵 2. 系统环境预检2.1 硬件资源配置2.2 软件依赖清单 3. Docker快速部…...
网络七层模型—OSI参考模型详解
网络七层模型:OSI参考模型详解 引言 在网络通信的世界中,OSI(Open Systems Interconnection)参考模型是一个基础且核心的概念。它由国际标准化组织(ISO)于1984年提出,旨在为不同厂商的设备和应…...
老旧android项目编译指南(持续更)
原因 编译了很多项目,找到了一些可观的解决办法 1. android studio里面的jdk版本切换 jdk版本切换在这里,一般安卓开发需要用到4个版本的jdk,jdk8, jdk11, jdk17, jdk21新版的android stuio是默认使用高版本的jdk,所以切换版本是很有必要的 2. 命令…...
测试金蝶云的OpenAPI
如何使用Postman测试K3Cloud的OpenAPI 1. 引言 在本篇博客中,我将带你逐步了解如何使用Postman测试和使用K3Cloud的OpenAPI。内容包括下载所需的SDK文件、配置文件、API调用及测试等步骤。让我们开始吧! 2. 下载所需的SDK文件 2.1 获取SDK 首先&…...
从零基础到通过考试
1. 学习资源与实践平台 使用Proving Grounds进行靶机练习 OSCP的备考过程中,实战练习占据了非常重要的地位。Proving Grounds(PG)是一个由Offensive Security提供的练习平台,拥有152个靶机,涵盖了从基础到进阶的多种…...
AI人工智能机器学习之神经网络
1、概要 本篇学习AI人工智能机器学习之神经网络,以MLPClassifier和MLPRegressor为例,从代码层面讲述最常用的神经网络模型MLP。 2、神经网络 - 简介 在 Scikit-learn 中,神经网络是通过 sklearn.neural_network 模块提供的。最常用的神经网…...
【原创】Open WebUI 本地部署
使用官网的默认部署,遇到不少的问题。比如白屏问题,其实需要修改几个参数即可。 其实在部署的时候有不少参数 WEBUI_AUTH False ENABLE_OPENAI_API 0 PATH /usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin LANG C.UTF-8…...
基于SpringBoot的绿城郑州爱心公益网站设计与实现现(源码+SQL脚本+LW+部署讲解等)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
【天地图-点线面最全功能】天地图实现功能:回显、绘制、编辑、删除任意点线面
实现效果图 实现功能 1. 回显点线面数据 2. 绘制点线面,保存可获取点线面数据 3. 编辑点线面,保存可获取最新编辑后的点线面数据 4. 删除任意点线面(解决删除按钮不能随元素位置变化(地图拖拽/放大缩小时)而变化问题-&…...
003 SpringBoot集成Kafka操作
4.SpringBoot集成Kafka 文章目录 4.SpringBoot集成Kafka1.入门示例2.yml完整配置3.关键配置注释说明1. 生产者优化参数2. 消费者可靠性配置3. 监听器高级特性4. 安全认证配置 4.配置验证方法5.不同场景配置模板场景1:高吞吐日志收集场景2:金融级事务消息…...
【工具篇】【深度解析:2025 AI视频工具的全面指南】
随着人工智能技术的飞速发展,AI视频工具已经成为内容创作者、营销人员、教育工作者以及普通用户的得力助手。这些工具不仅简化了视频制作流程,还提供了前所未有的创意可能性。本文将详细介绍各类AI视频工具,帮助你找到最适合自己需求的工具。 1. 文生视频工具 智谱清影:这…...
前端面试真题 2025最新版
文章目录 写在前文CSS怪异盒模型JS闭包闭包的形成闭包注意点 CSS选择器及优先级优先级 说说flex布局及相关属性Flex 容器相关属性:Flex 项目相关属性 响应式布局如何实现是否用过tailwindcss,有哪些好处好处缺点 说说对象的 prototype属性及原型说说 pro…...
数据结构课程设计(java实现)---九宫格游戏,也称幻方
【问题描述】 九宫格,一款数字游戏,起源于河图洛书,与洛书是中国古代流传下来的两幅神秘图案,历来被认为是河洛文化的滥觞,中华文明的源头,被誉为"宇宙魔方"。九宫格游戏对人们的思维锻炼有着极大…...
一文掌握Charles抓包工具的详细使用
Charles是一款强大的HTTP代理/HTTP监视器/反向代理工具,广泛用于开发和测试网络应用程序。在爬虫开发中,Charles可以帮助开发者拦截、查看和修改HTTP/HTTPS请求和响应,从而更好地理解网络通信过程,分析和调试爬虫程序。本文将详细介绍Charles的安装、配置、基本使用方法以及…...
Ollama下载安装+本地部署DeepSeek+UI可视化+搭建个人知识库——详解!(Windows版本)
目录 1️⃣下载和安装Ollama 1. 🥇官网下载安装包 2. 🥈安装Ollama 3.🥉配置Ollama环境变量 4、🎉验证Ollama 2️⃣本地部署DeepSeek 1. 选择模型并下载 2. 验证和使用DeepSeek 3️⃣使用可视化工具 1. Chrome插件-Page …...
Rk3568驱动开发_点亮led灯(手动挡)_5
1.MMU简介 完成虚拟空间到物理空间的映射 内存保护设立存储器的访问权限,设置虚拟存储空间的缓冲特性 stm32点灯可以直接操作寄存器,但是linux点灯不能直接访问寄存器,linux会使能mmu linux中操作的都是虚拟地址,要想访问物理地…...
【服务治理中间件】consul介绍和基本原理
目录 一、CAP定理 二、服务注册中心产品比较 三、Consul概述 3.1 什么是Consul 3.2 Consul架构 3.3 Consul的使用场景 3.4 Consul健康检查 四、部署consul集群 4.1 服务器部署规划 4.2 下载解压 4.3 启动consul 五、服务注册到consul 一、CAP定理 CAP定理ÿ…...
Docker下ARM64架构的源码编译Qt5.15.1,并移植到开发板上
Docker下ARM64架构的源码编译Qt5.15.1,并移植到开发板上 1、环境介绍 QT版本:5.15.1 待移植环境: jetson nano 系列开发板 aarch64架构(arm64) 编译环境: 虚拟机Ubuntu18.04(x86_64) 2、…...
对话Stack Overflow,OceanBase CTO 杨传辉谈分布式数据库的“前世今生”
近日, OceanBase CTO 杨传辉受邀出席全球知名开发者论坛 Stack Overflow 的最新一期播客节目,与 Stack Overflow 高级内容创作官 Ryan Donovan 展开对话。双方围绕分布式数据库的可靠性、一致性保障、HTAP 架构以及 AI 时代分布式数据库的发展趋势等热点…...
ds回答-开源llm应用开发平台
以下是几个著名的开源 LLM 应用开发平台,涵盖不同场景和技术特点: 1. Dify 特点:低代码 / 无代码开发、支持 RAG 检索、Agent 智能体、模型管理、LLMOps 全流程优化。核心功能:可视化工作流编排、数百种模型兼容(如 GP…...
C++ Qt常见面试题(4):Qt事件过滤器
在 Qt 中,事件过滤器(Event Filter)提供了一种机制,可以拦截并处理对象的事件(如鼠标事件、键盘事件等),在事件到达目标对象之前对其进行预处理。事件过滤器通常用于以下场景: 捕获和处理特定的事件(如鼠标点击、按键等);对事件进行筛选或修改;实现全局的事件监听功…...
CF 109A.Lucky Sum of Digits(Java实现)
题目分析 给定一个值,判断这个值能否被4和7组成,如果能就输出最小的组合。不能就输出-1。 思路分析 由于是最小组合,即判断4能最多有多少个。但是如果一个值能完全被7整除,那就不需要4了,只用7组合的话位数会更短。(例…...
计算机毕业设计Python+DeepSeek-R1大模型游戏推荐系统 Steam游戏推荐系统 游戏可视化 游戏数据分析(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
生鲜行业智能化供应链解决方案技术白皮书
行业痛点与技术挑战 损耗控制难题 行业平均损耗率达18%-25%,需构建动态定价模型与智能分拣系统 冷链管理复杂度 全程温控数据采集点超过23个/车次,异常响应延迟需压缩至90秒内 供需预测偏差 传统模式预测准确率不足65%,亟需AI驱动需求预测体…...
《每天搞懂一道Hard》之数独终结者(LeetCode 37)
📌《每天搞懂一道Hard》之数独终结者(LeetCode 37) 🔗原题链接:https://leetcode.com/problems/sudoku-solver/ 今天我们来解剖一个经典回溯算法问题——数独求解器!这道题在算法面试中出现频率高达35%&a…...
论文笔记-NeurIPS2017-DropoutNet
论文笔记-NeurIPS2017-DropoutNet: Addressing Cold Start in Recommender Systems DropoutNet:解决推荐系统中的冷启动问题摘要1.引言2.前言3.方法3.1模型架构3.2冷启动训练3.3推荐 4.实验4.1实验设置4.2在CiteULike上的实验结果4.2.1 Dropout率的影响4.2.2 实验结…...
【后端开发面试题】每日 3 题(四)
✍个人博客:Pandaconda-CSDN博客 📣专栏地址:https://blog.csdn.net/newin2020/category_12903849.html 📚专栏简介:在这个专栏中,我将会分享后端开发面试中常见的面试题给大家~ ❤️如果有收获的话&#x…...
使用AoT让.NetFramework4.7.2程序调用.Net8编写的库
1、创建.Net8的库,双击解决方案中的项目,修改如下,启用AoT: <Project Sdk"Microsoft.NET.Sdk"><PropertyGroup><OutputType>Library</OutputType><PublishAot>true</PublishAot>&…...
c++中的静态多态和动态多态简介
在 C 中,多态性(Polymorphism) 分为 静态多态(Static Polymorphism) 和 动态多态(Dynamic Polymorphism),二者通过不同的机制实现代码的灵活性。以下是详细对比和核心要点࿱…...
FastExcel与Reactor响应式编程深度集成技术解析
一、技术融合背景与核心价值 在2025年企业级应用开发中,大规模异步Excel处理与响应式系统架构的结合已成为技术刚需。FastExcel与Reactor的整合方案,通过以下技术协同实现突破性性能: 内存效率革命:FastExcel的流式字节操作与Re…...
【MySQL篇】数据类型
目录 前言: 1,数据类型的分类 编辑 2 ,数值类型 2.1 tinyint类型 2.2 bit类型 2.3 小数类型 2.3.1 float类型 2.3.2 decimal类型 3,字符串类型 3.1 char 3.2 varchar 3.3 char与varchar的比较 3.4日期和时间类型 3.5 …...
haclon固定相机位标定
什么是标定? 工业应用中相机拍到一个mark点的坐标为C1(Cx,Cy),C1点对应的龙门架/机械手等执行端对应的坐标是多少? 标定就是解决这个问题,如相机拍到一个点坐标C1(Cx,Cy),…...
Token相关设计
文章目录 1. 双Token 机制概述1.1 访问令牌(Access Token)1.2 刷新令牌(Refresh Token) 2. 双Token 认证流程3. Spring Boot 具体实现3.1 生成 Token(使用 JWT)3.2 解析 Token3.3 登录接口(返回…...
vue3:四嵌套路由的实现
一、前言 1、嵌套路由的含义 嵌套路由的核心思想是:在某个路由的组件内部,可以定义子路由,这些子路由会渲染在父路由组件的特定位置(通常是 <router-view> 标签所在的位置)。通过嵌套路由,你可以实…...
在 Element Plus 的 <el-select> 组件中,如果需要将 <el-option> 的默认值设置为 null。 用于枚举传值
文章目录 引言轻松实现 `<el-option>` 的默认值为 `null`I 实现方式监听清空事件 【推荐】使用 v-model 绑定 null添加一个值为 null 的选项处理 null 值的显示引言 背景:接口签名规则要求空串参与,空对象不参与签名计算 // 空字符串“” 参与签名组串,null不参与签…...
List(3)
前言 上一节我们讲解了list主要接口的模拟实现,本节也是list的最后一节,我们会对list的模拟实现进行收尾,并且讲解list中的迭代器失效的情况,那么废话不多说,我们正式进入今天的学习 list的迭代器失效 之前在讲解vec…...
算法-二叉树篇23-二叉搜索树中的插入操作
二叉搜索树中的插入操作 力扣题目链接 题目描述 给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同…...
React底层常见的设计模式
在React中,常见的设计模式为开发者提供了结构化和可重用的解决方案,有助于提高代码的可维护性和可扩展性。以下是对React中几种常见设计模式的详细解析,并附上示例代码和注释: 1. 容器组件与展示组件模式(Container/P…...
【PHP脚本语言详解】为什么直接访问PHP文件会显示空白?从错误示例到正确执行!
前言 作为一名开发者,你是否曾经遇到过这样的问题:写了一个PHP脚本,放到服务器根目录后,直接通过file:///路径访问却显示空白页面?而换成http://localhost却能正常显示?这篇文章将带你深入理解PHP脚本语言…...
小程序性能优化-预加载
在微信小程序中,数据预加载是提升用户体验的重要优化手段。以下是处理数据预加载的完整方案: 一、预加载的适用场景 跳转页面前的数据准备 如从列表页进入详情页前,提前加载详情数据首屏加载后的空闲时间 在首页加载完成后,预加载…...