秒杀第十四节:秒杀模型管理--活动模型创建(与商品结合)
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"
}
}