Commit b2e6cdb5 authored by ='s avatar =

hungtt-commit reallocation customer

parent 9ed37467
...@@ -6,27 +6,16 @@ import com.viettel.campaign.repository.ccms_full.TimeRangeDialModeRepository; ...@@ -6,27 +6,16 @@ import com.viettel.campaign.repository.ccms_full.TimeRangeDialModeRepository;
import com.viettel.campaign.repository.ccms_full.TimeZoneDialModeRepository; import com.viettel.campaign.repository.ccms_full.TimeZoneDialModeRepository;
import com.viettel.campaign.utils.Constants; import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.utils.DataUtil; import com.viettel.campaign.utils.DataUtil;
import com.viettel.campaign.utils.HibernateUtil;
import com.viettel.campaign.utils.SQLBuilder; import com.viettel.campaign.utils.SQLBuilder;
import com.viettel.campaign.web.dto.ApParamDTO; import com.viettel.campaign.web.dto.ApParamDTO;
import com.viettel.campaign.web.dto.CampaignDTO; import com.viettel.campaign.web.dto.CampaignDTO;
import com.viettel.campaign.web.dto.ContactCustResultDTO; import com.viettel.campaign.web.dto.ContactCustResultDTO;
import com.viettel.campaign.web.dto.ResultDTO; import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.request_dto.CampaignRequestDTO; import com.viettel.campaign.web.dto.request_dto.CampaignRequestDTO;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.transform.Transformers;
import org.hibernate.type.DateType;
import org.hibernate.type.LongType;
import org.hibernate.type.ShortType;
import org.hibernate.type.StringType;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
...@@ -100,124 +89,35 @@ public class CampaignExecuteRepositoryImp implements CampaignExecuteRepository { ...@@ -100,124 +89,35 @@ public class CampaignExecuteRepositoryImp implements CampaignExecuteRepository {
public ResultDTO getInteractiveResult(CampaignRequestDTO dto) { public ResultDTO getInteractiveResult(CampaignRequestDTO dto) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
List<ContactCustResultDTO> list = new ArrayList<>(); List<ContactCustResultDTO> list = new ArrayList<>();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); Map<String, String> params = new HashMap<>();
Session session = sessionFactory.openSession();
session.beginTransaction();
StringBuilder sqlBuilder = new StringBuilder();
try { try {
String sql = SQLBuilder.getSqlQueryById(Constants.SQL_MODULES.MODULE_EXECUTE, "get-execute-interactive"); String sql = SQLBuilder.getSqlQueryById(Constants.SQL_MODULES.MODULE_EXECUTE, "get-execute-interactive");
sqlBuilder.append(sql); params.put("p_company_site_id", dto.getCompanySiteId());
params.put("p_customer_id", dto.getCustomerId());
sqlBuilder.append(" and b.campaign_type in (:p_list_compaign_type)"); params.put("p_date_from", dto.getFromDate());
sqlBuilder.append(" and to_char(a.customer_id) like :p_customer_id"); params.put("p_date_to", dto.getToDate());
sqlBuilder.append(" and to_char(a.contact_status) in (:p_list_contact_status)"); params.put("p_list_compaign_type", dto.getCampaignType());
sqlBuilder.append(" and to_char(a.call_status) in (:p_list_survey_status)"); params.put("p_list_contact_status", dto.getContactStatus());
sqlBuilder.append(" and to_char(a.status) in (:p_list_record_status)"); params.put("p_list_survey_status", dto.getSurveyStatus());
params.put("p_list_record_status", dto.getRecordStatus());
if (!DataUtil.isNullOrEmpty(dto.getPhoneNumber())) { params.put("p_call_time_from", dto.getCallTimeFrom());
sqlBuilder.append(" and a.phone_number like :p_phone_number"); params.put("p_list_campaign_id", dto.getCallTimeTo());
} params.put("p_phone_number", dto.getPhoneNumber());
if (!DataUtil.isNullOrEmpty(dto.getCampaignId())) { params.put("p_campaign_name", dto.getCampaignName().toUpperCase());
sqlBuilder.append(" and b.campaign_code in (:p_list_campaign_id) "); params.put("p_user_name", dto.getAgentId().toUpperCase());
} params.put("p_page_number", dto.getPage().toString());
if (!DataUtil.isNullOrEmpty(dto.getCampaignName())) { params.put("p_page_size", dto.getPageSize().toString());
sqlBuilder.append(" and upper(b.campaign_name) like :p_campaign_name");
} list = namedParameterJdbcTemplate.query(sql, params, BeanPropertyRowMapper.newInstance(ContactCustResultDTO.class));
if (!DataUtil.isNullOrEmpty(dto.getAgentId())) { resultDTO.setListData(list);
sqlBuilder.append(" and upper(c.user_name) like :p_user_name"); resultDTO.setTotalRow(list.size());
}
SQLQuery query = session.createSQLQuery(sqlBuilder.toString());
query.setParameter("p_company_site_id", dto.getCompanySiteId());
query.setParameter("p_customer_id", "%" + dto.getCustomerId()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
query.setParameter("p_date_from", dto.getFromDate());
query.setParameter("p_date_to", dto.getToDate());
query.setParameterList("p_list_compaign_type", dto.getCampaignType().split(","));
query.setParameterList("p_list_contact_status", dto.getContactStatus().split(","));
query.setParameterList("p_list_survey_status", dto.getSurveyStatus().split(","));
query.setParameterList("p_list_record_status", dto.getRecordStatus().split(","));
query.setParameter("p_call_time_from", dto.getCallTimeFrom());
query.setParameter("p_call_time_to", dto.getCallTimeTo());
if (!DataUtil.isNullOrEmpty(dto.getCampaignId())) {
query.setParameterList("p_list_campaign_id", dto.getCampaignId().split(","));
}
if (!DataUtil.isNullOrEmpty(dto.getPhoneNumber())) {
query.setParameter("p_phone_number", "%" + dto.getPhoneNumber()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
}
if (!DataUtil.isNullOrEmpty(dto.getCampaignName())) {
query.setParameter("p_campaign_name", "%" + dto.getCampaignName().toUpperCase()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
}
if (!DataUtil.isNullOrEmpty(dto.getAgentId())) {
query.setParameter("p_user_name", "%" + dto.getAgentId().toUpperCase()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
}
query.addScalar("campaignCode", new StringType());
query.addScalar("campaignName", new StringType());
query.addScalar("userName", new StringType());
query.addScalar("phoneNumber", new StringType());
query.addScalar("customerName", new StringType());
query.addScalar("createTime", new DateType());
query.addScalar("contactStatus", new StringType());
query.addScalar("surveyStatus", new StringType());
query.addScalar("status", new ShortType());
query.addScalar("recordStatus", new ShortType());
query.addScalar("callTime", new LongType());
query.setResultTransformer(Transformers.aliasToBean(ContactCustResultDTO.class));
int count = 0;
list = query.list();
if (list.size() > 0) {
count = list.size();
}
Pageable pageable = SQLBuilder.buildPageable(dto);
if (pageable != null) {
query.setFirstResult(pageable.getPageNumber() * pageable.getPageSize());
query.setMaxResults(pageable.getPageSize());
}
List<ContactCustResultDTO> data = query.list();
for (ContactCustResultDTO contactCustResultDTO : data) {
if (!"AGENT".equals(dto.getRoleUser())) {
contactCustResultDTO.setEnableEdit(true);
} else {
if (contactCustResultDTO.getRecordStatus() == 2) {
contactCustResultDTO.setEnableEdit(true);
} else if (contactCustResultDTO.getRecordStatus() == 1 && isLower24Hour(contactCustResultDTO.getCreateTime())) {
contactCustResultDTO.setEnableEdit(true);
} else {
contactCustResultDTO.setEnableEdit(false);
}
}
}
Page<ContactCustResultDTO> dataPage = new PageImpl<>(data, pageable, count);
resultDTO.setData(dataPage);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS); resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS); resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception e) { } catch (Exception e) {
logger.error(e.getMessage(), e);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR); resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR); resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
logger.error(e.getMessage(), e);
} finally { } finally {
session.close();
return resultDTO; return resultDTO;
} }
} }
...@@ -225,95 +125,29 @@ public class CampaignExecuteRepositoryImp implements CampaignExecuteRepository { ...@@ -225,95 +125,29 @@ public class CampaignExecuteRepositoryImp implements CampaignExecuteRepository {
@Override @Override
public List<ContactCustResultDTO> getExcelInteractiveResult(CampaignRequestDTO dto) { public List<ContactCustResultDTO> getExcelInteractiveResult(CampaignRequestDTO dto) {
List<ContactCustResultDTO> list = new ArrayList<>(); List<ContactCustResultDTO> list = new ArrayList<>();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); Map<String, String> params = new HashMap<>();
Session session = sessionFactory.openSession();
session.beginTransaction();
StringBuilder sqlBuilder = new StringBuilder();
try { try {
String sql = SQLBuilder.getSqlQueryById(Constants.SQL_MODULES.MODULE_EXECUTE, "get-execute-interactive"); String sql = SQLBuilder.getSqlQueryById(Constants.SQL_MODULES.MODULE_EXECUTE, "get-execute-interactive");
sqlBuilder.append(sql); params.put("p_company_site_id", dto.getCompanySiteId());
params.put("p_customer_id", dto.getCustomerId());
sqlBuilder.append(" and b.campaign_type in (:p_list_compaign_type)"); params.put("p_date_from", dto.getFromDate());
sqlBuilder.append(" and to_char(a.customer_id) like :p_customer_id"); params.put("p_date_to", dto.getToDate());
sqlBuilder.append(" and to_char(a.contact_status) in (:p_list_contact_status)"); params.put("p_list_compaign_type", dto.getCampaignType());
sqlBuilder.append(" and to_char(a.call_status) in (:p_list_survey_status)"); params.put("p_list_contact_status", dto.getContactStatus());
sqlBuilder.append(" and to_char(a.status) in (:p_list_record_status)"); params.put("p_list_survey_status", dto.getSurveyStatus());
params.put("p_list_record_status", dto.getRecordStatus());
if (!DataUtil.isNullOrEmpty(dto.getPhoneNumber())) { params.put("p_call_time_from", dto.getCallTimeFrom());
sqlBuilder.append(" and a.phone_number like :p_phone_number"); params.put("p_list_campaign_id", dto.getCallTimeTo());
} params.put("p_phone_number", dto.getPhoneNumber());
if (!DataUtil.isNullOrEmpty(dto.getCampaignId())) { params.put("p_campaign_name", dto.getCampaignName().toUpperCase());
sqlBuilder.append(" and b.campaign_code in (:p_list_campaign_id) "); params.put("p_user_name", dto.getAgentId().toUpperCase());
} params.put("p_page_number", dto.getPage().toString());
if (!DataUtil.isNullOrEmpty(dto.getCampaignName())) { params.put("p_page_size", "0");
sqlBuilder.append(" and upper(b.campaign_name) like :p_campaign_name");
} list = namedParameterJdbcTemplate.query(sql, params, BeanPropertyRowMapper.newInstance(ContactCustResultDTO.class));
if (!DataUtil.isNullOrEmpty(dto.getAgentId())) {
sqlBuilder.append(" and upper(c.user_name) like :p_user_name");
}
SQLQuery query = session.createSQLQuery(sqlBuilder.toString());
query.setParameter("p_company_site_id", dto.getCompanySiteId());
query.setParameter("p_customer_id", "%" + dto.getCustomerId()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
query.setParameter("p_date_from", dto.getFromDate());
query.setParameter("p_date_to", dto.getToDate());
query.setParameterList("p_list_compaign_type", dto.getCampaignType().split(","));
query.setParameterList("p_list_contact_status", dto.getContactStatus().split(","));
query.setParameterList("p_list_survey_status", dto.getSurveyStatus().split(","));
query.setParameterList("p_list_record_status", dto.getRecordStatus().split(","));
query.setParameter("p_call_time_from", dto.getCallTimeFrom());
query.setParameter("p_call_time_to", dto.getCallTimeTo());
if (!DataUtil.isNullOrEmpty(dto.getCampaignId())) {
query.setParameterList("p_list_campaign_id", dto.getCampaignId().split(","));
}
if (!DataUtil.isNullOrEmpty(dto.getPhoneNumber())) {
query.setParameter("p_phone_number", "%" + dto.getPhoneNumber()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
}
if (!DataUtil.isNullOrEmpty(dto.getCampaignName())) {
query.setParameter("p_campaign_name", "%" + dto.getCampaignName().toUpperCase()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
}
if (!DataUtil.isNullOrEmpty(dto.getAgentId())) {
query.setParameter("p_user_name", "%" + dto.getAgentId().toUpperCase()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
}
query.addScalar("campaignCode", new StringType());
query.addScalar("campaignName", new StringType());
query.addScalar("userName", new StringType());
query.addScalar("phoneNumber", new StringType());
query.addScalar("customerName", new StringType());
query.addScalar("createTime", new DateType());
query.addScalar("contactStatus", new StringType());
query.addScalar("surveyStatus", new StringType());
query.addScalar("status", new ShortType());
query.addScalar("recordStatus", new ShortType());
query.addScalar("callTime", new LongType());
query.setResultTransformer(Transformers.aliasToBean(ContactCustResultDTO.class));
list = query.list();
} catch (Exception e) { } catch (Exception e) {
logger.error(e.getMessage(), e); logger.error(e.getMessage(), e);
} finally { } finally {
session.close();
return list; return list;
} }
} }
......
select b.campaign_code campaignCode, with campaign_type_list as (
select trim (regexp_substr(:p_list_compaign_type, '[^,]+', 1, level)) campaign_type
from dual
connect by level <= regexp_count(:p_list_compaign_type, ',') +1
),
contact_status_list as (
select trim (regexp_substr(:p_list_contact_status, '[^,]+', 1, level)) contact_status
from dual
connect by level <= regexp_count(:p_list_contact_status, ',') +1
),
survey_status_list as (
select trim (regexp_substr(:p_list_survey_status, '[^,]+', 1, level)) survey_status
from dual
connect by level <= regexp_count(:p_list_survey_status, ',') +1
),
record_status_list as (
select trim (regexp_substr(:p_list_record_status, '[^,]+', 1, level)) record_status
from dual
connect by level <= regexp_count(:p_list_record_status, ',') +1
),
campaign_id_list as (
select trim (regexp_substr(:p_list_campaign_id, '[^,]+', 1, level)) campaign_id
from dual
connect by level <= regexp_count(:p_list_campaign_id, ',') +1
),
data_temp as (
select b.campaign_code campaignCode,
b.campaign_name campaignName, b.campaign_name campaignName,
c.user_name userName, c.user_name userName,
a.phone_number phoneNumber, a.phone_number phoneNumber,
...@@ -9,16 +35,31 @@ select b.campaign_code campaignCode, ...@@ -9,16 +35,31 @@ select b.campaign_code campaignCode,
g.status status, g.status status,
a.status recordStatus, a.status recordStatus,
(a.end_time - a.start_call)*24*60 callTime (a.end_time - a.start_call)*24*60 callTime
from contact_cust_result a from contact_cust_result a
left join campaign b on a.campaign_id = b.campaign_id left join campaign b on a.campaign_id = b.campaign_id
left join vsa_users c on a.agent_id = c.user_id left join vsa_users c on a.agent_id = c.user_id
left join customer d on a.customer_id = d.customer_id left join customer d on a.customer_id = d.customer_id
left join campaign_complete_code e on a.contact_status = e.complete_value left join campaign_complete_code e on a.contact_status = e.complete_value
left join campaign_complete_code f on a.call_status = e.complete_value left join campaign_complete_code f on a.call_status = e.complete_value
left join campaign g on a.campaign_id = g.campaign_id left join campaign g on a.campaign_id = g.campaign_id
where a.status <> 0 where a.status <> 0
and a.company_site_id = :p_company_site_id and a.company_site_id = :p_company_site_id
and a.create_time >= to_date(:p_date_from, 'DD/MM/YYYY') and a.create_time >= to_date(:p_date_from, 'DD/MM/YYYY')
and a.create_time <= to_date(:p_date_to, 'DD/MM/YYYY') and a.create_time <= to_date(:p_date_to, 'DD/MM/YYYY')
and a.duration_call >= :p_call_time_from and a.duration_call >= :p_call_time_from
and a.duration_call <= :p_call_time_to and a.duration_call <= :p_call_time_to
and to_char(a.customer_id) like '%'||:p_customer_id||'%'
and b.campaign_type in (select campaign_type from campaign_type_list)
and to_char(a.contact_status) in (select contact_status from contact_status_list)
and to_char(a.call_status) in (select survey_status from survey_status_list)
and to_char(a.status) in (select record_status from record_status_list)
and (:p_phone_number is null or to_char(a.phone_number) like '%'||:p_phone_number||'%')
and (:p_list_campaign_id is null or b.campaign_code in (select campaign_id from campaign_id_list))
and (:p_campaign_name is null or upper(b.campaign_name) like '%'||:p_campaign_name||'%')
and (:p_user_name is null or upper(c.user_name) like '%'||:p_user_name||'%')
),
data as (
select a.*, rownum row_ from data_temp a
)
select * from data
where :p_page_size = 0 or (row_ >= ((:p_page_number - 1) * :p_page_size + 1) and row_ < (:p_page_number * :p_page_size + 1))
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