Commit 727d88c2 authored by Tu Bach's avatar Tu Bach

Merge branch 'master' of https://git.myitsol.com/hanv/service-campaign

# Conflicts:
#	src/main/java/com/viettel/campaign/service/impl/CampaignCompleteCodeServiceImpl.java
parents ff264eb5 fdc88da4
...@@ -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>
......
...@@ -3,7 +3,7 @@ package com.viettel.campaign; ...@@ -3,7 +3,7 @@ package com.viettel.campaign;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication @SpringBootApplication(scanBasePackages={"com.viettel.campaign"})
public class ServiceCampaignApplication { public class ServiceCampaignApplication {
public static void main(String[] args) { public static void main(String[] args) {
......
package com.viettel.campaign.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.*;
import org.springframework.core.env.Environment;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
import java.util.HashMap;
/**
* @author anhvd_itsol
*/
@Configuration
@PropertySource({ "classpath:application.yml" })
@EnableJpaRepositories(
basePackages = "com.viettel.campaign.repository.acd_full",
entityManagerFactoryRef = "acdFullEntityManager",
transactionManagerRef = DataSourceQualify.ACD_FULL
)
public class ACDFullDatasourceConfig {
@Autowired
private Environment env;
@Bean("datasource2.datasource")
public DataSource dataSource(){
OracleDataSource r = new OracleDataSource();
r.setDriverClassName(env.getProperty("spring.datasource2.driver-class-name"));
r.setPoolName("app.datasource2");
r.setJdbcUrl(env.getProperty("spring.datasource2.url"));
r.setMaximumPoolSize(env.getProperty("spring.datasource2.max_pool_size", Integer.class));
r.setPassword(env.getProperty("spring.datasource2.password"));
r.setUsername(env.getProperty("spring.datasource2.username"));
return r;
}
@Bean
public LocalContainerEntityManagerFactoryBean acdFullEntityManager() {
LocalContainerEntityManagerFactoryBean em2
= new LocalContainerEntityManagerFactoryBean();
em2.setDataSource(dataSource());
em2.setPackagesToScan(
new String[] { "com.viettel.campaign.model.acd_full" });
em2.setPersistenceUnitName(DataSourceQualify.JPA_UNIT_NAME_ACD_FULL); // Important !!
HibernateJpaVendorAdapter vendorAdapter
= new HibernateJpaVendorAdapter();
em2.setJpaVendorAdapter(vendorAdapter);
HashMap<String, Object> properties = new HashMap<>();
properties.put("hibernate.dialect", env.getProperty("spring.jpa.database-platform"));
em2.setJpaPropertyMap(properties);
return em2;
}
@Bean(name = DataSourceQualify.ACD_FULL)
public PlatformTransactionManager acdFullTransactionManager() {
JpaTransactionManager transactionManager
= new JpaTransactionManager();
transactionManager.setEntityManagerFactory(
acdFullEntityManager().getObject());
return transactionManager;
}
@Bean(name = DataSourceQualify.NAMED_JDBC_PARAMETER_TEMPLATE_ACD_FULL)
@DependsOn("datasource2.datasource")
public NamedParameterJdbcTemplate namedParameterJdbcTemplate(@Qualifier("datasource2.datasource") DataSource abcDataSource) {
return new NamedParameterJdbcTemplate(abcDataSource);
}
}
package com.viettel.campaign.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
import java.util.HashMap;
/**
* @author anhvd_itsol
*/
@Configuration
@PropertySource({ "classpath:application.yml" })
@EnableJpaRepositories(
basePackages = "com.viettel.campaign.repository.ccms_full",
entityManagerFactoryRef = "ccmsFullEntityManager",
transactionManagerRef = DataSourceQualify.CCMS_FULL
)
public class CCMSFullDatasourceConfig {
@Autowired
private Environment env;
@Bean("datasource1.datasource")
public DataSource dataSource(){
OracleDataSource r = new OracleDataSource();
r.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
r.setPoolName("app.datasource1");
r.setJdbcUrl(env.getProperty("spring.datasource.url"));
r.setMaximumPoolSize(env.getProperty("spring.datasource.max_pool_size", Integer.class));
r.setPassword(env.getProperty("spring.datasource.password"));
r.setUsername(env.getProperty("spring.datasource.username"));
return r;
}
@Bean
public LocalContainerEntityManagerFactoryBean ccmsFullEntityManager() {
LocalContainerEntityManagerFactoryBean em
= new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
em.setPackagesToScan(
new String[] { "com.viettel.campaign.model.ccms_full" });
em.setPersistenceUnitName(DataSourceQualify.JPA_UNIT_NAME_CCMS_FULL); // Important !!
HibernateJpaVendorAdapter vendorAdapter
= new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
HashMap<String, Object> properties = new HashMap<>();
properties.put("hibernate.dialect", env.getProperty("spring.jpa.database-platform"));
em.setJpaPropertyMap(properties);
return em;
}
@Bean(name = DataSourceQualify.CCMS_FULL)
public PlatformTransactionManager ccmsFullTransactionManager() {
JpaTransactionManager transactionManager
= new JpaTransactionManager();
transactionManager.setEntityManagerFactory(
ccmsFullEntityManager().getObject());
return transactionManager;
}
@Bean(name = DataSourceQualify.NAMED_JDBC_PARAMETER_TEMPLATE_CCMS_FULL)
@DependsOn("datasource1.datasource")
public NamedParameterJdbcTemplate namedParameterJdbcTemplate(@Qualifier("datasource1.datasource") DataSource abcDataSource) {
return new NamedParameterJdbcTemplate(abcDataSource);
}
}
package com.viettel.campaign.config;
/**
* @author anhvd_itsol
*/
public class DataSourceQualify {
public static final String CCMS_FULL = "ccmsFullTransactionManager";
public static final String ACD_FULL = "acdFullTransactionManager";
public static final String JPA_UNIT_NAME_CCMS_FULL ="PERSITENCE_UNIT_NAME_1";
public static final String JPA_UNIT_NAME_ACD_FULL ="PERSITENCE_UNIT_NAME_2";
public static final String NAMED_JDBC_PARAMETER_TEMPLATE_CCMS_FULL ="NAMED_JDBC_PARAMETER_TEMPLATE_CCMS_FULL";
public static final String NAMED_JDBC_PARAMETER_TEMPLATE_ACD_FULL ="NAMED_JDBC_PARAMETER_TEMPLATE_ACD_FULL";
}
...@@ -4,14 +4,18 @@ import com.viettel.campaign.job.CampaignJob; ...@@ -4,14 +4,18 @@ import com.viettel.campaign.job.CampaignJob;
import com.viettel.campaign.service.ApParamService; import com.viettel.campaign.service.ApParamService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
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;
import org.springframework.scheduling.config.ScheduledTaskRegistrar; import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger; import org.springframework.scheduling.support.CronTrigger;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date; import java.util.Date;
import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledFuture;
...@@ -26,9 +30,6 @@ import java.util.concurrent.ScheduledFuture; ...@@ -26,9 +30,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 +39,18 @@ public class JobConfig implements SchedulingConfigurer { ...@@ -38,18 +39,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 +83,17 @@ public class JobConfig implements SchedulingConfigurer { ...@@ -82,8 +83,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);
// });
}
} }
package com.viettel.campaign.config;
import com.zaxxer.hikari.HikariDataSource;
/**
* @author anhvd_itsol
*/
public class OracleDataSource extends HikariDataSource {
public OracleDataSource(){
super.addDataSourceProperty("useSSL", "false");
super.addDataSourceProperty("cachePrepStmts", "true");
super.addDataSourceProperty("prepStmtCacheSize", "256");
super.addDataSourceProperty("allowMultiQueries", "true");
super.addDataSourceProperty("useServerPrepStmts", "false");
super.addDataSourceProperty("useLocalSessionState", "true");
super.addDataSourceProperty("prepStmtCacheSqlLimit", "81920");
super.addDataSourceProperty("nullCatalogMeansCurrent", "true");
super.addDataSourceProperty("rewriteBatchedStatements", "false");
super.addDataSourceProperty("useOldAliasMetadataBehavior", "true");
this.setIdleTimeout(600000); this.setConnectionTimeout(18000); this.setMinimumIdle(0);
this.setMaxLifetime(1800000); this.setInitializationFailTimeout(0);
}
}
package com.viettel.campaign.job; package com.viettel.campaign.job;
import com.viettel.campaign.model.ccms_full.Campaign;
import com.viettel.campaign.model.ccms_full.ProcessConfig;
import com.viettel.campaign.service.CampaignService;
import com.viettel.campaign.service.ProcessConfigService;
import com.viettel.campaign.utils.DateTimeUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* @author hanv_itsol * @author hanv_itsol
...@@ -13,11 +23,74 @@ import java.util.Date; ...@@ -13,11 +23,74 @@ import java.util.Date;
@Slf4j @Slf4j
public class CampaignJob { public class CampaignJob {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); private static final SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
private static final String CUSTOMER_INACTIVE_DUARATION = "CUSTOMER_INACTIVE_DUARATION";
private static final String CRON_EXPRESSION_CHECK_START = "CRON_EXPRESSION_CHECK_START";
private static final String CRON_EXPRESSION_CHECK_END = "CRON_EXPRESSION_CHECK_END";
// @Scheduled(fixedRate = 6000) @Autowired
// @Transactional( propagation = Propagation.REQUIRED) private ProcessConfigService processConfigService;
@Autowired
private CampaignService campaignService;
// @Scheduled(fixedRate = 5000)
@Transactional( propagation = Propagation.REQUIRED)
public void process() { public void process() {
// log.info("processing job2 ..."+ dateFormat.format(new Date())); log.info(Thread.currentThread().getName() + " The Task executed at " + dateFormat.format(new Date()));
List<ProcessConfig> list = processConfigService.findAll();
list.parallelStream().forEach(p -> {
boolean isExecute = DateTimeUtil.isRun(p.getConfigValue(), p.getLastProcess());
switch (p.getConfigCode()){
case CUSTOMER_INACTIVE_DUARATION:
if(isExecute){
}
break;
case CRON_EXPRESSION_CHECK_START:
// process
if(isExecute){
// chuyen trang thai Du thao sang Trien khai
log.info("thay doi trang thai");
List<Long> status = new ArrayList<>();
status.add(1L);
status.add(1L);
List<Campaign> campaigns = campaignService.findCampaignByCompanySiteIdAndStartTimeIsLessThanEqualAndStatusIn(p.getSiteId(), new Date(), status);
campaigns.parallelStream().forEach(campaign -> {
campaign.setProcessStatus(1);
campaign.setStatus(2L);
campaign.setCampaignStart(new Date());
campaignService.updateProcess(campaign);
});
// update last check
p.setLastProcess(new Date());
processConfigService.update(p);
}
break;
case CRON_EXPRESSION_CHECK_END:
// process
if(isExecute){
// chuyen trang thai sang ket thuc
List<Long> status = new ArrayList<>();
status.add(2L);
status.add(3L);
List<Campaign> campaigns = campaignService.findCampaignByCompanySiteIdAndEndTimeIsLessThanEqualAndStatusIn(p.getSiteId(), new Date(), status);
campaigns.parallelStream().forEach(campaign -> {
campaign.setStatus(4L);
campaign.setCampaignEnd(new Date());
campaignService.updateProcess(campaign);
});
}
break;
default:
}
});
} }
} }
package com.viettel.campaign.mapper; package com.viettel.campaign.mapper;
import com.viettel.campaign.web.dto.ApParamDTO; import com.viettel.campaign.web.dto.ApParamDTO;
import com.viettel.campaign.model.ApParam; import com.viettel.campaign.model.ccms_full.ApParam;
public class ApParamMapper extends BaseMapper<ApParam, ApParamDTO> { public class ApParamMapper extends BaseMapper<ApParam, ApParamDTO> {
......
package com.viettel.campaign.mapper; package com.viettel.campaign.mapper;
import com.viettel.campaign.web.dto.CampaignCompleteCodeDTO; import com.viettel.campaign.web.dto.CampaignCompleteCodeDTO;
import com.viettel.campaign.model.CampaignCompleteCode; import com.viettel.campaign.model.ccms_full.CampaignCompleteCode;
public class CampaignCompleteCodeMapper extends BaseMapper<CampaignCompleteCode, CampaignCompleteCodeDTO> { public class CampaignCompleteCodeMapper extends BaseMapper<CampaignCompleteCode, CampaignCompleteCodeDTO> {
......
package com.viettel.campaign.mapper; package com.viettel.campaign.mapper;
import com.viettel.campaign.model.CustomerList; import com.viettel.campaign.model.ccms_full.CustomerList;
import com.viettel.campaign.web.dto.CustomerListDTO; import com.viettel.campaign.web.dto.CustomerListDTO;
public class CustomerListMapper extends BaseMapper<CustomerList, CustomerListDTO> { public class CustomerListMapper extends BaseMapper<CustomerList, CustomerListDTO> {
......
package com.viettel.campaign.mapper; package com.viettel.campaign.mapper;
import com.viettel.campaign.web.dto.CustomerDTO; import com.viettel.campaign.web.dto.CustomerDTO;
import com.viettel.campaign.model.Customer; import com.viettel.campaign.model.ccms_full.Customer;
public class CustomerMapper extends BaseMapper<Customer, CustomerDTO> { public class CustomerMapper extends BaseMapper<Customer, CustomerDTO> {
......
package com.viettel.campaign.model; package com.viettel.campaign.model.ccms_full;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
......
package com.viettel.campaign.model; package com.viettel.campaign.model.ccms_full;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
......
package com.viettel.campaign.model; package com.viettel.campaign.model.ccms_full;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
......
package com.viettel.campaign.model; package com.viettel.campaign.model.ccms_full;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
......
package com.viettel.campaign.model; package com.viettel.campaign.model.ccms_full;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
......
package com.viettel.campaign.model; package com.viettel.campaign.model.ccms_full;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
......
package com.viettel.campaign.model; package com.viettel.campaign.model.ccms_full;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
......
package com.viettel.campaign.model; package com.viettel.campaign.model.ccms_full;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
......
package com.viettel.campaign.model; package com.viettel.campaign.model.ccms_full;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
......
package com.viettel.campaign.model; package com.viettel.campaign.model.ccms_full;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
......
package com.viettel.campaign.model.ccms_full;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
/**
* @author hanv_itsol
* @project campaign
*/
@Entity
@Table(name = "PROCESS_CONFIG")
@Data
public class ProcessConfig implements Serializable {
@Id
@NotNull
@Column(name = "CONFIG_ID")
private Long configId;
@Column(name = "CONFIG_NAME")
private String configName;
@Column(name = "CONFIG_CODE")
private String configCode;
@Column(name = "CONFIG_VALUE")
private String configValue;
@Column(name = "LAST_PROCESS")
private Date lastProcess;
@Column(name = "COMPANY_SITE_ID")
private Long siteId;
}
package com.viettel.campaign.model; package com.viettel.campaign.model.ccms_full;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
......
package com.viettel.campaign.model; package com.viettel.campaign.model.ccms_full;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
......
package com.viettel.campaign.model; package com.viettel.campaign.model.ccms_full;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
......
package com.viettel.campaign.model; package com.viettel.campaign.model.ccms_full;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
......
package com.viettel.campaign.model; package com.viettel.campaign.model.ccms_full;
import javax.persistence.Entity; import javax.persistence.Entity;
import lombok.Getter; import lombok.Getter;
......
package com.viettel.campaign.repository;
import com.viettel.campaign.model.CampaignCompleteCode;
public interface CampaignCompleteCodeRepositoryCustom {
// CampaignCompleteCode updateStatusById(Long id);
// CampaignCompleteCode findMaxValueCampaignType(Long companySiteId);
}
package com.viettel.campaign.repository; package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.ApParam; import com.viettel.campaign.model.ccms_full.ApParam;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
......
package com.viettel.campaign.repository; package com.viettel.campaign.repository.ccms_full;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
......
package com.viettel.campaign.repository; package com.viettel.campaign.repository.ccms_full;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
......
package com.viettel.campaign.repository; package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.CampaignCompleteCode; import com.viettel.campaign.model.ccms_full.CampaignCompleteCode;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
...@@ -12,7 +12,7 @@ import org.springframework.stereotype.Repository; ...@@ -12,7 +12,7 @@ import org.springframework.stereotype.Repository;
import java.util.List; import java.util.List;
@Repository @Repository
public interface CampaignCompleteCodeRepository extends JpaRepository<CampaignCompleteCode, Long>, CampaignCompleteCodeRepositoryCustom { public interface CampaignCompleteCodeRepository extends JpaRepository<CampaignCompleteCode, Long>{
@Query(" select u FROM CampaignCompleteCode u WHERE u.status = 1") @Query(" select u FROM CampaignCompleteCode u WHERE u.status = 1")
Page<CampaignCompleteCode> findAll(Pageable pageable); Page<CampaignCompleteCode> findAll(Pageable pageable);
......
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.ccms_full.CampaignCompleteCode;
public interface CampaignCompleteCodeRepositoryCustom {
CampaignCompleteCode updateStatusById(Long id);
CampaignCompleteCode findMaxValueCampaignType(Long companySiteId);
}
package com.viettel.campaign.repository; package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.CampaignCustomerList; import com.viettel.campaign.model.ccms_full.CampaignCustomerList;
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;
......
package com.viettel.campaign.repository; package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.CampaignCustomer; import com.viettel.campaign.model.ccms_full.CampaignCustomer;
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;
......
package com.viettel.campaign.repository; package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.web.dto.ApParamDTO; import com.viettel.campaign.web.dto.ApParamDTO;
import com.viettel.campaign.web.dto.ContactCustResultDTO; import com.viettel.campaign.web.dto.ContactCustResultDTO;
......
package com.viettel.campaign.repository; package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.Campaign; import com.viettel.campaign.model.ccms_full.Campaign;
import com.viettel.campaign.web.dto.CampaignDTO;
import com.viettel.campaign.web.dto.ResultDTO;
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 org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
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> {
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 " +
......
package com.viettel.campaign.repository; package com.viettel.campaign.repository.ccms_full;
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;
...@@ -13,4 +13,6 @@ public interface CampaignRepositoryCustom { ...@@ -13,4 +13,6 @@ public interface CampaignRepositoryCustom {
ResultDTO findByCampaignCode(CampaignRequestDTO requestDTO); ResultDTO findByCampaignCode(CampaignRequestDTO requestDTO);
String getMaxCampaignIndex(); String getMaxCampaignIndex();
ResultDTO checkAllowStatusToPrepare (Long campaignId);
} }
package com.viettel.campaign.repository; package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.CustomerContact; import com.viettel.campaign.model.ccms_full.CustomerContact;
import org.springframework.data.domain.Pageable; 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;
......
package com.viettel.campaign.repository; package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.CustomerListMapping; import com.viettel.campaign.model.ccms_full.CustomerListMapping;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
......
package com.viettel.campaign.repository; package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.CustomerList; import com.viettel.campaign.model.ccms_full.CustomerList;
import com.viettel.campaign.web.dto.ResultDTO;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
...@@ -23,6 +22,6 @@ public interface CustomerListRepository extends JpaRepository<CustomerList, Long ...@@ -23,6 +22,6 @@ public interface CustomerListRepository extends JpaRepository<CustomerList, Long
@Query("update CustomerList c set c.status = 0 where c.customerListId in (:p_ids) and c.companySiteId=:p_company_site_id") @Query("update CustomerList c set c.status = 0 where c.customerListId in (:p_ids) and c.companySiteId=:p_company_site_id")
int deleteCustomerListIds(@Param("p_ids") List<Long> p_ids, @Param("p_company_site_id") Long p_company_site_id); int deleteCustomerListIds(@Param("p_ids") List<Long> p_ids, @Param("p_company_site_id") Long p_company_site_id);
@Query(value = "SELECT * FROM (SELECT *, MAX(CREATE_AT) OVER() AS LATEST_CREATED FROM CUSTOMER_LIST) WHERE CREATE_AT = LATEST_CREATED", nativeQuery = true) @Query(value = "SELECT * FROM (SELECT c.*, MAX(c.CREATE_AT) OVER() AS LATEST_CREATED FROM CUSTOMER_LIST c) WHERE CREATE_AT = LATEST_CREATED AND COMPANY_SITE_ID =:p_company_site_id", nativeQuery = true)
CustomerList latestCreated(); CustomerList latestCreated(@Param("p_company_site_id") Long p_company_site_id);
} }
package com.viettel.campaign.repository; package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.Customer; import com.viettel.campaign.model.ccms_full.Customer;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
......
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.ccms_full.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);
}
package com.viettel.campaign.repository; package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.Ticket; import com.viettel.campaign.model.ccms_full.Ticket;
public interface TicketRepository extends BaseRepository<Ticket>, TicketRepositoryCustom { public interface TicketRepository extends BaseRepository<Ticket>, TicketRepositoryCustom {
} }
package com.viettel.campaign.repository; package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.web.dto.TicketDTO; import com.viettel.campaign.web.dto.TicketDTO;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
......
package com.viettel.campaign.repository; package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.TimeRangeDialMode; import com.viettel.campaign.model.ccms_full.TimeRangeDialMode;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
......
package com.viettel.campaign.repository; package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.TimeZoneDialMode; import com.viettel.campaign.model.ccms_full.TimeZoneDialMode;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
......
package com.viettel.campaign.repository; package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.web.dto.ResultDTO; import com.viettel.campaign.web.dto.ResultDTO;
......
package com.viettel.campaign.repository.impl; package com.viettel.campaign.repository.ccms_full.impl;
import com.viettel.campaign.repository.ApParamRepositoryCustom; import com.viettel.campaign.repository.ccms_full.ApParamRepositoryCustom;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
......
package com.viettel.campaign.repository.impl; package com.viettel.campaign.repository.ccms_full.impl;
import com.viettel.campaign.model.CampaignCompleteCode; import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.repository.CampaignCompleteCodeRepositoryCustom; import com.viettel.campaign.model.ccms_full.CampaignCompleteCode;
import com.viettel.campaign.web.dto.ResultDTO; import com.viettel.campaign.repository.ccms_full.CampaignCompleteCodeRepositoryCustom;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Repository @Repository
public class CampaignCompleteCompleteCodeRepositoryIpml implements CampaignCompleteCodeRepositoryCustom { public class CampaignCompleteCompleteCodeRepositoryIpml implements CampaignCompleteCodeRepositoryCustom {
@Autowired @Autowired
EntityManager entityManager; @PersistenceContext( unitName= DataSourceQualify.JPA_UNIT_NAME_CCMS_FULL)
private EntityManager entityManager;
private Logger log = LoggerFactory.getLogger(CampaignCompleteCompleteCodeRepositoryIpml.class); private Logger log = LoggerFactory.getLogger(CampaignCompleteCompleteCodeRepositoryIpml.class);
@Transactional @Override
// @Transactional(DataSourceQualify.CCMS_FULL)
public CampaignCompleteCode updateStatusById(Long id) { public CampaignCompleteCode updateStatusById(Long id) {
CampaignCompleteCode dto = new CampaignCompleteCode(); CampaignCompleteCode dto = new CampaignCompleteCode();
try { try {
...@@ -32,7 +34,8 @@ public class CampaignCompleteCompleteCodeRepositoryIpml implements CampaignCompl ...@@ -32,7 +34,8 @@ public class CampaignCompleteCompleteCodeRepositoryIpml implements CampaignCompl
return dto; return dto;
} }
@Transactional @Override
// @Transactional(DataSourceQualify.CCMS_FULL)
public CampaignCompleteCode findMaxValueCampaignType(Long companySiteId) { public CampaignCompleteCode findMaxValueCampaignType(Long companySiteId) {
CampaignCompleteCode result = new CampaignCompleteCode(); CampaignCompleteCode result = new CampaignCompleteCode();
try { try {
......
package com.viettel.campaign.repository.impl; package com.viettel.campaign.repository.ccms_full.impl;
import com.viettel.campaign.repository.CampaignRepositoryCustom; import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.repository.ccms_full.CampaignRepositoryCustom;
import com.viettel.campaign.utils.Constants; import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.utils.DataUtil; import com.viettel.campaign.utils.DataUtil;
import com.viettel.campaign.utils.HibernateUtil; import com.viettel.campaign.utils.HibernateUtil;
...@@ -20,6 +21,7 @@ import org.springframework.data.domain.*; ...@@ -20,6 +21,7 @@ import org.springframework.data.domain.*;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query; import javax.persistence.Query;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -32,6 +34,7 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom { ...@@ -32,6 +34,7 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
private static final Logger logger = LogManager.getLogger(CampaignRepositoryImpl.class); private static final Logger logger = LogManager.getLogger(CampaignRepositoryImpl.class);
@Autowired @Autowired
@PersistenceContext( unitName= DataSourceQualify.JPA_UNIT_NAME_CCMS_FULL)
EntityManager entityManager; EntityManager entityManager;
@Override @Override
...@@ -192,7 +195,7 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom { ...@@ -192,7 +195,7 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
if (!DataUtil.isNullOrEmpty(requestDto.getCampaignName())) { if (!DataUtil.isNullOrEmpty(requestDto.getCampaignName())) {
sqlStr.append(" AND UPPER(a.CAMPAIGN_NAME) LIKE :p_name"); sqlStr.append(" AND UPPER(a.CAMPAIGN_NAME) LIKE :p_name");
} }
if (requestDto.getStatus() != null && requestDto.getStatus() > 0) { if (requestDto.getStatus() != null && requestDto.getStatus() >= 0) {
sqlStr.append(" AND a.STATUS = :p_status"); sqlStr.append(" AND a.STATUS = :p_status");
} }
if (!DataUtil.isNullOrEmpty(requestDto.getFromDateFr())) { if (!DataUtil.isNullOrEmpty(requestDto.getFromDateFr())) {
...@@ -245,7 +248,7 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom { ...@@ -245,7 +248,7 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
query.setParameter("p_company_site_id", requestDto.getCompanySiteId()); query.setParameter("p_company_site_id", requestDto.getCompanySiteId());
if (requestDto.getStatus() != null && requestDto.getStatus() > 0) { if (requestDto.getStatus() != null && requestDto.getStatus() >= 0) {
query.setParameter("p_status", requestDto.getStatus()); query.setParameter("p_status", requestDto.getStatus());
} }
if (!DataUtil.isNullOrEmpty(requestDto.getFromDateFr())) { if (!DataUtil.isNullOrEmpty(requestDto.getFromDateFr())) {
...@@ -285,8 +288,17 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom { ...@@ -285,8 +288,17 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
query.addScalar("customerNumber", new LongType()); query.addScalar("customerNumber", new LongType());
query.addScalar("status", new ShortType()); query.addScalar("status", new ShortType());
query.addScalar("numOfJoinedCus", new LongType()); query.addScalar("numOfJoinedCus", new LongType());
query.addScalar("numOfNotJoinedCus", new LongType()); query.addScalar("numOfInteractedCus", new LongType());
query.addScalar("numOfNotInteractedCus", new LongType());
query.addScalar("numOfLockCus", new LongType()); query.addScalar("numOfLockCus", new LongType());
query.addScalar("companySiteId", new LongType());
query.addScalar("content", new StringType());
query.addScalar("maxRecall", new IntegerType());
query.addScalar("recallType", new IntegerType());
query.addScalar("recallDuration", new IntegerType());
query.addScalar("currentTimeMode", new LongType());
query.addScalar("wrapupTimeConnect", new LongType());
query.addScalar("wrapupTimeDisconnect", new LongType());
query.setResultTransformer(Transformers.aliasToBean(CampaignDTO.class)); query.setResultTransformer(Transformers.aliasToBean(CampaignDTO.class));
int count = 0; int count = 0;
...@@ -294,14 +306,19 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom { ...@@ -294,14 +306,19 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
if (list.size() > 0) { if (list.size() > 0) {
count = query.list().size(); count = query.list().size();
} }
Pageable pageable = SQLBuilder.buildPageable(requestDto); if(requestDto.getPage() != null && requestDto.getPageSize() != null) {
if (pageable != null) { Pageable pageable = SQLBuilder.buildPageable(requestDto);
query.setFirstResult(pageable.getPageNumber() * pageable.getPageSize()); if (pageable != null) {
query.setMaxResults(pageable.getPageSize()); query.setFirstResult(pageable.getPageNumber() * pageable.getPageSize());
query.setMaxResults(pageable.getPageSize());
}
List<CampaignDTO> data = query.list();
Page<CampaignDTO> dataPage = new PageImpl<>(data, pageable, count);
result.setData(dataPage);
}else {
List<CampaignDTO> dataExport = query.list();
result.setData(dataExport);
} }
List<CampaignDTO> data = query.list();
Page<CampaignDTO> dataPage = new PageImpl<>(data, pageable, count);
result.setData(dataPage);
result.setErrorCode(Constants.ApiErrorCode.SUCCESS); result.setErrorCode(Constants.ApiErrorCode.SUCCESS);
result.setDescription(Constants.ApiErrorDesc.SUCCESS); result.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception ex) { } catch (Exception ex) {
...@@ -407,4 +424,36 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom { ...@@ -407,4 +424,36 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
return null; return null;
} }
@Override
public ResultDTO checkAllowStatusToPrepare(Long campaignId) {
logger.info("Start check allow campaign status to prepare::");
ResultDTO result = new ResultDTO();
if(DataUtil.isNullOrZero(campaignId)) {
result.setErrorCode(Constants.ApiErrorCode.ERROR);
result.setDescription(Constants.ApiErrorDesc.ERROR);
return result;
}
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
try {
StringBuilder sqlStr = new StringBuilder();
sqlStr.append(SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_MNG, "check-allow-campaign-status-to-prepare"));
SQLQuery query = session.createSQLQuery(sqlStr.toString());
query.setParameter("p_campaignId", campaignId);
List<Object[]> list = query.list();
if(list.size() > 0) {
result.setData(list.get(0));
result.setErrorCode(Constants.ApiErrorCode.SUCCESS);
result.setDescription(Constants.ApiErrorDesc.SUCCESS);
}
}catch (Exception ex) {
logger.error(ex.getMessage(), ex);
result.setErrorCode(Constants.ApiErrorCode.ERROR);
result.setDescription(Constants.ApiErrorDesc.ERROR);
}finally {
session.close();
}
return result;
}
} }
package com.viettel.campaign.repository.impl; package com.viettel.campaign.repository.ccms_full.impl;
import com.viettel.campaign.repository.TicketRepositoryCustom; import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.repository.ccms_full.TicketRepositoryCustom;
import com.viettel.campaign.web.dto.TicketDTO; import com.viettel.campaign.web.dto.TicketDTO;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query; import javax.persistence.Query;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -15,6 +17,7 @@ import java.util.List; ...@@ -15,6 +17,7 @@ import java.util.List;
public class TicketRepositoryImpl implements TicketRepositoryCustom { public class TicketRepositoryImpl implements TicketRepositoryCustom {
@Autowired @Autowired
@PersistenceContext( unitName= DataSourceQualify.JPA_UNIT_NAME_CCMS_FULL)
EntityManager entityManager; EntityManager entityManager;
@Override @Override
......
package com.viettel.campaign.repository.impl; package com.viettel.campaign.repository.ccms_full.impl;
import com.viettel.campaign.repository.UserActionLogRepositoryCustom; import com.viettel.campaign.repository.ccms_full.UserActionLogRepositoryCustom;
import com.viettel.campaign.utils.Constants; import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.utils.HibernateUtil; import com.viettel.campaign.utils.HibernateUtil;
import com.viettel.campaign.utils.SQLBuilder; import com.viettel.campaign.utils.SQLBuilder;
......
...@@ -2,7 +2,7 @@ package com.viettel.campaign.service; ...@@ -2,7 +2,7 @@ package com.viettel.campaign.service;
import com.viettel.campaign.web.dto.ApParamDTO; import com.viettel.campaign.web.dto.ApParamDTO;
import com.viettel.campaign.web.dto.ResultDTO; import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.model.ApParam; import com.viettel.campaign.model.ccms_full.ApParam;
import java.util.List; import java.util.List;
......
...@@ -26,6 +26,6 @@ public interface CampaignCompleteCodeService { ...@@ -26,6 +26,6 @@ public interface CampaignCompleteCodeService {
ResultDTO getListStatus(String completeValue, Short completeType, Long companySiteId); ResultDTO getListStatus(String completeValue, Short completeType, Long companySiteId);
ResultDTO getListStatusWithoutValue(String completeValue, Short completeType, Long companySiteId); ResultDTO getListStatusWithoutType(String completeValue, Short completeType, Long companySiteId);
} }
package com.viettel.campaign.service; package com.viettel.campaign.service;
import com.viettel.campaign.model.ccms_full.Campaign;
import com.viettel.campaign.web.dto.CampaignDTO; 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 org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.util.Date;
import java.util.List;
import java.util.Map; import java.util.Map;
public interface CampaignService { public interface CampaignService {
...@@ -13,6 +17,14 @@ public interface CampaignService { ...@@ -13,6 +17,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);
...@@ -22,4 +34,8 @@ public interface CampaignService { ...@@ -22,4 +34,8 @@ public interface CampaignService {
ResultDTO findCampaignById(Long campaignId); ResultDTO findCampaignById(Long campaignId);
ResultDTO changeCampaignStatus(CampaignDTO dto); ResultDTO changeCampaignStatus(CampaignDTO dto);
ResultDTO checkAllowStatusToPrepare(Long campaignId);
XSSFWorkbook exportCampaigns(CampaignRequestDTO dto);
} }
package com.viettel.campaign.service; package com.viettel.campaign.service;
import com.viettel.campaign.model.CustomerList; import com.viettel.campaign.model.ccms_full.CustomerList;
import com.viettel.campaign.web.dto.CustomerContactDTO; import com.viettel.campaign.web.dto.CustomerContactDTO;
import com.viettel.campaign.web.dto.CustomerDTO; import com.viettel.campaign.web.dto.CustomerDTO;
import com.viettel.campaign.web.dto.CustomerListDTO; import com.viettel.campaign.web.dto.CustomerListDTO;
...@@ -36,7 +36,7 @@ public interface CustomerService { ...@@ -36,7 +36,7 @@ public interface CustomerService {
ResultDTO searchCustomerList(SearchCustomerRequestDTO searchCustomerRequestDTO); ResultDTO searchCustomerList(SearchCustomerRequestDTO searchCustomerRequestDTO);
CustomerList getLatestCreated(); CustomerList getLatestCreated(Long companySiteId);
// ------------ customer contact ------------ // // ------------ customer contact ------------ //
......
package com.viettel.campaign.service;
import com.viettel.campaign.model.ccms_full.ProcessConfig;
import com.viettel.campaign.repository.ccms_full.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);
}
}
package com.viettel.campaign.service.impl; package com.viettel.campaign.service.impl;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.service.ApParamService; import com.viettel.campaign.service.ApParamService;
import com.viettel.campaign.utils.Constants; import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.web.dto.ApParamDTO; import com.viettel.campaign.web.dto.ApParamDTO;
import com.viettel.campaign.web.dto.ResultDTO; import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.mapper.ApParamMapper; import com.viettel.campaign.mapper.ApParamMapper;
import com.viettel.campaign.model.ApParam; import com.viettel.campaign.model.ccms_full.ApParam;
import com.viettel.campaign.repository.ApParamRepository; import com.viettel.campaign.repository.ccms_full.ApParamRepository;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
...@@ -14,8 +15,10 @@ import org.springframework.stereotype.Service; ...@@ -14,8 +15,10 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.springframework.transaction.annotation.Transactional;
@Service @Service
public class ApParamServiceImpl implements ApParamService { public class ApParamServiceImpl implements ApParamService {
...@@ -26,11 +29,13 @@ public class ApParamServiceImpl implements ApParamService { ...@@ -26,11 +29,13 @@ public class ApParamServiceImpl implements ApParamService {
private static final Logger logger = LogManager.getLogger(ApParamServiceImpl.class); private static final Logger logger = LogManager.getLogger(ApParamServiceImpl.class);
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public Iterable<ApParam> getAllParams(int page, int pageSize, String sort) { public Iterable<ApParam> getAllParams(int page, int pageSize, String sort) {
return apParamRepository.findAll(PageRequest.of(page, pageSize, Sort.by(sort))); return apParamRepository.findAll(PageRequest.of(page, pageSize, Sort.by(sort)));
} }
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public List<ApParam> getParamByName(int page, int pageSize, String sort, String parName) { public List<ApParam> getParamByName(int page, int pageSize, String sort, String parName) {
List<ApParam> lst = new ArrayList<>(); List<ApParam> lst = new ArrayList<>();
...@@ -41,6 +46,7 @@ public class ApParamServiceImpl implements ApParamService { ...@@ -41,6 +46,7 @@ public class ApParamServiceImpl implements ApParamService {
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO createApParam(ApParamDTO apParamDTO) { public ResultDTO createApParam(ApParamDTO apParamDTO) {
ResultDTO result = new ResultDTO(); ResultDTO result = new ResultDTO();
ApParamMapper apParamMapper = new ApParamMapper(); ApParamMapper apParamMapper = new ApParamMapper();
...@@ -67,6 +73,7 @@ public class ApParamServiceImpl implements ApParamService { ...@@ -67,6 +73,7 @@ public class ApParamServiceImpl implements ApParamService {
} }
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO findParamByParType(String parType) { public ResultDTO findParamByParType(String parType) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
try { try {
......
package com.viettel.campaign.service.impl; package com.viettel.campaign.service.impl;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.mapper.CampaignCompleteCodeMapper; import com.viettel.campaign.mapper.CampaignCompleteCodeMapper;
import com.viettel.campaign.model.CampaignCompleteCode; import com.viettel.campaign.model.ccms_full.CampaignCompleteCode;
import com.viettel.campaign.repository.CampaignCompleteCodeRepository; import com.viettel.campaign.repository.ccms_full.CampaignCompleteCodeRepository;
import com.viettel.campaign.service.CampaignCompleteCodeService; import com.viettel.campaign.service.CampaignCompleteCodeService;
import com.viettel.campaign.utils.Constants; import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.utils.DataUtil; import com.viettel.campaign.utils.DataUtil;
...@@ -36,6 +37,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ ...@@ -36,6 +37,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ
CampaignCompleteCodeRepository completeCodeRepository; CampaignCompleteCodeRepository completeCodeRepository;
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public Map listAllCompleteCode(int page, int pageSize, String sort) { public Map listAllCompleteCode(int page, int pageSize, String sort) {
Map result = new HashMap(); Map result = new HashMap();
Page<CampaignCompleteCode> pg = completeCodeRepository.findAll(PageRequest.of(page, pageSize, Sort.by(sort))); Page<CampaignCompleteCode> pg = completeCodeRepository.findAll(PageRequest.of(page, pageSize, Sort.by(sort)));
...@@ -45,6 +47,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ ...@@ -45,6 +47,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ
} }
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public Map listCompleteCodeByName(int page, int pageSize, String sort, String name) { public Map listCompleteCodeByName(int page, int pageSize, String sort, String name) {
Map result = new HashMap(); Map result = new HashMap();
List<CampaignCompleteCode> lst = new ArrayList<>(); List<CampaignCompleteCode> lst = new ArrayList<>();
...@@ -60,6 +63,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ ...@@ -60,6 +63,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ
} }
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO createCompleteCode(CampaignCompleteCodeDTO completeCodeDTO) { public ResultDTO createCompleteCode(CampaignCompleteCodeDTO completeCodeDTO) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
CampaignCompleteCodeMapper compCodeMapper = new CampaignCompleteCodeMapper(); CampaignCompleteCodeMapper compCodeMapper = new CampaignCompleteCodeMapper();
...@@ -86,6 +90,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ ...@@ -86,6 +90,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ
} }
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO updateCompleteCode(CampaignCompleteCodeDTO completeCodeDTO) { public ResultDTO updateCompleteCode(CampaignCompleteCodeDTO completeCodeDTO) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
CampaignCompleteCodeMapper compCodeMapper = new CampaignCompleteCodeMapper(); CampaignCompleteCodeMapper compCodeMapper = new CampaignCompleteCodeMapper();
...@@ -112,6 +117,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ ...@@ -112,6 +117,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ
} }
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO deleteCompleteCode(CampaignCompleteCodeDTO completeCodeDTO) { public ResultDTO deleteCompleteCode(CampaignCompleteCodeDTO completeCodeDTO) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
CampaignCompleteCodeMapper compCodeMapper = new CampaignCompleteCodeMapper(); CampaignCompleteCodeMapper compCodeMapper = new CampaignCompleteCodeMapper();
...@@ -136,8 +142,8 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ ...@@ -136,8 +142,8 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ
return resultDTO; return resultDTO;
} }
@Transactional
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO deleteList(List<Long> completeCodeDtos) { public ResultDTO deleteList(List<Long> completeCodeDtos) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
try { try {
...@@ -156,6 +162,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ ...@@ -156,6 +162,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ
} }
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO deleteById(Long id) { public ResultDTO deleteById(Long id) {
ResultDTO result = new ResultDTO(); ResultDTO result = new ResultDTO();
...@@ -172,7 +179,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ ...@@ -172,7 +179,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ
return result; return result;
} }
// @Override // @Override
// public ResultDTO findMaxValueCampaignCompleteCode(CampaignCompleteCodeDTO completeCodeDTO) { // public ResultDTO findMaxValueCampaignCompleteCode(CampaignCompleteCodeDTO completeCodeDTO) {
// ResultDTO resultDTO = new ResultDTO(); // ResultDTO resultDTO = new ResultDTO();
// CampaignCompleteCodeMapper campaignCompleteCodeMapper = new CampaignCompleteCodeMapper(); // CampaignCompleteCodeMapper campaignCompleteCodeMapper = new CampaignCompleteCodeMapper();
...@@ -203,6 +210,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ ...@@ -203,6 +210,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ
// } // }
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO findMaxValueCampaignCompleteCode(CampaignCompleteCodeDTO completeCodeDTO) { public ResultDTO findMaxValueCampaignCompleteCode(CampaignCompleteCodeDTO completeCodeDTO) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
...@@ -252,6 +260,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ ...@@ -252,6 +260,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ
} }
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getListStatus(String completeValue, Short completeType, Long companySiteId) { public ResultDTO getListStatus(String completeValue, Short completeType, Long companySiteId) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
try { try {
...@@ -268,7 +277,8 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ ...@@ -268,7 +277,8 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ
} }
@Override @Override
public ResultDTO getListStatusWithoutValue(String completeValue, Short completeType, Long companySiteId) { @Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getListStatusWithoutType(String completeValue, Short completeType, Long companySiteId) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
try { try {
List<CampaignCompleteCode> list = completeCodeRepository.getCustomerStatusWithoutValue(completeValue, completeType, companySiteId); List<CampaignCompleteCode> list = completeCodeRepository.getCustomerStatusWithoutValue(completeValue, completeType, companySiteId);
...@@ -282,7 +292,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ ...@@ -282,7 +292,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ
return resultDTO; return resultDTO;
} }
// @Override // @Override
// public ResultDTO findMaxValueCampaignCompleteCode(CampaignCompleteCodeDTO completeCodeDTO) { // public ResultDTO findMaxValueCampaignCompleteCode(CampaignCompleteCodeDTO completeCodeDTO) {
// ResultDTO result = new ResultDTO(); // ResultDTO result = new ResultDTO();
// CampaignCompleteCodeMapper campaignCompleteCodeMapper = new CampaignCompleteCodeMapper(); // CampaignCompleteCodeMapper campaignCompleteCodeMapper = new CampaignCompleteCodeMapper();
......
package com.viettel.campaign.service.impl; package com.viettel.campaign.service.impl;
import com.viettel.campaign.repository.CampaignExecuteRepository; import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.repository.ccms_full.CampaignExecuteRepository;
import com.viettel.campaign.service.CampaignExecuteService; import com.viettel.campaign.service.CampaignExecuteService;
import com.viettel.campaign.utils.BundleUtils; import com.viettel.campaign.utils.BundleUtils;
import com.viettel.campaign.utils.Constants; import com.viettel.campaign.utils.Constants;
...@@ -8,7 +9,6 @@ import com.viettel.campaign.web.dto.ApParamDTO; ...@@ -8,7 +9,6 @@ import com.viettel.campaign.web.dto.ApParamDTO;
import com.viettel.campaign.web.dto.ContactCustResultDTO; import com.viettel.campaign.web.dto.ContactCustResultDTO;
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 org.apache.commons.collections4.BagUtils;
import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
...@@ -16,8 +16,8 @@ import org.slf4j.Logger; ...@@ -16,8 +16,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -34,6 +34,7 @@ public class CampaignExecuteServiceImp implements CampaignExecuteService { ...@@ -34,6 +34,7 @@ public class CampaignExecuteServiceImp implements CampaignExecuteService {
//<editor-fold: hungtt> //<editor-fold: hungtt>
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getComboBoxStatus(String companySiteId, String completeType) { public ResultDTO getComboBoxStatus(String companySiteId, String completeType) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
try { try {
...@@ -48,6 +49,7 @@ public class CampaignExecuteServiceImp implements CampaignExecuteService { ...@@ -48,6 +49,7 @@ public class CampaignExecuteServiceImp implements CampaignExecuteService {
} }
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getComboCampaignType(String companySiteId) { public ResultDTO getComboCampaignType(String companySiteId) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
try { try {
...@@ -62,6 +64,7 @@ public class CampaignExecuteServiceImp implements CampaignExecuteService { ...@@ -62,6 +64,7 @@ public class CampaignExecuteServiceImp implements CampaignExecuteService {
} }
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO searchInteractiveResult(CampaignRequestDTO dto) { public ResultDTO searchInteractiveResult(CampaignRequestDTO dto) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
try { try {
...@@ -73,6 +76,7 @@ public class CampaignExecuteServiceImp implements CampaignExecuteService { ...@@ -73,6 +76,7 @@ public class CampaignExecuteServiceImp implements CampaignExecuteService {
} }
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public XSSFWorkbook exportInteractiveResult(CampaignRequestDTO dto) { public XSSFWorkbook exportInteractiveResult(CampaignRequestDTO dto) {
Locale locale = Locale.forLanguageTag("vi"); Locale locale = Locale.forLanguageTag("vi");
List<ContactCustResultDTO> list = campaignExecuteRepository.getExcelInteractiveResult(dto); List<ContactCustResultDTO> list = campaignExecuteRepository.getExcelInteractiveResult(dto);
...@@ -156,20 +160,20 @@ public class CampaignExecuteServiceImp implements CampaignExecuteService { ...@@ -156,20 +160,20 @@ public class CampaignExecuteServiceImp implements CampaignExecuteService {
for (int i = 0, rowIndex = 1; i < list.size(); i++) { for (int i = 0, rowIndex = 1; i < list.size(); i++) {
Row row = sheet.createRow(startRowTable + count); Row row = sheet.createRow(startRowTable + count);
int col = 0; int col = 0;
writeCellContent(row, styleRow, col++, rowIndex); writeCellContent(row, styleRow, col++, rowIndex);
writeCellContent(row, styleRow, col++, list.get(i).getCampaignCode()); writeCellContent(row, styleRow, col++, list.get(i).getCampaignCode());
writeCellContent(row, styleRow, col++, list.get(i).getCampaignName()); writeCellContent(row, styleRow, col++, list.get(i).getCampaignName());
writeCellContent(row, styleRow, col++, list.get(i).getAgentId()); writeCellContent(row, styleRow, col++, list.get(i).getAgentId());
writeCellContent(row, styleRow, col++, list.get(i).getPhoneNumber()); writeCellContent(row, styleRow, col++, list.get(i).getPhoneNumber());
writeCellContent(row, styleRow, col++, list.get(i).getCustomerId()); writeCellContent(row, styleRow, col++, list.get(i).getCustomerId());
writeCellContent(row, styleRow, col++, list.get(i).getCustomerName()); writeCellContent(row, styleRow, col++, list.get(i).getCustomerName());
writeCellContent(row, styleRow, col++, formatter.format(list.get(i).getCreateTime())); writeCellContent(row, styleRow, col++, formatter.format(list.get(i).getCreateTime()));
writeCellContent(row, styleRow, col++, list.get(i).getContactStatus()); writeCellContent(row, styleRow, col++, list.get(i).getContactStatus());
writeCellContent(row, styleRow, col++, list.get(i).getSurveyStatus()); writeCellContent(row, styleRow, col++, list.get(i).getSurveyStatus());
writeCellContent(row, styleRow, col++, list.get(i).getStatus()); writeCellContent(row, styleRow, col++, list.get(i).getStatus());
writeCellContent(row, styleRow, col++, list.get(i).getRecordStatus()); writeCellContent(row, styleRow, col++, list.get(i).getRecordStatus());
++rowIndex; ++rowIndex;
++count; ++count;
} }
return workbook; return workbook;
} }
......
package com.viettel.campaign.service.impl; package com.viettel.campaign.service.impl;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.mapper.CustomerListMapper; import com.viettel.campaign.mapper.CustomerListMapper;
import com.viettel.campaign.mapper.CustomerMapper; import com.viettel.campaign.mapper.CustomerMapper;
import com.viettel.campaign.model.Customer; import com.viettel.campaign.model.ccms_full.Customer;
import com.viettel.campaign.model.CustomerContact; import com.viettel.campaign.model.ccms_full.CustomerContact;
import com.viettel.campaign.model.CustomerList; import com.viettel.campaign.model.ccms_full.CustomerList;
import com.viettel.campaign.repository.*; import com.viettel.campaign.repository.ccms_full.*;
import com.viettel.campaign.service.CustomerService; import com.viettel.campaign.service.CustomerService;
import com.viettel.campaign.utils.Constants; import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.utils.DataUtil; import com.viettel.campaign.utils.DataUtil;
...@@ -28,6 +29,7 @@ import org.springframework.stereotype.Service; ...@@ -28,6 +29,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query; import javax.persistence.Query;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
...@@ -36,6 +38,7 @@ import java.util.List; ...@@ -36,6 +38,7 @@ import java.util.List;
public class CustomerServiceImpl implements CustomerService { public class CustomerServiceImpl implements CustomerService {
@Autowired @Autowired
@PersistenceContext( unitName= DataSourceQualify.JPA_UNIT_NAME_CCMS_FULL)
EntityManager entityManager; EntityManager entityManager;
@Autowired @Autowired
...@@ -57,6 +60,7 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -57,6 +60,7 @@ public class CustomerServiceImpl implements CustomerService {
CustomerListMappingRepository customerListMappingRepository; CustomerListMappingRepository customerListMappingRepository;
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getAllCustomer(int page, int pageSize, String sort, long customerListId, long companySiteId) { public ResultDTO getAllCustomer(int page, int pageSize, String sort, long customerListId, long companySiteId) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
...@@ -122,6 +126,7 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -122,6 +126,7 @@ public class CustomerServiceImpl implements CustomerService {
} }
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getCustomerId(Long customerId) { public ResultDTO getCustomerId(Long customerId) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
...@@ -140,6 +145,7 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -140,6 +145,7 @@ public class CustomerServiceImpl implements CustomerService {
} }
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO searchAllCustomer(int page, int pageSize, String sort, long customerListId, long companySiteId, String name, String mobileNumber, String email) { public ResultDTO searchAllCustomer(int page, int pageSize, String sort, long customerListId, long companySiteId, String name, String mobileNumber, String email) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
...@@ -238,7 +244,7 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -238,7 +244,7 @@ public class CustomerServiceImpl implements CustomerService {
} }
@Override @Override
@Transactional @Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO createCustomer(CustomerDTO customerDTO) { public ResultDTO createCustomer(CustomerDTO customerDTO) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
CustomerMapper customerMapper = new CustomerMapper(); CustomerMapper customerMapper = new CustomerMapper();
...@@ -272,8 +278,8 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -272,8 +278,8 @@ public class CustomerServiceImpl implements CustomerService {
return resultDTO; return resultDTO;
} }
@Transactional
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO deleteCustomer(CustomerRequestDTO customerRequestDTO) { public ResultDTO deleteCustomer(CustomerRequestDTO customerRequestDTO) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
try { try {
...@@ -295,8 +301,8 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -295,8 +301,8 @@ public class CustomerServiceImpl implements CustomerService {
return resultDTO; return resultDTO;
} }
@Transactional
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO deleteIds(CustomerRequestDTO customerRequestDTO) { public ResultDTO deleteIds(CustomerRequestDTO customerRequestDTO) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
try { try {
...@@ -332,6 +338,7 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -332,6 +338,7 @@ public class CustomerServiceImpl implements CustomerService {
// ------------- customer list ----------------- // // ------------- customer list ----------------- //
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getAllCustomerList(int page, int pageSize, String sort, Long companySiteId) { public ResultDTO getAllCustomerList(int page, int pageSize, String sort, Long companySiteId) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
...@@ -396,6 +403,7 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -396,6 +403,7 @@ public class CustomerServiceImpl implements CustomerService {
} }
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO createCustomerList(CustomerListDTO customerListDTO) { public ResultDTO createCustomerList(CustomerListDTO customerListDTO) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
CustomerListMapper customerListMapper = new CustomerListMapper(); CustomerListMapper customerListMapper = new CustomerListMapper();
...@@ -426,6 +434,7 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -426,6 +434,7 @@ public class CustomerServiceImpl implements CustomerService {
} }
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO updateCustomerList(CustomerListDTO customerListDTO) { public ResultDTO updateCustomerList(CustomerListDTO customerListDTO) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
CustomerListMapper customerListMapper = new CustomerListMapper(); CustomerListMapper customerListMapper = new CustomerListMapper();
...@@ -456,8 +465,8 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -456,8 +465,8 @@ public class CustomerServiceImpl implements CustomerService {
return resultDTO; return resultDTO;
} }
@Transactional
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO deleteCustomerList(CustomerListDTO customerListDTO) { public ResultDTO deleteCustomerList(CustomerListDTO customerListDTO) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
...@@ -483,8 +492,8 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -483,8 +492,8 @@ public class CustomerServiceImpl implements CustomerService {
return resultDTO; return resultDTO;
} }
@Transactional
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO deleteCustomerListIds(CustomerRequestDTO customerRequestDTO) { public ResultDTO deleteCustomerListIds(CustomerRequestDTO customerRequestDTO) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
try { try {
...@@ -511,6 +520,7 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -511,6 +520,7 @@ public class CustomerServiceImpl implements CustomerService {
} }
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO searchCustomerList(SearchCustomerRequestDTO searchCustomerRequestDTO) { public ResultDTO searchCustomerList(SearchCustomerRequestDTO searchCustomerRequestDTO) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
...@@ -602,11 +612,13 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -602,11 +612,13 @@ public class CustomerServiceImpl implements CustomerService {
} }
@Override @Override
public CustomerList getLatestCreated() { @Transactional(DataSourceQualify.CCMS_FULL)
return customerListRepository.latestCreated(); public CustomerList getLatestCreated(Long companySiteId) {
return customerListRepository.latestCreated(companySiteId);
} }
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getCustomerContact(CustomerContactDTO customer) { public ResultDTO getCustomerContact(CustomerContactDTO customer) {
ResultDTO result = new ResultDTO(); ResultDTO result = new ResultDTO();
...@@ -630,6 +642,7 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -630,6 +642,7 @@ public class CustomerServiceImpl implements CustomerService {
} }
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getCustomerRecall(Long campaignId, Long customerId) { public ResultDTO getCustomerRecall(Long campaignId, Long customerId) {
ResultDTO result = new ResultDTO(); ResultDTO result = new ResultDTO();
...@@ -652,6 +665,7 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -652,6 +665,7 @@ public class CustomerServiceImpl implements CustomerService {
} }
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO searchCustomerListInfoFromCustomerList(int page, int pageSize, String sort, Long campaignId, Long companySiteId) { public ResultDTO searchCustomerListInfoFromCustomerList(int page, int pageSize, String sort, Long campaignId, Long companySiteId) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
try { try {
......
package com.viettel.campaign.service.impl; package com.viettel.campaign.service.impl;
import com.viettel.campaign.repository.TicketRepository; import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.repository.ccms_full.TicketRepository;
import com.viettel.campaign.service.TicketService; import com.viettel.campaign.service.TicketService;
import com.viettel.campaign.web.dto.TicketDTO; import com.viettel.campaign.web.dto.TicketDTO;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
...@@ -19,7 +21,8 @@ public class TicketServiceImpl implements TicketService { ...@@ -19,7 +21,8 @@ public class TicketServiceImpl implements TicketService {
@Autowired @Autowired
TicketRepository ticketRepository; TicketRepository ticketRepository;
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public Map getHistory(int page, int pageSize, String sort, String customerId) { public Map getHistory(int page, int pageSize, String sort, String customerId) {
Map result = new HashMap(); Map result = new HashMap();
List<TicketDTO> lst = new ArrayList<>(); List<TicketDTO> lst = new ArrayList<>();
......
...@@ -270,4 +270,5 @@ public class DataUtil { ...@@ -270,4 +270,5 @@ public class DataUtil {
public static boolean isNullOrZero(Short value) { public static boolean isNullOrZero(Short value) {
return (value == null || value.equals(Short.parseShort("0"))); return (value == null || value.equals(Short.parseShort("0")));
} }
public static boolean isNullOrZero(Integer value) { return (value == null || value.equals(Integer.parseInt("0"))); }
} }
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;
}
} }
package com.viettel.campaign.utils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
/**
* @author anhvd_itsol
*/
public class WorkBookBuilder {
public static Font buildDefaultFont(XSSFWorkbook workbook) {
Font defaultFont = workbook.createFont();
defaultFont.setFontHeightInPoints((short) 13);
defaultFont.setFontName("Times New Roman");
defaultFont.setColor(IndexedColors.BLACK.getIndex());
return defaultFont;
}
public static Font buildDefaultTitleFont(XSSFWorkbook workbook) {
Font titleFont = workbook.createFont();
titleFont.setFontHeightInPoints((short) 18);
titleFont.setFontName("Times New Roman");
titleFont.setColor(IndexedColors.BLACK.getIndex());
titleFont.setBold(true);
return titleFont;
}
public static Font buildDefaultHeaderFont(XSSFWorkbook workbook) {
Font headerFont = workbook.createFont();
headerFont.setFontHeightInPoints((short) 13);
headerFont.setFontName("Times New Roman");
headerFont.setColor(IndexedColors.BLACK.getIndex());
headerFont.setBold(true);
return headerFont;
}
public static CellStyle buildDefaultStyleTitle(XSSFWorkbook workbook) {
CellStyle styleTitle = workbook.createCellStyle();
styleTitle.setFont(buildDefaultTitleFont(workbook));
styleTitle.setAlignment(HorizontalAlignment.CENTER);
return styleTitle;
}
public static CellStyle buildDefaultStyleRowHeader(XSSFWorkbook workbook) {
CellStyle styleRowHeader = workbook.createCellStyle();
styleRowHeader.setFont(buildDefaultHeaderFont(workbook));
styleRowHeader.setAlignment(HorizontalAlignment.CENTER);
styleRowHeader.setFillForegroundColor(IndexedColors.LIGHT_GREEN.getIndex());
styleRowHeader.setFillPattern(FillPatternType.SOLID_FOREGROUND);
styleRowHeader.setBorderRight(BorderStyle.THIN);
styleRowHeader.setRightBorderColor(IndexedColors.BLACK.getIndex());
styleRowHeader.setBorderBottom(BorderStyle.THIN);
styleRowHeader.setBottomBorderColor(IndexedColors.BLACK.getIndex());
styleRowHeader.setBorderLeft(BorderStyle.THIN);
styleRowHeader.setLeftBorderColor(IndexedColors.BLACK.getIndex());
styleRowHeader.setBorderTop(BorderStyle.THIN);
styleRowHeader.setTopBorderColor(IndexedColors.BLACK.getIndex());
return styleRowHeader;
}
public static CellStyle buildDefaultStyleRow(XSSFWorkbook workbook) {
CellStyle styleRow = workbook.createCellStyle();
styleRow.setFont(buildDefaultFont(workbook));
return styleRow;
}
public static void writeCellContent(Row row, CellStyle rowStyle, int colNo, Object content) {
Cell cell = row.createCell(colNo);
if (content == null) {
cell.setCellValue("");
} else {
cell.setCellValue(String.valueOf(content));
}
cell.setCellStyle(rowStyle);
}
}
...@@ -10,8 +10,8 @@ import java.io.Serializable; ...@@ -10,8 +10,8 @@ import java.io.Serializable;
public class BaseDTO implements Serializable { public class BaseDTO implements Serializable {
protected String keySet; protected String keySet;
protected int pageSize; protected Integer pageSize;
protected int page; protected Integer page;
protected String sort; protected String sort;
protected String langKey; protected String langKey;
} }
...@@ -55,7 +55,6 @@ public class CampaignDTO extends BaseDTO { ...@@ -55,7 +55,6 @@ public class CampaignDTO extends BaseDTO {
private Integer timeWaitAgent; private Integer timeWaitAgent;
private Long questIndex; private Long questIndex;
private Long numOfJoinedCus; private Long numOfJoinedCus;
private Long numOfNotJoinedCus;
private Long numOfLockCus; private Long numOfLockCus;
private String campaignTypeName; private String campaignTypeName;
private Date timeRangeStartTime; private Date timeRangeStartTime;
...@@ -65,4 +64,6 @@ public class CampaignDTO extends BaseDTO { ...@@ -65,4 +64,6 @@ public class CampaignDTO extends BaseDTO {
private List<TimeZoneDialModeDTO> lstTimeZone; private List<TimeZoneDialModeDTO> lstTimeZone;
private Short agentStatus; private Short agentStatus;
private String sessionId; private String sessionId;
private Long numOfInteractedCus;
private Long numOfNotInteractedCus;
} }
package com.viettel.campaign.web.rest; package com.viettel.campaign.web.rest;
import com.viettel.campaign.model.ApParam; import com.viettel.campaign.model.ccms_full.ApParam;
import com.viettel.campaign.service.ApParamService; import com.viettel.campaign.service.ApParamService;
import com.viettel.campaign.service.CampaignExecuteService; import com.viettel.campaign.service.CampaignExecuteService;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
......
...@@ -9,6 +9,7 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook; ...@@ -9,6 +9,7 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.sleuth.instrument.reactor.ReactorSleuth;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
...@@ -116,4 +117,41 @@ public class CampaignController { ...@@ -116,4 +117,41 @@ public class CampaignController {
dto.setSessionId(request.getSession().getId()); dto.setSessionId(request.getSession().getId());
return campaignService.changeCampaignStatus(dto); return campaignService.changeCampaignStatus(dto);
} }
@RequestMapping(value = "/check-allow-status-to-prepare", method = RequestMethod.GET)
public ResultDTO checkAllowStatusToPrepare(@RequestParam("campaignId") Long campaignId) {
return campaignService.checkAllowStatusToPrepare(campaignId);
}
@RequestMapping(value = "/exportCampaigns", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<?> exportCampaigns(HttpServletResponse response, @RequestBody CampaignRequestDTO dto) {
XSSFWorkbook workbook = null;
byte[] contentReturn = null;
try {
String fileName = "report_campaigns.xlsx";
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
OutputStream outputStream;
workbook = campaignService.exportCampaigns(dto);
outputStream = response.getOutputStream();
workbook.write(outputStream);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
workbook.write(byteArrayOutputStream);
contentReturn = byteArrayOutputStream.toByteArray();
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
return new ResponseEntity<byte[]>(null, null, HttpStatus.BAD_REQUEST);
} finally {
if (workbook != null) {
try {
workbook.close();
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
}
}
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.parseMediaType("application/vnd.ms-excel"));
return new ResponseEntity<byte[]>(contentReturn, headers, HttpStatus.OK);
}
} }
...@@ -53,7 +53,7 @@ public class CustomerController { ...@@ -53,7 +53,7 @@ public class CustomerController {
@GetMapping("/searchAllCustomerByParams") @GetMapping("/searchAllCustomerByParams")
@ResponseBody @ResponseBody
public ResponseEntity findAllCustomerName(@RequestParam("page") int page, @RequestParam("pageSize") int pageSize, @RequestParam("sort") String sort, @RequestParam("customerListId") Long customerListId, @RequestParam("companySiteId") Long companySiteId, @RequestParam("name") String name, @RequestParam("mobileNumber") String mobileNumber, @RequestParam("email") String email) { public ResponseEntity findAllCustomerByParams(@RequestParam("page") int page, @RequestParam("pageSize") int pageSize, @RequestParam("sort") String sort, @RequestParam("customerListId") Long customerListId, @RequestParam("companySiteId") Long companySiteId, @RequestParam("name") String name, @RequestParam("mobileNumber") String mobileNumber, @RequestParam("email") String email) {
ResultDTO result = customerService.searchAllCustomer(page, pageSize, sort, customerListId, companySiteId, name, mobileNumber, email); ResultDTO result = customerService.searchAllCustomer(page, pageSize, sort, customerListId, companySiteId, name, mobileNumber, email);
return new ResponseEntity(result, HttpStatus.OK); return new ResponseEntity(result, HttpStatus.OK);
} }
...@@ -166,9 +166,9 @@ public class CustomerController { ...@@ -166,9 +166,9 @@ public class CustomerController {
@GetMapping("/latestCreated") @GetMapping("/latestCreated")
@ResponseBody @ResponseBody
public ResponseEntity getLatestCreated() { public ResponseEntity getLatestCreated(@RequestParam("companySiteId") Long companySiteId) {
ResultDTO result = new ResultDTO(); ResultDTO result = new ResultDTO();
result.setData(customerService.getLatestCreated()); result.setData(customerService.getLatestCreated(companySiteId));
return new ResponseEntity<>(result, HttpStatus.OK); return new ResponseEntity<>(result, HttpStatus.OK);
} }
......
...@@ -8,6 +8,13 @@ spring: ...@@ -8,6 +8,13 @@ spring:
url: jdbc:oracle:thin:@10.60.157.135:1521:vt url: jdbc:oracle:thin:@10.60.157.135:1521:vt
username: CCMS_FULL username: CCMS_FULL
password: CCMS_FULL#123 password: CCMS_FULL#123
max_pool_size: 32
datasource2:
driver-class-name: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@10.60.157.135:1521:vt
username: CCMS_FULL
password: CCMS_FULL#123
max_pool_size: 32
jpa: jpa:
database-platform: org.hibernate.dialect.Oracle10gDialect database-platform: org.hibernate.dialect.Oracle10gDialect
show-sql: true show-sql: true
......
...@@ -14,3 +14,28 @@ campaign.execute.interactive.contactStatus = Contact status ...@@ -14,3 +14,28 @@ campaign.execute.interactive.contactStatus = Contact status
campaign.execute.interactive.surveyStatus = Trạng thái khảo sát campaign.execute.interactive.surveyStatus = Trạng thái khảo sát
campaign.execute.interactive.status = Trạng thái chiến dịch campaign.execute.interactive.status = Trạng thái chiến dịch
campaign.execute.interactive.recordStatus = Trạng thái bản ghi campaign.execute.interactive.recordStatus = Trạng thái bản ghi
#Campaign
campaign = Campaigns
campaign.code = Campaign tode
campaign.name = Campaign tame
campaign.type = Campaign type
campaign.chanel = Chanel
campaign.startTime = Start time
campaign.endTime = End time
campaign.cusNum = Number of customers
campaign.joinedCusNum = Number of joined customers
campaign.interactedCusNum = Number of customers interacted
campaign.notInteractedCusNum = Number of customers not interacted
campaign.logCusNum = Number of locked customers
campaign.status = Status
campaign.chanel.1 = Voice chanel
campaign.chanel.2 = SMS chanel
campaign.chanel.3 = Email chanel
campaign.chanel.4 = IVR chanel
campaign.status.0 = Draft
campaign.status.1 = Prepare
campaign.status.2 = Deploy
campaign.status.3 = Pause
campaign.status.4 = Finish
campaign.status.5 = Kêt thúc sớm
...@@ -14,3 +14,32 @@ campaign.execute.interactive.contactStatus = Trạng thái kết nối ...@@ -14,3 +14,32 @@ campaign.execute.interactive.contactStatus = Trạng thái kết nối
campaign.execute.interactive.surveyStatus = Trạng thái khảo sát campaign.execute.interactive.surveyStatus = Trạng thái khảo sát
campaign.execute.interactive.status = Trạng thái chiến dịch campaign.execute.interactive.status = Trạng thái chiến dịch
campaign.execute.interactive.recordStatus = Trạng thái bản ghi campaign.execute.interactive.recordStatus = Trạng thái bản ghi
#Campaigns
campaign = Danh sách chiến dịch
campaign.title = DANH SÁCH CHIẾN DỊCH
campaign.code = Mã chiến dịch
campaign.name = Tên chiến dịch
campaign.type = Loại chiến dịch
campaign.chanel = Kênh
campaign.startTime = Thời gian bắt đầu
campaign.endTime = Thời gian kết thúc
campaign.cusNum = Số lượng khách hàng
campaign.joinedCusNum = Số lượng khách hàng tham gia
campaign.interactedCusNum = Số lượng khách hàng đã tương tác
campaign.notInteractedCusNum = Số lượng khách hàng chưa tương tác
campaign.logCusNum = Số lượng khách hàng DNC/Khoá
campaign.status = Trạng thái
campaign.chanel.1 = Kênh Voice
campaign.chanel.2 = Kênh SMS
campaign.chanel.3 = Kênh Email
campaign.chanel.4 = Kênh IVR
campaign.status.0 = Dự thảo
campaign.status.1 = Chuẩn bị
campaign.status.2 = Triển khai
campaign.status.3 = Tạm ngừng
campaign.status.4 = Kêt thúc
campaign.status.5 = Kêt thúc sớm
WITH COUNT_LIST AS (SELECT (SELECT COUNT(1) FROM CAMPAIGN_CUSTOMER WHERE CAMPAIGN_ID = :p_campaignId) countCamp,
(SELECT COUNT(1) FROM CAMPAIGN_AGENT WHERE CAMPAIGN_ID = :p_campaignId) countAgent,
(select COUNT(1)
FROM SCENARIO s
INNER JOIN SCENARIO_QUESTION sq ON s.SCENARIO_ID = sq.SCENARIO_ID
INNER JOIN SCENARIO_ANSWER sa ON sq.SCENARIO_QUESTION_ID = sa.SCENARIO_QUESTION_ID
WHERE s.CAMPAIGN_ID = :p_campaignId) countScenario
FROM DUAL)
SELECT c.countCamp countCamp,
c.countAgent countAgent,
c.countScenario countScenario,
CASE
WHEN (c.countCamp IS NOT NULL AND c.countAgent IS NOT NULL AND c.countScenario IS NOT NULL) THEN '00'
ELSE '01' END as code
FROM COUNT_LIST c
...@@ -11,8 +11,17 @@ SELECT ...@@ -11,8 +11,17 @@ SELECT
a.STATUS status, a.STATUS status,
a.CUSTOMER_NUMBER cusNum, a.CUSTOMER_NUMBER cusNum,
b.SLKHThamgiaCD numOfJoinedCus, b.SLKHThamgiaCD numOfJoinedCus,
c.SLKHChuaTuongTac numOfNotJoinedCus, e.SLKHDaTuongTac numOfInteractedCus,
d.SLKHDoNotCall_Khoa numOfLockCus c.SLKHChuaTuongTac numOfNotInteractedCus,
d.SLKHDoNotCall_Khoa numOfLockCus,
a.COMPANY_SITE_ID companySiteId,
a.CONTENT content,
a.MAX_RECALL maxRecall,
a.RECALL_TYPE recallType,
a.RECALL_DURATION recallDuration,
a.CURRENT_TIME_MODE currentTimeMode,
a.WRAPUP_TIME_CONNECT wrapupTimeConnect,
a.WRAPUP_TIME_DISCONNECT wrapupTimeDisconnect
FROM CAMPAIGN a FROM CAMPAIGN a
LEFT JOIN (SELECT campaign_id, COUNT (*) AS SLKHThamgiaCD LEFT JOIN (SELECT campaign_id, COUNT (*) AS SLKHThamgiaCD
FROM campaign_customer cc INNER JOIN CUSTOMER cus ON cc.CUSTOMER_ID = cus.CUSTOMER_ID FROM campaign_customer cc INNER JOIN CUSTOMER cus ON cc.CUSTOMER_ID = cus.CUSTOMER_ID
...@@ -21,7 +30,7 @@ LEFT JOIN (SELECT campaign_id, COUNT (*) AS SLKHThamgiaCD ...@@ -21,7 +30,7 @@ LEFT JOIN (SELECT campaign_id, COUNT (*) AS SLKHThamgiaCD
ON a.CAMPAIGN_ID = b.CAMPAIGN_ID ON a.CAMPAIGN_ID = b.CAMPAIGN_ID
LEFT JOIN (SELECT campaign_id, COUNT (*) AS SLKHChuaTuongTac LEFT JOIN (SELECT campaign_id, COUNT (*) AS SLKHChuaTuongTac
FROM campaign_customer cc INNER JOIN CUSTOMER cus ON cc.CUSTOMER_ID = cus.CUSTOMER_ID FROM campaign_customer cc INNER JOIN CUSTOMER cus ON cc.CUSTOMER_ID = cus.CUSTOMER_ID
WHERE 1 = 1 AND cc.STATUS <> 0 AND cus.STATUS = 1 WHERE 1 = 1 AND cc.STATUS = 0 AND cus.STATUS = 1
group by campaign_id) c group by campaign_id) c
ON c.CAMPAIGN_ID = a.CAMPAIGN_ID ON c.CAMPAIGN_ID = a.CAMPAIGN_ID
LEFT JOIN (SELECT cc.campaign_id, count(*) AS SLKHDoNotCall_Khoa LEFT JOIN (SELECT cc.campaign_id, count(*) AS SLKHDoNotCall_Khoa
...@@ -30,6 +39,11 @@ LEFT JOIN (SELECT cc.campaign_id, count(*) AS SLKHDoNotCall_Khoa ...@@ -30,6 +39,11 @@ LEFT JOIN (SELECT cc.campaign_id, count(*) AS SLKHDoNotCall_Khoa
AND (c.IPCC_STATUS = 'locked' or c.CALL_ALLOWED = 0) AND cc.STATUS = 1 AND (c.IPCC_STATUS = 'locked' or c.CALL_ALLOWED = 0) AND cc.STATUS = 1
GROUP BY cc.CAMPAIGN_ID) d GROUP BY cc.CAMPAIGN_ID) d
ON d.CAMPAIGN_ID = a.CAMPAIGN_ID ON d.CAMPAIGN_ID = a.CAMPAIGN_ID
LEFT JOIN (SELECT campaign_id, COUNT (*) AS SLKHDaTuongTac
FROM campaign_customer cc INNER JOIN CUSTOMER cus ON cc.CUSTOMER_ID = cus.CUSTOMER_ID
WHERE 1 = 1 AND cc.STATUS <> 0 AND cus.STATUS = 1
group by campaign_id) e
ON e.CAMPAIGN_ID = a.CAMPAIGN_ID
WHERE 1 = 1 WHERE 1 = 1
AND COMPANY_SITE_ID = :p_company_site_id AND COMPANY_SITE_ID = :p_company_site_id
AND a.STATUS <> -1 AND a.STATUS <> -1
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