目录
前言:
这段时间创业,开发类似于电商平台的系统,遇到定时上下架的问题,但是我又不想通过延迟消息队列去处理这个事情。所以通过思考研究后,想到了该方案。所以我就研究出另一种定时上下架的方案。
方案解决:
一、定义商品状态:
上架(出售)、定时上架(伪上架)、下架(仓库)
二、必须满足条件:
1.已上架的商品不支持定时上架设置
2.某个商品或批量商品定时上架设置后,商品处于伪上架功能。且商品不能立即上架,除非先下架
3.被下架的商品不受定时任务管理,但是可以手动再上架或定时上架
三、业务逻辑处理方式:
每次查询某个商品或商品列表(商品列表查询肯定是分页的,所以一次性的量肯定不会特别大)
搜索引擎的就不用说了,一样的
如果只是单独的定时上架,不含下架的话,可以先有逻辑,再通过定时任务慢慢修改状态,或者就直接使用这种逻辑就可以。无需管数据库种的状态如何
(1)、未到上架时间逻辑处理
通过sql脚本或者代码判断当前时间和上架时间,
如果当前时间小于上架时间就直接将商品状态返回为伪上架状态
(2)、已到上架时间,未到下架时间逻辑处理
通过sql脚本或者代码判断当前时间和上架时间,
如果当前时间大于等于且小于下架时间,直接将商品状态返回为上架状态
(3)、已到下架时间逻辑处理
通过sql脚本或者代码判断当前时间和下架时间,
如果当前大于等于下架时间,直接将商品状态返回为下架状态
四、代码例子:
假设:商品状态,1-上架,0-下架,2-定时上架下架
if (vo.getShelfStatus()==2){
//当前时间大于等于自动上架时间,则为上架状态,否则是定时上架下架状态
vo.setShelfStatus(new Date().compareTo(vo.getAutoShelfTime())>-1?1:vo.getShelfStatus());
//当前时间大于等于自动下架时间,则为下架状态,否则是上架状态
vo.setShelfStatus(new Date().compareTo(vo.getAutoSoldTime())>-1?0:vo.getShelfStatus());
}
基于以上三种逻辑判断,都是围绕伪上架状态展开的,所以只要是伪上架状态,就可以判断时间就行。如果是人为手动操作上下架,就直接满足上面说的三个条件即可。
无论是业务逻辑处理,还是数据展示,这种方案都是没有任何问题,无非就是对这种定时判断多了一点逻辑代码。