Commit 40f1295f authored by Vu Duy Anh's avatar Vu Duy Anh

commit merge

parents 1c8940a2 0e963c29
#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
\ No newline at end of file
......@@ -83,13 +83,18 @@
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-streams</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>org.apache.kafka</groupId>-->
<!--<artifactId>kafka-streams</artifactId>-->
<!--</dependency>-->
<!--<dependency>-->
<!--<groupId>org.springframework.kafka</groupId>-->
<!--<artifactId>spring-kafka</artifactId>-->
<!--</dependency>-->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
......@@ -212,6 +217,19 @@
<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>
......
package com.viettel.campaign;
import com.viettel.campaign.utils.Config;
import com.viettel.campaign.utils.RedisUtil;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
......@@ -8,6 +10,9 @@ public class ServiceCampaignApplication {
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 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;
......@@ -18,4 +21,14 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
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.filter;
import com.viettel.campaign.utils.RedisUtil;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
......@@ -14,20 +15,40 @@ public class CorsFilter implements Filter {
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");
try {
HttpServletRequest request = (HttpServletRequest) req;
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);
} 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.mapper;
import com.viettel.campaign.model.ccms_full.CampaignAgent;
import com.viettel.campaign.web.dto.CampaignAgentsDTO;
public class CampaignAgentsMapper extends BaseMapper<CampaignAgent, CampaignAgentsDTO> {
@Override
public CampaignAgentsDTO toDtoBean(CampaignAgent campaignAgent) {
CampaignAgentsDTO obj = new CampaignAgentsDTO();
obj.setAgentId(campaignAgent.getAgentId());
obj.setCampaignAgentId(campaignAgent.getCampaignAgentId());
obj.setCampaignId(campaignAgent.getCampaignId());
obj.setCompanySiteId(campaignAgent.getCompanySiteId());
obj.setFilterType(campaignAgent.getFilterType());
obj.setReSchedule(campaignAgent.getReSchedule());
obj.setStatus(campaignAgent.getStatus());
return obj;
}
@Override
public CampaignAgent toPersistenceBean(CampaignAgentsDTO dtoBean) {
CampaignAgent obj = new CampaignAgent();
obj.setAgentId(dtoBean.getAgentId());
obj.setCampaignAgentId(dtoBean.getCampaignAgentId());
obj.setCampaignId(dtoBean.getCampaignId());
obj.setCompanySiteId(dtoBean.getCompanySiteId());
obj.setFilterType(dtoBean.getFilterType());
obj.setReSchedule(dtoBean.getReSchedule());
obj.setStatus(dtoBean.getStatus());
return obj;
}
}
......@@ -7,7 +7,7 @@ import javax.persistence.*;
import java.util.Date;
@Entity
@Table(name = "VSAUsers")
@Table(name = "AGENTS")
@Getter
@Setter
public class Agents {
......
......@@ -3,10 +3,7 @@ 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.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.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
@Repository
public interface AgentsRepository extends JpaRepository<Agents, String> {
Agents getByAgentId(String agentId);
@Transactional(DataSourceQualify.ACD_FULL)
Agents findByAgentId(String agentId);
}
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;
@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);
}
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.ccms_full.CampaignAgent;
import org.springframework.data.jpa.repository.JpaRepository;
public interface CampaignAgentsRepository extends JpaRepository<CampaignAgent, Long> {
}
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;
......@@ -11,6 +13,8 @@ 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);
......
package com.viettel.campaign.repository.ccms_full;
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.stereotype.Repository;
import java.util.List;
@Repository
public interface CampaignRepositoryCustom {
ResultDTO searchCampaignExecute(CampaignRequestDTO campaignRequestDto);
ResultDTO search(CampaignRequestDTO requestDto);
......@@ -14,5 +16,5 @@ public interface CampaignRepositoryCustom {
String getMaxCampaignIndex();
ResultDTO checkAllowStatusToPrepare (Long campaignId);
ResultDTO checkAllowStatusToPrepare(Long campaignId);
}
......@@ -2,6 +2,8 @@ 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;
......@@ -12,5 +14,10 @@ import java.util.List;
@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);
}
......@@ -2,6 +2,8 @@ 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;
......@@ -12,5 +14,10 @@ import java.util.List;
@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);
}
......@@ -37,141 +37,6 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
@PersistenceContext( unitName= DataSourceQualify.JPA_UNIT_NAME_CCMS_FULL)
EntityManager entityManager;
@Override
public ResultDTO searchCampaignExecute(CampaignRequestDTO campaignRequestDto) {
ResultDTO result = new ResultDTO();
List<CampaignDTO> lst = 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", 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());
}
result.setTotalRow(query.getResultList().size());
Pageable pageable = SQLBuilder.buildPageable(campaignRequestDto);
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.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());
lst.add(item);
}
result.setErrorCode(Constants.ApiErrorCode.SUCCESS);
result.setDescription(Constants.ApiErrorDesc.SUCCESS);
result.setListData(lst);
return result;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
@Override
public ResultDTO search(CampaignRequestDTO requestDto) {
logger.info("Start search campaign::");
......
package com.viettel.campaign.service;
import com.viettel.campaign.web.dto.CampaignAgentsDTO;
import com.viettel.campaign.web.dto.ResultDTO;
public interface AgentsService {
ResultDTO getAgentsByAgentId(String agentId);
ResultDTO getAllAgentsByCompanySiteId(int page, int pageSize, Long companySiteId);
ResultDTO getAllAgentsSelectedByCompanySiteId(int page, int pageSize, Long companySiteId, Long campaignId);
ResultDTO createCampaignAgents(CampaignAgentsDTO campaignAgentsDTO);
}
......@@ -21,4 +21,10 @@ public interface CampaignExecuteService {
List<ContactCustResultDTO> getContactCustById(CampaignRequestDTO dto);
//</editor-fold>
ResultDTO searchCampaignExecute(CampaignRequestDTO requestDto);
ResultDTO getExecuteCampaign(CampaignRequestDTO requestDto);
ResultDTO getCall(CampaignRequestDTO dto);
}
......@@ -13,7 +13,6 @@ import java.util.List;
import java.util.Map;
public interface CampaignService {
ResultDTO searchCampaignExecute(CampaignRequestDTO requestDto);
ResultDTO search(CampaignRequestDTO requestDto);
......
package com.viettel.campaign.service.impl;
import com.viettel.campaign.mapper.CampaignAgentsMapper;
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.CampaignAgentsRepository;
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.CampaignAgentsDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.VSAUsersDTO;
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.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.List;
......@@ -29,26 +32,34 @@ public class AgentsServiceImpl implements AgentsService {
@Autowired
AgentsRepository agentsRepository;
@Autowired
CampaignAgentsRepository campaignAgentsRepository;
@Override
public ResultDTO getAgentsByAgentId(String agentId) {
ResultDTO result = new ResultDTO();
Agents data = agentsRepository.getByAgentId(agentId);
try {
Agents data = agentsRepository.findByAgentId(agentId);
if (data != null) {
result.setErrorCode(Constants.ApiErrorCode.SUCCESS);
result.setDescription("agents data");
result.setData(data);
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");
} 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 getAllAgentsByCompanySiteId(int page, int pageSize, Long companySiteId) {
ResultDTO resultDTO = new ResultDTO();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
......@@ -130,4 +141,112 @@ public class AgentsServiceImpl implements AgentsService {
return resultDTO;
}
@Override
public ResultDTO getAllAgentsSelectedByCompanySiteId(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 sqlStrBuilder = new StringBuilder();
sqlStrBuilder.append(SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_MNG, "campaign-agents-by-params"));
sqlStrBuilder.append(" RIGHT JOIN CAMPAIGN_AGENT b on a.USER_ID = b.AGENT_ID");
sqlStrBuilder.append(" WHERE 1 = 1");
sqlStrBuilder.append(" AND b.COMPANY_SITE_ID = :p_company_site_id");
sqlStrBuilder.append(" AND b.CAMPAIGN_ID = :p_campaign_id");
sqlStrBuilder.append(" ORDER BY a.FULL_NAME ASC");
SQLQuery query = session.createSQLQuery(sqlStrBuilder.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("userTypeId", new LongType());
query.addScalar("createDate", new DateType());
query.addScalar("description", new StringType());
query.addScalar("staffCode", new StringType());
query.addScalar("managerId", new LongType());
query.addScalar("locationId", new LongType());
query.addScalar("deptId", new LongType());
query.addScalar("deptLevel", new StringType());
query.addScalar("posId", new LongType());
query.addScalar("deptName", new StringType());
query.addScalar("groupId", new LongType());
query.addScalar("siteId", new LongType());
query.addScalar("companySiteId", new LongType());
query.addScalar("agentType", new ShortType());
query.addScalar("mobileNumber", new StringType());
query.addScalar("facebookId", new StringType());
query.addScalar("loginType", new ShortType());
query.addScalar("googleId", new StringType());
query.addScalar("email", new StringType());
query.addScalar("availableTicket", new LongType());
query.addScalar("userKazooId", new StringType());
query.addScalar("filterType", new ShortType());
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 createCampaignAgents(CampaignAgentsDTO campaignAgentsDTO) {
ResultDTO resultDTO = new ResultDTO();
CampaignAgentsMapper campaignAgentsMapper = new CampaignAgentsMapper();
CampaignAgent campaignAgent = new CampaignAgent();
try {
if (campaignAgentsDTO != null) {
// insert
campaignAgent = campaignAgentsMapper.toPersistenceBean(campaignAgentsDTO);
campaignAgentsRepository.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;
}
}
package com.viettel.campaign.service.impl;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.repository.ccms_full.CampaignExecuteRepository;
import com.viettel.campaign.model.acd_full.Agents;
import com.viettel.campaign.model.ccms_full.TimeRangeDialMode;
import com.viettel.campaign.model.ccms_full.TimeZoneDialMode;
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;
......@@ -19,9 +24,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.*;
@Service
public class CampaignExecuteServiceImp implements CampaignExecuteService {
......@@ -29,9 +32,24 @@ 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
CampaignRepositoryCustom campaignRepositoryCustom;
@Autowired
CampaignExecuteRepository campaignExecuteRepository;
@Autowired
AgentsRepository agentsRepository;
@Autowired
CampaignAgentRepository campaignAgentRepository;
@Autowired
TimeZoneDialModeRepository zoneDialModeRepository;
@Autowired
TimeRangeDialModeRepository rangeDialModeRepository;
//<editor-fold: hungtt>
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
......@@ -194,4 +212,77 @@ public class CampaignExecuteServiceImp implements CampaignExecuteService {
cell.setCellStyle(rowStyle);
}
//</editor-fold: hungtt>
@Override
public ResultDTO searchCampaignExecute(CampaignRequestDTO requestDto) {
ResultDTO result = new ResultDTO();
Map data = new HashMap();
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(CampaignRequestDTO dto) {
ResultDTO result = new ResultDTO();
Map data = new HashMap();
data.put("campaignId", dto.getCampaignId());
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()));
return result;
}
}
......@@ -61,12 +61,6 @@ public class CampaignServiceImpl implements CampaignService {
@Autowired
ApParamRepository apParamRepository;
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO searchCampaignExecute(CampaignRequestDTO requestDto) {
return campaignRepositoryCustom.searchCampaignExecute(requestDto);
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO search(CampaignRequestDTO requestDto) {
......
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());
}
}
package com.viettel.campaign.utils;
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(), org.springframework.util.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) org.springframework.util.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);
}
}
}
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class CampaignAgentsDTO extends BaseDTO {
Long campaignAgentId;
Long campaignId;
Long agentId;
Short filterType;
Integer status;
Long companySiteId;
Long reSchedule;
}
package com.viettel.campaign.web.rest;
import com.viettel.campaign.service.AgentsService;
import com.viettel.campaign.web.dto.CampaignAgentsDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -9,6 +10,8 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@RestController
@RequestMapping("/ipcc/agents")
@CrossOrigin
......@@ -32,4 +35,19 @@ public class AgentsController {
ResultDTO result = agentsService.getAllAgentsByCompanySiteId(page, pageSize, companySiteId);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@GetMapping("/findAllSelected")
@ResponseBody
public ResponseEntity<ResultDTO> listAgentsSelectedByCompanySiteId(@RequestParam("page") int page, @RequestParam("pageSize") int pageSize, @RequestParam("companySiteId") Long companySiteId, @RequestParam("campaignId") Long campaignId) {
ResultDTO result = agentsService.getAllAgentsSelectedByCompanySiteId(page, pageSize, companySiteId, campaignId);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@PostMapping("/createCampaignAgents")
@ResponseBody
public ResultDTO createCustomerList(@RequestBody @Valid CampaignAgentsDTO campaignAgentsDTO) {
ResultDTO result = new ResultDTO();
result = agentsService.createCampaignAgents(campaignAgentsDTO);
return result;
}
}
......@@ -42,7 +42,21 @@ public class CampaignController {
@PostMapping("/searchCampaignExecute")
@ResponseBody
public ResponseEntity<ResultDTO> searchCampaignExecute(@RequestBody CampaignRequestDTO requestDto) {
ResultDTO result = campaignService.searchCampaignExecute(requestDto);
ResultDTO result = campaignExecuteService.searchCampaignExecute(requestDto);
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 CampaignRequestDTO requestDto) {
ResultDTO result = campaignExecuteService.getCall(requestDto);
return new ResponseEntity<>(result, HttpStatus.OK);
}
......
......@@ -183,6 +183,7 @@ public class CustomerController {
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---------");
......@@ -239,14 +240,18 @@ public class CustomerController {
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
}
//</editor-fold>
@RequestMapping(value = "/searchCustomerListInfoFromCustomerList", method = RequestMethod.GET)
public ResultDTO searchCustomerListInfoFromCustomerList(@RequestParam("page") int page,
@RequestParam("pageSize") int pageSize,
@RequestParam("sort") String sort,
@RequestParam("campaignId") Long campaignId,
@RequestParam("companySiteId") Long companySiteId) {
return null;// customerService.searchCustomerListInfoFromCustomerList(page, pageSize, sort, campaignId, companySiteId);
@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")
......
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