@ -5,15 +5,18 @@ import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service ;
import org.springframework.stereotype.Service ;
import org.springframework.transaction.annotation.Transactional ;
import org.springframework.transaction.annotation.Transactional ;
import org.springframework.ui.ModelMap ;
import org.springframework.ui.ModelMap ;
import org.springframework.validation.Errors ;
import ru.ulstu.conference.model.Conference ;
import ru.ulstu.conference.model.Conference ;
import ru.ulstu.conference.model.ConferenceDto ;
import ru.ulstu.conference.model.ConferenceDto ;
import ru.ulstu.conference.model.ConferenceFilterDto ;
import ru.ulstu.conference.model.ConferenceFilterDto ;
import ru.ulstu.conference.model.ConferenceUser ;
import ru.ulstu.conference.model.ConferenceUser ;
import ru.ulstu.conference.repository.ConferenceRepository ;
import ru.ulstu.conference.repository.ConferenceRepository ;
import ru.ulstu.deadline.model.Deadline ;
import ru.ulstu.deadline.service.DeadlineService ;
import ru.ulstu.deadline.service.DeadlineService ;
import ru.ulstu.paper.model.Paper ;
import ru.ulstu.paper.model.Paper ;
import ru.ulstu.paper.service.PaperService ;
import ru.ulstu.paper.service.PaperService ;
import ru.ulstu.ping.service.PingService ;
import ru.ulstu.ping.service.PingService ;
import ru.ulstu.timeline.service.EventService ;
import ru.ulstu.user.model.User ;
import ru.ulstu.user.model.User ;
import ru.ulstu.user.service.UserService ;
import ru.ulstu.user.service.UserService ;
@ -22,6 +25,7 @@ import java.util.ArrayList;
import java.util.Arrays ;
import java.util.Arrays ;
import java.util.Date ;
import java.util.Date ;
import java.util.List ;
import java.util.List ;
import java.util.stream.Collectors ;
import static org.springframework.util.ObjectUtils.isEmpty ;
import static org.springframework.util.ObjectUtils.isEmpty ;
import static ru.ulstu.core.util.StreamApiUtils.convert ;
import static ru.ulstu.core.util.StreamApiUtils.convert ;
@ -36,19 +40,25 @@ public class ConferenceService {
private final PaperService paperService ;
private final PaperService paperService ;
private final UserService userService ;
private final UserService userService ;
private final PingService pingService ;
private final PingService pingService ;
private final ConferenceNotificationService conferenceNotificationService ;
private final EventService eventService ;
public ConferenceService ( ConferenceRepository conferenceRepository ,
public ConferenceService ( ConferenceRepository conferenceRepository ,
ConferenceUserService conferenceUserService ,
ConferenceUserService conferenceUserService ,
DeadlineService deadlineService ,
DeadlineService deadlineService ,
PaperService paperService ,
PaperService paperService ,
UserService userService ,
UserService userService ,
PingService pingService ) {
PingService pingService ,
ConferenceNotificationService conferenceNotificationService ,
EventService eventService ) {
this . conferenceRepository = conferenceRepository ;
this . conferenceRepository = conferenceRepository ;
this . conferenceUserService = conferenceUserService ;
this . conferenceUserService = conferenceUserService ;
this . deadlineService = deadlineService ;
this . deadlineService = deadlineService ;
this . paperService = paperService ;
this . paperService = paperService ;
this . userService = userService ;
this . userService = userService ;
this . pingService = pingService ;
this . pingService = pingService ;
this . conferenceNotificationService = conferenceNotificationService ;
this . eventService = eventService ;
}
}
public ConferenceDto getExistConferenceById ( Integer id ) {
public ConferenceDto getExistConferenceById ( Integer id ) {
@ -91,13 +101,25 @@ public class ConferenceService {
public Integer create ( ConferenceDto conferenceDto ) throws IOException {
public Integer create ( ConferenceDto conferenceDto ) throws IOException {
Conference newConference = copyFromDto ( new Conference ( ) , conferenceDto ) ;
Conference newConference = copyFromDto ( new Conference ( ) , conferenceDto ) ;
newConference = conferenceRepository . save ( newConference ) ;
newConference = conferenceRepository . save ( newConference ) ;
conferenceNotificationService . sendCreateNotification ( newConference ) ;
eventService . createFromConference ( newConference ) ;
return newConference . getId ( ) ;
return newConference . getId ( ) ;
}
}
@Transactional
@Transactional
public Integer update ( ConferenceDto conferenceDto ) throws IOException {
public Integer update ( ConferenceDto conferenceDto ) throws IOException {
Conference conference = conferenceRepository . findOne ( conferenceDto . getId ( ) ) ;
Conference conference = conferenceRepository . findOne ( conferenceDto . getId ( ) ) ;
List < Deadline > oldDeadlines = conference . getDeadlines ( ) . stream ( )
. map ( this : : copyDeadline )
. collect ( Collectors . toList ( ) ) ;
Date oldBeginDate = conference . getBeginDate ( ) ;
Date oldEndDate = conference . getEndDate ( ) ;
conferenceRepository . save ( copyFromDto ( conference , conferenceDto ) ) ;
conferenceRepository . save ( copyFromDto ( conference , conferenceDto ) ) ;
eventService . updateConferenceDeadlines ( conference ) ;
sendNotificationAfterUpdateDeadlines ( conference , oldDeadlines ) ;
if ( ! conference . getBeginDate ( ) . equals ( oldBeginDate ) | | ! conference . getEndDate ( ) . equals ( oldEndDate ) ) {
conferenceNotificationService . updateConferencesDatesNotification ( conference , oldBeginDate , oldEndDate ) ;
}
conferenceDto . getRemovedDeadlineIds ( ) . forEach ( deadlineService : : remove ) ;
conferenceDto . getRemovedDeadlineIds ( ) . forEach ( deadlineService : : remove ) ;
return conference . getId ( ) ;
return conference . getId ( ) ;
}
}
@ -109,6 +131,11 @@ public class ConferenceService {
}
}
}
}
public void addDeadline ( ConferenceDto conferenceDto ) {
conferenceDto . getDeadlines ( ) . add ( new Deadline ( ) ) ;
}
public void removeDeadline ( ConferenceDto conferenceDto , Integer deadlineIndex ) throws IOException {
public void removeDeadline ( ConferenceDto conferenceDto , Integer deadlineIndex ) throws IOException {
if ( conferenceDto . getDeadlines ( ) . get ( deadlineIndex ) . getId ( ) ! = null ) {
if ( conferenceDto . getDeadlines ( ) . get ( deadlineIndex ) . getId ( ) ! = null ) {
conferenceDto . getRemovedDeadlineIds ( ) . add ( conferenceDto . getDeadlines ( ) . get ( deadlineIndex ) . getId ( ) ) ;
conferenceDto . getRemovedDeadlineIds ( ) . add ( conferenceDto . getDeadlines ( ) . get ( deadlineIndex ) . getId ( ) ) ;
@ -224,4 +251,39 @@ public class ConferenceService {
modelMap . addAttribute ( "nearshoreSales" , nearshoreSales ) ;
modelMap . addAttribute ( "nearshoreSales" , nearshoreSales ) ;
modelMap . addAttribute ( "offshoreSales" , offshoreSales ) ;
modelMap . addAttribute ( "offshoreSales" , offshoreSales ) ;
}
}
public void sendNotificationAfterUpdateDeadlines ( Conference conference , List < Deadline > oldDeadlines ) {
if ( oldDeadlines . size ( ) ! = conference . getDeadlines ( ) . size ( ) ) {
conferenceNotificationService . updateDeadlineNotification ( conference ) ;
return ;
}
if ( conference . getDeadlines ( )
. stream ( )
. filter ( deadline - > ! oldDeadlines . contains ( deadline ) )
. count ( ) > 0 ) {
conferenceNotificationService . updateDeadlineNotification ( conference ) ;
}
}
public Deadline copyDeadline ( Deadline oldDeadline ) {
Deadline newDeadline = new Deadline ( oldDeadline . getDate ( ) , oldDeadline . getDescription ( ) ) ;
newDeadline . setId ( oldDeadline . getId ( ) ) ;
return newDeadline ;
}
public void checkEmptyFieldsOfDeadline ( ConferenceDto conferenceDto , Errors errors ) {
for ( Deadline deadline : conferenceDto . getDeadlines ( ) ) {
if ( deadline . getDate ( ) = = null | | deadline . getDescription ( ) . isEmpty ( ) ) {
errors . rejectValue ( "deadlines" , "errorCode" , "В с е поля дедлайна должны быть заполнены" ) ;
}
}
}
public void filterEmptyDeadlines ( ConferenceDto conferenceDto ) {
conferenceDto . setDeadlines ( conferenceDto . getDeadlines ( ) . stream ( )
. filter ( dto - > dto . getDate ( ) ! = null | | ! org . springframework . util . StringUtils . isEmpty ( dto . getDescription ( ) ) )
. collect ( Collectors . toList ( ) ) ) ;
}
}
}