Commit 942114bc authored by Nguyen Ha's avatar Nguyen Ha

Merge branch 'master' of /Users/hanv_itsol/VTT_CAMPAIGN/service-campaign with conflicts.

parent 4e5db0ba
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="Spring" name="Spring">
<configuration />
</facet>
<facet type="web" name="Web">
<configuration>
<webroots />
<sourceRoots>
<root url="file://$MODULE_DIR$/src/main/java" />
<root url="file://$MODULE_DIR$/src/main/resources" />
</sourceRoots>
</configuration>
</facet>
</component>
</module>
\ No newline at end of file
...@@ -201,6 +201,17 @@ ...@@ -201,6 +201,17 @@
<artifactId>poi-ooxml</artifactId> <artifactId>poi-ooxml</artifactId>
<version>3.17</version> <version>3.17</version>
</dependency> </dependency>
<dependency>
<groupId>com.cronutils</groupId>
<artifactId>cron-utils</artifactId>
<version>9.0.1</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
</dependencies> </dependencies>
<dependencyManagement> <dependencyManagement>
......
...@@ -7,6 +7,8 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -7,6 +7,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.TaskScheduler; import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer; import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
...@@ -26,9 +28,6 @@ import java.util.concurrent.ScheduledFuture; ...@@ -26,9 +28,6 @@ import java.util.concurrent.ScheduledFuture;
@Configuration @Configuration
public class JobConfig implements SchedulingConfigurer { public class JobConfig implements SchedulingConfigurer {
@Autowired
private ApParamService apParamService;
TaskScheduler taskScheduler; TaskScheduler taskScheduler;
private ScheduledFuture<?> job1; private ScheduledFuture<?> job1;
private ScheduledFuture<?> job2; private ScheduledFuture<?> job2;
...@@ -38,18 +37,18 @@ public class JobConfig implements SchedulingConfigurer { ...@@ -38,18 +37,18 @@ public class JobConfig implements SchedulingConfigurer {
return new CampaignJob(); return new CampaignJob();
} }
@Override // @Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { // public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
//
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler(); // ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(10); // threadPoolTaskScheduler.setPoolSize(10);
threadPoolTaskScheduler.setThreadNamePrefix("scheduler-thread"); // threadPoolTaskScheduler.setThreadNamePrefix("scheduler-thread");
threadPoolTaskScheduler.initialize(); // threadPoolTaskScheduler.initialize();
job1(threadPoolTaskScheduler); // job1(threadPoolTaskScheduler);
job2(threadPoolTaskScheduler); // job2(threadPoolTaskScheduler);
this.taskScheduler = threadPoolTaskScheduler; // this.taskScheduler = threadPoolTaskScheduler;
taskRegistrar.setTaskScheduler(threadPoolTaskScheduler); // taskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
} // }
private void job1(TaskScheduler scheduler) { private void job1(TaskScheduler scheduler) {
job1 = scheduler.schedule(() -> { job1 = scheduler.schedule(() -> {
...@@ -82,8 +81,17 @@ public class JobConfig implements SchedulingConfigurer { ...@@ -82,8 +81,17 @@ public class JobConfig implements SchedulingConfigurer {
// @Override @Override
// public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) { public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
//// scheduledTaskRegistrar.addTriggerTask(() -> campaignJob().process2(), (TriggerContext triggerContext) -> yourService.getCron()); ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
// } threadPoolTaskScheduler.setPoolSize(10);
threadPoolTaskScheduler.setThreadNamePrefix("scheduler-thread");
threadPoolTaskScheduler.initialize();
scheduledTaskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
// scheduledTaskRegistrar.addTriggerTask(() -> campaignJob().process(), (TriggerContext triggerContext) -> yourService.getCron());
scheduledTaskRegistrar.addTriggerTask(() -> campaignJob().process(), triggerContext -> {
CronTrigger trigger = new CronTrigger("0/5 * * * * ?");
return trigger.nextExecutionTime(triggerContext);
});
}
} }
...@@ -8,9 +8,21 @@ import org.springframework.data.jpa.repository.Query; ...@@ -8,9 +8,21 @@ import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Repository @Repository
public interface CampaignRepository extends JpaRepository<Campaign, Long>, CampaignRepositoryCustom { public interface CampaignRepository extends JpaRepository<Campaign, Long>, CampaignRepositoryCustom {
List<Campaign> findAllByCompanySiteId(Long companyId);
List<Campaign> findCampaignByCompanySiteIdAndStartTimeIsLessThanEqualAndStatusIn(Long siteId, Date startTime, List<Long> status);
List<Campaign> findCampaignByCompanySiteIdAndEndTimeIsLessThanEqualAndStatusIn(Long siteId, Date endTime, List<Long> status);
@Query("SELECT COUNT(c.campaignId) " + @Query("SELECT COUNT(c.campaignId) " +
" FROM Campaign c JOIN CampaignCustomer cc ON c.campaignId = cc.campaignId " + " FROM Campaign c JOIN CampaignCustomer cc ON c.campaignId = cc.campaignId " +
" WHERE cc.companySiteId = :pCompanySiteId " + " WHERE cc.companySiteId = :pCompanySiteId " +
......
package com.viettel.campaign.repository;
import com.viettel.campaign.model.ProcessConfig;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author hanv_itsol
* @project campaign
*/
@Repository
public interface ProcessConfigRepository extends JpaRepository<ProcessConfig, Long> {
List<ProcessConfig> findAllByConfigCode(String configCode);
}
...@@ -4,6 +4,9 @@ import com.viettel.campaign.web.dto.CampaignDTO; ...@@ -4,6 +4,9 @@ import com.viettel.campaign.web.dto.CampaignDTO;
import com.viettel.campaign.web.dto.ResultDTO; import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.request_dto.CampaignRequestDTO; import com.viettel.campaign.web.dto.request_dto.CampaignRequestDTO;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map; import java.util.Map;
public interface CampaignService { public interface CampaignService {
...@@ -13,6 +16,14 @@ public interface CampaignService { ...@@ -13,6 +16,14 @@ public interface CampaignService {
ResultDTO findByCampaignCode(CampaignRequestDTO requestDTO); ResultDTO findByCampaignCode(CampaignRequestDTO requestDTO);
List<Campaign> findAllCondition(Long companySiteId);
List<Campaign> findCampaignByCompanySiteIdAndStartTimeIsLessThanEqualAndStatusIn(Long siteId, Date startTime, List<Long> status);
List<Campaign> findCampaignByCompanySiteIdAndEndTimeIsLessThanEqualAndStatusIn(Long siteId, Date startTime, List<Long> status);
Campaign updateProcess(Campaign c);
ResultDTO findByCampaignId(Long campaignId); ResultDTO findByCampaignId(Long campaignId);
ResultDTO addNewCampaign(CampaignDTO campaignDTO); ResultDTO addNewCampaign(CampaignDTO campaignDTO);
......
package com.viettel.campaign.service;
import com.viettel.campaign.model.ProcessConfig;
import com.viettel.campaign.repository.ProcessConfigRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* @author hanv_itsol
* @project campaign
*/
@Service
@Transactional
public class ProcessConfigService {
@Autowired
private ProcessConfigRepository processConfigRepository;
@Transactional(readOnly = true)
public List<ProcessConfig> findAll(){
return processConfigRepository.findAll();
}
@Transactional(readOnly = true)
public List<ProcessConfig> findAllByCode(String configCode){
return processConfigRepository.findAllByConfigCode(configCode);
}
public void update(ProcessConfig pc){
processConfigRepository.save(pc);
}
}
...@@ -21,6 +21,11 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -21,6 +21,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*; import java.util.*;
@Service @Service
...@@ -58,6 +63,26 @@ public class CampaignServiceImpl implements CampaignService { ...@@ -58,6 +63,26 @@ public class CampaignServiceImpl implements CampaignService {
return campaignRepository.findByCampaignCode(requestDTO); return campaignRepository.findByCampaignCode(requestDTO);
} }
@Override
public List<Campaign> findAllCondition(Long companySiteId) {
return campaignRepository.findAllByCompanySiteId(companySiteId);
}
@Override
public List<Campaign> findCampaignByCompanySiteIdAndStartTimeIsLessThanEqualAndStatusIn(Long siteId, Date startTime, List<Long> status) {
return campaignRepository.findCampaignByCompanySiteIdAndStartTimeIsLessThanEqualAndStatusIn(siteId, startTime, status);
}
@Override
public List<Campaign> findCampaignByCompanySiteIdAndEndTimeIsLessThanEqualAndStatusIn(Long siteId, Date endTime, List<Long> status) {
return campaignRepository.findCampaignByCompanySiteIdAndEndTimeIsLessThanEqualAndStatusIn(siteId, endTime, status);
}
@Override
public Campaign updateProcess(Campaign c) {
return campaignRepository.save(c);
}
@Override @Override
public ResultDTO findByCampaignId(Long campaignId) { public ResultDTO findByCampaignId(Long campaignId) {
ResultDTO result = new ResultDTO(); ResultDTO result = new ResultDTO();
......
package com.viettel.campaign.utils; package com.viettel.campaign.utils;
import com.cronutils.model.definition.CronDefinition;
import com.cronutils.model.definition.CronDefinitionBuilder;
import com.cronutils.model.time.ExecutionTime;
import com.cronutils.parser.CronParser;
import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Strings; import org.apache.logging.log4j.util.Strings;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormat;
import org.quartz.CronExpression;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.ZonedDateTime;
import java.util.Date; import java.util.Date;
import java.util.Optional;
import java.util.TimeZone; import java.util.TimeZone;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import static com.cronutils.model.CronType.QUARTZ;
import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static java.util.concurrent.TimeUnit.NANOSECONDS; import static java.util.concurrent.TimeUnit.NANOSECONDS;
/** /**
* @author anhvd_itsol * @author anhvd_itsol
*/ */
@Slf4j
public final class DateTimeUtil { public final class DateTimeUtil {
public static final long DAY_IN_MILLIS = 86400000L; public static final long DAY_IN_MILLIS = 86400000L;
public static interface DateTimeProvider { long now(); } public static interface DateTimeProvider { long now(); }
...@@ -84,4 +98,26 @@ public final class DateTimeUtil { ...@@ -84,4 +98,26 @@ public final class DateTimeUtil {
/** /**
* *
*/ */
public static boolean isRun(String cron, Date lastCheck){
boolean isOk = false;
String format="dd-MMM-YYYY hh:mm:ss";
// String cronExpression="* * 12 ? * FRI *";
SimpleDateFormat sdf = new SimpleDateFormat(format);
CronExpression expression = null;
try {
expression = new CronExpression(cron);
} catch (ParseException e) {
e.printStackTrace();
}
Date currentDate = new Date();
assert expression != null;
Date lastDate = expression.getNextValidTimeAfter(lastCheck);
long interval = lastDate.getTime() - currentDate.getTime();
if(interval <= 0){
isOk = true;
}
return isOk;
}
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment