Commit 2b5770de authored by Tu Bach's avatar Tu Bach
parents 7239ffd0 223e90e6
......@@ -12,11 +12,14 @@ import java.util.Date;
@Getter
@Setter
public class CampaignCustomer {
@Id
@GeneratedValue(generator = "CAMPAIGN_CUSTOMER_SEQ")
@SequenceGenerator(name = "CAMPAIGN_CUSTOMER_SEQ", sequenceName = "CAMPAIGN_CUSTOMER_SEQ", allocationSize = 1)
@Basic(optional = false)
@NotNull
@Column(name = "CAMPAIGN_CUSTOMERLIST_ID")
private Long campaignCustomerListId;
@Column(name = "CAMPAIGN_CUSTOMER_ID")
private Long campaignCustomerId;
@Column(name = "CAMPAIGN_ID")
private Long campaignId;
@Column(name = "CUSTOMER_ID")
......
package com.viettel.campaign.model.ccms_full;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
@Entity
@Table(name = "CAMPAIGN_CUSTOMERLIST_COLUMN")
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class CampaignCustomerListColumn implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "CAMPAIGN_CUS_LIST_COLUMN_SEQ")
@SequenceGenerator(name = "CAMPAIGN_CUS_LIST_COLUMN_SEQ", sequenceName = "CAMPAIGN_CUS_LIST_COLUMN_SEQ", allocationSize = 1)
@NotNull
@Column(name = "CAMPAIGN_CUS_LIST_COLUMN_ID")
private Long campaignCusListColId;
@Column(name = "COMPANY_SITE_ID")
private Long companySiteId;
@Column(name = "CAMPAIGN_ID")
private Long campaignId;
@Size(max = 200)
@Column(name = "COLUMN_NAME")
private String columnName;
@Column(name = "ORDER_INDEX")
private Long orderIndex;
@Column(name = "CUSTOMIZE_FIELD_ID")
private Long customizeFieldId;
@Size(max = 200)
@Column(name = "CUSTOMIZE_FIELD_TITLE")
private String customizeFieldTitle;
}
......@@ -5,10 +5,12 @@ import com.viettel.campaign.model.ccms_full.CampaignCustomer;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Repository
@Transactional(DataSourceQualify.CCMS_FULL)
public interface CampaignCustomerRepository extends JpaRepository<CampaignCustomer, Long>, CampaignCustomerRepositoryCustom {
@Query(value = "SELECT COUNT(*) " +
......@@ -33,4 +35,6 @@ public interface CampaignCustomerRepository extends JpaRepository<CampaignCustom
" AND cc.recall_time <= SYSDATE\n" +
" AND cc.recall_time + interval :apParam MINUTE >= SYSDATE", nativeQuery = true)
List<CampaignCustomer> getCustomerRecallDate(@Param("campaignId") Long campaignId, @Param("agentId") Long agentId, @Param("companySiteId") Long companySiteId, @Param("apParam") String apParam);
CampaignCustomer findCampaignCustomerByCampaignCustomerId(Long id);
}
......@@ -22,4 +22,8 @@ public interface CampaignRepositoryCustom {
ResultDTO findCustomerListReallocation(CampaignRequestDTO dto);
//hungtt
ResultDTO reallocationCustomer(CampaignRequestDTO dto);
//hungtt
ResultDTO getListFieldsNotShow(CampaignRequestDTO dto);
//hungtt
ResultDTO getListFieldsToShow(CampaignRequestDTO dto);
}
......@@ -2,8 +2,12 @@ package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.ccms_full.ScenarioAnswer;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author anhvd_itsol
*/
......@@ -11,4 +15,13 @@ import org.springframework.stereotype.Repository;
@Repository
public interface ScenarioAnswerRepository extends JpaRepository<ScenarioAnswer, Long> {
List<ScenarioAnswer> findByScenarioQuestionIdAndCompanySiteIdAndStatus(Long scenarioQuestionId, Long companySiteId, Short status);
@Query(value="SELECT MAX(orderIndex) FROM ScenarioAnswer WHERE scenarioQuestionId = :scenarioQuestionId AND companySiteId = :companySiteId AND status = 1")
Long getMaxAnswerOrderId(@Param("scenarioQuestionId") Long scenarioQuestionId, @Param("companySiteId") Long companySiteId);
Integer deleteScenarioAnswersByScenarioQuestionId(Long scenarioQuestionId);
ScenarioAnswer findScenarioAnswerByScenarioAnswerId(Long scenarioAnswerId);
}
......@@ -14,11 +14,13 @@ import java.util.List;
@Repository
public interface ScenarioQuestionRepository extends JpaRepository<ScenarioQuestion, Long> {
List<ScenarioQuestion> findScenarioQuestionsByScenarioIdAndCampaignIdAndCompanySiteIdAndStatus(Long scenarioId, Long campaignId, Long companySiteId, Short status);
List<ScenarioQuestion> findScenarioQuestionsByScenarioIdAndCampaignIdAndCompanySiteIdAndStatusOrderByOrderIndex(Long scenarioId, Long campaignId, Long companySiteId, Short status);
@Query(value="SELECT MAX(orderIndex) FROM ScenarioQuestion WHERE scenarioId = :scenarioId AND campaignId = :campaignId AND companySiteId = :companySiteId AND status = 1")
Long getMaxOrderId(@Param("scenarioId") Long scenarioId, @Param("campaignId") Long campaignId, @Param("companySiteId") Long companySiteId);
@Query(value = "SELECT COUNT(1) FROM ScenarioQuestion WHERE code = :code AND scenarioId = :scenarioId AND campaignId = :campaignId AND companySiteId = :companySiteId AND status = 1")
Integer countDuplicateQuestionCode(@Param("code") String code, @Param("scenarioId") Long scenarioId, @Param("campaignId") Long campaignId, @Param("companySiteId") Long companySiteId);
ScenarioQuestion findScenarioQuestionByScenarioQuestionId(Long scenarioQuestionId);
}
......@@ -108,213 +108,77 @@ public class CampaignExecuteRepositoryImp implements CampaignExecuteRepository {
public ResultDTO getInteractiveResult(CampaignRequestDTO dto) {
ResultDTO resultDTO = new ResultDTO();
List<ContactCustResultDTO> list = new ArrayList<>();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
// try {
//String sql = SQLBuilder.getSqlQueryById(Constants.SQL_MODULES.MODULE_EXECUTE, "get-execute-interactive");
// sb.append(sql);
StringBuilder sb = new StringBuilder();
sb.append(" select b.campaign_code campaignCode,");
sb.append(" b.campaign_name campaignName,");
sb.append(" c.user_name userName,");
sb.append(" a.phone_number phoneNumber,");
sb.append(" d.name customerName,");
sb.append(" to_date(a.start_call, 'DD/MM/YYYY') startCall,");
sb.append(" e.complete_name contactStatus,");
sb.append(" f.complete_name surveyStatus,");
sb.append(" g.status status,");
sb.append(" a.status recordStatus,");
sb.append(" (a.end_time - a.start_call)*24*60 callTime");
sb.append(" from contact_cust_result a");
sb.append(" left join campaign b on a.campaign_id = b.campaign_id");
sb.append(" left join vsa_users c on a.agent_id = c.user_id");
sb.append(" left join customer d on a.customer_id = d.customer_id");
sb.append(" left join campaign_complete_code e on a.contact_status = e.complete_value");
sb.append(" left join campaign_complete_code f on a.call_status = e.complete_value");
sb.append(" left join campaign g on a.campaign_id = g.campaign_id");
sb.append(" where a.status <> 0");
sb.append(" and a.company_site_id = :p_company_site_id");
sb.append(" and a.create_time >= to_date(:p_date_from, 'DD/MM/YYYY')");
sb.append(" and a.create_time <= to_date(:p_date_to, 'DD/MM/YYYY')");
sb.append(" and a.duration_call >= :p_call_time_from");
sb.append(" and a.duration_call <= :p_call_time_to");
sb.append(" and b.campaign_type in (:p_list_compaign_type)");
sb.append(" and to_char(a.customer_id) like :p_customer_id");
sb.append(" and to_char(a.contact_status) in (:p_list_contact_status)");
sb.append(" and to_char(a.call_status) in (:p_list_survey_status)");
sb.append(" and to_char(a.status) in (:p_list_record_status)");
if (!DataUtil.isNullOrEmpty(dto.getPhoneNumber())) {
sb.append(" and a.phone_number like :p_phone_number");
}
if (!DataUtil.isNullOrEmpty(dto.getCampaignId())) {
sb.append(" and b.campaign_code in (:p_list_campaign_id) ");
}
if (!DataUtil.isNullOrEmpty(dto.getCampaignName())) {
sb.append(" and upper(b.campaign_name) like :p_campaign_name");
}
if (!DataUtil.isNullOrEmpty(dto.getAgentId())) {
sb.append(" and upper(c.user_name) like :p_user_name");
}
SQLQuery query = session.createSQLQuery(sb.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);
Map<String, String> params = new HashMap<>();
try {
// String sql = SQLBuilder.getSqlQueryById(Constants.SQL_MODULES.MODULE_EXECUTE, "get-execute-interactive");
StringBuilder sql = new StringBuilder();
sb.append("with campaign_type_list as (");
sb.append(" select trim (regexp_substr(:p_list_compaign_type, '[^,]+', 1, level)) campaign_type");
sb.append(" from dual");
sb.append(" connect by level <= regexp_count(:p_list_compaign_type, ',') +1");
sb.append(" ),");
sb.append(" contact_status_list as (");
sb.append(" select trim (regexp_substr(:p_list_contact_status, '[^,]+', 1, level)) contact_status");
sb.append(" from dual");
sb.append(" connect by level <= regexp_count(:p_list_contact_status, ',') +1");
sb.append(" ),");
sb.append(" survey_status_list as (");
sb.append(" select trim (regexp_substr(:p_list_survey_status, '[^,]+', 1, level)) survey_status");
sb.append(" from dual");
sb.append(" connect by level <= regexp_count(:p_list_survey_status, ',') +1");
sb.append(" ),");
sb.append(" record_status_list as (");
sb.append(" select trim (regexp_substr(:p_list_record_status, '[^,]+', 1, level)) record_status");
sb.append(" from dual");
sb.append(" connect by level <= regexp_count(:p_list_record_status, ',') +1");
sb.append(" ),");
sb.append(" campaign_id_list as (");
sb.append(" select trim (regexp_substr(:p_list_campaign_id, '[^,]+', 1, level)) campaign_id");
sb.append(" from dual");
sb.append(" connect by level <= regexp_count(:p_list_campaign_id, ',') +1");
sb.append(" ),");
sb.append(" data_temp as (");
sb.append(" select b.campaign_code campaignCode,");
sb.append(" b.campaign_name campaignName,");
sb.append(" c.user_name userName,");
sb.append(" a.phone_number phoneNumber,");
sb.append(" d.name customerName,");
sb.append(" to_date(a.start_call, 'DD/MM/YYYY') startCall,");
sb.append(" e.complete_name contactStatus,");
sb.append(" f.complete_name surveyStatus,");
sb.append(" g.status status,");
sb.append(" a.status recordStatus,");
sb.append(" (a.end_time - a.start_call)*24*60 callTime");
sb.append(" from contact_cust_result a");
sb.append(" left join campaign b on a.campaign_id = b.campaign_id");
sb.append(" left join vsa_users c on a.agent_id = c.user_id");
sb.append(" left join customer d on a.customer_id = d.customer_id");
sb.append(" left join campaign_complete_code e on a.contact_status = e.complete_value");
sb.append(" left join campaign_complete_code f on a.call_status = e.complete_value");
sb.append(" left join campaign g on a.campaign_id = g.campaign_id");
sb.append(" where a.status <> 0");
sb.append(" and a.company_site_id = :p_company_site_id");
sb.append(" and a.create_time >= to_date(:p_date_from, 'DD/MM/YYYY')");
sb.append(" and a.create_time <= to_date(:p_date_to, 'DD/MM/YYYY')");
sb.append(" and a.duration_call >= :p_call_time_from");
sb.append(" and a.duration_call <= :p_call_time_to");
sb.append(" and to_char(a.customer_id) like '%'||:p_customer_id||'%'");
sb.append(" and b.campaign_type in (select campaign_type from campaign_type_list)");
sb.append(" and to_char(a.contact_status) in (select contact_status from contact_status_list)");
sb.append(" and to_char(a.call_status) in (select survey_status from survey_status_list)");
sb.append(" and to_char(a.status) in (select record_status from record_status_list)");
sb.append(" and (:p_phone_number is null or to_char(a.phone_number) like '%'||:p_phone_number||'%')");
sb.append(" and (:p_list_campaign_id is null or b.campaign_code in (select campaign_id from campaign_id_list))");
sb.append(" and (:p_campaign_name is null or upper(b.campaign_name) like '%'||:p_campaign_name||'%')");
sb.append(" and (:p_user_name is null or upper(c.user_name) like '%'||:p_user_name||'%')");
sb.append(" ),");
sb.append(" data as (");
sb.append(" select a.*, rownum row_ from data_temp a");
sb.append(" )");
sb.append(" select * from data");
sb.append(" where :p_page_size = 0 or (row_ >= ((:p_page_number - 1) * :p_page_size + 1) and row_ < (:p_page_number * :p_page_size + 1))");
sql.append("with campaign_type_list as (");
sql.append(" select trim (regexp_substr(:p_list_compaign_type, '[^,]+', 1, level)) campaign_type");
sql.append(" from dual");
sql.append(" connect by level <= regexp_count(:p_list_compaign_type, ',') +1");
sql.append(" ),");
sql.append(" contact_status_list as (");
sql.append(" select trim (regexp_substr(:p_list_contact_status, '[^,]+', 1, level)) contact_status");
sql.append(" from dual");
sql.append(" connect by level <= regexp_count(:p_list_contact_status, ',') +1");
sql.append(" ),");
sql.append(" survey_status_list as (");
sql.append(" select trim (regexp_substr(:p_list_survey_status, '[^,]+', 1, level)) survey_status");
sql.append(" from dual");
sql.append(" connect by level <= regexp_count(:p_list_survey_status, ',') +1");
sql.append(" ),");
sql.append(" record_status_list as (");
sql.append(" select trim (regexp_substr(:p_list_record_status, '[^,]+', 1, level)) record_status");
sql.append(" from dual");
sql.append(" connect by level <= regexp_count(:p_list_record_status, ',') +1");
sql.append(" ),");
sql.append(" campaign_id_list as (");
sql.append(" select trim (regexp_substr(:p_list_campaign_id, '[^,]+', 1, level)) campaign_id");
sql.append(" from dual");
sql.append(" connect by level <= regexp_count(:p_list_campaign_id, ',') +1");
sql.append(" ),");
sql.append(" data_temp as (");
sql.append(" select b.campaign_code campaignCode,");
sql.append(" b.campaign_name campaignName,");
sql.append(" c.user_name userName,");
sql.append(" a.phone_number phoneNumber,");
sql.append(" d.name customerName,");
sql.append(" to_date(a.start_call, 'DD/MM/YYYY') startCall,");
sql.append(" e.complete_name contactStatus,");
sql.append(" f.complete_name surveyStatus,");
sql.append(" g.status status,");
sql.append(" a.status recordStatus,");
sql.append(" (a.end_time - a.start_call)*24*60 callTime");
sql.append(" from contact_cust_result a");
sql.append(" left join campaign b on a.campaign_id = b.campaign_id");
sql.append(" left join vsa_users c on a.agent_id = c.user_id");
sql.append(" left join customer d on a.customer_id = d.customer_id");
sql.append(" left join campaign_complete_code e on a.contact_status = e.complete_value");
sql.append(" left join campaign_complete_code f on a.call_status = e.complete_value");
sql.append(" left join campaign g on a.campaign_id = g.campaign_id");
sql.append(" where a.status <> 0");
sql.append(" and a.company_site_id = :p_company_site_id");
sql.append(" and a.create_time >= to_date(:p_date_from, 'DD/MM/YYYY')");
sql.append(" and a.create_time <= to_date(:p_date_to, 'DD/MM/YYYY')");
sql.append(" and a.duration_call >= :p_call_time_from");
sql.append(" and a.duration_call <= :p_call_time_to");
sql.append(" and to_char(a.customer_id) like '%'||:p_customer_id||'%'");
sql.append(" and b.campaign_type in (select campaign_type from campaign_type_list)");
sql.append(" and to_char(a.contact_status) in (select contact_status from contact_status_list)");
sql.append(" and to_char(a.call_status) in (select survey_status from survey_status_list)");
sql.append(" and to_char(a.status) in (select record_status from record_status_list)");
sql.append(" and (:p_phone_number is null or to_char(a.phone_number) like '%'||:p_phone_number||'%')");
sql.append(" and (:p_list_campaign_id is null or b.campaign_code in (select campaign_id from campaign_id_list))");
sql.append(" and (:p_campaign_name is null or upper(b.campaign_name) like '%'||:p_campaign_name||'%')");
sql.append(" and (:p_user_name is null or upper(c.user_name) like '%'||:p_user_name||'%')");
sql.append(" ),");
sql.append(" data as (");
sql.append(" select a.*, rownum row_ from data_temp a");
sql.append(" )");
sql.append(" select * from data");
sql.append(" where :p_page_size = 0 or (row_ >= ((:p_page_number - 1) * :p_page_size + 1) and row_ < (:p_page_number * :p_page_size + 1))");
params.put("p_company_site_id", dto.getCompanySiteId());
params.put("p_customer_id", dto.getCustomerId());
......@@ -327,12 +191,27 @@ public class CampaignExecuteRepositoryImp implements CampaignExecuteRepository {
params.put("p_call_time_from", dto.getCallTimeFrom());
params.put("p_list_campaign_id", dto.getCallTimeTo());
params.put("p_phone_number", dto.getPhoneNumber());
params.put("p_campaign_name", dto.getCampaignName().toUpperCase());
params.put("p_campaign_name", DataUtil.isNullOrEmpty(dto.getCampaignName()) ? null : dto.getCampaignName().toUpperCase());
params.put("p_user_name", dto.getAgentId().toUpperCase());
params.put("p_page_number", dto.getPage().toString());
params.put("p_page_size", dto.getPageSize().toString());
list = namedParameterJdbcTemplate.query(sql.toString(), params, BeanPropertyRowMapper.newInstance(ContactCustResultDTO.class));
for (ContactCustResultDTO contactCustResultDTO : list) {
if (!"AGENT".equals(dto.getRoleUser())) {
contactCustResultDTO.setEnableEdit(true);
} else {
if (contactCustResultDTO.getRecordStatus() == 2) {
contactCustResultDTO.setEnableEdit(true);
} else if (contactCustResultDTO.getRecordStatus() == 1 && isLower24Hour(contactCustResultDTO.getCreateTime())) {
contactCustResultDTO.setEnableEdit(true);
} else {
contactCustResultDTO.setEnableEdit(false);
}
}
}
resultDTO.setListData(list);
resultDTO.setTotalRow(list.size());
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
......@@ -342,132 +221,16 @@ public class CampaignExecuteRepositoryImp implements CampaignExecuteRepository {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
} finally {
return resultDTO;
}
// }
return resultDTO;
}
@Override
public List<ContactCustResultDTO> getExcelInteractiveResult(CampaignRequestDTO dto) {
List<ContactCustResultDTO> list = new ArrayList<>();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
// try {
//String sql = SQLBuilder.getSqlQueryById(Constants.SQL_MODULES.MODULE_EXECUTE, "get-execute-interactive");
//sb.append(sql);
StringBuilder sb = new StringBuilder();
sb.append("select b.campaign_code campaignCode,");
sb.append(" b.campaign_name campaignName,");
sb.append(" c.user_name userName,");
sb.append(" a.phone_number phoneNumber,");
sb.append(" d.name customerName,");
sb.append(" to_date(a.start_call, 'DD/MM/YYYY') startCall,");
sb.append(" e.complete_name contactStatus,");
sb.append(" f.complete_name surveyStatus,");
sb.append(" g.status status,");
sb.append(" a.status recordStatus,");
sb.append(" (a.end_time - a.start_call)*24*60 callTime");
sb.append(" from contact_cust_result a");
sb.append(" left join campaign b on a.campaign_id = b.campaign_id");
sb.append(" left join vsa_users c on a.agent_id = c.user_id");
sb.append(" left join customer d on a.customer_id = d.customer_id");
sb.append(" left join campaign_complete_code e on a.contact_status = e.complete_value");
sb.append(" left join campaign_complete_code f on a.call_status = e.complete_value");
sb.append(" left join campaign g on a.campaign_id = g.campaign_id");
sb.append(" where a.status <> 0");
sb.append(" and a.company_site_id = :p_company_site_id");
sb.append(" and a.create_time >= to_date(:p_date_from, 'DD/MM/YYYY')");
sb.append(" and a.create_time <= to_date(:p_date_to, 'DD/MM/YYYY')");
sb.append(" and a.duration_call >= :p_call_time_from");
sb.append(" and a.duration_call <= :p_call_time_to");
sb.append(" and b.campaign_type in (:p_list_compaign_type)");
sb.append(" and to_char(a.customer_id) like :p_customer_id");
sb.append(" and to_char(a.contact_status) in (:p_list_contact_status)");
sb.append(" and to_char(a.call_status) in (:p_list_survey_status)");
sb.append(" and to_char(a.status) in (:p_list_record_status)");
if (!DataUtil.isNullOrEmpty(dto.getPhoneNumber())) {
sb.append(" and a.phone_number like :p_phone_number");
}
if (!DataUtil.isNullOrEmpty(dto.getCampaignId())) {
sb.append(" and b.campaign_code in (:p_list_campaign_id) ");
}
if (!DataUtil.isNullOrEmpty(dto.getCampaignName())) {
sb.append(" and upper(b.campaign_name) like :p_campaign_name");
}
if (!DataUtil.isNullOrEmpty(dto.getAgentId())) {
sb.append(" and upper(c.user_name) like :p_user_name");
}
SQLQuery query = session.createSQLQuery(sb.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();
Map<String, String> params = new HashMap<>();
try {
//String sql = SQLBuilder.getSqlQueryById(Constants.SQL_MODULES.MODULE_EXECUTE, "get-execute-interactive");
// BuildMyString.com generated code. Please enjoy your string responsibly.
StringBuilder sb2 = new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("with campaign_type_list as (");
sb.append(" select trim (regexp_substr(:p_list_compaign_type, '[^,]+', 1, level)) campaign_type");
......@@ -535,7 +298,6 @@ public class CampaignExecuteRepositoryImp implements CampaignExecuteRepository {
sb.append(" select * from data");
sb.append(" where :p_page_size = 0 or (row_ >= ((:p_page_number - 1) * :p_page_size + 1) and row_ < (:p_page_number * :p_page_size + 1))");
params.put("p_company_site_id", dto.getCompanySiteId());
params.put("p_customer_id", dto.getCustomerId());
params.put("p_date_from", dto.getFromDate());
......@@ -547,12 +309,12 @@ public class CampaignExecuteRepositoryImp implements CampaignExecuteRepository {
params.put("p_call_time_from", dto.getCallTimeFrom());
params.put("p_list_campaign_id", dto.getCallTimeTo());
params.put("p_phone_number", dto.getPhoneNumber());
params.put("p_campaign_name", dto.getCampaignName().toUpperCase());
params.put("p_campaign_name", DataUtil.isNullOrEmpty(dto.getCampaignName()) ? null : dto.getCampaignName().toUpperCase());
params.put("p_user_name", dto.getAgentId().toUpperCase());
params.put("p_page_number", dto.getPage().toString());
params.put("p_page_size", "0");
list = namedParameterJdbcTemplate.query(sb2.toString(), params, BeanPropertyRowMapper.newInstance(ContactCustResultDTO.class));
list = namedParameterJdbcTemplate.query(sb.toString(), params, BeanPropertyRowMapper.newInstance(ContactCustResultDTO.class));
} catch (Exception e) {
logger.error(e.getMessage(), e);
} finally {
......
......@@ -2,6 +2,7 @@ package com.viettel.campaign.repository.ccms_full.impl;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.CampaignCustomer;
import com.viettel.campaign.repository.ccms_full.CampaignCustomerRepository;
import com.viettel.campaign.repository.ccms_full.CampaignRepositoryCustom;
import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.utils.DataUtil;
......@@ -9,6 +10,7 @@ import com.viettel.campaign.utils.HibernateUtil;
import com.viettel.campaign.utils.SQLBuilder;
import com.viettel.campaign.web.dto.CampaignDTO;
import com.viettel.campaign.web.dto.CustomerCustomDTO;
import com.viettel.campaign.web.dto.FieldsToShowDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.request_dto.CampaignRequestDTO;
import org.apache.logging.log4j.LogManager;
......@@ -45,6 +47,9 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
@Qualifier(DataSourceQualify.NAMED_JDBC_PARAMETER_TEMPLATE_CCMS_FULL)
NamedParameterJdbcTemplate namedParameterJdbcTemplate;
@Autowired
CampaignCustomerRepository campaignCustomerRepository;
@Override
public ResultDTO search(CampaignRequestDTO requestDto) {
logger.info("Start search campaign::");
......@@ -408,13 +413,162 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO findCustomerListReallocation(CampaignRequestDTO dto) {
return null;
ResultDTO resultDTO = new ResultDTO();
List<CustomerCustomDTO> list = new ArrayList<>();
Map<String, String> params = new HashMap<>();
StringBuilder stringBuilder = new StringBuilder();
try {
// String sql = SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_MNG, "get-list-customer-reallocation");
stringBuilder.append(" with contact as (");
stringBuilder.append(" select customer_id, contact");
stringBuilder.append(" from (");
stringBuilder.append(" select * from customer_contact");
stringBuilder.append(" where status = 1");
stringBuilder.append(" and contact_type = 5");
stringBuilder.append(" and is_direct_line = 1");
stringBuilder.append(" order by create_date desc");
stringBuilder.append(" )");
stringBuilder.append(" where rownum = 1");
stringBuilder.append(" ),");
stringBuilder.append(" connect_status as (");
stringBuilder.append(" select complete_value, complete_name");
stringBuilder.append(" from campaign_complete_code");
stringBuilder.append(" where company_site_id = :p_company_site_id");
stringBuilder.append(" and complete_type = 1");
stringBuilder.append(" and complete_value <> 1");
stringBuilder.append(" ),");
stringBuilder.append(" connect_status_list as (");
stringBuilder.append(" select trim (regexp_substr(:p_list_connect_status, '[^,]+', 1, level)) connect_status");
stringBuilder.append(" from dual");
stringBuilder.append(" connect by level <= regexp_count(:p_list_connect_status, ',') +1");
stringBuilder.append(" ),");
stringBuilder.append(" data as (");
stringBuilder.append(" select a.campaign_customer_id campaignCustomerId,");
stringBuilder.append(" b.name customerName,");
stringBuilder.append(" c.contact mobileNumber,");
stringBuilder.append(" to_char(a.call_time, 'DD/MM/YYYY HH24:MI:SS') connectTime,");
stringBuilder.append(" d.complete_name connectStatus");
stringBuilder.append(" from campaign_customer a");
stringBuilder.append(" left join customer b on a.customer_id = b.customer_id");
stringBuilder.append(" left join contact c on a.customer_id = c.customer_id");
stringBuilder.append(" left join connect_status d on d.complete_value = a.status");
stringBuilder.append(" where a.campaign_id = :p_campaign_id");
stringBuilder.append(" and a.in_campaign_status = 1");
stringBuilder.append(" and a.status in (select connect_status from connect_status_list)");
stringBuilder.append(" order by connectTime desc, customerName");
stringBuilder.append(" ),");
stringBuilder.append(" final_data as (");
stringBuilder.append(" select a.*, rownum row_ from data a");
stringBuilder.append(" )");
stringBuilder.append(" select * from final_data");
stringBuilder.append(" where row_ >= ((:p_page_number - 1) * :p_page_size + 1)");
stringBuilder.append(" and row_ < (:p_page_number * :p_page_size + 1)");
params.put("p_company_site_id", dto.getCompanySiteId());
params.put("p_campaign_id", dto.getCampaignId());
params.put("p_list_connect_status", dto.getConnectStatus());
params.put("p_page_size", dto.getPageSize().toString());
params.put("p_page_number", dto.getPage().toString());
list = namedParameterJdbcTemplate.query(stringBuilder.toString(), params, BeanPropertyRowMapper.newInstance(CustomerCustomDTO.class));
resultDTO.setListData(list);
resultDTO.setTotalRow(list.size());
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception e) {
logger.error(e.getMessage(), e);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO reallocationCustomer(CampaignRequestDTO dto) {
return null;
ResultDTO resultDTO = new ResultDTO();
try {
List<CustomerCustomDTO> list = dto.getCustomerCustomDTOList();
for (CustomerCustomDTO customerCustomDTO: list) {
CampaignCustomer campaignCustomer = campaignCustomerRepository.findCampaignCustomerByCampaignCustomerId(customerCustomDTO.getCampaignCustomerId());
campaignCustomer.setStatus((short) 0);
campaignCustomer.setCallStatus(null);
campaignCustomer.setRedistribute((short) 1);
}
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception e) {
logger.error(e.getMessage(), e);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getListFieldsNotShow(CampaignRequestDTO dto) {
ResultDTO resultDTO = new ResultDTO();
Map<String, String> params = new HashMap<>();
List<FieldsToShowDTO> list = new ArrayList<>();
StringBuilder stringBuilder = new StringBuilder();
try {
// String sql = SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_MNG, "get-list-fields-not-show");
stringBuilder.append(" with column_name_temp as (");
stringBuilder.append(" select column_name columnName, 1 isFix from user_tab_columns, dual");
stringBuilder.append(" where table_name = 'CUSTOMER'");
stringBuilder.append(" )");
stringBuilder.append(" select * from column_name_temp");
stringBuilder.append(" where columnName not in (select column_name from campaign_customerlist_column)");
stringBuilder.append(" union all");
stringBuilder.append(" select title columnName, 0 isFix ");
stringBuilder.append(" from customize_fields, dual");
stringBuilder.append(" where function_code = 'CUSTOMER'");
stringBuilder.append(" and site_id = :p_company_site_id");
stringBuilder.append(" and customize_field_id not in (select customize_field_id");
stringBuilder.append(" from campaign_customerlist_column");
stringBuilder.append(" where campaign_customerlist_column.campaign_id = :p_campaign_id)");
params.put("p_company_site_id", dto.getCompanySiteId());
params.put("p_campaign_id", dto.getCampaignId());
list = namedParameterJdbcTemplate.query(stringBuilder.toString(), params, BeanPropertyRowMapper.newInstance(FieldsToShowDTO.class));
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
resultDTO.setListData(list);
} catch (Exception e) {
logger.error(e.getMessage(), e);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getListFieldsToShow(CampaignRequestDTO dto) {
ResultDTO resultDTO = new ResultDTO();
Map<String, String> params = new HashMap<>();
List<FieldsToShowDTO> list = new ArrayList<>();
StringBuilder sqlBuilder = new StringBuilder();
try {
// String sql = SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_MNG, "get-list-fields-to-show");
sqlBuilder.append(" select to_char(column_name) columnName, 1 isFix");
sqlBuilder.append(" from campaign_customerlist_column, dual");
sqlBuilder.append(" where campaign_id = :p_campaign_id");
sqlBuilder.append(" union all");
sqlBuilder.append(" select customize_field_title columnName, 0 isFix");
sqlBuilder.append(" from campaign_customerlist_column");
sqlBuilder.append(" where campaign_id = :p_campaign_id");
params.put("p_campaign_id", dto.getCampaignId());
list = namedParameterJdbcTemplate.query(sqlBuilder.toString(), params, BeanPropertyRowMapper.newInstance(FieldsToShowDTO.class));
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
resultDTO.setListData(list);
} catch (Exception e) {
logger.error(e.getMessage(), e);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
}
......@@ -52,5 +52,9 @@ public interface CampaignService {
ResultDTO findCustomerListReallocation(CampaignRequestDTO dto);
ResultDTO reallocationCustomer(CampaignRequestDTO dto);
ResultDTO getListFieldsNotShow(CampaignRequestDTO dto);
ResultDTO getListFieldsToShow(CampaignRequestDTO dto);
//</editor-fold>
}
......@@ -32,7 +32,7 @@ public interface CustomerService {
ResultDTO getAllCustomerList(int page, int pageSize, String sort, Long companySiteId);
ResultDTO createCustomerList(CustomerListDTO customerListDTO);
ResultDTO createCustomerList(CustomerListDTO customerListDTO, String userName);
ResultDTO updateCustomerList(CustomerListDTO customerListDTO);
......
package com.viettel.campaign.service;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.ScenarioAnswerDTO;
/**
* @author anhvd_itsol
*/
public interface ScenarioAnswerService {
ResultDTO findByScenarioQuestionCompany(Long scenarioQuestionId, Long companySiteId);
Long getMaxAnswerOrderId(Long scenarioQuestionId, Long companySiteId);
ResultDTO delete(ScenarioAnswerDTO scenarioAnswerDTO);
}
......@@ -15,4 +15,6 @@ public interface ScenarioQuestionService {
Long getMaxOrderId(Long scenarioId, Long campaignId, Long companySiteId);
Integer countDuplicateQuestionCode(String code, Long scenarioId, Long campaignId, Long companySiteId);
ResultDTO delete(ScenarioQuestionDTO scenarioQuestionDTO);
}
......@@ -2,7 +2,11 @@ package com.viettel.campaign.service;
import com.viettel.campaign.model.ccms_full.Scenario;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.ScenarioAnswerDTO;
import com.viettel.campaign.web.dto.ScenarioDTO;
import com.viettel.campaign.web.dto.ScenarioQuestionDTO;
import java.util.List;
/**
* @author anhvd_itsol
......@@ -11,4 +15,6 @@ import com.viettel.campaign.web.dto.ScenarioDTO;
public interface ScenarioService {
Scenario findScenarioByCampaignIdAndCompanySiteId(Long campaignId, Long companySiteId);
ResultDTO update(ScenarioDTO scenario);
ResultDTO sortQuestionAndAnswer(ScenarioDTO scenarioDTO);
}
package com.viettel.campaign.service.impl;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.ApParam;
import com.viettel.campaign.model.ccms_full.Campaign;
import com.viettel.campaign.model.ccms_full.TimeRangeDialMode;
import com.viettel.campaign.model.ccms_full.TimeZoneDialMode;
import com.viettel.campaign.model.ccms_full.*;
//import com.viettel.campaign.model.UserActionLog;
import com.viettel.campaign.repository.ccms_full.*;
//import com.viettel.campaign.repository.UserActionLogRepository;
......@@ -61,6 +58,9 @@ public class CampaignServiceImpl implements CampaignService {
@Autowired
ApParamRepository apParamRepository;
@Autowired
ScenarioRepository scenarioRepository;
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO search(CampaignRequestDTO requestDto) {
......@@ -151,6 +151,14 @@ public class CampaignServiceImpl implements CampaignService {
});
timeZoneDialModeRepository.saveAll(lstTimeZoneModeToInser);
}
Scenario scenario = new Scenario();
scenario.setCampaignId(campaignId);
scenario.setCode(campaignId + "_" + "01");
scenario.setCreateTime(new Date());
scenario.setCompanySiteId(campaign.getCompanySiteId());
scenarioRepository.save(scenario);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
resultDTO.setData(campaignResult);
......@@ -382,9 +390,9 @@ public class CampaignServiceImpl implements CampaignService {
ResultDTO resultDTO = new ResultDTO();
List<TimeZoneDialModeDTO> lstTimeZone = dto.getLstTimeZone();
List<TimeRangeDialModeDTO> lstTimeRange = dto.getLstTimeRange();
// Campaign campaignEntity = modelMapper.map(dto, Campaign.class);
Campaign campaignEntity = new Campaign();
campaignEntity.setCampaignId(dto.getCampaignId());
campaignEntity.setCampaignCode(dto.getCampaignCode());
campaignEntity.setContent(dto.getContent());
campaignEntity.setCustomerNumber(dto.getCustomerNumber());
campaignEntity.setStartTime(dto.getStartTime());
......@@ -450,6 +458,74 @@ public class CampaignServiceImpl implements CampaignService {
return campaignRepositoryCustom.reallocationCustomer(dto);
}
// hungtt
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getListFieldsNotShow(CampaignRequestDTO dto) {
Locale locale = Locale.forLanguageTag("vi");
Map<String, String> mapColumn = new HashMap<>();
mapColumn = setMapData(mapColumn, locale);
ResultDTO resultDTO = campaignRepositoryCustom.getListFieldsNotShow(dto);
List<FieldsToShowDTO> list = (List<FieldsToShowDTO>)resultDTO.getListData();
for (FieldsToShowDTO fieldsToShowDTO : list) {
if (fieldsToShowDTO.getIsFix()) {
fieldsToShowDTO.setColumnTitle(mapColumn.get(fieldsToShowDTO.getColumnName()));
} else {
fieldsToShowDTO.setColumnTitle(fieldsToShowDTO.getColumnName());
}
}
resultDTO.setListData(list);
return resultDTO;
}
// hungtt
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getListFieldsToShow(CampaignRequestDTO dto) {
Locale locale = Locale.forLanguageTag("vi");
Map<String, String> mapColumn = new HashMap<>();
mapColumn = setMapData(mapColumn, locale);
ResultDTO resultDTO = campaignRepositoryCustom.getListFieldsToShow(dto);
List<FieldsToShowDTO> list = (List<FieldsToShowDTO>)resultDTO.getListData();
for (FieldsToShowDTO fieldsToShowDTO : list) {
if (fieldsToShowDTO.getIsFix()) {
fieldsToShowDTO.setColumnTitle(mapColumn.get(fieldsToShowDTO.getColumnName()));
} else {
fieldsToShowDTO.setColumnTitle(fieldsToShowDTO.getColumnName());
}
}
resultDTO.setListData(list);
return resultDTO;
}
// hungtt
private Map<String, String> setMapData(Map<String, String> mapColumn, Locale locale) {
mapColumn.put("CUSTOMER_ID", BundleUtils.getLangString("CUSTOMER_ID", locale));
mapColumn.put("CODE", BundleUtils.getLangString("CODE", locale));
mapColumn.put("NAME", BundleUtils.getLangString("NAME", locale));
mapColumn.put("DESCRIPTION", BundleUtils.getLangString("DESCRIPTION", locale));
mapColumn.put("COMPANY_NAME", BundleUtils.getLangString("COMPANY_NAME", locale));
mapColumn.put("CUSTOMER_IMG", BundleUtils.getLangString("CUSTOMER_IMG", locale));
mapColumn.put("CREATE_DATE", BundleUtils.getLangString("CREATE_DATE", locale));
mapColumn.put("UPDATE_DATE", BundleUtils.getLangString("UPDATE_DATE", locale));
mapColumn.put("STATUS", BundleUtils.getLangString("STATUS", locale));
mapColumn.put("CREATE_BY", BundleUtils.getLangString("CREATE_BY", locale));
mapColumn.put("UPDATE_BY", BundleUtils.getLangString("UPDATE_BY", locale));
mapColumn.put("SITE_ID", BundleUtils.getLangString("SITE_ID", locale));
mapColumn.put("GENDER", BundleUtils.getLangString("GENDER", locale));
mapColumn.put("CURRENT_ADDRESS", BundleUtils.getLangString("CURRENT_ADDRESS", locale));
mapColumn.put("PLACE_OF_BIRTH", BundleUtils.getLangString("PLACE_OF_BIRTH", locale));
mapColumn.put("DATE_OF_BIRTH", BundleUtils.getLangString("DATE_OF_BIRTH", locale));
mapColumn.put("MOBILE_NUMBER", BundleUtils.getLangString("MOBILE_NUMBER", locale));
mapColumn.put("USERNAME", BundleUtils.getLangString("USERNAME", locale));
mapColumn.put("AREA_CODE", BundleUtils.getLangString("AREA_CODE", locale));
mapColumn.put("CALL_ALLOWED", BundleUtils.getLangString("CALL_ALLOWED", locale));
mapColumn.put("EMAIL_ALLOWED", BundleUtils.getLangString("EMAIL_ALLOWED", locale));
mapColumn.put("SMS_ALLOWED", BundleUtils.getLangString("SMS_ALLOWED", locale));
mapColumn.put("IPCC_STATUS", BundleUtils.getLangString("IPCC_STATUS", locale));
return mapColumn;
}
private String generateCampaignCode(String campaignType, Short chanel) {
int year = Calendar.getInstance().get(Calendar.YEAR);
String maxIndexStr = campaignRepositoryCustom.getMaxCampaignIndex();
......
......@@ -8,17 +8,16 @@ import com.viettel.campaign.model.ccms_full.CustomerContact;
import com.viettel.campaign.model.ccms_full.CustomerList;
import com.viettel.campaign.repository.ccms_full.*;
import com.viettel.campaign.service.CustomerService;
import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.utils.DataUtil;
import com.viettel.campaign.utils.HibernateUtil;
import com.viettel.campaign.utils.SQLBuilder;
import com.viettel.campaign.utils.*;
import com.viettel.campaign.web.dto.*;
import com.viettel.campaign.web.dto.request_dto.CustomerDetailRequestDTO;
import com.viettel.campaign.web.dto.request_dto.CustomerRequestDTO;
import com.viettel.campaign.web.dto.request_dto.SearchCustomerRequestDTO;
import com.viettel.econtact.filter.UserSession;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.eclipse.jetty.client.HttpRequest;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
......@@ -39,6 +38,7 @@ import org.springframework.util.ResourceUtils;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.servlet.http.HttpServletRequest;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.*;
......@@ -579,15 +579,18 @@ public class CustomerServiceImpl implements CustomerService {
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO createCustomerList(CustomerListDTO customerListDTO) {
public ResultDTO createCustomerList(CustomerListDTO customerListDTO, String userName) {
ResultDTO resultDTO = new ResultDTO();
CustomerListMapper customerListMapper = new CustomerListMapper();
CustomerList customerList = new CustomerList();
try {
if (customerListDTO != null) {
// insert
CustomerList findCustomer = customerListRepository.findByCustomerListCode(customerListDTO.getCustomerListCode());
if (findCustomer == null) {
customerListDTO.setCreateBy(userName);
customerList = customerListMapper.toPersistenceBean(customerListDTO);
customerListRepository.save(customerList);
......
package com.viettel.campaign.service.impl;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.Campaign;
import com.viettel.campaign.model.ccms_full.CampaignLog;
import com.viettel.campaign.model.ccms_full.ScenarioAnswer;
import com.viettel.campaign.repository.ccms_full.CampaignLogRepository;
import com.viettel.campaign.repository.ccms_full.CampaignRepository;
import com.viettel.campaign.repository.ccms_full.ScenarioAnswerRepository;
import com.viettel.campaign.service.ScenarioAnswerService;
import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.ScenarioAnswerDTO;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
/**
* @author anhvd_itsol
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class ScenarioAnswerServiceImpl implements ScenarioAnswerService {
private static final Logger logger = LogManager.getLogger(ScenarioQuestionServiceImpl.class);
@Autowired
ScenarioAnswerRepository scenarioAnswerRepository;
@Autowired
CampaignRepository campaignRepository;
@Autowired
CampaignLogRepository campaignLogRepository;
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO findByScenarioQuestionCompany(Long scenarioQuestionId, Long companySiteId) {
ResultDTO resultDTO = new ResultDTO();
try {
List<ScenarioAnswer> lst = scenarioAnswerRepository.findByScenarioQuestionIdAndCompanySiteIdAndStatus(scenarioQuestionId, companySiteId, (short) 1);
resultDTO.setData(lst);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch(Exception ex) {
logger.error(ex.getMessage(), ex);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public Long getMaxAnswerOrderId(Long scenarioQuestionId, Long companySiteId) {
try {
return scenarioAnswerRepository.getMaxAnswerOrderId(scenarioQuestionId, companySiteId);
}catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
return null;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO delete(ScenarioAnswerDTO scenarioAnswerDTO) {
ResultDTO resultDTO = new ResultDTO();
CampaignLog campaignLog;
try {
//find campaign
Campaign campaign = campaignRepository.findByCampaignId(scenarioAnswerDTO.getCampaignId());
if(campaign != null) {
if (campaign.getStatus() == 0L || campaign.getStatus() == 1L) {
scenarioAnswerRepository.deleteById(scenarioAnswerDTO.scenarioAnswerId);
campaignLog = new CampaignLog();
campaignLog.setCompanySiteId(scenarioAnswerDTO.getCompanySiteId());
campaignLog.setCreateTime(new Date());
campaignLog.setAgentId(null);
campaignLog.setTableName("SCENARIO_ANSWER");
campaignLog.setDescription("Xoa cau tra loi");
campaignLog.setCampaignId(scenarioAnswerDTO.getCampaignId());
campaignLog.setCustomerId(scenarioAnswerDTO.getScenarioAnswerId());
campaignLogRepository.save(campaignLog);
}
else {
ScenarioAnswer answer = scenarioAnswerRepository.findScenarioAnswerByScenarioAnswerId(scenarioAnswerDTO.getScenarioAnswerId());
answer.setStatus((short) 0);
answer.setDeleteTime(new Date());
scenarioAnswerRepository.save(answer);
campaignLog = new CampaignLog();
campaignLog.setCompanySiteId(scenarioAnswerDTO.getCompanySiteId());
campaignLog.setCreateTime(new Date());
campaignLog.setAgentId(null);
campaignLog.setTableName("SCENARIO_ANSWER");
campaignLog.setDescription("Chinh sua tra loi");
campaignLog.setCampaignId(scenarioAnswerDTO.getCampaignId());
campaignLog.setCustomerId(scenarioAnswerDTO.getScenarioAnswerId());
campaignLogRepository.save(campaignLog);
}
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
}
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
}
package com.viettel.campaign.service.impl;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.CampaignLog;
import com.viettel.campaign.model.ccms_full.Scenario;
import com.viettel.campaign.model.ccms_full.ScenarioQuestion;
import com.viettel.campaign.model.ccms_full.*;
import com.viettel.campaign.repository.ccms_full.CampaignLogRepository;
import com.viettel.campaign.repository.ccms_full.CampaignRepository;
import com.viettel.campaign.repository.ccms_full.ScenarioAnswerRepository;
import com.viettel.campaign.repository.ccms_full.ScenarioQuestionRepository;
import com.viettel.campaign.service.ScenarioQuestionService;
import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.ScenarioAnswerDTO;
import com.viettel.campaign.web.dto.ScenarioQuestionDTO;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
......@@ -17,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
......@@ -35,6 +37,12 @@ public class ScenarioQuestionServiceImpl implements ScenarioQuestionService {
@Autowired
CampaignLogRepository campaignLogRepository;
@Autowired
ScenarioAnswerRepository scenarioAnswerRepository;
@Autowired
CampaignRepository campaignRepository;
@Autowired
ModelMapper modelMapper;
......@@ -43,7 +51,7 @@ public class ScenarioQuestionServiceImpl implements ScenarioQuestionService {
public ResultDTO findByScenarioIdAndCampaignIdAndCompanySiteId(Long scenarioId, Long campaignId, Long companySiteId) {
ResultDTO resultDTO = new ResultDTO();
try {
List<ScenarioQuestion> lst = scenarioQuestionRepository.findScenarioQuestionsByScenarioIdAndCampaignIdAndCompanySiteIdAndStatus(scenarioId, campaignId, companySiteId, (short)1);
List<ScenarioQuestion> lst = scenarioQuestionRepository.findScenarioQuestionsByScenarioIdAndCampaignIdAndCompanySiteIdAndStatusOrderByOrderIndex(scenarioId, campaignId, companySiteId, (short) 1);
resultDTO.setData(lst);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
......@@ -59,12 +67,39 @@ public class ScenarioQuestionServiceImpl implements ScenarioQuestionService {
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO add(ScenarioQuestionDTO scenarioQuestionDTO) {
ResultDTO resultDTO = new ResultDTO();
List<ScenarioAnswerDTO> lstAnswers = new ArrayList<>();
List<ScenarioAnswer> lstAnswersToInsert = new ArrayList<>();
try {
ScenarioQuestion scenarioQuestion = modelMapper.map(scenarioQuestionDTO, ScenarioQuestion.class);
scenarioQuestion.setCreateTime(new Date());
scenarioQuestion.setStatus((short) 1);
scenarioQuestionRepository.save(scenarioQuestion);
if (scenarioQuestionDTO.getLstAnswers().size() > 0) {
lstAnswers = scenarioQuestionDTO.getLstAnswers();
lstAnswers.forEach(item -> {
item.setCode(scenarioQuestion.getScenarioQuestionId() + "_" + item.getOrderIndex());
item.setScenarioQuestionId(scenarioQuestion.getScenarioQuestionId());
item.setCreateTime(new Date());
item.setStatus((short) 1);
ScenarioAnswer answer = modelMapper.map(item, ScenarioAnswer.class);
lstAnswersToInsert.add(answer);
});
scenarioAnswerRepository.saveAll(lstAnswersToInsert);
CampaignLog campaignLogAnswer = new CampaignLog();
campaignLogAnswer.setCompanySiteId(scenarioQuestion.getCompanySiteId());
campaignLogAnswer.setCreateTime(new Date());
campaignLogAnswer.setAgentId(null);
campaignLogAnswer.setTableName("SCENARIO_ANSWER");
campaignLogAnswer.setColumnName(null);
campaignLogAnswer.setPreValue(null);
campaignLogAnswer.setPostValue(null);
campaignLogAnswer.setDescription("Them moi cau tra loi rieng le");
campaignLogAnswer.setCampaignId(scenarioQuestion.getCampaignId());
campaignLogAnswer.setCustomerId(scenarioQuestion.getScenarioQuestionId());
campaignLogRepository.save(campaignLogAnswer);
}
CampaignLog campaignLog = new CampaignLog();
campaignLog.setCompanySiteId(scenarioQuestion.getCompanySiteId());
campaignLog.setCreateTime(new Date());
......@@ -92,7 +127,8 @@ public class ScenarioQuestionServiceImpl implements ScenarioQuestionService {
@Transactional(DataSourceQualify.CCMS_FULL)
public Long getMaxOrderId(Long scenarioId, Long campaignId, Long companySiteId) {
try {
return scenarioQuestionRepository.getMaxOrderId(scenarioId, campaignId, companySiteId);
Long index = scenarioQuestionRepository.getMaxOrderId(scenarioId, campaignId, companySiteId);
if(index == null) return 0L; else return index;
}catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
......@@ -104,9 +140,86 @@ public class ScenarioQuestionServiceImpl implements ScenarioQuestionService {
public Integer countDuplicateQuestionCode(String code, Long scenarioId, Long campaignId, Long companySiteId) {
try {
return scenarioQuestionRepository.countDuplicateQuestionCode(code, scenarioId, campaignId, companySiteId);
}catch (Exception ex) {
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
return null;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO delete(ScenarioQuestionDTO scenarioQuestionDTO) {
ResultDTO resultDTO = new ResultDTO();
CampaignLog campaignLog;
try {
//find campaign
Campaign campaign = campaignRepository.findByCampaignId(scenarioQuestionDTO.getCampaignId());
if (campaign != null) {
if (campaign.getStatus() == 0L || campaign.getStatus() == 1L) {
//delete question by questionId
scenarioQuestionRepository.deleteById(scenarioQuestionDTO.getScenarioQuestionId());
campaignLog = new CampaignLog();
campaignLog.setCompanySiteId(scenarioQuestionDTO.getCompanySiteId());
campaignLog.setCreateTime(new Date());
campaignLog.setTableName("SCENARIO_QUESTION");
campaignLog.setDescription("Xoa cau hoi");
campaignLog.setCampaignId(scenarioQuestionDTO.getCampaignId());
campaignLog.setCustomerId(scenarioQuestionDTO.getScenarioQuestionId());
campaignLogRepository.save(campaignLog);
//delete answer by questionId
scenarioAnswerRepository.deleteScenarioAnswersByScenarioQuestionId(scenarioQuestionDTO.getScenarioQuestionId());
campaignLog = new CampaignLog();
campaignLog.setCompanySiteId(scenarioQuestionDTO.getCompanySiteId());
campaignLog.setCreateTime(new Date());
campaignLog.setTableName("SCENARIO_ANSWER");
campaignLog.setDescription("Xoa cau tra loi");
campaignLog.setCampaignId(scenarioQuestionDTO.getCampaignId());
campaignLog.setCustomerId(scenarioQuestionDTO.getScenarioQuestionId());
campaignLogRepository.save(campaignLog);
} else {
//get and update status question
ScenarioQuestion scenarioQuestion = scenarioQuestionRepository.findScenarioQuestionByScenarioQuestionId(scenarioQuestionDTO.getScenarioQuestionId());
scenarioQuestion.setStatus((short) 0);
scenarioQuestion.setDeleteTime(new Date());
scenarioQuestionRepository.save(scenarioQuestion);
campaignLog = new CampaignLog();
campaignLog.setCompanySiteId(scenarioQuestionDTO.getCompanySiteId());
campaignLog.setCreateTime(new Date());
campaignLog.setTableName("SCENARIO_QUESTION");
campaignLog.setDescription("Chinh sua cau hoi");
campaignLog.setCampaignId(scenarioQuestionDTO.getCampaignId());
campaignLog.setCustomerId(scenarioQuestionDTO.getScenarioQuestionId());
campaignLogRepository.save(campaignLog);
List<ScenarioAnswer> lstAnswer = scenarioAnswerRepository.findByScenarioQuestionIdAndCompanySiteIdAndStatus(scenarioQuestion.getScenarioQuestionId(),
scenarioQuestion.getCompanySiteId(), (short) 1);
if(lstAnswer.size() > 0) {
lstAnswer.forEach(answer -> {
answer.setStatus((short) 0);
answer.setDeleteTime(new Date());
CampaignLog log = new CampaignLog();
log.setCompanySiteId(scenarioQuestionDTO.getCompanySiteId());
log.setCreateTime(new Date());
log.setTableName("SCENARIO_ANSWER");
log.setDescription("Chinh sua cau tra loi");
log.setCampaignId(scenarioQuestionDTO.getCampaignId());
log.setCustomerId(answer.getScenarioAnswerId());
campaignLogRepository.save(log);
});
}
}
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
}
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
}
......@@ -2,11 +2,17 @@ package com.viettel.campaign.service.impl;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.Scenario;
import com.viettel.campaign.model.ccms_full.ScenarioAnswer;
import com.viettel.campaign.model.ccms_full.ScenarioQuestion;
import com.viettel.campaign.repository.ccms_full.ScenarioAnswerRepository;
import com.viettel.campaign.repository.ccms_full.ScenarioQuestionRepository;
import com.viettel.campaign.repository.ccms_full.ScenarioRepository;
import com.viettel.campaign.service.ScenarioService;
import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.ScenarioAnswerDTO;
import com.viettel.campaign.web.dto.ScenarioDTO;
import com.viettel.campaign.web.dto.ScenarioQuestionDTO;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
......@@ -15,7 +21,9 @@ import org.springframework.transaction.annotation.Transactional;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @author anhvd_itsol
......@@ -29,6 +37,12 @@ public class ScenarioServiceImpl implements ScenarioService {
@Autowired
ScenarioRepository scenarioRepository;
@Autowired
ScenarioQuestionRepository questionRepository;
@Autowired
ScenarioAnswerRepository answerRepository;
@Autowired
ModelMapper modelMapper;
......@@ -63,4 +77,43 @@ public class ScenarioServiceImpl implements ScenarioService {
}
return resultDTO;
}
@Override
public ResultDTO sortQuestionAndAnswer(ScenarioDTO scenarioDTO) {
ResultDTO resultDTO = new ResultDTO();
try {
List<ScenarioQuestionDTO> lstQuestion = scenarioDTO.getLstQuestion();
List<ScenarioAnswerDTO> lstAnswer = scenarioDTO.getLstAnswer();
List<ScenarioQuestion> questionsToSort = new ArrayList<>();
List<ScenarioAnswer> answersToSort = new ArrayList<>();
if (lstQuestion.size() > 0) {
lstQuestion.forEach(item -> {
ScenarioQuestion question = questionRepository.findScenarioQuestionByScenarioQuestionId(item.getScenarioQuestionId());
if (question != null) {
question.setOrderIndex(item.getOrderIndex());
questionsToSort.add(question);
}
});
questionRepository.saveAll(questionsToSort);
}
if (lstAnswer.size() > 0) {
lstAnswer.forEach(item -> {
ScenarioAnswer answer = answerRepository.findScenarioAnswerByScenarioAnswerId(item.getScenarioAnswerId());
if (answer != null) {
answer.setOrderIndex(item.getOrderIndex());
answersToSort.add(answer);
}
});
answerRepository.saveAll(answersToSort);
}
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
}
package com.viettel.campaign.utils;
//import com.viettel.security.PassTranformer;
import com.viettel.security.PassTranformer;
import org.apache.log4j.Logger;
import java.io.File;
......
......@@ -18,23 +18,23 @@ public class SQLBuilder {
public static final String SQL_MODULE_CAMPAIGN_STATUS_MNG = "campaign-status-mng";
public static final String SQL_MODULE_CAMPAIGN_CUSTOMER_MNG = "campaign-customer-mng";
// public static String getSqlQueryById(String module,
// String queryId) {
// 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;
// }
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;
}
public static Pageable buildPageable(BaseDTO obj) {
Pageable pageable = null;
......
......@@ -21,4 +21,8 @@ public class CustomerCustomDTO {
String ipccStatus;
String mobileNumber;
String email;
String connectStatus;
String connectTime;
String customerName;
Long campaignCustomerId;
}
package com.viettel.campaign.web.dto;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.io.Serializable;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class FieldsToShowDTO extends BaseDTO implements Serializable {
private Long campaignCusListColId;
private Long companySiteId;
private Long campaignId;
private String columnName;
private String columnTitle;
private Long orderIndex;
private Long customizeFieldId;
private String customizeFieldTitle;
private Boolean isFix;
}
......@@ -3,6 +3,7 @@ package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.Date;
/**
......@@ -11,7 +12,7 @@ import java.util.Date;
@Getter
@Setter
public class ScenarioAnswerDTO {
public class ScenarioAnswerDTO implements Serializable {
public Long scenarioAnswerId;
public Long companySiteId;
public Long scenarioQuestionId;
......@@ -23,4 +24,5 @@ public class ScenarioAnswerDTO {
public Date createTime;
public Date deleteTime;
public Long mappingQuestionId;
public Long campaignId;
}
......@@ -4,6 +4,7 @@ import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import java.util.List;
/**
* @author anhvd_itsol
......@@ -21,5 +22,7 @@ public class ScenarioDTO {
private Date createTime;
private Long updateBy;
private Date updateTime;
private List<ScenarioQuestionDTO> lstQuestion;
private List<ScenarioAnswerDTO> lstAnswer;
}
......@@ -3,7 +3,9 @@ package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* @author anhvd_itsol
......@@ -11,7 +13,7 @@ import java.util.Date;
@Getter
@Setter
public class ScenarioQuestionDTO {
public class ScenarioQuestionDTO implements Serializable {
private Long scenarioQuestionId;
private Long companySiteId;
private Long campaignId;
......@@ -26,4 +28,5 @@ public class ScenarioQuestionDTO {
private Short isRequire;
private Short isDefault;
private Short answerIndex;
private List<ScenarioAnswerDTO> lstAnswers;
}
package com.viettel.campaign.web.dto.request_dto;
import com.viettel.campaign.web.dto.BaseDTO;
import com.viettel.campaign.web.dto.CustomerCustomDTO;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
/**
* @author anhvd_itsol
*/
......@@ -42,4 +45,6 @@ public class CampaignRequestDTO extends BaseDTO {
String surveyStatus;
String roleUser;
String contactCustId;
List<CustomerCustomDTO> customerCustomDTOList;
}
......@@ -212,4 +212,32 @@ public class CampaignController {
ResultDTO resultDTO = campaignService.updateCampaign(dto);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
@PostMapping("/findCustomerListReallocation")
@ResponseBody
public ResponseEntity<?> findCustomerListReallocation(@RequestBody CampaignRequestDTO dto) {
ResultDTO result = campaignService.findCustomerListReallocation(dto);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@PostMapping("/reallocationCustomer")
@ResponseBody
public ResponseEntity<?> reallocationCustomer(@RequestBody CampaignRequestDTO dto) {
ResultDTO result = campaignService.reallocationCustomer(dto);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@PostMapping("/getListFieldsNotShow")
@ResponseBody
public ResponseEntity<?> getListFieldsNotShow(@RequestBody CampaignRequestDTO dto) {
ResultDTO resultDTO = campaignService.getListFieldsNotShow(dto);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
@PostMapping("/getListFieldsToShow")
@ResponseBody
public ResponseEntity<?> getListFieldsToShow(@RequestBody CampaignRequestDTO dto) {
ResultDTO resultDTO = campaignService.getListFieldsToShow(dto);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
}
package com.viettel.campaign.web.rest;
import com.viettel.campaign.utils.RedisUtil;
import com.viettel.campaign.web.dto.*;
import com.viettel.campaign.service.CustomerService;
import com.viettel.campaign.web.dto.request_dto.SearchCustomerRequestDTO;
import com.viettel.campaign.web.dto.request_dto.CustomerRequestDTO;
import com.viettel.econtact.filter.UserSession;
import org.apache.log4j.Logger;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.http.*;
import org.springframework.stereotype.Controller;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.io.File;
import java.nio.file.Files;
......@@ -59,18 +59,7 @@ public class CustomerController {
@ResponseBody
public ResultDTO createCustomer(@RequestBody @Valid CustomerDTO customerDTO) {
ResultDTO result = new ResultDTO();
//LogUtil logUtil = new LogUtil();
//logUtil.initKpiLog("createCust");
try {
//LOGGER.info("Returning createCustomer: start");
result = customerService.createCustomer(customerDTO);
//LOGGER.info("Returning createCustomer:" + result.getErrorCode());
//logUtil.endKpiLog(customerDTO, 0, result.getErrorCode(), result.getDetail(), CustomerController.class, customerDTO.getAgentProcess(), this.serverPort);
} catch (Exception e) {
result.setErrorCode("-1");
LOGGER.error(e);
//logUtil.endKpiLog(customerDTO, 1, result.getErrorCode(), e.getMessage(), CustomerController.class, customerDTO.getAgentProcess(), this.serverPort);
}
result = customerService.createCustomer(customerDTO);
return result;
}
......@@ -109,40 +98,21 @@ public class CustomerController {
@PostMapping("/createCustomerList")
@ResponseBody
public ResultDTO createCustomerList(@RequestBody @Valid CustomerListDTO customerListDTO) {
public ResultDTO createCustomerList(@RequestBody @Valid CustomerListDTO customerListDTO, HttpServletRequest request) {
ResultDTO result = new ResultDTO();
//LogUtil logUtil = new LogUtil();
//logUtil.initKpiLog("createCust")
try {
//LOGGER.info("Returning createCustomer: start");
result = customerService.createCustomerList(customerListDTO);
//LOGGER.info("Returning createCustomer:" + result.getErrorCode());
//logUtil.endKpiLog(customerDTO, 0, result.getErrorCode(), result.getDetail(), CustomerController.class, customerDTO.getAgentProcess(), this.serverPort);
} catch (Exception e) {
result.setErrorCode("-1");
// LOGGER.error(e);
//logUtil.endKpiLog(customerDTO, 1, result.getErrorCode(), e.getMessage(), CustomerController.class, customerDTO.getAgentProcess(), this.serverPort);
}
String xAuthToken = request.getHeader("X-Auth-Token");
UserSession userSession = (UserSession) RedisUtil.getInstance().get(xAuthToken);
result = customerService.createCustomerList(customerListDTO, userSession.getUserName());
return result;
// return new ResponseEntity<>("", HttpStatus.OK);
}
@PostMapping("/updateCustomerList")
@ResponseBody
public ResultDTO updateCustomerList(@RequestBody @Valid CustomerListDTO customerListDTO) {
ResultDTO result = new ResultDTO();
//LogUtil logUtil = new LogUtil();
//logUtil.initKpiLog("createCust");
try {
//LOGGER.info("Returning createCustomer: start");
result = customerService.updateCustomerList(customerListDTO);
//LOGGER.info("Returning createCustomer:" + result.getErrorCode());
//logUtil.endKpiLog(customerDTO, 0, result.getErrorCode(), result.getDetail(), CustomerController.class, customerDTO.getAgentProcess(), this.serverPort);
} catch (Exception e) {
result.setErrorCode("-1");
// LOGGER.error(e);
//logUtil.endKpiLog(customerDTO, 1, result.getErrorCode(), e.getMessage(), CustomerController.class, customerDTO.getAgentProcess(), this.serverPort);
}
result = customerService.updateCustomerList(customerListDTO);
return result;
}
......
package com.viettel.campaign.web.rest;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.viettel.campaign.service.ScenarioAnswerService;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.ScenarioAnswerDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
/**
* @author anhvd_itsol
......@@ -12,4 +16,25 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/ipcc/campaign/scenario-answer")
@CrossOrigin
public class ScenarioAnswerController {
@Autowired
ScenarioAnswerService scenarioAnswerService;
@RequestMapping(value = "/findByScenarioQuestionCompany", method= RequestMethod.GET)
public ResponseEntity<ResultDTO> findByScenarioQuestionCampaignCompany(@RequestParam Long scenarioQuestionId,
@RequestParam Long companySiteId) {
ResultDTO resultDTO = scenarioAnswerService.findByScenarioQuestionCompany(scenarioQuestionId, companySiteId);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
@RequestMapping(value = "/get-max-orderId", method = RequestMethod.GET)
public Long getMaxOrderId(@RequestParam Long scenarioQuestionId, @RequestParam Long companySiteId)
{
return scenarioAnswerService.getMaxAnswerOrderId(scenarioQuestionId, companySiteId);
}
@RequestMapping(value="/delete", method = RequestMethod.POST)
public ResponseEntity<ResultDTO> deleteQuestion(@RequestBody ScenarioAnswerDTO answerDTO) {
ResultDTO resultDTO = scenarioAnswerService.delete(answerDTO);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
}
......@@ -33,4 +33,10 @@ public class ScenarioController {
ResultDTO resultDTO = scenarioService.update(scenario);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
@RequestMapping(value = "/sort-question-answer", method = RequestMethod.POST)
ResponseEntity<ResultDTO> sortQuestionAndAnswer(@RequestBody ScenarioDTO scenarioDTO) {
ResultDTO resultDTO = scenarioService.sortQuestionAndAnswer(scenarioDTO);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
}
server:
port: 1111
port: 9999
spring:
application:
name: campaign
......
......@@ -39,3 +39,28 @@ campaign.status.2 = Deploy
campaign.status.3 = Pause
campaign.status.4 = Finish
campaign.status.5 = Kêt thúc sớm
#Campaign customer list management
CUSTOMER_ID = Id khách hàng
CODE = Mã khách hàng
NAME = Tên khách hàng
DESCRIPTION = Mô tả
COMPANY_NAME = Tên công ty
CUSTOMER_IMG = Ảnh khách hàng
CREATE_DATE = Ngày tạo
UPDATE_DATE = Ngày cập nhật
STATUS = Trạng thái
CREATE_BY = Tạo bởi
UPDATE_BY = Cập nhật bởi
SITE_ID = Mã công ty
GENDER = Giới tính
CURRENT_ADDRESS = Địa chỉ hiện tại
PLACE_OF_BIRTH = Nơi sinh
DATE_OF_BIRTH = Ngày sinh
MOBILE_NUMBER = Số điện thoại
USERNAME = Tài khoản
AREA_CODE = Khu vực
CALL_ALLOWED = CALL_ALLOWED
EMAIL_ALLOWED = EMAIL_ALLOWED
SMS_ALLOWED = SMS_ALLOWED
IPCC_STATUS = IPCC_STATUS
......@@ -42,4 +42,27 @@ campaign.status.3 = Tạm ngừng
campaign.status.4 = Kêt thúc
campaign.status.5 = Kêt thúc sớm
#Campaign customer list management
CUSTOMER_ID = Id khách hàng
CODE = Mã khách hàng
NAME = Tên khách hàng
DESCRIPTION = Mô tả
COMPANY_NAME = Tên công ty
CUSTOMER_IMG = Ảnh khách hàng
CREATE_DATE = Ngày tạo
UPDATE_DATE = Ngày cập nhật
STATUS = Trạng thái
CREATE_BY = Tạo bởi
UPDATE_BY = Cập nhật bởi
SITE_ID = Mã công ty
GENDER = Giới tính
CURRENT_ADDRESS = Địa chỉ hiện tại
PLACE_OF_BIRTH = Nơi sinh
DATE_OF_BIRTH = Ngày sinh
MOBILE_NUMBER = Số điện thoại
USERNAME = Tài khoản
AREA_CODE = Khu vực
CALL_ALLOWED = CALL_ALLOWED
EMAIL_ALLOWED = EMAIL_ALLOWED
SMS_ALLOWED = SMS_ALLOWED
IPCC_STATUS = IPCC_STATUS
with campaign_type_list as (
select trim (regexp_substr(:p_list_compaign_type, '[^,]+', 1, level)) campaign_type
from dual
connect by level <= regexp_count(:p_list_compaign_type, ',') +1
),
contact_status_list as (
select trim (regexp_substr(:p_list_contact_status, '[^,]+', 1, level)) contact_status
from dual
connect by level <= regexp_count(:p_list_contact_status, ',') +1
),
survey_status_list as (
select trim (regexp_substr(:p_list_survey_status, '[^,]+', 1, level)) survey_status
from dual
connect by level <= regexp_count(:p_list_survey_status, ',') +1
),
record_status_list as (
select trim (regexp_substr(:p_list_record_status, '[^,]+', 1, level)) record_status
from dual
connect by level <= regexp_count(:p_list_record_status, ',') +1
),
campaign_id_list as (
select trim (regexp_substr(:p_list_campaign_id, '[^,]+', 1, level)) campaign_id
from dual
connect by level <= regexp_count(:p_list_campaign_id, ',') +1
),
data_temp as (
select b.campaign_code campaignCode,
b.campaign_name campaignName,
c.user_name userName,
......@@ -22,3 +48,18 @@ where a.status <> 0
and a.create_time <= to_date(:p_date_to, 'DD/MM/YYYY')
and a.duration_call >= :p_call_time_from
and a.duration_call <= :p_call_time_to
and to_char(a.customer_id) like '%'||:p_customer_id||'%'
and b.campaign_type in (select campaign_type from campaign_type_list)
and to_char(a.contact_status) in (select contact_status from contact_status_list)
and to_char(a.call_status) in (select survey_status from survey_status_list)
and to_char(a.status) in (select record_status from record_status_list)
and (:p_phone_number is null or to_char(a.phone_number) like '%'||:p_phone_number||'%')
and (:p_list_campaign_id is null or b.campaign_code in (select campaign_id from campaign_id_list))
and (:p_campaign_name is null or upper(b.campaign_name) like '%'||:p_campaign_name||'%')
and (:p_user_name is null or upper(c.user_name) like '%'||:p_user_name||'%')
),
data as (
select a.*, rownum row_ from data_temp a
)
select * from data
where :p_page_size = 0 or (row_ >= ((:p_page_number - 1) * :p_page_size + 1) and row_ < (:p_page_number * :p_page_size + 1))
with contact as (
select customer_id, contact
from (
select * from customer_contact
where status = 1
and contact_type = 5
and is_direct_line = 1
order by create_date desc
)
where rownum = 1
),
connect_status as (
select complete_value, complete_name
from campaign_complete_code
where company_site_id = :p_company_site_id
and complete_type = 1
and complete_value <> 1
),
connect_status_list as (
select trim (regexp_substr(:p_list_connect_status, '[^,]+', 1, level)) connect_status
from dual
connect by level <= regexp_count(:p_list_connect_status, ',') +1
),
data as (
select a.campaign_customer_id campaignCustomerId,
b.name customerName,
c.contact mobileNumber,
to_char(a.call_time, 'DD/MM/YYYY HH24:MI:SS') connectTime,
d.complete_name connectStatus
from campaign_customer a
left join customer b on a.customer_id = b.customer_id
left join contact c on a.customer_id = c.customer_id
left join connect_status d on d.complete_value = a.status
where a.campaign_id = :p_campaign_id
and a.in_campaign_status = 1
and a.status in (select connect_status from connect_status_list)
order by connectTime desc, customerName
),
final_data as (
select a.*, rownum row_ from data a
)
select * from final_data
where row_ >= ((:p_page_number - 1) * :p_page_size + 1)
and row_ < (:p_page_number * :p_page_size + 1)
with column_name_temp as (
select column_name columnName, 1 isFix from user_tab_columns, dual
where table_name = 'CUSTOMER'
)
select * from column_name_temp where columnName not in (select column_name from campaign_customerlist_column)
union all
select title columnName, 0 isFix from customize_fields, dual
where function_code = 'CUSTOMER'
and site_id = :p_company_site_id
and customize_field_id not in (select customize_field_id from campaign_customerlist_column where campaign_customerlist_column.campaign_id = :p_campaign_id)
select to_char(column_name) columnName, 1 isFix from campaign_customerlist_column, dual where campaign_id = :p_campaign_id
union all
select customize_field_title columnName, 0 isFix from campaign_customerlist_column where campaign_id = :p_campaign_id
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