方圆的秒杀系统优化方案实战,(三)秒杀商品基础功能

本文详细介绍了秒杀商品的基础功能实现,包括发布、上线、下线及查询操作,并提供了GitHub代码库和秒杀商品表结构的DDL语句作为参考。
摘要由CSDN通过智能技术生成

1. 说在前头

大家好,我是方圆。这篇博客儿整理的是秒杀商品相关的基础功能,如下

  1. 发布秒杀商品
  2. 秒杀商品上线
  3. 秒杀商品下线
  4. 根据ID获取秒杀商品
  5. 条件查询秒杀商品

在这里还是标记一下GitHub代码库,以base-function分支为准,因为这里也是最基本的CRUD开发,不想自己再写的话,就直接从这个分支开发吧

另在此处附秒杀商品表结构DDL语句,所有相关的SQL语句在项目environmentmysql文件夹下

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));
    }
}

收!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

方圆想当图灵

嘿嘿,小赏就行,不赏俺也不争你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值