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端多端部署需求,提供的源码完整可运行、易二次开发

相关推荐
与数据交流的路上2 小时前
oceanbase-长事务排查
java·数据库·oceanbase
ascarl20102 小时前
canal和ES同步失败维护步骤
java·数据库·elasticsearch
echome8882 小时前
Go 语言并发编程:sync.WaitGroup 实战指南
开发语言·golang·xcode
一匹电信狗2 小时前
【LeetCode面试题17.04】消失的数字
c语言·开发语言·数据结构·c++·算法·leetcode·stl
j_xxx404_2 小时前
从 O(N) 到 O(log N):LCR 173 点名问题的五种解法与最优推导
开发语言·c++·算法
五月茶2 小时前
力扣Hot100(Java版本)
java·算法·leetcode
仰泳的熊猫2 小时前
题目2265:蓝桥杯2015年第六届真题-移动距离
开发语言·数据结构·c++·算法·蓝桥杯
开开心心就好2 小时前
Word批量转PDF工具,仅转换不合并很实用
java·前端·人工智能·edge·pdf·语音识别·模块测试
共享家95272 小时前
Java入门
java·开发语言