59 lines
2.0 KiB
Java
59 lines
2.0 KiB
Java
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<PingInfo> pingInfos = new ArrayList<>();
|
|
|
|
for (Ping ping : pingRepository.findByDate(java.sql.Date.valueOf(LocalDate.now().minusWeeks(1)))) {
|
|
UserActivity pingActivity = ping.getActivity();
|
|
Set<User> 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);
|
|
}
|
|
}
|
|
}
|