Commit c6169534 authored by Phạm Duy Phi's avatar Phạm Duy Phi

Merge branch 'master' into phipd

parents a4fd7a9b 10aab5e8
target/
/.idea/
logs/
\ No newline at end of file
logs/
out/
/campaign.iml
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="ExternalSystem" externalSystem="Maven" />
<component name="FacetManager">
<facet type="Spring" name="Spring">
<configuration />
</facet>
<facet type="web" name="Web">
<configuration>
<webroots />
<sourceRoots>
<root url="file://$MODULE_DIR$/src/main/java" />
<root url="file://$MODULE_DIR$/src/main/resources" />
</sourceRoots>
</configuration>
</facet>
</component>
</module>
\ No newline at end of file
File added
......@@ -92,8 +92,10 @@
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.3</version>
<artifactId>ojdbc7</artifactId>
<scope>system</scope>
<systemPath>${project.basedir}/lib/ojdbc7.jar</systemPath>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
......@@ -156,6 +158,31 @@
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
......
package com.viettel.campaign.domain;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@Entity
@Table(name = "AP_PARAM")
@Getter
@Setter
@NoArgsConstructor
public class ApParam implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator="AP_PARAM_SEQ")
@SequenceGenerator(name="AP_PARAM_SEQ",sequenceName="AP_PARAM_SEQ", allocationSize=1)
@Basic(optional = false)
@NotNull
@Column(name = "AP_PARAM_ID")
private String apParamId;
@Column(name = "PAR_NAME")
private String parName;
@Column(name = "PAR_VALUE")
private String parValue;
@Column(name = "RESOURCE_ID")
private String resourceId;
@Column(name = "STATUS")
private String status;
@Column(name = "PAR_CODE")
private String parCode;
@Column(name = "PAR_TYPE")
private String parType;
@Column(name = "DESCRIPTION")
private String description;
@Column(name = "IS_DELETE")
private String isDelete;
@Column(name = "IS_DEFAULT")
private String isDefault;
@Column(name = "ENABLE_EDIT")
private String enableEdit;
@Column(name = "COMPANY_SITE_ID")
private String companySiteId;
}
package com.viettel.campaign.mapper;
import com.viettel.campaign.dto.ApParamDTO;
import com.viettel.campaign.web.dto.ApParamDTO;
import com.viettel.campaign.model.ApParam;
public class ApParamMapper extends BaseMapper<ApParam, ApParamDTO> {
......
package com.viettel.campaign.mapper;
import com.viettel.campaign.dto.BaseDTO;
import com.viettel.campaign.web.dto.BaseDTO;
import java.util.ArrayList;
import java.util.List;
......
package com.viettel.campaign.mapper;
import com.viettel.campaign.dto.CampaignCompleteCodeDTO;
import com.viettel.campaign.web.dto.CampaignCompleteCodeDTO;
import com.viettel.campaign.model.CampaignCompleteCode;
public class CampaignCompleteCodeMapper extends BaseMapper<CampaignCompleteCode, CampaignCompleteCodeDTO> {
......
package com.viettel.campaign.mapper;
import com.viettel.campaign.dto.CustomerDTO;
import com.viettel.campaign.web.dto.CustomerDTO;
import com.viettel.campaign.model.Customer;
public class CustomerMapper extends BaseMapper<Customer, CustomerDTO> {
......
......@@ -6,6 +6,7 @@ import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
@Entity
......@@ -18,23 +19,23 @@ public class Campaign implements Serializable {
@NotNull
@Basic(optional = false)
@Column(name = "CAMPAIGN_ID")
private Long campaignId;
private BigDecimal campaignId;
@Column(name = "COMPANY_SITE_ID")
private Long companySiteId;
private BigDecimal companySiteId;
@Column(name = "CAMPAIGN_CODE")
private String campaignCode;
@Column(name = "CAMPAIGN_NAME")
private String campaignName;
@Column(name = "CHANEL")
private Short chanel;
private BigDecimal chanel;
@Column(name = "CONTENT")
private String content;
@Column(name = "CUSTOMER_NUMBER")
private Long customerNumber;
private BigDecimal customerNumber;
@Column(name = "TARGET")
private String target;
@Column(name = "STATUS")
private Short status;
private BigDecimal status;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "START_TIME")
private Date startTime;
......@@ -64,7 +65,7 @@ public class Campaign implements Serializable {
@Column(name = "PROCESS_STATUS")
private Integer processStatus;
@Column(name = "DIAL_MODE")
private Short dialMode;
private BigDecimal dialMode;
@Column(name = "DEPT_CODE")
private String deptCode;
@Column(name = "TIME_RANGE")
......@@ -72,29 +73,29 @@ public class Campaign implements Serializable {
@Column(name = "DAY_OF_WEEK")
private String dayOfWeek;
@Column(name = "CURRENT_TIME_MODE")
private Long currentTimeModel;
private BigDecimal currentTimeModel;
@Column(name = "WRAPUP_TIME_CONNECT")
private Long wrapupTimeConnect;
private BigDecimal wrapupTimeConnect;
@Column(name = "WRAPUP_TIME_DISCONNECT")
private Long wrapupTimeDisconnect;
private BigDecimal wrapupTimeDisconnect;
@Column(name = "PREVIEW_TIME")
private Long previewTime;
private BigDecimal previewTime;
@Column(name = "RATE_DIAL")
private Long rateDial;
private BigDecimal rateDial;
@Column(name = "RATE_MISS")
private Long rateMiss;
private BigDecimal rateMiss;
@Column(name = "AVG_TIME_PROCESS")
private Long avgTimeProcess;
private BigDecimal avgTimeProcess;
@Column(name = "IS_APPLY_CUST_LOCK")
private Long isApplyCustLock;
private BigDecimal isApplyCustLock;
@Column(name = "TARGET_TYPE")
private Long targetType;
private BigDecimal targetType;
@Column(name = "IS_TARGET")
private Long isTarget;
private BigDecimal isTarget;
@Column(name = "CAMPAIGN_IVR_CALLED_ID")
private Long campaignIvrCalledId;
private BigDecimal campaignIvrCalledId;
@Column(name = "CONCURRENT_CALL")
private Long concurrentCall;
private BigDecimal concurrentCall;
@Column(name = "CALL_OUT_TIME_IN_DAY")
private String callOutTimeInDay;
@Column(name = "MUSIC_LIST")
......@@ -110,5 +111,5 @@ public class Campaign implements Serializable {
@Column(name = "TIME_WAIT_AGENT")
private Integer timeWaitAgent;
@Column(name = "QUEST_INDEX")
private Long questIndex;
private BigDecimal questIndex;
}
package com.viettel.campaign.repository;
import com.viettel.campaign.model.Campaign;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface CampaignRepository extends JpaRepository<Campaign, Long>, CampaignRepositoryCustom {
}
package com.viettel.campaign.repository;
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.springframework.data.domain.Pageable;
import java.util.List;
public interface CampaignRepositoryCustom {
List<CampaignDTO> searchCampaignExecute(String agentId, Pageable pageable);
ResultDTO search(CampaignRequestDTO requestDto);
}
package com.viettel.campaign.repository.impl;
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 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.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.*;
import org.springframework.stereotype.Repository;
import javax.persistence.EntityManager;
import java.util.ArrayList;
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.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();
//
// Query query = entityManager.createNativeQuery(expression);
// query.setParameter("pAgentId", agentId);
//
// List<Object[]> data = query.getResultList();
//
// for (Object[] obj : data) {
// CampaignDTO item = new CampaignDTO();
// item.setCampaignId((Long) obj[0]);
// item.setCampaignName((String) obj[1]);
// item.setStatus((Short) obj[0]);
//
// lst.add(item);
// }
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(a.CAMPAIGN_CODE) LIKE :p_code");
}
if (!DataUtil.isNullOrEmpty(requestDto.getCampaignName())) {
sqlStr.append(" AND UPPER(a.CAMPAIGN_NAME) LIKE :p_name");
}
if (requestDto.getStatus() != null) {
sqlStr.append(" AND a.STATUS = :p_status");
}
if (requestDto.getFromDateFr() != null && DateTimeUtil.isValid(requestDto.getFromDateFr().getTime())) {
sqlStr.append(" AND a.START_TIME >= :p_frDateFr");
}
if (requestDto.getFromDateTo() != null && DateTimeUtil.isValid(requestDto.getFromDateTo().getTime())) {
sqlStr.append(" AND a.START_TIME <= :p_frDateTo");
}
if (requestDto.getToDateFr() != null && DateTimeUtil.isValid(requestDto.getToDateFr().getTime())) {
sqlStr.append(" AND a.END_TIME >= :p_toDateFr");
}
if (requestDto.getToDateTo() != null && DateTimeUtil.isValid(requestDto.getToDateTo().getTime())) {
sqlStr.append(" AND a.END_TIME <= :p_toDateTo");
}
if (!DataUtil.isNullOrZero(requestDto.getNumOfCusFr())) {
sqlStr.append(" AND a.CUSTOMER_NUMBER >= :p_cusNumFr");
}
if (!DataUtil.isNullOrZero(requestDto.getNumOfCusTo())) {
sqlStr.append(" AND a.CUSTOMER_NUMBER <= :p_cusNumTo");
}
if (requestDto.getType() != null) {
sqlStr.append(" AND a.CAMPAIGN_TYPE = :p_type");
}
if (requestDto.getChanel() != null) {
sqlStr.append(" AND a.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());
}
if (!DataUtil.isNullOrZero(requestDto.getNumOfCusFr())) {
query.setParameter("p_cusNumFr", requestDto.getNumOfCusFr());
}
if (!DataUtil.isNullOrZero(requestDto.getNumOfCusTo())) {
query.setParameter("p_cusNumTo", requestDto.getNumOfCusTo());
}
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.addScalar("numOfJoinedCus", new LongType());
query.addScalar("numOfNotJoinedCus", new LongType());
query.addScalar("numOfLockCus", new LongType());
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;
}
}
package com.viettel.campaign.service;
import com.viettel.campaign.dto.ApParamDTO;
import com.viettel.campaign.dto.ResultDTO;
import com.viettel.campaign.web.dto.ApParamDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.model.ApParam;
import java.util.List;
......
package com.viettel.campaign.service;
import com.viettel.campaign.dto.ApParamDTO;
import com.viettel.campaign.dto.ResultDTO;
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;
......
package com.viettel.campaign.service;
import com.viettel.campaign.dto.CampaignCompleteCodeDTO;
import com.viettel.campaign.dto.ResultDTO;
import com.viettel.campaign.web.dto.CampaignCompleteCodeDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import java.util.Map;
......
package com.viettel.campaign.service;
import com.viettel.campaign.dto.CampaignCompleteCodeDTO;
import com.viettel.campaign.dto.ResultDTO;
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;
......@@ -32,10 +32,12 @@ public class CampaignCompleteCodeServiceImpl implements CampaignCompleteCodeServ
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", lst.size());
result.put("totalItem", count.size());
result.put("customers", lst);
return result;
......
package com.viettel.campaign.service;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.request_dto.CampaignRequestDTO;
import java.util.Map;
public interface CampaignService {
Map searchCampaignExecute(int page, int pageSize, String sort, String agentId);
ResultDTO search(CampaignRequestDTO requestDto);
}
package com.viettel.campaign.service;
import com.viettel.campaign.dto.CustomerDTO;
import com.viettel.campaign.dto.ResultDTO;
import com.viettel.campaign.web.dto.CustomerDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import java.util.Map;
......
package com.viettel.campaign.service;
import com.viettel.campaign.dto.CustomerDTO;
import com.viettel.campaign.dto.ResultDTO;
import com.viettel.campaign.web.dto.CustomerDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.mapper.CustomerMapper;
import com.viettel.campaign.model.Customer;
import com.viettel.campaign.repository.CustomerRepository;
......
package com.viettel.campaign.service.impl;
import com.viettel.campaign.repository.CampaignRepository;
import com.viettel.campaign.web.dto.CampaignDTO;
import com.viettel.campaign.service.CampaignService;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.request_dto.CampaignRequestDTO;
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.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class CampaignServiceImpl implements CampaignService {
@Autowired(required=true)
CampaignRepository campaignRepository;
@Override
public Map searchCampaignExecute(int page, int pageSize, String sort, String agentId) {
Map result = new HashMap();
List<CampaignDTO> lst = new ArrayList<>();
Pageable pageable = PageRequest.of(page, pageSize, Sort.by(sort));
lst = campaignRepository.searchCampaignExecute(agentId, pageable);
result.put("totalItem", lst.size());
result.put("data", lst);
return result;
}
@Override
public ResultDTO search(CampaignRequestDTO requestDto) {
return campaignRepository.search(requestDto);
}
}
package com.viettel.campaign.service.impl;
<<<<<<< HEAD:src/main/java/com/viettel/campaign/service/CampaignServiceImpl.java
import com.viettel.campaign.repository.CampaignRepository;
import com.viettel.campaign.web.dto.CampaignDTO;
=======
import com.viettel.campaign.dto.CampaignDTO;
import com.viettel.campaign.dto.ResultDTO;
import com.viettel.campaign.dto.request_dto.CampaignRequestDTO;
import com.viettel.campaign.model.Campaign;
import com.viettel.campaign.repository.CampaignRepository;
import com.viettel.campaign.service.CampaignService;
>>>>>>> anhvd_campaign_mng:src/main/java/com/viettel/campaign/service/impl/CampaignServiceImpl.java
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.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class CampaignServiceImpl implements CampaignService {
@Autowired(required=true)
CampaignRepository campaignRepository;
@Override
public Map searchCampaignExecute(int page, int pageSize, String sort, String agentId) {
Map result = new HashMap();
List<CampaignDTO> lst = new ArrayList<>();
Pageable pageable = PageRequest.of(page, pageSize, Sort.by(sort));
lst = campaignRepository.searchCampaignExecute(agentId, pageable);
result.put("totalItem", lst.size());
result.put("data", lst);
return result;
}
@Override
public ResultDTO search(CampaignRequestDTO requestDto) {
return campaignRepository.search(requestDto);
}
}
package com.viettel.campaign.utils;
/**
* @author anhvd_itsol
*/
public class Constants {
public interface ApiErrorCode {
String ERROR = "01";
String SUCCESS = "00";
}
public interface ApiErrorDesc {
String ERROR = "ERROR";
String SUCCESS = "SUCCESS";
}
public interface FileType {
String pdf = "pdf";
String xls = "xls";
String xlsx = "xlsx";
}
}
package com.viettel.campaign.utils;
import org.apache.logging.log4j.util.Strings;
import org.joda.time.format.DateTimeFormat;
import java.util.Date;
import java.util.TimeZone;
import java.util.concurrent.atomic.AtomicReference;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static java.util.concurrent.TimeUnit.NANOSECONDS;
/**
* @author anhvd_itsol
*/
public final class DateTimeUtil {
public static final long DAY_IN_MILLIS = 86400000L;
public static interface DateTimeProvider { long now(); }
private static final AtomicReference<DateTimeProvider> PROVIDER = new AtomicReference<DateTimeProvider>();
public static final DateTimeProvider getProvider() { return PROVIDER.get(); }
static {
PROVIDER.set(new DateTimeProvider() { @Override public long now() { return System.currentTimeMillis(); } });
}
public static Date currentTime() {
return new Date(now());
}
public static Date currentDate() {
return date(now());
}
public static final Date date(final long millis) {
final int offset = getTimeZoneOffset(millis);
long t = millis - ((t = (millis + offset) % DAY_IN_MILLIS) < 0 ? DAY_IN_MILLIS + t : t);
t = t + (offset - getTimeZoneOffset(t)); return new Date(t);
}
public static int getTimeZoneOffset(long millis) {
return TimeZone.getDefault().getOffset(millis);
}
public static long now() {
return getProvider().now();
}
public static long toMillis(long nanos) {
return MILLISECONDS.convert(nanos, NANOSECONDS);
}
public static long currentTimeMillis() {
return getProvider().now();
}
/**
* Format
*/
public static String format(String pattern, long millis) {
return DateTimeFormat.forPattern(pattern).print(millis);
}
public static String format(String pattern, Date date, String defaultValue) {
if(date == null) return defaultValue;
return format(pattern ,date.getTime());
}
/**
*
*/
public static boolean isValid(final long millis) {
return millis > 0L;
}
/**
*
*/
public static long parse(final String pattern, String date) {
return DateTimeFormat.forPattern(pattern).parseMillis(date);
}
public static Date parseDate(final String pattern, String date) {
return Strings.isEmpty(date) ? null : date(parse(pattern, date));
}
/**
*
*/
}
package com.viettel.campaign.utils;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
/**
* @author anhvd_itsol
*/
public class HibernateUtil {
private static SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory()
{
try
{
if (sessionFactory == null)
{
Configuration configuration = new Configuration().configure(HibernateUtil.class.getResource("/hibernate.cfg.xml"));
StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder();
serviceRegistryBuilder.applySettings(configuration.getProperties());
ServiceRegistry serviceRegistry = serviceRegistryBuilder.build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
}
return sessionFactory;
} catch (Throwable ex)
{
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory()
{
return sessionFactory;
}
public static void shutdown()
{
getSessionFactory().close();
}
}
package com.viettel.campaign.utils;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.IOException;
import org.springframework.core.io.ClassPathResource;
/**
* @author anhvd_itsol
*/
public class SQLBuilder {
public static final String SQL_MODULE_CAMPAIGN_MNG = "campaign-mng";
public static String getSqlQueryById(String module,
String queryId) {
File folder = null;
try {
folder = new ClassPathResource(
"sql" + File.separator + module + File.separator + queryId + ".sql").getFile();
// Read file
if (folder.isFile()) {
String sql = new String(Files.readAllBytes(Paths.get(folder.getAbsolutePath())));
return sql;
}
} catch (IOException e) {
return null;
}
return null;
}
}
package com.viettel.campaign.dto;
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
......
package com.viettel.campaign.dto;
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
......@@ -10,4 +10,7 @@ import java.io.Serializable;
public class BaseDTO implements Serializable {
protected String keySet;
protected int pageSize;
protected int page;
protected String sort;
}
package com.viettel.campaign.dto;
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
......
package com.viettel.campaign.dto;
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
import java.util.Date;
@Getter
@Setter
public class CampaignDTO extends BaseDTO {
private Long campaignId;
private Long companySiteId;
private BigDecimal campaignId;
private BigDecimal companySiteId;
private String campaignCode;
private String campaignName;
private Short chanel;
private BigDecimal chanel;
private String content;
private Long customerNumber;
private BigDecimal customerNumber;
private String target;
private Short status;
private BigDecimal status;
private Date startTime;
private Date endTime;
private Integer maxRecall;
......@@ -30,27 +31,30 @@ public class CampaignDTO extends BaseDTO {
private String campaignType;
private String product;
private Integer processStatus;
private Short dialMode;
private BigDecimal dialMode;
private String deptCode;
private String timeRange;
private String dayOfWeek;
private Long currentTimeModel;
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 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 String callOutTimeInDay;
private String musicList;
private Integer timePlayMusic;
private Date campaignStart;
private Date campaignEnd;
private Integer timeWaitAgent;
private Long questIndex;
private BigDecimal questIndex;
private Long numOfJoinedCus;
private Long numOfNotJoinedCus;
private Long numOfLockCus;
}
package com.viettel.campaign.dto;
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
......
package com.viettel.campaign.dto;
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
......
package com.viettel.campaign.dto;
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
......@@ -9,9 +9,8 @@ import java.util.List;
@Getter
@Setter
public class ResultDTO {
private String errorCode;
private String description;
private List listData = new ArrayList();
private List<?> listData = new ArrayList();
private Object data;
}
package com.viettel.campaign.dto;
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
......
package com.viettel.campaign.web.dto.request_dto;
import com.viettel.campaign.web.dto.BaseDTO;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
/**
* @author anhvd_itsol
*/
@Getter
@Setter
public class CampaignRequestDTO extends BaseDTO {
String campaignCode;
String campaignName;
Short status;
Date fromDateFr;
Date fromDateTo;
Date toDateTo;
Date toDateFr;
Long numOfCusFr;
Long numOfCusTo;
Short type;
Short chanel;
}
package com.viettel.campaign.controller;
package com.viettel.campaign.web.rest;
import com.viettel.campaign.model.ApParam;
import com.viettel.campaign.service.ApParamService;
......
package com.viettel.campaign.controller;
package com.viettel.campaign.web.rest;
import com.viettel.campaign.dto.CampaignCompleteCodeDTO;
import com.viettel.campaign.dto.ResultDTO;
import com.viettel.campaign.web.dto.CampaignCompleteCodeDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.service.CampaignCompleteCodeService;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
......
package com.viettel.campaign.controller;
package com.viettel.campaign.web.rest;
import com.viettel.campaign.dto.CustomerDTO;
import com.viettel.campaign.dto.ResultDTO;
import com.viettel.campaign.web.dto.CustomerDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.service.CustomerService;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
......
package com.viettel.campaign.web.controller;
package com.viettel.campaign.web.rest;
import com.viettel.campaign.service.Sender;
import com.viettel.campaign.service.Producer;
......@@ -6,8 +6,6 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.apache.log4j.Logger;
/**
* @author hanv_itsol
* @project service-campaign
......@@ -18,7 +16,6 @@ import org.apache.log4j.Logger;
public class KafkaController {
private final Sender sender;
private static final Logger log = Logger.getLogger(KafkaController.class);
private final Producer producer;
......
package com.viettel.campaign.web.rest.controller;
import com.viettel.campaign.service.CampaignService;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.request_dto.CampaignRequestDTO;
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 org.springframework.web.bind.annotation.*;
import org.springframework.data.domain.Page;
import java.util.Map;
@RestController
@RequestMapping("/ipcc/campaign")
@CrossOrigin
public class CampaignController {
private static final Logger LOGGER = Logger.getLogger(CampaignController.class);
@Autowired
CampaignService campaignService;
@GetMapping("/searchCampaignExecute")
@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);
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);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@10.60.157.135:1521:vt</property>
<property name="hibernate.connection.username">CCMS_FULL</property>
<property name="hibernate.connection.password">CCMS_FULL#123</property>
<property name="hibernate.connection.pool_size">64</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
</session-factory>
</hibernate-configuration>
SELECT
a.CAMPAIGN_ID campaignId,
a.CAMPAIGN_CODE campaignCode,
a.CAMPAIGN_NAME campaignName,
a.CAMPAIGN_TYPE campaignType,
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,
c.SLKHChuaTuongTac numOfNotJoinedCus,
d.SLKHDoNotCall_Khoa numOfLockCus
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
WHERE 1 = 1
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment