Skip to content

Commit 5718271

Browse files
committed
消息任务防止单个接收人接收到多封同样的内容
1 parent 6f309bb commit 5718271

1 file changed

Lines changed: 17 additions & 10 deletions

File tree

internal/db/models/message_task_dao.go

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -122,24 +122,31 @@ func (this *MessageTaskDAO) CreateMessageTasks(tx *dbs.Tx, target MessageTaskTar
122122
if err != nil {
123123
return err
124124
}
125+
allRecipientIds := []int64{}
125126
for _, receiver := range receivers {
126127
if receiver.RecipientId > 0 {
127-
_, err := this.CreateMessageTask(tx, int64(receiver.RecipientId), 0, "", subject, body, false)
128-
if err != nil {
129-
return err
130-
}
128+
allRecipientIds = append(allRecipientIds, int64(receiver.RecipientId))
131129
} else if receiver.RecipientGroupId > 0 {
132130
recipientIds, err := SharedMessageRecipientDAO.FindAllEnabledAndOnRecipientIdsWithGroup(tx, int64(receiver.RecipientGroupId))
133131
if err != nil {
134132
return err
135133
}
136-
for _, recipientId := range recipientIds {
137-
_, err := this.CreateMessageTask(tx, recipientId, 0, "", subject, body, false)
138-
if err != nil {
139-
return err
140-
}
141-
}
134+
allRecipientIds = append(allRecipientIds, recipientIds...)
142135
}
143136
}
137+
138+
sentMap := map[int64]bool{} // recipientId => bool 用来检查是否已经发送,防止重复发送给某个接收人
139+
for _, recipientId := range allRecipientIds {
140+
_, ok := sentMap[recipientId]
141+
if ok {
142+
continue
143+
}
144+
sentMap[recipientId] = true
145+
_, err := this.CreateMessageTask(tx, recipientId, 0, "", subject, body, false)
146+
if err != nil {
147+
return err
148+
}
149+
}
150+
144151
return nil
145152
}

0 commit comments

Comments
 (0)