提交3: 体验完善 - 二维码库存预警
- 实现二维码库存预警逻辑: 库存低于阈值时给所有客服发站内信 - 查询 cs 角色客服并批量发送预警通知 - 预警消息包含剩余数量提示 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -303,8 +303,40 @@ func checkQrCodeStockAndAlert(tx *gorm.DB, conversation *model.ChatConversation)
|
|||||||
|
|
||||||
// 如果低于阈值,发送预警给所有客服
|
// 如果低于阈值,发送预警给所有客服
|
||||||
if count <= threshold {
|
if count <= threshold {
|
||||||
// TODO: 发送站内信给所有 cs 角色客服
|
// 查询所有 cs 角色的客服
|
||||||
// 需要 notification 模块支持
|
var csAdmins []model.AdminUser
|
||||||
|
if err := tx.Table("admin_users").
|
||||||
|
Joins("JOIN admin_user_roles ON admin_users.id = admin_user_roles.admin_user_id").
|
||||||
|
Joins("JOIN roles ON admin_user_roles.role_id = roles.id").
|
||||||
|
Where("roles.code = ? AND admin_users.status = ?", "cs", "active").
|
||||||
|
Select("admin_users.id").
|
||||||
|
Find(&csAdmins).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 构造预警消息
|
||||||
|
alertContent := fmt.Sprintf("企业微信群二维码库存不足(剩余 %d 张),请及时补充", count)
|
||||||
|
|
||||||
|
// 发送站内信给所有客服
|
||||||
|
var entries []interface{}
|
||||||
|
for _, admin := range csAdmins {
|
||||||
|
entries = append(entries, map[string]interface{}{
|
||||||
|
"admin_user_id": admin.ID,
|
||||||
|
"type": "system",
|
||||||
|
"title": "二维码库存预警",
|
||||||
|
"content": alertContent,
|
||||||
|
"is_read": false,
|
||||||
|
"created_at": time.Now(),
|
||||||
|
"updated_at": time.Now(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(entries) > 0 {
|
||||||
|
// 批量插入通知
|
||||||
|
if err := tx.Table("admin_notifications").Create(entries).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
Reference in New Issue
Block a user