complete refactor
This commit is contained in:
parent
8a245584ca
commit
ad989c6dea
@ -14,4 +14,6 @@ public interface EventSource {
|
|||||||
List<User> getRecipients();
|
List<User> getRecipients();
|
||||||
|
|
||||||
void addObjectToEvent(Event event);
|
void addObjectToEvent(Event event);
|
||||||
|
|
||||||
|
String getSuffix();
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,9 @@ import ru.ulstu.activity.api.ActivityRepository;
|
|||||||
import ru.ulstu.activity.api.model.ActivityDto;
|
import ru.ulstu.activity.api.model.ActivityDto;
|
||||||
import ru.ulstu.activity.api.model.ActivityListDto;
|
import ru.ulstu.activity.api.model.ActivityListDto;
|
||||||
import ru.ulstu.activity.common.model.AbstractActivity;
|
import ru.ulstu.activity.common.model.AbstractActivity;
|
||||||
|
import ru.ulstu.activity.common.model.EventSource;
|
||||||
import ru.ulstu.activity.ping.service.PingService;
|
import ru.ulstu.activity.ping.service.PingService;
|
||||||
|
import ru.ulstu.activity.timeline.service.EventService;
|
||||||
import ru.ulstu.core.jpa.OffsetablePageRequest;
|
import ru.ulstu.core.jpa.OffsetablePageRequest;
|
||||||
import ru.ulstu.core.model.response.PageableItems;
|
import ru.ulstu.core.model.response.PageableItems;
|
||||||
|
|
||||||
@ -19,13 +21,16 @@ public abstract class ActivityService<L extends ActivityListDto, T extends Abstr
|
|||||||
protected final ActivityRepository<T> activityRepository;
|
protected final ActivityRepository<T> activityRepository;
|
||||||
protected final ActivityNotificationService<T> activityNotificationService;
|
protected final ActivityNotificationService<T> activityNotificationService;
|
||||||
protected final PingService pingService;
|
protected final PingService pingService;
|
||||||
|
protected final EventService eventService;
|
||||||
|
|
||||||
protected ActivityService(ActivityRepository activityRepository,
|
protected ActivityService(ActivityRepository activityRepository,
|
||||||
ActivityNotificationService<T> activityNotificationService,
|
ActivityNotificationService<T> activityNotificationService,
|
||||||
PingService pingService) {
|
PingService pingService,
|
||||||
|
EventService eventService) {
|
||||||
this.activityRepository = activityRepository;
|
this.activityRepository = activityRepository;
|
||||||
this.activityNotificationService = activityNotificationService;
|
this.activityNotificationService = activityNotificationService;
|
||||||
this.pingService = pingService;
|
this.pingService = pingService;
|
||||||
|
this.eventService = eventService;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
@ -41,6 +46,8 @@ public abstract class ActivityService<L extends ActivityListDto, T extends Abstr
|
|||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public T update(T entity) {
|
public T update(T entity) {
|
||||||
|
eventService.deleteByObject((EventSource) eventService);
|
||||||
|
eventService.createFromObject((EventSource) eventService);
|
||||||
return activityRepository.save(entity);
|
return activityRepository.save(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -57,6 +64,7 @@ public abstract class ActivityService<L extends ActivityListDto, T extends Abstr
|
|||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public T create(T entity) {
|
public T create(T entity) {
|
||||||
|
eventService.createFromObject((EventSource) eventService);
|
||||||
T newEntity = activityRepository.save(entity);
|
T newEntity = activityRepository.save(entity);
|
||||||
activityNotificationService.sendCreateNotification(newEntity);
|
activityNotificationService.sendCreateNotification(newEntity);
|
||||||
return newEntity;
|
return newEntity;
|
||||||
|
@ -90,6 +90,11 @@ public class Conference extends AbstractActivity implements EventSource {
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSuffix() {
|
||||||
|
return "конференции";
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addObjectToEvent(Event event) {
|
public void addObjectToEvent(Event event) {
|
||||||
event.setConference(this);
|
event.setConference(this);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package ru.ulstu.activity.conference.repository;
|
package ru.ulstu.activity.conference.service;
|
||||||
|
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
@ -13,7 +13,7 @@ import ru.ulstu.user.model.User;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface ConferenceRepository extends JpaRepository<Conference, Integer>, ActivityRepository<Conference> {
|
interface ConferenceRepository extends JpaRepository<Conference, Integer>, ActivityRepository<Conference> {
|
||||||
@Query("SELECT c FROM Conference c LEFT JOIN c.users u WHERE (:user IS NULL OR u.user = :user) " +
|
@Query("SELECT c FROM Conference c LEFT JOIN c.users u WHERE (:user IS NULL OR u.user = :user) " +
|
||||||
"AND (YEAR(c.beginDate) = :year OR :year IS NULL) ORDER BY begin_date DESC")
|
"AND (YEAR(c.beginDate) = :year OR :year IS NULL) ORDER BY begin_date DESC")
|
||||||
List<Conference> findByUserAndYear(@Param("user") User user, @Param("year") Integer year);
|
List<Conference> findByUserAndYear(@Param("user") User user, @Param("year") Integer year);
|
@ -11,7 +11,6 @@ import ru.ulstu.activity.conference.model.ConferenceDto;
|
|||||||
import ru.ulstu.activity.conference.model.ConferenceFilterDto;
|
import ru.ulstu.activity.conference.model.ConferenceFilterDto;
|
||||||
import ru.ulstu.activity.conference.model.ConferenceListDto;
|
import ru.ulstu.activity.conference.model.ConferenceListDto;
|
||||||
import ru.ulstu.activity.conference.model.ConferenceUser;
|
import ru.ulstu.activity.conference.model.ConferenceUser;
|
||||||
import ru.ulstu.activity.conference.repository.ConferenceRepository;
|
|
||||||
import ru.ulstu.activity.deadline.model.Deadline;
|
import ru.ulstu.activity.deadline.model.Deadline;
|
||||||
import ru.ulstu.activity.deadline.service.DeadlineService;
|
import ru.ulstu.activity.deadline.service.DeadlineService;
|
||||||
import ru.ulstu.activity.paper.model.Paper;
|
import ru.ulstu.activity.paper.model.Paper;
|
||||||
@ -53,7 +52,7 @@ public class ConferenceService extends ActivityService<ConferenceListDto, Confer
|
|||||||
PingService pingService,
|
PingService pingService,
|
||||||
ConferenceNotificationService conferenceNotificationService,
|
ConferenceNotificationService conferenceNotificationService,
|
||||||
EventService eventService) {
|
EventService eventService) {
|
||||||
super(conferenceRepository, conferenceNotificationService, pingService);
|
super(conferenceRepository, conferenceNotificationService, pingService, eventService);
|
||||||
this.conferenceRepository = conferenceRepository;
|
this.conferenceRepository = conferenceRepository;
|
||||||
this.conferenceUserService = conferenceUserService;
|
this.conferenceUserService = conferenceUserService;
|
||||||
this.deadlineService = deadlineService;
|
this.deadlineService = deadlineService;
|
||||||
@ -101,26 +100,9 @@ public class ConferenceService extends ActivityService<ConferenceListDto, Confer
|
|||||||
return new ConferenceDto(update(conference));
|
return new ConferenceDto(update(conference));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
|
||||||
@Override
|
|
||||||
public Conference update(Conference conference) {
|
|
||||||
List<Deadline> oldDeadlines = conference.getDeadlines().stream()
|
|
||||||
.map(this::copyDeadline)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
Date oldBeginDate = conference.getBeginDate();
|
|
||||||
Date oldEndDate = conference.getEndDate();
|
|
||||||
eventService.updateConferenceDeadlines(conference);
|
|
||||||
sendNotificationAfterUpdateDeadlines(conference, oldDeadlines);
|
|
||||||
if (!conference.getBeginDate().equals(oldBeginDate) || !conference.getEndDate().equals(oldEndDate)) {
|
|
||||||
conferenceNotificationService.updateConferencesDatesNotification(conference, oldBeginDate, oldEndDate);
|
|
||||||
}
|
|
||||||
return conference;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public boolean delete(Integer conferenceId) {
|
public boolean delete(Integer conferenceId) {
|
||||||
if (conferenceRepository.existsById(conferenceId)) {
|
if (conferenceRepository.existsById(conferenceId)) {
|
||||||
eventService.removeConferencesEvent(conferenceRepository.getOne(conferenceId));
|
|
||||||
conferenceRepository.deleteById(conferenceId);
|
conferenceRepository.deleteById(conferenceId);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package ru.ulstu.activity.deadline.repository;
|
package ru.ulstu.activity.deadline.service;
|
||||||
|
|
||||||
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
@ -8,7 +8,7 @@ import ru.ulstu.activity.deadline.model.Deadline;
|
|||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
public interface DeadlineRepository extends JpaRepository<Deadline, Integer> {
|
interface DeadlineRepository extends JpaRepository<Deadline, Integer> {
|
||||||
|
|
||||||
@Query("SELECT d.date FROM Grant g JOIN g.deadlines d WHERE (g.id = :id) AND (d.date = :date)")
|
@Query("SELECT d.date FROM Grant g JOIN g.deadlines d WHERE (g.id = :id) AND (d.date = :date)")
|
||||||
Date findByGrantIdAndDate(@Param("id") Integer grantId, @Param("date") Date date);
|
Date findByGrantIdAndDate(@Param("id") Integer grantId, @Param("date") Date date);
|
@ -3,7 +3,6 @@ package ru.ulstu.activity.deadline.service;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import ru.ulstu.activity.deadline.model.Deadline;
|
import ru.ulstu.activity.deadline.model.Deadline;
|
||||||
import ru.ulstu.activity.deadline.repository.DeadlineRepository;
|
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -26,7 +25,7 @@ public class DeadlineService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
private Deadline update(Deadline deadline) {
|
public Deadline update(Deadline deadline) {
|
||||||
Deadline updateDeadline = deadlineRepository.getOne(deadline.getId());
|
Deadline updateDeadline = deadlineRepository.getOne(deadline.getId());
|
||||||
updateDeadline.setDate(deadline.getDate());
|
updateDeadline.setDate(deadline.getDate());
|
||||||
updateDeadline.setDescription(deadline.getDescription());
|
updateDeadline.setDescription(deadline.getDescription());
|
||||||
|
@ -1,7 +0,0 @@
|
|||||||
package ru.ulstu.activity.file.repostory;
|
|
||||||
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
|
||||||
import ru.ulstu.activity.file.model.FileData;
|
|
||||||
|
|
||||||
public interface FileRepository extends JpaRepository<FileData, Integer> {
|
|
||||||
}
|
|
@ -0,0 +1,7 @@
|
|||||||
|
package ru.ulstu.activity.file.service;
|
||||||
|
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import ru.ulstu.activity.file.model.FileData;
|
||||||
|
|
||||||
|
interface FileRepository extends JpaRepository<FileData, Integer> {
|
||||||
|
}
|
@ -5,7 +5,6 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
import ru.ulstu.activity.file.model.FileData;
|
import ru.ulstu.activity.file.model.FileData;
|
||||||
import ru.ulstu.activity.file.model.FileDataDto;
|
import ru.ulstu.activity.file.model.FileDataDto;
|
||||||
import ru.ulstu.activity.file.repostory.FileRepository;
|
|
||||||
import ru.ulstu.activity.paper.model.PaperDto;
|
import ru.ulstu.activity.paper.model.PaperDto;
|
||||||
|
|
||||||
import java.io.BufferedWriter;
|
import java.io.BufferedWriter;
|
||||||
@ -97,13 +96,13 @@ public class FileService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
private FileData update(FileDataDto fileDataDto) {
|
public FileData update(FileDataDto fileDataDto) {
|
||||||
FileData file = fileRepository.getOne(fileDataDto.getId());
|
FileData file = fileRepository.getOne(fileDataDto.getId());
|
||||||
return fileRepository.save(copyFromDto(file, fileDataDto));
|
return fileRepository.save(copyFromDto(file, fileDataDto));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
private FileData create(FileDataDto fileDataDto) throws IOException {
|
public FileData create(FileDataDto fileDataDto) throws IOException {
|
||||||
FileData newFile = createFileFromTmp(fileDataDto.getTmpFileName());
|
FileData newFile = createFileFromTmp(fileDataDto.getTmpFileName());
|
||||||
copyFromDto(newFile, fileDataDto);
|
copyFromDto(newFile, fileDataDto);
|
||||||
return fileRepository.save(newFile);
|
return fileRepository.save(newFile);
|
||||||
|
@ -146,6 +146,11 @@ public class Grant extends AbstractActivity implements EventSource {
|
|||||||
return authors != null ? new ArrayList<>(authors) : Collections.emptyList();
|
return authors != null ? new ArrayList<>(authors) : Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSuffix() {
|
||||||
|
return "гранта";
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addObjectToEvent(Event event) {
|
public void addObjectToEvent(Event event) {
|
||||||
event.setGrant(this);
|
event.setGrant(this);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package ru.ulstu.activity.grant.repository;
|
package ru.ulstu.activity.grant.service;
|
||||||
|
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
@ -10,7 +10,7 @@ import ru.ulstu.activity.grant.model.Grant;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface GrantRepository extends JpaRepository<Grant, Integer>, ActivityRepository<Grant> {
|
interface GrantRepository extends JpaRepository<Grant, Integer>, ActivityRepository<Grant> {
|
||||||
|
|
||||||
List<Grant> findByStatus(Grant.GrantStatus status);
|
List<Grant> findByStatus(Grant.GrantStatus status);
|
||||||
|
|
@ -15,7 +15,6 @@ import ru.ulstu.activity.grant.model.Grant;
|
|||||||
import ru.ulstu.activity.grant.model.GrantDashboardDto;
|
import ru.ulstu.activity.grant.model.GrantDashboardDto;
|
||||||
import ru.ulstu.activity.grant.model.GrantDto;
|
import ru.ulstu.activity.grant.model.GrantDto;
|
||||||
import ru.ulstu.activity.grant.model.GrantListDto;
|
import ru.ulstu.activity.grant.model.GrantListDto;
|
||||||
import ru.ulstu.activity.grant.repository.GrantRepository;
|
|
||||||
import ru.ulstu.activity.paper.model.Paper;
|
import ru.ulstu.activity.paper.model.Paper;
|
||||||
import ru.ulstu.activity.paper.model.PaperDto;
|
import ru.ulstu.activity.paper.model.PaperDto;
|
||||||
import ru.ulstu.activity.paper.service.PaperService;
|
import ru.ulstu.activity.paper.service.PaperService;
|
||||||
@ -33,9 +32,7 @@ import java.text.ParseException;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static java.util.stream.Collectors.toList;
|
import static java.util.stream.Collectors.toList;
|
||||||
@ -68,7 +65,7 @@ public class GrantService extends ActivityService<GrantListDto, Grant, GrantDto>
|
|||||||
GrantNotificationService grantNotificationService,
|
GrantNotificationService grantNotificationService,
|
||||||
KiasService kiasService,
|
KiasService kiasService,
|
||||||
PingService pingService) {
|
PingService pingService) {
|
||||||
super(grantRepository, grantNotificationService, pingService);
|
super(grantRepository, grantNotificationService, pingService, eventService);
|
||||||
this.grantRepository = grantRepository;
|
this.grantRepository = grantRepository;
|
||||||
this.kiasService = kiasService;
|
this.kiasService = kiasService;
|
||||||
this.fileService = fileService;
|
this.fileService = fileService;
|
||||||
@ -106,15 +103,6 @@ public class GrantService extends ActivityService<GrantListDto, Grant, GrantDto>
|
|||||||
return new GrantDto(entity);
|
return new GrantDto(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
|
||||||
@Override
|
|
||||||
public Grant create(Grant grant) {
|
|
||||||
grant = grantRepository.save(grant);
|
|
||||||
eventService.createFromObject(grant, Collections.emptyList(), false, "гранта");
|
|
||||||
grantNotificationService.sendCreateNotification(grant);
|
|
||||||
return grant;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
@Override
|
@Override
|
||||||
public GrantDto update(GrantDto grantDto) {
|
public GrantDto update(GrantDto grantDto) {
|
||||||
@ -122,28 +110,6 @@ public class GrantService extends ActivityService<GrantListDto, Grant, GrantDto>
|
|||||||
return new GrantDto(update(grant));
|
return new GrantDto(update(grant));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
|
||||||
@Override
|
|
||||||
public Grant update(Grant grant) {
|
|
||||||
Set<User> oldAuthors = new HashSet<>(grant.getAuthors());
|
|
||||||
User oldLeader = grant.getLeader();
|
|
||||||
grant.getAuthors().forEach(author -> {
|
|
||||||
if (!oldAuthors.contains(author)) {
|
|
||||||
grantNotificationService.sendAuthorsChangeNotification(grant, oldAuthors);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
oldAuthors.forEach(oldAuthor -> {
|
|
||||||
if (!grant.getAuthors().contains(oldAuthor)) {
|
|
||||||
grantNotificationService.sendAuthorsChangeNotification(grant, oldAuthors);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (grant.getLeader() != oldLeader) {
|
|
||||||
grantNotificationService.sendLeaderChangeNotification(grant, oldLeader);
|
|
||||||
}
|
|
||||||
eventService.updateGrantDeadlines(grant);
|
|
||||||
return grant;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Grant copyFromDto(Grant grant, GrantDto grantDto) throws IOException {
|
protected Grant copyFromDto(Grant grant, GrantDto grantDto) throws IOException {
|
||||||
grant.setComment(grantDto.getComment());
|
grant.setComment(grantDto.getComment());
|
||||||
grant.setStatus(grantDto.getStatus() == null ? APPLICATION : grantDto.getStatus());
|
grant.setStatus(grantDto.getStatus() == null ? APPLICATION : grantDto.getStatus());
|
||||||
|
@ -322,4 +322,9 @@ public class Paper extends AbstractActivity implements EventSource {
|
|||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Objects.hash(super.hashCode(), title, status, type, createDate, updateDate, deadlines, comment, url, locked, events, files, authors, latexText, conferences, grants);
|
return Objects.hash(super.hashCode(), title, status, type, createDate, updateDate, deadlines, comment, url, locked, events, files, authors, latexText, conferences, grants);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSuffix() {
|
||||||
|
return "статьи";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package ru.ulstu.activity.paper.repository;
|
package ru.ulstu.activity.paper.service;
|
||||||
|
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
@ -11,7 +11,7 @@ import ru.ulstu.user.model.User;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface PaperRepository extends JpaDetachableRepository<Paper, Integer>, ActivityRepository<Paper> {
|
interface PaperRepository extends JpaDetachableRepository<Paper, Integer>, ActivityRepository<Paper> {
|
||||||
|
|
||||||
@Query("SELECT p FROM Paper p WHERE (:author IS NULL OR :author MEMBER OF p.authors) AND (YEAR(p.createDate) = :year OR :year IS NULL)")
|
@Query("SELECT p FROM Paper p WHERE (:author IS NULL OR :author MEMBER OF p.authors) AND (YEAR(p.createDate) = :year OR :year IS NULL)")
|
||||||
List<Paper> filter(@Param("author") User author, @Param("year") Integer year);
|
List<Paper> filter(@Param("author") User author, @Param("year") Integer year);
|
@ -15,7 +15,6 @@ import ru.ulstu.activity.paper.model.PaperFilterListDto;
|
|||||||
import ru.ulstu.activity.paper.model.PaperListDto;
|
import ru.ulstu.activity.paper.model.PaperListDto;
|
||||||
import ru.ulstu.activity.paper.model.PaperStatusDto;
|
import ru.ulstu.activity.paper.model.PaperStatusDto;
|
||||||
import ru.ulstu.activity.paper.model.PaperTypeDto;
|
import ru.ulstu.activity.paper.model.PaperTypeDto;
|
||||||
import ru.ulstu.activity.paper.repository.PaperRepository;
|
|
||||||
import ru.ulstu.activity.ping.service.PingService;
|
import ru.ulstu.activity.ping.service.PingService;
|
||||||
import ru.ulstu.activity.timeline.service.EventService;
|
import ru.ulstu.activity.timeline.service.EventService;
|
||||||
import ru.ulstu.core.jpa.OffsetablePageRequest;
|
import ru.ulstu.core.jpa.OffsetablePageRequest;
|
||||||
@ -63,7 +62,7 @@ public class PaperService extends ActivityService<PaperListDto, Paper, PaperDto>
|
|||||||
DeadlineService deadlineService,
|
DeadlineService deadlineService,
|
||||||
EventService eventService,
|
EventService eventService,
|
||||||
PingService pingService) {
|
PingService pingService) {
|
||||||
super(paperRepository, paperNotificationService, pingService);
|
super(paperRepository, paperNotificationService, pingService, eventService);
|
||||||
this.paperRepository = paperRepository;
|
this.paperRepository = paperRepository;
|
||||||
this.fileService = fileService;
|
this.fileService = fileService;
|
||||||
this.paperNotificationService = paperNotificationService;
|
this.paperNotificationService = paperNotificationService;
|
||||||
@ -171,12 +170,8 @@ public class PaperService extends ActivityService<PaperListDto, Paper, PaperDto>
|
|||||||
paper.setUpdateDate(new Date());
|
paper.setUpdateDate(new Date());
|
||||||
paper.setStatus(DRAFT);
|
paper.setStatus(DRAFT);
|
||||||
paper.setType(OTHER);
|
paper.setType(OTHER);
|
||||||
paper = paperRepository.save(paper);
|
|
||||||
|
|
||||||
paperNotificationService.sendCreateNotification(paper);
|
return create(paper);
|
||||||
eventService.createFromPaper(paper);
|
|
||||||
|
|
||||||
return paper;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<PaperListDto> filter(PaperFilterListDto filterDto) {
|
public List<PaperListDto> filter(PaperFilterListDto filterDto) {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package ru.ulstu.activity.paper.repository;
|
package ru.ulstu.activity.paper.service;
|
||||||
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
import org.springframework.data.jpa.repository.Query;
|
import org.springframework.data.jpa.repository.Query;
|
@ -1,4 +1,4 @@
|
|||||||
package ru.ulstu.activity.ping.repository;
|
package ru.ulstu.activity.ping.service;
|
||||||
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
import org.springframework.data.jpa.repository.Query;
|
import org.springframework.data.jpa.repository.Query;
|
||||||
@ -9,7 +9,7 @@ import ru.ulstu.activity.ping.model.Ping;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface PingRepository extends JpaRepository<Ping, Integer> {
|
interface PingRepository extends JpaRepository<Ping, Integer> {
|
||||||
|
|
||||||
@Query("SELECT count(*) FROM Ping p WHERE (DAY(p.date) = :day) AND (MONTH(p.date) = :month) AND (YEAR(p.date) = :year) AND (p.activityType = 'conference') AND (p.activity = :conference)")
|
@Query("SELECT count(*) FROM Ping p WHERE (DAY(p.date) = :day) AND (MONTH(p.date) = :month) AND (YEAR(p.date) = :year) AND (p.activityType = 'conference') AND (p.activity = :conference)")
|
||||||
long countByConferenceAndDate(@Param("conference") Conference conference, @Param("day") Integer day, @Param("month") Integer month, @Param("year") Integer year);
|
long countByConferenceAndDate(@Param("conference") Conference conference, @Param("day") Integer day, @Param("month") Integer month, @Param("year") Integer year);
|
@ -8,7 +8,6 @@ import org.springframework.stereotype.Service;
|
|||||||
import ru.ulstu.activity.common.model.AbstractActivity;
|
import ru.ulstu.activity.common.model.AbstractActivity;
|
||||||
import ru.ulstu.activity.ping.model.Ping;
|
import ru.ulstu.activity.ping.model.Ping;
|
||||||
import ru.ulstu.activity.ping.model.PingInfo;
|
import ru.ulstu.activity.ping.model.PingInfo;
|
||||||
import ru.ulstu.activity.ping.repository.PingRepository;
|
|
||||||
import ru.ulstu.user.model.User;
|
import ru.ulstu.user.model.User;
|
||||||
import ru.ulstu.user.service.MailService;
|
import ru.ulstu.user.service.MailService;
|
||||||
|
|
||||||
@ -19,10 +18,10 @@ import java.util.Set;
|
|||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class PingScheduler {
|
public class PingScheduler {
|
||||||
|
private final static String PING_MAIL_SUBJECT = "Ping статистика";
|
||||||
private final Logger log = LoggerFactory.getLogger(PingScheduler.class);
|
private final Logger log = LoggerFactory.getLogger(PingScheduler.class);
|
||||||
private final PingRepository pingRepository;
|
private final PingRepository pingRepository;
|
||||||
private final MailService mailService;
|
private final MailService mailService;
|
||||||
private final static String PING_MAIL_SUBJECT = "Ping статистика";
|
|
||||||
|
|
||||||
public PingScheduler(PingRepository pingRepository, MailService mailService) {
|
public PingScheduler(PingRepository pingRepository, MailService mailService) {
|
||||||
this.pingRepository = pingRepository;
|
this.pingRepository = pingRepository;
|
||||||
|
@ -5,7 +5,6 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import ru.ulstu.activity.common.model.AbstractActivity;
|
import ru.ulstu.activity.common.model.AbstractActivity;
|
||||||
import ru.ulstu.activity.conference.model.Conference;
|
import ru.ulstu.activity.conference.model.Conference;
|
||||||
import ru.ulstu.activity.ping.model.Ping;
|
import ru.ulstu.activity.ping.model.Ping;
|
||||||
import ru.ulstu.activity.ping.repository.PingRepository;
|
|
||||||
import ru.ulstu.user.service.UserService;
|
import ru.ulstu.user.service.UserService;
|
||||||
|
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
|
@ -109,6 +109,11 @@ public class Project extends AbstractActivity implements EventSource {
|
|||||||
event.setProject(this);
|
event.setProject(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSuffix() {
|
||||||
|
return "проекта";
|
||||||
|
}
|
||||||
|
|
||||||
public ProjectStatus getStatus() {
|
public ProjectStatus getStatus() {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,6 @@ public class ProjectDto extends ActivityDto {
|
|||||||
private Project.ProjectStatus status;
|
private Project.ProjectStatus status;
|
||||||
private String description;
|
private String description;
|
||||||
private List<Deadline> deadlines = new ArrayList<>();
|
private List<Deadline> deadlines = new ArrayList<>();
|
||||||
private GrantDto grant;
|
|
||||||
private String repository;
|
private String repository;
|
||||||
private List<FileDataDto> files = new ArrayList<>();
|
private List<FileDataDto> files = new ArrayList<>();
|
||||||
private List<Integer> removedDeadlineIds = new ArrayList<>();
|
private List<Integer> removedDeadlineIds = new ArrayList<>();
|
||||||
@ -49,7 +48,6 @@ public class ProjectDto extends ActivityDto {
|
|||||||
this.title = title;
|
this.title = title;
|
||||||
this.status = status;
|
this.status = status;
|
||||||
this.description = description;
|
this.description = description;
|
||||||
this.grant = grant;
|
|
||||||
this.repository = repository;
|
this.repository = repository;
|
||||||
this.deadlines = deadlines;
|
this.deadlines = deadlines;
|
||||||
this.files = files;
|
this.files = files;
|
||||||
@ -67,7 +65,6 @@ public class ProjectDto extends ActivityDto {
|
|||||||
this.status = project.getStatus();
|
this.status = project.getStatus();
|
||||||
this.description = project.getDescription();
|
this.description = project.getDescription();
|
||||||
this.files = convert(project.getFiles(), FileDataDto::new);
|
this.files = convert(project.getFiles(), FileDataDto::new);
|
||||||
this.grant = project.getGrant() == null ? null : new GrantDto(project.getGrant());
|
|
||||||
this.repository = project.getRepository();
|
this.repository = project.getRepository();
|
||||||
this.deadlines = project.getDeadlines();
|
this.deadlines = project.getDeadlines();
|
||||||
this.executorIds = convert(users, user -> user.getId());
|
this.executorIds = convert(users, user -> user.getId());
|
||||||
@ -100,14 +97,6 @@ public class ProjectDto extends ActivityDto {
|
|||||||
this.description = description;
|
this.description = description;
|
||||||
}
|
}
|
||||||
|
|
||||||
public GrantDto getGrant() {
|
|
||||||
return grant;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setGrant(GrantDto grant) {
|
|
||||||
this.grant = grant;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getRepository() {
|
public String getRepository() {
|
||||||
return repository;
|
return repository;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package ru.ulstu.activity.project.repository;
|
package ru.ulstu.activity.project.service;
|
||||||
|
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
@ -8,7 +8,10 @@ import org.springframework.data.repository.query.Param;
|
|||||||
import ru.ulstu.activity.api.ActivityRepository;
|
import ru.ulstu.activity.api.ActivityRepository;
|
||||||
import ru.ulstu.activity.project.model.Project;
|
import ru.ulstu.activity.project.model.Project;
|
||||||
|
|
||||||
public interface ProjectRepository extends JpaRepository<Project, Integer>, ActivityRepository<Project> {
|
interface ProjectRepository extends JpaRepository<Project, Integer>, ActivityRepository<Project> {
|
||||||
@Query("SELECT p FROM Project p WHERE p.status NOT IN (:statuses)")
|
@Query("SELECT p FROM Project p WHERE p.status NOT IN (:statuses)")
|
||||||
Page<Project> findAllWithoutStatuses(Pageable pageable, @Param("statuses") Project.ProjectStatus... statuses);
|
Page<Project> findAllWithoutStatuses(Pageable pageable, @Param("statuses") Project.ProjectStatus... statuses);
|
||||||
|
|
||||||
|
@Query("SELECT p.title FROM Project p WHERE (p.title = :name) AND (:id IS NULL OR p.id != :id) ")
|
||||||
|
String findByNameAndNotId(@Param("name") String name, @Param("id") Integer id);
|
||||||
}
|
}
|
@ -6,13 +6,12 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import ru.ulstu.activity.common.service.ActivityService;
|
import ru.ulstu.activity.common.service.ActivityService;
|
||||||
import ru.ulstu.activity.deadline.service.DeadlineService;
|
import ru.ulstu.activity.deadline.service.DeadlineService;
|
||||||
import ru.ulstu.activity.file.service.FileService;
|
import ru.ulstu.activity.file.service.FileService;
|
||||||
import ru.ulstu.activity.grant.service.GrantService;
|
|
||||||
import ru.ulstu.activity.ping.service.PingService;
|
import ru.ulstu.activity.ping.service.PingService;
|
||||||
import ru.ulstu.activity.project.model.Project;
|
import ru.ulstu.activity.project.model.Project;
|
||||||
import ru.ulstu.activity.project.model.ProjectDashboardDto;
|
import ru.ulstu.activity.project.model.ProjectDashboardDto;
|
||||||
import ru.ulstu.activity.project.model.ProjectDto;
|
import ru.ulstu.activity.project.model.ProjectDto;
|
||||||
import ru.ulstu.activity.project.model.ProjectListDto;
|
import ru.ulstu.activity.project.model.ProjectListDto;
|
||||||
import ru.ulstu.activity.project.repository.ProjectRepository;
|
import ru.ulstu.activity.timeline.service.EventService;
|
||||||
import ru.ulstu.core.jpa.OffsetablePageRequest;
|
import ru.ulstu.core.jpa.OffsetablePageRequest;
|
||||||
import ru.ulstu.core.model.response.PageableItems;
|
import ru.ulstu.core.model.response.PageableItems;
|
||||||
import ru.ulstu.user.model.User;
|
import ru.ulstu.user.model.User;
|
||||||
@ -31,25 +30,24 @@ import static ru.ulstu.core.util.StreamApiUtils.convertPageable;
|
|||||||
public class ProjectService extends ActivityService<ProjectListDto, Project, ProjectDto> {
|
public class ProjectService extends ActivityService<ProjectListDto, Project, ProjectDto> {
|
||||||
private final ProjectRepository projectRepository;
|
private final ProjectRepository projectRepository;
|
||||||
private final DeadlineService deadlineService;
|
private final DeadlineService deadlineService;
|
||||||
private final GrantService grantService;
|
|
||||||
private final FileService fileService;
|
private final FileService fileService;
|
||||||
private final UserService userService;
|
private final UserService userService;
|
||||||
private final PingService pingService;
|
private final PingService pingService;
|
||||||
|
private final EventService eventService;
|
||||||
|
|
||||||
public ProjectService(ProjectRepository projectRepository,
|
public ProjectService(ProjectRepository projectRepository,
|
||||||
ProjectNotificationService projectNotificationService,
|
ProjectNotificationService projectNotificationService,
|
||||||
DeadlineService deadlineService,
|
DeadlineService deadlineService,
|
||||||
GrantService grantService,
|
|
||||||
FileService fileService,
|
FileService fileService,
|
||||||
UserService userService,
|
UserService userService,
|
||||||
PingService pingService) {
|
PingService pingService, EventService eventService) {
|
||||||
super(projectRepository, projectNotificationService, pingService);
|
super(projectRepository, projectNotificationService, pingService, eventService);
|
||||||
this.projectRepository = projectRepository;
|
this.projectRepository = projectRepository;
|
||||||
this.deadlineService = deadlineService;
|
this.deadlineService = deadlineService;
|
||||||
this.grantService = grantService;
|
|
||||||
this.fileService = fileService;
|
this.fileService = fileService;
|
||||||
this.userService = userService;
|
this.userService = userService;
|
||||||
this.pingService = pingService;
|
this.pingService = pingService;
|
||||||
|
this.eventService = eventService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PageableItems<ProjectDashboardDto> findAllActiveDto(int offset, int count) {
|
public PageableItems<ProjectDashboardDto> findAllActiveDto(int offset, int count) {
|
||||||
@ -75,18 +73,12 @@ public class ProjectService extends ActivityService<ProjectListDto, Project, Pro
|
|||||||
project.setDescription(projectDto.getDescription());
|
project.setDescription(projectDto.getDescription());
|
||||||
project.setStatus(projectDto.getStatus() == null ? TECHNICAL_TASK : projectDto.getStatus());
|
project.setStatus(projectDto.getStatus() == null ? TECHNICAL_TASK : projectDto.getStatus());
|
||||||
project.setTitle(projectDto.getTitle());
|
project.setTitle(projectDto.getTitle());
|
||||||
if (projectDto.getGrant() != null && projectDto.getGrant().getId() != null) {
|
|
||||||
project.setGrant(grantService.findById(projectDto.getGrant().getId()));
|
|
||||||
}
|
|
||||||
project.setRepository(projectDto.getRepository());
|
project.setRepository(projectDto.getRepository());
|
||||||
project.setDeadlines(deadlineService.saveOrCreate(projectDto.getDeadlines()));
|
project.setDeadlines(deadlineService.saveOrCreate(projectDto.getDeadlines()));
|
||||||
project.setFiles(fileService.saveOrCreate(projectDto.getFiles().stream()
|
project.setFiles(fileService.saveOrCreate(projectDto.getFiles().stream()
|
||||||
.filter(f -> !f.isDeleted())
|
.filter(f -> !f.isDeleted())
|
||||||
.collect(toList())));
|
.collect(toList())));
|
||||||
project.getGrants().clear();
|
project.getGrants().clear();
|
||||||
if (projectDto.getGrantIds() != null && !projectDto.getGrantIds().isEmpty()) {
|
|
||||||
projectDto.getGrantIds().forEach(grantIds -> project.getGrants().add(grantService.findById(grantIds)));
|
|
||||||
}
|
|
||||||
return project;
|
return project;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,6 +91,11 @@ public class Task extends AbstractActivity implements EventSource {
|
|||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSuffix() {
|
||||||
|
return "задачи";
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addObjectToEvent(Event event) {
|
public void addObjectToEvent(Event event) {
|
||||||
event.setTask(this);
|
event.setTask(this);
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package ru.ulstu.activity.students.repository;
|
package ru.ulstu.activity.students.service;
|
||||||
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
import ru.ulstu.activity.students.model.Scheduler;
|
import ru.ulstu.activity.students.model.Scheduler;
|
||||||
import ru.ulstu.activity.students.model.Task;
|
import ru.ulstu.activity.students.model.Task;
|
||||||
|
|
||||||
public interface SchedulerRepository extends JpaRepository<Scheduler, Integer> {
|
interface SchedulerRepository extends JpaRepository<Scheduler, Integer> {
|
||||||
|
|
||||||
Scheduler findOneByTask(Task task);
|
Scheduler findOneByTask(Task task);
|
||||||
|
|
@ -4,7 +4,6 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import ru.ulstu.activity.students.model.Scheduler;
|
import ru.ulstu.activity.students.model.Scheduler;
|
||||||
import ru.ulstu.activity.students.model.Task;
|
import ru.ulstu.activity.students.model.Task;
|
||||||
import ru.ulstu.activity.students.repository.SchedulerRepository;
|
|
||||||
import ru.ulstu.activity.tags.model.Tag;
|
import ru.ulstu.activity.tags.model.Tag;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
@ -31,13 +30,13 @@ public class SchedulerService {
|
|||||||
|
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
private Scheduler create(Task task) {
|
public Scheduler create(Task task) {
|
||||||
Scheduler scheduler = new Scheduler(task, task.getDeadlines().get(task.getDeadlines().size() - 1).getDate());
|
Scheduler scheduler = new Scheduler(task, task.getDeadlines().get(task.getDeadlines().size() - 1).getDate());
|
||||||
return schedulerRepository.save(scheduler);
|
return schedulerRepository.save(scheduler);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
private void delete(Integer schedulerId) {
|
public void delete(Integer schedulerId) {
|
||||||
if (schedulerRepository.existsById(schedulerId)) {
|
if (schedulerRepository.existsById(schedulerId)) {
|
||||||
schedulerRepository.deleteById(schedulerId);
|
schedulerRepository.deleteById(schedulerId);
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package ru.ulstu.activity.students.repository;
|
package ru.ulstu.activity.students.service;
|
||||||
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
import org.springframework.data.jpa.repository.Query;
|
import org.springframework.data.jpa.repository.Query;
|
||||||
@ -10,7 +10,7 @@ import ru.ulstu.activity.tags.model.Tag;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface TaskRepository extends JpaRepository<Task, Integer>, ActivityRepository<Task> {
|
interface TaskRepository extends JpaRepository<Task, Integer>, ActivityRepository<Task> {
|
||||||
|
|
||||||
@Query("SELECT t FROM Task t WHERE (t.status = :status OR :status IS NULL) AND (:tag IS NULL OR :tag MEMBER OF t.tags) ORDER BY create_date DESC")
|
@Query("SELECT t FROM Task t WHERE (t.status = :status OR :status IS NULL) AND (:tag IS NULL OR :tag MEMBER OF t.tags) ORDER BY create_date DESC")
|
||||||
List<Task> filterNew(@Param("status") Task.TaskStatus status, @Param("tag") Tag tag);
|
List<Task> filterNew(@Param("status") Task.TaskStatus status, @Param("tag") Tag tag);
|
@ -14,8 +14,6 @@ import ru.ulstu.activity.students.model.TaskDashboardDto;
|
|||||||
import ru.ulstu.activity.students.model.TaskDto;
|
import ru.ulstu.activity.students.model.TaskDto;
|
||||||
import ru.ulstu.activity.students.model.TaskFilterDto;
|
import ru.ulstu.activity.students.model.TaskFilterDto;
|
||||||
import ru.ulstu.activity.students.model.TaskListDto;
|
import ru.ulstu.activity.students.model.TaskListDto;
|
||||||
import ru.ulstu.activity.students.repository.SchedulerRepository;
|
|
||||||
import ru.ulstu.activity.students.repository.TaskRepository;
|
|
||||||
import ru.ulstu.activity.tags.model.Tag;
|
import ru.ulstu.activity.tags.model.Tag;
|
||||||
import ru.ulstu.activity.tags.service.TagService;
|
import ru.ulstu.activity.tags.service.TagService;
|
||||||
import ru.ulstu.activity.timeline.service.EventService;
|
import ru.ulstu.activity.timeline.service.EventService;
|
||||||
@ -28,7 +26,6 @@ import java.io.IOException;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -58,7 +55,7 @@ public class TaskService extends ActivityService<TaskListDto, Task, TaskDto> {
|
|||||||
SchedulerRepository schedulerRepository,
|
SchedulerRepository schedulerRepository,
|
||||||
EventService eventService,
|
EventService eventService,
|
||||||
PingService pingService) {
|
PingService pingService) {
|
||||||
super(taskRepository, taskNotificationService, pingService);
|
super(taskRepository, taskNotificationService, pingService, eventService);
|
||||||
this.taskRepository = taskRepository;
|
this.taskRepository = taskRepository;
|
||||||
this.taskNotificationService = taskNotificationService;
|
this.taskNotificationService = taskNotificationService;
|
||||||
this.deadlineService = deadlineService;
|
this.deadlineService = deadlineService;
|
||||||
@ -115,13 +112,6 @@ public class TaskService extends ActivityService<TaskListDto, Task, TaskDto> {
|
|||||||
return new TaskDto(create(newTask));
|
return new TaskDto(create(newTask));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
|
||||||
public Task create(Task task) {
|
|
||||||
task = taskRepository.save(task);
|
|
||||||
eventService.createFromObject(task, Collections.emptyList(), true, "задачи");
|
|
||||||
return task;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Task copyFromDto(Task task, TaskDto taskDto) throws IOException {
|
protected Task copyFromDto(Task task, TaskDto taskDto) throws IOException {
|
||||||
task.setTitle(taskDto.getTitle());
|
task.setTitle(taskDto.getTitle());
|
||||||
task.setDescription(taskDto.getDescription());
|
task.setDescription(taskDto.getDescription());
|
||||||
@ -140,13 +130,6 @@ public class TaskService extends ActivityService<TaskListDto, Task, TaskDto> {
|
|||||||
return new TaskDto(update(task));
|
return new TaskDto(update(task));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
|
||||||
public Task update(Task task) {
|
|
||||||
task = taskRepository.save(task);
|
|
||||||
eventService.updateTaskDeadlines(task);
|
|
||||||
return task;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public boolean delete(Integer taskId) {
|
public boolean delete(Integer taskId) {
|
||||||
if (taskRepository.existsById(taskId)) {
|
if (taskRepository.existsById(taskId)) {
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
package ru.ulstu.activity.tags.repository;
|
package ru.ulstu.activity.tags.service;
|
||||||
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
import org.springframework.data.jpa.repository.Query;
|
import org.springframework.data.jpa.repository.Query;
|
||||||
import org.springframework.data.repository.query.Param;
|
import org.springframework.data.repository.query.Param;
|
||||||
import ru.ulstu.activity.tags.model.Tag;
|
import ru.ulstu.activity.tags.model.Tag;
|
||||||
|
|
||||||
public interface TagRepository extends JpaRepository<Tag, Integer> {
|
interface TagRepository extends JpaRepository<Tag, Integer> {
|
||||||
|
|
||||||
@Query("SELECT t FROM Tag t WHERE (t.tagName = :tagName)")
|
@Query("SELECT t FROM Tag t WHERE (t.tagName = :tagName)")
|
||||||
Tag findByName(@Param("tagName") String tagName);
|
Tag findByName(@Param("tagName") String tagName);
|
@ -2,7 +2,6 @@ package ru.ulstu.activity.tags.service;
|
|||||||
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import ru.ulstu.activity.tags.model.Tag;
|
import ru.ulstu.activity.tags.model.Tag;
|
||||||
import ru.ulstu.activity.tags.repository.TagRepository;
|
|
||||||
|
|
||||||
import javax.transaction.Transactional;
|
import javax.transaction.Transactional;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -10,12 +9,9 @@ import java.util.stream.Collectors;
|
|||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class TagService {
|
public class TagService {
|
||||||
|
|
||||||
private final TagRepository tagRepository;
|
private final TagRepository tagRepository;
|
||||||
|
|
||||||
|
|
||||||
public TagService(TagRepository tagRepository) {
|
public TagService(TagRepository tagRepository) {
|
||||||
|
|
||||||
this.tagRepository = tagRepository;
|
this.tagRepository = tagRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -33,17 +29,17 @@ public class TagService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
private Tag getExistById(Tag tag) {
|
public Tag getExistById(Tag tag) {
|
||||||
return tagRepository.getOne(tag.getId());
|
return tagRepository.getOne(tag.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
private Tag isExistByName(String tagName) {
|
public Tag isExistByName(String tagName) {
|
||||||
return tagRepository.findByName(tagName);
|
return tagRepository.findByName(tagName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
private Tag create(Tag tag) {
|
public Tag create(Tag tag) {
|
||||||
Tag newTag = new Tag();
|
Tag newTag = new Tag();
|
||||||
newTag.setTagName(tag.getTagName());
|
newTag.setTagName(tag.getTagName());
|
||||||
newTag = tagRepository.save(newTag);
|
newTag = tagRepository.save(newTag);
|
||||||
|
@ -1,21 +1,15 @@
|
|||||||
package ru.ulstu.activity.timeline.controller;
|
package ru.ulstu.activity.timeline.controller;
|
||||||
|
|
||||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.PutMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import ru.ulstu.activity.timeline.model.EventDto;
|
import ru.ulstu.activity.timeline.model.EventDto;
|
||||||
import ru.ulstu.activity.timeline.service.EventService;
|
import ru.ulstu.activity.timeline.service.EventService;
|
||||||
import ru.ulstu.configuration.Constants;
|
import ru.ulstu.configuration.Constants;
|
||||||
|
import ru.ulstu.core.model.response.PageableItems;
|
||||||
import ru.ulstu.core.model.response.Response;
|
import ru.ulstu.core.model.response.Response;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping(Constants.API_1_0 + "events")
|
@RequestMapping(Constants.API_1_0 + "events")
|
||||||
public class EventController {
|
public class EventController {
|
||||||
@ -27,28 +21,29 @@ public class EventController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping
|
@GetMapping
|
||||||
public Response<List<EventDto>> getEvents() {
|
public Response<PageableItems<EventDto>> getEvents(@RequestParam(value = "offset", defaultValue = "0") int offset,
|
||||||
return new Response<>(eventService.findAllDto());
|
@RequestParam(value = "count", defaultValue = "0") int count) {
|
||||||
|
return new Response<>(eventService.getAllEvents(offset, count));
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/future")
|
@GetMapping("future")
|
||||||
public Response<List<EventDto>> getFutureEvents() {
|
public Response<PageableItems<EventDto>> getFutureEvents(@RequestParam(value = "offset", defaultValue = "0") int offset,
|
||||||
return new Response<>(eventService.findAllFutureDto());
|
@RequestParam(value = "count", defaultValue = "0") int count) {
|
||||||
|
return new Response<>(eventService.getFutureEvents(offset, count));
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping
|
@GetMapping("all-by-user")
|
||||||
public Response<Integer> createEvent(@RequestBody @Valid EventDto timelineDto) {
|
public Response<PageableItems<EventDto>> getUserEvents(@RequestParam(value = "user-id") int userId,
|
||||||
return new Response<>(eventService.create(timelineDto));
|
@RequestParam(value = "offset", defaultValue = "0") int offset,
|
||||||
|
@RequestParam(value = "count", defaultValue = "0") int count) {
|
||||||
|
return new Response<>(eventService.getUserEvents(userId, offset, count));
|
||||||
}
|
}
|
||||||
|
|
||||||
@PutMapping
|
@GetMapping("future-by-user")
|
||||||
public Response<Integer> updateEvent(@RequestBody @Valid EventDto eventDto) {
|
public Response<PageableItems<EventDto>> getUserFutureEvents(@RequestParam(value = "user-id") int userId,
|
||||||
return new Response<>(eventService.update(eventDto));
|
@RequestParam(value = "offset", defaultValue = "0") int offset,
|
||||||
|
@RequestParam(value = "count", defaultValue = "0") int count) {
|
||||||
|
return new Response<>(eventService.getUserFutureEvents(userId, offset, count));
|
||||||
}
|
}
|
||||||
|
|
||||||
@DeleteMapping("/{event-id}")
|
|
||||||
public Response<Boolean> delete(@PathVariable("event-id") Integer eventId) {
|
|
||||||
eventService.delete(eventId);
|
|
||||||
return new Response<>(Boolean.TRUE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,6 @@ import ru.ulstu.activity.students.model.Task;
|
|||||||
import ru.ulstu.core.model.BaseEntity;
|
import ru.ulstu.core.model.BaseEntity;
|
||||||
import ru.ulstu.user.model.User;
|
import ru.ulstu.user.model.User;
|
||||||
|
|
||||||
import javax.persistence.CascadeType;
|
|
||||||
import javax.persistence.Column;
|
import javax.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import javax.persistence.Entity;
|
||||||
import javax.persistence.EnumType;
|
import javax.persistence.EnumType;
|
||||||
@ -17,7 +16,6 @@ import javax.persistence.FetchType;
|
|||||||
import javax.persistence.JoinColumn;
|
import javax.persistence.JoinColumn;
|
||||||
import javax.persistence.ManyToMany;
|
import javax.persistence.ManyToMany;
|
||||||
import javax.persistence.ManyToOne;
|
import javax.persistence.ManyToOne;
|
||||||
import javax.persistence.OneToMany;
|
|
||||||
import javax.persistence.Temporal;
|
import javax.persistence.Temporal;
|
||||||
import javax.persistence.TemporalType;
|
import javax.persistence.TemporalType;
|
||||||
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotBlank;
|
||||||
@ -45,9 +43,6 @@ public class Event extends BaseEntity {
|
|||||||
@NotBlank
|
@NotBlank
|
||||||
private String title;
|
private String title;
|
||||||
|
|
||||||
@Enumerated(value = EnumType.STRING)
|
|
||||||
private PeriodEvent period;
|
|
||||||
|
|
||||||
@Enumerated(value = EnumType.STRING)
|
@Enumerated(value = EnumType.STRING)
|
||||||
private EventStatus status;
|
private EventStatus status;
|
||||||
|
|
||||||
@ -69,14 +64,6 @@ public class Event extends BaseEntity {
|
|||||||
@ManyToMany(fetch = FetchType.LAZY)
|
@ManyToMany(fetch = FetchType.LAZY)
|
||||||
private List<User> recipients = new ArrayList<>();
|
private List<User> recipients = new ArrayList<>();
|
||||||
|
|
||||||
@ManyToOne
|
|
||||||
@JoinColumn(name = "child_id")
|
|
||||||
private Event child;
|
|
||||||
|
|
||||||
@OneToMany(cascade = CascadeType.ALL)
|
|
||||||
@JoinColumn(name = "child_id")
|
|
||||||
private List<Event> parents;
|
|
||||||
|
|
||||||
@ManyToOne
|
@ManyToOne
|
||||||
@JoinColumn(name = "paper_id")
|
@JoinColumn(name = "paper_id")
|
||||||
private Paper paper;
|
private Paper paper;
|
||||||
@ -113,14 +100,6 @@ public class Event extends BaseEntity {
|
|||||||
this.status = status;
|
this.status = status;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PeriodEvent getPeriod() {
|
|
||||||
return period;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPeriod(PeriodEvent period) {
|
|
||||||
this.period = period;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getCreateDate() {
|
public Date getCreateDate() {
|
||||||
return createDate;
|
return createDate;
|
||||||
}
|
}
|
||||||
@ -161,22 +140,6 @@ public class Event extends BaseEntity {
|
|||||||
this.executeDate = executeDate;
|
this.executeDate = executeDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Event getChild() {
|
|
||||||
return child;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setChild(Event child) {
|
|
||||||
this.child = child;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Event> getParents() {
|
|
||||||
return parents;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setParents(List<Event> parents) {
|
|
||||||
this.parents = parents;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Paper getPaper() {
|
public Paper getPaper() {
|
||||||
return paper;
|
return paper;
|
||||||
}
|
}
|
||||||
|
@ -1,170 +1,31 @@
|
|||||||
package ru.ulstu.activity.timeline.model;
|
package ru.ulstu.activity.timeline.model;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
|
||||||
import ru.ulstu.activity.conference.model.ConferenceDto;
|
|
||||||
import ru.ulstu.activity.grant.model.GrantDto;
|
|
||||||
import ru.ulstu.activity.paper.model.PaperDto;
|
|
||||||
import ru.ulstu.activity.project.model.ProjectDto;
|
|
||||||
import ru.ulstu.activity.students.model.TaskDto;
|
|
||||||
import ru.ulstu.user.model.UserDto;
|
|
||||||
|
|
||||||
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotBlank;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import static ru.ulstu.core.util.StreamApiUtils.convert;
|
|
||||||
|
|
||||||
public class EventDto {
|
public class EventDto {
|
||||||
private final Integer id;
|
|
||||||
@NotBlank
|
@NotBlank
|
||||||
private final String title;
|
private final String title;
|
||||||
private final PeriodEvent period;
|
|
||||||
private final Event.EventStatus status;
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private final Date executeDate;
|
private final Date executeDate;
|
||||||
private final Date createDate;
|
|
||||||
private final Date updateDate;
|
|
||||||
private final String description;
|
private final String description;
|
||||||
private final List<UserDto> recipients;
|
|
||||||
private PaperDto paperDto;
|
|
||||||
private ConferenceDto conferenceDto;
|
|
||||||
private GrantDto grantDto;
|
|
||||||
private ProjectDto projectDto;
|
|
||||||
private TaskDto taskDto;
|
|
||||||
|
|
||||||
@JsonCreator
|
|
||||||
public EventDto(@JsonProperty("id") Integer id,
|
|
||||||
@JsonProperty("title") String title,
|
|
||||||
@JsonProperty("status") Event.EventStatus status,
|
|
||||||
@JsonProperty("period") PeriodEvent period,
|
|
||||||
@JsonProperty("executeDate") Date executeDate,
|
|
||||||
@JsonProperty("createDate") Date createDate,
|
|
||||||
@JsonProperty("updateDate") Date updateDate,
|
|
||||||
@JsonProperty("description") String description,
|
|
||||||
@JsonProperty("paperDto") PaperDto paperDto,
|
|
||||||
@JsonProperty("recipients") List<UserDto> recipients,
|
|
||||||
@JsonProperty("conferenceDto") ConferenceDto conferenceDto,
|
|
||||||
@JsonProperty("grantDto") GrantDto grantDto,
|
|
||||||
@JsonProperty("projectDto") ProjectDto projectDto,
|
|
||||||
@JsonProperty("taskDto") TaskDto taskDto) {
|
|
||||||
this.id = id;
|
|
||||||
this.title = title;
|
|
||||||
this.period = period;
|
|
||||||
this.status = status;
|
|
||||||
this.executeDate = executeDate;
|
|
||||||
this.createDate = createDate;
|
|
||||||
this.updateDate = updateDate;
|
|
||||||
this.description = description;
|
|
||||||
this.recipients = recipients;
|
|
||||||
this.paperDto = paperDto;
|
|
||||||
this.conferenceDto = conferenceDto;
|
|
||||||
this.grantDto = grantDto;
|
|
||||||
this.projectDto = projectDto;
|
|
||||||
this.taskDto = taskDto;
|
|
||||||
}
|
|
||||||
|
|
||||||
public EventDto(Event event) {
|
public EventDto(Event event) {
|
||||||
this.id = event.getId();
|
|
||||||
this.title = event.getTitle();
|
this.title = event.getTitle();
|
||||||
this.status = event.getStatus();
|
|
||||||
this.period = event.getPeriod();
|
|
||||||
this.executeDate = event.getExecuteDate();
|
|
||||||
this.createDate = event.getCreateDate();
|
|
||||||
this.updateDate = event.getUpdateDate();
|
|
||||||
this.description = event.getDescription();
|
this.description = event.getDescription();
|
||||||
this.recipients = convert(event.getRecipients(), UserDto::new);
|
this.executeDate = event.getExecuteDate();
|
||||||
if (paperDto != null) {
|
|
||||||
this.paperDto = new PaperDto(event.getPaper());
|
|
||||||
}
|
|
||||||
if (conferenceDto != null) {
|
|
||||||
this.conferenceDto = new ConferenceDto(event.getConference());
|
|
||||||
}
|
|
||||||
if (grantDto != null) {
|
|
||||||
this.grantDto = new GrantDto(event.getGrant());
|
|
||||||
}
|
|
||||||
if (projectDto != null) {
|
|
||||||
this.projectDto = new ProjectDto(event.getProject());
|
|
||||||
}
|
|
||||||
if (taskDto != null) {
|
|
||||||
this.taskDto = new TaskDto(event.getTask());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getId() {
|
|
||||||
return id;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getTitle() {
|
public String getTitle() {
|
||||||
return title;
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PeriodEvent getPeriod() {
|
|
||||||
return period;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Event.EventStatus getStatus() {
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getCreateDate() {
|
|
||||||
return createDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getUpdateDate() {
|
|
||||||
return updateDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDescription() {
|
public String getDescription() {
|
||||||
return description;
|
return description;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<UserDto> getRecipients() {
|
|
||||||
return recipients;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getExecuteDate() {
|
public Date getExecuteDate() {
|
||||||
return executeDate;
|
return executeDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PaperDto getPaperDto() {
|
|
||||||
return paperDto;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPaperDto(PaperDto paperDto) {
|
|
||||||
this.paperDto = paperDto;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ConferenceDto getConferenceDto() {
|
|
||||||
return conferenceDto;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setConferenceDto(ConferenceDto conferenceDto) {
|
|
||||||
this.conferenceDto = conferenceDto;
|
|
||||||
}
|
|
||||||
|
|
||||||
public GrantDto getGrantDto() {
|
|
||||||
return grantDto;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setGrantDto(GrantDto grantDto) {
|
|
||||||
this.grantDto = grantDto;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ProjectDto getProjectDto() {
|
|
||||||
return projectDto;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setProjectDto(ProjectDto projectDto) {
|
|
||||||
this.projectDto = projectDto;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TaskDto getTaskDto() {
|
|
||||||
return taskDto;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTaskDto(TaskDto taskDto) {
|
|
||||||
this.taskDto = taskDto;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
package ru.ulstu.activity.timeline.model;
|
|
||||||
|
|
||||||
import java.time.Period;
|
|
||||||
|
|
||||||
public enum PeriodEvent {
|
|
||||||
EVERY_YEAR(Period.ofYears(1), "Каждый год"),
|
|
||||||
EVERY_MONTH(Period.ofMonths(1), "Каждый месяц"),
|
|
||||||
EVERY_WEEK(Period.ofWeeks(1), "Каждую неделю"),
|
|
||||||
EVERY_DAY(Period.ofDays(1), "Каждый день");
|
|
||||||
|
|
||||||
private final Period period;
|
|
||||||
private final String message;
|
|
||||||
|
|
||||||
PeriodEvent(Period period, String message) {
|
|
||||||
this.period = period;
|
|
||||||
this.message = message;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Period getPeriod() {
|
|
||||||
return period;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getMessage() {
|
|
||||||
return message;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,26 +0,0 @@
|
|||||||
package ru.ulstu.activity.timeline.model;
|
|
||||||
|
|
||||||
import ru.ulstu.core.model.BaseEntity;
|
|
||||||
|
|
||||||
import javax.persistence.CascadeType;
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
import javax.persistence.JoinColumn;
|
|
||||||
import javax.persistence.OneToMany;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Entity
|
|
||||||
public class Timeline extends BaseEntity {
|
|
||||||
|
|
||||||
@OneToMany(cascade = CascadeType.ALL)
|
|
||||||
@JoinColumn(name = "timeline_id")
|
|
||||||
private List<Event> events = new ArrayList<>();
|
|
||||||
|
|
||||||
public List<Event> getEvents() {
|
|
||||||
return events;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setEvents(List<Event> events) {
|
|
||||||
this.events = events;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,33 +0,0 @@
|
|||||||
package ru.ulstu.activity.timeline.model;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import static ru.ulstu.core.util.StreamApiUtils.convert;
|
|
||||||
|
|
||||||
public class TimelineDto {
|
|
||||||
private final Integer id;
|
|
||||||
private final List<EventDto> events;
|
|
||||||
|
|
||||||
@JsonCreator
|
|
||||||
public TimelineDto(@JsonProperty("id") Integer id,
|
|
||||||
@JsonProperty("events") List<EventDto> events) {
|
|
||||||
this.id = id;
|
|
||||||
this.events = events;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TimelineDto(Timeline timeline) {
|
|
||||||
this.id = timeline.getId();
|
|
||||||
this.events = convert(timeline.getEvents(), EventDto::new);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<EventDto> getEvents() {
|
|
||||||
return events;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
package ru.ulstu.activity.timeline.repository;
|
|
||||||
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
|
||||||
import ru.ulstu.activity.timeline.model.Timeline;
|
|
||||||
|
|
||||||
public interface TimelineRepository extends JpaRepository<Timeline, Integer> {
|
|
||||||
}
|
|
@ -1,22 +1,27 @@
|
|||||||
package ru.ulstu.activity.timeline.repository;
|
package ru.ulstu.activity.timeline.service;
|
||||||
|
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
|
import org.springframework.data.domain.Pageable;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
import org.springframework.data.jpa.repository.Query;
|
import org.springframework.data.jpa.repository.Query;
|
||||||
|
import org.springframework.data.repository.query.Param;
|
||||||
import ru.ulstu.activity.conference.model.Conference;
|
import ru.ulstu.activity.conference.model.Conference;
|
||||||
import ru.ulstu.activity.grant.model.Grant;
|
import ru.ulstu.activity.grant.model.Grant;
|
||||||
import ru.ulstu.activity.paper.model.Paper;
|
import ru.ulstu.activity.paper.model.Paper;
|
||||||
import ru.ulstu.activity.project.model.Project;
|
import ru.ulstu.activity.project.model.Project;
|
||||||
import ru.ulstu.activity.students.model.Task;
|
import ru.ulstu.activity.students.model.Task;
|
||||||
import ru.ulstu.activity.timeline.model.Event;
|
import ru.ulstu.activity.timeline.model.Event;
|
||||||
|
import ru.ulstu.core.jpa.OffsetablePageRequest;
|
||||||
|
import ru.ulstu.user.model.User;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface EventRepository extends JpaRepository<Event, Integer> {
|
interface EventRepository extends JpaRepository<Event, Integer> {
|
||||||
@Query("SELECT e FROM Event e WHERE e.executeDate = CURRENT_DATE")
|
@Query("SELECT e FROM Event e WHERE e.executeDate = CURRENT_DATE")
|
||||||
List<Event> findByCurrentDate();
|
List<Event> findByCurrentDate();
|
||||||
|
|
||||||
@Query("SELECT e FROM Event e WHERE e.executeDate > CURRENT_DATE ORDER BY e.executeDate")
|
@Query("SELECT e FROM Event e WHERE e.executeDate > CURRENT_DATE ORDER BY e.executeDate")
|
||||||
List<Event> findAllFuture();
|
Page<Event> findAllFuture(OffsetablePageRequest offsetablePageRequest);
|
||||||
|
|
||||||
List<Event> findAllByPaper(Paper paper);
|
List<Event> findAllByPaper(Paper paper);
|
||||||
|
|
||||||
@ -27,4 +32,10 @@ public interface EventRepository extends JpaRepository<Event, Integer> {
|
|||||||
List<Event> findAllByProject(Project project);
|
List<Event> findAllByProject(Project project);
|
||||||
|
|
||||||
List<Event> findAllByTask(Task task);
|
List<Event> findAllByTask(Task task);
|
||||||
}
|
|
||||||
|
@Query("SELECT e FROM Event e WHERE e.recipients = :user ORDER BY e.executeDate")
|
||||||
|
Page<Event> findByUser(Pageable offsetablePageRequest, @Param("user") User user);
|
||||||
|
|
||||||
|
@Query("SELECT e FROM Event e WHERE e.recipients = :user AND e.executeDate > CURRENT_DATE ORDER BY e.executeDate")
|
||||||
|
Page<Event> findUserFuture(Pageable offsetablePageRequest, @Param("user") User user);
|
||||||
|
}
|
@ -1,77 +0,0 @@
|
|||||||
package ru.ulstu.activity.timeline.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.activity.timeline.model.Event;
|
|
||||||
import ru.ulstu.activity.timeline.model.PeriodEvent;
|
|
||||||
import ru.ulstu.core.util.DateUtils;
|
|
||||||
import ru.ulstu.user.service.MailService;
|
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
@Service
|
|
||||||
public class EventScheduler {
|
|
||||||
|
|
||||||
private final Logger log = LoggerFactory.getLogger(EventScheduler.class);
|
|
||||||
private final EventService eventService;
|
|
||||||
private final MailService mailService;
|
|
||||||
|
|
||||||
public EventScheduler(EventService eventService,
|
|
||||||
MailService mailService) {
|
|
||||||
this.eventService = eventService;
|
|
||||||
this.mailService = mailService;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Scheduled(cron = "0 0 8 * * ?")
|
|
||||||
public void sendNotifications() {
|
|
||||||
List<Event> events = eventService.findByCurrentDate();
|
|
||||||
events.forEach(event -> {
|
|
||||||
Map<String, Object> variables = ImmutableMap.of("description", event.getDescription());
|
|
||||||
event.getRecipients()
|
|
||||||
.forEach(recipient -> mailService.sendEmailFromTemplate(variables, recipient, "eventNotification", event.getTitle()));
|
|
||||||
if (event.getPeriod() == null) {
|
|
||||||
event.setStatus(Event.EventStatus.COMPLETED);
|
|
||||||
eventService.save(event);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Scheduled(cron = "0 0 * * * ?")
|
|
||||||
public void checkPeriodEvents() {
|
|
||||||
log.debug("EventScheduler.checkPeriodEvents started");
|
|
||||||
//TODO: filter
|
|
||||||
for (Event event : eventService.findAll()) {
|
|
||||||
if (halfOfThePeriodHasPassed(event)) {
|
|
||||||
eventService.createBasedOn(event, DateUtils.addDays(event.getExecuteDate(), getShiftInDays(event.getPeriod())));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
log.debug("EventScheduler.checkPeriodEvents finished");
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getShiftInDays(PeriodEvent periodEvent) {
|
|
||||||
switch (periodEvent) {
|
|
||||||
case EVERY_DAY:
|
|
||||||
return periodEvent.getPeriod().getDays();
|
|
||||||
case EVERY_WEEK:
|
|
||||||
return periodEvent.getPeriod().getDays();
|
|
||||||
case EVERY_MONTH:
|
|
||||||
return periodEvent.getPeriod().getMonths() * 30;
|
|
||||||
case EVERY_YEAR:
|
|
||||||
return periodEvent.getPeriod().getYears() * 365;
|
|
||||||
default:
|
|
||||||
throw new RuntimeException("period event not exists");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean halfOfThePeriodHasPassed(Event event) {
|
|
||||||
return event.getPeriod() != null && event.getChild() == null
|
|
||||||
&& new Date().after(
|
|
||||||
DateUtils.addDays(event.getExecuteDate(), (int) Math.round((double) getShiftInDays(event.getPeriod()) / 2)));
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,180 +1,80 @@
|
|||||||
package ru.ulstu.activity.timeline.service;
|
package ru.ulstu.activity.timeline.service;
|
||||||
|
|
||||||
import org.apache.commons.lang3.time.DateUtils;
|
import org.apache.commons.lang3.time.DateUtils;
|
||||||
import org.springframework.context.annotation.Lazy;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
import ru.ulstu.activity.common.model.EventSource;
|
import ru.ulstu.activity.common.model.EventSource;
|
||||||
import ru.ulstu.activity.conference.model.Conference;
|
|
||||||
import ru.ulstu.activity.deadline.model.Deadline;
|
import ru.ulstu.activity.deadline.model.Deadline;
|
||||||
import ru.ulstu.activity.grant.model.Grant;
|
|
||||||
import ru.ulstu.activity.paper.model.Paper;
|
|
||||||
import ru.ulstu.activity.project.model.Project;
|
|
||||||
import ru.ulstu.activity.students.model.Task;
|
|
||||||
import ru.ulstu.activity.timeline.model.Event;
|
import ru.ulstu.activity.timeline.model.Event;
|
||||||
import ru.ulstu.activity.timeline.model.EventDto;
|
import ru.ulstu.activity.timeline.model.EventDto;
|
||||||
import ru.ulstu.activity.timeline.model.Timeline;
|
import ru.ulstu.core.jpa.OffsetablePageRequest;
|
||||||
import ru.ulstu.activity.timeline.repository.EventRepository;
|
import ru.ulstu.core.model.response.PageableItems;
|
||||||
import ru.ulstu.user.model.UserDto;
|
|
||||||
import ru.ulstu.user.service.UserService;
|
import ru.ulstu.user.service.UserService;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static ru.ulstu.core.util.StreamApiUtils.convert;
|
import static ru.ulstu.core.util.StreamApiUtils.convertPageable;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class EventService {
|
public class EventService {
|
||||||
|
|
||||||
private final EventRepository eventRepository;
|
|
||||||
private final TimelineService timelineService;
|
|
||||||
private final UserService userService;
|
private final UserService userService;
|
||||||
|
private final EventRepository eventRepository;
|
||||||
|
|
||||||
public EventService(EventRepository eventRepository,
|
public EventService(UserService userService,
|
||||||
@Lazy TimelineService timelineService,
|
EventRepository eventRepository) {
|
||||||
UserService userService) {
|
|
||||||
this.eventRepository = eventRepository;
|
|
||||||
this.timelineService = timelineService;
|
|
||||||
this.userService = userService;
|
this.userService = userService;
|
||||||
|
this.eventRepository = eventRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<EventDto> findAllDto() {
|
public PageableItems<EventDto> getAllEvents(int offset, int count) {
|
||||||
return convert(findAll(), EventDto::new);
|
return createPageable(eventRepository.findAll(new OffsetablePageRequest(offset, count)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Event> findAll() {
|
public PageableItems<EventDto> getFutureEvents(int offset, int count) {
|
||||||
return eventRepository.findAll();
|
return createPageable(eventRepository.findAllFuture(new OffsetablePageRequest(offset, count)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
public PageableItems<EventDto> getUserEvents(int userId, int offset, int count) {
|
||||||
public Integer create(EventDto eventDto) {
|
return createPageable(eventRepository.findByUser(new OffsetablePageRequest(offset, count), userService.findById(userId)));
|
||||||
return eventRepository.save(copyFromDto(new Event(), eventDto)).getId();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Event copyFromDto(Event event, EventDto eventDto) {
|
public PageableItems<EventDto> getUserFutureEvents(int userId, int offset, int count) {
|
||||||
event.setExecuteDate(eventDto.getExecuteDate());
|
return createPageable(eventRepository.findUserFuture(new OffsetablePageRequest(offset, count), userService.findById(userId)));
|
||||||
event.setCreateDate(eventDto.getId() == null ? new Date() : eventDto.getCreateDate());
|
|
||||||
event.setDescription(eventDto.getDescription());
|
|
||||||
event.setRecipients(userService.findByIds(convert(eventDto.getRecipients(), UserDto::getId)));
|
|
||||||
event.setTitle(eventDto.getTitle());
|
|
||||||
event.setPeriod(eventDto.getPeriod());
|
|
||||||
event.setStatus(eventDto.getStatus());
|
|
||||||
event.setUpdateDate(new Date());
|
|
||||||
return event;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
public void createFromObject(EventSource eventSource) {
|
||||||
public Integer update(EventDto eventDto) {
|
List<Event> newEvents = new ArrayList<>();
|
||||||
Event event = eventRepository.getOne(eventDto.getId());
|
|
||||||
return eventRepository.save(copyFromDto(event, eventDto)).getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transactional
|
|
||||||
public Event save(Event event) {
|
|
||||||
return eventRepository.save(event);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transactional
|
|
||||||
public void delete(Integer eventId) {
|
|
||||||
Event event = eventRepository.getOne(eventId);
|
|
||||||
event.setParents(null);
|
|
||||||
eventRepository.delete(event);
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Event> findByIds(List<Integer> ids) {
|
|
||||||
return eventRepository.findAllById(ids);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void createBasedOn(Event event, Date executeDate) {
|
|
||||||
//backup event id
|
|
||||||
Integer parentEventId = event.getId();
|
|
||||||
|
|
||||||
event.setId(null);
|
|
||||||
event.setStatus(Event.EventStatus.POSSIBLE);
|
|
||||||
event.setExecuteDate(executeDate);
|
|
||||||
event.setCreateDate(new Date());
|
|
||||||
event.setUpdateDate(new Date());
|
|
||||||
event = eventRepository.save(event);
|
|
||||||
|
|
||||||
//set child to parent
|
|
||||||
Event parentEvent = eventRepository.getOne(parentEventId);
|
|
||||||
parentEvent.setChild(event);
|
|
||||||
eventRepository.save(parentEvent);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void createFromPaper(Paper newPaper) {
|
|
||||||
createFromObject(newPaper, Collections.emptyList(), false, "статьи");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void createFromObject(EventSource eventSource, List<Event> events, Boolean addCurrentUser, String suffix) {
|
|
||||||
List<Timeline> timelines = timelineService.findAll();
|
|
||||||
Timeline timeline = timelines.isEmpty() ? new Timeline() : timelines.get(0);
|
|
||||||
|
|
||||||
timeline.getEvents().removeAll(events);
|
|
||||||
for (Deadline deadline : eventSource.getDeadlines()
|
for (Deadline deadline : eventSource.getDeadlines()
|
||||||
.stream()
|
.stream()
|
||||||
.filter(d -> d.getDate().after(new Date()) || DateUtils.isSameDay(d.getDate(), new Date()))
|
.filter(d -> d.getDate().after(new Date()) || DateUtils.isSameDay(d.getDate(), new Date()))
|
||||||
.collect(Collectors.toList())) {
|
.collect(Collectors.toList())) {
|
||||||
Event newEvent = new Event();
|
Event newEvent = new Event();
|
||||||
newEvent.setTitle("Дедлайн " + suffix);
|
newEvent.setTitle("Дедлайн " + eventSource.getSuffix());
|
||||||
newEvent.setStatus(Event.EventStatus.NEW);
|
newEvent.setStatus(Event.EventStatus.NEW);
|
||||||
newEvent.setExecuteDate(deadline.getDate());
|
newEvent.setExecuteDate(deadline.getDate());
|
||||||
newEvent.setCreateDate(new Date());
|
newEvent.setCreateDate(new Date());
|
||||||
newEvent.setUpdateDate(new Date());
|
newEvent.setUpdateDate(new Date());
|
||||||
newEvent.setDescription("Дедлайн '" + deadline.getDescription() + "' " + suffix + " '"
|
newEvent.setDescription("Дедлайн '"
|
||||||
|
+ deadline.getDescription()
|
||||||
|
+ "' " + eventSource.getSuffix() + " '"
|
||||||
+ eventSource.getTitle() + "'");
|
+ eventSource.getTitle() + "'");
|
||||||
if (addCurrentUser) {
|
newEvent.getRecipients().addAll(eventSource.getRecipients());
|
||||||
newEvent.getRecipients().add(userService.getCurrentUser());
|
|
||||||
}
|
|
||||||
newEvent.setRecipients(eventSource.getRecipients());
|
newEvent.setRecipients(eventSource.getRecipients());
|
||||||
eventSource.addObjectToEvent(newEvent);
|
newEvents.add(eventRepository.save(newEvent));
|
||||||
timeline.getEvents().add(eventRepository.save(newEvent));
|
|
||||||
}
|
}
|
||||||
timelineService.save(timeline);
|
eventRepository.saveAll(newEvents);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updatePaperDeadlines(Paper paper) {
|
|
||||||
List<Event> foundEvents = eventRepository.findAllByPaper(paper);
|
private PageableItems<EventDto> createPageable(Page<Event> page) {
|
||||||
eventRepository.deleteAll(foundEvents);
|
return convertPageable(new PageableItems<>(page.getTotalElements(), page.getContent()), EventDto::new);
|
||||||
createFromObject(paper, foundEvents, false, "статьи");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Event> findByCurrentDate() {
|
public void deleteByObject(EventSource eventSource) {
|
||||||
return eventRepository.findByCurrentDate();
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<Event> findAllFuture() {
|
|
||||||
return eventRepository.findAllFuture();
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<EventDto> findAllFutureDto() {
|
|
||||||
return convert(findAllFuture(), EventDto::new);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateConferenceDeadlines(Conference conference) {
|
|
||||||
eventRepository.deleteAll(eventRepository.findAllByConference(conference));
|
|
||||||
createFromObject(conference, Collections.emptyList(), false, "конференции");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateGrantDeadlines(Grant grant) {
|
|
||||||
eventRepository.deleteAll(eventRepository.findAllByGrant(grant));
|
|
||||||
createFromObject(grant, Collections.emptyList(), false, "гранта");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateProjectDeadlines(Project project) {
|
|
||||||
eventRepository.deleteAll(eventRepository.findAllByProject(project));
|
|
||||||
createFromObject(project, Collections.emptyList(), false, "проекта");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void removeConferencesEvent(Conference conference) {
|
|
||||||
List<Event> eventList = eventRepository.findAllByConference(conference);
|
|
||||||
eventList.forEach(event -> eventRepository.deleteById(event.getId()));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateTaskDeadlines(Task task) {
|
|
||||||
eventRepository.deleteAll(eventRepository.findAllByTask(task));
|
|
||||||
createFromObject(task, Collections.emptyList(), true, "задачи");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,60 +0,0 @@
|
|||||||
package ru.ulstu.activity.timeline.service;
|
|
||||||
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
import ru.ulstu.activity.timeline.model.EventDto;
|
|
||||||
import ru.ulstu.activity.timeline.model.Timeline;
|
|
||||||
import ru.ulstu.activity.timeline.model.TimelineDto;
|
|
||||||
import ru.ulstu.activity.timeline.repository.TimelineRepository;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import static ru.ulstu.core.util.StreamApiUtils.convert;
|
|
||||||
|
|
||||||
@Service
|
|
||||||
public class TimelineService {
|
|
||||||
|
|
||||||
private final TimelineRepository timelineRepository;
|
|
||||||
private final EventService eventService;
|
|
||||||
|
|
||||||
public TimelineService(TimelineRepository timelineRepository,
|
|
||||||
EventService eventService) {
|
|
||||||
this.timelineRepository = timelineRepository;
|
|
||||||
this.eventService = eventService;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<TimelineDto> findAllDto() {
|
|
||||||
return convert(timelineRepository.findAll(), TimelineDto::new);
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Timeline> findAll() {
|
|
||||||
return timelineRepository.findAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transactional
|
|
||||||
public int create(TimelineDto timelineDto) {
|
|
||||||
return timelineRepository.save(copyFromDto(new Timeline(), timelineDto)).getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transactional
|
|
||||||
public Timeline save(Timeline timeline) {
|
|
||||||
return timelineRepository.save(timeline);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Timeline copyFromDto(Timeline timeline, TimelineDto timelineDto) {
|
|
||||||
timeline.setEvents(eventService.findByIds(convert(timelineDto.getEvents(), EventDto::getId)));
|
|
||||||
return timeline;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transactional
|
|
||||||
public Integer update(TimelineDto timelineDto) {
|
|
||||||
Timeline timeline = timelineRepository.getOne(timelineDto.getId());
|
|
||||||
return timelineRepository.save(copyFromDto(timeline, timelineDto)).getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transactional
|
|
||||||
public void delete(Integer timelineId) {
|
|
||||||
Timeline timeline = timelineRepository.getOne(timelineId);
|
|
||||||
timelineRepository.delete(timeline);
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user