package ru.ulstu.ping.service; import com.google.common.collect.ImmutableMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import ru.ulstu.core.model.UserActivity; import ru.ulstu.ping.model.Ping; import ru.ulstu.ping.model.PingInfo; import ru.ulstu.ping.repository.PingRepository; import ru.ulstu.user.model.User; import ru.ulstu.user.service.MailService; import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import java.util.Set; @Service public class PingScheduler { private final Logger log = LoggerFactory.getLogger(PingScheduler.class); private final PingRepository pingRepository; private final MailService mailService; private final static String PING_MAIL_SUBJECT = "Ping статистика"; public PingScheduler(PingRepository pingRepository, MailService mailService) { this.pingRepository = pingRepository; this.mailService = mailService; } @Scheduled(cron = "0 0 * * 1 ?") public void sendPingsInfo() { log.debug("Scheduler.sendPingsInfo started"); List pingInfos = new ArrayList<>(); for (Ping ping : pingRepository.findByDate(java.sql.Date.valueOf(LocalDate.now().minusWeeks(1)))) { UserActivity pingActivity = ping.getActivity(); Set users = pingActivity.getActivityUsers(); for (User user : users) { PingInfo userPing = pingInfos.stream().filter(u -> u.getUser() == user).findFirst().orElse(null); if (userPing == null) { userPing = new PingInfo(user); pingInfos.add(userPing); } userPing.addPing(ping); } } for (PingInfo pingInfo : pingInfos) { mailService.sendEmailFromTemplate(ImmutableMap.of("pings", pingInfo.getPings()), pingInfo.getUser(), "pingsInfoWeekEmail", PING_MAIL_SUBJECT); } } }