diff --git a/src/main/java/ru/ulstu/paper/model/Paper.java b/src/main/java/ru/ulstu/paper/model/Paper.java index ad6950a..77b8e0c 100644 --- a/src/main/java/ru/ulstu/paper/model/Paper.java +++ b/src/main/java/ru/ulstu/paper/model/Paper.java @@ -37,6 +37,9 @@ public class Paper extends BaseEntity { @Column(name = "update_date") private Date updateDate; + @Column(name = "deadline_date") + private Date deadlineDate; + private String comment; private Boolean locked; @@ -72,6 +75,14 @@ public class Paper extends BaseEntity { this.updateDate = updateDate; } + public Date getDeadlineDate() { + return deadlineDate; + } + + public void setDeadlineDate(Date deadlineDate) { + this.deadlineDate = deadlineDate; + } + public String getComment() { return comment; } diff --git a/src/main/java/ru/ulstu/paper/model/PaperDto.java b/src/main/java/ru/ulstu/paper/model/PaperDto.java index d7fb8f2..aeb4e3f 100644 --- a/src/main/java/ru/ulstu/paper/model/PaperDto.java +++ b/src/main/java/ru/ulstu/paper/model/PaperDto.java @@ -15,6 +15,7 @@ public class PaperDto { private final Paper.PaperStatus status; private final Date createDate; private final Date updateDate; + private final Date deadlineDate; private final String comment; private final Boolean locked; private final String tmpFileName; @@ -29,6 +30,7 @@ public class PaperDto { @JsonProperty("status") Paper.PaperStatus status, @JsonProperty("createDate") Date createDate, @JsonProperty("updateDate") Date updateDate, + @JsonProperty("deadlineDate") Date deadlineDate, @JsonProperty("comment") String comment, @JsonProperty("locked") Boolean locked, @JsonProperty("tmpFileName") String tmpFileName, @@ -38,6 +40,7 @@ public class PaperDto { this.status = status; this.createDate = createDate; this.updateDate = updateDate; + this.deadlineDate = deadlineDate; this.comment = comment; this.locked = locked; this.tmpFileName = tmpFileName; @@ -53,6 +56,7 @@ public class PaperDto { this.status = paper.getStatus(); this.createDate = paper.getCreateDate(); this.updateDate = paper.getUpdateDate(); + this.deadlineDate = paper.getDeadlineDate(); this.comment = paper.getComment(); this.locked = paper.getLocked(); this.tmpFileName = null; @@ -82,6 +86,8 @@ public class PaperDto { return updateDate; } + public Date getDeadlineDate() {return deadlineDate;} + public String getComment() { return comment; } diff --git a/src/main/java/ru/ulstu/paper/service/DeadlineScheduler.java b/src/main/java/ru/ulstu/paper/service/DeadlineScheduler.java new file mode 100644 index 0000000..da1f2bf --- /dev/null +++ b/src/main/java/ru/ulstu/paper/service/DeadlineScheduler.java @@ -0,0 +1,65 @@ +package ru.ulstu.paper.service; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; +import ru.ulstu.paper.model.Paper; +import ru.ulstu.paper.repository.PaperRepository; +import ru.ulstu.user.model.User; +import ru.ulstu.user.scheduler.UserScheduler; +import ru.ulstu.user.service.MailService; + +import java.util.Calendar; +import java.util.List; + +@Service +public class DeadlineScheduler { + + private final Logger log = LoggerFactory.getLogger(DeadlineScheduler.class); + + private final PaperRepository paperRepository; + + private final MailService mailService; + + private final static boolean IS_DEADLINE_NOTIFICATION_BEFORE_WEEK = true; + + public DeadlineScheduler(PaperRepository paperRepository, MailService mailService) { + this.paperRepository = paperRepository; + this.mailService = mailService; + } + + + @Scheduled(cron = "0 0 8 * 1 ?") + public void checkDeadlineBeforeWeek() { + log.debug("DeadlineScheduler.checkDeadlineBeforeWeek started"); + sendNotifications(IS_DEADLINE_NOTIFICATION_BEFORE_WEEK); + log.debug("DeadlineScheduler.checkDeadlineBeforeWeek finished"); + } + + @Scheduled(cron = "0 0 8 * * ?") + public void checkDeadlineAfterWeek() { + log.debug("DeadlineScheduler.checkDeadlineAfterWeek started"); + sendNotifications(!IS_DEADLINE_NOTIFICATION_BEFORE_WEEK); + log.debug("DeadlineScheduler.checkDeadlineAfterWeek finished"); + } + + private void sendNotifications(boolean isDeadlineBeforeWeek) { + List allPapers = paperRepository.findAll(); + for (Paper paper : allPapers) { + Calendar c = Calendar.getInstance(); + c.add(Calendar.DAY_OF_YEAR, 7); + if (((c.getTime().compareTo(paper.getDeadlineDate()) < 0) && isDeadlineBeforeWeek) || + (c.getTime().compareTo(paper.getDeadlineDate()) >= 0) && !isDeadlineBeforeWeek) { + sendMessageDeadline(paper); + } + } + } + + private void sendMessageDeadline(Paper paper){ + for (User user : paper.getAuthors()) { + mailService.sendEmail(user.getEmail(), "Приближается срок сдачи статьи", + "Срок сдачи статьи " + paper.getTitle() + " " + paper.getDeadlineDate().toString()); + } + } +} diff --git a/src/main/resources/db/changelog-20181027_000000-schema.xml b/src/main/resources/db/changelog-20181027_000000-schema.xml new file mode 100644 index 0000000..99c50e4 --- /dev/null +++ b/src/main/resources/db/changelog-20181027_000000-schema.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/src/main/resources/db/changelog-master.xml b/src/main/resources/db/changelog-master.xml index 4faae2e..776b2bb 100644 --- a/src/main/resources/db/changelog-master.xml +++ b/src/main/resources/db/changelog-master.xml @@ -11,4 +11,5 @@ + \ No newline at end of file