Java 同城服务同城租房系统源码 完整项目实现

区别于单纯的功能介绍,聚焦"完整项目实现"与"源码可复用",重点拆解系统架构、核心业务逻辑、多端适配(小程序+APP+Web端)方案,提供可直接复用的后端核心源码、数据库脚本,兼顾实战性与可扩展性;既适合Java后端开发者作为实战项目学习,积累多端开发、业务落地经验,也适合创业团队快速复用源码,搭建属于自己的同城租房服务平台,全程贴合同城租房实际业务场景,覆盖租客、房东、中介、平台管理员全角色,可直接部署上线。

一、系统整体概述(贴合同城租房核心场景)

本系统是一套基于Java开发的同城服务同城租房完整项目,复刻主流同城租房平台核心业务逻辑,支持租客通过小程序/APP/Web端找房、预约看房、提交租房申请,房东通过APP/Web端发布房源、管理房源、审核租房申请,中介通过后台对接租客与房东,平台管理员统一管控全流程,实现"房源发布→房源审核→租客找房→预约看房→租房申请→合同签订→租金支付→退租结算"的业务闭环,同时适配多端同步,一套后端服务支撑小程序、Android APP、iOS APP、Web端四种前端形态,降低开发与维护成本,贴合同城租房"就近找房、实时沟通、高效撮合"的核心需求。

1.1 核心技术栈(稳定高效+多端适配)

系统技术栈选型兼顾稳定性、易扩展性与多端适配性,采用业界成熟方案,后端统一对接多端前端,无需单独开发,核心技术栈如下,源码中已完整集成,可直接复用:

  • 后端核心:SpringBoot 3.x(快速开发、简化配置,内置容器,支持多端接口统一暴露,降低开发门槛);

  • 持久层:MyBatis-Plus(简化CRUD操作,支持复杂SQL查询,适配房源、租客、房东、订单等核心数据);

  • 数据存储:MySQL 8.0 + Redis 6.0(MySQL存储核心业务数据,Redis缓存热门房源、用户会话、验证码、房源浏览记录);

  • 地图服务:高德地图API(实现房源地理位置定位、附近房源推荐、距离计算、看房路线规划,支撑同城找房核心场景);

  • 多端适配:UniApp(小程序+APP统一开发,一套代码编译多端)、Vue3(Web端开发,适配房东、中介、管理员操作);

  • 鉴权安全:JWT + Redis令牌(多端统一鉴权,支持无感刷新,保障接口访问安全,防止越权操作);

  • 文件存储:MinIO(存储房源图片、用户头像、租房合同等文件,支持图片预览、下载,适配多端文件上传需求);

  • 部署环境:JDK 1.8+、Maven 3.6+、Docker(支持单机部署、容器化部署,适配线上生产环境,新手可快速上手)。

1.2 系统整体架构(分层清晰,便于二次开发)

系统采用前后端分离架构,后端统一提供RESTful接口,对接小程序、APP、Web端前端,架构清晰、解耦性强,便于二次开发与功能扩展,完整架构分层如下,源码中已按此架构组织,结构规范:

  1. 前端层:小程序(租客端,用于找房、预约看房)、Android APP(租客+房东端)、iOS APP(租客+房东端)、Web端(房东+中介+管理员端);

  2. 接口层(Controller):统一暴露多端通用接口,处理前端请求,返回统一响应结果,适配不同前端的请求格式,做参数校验与权限拦截;

  3. 业务逻辑层(Service):处理核心业务逻辑,如房源发布、房源审核、找房筛选、预约看房、租房申请、租金结算等;

  4. 数据访问层(Mapper):负责数据的增删改查,基于MyBatis-Plus实现,简化数据操作,添加合理索引优化查询效率;

  5. 公共层(Common):封装统一响应、异常处理、工具类(地图工具、加密工具、订单号生成工具、短信验证码工具、文件上传工具);

  6. 配置层(Config):统一配置数据库、Redis、地图API、JWT、MinIO、多端接口适配、跨域等核心组件。

