@ -11,11 +11,13 @@ import ru.ulstu.students.model.Scheduler;
import ru.ulstu.students.model.Task ;
import ru.ulstu.students.model.Task ;
import ru.ulstu.students.model.TaskDto ;
import ru.ulstu.students.model.TaskDto ;
import ru.ulstu.students.model.TaskFilterDto ;
import ru.ulstu.students.model.TaskFilterDto ;
import ru.ulstu.students.repository.SchedulerRepository ;
import ru.ulstu.students.repository.TaskRepository ;
import ru.ulstu.students.repository.TaskRepository ;
import ru.ulstu.tags.model.Tag ;
import ru.ulstu.tags.model.Tag ;
import ru.ulstu.tags.service.TagService ;
import ru.ulstu.tags.service.TagService ;
import java.io.IOException ;
import java.io.IOException ;
import java.util.ArrayList ;
import java.util.Arrays ;
import java.util.Arrays ;
import java.util.Calendar ;
import java.util.Calendar ;
import java.util.Date ;
import java.util.Date ;
@ -36,14 +38,17 @@ public class TaskService {
private final static int MAX_DISPLAY_SIZE = 40 ;
private final static int MAX_DISPLAY_SIZE = 40 ;
private final TaskRepository taskRepository ;
private final TaskRepository taskRepository ;
private final SchedulerRepository schedulerRepository ;
private final DeadlineService deadlineService ;
private final DeadlineService deadlineService ;
private final TagService tagService ;
private final TagService tagService ;
public TaskService ( TaskRepository taskRepository ,
public TaskService ( TaskRepository taskRepository ,
DeadlineService deadlineService , TagService tagService ) {
DeadlineService deadlineService , TagService tagService , SchedulerRepository schedulerRepository ) {
this . taskRepository = taskRepository ;
this . taskRepository = taskRepository ;
this . deadlineService = deadlineService ;
this . deadlineService = deadlineService ;
this . tagService = tagService ;
this . tagService = tagService ;
this . schedulerRepository = schedulerRepository ;
}
}
public List < Task > findAll ( ) {
public List < Task > findAll ( ) {
@ -101,6 +106,11 @@ public class TaskService {
@Transactional
@Transactional
public void delete ( Integer taskId ) throws IOException {
public void delete ( Integer taskId ) throws IOException {
if ( taskRepository . exists ( taskId ) ) {
if ( taskRepository . exists ( taskId ) ) {
Task scheduleTask = taskRepository . findOne ( taskId ) ;
Scheduler sch = schedulerRepository . findOneByTask ( scheduleTask ) ;
if ( sch ! = null ) {
schedulerRepository . delete ( sch . getId ( ) ) ;
}
taskRepository . delete ( taskId ) ;
taskRepository . delete ( taskId ) ;
}
}
@ -124,9 +134,9 @@ public class TaskService {
public Task copyTaskWithNewDates ( Task task ) {
public Task copyTaskWithNewDates ( Task task ) {
Task newTask = new Task ( ) ;
Task newTask = new Task ( ) ;
copyMainPart ( newTask , task ) ;
copyMainPart ( newTask , task ) ;
Calendar cal1 = Calendar . getInstance ( TimeZone . getTimeZone ( "Europe/ Paris ") ) ;
Calendar cal1 = Calendar . getInstance ( TimeZone . getTimeZone ( "Europe/ Samara ") ) ;
cal1 . setTime ( newTask . getCreateDate ( ) ) ;
cal1 . setTime ( newTask . getCreateDate ( ) ) ;
Calendar cal2 = Calendar . getInstance ( TimeZone . getTimeZone ( "Europe/ Paris ") ) ;
Calendar cal2 = Calendar . getInstance ( TimeZone . getTimeZone ( "Europe/ Samara ") ) ;
cal2 . setTime ( task . getCreateDate ( ) ) ;
cal2 . setTime ( task . getCreateDate ( ) ) ;
Integer interval = cal1 . get ( Calendar . DAY_OF_YEAR ) - cal2 . get ( Calendar . DAY_OF_YEAR ) ;
Integer interval = cal1 . get ( Calendar . DAY_OF_YEAR ) - cal2 . get ( Calendar . DAY_OF_YEAR ) ;
newTask . setDeadlines ( newDatesDeadlines ( task . getDeadlines ( ) , interval ) ) ;
newTask . setDeadlines ( newDatesDeadlines ( task . getDeadlines ( ) , interval ) ) ;
@ -169,32 +179,64 @@ public class TaskService {
@Transactional
@Transactional
public void generateYearTasks ( ) {
public void generateYearTasks ( ) {
Calendar cal = Calendar . getInstance ( ) ;
Set < Tag > tags = checkRepeatingTags ( true ) ;
cal . setTime ( new Date ( ) ) ;
List < Task > tasks = new ArrayList < > ( ) ;
List < Task > tasks = taskRepository . findToGenerate ( cal . get ( Calendar . DAY_OF_MONTH ) , cal . get ( Calendar . MONTH ) + 1 , cal . get ( Calendar . YEAR ) - 1 ) ;
tags . forEach ( tag - >
tasks . forEach ( task - > {
{
Task newTask = copyTaskWithNewYear ( task ) ;
Task singleTask = findTasksByTag ( tag ) . get ( 0 ) ;
taskRepository . save ( newTask ) ;
Calendar taskDate = Calendar . getInstance ( ) ;
Calendar nowDate = Calendar . getInstance ( ) ;
taskDate . setTime ( singleTask . getCreateDate ( ) ) ;
nowDate . setTime ( new Date ( ) ) ;
if ( taskDate . get ( Calendar . DAY_OF_MONTH ) = = nowDate . get ( Calendar . DAY_OF_MONTH ) & &
taskDate . get ( Calendar . MONTH ) + 1 = = nowDate . get ( Calendar . MONTH ) + 1 & &
taskDate . get ( Calendar . YEAR ) + 1 = = nowDate . get ( Calendar . YEAR ) ) {
if ( ! tasks . contains ( singleTask ) ) {
tasks . add ( singleTask ) ;
}
}
} ) ;
} ) ;
if ( tasks ! = null ) {
tasks . forEach ( task - > {
Task newTask = copyTaskWithNewYear ( task ) ;
taskRepository . save ( newTask ) ;
} ) ;
}
}
}
@Transactional
@Transactional
public Set < Tag > checkRepeatingTags ( ) {
public Set < Tag > checkRepeatingTags ( Boolean param ) { //param: true = year task; false = period task
Map < Tag , Long > tagsCount = new TreeMap < > ( ) ;
Map < Tag , Long > tagsCount = new TreeMap < > ( ) ;
List < Tag > tags = tagService . getTags ( ) ;
List < Tag > tags = tagService . getTags ( ) ;
List < Task > tasks = taskRepository . findAll ( ) ;
Calendar cal = Calendar . getInstance ( ) ;
cal . setTime ( new Date ( ) ) ;
cal . add ( Calendar . YEAR , - 1 ) ;
cal . set ( Calendar . HOUR_OF_DAY , 0 ) ;
System . out . println ( cal . getTime ( ) ) ;
List < Task > tasks = taskRepository . findAllYear ( cal . getTime ( ) ) ;
;
tags . forEach ( tag - >
tags . forEach ( tag - >
tagsCount . put ( tag , tasks
tagsCount . put ( tag , tasks
. stream ( )
. stream ( )
. filter ( task - > task . getTags ( ) . contains ( tag ) )
. filter ( task - > task . getTags ( ) . contains ( tag ) )
. count ( ) ) ) ;
. count ( ) ) ) ;
if ( param ) {
return tagsCount
. entrySet ( )
. stream ( )
. filter ( tagLongEntry - > tagLongEntry . getValue ( ) = = 1 )
. collect ( Collectors . toMap ( Map . Entry : : getKey , Map . Entry : : getValue ) )
. keySet ( ) ;
} else {
return tagsCount
. entrySet ( )
. stream ( )
. filter ( tagLongEntry - > tagLongEntry . getValue ( ) > = 2 )
. collect ( Collectors . toMap ( Map . Entry : : getKey , Map . Entry : : getValue ) )
. keySet ( ) ;
}
return tagsCount
. entrySet ( )
. stream ( )
. filter ( tagLongEntry - > tagLongEntry . getValue ( ) > = 2 )
. collect ( Collectors . toMap ( Map . Entry : : getKey , Map . Entry : : getValue ) )
. keySet ( ) ;
}
}
public List < Task . TaskStatus > getTaskStatuses ( ) {
public List < Task . TaskStatus > getTaskStatuses ( ) {