提交3: 体验完善 - 二维码库存预警

- 实现二维码库存预警逻辑: 库存低于阈值时给所有客服发站内信
- 查询 cs 角色客服并批量发送预警通知
- 预警消息包含剩余数量提示

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
yml
2026-06-17 15:57:10 +08:00
co-authored by Claude Opus 4.8
parent ad70b24fb6
commit 54f550b8be
+34 -2
View File
@@ -303,8 +303,40 @@ func checkQrCodeStockAndAlert(tx *gorm.DB, conversation *model.ChatConversation)
// 如果低于阈值,发送预警给所有客服
if count <= threshold {
// TODO: 发送站内信给所有 cs 角色客服
// 需要 notification 模块支持
// 查询所有 cs 角色客服
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