一、发货提醒核心功能设计
1. 触发条件
- 订单状态变更(待发货→已发货)
- 物流单号生成
- 预设发货时间前N小时(如24小时)
- 特殊商品/紧急订单单独提醒
2. 通知渠道
- 站内消息(系统后台/小程序)
- 短信(需对接短信API如阿里云/腾讯云)
- 邮件(适合批量通知)
- 企业微信/钉钉机器人(适合内部协同)
3. 数据模型
```python
示例:发货提醒表结构
class DeliveryReminder(models.Model):
order_id = models.ForeignKey(Order, on_delete=models.CASCADE)
contact_phone = models.CharField(max_length=20) 收货人电话
notify_type = models.SmallIntegerField() 1:短信 2:邮件 3:站内信
status = models.SmallIntegerField(default=0) 0:未发送 1:已发送 2:失败
created_at = models.DateTimeField(auto_now_add=True)
```
二、万象源码部署流程(以PHP+MySQL为例)
1. 环境准备
```bash
基础环境(示例为CentOS)
yum install -y nginx mysql-server php php-fpm php-mysql
systemctl start nginx mysql php-fpm
```
2. 源码部署
```bash
1. 下载源码(示例)
git clone https://github.com/your-repo/fruit-delivery-system.git
cd fruit-delivery-system
2. 配置数据库
vim config/database.php
修改为实际数据库连接信息
3. 导入初始数据
mysql -u root -p < database/init.sql
4. 配置定时任务(发货提醒检查)
crontab -e
添加以下内容(每5分钟检查一次)
*/5 * * * * curl http://your-domain.com/api/check-delivery-reminders
```
3. 关键API接口
```php
// 示例:发货状态变更触发提醒
public function updateOrderStatus(Request $request) {
$order = Order::find($request->order_id);
if ($order->status == shipped) {
// 创建提醒记录
DeliveryReminder::create([
order_id => $order->id,
contact_phone => $order->receiver_phone,
notify_type => 1 // 短信
]);
// 调用短信接口(需替换为实际API)
$this->sendSms($order->receiver_phone, "您的订单{$order->id}已发货,物流单号:{$order->tracking_number}");
}
}
```
三、通知优化策略
1. 防重复通知
- 添加Redis锁控制:
```php
$redisKey = "delivery_reminder_lock_{$orderId}";
if (Redis::setnx($redisKey, 1)) {
Redis::expire($redisKey, 3600); // 1小时内不重复提醒
// 发送通知逻辑...
}
```
2. 失败重试机制
- 队列处理(推荐使用RabbitMQ/Redis队列):
```python
伪代码示例
def send_notification(reminder_id):
try:
send_sms(reminder.phone, reminder.message)
reminder.status = sent
except Exception as e:
if reminder.retry_count < 3:
reminder.retry_count += 1
加入延迟队列(如5分钟后重试)
delay_queue.add(reminder_id, delay=300)
```
3. 多语言支持
- 配置国际化文件:
```json
// resources/lang/zh-cn/notifications.php
return [
shipped_subject => 您的水果订单已发货,
shipped_body => 订单 :order_id 已于:ship_date发货,物流公司::carrier
];
```
四、部署后验证要点
1. 测试用例
- 正常发货流程通知
- 手机号格式错误处理
- 短信接口限流测试(如每秒10条)
- 跨时区订单提醒(如UTC+8时间转换)
2. 监控指标
- 通知成功率(成功/失败比例)
- 平均发送延迟(从状态变更到通知到达)
- 渠道偏好统计(短信/邮件使用比例)
五、扩展建议
1. 智能提醒:根据收货地址距离仓库距离,动态调整提醒时间(如同城订单提前2小时提醒)
2. 异常预警:当连续5个订单通知失败时触发告警
3. 客户偏好:允许客户在个人中心设置通知方式(如仅接收微信通知)
建议部署后进行灰度发布,先对10%的订单开启提醒功能,观察3天后无异常再全量推送。对于水果批发行业,可特别优化凌晨发货场景的通知策略(如避免在22:00-8:00发送短信)。