一、促销活动时间设置的核心需求
1. 多维度时间控制
- 支持按日期范围(如“2024.06.01-2024.06.07”)、星期周期(如“每周五10:00-22:00”)、具体时段(如“每日14:00-16:00”)设置活动。
- 允许提前预览活动生效时间,避免时间冲突。
2. 精准用户触达
- 结合用户行为数据(如历史购买时间、地域),动态调整活动时间(如“用户所在地区晚高峰时段推送优惠”)。
- 支持定时推送(短信、APP消息、微信模板消息)提醒用户活动即将开始。
3. 库存与时间联动
- 设置限时库存(如“前100名下单享5折”),时间到期后自动恢复原价。
- 实时监控库存与时间关系,避免超卖。
二、万象源码部署下的技术实现
1. 数据库设计优化
- 活动时间表结构:
```sql
CREATE TABLE promotion_time (
id INT PRIMARY KEY AUTO_INCREMENT,
promotion_id INT NOT NULL, -- 关联促销活动ID
start_time DATETIME NOT NULL, -- 活动开始时间
end_time DATETIME NOT NULL, -- 活动结束时间
week_days VARCHAR(20), -- 按星期生效(如"1,3,5"表示周一、三、五)
time_slots VARCHAR(50), -- 每日具体时段(如"10:00-12:00,14:00-16:00")
is_active TINYINT DEFAULT 1, -- 活动状态
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
- 索引优化:对`start_time`、`end_time`、`is_active`字段建立复合索引,加速时间范围查询。
2. 后端逻辑实现
- 时间校验中间件:
```python
示例:检查当前时间是否在活动有效期内
def is_promotion_active(promotion_id):
now = datetime.now()
promotion = Promotion.query.filter_by(id=promotion_id).first()
检查日期范围
if now < promotion.start_time or now > promotion.end_time:
return False
检查星期周期(如仅周五生效)
if promotion.week_days and str(now.weekday()) not in promotion.week_days.split(,):
return False
检查每日时段(如10:00-12:00)
if promotion.time_slots:
active_slots = [slot.split(-) for slot in promotion.time_slots.split(,)]
current_hour = now.strftime("%H:%M")
is_in_slot = any(
start <= current_hour <= end
for start, end in [(s.strip(), e.strip()) for s, e in active_slots]
)
if not is_in_slot:
return False
return True
```
- 定时任务(Cron Job):
- 使用`Celery`或`APScheduler`定时扫描即将结束的活动,触发通知(如“活动还剩1小时”)。
- 自动下架过期活动,更新商品价格。
3. 前端交互优化
- 可视化时间选择器:
- 集成`flatpickr`或`Ant Design DatePicker`,支持多日期、时段选择。
- 实时显示活动生效倒计时(如“距开始还有2小时30分”)。
- 用户端时间展示:
- 根据用户时区动态转换活动时间(如“北京时间20:00”显示为“您所在时区19:00”)。
三、精准控制的关键功能
1. AB测试时间分组
- 将用户按行为标签分组(如“高价值用户”“沉睡用户”),在不同时间段推送差异化活动,测试转化率。
2. 动态时间调整
- 根据实时数据(如库存告急、流量高峰)自动延长或缩短活动时间(需配置阈值规则)。
3. 冲突检测
- 新建活动时,系统自动检查与现有活动的时间重叠,避免用户困惑。
四、部署与监控
1. 容器化部署(Docker)
- 将促销服务独立为微服务,通过`docker-compose`管理定时任务和API服务。
2. 日志与告警
- 记录活动生效/失效事件,设置异常告警(如活动未按时启动)。
3. 灰度发布
- 先在部分用户或地区测试新活动时间规则,确认无误后全量推送。
五、示例场景
- 场景:周末鲜果特惠(每周六、日10:00-12:00)
- 配置:
- `week_days: "5,6"`(周六、周日)
- `time_slots: "10:00-12:00"`
- 效果:用户仅在指定时段看到特惠价,其他时间隐藏或显示原价。
通过以上方案,水果商城可实现促销活动的灵活、精准控制,同时降低运营复杂度。如需进一步优化,可结合用户画像和机器学习预测最佳活动时间。