Resolve "Генерация периодических задач по тегам" #207

Merged
ashette merged 32 commits from 79-students-tags-generation into dev 2019-05-16 07:30:47 +04:00
8 changed files with 84 additions and 2 deletions
Showing only changes of commit a11e10dec4 - Show all commits

View File

@ -67,6 +67,7 @@ public class Task extends BaseEntity {
private Date updateDate = new Date();
@ManyToMany(fetch = FetchType.EAGER)
@Fetch(FetchMode.SUBSELECT)
@JoinTable(name = "task_tags",
joinColumns = {@JoinColumn(name = "task_id")},
inverseJoinColumns = {@JoinColumn(name = "tag_id")})
@ -127,4 +128,5 @@ public class Task extends BaseEntity {
public void setTags(List<Tag> tags) {
this.tags = tags;
}
}

View File

@ -11,6 +11,7 @@ import ru.ulstu.students.model.TaskFilterDto;
import ru.ulstu.students.repository.TaskRepository;
import ru.ulstu.tags.model.Tag;
import ru.ulstu.tags.service.TagService;
import ru.ulstu.timeline.service.EventService;
import java.io.IOException;
import java.util.Arrays;
@ -29,12 +30,14 @@ public class TaskService {
private final TaskRepository taskRepository;
private final DeadlineService deadlineService;
private final TagService tagService;
private final EventService eventService;
public TaskService(TaskRepository taskRepository,
DeadlineService deadlineService, TagService tagService) {
DeadlineService deadlineService, TagService tagService, EventService eventService) {
this.taskRepository = taskRepository;
this.deadlineService = deadlineService;
this.tagService = tagService;
this.eventService = eventService;
}
public List<Task> findAll() {
@ -67,6 +70,7 @@ public class TaskService {
public Integer create(TaskDto taskDto) throws IOException {
Task newTask = copyFromDto(new Task(), taskDto);
newTask = taskRepository.save(newTask);
eventService.createFromTask(newTask);
return newTask.getId();
}
@ -86,6 +90,7 @@ public class TaskService {
public Integer update(TaskDto taskDto) throws IOException {
Task task = taskRepository.findOne(taskDto.getId());
taskRepository.save(copyFromDto(task, taskDto));
eventService.updateTaskDeadlines(task);
return task.getId();
}

View File

@ -5,6 +5,7 @@ import ru.ulstu.conference.model.Conference;
import ru.ulstu.core.model.BaseEntity;
import ru.ulstu.grant.model.Grant;
import ru.ulstu.paper.model.Paper;
import ru.ulstu.students.model.Task;
import ru.ulstu.user.model.User;
import javax.persistence.CascadeType;
@ -87,6 +88,10 @@ public class Event extends BaseEntity {
@JoinColumn(name = "grant_id")
private Grant grant;
@ManyToOne
@JoinColumn(name = "task_id")
private Task task;
public String getTitle() {
return title;
}
@ -190,4 +195,12 @@ public class Event extends BaseEntity {
public void setGrant(Grant grant) {
this.grant = grant;
}
public Task getTask() {
return task;
}
public void setTask(Task task) {
this.task = task;
}
}

View File

@ -6,6 +6,7 @@ import org.hibernate.validator.constraints.NotBlank;
import ru.ulstu.conference.model.ConferenceDto;
import ru.ulstu.grant.model.GrantDto;
import ru.ulstu.paper.model.PaperDto;
import ru.ulstu.students.model.TaskDto;
import ru.ulstu.user.model.UserDto;
import javax.validation.constraints.NotNull;
@ -29,6 +30,7 @@ public class EventDto {
private PaperDto paperDto;
private ConferenceDto conferenceDto;
private GrantDto grantDto;
private TaskDto taskDto;
@JsonCreator
public EventDto(@JsonProperty("id") Integer id,
@ -42,7 +44,8 @@ public class EventDto {
@JsonProperty("paperDto") PaperDto paperDto,
@JsonProperty("recipients") List<UserDto> recipients,
@JsonProperty("conferenceDto") ConferenceDto conferenceDto,
@JsonProperty("grantDto") GrantDto grantDto) {
@JsonProperty("grantDto") GrantDto grantDto,
@JsonProperty("taskDto") TaskDto taskDto) {
this.id = id;
this.title = title;
this.period = period;
@ -55,6 +58,7 @@ public class EventDto {
this.paperDto = paperDto;
this.conferenceDto = conferenceDto;
this.grantDto = grantDto;
this.taskDto = taskDto;
}
public EventDto(Event event) {
@ -76,6 +80,9 @@ public class EventDto {
if (grantDto != null) {
this.grantDto = new GrantDto(event.getGrant());
}
if (taskDto != null) {
this.taskDto = new TaskDto(event.getTask());
}
}
public Integer getId() {
@ -137,4 +144,12 @@ public class EventDto {
public void setGrantDto(GrantDto grantDto) {
this.grantDto = grantDto;
}
public TaskDto getTaskDto() {
return taskDto;
}
public void setTaskDto(TaskDto taskDto) {
this.taskDto = taskDto;
}
}

View File

@ -5,6 +5,7 @@ import org.springframework.data.jpa.repository.Query;
import ru.ulstu.conference.model.Conference;
import ru.ulstu.grant.model.Grant;
import ru.ulstu.paper.model.Paper;
import ru.ulstu.students.model.Task;
import ru.ulstu.timeline.model.Event;
import java.util.List;
@ -21,4 +22,6 @@ public interface EventRepository extends JpaRepository<Event, Integer> {
List<Event> findAllByConference(Conference conference);
List<Event> findAllByGrant(Grant grant);
List<Event> findAllByTask(Task task);
}

View File

@ -8,6 +8,7 @@ import ru.ulstu.conference.model.Conference;
import ru.ulstu.deadline.model.Deadline;
import ru.ulstu.grant.model.Grant;
import ru.ulstu.paper.model.Paper;
import ru.ulstu.students.model.Task;
import ru.ulstu.timeline.model.Event;
import ru.ulstu.timeline.model.EventDto;
import ru.ulstu.timeline.model.Timeline;
@ -203,4 +204,33 @@ public class EventService {
eventRepository.delete(eventRepository.findAllByGrant(grant));
createFromGrant(grant);
}
public void createFromTask(Task newTask) {
List<Timeline> timelines = timelineService.findAll();
Timeline timeline = timelines.isEmpty() ? new Timeline() : timelines.get(0);
for (Deadline deadline : newTask.getDeadlines()
.stream()
.filter(d -> d.getDate().after(new Date()) || DateUtils.isSameDay(d.getDate(), new Date()))
.collect(Collectors.toList())) {
Event newEvent = new Event();
newEvent.setTitle("Дедлайн задачи");
newEvent.setStatus(Event.EventStatus.NEW);
newEvent.setExecuteDate(deadline.getDate());
newEvent.setCreateDate(new Date());
newEvent.setUpdateDate(new Date());
newEvent.setDescription("Дедлайн '" + deadline.getDescription() + "' задачи '" + newTask.getTitle() + "'");
newEvent.getRecipients().add(userService.getCurrentUser());
newEvent.setTask(newTask);
eventRepository.save(newEvent);
timeline.getEvents().add(newEvent);
timelineService.save(timeline);
}
}
public void updateTaskDeadlines(Task task) {
eventRepository.delete(eventRepository.findAllByTask(task));
createFromTask(task);
}
}

View File

@ -0,0 +1,13 @@
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
<changeSet author="nastya" id="20190511_000000-1">
<addColumn tableName="event">
<column name="task_id" type="integer"></column>
</addColumn>
<addForeignKeyConstraint baseTableName="event" baseColumnNames="task_id"
constraintName="fk_event_task_id" referencedTableName="task"
referencedColumnNames="id"/>
</changeSet>
</databaseChangeLog>

View File

@ -40,4 +40,5 @@
<include file="db/changelog-20190505_000000-schema.xml"/>
<include file="db/changelog-20190507_000000-schema.xml"/>
<include file="db/changelog-20190507_000001-schema.xml"/>
<include file="db/changelog-20190511_000000-schema.xml"/>
</databaseChangeLog>