Commit 9ed37467 authored by ='s avatar =

Merge remote-tracking branch 'origin/master'

parents 9ae7b537 6152cdbe
......@@ -3,3 +3,4 @@ target/
logs/
out/
/campaign.iml
/lib
#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
......@@ -13,6 +13,7 @@
<version>0.0.1-SNAPSHOT</version>
<name>service-campaign</name>
<description>Campaign service for Spring Boot</description>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
......@@ -82,11 +83,11 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>com.viettel</groupId>
<artifactId>viettelsercurity</artifactId>
<version>11.2.0.3</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.viettel</groupId>-->
<!-- <artifactId>viettelsercurity</artifactId>-->
<!-- <version>11.2.0.3</version>-->
<!-- </dependency>-->
<!--<dependency>-->
<!--<groupId>org.apache.kafka</groupId>-->
<!--<artifactId>kafka-streams</artifactId>-->
......@@ -98,8 +99,8 @@
<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>
......@@ -280,5 +281,14 @@
</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;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication(scanBasePackages={"com.viettel.campaign"})
@ComponentScan({"com.viettel"})
public class ServiceCampaignApplication {
@Autowired
DataSourceProperties dataSourceProperties;
public static void main(String[] args) {
SpringApplication.run(ServiceCampaignApplication.class, args);
......
......@@ -2,6 +2,7 @@ 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;
......@@ -11,6 +12,7 @@ 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;
......@@ -29,15 +31,30 @@ public class ACDFullDatasourceConfig {
@Autowired
private Environment env;
@Bean("datasource2.datasource")
@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(env.getProperty("spring.datasource2.driver-class-name"));
r.setDriverClassName(driverClassName);
r.setPoolName("app.datasource2");
r.setJdbcUrl(env.getProperty("spring.datasource2.url"));
r.setMaximumPoolSize(env.getProperty("spring.datasource2.max_pool_size", Integer.class));
r.setPassword(env.getProperty("spring.datasource2.password"));
r.setUsername(env.getProperty("spring.datasource2.username"));
r.setJdbcUrl(url);
r.setMaximumPoolSize(maxPoolSize);
r.setPassword(password);
r.setUsername(username);
return r;
}
......@@ -69,8 +86,8 @@ public class ACDFullDatasourceConfig {
}
@Bean(name = DataSourceQualify.NAMED_JDBC_PARAMETER_TEMPLATE_ACD_FULL)
@DependsOn("datasource2.datasource")
public NamedParameterJdbcTemplate namedParameterJdbcTemplate(@Qualifier("datasource2.datasource") DataSource abcDataSource) {
@DependsOn("datasource.datasource2")
public NamedParameterJdbcTemplate namedParameterJdbcTemplate(@Qualifier("datasource.datasource2") DataSource abcDataSource) {
return new NamedParameterJdbcTemplate(abcDataSource);
}
}
......
......@@ -2,6 +2,7 @@ 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;
......@@ -32,15 +33,30 @@ public class CCMSFullDatasourceConfig {
@Autowired
private Environment env;
@Bean("datasource1.datasource")
@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(env.getProperty("spring.datasource.driver-class-name"));
r.setDriverClassName(driverClassName);
r.setPoolName("app.datasource1");
r.setJdbcUrl(env.getProperty("spring.datasource.url"));
r.setMaximumPoolSize(env.getProperty("spring.datasource.max_pool_size", Integer.class));
r.setPassword(env.getProperty("spring.datasource.password"));
r.setUsername(env.getProperty("spring.datasource.username"));
r.setJdbcUrl(url);
r.setMaximumPoolSize(maxPoolSize);
r.setPassword(password);
r.setUsername(username);
return r;
}
......@@ -72,8 +88,8 @@ public class CCMSFullDatasourceConfig {
}
@Bean(name = DataSourceQualify.NAMED_JDBC_PARAMETER_TEMPLATE_CCMS_FULL)
@DependsOn("datasource1.datasource")
public NamedParameterJdbcTemplate namedParameterJdbcTemplate(@Qualifier("datasource1.datasource") DataSource abcDataSource) {
@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;
}
}
}
......@@ -26,19 +26,19 @@ import java.util.concurrent.ScheduledFuture;
* @project campaign
*/
//@Slf4j
//@EnableScheduling
//@Configuration
//public class JobConfig implements SchedulingConfigurer {
//
// TaskScheduler taskScheduler;
// private ScheduledFuture<?> job1;
// private ScheduledFuture<?> job2;
//
// @Bean
// public CampaignJob campaignJob(){
// return new CampaignJob();
// }
@Slf4j
@EnableScheduling
@Configuration
public class JobConfig implements SchedulingConfigurer {
TaskScheduler taskScheduler;
private ScheduledFuture<?> job1;
private ScheduledFuture<?> job2;
@Bean
public CampaignJob campaignJob(){
return new CampaignJob();
}
// @Override
// public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
......@@ -53,47 +53,47 @@ import java.util.concurrent.ScheduledFuture;
// taskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
// }
// private void job1(TaskScheduler scheduler) {
// job1 = scheduler.schedule(() -> {
// log.info("processing job1 ...");
// log.info(Thread.currentThread().getName() + " The Task1 executed at " + new Date());
// try {
// Thread.sleep(10000);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }, triggerContext -> {
//
// String cronExp = "0/5 * * * * ?";// Can be pulled from a db .
// return new CronTrigger(cronExp).nextExecutionTime(triggerContext);
// });
// }
//
// private void job2(TaskScheduler scheduler) {
// job2 = scheduler.schedule(() -> {
// log.info(Thread.currentThread().getName() + " The Job executed at " + new Date());
// campaignJob().process();
//
// }, triggerContext -> {
// String cronExp = "0/1 * * * * ?";// Can be pulled from a db . This will run every minute
// return new CronTrigger(cronExp).nextExecutionTime(triggerContext);
// });
// }
//
//
//
// @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);
// });
// }
//}
private void job1(TaskScheduler scheduler) {
job1 = scheduler.schedule(() -> {
log.info("processing job1 ...");
log.info(Thread.currentThread().getName() + " The Task1 executed at " + new Date());
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}, triggerContext -> {
String cronExp = "0/5 * * * * ?";// Can be pulled from a db .
return new CronTrigger(cronExp).nextExecutionTime(triggerContext);
});
}
private void job2(TaskScheduler scheduler) {
job2 = scheduler.schedule(() -> {
log.info(Thread.currentThread().getName() + " The Job executed at " + new Date());
campaignJob().process();
}, triggerContext -> {
String cronExp = "0/1 * * * * ?";// Can be pulled from a db . This will run every minute
return new CronTrigger(cronExp).nextExecutionTime(triggerContext);
});
}
@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);
});
}
}
......@@ -13,7 +13,7 @@ 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){
......@@ -31,28 +31,27 @@ public class CorsFilter implements Filter {
HttpServletRequest request = (HttpServletRequest) req;
chain.doFilter(req, resp);
// if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
// chain.doFilter(req, resp);
// return;
// }
// logger.info("uri: "+ request.getRequestURI());
// 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);
// } else {
// response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "The token is invalid.");
// }
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);
} else {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "The token is invalid.");
}
}
@Override
......
package com.viettel.campaign.mapper;
import com.viettel.campaign.model.ccms_full.ReceiveCustLog;
import com.viettel.campaign.web.dto.ReceiveCustLogDTO;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
public class ReceiveCustLogMapper extends BaseMapper<ReceiveCustLog, ReceiveCustLogDTO> {
@Autowired
ModelMapper modelMapper;
@Override
public ReceiveCustLogDTO toDtoBean(ReceiveCustLog receiveCustLog) {
return modelMapper.map(receiveCustLog, ReceiveCustLogDTO.class);
}
@Override
public ReceiveCustLog toPersistenceBean(ReceiveCustLogDTO dtoBean) {
return modelMapper.map(dtoBean, ReceiveCustLog.class);
}
}
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
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)
@Column(name = "RECEIVE_CUST_LOG_ID")
private Long receiveCustLogId;
@Column(name = "COMPANY_SITE_ID")
private Long companySiteId;
@Column(name = "CUSTOMER_ID")
private Long customerId;
@Column(name = "AGENT_ID")
private Long agentId;
@Column(name = "CAMPAIGN_ID")
private Long campaignId;
@Column(name = "START_TIME")
@Temporal(TemporalType.TIMESTAMP)
private Date startTime;
@Column(name = "END_TIME")
@Temporal(TemporalType.TIMESTAMP)
private Date endTime;
}
......@@ -3,6 +3,9 @@ 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;
......@@ -11,4 +14,8 @@ import org.springframework.transaction.annotation.Transactional;
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.ccms_full;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.ApParam;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
......@@ -7,10 +8,12 @@ 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 ApParamRepository extends JpaRepository<ApParam, Long>, ApParamRepositoryCustom {
Page<ApParam> findAll(Pageable pageable);
......
......@@ -5,32 +5,31 @@ 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> {
public interface CampaignCustomerRepository extends JpaRepository<CampaignCustomer, Long>, CampaignCustomerRepositoryCustom {
@Query(value = "SELECT COUNT(*) " +
" FROM CAMPAIGN_CUSTOMER CC " +
" JOIN CAMPAIGN C ON CC.CAMPAIGN_ID = C.CAMPAIGN_ID " +
" LEFT JOIN CAMPAIGN_COMPLETE_CODE CCC ON CC.STATUS = CCC.COMPLETE_VALUE" +
" WHERE CC.COMPANY_SITE_ID = :companySiteId " +
" AND CC.AGENT_ID = :agentId" +
" AND C.STATUS = 2 " +
" AND CC.RECALL_TIME <= SYSDATE " +
" AND CCC.IS_RECALL = 1", nativeQuery = true)
Long countRecallCustomer(@Param("companySiteId") Long pCompanySiteId, @Param("agentId") Long agentId);
@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)
"WHERE CC.CAMPAIGN_ID = :campaignId " +
"AND CC.CUSTOMER_ID = :customerId " +
"AND CC.STATUS = 3 " +
"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);
}
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);
}
......@@ -18,16 +18,6 @@ public interface CampaignRepository extends JpaRepository<Campaign, Long> {
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.ccms_full;
import com.viettel.campaign.model.ccms_full.ReceiveCustLog;
import org.springframework.data.jpa.repository.JpaRepository;
public interface ReceiveCustLogRepository extends JpaRepository<ReceiveCustLog, Long> {
}
......@@ -2,8 +2,12 @@ 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
*/
......@@ -11,4 +15,9 @@ import org.springframework.stereotype.Repository;
@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);
}
......@@ -14,7 +14,7 @@ import java.util.List;
@Repository
public interface ScenarioQuestionRepository extends JpaRepository<ScenarioQuestion, Long> {
List<ScenarioQuestion> findScenarioQuestionsByScenarioIdAndCampaignIdAndCompanySiteIdAndStatus(Long scenarioId, Long campaignId, Long companySiteId, Short status);
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);
......
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.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;
......@@ -26,5 +28,9 @@ public interface CampaignExecuteService {
ResultDTO getExecuteCampaign(CampaignRequestDTO requestDto);
ResultDTO getCall(CampaignRequestDTO dto);
ResultDTO getCall(CampaignCustomerDTO dto);
ResultDTO getCallLog(ReceiveCustLogDTO dto);
ResultDTO getAgentLogout(CampaignRequestDTO dto);
}
......@@ -30,7 +30,9 @@ public interface CampaignService {
ResultDTO addNewCampaign(CampaignDTO campaignDTO);
Map countRecallCustomer(Long companySiteId, Long agentId);
ResultDTO countRecallCustomer(Long companySiteId, Long agentId);
ResultDTO getCustomerRecall(Long campaignId, Long customerId);
ResultDTO findCampaignById(Long campaignId);
......
package com.viettel.campaign.service;
import com.viettel.campaign.web.dto.ResultDTO;
/**
* @author anhvd_itsol
*/
public interface ScenarioAnswerService {
ResultDTO findByScenarioQuestionCompany(Long scenarioQuestionId, Long companySiteId);
Long getMaxAnswerOrderId(Long scenarioQuestionId, Long companySiteId);
}
package com.viettel.campaign.service.impl;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.mapper.ReceiveCustLogMapper;
import com.viettel.campaign.model.acd_full.Agents;
import com.viettel.campaign.model.ccms_full.CampaignCustomer;
import com.viettel.campaign.model.ccms_full.TimeRangeDialMode;
import com.viettel.campaign.model.ccms_full.TimeZoneDialMode;
import com.viettel.campaign.model.ccms_full.ReceiveCustLog;
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.SQLBuilder;
import com.viettel.campaign.web.dto.ApParamDTO;
import com.viettel.campaign.web.dto.ContactCustResultDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.*;
import com.viettel.campaign.web.dto.request_dto.CampaignRequestDTO;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
......@@ -33,6 +30,9 @@ 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
ReceiveCustLogRepository custLogRepository;
@Autowired
CampaignRepositoryCustom campaignRepositoryCustom;
......@@ -278,22 +278,45 @@ public class CampaignExecuteServiceImp implements CampaignExecuteService {
}
@Override
public ResultDTO getCall(CampaignRequestDTO dto) {
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<CampaignCustomer> lst = null;//campaignCustomerRepository.getCustomerRecallDate(dto.getCampaignId(), dto.getAgentId(), dto.getCompanySiteId(), );
List<CampaignCustomerDTO> lst = new ArrayList<>();
// 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, SQLBuilder.getSqlQueryById("campaign-execute", "get-execute-customer1"));
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, SQLBuilder.getSqlQueryById("campaign-execute", "get-execute-customer2"));
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, SQLBuilder.getSqlQueryById("campaign-execute", "get-execute-customer3"));
if (lst3.size() > 0) {
lst = lst3;
} else {
// Khách hàng mới
List<CampaignCustomerDTO> lst4 = campaignCustomerRepository.getDataCampaignCustomer(dto, SQLBuilder.getSqlQueryById("campaign-execute", "get-execute-customer4"));
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, SQLBuilder.getSqlQueryById("campaign-execute", "get-execute-customer5"));
lst = lst5;
}
}
}
}
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.setListData(lst);
//result.setData(data);
} else {
result.setErrorCode(Constants.ApiErrorCode.ERROR);
......@@ -302,4 +325,44 @@ public class CampaignExecuteServiceImp implements CampaignExecuteService {
return result;
}
@Override
public ResultDTO getCallLog(ReceiveCustLogDTO dto) {
ResultDTO result = new ResultDTO();
ReceiveCustLog receiveCustLog = (new ReceiveCustLogMapper()).toPersistenceBean(dto);
try {
custLogRepository.save(receiveCustLog);
agentsRepository.updateAgentLogoutFromCampaign(dto.getAgentId(), "NOT AVAILABLE");
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 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;
}
}
......@@ -15,7 +15,6 @@ 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.*;
......@@ -43,6 +42,9 @@ public class CampaignServiceImpl implements CampaignService {
@Autowired
CampaignRepository campaignRepository;
@Autowired
CampaignCustomerRepository campaignCustomerRepository;
@Autowired
CampaignRepositoryCustom campaignRepositoryCustom;
......@@ -163,23 +165,37 @@ public class CampaignServiceImpl implements CampaignService {
}
@Transactional(DataSourceQualify.CCMS_FULL)
public Map countRecallCustomer(Long companySiteId, Long agentId) {
Map result = new HashMap();
Long count = campaignRepository.countRecallCustomer(companySiteId, agentId);
public ResultDTO countRecallCustomer(Long companySiteId, Long agentId) {
Long count = campaignCustomerRepository.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);
resultDTO.setData(count);
} else {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
result.put("info", resultDTO);
result.put("result", 0);
resultDTO.setData(0);
}
return result;
return resultDTO;
}
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getCustomerRecall(Long campaignId, Long customerId) {
Long count = campaignCustomerRepository.getCustomerRecall(campaignId, customerId);
ResultDTO resultDTO = new ResultDTO();
if (count != null) {
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
resultDTO.setData(count);
} else {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
resultDTO.setData(0);
}
return resultDTO;
}
@Override
......
package com.viettel.campaign.service.impl;
import com.viettel.campaign.model.ccms_full.ScenarioAnswer;
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 org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author anhvd_itsol
*/
@Service
public class ScenarioAnswerServiceImpl implements ScenarioAnswerService {
private static final Logger logger = LogManager.getLogger(ScenarioQuestionServiceImpl.class);
@Autowired
ScenarioAnswerRepository scenarioAnswerRepository;
@Override
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
public Long getMaxAnswerOrderId(Long scenarioQuestionId, Long companySiteId) {
try {
return scenarioAnswerRepository.getMaxAnswerOrderId(scenarioQuestionId, companySiteId);
}catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
return null;
}
}
......@@ -3,12 +3,15 @@ package com.viettel.campaign.service.impl;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.CampaignLog;
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.CampaignLogRepository;
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;
......@@ -17,6 +20,7 @@ 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;
......@@ -35,6 +39,9 @@ public class ScenarioQuestionServiceImpl implements ScenarioQuestionService {
@Autowired
CampaignLogRepository campaignLogRepository;
@Autowired
ScenarioAnswerRepository scenarioAnswerRepository;
@Autowired
ModelMapper modelMapper;
......@@ -43,7 +50,7 @@ public class ScenarioQuestionServiceImpl implements ScenarioQuestionService {
public ResultDTO findByScenarioIdAndCampaignIdAndCompanySiteId(Long scenarioId, Long campaignId, Long companySiteId) {
ResultDTO resultDTO = new ResultDTO();
try {
List<ScenarioQuestion> lst = scenarioQuestionRepository.findScenarioQuestionsByScenarioIdAndCampaignIdAndCompanySiteIdAndStatus(scenarioId, campaignId, companySiteId, (short)1);
List<ScenarioQuestion> lst = scenarioQuestionRepository.findScenarioQuestionsByScenarioIdAndCampaignIdAndCompanySiteIdAndStatusOrderByOrderIndex(scenarioId, campaignId, companySiteId, (short)1);
resultDTO.setData(lst);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
......@@ -59,12 +66,39 @@ public class ScenarioQuestionServiceImpl implements ScenarioQuestionService {
@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());
......@@ -109,4 +143,5 @@ public class ScenarioQuestionServiceImpl implements ScenarioQuestionService {
}
return null;
}
}
package com.viettel.campaign.utils;
//import com.viettel.security.PassTranformer;
import com.viettel.security.PassTranformer;
import org.apache.log4j.Logger;
import java.io.File;
......@@ -60,7 +60,7 @@ public class Config {
} catch (IOException ex) {
Logger.getLogger(Config.class.getName()).error(ex.getMessage(), ex);
}
// PassTranformer.setInputKey("Ipcc#987654321#@!");
PassTranformer.setInputKey("Ipcc#987654321#@!");
// rabbitConnection = properties.getProperty("rabbit_connection_string");
// fbGatewayUser = PassTranformer.decrypt(properties.getProperty("rabbit_user", "").trim());
......
......@@ -105,7 +105,7 @@ public class RedisUtil {
JedisCluster jedis = getRedis();
byte[] value = jedis.get(key.getBytes());
if (value != null && value.length > 0) {
object = SerializationUtils.deserialize(value);
object = (Object) SerializationUtils.deserialize(value);
}
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
......
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
@Getter
@Setter
public class ReceiveCustLogDTO extends BaseDTO {
private Long receiveCustLogId;
private Long companySiteId;
private Long customerId;
private Long agentId;
private Long campaignId;
private Date startTime;
private Date endTime;
}
......@@ -3,6 +3,7 @@ package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.Date;
/**
......@@ -11,7 +12,7 @@ import java.util.Date;
@Getter
@Setter
public class ScenarioAnswerDTO {
public class ScenarioAnswerDTO implements Serializable {
public Long scenarioAnswerId;
public Long companySiteId;
public Long scenarioQuestionId;
......
......@@ -3,7 +3,9 @@ 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
......@@ -11,7 +13,7 @@ import java.util.Date;
@Getter
@Setter
public class ScenarioQuestionDTO {
public class ScenarioQuestionDTO implements Serializable {
private Long scenarioQuestionId;
private Long companySiteId;
private Long campaignId;
......@@ -26,4 +28,5 @@ public class ScenarioQuestionDTO {
private Short isRequire;
private Short isDefault;
private Short answerIndex;
private List<ScenarioAnswerDTO> lstAnswers;
}
......@@ -4,7 +4,9 @@ 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.CampaignCustomerDTO;
import com.viettel.campaign.web.dto.CampaignDTO;
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;
......@@ -55,11 +57,25 @@ public class CampaignController {
@PostMapping("/getCall")
@ResponseBody
public ResponseEntity<ResultDTO> getCall(@RequestBody CampaignRequestDTO requestDto) {
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("/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);
......@@ -79,7 +95,14 @@ public class CampaignController {
@GetMapping("/countRecallCustomer")
@ResponseBody
public ResponseEntity countRecallCustomer(@RequestParam("companySiteId") Long companySiteId, @RequestParam("agentId") Long agentId) {
Map result = campaignService.countRecallCustomer(companySiteId, agentId);
ResultDTO result = campaignService.countRecallCustomer(companySiteId, agentId);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@GetMapping("/getCustomerRecall")
@ResponseBody
public ResponseEntity getCustomerRecall(@RequestParam("campaignId") Long campaignId, @RequestParam("customerId") Long customerId) {
ResultDTO result = campaignService.getCustomerRecall(campaignId, customerId);
return new ResponseEntity<>(result, HttpStatus.OK);
}
......
package com.viettel.campaign.web.rest;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.viettel.campaign.service.ScenarioAnswerService;
import com.viettel.campaign.web.dto.ResultDTO;
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
......@@ -12,4 +15,19 @@ import org.springframework.web.bind.annotation.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);
}
}
......@@ -43,4 +43,5 @@ public class ScenarioQuestionController {
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.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 hanv_itsol
* @project service-campaign
*
* @author ThaoNT19
*/
public class UserSession implements Serializable{
String authToken;
String ownserId;
String accountId;
......@@ -20,28 +24,20 @@ public class UserSession implements Serializable{
Long companySiteId;
long expTime;
public String getAuthToken() {
return authToken;
}
public void setAuthToken(String authToken) {
this.authToken = authToken;
}
public String getOwnserId() {
return ownserId;
public long getExpTime() {
return expTime;
}
public void setOwnserId(String ownserId) {
this.ownserId = ownserId;
public void setExpTime(long expTime) {
this.expTime = expTime;
}
public String getAccountId() {
return accountId;
public String getAuthToken() {
return authToken;
}
public void setAccountId(String accountId) {
this.accountId = accountId;
public void setAuthToken(String authToken) {
this.authToken = authToken;
}
public Long getUserId() {
......@@ -60,6 +56,22 @@ public class UserSession implements Serializable{
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;
}
......@@ -84,11 +96,4 @@ public class UserSession implements Serializable{
this.companySiteId = companySiteId;
}
public long getExpTime() {
return expTime;
}
public void setExpTime(long expTime) {
this.expTime = expTime;
}
}
......@@ -3,18 +3,18 @@ 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
max_pool_size: 32
datasource2:
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
# 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
# max_pool_size: 32
# datasource2:
# 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
jpa:
database-platform: org.hibernate.dialect.Oracle10gDialect
show-sql: true
......@@ -34,3 +34,22 @@ spring:
# 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
SELECT CC.CUSTOMER_ID AS customerId
FROM CAMPAIGN_CUSTOMER CC
LEFT JOIN CCMS_FULL.RECEIVE_CUST_LOG CL ON CC.CUSTOMER_ID = CL.CUSTOMER_ID
WHERE CC.CAMPAIGN_ID = :campaignId
AND CC.COMPANY_SITE_ID = :companySiteId
AND CC.IN_CAMPAIGN_STATUS = 1
AND CL.CUSTOMER_ID IS NULL
AND CL.END_TIME IS NULL
AND EXISTS(SELECT 1
FROM CCMS_FULL.CAMPAIGN_COMPLETE_CODE CCC
WHERE CC.STATUS = CCC.COMPLETE_VALUE
AND STATUS = 1
AND IS_RECALL = 1
AND COMPLETE_TYPE = 2
AND COMPANY_SITE_ID = :companySiteId)
AND CC.RECALL_TIME <= SYSDATE
AND CC.RECALL_TIME + NUMTODSINTERVAL(:dungSai, 'MINUTE') >= SYSDATE
AND CC.AGENT_ID = :agentId
SELECT CC.CUSTOMER_ID AS customerId
FROM CCMS_FULL.CAMPAIGN_CUSTOMER CC
LEFT JOIN CCMS_FULL.RECEIVE_CUST_LOG CL ON CC.CUSTOMER_ID = CL.CUSTOMER_ID
LEFT JOIN ACD_FULL.AGENTS AG ON CC.AGENT_ID = AG.AGENT_ID AND CC.CAMPAIGN_ID = AG.CURRENT_CAMPAIGN_ID
WHERE CC.CAMPAIGN_ID = :campaignId
AND CC.COMPANY_SITE_ID = :companySiteId
AND CC.IN_CAMPAIGN_STATUS = 1
AND CL.CUSTOMER_ID IS NULL
AND CL.END_TIME IS NULL
AND EXISTS(SELECT 1
FROM CCMS_FULL.CAMPAIGN_COMPLETE_CODE CCC
WHERE CC.STATUS = CCC.COMPLETE_VALUE
AND STATUS = 1
AND IS_RECALL = 1
AND COMPLETE_TYPE = 2
AND COMPANY_SITE_ID = :companySiteId)
AND CC.RECALL_TIME <= SYSDATE
AND CC.RECALL_TIME + NUMTODSINTERVAL(:dungSai, 'MINUTE') >= SYSDATE
AND (AG.CAMPAIGN_SYSTEM_STATUS IS NULL OR AG.CAMPAIGN_SYSTEM_STATUS <> 'AVAILABLE')
SELECT CC.CUSTOMER_ID AS customerId
FROM CAMPAIGN_CUSTOMER CC
LEFT JOIN RECEIVE_CUST_LOG CL ON CC.CUSTOMER_ID = CL.CUSTOMER_ID
WHERE CC.CAMPAIGN_ID = :campaignId
AND CC.COMPANY_SITE_ID = :companySiteId
AND CC.IN_CAMPAIGN_STATUS = 1
AND CL.CUSTOMER_ID IS NULL
AND CL.END_TIME IS NULL
AND EXISTS(SELECT 1
FROM CCMS_FULL.CAMPAIGN_COMPLETE_CODE CCC
WHERE CC.STATUS = CCC.COMPLETE_VALUE
AND STATUS = 1
AND IS_RECALL = 1
AND COMPLETE_TYPE = 2
AND COMPANY_SITE_ID = :companySiteId)
AND CC.RECALL_TIME + NUMTODSINTERVAL(:dungSai, 'MINUTE') <= SYSDATE
SELECT CC.CUSTOMER_ID AS customerId
FROM CAMPAIGN_CUSTOMER CC
INNER JOIN CUSTOMER C ON CC.CUSTOMER_ID = C.CUSTOMER_ID
LEFT JOIN RECEIVE_CUST_LOG CL ON CC.CUSTOMER_ID = CL.CUSTOMER_ID
WHERE CC.CAMPAIGN_ID = :campaignId
AND CC.COMPANY_SITE_ID = :companySiteId
AND CC.IN_CAMPAIGN_STATUS = 1
AND CL.CUSTOMER_ID IS NULL
AND CL.END_TIME IS NULL
AND CC.STATUS = 0
AND C.STATUS = 1
AND C.CALL_ALLOWED = 1
AND C.IPCC_STATUS = 'active'
SELECT CC.CUSTOMER_ID AS customerId
FROM CAMPAIGN_CUSTOMER CC
LEFT JOIN CCMS_FULL.RECEIVE_CUST_LOG CL ON CC.CUSTOMER_ID = CL.CUSTOMER_ID
WHERE CC.CAMPAIGN_ID = :campaignId
AND CC.COMPANY_SITE_ID = :companySiteId
AND CC.IN_CAMPAIGN_STATUS = 1
AND CL.CUSTOMER_ID IS NULL
AND CL.END_TIME IS NULL
AND EXISTS(SELECT 1
FROM CCMS_FULL.CAMPAIGN_COMPLETE_CODE CCC
WHERE CC.STATUS = CCC.COMPLETE_VALUE
AND STATUS = 1
AND IS_FINISH = 0
AND COMPLETE_TYPE = 1
AND COMPANY_SITE_ID = :companySiteId)
AND CC.RECALL_COUNT < C.MAX_RECALL
AND SYSDATE MAX(CC.CALL_TIME) >= C.RECALL_DURATION
AND C.STATUS = 1
AND C.CALL_ALLOWED = 1
AND C.IPCC_STATUS = 'active'
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