微服务 realestate

该微服务用于楼盘及房源管理

###快速开始

1、参考ServiceComb快速入门安装开发环境:

2、运行 Service Center

  • 安装Docker,详情可参考Docker安装教程
  • 命令行或终端输入$ docker pull servicecomb/service-center拉取最新版servicecomb/service-center。
  • 命令行或终端输入$ docker run -d -p 30100:30100 servicecomb/service-center:latest在30100端口运行service-center。

3、参考下文的数据表设计创建数据库表。

4、配置realestate的数据库、服务中心地址以及启动端口

  • 修改src/main/resources/microservice.yaml文件:
#...
servicecomb:
  service:
    registry:
      address: http://127.0.0.1:30100 #service-center地址
  rest:
    address: 0.0.0.0:7771   #微服务启动端口
    #...
spring:
  #数据库url、用户名、密码配置
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/realestate?characterEncoding=utf8&useSSL=false
    username: houserush
    password: password
    #...

5、启动微服务

  • 该微服务基于spring-boot开发,所以启动微服务只需要在微服务根目录下打开命令行或终端输入$ mvn spring-boot:run,或通过IDE启动spring-boot程序。

主要功能

  • 楼盘的增删改查

  • 建筑楼的增删改查

  • 房源的增删改查

  • 锁定已售房源

设计原理

一个楼盘可能含多栋建筑楼,一栋建筑楼可能含多个房源

数据表设计

  • realestates
字段类型描述
idint主键id
namevarchar(255)楼盘名称
descriptionvarchar(2048)描述
deleted_attimestamp删除时间
created_attimestamp创建时间
update_attimestamp更新时间
  • buildings
字段类型描述
idint主键id
realestate_idint所在楼盘id
namevarchar(255)建筑楼名称
sequence_in_realestatetinyint
deleted_attimestamp删除时间
created_attimestamp创建时间
update_attimestamp更新时间
  • houses
字段类型描述
idint主键id
building_idint所在建筑楼id
namevarchar(255)房源名称
layerint房源所在楼层
statevarchar(255)房源状态
sequence_in_layertinyint房间号
pricedecimal价格
deleted_attimestamp删除时间
created_attimestamp创建时间
update_attimestamp更新时间

接口设计

package org.apache.servicecomb.samples.practise.houserush.realestate.api;

public interface RealestateApi {
    /**
    * 新增楼盘
    * @param realestate 楼盘信息
    * @return Realestate 添加成功后的楼盘信息
    */
    Realestate createRealestate(Realestate realestate);
    
    /**
    * 查询楼盘
    * @param id 楼盘id
    * @return Realestate 楼盘信息
    */
    Realestate findRealestate(int id);
    
    /**
    * 修改楼盘信息
    * @param id 楼盘id
    * @param realestate 楼盘信息
    * @return Realestate 修改成功后的楼盘信息
    */
    Realestate updateRealestate(int id, Realestate realestate);
    
    /**
    * 删除楼盘
    * @param id 楼盘id
    */
    void removeRealestate(int id);
    
    /**
    * 查询所有楼盘
    * @return List<Realestate> 所有楼盘列表
    */
    List<Realestate> indexRealestates();
    
    /**
    * 新增建筑楼
    * @param realestateId 楼盘id
    * @param building 建筑楼信息
    * @return Building 添加成功后的建筑楼信息
    */
    Building createBuilding(int realestateId, Building building);
    
    /**
    * 查询建筑楼
    * @param id 建筑楼id
    * @return Building 建筑楼信息
    */
    Building findBuilding(int id);
    
    /**
    * 更改建筑楼信息
    * @param id 建筑楼id
    * @param building 建筑楼信息
    * @return Building 更改成功后的建筑楼信息
    */
    Building updateBuilding(int id, Building building);
    
    /**
    * 删除建筑楼
    * @param id 建筑楼id
    */
    void removeBuilding(int id);
    
    /**
    * 查询某一楼盘下的所有建筑楼
    * @param realestateId 楼盘id
    * @return List<Building> 建筑楼列表
    */
    List<Building> indexBuildings(int realestateId);
    
    /**
    * 新增房源信息
    * @param buidingId 建筑楼id
    * @param house 房源信息
    * @return House 添加成功后的房源信息
    */
    House createHouse(int buidingId, House house);
    
    /**
    * 查询房源信息
    * @param id 房源id
    * @return House 房源信息
    */
    House findHouse(int id);
    
    /**
    * 更改房源信息
    * @param id 房源id
    * @param house 房源信息
    * @return House 更改成功后的房源信息
    */
    House updateHouse(int id, House house);
    
    /**
    * 删除房源信息
    * @param id 房源id
    */
    void removeHouse(int id);
    
    /**
    * 查询某一建筑楼下的所有房源
    * @param buildingId 建筑楼id
    * @return List<House> 所有房源列表
    */
    List<House> indexHouses(int buildingId);
    
    /**
    * 锁定已售房源
    * @param ids 已售房源id列表
    * @return List<House> 锁定的房源列表
    */
    List<House> lockHousesForSale(List<Integer> ids);
}

Rest API调用示例

点击houserush-realestate Rest API文档查看Rest API调用示例。

  • 注意:示例中是通过Gateway网关服务调用的Realestate服务,所以示例调用接口较org.apache.servicecomb.samples.practise.houserush.realestate.api.RealestateApiRestImpl中声明的接口多含一个前缀/realestate.
  • 鉴权操作、获取用户Token操作请移步houserush-gateway服务文档

源码文件解析

src/main:
    /java: java源码文件所在目录
        org.apache.servicecomb.samples.practise.houserush.realestate:
            .aggregate: 项目实体类所在包,其中Building、House、Realestate类为JPA实体
            .api: Rest接口定义及实现包
                .RealestateApi: 接口定义
                .RealestateApiRestImpl: 接口实现
            .dao: 数据访问对象所在包,其中数据库操作都是Spring-Data-JPA实现
            .service: 各种增删改查具体逻辑实现
            .RealestateConfig: 微服务配置类
            .RealestateApplication: 微服务启动类
    /resources: 项目资源文件所在目录
        /microservice.yaml: 微服务配置文件,其中关键内容在上文"快速开始"中已经提及。
pom.xml: maven配置文件