Commit 1f45c332 authored by Tu Bach's avatar Tu Bach

Merge branch 'master' into tubn

parents 72518d29 b918a41e
...@@ -26,18 +26,19 @@ public class CorsFilter implements Filter { ...@@ -26,18 +26,19 @@ public class CorsFilter implements Filter {
response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT");
response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Origin, Authorization, X-Requested-With, Content-Type, Accept, token1, X-Auth-Token"); response.setHeader("Access-Control-Allow-Headers", "Origin, Authorization, X-Requested-With, Content-Type, Accept, token1, X-Auth-Token, Message");
response.setHeader("Access-Control-Expose-Headers", "Message");
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(request, resp);
return; return;
} }
if ("/".equals(request.getRequestURI())) { if ("/".equals(request.getRequestURI())) {
chain.doFilter(req, resp); chain.doFilter(request, resp);
return; return;
} }
String xAuthToken = request.getHeader("X-Auth-Token"); String xAuthToken = request.getHeader("X-Auth-Token");
...@@ -47,7 +48,7 @@ public class CorsFilter implements Filter { ...@@ -47,7 +48,7 @@ public class CorsFilter implements Filter {
} }
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(request, resp);
} else { } else {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "The token is invalid."); response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "The token is invalid.");
} }
......
...@@ -19,7 +19,9 @@ import org.hibernate.transform.Transformers; ...@@ -19,7 +19,9 @@ import org.hibernate.transform.Transformers;
import org.hibernate.type.*; import org.hibernate.type.*;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.domain.*; import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -27,9 +29,10 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -27,9 +29,10 @@ import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext; import javax.persistence.PersistenceContext;
import javax.persistence.Query; import java.util.ArrayList;
import java.math.BigDecimal; import java.util.HashMap;
import java.util.*; import java.util.List;
import java.util.Map;
@Repository @Repository
public class CampaignRepositoryImpl implements CampaignRepositoryCustom { public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
...@@ -638,7 +641,7 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom { ...@@ -638,7 +641,7 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
"),\n" + "),\n" +
"data as (\n" + "data as (\n" +
"select a.*, rownum row_ from data_temp a\n" + "select a.*, rownum row_ from data_temp a\n" +
"where a.totalCusList > 0" + "where a.totalCusCampaign > 0" +
"),\n" + "),\n" +
"count_data as (\n" + "count_data as (\n" +
"select count(*) totalRow from data_temp\n" + "select count(*) totalRow from data_temp\n" +
......
...@@ -19,5 +19,7 @@ public interface AgentsService { ...@@ -19,5 +19,7 @@ public interface AgentsService {
ResultDTO searchCampaignAgentByName(int page, int pageSize, Long companySiteId, String userName, String fullName); ResultDTO searchCampaignAgentByName(int page, int pageSize, Long companySiteId, String userName, String fullName);
ResultDTO searchCampaignAgentSelectByName(int page, int pageSize, Long companySiteId, Long campaignId, String userName, String fullName);
ResultDTO createMultipleCampaignAgent(CampaignAgentRequestDTO campaignAgentRequestDTO); ResultDTO createMultipleCampaignAgent(CampaignAgentRequestDTO campaignAgentRequestDTO);
} }
...@@ -61,6 +61,10 @@ public interface CustomerService { ...@@ -61,6 +61,10 @@ public interface CustomerService {
ResultDTO deleteCustomerFromCampaign(CampaignCustomerDTO campaignCustomerDTO); ResultDTO deleteCustomerFromCampaign(CampaignCustomerDTO campaignCustomerDTO);
ResultDTO searchCampaignInformation(CampaignCustomerDTO campaignCustomerDTO);
ResultDTO addCustomerToCampaign(CampaignCustomerDTO campaignCustomerDTO);
// ------------ customer ------------ // // ------------ customer ------------ //
...@@ -86,6 +90,6 @@ public interface CustomerService { ...@@ -86,6 +90,6 @@ public interface CustomerService {
//// List<CustomizeFields> searchCustomize(); //// List<CustomizeFields> searchCustomize();
ResultDTO listCustomizeFields(CustomizeFieldsDTO customizeFields); ResultDTO listCustomizeFields(CustomizeFieldsDTO customizeFields);
ResultDTO searchCustomizeFields(int page, int pageSize, long companySiteId, long campaignId, CustomerQueryDTO customerQueryDTO); ResultDTO searchCustomizeFields(CampaignCustomerDTO campaignCustomerDTO);
} }
...@@ -88,13 +88,18 @@ public class AgentsServiceImpl implements AgentsService { ...@@ -88,13 +88,18 @@ public class AgentsServiceImpl implements AgentsService {
sb.append(" a.FULL_NAME fullName,"); sb.append(" a.FULL_NAME fullName,");
sb.append(" a.COMPANY_SITE_ID companySiteId,"); sb.append(" a.COMPANY_SITE_ID companySiteId,");
sb.append(" b.FILTER_TYPE filterType,"); sb.append(" b.FILTER_TYPE filterType,");
sb.append(" b.CAMPAIGN_AGENT_ID campaignAgentId"); sb.append(" b.CAMPAIGN_AGENT_ID campaignAgentId,");
sb.append(" d.ROLE_CODE roleCode");
sb.append(" FROM VSA_USERS a"); sb.append(" FROM VSA_USERS a");
sb.append(" LEFT JOIN CAMPAIGN_AGENT b on a.USER_ID = b.AGENT_ID"); sb.append(" LEFT JOIN CAMPAIGN_AGENT b on a.USER_ID = b.AGENT_ID");
sb.append(" INNER JOIN USER_ROLE c on a.USER_ID = c.USER_ID");
sb.append(" INNER JOIN ROLE d on c.ROLE_ID = d.ROLE_ID");
sb.append(" WHERE 1 = 1"); sb.append(" WHERE 1 = 1");
sb.append(" AND a.COMPANY_SITE_ID = :p_company_site_id"); sb.append(" AND a.COMPANY_SITE_ID = :p_company_site_id");
sb.append(" AND a.STATUS = 1");
sb.append(" AND b.AGENT_ID IS NULL"); sb.append(" AND b.AGENT_ID IS NULL");
sb.append(" ORDER BY a.FULL_NAME ASC"); sb.append(" AND d.ROLE_CODE IN ('AGENT', 'SUPERVISOR')");
sb.append(" ORDER BY UPPER(a.FULL_NAME)");
SQLQuery query = session.createSQLQuery(sb.toString()); SQLQuery query = session.createSQLQuery(sb.toString());
...@@ -107,6 +112,7 @@ public class AgentsServiceImpl implements AgentsService { ...@@ -107,6 +112,7 @@ public class AgentsServiceImpl implements AgentsService {
query.addScalar("companySiteId", new LongType()); query.addScalar("companySiteId", new LongType());
query.addScalar("filterType", new ShortType()); query.addScalar("filterType", new ShortType());
query.addScalar("campaignAgentId", new LongType()); query.addScalar("campaignAgentId", new LongType());
query.addScalar("roleCode", new StringType());
query.setResultTransformer(Transformers.aliasToBean(VSAUsersDTO.class)); query.setResultTransformer(Transformers.aliasToBean(VSAUsersDTO.class));
int count = 0; int count = 0;
...@@ -157,20 +163,21 @@ public class AgentsServiceImpl implements AgentsService { ...@@ -157,20 +163,21 @@ public class AgentsServiceImpl implements AgentsService {
sb.append("SELECT"); sb.append("SELECT");
sb.append(" a.USER_ID userId,"); sb.append(" a.CAMPAIGN_AGENT_ID campaignAgentId,");
sb.append(" a.USER_NAME userName,"); sb.append(" a.FILTER_TYPE filterType,");
sb.append(" a.STATUS status,");
sb.append(" a.FULL_NAME fullName,");
sb.append(" a.COMPANY_SITE_ID companySiteId,"); sb.append(" a.COMPANY_SITE_ID companySiteId,");
sb.append(" b.FILTER_TYPE filterType,"); sb.append(" b.USER_ID userId,");
sb.append(" b.CAMPAIGN_AGENT_ID campaignAgentId"); sb.append(" b.USER_NAME userName,");
sb.append(" FROM VSA_USERS a"); sb.append(" b.STATUS status,");
sb.append(" b.FULL_NAME fullName");
sb.append(" FROM CAMPAIGN_AGENT a");
sb.append(" RIGHT JOIN CAMPAIGN_AGENT b on a.USER_ID = b.AGENT_ID"); sb.append(" INNER JOIN VSA_USERS b ON a.AGENT_ID = b.USER_ID");
sb.append(" WHERE 1 = 1"); sb.append(" WHERE 1 = 1");
sb.append(" AND b.COMPANY_SITE_ID = :p_company_site_id"); sb.append(" AND a.COMPANY_SITE_ID = :p_company_site_id");
sb.append(" AND b.CAMPAIGN_ID = :p_campaign_id"); sb.append(" AND a.CAMPAIGN_ID = :p_campaign_id");
sb.append(" ORDER BY a.FULL_NAME ASC"); sb.append(" ORDER BY UPPER(b.FULL_NAME)");
SQLQuery query = session.createSQLQuery(sb.toString()); SQLQuery query = session.createSQLQuery(sb.toString());
...@@ -295,8 +302,8 @@ public class AgentsServiceImpl implements AgentsService { ...@@ -295,8 +302,8 @@ public class AgentsServiceImpl implements AgentsService {
sqlStrBuilder.append(" b.CAMPAIGN_AGENT_ID campaignAgentId"); sqlStrBuilder.append(" b.CAMPAIGN_AGENT_ID campaignAgentId");
sqlStrBuilder.append(" FROM VSA_USERS a"); sqlStrBuilder.append(" FROM VSA_USERS a");
sqlStrBuilder.append(" LEFT JOIN CAMPAIGN_AGENT b on a.USER_ID = b.AGENT_ID"); sqlStrBuilder.append(" LEFT JOIN CAMPAIGN_AGENT b on a.USER_ID = b.AGENT_ID");
sqlStrBuilder.append(" JOIN USER_ROLE c on a.USER_ID = c.USER_ID"); sqlStrBuilder.append(" INNER JOIN USER_ROLE c on a.USER_ID = c.USER_ID");
sqlStrBuilder.append(" JOIN ROLE d on c.ROLE_ID = d.ROLE_ID"); sqlStrBuilder.append(" INNER JOIN ROLE d on c.ROLE_ID = d.ROLE_ID");
sqlStrBuilder.append(" WHERE 1 = 1"); sqlStrBuilder.append(" WHERE 1 = 1");
sqlStrBuilder.append(" AND a.COMPANY_SITE_ID = :p_company_site_id"); sqlStrBuilder.append(" AND a.COMPANY_SITE_ID = :p_company_site_id");
...@@ -310,8 +317,8 @@ public class AgentsServiceImpl implements AgentsService { ...@@ -310,8 +317,8 @@ public class AgentsServiceImpl implements AgentsService {
sqlStrBuilder.append(" AND d.ROLE_CODE IN ('AGENT', 'SUPERVISOR')"); sqlStrBuilder.append(" AND d.ROLE_CODE IN ('AGENT', 'SUPERVISOR')");
sqlStrBuilder.append(" AND a.STATUS = 1"); sqlStrBuilder.append(" AND a.STATUS = 1");
sqlStrBuilder.append(" AND b.CAMPAIGN_AGENT_ID IS NULL"); sqlStrBuilder.append(" AND b.AGENT_ID IS NULL");
sqlStrBuilder.append(" ORDER BY a.FULL_NAME ASC"); sqlStrBuilder.append(" ORDER BY UPPER(a.FULL_NAME)");
SQLQuery query = session.createSQLQuery(sqlStrBuilder.toString()); SQLQuery query = session.createSQLQuery(sqlStrBuilder.toString());
...@@ -319,7 +326,112 @@ public class AgentsServiceImpl implements AgentsService { ...@@ -319,7 +326,112 @@ public class AgentsServiceImpl implements AgentsService {
if (!DataUtil.isNullOrEmpty(userName)) { if (!DataUtil.isNullOrEmpty(userName)) {
query.setParameter("p_user_name", "%" + query.setParameter("p_user_name", "%" +
userName userName.trim()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
}
if (!DataUtil.isNullOrEmpty(fullName)) {
query.setParameter("p_full_name", "%" +
fullName.trim()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
}
query.addScalar("userId", new LongType());
query.addScalar("userName", new StringType());
query.addScalar("status", new ShortType());
query.addScalar("fullName", new StringType());
query.addScalar("companySiteId", new LongType());
query.addScalar("filterType", new ShortType());
query.addScalar("campaignAgentId", new LongType());
query.setResultTransformer(Transformers.aliasToBean(VSAUsersDTO.class));
int count = 0;
List<VSAUsersDTO> dtoList = query.list();
if (dtoList.size() > 0) {
count = query.list().size();
}
Pageable pageable = PageRequest.of(page, pageSize);
if (pageable != null) {
query.setFirstResult(pageable.getPageNumber() * pageable.getPageSize());
query.setMaxResults(pageable.getPageSize());
}
List<VSAUsersDTO> data = query.list();
Page<VSAUsersDTO> dataPage = new PageImpl<>(data, pageable, count);
resultDTO.setData(dataPage);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception e) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
} finally {
session.close();
}
return resultDTO;
}
@Override
public ResultDTO searchCampaignAgentSelectByName(int page, int pageSize, Long companySiteId, Long campaignId, String userName, String fullName) {
ResultDTO resultDTO = new ResultDTO();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
if (DataUtil.isNullOrZero(companySiteId)) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
return resultDTO;
}
try {
// StringBuilder sb = new StringBuilder();
// sb.append(SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_MNG, "campaign-agents-by-params"));
StringBuilder sb = new StringBuilder();
sb.append("SELECT");
sb.append(" a.CAMPAIGN_AGENT_ID campaignAgentId,");
sb.append(" a.FILTER_TYPE filterType,");
sb.append(" a.COMPANY_SITE_ID companySiteId,");
sb.append(" b.USER_ID userId,");
sb.append(" b.USER_NAME userName,");
sb.append(" b.STATUS status,");
sb.append(" b.FULL_NAME fullName");
sb.append(" FROM CAMPAIGN_AGENT a");
sb.append(" INNER JOIN VSA_USERS b ON a.AGENT_ID = b.USER_ID");
sb.append(" WHERE 1 = 1");
sb.append(" AND a.COMPANY_SITE_ID = :p_company_site_id");
sb.append(" AND a.CAMPAIGN_ID = :p_campaign_id");
if (!DataUtil.isNullOrEmpty(userName)) {
sb.append(" AND UPPER(b.USER_NAME) LIKE UPPER(:p_user_name)");
}
if (!DataUtil.isNullOrEmpty(fullName)) {
sb.append(" AND UPPER(b.FULL_NAME) LIKE UPPER(:p_full_name)");
}
sb.append(" ORDER BY UPPER(b.FULL_NAME)");
SQLQuery query = session.createSQLQuery(sb.toString());
query.setParameter("p_company_site_id", companySiteId);
query.setParameter("p_campaign_id", campaignId);
if (!DataUtil.isNullOrEmpty(userName)) {
query.setParameter("p_user_name", "%" +
userName.trim()
.replace("\\", "\\\\") .replace("\\", "\\\\")
.replaceAll("%", "\\%") .replaceAll("%", "\\%")
.replaceAll("_", "\\_") .replaceAll("_", "\\_")
...@@ -328,7 +440,7 @@ public class AgentsServiceImpl implements AgentsService { ...@@ -328,7 +440,7 @@ public class AgentsServiceImpl implements AgentsService {
if (!DataUtil.isNullOrEmpty(fullName)) { if (!DataUtil.isNullOrEmpty(fullName)) {
query.setParameter("p_full_name", "%" + query.setParameter("p_full_name", "%" +
fullName fullName.trim()
.replace("\\", "\\\\") .replace("\\", "\\\\")
.replaceAll("%", "\\%") .replaceAll("%", "\\%")
.replaceAll("_", "\\_") .replaceAll("_", "\\_")
......
...@@ -3,14 +3,16 @@ package com.viettel.campaign.service.impl; ...@@ -3,14 +3,16 @@ package com.viettel.campaign.service.impl;
import com.github.tennaito.rsql.jpa.JpaCriteriaCountQueryVisitor; import com.github.tennaito.rsql.jpa.JpaCriteriaCountQueryVisitor;
import com.github.tennaito.rsql.jpa.JpaCriteriaQueryVisitor; import com.github.tennaito.rsql.jpa.JpaCriteriaQueryVisitor;
import com.viettel.campaign.config.DataSourceQualify; import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.mapper.CustomerListMapper;
import com.viettel.campaign.mapper.CustomerMapper; import com.viettel.campaign.mapper.CustomerMapper;
import com.viettel.campaign.model.ccms_full.*; import com.viettel.campaign.model.ccms_full.*;
import com.viettel.campaign.repository.ccms_full.*; 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.*; import com.viettel.campaign.web.dto.request_dto.CustomerDetailRequestDTO;
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.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;
...@@ -44,8 +46,7 @@ import javax.persistence.criteria.CriteriaQuery; ...@@ -44,8 +46,7 @@ import javax.persistence.criteria.CriteriaQuery;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileOutputStream; import java.nio.file.Files;
import java.lang.reflect.Array;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
...@@ -849,7 +850,7 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -849,7 +850,7 @@ public class CustomerServiceImpl implements CustomerService {
count = query.list().size(); count = query.list().size();
} }
Pageable pageable = PageRequest.of(searchCustomerRequestDTO.getPage(), searchCustomerRequestDTO.getPageSize(), Sort.by(searchCustomerRequestDTO.getSort())); Pageable pageable = PageRequest.of(searchCustomerRequestDTO.getPage(), searchCustomerRequestDTO.getPageSize(), Sort.by(searchCustomerRequestDTO.getSort()).descending());
if (pageable != null) { if (pageable != null) {
query.setFirstResult(pageable.getPageNumber() * pageable.getPageSize()); query.setFirstResult(pageable.getPageNumber() * pageable.getPageSize());
query.setMaxResults(pageable.getPageSize()); query.setMaxResults(pageable.getPageSize());
...@@ -946,7 +947,7 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -946,7 +947,7 @@ public class CustomerServiceImpl implements CustomerService {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
Map<String, Object> result = new HashMap<>(); Map<String, Object> result = new HashMap<>();
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
boolean validateOk = false; int failedCount = 0;
try { try {
//<editor-fold desc="Khởi tạo mảng header tĩnh" defaultstate="collapsed"> //<editor-fold desc="Khởi tạo mảng header tĩnh" defaultstate="collapsed">
...@@ -971,6 +972,7 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -971,6 +972,7 @@ public class CustomerServiceImpl implements CustomerService {
File file = new File(path); File file = new File(path);
FileInputStream fis = new FileInputStream(file); FileInputStream fis = new FileInputStream(file);
XSSFWorkbook workbook = new XSSFWorkbook(fis); XSSFWorkbook workbook = new XSSFWorkbook(fis);
ByteArrayOutputStream os = new ByteArrayOutputStream();
Sheet sheet = workbook.getSheetAt(0); Sheet sheet = workbook.getSheetAt(0);
Row row = sheet.getRow(3); Row row = sheet.getRow(3);
...@@ -990,8 +992,8 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -990,8 +992,8 @@ public class CustomerServiceImpl implements CustomerService {
for (int i = 0; i < header.size(); i++) { for (int i = 0; i < header.size(); i++) {
Cell cell = row.getCell(i); Cell cell = row.getCell(i);
if (!cell.getStringCellValue().equals(header.get(i).getTitle().split("#")[0])) { if (!cell.getStringCellValue().equals(header.get(i).getTitle().split("#")[0])) {
result.put("file", file); result.put("content", Files.readAllBytes(file.toPath()));
result.put("message", BundleUtils.getLangString("customer.invalidTemplate", locale)); result.put("message", "template-invalid");
return result; return result;
} }
} }
...@@ -1001,8 +1003,8 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -1001,8 +1003,8 @@ public class CustomerServiceImpl implements CustomerService {
//<editor-fold desc="Kiểm tra file dữ liệu rỗng" defaultstate="collapsed"> //<editor-fold desc="Kiểm tra file dữ liệu rỗng" defaultstate="collapsed">
if (sheet.getPhysicalNumberOfRows() == 3) { if (sheet.getPhysicalNumberOfRows() == 3) {
result.put("message", BundleUtils.getLangString("customer.noData", locale)); result.put("message", "template-no-data");
result.put("file", file); result.put("content", Files.readAllBytes(file.toPath()));
return result; return result;
} else { } else {
Cell resultCell = sheet.getRow(3).createCell(sheet.getRow(3).getPhysicalNumberOfCells()); Cell resultCell = sheet.getRow(3).createCell(sheet.getRow(3).getPhysicalNumberOfCells());
...@@ -1015,8 +1017,8 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -1015,8 +1017,8 @@ public class CustomerServiceImpl implements CustomerService {
for (int i = 4; i < sheet.getPhysicalNumberOfRows(); i++) { for (int i = 4; i < sheet.getPhysicalNumberOfRows(); i++) {
Row dataRow = sheet.getRow(i); Row dataRow = sheet.getRow(i);
if (dataRow != null) { if (dataRow != null) {
Object[] obj = new Object[row.getPhysicalNumberOfCells()]; Object[] obj = new Object[row.getPhysicalNumberOfCells() - 1];
for (int j = 0; j < row.getPhysicalNumberOfCells(); j++) { for (int j = 0; j < row.getPhysicalNumberOfCells() - 1; j++) {
Cell dataCell = dataRow.getCell(j); Cell dataCell = dataRow.getCell(j);
if (dataCell != null) { if (dataCell != null) {
obj[j] = dataFormat.formatCellValue(dataCell); obj[j] = dataFormat.formatCellValue(dataCell);
...@@ -1027,7 +1029,6 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -1027,7 +1029,6 @@ public class CustomerServiceImpl implements CustomerService {
} else if (headerCell.getStringCellValue().equals(BundleUtils.getLangString("customer.callAllowed", locale)) || headerCell.getStringCellValue().equals(BundleUtils.getLangString("customer.emailAllowed", locale)) } else if (headerCell.getStringCellValue().equals(BundleUtils.getLangString("customer.callAllowed", locale)) || headerCell.getStringCellValue().equals(BundleUtils.getLangString("customer.emailAllowed", locale))
|| headerCell.getStringCellValue().equals(BundleUtils.getLangString("customer.smsAllowed", locale))) { || headerCell.getStringCellValue().equals(BundleUtils.getLangString("customer.smsAllowed", locale))) {
obj[j] = BundleUtils.getLangString("customer.yes", locale); obj[j] = BundleUtils.getLangString("customer.yes", locale);
break;
} else { } else {
obj[j] = null; obj[j] = null;
} }
...@@ -1046,7 +1047,7 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -1046,7 +1047,7 @@ public class CustomerServiceImpl implements CustomerService {
if (!str.equals("")) { if (!str.equals("")) {
sb.append(str); sb.append(str);
} }
} else sb.append(BundleUtils.getLangString("customer.nameRequired")); } else sb.append(BundleUtils.getLangString("customer.nameRequired", locale));
if (rawDataList.get(i).length > 4 if (rawDataList.get(i).length > 4
&& rawDataList.get(i)[2] != null && rawDataList.get(i)[2] != null
&& !rawDataList.get(i)[2].toString().trim().equals("") && !rawDataList.get(i)[2].toString().trim().equals("")
...@@ -1090,9 +1091,8 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -1090,9 +1091,8 @@ public class CustomerServiceImpl implements CustomerService {
Cell resultCell = dataRow.createCell(row.getPhysicalNumberOfCells() - 1); Cell resultCell = dataRow.createCell(row.getPhysicalNumberOfCells() - 1);
if (sb.length() > 0) { if (sb.length() > 0) {
resultCell.setCellValue(sb.toString()); resultCell.setCellValue(sb.toString());
validateOk = false; failedCount++;
} else { } else {
validateOk = true;
resultCell.setCellValue("Ok"); resultCell.setCellValue("Ok");
} }
sb = new StringBuilder(); sb = new StringBuilder();
...@@ -1100,7 +1100,7 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -1100,7 +1100,7 @@ public class CustomerServiceImpl implements CustomerService {
//</editor-fold> //</editor-fold>
//<editor-fold desc="Insert dữ liệu nếu validate Ok" defaultstate="collapsed"> //<editor-fold desc="Insert dữ liệu nếu validate Ok" defaultstate="collapsed">
if (validateOk) { if (failedCount == 0) {
for (int i = 0; i < rawDataList.size(); i++) { for (int i = 0; i < rawDataList.size(); i++) {
Customer c = new Customer(); Customer c = new Customer();
c.setName(rawDataList.get(i)[1].toString()); c.setName(rawDataList.get(i)[1].toString());
...@@ -1201,9 +1201,9 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -1201,9 +1201,9 @@ public class CustomerServiceImpl implements CustomerService {
customerContactRepository.save(cc); customerContactRepository.save(cc);
} }
} }
for (int j = 0; j < dynamicHeader.size(); j++) {
CustomizeFieldObject cfo = new CustomizeFieldObject(); CustomizeFieldObject cfo = new CustomizeFieldObject();
cfo.setObjectId(saved.getCustomerId()); cfo.setObjectId(saved.getCustomerId());
for (int j = 0; j < dynamicHeader.size(); j++) {
cfo.setCustomizeFieldId(dynamicHeader.get(j).getCustomizeFieldId()); cfo.setCustomizeFieldId(dynamicHeader.get(j).getCustomizeFieldId());
if (rawDataList.get(i).length > (12 + j) && rawDataList.get(i)[12 + j] != null) { if (rawDataList.get(i).length > (12 + j) && rawDataList.get(i)[12 + j] != null) {
switch (dynamicHeader.get(j).getType()) { switch (dynamicHeader.get(j).getType()) {
...@@ -1244,22 +1244,26 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -1244,22 +1244,26 @@ public class CustomerServiceImpl implements CustomerService {
clm.setCustomerListId(customerListId); clm.setCustomerListId(customerListId);
customerListMappingRepository.save(clm); customerListMappingRepository.save(clm);
} }
FileOutputStream fos = new FileOutputStream(file); workbook.write(os);
workbook.write(fos); os.flush();
result.put("file", file); os.close();
result.put("message", BundleUtils.getLangString("customer.importSuccess", locale)); workbook.close();
result.put("content", os.toByteArray());
result.put("message", "");
} else { } else {
FileOutputStream fos = new FileOutputStream(file); workbook.write(os);
workbook.write(fos); os.flush();
result.put("file", file); os.close();
result.put("message", BundleUtils.getLangString("customer.importFailed", locale)); workbook.close();
result.put("content", os.toByteArray());
result.put("message", "import-error");
} }
//</editor-fold> //</editor-fold>
return result; return result;
} catch (Exception e) { } catch (Exception e) {
LOGGER.info(e.getMessage()); LOGGER.info(e.getMessage());
result.put("message", BundleUtils.getLangString("customer.errorValidate", locale)); result.put("message", "validate-error");
return result; return result;
} }
} }
...@@ -1661,6 +1665,85 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -1661,6 +1665,85 @@ public class CustomerServiceImpl implements CustomerService {
return resultDTO; return resultDTO;
} }
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO searchCampaignInformation(CampaignCustomerDTO campaignCustomerDTO) {
ResultDTO resultDTO = new ResultDTO();
List<CampaignInformationDTO> list = new ArrayList<>();
Map<String, Object> params = new HashMap<>();
try {
StringBuilder sb = new StringBuilder();
sb.append(" with status_customer as (\n" +
"select complete_value\n" +
"from campaign_complete_code\n" +
"where complete_value <> 4\n" +
" and is_finish <> 1\n" +
" and campaign_type = 1\n" +
" and company_site_id = :p_company_site_id\n" +
"),\n" +
"count_customer as (\n" +
"select campaign_id campaignId,\n" +
" sum(case\n" +
" when customer_list_id is null then 1\n" +
" else 0\n" +
" end) totalIndividual,\n" +
" sum(case\n" +
" when customer_list_id is not null then 1\n" +
" else 0\n" +
" end) totalCusInList\n" +
"from campaign_customer\n" +
"group by campaign_id\n" +
")\n" +
"select a.*, b.customer_number campaignCustomer\n" +
"from count_customer a\n" +
"left join campaign b on a.campaignId = b.campaign_id\n" +
"where a.campaignId = :p_campaign_id");
params.put("p_campaign_id", campaignCustomerDTO.getCampaignId());
params.put("p_company_site_id", campaignCustomerDTO.getCompanySiteId());
list = namedParameterJdbcTemplate.query(sb.toString(), params, BeanPropertyRowMapper.newInstance(CampaignInformationDTO.class));
if (list.size() > 0) {
resultDTO.setData(list.get(0));
} else {
resultDTO.setData(null);
}
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 addCustomerToCampaign(CampaignCustomerDTO campaignCustomerDTO) {
ResultDTO resultDTO = new ResultDTO();
Long companySiteId = campaignCustomerDTO.getCompanySiteId();
Long campaignId = campaignCustomerDTO.getCampaignId();
String[] lstCusId = campaignCustomerDTO.getLstCustomerId().split(",");
try {
for (String cusId : lstCusId) {
CampaignCustomer entity = new CampaignCustomer();
entity.setCompanySiteId(companySiteId);
entity.setStatus((short) 0);
entity.setCampaignId(campaignId);
entity.setCustomerId(Long.parseLong(cusId));
entity.setRecallCount(0L);
entity.setInCampaignStatus((short) 1);
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)
...@@ -1813,22 +1896,21 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -1813,22 +1896,21 @@ public class CustomerServiceImpl implements CustomerService {
@Override @Override
public ResultDTO searchCustomizeFields(int page, int pageSize, long SiteId, long campaignId, CustomerQueryDTO customerQueryDTO) { @Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO searchCustomizeFields(CampaignCustomerDTO campaignCustomerDTO) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession(); Session session = sessionFactory.openSession();
session.beginTransaction(); session.beginTransaction();
if (DataUtil.isNullOrZero(SiteId)) { // if (DataUtil.isNullOrZero(SiteId)) {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR); // resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR); // resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
return resultDTO; // return resultDTO;
} // }
try { try {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("select"); sb.append("select");
...@@ -1841,90 +1923,82 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -1841,90 +1923,82 @@ public class CustomerServiceImpl implements CustomerService {
sb.append(" C.CUSTOMER_TYPE customerType,"); sb.append(" C.CUSTOMER_TYPE customerType,");
sb.append(" C.COMPANY_NAME companyName,"); sb.append(" C.COMPANY_NAME companyName,");
sb.append(" C.PLACE_OF_BIRTH placeOfBirth,"); sb.append(" C.PLACE_OF_BIRTH placeOfBirth,");
sb.append(" C.CUSTOMER_TYPE customerType,");
sb.append(" C.EMAIL email,"); sb.append(" C.EMAIL email,");
sb.append(" C.USERNAME username,");
sb.append(" C.NAME name,");
sb.append(" C.MOBILE_NUMBER mobileNumber,"); sb.append(" C.MOBILE_NUMBER mobileNumber,");
sb.append(" C.STATUS status,"); sb.append(" C.STATUS status,");
sb.append(" C.SITE_ID siteId,"); sb.append(" C.SITE_ID siteId,");
sb.append(" CF.FUNCTION_CODE functionCode,"); sb.append(" CF.FUNCTION_CODE functionCode,");
sb.append(" CFO.ACTIVE active,"); sb.append(" CF.ACTIVE active,");
sb.append(" CFO.*"); sb.append(" CFO.*");
sb.append("FROM CUSTOMER C"); 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_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" + sb.append(" INNER JOIN CUSTOMIZE_FIELDS CF ON CF.CUSTOMIZE_FIELD_ID = CFO.CUSTOMIZE_FIELDS_ID\n" +
"WHERE 1 = 1"); " WHERE 1 = 1");
sb.append(" and CFO.STATUS = 1"); sb.append(" and CFO.STATUS = 1");
sb.append(" and active = 1 "); sb.append(" and active = 1 ");
sb.append(" and CF.FUNCTION_CODE = 'CUSTOMER' "); 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() + " " + List<CustomerQueryDTO> customerDTOList = campaignCustomerDTO.getListQuery();
queryCustomer.get(i).getOperator() + " " + queryCustomer.get(i).getField() + " " + queryCustomer.get(i).getCondition()); // sb.append(
// customerDTOList.get(0).getField() + " "
// + customerDTOList.get(0).getOperator() + " "
// + customerDTOList.get(0).getCondition() + " ");
// for (int i = 1; i < campaignCustomerDTO.getListQuery().size(); i++) {
// sb.append(campaignCustomerDTO.getListQuery().get(i).getJoin() + " "
// + campaignCustomerDTO.getListQuery().get(i).getField() + " "
// + campaignCustomerDTO.getListQuery().get(i).getOperator() + " "
// + campaignCustomerDTO.getListQuery().get(i).getCondition() + " ");
for (CustomerQueryDTO query : customerDTOList) {
if (query.getJoin() == null) {
sb.append("AND ");
} else {
sb.append(query.getJoin() + " ");
}
sb.append(query.getField() + " ");
sb.append(query.getOperator() + " ");
if ("like".equals(query.getOperator()) || "not like".equals(query.getOperator())) {
sb.append("%"+ query.getCondition() + "% ");
} else {
sb.append(query.getCondition());
} }
}
SQLQuery query = session.createSQLQuery(sb.toString()); SQLQuery query = session.createSQLQuery(sb.toString());
query.addScalar("customerId", new LongType());
// 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 StringType());
query.addScalar("username", new StringType());
query.addScalar("name", new StringType()); query.addScalar("name", new StringType());
query.addScalar("description", new StringType()); query.addScalar("userName", new StringType());
query.addScalar("companyName", new StringType()); query.addScalar("companyName", new StringType());
query.addScalar("customerType", new StringType()); query.addScalar("customerType", new LongType());
query.addScalar("currentAddress", new StringType()); query.addScalar("currentAddress", new StringType());
query.addScalar("mobileNumber", new StringType()); query.addScalar("mobileNumber", new StringType());
query.addScalar("email", new StringType()); query.addScalar("email", new StringType());
query.addScalar("placeOfBirth", new StringType());
query.addScalar("dateOfBirth", new DateType());
query.addScalar("status", new ShortType());
query.addScalar("siteId", new LongType());
query.addScalar("active", new StringType());
query.setResultTransformer(Transformers.aliasToBean(CampaignCustomerDTO.class));
query.setResultTransformer(Transformers.aliasToBean(CustomizeRequestDTo.class));
int count = 0; int count = 0;
List<CustomerCustomDTO> dtoList = query.list(); List<CampaignCustomerDTO> dtoList = query.list();
if (dtoList.size() > 0) { if (dtoList.size() > 0) {
count = query.list().size(); count = query.list().size();
} }
Pageable pageable = PageRequest.of(page, pageSize); Pageable pageable = PageRequest.of(campaignCustomerDTO.getPage(), campaignCustomerDTO.getPageSize());
if (pageable != null) { if (pageable != null) {
query.setFirstResult(pageable.getPageNumber() * pageable.getPageSize()); query.setFirstResult(pageable.getPageNumber() * pageable.getPageSize());
query.setMaxResults(pageable.getPageSize()); query.setMaxResults(pageable.getPageSize());
} }
List<CustomerCustomDTO> data = query.list(); List<CampaignCustomerDTO> data = query.list();
Page<CustomerCustomDTO> dataPage = new PageImpl<>(data, pageable, count); Page<CampaignCustomerDTO> dataPage = new PageImpl<>(data, pageable, count);
resultDTO.setData(dataPage); resultDTO.setData(dataPage);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS); resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS); resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception e) { } catch (Exception e) {
LOGGER.error(e.getMessage(), e);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR); resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR); resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
} finally { } finally {
......
...@@ -239,6 +239,8 @@ public class ScenarioQuestionServiceImpl implements ScenarioQuestionService { ...@@ -239,6 +239,8 @@ public class ScenarioQuestionServiceImpl implements ScenarioQuestionService {
return resultDTO; return resultDTO;
} }
try { try {
scenarioQuestionDTO.setCode(scenarioQuestionDTO.getCode().trim());
scenarioQuestionDTO.setQuestion(scenarioQuestionDTO.getQuestion().trim());
ScenarioQuestion scenarioQuestion = modelMapper.map(scenarioQuestionDTO, ScenarioQuestion.class); ScenarioQuestion scenarioQuestion = modelMapper.map(scenarioQuestionDTO, ScenarioQuestion.class);
if (scenarioQuestion.getScenarioQuestionId() != null) { if (scenarioQuestion.getScenarioQuestionId() != null) {
...@@ -271,6 +273,8 @@ public class ScenarioQuestionServiceImpl implements ScenarioQuestionService { ...@@ -271,6 +273,8 @@ public class ScenarioQuestionServiceImpl implements ScenarioQuestionService {
campaignLogAnswer.setCampaignId(scenarioQuestion.getCampaignId()); campaignLogAnswer.setCampaignId(scenarioQuestion.getCampaignId());
if (item.getScenarioAnswerId() != null) { if (item.getScenarioAnswerId() != null) {
item.setCode(item.getCode().trim());
item.setAnswer(item.getAnswer().trim());
ScenarioAnswer answer = modelMapper.map(item, ScenarioAnswer.class); ScenarioAnswer answer = modelMapper.map(item, ScenarioAnswer.class);
scenarioAnswerRepository.save(answer); scenarioAnswerRepository.save(answer);
campaignLogAnswer.setCustomerId(answer.getScenarioAnswerId()); campaignLogAnswer.setCustomerId(answer.getScenarioAnswerId());
...@@ -281,6 +285,7 @@ public class ScenarioQuestionServiceImpl implements ScenarioQuestionService { ...@@ -281,6 +285,7 @@ public class ScenarioQuestionServiceImpl implements ScenarioQuestionService {
item.setScenarioQuestionId(scenarioQuestion.getScenarioQuestionId()); item.setScenarioQuestionId(scenarioQuestion.getScenarioQuestionId());
item.setCreateTime(new Date()); item.setCreateTime(new Date());
item.setStatus((short) 1); item.setStatus((short) 1);
item.setAnswer(item.getAnswer().trim());
ScenarioAnswer answer = modelMapper.map(item, ScenarioAnswer.class); ScenarioAnswer answer = modelMapper.map(item, ScenarioAnswer.class);
scenarioAnswerRepository.save(answer); scenarioAnswerRepository.save(answer);
campaignLogAnswer.setCustomerId(answer.getScenarioAnswerId()); campaignLogAnswer.setCustomerId(answer.getScenarioAnswerId());
......
...@@ -72,6 +72,9 @@ public class ScenarioServiceImpl implements ScenarioService { ...@@ -72,6 +72,9 @@ public class ScenarioServiceImpl implements ScenarioService {
public ResultDTO update(ScenarioDTO scenarioDTO) { public ResultDTO update(ScenarioDTO scenarioDTO) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
try { try {
scenarioDTO.setCode(scenarioDTO.getCode().trim());
if (scenarioDTO.getDescription() != null) scenarioDTO.setDescription(scenarioDTO.getDescription().trim());
else scenarioDTO.setDescription("");
scenarioDTO.setUpdateBy(null); scenarioDTO.setUpdateBy(null);
scenarioDTO.setUpdateTime(new Date()); scenarioDTO.setUpdateTime(new Date());
...@@ -368,8 +371,8 @@ public class ScenarioServiceImpl implements ScenarioService { ...@@ -368,8 +371,8 @@ 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] != null && !rawDataList.get(i)[7].toString().trim().equals(""))) {
if((rawDataList.get(i)[7].toString().trim().equals(tmpCurrentQuestionCode)) || if ((rawDataList.get(i)[7].toString().trim().equals(tmpCurrentQuestionCode)) ||
validateMappingQuestion(rawDataList.get(i)[7].toString().trim(), tmpCurrentQuestionCode, lstImportQuestionCodes)) validateMappingQuestion(rawDataList.get(i)[7].toString().trim(), tmpCurrentQuestionCode, lstImportQuestionCodes))
sb.append(BundleUtils.getLangString("scenario.mappingQuestion.invalid")); sb.append(BundleUtils.getLangString("scenario.mappingQuestion.invalid"));
} }
...@@ -390,17 +393,15 @@ public class ScenarioServiceImpl implements ScenarioService { ...@@ -390,17 +393,15 @@ public class ScenarioServiceImpl implements ScenarioService {
//insert data //insert data
if (isValid) { if (isValid) {
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);
...@@ -415,12 +416,12 @@ public class ScenarioServiceImpl implements ScenarioService { ...@@ -415,12 +416,12 @@ public class ScenarioServiceImpl implements ScenarioService {
} }
private boolean validateMappingQuestion(String mappingQuestion, String currentQuestionCode, List<String> lstQuestionCode) { private boolean validateMappingQuestion(String mappingQuestion, String currentQuestionCode, List<String> lstQuestionCode) {
if(mappingQuestion == currentQuestionCode) return false; if (mappingQuestion == currentQuestionCode) return false;
String duplicateCode = lstQuestionCode.stream(). String duplicateCode = lstQuestionCode.stream().
filter(p -> (p.equals(mappingQuestion) && p.equals(currentQuestionCode))). filter(p -> (p.equals(mappingQuestion) && p.equals(currentQuestionCode))).
findAny().orElse(null); findAny().orElse(null);
if(duplicateCode == null) return false; if (duplicateCode == null) return false;
// String notMappedCode = lstQuestionCode.stream().filter(p -> (!p.equals(mappingQuestion))).findAny().orElse(null); // String notMappedCode = lstQuestionCode.stream().filter(p -> (!p.equals(mappingQuestion))).findAny().orElse(null);
// if(notMappedCode != null) return false; // if(notMappedCode != null) return false;
......
package com.viettel.campaign.web.dto; package com.viettel.campaign.web.dto;
import com.viettel.campaign.web.dto.request_dto.CustomerQueryDTO;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import java.util.Date; import java.util.Date;
import java.util.List;
@Getter @Getter
@Setter @Setter
...@@ -27,4 +29,7 @@ public class CampaignCustomerDTO extends BaseDTO{ ...@@ -27,4 +29,7 @@ public class CampaignCustomerDTO extends BaseDTO{
private Long companySiteId; private Long companySiteId;
private Long complainId; private Long complainId;
private String lstCustomerId; private String lstCustomerId;
private List<CustomerQueryDTO> listQuery;
} }
...@@ -16,4 +16,5 @@ public class CampaignInformationDTO { ...@@ -16,4 +16,5 @@ public class CampaignInformationDTO {
private Long totalNotCall; private Long totalNotCall;
private Long campaignCustomer; private Long campaignCustomer;
private Long customerListId; private Long customerListId;
private Long totalCusInList;
} }
package com.viettel.campaign.web.dto; package com.viettel.campaign.web.dto;
import com.viettel.campaign.web.dto.request_dto.CustomerQueryDTO;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import java.util.Date; import java.util.Date;
import java.util.List;
@Getter @Getter
@Setter @Setter
...@@ -29,4 +31,5 @@ public class CustomizeFieldsDTO extends BaseDTO { ...@@ -29,4 +31,5 @@ public class CustomizeFieldsDTO extends BaseDTO {
private Long min; private Long min;
private Long max; private Long max;
private Long active; private Long active;
} }
...@@ -35,4 +35,5 @@ public class VSAUsersDTO { ...@@ -35,4 +35,5 @@ public class VSAUsersDTO {
// String userKazooId; // String userKazooId;
Short filterType; Short filterType;
Long campaignAgentId; Long campaignAgentId;
String roleCode;
} }
...@@ -11,4 +11,5 @@ public class CustomerQueryDTO extends BaseDTO { ...@@ -11,4 +11,5 @@ public class CustomerQueryDTO extends BaseDTO {
String field; String field;
String operator; String operator;
String condition; String condition;
} }
...@@ -68,6 +68,13 @@ public class AgentsController { ...@@ -68,6 +68,13 @@ public class AgentsController {
return new ResponseEntity<>(result, HttpStatus.OK); return new ResponseEntity<>(result, HttpStatus.OK);
} }
@GetMapping("/searchCampaignAgentSelect")
@ResponseBody
public ResponseEntity<ResultDTO> searchCampaignAgentSelect(@RequestParam("page") int page, @RequestParam("pageSize") int pageSize, @RequestParam("companySiteId") Long companySiteId, @RequestParam("campaignId") Long campaignId, @RequestParam("userName") String userName, @RequestParam("fullName") String fullName) {
ResultDTO result = agentsService.searchCampaignAgentSelectByName(page, pageSize, companySiteId, campaignId, userName, fullName);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@PostMapping("/createMultipleCampaignAgent") @PostMapping("/createMultipleCampaignAgent")
@ResponseBody @ResponseBody
public ResultDTO createMultipleCampaignAgent(@RequestBody @Valid CampaignAgentRequestDTO campaignAgentRequestDTO) { public ResultDTO createMultipleCampaignAgent(@RequestBody @Valid CampaignAgentRequestDTO campaignAgentRequestDTO) {
......
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.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.Config; import com.viettel.campaign.utils.Config;
import com.viettel.campaign.utils.Constants; import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.utils.RedisUtil; import com.viettel.campaign.utils.RedisUtil;
import com.viettel.campaign.web.dto.*; import com.viettel.campaign.web.dto.*;
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.SearchCustomerRequestDTO; import com.viettel.campaign.web.dto.request_dto.SearchCustomerRequestDTO;
import com.viettel.econtact.filter.UserSession; import com.viettel.econtact.filter.UserSession;
import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.FilenameUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
...@@ -117,12 +112,6 @@ public class CustomerController { ...@@ -117,12 +112,6 @@ 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) {
userSession = new UserSession();
userSession.setSiteId(customerListDTO.getCompanySiteId());
userSession.setUserName("its4");
}
return customerService.createCustomerList(customerListDTO, userSession.getUserName()); return customerService.createCustomerList(customerListDTO, userSession.getUserName());
} }
...@@ -184,14 +173,15 @@ public class CustomerController { ...@@ -184,14 +173,15 @@ public class CustomerController {
} }
//<editor-fold desc="Download and import excel" defaultstate="collapsed"> //<editor-fold desc="Download and import excel" defaultstate="collapsed">
@GetMapping(value = "/downloadFileTemplate") @PostMapping(value = "/downloadFileTemplate")
public ResponseEntity<byte[]> downloadFileTemplate(@RequestParam("companySiteId") Long companySiteId) { public ResponseEntity<byte[]> downloadFileTemplate(@RequestBody Long companySiteId) {
LOGGER.info("--------DOWNLOAD FILE TEMPLATE---------"); LOGGER.info("--------DOWNLOAD FILE TEMPLATE---------");
try { try {
byte[] content = customerService.buildTemplate(companySiteId); byte[] content = customerService.buildTemplate(companySiteId);
return ResponseEntity.ok() return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=template_import_customer.xlsx") // 2 dòng này không hiểu sao lại không hoạt động nữa
.header("Content-Type", Constants.MIME_TYPE.EXCEL_XLSX) // .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=template_import_customer.xlsx")
// .header("Content-Type", Constants.MIME_TYPE.EXCEL_XLSX)
.body(content); .body(content);
} catch (Exception e) { } catch (Exception e) {
LOGGER.error(e.getMessage()); LOGGER.error(e.getMessage());
...@@ -200,34 +190,27 @@ public class CustomerController { ...@@ -200,34 +190,27 @@ public class CustomerController {
} }
@PostMapping(value = "/importFile") @PostMapping(value = "/importFile")
public ResponseEntity<?> importFile(@RequestParam("file") MultipartFile file, public ResponseEntity<?> importFile(@RequestPart("file") MultipartFile file,
@RequestParam("customerListId") String customerListId, @RequestPart("customerListId") String customerListId,
HttpServletRequest request) { HttpServletRequest request) {
LOGGER.info("------------IMPORT FILE TEMPLATE--------------"); LOGGER.info("------------IMPORT FILE TEMPLATE--------------");
Locale locale = new Locale("vi", "VN"); Locale locale = new Locale("vi", "VN");
try { try {
UserSession userSession = (UserSession) RedisUtil.getInstance().get(request.getHeader("X-Auth-Token")); UserSession userSession = (UserSession) RedisUtil.getInstance().get(request.getHeader("X-Auth-Token"));
if (userSession == null) {
userSession = new UserSession();
userSession.setSiteId(662691L);
userSession.setUserName("its3");
}
if (file.isEmpty()) { if (file.isEmpty()) {
return new ResponseEntity<>(BundleUtils.getLangString("customer.fileNotSelected"), HttpStatus.OK); return new ResponseEntity<>("file-empty", HttpStatus.OK);
} }
if (!Objects.equals(FilenameUtils.getExtension(file.getOriginalFilename()), Constants.FileType.xlsx)) { if (!Objects.equals(FilenameUtils.getExtension(file.getOriginalFilename()), Constants.FileType.xlsx)) {
return new ResponseEntity<>(BundleUtils.getLangString("customer.invalidTemplate", locale), HttpStatus.OK); return new ResponseEntity<>("template-invalid", HttpStatus.OK);
} }
String path = saveUploadFile(file); String path = saveUploadFile(file);
List<CustomizeFields> dynamicHeaders = customerService.getDynamicHeader(userSession.getCompanySiteId()); List<CustomizeFields> dynamicHeaders = customerService.getDynamicHeader(userSession.getCompanySiteId());
Map<String, Object> map = customerService.readAndValidateCustomer(path, dynamicHeaders, userSession, Long.parseLong(customerListId)); Map<String, Object> map = customerService.readAndValidateCustomer(path, dynamicHeaders, userSession, Long.parseLong(customerListId));
File fileExport = (File) map.get("file");
String message = (String) map.get("message"); String message = (String) map.get("message");
byte[] content = (byte[]) map.get("content");
return ResponseEntity.ok() return ResponseEntity.ok()
.header("Content-Type", Constants.MIME_TYPE.EXCEL_XLSX)
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=template_import_customer.xlsx")
.header("Message", message) .header("Message", message)
.body(Files.readAllBytes(fileExport.toPath())); .body(content);
} catch (Exception e) { } catch (Exception e) {
LOGGER.error(e.getMessage()); LOGGER.error(e.getMessage());
return new ResponseEntity<>(HttpStatus.BAD_REQUEST); return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
...@@ -260,6 +243,20 @@ public class CustomerController { ...@@ -260,6 +243,20 @@ public class CustomerController {
return new ResponseEntity<>(resultDTO, HttpStatus.OK); return new ResponseEntity<>(resultDTO, HttpStatus.OK);
} }
@PostMapping("/searchCampaignInformation")
@ResponseBody
public ResponseEntity<?> searchCampaignInformation(@RequestBody CampaignCustomerDTO dto) {
ResultDTO resultDTO = customerService.searchCampaignInformation(dto);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
@PostMapping("/addCustomerToCampaign")
@ResponseBody
public ResponseEntity<?> addCustomerToCampaign(@RequestBody CampaignCustomerDTO dto) {
ResultDTO resultDTO = customerService.addCustomerToCampaign(dto);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
private String saveUploadFile(MultipartFile file) { private String saveUploadFile(MultipartFile file) {
...@@ -308,4 +305,13 @@ public class CustomerController { ...@@ -308,4 +305,13 @@ public class CustomerController {
ResultDTO resultDTO = customerService.listCustomizeFields(customizeRequestDTo); ResultDTO resultDTO = customerService.listCustomizeFields(customizeRequestDTo);
return new ResponseEntity<>(resultDTO, HttpStatus.OK); return new ResponseEntity<>(resultDTO, HttpStatus.OK);
} }
@PostMapping("/searchCustomizeFields")
@ResponseBody
public ResponseEntity searchCustomizeFields(@RequestBody CampaignCustomerDTO campaignCustomerDTO ) {
ResultDTO result = customerService.searchCustomizeFields(campaignCustomerDTO);
return new ResponseEntity<>(result, HttpStatus.OK);
}
} }
...@@ -121,20 +121,18 @@ public class ScenarioController { ...@@ -121,20 +121,18 @@ public class ScenarioController {
Map<String, Object> map = scenarioService.readAndValidateCustomer(path, scenarioId, campaignId, userSession.getCompanySiteId()); Map<String, Object> map = scenarioService.readAndValidateCustomer(path, scenarioId, campaignId, userSession.getCompanySiteId());
File fileExport = (File) map.get("file"); File fileExport = (File) map.get("file");
String message = (String) map.get("message"); String message = (String) map.get("message");
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO= new ResultDTO();
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS); resultDTO.setErrorCode("00");
resultDTO.setDescription(message); resultDTO.setDescription(message);
return new ResponseEntity<>(resultDTO, HttpStatus.OK); resultDTO.setData(fileExport);
// return ResponseEntity.ok() HttpHeaders headers = new HttpHeaders();
// .header("Content-Type", Constants.MIME_TYPE.EXCEL_XLSX) headers.add("Content-Type", Constants.MIME_TYPE.EXCEL_XLSX);
// .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=import_scenario_result.xlsx") headers.add("Message", message);
// .header("Message", message) return ResponseEntity.ok()
// .body(Files.readAllBytes(fileExport.toPath())); .headers(headers)
.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);
} }
} }
......
server: server:
port: 9999 port: 1111
spring: spring:
application: application:
name: campaign name: campaign
......
...@@ -87,7 +87,6 @@ customer.cusType.vip = VIP ...@@ -87,7 +87,6 @@ customer.cusType.vip = VIP
customer.cusType.blacklist = Blacklist customer.cusType.blacklist = Blacklist
customer.yes = Yes customer.yes = Yes
customer.not = No customer.not = No
customer.invalidTemplate = Invalid Template
customer.noData = Template empty customer.noData = Template empty
customer.nameRequired = Full name required; customer.nameRequired = Full name required;
customer.emailMax50 = Email must less than 50 character; customer.emailMax50 = Email must less than 50 character;
...@@ -102,7 +101,6 @@ customer.notGreaterThan = not greater than ...@@ -102,7 +101,6 @@ customer.notGreaterThan = not greater than
customer.notLessThan = not less than customer.notLessThan = not less than
customer.importCustomer = IMPORT CUSTOMER customer.importCustomer = IMPORT CUSTOMER
customer.notice = Attention: A record is valid when Full Name is not null and one of three fields Main phone, secondary phone or email is not null customer.notice = Attention: A record is valid when Full Name is not null and one of three fields Main phone, secondary phone or email is not null
customer.fileNotSelected=Please select a file
customer.emailInvalid=Invalid email; customer.emailInvalid=Invalid email;
customer.emailExists=Email exists; customer.emailExists=Email exists;
......
...@@ -89,7 +89,6 @@ customer.cusType.vip = VIP ...@@ -89,7 +89,6 @@ customer.cusType.vip = VIP
customer.cusType.blacklist = Blacklist customer.cusType.blacklist = Blacklist
customer.yes = customer.yes =
customer.not = Không customer.not = Không
customer.invalidTemplate = Template sai định dạng
customer.noData = Template không có dữ liệu customer.noData = Template không có dữ liệu
customer.nameRequired = Họ và tên không được để trống; customer.nameRequired = Họ và tên không được để trống;
customer.emailMax50 = Email không được quá 50 kí tự; customer.emailMax50 = Email không được quá 50 kí tự;
...@@ -104,7 +103,6 @@ customer.notGreaterThan = không được lớn hơn ...@@ -104,7 +103,6 @@ customer.notGreaterThan = không được lớn hơn
customer.notLessThan = không được nhỏ hơn customer.notLessThan = không được nhỏ hơn
customer.importCustomer = IMPORT KHÁCH HÀNG customer.importCustomer = IMPORT KHÁCH HÀNG
customer.notice = Chú ý: 1 bản ghi được coi là hợp lệ bắt buộc phải có thông tin Họ và Tên và 1 trong 3 thông tin liên lạc (số điện thoại chính, số điện thoại phụ hoặc email) customer.notice = Chú ý: 1 bản ghi được coi là hợp lệ bắt buộc phải có thông tin Họ và Tên và 1 trong 3 thông tin liên lạc (số điện thoại chính, số điện thoại phụ hoặc email)
customer.fileNotSelected=Bạn chưa chọn file
customer.emailInvalid=Email không đúng định dạng; customer.emailInvalid=Email không đúng định dạng;
customer.emailExists=Email đã tồn tại; customer.emailExists=Email đã tồn tại;
......
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