FINERACT-2227: Fix triggered SMS messages error (#4511)

This commit is contained in:
Peter Mwangi
2025-03-31 20:43:30 -06:00
committed by GitHub
parent 43bf94cd8f
commit b7845166c4
@@ -22,7 +22,6 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.net.URI; import java.net.URI;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@@ -90,36 +89,44 @@ public class SmsMessageScheduledJobServiceImpl implements SmsMessageScheduledJob
if (!smsDataMap.isEmpty()) { if (!smsDataMap.isEmpty()) {
List<SmsMessage> toSaveMessages = new ArrayList<>(); List<SmsMessage> toSaveMessages = new ArrayList<>();
List<SmsMessage> toSendNotificationMessages = new ArrayList<>(); List<SmsMessage> toSendNotificationMessages = new ArrayList<>();
for (Map.Entry<SmsCampaign, Collection<SmsMessage>> entry : smsDataMap.entrySet()) { for (Map.Entry<SmsCampaign, Collection<SmsMessage>> entry : smsDataMap.entrySet()) {
Iterator<SmsMessage> smsMessageIterator = entry.getValue().iterator(); for (SmsMessage smsMessage : entry.getValue()) {
Collection<SmsMessageApiQueueResourceData> apiQueueResourceDatas = new ArrayList<>();
while (smsMessageIterator.hasNext()) {
SmsMessage smsMessage = smsMessageIterator.next();
if (smsMessage.isNotification()) { if (smsMessage.isNotification()) {
smsMessage.setStatusType(SmsMessageStatusType.WAITING_FOR_DELIVERY_REPORT.getValue()); smsMessage.setStatusType(SmsMessageStatusType.WAITING_FOR_DELIVERY_REPORT.getValue());
toSendNotificationMessages.add(smsMessage); toSendNotificationMessages.add(smsMessage);
} else { } else {
SmsMessageApiQueueResourceData apiQueueResourceData = SmsMessageApiQueueResourceData.instance(
smsMessage.getId(), null, null, null, smsMessage.getMobileNo(), smsMessage.getMessage(),
entry.getKey().getProviderId());
apiQueueResourceDatas.add(apiQueueResourceData);
smsMessage.setStatusType(SmsMessageStatusType.WAITING_FOR_DELIVERY_REPORT.getValue()); smsMessage.setStatusType(SmsMessageStatusType.WAITING_FOR_DELIVERY_REPORT.getValue());
toSaveMessages.add(smsMessage); toSaveMessages.add(smsMessage);
} }
} }
if (toSaveMessages.size() > 0) { }
this.smsMessageRepository.saveAll(toSaveMessages); if (!toSaveMessages.isEmpty()) {
this.smsMessageRepository.flush(); this.smsMessageRepository.saveAll(toSaveMessages);
this.taskExecutor.execute(new SmsTask(apiQueueResourceDatas, ThreadLocalContextUtil.getContext())); this.smsMessageRepository.flush();
}
if (!toSendNotificationMessages.isEmpty()) {
this.notificationSenderService.sendNotification(toSendNotificationMessages);
}
for (Map.Entry<SmsCampaign, Collection<SmsMessage>> entry : smsDataMap.entrySet()) {
Collection<SmsMessageApiQueueResourceData> apiQueueResourceDatas = new ArrayList<>();
for (SmsMessage smsMessage : entry.getValue()) {
if (!smsMessage.isNotification()) {
SmsMessageApiQueueResourceData apiQueueResourceData = SmsMessageApiQueueResourceData.instance(
smsMessage.getId(), null, null, null, smsMessage.getMobileNo(), smsMessage.getMessage(),
entry.getKey().getProviderId());
apiQueueResourceDatas.add(apiQueueResourceData);
}
}
if (!apiQueueResourceDatas.isEmpty()) {
this.taskExecutor.execute(new SmsTask(apiQueueResourceDatas, ThreadLocalContextUtil.getContext()));
}
}
}
if (!toSendNotificationMessages.isEmpty()) {
this.notificationSenderService.sendNotification(toSendNotificationMessages);
} }
} }
} catch (Exception e) { } catch (Exception e) {
log.error("Error occured.", e); log.error("Error occurred.", e);
} }
} }