Commit 837fb275 authored by đinh thị đầm's avatar đinh thị đầm
parents b45b12c3 7e6a4c2d
...@@ -37,6 +37,8 @@ public interface CampaignRepositoryCustom { ...@@ -37,6 +37,8 @@ public interface CampaignRepositoryCustom {
ResultDTO getCustomerListInformation(CampaignRequestDTO dto); ResultDTO getCustomerListInformation(CampaignRequestDTO dto);
ResultDTO getCountIndividualOnList(CampaignRequestDTO dto);
List<ApParamDTO> getConnectStatus(Long companySiteId); List<ApParamDTO> getConnectStatus(Long companySiteId);
//</editor-fold> //</editor-fold>
} }
...@@ -655,7 +655,8 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom { ...@@ -655,7 +655,8 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
"select count(*) totalRow from data\n" + "select count(*) totalRow from data\n" +
")\n" + ")\n" +
"select a.customerListId, a.customerListCode, a.customerListName, a.totalCusList, a.totalCusCampaign, a.totalCusCalled, a.totalCusNotInteract, totalRow from data a, count_data\n" + "select a.customerListId, a.customerListCode, a.customerListName, a.totalCusList, a.totalCusCampaign, a.totalCusCalled, a.totalCusNotInteract, totalRow from data a, count_data\n" +
"where row_ >= ((:p_page_number - 1) * :p_page_size + 1) and row_ < (:p_page_number * :p_page_size + 1)\n"; "where row_ >= ((:p_page_number - 1) * :p_page_size + 1) and row_ < (:p_page_number * :p_page_size + 1)\n" +
"order by a.customerListName";
params.put("p_campaign_id", dto.getCampaignId()); params.put("p_campaign_id", dto.getCampaignId());
params.put("p_company_site_id", dto.getCompanySiteId()); params.put("p_company_site_id", dto.getCompanySiteId());
params.put("p_page_number", dto.getPage().toString()); params.put("p_page_number", dto.getPage().toString());
...@@ -860,7 +861,8 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom { ...@@ -860,7 +861,8 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
"select count(*) totalRow from data_temp\n" + "select count(*) totalRow from data_temp\n" +
")\n" + ")\n" +
"select a.customerListId, a.customerListCode, a.customerListName, a.totalCusList, a.totalCusActive, a.totalCusLock, a.totalCusDnc, a.totalCusAddRemove, a.totalCusFilter, totalRow from data a, count_data\n" + "select a.customerListId, a.customerListCode, a.customerListName, a.totalCusList, a.totalCusActive, a.totalCusLock, a.totalCusDnc, a.totalCusAddRemove, a.totalCusFilter, totalRow from data a, count_data\n" +
"where row_ >= ((:p_page_number - 1) * :p_page_size + 1) and row_ < (:p_page_number * :p_page_size + 1)\n"; "where row_ >= ((:p_page_number - 1) * :p_page_size + 1) and row_ < (:p_page_number * :p_page_size + 1)\n" +
"order by a.customerListName";
params.put("p_campaign_id", dto.getCampaignId()); params.put("p_campaign_id", dto.getCampaignId());
params.put("p_company_site_id", dto.getCompanySiteId()); params.put("p_company_site_id", dto.getCompanySiteId());
params.put("p_page_number", dto.getPage().toString()); params.put("p_page_number", dto.getPage().toString());
...@@ -995,6 +997,42 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom { ...@@ -995,6 +997,42 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
return resultDTO; return resultDTO;
} }
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getCountIndividualOnList(CampaignRequestDTO dto) {
List<CampaignInformationDTO> list = new ArrayList();
ResultDTO resultDTO = new ResultDTO();
Map<String, String> params = new HashMap<>();
StringBuilder sb = new StringBuilder();
try {
sb.append(" with customer_temp as (");
sb.append(" select c.customer_id, clm.customer_list_id");
sb.append(" from customer c");
sb.append(" inner join customer_list_mapping clm on c.customer_id = clm.customer_id");
sb.append(" where clm.customer_list_id in (select distinct cc.customer_list_id from campaign_customerlist cc where cc.campaign_id = :p_campaign_id and cc.company_site_id = :p_company_site_id)");
sb.append(" )");
sb.append(" select count(cc.customer_id) totalIndividual, c.customer_list_id customerListId");
sb.append(" from campaign_customer cc");
sb.append(" inner join customer_temp c on c.customer_id = cc.customer_id");
sb.append(" where campaign_id = :p_campaign_id");
sb.append(" and cc.customer_list_id is null");
sb.append(" and cc.in_campaign_status = 1");
sb.append(" and cc.customer_id in (select customer_id from customer_temp)");
sb.append(" group by c.customer_list_id");
params.put("p_campaign_id", dto.getCampaignId());
params.put("p_company_site_id", dto.getCompanySiteId());
list = namedParameterJdbcTemplate.query(sb.toString(), params, BeanPropertyRowMapper.newInstance(CampaignInformationDTO.class));
resultDTO.setListData(list);
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<ApParamDTO> getConnectStatus(Long companySiteId) { public List<ApParamDTO> getConnectStatus(Long companySiteId) {
......
...@@ -70,6 +70,8 @@ public interface CampaignService { ...@@ -70,6 +70,8 @@ public interface CampaignService {
ResultDTO getCustomerListInformation(CampaignRequestDTO dto); ResultDTO getCustomerListInformation(CampaignRequestDTO dto);
ResultDTO getCountIndividualOnList(CampaignRequestDTO dto);
ResultDTO saveCustomerCampaign(CampaignRequestDTO dto); ResultDTO saveCustomerCampaign(CampaignRequestDTO dto);
ResultDTO getConnectStatus(Long companySiteId); ResultDTO getConnectStatus(Long companySiteId);
......
...@@ -627,6 +627,12 @@ public class CampaignServiceImpl implements CampaignService { ...@@ -627,6 +627,12 @@ public class CampaignServiceImpl implements CampaignService {
return campaignRepositoryCustom.getCustomerListInformation(dto); return campaignRepositoryCustom.getCustomerListInformation(dto);
} }
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getCountIndividualOnList(CampaignRequestDTO dto) {
return campaignRepositoryCustom.getCountIndividualOnList(dto);
}
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL) @Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO saveCustomerCampaign(CampaignRequestDTO dto) { public ResultDTO saveCustomerCampaign(CampaignRequestDTO dto) {
......
...@@ -51,11 +51,14 @@ import java.nio.file.Files; ...@@ -51,11 +51,14 @@ import java.nio.file.Files;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Service @Service
public class CustomerServiceImpl implements CustomerService { public class CustomerServiceImpl implements CustomerService {
private static final Logger LOGGER = LoggerFactory.getLogger(CustomerServiceImpl.class); private static final Logger LOGGER = LoggerFactory.getLogger(CustomerServiceImpl.class);
private static final Pattern EMAIL_REGEXP = Pattern.compile("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\\\.[A-Z]{2,6}$", Pattern.CASE_INSENSITIVE);
@Autowired @Autowired
@PersistenceContext(unitName = DataSourceQualify.JPA_UNIT_NAME_CCMS_FULL) @PersistenceContext(unitName = DataSourceQualify.JPA_UNIT_NAME_CCMS_FULL)
...@@ -1016,7 +1019,7 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -1016,7 +1019,7 @@ public class CustomerServiceImpl implements CustomerService {
//</editor-fold> //</editor-fold>
//<editor-fold desc="Đọc dữ liệu từng dòng 1" defaultstate="collapsed"> //<editor-fold desc="Đọc dữ liệu từng dòng 1" defaultstate="collapsed">
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() - 1]; Object[] obj = new Object[row.getPhysicalNumberOfCells() - 1];
...@@ -1057,23 +1060,28 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -1057,23 +1060,28 @@ public class CustomerServiceImpl implements CustomerService {
&& !rawDataList.get(i)[3].toString().trim().equals("") && !rawDataList.get(i)[3].toString().trim().equals("")
&& rawDataList.get(i)[4] != null && rawDataList.get(i)[4] != null
&& !rawDataList.get(i)[4].toString().trim().equals("")) { && !rawDataList.get(i)[4].toString().trim().equals("")) {
String str = validatePhone(rawDataList.get(i)[2].toString().trim(), locale); String str = "";
str += (validateLength(BundleUtils.getLangString("customer.secondPhone", locale).split("#")[0], rawDataList.get(i)[3].toString(), 50, locale)); if (validateNumberOnly(rawDataList.get(i)[2].toString().trim())) {
str = validateExistPhone(rawDataList.get(i)[2].toString().trim(), locale);
} else {
str += BundleUtils.getLangString("customer.onlyNumber", locale);
}
if (validateNumberOnly(rawDataList.get(i)[3].toString().trim())) {
str += (validateLength(BundleUtils.getLangString("customer.secondPhone", locale).split("#")[0], rawDataList.get(i)[3].toString(), 50, locale));
} else {
str += BundleUtils.getLangString("customer.onlyNumber", locale);
}
if (!validateEmail(rawDataList.get(i)[4].toString().trim())) { if (!validateEmail(rawDataList.get(i)[4].toString().trim())) {
str += (BundleUtils.getLangString("customer.emailInvalid", locale)); str += (BundleUtils.getLangString("customer.emailInvalid", locale));
} else { } else {
str += (validateDuplicateEmail(rawDataList.get(i)[4].toString().trim(), locale)); if (validateLength(BundleUtils.getLangString("customer.email", locale).split("#")[0], rawDataList.get(i)[4].toString(), 100, locale).equals("")) {
str += (validateDuplicateEmail(rawDataList.get(i)[4].toString().trim(), locale));
} else
str += validateLength(BundleUtils.getLangString("customer.email", locale).split("#")[0], rawDataList.get(i)[4].toString(), 50, locale);
} }
sb.append(validateLength(BundleUtils.getLangString("customer.email", locale).split("#")[0], rawDataList.get(i)[4].toString(), 50, locale));
sb.append(str); sb.append(str);
} else { } else {
if (rawDataList.get(i).length > 2 && rawDataList.get(i)[2] == null) { sb.append(BundleUtils.getLangString("customer.invalidRecord", locale));
sb.append(BundleUtils.getLangString("customer.mainPhoneRequired", locale));
} else if (rawDataList.get(i).length > 3 && rawDataList.get(i)[3] == null) {
sb.append(BundleUtils.getLangString("customer.secondPhoneRequired", locale));
} else if (rawDataList.get(i).length > 4 && rawDataList.get(i)[4] == null) {
sb.append(BundleUtils.getLangString("customer.emailRequired", locale));
}
} }
if (rawDataList.get(i).length > 5 && rawDataList.get(i)[5] != null) { if (rawDataList.get(i).length > 5 && rawDataList.get(i)[5] != null) {
sb.append(validateLength(BundleUtils.getLangString("customer.address", locale).split("#")[0], rawDataList.get(i)[5].toString(), 500, locale)); sb.append(validateLength(BundleUtils.getLangString("customer.address", locale).split("#")[0], rawDataList.get(i)[5].toString(), 500, locale));
...@@ -1279,14 +1287,15 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -1279,14 +1287,15 @@ public class CustomerServiceImpl implements CustomerService {
} }
//<editor-fold desc="Validate Methods" defaultstate="collapsed"> //<editor-fold desc="Validate Methods" defaultstate="collapsed">
private String validatePhone(String str, Locale locale) { private String validateExistPhone(String str, Locale locale) {
String result = ""; String result = "";
String[] arr = str.split(";"); String[] arr = str.split(";");
List<CustomerContact> contactList;
if (str.length() > 50) { if (str.length() > 50) {
result = BundleUtils.getLangString("customer.phoneMax50", locale); result = BundleUtils.getLangString("customer.phoneMax50", locale);
} }
for (int i = 0; i < arr.length; i++) { for (int i = 0; i < arr.length; i++) {
List<CustomerContact> contactList = customerContactRepository.findCustomerContactsByContactEquals(arr[i]); contactList = customerContactRepository.findCustomerContactsByContactEquals(arr[i]);
if (contactList.size() != 0) { if (contactList.size() != 0) {
return result.concat(BundleUtils.getLangString("customer.phoneExists", locale)); return result.concat(BundleUtils.getLangString("customer.phoneExists", locale));
} }
...@@ -1294,11 +1303,24 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -1294,11 +1303,24 @@ public class CustomerServiceImpl implements CustomerService {
return result; return result;
} }
private boolean validateNumberOnly(String str) {
String regexp = "\\b\\d+\\b";
String[] arr = str.split(";");
int count = 0;
for (int i = 0; i < arr.length; i++) {
if (!arr[i].matches(regexp)) {
count++;
}
}
return count == 0;
}
private String validateDuplicateEmail(String str, Locale locale) { private String validateDuplicateEmail(String str, Locale locale) {
String result = ""; String result = "";
String[] arr = str.split(";"); String[] arr = str.split(";");
List<CustomerContact> contactList;
for (int i = 0; i < arr.length; i++) { for (int i = 0; i < arr.length; i++) {
List<CustomerContact> contactList = customerContactRepository.findCustomerContactsByContactEquals(arr[i]); contactList = customerContactRepository.findCustomerContactsByContactEquals(arr[i]);
if (contactList.size() != 0) { if (contactList.size() != 0) {
return result.concat(BundleUtils.getLangString("customer.emailExists", locale)); return result.concat(BundleUtils.getLangString("customer.emailExists", locale));
} }
...@@ -1328,9 +1350,9 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -1328,9 +1350,9 @@ public class CustomerServiceImpl implements CustomerService {
private boolean validateEmail(String str) { private boolean validateEmail(String str) {
String[] arr = str.split(";"); String[] arr = str.split(";");
String regexp = "^[\\w-_\\.+]*[\\w-_\\.]\\@([\\w]+\\.)+[\\w]+[\\w]$";
for (int i = 0; i < arr.length; i++) { for (int i = 0; i < arr.length; i++) {
if (!arr[i].matches(regexp)) { Matcher matcher = EMAIL_REGEXP.matcher(arr[i]);
if (!matcher.find()) {
return false; return false;
} }
} }
...@@ -2045,7 +2067,7 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -2045,7 +2067,7 @@ public class CustomerServiceImpl implements CustomerService {
query.setMaxResults(pageable.getPageSize()); query.setMaxResults(pageable.getPageSize());
} }
List<CustomerDTO>data = query.list(); List<CustomerDTO> data = query.list();
Page<CustomerDTO> dataPage = new PageImpl<>(data, pageable, count); Page<CustomerDTO> dataPage = new PageImpl<>(data, pageable, count);
resultDTO.setData(dataPage); resultDTO.setData(dataPage);
resultDTO.setTotalRow(count); resultDTO.setTotalRow(count);
......
...@@ -15,6 +15,7 @@ import org.springframework.http.HttpStatus; ...@@ -15,6 +15,7 @@ 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;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
...@@ -205,6 +206,13 @@ public class CampaignController { ...@@ -205,6 +206,13 @@ public class CampaignController {
return new ResponseEntity<>(resultDTO, HttpStatus.OK); return new ResponseEntity<>(resultDTO, HttpStatus.OK);
} }
@PostMapping("/getCountIndividualOnList")
@ResponseBody
public ResponseEntity getCountIndividualOnList(@RequestBody CampaignRequestDTO campaignRequestDTO) {
ResultDTO resultDTO = campaignService.getCountIndividualOnList(campaignRequestDTO);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
@PostMapping("/saveCustomerCampaign") @PostMapping("/saveCustomerCampaign")
@ResponseBody @ResponseBody
public ResponseEntity saveCustomerCampaign(@RequestBody CampaignRequestDTO campaignRequestDTO) { public ResponseEntity saveCustomerCampaign(@RequestBody CampaignRequestDTO campaignRequestDTO) {
......
...@@ -89,7 +89,9 @@ customer.yes = Yes ...@@ -89,7 +89,9 @@ customer.yes = Yes
customer.not = No customer.not = No
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.emailMax100=Email must less than 100 character;
customer.invalidRecord=Invalid Record, required one more contact information;
customer.onlyNumber=Phone contain number only;
customer.importSuccess = Import Successful customer.importSuccess = Import Successful
customer.importFailed = Import Failed customer.importFailed = Import Failed
customer.errorValidate = Error while validating customer.errorValidate = Error while validating
......
...@@ -91,10 +91,9 @@ customer.yes = Có ...@@ -91,10 +91,9 @@ customer.yes = Có
customer.not = Không customer.not = Khô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.emailMax100=Email không được quá 100 kí tự;
customer.mainPhoneRequired=Số điện thoại chính không được để trống customer.invalidRecord=Bắt buộc nhập 1 trong 3 thông tin liên lạc(Số điện thoại chính, Số điện thoại phụ, Email);
customer.secondPhoneRequired=Số điện thoại phụ không được để trống customer.onlyNumber=Số điện thoại chỉ được nhập số;
customer.emailRequired=Số điện thoại email không được để trống
customer.importSuccess = Import dữ liệu thành công customer.importSuccess = Import dữ liệu thành công
customer.importFailed = Import dữ liệu thất bại customer.importFailed = Import dữ liệu thất bại
customer.errorValidate = Validate dữ liệu lỗi customer.errorValidate = Validate dữ liệu lỗ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