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 @@
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</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>
<dependencyManagement>
......
......@@ -3,7 +3,7 @@ package com.viettel.campaign;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@SpringBootApplication(scanBasePackages={"com.viettel.campaign"})
public class ServiceCampaignApplication {
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;
import com.viettel.campaign.service.ApParamService;
import lombok.extern.slf4j.Slf4j;
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.scheduling.TaskScheduler;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.concurrent.ScheduledFuture;
......@@ -26,9 +30,6 @@ import java.util.concurrent.ScheduledFuture;
@Configuration
public class JobConfig implements SchedulingConfigurer {
@Autowired
private ApParamService apParamService;
TaskScheduler taskScheduler;
private ScheduledFuture<?> job1;
private ScheduledFuture<?> job2;
......@@ -38,18 +39,18 @@ public class JobConfig implements SchedulingConfigurer {
return new CampaignJob();
}
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(10);
threadPoolTaskScheduler.setThreadNamePrefix("scheduler-thread");
threadPoolTaskScheduler.initialize();
job1(threadPoolTaskScheduler);
job2(threadPoolTaskScheduler);
this.taskScheduler = threadPoolTaskScheduler;
taskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
}
// @Override
// public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
//
// ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
// threadPoolTaskScheduler.setPoolSize(10);
// threadPoolTaskScheduler.setThreadNamePrefix("scheduler-thread");
// threadPoolTaskScheduler.initialize();
// job1(threadPoolTaskScheduler);
// job2(threadPoolTaskScheduler);
// this.taskScheduler = threadPoolTaskScheduler;
// taskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
// }
private void job1(TaskScheduler scheduler) {
job1 = scheduler.schedule(() -> {
......@@ -82,8 +83,17 @@ public class JobConfig implements SchedulingConfigurer {
// @Override
// public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
//// scheduledTaskRegistrar.addTriggerTask(() -> campaignJob().process2(), (TriggerContext triggerContext) -> yourService.getCron());
// }
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
// 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;
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 org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @author hanv_itsol
......@@ -13,11 +23,74 @@ import java.util.Date;
@Slf4j
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)
// @Transactional( propagation = Propagation.REQUIRED)
@Autowired
private ProcessConfigService processConfigService;
@Autowired
private CampaignService campaignService;
// @Scheduled(fixedRate = 5000)
@Transactional( propagation = Propagation.REQUIRED)
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;
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> {
......
package com.viettel.campaign.mapper;
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> {
......
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;
public class CustomerListMapper extends BaseMapper<CustomerList, CustomerListDTO> {
......
package com.viettel.campaign.mapper;
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> {
......
package com.viettel.campaign.model;
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
......
package com.viettel.campaign.model;
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
......
package com.viettel.campaign.model;
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
......
package com.viettel.campaign.model;
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
......
package com.viettel.campaign.model;
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
......
package com.viettel.campaign.model;
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
......
package com.viettel.campaign.model;
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
......
package com.viettel.campaign.model;
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
......
package com.viettel.campaign.model;
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
......
package com.viettel.campaign.model;
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
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.Setter;
......
package com.viettel.campaign.model;
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
......
package com.viettel.campaign.model;
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
......
package com.viettel.campaign.model;
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
......
package com.viettel.campaign.model;
package com.viettel.campaign.model.ccms_full;
import javax.persistence.Entity;
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.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
......
package com.viettel.campaign.repository;
package com.viettel.campaign.repository.ccms_full;
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.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.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
......@@ -12,7 +12,7 @@ import org.springframework.stereotype.Repository;
import java.util.List;
@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")
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.Query;
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.Query;
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.ContactCustResultDTO;
......
package com.viettel.campaign.repository;
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.Campaign;
import com.viettel.campaign.web.dto.CampaignDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.model.ccms_full.Campaign;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.Date;
import java.util.List;
@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) " +
" 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.request_dto.CampaignRequestDTO;
......@@ -13,4 +13,6 @@ public interface CampaignRepositoryCustom {
ResultDTO findByCampaignCode(CampaignRequestDTO requestDTO);
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.jpa.repository.JpaRepository;
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.Modifying;
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.web.dto.ResultDTO;
import com.viettel.campaign.model.ccms_full.CustomerList;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
......@@ -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")
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)
CustomerList latestCreated();
@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(@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.Pageable;
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 {
}
package com.viettel.campaign.repository;
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.web.dto.TicketDTO;
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.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.stereotype.Repository;
......
package com.viettel.campaign.repository;
package com.viettel.campaign.repository.ccms_full;
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.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.repository.CampaignCompleteCodeRepositoryCustom;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.CampaignCompleteCode;
import com.viettel.campaign.repository.ccms_full.CampaignCompleteCodeRepositoryCustom;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Repository
public class CampaignCompleteCompleteCodeRepositoryIpml implements CampaignCompleteCodeRepositoryCustom {
@Autowired
EntityManager entityManager;
@PersistenceContext( unitName= DataSourceQualify.JPA_UNIT_NAME_CCMS_FULL)
private EntityManager entityManager;
private Logger log = LoggerFactory.getLogger(CampaignCompleteCompleteCodeRepositoryIpml.class);
@Transactional
@Override
// @Transactional(DataSourceQualify.CCMS_FULL)
public CampaignCompleteCode updateStatusById(Long id) {
CampaignCompleteCode dto = new CampaignCompleteCode();
try {
......@@ -32,7 +34,8 @@ public class CampaignCompleteCompleteCodeRepositoryIpml implements CampaignCompl
return dto;
}
@Transactional
@Override
// @Transactional(DataSourceQualify.CCMS_FULL)
public CampaignCompleteCode findMaxValueCampaignType(Long companySiteId) {
CampaignCompleteCode result = new CampaignCompleteCode();
try {
......
package com.viettel.campaign.repository.impl;
package com.viettel.campaign.repository.ccms_full.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.utils.Constants;
import com.viettel.campaign.utils.DataUtil;
import com.viettel.campaign.utils.HibernateUtil;
......@@ -17,6 +18,7 @@ import org.hibernate.type.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
......@@ -25,6 +27,7 @@ import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Repository;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.util.*;
import java.util.concurrent.TimeUnit;
......@@ -34,20 +37,23 @@ public class CampaignExecuteRepositoryImp implements CampaignExecuteRepository {
private static final Logger logger = LoggerFactory.getLogger(CampaignRepositoryImpl.class);
@Autowired
@Qualifier(DataSourceQualify.NAMED_JDBC_PARAMETER_TEMPLATE_CCMS_FULL)
NamedParameterJdbcTemplate namedParameterJdbcTemplate;
@Autowired
@PersistenceContext( unitName = DataSourceQualify.JPA_UNIT_NAME_CCMS_FULL)
EntityManager entityManager;
@Override
public List<ApParamDTO> getComboBoxStatus(String companySiteId, String completeType) {
List<ApParamDTO> list = new ArrayList<>();
Map<String, String> params = new HashMap<>();
String sql = SQLBuilder.getSqlQueryById(Constants.SQL_MODULES.MODULE_EXECUTE, "get-combo-status");
String sql = SQLBuilder.getSqlQueryById(Constants.SQL_MODULES.MODULE_EXECUTE, "get-combo-connect-status");
try {
params.put("p_company_site_id", companySiteId);
params.put("p_complete_type", completeType);
list = namedParameterJdbcTemplate.query(sql, params, BeanPropertyRowMapper.newInstance(ApParamDTO.class));
// list = namedParameterJdbcTemplate.getJdbcTemplate().query(sql, (PreparedStatementSetter) params, BeanPropertyRowMapper.newInstance(ComboBoxDTO.class));
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
......@@ -81,69 +87,37 @@ public class CampaignExecuteRepositoryImp implements CampaignExecuteRepository {
String sql = SQLBuilder.getSqlQueryById(Constants.SQL_MODULES.MODULE_EXECUTE, "get-execute-interactive");
sqlBuilder.append(sql);
sqlBuilder.append(" and to_char(a.customer_id) like :p_customer_id");
sqlBuilder.append(" and to_char(a.contact_status) in (:p_list_contact_status)");
sqlBuilder.append(" and to_char(a.call_status) in (:p_list_survey_status)");
sqlBuilder.append(" and to_char(a.status) in (:p_list_record_status)");
if (!DataUtil.isNullOrEmpty(dto.getPhoneNumber())) {
sqlBuilder.append(" and a.phone_number like :p_phone_number");
}
if (!DataUtil.isNullOrEmpty(dto.getCampaignId())) {
sqlBuilder.append(" and b.campaign_code in (:p_list_campaign_id) ");
}
if (!DataUtil.isNullOrEmpty(dto.getCampaignName())) {
sqlBuilder.append(" and upper(b.campaign_name) like :p_campaign_name");
sqlBuilder.append(" and upper(campaignName) like upper(:p_campaign_name)");
}
if (!DataUtil.isNullOrEmpty(dto.getAgentId())) {
sqlBuilder.append(" and upper(c.user_name) like :p_user_name");
sqlBuilder.append(" and upper(userName) like upper(:p_user_name)");
}
SQLQuery query = session.createSQLQuery(sqlBuilder.toString());
query.setParameter("p_company_site_id", dto.getCompanySiteId());
query.setParameter("p_customer_id", "%" + dto.getCustomerId()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
query.setParameterList("p_list_campaign_id", dto.getCampaignId().split(","));
query.setParameter("p_customer_id", dto.getCustomerId());
query.setParameter("p_date_from", dto.getFromDate());
query.setParameter("p_date_to", dto.getToDate());
query.setParameterList("p_list_contact_status", dto.getContactStatus().split(","));
query.setParameterList("p_list_survey_status", dto.getSurveyStatus().split(","));
query.setParameterList("p_list_record_status", dto.getRecordStatus().split(","));
query.setParameter("p_phone_number", dto.getPhoneNumber());
query.setParameter("p_call_time_from", dto.getCallTimeFrom());
query.setParameter("p_call_time_to", dto.getCallTimeTo());
if (!DataUtil.isNullOrEmpty(dto.getCampaignId())) {
query.setParameterList("p_list_campaign_id", dto.getCampaignId().split(","));
}
if (!DataUtil.isNullOrEmpty(dto.getPhoneNumber())) {
query.setParameter("p_phone_number", "%" + dto.getPhoneNumber()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
}
if (!DataUtil.isNullOrEmpty(dto.getCampaignName())) {
query.setParameter("p_campaign_name", "%" + dto.getCampaignName().toUpperCase()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
query.setParameter("p_campaign_name", dto.getCampaignName().trim());
}
if (!DataUtil.isNullOrEmpty(dto.getAgentId())) {
query.setParameter("p_user_name", "%" + dto.getAgentId().toUpperCase()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
query.setParameter("p_user_name", dto.getAgentId().trim());
}
query.addScalar("campaignCode", new StringType());
query.addScalar("campaignName", new StringType());
query.addScalar("userName", new StringType());
query.addScalar("phoneNumber", new StringType());
query.addScalar("phoneNumber", new LongType());
query.addScalar("customerName", new StringType());
query.addScalar("createTime", new DateType());
query.addScalar("contactStatus", new StringType());
......@@ -187,8 +161,8 @@ public class CampaignExecuteRepositoryImp implements CampaignExecuteRepository {
logger.error(e.getMessage(), e);
} finally {
session.close();
return resultDTO;
}
return resultDTO;
}
@Override
......@@ -203,69 +177,37 @@ public class CampaignExecuteRepositoryImp implements CampaignExecuteRepository {
String sql = SQLBuilder.getSqlQueryById(Constants.SQL_MODULES.MODULE_EXECUTE, "get-execute-interactive");
sqlBuilder.append(sql);
sqlBuilder.append(" and to_char(a.customer_id) like :p_customer_id");
sqlBuilder.append(" and to_char(a.contact_status) in (:p_list_contact_status)");
sqlBuilder.append(" and to_char(a.call_status) in (:p_list_survey_status)");
sqlBuilder.append(" and to_char(a.status) in (:p_list_record_status)");
if (!DataUtil.isNullOrEmpty(dto.getPhoneNumber())) {
sqlBuilder.append(" and a.phone_number like :p_phone_number");
}
if (!DataUtil.isNullOrEmpty(dto.getCampaignId())) {
sqlBuilder.append(" and b.campaign_code in (:p_list_campaign_id) ");
}
if (!DataUtil.isNullOrEmpty(dto.getCampaignName())) {
sqlBuilder.append(" and upper(b.campaign_name) like :p_campaign_name");
sqlBuilder.append(" and upper(campaignName) like upper(:p_campaign_name)");
}
if (!DataUtil.isNullOrEmpty(dto.getAgentId())) {
sqlBuilder.append(" and upper(c.user_name) like :p_user_name");
sqlBuilder.append(" and upper(userName) like upper(:p_user_name)");
}
SQLQuery query = session.createSQLQuery(sqlBuilder.toString());
query.setParameter("p_company_site_id", dto.getCompanySiteId());
query.setParameter("p_customer_id", "%" + dto.getCustomerId()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
query.setParameterList("p_list_campaign_id", dto.getCampaignId().split(","));
query.setParameter("p_customer_id", dto.getCustomerId());
query.setParameter("p_date_from", dto.getFromDate());
query.setParameter("p_date_to", dto.getToDate());
query.setParameterList("p_list_contact_status", dto.getContactStatus().split(","));
query.setParameterList("p_list_survey_status", dto.getSurveyStatus().split(","));
query.setParameterList("p_list_record_status", dto.getRecordStatus().split(","));
query.setParameter("p_phone_number", dto.getPhoneNumber());
query.setParameter("p_call_time_from", dto.getCallTimeFrom());
query.setParameter("p_call_time_to", dto.getCallTimeTo());
if (!DataUtil.isNullOrEmpty(dto.getCampaignId())) {
query.setParameterList("p_list_campaign_id", dto.getCampaignId().split(","));
}
if (!DataUtil.isNullOrEmpty(dto.getPhoneNumber())) {
query.setParameter("p_phone_number", "%" + dto.getPhoneNumber()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
}
if (!DataUtil.isNullOrEmpty(dto.getCampaignName())) {
query.setParameter("p_campaign_name", "%" + dto.getCampaignName().toUpperCase()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
query.setParameter("p_campaign_name", dto.getCampaignName().trim());
}
if (!DataUtil.isNullOrEmpty(dto.getAgentId())) {
query.setParameter("p_user_name", "%" + dto.getAgentId().toUpperCase()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
query.setParameter("p_user_name", dto.getAgentId().trim());
}
query.addScalar("campaignCode", new StringType());
query.addScalar("campaignName", new StringType());
query.addScalar("userName", new StringType());
query.addScalar("phoneNumber", new StringType());
query.addScalar("phoneNumber", new LongType());
query.addScalar("customerName", new StringType());
query.addScalar("createTime", new DateType());
query.addScalar("contactStatus", new StringType());
......
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.DataUtil;
import com.viettel.campaign.utils.HibernateUtil;
......@@ -20,6 +21,7 @@ import org.springframework.data.domain.*;
import org.springframework.stereotype.Repository;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.math.BigDecimal;
import java.util.ArrayList;
......@@ -32,6 +34,7 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
private static final Logger logger = LogManager.getLogger(CampaignRepositoryImpl.class);
@Autowired
@PersistenceContext( unitName= DataSourceQualify.JPA_UNIT_NAME_CCMS_FULL)
EntityManager entityManager;
@Override
......@@ -192,7 +195,7 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
if (!DataUtil.isNullOrEmpty(requestDto.getCampaignName())) {
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");
}
if (!DataUtil.isNullOrEmpty(requestDto.getFromDateFr())) {
......@@ -245,7 +248,7 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
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());
}
if (!DataUtil.isNullOrEmpty(requestDto.getFromDateFr())) {
......@@ -285,8 +288,17 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
query.addScalar("customerNumber", new LongType());
query.addScalar("status", new ShortType());
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("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));
int count = 0;
......@@ -294,14 +306,19 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
if (list.size() > 0) {
count = query.list().size();
}
Pageable pageable = SQLBuilder.buildPageable(requestDto);
if (pageable != null) {
query.setFirstResult(pageable.getPageNumber() * pageable.getPageSize());
query.setMaxResults(pageable.getPageSize());
if(requestDto.getPage() != null && requestDto.getPageSize() != null) {
Pageable pageable = SQLBuilder.buildPageable(requestDto);
if (pageable != null) {
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.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception ex) {
......@@ -407,4 +424,36 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
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 org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.math.BigDecimal;
import java.util.ArrayList;
......@@ -15,6 +17,7 @@ import java.util.List;
public class TicketRepositoryImpl implements TicketRepositoryCustom {
@Autowired
@PersistenceContext( unitName= DataSourceQualify.JPA_UNIT_NAME_CCMS_FULL)
EntityManager entityManager;
@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.HibernateUtil;
import com.viettel.campaign.utils.SQLBuilder;
......
......@@ -2,7 +2,7 @@ package com.viettel.campaign.service;
import com.viettel.campaign.web.dto.ApParamDTO;
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;
......
......@@ -26,6 +26,6 @@ public interface CampaignCompleteCodeService {
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;
import com.viettel.campaign.model.ccms_full.Campaign;
import com.viettel.campaign.web.dto.CampaignDTO;
import com.viettel.campaign.web.dto.ResultDTO;
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;
public interface CampaignService {
......@@ -13,6 +17,14 @@ public interface CampaignService {
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 addNewCampaign(CampaignDTO campaignDTO);
......@@ -22,4 +34,8 @@ public interface CampaignService {
ResultDTO findCampaignById(Long campaignId);
ResultDTO changeCampaignStatus(CampaignDTO dto);
ResultDTO checkAllowStatusToPrepare(Long campaignId);
XSSFWorkbook exportCampaigns(CampaignRequestDTO dto);
}
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.CustomerDTO;
import com.viettel.campaign.web.dto.CustomerListDTO;
......@@ -36,7 +36,7 @@ public interface CustomerService {
ResultDTO searchCustomerList(SearchCustomerRequestDTO searchCustomerRequestDTO);
CustomerList getLatestCreated();
CustomerList getLatestCreated(Long companySiteId);
// ------------ 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;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.service.ApParamService;
import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.web.dto.ApParamDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.mapper.ApParamMapper;
import com.viettel.campaign.model.ApParam;
import com.viettel.campaign.repository.ApParamRepository;
import com.viettel.campaign.model.ccms_full.ApParam;
import com.viettel.campaign.repository.ccms_full.ApParamRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
......@@ -14,8 +15,10 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.transaction.annotation.Transactional;
@Service
public class ApParamServiceImpl implements ApParamService {
......@@ -26,11 +29,13 @@ public class ApParamServiceImpl implements ApParamService {
private static final Logger logger = LogManager.getLogger(ApParamServiceImpl.class);
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public Iterable<ApParam> getAllParams(int page, int pageSize, String sort) {
return apParamRepository.findAll(PageRequest.of(page, pageSize, Sort.by(sort)));
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public List<ApParam> getParamByName(int page, int pageSize, String sort, String parName) {
List<ApParam> lst = new ArrayList<>();
......@@ -41,6 +46,7 @@ public class ApParamServiceImpl implements ApParamService {
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO createApParam(ApParamDTO apParamDTO) {
ResultDTO result = new ResultDTO();
ApParamMapper apParamMapper = new ApParamMapper();
......@@ -67,6 +73,7 @@ public class ApParamServiceImpl implements ApParamService {
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO findParamByParType(String parType) {
ResultDTO resultDTO = new ResultDTO();
try {
......
package com.viettel.campaign.service.impl;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.mapper.CampaignCompleteCodeMapper;
import com.viettel.campaign.model.CampaignCompleteCode;
import com.viettel.campaign.repository.CampaignCompleteCodeRepository;
import com.viettel.campaign.model.ccms_full.CampaignCompleteCode;
import com.viettel.campaign.repository.ccms_full.CampaignCompleteCodeRepository;
import com.viettel.campaign.service.CampaignCompleteCodeService;
import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.utils.DataUtil;
......@@ -36,6 +37,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ
CampaignCompleteCodeRepository completeCodeRepository;
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public Map listAllCompleteCode(int page, int pageSize, String sort) {
Map result = new HashMap();
Page<CampaignCompleteCode> pg = completeCodeRepository.findAll(PageRequest.of(page, pageSize, Sort.by(sort)));
......@@ -45,6 +47,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public Map listCompleteCodeByName(int page, int pageSize, String sort, String name) {
Map result = new HashMap();
List<CampaignCompleteCode> lst = new ArrayList<>();
......@@ -60,6 +63,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO createCompleteCode(CampaignCompleteCodeDTO completeCodeDTO) {
ResultDTO resultDTO = new ResultDTO();
CampaignCompleteCodeMapper compCodeMapper = new CampaignCompleteCodeMapper();
......@@ -86,6 +90,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO updateCompleteCode(CampaignCompleteCodeDTO completeCodeDTO) {
ResultDTO resultDTO = new ResultDTO();
CampaignCompleteCodeMapper compCodeMapper = new CampaignCompleteCodeMapper();
......@@ -112,6 +117,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO deleteCompleteCode(CampaignCompleteCodeDTO completeCodeDTO) {
ResultDTO resultDTO = new ResultDTO();
CampaignCompleteCodeMapper compCodeMapper = new CampaignCompleteCodeMapper();
......@@ -136,8 +142,8 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ
return resultDTO;
}
@Transactional
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO deleteList(List<Long> completeCodeDtos) {
ResultDTO resultDTO = new ResultDTO();
try {
......@@ -156,6 +162,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO deleteById(Long id) {
ResultDTO result = new ResultDTO();
......@@ -172,7 +179,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ
return result;
}
// @Override
// @Override
// public ResultDTO findMaxValueCampaignCompleteCode(CampaignCompleteCodeDTO completeCodeDTO) {
// ResultDTO resultDTO = new ResultDTO();
// CampaignCompleteCodeMapper campaignCompleteCodeMapper = new CampaignCompleteCodeMapper();
......@@ -203,6 +210,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ
// }
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO findMaxValueCampaignCompleteCode(CampaignCompleteCodeDTO completeCodeDTO) {
ResultDTO resultDTO = new ResultDTO();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
......@@ -252,6 +260,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getListStatus(String completeValue, Short completeType, Long companySiteId) {
ResultDTO resultDTO = new ResultDTO();
try {
......@@ -268,7 +277,8 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ
}
@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();
try {
List<CampaignCompleteCode> list = completeCodeRepository.getCustomerStatusWithoutValue(completeValue, completeType, companySiteId);
......@@ -282,7 +292,7 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ
return resultDTO;
}
// @Override
// @Override
// public ResultDTO findMaxValueCampaignCompleteCode(CampaignCompleteCodeDTO completeCodeDTO) {
// ResultDTO result = new ResultDTO();
// CampaignCompleteCodeMapper campaignCompleteCodeMapper = new CampaignCompleteCodeMapper();
......
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.utils.BundleUtils;
import com.viettel.campaign.utils.Constants;
......@@ -8,7 +9,6 @@ import com.viettel.campaign.web.dto.ApParamDTO;
import com.viettel.campaign.web.dto.ContactCustResultDTO;
import com.viettel.campaign.web.dto.ResultDTO;
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.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
......@@ -16,8 +16,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
......@@ -34,6 +34,7 @@ public class CampaignExecuteServiceImp implements CampaignExecuteService {
//<editor-fold: hungtt>
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getComboBoxStatus(String companySiteId, String completeType) {
ResultDTO resultDTO = new ResultDTO();
try {
......@@ -48,6 +49,7 @@ public class CampaignExecuteServiceImp implements CampaignExecuteService {
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getComboCampaignType(String companySiteId) {
ResultDTO resultDTO = new ResultDTO();
try {
......@@ -62,6 +64,7 @@ public class CampaignExecuteServiceImp implements CampaignExecuteService {
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO searchInteractiveResult(CampaignRequestDTO dto) {
ResultDTO resultDTO = new ResultDTO();
try {
......@@ -73,6 +76,7 @@ public class CampaignExecuteServiceImp implements CampaignExecuteService {
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public XSSFWorkbook exportInteractiveResult(CampaignRequestDTO dto) {
Locale locale = Locale.forLanguageTag("vi");
List<ContactCustResultDTO> list = campaignExecuteRepository.getExcelInteractiveResult(dto);
......@@ -156,20 +160,20 @@ public class CampaignExecuteServiceImp implements CampaignExecuteService {
for (int i = 0, rowIndex = 1; i < list.size(); i++) {
Row row = sheet.createRow(startRowTable + count);
int col = 0;
writeCellContent(row, styleRow, col++, rowIndex);
writeCellContent(row, styleRow, col++, list.get(i).getCampaignCode());
writeCellContent(row, styleRow, col++, list.get(i).getCampaignName());
writeCellContent(row, styleRow, col++, list.get(i).getAgentId());
writeCellContent(row, styleRow, col++, list.get(i).getPhoneNumber());
writeCellContent(row, styleRow, col++, list.get(i).getCustomerId());
writeCellContent(row, styleRow, col++, list.get(i).getCustomerName());
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).getSurveyStatus());
writeCellContent(row, styleRow, col++, list.get(i).getStatus());
writeCellContent(row, styleRow, col++, list.get(i).getRecordStatus());
++rowIndex;
++count;
writeCellContent(row, styleRow, col++, rowIndex);
writeCellContent(row, styleRow, col++, list.get(i).getCampaignCode());
writeCellContent(row, styleRow, col++, list.get(i).getCampaignName());
writeCellContent(row, styleRow, col++, list.get(i).getAgentId());
writeCellContent(row, styleRow, col++, list.get(i).getPhoneNumber());
writeCellContent(row, styleRow, col++, list.get(i).getCustomerId());
writeCellContent(row, styleRow, col++, list.get(i).getCustomerName());
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).getSurveyStatus());
writeCellContent(row, styleRow, col++, list.get(i).getStatus());
writeCellContent(row, styleRow, col++, list.get(i).getRecordStatus());
++rowIndex;
++count;
}
return workbook;
}
......
package com.viettel.campaign.service.impl;
import com.viettel.campaign.model.Campaign;
import com.viettel.campaign.model.TimeRangeDialMode;
import com.viettel.campaign.model.TimeZoneDialMode;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.ApParam;
import com.viettel.campaign.model.ccms_full.Campaign;
import com.viettel.campaign.model.ccms_full.TimeRangeDialMode;
import com.viettel.campaign.model.ccms_full.TimeZoneDialMode;
//import com.viettel.campaign.model.UserActionLog;
import com.viettel.campaign.repository.CampaignRepository;
import com.viettel.campaign.repository.TimeRangeDialModeRepository;
import com.viettel.campaign.repository.TimeZoneDialModeRepository;
import com.viettel.campaign.repository.ccms_full.*;
//import com.viettel.campaign.repository.UserActionLogRepository;
import com.viettel.campaign.repository.UserActionLogRepositoryCustom;
import com.viettel.campaign.repository.impl.CampaignRepositoryImpl;
import com.viettel.campaign.service.CampaignService;
import com.viettel.campaign.utils.BundleUtils;
import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.utils.DataUtil;
import com.viettel.campaign.utils.WorkBookBuilder;
import com.viettel.campaign.web.dto.*;
import com.viettel.campaign.web.dto.request_dto.CampaignRequestDTO;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
@Service
@Transactional(rollbackFor = Exception.class)
public class CampaignServiceImpl implements CampaignService {
private static final Logger logger = LogManager.getLogger(CampaignRepositoryImpl.class);
private static final Logger logger = LogManager.getLogger(CampaignServiceImpl.class);
public static String CAMPAIGN_TYPE = "CAMPAIGN_TYPE";
public static String CAMPAIGN_STATUS = "CAMPAIGN_STATUS";
@Autowired
CampaignRepository campaignRepository;
@Autowired
CampaignRepositoryCustom campaignRepositoryCustom;
@Autowired
TimeZoneDialModeRepository timeZoneDialModeRepository;
......@@ -43,39 +57,71 @@ public class CampaignServiceImpl implements CampaignService {
@Autowired
ModelMapper modelMapper;
@Autowired
ApParamRepository apParamRepository;
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO searchCampaignExecute(CampaignRequestDTO requestDto) {
return campaignRepository.searchCampaignExecute(requestDto);
return campaignRepositoryCustom.searchCampaignExecute(requestDto);
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO search(CampaignRequestDTO requestDto) {
return campaignRepository.search(requestDto);
return campaignRepositoryCustom.search(requestDto);
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO findByCampaignCode(CampaignRequestDTO requestDTO) {
return campaignRepository.findByCampaignCode(requestDTO);
return campaignRepositoryCustom.findByCampaignCode(requestDTO);
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public List<Campaign> findAllCondition(Long companySiteId) {
return campaignRepository.findAllByCompanySiteId(companySiteId);
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public List<Campaign> findCampaignByCompanySiteIdAndStartTimeIsLessThanEqualAndStatusIn(Long siteId, Date startTime, List<Long> status) {
return campaignRepository.findCampaignByCompanySiteIdAndStartTimeIsLessThanEqualAndStatusIn(siteId, startTime, status);
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public List<Campaign> findCampaignByCompanySiteIdAndEndTimeIsLessThanEqualAndStatusIn(Long siteId, Date endTime, List<Long> status) {
return campaignRepository.findCampaignByCompanySiteIdAndEndTimeIsLessThanEqualAndStatusIn(siteId, endTime, status);
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public Campaign updateProcess(Campaign c) {
return campaignRepository.save(c);
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO findByCampaignId(Long campaignId) {
ResultDTO result = new ResultDTO();
Campaign campaign = campaignRepository.findByCampaignId(campaignId);
if (campaign != null) {
result.setErrorCode(Constants.ApiErrorCode.SUCCESS);
result.setErrorCode(Constants.ApiErrorDesc.SUCCESS);
result.setDescription(Constants.ApiErrorDesc.SUCCESS);
result.setData(campaign);
} else {
result.setErrorCode(Constants.ApiErrorCode.ERROR);
result.setErrorCode(Constants.ApiErrorDesc.ERROR);
result.setDescription(Constants.ApiErrorDesc.ERROR);
}
return result;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO addNewCampaign(CampaignDTO campaignDTO) {
logger.info("=== Start add new campaign ");
ResultDTO resultDTO = new ResultDTO();
......@@ -141,6 +187,7 @@ public class CampaignServiceImpl implements CampaignService {
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO findCampaignById(Long campaignId) {
logger.info("=== Start find campaign by id: " + campaignId);
ResultDTO resultDTO = new ResultDTO();
......@@ -160,6 +207,7 @@ public class CampaignServiceImpl implements CampaignService {
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO changeCampaignStatus(CampaignDTO dto) {
ResultDTO result = new ResultDTO();
try {
......@@ -179,6 +227,14 @@ public class CampaignServiceImpl implements CampaignService {
userActionLog.setObjectId(entity.getCampaignId());
if (dto.getStatus().equals((short) -1)) {
userActionLog.setActionType((short) 2);
}
else if(dto.getStatus().equals((short) 4)) {
userActionLog.setActionType((short) 7);
}
else if(dto.getStatus().equals((short) 3)) {
userActionLog.setActionType((short) 4);
}
else if(dto.getStatus().equals((short) 2)) {
} else if (dto.getStatus().equals((short) 5)) {
userActionLog.setActionType((short) 7);
} else if (dto.getStatus().equals((short) 4)) {
......@@ -203,14 +259,106 @@ public class CampaignServiceImpl implements CampaignService {
return result;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO checkAllowStatusToPrepare(Long campaignId) {
return campaignRepositoryCustom.checkAllowStatusToPrepare(campaignId);
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public XSSFWorkbook exportCampaigns(CampaignRequestDTO dto) {
Locale locale = Locale.forLanguageTag("vi");
ResultDTO resultDTO = campaignRepositoryCustom.search(dto);
List<CampaignDTO> listData = (List<CampaignDTO>) resultDTO.getData();
List<ApParam> lstType = apParamRepository.findParamByParType(CAMPAIGN_TYPE);
XSSFWorkbook workbook = new XSSFWorkbook();
Sheet sheet;
CellStyle styleTitle = WorkBookBuilder.buildDefaultStyleTitle(workbook);
CellStyle styleRowHeader = WorkBookBuilder.buildDefaultStyleRowHeader(workbook);
CellStyle styleRow = WorkBookBuilder.buildDefaultStyleRow(workbook);
// list header
List<String> fileHeaderList = new ArrayList<>();
fileHeaderList.add(BundleUtils.getLangString("stt", locale));
fileHeaderList.add(BundleUtils.getLangString("campaign.code", locale));
fileHeaderList.add(BundleUtils.getLangString("campaign.name", locale));
fileHeaderList.add(BundleUtils.getLangString("campaign.type", locale));
fileHeaderList.add(BundleUtils.getLangString("campaign.chanel", locale));
fileHeaderList.add(BundleUtils.getLangString("campaign.startTime", locale));
fileHeaderList.add(BundleUtils.getLangString("campaign.endTime", locale));
fileHeaderList.add(BundleUtils.getLangString("campaign.cusNum", locale));
fileHeaderList.add(BundleUtils.getLangString("campaign.joinedCusNum", locale));
fileHeaderList.add(BundleUtils.getLangString("campaign.interactedCusNum", locale));
fileHeaderList.add(BundleUtils.getLangString("campaign.notInteractedCusNum", locale));
fileHeaderList.add(BundleUtils.getLangString("campaign.logCusNum", locale));
fileHeaderList.add(BundleUtils.getLangString("campaign.status", locale));
//
String sheetName = BundleUtils.getLangString("campaign", locale);
sheet = workbook.createSheet(sheetName);
// Title
String title = BundleUtils.getLangString("campaign.title", locale);
int rowTitleStart = 3;
Row rowTitle = sheet.createRow(rowTitleStart);
rowTitle.setHeight((short) 800);
WorkBookBuilder.writeCellContent(rowTitle, styleTitle, 3, title);
sheet.addMergedRegion(new CellRangeAddress(rowTitleStart, rowTitleStart, 3, 8));
// Header
int startRowTable = 5;
int count = 1;
Row rowHeader = sheet.createRow(startRowTable);
for (int i = 0; i < fileHeaderList.size(); i++) {
WorkBookBuilder.writeCellContent(rowHeader, styleRowHeader, i, fileHeaderList.get(i));
}
// Content
for (int i = 0, rowIndex = 1; i < listData.size(); i++) {
Row row = sheet.createRow(startRowTable + count);
int col = 0;
WorkBookBuilder.writeCellContent(row, styleRow, col++, rowIndex);
WorkBookBuilder.writeCellContent(row, styleRow, col++, listData.get(i).getCampaignCode());
WorkBookBuilder.writeCellContent(row, styleRow, col++, listData.get(i).getCampaignName());
WorkBookBuilder.writeCellContent(row, styleRow, col++, getCampaignTypeName(lstType, listData.get(i).getCampaignType()));
WorkBookBuilder.writeCellContent(row, styleRow, col++, DataUtil.isNullOrZero(listData.get(i).getChanel()) ? "" : BundleUtils.getLangString("campaign.chanel." + listData.get(i).getChanel(), locale));
WorkBookBuilder.writeCellContent(row, styleRow, col++, listData.get(i).getStartTime());
WorkBookBuilder.writeCellContent(row, styleRow, col++, listData.get(i).getEndTime());
WorkBookBuilder.writeCellContent(row, styleRow, col++, DataUtil.isNullOrZero(listData.get(i).getCustomerNumber()) ? 0 : listData.get(i).getCustomerNumber());
WorkBookBuilder.writeCellContent(row, styleRow, col++, DataUtil.isNullOrZero(listData.get(i).getNumOfJoinedCus()) ? 0 : listData.get(i).getNumOfJoinedCus());
WorkBookBuilder.writeCellContent(row, styleRow, col++, DataUtil.isNullOrZero(listData.get(i).getNumOfInteractedCus()) ? 0 : listData.get(i).getNumOfInteractedCus());
WorkBookBuilder.writeCellContent(row, styleRow, col++, DataUtil.isNullOrZero(listData.get(i).getNumOfNotInteractedCus()) ? 0 : listData.get(i).getNumOfNotInteractedCus());
WorkBookBuilder.writeCellContent(row, styleRow, col++, DataUtil.isNullOrZero(listData.get(i).getNumOfLockCus()) ? 0 : listData.get(i).getNumOfLockCus());
WorkBookBuilder.writeCellContent(row, styleRow, col++, listData.get(i).getStatus() == null ? "" : BundleUtils.getLangString("campaign.status." + listData.get(i).getStatus(), locale));
++rowIndex;
++count;
}
return workbook;
}
private String generateCampaignCode(String campaignType, Short chanel) {
int year = Calendar.getInstance().get(Calendar.YEAR);
String maxIndexStr = campaignRepository.getMaxCampaignIndex();
String maxIndexStr = campaignRepositoryCustom.getMaxCampaignIndex();
if (maxIndexStr != null) {
Long maxIndex = Long.valueOf(maxIndexStr) + 1;
String result = campaignType + "_" + String.valueOf(chanel) + "_" + String.valueOf(year) + "_" + maxIndex.toString();
String result = campaignType + "_" + chanel + "_" + year + "_" + maxIndex.toString();
return result;
}
return null;
}
public String getCampaignTypeName(List<ApParam> lstApParams, String type) {
String name = "";
if(!DataUtil.isNullOrEmpty(type)) {
for(int i = 0; i < lstApParams.size(); i++) {
if(type.equals(lstApParams.get(i).getParValue())) {
name = lstApParams.get(i).getParName();
break;
}
}
}
return name;
}
}
package com.viettel.campaign.service.impl;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.mapper.CustomerListMapper;
import com.viettel.campaign.mapper.CustomerMapper;
import com.viettel.campaign.model.Customer;
import com.viettel.campaign.model.CustomerContact;
import com.viettel.campaign.model.CustomerList;
import com.viettel.campaign.repository.*;
import com.viettel.campaign.model.ccms_full.Customer;
import com.viettel.campaign.model.ccms_full.CustomerContact;
import com.viettel.campaign.model.ccms_full.CustomerList;
import com.viettel.campaign.repository.ccms_full.*;
import com.viettel.campaign.service.CustomerService;
import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.utils.DataUtil;
......@@ -28,6 +29,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.util.Date;
import java.util.List;
......@@ -36,6 +38,7 @@ import java.util.List;
public class CustomerServiceImpl implements CustomerService {
@Autowired
@PersistenceContext( unitName= DataSourceQualify.JPA_UNIT_NAME_CCMS_FULL)
EntityManager entityManager;
@Autowired
......@@ -57,6 +60,7 @@ public class CustomerServiceImpl implements CustomerService {
CustomerListMappingRepository customerListMappingRepository;
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getAllCustomer(int page, int pageSize, String sort, long customerListId, long companySiteId) {
ResultDTO resultDTO = new ResultDTO();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
......@@ -122,6 +126,7 @@ public class CustomerServiceImpl implements CustomerService {
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getCustomerId(Long customerId) {
ResultDTO resultDTO = new ResultDTO();
......@@ -140,6 +145,7 @@ public class CustomerServiceImpl implements CustomerService {
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO searchAllCustomer(int page, int pageSize, String sort, long customerListId, long companySiteId, String name, String mobileNumber, String email) {
ResultDTO resultDTO = new ResultDTO();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
......@@ -238,7 +244,7 @@ public class CustomerServiceImpl implements CustomerService {
}
@Override
@Transactional
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO createCustomer(CustomerDTO customerDTO) {
ResultDTO resultDTO = new ResultDTO();
CustomerMapper customerMapper = new CustomerMapper();
......@@ -272,8 +278,8 @@ public class CustomerServiceImpl implements CustomerService {
return resultDTO;
}
@Transactional
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO deleteCustomer(CustomerRequestDTO customerRequestDTO) {
ResultDTO resultDTO = new ResultDTO();
try {
......@@ -295,8 +301,8 @@ public class CustomerServiceImpl implements CustomerService {
return resultDTO;
}
@Transactional
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO deleteIds(CustomerRequestDTO customerRequestDTO) {
ResultDTO resultDTO = new ResultDTO();
try {
......@@ -332,6 +338,7 @@ public class CustomerServiceImpl implements CustomerService {
// ------------- customer list ----------------- //
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getAllCustomerList(int page, int pageSize, String sort, Long companySiteId) {
ResultDTO resultDTO = new ResultDTO();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
......@@ -396,6 +403,7 @@ public class CustomerServiceImpl implements CustomerService {
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO createCustomerList(CustomerListDTO customerListDTO) {
ResultDTO resultDTO = new ResultDTO();
CustomerListMapper customerListMapper = new CustomerListMapper();
......@@ -426,6 +434,7 @@ public class CustomerServiceImpl implements CustomerService {
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO updateCustomerList(CustomerListDTO customerListDTO) {
ResultDTO resultDTO = new ResultDTO();
CustomerListMapper customerListMapper = new CustomerListMapper();
......@@ -456,8 +465,8 @@ public class CustomerServiceImpl implements CustomerService {
return resultDTO;
}
@Transactional
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO deleteCustomerList(CustomerListDTO customerListDTO) {
ResultDTO resultDTO = new ResultDTO();
......@@ -483,8 +492,8 @@ public class CustomerServiceImpl implements CustomerService {
return resultDTO;
}
@Transactional
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO deleteCustomerListIds(CustomerRequestDTO customerRequestDTO) {
ResultDTO resultDTO = new ResultDTO();
try {
......@@ -511,6 +520,7 @@ public class CustomerServiceImpl implements CustomerService {
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO searchCustomerList(SearchCustomerRequestDTO searchCustomerRequestDTO) {
ResultDTO resultDTO = new ResultDTO();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
......@@ -602,11 +612,13 @@ public class CustomerServiceImpl implements CustomerService {
}
@Override
public CustomerList getLatestCreated() {
return customerListRepository.latestCreated();
@Transactional(DataSourceQualify.CCMS_FULL)
public CustomerList getLatestCreated(Long companySiteId) {
return customerListRepository.latestCreated(companySiteId);
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getCustomerContact(CustomerContactDTO customer) {
ResultDTO result = new ResultDTO();
......@@ -630,6 +642,7 @@ public class CustomerServiceImpl implements CustomerService {
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getCustomerRecall(Long campaignId, Long customerId) {
ResultDTO result = new ResultDTO();
......@@ -652,6 +665,7 @@ public class CustomerServiceImpl implements CustomerService {
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO searchCustomerListInfoFromCustomerList(int page, int pageSize, String sort, Long campaignId, Long companySiteId) {
ResultDTO resultDTO = new ResultDTO();
try {
......
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.web.dto.TicketDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.HashMap;
......@@ -19,7 +21,8 @@ public class TicketServiceImpl implements TicketService {
@Autowired
TicketRepository ticketRepository;
@Override
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public Map getHistory(int page, int pageSize, String sort, String customerId) {
Map result = new HashMap();
List<TicketDTO> lst = new ArrayList<>();
......
......@@ -270,4 +270,5 @@ public class DataUtil {
public static boolean isNullOrZero(Short value) {
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;
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.joda.time.DateTime;
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.Optional;
import java.util.TimeZone;
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.NANOSECONDS;
/**
* @author anhvd_itsol
*/
@Slf4j
public final class DateTimeUtil {
public static final long DAY_IN_MILLIS = 86400000L;
public static interface DateTimeProvider { long now(); }
......@@ -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;
public class BaseDTO implements Serializable {
protected String keySet;
protected int pageSize;
protected int page;
protected Integer pageSize;
protected Integer page;
protected String sort;
protected String langKey;
}
......@@ -55,7 +55,6 @@ public class CampaignDTO extends BaseDTO {
private Integer timeWaitAgent;
private Long questIndex;
private Long numOfJoinedCus;
private Long numOfNotJoinedCus;
private Long numOfLockCus;
private String campaignTypeName;
private Date timeRangeStartTime;
......@@ -65,4 +64,6 @@ public class CampaignDTO extends BaseDTO {
private List<TimeZoneDialModeDTO> lstTimeZone;
private Short agentStatus;
private String sessionId;
private Long numOfInteractedCus;
private Long numOfNotInteractedCus;
}
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.CampaignExecuteService;
import org.apache.log4j.Logger;
......
......@@ -9,6 +9,7 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.sleuth.instrument.reactor.ReactorSleuth;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
......@@ -116,4 +117,41 @@ public class CampaignController {
dto.setSessionId(request.getSession().getId());
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 {
@GetMapping("/searchAllCustomerByParams")
@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);
return new ResponseEntity(result, HttpStatus.OK);
}
......@@ -166,9 +166,9 @@ public class CustomerController {
@GetMapping("/latestCreated")
@ResponseBody
public ResponseEntity getLatestCreated() {
public ResponseEntity getLatestCreated(@RequestParam("companySiteId") Long companySiteId) {
ResultDTO result = new ResultDTO();
result.setData(customerService.getLatestCreated());
result.setData(customerService.getLatestCreated(companySiteId));
return new ResponseEntity<>(result, HttpStatus.OK);
}
......
......@@ -8,6 +8,13 @@ spring:
url: jdbc:oracle:thin:@10.60.157.135:1521:vt
username: CCMS_FULL
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:
database-platform: org.hibernate.dialect.Oracle10gDialect
show-sql: true
......
......@@ -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.status = Trạng thái chiến dịch
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
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.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
a.STATUS status,
a.CUSTOMER_NUMBER cusNum,
b.SLKHThamgiaCD numOfJoinedCus,
c.SLKHChuaTuongTac numOfNotJoinedCus,
d.SLKHDoNotCall_Khoa numOfLockCus
e.SLKHDaTuongTac numOfInteractedCus,
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
LEFT JOIN (SELECT campaign_id, COUNT (*) AS SLKHThamgiaCD
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
ON a.CAMPAIGN_ID = b.CAMPAIGN_ID
LEFT JOIN (SELECT campaign_id, COUNT (*) AS SLKHChuaTuongTac
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
ON c.CAMPAIGN_ID = a.CAMPAIGN_ID
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
GROUP BY cc.CAMPAIGN_ID) d
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
AND COMPANY_SITE_ID = :p_company_site_id
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