秒杀第十四节:秒杀模型管理--活动模型创建(与商品结合)

2020-08-19  本文已影响0人  小石读史

首先创建秒杀模型

@Data
public class PromoModel {
    private Integer id;

    //秒杀活动状态,1表示还未开始,2表示进行中,3表示已结束
    private Integer status;

    //秒杀活动名称
    private String promoName;

    //秒杀开始时间
    private DateTime startDate;

    private DateTime endDate;

    //秒杀活动使用商品
    private Integer itemId;

    //秒杀获得的商品价格
    private BigDecimal promoItemPrice;
}

增加pom引用

<!--joda-->
    <dependency>
      <groupId>joda-time</groupId>
      <artifactId>joda-time</artifactId>
      <version>2.9.1</version>
    </dependency>

表设计并初始化数据

DROP TABLE IF EXISTS `promo`;

CREATE TABLE `promo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `promo_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `start_date` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
  `end_date` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
  `item_id` int(11) NOT NULL DEFAULT '0',
  `promo_item_price` decimal(10,2) NOT NULL DEFAULT '0.00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

/*Data for the table `promo` */

insert  into `promo`(`id`,`promo_name`,`start_date`,`end_date`,`item_id`,`promo_item_price`) values 
(2,'小米水壶限时抢购','2019-04-11 00:00:00','2021-04-17 00:00:00',40,200.00);

修改pom.xml将允许自动覆盖文件改为false,然后修改mybatis-generator.xml表,最后使用mybatis自动生成器生成基础服务。使用方式在秒杀第三节有说明

将活动模型与商品模型结合。
新增PromoService方法增加根据商品id查询秒杀活动信息接口

public interface PromoService {

    PromoModel getPromoById(Integer itemId);
}

新增PromoServiceImpl implements PromoService

@Service
public class PromoServiceImpl implements PromoService {

    @Autowired
    PromoDOMapper promoDOMapper;

    @Override
    public PromoModel getPromoById(Integer itemId) {
        //获取对应商品的秒杀信息
        PromoDO promoDO = promoDOMapper.selectByItemId(itemId);
        PromoModel promoModel = convertFromDataObject(promoDO);
        if(promoModel == null) {
            return null;
        }

        //判断秒杀活动的当前状态
        DateTime now = new DateTime();
        if(promoModel.getStartDate().isAfterNow()){
            promoModel.setStatus(1);
        } else if(promoModel.getEndDate().isBeforeNow()) {
            promoModel.setStatus(3);
        } else {
            promoModel.setStatus(2);
        }


        return promoModel;
    }

    private PromoModel convertFromDataObject(PromoDO promoDO){
        if(promoDO == null) {
            return null;
        }
        PromoModel promoModel = new PromoModel();
        BeanUtils.copyProperties(promoDO,promoModel);
        promoModel.setStartDate(new DateTime(promoDO.getStartDate()));
        promoModel.setEndDate(new DateTime(promoDO.getEndDate()));

        return promoModel;
    }
}

在PromoDOMapper.java和PromoDOMapper.xml上新增根据商品id查询秒杀详情方法

PromoDO selectByItemId(Integer itemId);
<select id="selectByItemId" parameterType="java.lang.Integer" resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List" />
    from promo
    where item_id = #{itemId,jdbcType=INTEGER}
  </select>

在ItemModel类中新增PromoModel类


image.png

在ItemServiceImpl的查询商品详情方法getItemById里面增加秒杀信息返回


image.png

在ItemVo中增加秒杀信息返回


image.png
修改ItemController中的查询商品详情方法返回秒杀信息
image.png

测试查询商品详情参数:http://localhost:8080/item/get?id=40
返回值(包含秒杀信息):

{
    "status": "success",
    "data": {
        "id": 40,
        "title": "小米水壶",
        "price": 299.00,
        "stock": 99,
        "description": "小水杯",
        "sales": null,
        "imgUrl": "https://i8.mifile.cn/a1/pms_1504498936.11861982.jpg",
        "promoStatus": 2,
        "promoPrice": 200.00,
        "promoId": 2,
        "startDate": "2019-04-11 00:00:00"
    }
}
上一篇下一篇

猜你喜欢

热点阅读