From 130f0a5ac70240e6a37994f674a83be0d82dc235 Mon Sep 17 00:00:00 2001 From: zhangsz Date: Wed, 9 Jul 2025 15:24:54 +0800 Subject: [PATCH] feat: support duplicate event name filter --- features/ue/cb_message/service.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/features/ue/cb_message/service.go b/features/ue/cb_message/service.go index 83657af5..f8ddfbc5 100644 --- a/features/ue/cb_message/service.go +++ b/features/ue/cb_message/service.go @@ -116,6 +116,32 @@ func (s *CBMessageService) SelectCBMessageByPage(pageNum int, pageSize int) ([]C // @example // CBMessageService.InsertCBMessage(msg) func (s *CBMessageService) InsertCBMessage(msg CBMessage) error { + // 解析messageJson获取eventName + var messageData map[string]interface{} + if err := json.Unmarshal(msg.MessageJson, &messageData); err != nil { + return fmt.Errorf("failed to parse message_json: %w", err) + } + + // 提取eventName + eventName, ok := messageData["eventName"].(string) + if !ok || eventName == "" { + return fmt.Errorf("eventName is required in message_json") + } + + // 检查是否已存在相同的eventName + var existingCount int64 + if err := s.db.Table("cb_message"). + Where("ne_type = ? AND ne_id = ? AND JSON_EXTRACT(message_json, '$.eventName') = ?", + msg.NeType, msg.NeId, eventName). + Count(&existingCount).Error; err != nil { + return fmt.Errorf("failed to check existing CB message: %w", err) + } + + if existingCount > 0 { + return fmt.Errorf("CB message with eventName '%s' already exists for neType '%s' and neId '%s'", + eventName, msg.NeType, msg.NeId) + } + // 这里可以使用ORM或其他方式将ticket插入到数据库中 if err := s.db.Table("cb_message").Create(&msg).Error; err != nil { return fmt.Errorf("failed to insert CB message: %w", err)