该微服务主要有4个职责
主要有2张表:
sales表:
column name | type | brief | description |
---|---|---|---|
id | int | 主键 | |
state | varchar(20) | 订单状态 | new->published-> ongoing -> finished |
begin_at | timestamp | 开售活动开始时间 | |
end_at | timestamp | 开售活动结束时间 | |
realestate_id | int | 楼盘id | 一次开售活动只能针对同属一个楼盘的部分房源 |
deleted_at | timestamp | 开售活动删除时间 | 一次开售活动只有在未发布前可以进行删除或编辑,软删除方案 |
house_orders表:
column name | type | 简介 | 更多说明 |
---|---|---|---|
id | int | 主键 | |
sale_id | int | 外键:开售活动id | |
customer_id | int | 客户id | 记录了谁抢到了该房源,开售前为空 |
state | varchar(20) | 订单状态 | new 是待抢,confirmed是已抢 |
ordered_at | timestamp | 抢购时间 | state变为confirmed的时间 |
@PostMapping("sales") Sale createSale(@RequestBody Sale sale); @GetMapping("sales/{saleId}") Sale findSale(@PathVariable int saleId); //获取开售活动详情。 @PutMapping("sales/{saleId}") Sale Sale updateSale(@PathVariable int saleId, @RequestBody Sale sale); //开售活动发布是通过该接口,一旦发布,不能再修改了,也不能删除。 @DeleteMapping("sales/{saleId}") void removeSale(@PathVariable int saleId); @GetMapping("sales") List<Sale> indexSales(); //对客户列出客户有抢购资格的还未开始的开售活动,已开始时间排序;对管理员,列出所有的开售活动。 @PostMapping("sales/{saleId}/house_orders") createHouseOrders(@PathVariable int saleId, @RequestBody List<Integer> houseIds); //为开售活动创建房源,创建时需要检查这些房源是否已被其他开售活动锁定或售出。 //需要先对这些房源加锁后再添加到当前开售活动中,要注意事务的应用。
@PutMapping("house_orders/{houseOrderId}") HouseOrder placeHouseOrder(@RequestHeader int customerId, @PathVariable int houseOrderId) //修改house_orders的customer_id列,抢购前需要检查该房源是否已被占用, // select for update加锁,注意事务应用。 //