Commit 4f525c8d authored by Phạm Duy Phi's avatar Phạm Duy Phi
parents 094b34c7 47677e80
No preview for this file type
...@@ -30,27 +30,27 @@ public class CorsFilter implements Filter { ...@@ -30,27 +30,27 @@ public class CorsFilter implements Filter {
HttpServletRequest request = (HttpServletRequest) req; HttpServletRequest request = (HttpServletRequest) req;
// chain.doFilter(req, response); chain.doFilter(req, response);
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) { // if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
chain.doFilter(req, resp); // chain.doFilter(req, resp);
return; // return;
} // }
if ("/".equals(request.getRequestURI())) { // if ("/".equals(request.getRequestURI())) {
chain.doFilter(req, resp); // chain.doFilter(req, resp);
return; // return;
} // }
String xAuthToken = request.getHeader("X-Auth-Token"); // String xAuthToken = request.getHeader("X-Auth-Token");
if (xAuthToken == null || "".equals(xAuthToken)) { // if (xAuthToken == null || "".equals(xAuthToken)) {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "The token is null."); // response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "The token is null.");
return; // return;
} // }
Object obj = RedisUtil.getInstance().get(xAuthToken); // Object obj = RedisUtil.getInstance().get(xAuthToken);
if (obj instanceof UserSession) { // if (obj instanceof UserSession) {
chain.doFilter(req, resp); // chain.doFilter(req, resp);
} else { // } else {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "The token is invalid."); // response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "The token is invalid.");
} // }
} }
@Override @Override
......
...@@ -88,4 +88,9 @@ public interface CampaignCustomerRepository extends JpaRepository<CampaignCustom ...@@ -88,4 +88,9 @@ public interface CampaignCustomerRepository extends JpaRepository<CampaignCustom
" and customer_list_id = :p_cus_list_id\n" + " and customer_list_id = :p_cus_list_id\n" +
" and (status = 0 or status in (select * from status_customer))", nativeQuery = true) " and (status = 0 or status in (select * from status_customer))", nativeQuery = true)
List<CampaignCustomer> findListCustomerToDel(@Param("p_company_site_id") Long companySiteId, @Param("p_campaign_id") Long campaignId, @Param("p_cus_list_id") Long customerListId); List<CampaignCustomer> findListCustomerToDel(@Param("p_company_site_id") Long companySiteId, @Param("p_campaign_id") Long campaignId, @Param("p_cus_list_id") Long customerListId);
CampaignCustomer findCampaignCustomerByCampaignIdAndCompanySiteIdAndCustomerId(Long campaignId, Long companySiteId, Long customerId);
@Query(value = "select complete_value from campaign_complete_code where status = 1 and is_finish = 0 and is_recall = 0", nativeQuery = true)
List<Short> getStatus();
} }
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.ccms_full.Customer;
import java.util.List;
public interface CustomerQueryRepository {
List<Customer> findAll(String rsqlQuery);
}
package com.viettel.campaign.repository.ccms_full.impl;
import com.github.tennaito.rsql.jpa.JpaCriteriaQueryVisitor;
import com.viettel.campaign.model.ccms_full.Customer;
import com.viettel.campaign.repository.ccms_full.CustomerQueryRepository;
import cz.jirutka.rsql.parser.RSQLParser;
import cz.jirutka.rsql.parser.ast.Node;
import cz.jirutka.rsql.parser.ast.RSQLVisitor;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.criteria.CriteriaQuery;
import java.util.List;
public class CustomerQueryRepositoryImpl implements CustomerQueryRepository {
@PersistenceContext
private EntityManager entityManager;
private RSQLVisitor<CriteriaQuery<Customer>, EntityManager> visitor = new JpaCriteriaQueryVisitor<Customer>();
private RSQLParser parser = new RSQLParser();
@Override
public List<Customer> findAll(String rsqlQuery) {
Node node = parser.parse(rsqlQuery);
CriteriaQuery<Customer> query = node.accept(visitor, entityManager);
return entityManager.createQuery(query).getResultList();
}
}
...@@ -5,6 +5,7 @@ import com.viettel.campaign.model.ccms_full.CustomerList; ...@@ -5,6 +5,7 @@ import com.viettel.campaign.model.ccms_full.CustomerList;
import com.viettel.campaign.model.ccms_full.CustomizeFieldObject; import com.viettel.campaign.model.ccms_full.CustomizeFieldObject;
import com.viettel.campaign.model.ccms_full.CustomizeFields; import com.viettel.campaign.model.ccms_full.CustomizeFields;
import com.viettel.campaign.web.dto.*; import com.viettel.campaign.web.dto.*;
import com.viettel.campaign.web.dto.request_dto.CustomerQueryDTO;
import com.viettel.campaign.web.dto.request_dto.CustomerRequestDTO; import com.viettel.campaign.web.dto.request_dto.CustomerRequestDTO;
import com.viettel.campaign.web.dto.request_dto.CustomizeRequestDTo; import com.viettel.campaign.web.dto.request_dto.CustomizeRequestDTo;
import com.viettel.campaign.web.dto.request_dto.SearchCustomerRequestDTO; import com.viettel.campaign.web.dto.request_dto.SearchCustomerRequestDTO;
...@@ -58,6 +59,8 @@ public interface CustomerService { ...@@ -58,6 +59,8 @@ public interface CustomerService {
List<CustomerDTO> getIndividualCustomerInfo(CampaignCustomerDTO campaignCustomerDTO); List<CustomerDTO> getIndividualCustomerInfo(CampaignCustomerDTO campaignCustomerDTO);
ResultDTO deleteCustomerFromCampaign(CampaignCustomerDTO campaignCustomerDTO);
// ------------ customer ------------ // // ------------ customer ------------ //
...@@ -77,5 +80,6 @@ public interface CustomerService { ...@@ -77,5 +80,6 @@ public interface CustomerService {
Long countByQuery(String queryString); Long countByQuery(String queryString);
// Map<String, CustomizeRequestDTo> searchCustomer(); // Map<String, CustomizeRequestDTo> searchCustomer();
//// List<CustomizeFields> searchCustomize(); //// List<CustomizeFields> searchCustomize();
ResultDTO searchCustomizeFields(CustomizeRequestDTo customizeFields); ResultDTO listCustomizeFields(CustomizeRequestDTo customizeFields);
ResultDTO searchCustomizeFields(int page, int pageSize, long companySiteId,long campaignId,CustomerQueryDTO customerQueryDTO );
} }
...@@ -83,6 +83,7 @@ public class CampaignCfgServiceImpl implements CampaignCfgService { ...@@ -83,6 +83,7 @@ public class CampaignCfgServiceImpl implements CampaignCfgService {
sb.append(" and COMPANY_SITE_ID = :p_company_site_id"); sb.append(" and COMPANY_SITE_ID = :p_company_site_id");
sb.append(" and COMPLETE_VALUE not in (1,2,3,4)"); sb.append(" and COMPLETE_VALUE not in (1,2,3,4)");
sb.append("ORDER BY to_number(COMPLETE_VALUE) "); sb.append("ORDER BY to_number(COMPLETE_VALUE) ");
logger.info("SQL statement: " + sb);
......
...@@ -10,10 +10,7 @@ import com.viettel.campaign.repository.ccms_full.*; ...@@ -10,10 +10,7 @@ import com.viettel.campaign.repository.ccms_full.*;
import com.viettel.campaign.service.CustomerService; import com.viettel.campaign.service.CustomerService;
import com.viettel.campaign.utils.*; import com.viettel.campaign.utils.*;
import com.viettel.campaign.web.dto.*; import com.viettel.campaign.web.dto.*;
import com.viettel.campaign.web.dto.request_dto.CustomerDetailRequestDTO; import com.viettel.campaign.web.dto.request_dto.*;
import com.viettel.campaign.web.dto.request_dto.CustomerRequestDTO;
import com.viettel.campaign.web.dto.request_dto.CustomizeRequestDTo;
import com.viettel.campaign.web.dto.request_dto.SearchCustomerRequestDTO;
import com.viettel.econtact.filter.UserSession; import com.viettel.econtact.filter.UserSession;
import cz.jirutka.rsql.parser.RSQLParser; import cz.jirutka.rsql.parser.RSQLParser;
import cz.jirutka.rsql.parser.ast.Node; import cz.jirutka.rsql.parser.ast.Node;
...@@ -609,7 +606,7 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -609,7 +606,7 @@ public class CustomerServiceImpl implements CustomerService {
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd"); DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
Date currentDate = new Date(dateFormat.format(new Date())); Date currentDate = new Date(dateFormat.format(new Date()));
Date oldDate = new Date(apParam.getDescription()); Date oldDate = new Date(apParam.getDescription());
Long newDay = (currentDate.getTime() - oldDate.getTime())/(1000*60*60*24); Long newDay = (currentDate.getTime() - oldDate.getTime()) / (1000 * 60 * 60 * 24);
String convertDate = dateFormat.format(new Date()); String convertDate = dateFormat.format(new Date());
String[] dateArray = convertDate.split("/"); String[] dateArray = convertDate.split("/");
...@@ -1597,12 +1594,14 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -1597,12 +1594,14 @@ public class CustomerServiceImpl implements CustomerService {
sb.append(" ), datas as ("); sb.append(" ), datas as (");
sb.append(" select c.customer_id customerId,"); sb.append(" select c.customer_id customerId,");
sb.append(" c.name,"); sb.append(" c.name,");
sb.append(" cP.phone,"); sb.append(" cP.phone mobileNumber,");
sb.append(" cE.email,"); sb.append(" cE.email,");
sb.append(" c.customer_type cusType,"); sb.append(" c.customer_type customerType,");
sb.append(" c.company_name compName,"); sb.append(" c.company_name companyName,");
sb.append(" c.current_address currentAddress,"); sb.append(" c.current_address currentAddress,");
sb.append(" c.description"); sb.append(" c.description,");
sb.append(" c.ipcc_status ipccStatus,");
sb.append(" c.call_allowed customerDnc");
sb.append(" from customer c"); sb.append(" from customer c");
sb.append(" inner join cusInCampaign cc on c.customer_id = cc.customer_id"); sb.append(" inner join cusInCampaign cc on c.customer_id = cc.customer_id");
sb.append(" left join cusPhone cP on c.customer_id = cP.cusId"); sb.append(" left join cusPhone cP on c.customer_id = cP.cusId");
...@@ -1633,6 +1632,35 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -1633,6 +1632,35 @@ public class CustomerServiceImpl implements CustomerService {
return customerList; return customerList;
} }
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO deleteCustomerFromCampaign(CampaignCustomerDTO campaignCustomerDTO) {
ResultDTO resultDTO = new ResultDTO();
Long companySiteId = campaignCustomerDTO.getCompanySiteId();
Long campaignId = campaignCustomerDTO.getCampaignId();
String[] lstCusId = campaignCustomerDTO.getLstCustomerId().split(",");
List<Short> lstStatus = campaignCustomerRepository.getStatus();
try {
for (String cusId: lstCusId) {
CampaignCustomer entity = campaignCustomerRepository.findCampaignCustomerByCampaignIdAndCompanySiteIdAndCustomerId(campaignId, companySiteId, Long.parseLong(cusId));
if (entity.getStatus() == 0) {
campaignCustomerRepository.delete(entity);
} else if (lstStatus.contains(entity.getStatus())){
entity.setInCampaignStatus((short)0);
campaignCustomerRepository.save(entity);
}
}
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 @Override
@Transactional(DataSourceQualify.CCMS_FULL) @Transactional(DataSourceQualify.CCMS_FULL)
public List<Customer> findAllByCondition(Long siteId, Date endTime) { public List<Customer> findAllByCondition(Long siteId, Date endTime) {
...@@ -1704,48 +1732,77 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -1704,48 +1732,77 @@ public class CustomerServiceImpl implements CustomerService {
// sb.append(""); // sb.append("");
// sb.append(""); // sb.append("");
@Override @Override
public ResultDTO searchCustomizeFields(CustomizeRequestDTo customizeFields) { public ResultDTO listCustomizeFields(CustomizeRequestDTo customizeFields) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
Map<String, String> params = new HashMap<>(); Map<String, String> params = new HashMap<>();
List<FieldsToShowDTO> list = new ArrayList<>(); List<CustomizeFielObjectDTO> list;
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
try { try {
stringBuilder.append(" with column_name_temp as ("); // stringBuilder.append(" with column_name_temp as (");
stringBuilder.append(" select 'CUSTOMER_ID' ,1 isFix from user_tab_columns, dual"); // stringBuilder.append(" select 'CUSTOMER_ID' ,1 isFix from user_tab_columns, dual");
stringBuilder.append(" union all"); // stringBuilder.append(" union all");
stringBuilder.append(" select 'CUSTOMER_NAME' ,1 isFix from user_tab_columns, dual"); // stringBuilder.append(" select 'CUSTOMER_NAME' ,1 isFix from user_tab_columns, dual");
stringBuilder.append(" union all"); // stringBuilder.append(" union all");
stringBuilder.append(" select 'CUSTOMER_TYPE' ,1 isFix from user_tab_columns, dual"); // stringBuilder.append(" select 'CUSTOMER_TYPE' ,1 isFix from user_tab_columns, dual");
stringBuilder.append(" union all"); // stringBuilder.append(" union all");
stringBuilder.append(" select 'NAME' ,1 isFix from user_tab_columns, dual"); // stringBuilder.append(" select 'NAME' ,1 isFix from user_tab_columns, dual");
stringBuilder.append(" union all"); // stringBuilder.append(" union all");
stringBuilder.append(" select 'CURRENT_ADDRESS', 1 isFix from user_tab_columns, dual"); // stringBuilder.append(" select 'CURRENT_ADDRESS', 1 isFix from user_tab_columns, dual");
stringBuilder.append(" union all"); // stringBuilder.append(" union all");
stringBuilder.append(" select 'PLACE_OF_BIRTH', 1 isFix from user_tab_columns, dual"); // stringBuilder.append(" select 'PLACE_OF_BIRTH', 1 isFix from user_tab_columns, dual");
stringBuilder.append(" union all"); // stringBuilder.append(" union all");
stringBuilder.append(" select 'DATE_OF_BIRTH', 1 isFix from user_tab_columns, dual"); // stringBuilder.append(" select 'DATE_OF_BIRTH', 1 isFix from user_tab_columns, dual");
stringBuilder.append(" union all"); // stringBuilder.append(" union all");
stringBuilder.append(" select 'MOBILE_NUMBER', 1 isFix from user_tab_columns, dual"); // stringBuilder.append(" select 'MOBILE_NUMBER', 1 isFix from user_tab_columns, dual");
stringBuilder.append(" union all"); // stringBuilder.append(" union all");
stringBuilder.append(" select 'EMAIL', 1 isFix from user_tab_columns, dual"); // stringBuilder.append(" select 'EMAIL', 1 isFix from user_tab_columns, dual");
stringBuilder.append(" union all"); // stringBuilder.append(" union all");
stringBuilder.append(" select 'USERNAME', 1 isFix from user_tab_columns, dual"); // stringBuilder.append(" select 'USERNAME', 1 isFix from user_tab_columns, dual");
stringBuilder.append(" union all"); // stringBuilder.append(" union all");
stringBuilder.append(" select 'CUSTOMER_TYPE', 1 isFix from user_tab_columns, dual"); // stringBuilder.append(" select 'CUSTOMER_TYPE', 1 isFix from user_tab_columns, dual");
stringBuilder.append(" where table_name = 'CUSTOMER'"); // stringBuilder.append(" where table_name = 'CUSTOMER'");
stringBuilder.append(" )"); // stringBuilder.append(" )");
//
stringBuilder.append(" select * from column_name_temp"); // stringBuilder.append(" select * from column_name_temp");
stringBuilder.append(" union all"); // stringBuilder.append(" union all");
stringBuilder.append(" select title columnName, 0 isFix "); // stringBuilder.append(" select title columnName, 0 isFix ");
stringBuilder.append(" from customize_fields, dual"); // stringBuilder.append(" from customize_fields, dual");
stringBuilder.append(" where function_code = 'CUSTOMER'"); // stringBuilder.append(" where function_code = 'CUSTOMER'");
stringBuilder.append(" and site_id = :p_company_site_id"); // stringBuilder.append(" and site_id = :p_company_site_id");
stringBuilder.append(" and STATUS = 1"); // stringBuilder.append(" and STATUS = 1");
// stringBuilder.append(" and active = 1 ");
stringBuilder.append("SELECT C.NAME name," +
" C.CUSTOMER_ID customerID," +
" C.CURRENT_ADDRESS currentAddress," +
" C.USERNAME username," +
" C.GENDER gender," +
" C.COMPANY_NAME companyName," +
" C.DATE_OF_BIRTH dateOfBirth," +
" C.COMPANY_NAME companyName," +
" C.CUSTOMER_TYPE customerType," +
" C.PLACE_OF_BIRTH placeOfBirth," +
" C.CUSTOMER_TYPE customerType," +
" C.EMAIL email," +
" C.USERNAME username," +
" C.NAME name," +
" C.MOBILE_NUMBER mobileNumber," +
" C.SITE_ID siteId," +
" C.STATUS status," +
" CF.FUNCTION_CODE functionCode," +
" CF.ACTIVE active," +
" CFO.*");
stringBuilder.append("FROM CUSTOMER C");
stringBuilder.append(" INNER JOIN CUSTOMIZE_FIELD_OBJECT CFO ON C.CUSTOMER_ID = CFO.OBJECT_ID");
stringBuilder.append(" INNER JOIN CUSTOMIZE_FIELDS CF ON CF.CUSTOMIZE_FIELD_ID = CFO.CUSTOMIZE_FIELDS_ID\n" +
"WHERE 1 = 1");
// stringBuilder.append(" and C.SITE_ID = :p_company_site_id");
stringBuilder.append(" and CF.STATUS = 1");
stringBuilder.append(" and active = 1 "); stringBuilder.append(" and active = 1 ");
params.put("p_company_site_id", customizeFields.getCompanySiteId()); stringBuilder.append(" and CF.FUNCTION_CODE = 'CUSTOMER' ");
params.put("p_company_site_id", customizeFields.getSiteId());
params.put("p_customer_id", customizeFields.getCustomerId()); params.put("p_customer_id", customizeFields.getCustomerId());
list = namedParameterJdbcTemplate.query(stringBuilder.toString(), params, BeanPropertyRowMapper.newInstance(FieldsToShowDTO.class)); LOGGER.info("SQL statement: " + stringBuilder);
list = namedParameterJdbcTemplate.query(stringBuilder.toString(), params, BeanPropertyRowMapper.newInstance(CustomizeFielObjectDTO.class));
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS); resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS); resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
resultDTO.setListData(list); resultDTO.setListData(list);
...@@ -1760,4 +1817,128 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -1760,4 +1817,128 @@ public class CustomerServiceImpl implements CustomerService {
} @Override
public ResultDTO searchCustomizeFields(int page, int pageSize, long SiteId ,long campaignId, CustomerQueryDTO customerQueryDTO) {
ResultDTO resultDTO = new ResultDTO();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
if (DataUtil.isNullOrZero(SiteId)) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
return resultDTO;
}
try {
StringBuilder sb = new StringBuilder();
sb.append("select");
sb.append(" C.NAME name,");
sb.append(" C.CUSTOMER_ID customerID,");
sb.append(" C.USERNAME username,");
sb.append(" C.GENDER gender,");
sb.append(" C.COMPANY_NAME companyName,");
sb.append(" C.DATE_OF_BIRTH dateOfBirth,");
sb.append(" C.CUSTOMER_TYPE customerType,");
sb.append(" C.COMPANY_NAME companyName,");
sb.append(" C.PLACE_OF_BIRTH placeOfBirth,");
sb.append(" C.CUSTOMER_TYPE customerType,");
sb.append(" C.EMAIL email,");
sb.append(" C.USERNAME username,");
sb.append(" C.NAME name,");
sb.append(" C.MOBILE_NUMBER mobileNumber,");
sb.append(" C.STATUS status,");
sb.append(" C.SITE_ID siteId,");
sb.append(" CF.FUNCTION_CODE functionCode,");
sb.append(" CFO.ACTIVE active,");
sb.append(" CFO.*");
sb.append("FROM CUSTOMER C");
sb.append(" INNER JOIN CUSTOMIZE_FIELD_OBJECT CFO ON C.CUSTOMER_ID = CFO.OBJECT_ID");
sb.append(" INNER JOIN CUSTOMIZE_FIELDS CF ON CF.CUSTOMIZE_FIELD_ID = CFO.CUSTOMIZE_FIELDS_ID\n" +
"WHERE 1 = 1");
sb.append(" and CFO.STATUS = 1");
sb.append(" and active = 1 ");
sb.append(" and CF.FUNCTION_CODE = 'CUSTOMER' ");
List<CustomerQueryDTO> queryCustomer = new ArrayList<>();
for (int i = 0; i <queryCustomer.size() ; i++) {
sb.append(queryCustomer.get(i).getJoin() + " "+
queryCustomer.get(i).getOperator() + " "+ queryCustomer.get(i).getField() + " "+ queryCustomer.get(i).getCondition());
}
SQLQuery query = session.createSQLQuery(sb.toString());
// query.setParameter("p_company_site_id", companySiteId);
// query.setParameter("p_customer_list_id", customerListId);
//
// if (!DataUtil.isNullOrEmpty(name)) {
// query.setParameter("p_name", "%" +
// name.replace("\\", "\\\\")
// .replaceAll("%", "\\%")
// .replaceAll("_", "\\_")
// + "%");
// }
//
// if (!DataUtil.isNullOrEmpty(mobileNumber)) {
// query.setParameter("p_mobile_number", "%" +
// mobileNumber.replace("\\", "\\\\")
// .replaceAll("%", "\\%")
// .replaceAll("_", "\\_")
// + "%");
// }
//
// if (!DataUtil.isNullOrEmpty(email)) {
// query.setParameter("p_email", "%" +
// email.replace("\\", "\\\\")
// .replaceAll("%", "\\%")
// .replaceAll("_", "\\_")
// + "%");
// }
query.addScalar("customerID", new LongType());
query.addScalar("name", new LongType());
query.addScalar("username", new LongType());
query.addScalar("customerId", new LongType());
query.addScalar("name", new StringType());
query.addScalar("description", new StringType());
query.addScalar("companyName", new StringType());
query.addScalar("customerType", new StringType());
query.addScalar("currentAddress", new StringType());
query.addScalar("mobileNumber", new StringType());
query.addScalar("email", new StringType());
query.setResultTransformer(Transformers.aliasToBean(CustomizeRequestDTo.class));
int count = 0;
List<CustomerCustomDTO> dtoList = query.list();
if (dtoList.size() > 0) {
count = query.list().size();
}
Pageable pageable = PageRequest.of(page, pageSize);
if (pageable != null) {
query.setFirstResult(pageable.getPageNumber() * pageable.getPageSize());
query.setMaxResults(pageable.getPageSize());
}
List<CustomerCustomDTO> data = query.list();
Page<CustomerCustomDTO> dataPage = new PageImpl<>(data, pageable, count);
resultDTO.setData(dataPage);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception e) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
} finally {
session.close();
}
return resultDTO;
}
}
...@@ -243,7 +243,7 @@ public class ScenarioServiceImpl implements ScenarioService { ...@@ -243,7 +243,7 @@ public class ScenarioServiceImpl implements ScenarioService {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Map<String, Object> result = new HashMap<>(); Map<String, Object> result = new HashMap<>();
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
boolean isValid = false; boolean isValid = true;
try { try {
List<String> fileHeaderList = new ArrayList<>(); List<String> fileHeaderList = new ArrayList<>();
fileHeaderList.add(BundleUtils.getLangString("scenario.template.questionCode", locale)); fileHeaderList.add(BundleUtils.getLangString("scenario.template.questionCode", locale));
...@@ -322,9 +322,19 @@ public class ScenarioServiceImpl implements ScenarioService { ...@@ -322,9 +322,19 @@ public class ScenarioServiceImpl implements ScenarioService {
//<editor-fold desc="Validate dữ liệu" defaultstate="collapsed"> //<editor-fold desc="Validate dữ liệu" defaultstate="collapsed">
String selectedType = ""; String selectedType = "";
List<String> lstImportQuestionCodes = new ArrayList<>();
String tmpCurrentQuestionCode = null;
rawDataList.forEach(item -> {
if (item[0] != null && !item[0].toString().trim().equals(""))
lstImportQuestionCodes.add(item[0].toString().trim());
});
for (int i = 0; i < rawDataList.size(); i++) { for (int i = 0; i < rawDataList.size(); i++) {
if (rawDataList.get(i)[0] != null && !rawDataList.get(i)[0].toString().trim().equals("")) if (rawDataList.get(i)[0] != null && !rawDataList.get(i)[0].toString().trim().equals("")) {
selectedType = rawDataList.get(i)[1].toString().trim(); selectedType = rawDataList.get(i)[1].toString().trim();
tmpCurrentQuestionCode = rawDataList.get(i)[0].toString().trim();
}
//validate question //validate question
if ((rawDataList.get(i)[0] != null && !rawDataList.get(i)[0].toString().trim().equals("")) || if ((rawDataList.get(i)[0] != null && !rawDataList.get(i)[0].toString().trim().equals("")) ||
(rawDataList.get(i)[1] != null && !rawDataList.get(i)[1].toString().trim().equals("")) || (rawDataList.get(i)[1] != null && !rawDataList.get(i)[1].toString().trim().equals("")) ||
...@@ -358,6 +368,12 @@ public class ScenarioServiceImpl implements ScenarioService { ...@@ -358,6 +368,12 @@ public class ScenarioServiceImpl implements ScenarioService {
if (rawDataList.get(i)[4] == null && rawDataList.get(i)[4].toString().trim().equals("")) { if (rawDataList.get(i)[4] == null && rawDataList.get(i)[4].toString().trim().equals("")) {
sb.append(BundleUtils.getLangString("scenario.hashInput.required")); sb.append(BundleUtils.getLangString("scenario.hashInput.required"));
} }
if((rawDataList.get(i)[7] != null && !rawDataList.get(i)[7].toString().trim().equals(""))) {
if((rawDataList.get(i)[7].toString().trim().equals(tmpCurrentQuestionCode)) ||
validateMappingQuestion(rawDataList.get(i)[7].toString().trim(), tmpCurrentQuestionCode, lstImportQuestionCodes))
sb.append(BundleUtils.getLangString("scenario.mappingQuestion.invalid"));
}
} }
Row dataRow = sheet.getRow(3 + i); Row dataRow = sheet.getRow(3 + i);
Cell resultCell = dataRow.createCell(row.getPhysicalNumberOfCells() - 1); Cell resultCell = dataRow.createCell(row.getPhysicalNumberOfCells() - 1);
...@@ -365,12 +381,11 @@ public class ScenarioServiceImpl implements ScenarioService { ...@@ -365,12 +381,11 @@ public class ScenarioServiceImpl implements ScenarioService {
resultCell.setCellValue(sb.toString()); resultCell.setCellValue(sb.toString());
isValid = false; isValid = false;
} else { } else {
isValid = true; // isValid = true;
resultCell.setCellValue("Ok"); resultCell.setCellValue("Ok");
} }
sb = new StringBuilder(); sb = new StringBuilder();
} }
selectedType = "";
//</editor-fold> //</editor-fold>
//insert data //insert data
...@@ -378,13 +393,14 @@ public class ScenarioServiceImpl implements ScenarioService { ...@@ -378,13 +393,14 @@ public class ScenarioServiceImpl implements ScenarioService {
logger.info("----- Data valid, start import scenario question -----"); logger.info("----- Data valid, start import scenario question -----");
List<ScenarioQuestionDTO> lstQuestion = buildQuestionsLst(rawDataList, scenarioId, campaignId, companySiteId); List<ScenarioQuestionDTO> lstQuestion = buildQuestionsLst(rawDataList, scenarioId, campaignId, companySiteId);
lstQuestion.forEach(question -> { lstQuestion.forEach(question -> {
questionService.add(question); // questionService.add(question);
}); });
FileOutputStream fos = new FileOutputStream(file); FileOutputStream fos = new FileOutputStream(file);
workbook.write(fos); workbook.write(fos);
result.put("file", file); result.put("file", file);
result.put("message", BundleUtils.getLangString("customer.importSuccess", locale)); result.put("message", BundleUtils.getLangString("customer.importSuccess", locale));
} else { } else {
logger.info("----- Data invalid, can't import scenario question -----");
FileOutputStream fos = new FileOutputStream(file); FileOutputStream fos = new FileOutputStream(file);
workbook.write(fos); workbook.write(fos);
result.put("file", file); result.put("file", file);
...@@ -398,9 +414,17 @@ public class ScenarioServiceImpl implements ScenarioService { ...@@ -398,9 +414,17 @@ public class ScenarioServiceImpl implements ScenarioService {
return result; return result;
} }
private boolean validateQuestionIndex(Object index) { private boolean validateMappingQuestion(String mappingQuestion, String currentQuestionCode, List<String> lstQuestionCode) {
if (index != null && DataUtil.isLong(index.toString())) return true; if(mappingQuestion == currentQuestionCode) return false;
return false;
String duplicateCode = lstQuestionCode.stream().
filter(p -> (p.equals(mappingQuestion) && p.equals(currentQuestionCode))).
findAny().orElse(null);
if(duplicateCode == null) return false;
// String notMappedCode = lstQuestionCode.stream().filter(p -> (!p.equals(mappingQuestion))).findAny().orElse(null);
// if(notMappedCode != null) return false;
return true;
} }
...@@ -411,15 +435,15 @@ public class ScenarioServiceImpl implements ScenarioService { ...@@ -411,15 +435,15 @@ public class ScenarioServiceImpl implements ScenarioService {
List<ScenarioQuestionDTO> lstQuestions = new ArrayList<>(); List<ScenarioQuestionDTO> lstQuestions = new ArrayList<>();
List<ScenarioAnswerDTO> lstAnswerOfQuestion = new ArrayList<>(); List<ScenarioAnswerDTO> lstAnswerOfQuestion = new ArrayList<>();
ScenarioQuestionDTO questionDTO = null; ScenarioQuestionDTO questionDTO = null;
Integer questionIndex = null; String questionCode = null;
for (int i = 0; i < rawDatas.size(); i++) { for (int i = 0; i < rawDatas.size(); i++) {
if (rawDatas.get(i)[0] != null && !rawDatas.get(i)[0].toString().trim().equals("")) { if (rawDatas.get(i)[0] != null && !rawDatas.get(i)[0].toString().trim().equals("")) {
questionIndex = Double.valueOf(rawDatas.get(i)[0].toString().trim()).intValue(); questionCode = rawDatas.get(i)[0].toString().trim();
questionDTO = new ScenarioQuestionDTO(); questionDTO = new ScenarioQuestionDTO();
questionDTO.setScenarioId(scenarioId); questionDTO.setScenarioId(scenarioId);
questionDTO.setCampaignId(campaignId); questionDTO.setCampaignId(campaignId);
questionDTO.setCompanySiteId(companySiteId); questionDTO.setCompanySiteId(companySiteId);
questionDTO.setImportIndex(questionIndex); questionDTO.setImportCode(questionCode);
if (rawDatas.get(i)[1].toString().trim().equals(BundleUtils.getLangString("scenario.template.text"))) if (rawDatas.get(i)[1].toString().trim().equals(BundleUtils.getLangString("scenario.template.text")))
questionDTO.setType((short) 0); questionDTO.setType((short) 0);
...@@ -445,9 +469,9 @@ public class ScenarioServiceImpl implements ScenarioService { ...@@ -445,9 +469,9 @@ public class ScenarioServiceImpl implements ScenarioService {
answerDto.setHasInput((short) 1); answerDto.setHasInput((short) 1);
else answerDto.setHasInput((short) 0); else answerDto.setHasInput((short) 0);
if (rawDatas.get(i)[7] != null && !rawDatas.get(i)[7].toString().trim().equals("")) { if (rawDatas.get(i)[7] != null && !rawDatas.get(i)[7].toString().trim().equals("")) {
answerDto.setMappingQuestionId(Double.valueOf(rawDatas.get(i)[7].toString().trim()).longValue()); answerDto.setMappingQuestionCode(rawDatas.get(i)[7].toString().trim());
} }
answerDto.setImportQuestionIndex(questionIndex); answerDto.setImportQuestionCode(questionCode);
answerDto.setCompanySiteId(companySiteId); answerDto.setCompanySiteId(companySiteId);
lstAnswerOfQuestion.add(answerDto); lstAnswerOfQuestion.add(answerDto);
...@@ -456,7 +480,7 @@ public class ScenarioServiceImpl implements ScenarioService { ...@@ -456,7 +480,7 @@ public class ScenarioServiceImpl implements ScenarioService {
questionOrderIndex = questionRepository.getMaxOrderId(scenarioId, campaignId, companySiteId); questionOrderIndex = questionRepository.getMaxOrderId(scenarioId, campaignId, companySiteId);
if(questionOrderIndex == null) questionOrderIndex = 0L; if (questionOrderIndex == null) questionOrderIndex = 0L;
lstQuestions.forEach(q -> { lstQuestions.forEach(q -> {
questionOrderIndex += 1; questionOrderIndex += 1;
q.setOrderIndex(questionOrderIndex); q.setOrderIndex(questionOrderIndex);
...@@ -466,7 +490,7 @@ public class ScenarioServiceImpl implements ScenarioService { ...@@ -466,7 +490,7 @@ public class ScenarioServiceImpl implements ScenarioService {
lstAnswerOfQuestion.forEach(a -> { lstAnswerOfQuestion.forEach(a -> {
answerIndex += 1; answerIndex += 1;
a.setOrderIndex(answerIndex); a.setOrderIndex(answerIndex);
if(a.getImportQuestionIndex() == q.getImportIndex()) answers.add(a); if (a.getImportQuestionCode().equals(q.getImportCode())) answers.add(a);
}); });
q.setLstAnswers(answers); q.setLstAnswers(answers);
}); });
......
...@@ -26,4 +26,5 @@ public class CampaignCustomerDTO extends BaseDTO{ ...@@ -26,4 +26,5 @@ public class CampaignCustomerDTO extends BaseDTO{
private Long callStatus; private Long callStatus;
private Long companySiteId; private Long companySiteId;
private Long complainId; private Long complainId;
private String lstCustomerId;
} }
...@@ -34,4 +34,5 @@ public class CustomerDTO extends BaseDTO { ...@@ -34,4 +34,5 @@ public class CustomerDTO extends BaseDTO {
private Long emailAllowed; private Long emailAllowed;
private Long smsAllowed; private Long smsAllowed;
private String ipccStatus; private String ipccStatus;
private String customerDnc;
} }
...@@ -5,13 +5,14 @@ import lombok.Getter; ...@@ -5,13 +5,14 @@ import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import java.io.Serializable;
import java.util.Date; import java.util.Date;
@Getter @Getter
@Setter @Setter
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
public class CustomizeFielObjectDTO { public class CustomizeFielObjectDTO implements Serializable {
private Long customerId; private Long customerId;
private String name; private String name;
private String companyName; private String companyName;
...@@ -40,4 +41,6 @@ public class CustomizeFielObjectDTO { ...@@ -40,4 +41,6 @@ public class CustomizeFielObjectDTO {
private Long fieldOptionValueId; private Long fieldOptionValueId;
private String title; private String title;
private String functionCode; private String functionCode;
private String active;
} }
...@@ -25,5 +25,6 @@ public class ScenarioAnswerDTO implements Serializable { ...@@ -25,5 +25,6 @@ public class ScenarioAnswerDTO implements Serializable {
public Date deleteTime; public Date deleteTime;
public Long mappingQuestionId; public Long mappingQuestionId;
public Long campaignId; public Long campaignId;
public Integer importQuestionIndex; public String importQuestionCode;
public String mappingQuestionCode;
} }
...@@ -29,5 +29,5 @@ public class ScenarioQuestionDTO implements Serializable { ...@@ -29,5 +29,5 @@ public class ScenarioQuestionDTO implements Serializable {
private Short isDefault; private Short isDefault;
private Short answerIndex; private Short answerIndex;
private List<ScenarioAnswerDTO> lstAnswers; private List<ScenarioAnswerDTO> lstAnswers;
private Integer importIndex; private String importCode;
} }
package com.viettel.campaign.web.dto.request_dto;
import com.viettel.campaign.web.dto.BaseDTO;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class CustomerQueryDTO extends BaseDTO {
String join ;
String field;
String operator;
String condition;
}
...@@ -5,13 +5,29 @@ import com.viettel.campaign.web.dto.BaseDTO; ...@@ -5,13 +5,29 @@ import com.viettel.campaign.web.dto.BaseDTO;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import java.util.Date;
import java.util.List;
@Getter @Getter
@Setter @Setter
public class CustomizeRequestDTo extends BaseDTO { public class CustomizeRequestDTo extends BaseDTO {
String operatorLogic; String operatorLogic;
String name;
String filterCustomer; String filterCustomer;
String compare; String compare;
String valueCustomer; String valueCustomer;
String companySiteId;
String customerId; String customerId;
String companyName;
String status;
String siteId;
Short gender;
String currentAddress;
String placeOfBirth;
Date dateOfBirth;
String mobileNumber;
String email;
String userName;
Long customerType;
} }
package com.viettel.campaign.web.rest; package com.viettel.campaign.web.rest;
import com.viettel.campaign.model.ccms_full.CampaignCustomer;
import com.viettel.campaign.model.ccms_full.Customer; import com.viettel.campaign.model.ccms_full.Customer;
import com.viettel.campaign.model.ccms_full.CustomizeFieldObject; import com.viettel.campaign.model.ccms_full.CustomizeFieldObject;
import com.viettel.campaign.model.ccms_full.CustomizeFields; import com.viettel.campaign.model.ccms_full.CustomizeFields;
import com.viettel.campaign.repository.ccms_full.CustomerQueryRepository;
import com.viettel.campaign.repository.ccms_full.impl.CustomerQueryRepositoryImpl;
import com.viettel.campaign.service.CustomerService; import com.viettel.campaign.service.CustomerService;
import com.viettel.campaign.utils.BundleUtils; import com.viettel.campaign.utils.BundleUtils;
import com.viettel.campaign.utils.Config; import com.viettel.campaign.utils.Config;
...@@ -38,6 +41,7 @@ import java.util.*; ...@@ -38,6 +41,7 @@ import java.util.*;
@RequestMapping("/ipcc/customer") @RequestMapping("/ipcc/customer")
@CrossOrigin(origins = "*") @CrossOrigin(origins = "*")
public class CustomerController { public class CustomerController {
private CustomerQueryRepository customerQueryRepo;
private static final Logger LOGGER = LoggerFactory.getLogger(CustomerController.class); private static final Logger LOGGER = LoggerFactory.getLogger(CustomerController.class);
...@@ -113,6 +117,7 @@ public class CustomerController { ...@@ -113,6 +117,7 @@ public class CustomerController {
// VIẾT ĐI VIẾT LẠI 4 LẦN RỒI ĐẤY // VIẾT ĐI VIẾT LẠI 4 LẦN RỒI ĐẤY
String xAuthToken = request.getHeader("X-Auth-Token"); String xAuthToken = request.getHeader("X-Auth-Token");
UserSession userSession = (UserSession) RedisUtil.getInstance().get(xAuthToken); UserSession userSession = (UserSession) RedisUtil.getInstance().get(xAuthToken);
if (userSession == null) { if (userSession == null) {
userSession = new UserSession(); userSession = new UserSession();
userSession.setSiteId(customerListDTO.getCompanySiteId()); userSession.setSiteId(customerListDTO.getCompanySiteId());
...@@ -248,6 +253,15 @@ public class CustomerController { ...@@ -248,6 +253,15 @@ public class CustomerController {
return new ResponseEntity<>(data, HttpStatus.OK); return new ResponseEntity<>(data, HttpStatus.OK);
} }
@PostMapping("/deleteCustomerFromCampaign")
@ResponseBody
public ResponseEntity<?> deleteCustomerFromCampaign(@RequestBody CampaignCustomerDTO dto) {
ResultDTO resultDTO = customerService.deleteCustomerFromCampaign(dto);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
private String saveUploadFile(MultipartFile file) { private String saveUploadFile(MultipartFile file) {
try { try {
String currentTime = new SimpleDateFormat("yyyy_MM_dd_hh_mm_ss").format(new Date()); String currentTime = new SimpleDateFormat("yyyy_MM_dd_hh_mm_ss").format(new Date());
...@@ -267,6 +281,15 @@ public class CustomerController { ...@@ -267,6 +281,15 @@ public class CustomerController {
} }
return null; return null;
} }
// @GetMapping("/query")
// public ResponseEntity<List<Customer>> query(@RequestParam(value = "search") String query) {
// List<Customer> things = customerQueryRepo.findAll(query);
// if (things.isEmpty()) {
// return ResponseEntity.noContent().build();
// }
// return ResponseEntity.ok(things);
// }
@GetMapping(path = "", produces = { MediaType.APPLICATION_JSON_VALUE }) @GetMapping(path = "", produces = { MediaType.APPLICATION_JSON_VALUE })
public ResponseEntity<List<Customer>> query(@RequestParam(value = "search") String query) { public ResponseEntity<List<Customer>> query(@RequestParam(value = "search") String query) {
List<Customer> result = null; List<Customer> result = null;
...@@ -282,7 +305,7 @@ public class CustomerController { ...@@ -282,7 +305,7 @@ public class CustomerController {
@PostMapping("/getCustomizeFields") @PostMapping("/getCustomizeFields")
@ResponseBody @ResponseBody
public ResponseEntity<?> getListFieldsToShow(@RequestBody CustomizeRequestDTo customizeRequestDTo) { public ResponseEntity<?> getListFieldsToShow(@RequestBody CustomizeRequestDTo customizeRequestDTo) {
ResultDTO resultDTO = customerService.searchCustomizeFields(customizeRequestDTo); ResultDTO resultDTO = customerService.listCustomizeFields(customizeRequestDTo);
return new ResponseEntity<>(resultDTO, HttpStatus.OK); return new ResponseEntity<>(resultDTO, HttpStatus.OK);
} }
} }
...@@ -132,6 +132,9 @@ public class ScenarioController { ...@@ -132,6 +132,9 @@ public class ScenarioController {
// .body(Files.readAllBytes(fileExport.toPath())); // .body(Files.readAllBytes(fileExport.toPath()));
} catch (Exception e) { } catch (Exception e) {
logger.error(e.getMessage()); logger.error(e.getMessage());
ResultDTO resultDTO = new ResultDTO();
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
return new ResponseEntity<>(HttpStatus.BAD_REQUEST); return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
} }
} }
......
...@@ -134,4 +134,5 @@ scenario.answer.required="Answer is required for SingleChoice or MultiChoice que ...@@ -134,4 +134,5 @@ scenario.answer.required="Answer is required for SingleChoice or MultiChoice que
scenario.hashInput.required="Has input is required" scenario.hashInput.required="Has input is required"
scenario.required.required="Require is required" scenario.required.required="Require is required"
scenario.default.required="Default is required" scenario.default.required="Default is required"
scenario.mappingQuestion.invalid="Mapping question invalid"
...@@ -136,6 +136,7 @@ scenario.answer.required="Câu trả lời cho câu hỏi SingleChoice, MultiCho ...@@ -136,6 +136,7 @@ scenario.answer.required="Câu trả lời cho câu hỏi SingleChoice, MultiCho
scenario.hashInput.required="Trường Nhập text bắt buộc nhập" scenario.hashInput.required="Trường Nhập text bắt buộc nhập"
scenario.required.required="Trường Bắt buộc bắt buộc nhập" scenario.required.required="Trường Bắt buộc bắt buộc nhập"
scenario.default.required="Trường Mặc định bắt buộc nhập" scenario.default.required="Trường Mặc định bắt buộc nhập"
scenario.mappingQuestion.invalid="Câu hỏi liên kết không hợp lệ"
......
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