Commit 6264ccd9 authored by Tu Bach's avatar Tu Bach

Merge branch 'master' into tubn

# Conflicts:
#	lib/ojdbc7.jar
parents a48a4e9e 2b5770de
File added
target/
/.idea/
logs/
out/
\ No newline at end of file
out/
/campaign.iml
/lib
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
import java.util.Properties;
public class MavenWrapperDownloader {
/**
* Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
*/
private static final String DEFAULT_DOWNLOAD_URL =
"https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar";
/**
* Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
* use instead of the default one.
*/
private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
".mvn/wrapper/maven-wrapper.properties";
/**
* Path where the maven-wrapper.jar will be saved to.
*/
private static final String MAVEN_WRAPPER_JAR_PATH =
".mvn/wrapper/maven-wrapper.jar";
/**
* Name of the property which should be used to override the default download url for the wrapper.
*/
private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
public static void main(String args[]) {
System.out.println("- Downloader started");
File baseDirectory = new File(args[0]);
System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
// If the maven-wrapper.properties exists, read it and check if it contains a custom
// wrapperUrl parameter.
File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
String url = DEFAULT_DOWNLOAD_URL;
if (mavenWrapperPropertyFile.exists()) {
FileInputStream mavenWrapperPropertyFileInputStream = null;
try {
mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
Properties mavenWrapperProperties = new Properties();
mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
} catch (IOException e) {
System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
} finally {
try {
if (mavenWrapperPropertyFileInputStream != null) {
mavenWrapperPropertyFileInputStream.close();
}
} catch (IOException e) {
// Ignore ...
}
}
}
System.out.println("- Downloading from: : " + url);
File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
if (!outputFile.getParentFile().exists()) {
if (!outputFile.getParentFile().mkdirs()) {
System.out.println(
"- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'");
}
}
System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
try {
downloadFileFromURL(url, outputFile);
System.out.println("Done");
System.exit(0);
} catch (Throwable e) {
System.out.println("- Error downloading");
e.printStackTrace();
System.exit(1);
}
}
private static void downloadFileFromURL(String urlString, File destination) throws Exception {
URL website = new URL(urlString);
ReadableByteChannel rbc;
rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream(destination);
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
fos.close();
rbc.close();
}
}
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip
#redis address, port
redis_address=10.60.156.82:8011,10.60.156.82:8012,10.60.156.82:8013,10.60.156.82:8014,10.60.156.82:8015,10.60.156.82:8016
redis_timeout=3000
#end
\ No newline at end of file
......@@ -9,92 +9,48 @@
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.viettel</groupId>
<artifactId>campaign</artifactId>
<version>0.0.1-SNAPSHOT</version>
<artifactId>service-campaign</artifactId>
<version>1.0</version>
<name>service-campaign</name>
<packaging>jar</packaging>
<description>Campaign service for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!--<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>-->
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.SR2</spring-cloud.version>
<!--<spring-cloud.version>Finchley.SR2</spring-cloud.version>-->
</properties>
<dependencies>
<!--<dependency>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-activemq</artifactId>-->
<!--</dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--<dependency>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-integration</artifactId>-->
<!--</dependency>-->
<!--<dependency>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-mail</artifactId>-->
<!--</dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!--<dependency>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-thymeleaf</artifactId>-->
<!--</dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web-services</artifactId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-streams</artifactId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<groupId>com.viettel</groupId>
<artifactId>viettelsercurity</artifactId>
<version>11.2.0.3</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
<!-- <scope>system</scope>-->
<!-- <systemPath>${project.basedir}/lib/ojdbc7.jar</systemPath>-->
<scope>system</scope>
<systemPath>${project.basedir}/lib/ojdbc7.jar</systemPath>
<version>1.0</version>
</dependency>
<dependency>
......@@ -108,20 +64,10 @@
<version>5.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<!--<dependency>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-configuration-processor</artifactId>-->
<!--<optional>true</optional>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-devtools</artifactId>-->
<!--<scope>runtime</scope>-->
<!--</dependency>-->
<dependency>
<groupId>org.projectlombok</groupId>
......@@ -133,26 +79,6 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.batch</groupId>
<artifactId>spring-batch-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-mockmvc</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
......@@ -183,55 +109,106 @@
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
</dependency>
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>2.3.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<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>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.8.0</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
<type>jar</type>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!--<dependencyManagement>-->
<!--<dependencies>-->
<!--<dependency>-->
<!--<groupId>org.springframework.cloud</groupId>-->
<!--<artifactId>spring-cloud-dependencies</artifactId>-->
<!--<version>${spring-cloud.version}</version>-->
<!--<type>pom</type>-->
<!--<scope>import</scope>-->
<!--</dependency>-->
<!--</dependencies>-->
<!--</dependencyManagement>-->
<build>
<plugins>
<!--<plugin>-->
<!--<groupId>org.asciidoctor</groupId>-->
<!--<artifactId>asciidoctor-maven-plugin</artifactId>-->
<!--<version>1.5.3</version>-->
<!--<executions>-->
<!--<execution>-->
<!--<id>generate-docs</id>-->
<!--<phase>prepare-package</phase>-->
<!--<goals>-->
<!--<goal>process-asciidoc</goal>-->
<!--</goals>-->
<!--<configuration>-->
<!--<backend>html</backend>-->
<!--<doctype>book</doctype>-->
<!--</configuration>-->
<!--</execution>-->
<!--</executions>-->
<!--<dependencies>-->
<!--<dependency>-->
<!--<groupId>org.springframework.restdocs</groupId>-->
<!--<artifactId>spring-restdocs-asciidoctor</artifactId>-->
<!--<version>${spring-restdocs.version}</version>-->
<!--</dependency>-->
<!--</dependencies>-->
<!--<groupId>org.asciidoctor</groupId>-->
<!--<artifactId>asciidoctor-maven-plugin</artifactId>-->
<!--<version>1.5.3</version>-->
<!--<executions>-->
<!--<execution>-->
<!--<id>generate-docs</id>-->
<!--<phase>prepare-package</phase>-->
<!--<goals>-->
<!--<goal>process-asciidoc</goal>-->
<!--</goals>-->
<!--<configuration>-->
<!--<backend>html</backend>-->
<!--<doctype>book</doctype>-->
<!--</configuration>-->
<!--</execution>-->
<!--</executions>-->
<!--<dependencies>-->
<!--<dependency>-->
<!--<groupId>org.springframework.restdocs</groupId>-->
<!--<artifactId>spring-restdocs-asciidoctor</artifactId>-->
<!--<version>${spring-restdocs.version}</version>-->
<!--</dependency>-->
<!--</dependencies>-->
<!--</plugin>-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
<!--<configuration>-->
<!--<executable>true</executable>-->
<!--</configuration>-->
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>unknown-jars-temp-repo</id>
<name>A temporary repository created by NetBeans for libraries and jars it could not identify. Please
replace the dependencies in this repository with correct ones and delete this repository.
</name>
<url>file:${project.basedir}/lib</url>
</repository>
</repositories>
</project>
package com.viettel.campaign;
import com.viettel.campaign.config.DataSourceProperties;
import com.viettel.campaign.utils.Config;
import com.viettel.campaign.utils.RedisUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ServiceCampaignApplication {
@Autowired
DataSourceProperties dataSourceProperties;
public static void main(String[] args) {
SpringApplication.run(ServiceCampaignApplication.class, args);
RedisUtil redis = new RedisUtil(Config.redisAddress,Config.redisTimeout);
redis.setup();
}
}
package com.viettel.campaign.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
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.persistence.criteria.CriteriaBuilder;
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;
@Value("${datasource-property.acd-full.driver-class-name}")
private String driverClassName;
@Value("${datasource-property.acd-full.url}")
private String url;
@Value("${datasource-property.acd-full.max_pool_size}")
private Integer maxPoolSize;
@Value("${datasource-property.acd-full.password}")
private String password;
@Value("${datasource-property.acd-full.username}")
private String username;
@Bean("datasource.datasource2")
public DataSource dataSource(){
OracleDataSource r = new OracleDataSource();
r.setDriverClassName(driverClassName);
r.setPoolName("app.datasource2");
r.setJdbcUrl(url);
r.setMaximumPoolSize(maxPoolSize);
r.setPassword(password);
r.setUsername(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("datasource.datasource2")
public NamedParameterJdbcTemplate namedParameterJdbcTemplate(@Qualifier("datasource.datasource2") 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.beans.factory.annotation.Value;
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;
@Value("${datasource-property.ccms-full.driver-class-name}")
private String driverClassName;
@Value("${datasource-property.ccms-full.url}")
private String url;
@Value("${datasource-property.ccms-full.max_pool_size}")
private Integer maxPoolSize;
@Value("${datasource-property.ccms-full.password}")
private String password;
@Value("${datasource-property.ccms-full.username}")
private String username;
@Bean(name= "datasource.datasource1")
public DataSource dataSource(){
OracleDataSource r = new OracleDataSource();
r.setDriverClassName(driverClassName);
r.setPoolName("app.datasource1");
r.setJdbcUrl(url);
r.setMaximumPoolSize(maxPoolSize);
r.setPassword(password);
r.setUsername(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("datasource.datasource1")
public NamedParameterJdbcTemplate namedParameterJdbcTemplate(@Qualifier("datasource.datasource1") DataSource abcDataSource) {
return new NamedParameterJdbcTemplate(abcDataSource);
}
}
package com.viettel.campaign.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @author anhvd_itsol
*/
@Component
@ConfigurationProperties(prefix = "datasource-property")
public class DataSourceProperties {
public static class CCMSFull{
private String driverClassName;
private String url;
private String username;
private String password;
private Integer maxPoolSize;
public String getDriverClassName() {
return driverClassName;
}
public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getMaxPoolSize() {
return maxPoolSize;
}
public void setMaxPoolSize(Integer maxPoolSize) {
this.maxPoolSize = maxPoolSize;
}
}
public static class ACDFull{
private String driverClassName;
private String url;
private String username;
private String password;
private Integer maxPoolSize;
public String getDriverClassName() {
return driverClassName;
}
public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getMaxPoolSize() {
return maxPoolSize;
}
public void setMaxPoolSize(Integer maxPoolSize) {
this.maxPoolSize = maxPoolSize;
}
}
}
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";
}
package com.viettel.campaign.config;
//import com.viettel.campaign.job.CampaignJob;
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 +31,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 +40,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(() -> {
......@@ -70,8 +72,7 @@ public class JobConfig implements SchedulingConfigurer {
private void job2(TaskScheduler scheduler) {
job2 = scheduler.schedule(() -> {
// log.info("processing job2 ...");
// log.info(Thread.currentThread().getName() + " The Task2 executed at " + new Date());
log.info(Thread.currentThread().getName() + " The Job executed at " + new Date());
campaignJob().process();
}, triggerContext -> {
......@@ -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 org.modelmapper.ModelMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author anhvd_itsol
*/
@Configuration
public class ModelMapperConfig {
@Bean
public ModelMapper modelMapper() {
return new ModelMapper();
}
}
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.config;
import com.viettel.campaign.service.Receiver;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
import java.util.Map;
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.common.serialization.StringDeserializer;
import org.springframework.context.annotation.Bean;
import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
import org.springframework.kafka.core.ConsumerFactory;
import org.springframework.kafka.core.DefaultKafkaConsumerFactory;
import org.springframework.kafka.support.serializer.JsonDeserializer;
/**
* @author hanv_itsol
* @project campaign
*/
@Configuration
public class ReceiverConfig {
// @Value("${spring.kafka.bootstrap-servers}")
private String bootstrapServers = "192.168.1.201:9092";
@Bean
public Map<String, Object> consumerConfigs() {
Map<String, Object> props = new HashMap<>();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, JsonDeserializer.class);
props.put(ConsumerConfig.GROUP_ID_CONFIG, "hanv");
return props;
}
@Bean
public ConsumerFactory<String, String> consumerFactory() {
return new DefaultKafkaConsumerFactory<>(consumerConfigs(), new StringDeserializer(),
new JsonDeserializer<>());
}
@Bean
public ConcurrentKafkaListenerContainerFactory<String, String> kafkaListenerContainerFactory() {
ConcurrentKafkaListenerContainerFactory<String, String> factory =
new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory());
return factory;
}
@Bean
public Receiver receiver() {
return new Receiver();
}
}
//package com.viettel.campaign.config;
//
//import com.viettel.campaign.service.Receiver;
//import org.springframework.context.annotation.Configuration;
//import java.util.HashMap;
//import java.util.Map;
//
//import org.apache.kafka.clients.consumer.ConsumerConfig;
//import org.apache.kafka.common.serialization.StringDeserializer;
//import org.springframework.context.annotation.Bean;
//import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
//import org.springframework.kafka.core.ConsumerFactory;
//import org.springframework.kafka.core.DefaultKafkaConsumerFactory;
//import org.springframework.kafka.support.serializer.JsonDeserializer;
//
///**
// * @author hanv_itsol
// * @project campaign
// */
//@Configuration
//public class ReceiverConfig {
//// @Value("${spring.kafka.bootstrap-servers}")
// private String bootstrapServers = "192.168.1.201:9092";
//
// @Bean
// public Map<String, Object> consumerConfigs() {
// Map<String, Object> props = new HashMap<>();
// props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
// props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
// props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, JsonDeserializer.class);
// props.put(ConsumerConfig.GROUP_ID_CONFIG, "hanv");
// return props;
// }
//
// @Bean
// public ConsumerFactory<String, String> consumerFactory() {
// return new DefaultKafkaConsumerFactory<>(consumerConfigs(), new StringDeserializer(),
// new JsonDeserializer<>());
// }
//
// @Bean
// public ConcurrentKafkaListenerContainerFactory<String, String> kafkaListenerContainerFactory() {
// ConcurrentKafkaListenerContainerFactory<String, String> factory =
// new ConcurrentKafkaListenerContainerFactory<>();
// factory.setConsumerFactory(consumerFactory());
//
// return factory;
// }
//
// @Bean
// public Receiver receiver() {
// return new Receiver();
// }
//}
package com.viettel.campaign.config;
import java.util.HashMap;
import java.util.Map;
import com.viettel.campaign.service.Sender;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.common.serialization.StringSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.kafka.core.DefaultKafkaProducerFactory;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.kafka.core.ProducerFactory;
import org.springframework.kafka.support.serializer.JsonSerializer;
/**
* @author hanv_itsol
* @project campaign
*/
@Configuration
public class SenderConfig {
private String bootstrapServers = "192.168.1.201:9092";
@Bean
public Map<String, Object> producerConfigs() {
Map<String, Object> props = new HashMap<>();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class);
return props;
}
@Bean
public ProducerFactory<String, String> producerFactory() {
return new DefaultKafkaProducerFactory<>(producerConfigs());
}
@Bean
public KafkaTemplate<String, String> simpleKafkaTemplate() {
return new KafkaTemplate<>(producerFactory());
}
@Bean
public Sender sender() {
return new Sender();
}
}
//package com.viettel.campaign.config;
//
//import java.util.HashMap;
//import java.util.Map;
//
//import com.viettel.campaign.service.Sender;
//import org.apache.kafka.clients.producer.ProducerConfig;
//import org.apache.kafka.common.serialization.StringSerializer;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.kafka.core.DefaultKafkaProducerFactory;
//import org.springframework.kafka.core.KafkaTemplate;
//import org.springframework.kafka.core.ProducerFactory;
//import org.springframework.kafka.support.serializer.JsonSerializer;
//
///**
// * @author hanv_itsol
// * @project campaign
// */
//@Configuration
//public class SenderConfig {
// private String bootstrapServers = "192.168.1.201:9092";
//
// @Bean
// public Map<String, Object> producerConfigs() {
// Map<String, Object> props = new HashMap<>();
// props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
// props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
// props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class);
//
// return props;
// }
//
// @Bean
// public ProducerFactory<String, String> producerFactory() {
// return new DefaultKafkaProducerFactory<>(producerConfigs());
// }
//
// @Bean
// public KafkaTemplate<String, String> simpleKafkaTemplate() {
// return new KafkaTemplate<>(producerFactory());
// }
//
// @Bean
// public Sender sender() {
// return new Sender();
// }
//}
package com.viettel.campaign.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
/**
* @author hanv_itsol
* @project service-campaign
*/
@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
}
}
//package com.viettel.campaign.config;
//
//import com.viettel.campaign.filter.CorsFilter;
//import org.springframework.boot.web.servlet.FilterRegistrationBean;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.security.config.annotation.web.builders.HttpSecurity;
//import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
//import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
//
///**
// * @author hanv_itsol
// * @project service-campaign
// */
//
//@EnableWebSecurity
//@Configuration
//public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
//
// @Override
// protected void configure(HttpSecurity http) throws Exception {
// http.csrf().disable();
// }
//
// @Bean
// public FilterRegistrationBean filterRegistrationBean() {
// FilterRegistrationBean registrationBean = new FilterRegistrationBean();
// registrationBean.setName("CorsFilter");
// CorsFilter corsFilter = new CorsFilter();
// registrationBean.setFilter(corsFilter);
// registrationBean.setOrder(1);
// return registrationBean;
// }
//}
package com.viettel.campaign.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
/**
* @author hanv_itsol
* @project service-campaign
*/
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic");
registry.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/websocket").setAllowedOrigins("*").withSockJS();
}
}
\ No newline at end of file
package com.viettel.campaign.filter;
import com.viettel.campaign.utils.RedisUtil;
import com.viettel.econtact.filter.UserSession;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
......@@ -11,23 +13,44 @@ import java.io.IOException;
@Component
public class CorsFilter implements Filter {
private Logger logger = Logger.getLogger(CorsFilter.class);
// private Logger logger = Logger.getLogger(CorsFilter.class);
@Override
public void init(FilterConfig filterConfig) throws ServletException {
public void init(FilterConfig filterConfig){
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Origin, Authorization, X-Requested-With, Content-Type, Accept, token1, X-Auth-Token");
HttpServletRequest request = (HttpServletRequest) req;
// chain.doFilter(req, resp);
try {
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
chain.doFilter(req, resp);
return;
}
if ("/".equals(request.getRequestURI())) {
chain.doFilter(req, resp);
return;
}
String xAuthToken = request.getHeader("X-Auth-Token");
if (xAuthToken == null || "".equals(xAuthToken)) {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "The token is null.");
return;
}
Object obj = RedisUtil.getInstance().get(xAuthToken);
if (obj instanceof UserSession) {
chain.doFilter(req, resp);
} catch (Exception e) {
logger.error(e.getMessage(), e);
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage());
} else {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "The token is invalid.");
}
}
......
package com.viettel.campaign.filter;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
/**
* @author hanv_itsol
* @project service-campaign
*/
@Getter
@Setter
public class UserSession implements Serializable {
String authToken;
String ownserId;
String accountId;
Long userId;
String userName;
String role;
Long siteId;
Long companySiteId;
Long expTime;
}
package com.viettel.campaign.job;
import com.viettel.campaign.model.ccms_full.Campaign;
import com.viettel.campaign.model.ccms_full.Customer;
import com.viettel.campaign.model.ccms_full.CustomerTime;
import com.viettel.campaign.model.ccms_full.ProcessConfig;
import com.viettel.campaign.service.CampaignService;
import com.viettel.campaign.service.CustomerService;
import com.viettel.campaign.service.CustomerTimeService;
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 java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @author hanv_itsol
......@@ -13,11 +25,109 @@ 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)
@Autowired
private ProcessConfigService processConfigService;
@Autowired
private CampaignService campaignService;
@Autowired
private CustomerTimeService customerTimeService;
@Autowired
private CustomerService customerService;
// @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){
List<Customer> customers = customerService.findAllByCondition(p.getSiteId(), new Date());
updateCustomer(customers);
updateCustomerTime(customers);
log.info("Cap nhat thoi gian thuc hien tien trinh cho siteId ... #{}", p.getSiteId());
p.setLastProcess(new Date());
processConfigService.update(p);
}
break;
case CRON_EXPRESSION_CHECK_START:
// process
if(isExecute){
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 -> {
log.info("Chuyen trang thai chien dich ... #{} ... tu Du thao sang Trien khai", campaign.getCampaignId());
campaign.setProcessStatus(1);
campaign.setStatus(2L);
campaign.setCampaignStart(new Date());
campaignService.updateProcess(campaign);
});
log.info("Cap nhat thoi gian thuc hien tien trinh cho siteId ... #{}", p.getSiteId());
p.setLastProcess(new Date());
processConfigService.update(p);
}
break;
case CRON_EXPRESSION_CHECK_END:
// process
if(isExecute){
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 -> {
log.info("Chuyen trang thai chien dich ... #{} ... sang Ket thuc", campaign.getCampaignId());
campaign.setStatus(4L);
campaign.setCampaignEnd(new Date());
campaignService.updateProcess(campaign);
});
log.info("Cap nhat thoi gian thuc hien tien trinh cho siteId ... #{}", p.getSiteId());
p.setLastProcess(new Date());
processConfigService.update(p);
}
break;
default:
// update last check time
}
});
}
private void updateCustomer(List<Customer> customers){
customers.parallelStream().forEach(c -> {
log.info("Cap nhat trang thai khoa cua KH ... #{}", c.getCustomerId());
c.setIpccStatus("active");
customerService.update(c);
});
}
private void updateCustomerTime(List<Customer> customers){
customers.parallelStream().forEach(customer -> {
// find all customer_time by customerId
List<CustomerTime> customerTimes = customerTimeService.findByCustomerId(customer.getCustomerId());
customerTimes.parallelStream().forEach(customerTime -> {
log.info("Cap nhat Customer time cua KH ... #{}", customerTime.getCustomerId());
customerTime.setStatus(2);
customerTime.setUpdateTime(new Date());
customerTimeService.update(customerTime);
});
});
}
}
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.model.ccms_full.CampaignAgent;
import com.viettel.campaign.web.dto.CampaignAgentDTO;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
public class CampaignAgentMapper extends BaseMapper<CampaignAgent, CampaignAgentDTO> {
@Autowired
ModelMapper modelMapper;
@Override
public CampaignAgentDTO toDtoBean(CampaignAgent campaignAgent) {
return modelMapper.map(campaignAgent, CampaignAgentDTO.class);
}
@Override
public CampaignAgent toPersistenceBean(CampaignAgentDTO dtoBean) {
return modelMapper.map(dtoBean, CampaignAgent.class);
}
}
package com.viettel.campaign.mapper;
import com.viettel.campaign.web.dto.CampaignCompleteCodeDTO;
import com.viettel.campaign.model.CampaignCompleteCode;
import com.viettel.campaign.web.dto.CampaignCfgDTO;
import com.viettel.campaign.model.ccms_full.CampaignCfg;
public class CampaignCompleteCodeMapper extends BaseMapper<CampaignCompleteCode, CampaignCompleteCodeDTO> {
public class CampaignCompleteCodeMapper extends BaseMapper<CampaignCfg, CampaignCfgDTO> {
@Override
public CampaignCompleteCodeDTO toDtoBean(CampaignCompleteCode entity) {
CampaignCompleteCodeDTO dto = new CampaignCompleteCodeDTO();
public CampaignCfgDTO toDtoBean(CampaignCfg entity) {
CampaignCfgDTO dto = new CampaignCfgDTO();
if (entity != null) {
dto.setCampaignCompleteCodeId(entity.getCampaignCompleteCodeId());
......@@ -27,14 +27,15 @@ public class CampaignCompleteCodeMapper extends BaseMapper<CampaignCompleteCode,
dto.setCompanySiteId(entity.getCompanySiteId());
dto.setIsLock(entity.getIsLock());
dto.setDurationLock(entity.getDurationLock());
dto.setChanel(entity.getChanel());
}
return dto;
}
@Override
public CampaignCompleteCode toPersistenceBean(CampaignCompleteCodeDTO dtoBean) {
CampaignCompleteCode entity = new CampaignCompleteCode();
public CampaignCfg toPersistenceBean(CampaignCfgDTO dtoBean) {
CampaignCfg entity = new CampaignCfg();
if (dtoBean != null) {
entity.setCampaignCompleteCodeId(dtoBean.getCampaignCompleteCodeId());
......@@ -54,6 +55,7 @@ public class CampaignCompleteCodeMapper extends BaseMapper<CampaignCompleteCode,
entity.setCompanySiteId(dtoBean.getCompanySiteId());
entity.setIsLock(dtoBean.getIsLock());
entity.setDurationLock(dtoBean.getDurationLock());
entity.setChanel(dtoBean.getChanel());
}
return entity;
......
package com.viettel.campaign.mapper;
import com.viettel.campaign.model.ccms_full.CustomerList;
import com.viettel.campaign.web.dto.CustomerListDTO;
public class CustomerListMapper extends BaseMapper<CustomerList, CustomerListDTO> {
@Override
public CustomerListDTO toDtoBean(CustomerList customerList) {
CustomerListDTO obj = new CustomerListDTO();
if (customerList != null) {
obj.setCreateAt(customerList.getCreateAt());
obj.setCreateBy(customerList.getCreateBy());
obj.setCustomerListCode(customerList.getCustomerListCode());
obj.setCustomerListId(customerList.getCustomerListId());
obj.setCompanySiteId(customerList.getCompanySiteId());
obj.setCustomerListName(customerList.getCustomerListName());
obj.setDeptCreate(customerList.getDeptCreate());
obj.setSource(customerList.getSource());
obj.setStatus(customerList.getStatus());
obj.setUpdateAt(customerList.getUpdateAt());
obj.setUpdateBy(customerList.getUpdateBy());
}
return obj;
}
@Override
public CustomerList toPersistenceBean(CustomerListDTO dtoBean) {
CustomerList obj = new CustomerList();
if (dtoBean != null) {
obj.setCreateAt(dtoBean.getCreateAt());
obj.setCreateBy(dtoBean.getCreateBy());
obj.setCustomerListCode(dtoBean.getCustomerListCode());
obj.setCustomerListId(dtoBean.getCustomerListId());
obj.setCustomerListName(dtoBean.getCustomerListName());
obj.setCompanySiteId(dtoBean.getCompanySiteId());
obj.setDeptCreate(dtoBean.getDeptCreate());
obj.setSource(dtoBean.getSource());
obj.setStatus(dtoBean.getStatus());
obj.setUpdateAt(dtoBean.getUpdateAt());
obj.setUpdateBy(dtoBean.getUpdateBy());
}
return obj;
}
}
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.acd_full;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import java.util.Date;
@Entity
@Table(name = "AGENTS")
@Getter
@Setter
public class Agents {
@Id
@Basic(optional = false)
@Column(name = "AGENT_ID")
private String agentId;
@Column(name = "DESCRIPTION")
private String description;
@Column(name = "SYSTEM_STATUS")
private String systemStatus;
@Column(name = "USER_STATUS")
private String userStatus;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LAST_START_WORK")
private Date lastStartWork;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LAST_FINISH_WORK")
private Date lastFinishWork;
@Column(name = "LOGIN_TYPE")
private String loginType;
@Column(name = "VSA_USER_LOGIN")
private String vsaUserLogin;
@Column(name = "CALL_STATUS")
private String callStatus;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LAST_CHANGE_STATUS")
private Date lastChangeStatus;
@Column(name = "IP_LOGIN")
private String ipLogin;
@Column(name = "NUM_REJECTCALL")
private String numRejectcall;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LOGIN_TIME")
private Date loginTime;
@Column(name = "GROUP_NAME")
private String groupName;
@Column(name = "TOTAL_ANSWER_CALL")
private String totalAnswerCall;
@Column(name = "TOTAL_ANSWER_TIME")
private String totalAnswerTime;
@Column(name = "CALLOUT_ID")
private Integer calloutId;
@Column(name = "LAST_QUEUE_ANSWER")
private String lastQueueAnswer;
@Column(name = "EMAIL_USER_STATUS")
private String emailUserAnswer;
@Column(name = "CHAT_USER_STATUS")
private String chatUserStatus;
@Column(name = "SMS_USER_STATUS")
private String smsUserStatus;
@Column(name = "MULTI_CHANNEL_USER_STATUS")
private String multiChannelUserStatus;
@Column(name = "MAX_TRANSACTION_EMAIL")
private Integer maxTransactionEmail = 1;
@Column(name = "MAX_TRANSACTION_CHAT")
private Integer maxTransactionChat = 1;
@Column(name = "MAX_CURRENT_TRANSACTION")
private Integer maxCurrentTransaction = 6;
@Column(name = "TOTAL_TRANSACTION")
private Integer totalTransaction = 0;
@Column(name = "EMAIL_SYSTEM_STATUS")
private Integer emailSystemStatus = 0;
@Column(name = "CHAT_SYSTEM_STATUS")
private Integer chatSystemStatus = 0;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LAST_CHANGE_CHAT_STATUS")
private Date lastChangeChatStatus;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LAST_CHANGE_EMAIL_STATUS")
private Date lastChangeEmailStatus;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LAST_CHANGE_MULTI_STATUS")
private Date lastChangeMultiStatus;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LAST_START_WORK_CHAT")
private Date lastStartWorkChat;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LAST_START_WORK_EMAIL")
private Date lastStartWorkEmail;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LAST_FINISH_WORK_CHAT")
private Date lastFinishWorkChat;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LAST_FINISH_WORK_EMAIL")
private Date lastFinishWorkEmail;
@Column(name = "TOTAL_ANSWER_CHAT")
private Long totalAnswerChat;
@Column(name = "TOTAL_ANSWER_EMAIL")
private Long totalAnswerEmail;
@Column(name = "TOTAL_ANSWER_TIME_EMAIL")
private Long totalAnswerTimeEmail;
@Column(name = "TOTAL_ANSWER_TIME_CHAT")
private Long totalAnswerTimeChat;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LAST_ASSIGN_TIME_SMS")
private Date lastAssignTimeSms;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LAST_CHANGE_SMS_STATUS")
private Date lastChangeSmsStatus;
@Column(name = "MAX_TRANSACTION_SMS")
private Integer maxTransactionSms = 1;
@Column(name = "SMS_SYSTEM_STATUS")
private Integer smsSystemStatus = 0;
@Column(name = "FACEBOOK_SYSTEM_STATUS")
private Integer facebookSystemStatus = 0;
@Column(name = "FACEBOOK_USER_STATUS")
private String facebookUserStatus;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LAST_START_WORK_SMS")
private Date lastStartWorkSms;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LAST_START_WORK_FACEBOOK")
private Date lastStartWorkFacebook;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LAST_FINISH_WORK_SMS")
private Date lastFinishWorkSms;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LAST_FINISH_WORK_FACEBOOK")
private Date lastFinishWorkFacebook;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LAST_CHANGE_FACEBOOK_STATUS")
private Date lastChangeFacebookStatus;
@Column(name = "MAX_TRANSACTION_FACEBOOK")
private Integer maxTransactionFacebook = 1;
@Column(name = "TICKET_USER_STATUS")
private String ticketUserStatus;
@Column(name = "TICKET_SYSTEM_STATUS")
private Integer ticketSystemStatus;
@Column(name = "MAX_TRANSACTION_TICKET")
private Integer maxTransactionTicket;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LAST_START_WORK_TICKET")
private Date lastStartWorkTicket;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LAST_FINISH_WORK_TICKET")
private Date lastFinishWorkTicket;
@Column(name = "COMPANY_SITE_ID")
private Long companySiteId;
@Column(name = "SITE_ID")
private Long siteId;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LAST_CHANGE_TICKET_STATUS")
private Date lastChangeTicketStatus;
@Column(name = "AGENT_TYPE")
private Short agentType;
@Column(name = "STATUS")
private Long status = 1L;
@Column(name = "CREATE_BY")
private String createBy;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "CREATE_DATE")
private Date createDate;
@Column(name = "UPDATE_BY")
private String updateBy;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "UPDATE_DATE")
private Date updateDate;
@Column(name = "USER_KAZOO_ID")
private String userKazooId;
@Column(name = "CAMPAIGN_SYSTEM_STATUS")
private String campaignSystemStatus;
@Column(name = "CURRENT_CAMPAIGN_ID")
private Long currentCampaignId;
}
package com.viettel.campaign.model.acd_full;
/**
* @author anhvd_itsol
*/
public class modeltest {
}
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;
......@@ -6,7 +6,6 @@ import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
@Entity
......@@ -17,25 +16,27 @@ public class Campaign implements Serializable {
@Id
@NotNull
@GeneratedValue(generator = "campaign_seq")
@SequenceGenerator(name = "campaign_seq", sequenceName = "campaign_seq", allocationSize = 1)
@Basic(optional = false)
@Column(name = "CAMPAIGN_ID")
private BigDecimal campaignId;
private Long campaignId;
@Column(name = "COMPANY_SITE_ID")
private BigDecimal companySiteId;
private Long companySiteId;
@Column(name = "CAMPAIGN_CODE")
private String campaignCode;
@Column(name = "CAMPAIGN_NAME")
private String campaignName;
@Column(name = "CHANEL")
private BigDecimal chanel;
private Long chanel;
@Column(name = "CONTENT")
private String content;
@Column(name = "CUSTOMER_NUMBER")
private BigDecimal customerNumber;
private Long customerNumber;
@Column(name = "TARGET")
private String target;
@Column(name = "STATUS")
private BigDecimal status;
private Long status;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "START_TIME")
private Date startTime;
......@@ -65,7 +66,7 @@ public class Campaign implements Serializable {
@Column(name = "PROCESS_STATUS")
private Integer processStatus;
@Column(name = "DIAL_MODE")
private BigDecimal dialMode;
private Long dialMode;
@Column(name = "DEPT_CODE")
private String deptCode;
@Column(name = "TIME_RANGE")
......@@ -73,29 +74,29 @@ public class Campaign implements Serializable {
@Column(name = "DAY_OF_WEEK")
private String dayOfWeek;
@Column(name = "CURRENT_TIME_MODE")
private BigDecimal currentTimeModel;
private Long currentTimeMode;
@Column(name = "WRAPUP_TIME_CONNECT")
private BigDecimal wrapupTimeConnect;
private Long wrapupTimeConnect;
@Column(name = "WRAPUP_TIME_DISCONNECT")
private BigDecimal wrapupTimeDisconnect;
private Long wrapupTimeDisconnect;
@Column(name = "PREVIEW_TIME")
private BigDecimal previewTime;
private Long previewTime;
@Column(name = "RATE_DIAL")
private BigDecimal rateDial;
private Long rateDial;
@Column(name = "RATE_MISS")
private BigDecimal rateMiss;
private Long rateMiss;
@Column(name = "AVG_TIME_PROCESS")
private BigDecimal avgTimeProcess;
private Long avgTimeProcess;
@Column(name = "IS_APPLY_CUST_LOCK")
private BigDecimal isApplyCustLock;
private Long isApplyCustLock;
@Column(name = "TARGET_TYPE")
private BigDecimal targetType;
private Long targetType;
@Column(name = "IS_TARGET")
private BigDecimal isTarget;
private Long isTarget;
@Column(name = "CAMPAIGN_IVR_CALLED_ID")
private BigDecimal campaignIvrCalledId;
private Long campaignIvrCalledId;
@Column(name = "CONCURRENT_CALL")
private BigDecimal concurrentCall;
private Long concurrentCall;
@Column(name = "CALL_OUT_TIME_IN_DAY")
private String callOutTimeInDay;
@Column(name = "MUSIC_LIST")
......@@ -111,5 +112,6 @@ public class Campaign implements Serializable {
@Column(name = "TIME_WAIT_AGENT")
private Integer timeWaitAgent;
@Column(name = "QUEST_INDEX")
private BigDecimal questIndex;
private Long questIndex;
}
package com.viettel.campaign.model;
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.*;
import java.io.Serializable;
@Entity
......@@ -16,6 +13,8 @@ import java.io.Serializable;
public class CampaignAgent implements Serializable {
@Id
@GeneratedValue(generator = "CAMPAIGN_AGENT_SEQ")
@SequenceGenerator(name = "CAMPAIGN_AGENT_SEQ", sequenceName = "CAMPAIGN_AGENT_SEQ", allocationSize = 1)
@Column(name = "CAMPAIGN_AGENT_ID")
private Long campaignAgentId;
@Column(name = "CAMPAIGN_ID")
......
package com.viettel.campaign.model;
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
......@@ -12,7 +11,7 @@ import java.util.Date;
@Table(name = "CAMPAIGN_COMPLETE_CODE")
@Getter
@Setter
public class CampaignCompleteCode implements Serializable {
public class CampaignCfg implements Serializable {
@Id
@GeneratedValue(generator = "CAMPAIGN_COMPLETE_CODE_SEQ")
......@@ -54,4 +53,7 @@ public class CampaignCompleteCode implements Serializable {
private Short isLock;
@Column(name = "DURATION_LOCK")
private Long durationLock;
@Column(name = "CHANEL")
private Long chanel;
}
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.Date;
@Entity
@Table(name = "CAMPAIGN_CUSTOMER")
@Getter
@Setter
public class CampaignCustomer {
@Id
@GeneratedValue(generator = "CAMPAIGN_CUSTOMER_SEQ")
@SequenceGenerator(name = "CAMPAIGN_CUSTOMER_SEQ", sequenceName = "CAMPAIGN_CUSTOMER_SEQ", allocationSize = 1)
@Basic(optional = false)
@NotNull
@Column(name = "CAMPAIGN_CUSTOMER_ID")
private Long campaignCustomerId;
@Column(name = "CAMPAIGN_ID")
private Long campaignId;
@Column(name = "CUSTOMER_ID")
private Long customerId;
@Column(name = "STATUS")
private Short status;
@Column(name = "AGENT_ID")
private Long agentId;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "RECALL_TIME")
private Date recallTime;
@Column(name = "RECALL_COUNT")
private Long recallCount = 0L;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "CALL_TIME")
private Date callTime;
@Column(name = "CUSTOMER_LIST_ID")
private Long customerListId;
@Column(name = "IN_CAMPAIGN_STATUS")
private Short inCampaignStatus;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "SEND_TIME")
private Date sendTime;
@Column(name = "PROCESS_STATUS")
private Short processStatus = 0;
@Column(name = "CONTACT_STATUS")
private Short contactStatus;
@Column(name = "REDISTRIBUTE")
private Short redistribute;
@Column(name = "SESSION_ID")
private String sessionId;
@Column(name = "CALL_STATUS")
private Long callStatus;
@Column(name = "COMPANY_SITE_ID")
private Long companySiteId;
@Column(name = "COMPLAIN_ID")
private Long complainId;
}
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
@Entity
@Table(name = "CAMPAIGN_CUSTOMERLIST")
@Getter
@Setter
public class CampaignCustomerList {
@Id
@GeneratedValue(generator = "campaign_customer_seq")
@SequenceGenerator(name = "campaign_customer_seq", sequenceName = "campaign_customer_seq", allocationSize = 1)
@Basic(optional = false)
@NotNull
@Column(name = "CAMPAIGN_CUSTOMERLIST_ID")
private Long campaignCustomerListId;
@Column(name = "CAMPAIGN_ID")
private Long campaignId;
@Column(name = "CUSTOMER_LIST_ID")
private Long customerListId;
@Column(name = "CUSTOMER_NUMBER")
private Long customerNumber;
@Column(name = "FILTER_TYPE")
private Short filterType;
@Column(name = "COMPANY_SITE_ID")
private Long companySiteId;
@Column(name = "AGENT_FILTER_STATUS")
private Short agentFilterStatus;
}
package com.viettel.campaign.model.ccms_full;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
@Entity
@Table(name = "CAMPAIGN_CUSTOMERLIST_COLUMN")
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class CampaignCustomerListColumn implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "CAMPAIGN_CUS_LIST_COLUMN_SEQ")
@SequenceGenerator(name = "CAMPAIGN_CUS_LIST_COLUMN_SEQ", sequenceName = "CAMPAIGN_CUS_LIST_COLUMN_SEQ", allocationSize = 1)
@NotNull
@Column(name = "CAMPAIGN_CUS_LIST_COLUMN_ID")
private Long campaignCusListColId;
@Column(name = "COMPANY_SITE_ID")
private Long companySiteId;
@Column(name = "CAMPAIGN_ID")
private Long campaignId;
@Size(max = 200)
@Column(name = "COLUMN_NAME")
private String columnName;
@Column(name = "ORDER_INDEX")
private Long orderIndex;
@Column(name = "CUSTOMIZE_FIELD_ID")
private Long customizeFieldId;
@Size(max = 200)
@Column(name = "CUSTOMIZE_FIELD_TITLE")
private String customizeFieldTitle;
}
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
import org.springframework.stereotype.Component;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
/**
* @author anhvd_itsol
*/
@Entity
@Table(name = "CAMPAIGN_LOG")
@Getter
@Setter
public class CampaignLog implements Serializable {
@Id
@NotNull
@GeneratedValue(generator = "CAMPAIGN_LOG_SEQ")
@SequenceGenerator(name = "CAMPAIGN_LOG_SEQ", sequenceName = "CAMPAIGN_LOG_SEQ", allocationSize = 1)
@Basic(optional = false)
@Column(name = "CAMPAIGN_LOG_ID")
private Long campaignLogId;
@Column(name = "COMPANY_SITE_ID")
private Long companySiteId;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "CREATE_TIME")
private Date createTime;
@Column(name = "AGENT_ID")
private Long agentId;
@Column(name = "TABLE_NAME")
private String tableName;
@Column(name = "COLUMN_NAME")
private String columnName;
@Column(name = "PRE_VALUE")
private String preValue;
@Column(name = "POST_VALUE")
private String postValue;
@Column(name = "DESCRIPTION")
private String description;
@Column(name = "CAMPAIGN_ID")
private Long campaignId;
@Column(name = "CUSTOMER_ID")
private Long customerId;
}
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
@Entity
@Table(name = "CONTACT_CUST_RESULT")
@Getter
@Setter
public class ContactCustResult implements Serializable {
@Id
@NotNull
@GeneratedValue(generator = "CONTACT_CUST_RESULT_SEQ")
@SequenceGenerator(name = "CONTACT_CUST_RESULT_SEQ", sequenceName = "CONTACT_CUST_RESULT_SEQ", allocationSize = 1)
@Basic(optional = false)
@Column(name = "CONTACT_CUST_RESULT_ID")
private Long contactCustResultId;
@Column(name = "COMPANY_SITE_ID")
private Long companySiteId;
@Column(name = "CALL_STATUS")
private Short callStatus;
@Column(name = "CONTACT_STATUS")
@NotNull
private Short contactStatus;
@Column(name = "STATUS")
private Short status;
@Column(name = "SATISFACTION")
private Integer satisfaction;
@Column(name = "DESCRIPTION")
private String description;
@Column(name = "CREATE_TIME")
@NotNull
private Date createTime;
@Column(name = "AGENT_ID")
private Long agentId;
@Column(name = "UPDATE_TIME")
private Date updateTime;
@Column(name = "UPDATE_BY")
private Long updateBy;
@Column(name = "CAMPAIGN_ID")
@NotNull
private Long campaignId;
@Column(name = "OLD_CONTACT_CUST_RESULT_ID")
private Long oldContactCustResultId;
@Column(name = "CUSTOMER_ID")
@NotNull
private Long customerId;
@Column(name = "DURATION_CALL")
private Long durationCall;
@Column(name = "START_CALL")
private Date startCall;
@Column(name = "RECEIVE_CUST_LOG_ID")
@NotNull
private Long receiveCustLogId;
@Column(name = "IPCC_CALL_STATUS")
private Short ipccCallStatus;
@Column(name = "CALL_ID")
private String callId;
@Column(name = "PHONE_NUMBER")
@NotNull
private String phoneNumber;
@Column(name = "RECEIVE_TIME")
@NotNull
private Date receiveTime;
@Column(name = "PRE_END_TIME")
private Date preEndTime;
@Column(name = "URL_CALL")
private String urlCall;
@Column(name = "TRANSACTION_ID")
private String transactionId;
@Column(name = "RECALL_TIME")
private Date recallTime;
@Column(name = "IS_FINAL_RECALL")
private Short isFinalRecall;
@Column(name = "IS_SEND_EMAIL")
private Short isSendEmail = 0;
@Column(name = "SALED_ON_TPIN")
private Long saledOnTpin;
@Column(name = "END_TIME")
private Date endTime;
@Column(name = "WAIT_TIME")
private Long waitTime;
@Column(name = "DIAL_MODE")
private String dialMode;
@Column(name = "WRAPUP_TIME")
private Long wrapupTime;
@Column(name = "TIME_MAKE_CALL")
private Long timeMakeCall = 0L;
@Column(name = "TIME_RECEIVE_CUST")
private Long timeReceiveCust = 0L;
}
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
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;
@Entity
@Table(name = "CONTACT_QUEST_RESULT")
@Getter
@Setter
public class ContactQuestResult implements Serializable {
@Id
@Column(name = "CONTACT_QUEST_RESULT_ID")
@NotNull
private Long contactQuestResultId;
@Column(name = "CONTACT_CUST_RESULT_ID")
@NotNull
private Long contactCustResultId;
@Column(name = "COMPANY_SITE_ID")
private Long companySiteId;
@Column(name = "SCENARIO_QUESTION_ID")
@NotNull
private Long scenarioQuestionId;
@Column(name = "OTHER_OPINION")
private String otherOpinion;
@Column(name = "SCENARIO_ANSWER_ID")
private Long scenarioAnswerId;
@Column(name = "STATUS")
private Short status;
@Column(name = "OLD_CONTACT_CUST_RESULT_ID")
private Long oldContactCustResultId;
@Column(name = "CUSTOMER_ID")
@NotNull
private Long customerId;
@Column(name = "CAMPAIGN_ID")
@NotNull
private Long campaignId;
}
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.Getter;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.Date;
@Entity
@Table(name = "CUSTOMER_CONTACT")
@Getter
@Setter
public class CustomerContact {
@Id
@Basic(optional = false)
@NotNull
@Column(name = "CONTACT_ID")
private Long contactId;
@Column(name = "CUSTOMER_ID")
private Long customerId;
@Column(name = "CONTACT_TYPE")
private Short contactType;
@Column(name = "CONTACT")
private String contact;
@Column(name = "IS_DIRECT_LINE")
private Short isDirectLine;
@Column(name = "STATUS")
private Short status;
@Column(name = "CREATE_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date createDate;
@Column(name = "UPDATE_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date updateDate;
@Column(name = "CREATE_BY")
private String createBy;
@Column(name = "UPDATE_BY")
private String updateBy;
@Column(name = "START_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date startDate;
@Column(name = "END_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date endDate;
}
package com.viettel.campaign.model;
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
......@@ -23,7 +23,7 @@ public class CustomerList implements Serializable {
@Column(name = "CUSTOMER_LIST_ID")
private Long customerListId;
@Column(name = "COMPANY_SITE_ID")
private Long customerSiteId;
private Long companySiteId;
@Size(max = 200)
@Column(name = "CUSTOMER_LIST_CODE")
private String customerListCode;
......
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 lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
* @author hanv_itsol
* @project campaign
*/
@Entity
@Table(name = "CUSTOMER_TIME")
@Getter
@Setter
public class CustomerTime {
@Id
@NotNull
@Column(name = "CUSTOMER_TIME_ID")
private Long customerTimeId;
@Column(name = "COMPANY_SITE_ID")
private String companySiteId;
@Column(name = "CUSTOMER_ID")
private String customerId;
@Column(name = "START_TIME")
private Date startTime;
@Column(name = "END_TIME")
private Date endTime;
@Column(name = "STATUS")
private Integer status;
@Column(name = "CREATE_TIME")
private Date createTime;
@Column(name = "UPDATE_TIME")
private Date updateTime;
@Column(name = "CREATE_BY")
private String createBy;
@Column(name = "UPDATE_BY")
private String updateBy;
@Column(name = "CONTACT_CUST_RESULT_ID")
private Long contactCustResultId;
}
package com.viettel.campaign.model.ccms_full;
public class CustomizeField {
}
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.ccms_full;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
@Entity
@Table(name = "RECEIVE_CUST_LOG")
@Getter
@Setter
public class ReceiveCustLog implements Serializable {
@Id
@GeneratedValue(generator = "RECEIVE_CUST_LOG_SEQ")
@SequenceGenerator(name = "RECEIVE_CUST_LOG_SEQ", sequenceName = "RECEIVE_CUST_LOG_SEQ", allocationSize = 1)
@Basic(optional = false)
@NotNull
@Column(name = "RECEIVE_CUST_LOG_ID")
private Long receiveCustLogId;
@Column(name = "COMPANY_SITE_ID")
private Long companySiteId;
@Column(name = "CUSTOMER_ID")
@NotNull
private Long customerId;
@Column(name = "START_TIME")
@Temporal(TemporalType.TIMESTAMP)
@NotNull
private Date startTime;
@Column(name = "AGENT_ID")
private Long agentId;
@Column(name = "CAMPAIGN_ID")
private Long campaignId;
@Column(name = "END_TIME")
@Temporal(TemporalType.TIMESTAMP)
private Date endTime;
}
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
/**
* @author anhvd_itsol
*/
@Entity
@Table(name = "SCENARIO")
@Getter
@Setter
public class Scenario implements Serializable {
@Id
@NotNull
@GeneratedValue(generator = "SCENARIO_SEQ")
@SequenceGenerator(name = "SCENARIO_SEQ", sequenceName = "SCENARIO_SEQ", allocationSize = 1)
@Basic(optional = false)
@Column(name = "SCENARIO_ID")
private Long scenarioId;
@Column(name = "COMPANY_SITE_ID")
private Long companySiteId;
@Column(name = "CAMPAIGN_ID")
private Long campaignId;
@Column(name = "CODE")
private String code;
@Column(name = "DESCRIPTION")
private String description;
@Column(name = "CREATE_BY")
private String createBy;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "CREATE_TIME")
private Date createTime;
@Column(name = "UPDATE_BY")
private Long updateBy;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "UPDATE_TIME")
private Date updateTime;
}
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
* @author anhvd_itsol
*/
@Entity
@Table(name = "SCENARIO_ANSWER")
@Getter
@Setter
public class ScenarioAnswer {
@Id
@NotNull
@GeneratedValue(generator = "SCENARIO_ANSWER_SEQ")
@SequenceGenerator(name = "SCENARIO_ANSWER_SEQ", sequenceName = "SCENARIO_ANSWER_SEQ", allocationSize = 1)
@Basic(optional = false)
@Column(name = "SCENARIO_ANSWER_ID")
private Long scenarioAnswerId;
@Column(name = "COMPANY_SITE_ID")
private Long companySiteId;
@Column(name = "SCENARIO_QUESTION_ID")
private Long scenarioQuestionId;
@Column(name = "CODE")
private String code;
@Column(name = "ANSWER")
private String answer;
@Column(name = "ORDER_INDEX")
private Integer orderIndex;
@Column(name = "HAS_INPUT")
private Short hasInput;
@Column(name = "STATUS")
private Short status;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "CREATE_TIME")
private Date createTime;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "DELETE_TIME")
private Date deleteTime;
@Column(name = "MAPPING_QUESTION_ID")
private Long mappingQuestionId;
}
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
/**
* @author anhvd_itsol
*/
@Entity
@Table(name = "SCENARIO_QUESTION")
@Getter
@Setter
public class ScenarioQuestion implements Serializable {
@Id
@NotNull
@GeneratedValue(generator = "SCENARIO_QES_SEQ")
@SequenceGenerator(name = "SCENARIO_QES_SEQ", sequenceName = "SCENARIO_QES_SEQ", allocationSize = 1)
@Basic(optional = false)
@Column(name = "SCENARIO_QUESTION_ID")
private Long scenarioQuestionId;
@Column(name = "COMPANY_SITE_ID")
private Long companySiteId;
@Column(name = "CAMPAIGN_ID")
private Long campaignId;
@Column(name = "SCENARIO_ID")
private Long scenarioId;
@Column(name = "CODE")
private String code;
@Column(name = "TYPE")
private Short type;
@Column(name = "QUESTION")
private String question;
@Column(name = "ORDER_INDEX")
private Long orderIndex;
@Column(name = "STATUS")
private Short status;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "CREATE_TIME")
private Date createTime;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "DELETE_TIME")
private Date deleteTime;
@Column(name = "IS_REQUIRE")
private Short isRequire;
@Column(name = "IS_DEFAULT")
private Short isDefault;
@Column(name = "ANSWER_INDEX")
private Short answerIndex;
}
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
@Entity
@Table(name = "TICKET")
@XmlRootElement
@Getter
@Setter
public class Ticket implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator="ticket_seq")
@SequenceGenerator(name="ticket_seq",sequenceName="ticket_seq", allocationSize=1)
@Basic(optional = false)
@NotNull
@Column(name = "TICKET_ID")
private Long ticketId;
@Column(name = "SOURCE_ID")
private Long sourceId;
@Column(name = "CHANEL_ID")
private Long chanelId;
@Column(name = "CREATE_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date createDate;
@Size(max = 200)
@Column(name = "REF_ID")
private String refId;
@Column(name = "CUSTOMER_ID")
private Long customerId;
@Column(name = "TICKET_STATUS")
private Short ticketStatus;
@Column(name = "RESPONSE_STATUS")
private Long responseStatus;
@Column(name = "PRIORITY_ID")
private Short priorityId;
@Column(name = "RESOLVE_SLA")
@Temporal(TemporalType.TIMESTAMP)
private Date resolveSla;
@Column(name = "FIRST_RESPONE_SLA")
@Temporal(TemporalType.TIMESTAMP)
private Date firstResponeSla;
@Size(max = 400)
@Column(name = "AGENT_PROCESS")
private String agentProcess;
@Size(max = 400)
@Column(name = "AGENT_ASSIGN")
private String agentAssign;
@Column(name = "FIRST_RESPONE_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date firstResponeDate;
@Column(name = "RESOLVE_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date resolveDate;
@Column(name = "ASSIGN_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date assignDate;
@Column(name = "SECOND_RESPONE_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date secondResponeDate;
@Size(max = 20)
@Column(name = "AGENT_ID")
private String agentId;
@Size(max = 20)
@Column(name = "AGENT_ASSIGN_ID")
private String agentAssignId;
@Column(name = "TICKET_SLA_ID")
private Long ticketSlaId;
@Column(name = "SITE_ID")
private Long siteId;
@Column(name = "REQUEST_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date requestDate;
@Column(name = "LAST_REQUEST_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date lastRequestDate;
@Column(name = "TICKET_TYPE_ID")
private Long ticketTypeId;
@Column(name = "SECOND_RESPONE_SLA")
@Temporal(TemporalType.TIMESTAMP)
private Date secondResponeSla;
@Column(name = "COOPERATE_ID")
private Long cooperateId;
@Column(name = "POST_TYPE_ID")
private Long postTypeId;
@Column(name = "USER_READ")
private String userRead;
@Column(name = "POST_CUSTOMER")
private Long postCustomer;
@Column(name = "REASON")
private String reason;
@Column(name = "PROCESS")
private String process;
@Column(name = "LAST_UPDATE_TIME")
@Temporal(TemporalType.TIMESTAMP)
private Date lastUpdateTime;
@Column(name = "SLA_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date slaDate;
@Column(name = "SLA_PROCESS_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date slaProcessDate;
@Column(name = "SLA_COOPERATE_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date slaCooperateDate;
@Column(name = "SLA_PROCESS_CONFIG")
private Long slaProcessConfig;
@Column(name = "SLA_COOPERATE_CONFIG")
private Long slaCooperateConfig;
// @Column(name = "COMPANY_SITE_ID")
// private Long companySiteId;
@Column(name = "REOPEN_DATE")
private Date reopenDate;
@Column(name = "COMPANY_SITE_ID")
private Long companyId;
@Column(name = "ASSIGN_TYPE")
private Long assignType;
//bo sung ignored va close reason
@Column(name = "IGNORED")
private Long ignored;
@Column(name = "REASON_CAT_ITEM_ID")
private Long reasonCatItemId;
@Column(name = "PROBLEM_CAT_ITEM_ID")
private Long problemCatItemId;
@Column(name = "VIEW_TYPE")
private Long viewType;
@Column(name = "SUBJECT")
private String subject;
@Column(name = "CLASSIFY_REQUIRE_ID")
private Long classifyRequireId;
@Column(name = "AGENT_RECEIVE")
private String agentReceive;
@Lob
@Column(name = "CONTENT_RECEIVE")
private String contentReceive;
}
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
@Entity
@Table(name = "TICKET_CAT_STATUS")
@Getter
@Setter
public class TicketCatStatus implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator="ticket_cat_status_seq")
@SequenceGenerator(name="ticket_cat_status_seq",sequenceName="ticket_cat_status_seq", allocationSize=1)
@Basic(optional = false)
@NotNull
@Column(name = "STATUS_ID")
private Long statusId;
@Size(max = 100)
@Column(name = "STATUS_NAME")
private String statusName;
@Size(max = 50)
@Column(name = "STATUS_CODE")
private String statusCode;
@Size(max = 100)
@Column(name = "CREATE_BY")
private String createBy;
@Column(name = "CREATE_TIME")
@Temporal(TemporalType.TIMESTAMP)
private Date createTime;
@Column(name = "COMPANY_ID")
private Long companyId;
@Column(name = "ACTIVE")
private Short active;
}
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.Getter;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
/**
* @author anhvd_itsol
*/
@Entity
@Table(name = "TIME_RANGE_DIAL_MODE")
@Getter
@Setter
public class TimeRangeDialMode implements Serializable {
@Id
@NotNull
@GeneratedValue(generator = "TIME_RANGE_DIAL_MODE_SEQ")
@SequenceGenerator(name = "TIME_RANGE_DIAL_MODE_SEQ", sequenceName = "TIME_RANGE_DIAL_MODE_SEQ", allocationSize = 1)
@Basic(optional = false)
@Column(name = "TIME_RANGE_DIAL_MODE_ID")
private Long timeRangeDialModeId;
@Column(name = "COMPANY_SITE_ID")
private Long companySiteId;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "START_TIME")
private Date startTime;
@Column(name = "CAMPAIGN_ID")
private Long campaignId;
@Column(name = "DIAL_MODE")
private Short dialMode;
@Column(name = "USER_ID")
private Long userId;
}
package com.viettel.campaign.model.ccms_full;
import javax.persistence.Entity;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @author anhvd_itsol
*/
@Entity
@Table(name = "TIME_ZONE_DIAL_MODE")
@Getter
@Setter
public class TimeZoneDialMode implements Serializable{
@Id
@NotNull
@GeneratedValue(generator = "TIME_ZONE_DIAL_MODE_SEQ")
@SequenceGenerator(name = "TIME_ZONE_DIAL_MODE_SEQ", sequenceName = "TIME_ZONE_DIAL_MODE_SEQ", allocationSize = 1)
@Basic(optional = false)
@Column(name = "TIME_ZONE_DIAL_MODE_ID")
private Long timeZoneDialModeId;
@Column(name = "COMPANY_SITE_ID")
private Long companySiteId;
@Column(name = "HOUR")
private String hour;
@Column(name = "MINUTE")
private String minute;
@Column(name = "CAMPAIGN_ID")
private Long campaignId;
@Column(name = "DIAL_MODE")
private Short dialMode;
@Column(name = "USER_ID")
private Long userId;
}
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.Date;
@Entity
@Table(name = "VSA_USERS")
@Getter
@Setter
public class VSAUsers {
@Id
@NotNull
@GeneratedValue(generator = "vsa_users_renew")
@SequenceGenerator(name = "vsa_users_renew", sequenceName = "vsa_users_renew", allocationSize = 1)
@Basic(optional = false)
@Column(name = "USER_ID")
private Long userId;
@Column(name = "USER_NAME")
private String userName;
@Column(name = "STATUS")
private Short status;
@Column(name = "FULL_NAME")
private String fullName;
@Column(name = "USER_TYPE_ID")
private Long userTypeId;
@Column(name = "CREATE_DATE")
private Date createDate;
@Column(name = "DESCRIPTION")
private String description;
@Column(name = "STAFF_CODE")
private String staffCode;
@Column(name = "MANAGER_ID")
private Long managerId;
@Column(name = "LOCATION_ID")
private Long locationId;
@Column(name = "DEPT_ID")
private Long deptId;
@Column(name = "DEPT_LEVEL")
private String deptLevel;
@Column(name = "POS_ID")
private Long posId;
@Column(name = "DEPT_NAME")
private String deptName;
@Column(name = "GROUP_ID")
private Long groupId;
@Column(name = "SITE_ID")
private Long siteId;
@Column(name = "COMPANY_SITE_ID")
private Long companySiteId;
@Column(name = "AGENT_TYPE")
private Short agentType;
@Column(name = "MOBILE_NUMBER")
private String mobileNumber;
@Column(name = "FACEBOOK_ID")
private String facebookId;
@Column(name = "LOGIN_TYPE")
private Short loginType;
@Column(name = "GOOGLE_ID")
private String googleId;
@Column(name = "EMAIL")
private String email;
@Column(name = "AVAILABLE_TICKET")
private Long availableTicket;
@Column(name = "USER_KAZOO_ID")
private String userKazooId;
}
package com.viettel.campaign.repository;
import com.viettel.campaign.model.CampaignCompleteCode;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
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.List;
@Repository
public interface CampaignCompleteCodeRepository extends JpaRepository<CampaignCompleteCode, Long> {
Page<CampaignCompleteCode> findAll(Pageable pageable);
@Query("FROM CampaignCompleteCode WHERE completeName LIKE concat('%', :name, '%') ")
List<CampaignCompleteCode> findByName(@Param("name") String Name, Pageable pageable);
List<CampaignCompleteCode> findByCompleteNameContains(String Name, Pageable pageable);
}
package com.viettel.campaign.repository.acd_full;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.acd_full.Agents;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
@Repository
@Transactional(DataSourceQualify.ACD_FULL)
public interface AgentsRepository extends JpaRepository<Agents, String> {
Agents findByAgentId(String agentId);
@Modifying
@Query(value = "UPDATE Agents SET campaignSystemStatus = :campaignSystemStatus WHERE agentId = :agentId")
void updateAgentLogoutFromCampaign(@Param("agentId") Long agentId, @Param("campaignSystemStatus") String campaignSystemStatus);
}
package com.viettel.campaign.repository.acd_full;
/**
* @author anhvd_itsol
*/
public class acdrepotest {
}
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;
......@@ -17,4 +17,10 @@ public interface ApParamRepository extends JpaRepository<ApParam, Long>, ApParam
@Query(value = "SELECT p FROM ApParam p WHERE parName LIKE concat('%', :parName, '%') ")
List<ApParam> findParamByName(@Param("parName") String parName, Pageable pageable);
@Query(value = "SELECT p FROM ApParam p WHERE status = 1 AND parType LIKE concat('%', :parType, '%') ")
List<ApParam> findParamByParType(@Param("parType") String parType);
@Query(value = "FROM ApParam WHERE status = 1 AND parType = :parType")
List<ApParam> findAllParam(@Param("parType") String parType);
}
package com.viettel.campaign.repository;
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.ApParam;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface ApParamRepositoryCustom {
......
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.ccms_full;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.CampaignAgent;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Repository
@Transactional(DataSourceQualify.CCMS_FULL)
public interface CampaignAgentRepository extends JpaRepository<CampaignAgent, Long> {
@Query(value = "SELECT campaign_agent_seq.nextval FROM DUAL", nativeQuery = true)
Long getNextSeqId();
@Modifying
@Query("UPDATE CampaignAgent SET status = :status WHERE agentId = :agentId AND campaignId = :campaignId")
void updateCampaignAgentSetStatus(@Param("agentId") Long agentId, @Param("campaignId") Long campaignId, @Param("status") Integer status);
@Modifying
@Query("delete from CampaignAgent c where c.campaignAgentId in (:p_campaign_agent_id)")
int deleteCampaignAgent(@Param("p_campaign_agent_id") List<Long> campaignAgentId);
}
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.ccms_full.CampaignCfg;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface CampaignCfgRepository extends JpaRepository<CampaignCfg, Long>{
@Query(" select u FROM CampaignCfg u WHERE u.status = 1")
Page<CampaignCfg> findAll(Pageable pageable);
@Query("FROM CampaignCfg WHERE completeName LIKE concat('%', :name, '%') ")
List<CampaignCfg> findByName(@Param("name") String name, Pageable pageable);
List<CampaignCfg> findByCompleteNameContains(String name, Pageable pageable);
@Modifying
@Query("update CampaignCfg c set c.status = 0 where c.campaignCompleteCodeId in (:p_ids) and c.companySiteId=:p_company_site_id" )
int deletedList(@Param("p_ids") List<Long> p_ids, @Param("p_company_site_id") Long p_company_site_id);
List<CampaignCfg> findCampaignCompleteCodesByCompanySiteId(Long companySiteId);
@Query(value="SELECT max(completeValue) FROM CampaignCfg WHERE companySiteId = :companySiteId GROUP BY companySiteId")
Short findByMaxCompanySiteId(Long companySiteId);
@Modifying
@Query("update CampaignCfg c set c.status = 0 where c.campaignCompleteCodeId=:p_campaignCompleteCode_list_id and c.companySiteId=:p_company_site_id")
int deleteCampaignCompleteCodeBy(@Param("p_campaignCompleteCode_list_id") Long p_campaignCompleteCode_list_id, @Param("p_company_site_id") Long p_company_site_id);
@Query(value = "FROM CampaignCfg WHERE status = 1 AND completeValue = :completeValue AND completeType = :completeType AND companySiteId = :companySiteId")
List<CampaignCfg> getCustomerStatus(@Param("completeValue") String completeValue, @Param("completeType") Short completeType, @Param("companySiteId") Long companySiteId);
@Query(value = "FROM CampaignCfg WHERE status = 1 AND completeValue <> :completeValue AND completeType = :completeType AND companySiteId = :companySiteId")
List<CampaignCfg> getCustomerStatusWithoutValue(@Param("completeValue") String completeValue, @Param("completeType") Short completeType, @Param("companySiteId") Long companySiteId);
@Query("select c from CampaignCfg c where c.companySiteId =:p_company_site_id")
List<CampaignCfg> findAllCampaignCompleteCode();
}
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.ccms_full.CampaignCfg;
public interface CampaignCfgRepositoryCustom {
CampaignCfg updateStatusById(Long id);
CampaignCfg findMaxValueCampaignType(Long companySiteId);
}
package com.viettel.campaign.repository.ccms_full;
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;
import java.util.List;
public interface CampaignCustomerListRepository extends JpaRepository<CampaignCustomerList, Long> {
@Query("select count (c.campaignId) from CampaignCustomerList c where c.customerListId=:customerListId")
Long campaignCount(@Param("customerListId") long customerListId);
@Query("select count (c.campaignId) from CampaignCustomerList c where c.customerListId in (:ids)")
Long campaignIdsCount(@Param("ids") List<Long> ids);
}
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.config.DataSourceQualify;
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;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Repository
@Transactional(DataSourceQualify.CCMS_FULL)
public interface CampaignCustomerRepository extends JpaRepository<CampaignCustomer, Long>, CampaignCustomerRepositoryCustom {
@Query(value = "SELECT COUNT(*) " +
"FROM CAMPAIGN_CUSTOMER CC JOIN CAMPAIGN_COMPLETE_CODE CCC ON CC.CAMPAIGN_ID = CCC.CAMPAIGN_ID " +
"WHERE CC.STATUS = 3 AND CC.CAMPAIGN_ID = :campaignId AND CC.CUSTOMER_ID = :customerId AND CCC.IS_RECALL = 1 AND CCC.STATUS = 1 ",
nativeQuery = true)
Long getCustomerRecall(@Param("campaignId") Long campaignId, @Param("customerId") Long customerId);
@Query(value = "SELECT cc.customer_id \n" +
"FROM campaign_customer cc LEFT JOIN receive_cust_log cl ON cc.customer_id = cl.customer_id\n" +
"WHERE cc.campaign_id = :campaignId \n" +
" AND cc.agent_id = :agentId \n" +
" AND cc.in_campaign_status = 1 \n" +
" AND cl.customer_id IS NULL \n" +
" AND EXISTS(SELECT 1 \n" +
" FROM campaign_complete_code ccc \n" +
" WHERE cc.status = ccc.complete_value \n" +
" AND ccc.status = 1 \n" +
" AND ccc.is_recall = 1 \n" +
" AND ccc.complete_type = 2 \n" +
" AND ccc.company_site_id = :companySiteId) \n" +
" AND cc.recall_time <= SYSDATE\n" +
" AND cc.recall_time + interval :apParam MINUTE >= SYSDATE", nativeQuery = true)
List<CampaignCustomer> getCustomerRecallDate(@Param("campaignId") Long campaignId, @Param("agentId") Long agentId, @Param("companySiteId") Long companySiteId, @Param("apParam") String apParam);
CampaignCustomer findCampaignCustomerByCampaignCustomerId(Long id);
}
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.web.dto.CampaignCustomerDTO;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface CampaignCustomerRepositoryCustom {
List<CampaignCustomerDTO> getDataCampaignCustomer(CampaignCustomerDTO dto, String expression);
}
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.web.dto.ApParamDTO;
import com.viettel.campaign.web.dto.CampaignDTO;
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.springframework.data.domain.Pageable;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface CampaignExecuteRepository {
List<CampaignDTO> searchCampaignExecute(CampaignRequestDTO campaignRequestDto, Pageable pageable);
//<editor-fold: hungtt>
List<ApParamDTO> getComboBoxStatus(String companySiteId, String completeType);
List<ApParamDTO> getComboCampaignType(String companySiteId);
ResultDTO getInteractiveResult(CampaignRequestDTO dto);
List<ContactCustResultDTO> getExcelInteractiveResult(CampaignRequestDTO dto);
List<ContactCustResultDTO> getContactCustById(CampaignRequestDTO dto);
//</editor-fold: hungtt>
}
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.ccms_full.CampaignLog;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
/**
* @author anhvd_itsol
*/
@Repository
public interface CampaignLogRepository extends JpaRepository<CampaignLog, Long> {
}
package com.viettel.campaign.repository.ccms_full;
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> {
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 " +
" WHERE cc.companySiteId = :pCompanySiteId " +
" AND cc.status = 1 " +
" AND cc.recallTime <= sysdate " +
" AND cc.agentId = :pAgentId")
Long countRecallCustomer(@Param("pCompanySiteId") Long pCompanySiteId, @Param("pAgentId") Long pAgentId);
Campaign findByCampaignId(Long campaignId);
Campaign findCampaignByCampaignIdAndCompanySiteId(Long campaignId, Long companySiteId);
}
package com.viettel.campaign.repository;
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.web.dto.CampaignDTO;
import com.viettel.campaign.dto.request_dto.CampaignRequestDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import org.springframework.data.domain.Pageable;
import com.viettel.campaign.web.dto.request_dto.CampaignRequestDTO;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface CampaignRepositoryCustom {
List<CampaignDTO> searchCampaignExecute(String agentId, Pageable pageable);
ResultDTO search(CampaignRequestDTO requestDto);
ResultDTO findByCampaignCode(CampaignRequestDTO requestDTO);
String getMaxCampaignIndex();
ResultDTO checkAllowStatusToPrepare(Long campaignId);
//hungtt
ResultDTO findCustomerListReallocation(CampaignRequestDTO dto);
//hungtt
ResultDTO reallocationCustomer(CampaignRequestDTO dto);
//hungtt
ResultDTO getListFieldsNotShow(CampaignRequestDTO dto);
//hungtt
ResultDTO getListFieldsToShow(CampaignRequestDTO dto);
}
package com.viettel.campaign.repository;
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.Campaign;
import com.viettel.campaign.model.ccms_full.ContactCustResult;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface CampaignRepository extends JpaRepository<Campaign, Long>, CampaignRepositoryCustom {
public interface ContactCustResultRepository extends JpaRepository<ContactCustResult, Long> {
}
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.ccms_full.ContactQuestResult;
import com.viettel.campaign.web.dto.ContactQuestResultDTO;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface ContactQuestResultRepository extends JpaRepository<ContactQuestResult, Long> {
List<ContactQuestResultDTO> findByCompanySiteIdAndCampaignId(Long companySiteId, Long campaignId);
}
package com.viettel.campaign.repository.ccms_full;
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;
import org.springframework.data.repository.query.Param;
import java.util.List;
public interface CustomerContactRepository extends JpaRepository<CustomerContact, Long> {
@Query("FROM CustomerContact WHERE status = 1 AND customerId = :customerId AND contactType = :contactType AND (contact IS NULL OR UPPER(contact) LIKE UPPER(concat('%', :contact, '%')))")
List<CustomerContact> findByCustomerIdAndAndContactTypeAndContact(@Param("customerId") Long customerId, @Param("contactType") Short contactType, @Param("contact") String contact, Pageable pageable);
}
package com.viettel.campaign.repository.ccms_full;
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;
import org.springframework.data.repository.query.Param;
import java.util.List;
public interface CustomerListMappingRepository extends JpaRepository<CustomerListMapping, Long> {
// ----------- customer ------------ //
@Modifying
@Query("delete from CustomerListMapping c where c.customerId=:p_customer_id and c.customerListId=:p_customer_list_id and c.companySiteId=:p_company_site_id")
int deleteMappingByCustomerId(@Param("p_customer_id") Long p_customer_id, @Param("p_customer_list_id") Long p_customer_list_id, @Param("p_company_site_id") Long p_company_site_id);
@Modifying
@Query("delete from CustomerListMapping c where c.customerId in (:p_ids) and c.customerListId =:p_customer_list_id and c.companySiteId=:p_company_site_id")
int deleteMappingByCustomerIds(@Param("p_ids") List<Long> p_ids, @Param("p_customer_list_id") Long p_customer_list_id, @Param("p_company_site_id") Long p_company_site_id);
// ----------- customer list --------------- //
@Modifying
@Query("delete from CustomerListMapping c where c.customerListId=:p_customer_list_id and c.companySiteId=:p_company_site_id")
int deleteMappingByCustomerListId(@Param("p_customer_list_id") Long p_customer_list_id, @Param("p_company_site_id") Long p_company_site_id);
@Modifying
@Query("delete from CustomerListMapping c where c.customerListId in (:p_ids) and c.companySiteId=:p_company_site_id")
int deleteMappingByCustomerListIds(@Param("p_ids") List<Long> p_ids, @Param("p_company_site_id") Long p_company_site_id);
}
package com.viettel.campaign.repository.ccms_full;
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;
import org.springframework.data.repository.query.Param;
import java.util.List;
public interface CustomerListRepository extends JpaRepository<CustomerList, Long> {
CustomerList findByCustomerListIdAndCompanySiteId(long customerListId, long companySiteId);
CustomerList findByCustomerListCode(String customerListCode);
@Modifying
@Query("update CustomerList c set c.status = 0 where c.customerListId=:p_customer_list_id and c.companySiteId=:p_company_site_id")
int deleteCustomerList(@Param("p_customer_list_id") Long p_customer_list_id, @Param("p_company_site_id") Long p_company_site_id);
@Modifying
@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 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;
import org.springframework.data.jpa.repository.Modifying;
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
......@@ -14,9 +17,19 @@ public interface CustomerRepository extends JpaRepository<Customer, Long> {
Page<Customer> findAll(Pageable pageable);
List<Customer> findByCustomerId(Long customerId);
@Query("FROM Customer WHERE name = ?1")
List<Customer> findByName(String firstName, Pageable pageable);
@Query("SELECT COUNT(0) FROM Customer t WHERE t.mobileNumber = ?1 and t.siteId = ?2 and t.status = 1 ")
Long findByMobileNumberAndSiteId(String mobileNumber, Long siteId);
@Modifying
@Query("delete from Customer c where c.customerId in (:ids)")
int deleteIds(@Param("ids") List<Long> ids);
@Query("select c from Customer c left join com.viettel.campaign.model.ccms_full.CustomerTime ct on c.customerId = ct.customerId " +
"where c.ipccStatus = 'locked' and c.siteId =?1 and ct.endTime <= ?2")
List<Customer> findAllByCondition(Long siteId, Date endTime);
}
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.ccms_full.CustomerTime;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author hanv_itsol
* @project campaign
*/
@Repository
public interface CustomerTimeRepository extends JpaRepository<CustomerTime, Long> {
List<CustomerTime> findByCustomerId(Long customerId);
}
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.ccms_full;
import com.viettel.campaign.model.ccms_full.ReceiveCustLog;
import org.springframework.data.jpa.repository.JpaRepository;
public interface ReceiveCustLogRepository extends JpaRepository<ReceiveCustLog, Long> {
}
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.ccms_full.ScenarioAnswer;
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.List;
/**
* @author anhvd_itsol
*/
@Repository
public interface ScenarioAnswerRepository extends JpaRepository<ScenarioAnswer, Long> {
List<ScenarioAnswer> findByScenarioQuestionIdAndCompanySiteIdAndStatus(Long scenarioQuestionId, Long companySiteId, Short status);
@Query(value="SELECT MAX(orderIndex) FROM ScenarioAnswer WHERE scenarioQuestionId = :scenarioQuestionId AND companySiteId = :companySiteId AND status = 1")
Long getMaxAnswerOrderId(@Param("scenarioQuestionId") Long scenarioQuestionId, @Param("companySiteId") Long companySiteId);
Integer deleteScenarioAnswersByScenarioQuestionId(Long scenarioQuestionId);
ScenarioAnswer findScenarioAnswerByScenarioAnswerId(Long scenarioAnswerId);
}
package com.viettel.campaign.repository.ccms_full;
/**
* @author anhvd_itsol
*/
public interface ScenarioAnswerRepositoryCustom {
}
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.ccms_full.ScenarioQuestion;
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.List;
/**
* @author anhvd_itsol
*/
@Repository
public interface ScenarioQuestionRepository extends JpaRepository<ScenarioQuestion, Long> {
List<ScenarioQuestion> findScenarioQuestionsByScenarioIdAndCampaignIdAndCompanySiteIdAndStatusOrderByOrderIndex(Long scenarioId, Long campaignId, Long companySiteId, Short status);
@Query(value="SELECT MAX(orderIndex) FROM ScenarioQuestion WHERE scenarioId = :scenarioId AND campaignId = :campaignId AND companySiteId = :companySiteId AND status = 1")
Long getMaxOrderId(@Param("scenarioId") Long scenarioId, @Param("campaignId") Long campaignId, @Param("companySiteId") Long companySiteId);
@Query(value = "SELECT COUNT(1) FROM ScenarioQuestion WHERE code = :code AND scenarioId = :scenarioId AND campaignId = :campaignId AND companySiteId = :companySiteId AND status = 1")
Integer countDuplicateQuestionCode(@Param("code") String code, @Param("scenarioId") Long scenarioId, @Param("campaignId") Long campaignId, @Param("companySiteId") Long companySiteId);
ScenarioQuestion findScenarioQuestionByScenarioQuestionId(Long scenarioQuestionId);
}
package com.viettel.campaign.repository.ccms_full;
/**
* @author anhvd_itsol
*/
public interface ScenarioQuestionRepositoryCustom {
}
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.ccms_full.Scenario;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
/**
* @author anhvd_itsol
*/
@Repository
public interface ScenarioRepository extends JpaRepository<Scenario, Long> {
Scenario findScenarioByCampaignIdAndCompanySiteId(Long campaignId, Long companySiteId);
}
package com.viettel.campaign.repository.ccms_full;
/**
* @author anhvd_itsol
*/
public interface ScenarioRepositoryCustom {
}
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.ccms_full.Ticket;
public interface TicketRepository extends BaseRepository<Ticket>, TicketRepositoryCustom {
}
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.web.dto.TicketDTO;
import org.springframework.data.domain.Pageable;
import java.util.List;
public interface TicketRepositoryCustom {
List<TicketDTO> getHistory(String customerId, Pageable pageable);
}
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.ccms_full.TimeRangeDialMode;
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.List;
/**
* @author anhvd_itsol
*/
@Repository
public interface TimeRangeDialModeRepository extends JpaRepository<TimeRangeDialMode, Long> {
List<TimeRangeDialMode> findTimeRangeDialModeByCampaignIdAndCompanySiteId(Long campaignId, Long companySiteId);
@Query(value = "SELECT * FROM TIME_RANGE_DIAL_MODE r " +
"WHERE r.CAMPAIGN_ID = :campaignId AND r.COMPANY_SITE_ID = :companySiteId AND TO_CHAR(r.START_TIME,'HH24:MI:SS') <= TO_CHAR(SYSDATE,'HH24:MI:SS')", nativeQuery = true)
TimeRangeDialMode findDialModeAtCurrent(@Param("campaignId") Long campaignId, @Param("companySiteId") Long companySiteId);
}
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.ccms_full.TimeZoneDialMode;
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.List;
/**
* @author anhvd_itsol
*/
@Repository
public interface TimeZoneDialModeRepository extends JpaRepository<TimeZoneDialMode, Long> {
List<TimeZoneDialMode> findTimeZoneDialModeByCampaignIdAndCompanySiteId(Long campaignId, Long companySiteId);
@Query(value = "SELECT * FROM TIME_ZONE_DIAL_MODE z " +
"WHERE z.CAMPAIGN_ID = :campaignId AND z.COMPANY_SITE_ID = :companySiteId AND concat(z.HOUR, ':', z.MINUTE) <= TO_CHAR(SYSDATE,'HH24:MI')", nativeQuery = true)
TimeZoneDialMode findDialModeAtCurrent(@Param("campaignId") Long campaignId, @Param("companySiteId") Long companySiteId);
}
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.UserActionLogDTO;
import org.springframework.transaction.annotation.Transactional;
/**
* @author anhvd_itsol
*/
public interface UserActionLogRepositoryCustom {
@Transactional(DataSourceQualify.CCMS_FULL)
ResultDTO insertToUserActionLog(UserActionLogDTO userActionLogDTO);
}
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.ccms_full.VSAUsers;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface VSAUsersRepository extends JpaRepository<VSAUsers, Long> {
List<VSAUsers> findAllByCompanySiteId(Long companySiteId);
}
package com.viettel.campaign.repository.ccms_full.impl;
import com.viettel.campaign.repository.ccms_full.ApParamRepositoryCustom;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
@Repository
@Transactional
public class AppParamRepositoryImpl implements ApParamRepositoryCustom {
}
package com.viettel.campaign.repository.ccms_full.impl;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.CampaignCfg;
import com.viettel.campaign.repository.ccms_full.CampaignCfgRepositoryCustom;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Repository
public class CampaignCfgRepositoryIpml implements CampaignCfgRepositoryCustom {
@Autowired
@PersistenceContext( unitName= DataSourceQualify.JPA_UNIT_NAME_CCMS_FULL)
private EntityManager entityManager;
private Logger log = LoggerFactory.getLogger(CampaignCfgRepositoryIpml.class);
@Override
// @Transactional(DataSourceQualify.CCMS_FULL)
public CampaignCfg updateStatusById(Long id) {
CampaignCfg dto = new CampaignCfg();
try {
CampaignCfg e = entityManager.find(CampaignCfg.class, id);
e.setStatus(new Short("0")); // set status = 0 --> khong hoat dong
entityManager.merge(e);
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return dto;
}
@Override
// @Transactional(DataSourceQualify.CCMS_FULL)
public CampaignCfg findMaxValueCampaignType(Long companySiteId) {
CampaignCfg result = new CampaignCfg();
try {
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return result;
}
}
package com.viettel.campaign.repository.ccms_full.impl;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.ApParam;
import com.viettel.campaign.repository.ccms_full.ApParamRepository;
import com.viettel.campaign.repository.ccms_full.CampaignCustomerRepositoryCustom;
import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.utils.DataUtil;
import com.viettel.campaign.utils.HibernateUtil;
import com.viettel.campaign.utils.SQLBuilder;
import com.viettel.campaign.web.dto.CampaignCustomerDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.transform.Transformers;
import org.hibernate.type.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@Transactional(DataSourceQualify.CCMS_FULL)
public class CampaignCustomerRepositoryImpl implements CampaignCustomerRepositoryCustom {
@Autowired
ApParamRepository apParamRepository;
@Autowired
@PersistenceContext(unitName = DataSourceQualify.JPA_UNIT_NAME_CCMS_FULL)
EntityManager entityManager;
@Override
public List<CampaignCustomerDTO> getDataCampaignCustomer(CampaignCustomerDTO customerDTO, String expression) {
List<CampaignCustomerDTO> result = new ArrayList<>();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
try {
SQLQuery query = session.createSQLQuery(expression);
query.setParameter("campaignId", customerDTO.getCampaignId());
query.setParameter("companySiteId", customerDTO.getCompanySiteId());
if (expression.contains(":agentId")) {
query.setParameter("agentId", customerDTO.getAgentId());
}
if (expression.contains(":dungSai")) {
List<ApParam> apParam = apParamRepository.findAllParam("DUNG_SAI");
query.setParameter("dungSai", apParam.get(0).getParValue());
}
query.addScalar("customerId", new LongType());
query.setResultTransformer(Transformers.aliasToBean(CampaignCustomerDTO.class));
result = query.list();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
session.close();
}
return result;
}
}
package com.viettel.campaign.repository.ccms_full.impl;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.repository.ccms_full.CampaignExecuteRepository;
import com.viettel.campaign.repository.ccms_full.TimeRangeDialModeRepository;
import com.viettel.campaign.repository.ccms_full.TimeZoneDialModeRepository;
import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.utils.DataUtil;
import com.viettel.campaign.utils.HibernateUtil;
import com.viettel.campaign.utils.SQLBuilder;
import com.viettel.campaign.web.dto.ApParamDTO;
import com.viettel.campaign.web.dto.CampaignDTO;
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.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.transform.Transformers;
import org.hibernate.type.DateType;
import org.hibernate.type.LongType;
import org.hibernate.type.ShortType;
import org.hibernate.type.StringType;
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;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.TimeUnit;
@Repository
public class CampaignExecuteRepositoryImp implements CampaignExecuteRepository {
private static final Logger logger = LoggerFactory.getLogger(CampaignExecuteRepositoryImp.class);
private static final String CONNECT_STATUS_TYPE_RE = "3";
@Autowired
@Qualifier(DataSourceQualify.NAMED_JDBC_PARAMETER_TEMPLATE_CCMS_FULL)
NamedParameterJdbcTemplate namedParameterJdbcTemplate;
@Autowired
@PersistenceContext(unitName = DataSourceQualify.JPA_UNIT_NAME_CCMS_FULL)
EntityManager entityManager;
@Autowired
TimeZoneDialModeRepository zoneDialModeRepository;
@Autowired
TimeRangeDialModeRepository rangeDialModeRepository;
@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");
StringBuilder sb = new StringBuilder();
sb.append("select distinct COMPLETE_VALUE apParamId,");
sb.append(" COMPLETE_NAME parName");
sb.append(" from CAMPAIGN_COMPLETE_CODE");
sb.append(" where to_char(COMPLETE_TYPE) = :p_complete_type and STATUS = 1 and COMPANY_SITE_ID = :p_company_site_id");
try {
params.put("p_company_site_id", companySiteId);
params.put("p_complete_type", completeType);
list = namedParameterJdbcTemplate.query(sb.toString(), params, BeanPropertyRowMapper.newInstance(ApParamDTO.class));
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return list;
}
@Override
public List<ApParamDTO> getComboCampaignType(String companySiteId) {
List<ApParamDTO> list = new ArrayList<>();
Map<String, String> params = new HashMap<>();
//String sql = SQLBuilder.getSqlQueryById(Constants.SQL_MODULES.MODULE_EXECUTE, "get-combo-campaign-type");
StringBuilder sb = new StringBuilder();
sb.append("select PAR_VALUE apParamId,");
sb.append(" PAR_NAME parName");
sb.append(" from AP_PARAM");
sb.append(" where PAR_TYPE = 'CAMPAIGN_TYPE'");
sb.append(" and COMPANY_SITE_ID = :p_company_site_id");
sb.append(" and IS_DELETE = 0");
try {
params.put("p_company_site_id", companySiteId);
list = namedParameterJdbcTemplate.query(sb.toString(), params, BeanPropertyRowMapper.newInstance(ApParamDTO.class));
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return list;
}
@Override
public ResultDTO getInteractiveResult(CampaignRequestDTO dto) {
ResultDTO resultDTO = new ResultDTO();
List<ContactCustResultDTO> list = new ArrayList<>();
Map<String, String> params = new HashMap<>();
try {
// String sql = SQLBuilder.getSqlQueryById(Constants.SQL_MODULES.MODULE_EXECUTE, "get-execute-interactive");
StringBuilder sql = new StringBuilder();
sql.append("with campaign_type_list as (");
sql.append(" select trim (regexp_substr(:p_list_compaign_type, '[^,]+', 1, level)) campaign_type");
sql.append(" from dual");
sql.append(" connect by level <= regexp_count(:p_list_compaign_type, ',') +1");
sql.append(" ),");
sql.append(" contact_status_list as (");
sql.append(" select trim (regexp_substr(:p_list_contact_status, '[^,]+', 1, level)) contact_status");
sql.append(" from dual");
sql.append(" connect by level <= regexp_count(:p_list_contact_status, ',') +1");
sql.append(" ),");
sql.append(" survey_status_list as (");
sql.append(" select trim (regexp_substr(:p_list_survey_status, '[^,]+', 1, level)) survey_status");
sql.append(" from dual");
sql.append(" connect by level <= regexp_count(:p_list_survey_status, ',') +1");
sql.append(" ),");
sql.append(" record_status_list as (");
sql.append(" select trim (regexp_substr(:p_list_record_status, '[^,]+', 1, level)) record_status");
sql.append(" from dual");
sql.append(" connect by level <= regexp_count(:p_list_record_status, ',') +1");
sql.append(" ),");
sql.append(" campaign_id_list as (");
sql.append(" select trim (regexp_substr(:p_list_campaign_id, '[^,]+', 1, level)) campaign_id");
sql.append(" from dual");
sql.append(" connect by level <= regexp_count(:p_list_campaign_id, ',') +1");
sql.append(" ),");
sql.append(" data_temp as (");
sql.append(" select b.campaign_code campaignCode,");
sql.append(" b.campaign_name campaignName,");
sql.append(" c.user_name userName,");
sql.append(" a.phone_number phoneNumber,");
sql.append(" d.name customerName,");
sql.append(" to_date(a.start_call, 'DD/MM/YYYY') startCall,");
sql.append(" e.complete_name contactStatus,");
sql.append(" f.complete_name surveyStatus,");
sql.append(" g.status status,");
sql.append(" a.status recordStatus,");
sql.append(" (a.end_time - a.start_call)*24*60 callTime");
sql.append(" from contact_cust_result a");
sql.append(" left join campaign b on a.campaign_id = b.campaign_id");
sql.append(" left join vsa_users c on a.agent_id = c.user_id");
sql.append(" left join customer d on a.customer_id = d.customer_id");
sql.append(" left join campaign_complete_code e on a.contact_status = e.complete_value");
sql.append(" left join campaign_complete_code f on a.call_status = e.complete_value");
sql.append(" left join campaign g on a.campaign_id = g.campaign_id");
sql.append(" where a.status <> 0");
sql.append(" and a.company_site_id = :p_company_site_id");
sql.append(" and a.create_time >= to_date(:p_date_from, 'DD/MM/YYYY')");
sql.append(" and a.create_time <= to_date(:p_date_to, 'DD/MM/YYYY')");
sql.append(" and a.duration_call >= :p_call_time_from");
sql.append(" and a.duration_call <= :p_call_time_to");
sql.append(" and to_char(a.customer_id) like '%'||:p_customer_id||'%'");
sql.append(" and b.campaign_type in (select campaign_type from campaign_type_list)");
sql.append(" and to_char(a.contact_status) in (select contact_status from contact_status_list)");
sql.append(" and to_char(a.call_status) in (select survey_status from survey_status_list)");
sql.append(" and to_char(a.status) in (select record_status from record_status_list)");
sql.append(" and (:p_phone_number is null or to_char(a.phone_number) like '%'||:p_phone_number||'%')");
sql.append(" and (:p_list_campaign_id is null or b.campaign_code in (select campaign_id from campaign_id_list))");
sql.append(" and (:p_campaign_name is null or upper(b.campaign_name) like '%'||:p_campaign_name||'%')");
sql.append(" and (:p_user_name is null or upper(c.user_name) like '%'||:p_user_name||'%')");
sql.append(" ),");
sql.append(" data as (");
sql.append(" select a.*, rownum row_ from data_temp a");
sql.append(" )");
sql.append(" select * from data");
sql.append(" where :p_page_size = 0 or (row_ >= ((:p_page_number - 1) * :p_page_size + 1) and row_ < (:p_page_number * :p_page_size + 1))");
params.put("p_company_site_id", dto.getCompanySiteId());
params.put("p_customer_id", dto.getCustomerId());
params.put("p_date_from", dto.getFromDate());
params.put("p_date_to", dto.getToDate());
params.put("p_list_compaign_type", dto.getCampaignType());
params.put("p_list_contact_status", dto.getContactStatus());
params.put("p_list_survey_status", dto.getSurveyStatus());
params.put("p_list_record_status", dto.getRecordStatus());
params.put("p_call_time_from", dto.getCallTimeFrom());
params.put("p_list_campaign_id", dto.getCallTimeTo());
params.put("p_phone_number", dto.getPhoneNumber());
params.put("p_campaign_name", DataUtil.isNullOrEmpty(dto.getCampaignName()) ? null : dto.getCampaignName().toUpperCase());
params.put("p_user_name", dto.getAgentId().toUpperCase());
params.put("p_page_number", dto.getPage().toString());
params.put("p_page_size", dto.getPageSize().toString());
list = namedParameterJdbcTemplate.query(sql.toString(), params, BeanPropertyRowMapper.newInstance(ContactCustResultDTO.class));
for (ContactCustResultDTO contactCustResultDTO : list) {
if (!"AGENT".equals(dto.getRoleUser())) {
contactCustResultDTO.setEnableEdit(true);
} else {
if (contactCustResultDTO.getRecordStatus() == 2) {
contactCustResultDTO.setEnableEdit(true);
} else if (contactCustResultDTO.getRecordStatus() == 1 && isLower24Hour(contactCustResultDTO.getCreateTime())) {
contactCustResultDTO.setEnableEdit(true);
} else {
contactCustResultDTO.setEnableEdit(false);
}
}
}
resultDTO.setListData(list);
resultDTO.setTotalRow(list.size());
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception e) {
logger.error(e.getMessage(), e);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
} finally {
return resultDTO;
}
}
@Override
public List<ContactCustResultDTO> getExcelInteractiveResult(CampaignRequestDTO dto) {
List<ContactCustResultDTO> list = new ArrayList<>();
Map<String, String> params = new HashMap<>();
try {
StringBuilder sb = new StringBuilder();
sb.append("with campaign_type_list as (");
sb.append(" select trim (regexp_substr(:p_list_compaign_type, '[^,]+', 1, level)) campaign_type");
sb.append(" from dual");
sb.append(" connect by level <= regexp_count(:p_list_compaign_type, ',') +1");
sb.append(" ),");
sb.append(" contact_status_list as (");
sb.append(" select trim (regexp_substr(:p_list_contact_status, '[^,]+', 1, level)) contact_status");
sb.append(" from dual");
sb.append(" connect by level <= regexp_count(:p_list_contact_status, ',') +1");
sb.append(" ),");
sb.append(" survey_status_list as (");
sb.append(" select trim (regexp_substr(:p_list_survey_status, '[^,]+', 1, level)) survey_status");
sb.append(" from dual");
sb.append(" connect by level <= regexp_count(:p_list_survey_status, ',') +1");
sb.append(" ),");
sb.append(" record_status_list as (");
sb.append(" select trim (regexp_substr(:p_list_record_status, '[^,]+', 1, level)) record_status");
sb.append(" from dual");
sb.append(" connect by level <= regexp_count(:p_list_record_status, ',') +1");
sb.append(" ),");
sb.append(" campaign_id_list as (");
sb.append(" select trim (regexp_substr(:p_list_campaign_id, '[^,]+', 1, level)) campaign_id");
sb.append(" from dual");
sb.append(" connect by level <= regexp_count(:p_list_campaign_id, ',') +1");
sb.append(" ),");
sb.append(" data_temp as (");
sb.append(" select b.campaign_code campaignCode,");
sb.append(" b.campaign_name campaignName,");
sb.append(" c.user_name userName,");
sb.append(" a.phone_number phoneNumber,");
sb.append(" d.name customerName,");
sb.append(" to_date(a.start_call, 'DD/MM/YYYY') startCall,");
sb.append(" e.complete_name contactStatus,");
sb.append(" f.complete_name surveyStatus,");
sb.append(" g.status status,");
sb.append(" a.status recordStatus,");
sb.append(" (a.end_time - a.start_call)*24*60 callTime");
sb.append(" from contact_cust_result a");
sb.append(" left join campaign b on a.campaign_id = b.campaign_id");
sb.append(" left join vsa_users c on a.agent_id = c.user_id");
sb.append(" left join customer d on a.customer_id = d.customer_id");
sb.append(" left join campaign_complete_code e on a.contact_status = e.complete_value");
sb.append(" left join campaign_complete_code f on a.call_status = e.complete_value");
sb.append(" left join campaign g on a.campaign_id = g.campaign_id");
sb.append(" where a.status <> 0");
sb.append(" and a.company_site_id = :p_company_site_id");
sb.append(" and a.create_time >= to_date(:p_date_from, 'DD/MM/YYYY')");
sb.append(" and a.create_time <= to_date(:p_date_to, 'DD/MM/YYYY')");
sb.append(" and a.duration_call >= :p_call_time_from");
sb.append(" and a.duration_call <= :p_call_time_to");
sb.append(" and to_char(a.customer_id) like '%'||:p_customer_id||'%'");
sb.append(" and b.campaign_type in (select campaign_type from campaign_type_list)");
sb.append(" and to_char(a.contact_status) in (select contact_status from contact_status_list)");
sb.append(" and to_char(a.call_status) in (select survey_status from survey_status_list)");
sb.append(" and to_char(a.status) in (select record_status from record_status_list)");
sb.append(" and (:p_phone_number is null or to_char(a.phone_number) like '%'||:p_phone_number||'%')");
sb.append(" and (:p_list_campaign_id is null or b.campaign_code in (select campaign_id from campaign_id_list))");
sb.append(" and (:p_campaign_name is null or upper(b.campaign_name) like '%'||:p_campaign_name||'%')");
sb.append(" and (:p_user_name is null or upper(c.user_name) like '%'||:p_user_name||'%')");
sb.append(" ),");
sb.append(" data as (");
sb.append(" select a.*, rownum row_ from data_temp a");
sb.append(" )");
sb.append(" select * from data");
sb.append(" where :p_page_size = 0 or (row_ >= ((:p_page_number - 1) * :p_page_size + 1) and row_ < (:p_page_number * :p_page_size + 1))");
params.put("p_company_site_id", dto.getCompanySiteId());
params.put("p_customer_id", dto.getCustomerId());
params.put("p_date_from", dto.getFromDate());
params.put("p_date_to", dto.getToDate());
params.put("p_list_compaign_type", dto.getCampaignType());
params.put("p_list_contact_status", dto.getContactStatus());
params.put("p_list_survey_status", dto.getSurveyStatus());
params.put("p_list_record_status", dto.getRecordStatus());
params.put("p_call_time_from", dto.getCallTimeFrom());
params.put("p_list_campaign_id", dto.getCallTimeTo());
params.put("p_phone_number", dto.getPhoneNumber());
params.put("p_campaign_name", DataUtil.isNullOrEmpty(dto.getCampaignName()) ? null : dto.getCampaignName().toUpperCase());
params.put("p_user_name", dto.getAgentId().toUpperCase());
params.put("p_page_number", dto.getPage().toString());
params.put("p_page_size", "0");
list = namedParameterJdbcTemplate.query(sb.toString(), params, BeanPropertyRowMapper.newInstance(ContactCustResultDTO.class));
} catch (Exception e) {
logger.error(e.getMessage(), e);
} finally {
return list;
}
}
@Override
public List<ContactCustResultDTO> getContactCustById(CampaignRequestDTO dto) {
return null;
}
private boolean isLower24Hour(Date createTime) {
Date currTime = new Date();
long diffMilSec = currTime.getTime() - createTime.getTime();
long hour = TimeUnit.MILLISECONDS.toHours(diffMilSec);
if (hour > 24) return false;
return true;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public List<CampaignDTO> searchCampaignExecute(CampaignRequestDTO campaignRequestDto, Pageable pageable) {
List<CampaignDTO> result = new ArrayList<>();
StringBuilder expression = new StringBuilder()
.append(" SELECT C.CAMPAIGN_CODE, C.CAMPAIGN_NAME, C.CONTENT, C.START_TIME, C.END_TIME, C.STATUS, CA.STATUS AS AGENT_STATUS, C.CAMPAIGN_ID ")
.append(" FROM CAMPAIGN C INNER JOIN CAMPAIGN_AGENT CA ON C.CAMPAIGN_ID = CA.CAMPAIGN_ID ")
.append(" WHERE 1 = 1 ")
.append(" AND CA.AGENT_ID = :pAgentId ");
if (!DataUtil.isNullOrEmpty(campaignRequestDto.getCampaignCode())) {
expression.append(" AND C.CAMPAIGN_CODE IN (:pCampaignCode) ");
}
if (!DataUtil.isNullOrEmpty(campaignRequestDto.getCampaignName())) {
expression.append(" AND UPPER(C.CAMPAIGN_NAME) LIKE :pCampaignName ");
}
if (!DataUtil.isNullOrZero(campaignRequestDto.getStatus().longValue())) {
if (campaignRequestDto.getStatus() != 0)
expression.append(" AND C.STATUS = :pStatus ");
} else {
expression.append(" AND C.STATUS IN (2, 3) ");
}
if (!DataUtil.isNullOrEmpty(campaignRequestDto.getFromDateFr())) {
expression.append(" AND TRUNC(C.START_TIME) >= TRUNC(:pStartTimeFr) ");
}
if (!DataUtil.isNullOrEmpty(campaignRequestDto.getFromDateTo())) {
expression.append(" AND TRUNC(C.START_TIME) <= TRUNC(:pStartTimeTo) ");
}
if (!DataUtil.isNullOrEmpty(campaignRequestDto.getToDateFr())) {
expression.append(" AND TRUNC(C.END_TIME) >= TRUNC(:pEndTimeFr) ");
}
if (!DataUtil.isNullOrEmpty(campaignRequestDto.getToDateTo())) {
expression.append(" AND TRUNC(C.END_TIME) <= TRUNC(:pEndTimeTo) ");
}
if (!DataUtil.isNullOrZero(campaignRequestDto.getNumOfCusFr())) {
expression.append(" AND C.CUSTOMER_NUMBER >= :pCustNumFr ");
}
if (!DataUtil.isNullOrZero(campaignRequestDto.getNumOfCusTo())) {
expression.append(" AND C.CUSTOMER_NUMBER <= :pCustNumTo ");
}
try {
Query query = entityManager.createNativeQuery(expression.toString());
query.setParameter("pAgentId", Long.parseLong(campaignRequestDto.getAgentId()));
if (!DataUtil.isNullOrEmpty(campaignRequestDto.getCampaignCode())) {
String[] lstCode = campaignRequestDto.getCampaignCode().split(",");
query.setParameter("pCampaignCode", lstCode);
}
if (!DataUtil.isNullOrEmpty(campaignRequestDto.getCampaignName())) {
query.setParameter("pCampaignName", "%" +
campaignRequestDto.getCampaignName().toUpperCase()
.replace("\\", "\\\\")
.replaceAll("%", "\\\\%")
.replaceAll("_", "\\\\_")
+ "%");
}
if (!DataUtil.isNullOrZero(campaignRequestDto.getStatus().longValue())) {
if (campaignRequestDto.getStatus() != 0)
query.setParameter("pStatus", campaignRequestDto.getStatus());
}
if (!DataUtil.isNullOrEmpty(campaignRequestDto.getFromDateFr())) {
query.setParameter("pStartTimeFr", campaignRequestDto.getFromDateFr());
}
if (!DataUtil.isNullOrEmpty(campaignRequestDto.getFromDateTo())) {
query.setParameter("pStartTimeTo", campaignRequestDto.getFromDateTo());
}
if (!DataUtil.isNullOrEmpty(campaignRequestDto.getToDateFr())) {
query.setParameter("pEndTimeFr", campaignRequestDto.getToDateFr());
}
if (!DataUtil.isNullOrEmpty(campaignRequestDto.getToDateTo())) {
query.setParameter("pEndTimeTo", campaignRequestDto.getToDateTo());
}
if (!DataUtil.isNullOrZero(campaignRequestDto.getNumOfCusFr())) {
query.setParameter("pCustNumFr", campaignRequestDto.getNumOfCusFr());
}
if (!DataUtil.isNullOrZero(campaignRequestDto.getNumOfCusTo())) {
query.setParameter("pCustNumTo", campaignRequestDto.getNumOfCusTo());
}
if (pageable != null) {
query.setFirstResult(pageable.getPageNumber() * pageable.getPageSize());
query.setMaxResults(pageable.getPageSize());
}
List<Object[]> data = query.getResultList();
//TimeZoneDialMode zoneDialMode = zoneDialModeRepository.findDialModeAtCurrent(Long.parseLong(campaignRequestDto.getCampaignId()), Long.parseLong(campaignRequestDto.getCompanySiteId()));
//TimeRangeDialMode rangeDialMode = rangeDialModeRepository.findDialModeAtCurrent(Long.parseLong(campaignRequestDto.getCampaignId()), Long.parseLong(campaignRequestDto.getCompanySiteId()));
for (Object[] obj : data) {
CampaignDTO item = new CampaignDTO();
item.setPage(campaignRequestDto.getPage());
item.setPageSize(campaignRequestDto.getPageSize());
item.setSort(campaignRequestDto.getSort());
item.setCampaignCode((String) obj[0]);
item.setCampaignName((String) obj[1]);
item.setContent((String) obj[2]);
item.setStartTime((Date) obj[3]);
item.setEndTime((Date) obj[4]);
item.setStatus(((BigDecimal) obj[5]).shortValueExact());
item.setAgentStatus(((BigDecimal) obj[6]).shortValueExact());
item.setCampaignId(((BigDecimal) obj[7]).longValueExact());
result.add(item);
}
return result;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
package com.viettel.campaign.repository.ccms_full.impl;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.CampaignCustomer;
import com.viettel.campaign.repository.ccms_full.CampaignCustomerRepository;
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;
import com.viettel.campaign.utils.SQLBuilder;
import com.viettel.campaign.web.dto.CampaignDTO;
import com.viettel.campaign.web.dto.CustomerCustomDTO;
import com.viettel.campaign.web.dto.FieldsToShowDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.request_dto.CampaignRequestDTO;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.transform.Transformers;
import org.hibernate.type.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.domain.*;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.math.BigDecimal;
import java.util.*;
@Repository
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;
@Autowired
@Qualifier(DataSourceQualify.NAMED_JDBC_PARAMETER_TEMPLATE_CCMS_FULL)
NamedParameterJdbcTemplate namedParameterJdbcTemplate;
@Autowired
CampaignCustomerRepository campaignCustomerRepository;
@Override
public ResultDTO search(CampaignRequestDTO requestDto) {
logger.info("Start search campaign::");
ResultDTO result = new ResultDTO();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
if (DataUtil.isNullOrEmpty(requestDto.getCompanySiteId())) {
result.setErrorCode(Constants.ApiErrorCode.ERROR);
result.setDescription(Constants.ApiErrorDesc.ERROR);
return result;
}
try {
StringBuilder sb = new StringBuilder();
sb.append(" SELECT");
sb.append(" a.CAMPAIGN_ID campaignId,");
sb.append(" a.CAMPAIGN_CODE campaignCode,");
sb.append(" a.CAMPAIGN_NAME campaignName,");
sb.append(" a.CAMPAIGN_TYPE campaignType,");
sb.append(" (SELECT PAR_NAME FROM AP_PARAM WHERE STATUS = 1 AND PAR_TYPE = 'CAMPAIGN_TYPE' AND PAR_VALUE = a.CAMPAIGN_TYPE) campaignTypeName,");
sb.append(" a.CHANEL chanel,");
sb.append(" a.START_TIME startTime,");
sb.append(" a.END_TIME endTime,");
sb.append(" a.CUSTOMER_NUMBER customerNumber,");
sb.append(" a.STATUS status,");
sb.append(" a.CUSTOMER_NUMBER cusNum,");
sb.append(" b.SLKHThamgiaCD numOfJoinedCus,");
sb.append(" e.SLKHDaTuongTac numOfInteractedCus,");
sb.append(" c.SLKHChuaTuongTac numOfNotInteractedCus,");
sb.append(" d.SLKHDoNotCall_Khoa numOfLockCus,");
sb.append(" a.COMPANY_SITE_ID companySiteId,");
sb.append(" a.CONTENT content,");
sb.append(" a.MAX_RECALL maxRecall,");
sb.append(" a.RECALL_TYPE recallType,");
sb.append(" a.RECALL_DURATION recallDuration,");
sb.append(" a.CURRENT_TIME_MODE currentTimeMode,");
sb.append(" a.WRAPUP_TIME_CONNECT wrapupTimeConnect,");
sb.append(" a.WRAPUP_TIME_DISCONNECT wrapupTimeDisconnect");
sb.append(" FROM CAMPAIGN a");
sb.append(" LEFT JOIN (SELECT campaign_id, COUNT (*) AS SLKHThamgiaCD");
sb.append(" FROM campaign_customer cc INNER JOIN CUSTOMER cus ON cc.CUSTOMER_ID = cus.CUSTOMER_ID");
sb.append(" WHERE 1 = 1 AND cc.IN_CAMPAIGN_STATUS = 1 AND cus.STATUS = 1");
sb.append(" group by campaign_id) b");
sb.append(" ON a.CAMPAIGN_ID = b.CAMPAIGN_ID");
sb.append(" LEFT JOIN (SELECT campaign_id, COUNT (*) AS SLKHChuaTuongTac");
sb.append(" FROM campaign_customer cc INNER JOIN CUSTOMER cus ON cc.CUSTOMER_ID = cus.CUSTOMER_ID");
sb.append(" WHERE 1 = 1 AND cc.STATUS = 0 AND cus.STATUS = 1");
sb.append(" group by campaign_id) c");
sb.append(" ON c.CAMPAIGN_ID = a.CAMPAIGN_ID");
sb.append(" LEFT JOIN (SELECT cc.campaign_id, count(*) AS SLKHDoNotCall_Khoa");
sb.append(" FROM CAMPAIGN_CUSTOMER cc , CUSTOMER c");
sb.append(" WHERE cc.CUSTOMER_ID = c.CUSTOMER_ID");
sb.append(" AND (c.IPCC_STATUS = 'locked' or c.CALL_ALLOWED = 0) AND cc.STATUS = 1");
sb.append(" GROUP BY cc.CAMPAIGN_ID) d");
sb.append(" ON d.CAMPAIGN_ID = a.CAMPAIGN_ID");
sb.append(" LEFT JOIN (SELECT campaign_id, COUNT (*) AS SLKHDaTuongTac");
sb.append(" FROM campaign_customer cc INNER JOIN CUSTOMER cus ON cc.CUSTOMER_ID = cus.CUSTOMER_ID");
sb.append(" WHERE 1 = 1 AND cc.STATUS <> 0 AND cus.STATUS = 1");
sb.append(" group by campaign_id) e");
sb.append(" ON e.CAMPAIGN_ID = a.CAMPAIGN_ID");
sb.append(" WHERE 1 = 1");
sb.append(" AND COMPANY_SITE_ID = :p_company_site_id");
sb.append(" AND a.STATUS <> -1");
if (!DataUtil.isNullOrEmpty(requestDto.getCampaignCode())) {
sb.append(" AND a.CAMPAIGN_CODE IN (:p_code) ");
}
if (!DataUtil.isNullOrEmpty(requestDto.getCampaignName())) {
sb.append(" AND UPPER(a.CAMPAIGN_NAME) LIKE :p_name");
}
if (requestDto.getStatus() != null && requestDto.getStatus() >= 0) {
sb.append(" AND a.STATUS = :p_status");
}
if (!DataUtil.isNullOrEmpty(requestDto.getFromDateFr())) {
sb.append(" AND TO_DATE(a.START_TIME, 'DD/MM/YYYY') >= :p_frDateFr");
}
if (!DataUtil.isNullOrEmpty(requestDto.getToDateFr())) {
sb.append(" AND TO_DATE(a.START_TIME, 'DD/MM/YYYY') <= :p_toDateFr");
}
if (!DataUtil.isNullOrEmpty(requestDto.getFromDateTo())) {
sb.append(" AND TO_DATE(a.END_TIME, 'DD/MM/YYYY') >= :p_frDateTo");
}
if (!DataUtil.isNullOrEmpty(requestDto.getToDateTo())) {
sb.append(" AND TO_DATE(a.END_TIME, 'DD/MM/YYYY') <= :p_toDateTo");
}
if (!DataUtil.isNullOrZero(requestDto.getNumOfCusFr())) {
sb.append(" AND a.CUSTOMER_NUMBER >= :p_cusNumFr");
}
if (!DataUtil.isNullOrZero(requestDto.getNumOfCusTo())) {
sb.append(" AND a.CUSTOMER_NUMBER <= :p_cusNumTo");
}
if (!DataUtil.isNullOrEmpty(requestDto.getTypes())) {
sb.append(" AND a.CAMPAIGN_TYPE IN (:p_type)");
}
if (requestDto.getChanel() != null && !DataUtil.isNullOrZero(requestDto.getChanel())) {
sb.append(" AND a.CHANEL = :p_chanel");
}
if (!DataUtil.isNullOrZero(requestDto.getNumOfCusFr())) {
sb.append(" AND a.CUSTOMER_NUMBER >= :p_cusNumFr");
}
if (!DataUtil.isNullOrZero(requestDto.getNumOfCusTo())) {
sb.append(" AND a.CUSTOMER_NUMBER <= :p_cusNumTo");
}
sb.append(" ORDER BY a.START_TIME DESC ");
SQLQuery query = session.createSQLQuery(sb.toString());
if (!DataUtil.isNullOrEmpty(requestDto.getCampaignCode())) {
String[] lstCode = requestDto.getCampaignCode().split(",");
query.setParameterList("p_code", lstCode);
}
if (!DataUtil.isNullOrEmpty(requestDto.getCampaignName())) {
query.setParameter("p_name", "%" +
requestDto.getCampaignName().toUpperCase()
.replace("\\", "\\\\")
.replaceAll("%", "\\\\%")
.replaceAll("_", "\\\\_")
+ "%");
}
query.setParameter("p_company_site_id", requestDto.getCompanySiteId());
if (requestDto.getStatus() != null && requestDto.getStatus() >= 0) {
query.setParameter("p_status", requestDto.getStatus());
}
if (!DataUtil.isNullOrEmpty(requestDto.getFromDateFr())) {
query.setParameter("p_frDateFr", requestDto.getFromDateFr());
}
if (!DataUtil.isNullOrEmpty(requestDto.getFromDateTo())) {
query.setParameter("p_frDateTo", requestDto.getFromDateTo());
}
if (!DataUtil.isNullOrEmpty(requestDto.getToDateFr())) {
query.setParameter("p_toDateFr", requestDto.getToDateFr());
}
if (!DataUtil.isNullOrEmpty(requestDto.getToDateTo())) {
query.setParameter("p_toDateTo", requestDto.getToDateTo());
}
if (!DataUtil.isNullOrEmpty(requestDto.getTypes())) {
String[] types = requestDto.getTypes().split(",");
query.setParameterList("p_type", types);
}
if (requestDto.getChanel() != null && !DataUtil.isNullOrZero(requestDto.getChanel())) {
query.setParameter("p_chanel", requestDto.getChanel());
}
if (!DataUtil.isNullOrZero(requestDto.getNumOfCusFr())) {
query.setParameter("p_cusNumFr", requestDto.getNumOfCusFr() == 0 ? null : requestDto.getNumOfCusFr());
}
if (!DataUtil.isNullOrZero(requestDto.getNumOfCusTo())) {
query.setParameter("p_cusNumTo", requestDto.getNumOfCusTo() == 0 ? null : requestDto.getNumOfCusTo());
}
query.addScalar("campaignId", new LongType());
query.addScalar("campaignCode", new StringType());
query.addScalar("campaignName", new StringType());
query.addScalar("campaignType", new StringType());
query.addScalar("campaignTypeName", new StringType());
query.addScalar("chanel", new ShortType());
query.addScalar("startTime", new DateType());
query.addScalar("endTime", new DateType());
query.addScalar("customerNumber", new LongType());
query.addScalar("status", new ShortType());
query.addScalar("numOfJoinedCus", 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;
List<CampaignDTO> list = query.list();
if (list.size() > 0) {
count = query.list().size();
}
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);
}
result.setErrorCode(Constants.ApiErrorCode.SUCCESS);
result.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception ex) {
result.setErrorCode(Constants.ApiErrorCode.ERROR);
result.setDescription(Constants.ApiErrorDesc.ERROR);
logger.error(ex.getMessage(), ex);
} finally {
session.close();
}
return result;
}
@Override
public ResultDTO findByCampaignCode(CampaignRequestDTO requestDto) {
logger.info("Start search campaign by code::");
ResultDTO result = new ResultDTO();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
if (DataUtil.isNullOrEmpty(requestDto.getCompanySiteId())) {
result.setErrorCode(Constants.ApiErrorCode.ERROR);
result.setDescription(Constants.ApiErrorDesc.ERROR);
return result;
}
try {
StringBuilder sb = new StringBuilder();
sb.append(" SELECT CAMPAIGN_ID campaignId, " +
" CAMPAIGN_CODE campaignCode, " +
" CAMPAIGN_NAME campaignName, " +
" START_TIME startTime," +
" END_TIME endTime, " +
" STATUS status " +
" FROM CAMPAIGN" +
" WHERE COMPANY_SITE_ID = :p_company_site_id AND STATUS <> -1 ");
if (!DataUtil.isNullOrEmpty(requestDto.getCampaignCode())) {
sb.append(" AND CAMPAIGN_CODE LIKE :p_code ");
}
sb.append(" ORDER BY START_TIME DESC ");
SQLQuery query = session.createSQLQuery(sb.toString());
query.setParameter("p_company_site_id", requestDto.getCompanySiteId());
if (!DataUtil.isNullOrEmpty(requestDto.getCampaignCode())) {
query.setParameter("p_code", "%" +
requestDto.getCampaignCode().toUpperCase()
.replace("\\", "\\\\")
.replaceAll("%", "\\\\%")
.replaceAll("_", "\\\\_")
+ "%");
}
query.addScalar("campaignId", new LongType());
query.addScalar("campaignCode", new StringType());
query.addScalar("campaignName", new StringType());
query.addScalar("startTime", new DateType());
query.addScalar("endTime", new DateType());
query.addScalar("status", new ShortType());
query.setResultTransformer(Transformers.aliasToBean(CampaignDTO.class));
int count = 0;
List<CampaignDTO> list = query.list();
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());
}
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) {
logger.error(ex.getMessage(), ex);
result.setErrorCode(Constants.ApiErrorCode.ERROR);
result.setDescription(Constants.ApiErrorDesc.ERROR);
} finally {
session.close();
}
return result;
}
@Override
public String getMaxCampaignIndex() {
logger.info("Start search max campaign code index::");
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
try {
//StringBuilder sb = new StringBuilder();
//sb.append(SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_MNG, "get-max-campaign-code-index"));
StringBuilder sb = new StringBuilder();
sb.append("SELECT CASE WHEN");
sb.append(" (SELECT COUNT(1) FROM CAMPAIGN) > 0");
sb.append(" THEN (SELECT SUBSTR((SELECT CAMPAIGN_CODE FROM CAMPAIGN WHERE CAMPAIGN_ID = (SELECT MAX(CAMPAIGN_ID) FROM CAMPAIGN)),");
sb.append(" INSTR((SELECT CAMPAIGN_CODE FROM CAMPAIGN WHERE CAMPAIGN_ID = (SELECT MAX(CAMPAIGN_ID) FROM CAMPAIGN)), '_', -1, 1 )+1) FROM DUAL)");
sb.append(" ELSE '0'");
sb.append(" END FROM DUAL");
SQLQuery query = session.createSQLQuery(sb.toString());
List<String> list = query.list();
if (list.size() > 0) {
return list.get(0);
}
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
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 sb = new StringBuilder();
// sb.append(SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_MNG, "check-allow-campaign-status-to-prepare"));
StringBuilder sb = new StringBuilder();
sb.append(" WITH COUNT_LIST AS (SELECT (SELECT COUNT(1) FROM CAMPAIGN_CUSTOMER WHERE CAMPAIGN_ID = :p_campaignId) countCamp,");
sb.append(" (SELECT COUNT(1) FROM CAMPAIGN_AGENT WHERE CAMPAIGN_ID = :p_campaignId) countAgent,");
sb.append(" (select COUNT(1)");
sb.append(" FROM SCENARIO s");
sb.append(" INNER JOIN SCENARIO_QUESTION sq ON s.SCENARIO_ID = sq.SCENARIO_ID");
sb.append(" INNER JOIN SCENARIO_ANSWER sa ON sq.SCENARIO_QUESTION_ID = sa.SCENARIO_QUESTION_ID");
sb.append(" WHERE s.CAMPAIGN_ID = :p_campaignId) countScenario");
sb.append(" FROM DUAL)");
sb.append(" SELECT c.countCamp countCamp,");
sb.append(" c.countAgent countAgent,");
sb.append(" c.countScenario countScenario,");
sb.append(" CASE");
sb.append(" WHEN (c.countCamp IS NOT NULL AND c.countAgent IS NOT NULL AND c.countScenario IS NOT NULL) THEN '00'");
sb.append(" ELSE '01' END as code");
sb.append(" FROM COUNT_LIST c");
SQLQuery query = session.createSQLQuery(sb.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;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO findCustomerListReallocation(CampaignRequestDTO dto) {
ResultDTO resultDTO = new ResultDTO();
List<CustomerCustomDTO> list = new ArrayList<>();
Map<String, String> params = new HashMap<>();
StringBuilder stringBuilder = new StringBuilder();
try {
// String sql = SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_MNG, "get-list-customer-reallocation");
stringBuilder.append(" with contact as (");
stringBuilder.append(" select customer_id, contact");
stringBuilder.append(" from (");
stringBuilder.append(" select * from customer_contact");
stringBuilder.append(" where status = 1");
stringBuilder.append(" and contact_type = 5");
stringBuilder.append(" and is_direct_line = 1");
stringBuilder.append(" order by create_date desc");
stringBuilder.append(" )");
stringBuilder.append(" where rownum = 1");
stringBuilder.append(" ),");
stringBuilder.append(" connect_status as (");
stringBuilder.append(" select complete_value, complete_name");
stringBuilder.append(" from campaign_complete_code");
stringBuilder.append(" where company_site_id = :p_company_site_id");
stringBuilder.append(" and complete_type = 1");
stringBuilder.append(" and complete_value <> 1");
stringBuilder.append(" ),");
stringBuilder.append(" connect_status_list as (");
stringBuilder.append(" select trim (regexp_substr(:p_list_connect_status, '[^,]+', 1, level)) connect_status");
stringBuilder.append(" from dual");
stringBuilder.append(" connect by level <= regexp_count(:p_list_connect_status, ',') +1");
stringBuilder.append(" ),");
stringBuilder.append(" data as (");
stringBuilder.append(" select a.campaign_customer_id campaignCustomerId,");
stringBuilder.append(" b.name customerName,");
stringBuilder.append(" c.contact mobileNumber,");
stringBuilder.append(" to_char(a.call_time, 'DD/MM/YYYY HH24:MI:SS') connectTime,");
stringBuilder.append(" d.complete_name connectStatus");
stringBuilder.append(" from campaign_customer a");
stringBuilder.append(" left join customer b on a.customer_id = b.customer_id");
stringBuilder.append(" left join contact c on a.customer_id = c.customer_id");
stringBuilder.append(" left join connect_status d on d.complete_value = a.status");
stringBuilder.append(" where a.campaign_id = :p_campaign_id");
stringBuilder.append(" and a.in_campaign_status = 1");
stringBuilder.append(" and a.status in (select connect_status from connect_status_list)");
stringBuilder.append(" order by connectTime desc, customerName");
stringBuilder.append(" ),");
stringBuilder.append(" final_data as (");
stringBuilder.append(" select a.*, rownum row_ from data a");
stringBuilder.append(" )");
stringBuilder.append(" select * from final_data");
stringBuilder.append(" where row_ >= ((:p_page_number - 1) * :p_page_size + 1)");
stringBuilder.append(" and row_ < (:p_page_number * :p_page_size + 1)");
params.put("p_company_site_id", dto.getCompanySiteId());
params.put("p_campaign_id", dto.getCampaignId());
params.put("p_list_connect_status", dto.getConnectStatus());
params.put("p_page_size", dto.getPageSize().toString());
params.put("p_page_number", dto.getPage().toString());
list = namedParameterJdbcTemplate.query(stringBuilder.toString(), params, BeanPropertyRowMapper.newInstance(CustomerCustomDTO.class));
resultDTO.setListData(list);
resultDTO.setTotalRow(list.size());
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception e) {
logger.error(e.getMessage(), e);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO reallocationCustomer(CampaignRequestDTO dto) {
ResultDTO resultDTO = new ResultDTO();
try {
List<CustomerCustomDTO> list = dto.getCustomerCustomDTOList();
for (CustomerCustomDTO customerCustomDTO: list) {
CampaignCustomer campaignCustomer = campaignCustomerRepository.findCampaignCustomerByCampaignCustomerId(customerCustomDTO.getCampaignCustomerId());
campaignCustomer.setStatus((short) 0);
campaignCustomer.setCallStatus(null);
campaignCustomer.setRedistribute((short) 1);
}
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception e) {
logger.error(e.getMessage(), e);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getListFieldsNotShow(CampaignRequestDTO dto) {
ResultDTO resultDTO = new ResultDTO();
Map<String, String> params = new HashMap<>();
List<FieldsToShowDTO> list = new ArrayList<>();
StringBuilder stringBuilder = new StringBuilder();
try {
// String sql = SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_MNG, "get-list-fields-not-show");
stringBuilder.append(" with column_name_temp as (");
stringBuilder.append(" select column_name columnName, 1 isFix from user_tab_columns, dual");
stringBuilder.append(" where table_name = 'CUSTOMER'");
stringBuilder.append(" )");
stringBuilder.append(" select * from column_name_temp");
stringBuilder.append(" where columnName not in (select column_name from campaign_customerlist_column)");
stringBuilder.append(" union all");
stringBuilder.append(" select title columnName, 0 isFix ");
stringBuilder.append(" from customize_fields, dual");
stringBuilder.append(" where function_code = 'CUSTOMER'");
stringBuilder.append(" and site_id = :p_company_site_id");
stringBuilder.append(" and customize_field_id not in (select customize_field_id");
stringBuilder.append(" from campaign_customerlist_column");
stringBuilder.append(" where campaign_customerlist_column.campaign_id = :p_campaign_id)");
params.put("p_company_site_id", dto.getCompanySiteId());
params.put("p_campaign_id", dto.getCampaignId());
list = namedParameterJdbcTemplate.query(stringBuilder.toString(), params, BeanPropertyRowMapper.newInstance(FieldsToShowDTO.class));
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
resultDTO.setListData(list);
} catch (Exception e) {
logger.error(e.getMessage(), e);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getListFieldsToShow(CampaignRequestDTO dto) {
ResultDTO resultDTO = new ResultDTO();
Map<String, String> params = new HashMap<>();
List<FieldsToShowDTO> list = new ArrayList<>();
StringBuilder sqlBuilder = new StringBuilder();
try {
// String sql = SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_MNG, "get-list-fields-to-show");
sqlBuilder.append(" select to_char(column_name) columnName, 1 isFix");
sqlBuilder.append(" from campaign_customerlist_column, dual");
sqlBuilder.append(" where campaign_id = :p_campaign_id");
sqlBuilder.append(" union all");
sqlBuilder.append(" select customize_field_title columnName, 0 isFix");
sqlBuilder.append(" from campaign_customerlist_column");
sqlBuilder.append(" where campaign_id = :p_campaign_id");
params.put("p_campaign_id", dto.getCampaignId());
list = namedParameterJdbcTemplate.query(sqlBuilder.toString(), params, BeanPropertyRowMapper.newInstance(FieldsToShowDTO.class));
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
resultDTO.setListData(list);
} catch (Exception e) {
logger.error(e.getMessage(), e);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
}
package com.viettel.campaign.repository.ccms_full.impl;
/**
* @author anhvd_itsol
*/
public class ScenarioAnswerRepositoryImpl {
}
package com.viettel.campaign.repository.ccms_full.impl;
import com.viettel.campaign.repository.ccms_full.ScenarioQuestionRepositoryCustom;
import org.springframework.stereotype.Repository;
/**
* @author anhvd_itsol
*/
@Repository
public class ScenarioQuestionRepositoryImpl implements ScenarioQuestionRepositoryCustom {
}
package com.viettel.campaign.repository.ccms_full.impl;
import com.viettel.campaign.repository.ccms_full.ScenarioRepositoryCustom;
import org.springframework.stereotype.Repository;
/**
* @author anhvd_itsol
*/
@Repository
public class ScenarioRepositoryImpl implements ScenarioRepositoryCustom {
}
package com.viettel.campaign.repository.ccms_full.impl;
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;
import java.util.Date;
import java.util.List;
public class TicketRepositoryImpl implements TicketRepositoryCustom {
@Autowired
@PersistenceContext( unitName= DataSourceQualify.JPA_UNIT_NAME_CCMS_FULL)
EntityManager entityManager;
@Override
public List<TicketDTO> getHistory(String customerId, Pageable pageable) {
List<TicketDTO> lst = new ArrayList<>();
String expression = new StringBuilder()
.append(" SELECT T.TICKET_ID, T.CREATE_DATE, T.SUBJECT, TCS.STATUS_NAME, T.RESOLVE_DATE ")
.append(" FROM TICKET T ")
.append(" INNER JOIN TICKET_CAT_STATUS TCS ON T.TICKET_STATUS = TCS.STATUS_ID ")
.append(" WHERE 1 = 1 ")
.append(" AND T.CUSTOMER_ID = :pCustomerId ")
.toString();
try {
Query query = entityManager.createNativeQuery(expression);
query.setParameter("pCustomerId", customerId);
if (pageable != null) {
query.setFirstResult(pageable.getPageNumber() * pageable.getPageSize());
query.setMaxResults(pageable.getPageSize());
}
List<Object[]> data = query.getResultList();
for (Object[] obj : data) {
TicketDTO item = new TicketDTO();
item.setTicketId(((BigDecimal) obj[0]).longValueExact());
item.setCreateDate((Date) obj[1]);
item.setSubject((String) obj[2]);
item.setStatusName((String) obj[3]);
item.setResolveDate((Date) obj[4]);
lst.add(item);
}
return lst;
} catch (Exception e) {
e.printStackTrace();
}
return lst;
}
}
package com.viettel.campaign.repository.ccms_full.impl;
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;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.UserActionLogDTO;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
/**
* @author anhvd_itsol
*/
@Repository
@Transactional
public class UserActionLogRepositoryImpl implements UserActionLogRepositoryCustom {
private static final Logger logger = LogManager.getLogger(CampaignRepositoryImpl.class);
@Override
public ResultDTO insertToUserActionLog(UserActionLogDTO userActionLogDTO) {
logger.info("Start search campaign::");
ResultDTO result = new ResultDTO();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
try{
// StringBuilder sqlStr = new StringBuilder();
// sqlStr.append(SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_MNG, "insert-to-user-action-log"));
StringBuilder sb = new StringBuilder();
sb.append("INSERT INTO \"CCMS_FULL\".\"USER_ACTION_LOG\" (");
sb.append(" AGENT_ID,");
sb.append(" COMPANY_SITE_ID,");
sb.append(" SESSION_ID,");
sb.append(" START_TIME,");
sb.append(" END_TIME,");
sb.append(" ACTION_TYPE,");
sb.append(" DESCRIPTION,");
sb.append(" OBJECT_ID)");
sb.append(" VALUES (");
sb.append(" :par_agentId,");
sb.append(" :par_companySiteId,");
sb.append(" :par_sessionId,");
sb.append(" :par_startTime,");
sb.append(" null,");
sb.append(" :par_actionType,");
sb.append(" null,");
sb.append(" :par_objectId)");
SQLQuery query = session.createSQLQuery(sb.toString());
query.setParameter("par_agentId", userActionLogDTO.getAgentId() == null ? "" : userActionLogDTO.getAgentId());
query.setParameter("par_companySiteId", userActionLogDTO.getCompanySiteId());
query.setParameter("par_sessionId", userActionLogDTO.getSessionId());
query.setParameter("par_startTime", userActionLogDTO.getStartTime());
query.setParameter("par_actionType", userActionLogDTO.getActionType());
query.setParameter("par_objectId", userActionLogDTO.getObjectId());
query.executeUpdate();
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;
import com.viettel.campaign.model.ApParam;
import com.viettel.campaign.repository.ApParamRepositoryCustom;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.util.List;
@Repository
public class AppParamRepositoryImpl implements ApParamRepositoryCustom {
@Autowired
EntityManager entityManager;
public AppParamRepositoryImpl() {
}
}
package com.viettel.campaign.repository.impl;
import com.viettel.campaign.dto.request_dto.CampaignRequestDTO;
import com.viettel.campaign.repository.CampaignRepositoryCustom;
import com.viettel.campaign.utils.*;
import com.viettel.campaign.web.dto.CampaignDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.transform.Transformers;
import org.hibernate.type.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.*;
import org.springframework.stereotype.Repository;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Repository
public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
@Autowired
EntityManager entityManager;
@Override
public List<CampaignDTO> searchCampaignExecute(String agentId, Pageable pageable) {
List<CampaignDTO> lst = new ArrayList<>();
String expression = new StringBuilder()
.append(" SELECT C.CAMPAIGN_ID, C.CAMPAIGN_NAME, C.CONTENT, C.START_TIME, C.END_TIME, C.STATUS ")
//.append(" SELECT CAMPAIGN_COMPLETE_CODE_ID AS CAMPAIGN_ID, COMPLETE_NAME AS CAMPAIGN_NAME, DESCRIPTION AS CONTENT, UPDATE_BY AS START_TIME, UPDATE_BY AS END_TIME, STATUS ")
.append(" FROM CAMPAIGN C ")
.append(" INNER JOIN CAMPAIGN_AGENT CA ON C.CAMPAIGN_ID = CA.CAMPAIGN_ID ")
.append(" WHERE 1 = 1 ")
//.append(" AND CA.AGENT_ID = :pAgentId ")
.append(" AND C.STATUS IN (2,3) ")
.toString();
try {
Query query = entityManager.createNativeQuery(expression);
//query.setParameter("pAgentId", agentId);
if (pageable != null) {
query.setFirstResult(pageable.getPageNumber() * pageable.getPageSize());
query.setMaxResults(pageable.getPageSize());
}
List<Object[]> data = query.getResultList();
for (Object[] obj : data) {
CampaignDTO item = new CampaignDTO();
item.setCampaignId((BigDecimal) obj[0]);
item.setCampaignName((String) obj[1]);
item.setContent((String) obj[2]);
item.setStartTime((Date) obj[3]);
item.setEndTime((Date) obj[4]);
item.setStatus((BigDecimal) obj[5]);
lst.add(item);
}
return lst;
} catch (Exception e) {
e.printStackTrace();
}
return lst;
}
@Override
public ResultDTO search(CampaignRequestDTO requestDto) {
ResultDTO result = new ResultDTO();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
try {
StringBuilder sqlStr = new StringBuilder();
sqlStr.append(SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_MNG, "search-campaign-by-params"));
if (!DataUtil.isNullOrEmpty(requestDto.getCampaignCode())) {
sqlStr.append(" AND UPPER(CAMPAIGN_CODE) LIKE :p_code");
}
if (!DataUtil.isNullOrEmpty(requestDto.getCampaignName())) {
sqlStr.append(" AND UPPER(CAMPAIGN_NAME) LIKE :p_name");
}
if (requestDto.getStatus() != null) {
sqlStr.append(" AND STATUS = :p_status");
}
if (requestDto.getFromDateFr() != null && DateTimeUtil.isValid(requestDto.getFromDateFr().getTime())) {
sqlStr.append(" AND START_TIME >= :p_frDateFr");
}
if (requestDto.getFromDateTo() != null && DateTimeUtil.isValid(requestDto.getFromDateTo().getTime())) {
sqlStr.append(" AND START_TIME <= :p_frDateTo");
}
if (requestDto.getToDateFr() != null && DateTimeUtil.isValid(requestDto.getToDateFr().getTime())) {
sqlStr.append(" AND END_TIME >= :p_toDateFr");
}
if (requestDto.getToDateTo() != null && DateTimeUtil.isValid(requestDto.getToDateTo().getTime())) {
sqlStr.append(" AND END_TIME <= :p_toDateTo");
}
if (!DataUtil.isNullOrZero(requestDto.getNumOfCusFr())) {
// sqlStr.append(" AND ")
}
if (!DataUtil.isNullOrZero(requestDto.getNumOfCusTo())) {
}
if (requestDto.getType() != null) {
sqlStr.append(" AND CAMPAIGN_TYPE = :p_type");
}
if (requestDto.getChanel() != null) {
sqlStr.append(" AND CHANEL = :p_chanel");
}
// Query query = entityManager.createNativeQuery(sqlStr.toString(), Campaign.class);
SQLQuery query = session.createSQLQuery(sqlStr.toString());
if (!DataUtil.isNullOrEmpty(requestDto.getCampaignCode())) {
query.setParameter("p_code", "%" +
requestDto.getCampaignCode().toUpperCase()
.replace("\\", "\\\\")
.replaceAll("%", "\\\\%")
.replaceAll("_", "\\\\_")
+ "%");
}
if (!DataUtil.isNullOrEmpty(requestDto.getCampaignName())) {
query.setParameter("p_name", "%" +
requestDto.getCampaignName().toUpperCase()
.replace("\\", "\\\\")
.replaceAll("%", "\\\\%")
.replaceAll("_", "\\\\_")
+ "%");
}
if (requestDto.getStatus() != null) {
query.setParameter("p_status", requestDto.getStatus());
}
if (requestDto.getFromDateFr() != null && DateTimeUtil.isValid(requestDto.getFromDateFr().getTime())) {
query.setParameter("p_frDateFr", requestDto.getFromDateFr());
}
if (requestDto.getFromDateTo() != null && DateTimeUtil.isValid(requestDto.getFromDateTo().getTime())) {
query.setParameter("p_frDateTo", requestDto.getFromDateTo());
}
if (requestDto.getToDateFr() != null && DateTimeUtil.isValid(requestDto.getToDateFr().getTime())) {
query.setParameter("p_toDateFr", requestDto.getToDateFr());
}
if (requestDto.getToDateTo() != null && DateTimeUtil.isValid(requestDto.getToDateTo().getTime())) {
query.setParameter("p_toDateTo", requestDto.getToDateTo());
}
if (requestDto.getType() != null) {
query.setParameter("p_type", requestDto.getType());
}
if (requestDto.getChanel() != null) {
query.setParameter("p_chanel", requestDto.getChanel());
}
query.addScalar("campaignId", new LongType());
query.addScalar("campaignCode", new StringType());
query.addScalar("campaignName", new StringType());
query.addScalar("campaignType", new StringType());
query.addScalar("chanel", new ShortType());
query.addScalar("startTime", new DateType());
query.addScalar("endTime", new DateType());
query.addScalar("customerNumber", new LongType());
query.addScalar("status", new ShortType());
query.setResultTransformer(Transformers.aliasToBean(CampaignDTO.class));
int count = 0;
List<CampaignDTO> list = query.list();
if (list.size() > 0) {
count = query.list().size();
}
Pageable pageable = 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);
result.setErrorCode(Constants.ApiErrorCode.SUCCESS);
result.setDescription(Constants.ApiErrorDesc.SUCCESS);
session.close();
return result;
} catch (Exception ex) {
session.close();
}
result.setErrorCode(Constants.ApiErrorCode.ERROR);
result.setDescription(Constants.ApiErrorDesc.ERROR);
return result;
}
private Pageable buildPageable(CampaignRequestDTO obj) {
Pageable pageable = null;
String[] sorts = obj.getSort().split(",");
Sort sort = new Sort(Sort.Direction.fromString(sorts[1]), sorts[0]);
pageable = new PageRequest(obj.getPage(), obj.getPageSize(), sort);
return pageable;
}
// private CampaignDTO mappingData(Object[] object) {
// CampaignDTO dto = new CampaignDTO();
//
// }
}
package com.viettel.campaign.service;
import com.viettel.campaign.web.dto.CampaignAgentDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.request_dto.CampaignAgentRequestDTO;
import java.util.List;
public interface AgentsService {
ResultDTO getAgentsByAgentId(String agentId);
ResultDTO getAllAgentByCompanySiteId(int page, int pageSize, Long companySiteId);
ResultDTO getAllAgentSelectedByCompanySiteId(int page, int pageSize, Long companySiteId, Long campaignId);
ResultDTO createCampaignAgent(CampaignAgentDTO campaignAgentDTO);
ResultDTO deleteCampaignAgentById(List<Long> campaignAgentId);
ResultDTO searchCampaignAgentByName(int page, int pageSize, Long companySiteId, String userName, String fullName);
ResultDTO createMultipleCampaignAgent(CampaignAgentRequestDTO campaignAgentRequestDTO);
}
......@@ -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;
......@@ -13,4 +13,10 @@ public interface ApParamService {
List<ApParam> getParamByName(int page, int pageSize, String sort, String parName);
ResultDTO createApParam(ApParamDTO apParamDTO);
ResultDTO findParamByParType(String parType);
List<ApParam>findAllParam();
}
package com.viettel.campaign.service;
import com.viettel.campaign.web.dto.CampaignCfgDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.request_dto.CampaignCfgRequestDTO;
import java.util.Map;
public interface CampaignCfgService {
ResultDTO listAllCompleteCode(int page, int pageSize, String sort,Long companySiteId);
Map listCompleteCodeByName(int page, int pageSize, String sort, String name);
ResultDTO createCompleteCode(CampaignCfgDTO completeCodeDTO);
ResultDTO updateCompleteCode(CampaignCfgDTO completeCodeDTO);
ResultDTO deleteCompleteCode(CampaignCfgRequestDTO completeCodeDTO);
ResultDTO deleteList(CampaignCfgRequestDTO campaignCfgRequestDTO);
ResultDTO deleteById(Long id);
ResultDTO findMaxValueCampaignCompleteCode(CampaignCfgDTO completeCodeDTO);
ResultDTO getListStatus(String completeValue, Short completeType, Long companySiteId);
ResultDTO getListStatusWithoutType(String completeValue, Short completeType, Long companySiteId);
ResultDTO editCampaignCompleteCode (Long campaignCompleteCodeId);
}
package com.viettel.campaign.service;
import com.viettel.campaign.web.dto.CampaignCompleteCodeDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import java.util.Map;
public interface CampaignCompleteCodeService {
Map listAllCompleteCode(int page, int pageSize, String sort);
Map listCompleteCodeByName(int page, int pageSize, String sort, String name);
ResultDTO createCompleteCode(CampaignCompleteCodeDTO completeCodeDTO);
ResultDTO updateCompleteCode(CampaignCompleteCodeDTO completeCodeDTO);
ResultDTO deleteCompleteCode(CampaignCompleteCodeDTO completeCodeDTO);
}
package com.viettel.campaign.service;
import com.viettel.campaign.web.dto.CampaignCustomerDTO;
import com.viettel.campaign.web.dto.ContactCustResultDTO;
import com.viettel.campaign.web.dto.ReceiveCustLogDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.request_dto.CampaignRequestDTO;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public interface CampaignExecuteService {
//<editor-fold: hungtt>
ResultDTO getComboBoxStatus(String companySiteId, String completeType);
ResultDTO getComboCampaignType(String companySiteId);
ResultDTO searchInteractiveResult(CampaignRequestDTO dto);
XSSFWorkbook exportInteractiveResult(CampaignRequestDTO dto);
List<ContactCustResultDTO> getContactCustById(CampaignRequestDTO dto);
//</editor-fold>
ResultDTO searchCampaignExecute(CampaignRequestDTO requestDto, String xAuthToken);
ResultDTO getExecuteCampaign(CampaignRequestDTO requestDto);
ResultDTO getCall(CampaignCustomerDTO dto);
ResultDTO getCallLog(ReceiveCustLogDTO dto);
ResultDTO getAgentLogout(CampaignRequestDTO dto);
ResultDTO callCustomer(ContactCustResultDTO dto);
}
package com.viettel.campaign.service;
import com.viettel.campaign.service.impl.CampaignLogServiceImpl;
/**
* @author anhvd_itsol
*/
public interface CampaignLogService {
}
package com.viettel.campaign.service;
import com.viettel.campaign.dto.request_dto.CampaignRequestDTO;
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.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 {
Map searchCampaignExecute(int page, int pageSize, String sort, String agentId);
ResultDTO search(CampaignRequestDTO requestDto);
ResultDTO findByCampaignCode(CampaignRequestDTO requestDTO);
List<Campaign> findAllCondition(Long companySiteId);
List<Campaign> findCampaignByCompanySiteIdAndStartTimeIsLessThanEqualAndStatusIn(Long siteId, Date startTime, List<Long> status);
List<Campaign> findCampaignByCompanySiteIdAndEndTimeIsLessThanEqualAndStatusIn(Long siteId, Date startTime, List<Long> status);
Campaign updateProcess(Campaign c);
ResultDTO findByCampaignId(Long campaignId);
ResultDTO addNewCampaign(CampaignDTO campaignDTO);
Map countRecallCustomer(Long companySiteId, Long agentId);
ResultDTO findCampaignById(Long campaignId);
ResultDTO changeCampaignStatus(CampaignDTO dto);
ResultDTO checkAllowStatusToPrepare(Long campaignId);
XSSFWorkbook exportCampaigns(CampaignRequestDTO dto);
List<TimeRangeDialMode> getCampaignTimeRangeMode (Long campaignId, Long companySiteId);
List<TimeZoneDialMode> getCampaignTimeZoneMode (Long campaignId, Long companySiteId);
ResultDTO renewCampaign(CampaignDTO campaignDTO);
ResultDTO updateCampaign(CampaignDTO dto);
//<editor-fold: hungtt>
ResultDTO findCustomerListReallocation(CampaignRequestDTO dto);
ResultDTO reallocationCustomer(CampaignRequestDTO dto);
ResultDTO getListFieldsNotShow(CampaignRequestDTO dto);
ResultDTO getListFieldsToShow(CampaignRequestDTO dto);
//</editor-fold>
}
package com.viettel.campaign.service;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
/**
* @author hanv_itsol
* @project service-campaign
*/
@Service
public class Consumer {
@KafkaListener(topics = "TestTopic", groupId = "1001")
public void consume(String message){
System.out.println("Consumed Message: " + message);
}
}
//package com.viettel.campaign.service;
//
//import org.springframework.kafka.annotation.KafkaListener;
//import org.springframework.stereotype.Component;
//import org.springframework.stereotype.Service;
//
///**
// * @author hanv_itsol
// * @project service-campaign
// */
//@Service
//public class Consumer {
// @KafkaListener(topics = "TestTopic", groupId = "1001")
// public void consume(String message){
// System.out.println("Consumed Message: " + message);
// }
//}
package com.viettel.campaign.service;
import com.viettel.campaign.web.dto.CustomerDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.model.ccms_full.Customer;
import com.viettel.campaign.model.ccms_full.CustomerList;
import com.viettel.campaign.web.dto.*;
import com.viettel.campaign.web.dto.request_dto.CustomerRequestDTO;
import com.viettel.campaign.web.dto.request_dto.SearchCustomerRequestDTO;
import java.util.Map;
import java.io.File;
import java.util.Date;
import java.util.List;
import java.util.List;
public interface CustomerService {
Map listAllCustomer(int page, int pageSize, String sort);
ResultDTO getAllCustomer(int page, int pageSize, String sort, long customerListId, long companySiteId);
ResultDTO getCustomerId(Long customerId);
Map listCustByName(int page, int pageSize, String sort, String name);
ResultDTO searchAllCustomer(int page, int pageSize, String sort, long customerListId, long companySiteId, String name, String mobileNumber, String email);
ResultDTO createCustomer(CustomerDTO customerDTO);
ResultDTO deleteCustomer(CustomerRequestDTO customerRequestDTO);
ResultDTO deleteIds(CustomerRequestDTO customerRequestDTO);
ResultDTO getCustomerDetailById(Long companySiteId, Long customerListId, Long customerId);
// ------------ customer list ------------ //
ResultDTO getAllCustomerList(int page, int pageSize, String sort, Long companySiteId);
ResultDTO createCustomerList(CustomerListDTO customerListDTO, String userName);
ResultDTO updateCustomerList(CustomerListDTO customerListDTO);
ResultDTO deleteCustomerList(CustomerListDTO customerListDTO);
ResultDTO deleteCustomerListIds(CustomerRequestDTO customerRequestDTO);
ResultDTO searchCustomerList(SearchCustomerRequestDTO searchCustomerRequestDTO);
CustomerList getLatestCreated(Long companySiteId);
// ------------ customer contact ------------ //
ResultDTO getCustomerContact(CustomerContactDTO customer);
// danh sach khach hang cua chien dich //
List<CustomerListDTO> getCustomerListInfo(CampaignCustomerDTO campaignCustomerDTO);
List<CustomerDTO> getIndividualCustomerInfo(CampaignCustomerDTO campaignCustomerDTO);
// ------------ customer ------------ //
ResultDTO getCustomerRecall(Long campaignId, Long customerId);
List<Customer> findAllByCondition(Long siteId, Date endTime);
Customer update(Customer c);
List<DynamicExcelHeaderDTO> getDynamicHeader(Long companySiteId);
void buildTemplate(Long companySiteId);
List<CustomizeFieldDTO> getCustomizeField(Long customerId);
}
package com.viettel.campaign.service;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.CustomerTime;
import com.viettel.campaign.repository.ccms_full.CustomerTimeRepository;
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 CustomerTimeService {
@Autowired
private CustomerTimeRepository customerTimeRepository;
@Transactional(DataSourceQualify.CCMS_FULL)
public CustomerTime update(CustomerTime customerTime){
return customerTimeRepository.save(customerTime);
}
@Transactional(DataSourceQualify.CCMS_FULL)
public List<CustomerTime> findByCustomerId(Long customerId){
return customerTimeRepository.findByCustomerId(customerId);
}
}
package com.viettel.campaign.service;
import com.viettel.campaign.config.DataSourceQualify;
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(DataSourceQualify.CCMS_FULL)
public List<ProcessConfig> findAll(){
return processConfigRepository.findAll();
}
@Transactional(DataSourceQualify.CCMS_FULL)
public List<ProcessConfig> findAllByCode(String configCode){
return processConfigRepository.findAllByConfigCode(configCode);
}
@Transactional(DataSourceQualify.CCMS_FULL)
public void update(ProcessConfig pc){
processConfigRepository.save(pc);
}
}
package com.viettel.campaign.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service;
/**
* @author hanv_itsol
* @project service-campaign
*/
@Service
public class Producer {
private static final String TOPIC = "TestTopic";
private static final String TOPIC2 = "TestTopic2";
@Autowired
private KafkaTemplate<String, String> kafkaTemplate;
public void sendMessage(String message){
this.kafkaTemplate.send(TOPIC, "key1", message);
}
public void sendMessageTopic2(String message){
this.kafkaTemplate.send(TOPIC2, "key2", message);
}
}
//package com.viettel.campaign.service;
//
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.kafka.core.KafkaTemplate;
//import org.springframework.stereotype.Service;
//
///**
// * @author hanv_itsol
// * @project service-campaign
// */
//
//@Service
//public class Producer {
//
// private static final String TOPIC = "TestTopic";
// private static final String TOPIC2 = "TestTopic2";
//
//
// @Autowired
// private KafkaTemplate<String, String> kafkaTemplate;
//
// public void sendMessage(String message){
// this.kafkaTemplate.send(TOPIC, "key1", message);
// }
//
// public void sendMessageTopic2(String message){
// this.kafkaTemplate.send(TOPIC2, "key2", message);
// }
//
//}
package com.viettel.campaign.service;
import org.springframework.kafka.annotation.KafkaListener;
import java.util.concurrent.CountDownLatch;
/**
* @author hanv_itsol
* @project campaign
*/
public class Receiver {
private CountDownLatch latch = new CountDownLatch(1);
@KafkaListener(topics = "hanv")
public void receive(String payload) {
latch.countDown();
}
}
//package com.viettel.campaign.service;
//
//import org.springframework.kafka.annotation.KafkaListener;
//
//import java.util.concurrent.CountDownLatch;
//
///**
// * @author hanv_itsol
// * @project campaign
// */
//public class Receiver {
//
// private CountDownLatch latch = new CountDownLatch(1);
//
// @KafkaListener(topics = "hanv")
// public void receive(String payload) {
// latch.countDown();
// }
//}
package com.viettel.campaign.service;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.ScenarioAnswerDTO;
/**
* @author anhvd_itsol
*/
public interface ScenarioAnswerService {
ResultDTO findByScenarioQuestionCompany(Long scenarioQuestionId, Long companySiteId);
Long getMaxAnswerOrderId(Long scenarioQuestionId, Long companySiteId);
ResultDTO delete(ScenarioAnswerDTO scenarioAnswerDTO);
}
package com.viettel.campaign.service;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.ScenarioQuestionDTO;
/**
* @author anhvd_itsol
*/
public interface ScenarioQuestionService {
ResultDTO findByScenarioIdAndCampaignIdAndCompanySiteId(Long scenarioId, Long campaignId, Long companySiteId);
ResultDTO add(ScenarioQuestionDTO scenarioQuestionDTO);
Long getMaxOrderId(Long scenarioId, Long campaignId, Long companySiteId);
Integer countDuplicateQuestionCode(String code, Long scenarioId, Long campaignId, Long companySiteId);
ResultDTO delete(ScenarioQuestionDTO scenarioQuestionDTO);
}
package com.viettel.campaign.service;
import com.viettel.campaign.model.ccms_full.Scenario;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.ScenarioAnswerDTO;
import com.viettel.campaign.web.dto.ScenarioDTO;
import com.viettel.campaign.web.dto.ScenarioQuestionDTO;
import java.util.List;
/**
* @author anhvd_itsol
*/
public interface ScenarioService {
Scenario findScenarioByCampaignIdAndCompanySiteId(Long campaignId, Long companySiteId);
ResultDTO update(ScenarioDTO scenario);
ResultDTO sortQuestionAndAnswer(ScenarioDTO scenarioDTO);
}
package com.viettel.campaign.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
/**
* @author hanv_itsol
* @project campaign
*/
public class Sender {
@Autowired
private KafkaTemplate<String, String> simpleKafkaTemplate;
public void send(String topic, String payload) {
simpleKafkaTemplate.send(topic, payload);
}
}
//package com.viettel.campaign.service;
//
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.kafka.core.KafkaTemplate;
//
///**
// * @author hanv_itsol
// * @project campaign
// */
//public class Sender {
//
// @Autowired
// private KafkaTemplate<String, String> simpleKafkaTemplate;
//
// public void send(String topic, String payload) {
// simpleKafkaTemplate.send(topic, payload);
// }
//}
package com.viettel.campaign.service;
import java.util.Map;
public interface TicketService {
Map getHistory(int page, int pageSize, String sort, String customerId);
}
package com.viettel.campaign.service;
/**
* @author anhvd_itsol
*/
public interface UserActionLogService {
}
package com.viettel.campaign.service.impl;
import com.viettel.campaign.mapper.CampaignAgentMapper;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.acd_full.Agents;
import com.viettel.campaign.model.ccms_full.CampaignAgent;
import com.viettel.campaign.repository.acd_full.AgentsRepository;
import com.viettel.campaign.repository.ccms_full.CampaignAgentRepository;
import com.viettel.campaign.service.AgentsService;
import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.utils.DataUtil;
import com.viettel.campaign.utils.HibernateUtil;
import com.viettel.campaign.utils.SQLBuilder;
import com.viettel.campaign.web.dto.CampaignAgentDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.VSAUsersDTO;
import com.viettel.campaign.web.dto.request_dto.CampaignAgentRequestDTO;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.transform.Transformers;
import org.hibernate.type.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.*;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
@Service
public class AgentsServiceImpl implements AgentsService {
@Autowired
AgentsRepository agentsRepository;
@Autowired
CampaignAgentRepository campaignAgentRepository;
@Override
public ResultDTO getAgentsByAgentId(String agentId) {
ResultDTO result = new ResultDTO();
try {
Agents data = agentsRepository.findByAgentId(agentId);
if (data != null) {
result.setErrorCode(Constants.ApiErrorCode.SUCCESS);
result.setDescription("agents data");
result.setData(data);
} else {
result.setErrorCode(Constants.ApiErrorCode.ERROR);
result.setDescription("agents data null");
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
@Override
@Transactional(DataSourceQualify.ACD_FULL)
public ResultDTO getAllAgentByCompanySiteId(int page, int pageSize, Long companySiteId) {
ResultDTO resultDTO = new ResultDTO();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
if (DataUtil.isNullOrZero(companySiteId)) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
return resultDTO;
}
try {
// StringBuilder sb = new StringBuilder();
// sb.append(SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_MNG, "campaign-agents-by-params"));
StringBuilder sb = new StringBuilder();
sb.append("SELECT");
sb.append(" a.USER_ID userId,");
sb.append(" a.USER_NAME userName,");
sb.append(" a.STATUS status,");
sb.append(" a.FULL_NAME fullName,");
sb.append(" a.COMPANY_SITE_ID companySiteId,");
sb.append(" b.FILTER_TYPE filterType,");
sb.append(" b.CAMPAIGN_AGENT_ID campaignAgentId");
sb.append(" FROM VSA_USERS a");
sb.append(" LEFT JOIN CAMPAIGN_AGENT b on a.USER_ID = b.AGENT_ID");
sb.append(" WHERE 1 = 1");
sb.append(" AND a.COMPANY_SITE_ID = :p_company_site_id");
sb.append(" AND b.AGENT_ID IS NULL");
sb.append(" ORDER BY a.FULL_NAME ASC");
SQLQuery query = session.createSQLQuery(sb.toString());
query.setParameter("p_company_site_id", companySiteId);
query.addScalar("userId", new LongType());
query.addScalar("userName", new StringType());
query.addScalar("status", new ShortType());
query.addScalar("fullName", new StringType());
query.addScalar("companySiteId", new LongType());
query.addScalar("filterType", new ShortType());
query.addScalar("campaignAgentId", new LongType());
query.setResultTransformer(Transformers.aliasToBean(VSAUsersDTO.class));
int count = 0;
List<VSAUsersDTO> dtoList = query.list();
if (dtoList.size() > 0) {
count = query.list().size();
}
Pageable pageable = PageRequest.of(page, pageSize);
if (pageable != null) {
query.setFirstResult(pageable.getPageNumber() * pageable.getPageSize());
query.setMaxResults(pageable.getPageSize());
}
List<VSAUsersDTO> data = query.list();
Page<VSAUsersDTO> dataPage = new PageImpl<>(data, pageable, count);
resultDTO.setData(dataPage);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception e) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
} finally {
session.close();
}
return resultDTO;
}
@Override
public ResultDTO getAllAgentSelectedByCompanySiteId(int page, int pageSize, Long companySiteId, Long campaignId) {
ResultDTO resultDTO = new ResultDTO();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
if (DataUtil.isNullOrZero(companySiteId)) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
return resultDTO;
}
try {
// StringBuilder sb = new StringBuilder();
// sb.append(SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_MNG, "campaign-agents-by-params"));
StringBuilder sb = new StringBuilder();
sb.append("SELECT");
sb.append(" a.USER_ID userId,");
sb.append(" a.USER_NAME userName,");
sb.append(" a.STATUS status,");
sb.append(" a.FULL_NAME fullName,");
sb.append(" a.COMPANY_SITE_ID companySiteId,");
sb.append(" b.FILTER_TYPE filterType,");
sb.append(" b.CAMPAIGN_AGENT_ID campaignAgentId");
sb.append(" FROM VSA_USERS a");
sb.append(" RIGHT JOIN CAMPAIGN_AGENT b on a.USER_ID = b.AGENT_ID");
sb.append(" WHERE 1 = 1");
sb.append(" AND b.COMPANY_SITE_ID = :p_company_site_id");
sb.append(" AND b.CAMPAIGN_ID = :p_campaign_id");
sb.append(" ORDER BY a.FULL_NAME ASC");
SQLQuery query = session.createSQLQuery(sb.toString());
query.setParameter("p_company_site_id", companySiteId);
query.setParameter("p_campaign_id", campaignId);
query.addScalar("userId", new LongType());
query.addScalar("userName", new StringType());
query.addScalar("status", new ShortType());
query.addScalar("fullName", new StringType());
query.addScalar("companySiteId", new LongType());
query.addScalar("filterType", new ShortType());
query.addScalar("campaignAgentId", new LongType());
query.setResultTransformer(Transformers.aliasToBean(VSAUsersDTO.class));
int count = 0;
List<VSAUsersDTO> dtoList = query.list();
if (dtoList.size() > 0) {
count = query.list().size();
}
Pageable pageable = PageRequest.of(page, pageSize);
if (pageable != null) {
query.setFirstResult(pageable.getPageNumber() * pageable.getPageSize());
query.setMaxResults(pageable.getPageSize());
}
List<VSAUsersDTO> data = query.list();
Page<VSAUsersDTO> dataPage = new PageImpl<>(data, pageable, count);
resultDTO.setData(dataPage);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception e) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
} finally {
session.close();
}
return resultDTO;
}
@Override
public ResultDTO createCampaignAgent(CampaignAgentDTO campaignAgentDTO) {
ResultDTO resultDTO = new ResultDTO();
CampaignAgentMapper campaignAgentMapper = new CampaignAgentMapper();
CampaignAgent campaignAgent = new CampaignAgent();
try {
if (campaignAgentDTO != null) {
// insert
campaignAgent = campaignAgentMapper.toPersistenceBean(campaignAgentDTO);
campaignAgentRepository.save(campaignAgent);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} else {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
} catch (Exception e) {
e.printStackTrace();
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO deleteCampaignAgentById(List<Long> campaignAgentId) {
ResultDTO resultDTO = new ResultDTO();
try {
if (campaignAgentId.size() > 0) {
// delete
campaignAgentRepository.deleteCampaignAgent(campaignAgentId);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} else {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
} catch (Exception e) {
e.printStackTrace();
}
return resultDTO;
}
@Override
public ResultDTO searchCampaignAgentByName(int page, int pageSize, Long companySiteId, String userName, String fullName) {
ResultDTO resultDTO = new ResultDTO();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
if (DataUtil.isNullOrZero(companySiteId)) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
return resultDTO;
}
try {
// StringBuilder sqlStrBuilder = new StringBuilder();
// sqlStrBuilder.append(SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_MNG, "campaign-agents-by-params"));
StringBuilder sqlStrBuilder = new StringBuilder();
sqlStrBuilder.append("SELECT");
sqlStrBuilder.append(" a.USER_ID userId,");
sqlStrBuilder.append(" a.USER_NAME userName,");
sqlStrBuilder.append(" a.STATUS status,");
sqlStrBuilder.append(" a.FULL_NAME fullName,");
sqlStrBuilder.append(" a.COMPANY_SITE_ID companySiteId,");
sqlStrBuilder.append(" b.FILTER_TYPE filterType,");
sqlStrBuilder.append(" b.CAMPAIGN_AGENT_ID campaignAgentId");
sqlStrBuilder.append(" FROM VSA_USERS a");
sqlStrBuilder.append(" LEFT JOIN CAMPAIGN_AGENT b on a.USER_ID = b.AGENT_ID");
sqlStrBuilder.append(" JOIN USER_ROLE c on a.USER_ID = c.USER_ID");
sqlStrBuilder.append(" JOIN ROLE d on c.ROLE_ID = d.ROLE_ID");
sqlStrBuilder.append(" WHERE 1 = 1");
sqlStrBuilder.append(" AND a.COMPANY_SITE_ID = :p_company_site_id");
if (!DataUtil.isNullOrEmpty(userName)) {
sqlStrBuilder.append(" AND UPPER(a.USER_NAME) LIKE UPPER(:p_user_name)");
}
if (!DataUtil.isNullOrEmpty(fullName)) {
sqlStrBuilder.append(" AND UPPER(a.FULL_NAME) LIKE UPPER(:p_full_name)");
}
sqlStrBuilder.append(" AND d.ROLE_CODE IN ('AGENT', 'SUPERVISOR')");
sqlStrBuilder.append(" AND a.STATUS = 1");
sqlStrBuilder.append(" AND b.CAMPAIGN_AGENT_ID IS NULL");
sqlStrBuilder.append(" ORDER BY a.FULL_NAME ASC");
SQLQuery query = session.createSQLQuery(sqlStrBuilder.toString());
query.setParameter("p_company_site_id", companySiteId);
if (!DataUtil.isNullOrEmpty(userName)) {
query.setParameter("p_user_name", "%" +
userName
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
}
if (!DataUtil.isNullOrEmpty(fullName)) {
query.setParameter("p_full_name", "%" +
fullName
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
}
query.addScalar("userId", new LongType());
query.addScalar("userName", new StringType());
query.addScalar("status", new ShortType());
query.addScalar("fullName", new StringType());
query.addScalar("companySiteId", new LongType());
query.addScalar("filterType", new ShortType());
query.addScalar("campaignAgentId", new LongType());
query.setResultTransformer(Transformers.aliasToBean(VSAUsersDTO.class));
int count = 0;
List<VSAUsersDTO> dtoList = query.list();
if (dtoList.size() > 0) {
count = query.list().size();
}
Pageable pageable = PageRequest.of(page, pageSize);
if (pageable != null) {
query.setFirstResult(pageable.getPageNumber() * pageable.getPageSize());
query.setMaxResults(pageable.getPageSize());
}
List<VSAUsersDTO> data = query.list();
Page<VSAUsersDTO> dataPage = new PageImpl<>(data, pageable, count);
resultDTO.setData(dataPage);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception e) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
} finally {
session.close();
}
return resultDTO;
}
@Override
public ResultDTO createMultipleCampaignAgent(CampaignAgentRequestDTO campaignAgentRequestDTO) {
ResultDTO resultDTO = new ResultDTO();
// CampaignAgentMapper campaignAgentsMapper = new CampaignAgentMapper();
List<CampaignAgent> campaignAgentList = new ArrayList<>();
try {
if (campaignAgentRequestDTO != null) {
for (int i = 0; i < campaignAgentRequestDTO.getAgentId().size(); i++) {
CampaignAgent campaignAgent = new CampaignAgent();
campaignAgent.setAgentId(campaignAgentRequestDTO.getAgentId().get(i));
campaignAgent.setStatus(0);
campaignAgent.setReSchedule(0L);
campaignAgent.setFilterType((short) 0);
campaignAgent.setCompanySiteId(campaignAgentRequestDTO.getCompanySiteId());
campaignAgent.setCampaignId(campaignAgentRequestDTO.getCampaignId());
campaignAgentList.add(campaignAgent);
}
// insert
// campaignAgent = campaignAgentsMapper.toPersistenceBean();
campaignAgentRepository.saveAll(campaignAgentList);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} else {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
} catch (Exception e) {
e.printStackTrace();
}
return resultDTO;
}
}
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,18 +16,26 @@ 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 {
@Autowired
ApParamRepository apParamRepository;
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<>();
......@@ -34,7 +44,9 @@ public class ApParamServiceImpl implements ApParamService {
return lst;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO createApParam(ApParamDTO apParamDTO) {
ResultDTO result = new ResultDTO();
ApParamMapper apParamMapper = new ApParamMapper();
......@@ -53,9 +65,35 @@ public class ApParamServiceImpl implements ApParamService {
result.setData(apparam);
}
} catch (Exception e) {
e.printStackTrace();
// e.printStackTrace();
logger.error(e.getMessage(), e);
}
return null;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO findParamByParType(String parType) {
ResultDTO resultDTO = new ResultDTO();
try {
List<ApParam> lst = apParamRepository.findParamByParType(parType);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
resultDTO.setData(lst);
logger.info("find params by type: " + resultDTO.getErrorCode());
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
@Override
public List<ApParam> findAllParam() {
return apParamRepository.findAllParam("CAMPAIGN_TYPE") ;
}
}
package com.viettel.campaign.service.impl;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.mapper.CampaignCompleteCodeMapper;
import com.viettel.campaign.model.ccms_full.CampaignCfg;
import com.viettel.campaign.repository.ccms_full.CampaignCfgRepository;
import com.viettel.campaign.service.CampaignCfgService;
import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.utils.DataUtil;
import com.viettel.campaign.utils.HibernateUtil;
import com.viettel.campaign.utils.SQLBuilder;
import com.viettel.campaign.web.dto.CampaignCfgDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.request_dto.CampaignCfgRequestDTO;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.transform.Transformers;
import org.hibernate.type.DateType;
import org.hibernate.type.LongType;
import org.hibernate.type.ShortType;
import org.hibernate.type.StringType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.*;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
@Service
public class CampaignCfgServiceImpl implements CampaignCfgService {
protected Logger logger = LoggerFactory.getLogger(CampaignCfgServiceImpl.class);
@Autowired
CampaignCfgRepository completeCodeRepository;
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO listAllCompleteCode(int page, int pageSize, String sort,Long companySiteId) {
ResultDTO resultDTO = new ResultDTO();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
if (DataUtil.isNullOrZero(companySiteId)) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
return resultDTO;
}
try {
// StringBuilder sqlStrBuilder = new StringBuilder();
// sqlStrBuilder.append(SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_STATUS_MNG, "findAll-CampaignCompleteCode"));
StringBuilder sb = new StringBuilder();
sb.append("SELECT");
sb.append(" CAMPAIGN_COMPLETE_CODE_ID campaignCompleteCodeId,");
sb.append(" IS_RECALL isRecall ,");
sb.append(" CAMPAIGN_ID campaignId,");
sb.append(" COMPLETE_VALUE completeValue,");
sb.append(" COMPLETE_NAME completeName,");
sb.append(" COMPLETE_TYPE completeType,");
sb.append(" CAMPAIGN_TYPE campaignType,");
sb.append(" DESCRIPTION description,");
sb.append(" STATUS status,");
sb.append(" COMPANY_SITE_ID companySiteId,");
sb.append(" UPDATE_BY updateBy ,");
sb.append(" UPDATE_AT updateAt,");
sb.append(" CREATE_BY createBy,");
sb.append(" CREATE_AT createAt,");
sb.append(" IS_FINISH isFinish,");
sb.append(" IS_LOCK isLock,");
sb.append(" DURATION_LOCK durationLock,");
sb.append(" CHANEL chanel");
sb.append(" FROM CAMPAIGN_COMPLETE_CODE");
sb.append(" where 1 = 1");
sb.append(" AND STATUS = 1");
sb.append(" and COMPANY_SITE_ID = :p_company_site_id");
SQLQuery query = session.createSQLQuery(sb.toString());
query.setParameter("p_company_site_id", companySiteId);
query.addScalar("campaignCompleteCodeId", new LongType());
query.addScalar("campaignId", new LongType());
query.addScalar("completeName", new StringType());
query.addScalar("completeValue", new StringType());
query.addScalar("description", new StringType());
query.addScalar("status", new ShortType());
query.addScalar("completeType", new ShortType());
query.addScalar("isRecall", new ShortType());
query.addScalar("updateAt", new DateType());
query.addScalar("updateBy", new StringType());
query.addScalar("createBy", new StringType());
query.addScalar("createAt", new DateType());
query.addScalar("campaignType", new StringType());
query.addScalar("isFinish", new ShortType());
query.addScalar("isLock", new ShortType());
query.addScalar("companySiteId", new LongType());
query.addScalar("durationLock", new LongType());
query.addScalar("chanel", new LongType());
query.setResultTransformer(Transformers.aliasToBean(CampaignCfgDTO.class));
int count = 0;
List<CampaignCfgDTO> dtoList = query.list();
if (dtoList.size() > 0) {
count = query.list().size();
}
Pageable pageable = PageRequest.of(page, pageSize, Sort.by(Sort.Order.desc(sort)));
if (pageable != null) {
query.setFirstResult(pageable.getPageNumber() * pageable.getPageSize());
query.setMaxResults(pageable.getPageSize());
}
List<CampaignCfgDTO>data = query.list();
Page<CampaignCfgDTO> dataPage = new PageImpl<>(data, pageable, count);
resultDTO.setData(dataPage);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception e) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
logger.error(e.getMessage(), e);
} finally {
session.close();
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public Map listCompleteCodeByName(int page, int pageSize, String sort, String name) {
Map result = new HashMap();
List<CampaignCfg> lst = new ArrayList<>();
List<CampaignCfg> count = new ArrayList<>();
lst = completeCodeRepository.findByCompleteNameContains(name, PageRequest.of(page, pageSize, Sort.by(sort)));
count = completeCodeRepository.findByCompleteNameContains(name, null);
result.put("totalItem", count.size());
result.put("customers", lst);
return result;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO createCompleteCode(CampaignCfgDTO completeCodeDTO) {
ResultDTO resultDTO = new ResultDTO();
CampaignCompleteCodeMapper compCodeMapper = new CampaignCompleteCodeMapper();
Date today = new Date();
CampaignCfg compCode = new CampaignCfg();
try {
if (completeCodeDTO != null) {
// insert
compCode = compCodeMapper.toPersistenceBean(completeCodeDTO);
compCode = completeCodeRepository.save(compCode);
resultDTO.setErrorCode("0");
resultDTO.setDescription("Complete Code: " + compCode.getCampaignCompleteCodeId() + " created!");
} else {
resultDTO.setErrorCode("-2");
resultDTO.setDescription("CompleteCodeDTO null");
}
} catch (Exception e) {
e.printStackTrace();
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO updateCompleteCode(CampaignCfgDTO completeCodeDTO) {
ResultDTO resultDTO = new ResultDTO();
CampaignCompleteCodeMapper compCodeMapper = new CampaignCompleteCodeMapper();
Date today = new Date();
CampaignCfg compCode = new CampaignCfg();
try {
if (completeCodeDTO != null) {
// update
compCode = compCodeMapper.toPersistenceBean(completeCodeDTO);
compCode = completeCodeRepository.save(compCode);
resultDTO.setErrorCode("0");
resultDTO.setDescription("Complete Code: " + compCode.getCampaignCompleteCodeId() + " updated!");
} else {
resultDTO.setErrorCode("-2");
resultDTO.setDescription("CompleteCodeDTO null");
}
} catch (Exception e) {
e.printStackTrace();
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO deleteCompleteCode(CampaignCfgRequestDTO completeCodeDTO) {
ResultDTO resultDTO = new ResultDTO();
try {
// delete
if (completeCodeDTO != null) {
completeCodeRepository.deleteCampaignCompleteCodeBy(completeCodeDTO.getCampaignCompleteCodeID(), completeCodeDTO.getCompanySiteId());
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} else {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
} catch (Exception e) {
e.printStackTrace();
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO deleteList(CampaignCfgRequestDTO completeCodeDTO) {
ResultDTO resultDTO = new ResultDTO();
try {
if (completeCodeDTO != null) {
completeCodeRepository.deletedList(completeCodeDTO.getListId(), completeCodeDTO.getCompanySiteId());
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} else {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
} catch (Exception e) {
e.printStackTrace();
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO deleteById(Long id) {
ResultDTO result = new ResultDTO();
try {
completeCodeRepository.deleteById(id);
result.setErrorCode(Constants.Status.ACTIVE_STR);
result.setDescription(Constants.Status.ACTIVE_STR);
} catch (Exception e) {
result.setErrorCode("-1");
return result;
}
result.setErrorCode("0");
return result;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO findMaxValueCampaignCompleteCode(CampaignCfgDTO completeCodeDTO) {
ResultDTO resultDTO = new ResultDTO();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
if (DataUtil.isNullOrZero(completeCodeDTO.getCompanySiteId())) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
return resultDTO;
}
try {
// StringBuilder sqlStrBuilder = new StringBuilder();
// sqlStrBuilder.append(SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_STATUS_MNG, "get-max-value-completevalue"));
StringBuilder sb = new StringBuilder();
sb.append("SELECT max(to_number(COMPLETE_VALUE)) completeValue, COMPANY_SITE_ID ");
sb.append(" companySiteId from CAMPAIGN_COMPLETE_CODE where COMPANY_SITE_ID = :p_site_id ");
sb.append(" GROUP BY COMPANY_SITE_ID");
SQLQuery query = session.createSQLQuery(sb.toString());
query.setParameter("p_site_id", completeCodeDTO.getCompanySiteId());
query.addScalar("completeValue", new StringType());
query.addScalar("companySiteId", new LongType());
query.setResultTransformer(Transformers.aliasToBean(CampaignCfgDTO.class));
List<CampaignCfgDTO> data = query.list();
if (data != null && data.size() > 0) {
int tmp = 5;
String completeValue = data.get(0).getCompleteValue();
if (completeValue != null && !completeValue.trim().equals("")) {
tmp = Integer.parseInt(completeValue) + 1;
}
resultDTO.setData(tmp);
} else {
resultDTO.setData(null);
}
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception e) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
logger.error(e.getMessage(), e);
} finally {
session.close();
return resultDTO;
}
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getListStatus(String completeValue, Short completeType, Long companySiteId) {
ResultDTO resultDTO = new ResultDTO();
try {
List<CampaignCfg> list = completeCodeRepository.getCustomerStatus(completeValue, completeType, companySiteId);
resultDTO.setListData(list);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception e) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(e.getMessage());
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getListStatusWithoutType(String completeValue, Short completeType, Long companySiteId) {
ResultDTO resultDTO = new ResultDTO();
try {
List<CampaignCfg> list = completeCodeRepository.getCustomerStatusWithoutValue(completeValue, completeType, companySiteId);
resultDTO.setListData(list);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception e) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(e.getMessage());
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO editCampaignCompleteCode(Long campaignCompleteCodeId) {
ResultDTO resultDTO = new ResultDTO();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
if (DataUtil.isNullOrZero(campaignCompleteCodeId)) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
return resultDTO;
}
try {
// StringBuilder sqlStrBuilder = new StringBuilder();
// sqlStrBuilder.append(SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_STATUS_MNG,"findCampaignCodeById"));
StringBuilder sb = new StringBuilder();
sb.append("SELECT CAMPAIGN_COMPLETE_CODE_ID campaignCompleteCodeId,");
sb.append(" IS_RECALL isRecall ,");
sb.append(" CAMPAIGN_ID campaignId,");
sb.append(" COMPLETE_VALUE completeValue,");
sb.append(" COMPLETE_NAME completeName,");
sb.append(" COMPLETE_TYPE completeType,");
sb.append(" CAMPAIGN_TYPE campaignType,");
sb.append(" DESCRIPTION description,");
sb.append(" STATUS status,");
sb.append(" COMPANY_SITE_ID companySiteId,");
sb.append(" UPDATE_BY updateBy ,");
sb.append(" UPDATE_AT updateAt,");
sb.append(" CREATE_BY createBy,");
sb.append(" CREATE_AT createAt,");
sb.append(" IS_FINISH isFinish,");
sb.append(" IS_LOCK isLock,");
sb.append(" DURATION_LOCK durationLock,");
sb.append(" CHANEL chanel");
sb.append(" from CAMPAIGN_COMPLETE_CODE WHERE ");
sb.append(" CAMPAIGN_COMPLETE_CODE_ID=:p_campaignComleteCode");
SQLQuery query = session.createSQLQuery(sb.toString());
query.setParameter("p_campaignComleteCode",campaignCompleteCodeId);
query.addScalar("campaignCompleteCodeId", new LongType());
query.addScalar("campaignId", new LongType());
query.addScalar("completeName", new StringType());
query.addScalar("completeValue", new StringType());
query.addScalar("description", new StringType());
query.addScalar("status", new ShortType());
query.addScalar("completeType", new ShortType());
query.addScalar("isRecall", new ShortType());
query.addScalar("updateAt", new DateType());
query.addScalar("updateBy", new StringType());
query.addScalar("createBy", new StringType());
query.addScalar("createAt", new DateType());
query.addScalar("campaignType", new StringType());
query.addScalar("isFinish", new ShortType());
query.addScalar("isLock", new ShortType());
query.addScalar("companySiteId", new LongType());
query.addScalar("durationLock", new LongType());
query.addScalar("chanel", new LongType());
query.setResultTransformer(Transformers.aliasToBean(CampaignCfgDTO.class));
List<CampaignCfgDTO>data = query.list();
resultDTO.setData(data);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception e) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
logger.error(e.getMessage(), e);
} finally {
session.close();
}
return resultDTO;
}
}
package com.viettel.campaign.service.impl;
import com.viettel.campaign.service.CampaignCompleteCodeService;
import com.viettel.campaign.web.dto.CampaignCompleteCodeDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.mapper.CampaignCompleteCodeMapper;
import com.viettel.campaign.model.CampaignCompleteCode;
import com.viettel.campaign.repository.CampaignCompleteCodeRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import java.util.*;
@Service
public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeService {
@Autowired
CampaignCompleteCodeRepository completeCodeRepository;
@Override
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)));
result.put("totalItems", pg.getTotalElements());
result.put("data", pg.iterator());
return result;
}
@Override
public Map listCompleteCodeByName(int page, int pageSize, String sort, String name) {
Map result = new HashMap();
List<CampaignCompleteCode> lst = new ArrayList<>();
List<CampaignCompleteCode> count = new ArrayList<>();
lst = completeCodeRepository.findByCompleteNameContains(name, PageRequest.of(page, pageSize, Sort.by(sort)));
count = completeCodeRepository.findByCompleteNameContains(name, null);
result.put("totalItem", count.size());
result.put("customers", lst);
return result;
}
@Override
public ResultDTO createCompleteCode(CampaignCompleteCodeDTO completeCodeDTO) {
ResultDTO resultDTO = new ResultDTO();
CampaignCompleteCodeMapper compCodeMapper = new CampaignCompleteCodeMapper();
Date today = new Date();
CampaignCompleteCode compCode = new CampaignCompleteCode();
try {
if (completeCodeDTO != null) {
// insert
compCode = compCodeMapper.toPersistenceBean(completeCodeDTO);
compCode = completeCodeRepository.save(compCode);
resultDTO.setErrorCode("0");
resultDTO.setDescription("Complete Code: " + compCode.getCampaignCompleteCodeId() + " created!");
} else {
resultDTO.setErrorCode("-2");
resultDTO.setDescription("CompleteCodeDTO null");
}
} catch (Exception e) {
e.printStackTrace();
}
return resultDTO;
}
@Override
public ResultDTO updateCompleteCode(CampaignCompleteCodeDTO completeCodeDTO) {
ResultDTO resultDTO = new ResultDTO();
CampaignCompleteCodeMapper compCodeMapper = new CampaignCompleteCodeMapper();
Date today = new Date();
CampaignCompleteCode compCode = new CampaignCompleteCode();
try {
if (completeCodeDTO != null) {
// update
compCode = compCodeMapper.toPersistenceBean(completeCodeDTO);
compCode = completeCodeRepository.save(compCode);
resultDTO.setErrorCode("0");
resultDTO.setDescription("Complete Code: " + compCode.getCampaignCompleteCodeId() + " updated!");
} else {
resultDTO.setErrorCode("-2");
resultDTO.setDescription("CompleteCodeDTO null");
}
} catch (Exception e) {
e.printStackTrace();
}
return resultDTO;
}
@Override
public ResultDTO deleteCompleteCode(CampaignCompleteCodeDTO completeCodeDTO) {
ResultDTO resultDTO = new ResultDTO();
CampaignCompleteCodeMapper compCodeMapper = new CampaignCompleteCodeMapper();
Date today = new Date();
CampaignCompleteCode compCode = new CampaignCompleteCode();
try {
if (completeCodeDTO != null) {
// delete
completeCodeRepository.deleteById(completeCodeDTO.getCampaignCompleteCodeId());
resultDTO.setErrorCode("0");
resultDTO.setDescription("Complete Code: " + compCode.getCampaignCompleteCodeId() + " deleted!");
} else {
resultDTO.setErrorCode("-2");
resultDTO.setDescription("CompleteCodeDTO null");
}
} catch (Exception e) {
e.printStackTrace();
}
return resultDTO;
}
}
package com.viettel.campaign.service.impl;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.acd_full.Agents;
import com.viettel.campaign.model.ccms_full.CampaignCustomer;
import com.viettel.campaign.model.ccms_full.ContactCustResult;
import com.viettel.campaign.repository.acd_full.AgentsRepository;
import com.viettel.campaign.repository.ccms_full.*;
import com.viettel.campaign.service.CampaignExecuteService;
import com.viettel.campaign.utils.BundleUtils;
import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.utils.RedisUtil;
import com.viettel.campaign.utils.SQLBuilder;
import com.viettel.campaign.web.dto.*;
import com.viettel.campaign.web.dto.request_dto.CampaignRequestDTO;
import com.viettel.econtact.filter.UserSession;
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.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.SimpleDateFormat;
import java.util.*;
@Service
public class CampaignExecuteServiceImp implements CampaignExecuteService {
private static final Logger logger = LoggerFactory.getLogger(CampaignExecuteServiceImp.class);
private SimpleDateFormat formatter = new SimpleDateFormat(Constants.DATE_FORMAT.FOMART_DATE_TYPE_1);
@Autowired
ModelMapper modelMapper;
@Autowired
ContactCustResultRepository ccResultRepository;
@Autowired
ReceiveCustLogRepository custLogRepository;
@Autowired
CampaignRepositoryCustom campaignRepositoryCustom;
@Autowired
CampaignExecuteRepository campaignExecuteRepository;
@Autowired
CampaignCustomerRepository campaignCustomerRepository;
@Autowired
AgentsRepository agentsRepository;
@Autowired
CampaignAgentRepository campaignAgentRepository;
@Autowired
TimeZoneDialModeRepository zoneDialModeRepository;
@Autowired
TimeRangeDialModeRepository rangeDialModeRepository;
//<editor-fold: hungtt>
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getComboBoxStatus(String companySiteId, String completeType) {
ResultDTO resultDTO = new ResultDTO();
try {
List<ApParamDTO> lst = campaignExecuteRepository.getComboBoxStatus(companySiteId, completeType);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
resultDTO.setData(lst);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getComboCampaignType(String companySiteId) {
ResultDTO resultDTO = new ResultDTO();
try {
List<ApParamDTO> lst = campaignExecuteRepository.getComboCampaignType(companySiteId);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
resultDTO.setData(lst);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO searchInteractiveResult(CampaignRequestDTO dto) {
ResultDTO resultDTO = new ResultDTO();
try {
resultDTO = campaignExecuteRepository.getInteractiveResult(dto);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public XSSFWorkbook exportInteractiveResult(CampaignRequestDTO dto) {
Locale locale = Locale.forLanguageTag("vi");
List<ContactCustResultDTO> list = campaignExecuteRepository.getExcelInteractiveResult(dto);
XSSFWorkbook workbook = new XSSFWorkbook();
Sheet sheet;
// create font style
Font defaultFont = workbook.createFont();
defaultFont.setFontHeightInPoints((short) 13);
defaultFont.setFontName("Times New Roman");
defaultFont.setColor(IndexedColors.BLACK.getIndex());
Font titleFont = workbook.createFont();
titleFont.setFontHeightInPoints((short) 18);
titleFont.setFontName("Times New Roman");
titleFont.setColor(IndexedColors.BLACK.getIndex());
titleFont.setBold(true);
Font headerFont = workbook.createFont();
headerFont.setFontHeightInPoints((short) 13);
headerFont.setFontName("Times New Roman");
headerFont.setColor(IndexedColors.BLACK.getIndex());
headerFont.setBold(true);
CellStyle styleTitle = workbook.createCellStyle();
styleTitle.setFont(titleFont);
styleTitle.setAlignment(HorizontalAlignment.CENTER);
CellStyle styleRowHeader = workbook.createCellStyle();
styleRowHeader.setFont(headerFont);
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());
CellStyle styleRow = workbook.createCellStyle();
styleRow.setFont(defaultFont);
// list header
List<String> headerList = new ArrayList<>();
headerList.add(BundleUtils.getLangString("stt", locale));
headerList.add(BundleUtils.getLangString("campaign.execute.interactive.campaignCode", locale));
headerList.add(BundleUtils.getLangString("campaign.execute.interactive.campaignName", locale));
headerList.add(BundleUtils.getLangString("campaign.execute.interactive.agentId", locale));
headerList.add(BundleUtils.getLangString("campaign.execute.interactive.phoneNumber", locale));
headerList.add(BundleUtils.getLangString("campaign.execute.interactive.customerId", locale));
headerList.add(BundleUtils.getLangString("campaign.execute.interactive.customerName", locale));
headerList.add(BundleUtils.getLangString("campaign.execute.interactive.createTime", locale));
headerList.add(BundleUtils.getLangString("campaign.execute.interactive.contactStatus", locale));
headerList.add(BundleUtils.getLangString("campaign.execute.interactive.surveyStatus", locale));
headerList.add(BundleUtils.getLangString("campaign.execute.interactive.status", locale));
headerList.add(BundleUtils.getLangString("campaign.execute.interactive.recordStatus", locale));
//
String sheetName = BundleUtils.getLangString("detail", locale);
sheet = workbook.createSheet(sheetName);
// Title
String title = BundleUtils.getLangString("campaign.execute.interactive.title", locale);
int rowTitleStart = 3;
Row rowTitle = sheet.createRow(rowTitleStart);
rowTitle.setHeight((short) 800);
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 < headerList.size(); i++) {
writeCellContent(rowHeader, styleRowHeader, i, headerList.get(i));
}
// Content
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;
}
return workbook;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public List<ContactCustResultDTO> getContactCustById(CampaignRequestDTO dto) {
return campaignExecuteRepository.getContactCustById(dto);
}
private 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);
}
//</editor-fold: hungtt>
@Override
public ResultDTO searchCampaignExecute(CampaignRequestDTO requestDto, String xAuthToken) {
ResultDTO result = new ResultDTO();
Map data = new HashMap();
UserSession userSession = (UserSession) RedisUtil.getInstance().get(xAuthToken);
Integer count = campaignExecuteRepository.searchCampaignExecute(requestDto, null).size();
if (count > 0) {
result.setErrorCode(Constants.ApiErrorCode.SUCCESS);
result.setDescription(Constants.ApiErrorDesc.SUCCESS);
result.setTotalRow(count);
result.setListData(campaignExecuteRepository.searchCampaignExecute(requestDto, SQLBuilder.buildPageable(requestDto)));
Agents agents = agentsRepository.findByAgentId(requestDto.getAgentId());
//TimeZoneDialMode zoneDialMode = zoneDialModeRepository.findDialModeAtCurrent(Long.parseLong(requestDto.getCampaignId()), Long.parseLong(requestDto.getCompanySiteId()));
//TimeRangeDialMode rangeDialMode = rangeDialModeRepository.findDialModeAtCurrent(Long.parseLong(requestDto.getCampaignId()), Long.parseLong(requestDto.getCompanySiteId()));
if (agents.getUserStatus() != null && agents.getCampaignSystemStatus() != null) {
if (agents.getUserStatus().equalsIgnoreCase("CALLOUT") && agents.getCampaignSystemStatus().equalsIgnoreCase("AVAILABLE")) {
//if (zoneDialMode != null && zoneDialMode.getDialMode().equals(0) || rangeDialMode != null && rangeDialMode.getDialMode().equals(0))
data.put("dialModeManual", "1");
}
}
result.setData(data);
} else {
result.setErrorCode(Constants.ApiErrorCode.ERROR);
result.setDescription(Constants.ApiErrorDesc.ERROR);
}
return result;
}
@Override
public ResultDTO getExecuteCampaign(CampaignRequestDTO requestDto) {
ResultDTO result = new ResultDTO();
try {
Agents agents = agentsRepository.findByAgentId(requestDto.getAgentId());
//TimeZoneDialMode zoneDialMode = zoneDialModeRepository.findDialModeAtCurrent(Long.parseLong(requestDto.getCampaignId()), Long.parseLong(requestDto.getCompanySiteId()));
//TimeRangeDialMode rangeDialMode = rangeDialModeRepository.findDialModeAtCurrent(Long.parseLong(requestDto.getCampaignId()), Long.parseLong(requestDto.getCompanySiteId()));
if (agents.getUserStatus().equalsIgnoreCase("CALLOUT") && agents.getCampaignSystemStatus().equalsIgnoreCase("LOGOUT")) {
//if (zoneDialMode != null && zoneDialMode.getDialMode().equals(0) || rangeDialMode != null && rangeDialMode.getDialMode().equals(0))
// update acd_full.agents table
Agents a = new Agents();
a = agents;
a.setAgentId(requestDto.getAgentId());
a.setCampaignSystemStatus("AVAILABLE");
a.setCurrentCampaignId(Long.parseLong(requestDto.getCampaignId()));
agentsRepository.save(a);
// update ccms_full.campaign_agent table
campaignAgentRepository.updateCampaignAgentSetStatus(Long.parseLong(requestDto.getAgentId()), Long.parseLong(requestDto.getCampaignId()), 1);
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
@Override
public ResultDTO getCall(CampaignCustomerDTO dto) {
ResultDTO result = new ResultDTO();
//Agents agents = agentsRepository.findByAgentId(dto.getAgentId());
//TimeZoneDialMode zoneDialMode = zoneDialModeRepository.findDialModeAtCurrent(Long.parseLong(dto.getCampaignId()), Long.parseLong(dto.getCompanySiteId()));
//TimeRangeDialMode rangeDialMode = rangeDialModeRepository.findDialModeAtCurrent(Long.parseLong(dto.getCampaignId()), Long.parseLong(dto.getCompanySiteId()));
List<CampaignCustomerDTO> lst = new ArrayList<>();
StringBuilder sb = new StringBuilder();
sb.append("SELECT CC.CUSTOMER_ID AS customerId");
sb.append(" FROM CAMPAIGN_CUSTOMER CC");
sb.append(" LEFT JOIN CCMS_FULL.RECEIVE_CUST_LOG CL ON CC.CUSTOMER_ID = CL.CUSTOMER_ID");
sb.append(" WHERE CC.CAMPAIGN_ID = :campaignId");
sb.append(" AND CC.COMPANY_SITE_ID = :companySiteId");
sb.append(" AND CC.IN_CAMPAIGN_STATUS = 1");
sb.append(" AND CL.CUSTOMER_ID IS NULL");
sb.append(" AND CL.END_TIME IS NULL");
sb.append(" AND EXISTS(SELECT 1");
sb.append(" FROM CCMS_FULL.CAMPAIGN_COMPLETE_CODE CCC");
sb.append(" WHERE CC.STATUS = CCC.COMPLETE_VALUE");
sb.append(" AND STATUS = 1");
sb.append(" AND IS_RECALL = 1");
sb.append(" AND COMPLETE_TYPE = 2");
sb.append(" AND COMPANY_SITE_ID = :companySiteId)");
sb.append(" AND CC.RECALL_TIME <= SYSDATE");
sb.append(" AND CC.RECALL_TIME + NUMTODSINTERVAL(:dungSai, 'MINUTE') >= SYSDATE");
sb.append(" AND CC.AGENT_ID = :agentId");
StringBuilder sb2 = new StringBuilder();
sb2.append("SELECT CC.CUSTOMER_ID AS customerId");
sb2.append(" FROM CCMS_FULL.CAMPAIGN_CUSTOMER CC");
sb2.append(" LEFT JOIN CCMS_FULL.RECEIVE_CUST_LOG CL ON CC.CUSTOMER_ID = CL.CUSTOMER_ID");
sb2.append(" LEFT JOIN ACD_FULL.AGENTS AG ON CC.AGENT_ID = AG.AGENT_ID AND CC.CAMPAIGN_ID = AG.CURRENT_CAMPAIGN_ID");
sb2.append(" WHERE CC.CAMPAIGN_ID = :campaignId");
sb2.append(" AND CC.COMPANY_SITE_ID = :companySiteId");
sb2.append(" AND CC.IN_CAMPAIGN_STATUS = 1");
sb2.append(" AND CL.CUSTOMER_ID IS NULL");
sb2.append(" AND CL.END_TIME IS NULL");
sb2.append(" AND EXISTS(SELECT 1");
sb2.append(" FROM CCMS_FULL.CAMPAIGN_COMPLETE_CODE CCC");
sb2.append(" WHERE CC.STATUS = CCC.COMPLETE_VALUE");
sb2.append(" AND STATUS = 1");
sb2.append(" AND IS_RECALL = 1");
sb2.append(" AND COMPLETE_TYPE = 2");
sb2.append(" AND COMPANY_SITE_ID = :companySiteId)");
sb2.append(" AND CC.RECALL_TIME <= SYSDATE");
sb2.append(" AND CC.RECALL_TIME + NUMTODSINTERVAL(:dungSai, 'MINUTE') >= SYSDATE");
sb2.append(" AND (AG.CAMPAIGN_SYSTEM_STATUS IS NULL OR AG.CAMPAIGN_SYSTEM_STATUS <> 'AVAILABLE')");
StringBuilder sb3 = new StringBuilder();
sb3.append("SELECT CC.CUSTOMER_ID AS customerId");
sb3.append(" FROM CAMPAIGN_CUSTOMER CC");
sb3.append(" LEFT JOIN RECEIVE_CUST_LOG CL ON CC.CUSTOMER_ID = CL.CUSTOMER_ID");
sb3.append(" WHERE CC.CAMPAIGN_ID = :campaignId");
sb3.append(" AND CC.COMPANY_SITE_ID = :companySiteId");
sb3.append(" AND CC.IN_CAMPAIGN_STATUS = 1");
sb3.append(" AND CL.CUSTOMER_ID IS NULL");
sb3.append(" AND CL.END_TIME IS NULL");
sb3.append(" AND EXISTS(SELECT 1");
sb3.append(" FROM CCMS_FULL.CAMPAIGN_COMPLETE_CODE CCC");
sb3.append(" WHERE CC.STATUS = CCC.COMPLETE_VALUE");
sb3.append(" AND STATUS = 1");
sb3.append(" AND IS_RECALL = 1");
sb3.append(" AND COMPLETE_TYPE = 2");
sb3.append(" AND COMPANY_SITE_ID = :companySiteId)");
sb3.append(" AND CC.RECALL_TIME + NUMTODSINTERVAL(:dungSai, 'MINUTE') <= SYSDATE");
StringBuilder sb4 = new StringBuilder();
sb4.append("SELECT CC.CUSTOMER_ID AS customerId ");
sb4.append(" FROM CAMPAIGN_CUSTOMER CC");
sb4.append(" INNER JOIN CUSTOMER C ON CC.CUSTOMER_ID = C.CUSTOMER_ID");
sb4.append(" LEFT JOIN RECEIVE_CUST_LOG CL ON CC.CUSTOMER_ID = CL.CUSTOMER_ID");
sb4.append(" WHERE CC.CAMPAIGN_ID = :campaignId");
sb4.append(" AND CC.COMPANY_SITE_ID = :companySiteId");
sb4.append(" AND CC.IN_CAMPAIGN_STATUS = 1");
sb4.append(" AND CL.CUSTOMER_ID IS NULL");
sb4.append(" AND CL.END_TIME IS NULL");
sb4.append(" AND CC.STATUS = 0");
sb4.append(" AND C.STATUS = 1");
sb4.append(" AND C.CALL_ALLOWED = 1");
sb4.append(" AND C.IPCC_STATUS = 'active'");
StringBuilder sb5 = new StringBuilder();
sb5.append("SELECT CC.CUSTOMER_ID AS customerId");
sb5.append(" FROM CAMPAIGN_CUSTOMER CC");
sb5.append(" LEFT JOIN CCMS_FULL.RECEIVE_CUST_LOG CL ON CC.CUSTOMER_ID = CL.CUSTOMER_ID");
sb5.append(" WHERE CC.CAMPAIGN_ID = :campaignId");
sb5.append(" AND CC.COMPANY_SITE_ID = :companySiteId");
sb5.append(" AND CC.IN_CAMPAIGN_STATUS = 1");
sb5.append(" AND CL.CUSTOMER_ID IS NULL");
sb5.append(" AND CL.END_TIME IS NULL");
sb5.append(" AND EXISTS(SELECT 1");
sb5.append(" FROM CCMS_FULL.CAMPAIGN_COMPLETE_CODE CCC");
sb5.append(" WHERE CC.STATUS = CCC.COMPLETE_VALUE");
sb5.append(" AND STATUS = 1");
sb5.append(" AND IS_FINISH = 0");
sb5.append(" AND COMPLETE_TYPE = 1");
sb5.append(" AND COMPANY_SITE_ID = :companySiteId)");
sb5.append(" AND CC.RECALL_COUNT < C.MAX_RECALL");
sb5.append(" AND C.STATUS = 1");
sb5.append(" AND C.CALL_ALLOWED = 1");
sb5.append(" AND C.IPCC_STATUS = 'active'");
String getExecuteCus1Str = sb.toString();
String getExecuteCus2Str = sb2.toString();
String getExecuteCus3Str = sb3.toString();
String getExecuteCus4Str = sb4.toString();
String getExecuteCus5Str = sb5.toString();
// Khách hàng đến thời điểm hẹn gọi lại và là khách hàng mà chính NSD hẹn gọi lại
List<CampaignCustomerDTO> lst1 = campaignCustomerRepository.getDataCampaignCustomer(dto, getExecuteCus1Str);
if (lst1.size() > 0) {
lst = lst1;
} else {
// Khách hàng đến thời điểm hẹn gọi lại và không là khách hàng mà NSD dùng hẹn gọi lại nhưng TVV hẹn gọi lại không đăng nhập hoặc không thực hiện chiến dịch hiện tại
List<CampaignCustomerDTO> lst2 = campaignCustomerRepository.getDataCampaignCustomer(dto, getExecuteCus2Str);
if (lst2.size() > 0) {
lst = lst2;
} else {
// Khách hàng là khách hàng hẹn gọi lại nhưng thời gian hẹn gọi lại đã quá thời gian hẹn gọi lại + dung sai
List<CampaignCustomerDTO> lst3 = campaignCustomerRepository.getDataCampaignCustomer(dto, getExecuteCus3Str);
if (lst3.size() > 0) {
lst = lst3;
} else {
// Khách hàng mới
List<CampaignCustomerDTO> lst4 = campaignCustomerRepository.getDataCampaignCustomer(dto, getExecuteCus4Str);
if (lst4.size() > 0) {
lst = lst4;
} else {
// Khách hàng không liên lạc được nhưng chưa phải là cuộc gọi kết thúc và có số lần đã gọi < Số lần gọi tối đa được cấu hình và khoảng cách giữa 2 lần gọi < thời gian tương tác giữa 2 lần gọi được cấu hình
List<CampaignCustomerDTO> lst5 = campaignCustomerRepository.getDataCampaignCustomer(dto, getExecuteCus5Str);
lst = lst5;
}
}
}
}
if (lst != null) {
result.setErrorCode(Constants.ApiErrorCode.SUCCESS);
result.setDescription(Constants.ApiErrorDesc.SUCCESS);
result.setListData(lst);
//result.setData(data);
} else {
result.setErrorCode(Constants.ApiErrorCode.ERROR);
result.setDescription(Constants.ApiErrorDesc.ERROR);
}
return result;
}
@Override
public ResultDTO getCallLog(ReceiveCustLogDTO dto) {
ResultDTO result = new ResultDTO();
List<CampaignCustomer> lst = null;//campaignCustomerRepository.getCustomerRecallDate(dto.getCampaignId(), dto.getAgentId(), dto.getCompanySiteId(), );
if (lst != null) {
result.setErrorCode(Constants.ApiErrorCode.SUCCESS);
result.setDescription(Constants.ApiErrorDesc.SUCCESS);
//result.setTotalRow(count);
//result.setListData(campaignExecuteRepository.searchCampaignExecute(requestDto, SQLBuilder.buildPageable(requestDto)));
//result.setData(data);
} else {
result.setErrorCode(Constants.ApiErrorCode.ERROR);
result.setDescription(Constants.ApiErrorDesc.ERROR);
}
return result;
}
@Override
public ResultDTO getAgentLogout(CampaignRequestDTO dto) {
ResultDTO result = new ResultDTO();
try {
agentsRepository.updateAgentLogoutFromCampaign(Long.parseLong(dto.getAgentId()), "LOGOUT");
campaignAgentRepository.updateCampaignAgentSetStatus(Long.parseLong(dto.getAgentId()), Long.parseLong(dto.getCampaignId()), 0);
result.setErrorCode(Constants.ApiErrorCode.SUCCESS);
result.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception e) {
e.printStackTrace();
result.setErrorCode(Constants.ApiErrorCode.ERROR);
result.setDescription(Constants.ApiErrorDesc.ERROR);
}
return result;
}
@Override
public ResultDTO callCustomer(ContactCustResultDTO dto) {
ResultDTO result = new ResultDTO();
try {
ContactCustResult ccr = ccResultRepository.save(modelMapper.map(dto, ContactCustResult.class));
result.setErrorCode(Constants.ApiErrorCode.SUCCESS);
result.setDescription(Constants.ApiErrorDesc.SUCCESS);
result.setData(ccr);
} catch (Exception e) {
e.printStackTrace();
result.setErrorCode(Constants.ApiErrorCode.ERROR);
result.setDescription(Constants.ApiErrorDesc.ERROR);
}
return result;
}
}
package com.viettel.campaign.service.impl;
import com.viettel.campaign.service.CampaignLogService;
import org.springframework.stereotype.Service;
/**
* @author anhvd_itsol
*/
@Service
public class CampaignLogServiceImpl implements CampaignLogService {
}
package com.viettel.campaign.service.impl;
import com.viettel.campaign.repository.CampaignRepository;
import com.viettel.campaign.web.dto.CampaignDTO;
import com.viettel.campaign.dto.request_dto.CampaignRequestDTO;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.*;
//import com.viettel.campaign.model.UserActionLog;
import com.viettel.campaign.repository.ccms_full.*;
//import com.viettel.campaign.repository.UserActionLogRepository;
import com.viettel.campaign.service.CampaignService;
import com.viettel.campaign.web.dto.ResultDTO;
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 oracle.jdbc.driver.Const;
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.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
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(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;
@Autowired
TimeRangeDialModeRepository timeRangeDialModeRepository;
@Autowired
UserActionLogRepositoryCustom userActionLogRepository;
@Autowired
ModelMapper modelMapper;
@Autowired
ApParamRepository apParamRepository;
@Autowired
ScenarioRepository scenarioRepository;
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO search(CampaignRequestDTO requestDto) {
return campaignRepositoryCustom.search(requestDto);
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO findByCampaignCode(CampaignRequestDTO requestDTO) {
return campaignRepositoryCustom.findByCampaignCode(requestDTO);
}
@Override
public Map searchCampaignExecute(int page, int pageSize, String sort, String agentId) {
@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.setDescription(Constants.ApiErrorDesc.SUCCESS);
result.setData(campaign);
} else {
result.setErrorCode(Constants.ApiErrorCode.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();
Campaign campaign = modelMapper.map(campaignDTO, Campaign.class);
Long campaignId;
List<TimeZoneDialModeDTO> timeZoneDialModes = new ArrayList<>();
List<TimeRangeDialModeDTO> timeRangeDialModes = new ArrayList<>();
List<TimeRangeDialMode> lstTimeRangeModeToInsert = new ArrayList<>();
List<TimeZoneDialMode> lstTimeZoneModeToInser = new ArrayList<>();
try {
String campaignCode = generateCampaignCode(campaignDTO.getCampaignType(), campaignDTO.getChanel());
campaign.setCampaignCode(campaignCode);
Campaign campaignResult = campaignRepository.save(campaign);
campaignId = campaign.getCampaignId();
//insert sub tables
if (campaignDTO.getLstTimeRange().size() > 0) {
timeRangeDialModes = campaignDTO.getLstTimeRange();
timeRangeDialModes.forEach(item -> {
item.setCampaignId(campaignId);
TimeRangeDialMode timeRangeDialMode = modelMapper.map(item, TimeRangeDialMode.class);
lstTimeRangeModeToInsert.add(timeRangeDialMode);
});
timeRangeDialModeRepository.saveAll(lstTimeRangeModeToInsert);
}
if (campaignDTO.getLstTimeZone().size() > 0) {
timeZoneDialModes = campaignDTO.getLstTimeZone();
timeZoneDialModes.forEach(item -> {
item.setCampaignId(campaignId);
TimeZoneDialMode timeZoneDialMode = modelMapper.map(item, TimeZoneDialMode.class);
lstTimeZoneModeToInser.add(timeZoneDialMode);
});
timeZoneDialModeRepository.saveAll(lstTimeZoneModeToInser);
}
Scenario scenario = new Scenario();
scenario.setCampaignId(campaignId);
scenario.setCode(campaignId + "_" + "01");
scenario.setCreateTime(new Date());
scenario.setCompanySiteId(campaign.getCompanySiteId());
scenarioRepository.save(scenario);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
resultDTO.setData(campaignResult);
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
@Transactional(DataSourceQualify.CCMS_FULL)
public Map countRecallCustomer(Long companySiteId, Long agentId) {
Map result = new HashMap();
Long count = campaignRepository.countRecallCustomer(companySiteId, agentId);
ResultDTO resultDTO = new ResultDTO();
if (count != null) {
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
result.put("info", resultDTO);
result.put("result", count);
} else {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
result.put("info", resultDTO);
result.put("result", 0);
}
Pageable pageable = PageRequest.of(page, pageSize, Sort.by(sort));
List<CampaignDTO> lst = campaignRepository.searchCampaignExecute(agentId, pageable);
List<CampaignDTO> count = campaignRepository.searchCampaignExecute(agentId, null);
return result;
}
result.put("totalItem", count.size());
result.put("data", lst);
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO findCampaignById(Long campaignId) {
logger.info("=== Start find campaign by id: " + campaignId);
ResultDTO resultDTO = new ResultDTO();
try {
Campaign campaign = campaignRepository.findById(campaignId).orElse(null);
if (campaign != null) {
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
resultDTO.setData(campaign);
}
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO changeCampaignStatus(CampaignDTO dto) {
ResultDTO result = new ResultDTO();
try {
Campaign entity = campaignRepository.findCampaignByCampaignIdAndCompanySiteId(dto.getCampaignId(), dto.getCompanySiteId());
if (entity != null) {
entity.setStatus(dto.getStatus().longValue());
entity.setUpdateTime(new Date());
entity.setUpdateBy(dto.getUpdateBy());
campaignRepository.save(entity);
UserActionLogDTO userActionLog = new UserActionLogDTO();
userActionLog.setAgentId(null);
userActionLog.setSessionId(dto.getSessionId());
userActionLog.setCompanySiteId(dto.getCompanySiteId());
userActionLog.setDescription(null);
userActionLog.setStartTime(new Date());
userActionLog.setEndTime(null);
userActionLog.setObjectId(entity.getCampaignId());
if (dto.getStatus().equals((short) -1)) {
userActionLog.setActionType((short) 2);
} else if (dto.getStatus().equals((short) 1)) {
userActionLog.setActionType((short) 3);
} else if (dto.getStatus().equals((short) 2)) {
userActionLog.setActionType((short) 5);
} else if (dto.getStatus().equals((short) 3)) {
userActionLog.setActionType((short) 4);
} else if (dto.getStatus().equals((short) 4)) {
userActionLog.setActionType((short) 7);
}
userActionLogRepository.insertToUserActionLog(userActionLog);
result.setData(entity);
result.setDescription(Constants.ApiErrorDesc.SUCCESS);
result.setErrorCode(Constants.ApiErrorCode.SUCCESS);
} else {
result.setErrorCode(Constants.ApiErrorCode.ERROR);
result.setDescription("Entity not found");
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
result.setErrorCode(Constants.ApiErrorCode.ERROR);
result.setDescription(e.getMessage());
}
return result;
}
@Override
public ResultDTO search(CampaignRequestDTO requestDto) {
return campaignRepository.search(requestDto);
@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;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public List<TimeRangeDialMode> getCampaignTimeRangeMode(Long campaignId, Long companySiteId) {
return timeRangeDialModeRepository.findTimeRangeDialModeByCampaignIdAndCompanySiteId(campaignId, companySiteId);
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public List<TimeZoneDialMode> getCampaignTimeZoneMode(Long campaignId, Long companySiteId) {
return timeZoneDialModeRepository.findTimeZoneDialModeByCampaignIdAndCompanySiteId(campaignId, companySiteId);
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO renewCampaign(CampaignDTO campaignDTO) {
ResultDTO resultDTO = new ResultDTO();
try {
Campaign entity = campaignRepository.findCampaignByCampaignIdAndCompanySiteId(campaignDTO.getCampaignId(), campaignDTO.getCompanySiteId());
if (entity != null) {
entity.setStatus(campaignDTO.getStatus().longValue());
entity.setUpdateTime(new Date());
entity.setUpdateBy(campaignDTO.getUpdateBy());
entity.setEndTime(campaignDTO.getEndTime());
campaignRepository.save(entity);
UserActionLogDTO userActionLog = new UserActionLogDTO();
userActionLog.setAgentId(null);
userActionLog.setSessionId(campaignDTO.getSessionId());
userActionLog.setCompanySiteId(campaignDTO.getCompanySiteId());
userActionLog.setDescription(null);
userActionLog.setStartTime(new Date());
userActionLog.setEndTime(null);
userActionLog.setObjectId(entity.getCampaignId());
userActionLog.setActionType((short) 6);
userActionLogRepository.insertToUserActionLog(userActionLog);
resultDTO.setData(entity);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
}
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO updateCampaign(CampaignDTO dto) {
ResultDTO resultDTO = new ResultDTO();
List<TimeZoneDialModeDTO> lstTimeZone = dto.getLstTimeZone();
List<TimeRangeDialModeDTO> lstTimeRange = dto.getLstTimeRange();
Campaign campaignEntity = new Campaign();
campaignEntity.setCampaignId(dto.getCampaignId());
campaignEntity.setCampaignCode(dto.getCampaignCode());
campaignEntity.setContent(dto.getContent());
campaignEntity.setCustomerNumber(dto.getCustomerNumber());
campaignEntity.setStartTime(dto.getStartTime());
campaignEntity.setEndTime(dto.getEndTime());
campaignEntity.setMaxRecall(dto.getMaxRecall());
campaignEntity.setRecallType(dto.getRecallType());
campaignEntity.setRecallDuration(dto.getRecallDuration());
campaignEntity.setUpdateBy(dto.getUpdateBy());
campaignEntity.setUpdateTime(dto.getUpdateTime());
campaignEntity.setCampaignType(dto.getCampaignType());
campaignEntity.setProcessStatus(null);
campaignEntity.setDialMode(null);
campaignEntity.setTimeRange(null);
campaignEntity.setCurrentTimeMode(dto.getCurrentTimeMode());
campaignEntity.setIsApplyCustLock(dto.getIsApplyCustLock());
campaignEntity.setWrapupTimeConnect(dto.getWrapupTimeConnect());
campaignEntity.setWrapupTimeDisconnect(dto.getWrapupTimeDisconnect());
campaignEntity.setPreviewTime(dto.getPreviewTime());
campaignEntity.setRateDial(dto.getRateDial());
campaignEntity.setRateMiss(dto.getRateMiss());
campaignEntity.setAvgTimeProcess(dto.getAvgTimeProcess());
campaignEntity.setMusicList(dto.getMusicList());
campaignEntity.setTimePlayMusic(dto.getTimePlayMusic());
campaignEntity.setCampaignStart(dto.getCampaignStart());
campaignEntity.setCampaignEnd(dto.getCampaignEnd());
campaignEntity.setTimeWaitAgent(null);
campaignEntity.setQuestIndex(null);
try {
// Save campaign to database
campaignRepository.save(campaignEntity);
// Save time dial
for (TimeRangeDialModeDTO timeRangeDto : lstTimeRange) {
timeRangeDto.setCampaignId(dto.getCampaignId());
TimeRangeDialMode timeRangeEntity = modelMapper.map(timeRangeDto, TimeRangeDialMode.class);
timeRangeDialModeRepository.save(timeRangeEntity);
}
for (TimeZoneDialModeDTO timeZoneDto : lstTimeZone) {
timeZoneDto.setCampaignId(dto.getCampaignId());
TimeZoneDialMode timeZoneEntity = modelMapper.map(timeZoneDto, TimeZoneDialMode.class);
timeZoneDialModeRepository.save(timeZoneEntity);
}
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception e) {
logger.error(e.getMessage(), e);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
// hungtt
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO findCustomerListReallocation(CampaignRequestDTO dto) {
return campaignRepositoryCustom.findCustomerListReallocation(dto);
}
// hungtt
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO reallocationCustomer(CampaignRequestDTO dto) {
return campaignRepositoryCustom.reallocationCustomer(dto);
}
// hungtt
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getListFieldsNotShow(CampaignRequestDTO dto) {
Locale locale = Locale.forLanguageTag("vi");
Map<String, String> mapColumn = new HashMap<>();
mapColumn = setMapData(mapColumn, locale);
ResultDTO resultDTO = campaignRepositoryCustom.getListFieldsNotShow(dto);
List<FieldsToShowDTO> list = (List<FieldsToShowDTO>)resultDTO.getListData();
for (FieldsToShowDTO fieldsToShowDTO : list) {
if (fieldsToShowDTO.getIsFix()) {
fieldsToShowDTO.setColumnTitle(mapColumn.get(fieldsToShowDTO.getColumnName()));
} else {
fieldsToShowDTO.setColumnTitle(fieldsToShowDTO.getColumnName());
}
}
resultDTO.setListData(list);
return resultDTO;
}
// hungtt
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getListFieldsToShow(CampaignRequestDTO dto) {
Locale locale = Locale.forLanguageTag("vi");
Map<String, String> mapColumn = new HashMap<>();
mapColumn = setMapData(mapColumn, locale);
ResultDTO resultDTO = campaignRepositoryCustom.getListFieldsToShow(dto);
List<FieldsToShowDTO> list = (List<FieldsToShowDTO>)resultDTO.getListData();
for (FieldsToShowDTO fieldsToShowDTO : list) {
if (fieldsToShowDTO.getIsFix()) {
fieldsToShowDTO.setColumnTitle(mapColumn.get(fieldsToShowDTO.getColumnName()));
} else {
fieldsToShowDTO.setColumnTitle(fieldsToShowDTO.getColumnName());
}
}
resultDTO.setListData(list);
return resultDTO;
}
// hungtt
private Map<String, String> setMapData(Map<String, String> mapColumn, Locale locale) {
mapColumn.put("CUSTOMER_ID", BundleUtils.getLangString("CUSTOMER_ID", locale));
mapColumn.put("CODE", BundleUtils.getLangString("CODE", locale));
mapColumn.put("NAME", BundleUtils.getLangString("NAME", locale));
mapColumn.put("DESCRIPTION", BundleUtils.getLangString("DESCRIPTION", locale));
mapColumn.put("COMPANY_NAME", BundleUtils.getLangString("COMPANY_NAME", locale));
mapColumn.put("CUSTOMER_IMG", BundleUtils.getLangString("CUSTOMER_IMG", locale));
mapColumn.put("CREATE_DATE", BundleUtils.getLangString("CREATE_DATE", locale));
mapColumn.put("UPDATE_DATE", BundleUtils.getLangString("UPDATE_DATE", locale));
mapColumn.put("STATUS", BundleUtils.getLangString("STATUS", locale));
mapColumn.put("CREATE_BY", BundleUtils.getLangString("CREATE_BY", locale));
mapColumn.put("UPDATE_BY", BundleUtils.getLangString("UPDATE_BY", locale));
mapColumn.put("SITE_ID", BundleUtils.getLangString("SITE_ID", locale));
mapColumn.put("GENDER", BundleUtils.getLangString("GENDER", locale));
mapColumn.put("CURRENT_ADDRESS", BundleUtils.getLangString("CURRENT_ADDRESS", locale));
mapColumn.put("PLACE_OF_BIRTH", BundleUtils.getLangString("PLACE_OF_BIRTH", locale));
mapColumn.put("DATE_OF_BIRTH", BundleUtils.getLangString("DATE_OF_BIRTH", locale));
mapColumn.put("MOBILE_NUMBER", BundleUtils.getLangString("MOBILE_NUMBER", locale));
mapColumn.put("USERNAME", BundleUtils.getLangString("USERNAME", locale));
mapColumn.put("AREA_CODE", BundleUtils.getLangString("AREA_CODE", locale));
mapColumn.put("CALL_ALLOWED", BundleUtils.getLangString("CALL_ALLOWED", locale));
mapColumn.put("EMAIL_ALLOWED", BundleUtils.getLangString("EMAIL_ALLOWED", locale));
mapColumn.put("SMS_ALLOWED", BundleUtils.getLangString("SMS_ALLOWED", locale));
mapColumn.put("IPCC_STATUS", BundleUtils.getLangString("IPCC_STATUS", locale));
return mapColumn;
}
private String generateCampaignCode(String campaignType, Short chanel) {
int year = Calendar.getInstance().get(Calendar.YEAR);
String maxIndexStr = campaignRepositoryCustom.getMaxCampaignIndex();
if (maxIndexStr != null) {
Long maxIndex = Long.valueOf(maxIndexStr) + 1;
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.service.CustomerService;
import com.viettel.campaign.web.dto.CustomerDTO;
import com.viettel.campaign.web.dto.ResultDTO;
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.repository.CustomerRepository;
import com.viettel.campaign.utils.DataUtil;
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.*;
import com.viettel.campaign.web.dto.*;
import com.viettel.campaign.web.dto.request_dto.CustomerDetailRequestDTO;
import com.viettel.campaign.web.dto.request_dto.CustomerRequestDTO;
import com.viettel.campaign.web.dto.request_dto.SearchCustomerRequestDTO;
import com.viettel.econtact.filter.UserSession;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.eclipse.jetty.client.HttpRequest;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.transform.Transformers;
import org.hibernate.type.DateType;
import org.hibernate.type.LongType;
import org.hibernate.type.ShortType;
import org.hibernate.type.StringType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.domain.*;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ResourceUtils;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.servlet.http.HttpServletRequest;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.*;
@Service
public class CustomerServiceImpl implements CustomerService {
@Autowired
@PersistenceContext( unitName= DataSourceQualify.JPA_UNIT_NAME_CCMS_FULL)
EntityManager entityManager;
@Autowired
CustomerRepository customerRepository;
@Autowired
CustomerListRepository customerListRepository;
@Autowired
CustomerContactRepository customerContactRepository;
@Autowired
CampaignCustomerListRepository campaignCustomerListRepository;
@Autowired
CampaignCustomerRepository campaignCustomerRepository;
@Autowired
CustomerListMappingRepository customerListMappingRepository;
@Autowired
@Qualifier(DataSourceQualify.NAMED_JDBC_PARAMETER_TEMPLATE_CCMS_FULL)
NamedParameterJdbcTemplate namedParameterJdbcTemplate;
@Autowired
VSAUsersRepository vsaUsersRepository;
@Override
public Map listAllCustomer(int page, int pageSize, String sort) {
Map result = new HashMap();
List<Customer> lst = new ArrayList<>();
@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();
Pageable pageable = PageRequest.of(page, pageSize, Sort.by(sort));
Page<Customer> pc = customerRepository.findAll(pageable);
Session session = sessionFactory.openSession();
session.beginTransaction();
result.put("totalItem", pc.getTotalElements());
result.put("customers", pc.iterator());
if (DataUtil.isNullOrZero(companySiteId)) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
return resultDTO;
}
return result;
try {
// StringBuilder sqlStrBuilder = new StringBuilder();
// sqlStrBuilder.append(SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_MNG, "campaign-customer-detail-by-params"));
//sqlStrBuilder.append(" ORDER BY b.NAME ASC");
StringBuilder sb = new StringBuilder();
sb.append("select");
sb.append(" a.CUSTOMER_LIST_MAPPING_ID customerListMappingId,");
sb.append(" a.COMPANY_SITE_ID companySiteId,");
sb.append(" a.CUSTOMER_LIST_ID customerListId,");
sb.append(" a.CUSTOMER_ID customerId,");
sb.append(" b.NAME name,");
sb.append(" b.DESCRIPTION description,");
sb.append(" b.COMPANY_NAME companyName,");
sb.append(" b.CUSTOMER_TYPE customerType,");
sb.append(" b.CURRENT_ADDRESS currentAddress,");
sb.append(" b.CALL_ALLOWED callAllowed,");
sb.append(" b.EMAIL_ALLOWED emailAllowed,");
sb.append(" b.SMS_ALLOWED smsAllowed,");
sb.append(" b.IPCC_STATUS ipccStatus,");
sb.append(" c.MOBILE mobileNumber,");
sb.append(" d.EMAIL email");
sb.append(" from CUSTOMER_LIST_MAPPING a");
sb.append(" join CUSTOMER b on a.CUSTOMER_ID = b.CUSTOMER_ID");
sb.append(" left join (SELECT CUSTOMER_ID, LISTAGG(CONTACT, ', ') WITHIN GROUP (ORDER BY ");
sb.append(" NULL) AS MOBILE");
sb.append(" FROM CUSTOMER_CONTACT WHERE CONTACT_TYPE = 5 GROUP BY ");
sb.append(" CUSTOMER_ID) c on b.CUSTOMER_ID = c.CUSTOMER_ID");
sb.append(" left join (SELECT CUSTOMER_ID, LISTAGG(CONTACT, ', ') WITHIN GROUP (ORDER BY ");
sb.append(" NULL) AS EMAIL");
sb.append(" FROM CUSTOMER_CONTACT WHERE CONTACT_TYPE = 2 GROUP BY ");
sb.append(" CUSTOMER_ID) d on b.CUSTOMER_ID = d.CUSTOMER_ID ");
sb.append(" where 1 = 1");
sb.append(" and a.COMPANY_SITE_ID = :p_company_site_id");
sb.append(" and a.CUSTOMER_LIST_ID = :p_customer_list_id");
sb.append(" ORDER BY b.NAME ASC");
SQLQuery query = session.createSQLQuery(sb.toString());
query.setParameter("p_company_site_id", companySiteId);
query.setParameter("p_customer_list_id", customerListId);
query.addScalar("customerListMappingId", new LongType());
query.addScalar("companySiteId", new LongType());
query.addScalar("customerListId", new LongType());
query.addScalar("customerId", new LongType());
query.addScalar("name", new StringType());
query.addScalar("description", new StringType());
query.addScalar("companyName", new StringType());
query.addScalar("customerType", new StringType());
query.addScalar("currentAddress", new StringType());
query.addScalar("callAllowed", new ShortType());
query.addScalar("emailAllowed", new ShortType());
query.addScalar("smsAllowed", new ShortType());
query.addScalar("ipccStatus", new StringType());
query.addScalar("mobileNumber", new StringType());
query.addScalar("email", new StringType());
query.setResultTransformer(Transformers.aliasToBean(CustomerCustomDTO.class));
int count = 0;
List<CustomerCustomDTO> dtoList = query.list();
if (dtoList.size() > 0) {
count = query.list().size();
}
Pageable pageable = PageRequest.of(page, pageSize, Sort.by(Sort.Order.desc(sort)));
if (pageable != null) {
query.setFirstResult(pageable.getPageNumber() * pageable.getPageSize());
query.setMaxResults(pageable.getPageSize());
}
List<CustomerCustomDTO> data = query.list();
Page<CustomerCustomDTO> dataPage = new PageImpl<>(data, pageable, count);
resultDTO.setData(dataPage);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception e) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
} finally {
session.close();
}
return resultDTO;
}
@Override
public Map listCustByName(int page, int pageSize, String sort, String name) {
Map result = new HashMap();
List<Customer> lst = new ArrayList<>();
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getCustomerId(Long customerId) {
ResultDTO resultDTO = new ResultDTO();
Pageable pageable = PageRequest.of(page, pageSize, Sort.by(sort));
lst = customerRepository.findByName(name, pageable);
List<Customer> customer = customerRepository.findByCustomerId(customerId);
result.put("totalItem", lst.size());
result.put("customers", lst);
if (customer != null) {
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription("customer data");
resultDTO.setListData(customer);
} else {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription("customer data null");
}
return result;
return resultDTO;
}
@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();
Session session = sessionFactory.openSession();
session.beginTransaction();
if (DataUtil.isNullOrZero(companySiteId)) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
return resultDTO;
}
try {
// StringBuilder sqlStrBuilder = new StringBuilder();
// sqlStrBuilder.append(SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_MNG, "campaign-customer-detail-by-params"));
StringBuilder sb = new StringBuilder();
sb.append("select");
sb.append(" a.CUSTOMER_LIST_MAPPING_ID customerListMappingId,");
sb.append(" a.COMPANY_SITE_ID companySiteId,");
sb.append(" a.CUSTOMER_LIST_ID customerListId,");
sb.append(" a.CUSTOMER_ID customerId,");
sb.append(" b.NAME name,");
sb.append(" b.DESCRIPTION description,");
sb.append(" b.COMPANY_NAME companyName,");
sb.append(" b.CUSTOMER_TYPE customerType,");
sb.append(" b.CURRENT_ADDRESS currentAddress,");
sb.append(" b.CALL_ALLOWED callAllowed,");
sb.append(" b.EMAIL_ALLOWED emailAllowed,");
sb.append(" b.SMS_ALLOWED smsAllowed,");
sb.append(" b.IPCC_STATUS ipccStatus,");
sb.append(" c.MOBILE mobileNumber,");
sb.append(" d.EMAIL email");
sb.append(" from CUSTOMER_LIST_MAPPING a");
sb.append(" join CUSTOMER b on a.CUSTOMER_ID = b.CUSTOMER_ID");
sb.append(" left join (SELECT CUSTOMER_ID, LISTAGG(CONTACT, ', ') WITHIN GROUP (ORDER BY NULL) AS MOBILE");
sb.append(" FROM CUSTOMER_CONTACT WHERE CONTACT_TYPE = 5 GROUP BY CUSTOMER_ID) c on b.CUSTOMER_ID = c.CUSTOMER_ID");
sb.append(" left join (SELECT CUSTOMER_ID, LISTAGG(CONTACT, ', ') WITHIN GROUP (ORDER BY NULL) AS EMAIL");
sb.append(" FROM CUSTOMER_CONTACT WHERE CONTACT_TYPE = 2 GROUP BY CUSTOMER_ID) d on b.CUSTOMER_ID = d.CUSTOMER_ID");
sb.append(" where 1 = 1");
sb.append(" and a.COMPANY_SITE_ID = :p_company_site_id");
sb.append(" and a.CUSTOMER_LIST_ID = :p_customer_list_id");
if (!DataUtil.isNullOrEmpty(name)) {
sb.append(" AND UPPER(b.NAME) LIKE UPPER(:p_name)");
}
if (!DataUtil.isNullOrEmpty(mobileNumber)) {
sb.append(" AND UPPER(c.MOBILE) LIKE UPPER(:p_mobile_number)");
}
if (!DataUtil.isNullOrEmpty(email)) {
sb.append(" AND UPPER(d.EMAIL) LIKE UPPER(:p_email)");
}
sb.append(" ORDER BY name DESC");
SQLQuery query = session.createSQLQuery(sb.toString());
query.setParameter("p_company_site_id", companySiteId);
query.setParameter("p_customer_list_id", customerListId);
if (!DataUtil.isNullOrEmpty(name)) {
query.setParameter("p_name", "%" +
name.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
}
if (!DataUtil.isNullOrEmpty(mobileNumber)) {
query.setParameter("p_mobile_number", "%" +
mobileNumber.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
}
if (!DataUtil.isNullOrEmpty(email)) {
query.setParameter("p_email", "%" +
email.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
}
query.addScalar("customerListMappingId", new LongType());
query.addScalar("companySiteId", new LongType());
query.addScalar("customerListId", new LongType());
query.addScalar("customerId", new LongType());
query.addScalar("name", new StringType());
query.addScalar("description", new StringType());
query.addScalar("companyName", new StringType());
query.addScalar("customerType", new StringType());
query.addScalar("currentAddress", new StringType());
query.addScalar("mobileNumber", new StringType());
query.addScalar("email", new StringType());
query.setResultTransformer(Transformers.aliasToBean(CustomerCustomDTO.class));
int count = 0;
List<CustomerCustomDTO> dtoList = query.list();
if (dtoList.size() > 0) {
count = query.list().size();
}
Pageable pageable = PageRequest.of(page, pageSize, Sort.by(Sort.Order.desc(sort)));
if (pageable != null) {
query.setFirstResult(pageable.getPageNumber() * pageable.getPageSize());
query.setMaxResults(pageable.getPageSize());
}
List<CustomerCustomDTO> data = query.list();
Page<CustomerCustomDTO> dataPage = new PageImpl<>(data, pageable, count);
resultDTO.setData(dataPage);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception e) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
} finally {
session.close();
}
return resultDTO;
}
@Override
@Transactional
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO createCustomer(CustomerDTO customerDTO) {
ResultDTO resultDTO = new ResultDTO();
CustomerMapper customerMapper = new CustomerMapper();
Date today = new Date();
Customer customer = new Customer();
try {
......@@ -92,6 +358,125 @@ public class CustomerServiceImpl implements CustomerService {
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO deleteCustomer(CustomerRequestDTO customerRequestDTO) {
ResultDTO resultDTO = new ResultDTO();
try {
if (customerRequestDTO != null) {
// delete
// customerRepository.deleteById(customerDTO.getCustomerId());
customerListMappingRepository.deleteMappingByCustomerId(customerRequestDTO.getCustomerId(), customerRequestDTO.getCustomerListId(), customerRequestDTO.getCompanySiteId());
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} else {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
} catch (Exception e) {
e.printStackTrace();
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO deleteIds(CustomerRequestDTO customerRequestDTO) {
ResultDTO resultDTO = new ResultDTO();
try {
if (customerRequestDTO != null) {
// customerRepository.deleteIds(ids);
customerListMappingRepository.deleteMappingByCustomerIds(customerRequestDTO.getIds(), customerRequestDTO.getCustomerListId(), customerRequestDTO.getCompanySiteId());
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} else {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
} catch (Exception e) {
e.printStackTrace();
}
return resultDTO;
}
@Override
public ResultDTO getCustomerDetailById(Long companySiteId, Long customerListId, Long customerId) {
ResultDTO resultDTO = new ResultDTO();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
if (DataUtil.isNullOrZero(companySiteId)) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
return resultDTO;
}
try {
// StringBuilder sqlStrBuilder = new StringBuilder();
// sqlStrBuilder.append(SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_MNG, "get-customer-detail-by-id"));
StringBuilder sb = new StringBuilder();
sb.append("select");
sb.append(" a.COMPANY_SITE_ID companySiteId,");
sb.append(" a.CUSTOMER_LIST_ID customerListId,");
sb.append(" a.CUSTOMER_ID customerId,");
sb.append(" e.TITLE title,");
sb.append(" f.TYPE type,");
sb.append(" h.VALUE_COMBOBOX valueCombobox,");
sb.append(" e.VALUE_CHECKBOX valueCheckbox,");
sb.append(" e.VALUE_DATE valueDate,");
sb.append(" e.VALUE_NUMBER valueNumber,");
sb.append(" e.VALUE_TEXT valueText");
sb.append(" from CUSTOMER_LIST_MAPPING a");
sb.append(" left join CUSTOMIZE_FIELD_OBJECT e on a.CUSTOMER_ID = e.OBJECT_ID");
sb.append(" left join CUSTOMIZE_FIELDS f on e.CUSTOMIZE_FIELDS_ID = f.CUSTOMIZE_FIELD_ID");
sb.append(" left join (SELECT FIELD_OPTION_VALUE_ID, NAME AS VALUE_COMBOBOX");
sb.append(" FROM CUSTOMIZE_FIELD_OPTION_VALUE) h on h.FIELD_OPTION_VALUE_ID = ");
sb.append(" e.FIELD_OPTION_VALUE_ID");
sb.append(" where 1 = 1");
sb.append(" and a.COMPANY_SITE_ID = :p_company_site_id");
sb.append(" and a.CUSTOMER_LIST_ID = :p_customer_list_id");
sb.append(" and a.CUSTOMER_ID = :p_customer_id");
sb.append(" AND e.FUNCTION_CODE = 'CUSTOMER'");
SQLQuery query = session.createSQLQuery(sb.toString());
query.setParameter("p_company_site_id", companySiteId);
query.setParameter("p_customer_list_id", customerListId);
query.setParameter("p_customer_id", customerId);
query.addScalar("companySiteId", new LongType());
query.addScalar("customerListId", new LongType());
query.addScalar("customerId", new LongType());
query.addScalar("title", new StringType());
query.addScalar("type", new StringType());
query.addScalar("valueCombobox", new StringType());
query.addScalar("valueCheckbox", new ShortType());
query.addScalar("valueDate", new DateType());
query.addScalar("valueNumber", new LongType());
query.addScalar("valueText", new StringType());
query.setResultTransformer(Transformers.aliasToBean(CustomerDetailRequestDTO.class));
List<CustomerDetailRequestDTO> data = query.list();
resultDTO.setData(data);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception e) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
} finally {
session.close();
}
return resultDTO;
}
public Date getSysdate() {
try {
Query query = entityManager.createNativeQuery("SELECT to_char(sysdate, 'dd/MM/YYYY hh24:mi:ss') FROM DUAL ");
......@@ -105,4 +490,607 @@ public class CustomerServiceImpl implements CustomerService {
}
return new Date();
}
// ------------- 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();
Session session = sessionFactory.openSession();
session.beginTransaction();
if (DataUtil.isNullOrZero(companySiteId)) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
return resultDTO;
}
try {
// StringBuilder sb = new StringBuilder();
// sb.append(SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_MNG, "search-campaign-customer-by-params"));
StringBuilder sb = new StringBuilder();
sb.append("SELECT");
sb.append(" CUSTOMER_LIST_ID customerListId,");
sb.append(" COMPANY_SITE_ID companySiteId,");
sb.append(" CUSTOMER_LIST_CODE customerListCode,");
sb.append(" CUSTOMER_LIST_NAME customerListName,");
sb.append(" STATUS status,");
sb.append(" CREATE_BY createBy,");
sb.append(" CREATE_AT createAt,");
sb.append(" UPDATE_BY updateBy,");
sb.append(" UPDATE_AT updateAt,");
sb.append(" SOURCE source,");
sb.append(" DEPT_CREATE deptCreate");
sb.append(" FROM CUSTOMER_LIST");
sb.append(" WHERE 1 = 1");
sb.append(" AND STATUS = 1");
sb.append(" AND COMPANY_SITE_ID = :p_company_site_id");
sb.append(" ORDER BY CREATE_AT DESC");
SQLQuery query = session.createSQLQuery(sb.toString());
query.setParameter("p_company_site_id", companySiteId);
query.addScalar("customerListId", new LongType());
query.addScalar("companySiteId", new LongType());
query.addScalar("customerListCode", new StringType());
query.addScalar("customerListName", new StringType());
query.addScalar("status", new ShortType());
query.addScalar("createBy", new StringType());
query.addScalar("createAt", new DateType());
query.addScalar("updateBy", new StringType());
query.addScalar("updateAt", new DateType());
query.addScalar("source", new StringType());
query.addScalar("deptCreate", new StringType());
query.setResultTransformer(Transformers.aliasToBean(CustomerListDTO.class));
int count = 0;
List<CustomerListDTO> dtoList = query.list();
if (dtoList.size() > 0) {
count = query.list().size();
}
Pageable pageable = PageRequest.of(page, pageSize, Sort.by(Sort.Order.desc(sort)));
if (pageable != null) {
query.setFirstResult(pageable.getPageNumber() * pageable.getPageSize());
query.setMaxResults(pageable.getPageSize());
}
List<CustomerListDTO> data = query.list();
Page<CustomerListDTO> dataPage = new PageImpl<>(data, pageable, count);
resultDTO.setData(dataPage);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception e) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
} finally {
session.close();
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO createCustomerList(CustomerListDTO customerListDTO, String userName) {
ResultDTO resultDTO = new ResultDTO();
CustomerListMapper customerListMapper = new CustomerListMapper();
CustomerList customerList = new CustomerList();
try {
if (customerListDTO != null) {
// insert
CustomerList findCustomer = customerListRepository.findByCustomerListCode(customerListDTO.getCustomerListCode());
if (findCustomer == null) {
customerListDTO.setCreateBy(userName);
customerList = customerListMapper.toPersistenceBean(customerListDTO);
customerListRepository.save(customerList);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} else {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
} else {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
} catch (Exception e) {
e.printStackTrace();
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO updateCustomerList(CustomerListDTO customerListDTO) {
ResultDTO resultDTO = new ResultDTO();
CustomerListMapper customerListMapper = new CustomerListMapper();
try {
if (customerListDTO != null) {
// update
CustomerList customerList = customerListRepository.findByCustomerListIdAndCompanySiteId(customerListDTO.getCustomerListId(), customerListDTO.getCompanySiteId());
if (customerList != null) {
customerList = customerListMapper.toPersistenceBean(customerListDTO);
customerListRepository.save(customerList);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} else {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
} else {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
} catch (Exception e) {
e.printStackTrace();
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO deleteCustomerList(CustomerListDTO customerListDTO) {
ResultDTO resultDTO = new ResultDTO();
try {
// delete
if (DataUtil.isNullOrZero(campaignCustomerListRepository.campaignCount(customerListDTO.getCustomerListId()))) {
customerListRepository.deleteCustomerList(customerListDTO.getCustomerListId(), customerListDTO.getCompanySiteId());
customerListMappingRepository.deleteMappingByCustomerListId(customerListDTO.getCustomerListId(), customerListDTO.getCompanySiteId());
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} else {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
} catch (Exception e) {
e.printStackTrace();
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO deleteCustomerListIds(CustomerRequestDTO customerRequestDTO) {
ResultDTO resultDTO = new ResultDTO();
try {
if (customerRequestDTO != null) {
if (DataUtil.isNullOrZero(campaignCustomerListRepository.campaignIdsCount(customerRequestDTO.getIds()))) {
customerListRepository.deleteCustomerListIds(customerRequestDTO.getIds(), customerRequestDTO.getCompanySiteId());
customerListMappingRepository.deleteMappingByCustomerListIds(customerRequestDTO.getIds(), customerRequestDTO.getCompanySiteId());
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} else {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
} else {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
} catch (Exception e) {
e.printStackTrace();
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO searchCustomerList(SearchCustomerRequestDTO searchCustomerRequestDTO) {
ResultDTO resultDTO = new ResultDTO();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
if (DataUtil.isNullOrEmpty(searchCustomerRequestDTO.getCompanySiteId())) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
return resultDTO;
}
try {
// StringBuilder sb = new StringBuilder();
// sb.append(SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_MNG, "search-campaign-customer-by-params"));
StringBuilder sb = new StringBuilder();
sb.append("SELECT");
sb.append(" CUSTOMER_LIST_ID customerListId,");
sb.append(" COMPANY_SITE_ID companySiteId,");
sb.append(" CUSTOMER_LIST_CODE customerListCode,");
sb.append(" CUSTOMER_LIST_NAME customerListName,");
sb.append(" STATUS status,");
sb.append(" CREATE_BY createBy,");
sb.append(" CREATE_AT createAt,");
sb.append(" UPDATE_BY updateBy,");
sb.append(" UPDATE_AT updateAt,");
sb.append(" SOURCE source,");
sb.append(" DEPT_CREATE deptCreate");
sb.append(" FROM CUSTOMER_LIST");
sb.append(" WHERE 1 = 1");
sb.append(" AND STATUS = 1");
sb.append(" AND COMPANY_SITE_ID = :p_company_site_id");
sb.append(" AND CREATE_AT BETWEEN to_date(:p_date_from, 'YYYYMMDD') AND to_date(:p_date_to, 'YYYYMMDD')");
if (!DataUtil.isNullOrEmpty(searchCustomerRequestDTO.getCustomerListCode())) {
sb.append(" AND CUSTOMER_LIST_CODE LIKE :p_list_code");
}
if (!DataUtil.isNullOrEmpty(searchCustomerRequestDTO.getCustomerListName())) {
sb.append(" AND CUSTOMER_LIST_NAME LIKE :p_list_name");
}
SQLQuery query = session.createSQLQuery(sb.toString());
query.setParameter("p_company_site_id", searchCustomerRequestDTO.getCompanySiteId());
query.setParameter("p_date_from", searchCustomerRequestDTO.getConvertedDateFrom());
query.setParameter("p_date_to", searchCustomerRequestDTO.getConvertedDateTo());
if (!DataUtil.isNullOrEmpty(searchCustomerRequestDTO.getCustomerListCode())) {
query.setParameter("p_list_code", "%" +
searchCustomerRequestDTO.getCustomerListCode()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
}
if (!DataUtil.isNullOrEmpty(searchCustomerRequestDTO.getCustomerListName())) {
query.setParameter("p_list_name", "%" +
searchCustomerRequestDTO.getCustomerListName()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
}
query.addScalar("customerListId", new LongType());
query.addScalar("companySiteId", new LongType());
query.addScalar("customerListCode", new StringType());
query.addScalar("customerListName", new StringType());
query.addScalar("status", new ShortType());
query.addScalar("createBy", new StringType());
query.addScalar("createAt", new DateType());
query.addScalar("updateBy", new StringType());
query.addScalar("updateAt", new DateType());
query.addScalar("source", new StringType());
query.addScalar("deptCreate", new StringType());
query.setResultTransformer(Transformers.aliasToBean(CustomerListDTO.class));
int count = 0;
List<CustomerListDTO> dtoList = query.list();
if (dtoList.size() > 0) {
count = query.list().size();
}
Pageable pageable = PageRequest.of(searchCustomerRequestDTO.getPage(), searchCustomerRequestDTO.getPageSize(), Sort.by(searchCustomerRequestDTO.getSort()));
if (pageable != null) {
query.setFirstResult(pageable.getPageNumber() * pageable.getPageSize());
query.setMaxResults(pageable.getPageSize());
}
List<CustomerListDTO> data = query.list();
Page<CustomerListDTO> dataPage = new PageImpl<>(data, pageable, count);
resultDTO.setData(dataPage);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (
Exception e) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
} finally {
session.close();
}
return resultDTO;
}
@Override
@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();
try {
List<CustomerContact> data = customerContactRepository.findByCustomerIdAndAndContactTypeAndContact(customer.getCustomerId(), customer.getContactType(), customer.getContact(), SQLBuilder.buildPageable(customer));
if (customer != null) {
result.setErrorCode(Constants.ApiErrorCode.SUCCESS);
result.setDescription("customer contact data");
result.setListData(data);
result.setTotalRow(customerContactRepository.findByCustomerIdAndAndContactTypeAndContact(customer.getCustomerId(), customer.getContactType(), customer.getContact(), null).size());
} else {
result.setErrorCode(Constants.ApiErrorCode.ERROR);
result.setDescription("customer contact data null");
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getCustomerRecall(Long campaignId, Long customerId) {
ResultDTO result = new ResultDTO();
try {
Long data = campaignCustomerRepository.getCustomerRecall(campaignId, customerId);
if (data != null) {
result.setErrorCode(Constants.ApiErrorCode.SUCCESS);
result.setDescription("campaign customer data");
result.setData(data);
} else {
result.setErrorCode(Constants.ApiErrorCode.ERROR);
result.setDescription("campaign customer data null");
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
@Override
public List<DynamicExcelHeaderDTO> getDynamicHeader(Long companySiteId) {
List<DynamicExcelHeaderDTO> headerList;
try {
//String sql = SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_CUSTOMER_MNG, "get-dynamic-header");
StringBuilder sb = new StringBuilder();
sb.append(" select CUSTOMIZE_FIELD_ID customizeFieldId,");
sb.append(" SITE_ID companySiteId,");
sb.append(" FUNCTION_CODE functionCode,");
sb.append(" CREATE_BY createBy,");
sb.append(" CREATE_DATE createDate,");
sb.append(" UPDATE_BY updateBy,");
sb.append(" UPDATE_DATE updateDate,");
sb.append(" STATUS status,");
sb.append(" TYPE type,");
sb.append(" TITLE title,");
sb.append(" PLACEHOLDER placeholder,");
sb.append(" DESCRIPTION description,");
sb.append(" POSITION position,");
sb.append(" REQUIRED required,");
sb.append(" FIELD_OPTIONS_ID fieldOptionsId,");
sb.append(" REGEXP_FOR_VALIDATION regexpForValidation,");
sb.append(" MAX_LENGTH maxLength,");
sb.append(" MIN min,");
sb.append(" MAX max,");
sb.append(" MIN_LENGTH minLength,");
sb.append(" ACTIVE active");
sb.append(" from customize_fields");
sb.append(" where function_code = 'CUSTOMER'");
sb.append(" and site_id = :p_company_site_id");
Map<String, Object> param = new HashMap<>();
param.put("p_company_site_id", companySiteId);
headerList = namedParameterJdbcTemplate.query(sb.toString(), param, new BeanPropertyRowMapper<>(DynamicExcelHeaderDTO.class));
} catch (Exception e) {
return null;
}
return headerList;
}
@Override
public void buildTemplate(Long companySiteId) {
try {
List<DynamicExcelHeaderDTO> headerList = getDynamicHeader(companySiteId);
FileInputStream fis = new FileInputStream(ResourceUtils.getFile("classpath:templates/import_customer_template.xlsx"));
XSSFWorkbook workbook = new XSSFWorkbook(fis);
XSSFSheet sheet = workbook.getSheetAt(0);
Row row = sheet.getRow(2);
Cell cell = row.createCell(row.getPhysicalNumberOfCells());
cell.setCellType(CellType.STRING);
cell.setCellValue("test");
FileOutputStream fos = new FileOutputStream(ResourceUtils.getFile("classpath:templates/import_customer_template.xlsx"));
workbook.write(fos);
fos.close();
workbook.close();
} catch (Exception e) {
}
}
@Override
public List<CustomizeFieldDTO> getCustomizeField(Long customerId) {
List<CustomizeFieldDTO> customizeFieldDTOList;
try {
//String sql = SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_MNG, "get-customize-field");
StringBuilder sb = new StringBuilder();
sb.append(" select CUSTOMIZE_FIELD_OBJECT_ID customizeFieldObjectId,");
sb.append(" OBJECT_ID objectId,");
sb.append(" CUSTOMIZE_FIELDS_ID customizeFieldId,");
sb.append(" VALUE_TEXT valueText,");
sb.append(" VALUE_NUMBER valueNumber,");
sb.append(" VALUE_DATE valueDate,");
sb.append(" VALUE_CHECKBOX valueCheckbox,");
sb.append(" CREATE_BY createBy,");
sb.append(" CREATE_DATE createDate,");
sb.append(" UPDATE_BY updateBy,");
sb.append(" UPDATE_DATE updateDate,");
sb.append(" STATUS status,");
sb.append(" FIELD_OPTION_VALUE_ID fieldOptionValueId,");
sb.append(" TITLE title,");
sb.append(" FUNCTION_CODE functionCode");
sb.append(" from customize_field_object");
sb.append(" where function_code = 'CUSTOMER' and object_id = :p_customer_id");
Map<String, Object> param = new HashMap<>();
param.put("p_customer_id", customerId);
customizeFieldDTOList = namedParameterJdbcTemplate.query(sb.toString(), param, new BeanPropertyRowMapper<>(CustomizeFieldDTO.class));
} catch (Exception e) {
return null;
}
return customizeFieldDTOList;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public List<CustomerListDTO> getCustomerListInfo(CampaignCustomerDTO campaignCustomerDTO) {
List<CustomerListDTO> customerList;
try {
//String sql = SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_MNG, "search-customer-list-info-from-customer-list");
// BuildMyString.com generated code. Please enjoy your string responsibly.
StringBuilder sb = new StringBuilder();
sb.append(" with totalCustomer as (");
sb.append(" select clm.customer_list_id,");
sb.append(" clm.company_site_id,");
sb.append(" count(clm.customer_id) total");
sb.append(" from customer_list_mapping clm");
sb.append(" inner join customer c on clm.customer_id = c.customer_id");
sb.append(" where c.status = 1");
sb.append(" group by clm.customer_list_id,clm.company_site_id");
sb.append(" ), customerInteractive as (");
sb.append(" select customer_list_id,");
sb.append(" company_site_id,");
sb.append(" count(customer_id) tt");
sb.append(" from campaign_customer where campaign_id = :p_campaign_id and status <> 0");
sb.append(" group by customer_list_id, company_site_id");
sb.append(" ), customerNotInteractive as (");
sb.append(" select customer_list_id,");
sb.append(" company_site_id,");
sb.append(" count(customer_id) ktt");
sb.append(" from campaign_customer where campaign_id = :p_campaign_id and status = 0");
sb.append(" and in_campaign_status = 1");
sb.append(" group by customer_list_id, company_site_id");
sb.append(" ), datas as (");
sb.append(" select customer_list_code customerListCode,");
sb.append(" customer_list_name customerListName,");
sb.append(" nvl(total, 0) totalCusInList,");
sb.append(" nvl(tt, 0) totalCusInteract,");
sb.append(" nvl(ktt, 0) totalCusNotInteract");
sb.append(" from customer_list cl");
sb.append(" left join totalCustomer tc on (cl.customer_list_id = tc.customer_list_id and cl.company_site_id = tc.company_site_id)");
sb.append(" left join customerInteractive ci on (cl.customer_list_id = ci.customer_list_id and cl.company_site_id = ci.company_site_id)");
sb.append(" left join customerNotInteractive cni on (cl.customer_list_id = cni.customer_list_id and cl.company_site_id = cni.company_site_id)");
sb.append(" where cl.company_site_id = :p_company_site_id");
sb.append(" )");
sb.append(" select * from");
sb.append(" (");
sb.append(" select a.*, rownum r__");
sb.append(" from");
sb.append(" (");
sb.append(" select * from datas");
sb.append(" order by customerListCode");
sb.append(" ) a");
sb.append(" where rownum < ((:p_page_number * :p_page_size) + 1 )");
sb.append(" )");
sb.append(" where r__ >= (((:p_page_number-1) * :p_page_size) + 1)");
Map<String, Object> param = new HashMap<>();
param.put("p_campaign_id", campaignCustomerDTO.getCampaignId());
param.put("p_company_site_id", campaignCustomerDTO.getCompanySiteId());
param.put("p_page_number", campaignCustomerDTO.getPage());
param.put("p_page_size", campaignCustomerDTO.getPageSize());
customerList = namedParameterJdbcTemplate.query(sb.toString(), param, new BeanPropertyRowMapper<>(CustomerListDTO.class));
} catch (Exception e) {
return null;
}
return customerList;
}
@Override
public List<CustomerDTO> getIndividualCustomerInfo(CampaignCustomerDTO campaignCustomerDTO) {
List<CustomerDTO> customerList;
try {
//String sql = SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_MNG, "search-individual-customer");
// BuildMyString.com generated code. Please enjoy your string responsibly.
StringBuilder sb = new StringBuilder();
sb.append("with cusPhone as (");
sb.append(" select customer_id cusId,");
sb.append(" contact phone");
sb.append(" from customer_contact cc");
sb.append(" where cc.contact_type = 5");
sb.append(" and status = 1");
sb.append(" ), cusEmail as (");
sb.append(" select customer_id cusId,");
sb.append(" contact email");
sb.append(" from customer_contact cc");
sb.append(" where cc.contact_type = 2");
sb.append(" and status = 1");
sb.append(" ), datas as (");
sb.append(" select c.customer_id customerId,");
sb.append(" c.name,");
sb.append(" cP.phone,");
sb.append(" cE.email,");
sb.append(" c.customer_type cusType,");
sb.append(" c.company_name compName,");
sb.append(" c.current_address currentAddress,");
sb.append(" c.description");
sb.append(" from customer c");
sb.append(" left join cusPhone cP on c.customer_id = cP.cusId");
sb.append(" left join cusEmail cE on c.customer_id = cE.cusId");
sb.append(" )");
sb.append(" select * from");
sb.append(" (");
sb.append(" select a.*, rownum r__");
sb.append(" from");
sb.append(" (");
sb.append(" select * from datas");
sb.append(" order by datas.name");
sb.append(" ) a");
sb.append(" where rownum < ((:p_page_number * :p_page_size) + 1 )");
sb.append(" )");
sb.append(" where r__ >= (((:p_page_number-1) * :p_page_size) + 1)");
Map<String, Object> param = new HashMap<>();
param.put("p_page_number", campaignCustomerDTO.getPage());
param.put("p_page_size", campaignCustomerDTO.getPageSize());
customerList = namedParameterJdbcTemplate.query(sb.toString(), param, new BeanPropertyRowMapper<>(CustomerDTO.class));
} catch (Exception e) {
return null;
}
return customerList;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public List<Customer> findAllByCondition(Long siteId, Date endTime) {
return customerRepository.findAllByCondition(siteId, endTime);
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public Customer update(Customer c) {
return customerRepository.save(c);
}
}
package com.viettel.campaign.service.impl;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.Campaign;
import com.viettel.campaign.model.ccms_full.CampaignLog;
import com.viettel.campaign.model.ccms_full.ScenarioAnswer;
import com.viettel.campaign.repository.ccms_full.CampaignLogRepository;
import com.viettel.campaign.repository.ccms_full.CampaignRepository;
import com.viettel.campaign.repository.ccms_full.ScenarioAnswerRepository;
import com.viettel.campaign.service.ScenarioAnswerService;
import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.ScenarioAnswerDTO;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
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.List;
/**
* @author anhvd_itsol
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class ScenarioAnswerServiceImpl implements ScenarioAnswerService {
private static final Logger logger = LogManager.getLogger(ScenarioQuestionServiceImpl.class);
@Autowired
ScenarioAnswerRepository scenarioAnswerRepository;
@Autowired
CampaignRepository campaignRepository;
@Autowired
CampaignLogRepository campaignLogRepository;
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO findByScenarioQuestionCompany(Long scenarioQuestionId, Long companySiteId) {
ResultDTO resultDTO = new ResultDTO();
try {
List<ScenarioAnswer> lst = scenarioAnswerRepository.findByScenarioQuestionIdAndCompanySiteIdAndStatus(scenarioQuestionId, companySiteId, (short) 1);
resultDTO.setData(lst);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch(Exception ex) {
logger.error(ex.getMessage(), ex);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public Long getMaxAnswerOrderId(Long scenarioQuestionId, Long companySiteId) {
try {
return scenarioAnswerRepository.getMaxAnswerOrderId(scenarioQuestionId, companySiteId);
}catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
return null;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO delete(ScenarioAnswerDTO scenarioAnswerDTO) {
ResultDTO resultDTO = new ResultDTO();
CampaignLog campaignLog;
try {
//find campaign
Campaign campaign = campaignRepository.findByCampaignId(scenarioAnswerDTO.getCampaignId());
if(campaign != null) {
if (campaign.getStatus() == 0L || campaign.getStatus() == 1L) {
scenarioAnswerRepository.deleteById(scenarioAnswerDTO.scenarioAnswerId);
campaignLog = new CampaignLog();
campaignLog.setCompanySiteId(scenarioAnswerDTO.getCompanySiteId());
campaignLog.setCreateTime(new Date());
campaignLog.setAgentId(null);
campaignLog.setTableName("SCENARIO_ANSWER");
campaignLog.setDescription("Xoa cau tra loi");
campaignLog.setCampaignId(scenarioAnswerDTO.getCampaignId());
campaignLog.setCustomerId(scenarioAnswerDTO.getScenarioAnswerId());
campaignLogRepository.save(campaignLog);
}
else {
ScenarioAnswer answer = scenarioAnswerRepository.findScenarioAnswerByScenarioAnswerId(scenarioAnswerDTO.getScenarioAnswerId());
answer.setStatus((short) 0);
answer.setDeleteTime(new Date());
scenarioAnswerRepository.save(answer);
campaignLog = new CampaignLog();
campaignLog.setCompanySiteId(scenarioAnswerDTO.getCompanySiteId());
campaignLog.setCreateTime(new Date());
campaignLog.setAgentId(null);
campaignLog.setTableName("SCENARIO_ANSWER");
campaignLog.setDescription("Chinh sua tra loi");
campaignLog.setCampaignId(scenarioAnswerDTO.getCampaignId());
campaignLog.setCustomerId(scenarioAnswerDTO.getScenarioAnswerId());
campaignLogRepository.save(campaignLog);
}
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
}
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
}
package com.viettel.campaign.service.impl;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.*;
import com.viettel.campaign.repository.ccms_full.CampaignLogRepository;
import com.viettel.campaign.repository.ccms_full.CampaignRepository;
import com.viettel.campaign.repository.ccms_full.ScenarioAnswerRepository;
import com.viettel.campaign.repository.ccms_full.ScenarioQuestionRepository;
import com.viettel.campaign.service.ScenarioQuestionService;
import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.ScenarioAnswerDTO;
import com.viettel.campaign.web.dto.ScenarioQuestionDTO;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
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.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @author anhvd_itsol
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class ScenarioQuestionServiceImpl implements ScenarioQuestionService {
private static final Logger logger = LogManager.getLogger(ScenarioQuestionServiceImpl.class);
@Autowired
ScenarioQuestionRepository scenarioQuestionRepository;
@Autowired
CampaignLogRepository campaignLogRepository;
@Autowired
ScenarioAnswerRepository scenarioAnswerRepository;
@Autowired
CampaignRepository campaignRepository;
@Autowired
ModelMapper modelMapper;
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO findByScenarioIdAndCampaignIdAndCompanySiteId(Long scenarioId, Long campaignId, Long companySiteId) {
ResultDTO resultDTO = new ResultDTO();
try {
List<ScenarioQuestion> lst = scenarioQuestionRepository.findScenarioQuestionsByScenarioIdAndCampaignIdAndCompanySiteIdAndStatusOrderByOrderIndex(scenarioId, campaignId, companySiteId, (short) 1);
resultDTO.setData(lst);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO add(ScenarioQuestionDTO scenarioQuestionDTO) {
ResultDTO resultDTO = new ResultDTO();
List<ScenarioAnswerDTO> lstAnswers = new ArrayList<>();
List<ScenarioAnswer> lstAnswersToInsert = new ArrayList<>();
try {
ScenarioQuestion scenarioQuestion = modelMapper.map(scenarioQuestionDTO, ScenarioQuestion.class);
scenarioQuestion.setCreateTime(new Date());
scenarioQuestion.setStatus((short) 1);
scenarioQuestionRepository.save(scenarioQuestion);
if (scenarioQuestionDTO.getLstAnswers().size() > 0) {
lstAnswers = scenarioQuestionDTO.getLstAnswers();
lstAnswers.forEach(item -> {
item.setCode(scenarioQuestion.getScenarioQuestionId() + "_" + item.getOrderIndex());
item.setScenarioQuestionId(scenarioQuestion.getScenarioQuestionId());
item.setCreateTime(new Date());
item.setStatus((short) 1);
ScenarioAnswer answer = modelMapper.map(item, ScenarioAnswer.class);
lstAnswersToInsert.add(answer);
});
scenarioAnswerRepository.saveAll(lstAnswersToInsert);
CampaignLog campaignLogAnswer = new CampaignLog();
campaignLogAnswer.setCompanySiteId(scenarioQuestion.getCompanySiteId());
campaignLogAnswer.setCreateTime(new Date());
campaignLogAnswer.setAgentId(null);
campaignLogAnswer.setTableName("SCENARIO_ANSWER");
campaignLogAnswer.setColumnName(null);
campaignLogAnswer.setPreValue(null);
campaignLogAnswer.setPostValue(null);
campaignLogAnswer.setDescription("Them moi cau tra loi rieng le");
campaignLogAnswer.setCampaignId(scenarioQuestion.getCampaignId());
campaignLogAnswer.setCustomerId(scenarioQuestion.getScenarioQuestionId());
campaignLogRepository.save(campaignLogAnswer);
}
CampaignLog campaignLog = new CampaignLog();
campaignLog.setCompanySiteId(scenarioQuestion.getCompanySiteId());
campaignLog.setCreateTime(new Date());
campaignLog.setAgentId(null);
campaignLog.setTableName("SCENARIO_QUESTION");
campaignLog.setColumnName(null);
campaignLog.setPreValue(null);
campaignLog.setPostValue(null);
campaignLog.setDescription("Them moi cau hoi rieng le");
campaignLog.setCampaignId(scenarioQuestion.getCampaignId());
campaignLog.setCustomerId(scenarioQuestion.getScenarioQuestionId());
campaignLogRepository.save(campaignLog);
resultDTO.setData(scenarioQuestion);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public Long getMaxOrderId(Long scenarioId, Long campaignId, Long companySiteId) {
try {
Long index = scenarioQuestionRepository.getMaxOrderId(scenarioId, campaignId, companySiteId);
if(index == null) return 0L; else return index;
}catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
return null;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public Integer countDuplicateQuestionCode(String code, Long scenarioId, Long campaignId, Long companySiteId) {
try {
return scenarioQuestionRepository.countDuplicateQuestionCode(code, scenarioId, campaignId, companySiteId);
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
return null;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO delete(ScenarioQuestionDTO scenarioQuestionDTO) {
ResultDTO resultDTO = new ResultDTO();
CampaignLog campaignLog;
try {
//find campaign
Campaign campaign = campaignRepository.findByCampaignId(scenarioQuestionDTO.getCampaignId());
if (campaign != null) {
if (campaign.getStatus() == 0L || campaign.getStatus() == 1L) {
//delete question by questionId
scenarioQuestionRepository.deleteById(scenarioQuestionDTO.getScenarioQuestionId());
campaignLog = new CampaignLog();
campaignLog.setCompanySiteId(scenarioQuestionDTO.getCompanySiteId());
campaignLog.setCreateTime(new Date());
campaignLog.setTableName("SCENARIO_QUESTION");
campaignLog.setDescription("Xoa cau hoi");
campaignLog.setCampaignId(scenarioQuestionDTO.getCampaignId());
campaignLog.setCustomerId(scenarioQuestionDTO.getScenarioQuestionId());
campaignLogRepository.save(campaignLog);
//delete answer by questionId
scenarioAnswerRepository.deleteScenarioAnswersByScenarioQuestionId(scenarioQuestionDTO.getScenarioQuestionId());
campaignLog = new CampaignLog();
campaignLog.setCompanySiteId(scenarioQuestionDTO.getCompanySiteId());
campaignLog.setCreateTime(new Date());
campaignLog.setTableName("SCENARIO_ANSWER");
campaignLog.setDescription("Xoa cau tra loi");
campaignLog.setCampaignId(scenarioQuestionDTO.getCampaignId());
campaignLog.setCustomerId(scenarioQuestionDTO.getScenarioQuestionId());
campaignLogRepository.save(campaignLog);
} else {
//get and update status question
ScenarioQuestion scenarioQuestion = scenarioQuestionRepository.findScenarioQuestionByScenarioQuestionId(scenarioQuestionDTO.getScenarioQuestionId());
scenarioQuestion.setStatus((short) 0);
scenarioQuestion.setDeleteTime(new Date());
scenarioQuestionRepository.save(scenarioQuestion);
campaignLog = new CampaignLog();
campaignLog.setCompanySiteId(scenarioQuestionDTO.getCompanySiteId());
campaignLog.setCreateTime(new Date());
campaignLog.setTableName("SCENARIO_QUESTION");
campaignLog.setDescription("Chinh sua cau hoi");
campaignLog.setCampaignId(scenarioQuestionDTO.getCampaignId());
campaignLog.setCustomerId(scenarioQuestionDTO.getScenarioQuestionId());
campaignLogRepository.save(campaignLog);
List<ScenarioAnswer> lstAnswer = scenarioAnswerRepository.findByScenarioQuestionIdAndCompanySiteIdAndStatus(scenarioQuestion.getScenarioQuestionId(),
scenarioQuestion.getCompanySiteId(), (short) 1);
if(lstAnswer.size() > 0) {
lstAnswer.forEach(answer -> {
answer.setStatus((short) 0);
answer.setDeleteTime(new Date());
CampaignLog log = new CampaignLog();
log.setCompanySiteId(scenarioQuestionDTO.getCompanySiteId());
log.setCreateTime(new Date());
log.setTableName("SCENARIO_ANSWER");
log.setDescription("Chinh sua cau tra loi");
log.setCampaignId(scenarioQuestionDTO.getCampaignId());
log.setCustomerId(answer.getScenarioAnswerId());
campaignLogRepository.save(log);
});
}
}
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
}
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
}
package com.viettel.campaign.service.impl;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.Scenario;
import com.viettel.campaign.model.ccms_full.ScenarioAnswer;
import com.viettel.campaign.model.ccms_full.ScenarioQuestion;
import com.viettel.campaign.repository.ccms_full.ScenarioAnswerRepository;
import com.viettel.campaign.repository.ccms_full.ScenarioQuestionRepository;
import com.viettel.campaign.repository.ccms_full.ScenarioRepository;
import com.viettel.campaign.service.ScenarioService;
import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.ScenarioAnswerDTO;
import com.viettel.campaign.web.dto.ScenarioDTO;
import com.viettel.campaign.web.dto.ScenarioQuestionDTO;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @author anhvd_itsol
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class ScenarioServiceImpl implements ScenarioService {
private static final Logger logger = LogManager.getLogger(ScenarioServiceImpl.class);
@Autowired
ScenarioRepository scenarioRepository;
@Autowired
ScenarioQuestionRepository questionRepository;
@Autowired
ScenarioAnswerRepository answerRepository;
@Autowired
ModelMapper modelMapper;
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public Scenario findScenarioByCampaignIdAndCompanySiteId(Long campaignId, Long companySiteId) {
try {
return scenarioRepository.findScenarioByCampaignIdAndCompanySiteId(campaignId, companySiteId);
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
return null;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO update(ScenarioDTO scenarioDTO) {
ResultDTO resultDTO = new ResultDTO();
try {
scenarioDTO.setUpdateBy(null);
scenarioDTO.setUpdateTime(new Date());
Scenario scenario = modelMapper.map(scenarioDTO, Scenario.class);
scenarioRepository.save(scenario);
resultDTO.setData(scenario);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
@Override
public ResultDTO sortQuestionAndAnswer(ScenarioDTO scenarioDTO) {
ResultDTO resultDTO = new ResultDTO();
try {
List<ScenarioQuestionDTO> lstQuestion = scenarioDTO.getLstQuestion();
List<ScenarioAnswerDTO> lstAnswer = scenarioDTO.getLstAnswer();
List<ScenarioQuestion> questionsToSort = new ArrayList<>();
List<ScenarioAnswer> answersToSort = new ArrayList<>();
if (lstQuestion.size() > 0) {
lstQuestion.forEach(item -> {
ScenarioQuestion question = questionRepository.findScenarioQuestionByScenarioQuestionId(item.getScenarioQuestionId());
if (question != null) {
question.setOrderIndex(item.getOrderIndex());
questionsToSort.add(question);
}
});
questionRepository.saveAll(questionsToSort);
}
if (lstAnswer.size() > 0) {
lstAnswer.forEach(item -> {
ScenarioAnswer answer = answerRepository.findScenarioAnswerByScenarioAnswerId(item.getScenarioAnswerId());
if (answer != null) {
answer.setOrderIndex(item.getOrderIndex());
answersToSort.add(answer);
}
});
answerRepository.saveAll(answersToSort);
}
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
}
package com.viettel.campaign.service.impl;
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;
import java.util.List;
import java.util.Map;
@Service
public class TicketServiceImpl implements TicketService {
@Autowired
TicketRepository ticketRepository;
@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<>();
lst = ticketRepository.getHistory(customerId, PageRequest.of(page, pageSize, Sort.by(sort)));
result.put("totalItem", lst.size());
result.put("tickets", lst);
return result;
}
}
package com.viettel.campaign.service.impl;
import com.viettel.campaign.service.UserActionLogService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* @author anhvd_itsol
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class UserActionLogServiceImpl implements UserActionLogService {
}
package com.viettel.campaign.utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.UnsupportedEncodingException;
import java.util.Locale;
import java.util.ResourceBundle;
/**
* @author hungtt
*/
public class BundleUtils {
protected static final Logger logger = LoggerFactory.getLogger(BundleUtils.class);
private static volatile ResourceBundle rsConfig = null;
public static String getLangString(String key, Locale... locale) {
Locale vi = new Locale("vi");
Locale mlocale = vi;
try {
if(locale != null) {
if(locale.length == 0) {
rsConfig = ResourceBundle.getBundle(Constants.LANGUAGE.LANGUAGE, mlocale);
} else {
rsConfig = ResourceBundle.getBundle(Constants.LANGUAGE.LANGUAGE, locale[0]);
}
} else {
rsConfig = ResourceBundle.getBundle(Constants.LANGUAGE.LANGUAGE, mlocale);
}
return new String(rsConfig.getString(key).getBytes("ISO-8859-1"), "UTF-8");
} catch (UnsupportedEncodingException e) {
logger.error(e.getMessage(), e);
return key;
}
}
}
package com.viettel.campaign.utils;
import com.viettel.security.PassTranformer;
import org.apache.log4j.Logger;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
/**
* @author hanv_itsol
* @project campaign
*/
public class Config {
public static final String APP_CONF_FILE_PATH = System.getProperty("user.dir") + File.separator + "etc" + File.separator + "app.conf";
public static final String LOG_CONF_FILE_PATH = System.getProperty("user.dir") + File.separator + "etc" + File.separator + "log.conf";
public static String amcd_xmlrpc_url;
public static int num_client_amcd_xmlprc;
// public static final int AGENT_ANSWER_TIMEOUT = 10;
// public static final int AGENT_ACCEPT_TIMEOUT = 10;
// public static final int SMS_ANSWER_TIMEOUT = 24 * 60 * 60;
// public static final int INTERVAL_SCAN_SMS = 100;
// public static final int NUM_SMSGW = 1;
// public static final int NUM_RETRY_SEND_SMSGW = 3;
// public static final int INTERVAL_RETRY_SEND_SMSGW = 10;
// public static final String SMS_SEND_OUT_CHANNEL = "198";
// public static final int INTERVAL_SCAN_FACEBOOK = 100;
// public static final int FACEBOOK_ANSWER_TIMEOUT = 24 * 60 * 60;
// public static final String prefixKeyRedis = "";
// public static final String redisPatternSMS = "";
// public static final String redisPatternFacebook = "";
// public static final String rabbitConnection;
// public static final String fbGatewayUser;
// public static final String fbGatewayPass;
// public static final String virtual_host;
// public static final String rb_queuename_kpi_log;
// public static final String facebook_text_queue_name;
// public static final String app_code;
// public static final String TICKET_SERVICES_URL;
public static final int redisTimeout;
public static final String redisAddress;
// public static String link_services_ticket;
private static final Properties properties = new Properties();
static {
org.apache.log4j.PropertyConfigurator.configure(Config.LOG_CONF_FILE_PATH);
try {
properties.load(new FileInputStream(APP_CONF_FILE_PATH));
} catch (IOException ex) {
Logger.getLogger(Config.class.getName()).error(ex.getMessage(), ex);
}
// PassTranformer.setInputKey("Ipcc#987654321#@!");
// rabbitConnection = properties.getProperty("rabbit_connection_string");
// fbGatewayUser = PassTranformer.decrypt(properties.getProperty("rabbit_user", "").trim());
// fbGatewayPass = PassTranformer.decrypt(properties.getProperty("rabbit_pass", "").trim());
// virtual_host = properties.getProperty("virtual_host", "/").trim();
// facebook_text_queue_name = properties.getProperty("facebook_text_queue_name", "mt2facebooktext").trim();
// rb_queuename_kpi_log = properties.getProperty("rb_queuename_kpi_log", "econtact_kpi_log").trim();
// app_code = properties.getProperty("app_code", "ECONTACT").trim();
// TICKET_SERVICES_URL = properties.getProperty("ticket_services_url", "").trim();
redisAddress = properties.getProperty("redis_address", "").trim();
redisTimeout = Integer.valueOf(properties.getProperty("redis_timeout", "3000").trim());
// link_services_ticket = properties.getProperty("link_services_ticket");
}
private static String getString(String key, String defaultValue) {
return properties.getProperty(key, defaultValue).trim();
}
private static int getInt(String key, int defaultValue) {
return Integer.valueOf(properties.getProperty(key, "" + defaultValue).trim());
}
}
......@@ -17,4 +17,30 @@ public class Constants {
String xls = "xls";
String xlsx = "xlsx";
}
public interface Status {
Long ACTIVE = 1L;
Long INACTIVE = 0L;
String ACTIVE_STR = "Hoạt động";
String INACTIVE_STR = "Không hoạt động";
}
public interface TypeStatus {
Long ACTIVE = 1L;
Long INACTIVE = 0L;
String ACTIVE_STR = "Trạng thái kêt nối(Không thành công)";
String INACTIVE_STR = "Trạng thái khảo sát";
}
public interface SQL_MODULES {
String MODULE_EXECUTE = "campaign-execute";
}
public interface LANGUAGE {
String LANGUAGE = "i18n/language";
}
public interface DATE_FORMAT {
String FOMART_DATE_TYPE_1 = "DD/MM/YYYY";
}
}
......@@ -266,4 +266,9 @@ public class DataUtil {
}
return input;
}
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.commons.lang3.SerializationUtils;
import org.apache.log4j.Logger;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.HostAndPort;
import java.io.Serializable;
import java.util.*;
/**
* @author hanv_itsol
* @project campaign
*/
public class RedisUtil {
private static final Logger logger = Logger.getLogger(RedisUtil.class);
private static volatile RedisUtil INSTANCE = null;
private JedisCluster jedisCluster;
private String redisAddress;
private int redisTimeout;
private RedisUtil(JedisCluster jedisCluster) {
this.jedisCluster = jedisCluster;
}
public RedisUtil(String redisAddress, int redisTimeout) {
this.redisAddress = redisAddress;
this.redisTimeout = redisTimeout;
}
public RedisUtil() {
}
public synchronized RedisUtil setup() {
if (INSTANCE == null) {
logger.info("Start connect Redis: " + redisAddress);
Set<HostAndPort> hostAndPortNodes = new HashSet();
String[] hostAndPorts = redisAddress.split(",");
for (String hostAndPort : hostAndPorts) {
String[] parts = hostAndPort.split(":");
String host = parts[0];
int port = Integer.parseInt(parts[1].trim());
hostAndPortNodes.add(new HostAndPort(host, port));
}
INSTANCE = new RedisUtil(new JedisCluster(hostAndPortNodes, redisTimeout));
}
return INSTANCE;
}
public static synchronized RedisUtil getInstance() {
if (INSTANCE == null) {
INSTANCE = new RedisUtil().setup();
}
return INSTANCE;
}
public JedisCluster getRedis() {
return INSTANCE.jedisCluster;
}
public void setRedisAddress(String dress) {
redisAddress = dress;
}
public void setRedisTimeout(int timeout) {
redisTimeout = timeout;
}
public String getRedisAddress() {
return redisAddress;
}
public int getRedisTimeout() {
return redisTimeout;
}
public boolean set(String key, Serializable value) {
if (key == null) {
return false;
}
// Jedis jedis = null;
try {
JedisCluster jedis = getRedis();
jedis.set(key.getBytes(), SerializationUtils.serialize(value));
jedis.expire(key.getBytes(), 60); // exprire
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
return true;
}
public Object get(String key) {
// Jedis jedis = null;
Object object = null;
try {
// jedis = pool.getResource();
JedisCluster jedis = getRedis();
byte[] value = jedis.get(key.getBytes());
if (value != null && value.length > 0) {
object = (Object) SerializationUtils.deserialize(value);
}
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
return object;
}
public void del(String key) {
// Jedis jedis = null;
// Object object = null;
try {
// jedis = pool.getResource();
JedisCluster jedis = getRedis();
jedis.del(key);
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
}
}
......@@ -3,13 +3,20 @@ import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.IOException;
import com.viettel.campaign.web.dto.BaseDTO;
import org.springframework.core.io.ClassPathResource;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
/**
* @author anhvd_itsol
*/
public class SQLBuilder {
public static final String SQL_MODULE_CAMPAIGN_MNG = "campaign-mng";
public static final String SQL_MODULE_CAMPAIGN_STATUS_MNG = "campaign-status-mng";
public static final String SQL_MODULE_CAMPAIGN_CUSTOMER_MNG = "campaign-customer-mng";
public static String getSqlQueryById(String module,
String queryId) {
......@@ -28,4 +35,16 @@ public class SQLBuilder {
}
return null;
}
public static Pageable buildPageable(BaseDTO obj) {
Pageable pageable = null;
if (DataUtil.isNullOrEmpty(obj.getSort())) {
pageable = PageRequest.of(obj.getPage(), obj.getPageSize(), null);
} else {
String[] sorts = obj.getSort().split(",");
Sort sort = new Sort(Sort.Direction.fromString(sorts[1]), sorts[0]);
pageable = PageRequest.of(obj.getPage(), obj.getPageSize(), sort);
}
return pageable;
}
}
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,7 +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;
}
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class CampaignAgentDTO extends BaseDTO {
Long campaignAgentId;
Long campaignId;
Long agentId;
Short filterType;
Integer status;
Long companySiteId;
Long reSchedule;
}
......@@ -7,7 +7,7 @@ import java.util.Date;
@Getter
@Setter
public class CampaignCompleteCodeDTO extends BaseDTO {
public class CampaignCfgDTO extends BaseDTO {
private Long campaignCompleteCodeId;
private Long campaignId;
......@@ -26,4 +26,5 @@ public class CampaignCompleteCodeDTO extends BaseDTO {
private Long companySiteId;
private Short isLock;
private Long durationLock;
private Long chanel;
}
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
@Getter
@Setter
public class CampaignCustomerDTO extends BaseDTO{
private Long campaignCustomerListId;
private Long campaignId;
private Long customerId;
private Short status;
private Long agentId;
private Date recallTime;
private Long recallCount = 0L;
private Date callTime;
private Long customerListId;
private Short inCampaignStatus;
private Date sendTime;
private Short processStatus = 0;
private Short contactStatus;
private Short redistribute;
private String sessionId;
private Long callStatus;
private Long companySiteId;
private Long complainId;
}
......@@ -3,22 +3,22 @@ package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Getter
@Setter
public class CampaignDTO extends BaseDTO {
private BigDecimal campaignId;
private BigDecimal companySiteId;
private Long campaignId;
private Long companySiteId;
private String campaignCode;
private String campaignName;
private BigDecimal chanel;
private Short chanel;
private String content;
private BigDecimal customerNumber;
private Long customerNumber;
private String target;
private BigDecimal status;
private Short status;
private Date startTime;
private Date endTime;
private Integer maxRecall;
......@@ -31,27 +31,39 @@ public class CampaignDTO extends BaseDTO {
private String campaignType;
private String product;
private Integer processStatus;
private BigDecimal dialMode;
private Long dialMode;
private String deptCode;
private String timeRange;
private String dayOfWeek;
private BigDecimal currentTimeModel;
private BigDecimal wrapupTimeConnect;
private BigDecimal wrapupTimeDisconnect;
private BigDecimal previewTime;
private BigDecimal rateDial;
private BigDecimal rateMiss;
private BigDecimal avgTimeProcess;
private BigDecimal isApplyCustLock;
private BigDecimal targetType;
private BigDecimal isTarget;
private BigDecimal campaignIvrCalledId;
private BigDecimal concurrentCall;
private Long currentTimeMode;
private Long wrapupTimeConnect;
private Long wrapupTimeDisconnect;
private Long previewTime;
private Long rateDial;
private Long rateMiss;
private Long avgTimeProcess;
private Long isApplyCustLock;
private Long targetType;
private Long isTarget;
private Long campaignIvrCalledId;
private Long concurrentCall;
private String callOutTimeInDay;
private String musicList;
private Integer timePlayMusic;
private Date campaignStart;
private Date campaignEnd;
private Integer timeWaitAgent;
private BigDecimal questIndex;
private Long questIndex;
private Long numOfJoinedCus;
private Long numOfLockCus;
private String campaignTypeName;
private Date timeRangeStartTime;
private String timeZoneHour;
private String timeZoneMinute;
private List<TimeRangeDialModeDTO> lstTimeRange;
private List<TimeZoneDialModeDTO> lstTimeZone;
private Short agentStatus;
private String sessionId;
private Long numOfInteractedCus;
private Long numOfNotInteractedCus;
}
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
/**
* @author anhvd_itsol
*/
@Getter
@Setter
public class CampaignLogDTO {
private Long campaignLogId;
private Long companySiteId;
private Date createTime;
private Long agentId;
private String tableName;
private String columnName;
private String preValue;
private String posValue;
private String description;
private Long campaignId;
private Long customerId;
}
package com.viettel.campaign.web.dto;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.Date;
@Getter
@Setter
@NoArgsConstructor
public class ContactCustResultDTO extends BaseDTO{
private Long contactCustResultId;
private Long companySiteId;
private Short callStatus;
private Short contactStatus;
private Short status;
private Integer satisfaction;
private String description;
private Date createTime;
private Long agentId;
private Date updateTime;
private Long updateBy;
private Long campaignId;
private Long oldContactCustResultId;
private Long customerId;
private Long durationCall;
private Date startCall;
private Long receiveCustLogId;
private Short ipccCallStatus;
private String callId;
private String phoneNumber;
private Date receiveTime;
private Date preEndTime;
private String urlCall;
private String transactionId;
private Date recallTime;
private Short isFinalRecall;
private Short isSendEmail = 0;
private Long saledOnTpin;
private Date endTime;
private Long waitTime;
private String dialMode;
private Long wrapupTime;
private Long timeMakeCall = 0L;
private Long timeReceiveCust = 0L;
private Short recordStatus;
private Long callTime;
private String campaignName;
private String customerName;
private String campaignCode;
private String userName;
private String surveyStatus;
private Boolean enableEdit;
}
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class ContactQuestResultDTO extends BaseDTO {
private Long contactQuestResultId;
private Long contactCustResultId;
private Long companySiteId;
private Long scenarioQuestionId;
private String otherOpinion;
private Long scenarioAnswerId;
private Short status;
private Long oldContactCustResultId;
private Long customerId;
private Long campaignId;
}
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
@Getter
@Setter
public class CustomerContactDTO extends BaseDTO {
private Long contactId;
private Long customerId;
private Short contactType;
private String contact;
private Short isDirectLine;
private Short status;
private Date createDate;
private Date updateDate;
private String createBy;
private String updateBy;
private Date startDate;
private Date endDate;
}
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class CustomerCustomDTO {
Long customerListMappingId;
Long companySiteId;
Long customerListId;
Long customerId;
String name;
String description;
String companyName;
String customerType;
String currentAddress;
Short callAllowed;
Short emailAllowed;
Short smsAllowed;
String ipccStatus;
String mobileNumber;
String email;
String connectStatus;
String connectTime;
String customerName;
Long campaignCustomerId;
}
......@@ -3,20 +3,25 @@ package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
@Getter
@Setter
public class CustomerListDTO extends BaseDTO {
private String customerListId;
private String customerListPK;
private String customerSiteId;
private Long customerListId;
// private String customerListPK;
private Long companySiteId;
private String customerListCode;
private String customerListName;
private String status;
private Short status;
private String createBy;
private String createAt;
private Date createAt;
private String updateBy;
private String updateAt;
private Date updateAt;
private String source;
private String deptCreate;
private Long totalCusInList;
private Long totalCusInteract;
private Long totalCusNotInteract;
}
package com.viettel.campaign.web.dto;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.Date;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class CustomizeFieldDTO {
private Long customizeFieldObjectId;
private Long objectId;
private Long customizeFieldId;
private String valueText;
private Long valueNumber;
private Date valueDate;
private Long valueCheckbox;
private Date createBy;
private Date createDate;
private String updateBy;
private Date updateDate;
private Long status;
private Long fieldOptionValueId;
private String title;
private String functionCode;
}
package com.viettel.campaign.web.dto;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.Date;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class DynamicExcelHeaderDTO {
private Long customizeFieldId;
private Long siteId;
private String functionCode;
private String createBy;
private Date createDate;
private String updateBy;
private Date updateDate;
private Long status;
private String type;
private String title;
private String placeholder;
private String description;
private Long position;
private Long required;
private Long fieldOptionsId;
private String regexpForValidation;
private Long maxLength;
private Long minLength;
private Long min;
private Long max;
private Long active;
}
package com.viettel.campaign.web.dto;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.io.Serializable;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class FieldsToShowDTO extends BaseDTO implements Serializable {
private Long campaignCusListColId;
private Long companySiteId;
private Long campaignId;
private String columnName;
private String columnTitle;
private Long orderIndex;
private Long customizeFieldId;
private String customizeFieldTitle;
private Boolean isFix;
}
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
@Getter
@Setter
public class ReceiveCustLogDTO {
private Long receiveCustLogId;
private Long companySiteId;
private Long customerId;
private Date startTime;
private Long agentId;
private Long campaignId;
private Date endTime;
}
......@@ -9,9 +9,9 @@ import java.util.List;
@Getter
@Setter
public class ResultDTO {
private String errorCode;
private String description;
private List<?> listData = new ArrayList();
private Object data;
private int totalRow = 0;
}
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.Date;
/**
* @author anhvd_itsol
*/
@Getter
@Setter
public class ScenarioAnswerDTO implements Serializable {
public Long scenarioAnswerId;
public Long companySiteId;
public Long scenarioQuestionId;
public String code;
public String answer;
public Integer orderIndex;
public Short hasInput;
public Short status;
public Date createTime;
public Date deleteTime;
public Long mappingQuestionId;
public Long campaignId;
}
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import java.util.List;
/**
* @author anhvd_itsol
*/
@Getter
@Setter
public class ScenarioDTO {
private Long scenarioId;
private Long companySiteId;
private Long campaignId;
private String code;
private String description;
private String createBy;
private Date createTime;
private Long updateBy;
private Date updateTime;
private List<ScenarioQuestionDTO> lstQuestion;
private List<ScenarioAnswerDTO> lstAnswer;
}
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* @author anhvd_itsol
*/
@Getter
@Setter
public class ScenarioQuestionDTO implements Serializable {
private Long scenarioQuestionId;
private Long companySiteId;
private Long campaignId;
private Long scenarioId;
private String code;
private Short type;
private String question;
private Long orderIndex;
private Short status;
private Date createTime;
private Date deleteTime;
private Short isRequire;
private Short isDefault;
private Short answerIndex;
private List<ScenarioAnswerDTO> lstAnswers;
}
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
@Getter
@Setter
public class TicketDTO extends BaseDTO {
private Long ticketId;
private Long sourceId;
private Date createDate;
private String refId;
private Long customerId;
private Short ticketStatus;
private Short responseStatus;
private Short priorityId;
private Date resolveSla;
private Date firstResponeSla;
private String agentProcess;
private Date firstResponeDate;
private Date resolveDate;
private Date assignDate;
private Date secondResponeDate;
private String agentId;
private Long ticketSlaId;
private Long companyId;
private Long siteId;
private Date requestDate;
private Date lastRequestDate;
private Long ticketTypeId;
private Long ticketTypeTemp;
private Date secondResponeSla;
private Long cooperateId;
private String subject;
private String customerName;
private String sourceName;
private Long chanelId;
private int overDue;
private String fromDate;
private String toDate;
private String customerCode;
private String agentAssignId;
private String agentAssign;
private String userLogin;
private Long readed;
private String emailFrom;
private String ticketTypeName;
private Short ticketStatusTemp;
private Short priorityTemp;
private Long postTypeId;
private String postTypeName;
private Long postCustomer;
private Long agentAssignType;
private String reason;
private String process;
private Long agentSiteId;
private String agentRole;
private String agentAssignTemp;
private String agentAssignIdTemp;
private Long siteAssignIdTemp;
private Long siteAssign;
private Double dateDiff;
private String fromUser;
private Long sendType;
private String content;
private Date createDateDetail;
private String toUser;
private String postContent;
private Date postTime;
private String link;
private Long numLike;
private Long numShare;
private Long numView;
private Double timeResponse;
private String name;
private String lastReflect;
private String statusName;
private String priorityName;
private String siteName;
private int maxRow;
private String channelName;
private String sendTypeName;
private Date fromDateValue;
private Date toDateValue;
}
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
/**
* @author anhvd_itsol
*/
@Getter
@Setter
public class TimeRangeDialModeDTO {
private Long timeRangeDialModeId;
private Long companySiteId;
private Date startTime;
private Long campaignId;
private Short dialMode;
private Long userId;
}
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
/**
* @author anhvd_itsol
*/
@Getter
@Setter
public class TimeZoneDialModeDTO {
private Long timeZoneDialModeId;
private Long companySiteId;
private String hour;
private String minute;
private Long campaignId;
private Short dialMode;
private Long userId;
}
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
/**
* @author anhvd_itsol
*/
@Getter
@Setter
public class UserActionLogDTO {
private Long agentId; //userId
private Long companySiteId;
private String sessionId;
private Date startTime;
private Date endTime;
private Short actionType;
private String description;
private Long objectId; //campaignId
}
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
@Getter
@Setter
public class VSAUsersDTO {
Long userId;
String userName;
Short status;
String fullName;
// Long userTypeId;
// Date createDate;
// String description;
// String staffCode;
// Long managerId;
// Long locationId;
// Long deptId;
// String deptLevel;
// Long posId;
// String deptName;
// Long groupId;
// Long siteId;
Long companySiteId;
// Short agentType;
// String mobileNumber;
// String facebookId;
// Short loginType;
// String googleId;
// String email;
// Long availableTicket;
// String userKazooId;
Short filterType;
Long campaignAgentId;
}
package com.viettel.campaign.web.dto.request_dto;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
public class CampaignAgentRequestDTO {
Long companySiteId;
Long campaignId;
List<Long> agentId;
}
package com.viettel.campaign.web.dto.request_dto;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
public class CampaignCfgRequestDTO {
List<Long> listId;
Long companySiteId;
Long campaignCompleteCodeID;
}
package com.viettel.campaign.dto.request_dto;
package com.viettel.campaign.web.dto.request_dto;
import com.viettel.campaign.web.dto.BaseDTO;
import com.viettel.campaign.web.dto.CustomerCustomDTO;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import java.util.List;
/**
* @author anhvd_itsol
*/
@Getter
@Setter
public class CampaignRequestDTO extends BaseDTO {
String campaignCode;
String campaignName;
Short status;
Date fromDateFr;
Date fromDateTo;
Date toDateTo;
Date toDateFr;
String fromDateFr;
String fromDateTo;
String toDateTo;
String toDateFr;
Long numOfCusFr;
Long numOfCusTo;
Short type;
Short chanel;
String companySiteId;
String agentId;
String types;
String phoneNumber;
String contactStatus;
String campaignStatus;
String customerId;
String customerName;
String callTimeTo;
String callTimeFrom;
String recordStatus;
String connectStatus;
String toDate;
String fromDate;
String campaignType;
String agentName;
String campaignId;
String surveyStatus;
String roleUser;
String contactCustId;
List<CustomerCustomDTO> customerCustomDTOList;
}
package com.viettel.campaign.web.dto.request_dto;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
@Getter
@Setter
public class CustomerDetailRequestDTO {
Long companySiteId;
Long customerListId;
Long customerId;
String title;
String type;
String valueCombobox;
Short valueCheckbox;
Date valueDate;
Long valueNumber;
String valueText;
}
package com.viettel.campaign.web.dto.request_dto;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
public class CustomerRequestDTO {
Long customerId;
Long customerListId;
List<Long> ids;
Long companySiteId;
}
package com.viettel.campaign.web.dto.request_dto;
import com.viettel.campaign.web.dto.BaseDTO;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class SearchCustomerRequestDTO extends BaseDTO {
String customerListCode;
String customerListName;
String convertedDateFrom;
String convertedDateTo;
String companySiteId;
}
package com.viettel.campaign.web.rest;
import com.viettel.campaign.service.AgentsService;
import com.viettel.campaign.web.dto.CampaignAgentDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.request_dto.CampaignAgentRequestDTO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
@RestController
@RequestMapping("/ipcc/agents")
@CrossOrigin(origins = "*")
public class AgentsController {
private static final Logger logger = LoggerFactory.getLogger(CampaignController.class);
@Autowired
AgentsService agentsService;
@GetMapping("/getAgentsById")
@ResponseBody
public ResponseEntity<ResultDTO> getAgentsById(@RequestParam("agentId") String agentId) {
ResultDTO result = agentsService.getAgentsByAgentId(agentId);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@GetMapping("/findAll")
@ResponseBody
public ResponseEntity<ResultDTO> listAgentByCompanySiteId(@RequestParam("page") int page, @RequestParam("pageSize") int pageSize, @RequestParam("companySiteId") Long companySiteId) {
ResultDTO result = agentsService.getAllAgentByCompanySiteId(page, pageSize, companySiteId);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@GetMapping("/findAllSelected")
@ResponseBody
public ResponseEntity<ResultDTO> listAgentSelectedByCompanySiteId(@RequestParam("page") int page, @RequestParam("pageSize") int pageSize, @RequestParam("companySiteId") Long companySiteId, @RequestParam("campaignId") Long campaignId) {
ResultDTO result = agentsService.getAllAgentSelectedByCompanySiteId(page, pageSize, companySiteId, campaignId);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@PostMapping("/createCampaignAgent")
@ResponseBody
public ResultDTO createCampaignAgent(@RequestBody @Valid CampaignAgentDTO campaignAgentDTO) {
ResultDTO result = new ResultDTO();
result = agentsService.createCampaignAgent(campaignAgentDTO);
return result;
}
@PostMapping("/deleteCampaignAgent")
@ResponseBody
public ResultDTO deleteCampaignAgentById(@RequestBody @Valid List<Long> campaignAgentId) {
ResultDTO result = new ResultDTO();
result = agentsService.deleteCampaignAgentById(campaignAgentId);
return result;
}
@GetMapping("/searchCampaignAgent")
@ResponseBody
public ResponseEntity<ResultDTO> searchCampaignAgent(@RequestParam("page") int page, @RequestParam("pageSize") int pageSize, @RequestParam("companySiteId") Long companySiteId, @RequestParam("userName") String userName, @RequestParam("fullName") String fullName) {
ResultDTO result = agentsService.searchCampaignAgentByName(page, pageSize, companySiteId, userName, fullName);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@PostMapping("/createMultipleCampaignAgent")
@ResponseBody
public ResultDTO createMultipleCampaignAgent(@RequestBody @Valid CampaignAgentRequestDTO campaignAgentRequestDTO) {
ResultDTO result = new ResultDTO();
result = agentsService.createMultipleCampaignAgent(campaignAgentRequestDTO);
return result;
}
}
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;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
......@@ -13,13 +14,23 @@ import java.util.List;
@Controller
@RequestMapping("/ipcc/apParam")
@CrossOrigin(origins = "*")
public class ApParamController {
private static final Logger LOGGER = Logger.getLogger(CustomerController.class);
private static final String CONNECT_STATUS = "CONNECT_STATUS";
private static final String CONNECT_STATUS_TYPE = "1";
private static final String SURVEY_STATUS = "SURVEY_STATUS";
private static final String SURVEY_STATUS_TYPE = "2";
private static final String CAMPAIGN_TYPE = "CAMPAIGN_TYPE";
@Autowired(required = true)
ApParamService apParamService;
@Autowired
CampaignExecuteService campaignExecuteService;
@GetMapping(path = "/findAlls")
@ResponseBody
public ResponseEntity listAllCustomer(@RequestParam("page") int page, @RequestParam("pageSize") int pageSize, @RequestParam("sort") String sort) {
......@@ -39,4 +50,35 @@ public class ApParamController {
return new ResponseEntity(lst, HttpStatus.OK);
}
@RequestMapping(path = "/findParamByParType", method = RequestMethod.GET)
public ResponseEntity findParamByParType(@RequestParam String parType) {
return new ResponseEntity<>(apParamService.findParamByParType(parType), HttpStatus.OK);
}
@GetMapping(path ="/findAllParam")
@ResponseBody
public ResponseEntity findAllParam() {
List<ApParam> findAll = apParamService.findAllParam();
if(findAll.isEmpty()) {
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
return new ResponseEntity(findAll, HttpStatus.OK);
}
//<editor-fold: hungtt>
@GetMapping("/getDataComboBox")
@ResponseBody
public ResponseEntity getComboBox(@RequestParam("parType") String parType, @RequestParam("companySiteId") String companySiteId) {
if (CONNECT_STATUS.equals(parType)) {
return new ResponseEntity<>(campaignExecuteService.getComboBoxStatus(companySiteId, CONNECT_STATUS_TYPE), HttpStatus.OK);
} else if (SURVEY_STATUS.equals(parType)){
return new ResponseEntity<>(campaignExecuteService.getComboBoxStatus(companySiteId, SURVEY_STATUS_TYPE), HttpStatus.OK);
} else {
return new ResponseEntity<>(campaignExecuteService.getComboCampaignType(companySiteId), HttpStatus.OK);
}
}
//</editor-fold: hungtt>
}
package com.viettel.campaign.web.rest;
import com.viettel.campaign.web.dto.CampaignCompleteCodeDTO;
import com.viettel.campaign.web.dto.CampaignCfgDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.service.CampaignCompleteCodeService;
import com.viettel.campaign.service.CampaignCfgService;
import com.viettel.campaign.web.dto.request_dto.CampaignCfgRequestDTO;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.Map;
@Controller
@RestController
@RequestMapping("/ipcc/completeCode")
public class CampaignCompleteCodeController {
@CrossOrigin(origins = "*")
public class CampaignCfg {
private static final Logger LOGGER = Logger.getLogger(CustomerController.class);
@Autowired
CampaignCompleteCodeService completeCodeService;
CampaignCfgService completeCodeService;
@GetMapping("/findAll")
@ResponseBody
public ResponseEntity findAllCompleteCode(@RequestParam("page") int page, @RequestParam("pageSize") int pageSize, @RequestParam("sort") String sort) {
Map result = completeCodeService.listAllCompleteCode(page, pageSize, sort);
public ResponseEntity findAllCompleteCode(@RequestParam("page") int page, @RequestParam("pageSize") int pageSize, @RequestParam("sort") String sort,@RequestParam("companySiteId") Long companySiteId) {
ResultDTO result = completeCodeService.listAllCompleteCode(page, pageSize, sort,companySiteId);
return new ResponseEntity<>(result, HttpStatus.OK);
}
......@@ -38,7 +38,7 @@ public class CampaignCompleteCodeController {
@PostMapping("/create")
@ResponseBody
public ResultDTO createCompleteCode(@RequestBody @Valid CampaignCompleteCodeDTO completeCodeDTO) {
public ResultDTO createCompleteCode(@RequestBody @Valid CampaignCfgDTO completeCodeDTO) {
ResultDTO result = new ResultDTO();
//LogUtil logUtil = new LogUtil();
//logUtil.initKpiLog("createCust")
......@@ -57,15 +57,12 @@ public class CampaignCompleteCodeController {
@PostMapping("/update")
@ResponseBody
public ResultDTO updateCompleteCode(@RequestBody @Valid CampaignCompleteCodeDTO completeCodeDTO) {
public ResultDTO updateCompleteCode(@RequestBody @Valid CampaignCfgDTO completeCodeDTO
) {
ResultDTO result = new ResultDTO();
//LogUtil logUtil = new LogUtil();
//logUtil.initKpiLog("createCust");
try {
//LOGGER.info("Returning createCustomer: start");
result = completeCodeService.updateCompleteCode(completeCodeDTO);
//LOGGER.info("Returning createCustomer:" + result.getErrorCode());
//logUtil.endKpiLog(customerDTO, 0, result.getErrorCode(), result.getDetail(), CustomerController.class, customerDTO.getAgentProcess(), this.serverPort);
} catch (Exception e) {
result.setErrorCode("-1");
LOGGER.error(e);
......@@ -73,12 +70,61 @@ public class CampaignCompleteCodeController {
}
return result;
}
@GetMapping("/edit")
@ResponseBody
public ResultDTO findCampaignCodeById(@RequestParam("campaignCompleteCodeId") Long campaignCompleteCodeId){
ResultDTO resultDTO = new ResultDTO();
try{
resultDTO = completeCodeService.editCampaignCompleteCode(campaignCompleteCodeId);
}catch (Exception e){
resultDTO.setErrorCode("-1");
LOGGER.error(e);
}
return resultDTO;
}
@PostMapping("/delete")
@ResponseBody
public ResultDTO deleteCompleteCode(@RequestBody @Valid CampaignCompleteCodeDTO completeCodeDTO) {
public ResultDTO deleteCompleteCode(@RequestBody @Valid CampaignCfgRequestDTO campaignCfgRequestDTO) {
ResultDTO result = new ResultDTO();
result = completeCodeService.deleteCompleteCode(completeCodeDTO);
result = completeCodeService.deleteCompleteCode(campaignCfgRequestDTO);
return result;
}
@PostMapping("/listDelete")
@ResponseBody
public ResponseEntity<ResultDTO> deleteLists(@RequestBody @Valid CampaignCfgRequestDTO campaignCfgRequestDTO){
ResultDTO resultDTO = completeCodeService.deleteList(campaignCfgRequestDTO);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
@PostMapping("/deleteById")
@ResponseBody
public ResultDTO deleteById(@RequestParam("id") Long id){
ResultDTO resultDTO = new ResultDTO();
resultDTO = completeCodeService.deleteById(id);
return resultDTO;
}
@CrossOrigin(origins = "*")
@PostMapping("/getMaxValue")
@ResponseBody
public ResultDTO findMaxValueCampaignType(@RequestBody CampaignCfgDTO completeCodeDTO){
return completeCodeService.findMaxValueCampaignCompleteCode(completeCodeDTO);
}
@GetMapping("/getListStatus")
@ResponseBody
public ResponseEntity<ResultDTO> getListStatus(@RequestParam("completeValue") String completeValue, @RequestParam("completeType") Short completeType, @RequestParam("companySiteId") Long companySiteId) {
ResultDTO result = completeCodeService.getListStatus(completeValue, completeType, companySiteId);
return new ResponseEntity(result, HttpStatus.OK);
}
@GetMapping("/getListStatusWithoutType")
@ResponseBody
public ResponseEntity<ResultDTO> getListStatusWithoutType(@RequestParam("completeValue") String completeValue, @RequestParam("completeType") Short completeType, @RequestParam("companySiteId") Long companySiteId) {
ResultDTO result = completeCodeService.getListStatusWithoutType(completeValue, completeType, companySiteId);
return new ResponseEntity(result, HttpStatus.OK);
}
}
package com.viettel.campaign.web.rest;
import com.viettel.campaign.model.ccms_full.TimeRangeDialMode;
import com.viettel.campaign.model.ccms_full.TimeZoneDialMode;
import com.viettel.campaign.service.CampaignExecuteService;
import com.viettel.campaign.service.CampaignService;
import com.viettel.campaign.web.dto.*;
import com.viettel.campaign.web.dto.request_dto.CampaignRequestDTO;
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.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/ipcc/campaign")
@CrossOrigin
public class CampaignController {
private static final Logger logger = LoggerFactory.getLogger(CampaignController.class);
@Autowired
CampaignService campaignService;
@Autowired
CampaignExecuteService campaignExecuteService;
@PostMapping("/searchCampaignExecute")
@ResponseBody
public ResponseEntity<ResultDTO> searchCampaignExecute(@RequestBody CampaignRequestDTO requestDto, HttpServletRequest request) {
String xAuthToken = request.getHeader("X-Auth-Token");
ResultDTO result = campaignExecuteService.searchCampaignExecute(requestDto, xAuthToken);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@PostMapping("/getExecuteCampaign")
@ResponseBody
public ResponseEntity<ResultDTO> getExecuteCampaign(@RequestBody CampaignRequestDTO requestDto) {
ResultDTO result = campaignExecuteService.getExecuteCampaign(requestDto);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@PostMapping("/getCall")
@ResponseBody
public ResponseEntity<ResultDTO> getCall(@RequestBody CampaignCustomerDTO requestDto) {
ResultDTO result = campaignExecuteService.getCall(requestDto);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@PostMapping("/getCallLog")
@ResponseBody
public ResponseEntity<ResultDTO> getCallLog(@RequestBody ReceiveCustLogDTO requestDto) {
ResultDTO result = campaignExecuteService.getCallLog(requestDto);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@PostMapping("/callCustomer")
@ResponseBody
public ResponseEntity<ResultDTO> callCustomer(@RequestBody ContactCustResultDTO requestDto) {
ResultDTO result = campaignExecuteService.callCustomer(requestDto);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@PostMapping("/getAgentLogout")
@ResponseBody
public ResponseEntity<ResultDTO> getAgentLogout(@RequestBody CampaignRequestDTO requestDto) {
ResultDTO result = campaignExecuteService.getAgentLogout(requestDto);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@RequestMapping(value = "/search", method = RequestMethod.POST)
public ResponseEntity<ResultDTO> search(@RequestBody CampaignRequestDTO requestDto) {
ResultDTO result = campaignService.search(requestDto);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@RequestMapping(value = "/find-by-campaign-code", method = RequestMethod.POST)
public ResultDTO findByCampaignCode(@RequestBody CampaignRequestDTO dto) {
return campaignService.findByCampaignCode(dto);
}
@RequestMapping(method = RequestMethod.POST)
public ResultDTO addNewCampaign(@RequestBody CampaignDTO dto) {
return campaignService.addNewCampaign(dto);
}
@GetMapping("/countRecallCustomer")
@ResponseBody
public ResponseEntity countRecallCustomer(@RequestParam("companySiteId") Long companySiteId, @RequestParam("agentId") Long agentId) {
Map result = campaignService.countRecallCustomer(companySiteId, agentId);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@GetMapping("/findByCampaignId")
@ResponseBody
public ResponseEntity findByCampaignId(@RequestParam("campaignId") Long campaignId) {
ResultDTO result = campaignService.findByCampaignId(campaignId);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@GetMapping("/findCampaignTimeRangeMode")
@ResponseBody
public ResponseEntity<?> findCampaignTimeRangeMode(@RequestParam("campaignId") Long campaignId, @RequestParam("companySiteId") Long companySiteId) {
List<TimeRangeDialMode> list = campaignService.getCampaignTimeRangeMode(campaignId, companySiteId);
return new ResponseEntity<>(list, HttpStatus.OK);
}
@GetMapping("/findCampaignTimeZoneMode")
@ResponseBody
public ResponseEntity<?> findCampaignTimeZoneMode(@RequestParam("campaignId") Long campaignId, @RequestParam("companySiteId") Long companySiteId) {
List<TimeZoneDialMode> list = campaignService.getCampaignTimeZoneMode(campaignId, companySiteId);
return new ResponseEntity<>(list, HttpStatus.OK);
}
@PostMapping("/searchInteractiveResult")
@ResponseBody
public ResponseEntity<ResultDTO> searchInteractiveResult(@RequestBody CampaignRequestDTO dto) throws Exception {
ResultDTO result = campaignExecuteService.searchInteractiveResult(dto);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@PostMapping("/exportInteractiveResult")
@ResponseBody
public ResponseEntity<?> exportInteractiveResult(HttpServletResponse response, @RequestBody CampaignRequestDTO dto) {
XSSFWorkbook workbook = null;
byte[] contentReturn = null;
try {
String fileName = "report_campaign_exec_interactive_result.xlsx";
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
OutputStream outputStream;
workbook = campaignExecuteService.exportInteractiveResult(dto);
outputStream = response.getOutputStream();
workbook.write(outputStream);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
workbook.write(byteArrayOutputStream);
contentReturn = byteArrayOutputStream.toByteArray();
} catch (Exception e) {
logger.error(e.getMessage(), e);
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);
}
@RequestMapping(value = "/changeCampaignStatus", method = RequestMethod.PUT)
public ResultDTO changeCampaignStatus(@RequestBody CampaignDTO dto, HttpServletRequest request) {
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);
}
@PostMapping("/updateCampaign")
@ResponseBody
public ResponseEntity<?> updateCampaign(@RequestBody CampaignDTO dto) {
ResultDTO resultDTO = campaignService.updateCampaign(dto);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
@PostMapping("/findCustomerListReallocation")
@ResponseBody
public ResponseEntity<?> findCustomerListReallocation(@RequestBody CampaignRequestDTO dto) {
ResultDTO result = campaignService.findCustomerListReallocation(dto);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@PostMapping("/reallocationCustomer")
@ResponseBody
public ResponseEntity<?> reallocationCustomer(@RequestBody CampaignRequestDTO dto) {
ResultDTO result = campaignService.reallocationCustomer(dto);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@PostMapping("/getListFieldsNotShow")
@ResponseBody
public ResponseEntity<?> getListFieldsNotShow(@RequestBody CampaignRequestDTO dto) {
ResultDTO resultDTO = campaignService.getListFieldsNotShow(dto);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
@PostMapping("/getListFieldsToShow")
@ResponseBody
public ResponseEntity<?> getListFieldsToShow(@RequestBody CampaignRequestDTO dto) {
ResultDTO resultDTO = campaignService.getListFieldsToShow(dto);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
}
package com.viettel.campaign.web.rest;
import com.viettel.campaign.web.dto.CustomerDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.utils.RedisUtil;
import com.viettel.campaign.web.dto.*;
import com.viettel.campaign.service.CustomerService;
import com.viettel.campaign.web.dto.request_dto.SearchCustomerRequestDTO;
import com.viettel.campaign.web.dto.request_dto.CustomerRequestDTO;
import com.viettel.econtact.filter.UserSession;
import org.apache.log4j.Logger;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.http.*;
import org.springframework.stereotype.Controller;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;
@Controller
@RequestMapping("/ipcc/customer")
@CrossOrigin(origins = "*")
public class CustomerController {
private static final Logger LOGGER = Logger.getLogger(CustomerController.class);
......@@ -24,34 +36,204 @@ public class CustomerController {
@GetMapping("/findAll")
@ResponseBody
public ResponseEntity findAllCustomer(@RequestParam("page") int page, @RequestParam("pageSize") int pageSize, @RequestParam("sort") String sort) {
Map result = customerService.listAllCustomer(page, pageSize, sort);
public ResponseEntity findAllCustomer(@RequestParam("page") int page, @RequestParam("pageSize") int pageSize, @RequestParam("sort") String sort, @RequestParam("customerListId") long customerListId, @RequestParam("companySiteId") long companySiteId) {
ResultDTO result = customerService.getAllCustomer(page, pageSize, sort, customerListId, companySiteId);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@GetMapping("/findCustomerByName")
@GetMapping("/findCustomerId")
@ResponseBody
public ResponseEntity findAllCustomerName(@RequestParam("page") int page, @RequestParam("pageSize") int pageSize, @RequestParam("sort") String sort, @RequestParam("name") String name) {
Map result = customerService.listCustByName(page, pageSize, sort, name);
public ResponseEntity<ResultDTO> findAllCustomerName(@RequestParam("customerId") Long customerId) {
ResultDTO result = customerService.getCustomerId(customerId);
return new ResponseEntity(result, HttpStatus.OK);
}
@GetMapping("/searchAllCustomerByParams")
@ResponseBody
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);
}
@PostMapping(value = "/create")
@ResponseBody
public ResultDTO createCust(@RequestBody @Valid CustomerDTO customerDTO) {
public ResultDTO createCustomer(@RequestBody @Valid CustomerDTO customerDTO) {
ResultDTO result = new ResultDTO();
result = customerService.createCustomer(customerDTO);
return result;
}
@PostMapping("/delete")
@ResponseBody
public ResultDTO deleteCustomer(@RequestBody @Valid CustomerRequestDTO customerRequestDTO) {
ResultDTO result = new ResultDTO();
result = customerService.deleteCustomer(customerRequestDTO);
return result;
}
@PostMapping("/deleteIds")
@ResponseBody
public ResultDTO deleteIds(@RequestBody @Valid CustomerRequestDTO customerRequestDTO) {
ResultDTO result = new ResultDTO();
//LogUtil logUtil = new LogUtil();
//logUtil.initKpiLog("createCust");
result = customerService.deleteIds(customerRequestDTO);
return result;
}
@GetMapping("/getInformation")
@ResponseBody
public ResponseEntity getAllInformation(@RequestParam("companySiteId") Long companySiteId, @RequestParam("customerListId") Long customerListId, @RequestParam("customerId") Long customerId) {
ResultDTO result = customerService.getCustomerDetailById(companySiteId, customerListId, customerId);
return new ResponseEntity<>(result, HttpStatus.OK);
}
// --------------- customer list table ----------------- //
@GetMapping("/findAlls")
@ResponseBody
public ResponseEntity findAllCustomerList(@RequestParam("page") int page, @RequestParam("pageSize") int pageSize, @RequestParam("sort") String sort, @RequestParam("companySiteId") Long companySiteId) {
ResultDTO result = customerService.getAllCustomerList(page, pageSize, sort, companySiteId);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@PostMapping("/createCustomerList")
@ResponseBody
public ResultDTO createCustomerList(@RequestBody @Valid CustomerListDTO customerListDTO, HttpServletRequest request) {
ResultDTO result = new ResultDTO();
String xAuthToken = request.getHeader("X-Auth-Token");
UserSession userSession = (UserSession) RedisUtil.getInstance().get(xAuthToken);
result = customerService.createCustomerList(customerListDTO, userSession.getUserName());
return result;
}
@PostMapping("/updateCustomerList")
@ResponseBody
public ResultDTO updateCustomerList(@RequestBody @Valid CustomerListDTO customerListDTO) {
ResultDTO result = new ResultDTO();
result = customerService.updateCustomerList(customerListDTO);
return result;
}
@PostMapping("/deleteCustomerList")
@ResponseBody
public ResultDTO deleteCustomerList(@RequestBody @Valid CustomerListDTO customerListDTO) {
ResultDTO result = new ResultDTO();
result = customerService.deleteCustomerList(customerListDTO);
return result;
}
@PostMapping("/deleteCustomerListIds")
@ResponseBody
public ResultDTO deleteCustomerListIds(@RequestBody @Valid CustomerRequestDTO customerRequestDTO) {
ResultDTO result = new ResultDTO();
result = customerService.deleteCustomerListIds(customerRequestDTO);
return result;
}
@RequestMapping(value = "/searchCustomerList", method = RequestMethod.POST)
public ResponseEntity searchCustomerList(@RequestBody SearchCustomerRequestDTO searchCustomerRequestDTO) {
ResultDTO result = customerService.searchCustomerList(searchCustomerRequestDTO);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@GetMapping("/latestCreated")
@ResponseBody
public ResponseEntity getLatestCreated(@RequestParam("companySiteId") Long companySiteId) {
ResultDTO result = new ResultDTO();
result.setData(customerService.getLatestCreated(companySiteId));
return new ResponseEntity<>(result, HttpStatus.OK);
}
@PostMapping("/findCustomerContact")
@ResponseBody
public ResponseEntity<ResultDTO> findAllCustomerContact(@RequestBody CustomerContactDTO customerContactDTO) {
ResultDTO result = customerService.getCustomerContact(customerContactDTO);
return new ResponseEntity(result, HttpStatus.OK);
}
@PostMapping("/getCustomerRecall")
@ResponseBody
public ResponseEntity<ResultDTO> getCustomerRecall(@RequestParam("campaignId") Long campaignId, @RequestParam("customerId") Long customerId) {
ResultDTO result = customerService.getCustomerRecall(campaignId, customerId);
return new ResponseEntity(result, HttpStatus.OK);
}
//<editor-fold desc="Download and import excel" defaultState="collapsed">
@GetMapping(value = "/downloadFileTemplate")
public ResponseEntity<byte[]> downloadFileTemplate(@RequestParam("companySiteId") Long companySiteId) {
LOGGER.debug("--------DOWNLOAD FILE TEMPLATE---------");
try {
//LOGGER.info("Returning createCustomer: start");
result = customerService.createCustomer(customerDTO);
//LOGGER.info("Returning createCustomer:" + result.getErrorCode());
//logUtil.endKpiLog(customerDTO, 0, result.getErrorCode(), result.getDetail(), CustomerController.class, customerDTO.getAgentProcess(), this.serverPort);
customerService.buildTemplate(companySiteId);
File file = ResourceUtils.getFile("classpath:templates/import_customer_template.xlsx");
byte[] content = Files.readAllBytes(file.toPath());
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + file.getName())
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.body(content);
} catch (Exception e) {
result.setErrorCode("-1");
LOGGER.error(e);
//logUtil.endKpiLog(customerDTO, 1, result.getErrorCode(), e.getMessage(), CustomerController.class, customerDTO.getAgentProcess(), this.serverPort);
LOGGER.error(e.getMessage());
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
return result;
}
@PostMapping(value = "/importFile")
public ResponseEntity<byte[]> importFile(@RequestParam("file") MultipartFile file) {
LOGGER.debug("--------IMPORT FILE TEMPLATE---------");
try {
List<CustomerDTO> listCustomer = new ArrayList<>();
XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream());
XSSFSheet sheet = workbook.getSheetAt(0);
for (int i = 0; i < sheet.getPhysicalNumberOfRows(); i++) {
CustomerDTO customer = new CustomerDTO();
XSSFRow row = sheet.getRow(i);
customer.setCustomerId(Double.valueOf(row.getCell(0).getNumericCellValue()).longValue());
customer.setCreateDate(row.getCell(1).getDateCellValue());
customer.setName(row.getCell(2).getStringCellValue());
listCustomer.add(customer);
}
// for (int i = 0; i < listCustomer.size(); i++) {
// validate du lieu
// }
// if (okay) {
// for (int i = 0; i < listCustomer.size(); i++) {
// customerService.createCustomer(listCustomer.get(i));
// }
// return ResponseEntity.ok()
// .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + file.getName())
// .contentType(MediaType.APPLICATION_OCTET_STREAM)
// .body(file.getBytes());
// } else {
// return ResponseEntity.ok()
// .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + file.getName())
// .header("Message", "Validate failed!")
// .contentType(MediaType.APPLICATION_OCTET_STREAM)
// .body(file.getBytes());
// }
return null;
} catch (Exception e) {
LOGGER.error(e.getMessage());
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
}
//</editor-fold>
@PostMapping("/getCustomerListInfo")
public ResponseEntity<?> getCustomerListInfo(@RequestBody CampaignCustomerDTO dto) {
List<CustomerListDTO> customers = customerService.getCustomerListInfo(dto);
return new ResponseEntity<>(customers, HttpStatus.OK);
}
@PostMapping("/getIndividualCustomerInfo")
public ResponseEntity<?> getIndividualCustomerInfo(@RequestBody CampaignCustomerDTO dto) {
List<CustomerDTO> customers = customerService.getIndividualCustomerInfo(dto);
return new ResponseEntity<>(customers, HttpStatus.OK);
}
@PostMapping("/getCustomizeField")
public ResponseEntity<?> getCustomizeField(@RequestBody Long customerId) {
List<CustomizeFieldDTO> data = customerService.getCustomizeField(customerId);
return new ResponseEntity<>(data, HttpStatus.OK);
}
}
package com.viettel.campaign.web.rest;
import com.viettel.campaign.service.Sender;
import com.viettel.campaign.service.Producer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @author hanv_itsol
* @project service-campaign
*/
@Slf4j
@RestController
@RequestMapping(value = "/kafka")
public class KafkaController {
private final Sender sender;
private final Producer producer;
@Autowired
KafkaController(Sender sender, Producer producer) {
this.sender = sender;
this.producer = producer;
}
@PostMapping(value = "/publish")
public void sendMessageToKafkaTopic(@RequestParam("message") String message) {
log.info("message: " + message);
this.producer.sendMessage(message);
}
@PostMapping(value = "/publish2")
public void sendMessageToKafkaTopic2(@RequestParam("message") String message) {
log.info("message: " + message);
this.producer.sendMessageTopic2(message);
}
@GetMapping(value = "/test")
public void test(){
sender.send("hanv", "haha");
}
}
//package com.viettel.campaign.web.rest;
//
//import com.viettel.campaign.service.Sender;
//import com.viettel.campaign.service.Producer;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.web.bind.annotation.*;
//
///**
// * @author hanv_itsol
// * @project service-campaign
// */
//@Slf4j
//@RestController
//@RequestMapping(value = "/kafka")
//public class KafkaController {
//
// private final Sender sender;
//
// private final Producer producer;
//
// @Autowired
// KafkaController(Sender sender, Producer producer) {
// this.sender = sender;
// this.producer = producer;
// }
//
// @PostMapping(value = "/publish")
// public void sendMessageToKafkaTopic(@RequestParam("message") String message) {
// log.info("message: " + message);
// this.producer.sendMessage(message);
// }
//
// @PostMapping(value = "/publish2")
// public void sendMessageToKafkaTopic2(@RequestParam("message") String message) {
// log.info("message: " + message);
// this.producer.sendMessageTopic2(message);
// }
//
// @GetMapping(value = "/test")
// public void test(){
// sender.send("hanv", "haha");
// }
//}
package com.viettel.campaign.web.rest;
import com.viettel.campaign.service.ScenarioAnswerService;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.ScenarioAnswerDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
/**
* @author anhvd_itsol
*/
@RestController
@RequestMapping("/ipcc/campaign/scenario-answer")
@CrossOrigin
public class ScenarioAnswerController {
@Autowired
ScenarioAnswerService scenarioAnswerService;
@RequestMapping(value = "/findByScenarioQuestionCompany", method= RequestMethod.GET)
public ResponseEntity<ResultDTO> findByScenarioQuestionCampaignCompany(@RequestParam Long scenarioQuestionId,
@RequestParam Long companySiteId) {
ResultDTO resultDTO = scenarioAnswerService.findByScenarioQuestionCompany(scenarioQuestionId, companySiteId);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
@RequestMapping(value = "/get-max-orderId", method = RequestMethod.GET)
public Long getMaxOrderId(@RequestParam Long scenarioQuestionId, @RequestParam Long companySiteId)
{
return scenarioAnswerService.getMaxAnswerOrderId(scenarioQuestionId, companySiteId);
}
@RequestMapping(value="/delete", method = RequestMethod.POST)
public ResponseEntity<ResultDTO> deleteQuestion(@RequestBody ScenarioAnswerDTO answerDTO) {
ResultDTO resultDTO = scenarioAnswerService.delete(answerDTO);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
}
package com.viettel.campaign.web.rest;
import com.viettel.campaign.model.ccms_full.Scenario;
import com.viettel.campaign.service.ScenarioService;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.ScenarioDTO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
/**
* @author anhvd_itsol
*/
@RestController
@RequestMapping("/ipcc/campaign/scenario")
@CrossOrigin
public class ScenarioController {
private static final Logger logger = LoggerFactory.getLogger(ScenarioController.class);
@Autowired
ScenarioService scenarioService;
@RequestMapping(value="/findOneByCampaignIdAndCompanyId", method = RequestMethod.GET)
Scenario findOneByCampaignIdAndCompanyId(@RequestParam Long campaignId, @RequestParam Long companySiteId) {
return scenarioService.findScenarioByCampaignIdAndCompanySiteId(campaignId, companySiteId);
}
@RequestMapping(method = RequestMethod.PUT)
ResponseEntity<ResultDTO> update(@RequestBody ScenarioDTO scenario) {
ResultDTO resultDTO = scenarioService.update(scenario);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
@RequestMapping(value = "/sort-question-answer", method = RequestMethod.POST)
ResponseEntity<ResultDTO> sortQuestionAndAnswer(@RequestBody ScenarioDTO scenarioDTO) {
ResultDTO resultDTO = scenarioService.sortQuestionAndAnswer(scenarioDTO);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
}
package com.viettel.campaign.web.rest;
import com.viettel.campaign.service.ScenarioQuestionService;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.ScenarioQuestionDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
/**
* @author anhvd_itsol
*/
@RestController
@RequestMapping("/ipcc/campaign/scenario-question")
@CrossOrigin
public class ScenarioQuestionController {
@Autowired
ScenarioQuestionService scenarioQuestionService;
@RequestMapping(value = "/find-by-scenarioId-campaignId-companySiteId", method = RequestMethod.GET)
public ResponseEntity<ResultDTO> findByScenarioIdAndCampaignIdAndCompanySiteId(Long scenarioId, Long campaignId, Long companySiteId){
ResultDTO resultDTO = scenarioQuestionService.findByScenarioIdAndCampaignIdAndCompanySiteId(scenarioId, campaignId, companySiteId);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<ResultDTO> add(@RequestBody ScenarioQuestionDTO scenarioQuestionDTO) {
ResultDTO resultDTO = scenarioQuestionService.add(scenarioQuestionDTO);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
@RequestMapping(value = "/get-max-orderId", method = RequestMethod.GET)
public Long getMaxOrderId(@RequestParam Long scenarioId, @RequestParam Long campaignId, @RequestParam Long companySiteId)
{
return scenarioQuestionService.getMaxOrderId(scenarioId, campaignId, companySiteId);
}
@RequestMapping(value = "/count-duplicate-question-code", method = RequestMethod.GET)
public Integer countDuplicateQuestionCode(@RequestParam String code, @RequestParam Long scenarioId, @RequestParam Long campaignId, @RequestParam Long companySiteId) {
return scenarioQuestionService.countDuplicateQuestionCode(code, scenarioId, campaignId, companySiteId);
}
}
package com.viettel.campaign.web.rest.controller;
package com.viettel.campaign.web.rest;
import com.viettel.campaign.dto.request_dto.CampaignRequestDTO;
import com.viettel.campaign.service.CampaignService;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.service.TicketService;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
......@@ -12,26 +10,19 @@ import org.springframework.web.bind.annotation.*;
import java.util.Map;
@RestController
@RequestMapping("/ipcc/campaign")
@RequestMapping("/ipcc/ticket")
@CrossOrigin
public class CampaignController {
public class TicketController {
private static final Logger LOGGER = Logger.getLogger(CampaignController.class);
private static final Logger LOGGER = Logger.getLogger(TicketController.class);
@Autowired
CampaignService campaignService;
TicketService ticketService;
@GetMapping("/searchCampaignExecute")
@GetMapping("/getHistory")
@ResponseBody
public ResponseEntity searchCampaignExecute(@RequestParam("page") int page, @RequestParam("pageSize") int pageSize, @RequestParam("sort") String sort, @RequestParam("agentId") String agentId) {
Map result = campaignService.searchCampaignExecute(page, pageSize, sort, agentId);
public ResponseEntity searchCampaignExecute(@RequestParam("page") int page, @RequestParam("pageSize") int pageSize, @RequestParam("sort") String sort, @RequestParam("customerId") String customerId) {
Map result = ticketService.getHistory(page, pageSize, sort, customerId);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@RequestMapping(value = "/search",method = RequestMethod.POST)
public ResponseEntity<ResultDTO> search(@RequestBody CampaignRequestDTO requestDto) {
ResultDTO result = campaignService.search(requestDto);
return new ResponseEntity<>(result, HttpStatus.OK);
}
}
package com.viettel.econtact.filter;
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
import java.io.Serializable;
/**
*
* @author ThaoNT19
*/
public class UserSession implements Serializable{
String authToken;
String ownserId;
String accountId;
Long userId;
String userName;
String role;
Long siteId;
Long companySiteId;
long expTime;
public long getExpTime() {
return expTime;
}
public void setExpTime(long expTime) {
this.expTime = expTime;
}
public String getAuthToken() {
return authToken;
}
public void setAuthToken(String authToken) {
this.authToken = authToken;
}
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getOwnserId() {
return ownserId;
}
public void setOwnserId(String ownserId) {
this.ownserId = ownserId;
}
public String getAccountId() {
return accountId;
}
public void setAccountId(String accountId) {
this.accountId = accountId;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public Long getSiteId() {
return siteId;
}
public void setSiteId(Long siteId) {
this.siteId = siteId;
}
public Long getCompanySiteId() {
return companySiteId;
}
public void setCompanySiteId(Long companySiteId) {
this.companySiteId = companySiteId;
}
}
/**
* @project campaign
* @author hanv_itsol
*/
package com.viettel.econtact;
\ No newline at end of file
......@@ -3,11 +3,6 @@ server:
spring:
application:
name: campaign
datasource:
driver-class-name: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@10.60.157.135:1521:vt
username: CCMS_FULL
password: CCMS_FULL#123
jpa:
database-platform: org.hibernate.dialect.Oracle10gDialect
show-sql: true
......@@ -16,14 +11,33 @@ spring:
ddl-auto: none
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
kafka:
consumer:
bootstrap-servers: 192.168.1.201:9092
group-id: group_id
auto-offset-reset: earliest
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
producer:
bootstrap-servers: 192.168.1.201:9092
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
# kafka:
# consumer:
# bootstrap-servers: 192.168.1.201:9092
# group-id: group_id
# auto-offset-reset: earliest
# key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
# value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
# producer:
# bootstrap-servers: 192.168.1.201:9092
# key-serializer: org.apache.kafka.common.serialization.StringSerializer
# value-serializer: org.apache.kafka.common.serialization.StringSerializer
datasource-property:
ccms-full:
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
acd-full:
driver-class-name: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@10.60.157.135:1521:vt
username: ACD_FULL
password: ACD_FULL#123
max_pool_size: 32
#Common
detail = Detail
stt = No
#Campaign Execute Interactive
campaign.execute.interactive.title = Chi tiết kết quả tương tác
campaign.execute.interactive.campaignCode = Campaign code
campaign.execute.interactive.campaignName = Campaign name
campaign.execute.interactive.agentId = Agent id
campaign.execute.interactive.phoneNumber = Phone number
campaign.execute.interactive.customerId = Customer id
campaign.execute.interactive.customerName = Customer name
campaign.execute.interactive.createTime = Create time
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
#Campaign customer list management
CUSTOMER_ID = Id khách hàng
CODE = Mã khách hàng
NAME = Tên khách hàng
DESCRIPTION = Mô tả
COMPANY_NAME = Tên công ty
CUSTOMER_IMG = Ảnh khách hàng
CREATE_DATE = Ngày tạo
UPDATE_DATE = Ngày cập nhật
STATUS = Trạng thái
CREATE_BY = Tạo bởi
UPDATE_BY = Cập nhật bởi
SITE_ID = Mã công ty
GENDER = Giới tính
CURRENT_ADDRESS = Địa chỉ hiện tại
PLACE_OF_BIRTH = Nơi sinh
DATE_OF_BIRTH = Ngày sinh
MOBILE_NUMBER = Số điện thoại
USERNAME = Tài khoản
AREA_CODE = Khu vực
CALL_ALLOWED = CALL_ALLOWED
EMAIL_ALLOWED = EMAIL_ALLOWED
SMS_ALLOWED = SMS_ALLOWED
IPCC_STATUS = IPCC_STATUS
#Common
detail = Chi tiết
stt = STT
#Campaign Execute Interactive
campaign.execute.interactive.title = Chi tiết kết quả tương tác
campaign.execute.interactive.campaignCode = Mã chiến dịch
campaign.execute.interactive.campaignName = Tên chiến dịch
campaign.execute.interactive.agentId = Mã tư vấn viên
campaign.execute.interactive.phoneNumber = Số điện thoại
campaign.execute.interactive.customerId = Mã khách hàng
campaign.execute.interactive.customerName = Tên khách hàng
campaign.execute.interactive.createTime = Thời gian liên lạc
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
#Campaign customer list management
CUSTOMER_ID = Id khách hàng
CODE = Mã khách hàng
NAME = Tên khách hàng
DESCRIPTION = Mô tả
COMPANY_NAME = Tên công ty
CUSTOMER_IMG = Ảnh khách hàng
CREATE_DATE = Ngày tạo
UPDATE_DATE = Ngày cập nhật
STATUS = Trạng thái
CREATE_BY = Tạo bởi
UPDATE_BY = Cập nhật bởi
SITE_ID = Mã công ty
GENDER = Giới tính
CURRENT_ADDRESS = Địa chỉ hiện tại
PLACE_OF_BIRTH = Nơi sinh
DATE_OF_BIRTH = Ngày sinh
MOBILE_NUMBER = Số điện thoại
USERNAME = Tài khoản
AREA_CODE = Khu vực
CALL_ALLOWED = CALL_ALLOWED
EMAIL_ALLOWED = EMAIL_ALLOWED
SMS_ALLOWED = SMS_ALLOWED
IPCC_STATUS = IPCC_STATUS
select CUSTOMIZE_FIELD_ID customizeFieldId,
SITE_ID companySiteId,
FUNCTION_CODE functionCode,
CREATE_BY createBy,
CREATE_DATE createDate,
UPDATE_BY updateBy,
UPDATE_DATE updateDate,
STATUS status,
TYPE type,
TITLE title,
PLACEHOLDER placeholder,
DESCRIPTION description,
POSITION position,
REQUIRED required,
FIELD_OPTIONS_ID fieldOptionsId,
REGEXP_FOR_VALIDATION regexpForValidation,
MAX_LENGTH maxLength,
MIN min,
MAX max,
MIN_LENGTH minLength,
ACTIVE active
from customize_fields
where function_code = 'CUSTOMER'
and site_id = :p_company_site_id
\ No newline at end of file
select PAR_VALUE apParamId,
PAR_NAME parName
from AP_PARAM
where PAR_TYPE = 'CAMPAIGN_TYPE'
and COMPANY_SITE_ID = :p_company_site_id
and IS_DELETE = 0
select distinct COMPLETE_VALUE apParamId,
COMPLETE_NAME parName
from CAMPAIGN_COMPLETE_CODE
where to_char(COMPLETE_TYPE) = :p_complete_type and STATUS = 1 and COMPANY_SITE_ID = :p_company_site_id
with campaign_type_list as (
select trim (regexp_substr(:p_list_compaign_type, '[^,]+', 1, level)) campaign_type
from dual
connect by level <= regexp_count(:p_list_compaign_type, ',') +1
),
contact_status_list as (
select trim (regexp_substr(:p_list_contact_status, '[^,]+', 1, level)) contact_status
from dual
connect by level <= regexp_count(:p_list_contact_status, ',') +1
),
survey_status_list as (
select trim (regexp_substr(:p_list_survey_status, '[^,]+', 1, level)) survey_status
from dual
connect by level <= regexp_count(:p_list_survey_status, ',') +1
),
record_status_list as (
select trim (regexp_substr(:p_list_record_status, '[^,]+', 1, level)) record_status
from dual
connect by level <= regexp_count(:p_list_record_status, ',') +1
),
campaign_id_list as (
select trim (regexp_substr(:p_list_campaign_id, '[^,]+', 1, level)) campaign_id
from dual
connect by level <= regexp_count(:p_list_campaign_id, ',') +1
),
data_temp as (
select b.campaign_code campaignCode,
b.campaign_name campaignName,
c.user_name userName,
a.phone_number phoneNumber,
d.name customerName,
to_date(a.start_call, 'DD/MM/YYYY') startCall,
e.complete_name contactStatus,
f.complete_name surveyStatus,
g.status status,
a.status recordStatus,
(a.end_time - a.start_call)*24*60 callTime
from contact_cust_result a
left join campaign b on a.campaign_id = b.campaign_id
left join vsa_users c on a.agent_id = c.user_id
left join customer d on a.customer_id = d.customer_id
left join campaign_complete_code e on a.contact_status = e.complete_value
left join campaign_complete_code f on a.call_status = e.complete_value
left join campaign g on a.campaign_id = g.campaign_id
where a.status <> 0
and a.company_site_id = :p_company_site_id
and a.create_time >= to_date(:p_date_from, 'DD/MM/YYYY')
and a.create_time <= to_date(:p_date_to, 'DD/MM/YYYY')
and a.duration_call >= :p_call_time_from
and a.duration_call <= :p_call_time_to
and to_char(a.customer_id) like '%'||:p_customer_id||'%'
and b.campaign_type in (select campaign_type from campaign_type_list)
and to_char(a.contact_status) in (select contact_status from contact_status_list)
and to_char(a.call_status) in (select survey_status from survey_status_list)
and to_char(a.status) in (select record_status from record_status_list)
and (:p_phone_number is null or to_char(a.phone_number) like '%'||:p_phone_number||'%')
and (:p_list_campaign_id is null or b.campaign_code in (select campaign_id from campaign_id_list))
and (:p_campaign_name is null or upper(b.campaign_name) like '%'||:p_campaign_name||'%')
and (:p_user_name is null or upper(c.user_name) like '%'||:p_user_name||'%')
),
data as (
select a.*, rownum row_ from data_temp a
)
select * from data
where :p_page_size = 0 or (row_ >= ((:p_page_number - 1) * :p_page_size + 1) and row_ < (:p_page_number * :p_page_size + 1))
SELECT
a.USER_ID userId,
a.USER_NAME userName,
a.STATUS status,
a.FULL_NAME fullName,
a.COMPANY_SITE_ID companySiteId,
b.FILTER_TYPE filterType,
b.CAMPAIGN_AGENT_ID campaignAgentId
FROM VSA_USERS a
select
a.CUSTOMER_LIST_MAPPING_ID customerListMappingId,
a.COMPANY_SITE_ID companySiteId,
a.CUSTOMER_LIST_ID customerListId,
a.CUSTOMER_ID customerId,
b.NAME name,
b.DESCRIPTION description,
b.COMPANY_NAME companyName,
b.CUSTOMER_TYPE customerType,
b.CURRENT_ADDRESS currentAddress,
b.CALL_ALLOWED callAllowed,
b.EMAIL_ALLOWED emailAllowed,
b.SMS_ALLOWED smsAllowed,
b.IPCC_STATUS ipccStatus,
c.MOBILE mobileNumber,
d.EMAIL email
from CUSTOMER_LIST_MAPPING a
join CUSTOMER b on a.CUSTOMER_ID = b.CUSTOMER_ID
left join (SELECT CUSTOMER_ID, LISTAGG(CONTACT, ', ') WITHIN GROUP (ORDER BY NULL) AS MOBILE
FROM CUSTOMER_CONTACT WHERE CONTACT_TYPE = 5 GROUP BY CUSTOMER_ID) c on b.CUSTOMER_ID = c.CUSTOMER_ID
left join (SELECT CUSTOMER_ID, LISTAGG(CONTACT, ', ') WITHIN GROUP (ORDER BY NULL) AS EMAIL
FROM CUSTOMER_CONTACT WHERE CONTACT_TYPE = 2 GROUP BY CUSTOMER_ID) d on b.CUSTOMER_ID = d.CUSTOMER_ID
where 1 = 1
and a.COMPANY_SITE_ID = :p_company_site_id
and a.CUSTOMER_LIST_ID = :p_customer_list_id
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
select
a.COMPANY_SITE_ID companySiteId,
a.CUSTOMER_LIST_ID customerListId,
a.CUSTOMER_ID customerId,
e.TITLE title,
f.TYPE type,
h.VALUE_COMBOBOX valueCombobox,
e.VALUE_CHECKBOX valueCheckbox,
e.VALUE_DATE valueDate,
e.VALUE_NUMBER valueNumber,
e.VALUE_TEXT valueText
from CUSTOMER_LIST_MAPPING a
left join CUSTOMIZE_FIELD_OBJECT e on a.CUSTOMER_ID = e.OBJECT_ID
left join CUSTOMIZE_FIELDS f on e.CUSTOMIZE_FIELDS_ID = f.CUSTOMIZE_FIELD_ID
left join (SELECT FIELD_OPTION_VALUE_ID, NAME AS VALUE_COMBOBOX
FROM CUSTOMIZE_FIELD_OPTION_VALUE) h on h.FIELD_OPTION_VALUE_ID = e.FIELD_OPTION_VALUE_ID
where 1 = 1
and a.COMPANY_SITE_ID = :p_company_site_id
and a.CUSTOMER_LIST_ID = :p_customer_list_id
and a.CUSTOMER_ID = :p_customer_id
select CUSTOMIZE_FIELD_OBJECT_ID customizeFieldObjectId,
OBJECT_ID objectId,
CUSTOMIZE_FIELDS_ID customizeFieldId,
VALUE_TEXT valueText,
VALUE_NUMBER valueNumber,
VALUE_DATE valueDate,
VALUE_CHECKBOX valueCheckbox,
CREATE_BY createBy,
CREATE_DATE createDate,
UPDATE_BY updateBy,
UPDATE_DATE updateDate,
STATUS status,
FIELD_OPTION_VALUE_ID fieldOptionValueId,
TITLE title,
FUNCTION_CODE functionCode
from customize_field_object
where function_code = 'CUSTOMER' and object_id = :p_customer_id
\ No newline at end of file
with contact as (
select customer_id, contact
from (
select * from customer_contact
where status = 1
and contact_type = 5
and is_direct_line = 1
order by create_date desc
)
where rownum = 1
),
connect_status as (
select complete_value, complete_name
from campaign_complete_code
where company_site_id = :p_company_site_id
and complete_type = 1
and complete_value <> 1
),
connect_status_list as (
select trim (regexp_substr(:p_list_connect_status, '[^,]+', 1, level)) connect_status
from dual
connect by level <= regexp_count(:p_list_connect_status, ',') +1
),
data as (
select a.campaign_customer_id campaignCustomerId,
b.name customerName,
c.contact mobileNumber,
to_char(a.call_time, 'DD/MM/YYYY HH24:MI:SS') connectTime,
d.complete_name connectStatus
from campaign_customer a
left join customer b on a.customer_id = b.customer_id
left join contact c on a.customer_id = c.customer_id
left join connect_status d on d.complete_value = a.status
where a.campaign_id = :p_campaign_id
and a.in_campaign_status = 1
and a.status in (select connect_status from connect_status_list)
order by connectTime desc, customerName
),
final_data as (
select a.*, rownum row_ from data a
)
select * from final_data
where row_ >= ((:p_page_number - 1) * :p_page_size + 1)
and row_ < (:p_page_number * :p_page_size + 1)
with column_name_temp as (
select column_name columnName, 1 isFix from user_tab_columns, dual
where table_name = 'CUSTOMER'
)
select * from column_name_temp where columnName not in (select column_name from campaign_customerlist_column)
union all
select title columnName, 0 isFix from customize_fields, dual
where function_code = 'CUSTOMER'
and site_id = :p_company_site_id
and customize_field_id not in (select customize_field_id from campaign_customerlist_column where campaign_customerlist_column.campaign_id = :p_campaign_id)
select to_char(column_name) columnName, 1 isFix from campaign_customerlist_column, dual where campaign_id = :p_campaign_id
union all
select customize_field_title columnName, 0 isFix from campaign_customerlist_column where campaign_id = :p_campaign_id
SELECT CASE WHEN
(SELECT COUNT(1) FROM CAMPAIGN) > 0
THEN (SELECT SUBSTR((SELECT CAMPAIGN_CODE FROM CAMPAIGN WHERE CAMPAIGN_ID = (SELECT MAX(CAMPAIGN_ID) FROM CAMPAIGN)),
INSTR((SELECT CAMPAIGN_CODE FROM CAMPAIGN WHERE CAMPAIGN_ID = (SELECT MAX(CAMPAIGN_ID) FROM CAMPAIGN)), '_', -1, 1 )+1) FROM DUAL)
ELSE '0'
END FROM DUAL
INSERT INTO "CCMS_FULL"."USER_ACTION_LOG" (
AGENT_ID,
COMPANY_SITE_ID,
SESSION_ID,
START_TIME,
END_TIME,
ACTION_TYPE,
DESCRIPTION,
OBJECT_ID)
VALUES (
:par_agentId,
:par_companySiteId,
:par_sessionId,
:par_startTime,
null,
:par_actionType,
null,
:par_objectId)
SELECT
CAMPAIGN_ID campaignId,
CAMPAIGN_CODE campaignCode,
CAMPAIGN_NAME campaignName,
CAMPAIGN_TYPE campaignType,
CHANEL chanel,
START_TIME startTime,
END_TIME endTime,
CUSTOMER_NUMBER customerNumber,
STATUS status
FROM CAMPAIGN
a.CAMPAIGN_ID campaignId,
a.CAMPAIGN_CODE campaignCode,
a.CAMPAIGN_NAME campaignName,
a.CAMPAIGN_TYPE campaignType,
(SELECT PAR_NAME FROM AP_PARAM WHERE STATUS = 1 AND PAR_TYPE = 'CAMPAIGN_TYPE' AND PAR_VALUE = a.CAMPAIGN_TYPE) campaignTypeName,
a.CHANEL chanel,
a.START_TIME startTime,
a.END_TIME endTime,
a.CUSTOMER_NUMBER customerNumber,
a.STATUS status,
a.CUSTOMER_NUMBER cusNum,
b.SLKHThamgiaCD numOfJoinedCus,
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
WHERE 1 = 1 AND cc.IN_CAMPAIGN_STATUS = 1 AND cus.STATUS = 1
group by campaign_id) b
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
group by campaign_id) c
ON c.CAMPAIGN_ID = a.CAMPAIGN_ID
LEFT JOIN (SELECT cc.campaign_id, count(*) AS SLKHDoNotCall_Khoa
FROM CAMPAIGN_CUSTOMER cc , CUSTOMER c
WHERE cc.CUSTOMER_ID = c.CUSTOMER_ID
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
SELECT
CUSTOMER_LIST_ID customerListId,
COMPANY_SITE_ID companySiteId,
CUSTOMER_LIST_CODE customerListCode,
CUSTOMER_LIST_NAME customerListName,
STATUS status,
CREATE_BY createBy,
CREATE_AT createAt,
UPDATE_BY updateBy,
UPDATE_AT updateAt,
SOURCE source,
DEPT_CREATE deptCreate
FROM CUSTOMER_LIST
WHERE 1 = 1
AND STATUS = 1
AND COMPANY_SITE_ID = :p_company_site_id
with totalCustomer as (
select clm.customer_list_id,
clm.company_site_id,
count(clm.customer_id) total
from customer_list_mapping clm
inner join customer c on clm.customer_id = c.customer_id
where c.status = 1
group by clm.customer_list_id,clm.company_site_id
), customerInteractive as (
select customer_list_id,
company_site_id,
count(customer_id) tt
from campaign_customer where campaign_id = :p_campaign_id and status <> 0
group by customer_list_id, company_site_id
), customerNotInteractive as (
select customer_list_id,
company_site_id,
count(customer_id) ktt
from campaign_customer where campaign_id = :p_campaign_id and status = 0
and in_campaign_status = 1
group by customer_list_id, company_site_id
), datas as (
select customer_list_code customerListCode,
customer_list_name customerListName,
nvl(total, 0) totalCusInList,
nvl(tt, 0) totalCusInteract,
nvl(ktt, 0) totalCusNotInteract
from customer_list cl
left join totalCustomer tc on (cl.customer_list_id = tc.customer_list_id and cl.company_site_id = tc.company_site_id)
left join customerInteractive ci on (cl.customer_list_id = ci.customer_list_id and cl.company_site_id = ci.company_site_id)
left join customerNotInteractive cni on (cl.customer_list_id = cni.customer_list_id and cl.company_site_id = cni.company_site_id)
where cl.company_site_id = :p_company_site_id
)
select * from
(
select a.*, rownum r__
from
(
select * from datas
order by customerListCode
) a
where rownum < ((:p_page_number * :p_page_size) + 1 )
)
where r__ >= (((:p_page_number-1) * :p_page_size) + 1)
\ No newline at end of file
with cusPhone as (
select customer_id cusId,
contact phone
from customer_contact cc
where cc.contact_type = 5
and status = 1
), cusEmail as (
select customer_id cusId,
contact email
from customer_contact cc
where cc.contact_type = 2
and status = 1
), datas as (
select c.customer_id customerId,
c.name,
cP.phone,
cE.email,
c.customer_type cusType,
c.company_name compName,
c.current_address currentAddress,
c.description
from customer c
left join cusPhone cP on c.customer_id = cP.cusId
left join cusEmail cE on c.customer_id = cE.cusId
)
select * from
(
select a.*, rownum r__
from
(
select * from datas
order by datas.name
) a
where rownum < ((:p_page_number * :p_page_size) + 1 )
)
where r__ >= (((:p_page_number-1) * :p_page_size) + 1)
\ No newline at end of file
SELECT PAR_NAME,PAR_VALUE, PAR_TYPE FROM AP_PARAM a WHERE STATUS= 1 AND PAR_TYPE = 'CAMPAIGN_TYPE'
DELETE FROM CAMPAIGN_COMPLETE_CODE WHERE CAMPAIGN_ID IN (0,1)
select *from CAMPAIGN_COMPLETE_CODE where STATUS = 1;
SELECT
CAMPAIGN_COMPLETE_CODE_ID campaignCompleteCodeId,
IS_RECALL isRecall ,
CAMPAIGN_ID campaignId,
COMPLETE_VALUE completeValue,
COMPLETE_NAME completeName,
COMPLETE_TYPE completeType,
CAMPAIGN_TYPE campaignType,
DESCRIPTION description,
STATUS status,
COMPANY_SITE_ID companySiteId,
UPDATE_BY updateBy ,
UPDATE_AT updateAt,
CREATE_BY createBy,
CREATE_AT createAt,
IS_FINISH isFinish,
IS_LOCK isLock,
DURATION_LOCK durationLock,
CHANEL chanel
FROM CAMPAIGN_COMPLETE_CODE
where 1 = 1
AND STATUS = 1
and COMPANY_SITE_ID = :p_company_site_id
SELECT CAMPAIGN_COMPLETE_CODE_ID campaignCompleteCodeId,
IS_RECALL isRecall ,
CAMPAIGN_ID campaignId,
COMPLETE_VALUE completeValue,
COMPLETE_NAME completeName,
COMPLETE_TYPE completeType,
CAMPAIGN_TYPE campaignType,
DESCRIPTION description,
STATUS status,
COMPANY_SITE_ID companySiteId,
UPDATE_BY updateBy ,
UPDATE_AT updateAt,
CREATE_BY createBy,
CREATE_AT createAt,
IS_FINISH isFinish,
IS_LOCK isLock,
DURATION_LOCK durationLock,
CHANEL chanel
from CAMPAIGN_COMPLETE_CODE WHERE CAMPAIGN_COMPLETE_CODE_ID=:p_campaignComleteCode
SELECT max(to_number(COMPLETE_VALUE)) completeValue, COMPANY_SITE_ID companySiteId from CAMPAIGN_COMPLETE_CODE where COMPANY_SITE_ID = :p_site_id GROUP BY COMPANY_SITE_ID
SELECT
a.CAMPAIGN_ID campaignId,
a.COMPLETE_VALUE completeValue,
a.COMPLETE_NAME completeName,
a.COMPLETE_TYPE completeType,
c.PAR_NAME campaignType,
b.CHANEL chanel,
a.DESCRIPTION description,
a.STATUS status
FROM CAMPAIGN_COMPLETE_CODE a
LEFT JOIN CAMPAIGN b ON a.CAMPAIGN_ID = b.CAMPAIGN_ID
LEFT JOIN AP_PARAM c ON a.CAMPAIGN_TYPE = to_char(c.AP_PARAM_ID);
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