二、核心功能模块(完整覆盖同城租房全流程)

系统围绕同城租房核心场景,拆解为8大核心模块,覆盖租客、房东、中介、平台管理员全角色,支持多端同步使用,每个模块功能完整、可直接复用,源码中已实现全部功能,无需额外开发,具体如下:

2.1 租客端模块(小程序+APP+Web端通用)

核心功能:用户注册登录(手机号验证码登录,多端同步)、房源浏览(按区域、价格、户型、面积筛选)、附近房源推荐(基于定位,按距离排序)、房源详情查看(图片、户型、配套设施、房东信息)、预约看房(选择看房时间、备注需求)、租房申请(提交申请、上传身份信息)、合同查看与签订(电子合同)、租金支付(月付/季付/年付)、租房记录查询、报修申请、退租申请、消息通知(看房提醒、申请审核结果)。

2.2 房东端模块(APP+Web端通用)

核心功能:房东注册认证(身份证、房产证上传,平台审核)、房源发布(填写房源信息、上传房源图片、设置租金、户型、配套设施)、房源管理(编辑、下架、上架、修改租金)、租房申请审核(通过/拒绝)、预约看房管理(确认/取消看房时间)、租客管理(查看租客信息、租房记录)、租金管理(查看租金到账记录、催缴租金)、合同管理(生成电子合同、查看合同)、报修处理(查看报修申请、安排维修)、退租结算。

2.3 中介端模块(Web端专属)

核心功能:中介注册认证(身份证、中介资质上传,平台审核)、房源采集与发布(代房东发布房源)、租客对接(匹配合适房源、推荐房源)、看房陪同、租房撮合、佣金管理(查看佣金记录、提现)、客户管理(租客、房东信息管理)。

2.4 房源模块(核心模块,多端同步)

核心功能:房源发布、房源审核(平台管理员审核,防止违规房源)、房源分类(住宅、公寓、商铺等)、房源筛选(多条件组合筛选)、房源搜索(关键词搜索)、热门房源推荐、房源浏览记录、房源收藏、房源举报(举报违规房源)。

2.5 预约看房模块

核心功能:租客预约看房、房东确认/取消看房、中介陪同看房、看房记录管理、看房评价,实现租客与房东的高效对接,提升看房效率。

2.6 租房订单模块

核心功能:订单创建(租房申请通过后生成订单)、订单状态流转、订单查询(按状态、时间筛选)、异常订单处理(取消、申诉)、订单详情展示(房源信息、租客信息、房东信息、租金信息)。

订单状态流转(贴合同城租房逻辑):待审核 → 已审核 → 待签约 → 已签约 → 租赁中 → 待结算 → 已结算(支持待审核/待签约状态取消)。

2.7 支付与结算模块

核心功能:租金支付(对接微信支付、支付宝支付)、押金缴纳与退还、佣金结算(中介佣金、平台服务费)、账单管理(查看支付记录、欠费记录)、退款处理,实现资金流转的安全、高效。

2.8 后台管理模块

核心功能:用户管理(租客、房东、中介)、用户认证审核、房源审核与管理、订单管理(订单查询、异常处理、订单统计)、支付管理(支付记录、退款处理)、佣金管理、数据统计(房源量、订单量、营收、活跃用户)、权限管理(角色分配、接口权限控制)、系统配置(租金标准、佣金比例、违规规则)。

三、核心数据库设计(完整可导入,适配多端)

数据库设计是系统的基础,结合同城租房服务场景,设计10张核心表,覆盖租客、房东、房源、订单、支付等全量数据,字段规范、关联清晰,添加合理索引优化查询效率,适配多端同步的数据需求,以下提供核心表结构与建表语句(可直接复制到MySQL执行,完整数据库脚本包含在源码包中,导入即可使用)。

