From 54f550b8be17cfb9c66189932cdd1e3859c129c5 Mon Sep 17 00:00:00 2001 From: yml Date: Wed, 17 Jun 2026 13:58:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A43:=20=E4=BD=93=E9=AA=8C?= =?UTF-8?q?=E5=AE=8C=E5=96=84=20-=20=E4=BA=8C=E7=BB=B4=E7=A0=81=E5=BA=93?= =?UTF-8?q?=E5=AD=98=E9=A2=84=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 实现二维码库存预警逻辑: 库存低于阈值时给所有客服发站内信 - 查询 cs 角色客服并批量发送预警通知 - 预警消息包含剩余数量提示 Co-Authored-By: Claude Opus 4.8 --- .../internal/modules/chat/listing_group.go | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/backend/internal/modules/chat/listing_group.go b/backend/internal/modules/chat/listing_group.go index 2040f97..7e40ead 100644 --- a/backend/internal/modules/chat/listing_group.go +++ b/backend/internal/modules/chat/listing_group.go @@ -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