1. 说在前头
大家好,我是方圆
。这篇博客儿整理的是秒杀商品相关的基础功能,如下
- 发布秒杀商品
- 秒杀商品上线
- 秒杀商品下线
- 根据ID获取秒杀商品
- 条件查询秒杀商品
在这里还是标记一下GitHub代码库,以base-function分支
为准,因为这里也是最基本的CRUD开发,不想自己再写的话,就直接从这个分支开发吧
另在此处附秒杀商品表结构DDL语句,所有相关的SQL语句在项目environment
的mysql
文件夹下
CREATE TABLE IF NOT EXISTS flash_sale.`flash_item` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '秒杀品ID',
`activity_id` bigint(20) NOT NULL COMMENT '所属活动id',
`item_title` varchar(50) NOT NULL COMMENT '秒杀品名称标题',
`item_sub_title` varchar(50) DEFAULT NULL COMMENT '秒杀品副标题',
`item_desc` text COMMENT '秒杀品介绍富文本文案',
`initial_stock` int(11) NOT NULL DEFAULT '0' COMMENT '秒杀品初始库存',
`available_stock` int(11) NOT NULL DEFAULT '0' COMMENT '秒杀品可用库存',
`original_price` bigint(20) NOT NULL COMMENT '秒杀品原价',
`flash_price` bigint(20) NOT NULL COMMENT '秒杀价',
`start_time` datetime NOT NULL COMMENT '秒杀开始时间',
`end_time` datetime NOT NULL COMMENT '秒杀结束时间',
`status` tinyint(2) NOT NULL COMMENT '秒杀品状态 10-已发布 20-已上线 30-已下线',
`modified_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '秒杀品';
2. FlashItemController
- 还是将Controller中的调用入口记录在这里,供大家参考,具体的源码,还是以项目中为准
@RestController
public class FlashItemController {
@Resource
private FlashItemAppService flashItemAppService;
@ApiOperation(value = "发布秒杀商品")
@PostMapping("/activities/{activityId}/flash-items/publish")
@ApiImplicitParam(name = "activityId", value = "秒杀活动ID", dataTypeClass = Long.class)
public <T> SingleResponse<T> publishFlashItem(@PathVariable Long activityId,
@RequestBody FlashItemPublishRequest request) {
FlashItemPublishCommand command = FlashItemConvertor.toCommand(request);
AppResult<T> appResult = flashItemAppService.publishFlashItem(activityId, command);
return ResponseConvertor.with(appResult);
}
@ApiOperation(value = "上线秒杀商品")
@PutMapping(value = "/flash-items/{itemId}/online")
@ApiImplicitParam(name = "itemId", value = "秒杀商品ID", dataTypeClass = Long.class)
public <T> SingleResponse<T> onlineFlashItem(@PathVariable Long itemId) {
AppResult<T> appResult = flashItemAppService.onlineFlashItem(itemId);
return ResponseConvertor.with(appResult);
}
@ApiOperation(value = "下线秒杀商品")
@PutMapping(value = "/flash-items/{itemId}/offline")
@ApiImplicitParam(name = "itemId", value = "秒杀商品ID", dataTypeClass = Long.class)
public <T> SingleResponse<T> offlineFlashItem(@PathVariable Long itemId) {
AppResult<T> appResult = flashItemAppService.offlineFlashItem(itemId);
return ResponseConvertor.with(appResult);
}
@GetMapping("/flash-items/{itemId}")
@ApiOperation(value = "通过ID获取秒杀商品信息")
@ApiImplicitParam(name = "itemId", value = "秒杀商品ID", dataTypeClass = Long.class)
public SingleResponse<FlashItemResponse> getFlashItem(@PathVariable Long itemId) {
return ResponseConvertor.with(flashItemAppService.getById(itemId));
}
@PostMapping("/flash-items")
@ApiOperation(value = "条件查询秒杀商品")
public SingleResponse<List<FlashItemResponse>> getFlashItems(@RequestBody FlashItemQueryRequest request) {
FlashItemQuery query = FlashItemConvertor.toQuery(request);
return ResponseConvertor.with(flashItemAppService.getFlashItems(query));
}
}
收!