java 复制代码
-- 1. 系统用户表(租客/房东/中介通用) CREATE TABLE `t_user` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID(主键)', `phone` varchar(20) NOT NULL COMMENT '手机号(唯一,登录账号)', `nickname` varchar(50) DEFAULT NULL COMMENT '用户昵称', `avatar` varchar(255) DEFAULT NULL COMMENT '用户头像', `id_card` varchar(20) DEFAULT NULL COMMENT '身份证号(实名认证)', `user_type` tinyint NOT NULL COMMENT '用户类型:1-租客,2-房东,3-中介', `status` tinyint NOT NULL DEFAULT 1 COMMENT '状态:1-正常,0-禁用,2-待审核', `balance` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '用户余额', `create_time` datetime NOT NULL COMMENT '注册时间', `update_time` datetime NOT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `idx_phone` (`phone`) COMMENT '手机号唯一索引' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统用户表'; -- 2. 房东信息表(关联用户表) CREATE TABLE `t_landlord` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '房东ID(主键)', `user_id` bigint NOT NULL COMMENT '关联用户ID', `name` varchar(50) NOT NULL COMMENT '房东姓名', `id_card_img` varchar(255) DEFAULT NULL COMMENT '身份证照片地址', `house_cert_img` varchar(255) DEFAULT NULL COMMENT '房产证照片地址', `cert_status` tinyint NOT NULL DEFAULT 0 COMMENT '认证状态:0-待审核,1-已认证,2-认证失败', `rent_count` int NOT NULL DEFAULT 0 COMMENT '出租房源数量', `balance` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '可提现余额', PRIMARY KEY (`id`), UNIQUE KEY `idx_user_id` (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='房东信息表'; -- 3. 房源信息表(核心表,多端同步) CREATE TABLE `t_house` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '房源ID(主键)', `landlord_id` bigint NOT NULL COMMENT '房东ID', `house_type` varchar(30) NOT NULL COMMENT '房源类型:住宅、公寓、商铺', `house_layout` varchar(20) NOT NULL COMMENT '户型:1室1厅、2室1厅等', `area` decimal(8,2) NOT NULL COMMENT '建筑面积(㎡)', `rent` decimal(10,2) NOT NULL COMMENT '月租金(元)', `deposit` decimal(10,2) NOT NULL COMMENT '押金(元)', `address` varchar(255) NOT NULL COMMENT '房源地址', `lng` decimal(12,8) DEFAULT NULL COMMENT '房源经度', `lat` decimal(12,8) DEFAULT NULL COMMENT '房源纬度', `facility` varchar(255) DEFAULT NULL COMMENT '配套设施(空调、冰箱、洗衣机等)', `house_desc` text DEFAULT NULL COMMENT '房源描述', `house_imgs` varchar(1000) DEFAULT NULL COMMENT '房源图片地址(多个用逗号分隔)', `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态:0-待审核,1-已上架,2-已下架,3-已出租', `create_time` datetime NOT NULL COMMENT '创建时间', `update_time` datetime NOT NULL COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_landlord_id` (`landlord_id`), KEY `idx_status` (`status`), KEY `idx_lng_lat` (`lng`,`lat`) COMMENT '经纬度索引,用于附近房源查询' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='房源信息表'; -- 4. 租房订单表(核心表,多端同步) CREATE TABLE `t_rent_order` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '订单ID(主键)', `order_no` varchar(32) NOT NULL COMMENT '订单编号(唯一)', `user_id` bigint NOT NULL COMMENT '租客ID', `house_id` bigint NOT NULL COMMENT '房源ID', `landlord_id` bigint NOT NULL COMMENT '房东ID', `rent` decimal(10,2) NOT NULL COMMENT '月租金', `deposit` decimal(10,2) NOT NULL COMMENT '押金', `rent_type` tinyint NOT NULL COMMENT '支付方式:1-月付,2-季付,3-年付', `rent_term` int NOT NULL COMMENT '租赁期限(月)', `start_time` datetime NOT NULL COMMENT '租赁开始时间', `end_time` datetime NOT NULL COMMENT '租赁结束时间', `order_status` tinyint NOT NULL COMMENT '订单状态:0-待审核,1-已审核,2-待签约,3-已签约,4-租赁中,5-待结算,6-已结算,7-已取消', `pay_status` tinyint NOT NULL DEFAULT 0 COMMENT '支付状态:0-未支付,1-已支付,2-已退款', `create_time` datetime NOT NULL COMMENT '创建时间', `update_time` datetime NOT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `idx_order_no` (`order_no`), KEY `idx_user_id` (`user_id`), KEY `idx_house_id` (`house_id`), KEY `idx_order_status` (`order_status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租房订单表';

四、核心源码片段(可直接复用,适配多端)

本节展示系统核心业务(房源发布、租房订单创建、多端接口适配)的精简源码片段,覆盖枚举、Service、Controller层,代码规范、逻辑清晰,适配小程序+APP+Web端多端请求,无需冗余修改即可融入系统,避免过多代码堆砌,重点突出实用性与可复用性,完整源码包含全部功能实现。

4.1 核心枚举(订单状态、房源类型)

java 复制代码
/** * 租房订单状态枚举(贴合同城租房逻辑) */ public enum OrderStatusEnum { WAIT_AUDIT(0, "待审核"), AUDITED(1, "已审核"), WAIT_SIGN(2, "待签约"), SIGNED(3, "已签约"), RENTING(4, "租赁中"), WAIT_SETTLE(5, "待结算"), SETTLED(6, "已结算"), CANCELLED(7, "已取消"); private final Integer code; private final String desc; OrderStatusEnum(Integer code, String desc) { this.code = code; this.desc = desc; } // 根据状态码获取枚举,用于订单状态判断(多端通用) public static OrderStatusEnum getByCode(Integer code) { for (OrderStatusEnum status : values()) { if (status.code.equals(code)) { return status; } } throw new IllegalArgumentException("无效订单状态:" + code); } public Integer getCode() { return code; } public String getDesc() { return desc; } } /** * 房源类型枚举(适配同城租房场景) */ public enum HouseTypeEnum { RESIDENTIAL(1, "住宅"), APARTMENT(2, "公寓"), SHOP(3, "商铺"); private final Integer code; private final String desc; HouseTypeEnum(Integer code, String desc) { this.code = code; this.desc = desc; } public Integer getCode() { return code; } public String getDesc() { return desc; } }

4.2 房源发布核心逻辑(多端通用,Service层)

统一处理APP、Web端房东的房源发布请求,自动解析房源地址经纬度、校验房源信息,核心代码如下(完整源码包含更多异常处理与细节):

java 复制代码
/** * 房源服务实现类(核心业务逻辑,多端通用) */ @Service @Slf4j public class HouseServiceImpl implements HouseService { @Autowired private HouseMapper houseMapper; @Autowired private LandlordMapper landlordMapper; @Autowired private AmapUtil amapUtil; // 地图工具类(封装高德API) @Autowired private MinioUtil minioUtil; // 文件上传工具类(封装MinIO) /** * 房东发布房源(APP+Web端通用) */ @Override public Long publishHouse(HouseDTO dto) { try { // 1. 校验房东身份与认证状态(确保房东已认证) Landlord landlord = landlordMapper.selectByUserId(dto.getUserId()); if (landlord == null || landlord.getCertStatus() != 1) { throw new BusinessException("房东未认证或认证未通过,无法发布房源"); } // 2. 地址解析:将房源地址转为经纬度(前端未传时调用,多端适配) if (dto.getLng() == null || dto.getLat() == null) { Map<String, Object> houseGeo = amapUtil.getGeoByAddress(dto.getAddress()); dto.setLng(new BigDecimal(houseGeo.get("lng").toString())); dto.setLat(new BigDecimal(houseGeo.get("lat").toString())); } // 3. 处理房源图片(上传至MinIO,返回图片地址) String houseImgs = minioUtil.uploadFiles(dto.getHouseImgFiles(), "house/imgs"); // 4. 构建房源实体,初始化状态为待审核 House house = new House(); house.setLandlordId(landlord.getId()); house.setHouseType(HouseTypeEnum.getByCode(dto.getHouseType()).getDesc()); house.setHouseLayout(dto.getHouseLayout()); house.setArea(dto.getArea()); house.setRent(dto.getRent()); house.setDeposit(dto.getDeposit()); house.setAddress(dto.getAddress()); house.setLng(dto.getLng()); house.setLat(dto.getLat()); house.setFacility(dto.getFacility()); house.setHouseDesc(dto.getHouseDesc()); house.setHouseImgs(houseImgs); house.setStatus(0); // 待审核 house.setCreateTime(new Date()); house.setUpdateTime(new Date()); // 5. 保存房源 houseMapper.insert(house); // 6. 更新房东出租房源数量 landlord.setRentCount(landlord.getRentCount() + 1); landlordMapper.updateById(landlord); log.info("房东{}发布房源成功,房源ID:{}", dto.getUserId(), house.getId()); return house.getId(); } catch (Exception e) { log.error("发布房源失败", e); throw new BusinessException("房源发布失败,请重试"); } } /** * 附近房源查询(多端通用,租客找房) */ @Override public PageInfo<HouseVO> getNearbyHouse(NearbyHouseDTO dto) { // 1. 分页参数设置 PageHelper.startPage(dto.getPageNum(), dto.getPageSize()); // 2. 根据经纬度、筛选条件查询附近房源(按距离排序) List<HouseVO> houseList = houseMapper.selectNearbyHouse(dto.getLng(), dto.getLat(), dto); // 3. 封装分页结果 return new PageInfo<>(houseList); } }

4.3 多端通用接口(Controller层,适配小程序+APP+Web端)

统一提供接口,适配不同前端的请求格式,支持房东发布房源、租客找房、创建租房订单,核心代码如下(完整源码包含全部接口实现):

java 复制代码
/** * 房源控制器(多端通用接口,适配小程序+APP+Web端) */ @RestController @RequestMapping("/api/rent/house") public class HouseController { @Autowired private HouseService houseService; /** * 房东发布房源(APP+Web端通用接口) */ @PostMapping("/publish") public Result<Long> publishHouse(@RequestPart("dto") @Valid HouseDTO dto, @RequestPart(value = "houseImgFiles", required = false) MultipartFile[] houseImgFiles, @RequestHeader("userId") Long userId) { dto.setUserId(userId); dto.setHouseImgFiles(houseImgFiles); Long houseId = houseService.publishHouse(dto); return Result.success(houseId, "房源发布成功,等待平台审核"); } /** * 附近房源查询(多端通用,租客找房) */ @GetMapping("/nearby") public Result<PageInfo<HouseVO>> getNearbyHouse(NearbyHouseDTO dto) { PageInfo<HouseVO> pageInfo = houseService.getNearbyHouse(dto); return Result.success(pageInfo); } /** * 房源详情查询(多端通用) */ @GetMapping("/detail/{houseId}") public Result<HouseDetailVO> getHouseDetail(@PathVariable Long houseId) { HouseDetailVO houseDetail = houseService.getHouseDetail(houseId); return Result.success(houseDetail); } } /** * 租房订单控制器(多端通用接口,适配小程序+APP+Web端) */ @RestController @RequestMapping("/api/rent/order") public class RentOrderController { @Autowired private RentOrderService orderService; /** * 租客创建租房订单(多端通用接口) */ @PostMapping("/create") public Result<String> createOrder(@RequestBody @Valid RentOrderDTO dto, @RequestHeader("userId") Long userId) { dto.setUserId(userId); String orderNo = orderService.createOrder(dto); return Result.success(orderNo, "租房申请提交成功,等待房东审核"); } }

五、完整项目部署与源码使用指南

本系统提供完整的小程序+APP+Web端前端对接代码、后端源码、数据库脚本,下载后即可快速部署、测试,无需复杂配置,适合新手操作,核心部署与使用步骤如下,源码包中包含详细部署手册,可直接参考。

5.1 部署前置准备

  1. 环境准备:安装JDK 1.8+、Maven 3.6+、MySQL 8.0+、Redis 6.0+、Docker(可选)、HBuilderX(前端小程序+APP编译)、Node.js(Web端编译)、MinIO(文件存储);

  2. 源码准备:下载完整源码包(包含后端代码、前端小程序+APP代码、Web端代码、完整数据库脚本、部署手册);

  3. 数据库准备:创建数据库(如rent_system),执行源码包中的完整数据库脚本(含初始化数据,直接导入即可使用);

  4. 配置修改:修改后端application.yml文件,配置数据库连接、Redis连接、高德地图API密钥、MinIO配置、跨域域名;修改各前端代码中的接口地址,对接后端服务。

5.2 多端部署步骤

  1. 后端部署:在IDEA中执行Maven打包命令(mvn clean package -DskipTests),生成Jar包,上传至服务器执行后台运行命令,或使用Docker一键部署;

  2. MinIO部署:启动MinIO服务,创建存储桶,配置访问权限,用于存储房源图片等文件;

  3. 小程序部署:使用HBuilderX打开前端小程序代码,配置小程序AppID,编译后上传至微信公众平台,审核通过后即可使用;

  4. APP部署:使用HBuilderX打开前端代码,选择Android/iOS打包,生成安装包,即可安装使用;

  5. Web端部署:使用Node.js编译Vue3项目,生成静态文件,部署至Nginx服务器,即可访问;

  6. 接口测试:通过Postman测试核心接口,确保各端与后端对接正常,核心功能可正常使用;

  7. 初始化配置:登录后台管理系统,配置系统参数、佣金比例、审核规则等,即可正式上线运营。

5.3 源码二次开发建议

源码架构清晰、代码规范,支持灵活二次开发,可根据实际业务需求扩展以下功能,适配不同运营场景,无需大幅修改核心代码:

  • 营销模块:新增租房优惠券、推荐有礼、首单减免活动,提升用户活跃度与订单量;

  • 支付扩展:对接更多支付方式,实现租金自动代扣、分期支付,优化支付体验;

  • 消息扩展:集成语音通知、短信通知、推送通知,订单状态变更、房源审核、看房提醒等及时通知用户;

  • 功能扩展:新增房源智能推荐算法、电子合同在线签署(对接第三方电子签章)、租房评价体系、房源视频预览等,丰富平台服务;

  • 运营扩展:新增数据可视化仪表盘,实时监控平台运营数据,支持多城市部署,适配不同区域租房需求。

六、总结与源码获取

本文基于Java技术栈,完整分享了同城服务同城租房系统完整项目实现的开发思路、核心模块、数据库设计、核心源码及部署指南,重点拆解了房源发布、租房订单创建等核心业务的源码实现,适配小程序+APP+Web端多端部署需求,提供的源码完整可运行、易二次开发

相关推荐
wellc3 分钟前
SpringBoot集成Flowable
java·spring boot·后端
Hui Baby1 小时前
springAi+MCP三种
java
hsjcjh1 小时前
【MySQL】C# 连接MySQL
java
敖正炀1 小时前
LinkedBlockingDeque详解
java
wangyadong3171 小时前
datagrip 链接mysql 报错
java
untE EADO1 小时前
Tomcat的server.xml配置详解
xml·java·tomcat
ictI CABL1 小时前
Tomcat 乱码问题彻底解决
java·tomcat
敖正炀1 小时前
DelayQueue 详解
java
敖正炀2 小时前
PriorityBlockingQueue 详解
java
shark22222222 小时前
Spring 的三种注入方式?
java·数据库·spring