@@ -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