Commit 74441932 authored by Tu Bach's avatar Tu Bach

Merge branch 'master' into tubn

parents 5c592e18 c14699bb
...@@ -119,7 +119,7 @@ ...@@ -119,7 +119,7 @@
<dependency> <dependency>
<groupId>org.apache.poi</groupId> <groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId> <artifactId>poi</artifactId>
<version>3.17</version> <version>4.0.1</version>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency> <dependency>
...@@ -131,7 +131,7 @@ ...@@ -131,7 +131,7 @@
<dependency> <dependency>
<groupId>org.apache.poi</groupId> <groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId> <artifactId>poi-ooxml</artifactId>
<version>3.17</version> <version>4.0.1</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.quartz-scheduler</groupId> <groupId>org.quartz-scheduler</groupId>
......
...@@ -122,7 +122,11 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom { ...@@ -122,7 +122,11 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
if (!DataUtil.isNullOrEmpty(requestDto.getCampaignCode()) && !DataUtil.isNullOrEmpty(requestDto.getCampaignCode().trim())) { if (!DataUtil.isNullOrEmpty(requestDto.getCampaignCode()) && !DataUtil.isNullOrEmpty(requestDto.getCampaignCode().trim())) {
if(requestDto.getCampaignCode().split(",").length > 1) {
sb.append(" AND a.CAMPAIGN_CODE IN (:p_code) "); sb.append(" AND a.CAMPAIGN_CODE IN (:p_code) ");
}else {
sb.append(" AND a.CAMPAIGN_CODE LIKE :p_code ");
}
} }
if (!DataUtil.isNullOrEmpty(requestDto.getCampaignName())) { if (!DataUtil.isNullOrEmpty(requestDto.getCampaignName())) {
sb.append(" AND UPPER(a.CAMPAIGN_NAME) LIKE :p_name"); sb.append(" AND UPPER(a.CAMPAIGN_NAME) LIKE :p_name");
...@@ -165,8 +169,17 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom { ...@@ -165,8 +169,17 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
SQLQuery query = session.createSQLQuery(sb.toString()); SQLQuery query = session.createSQLQuery(sb.toString());
if (!DataUtil.isNullOrEmpty(requestDto.getCampaignCode()) && !DataUtil.isNullOrEmpty(requestDto.getCampaignCode().trim())) { if (!DataUtil.isNullOrEmpty(requestDto.getCampaignCode()) && !DataUtil.isNullOrEmpty(requestDto.getCampaignCode().trim())) {
if(requestDto.getCampaignCode().split(",").length > 1) {
String[] lstCode = requestDto.getCampaignCode().trim().split(","); String[] lstCode = requestDto.getCampaignCode().trim().split(",");
query.setParameterList("p_code", lstCode); query.setParameterList("p_code", lstCode);
}else {
query.setParameter("p_code", "%" +
requestDto.getCampaignCode().trim().toUpperCase()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
}
} }
if (!DataUtil.isNullOrEmpty(requestDto.getCampaignName())) { if (!DataUtil.isNullOrEmpty(requestDto.getCampaignName())) {
......
...@@ -220,16 +220,18 @@ public class CampaignCfgServiceImpl implements CampaignCfgService { ...@@ -220,16 +220,18 @@ public class CampaignCfgServiceImpl implements CampaignCfgService {
if (completeCodeDTO != null) { if (completeCodeDTO != null) {
// update // update
compCode = compCodeMapper.toPersistenceBean(completeCodeDTO); compCode = compCodeMapper.toPersistenceBean(completeCodeDTO);
compCode = completeCodeRepository.save(compCode); completeCodeRepository.save(compCode);
resultDTO.setErrorCode("0"); resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription("Complete Code: " + compCode.getCampaignCompleteCodeId() + " updated!"); resultDTO.setDescription("Complete Code: " + compCode.getCampaignCompleteCodeId() + " updated!");
} else { } else {
resultDTO.setErrorCode("-2"); resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription("CompleteCodeDTO null"); resultDTO.setDescription("CompleteCodeDTO null");
} }
} catch (Exception e) { } catch (Exception e) {
// e.printStackTrace(); logger.error(e.getMessage(), e);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
} }
return resultDTO; return resultDTO;
......
...@@ -20,6 +20,7 @@ import cz.jirutka.rsql.parser.ast.RSQLVisitor; ...@@ -20,6 +20,7 @@ import cz.jirutka.rsql.parser.ast.RSQLVisitor;
import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.CellRangeAddressList; import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.hibernate.SQLQuery; import org.hibernate.SQLQuery;
import org.hibernate.Session; import org.hibernate.Session;
...@@ -980,7 +981,7 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -980,7 +981,7 @@ public class CustomerServiceImpl implements CustomerService {
FileInputStream fis = new FileInputStream(file); FileInputStream fis = new FileInputStream(file);
workbook = new XSSFWorkbook(fis); workbook = new XSSFWorkbook(fis);
ByteArrayOutputStream os = new ByteArrayOutputStream(); ByteArrayOutputStream os = new ByteArrayOutputStream();
Sheet sheet = workbook.getSheetAt(0); XSSFSheet sheet = workbook.getSheetAt(0);
Row row = sheet.getRow(3); Row row = sheet.getRow(3);
//<editor-fold desc="Tạo style cho cột kết quả" defaultstate="collapsed"> //<editor-fold desc="Tạo style cho cột kết quả" defaultstate="collapsed">
...@@ -993,10 +994,31 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -993,10 +994,31 @@ public class CustomerServiceImpl implements CustomerService {
resultStyle.setBorderRight(BorderStyle.THIN); resultStyle.setBorderRight(BorderStyle.THIN);
resultStyle.setBorderBottom(BorderStyle.THIN); resultStyle.setBorderBottom(BorderStyle.THIN);
resultStyle.setBorderTop(BorderStyle.THIN); resultStyle.setBorderTop(BorderStyle.THIN);
resultStyle.setAlignment(HorizontalAlignment.CENTER);
resultStyle.setVerticalAlignment(VerticalAlignment.CENTER);
//</editor-fold> //</editor-fold>
//<editor-fold desc="Kiểm tra header của template" defaultstate="collapsed"> //<editor-fold desc="Kiểm tra header của template" defaultstate="collapsed">
if (row.getPhysicalNumberOfCells() != header.size()) { if (row.getPhysicalNumberOfCells() > header.size()) {
for (int i = 0; i < row.getPhysicalNumberOfCells(); i++) {
if (sheet.isColumnHidden(i)) {
sheet.setColumnHidden(i, false);
}
if (isColumnNullOrBlank(sheet, i)) {
sheet.shiftColumns(i + 1, i + 1, -1);
sheet.removeMergedRegion(0);
sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 13));
}
}
for (int i = 0; i < header.size(); i++) {
Cell cell = row.getCell(i);
if (!cell.getStringCellValue().equals(header.get(i).getTitle().split("#")[0])) {
result.put("content", Files.readAllBytes(file.toPath()));
result.put("message", "template-invalid");
return result;
}
}
} else if (row.getPhysicalNumberOfCells() < header.size()) {
result.put("content", Files.readAllBytes(file.toPath())); result.put("content", Files.readAllBytes(file.toPath()));
result.put("message", "template-invalid"); result.put("message", "template-invalid");
return result; return result;
...@@ -1020,7 +1042,10 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -1020,7 +1042,10 @@ public class CustomerServiceImpl implements CustomerService {
result.put("content", Files.readAllBytes(file.toPath())); 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).getCell(header.size());
if (resultCell == null) {
resultCell = sheet.getRow(3).createCell(header.size());
}
resultCell.setCellValue(BundleUtils.getLangString("customer.result", locale)); resultCell.setCellValue(BundleUtils.getLangString("customer.result", locale));
resultCell.setCellStyle(resultStyle); resultCell.setCellStyle(resultStyle);
} }
...@@ -1396,6 +1421,18 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -1396,6 +1421,18 @@ public class CustomerServiceImpl implements CustomerService {
String regexp = "@\"^\\p{L}+$\""; String regexp = "@\"^\\p{L}+$\"";
return str.matches(regexp); return str.matches(regexp);
} }
private boolean isColumnNullOrBlank(Sheet sheet, int columnIndex) {
for (Row row : sheet) {
if (row.getRowNum() < 3) continue;
Cell cell = row.getCell(columnIndex, Row.MissingCellPolicy.RETURN_BLANK_AS_NULL);
if (cell != null) {
return false;
}
}
return true;
}
//</editor-fold> //</editor-fold>
@Override @Override
...@@ -1436,10 +1473,14 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -1436,10 +1473,14 @@ public class CustomerServiceImpl implements CustomerService {
headerFont.setBold(true); headerFont.setBold(true);
CellStyle headerStyle = workbook.createCellStyle(); CellStyle headerStyle = workbook.createCellStyle();
CellStyle importantStyle = workbook.createCellStyle(); CellStyle importantStyle = workbook.createCellStyle();
CellStyle columnStyle = workbook.createCellStyle();
importantStyle.setFont(importantFont); importantStyle.setFont(importantFont);
headerStyle.setAlignment(HorizontalAlignment.CENTER); headerStyle.setAlignment(HorizontalAlignment.CENTER);
headerStyle.setVerticalAlignment(VerticalAlignment.CENTER); headerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
headerStyle.setFont(headerFont); headerStyle.setFont(headerFont);
columnStyle.setVerticalAlignment(VerticalAlignment.CENTER);
columnStyle.setAlignment(HorizontalAlignment.CENTER);
columnStyle.setWrapText(true);
//</editor-fold> //</editor-fold>
//<editor-fold desc="Thêm combobox" defaultstate="collapsed"> //<editor-fold desc="Thêm combobox" defaultstate="collapsed">
...@@ -1512,6 +1553,7 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -1512,6 +1553,7 @@ public class CustomerServiceImpl implements CustomerService {
cell2.setCellStyle(importantStyle); cell2.setCellStyle(importantStyle);
cell2.setCellValue(BundleUtils.getLangString("customer.notice", locale)); cell2.setCellValue(BundleUtils.getLangString("customer.notice", locale));
for (int i = 0; i < header.size(); i++) { for (int i = 0; i < header.size(); i++) {
sheet.setDefaultColumnStyle(i, columnStyle);
Cell headerCell = row3.createCell(i); Cell headerCell = row3.createCell(i);
headerCell.setCellValue(header.get(i).getTitle().split("#")[0]); headerCell.setCellValue(header.get(i).getTitle().split("#")[0]);
headerStyle.setBorderTop(BorderStyle.THIN); headerStyle.setBorderTop(BorderStyle.THIN);
......
...@@ -70,6 +70,8 @@ public class ScenarioQuestionServiceImpl implements ScenarioQuestionService { ...@@ -70,6 +70,8 @@ public class ScenarioQuestionServiceImpl implements ScenarioQuestionService {
List<ScenarioAnswerDTO> lstAnswers = new ArrayList<>(); List<ScenarioAnswerDTO> lstAnswers = new ArrayList<>();
List<ScenarioAnswer> lstAnswersToInsert = new ArrayList<>(); List<ScenarioAnswer> lstAnswersToInsert = new ArrayList<>();
try { try {
if(scenarioQuestionDTO.getQuestion() != null && scenarioQuestionDTO.getQuestion() != "")
scenarioQuestionDTO.setQuestion(scenarioQuestionDTO.getQuestion().trim());
ScenarioQuestion scenarioQuestion = modelMapper.map(scenarioQuestionDTO, ScenarioQuestion.class); ScenarioQuestion scenarioQuestion = modelMapper.map(scenarioQuestionDTO, ScenarioQuestion.class);
scenarioQuestion.setCreateTime(new Date()); scenarioQuestion.setCreateTime(new Date());
......
...@@ -247,14 +247,14 @@ public class ScenarioServiceImpl implements ScenarioService { ...@@ -247,14 +247,14 @@ public class ScenarioServiceImpl implements ScenarioService {
} catch (Exception e) { } catch (Exception e) {
logger.error(e.getMessage()); logger.error(e.getMessage());
return null; return null;
}finally { } finally {
//if (workbook != null) workbook.close(); //if (workbook != null) workbook.close();
} }
} }
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL) @Transactional(DataSourceQualify.CCMS_FULL)
public Map<String, Object> readAndValidateCustomer (String path, Long scenarioId, Long campaignId, Long companySiteId) throws IOException{ public Map<String, Object> readAndValidateCustomer(String path, Long scenarioId, Long campaignId, Long companySiteId) throws IOException {
Locale locale = new Locale("vi", "VN"); Locale locale = new Locale("vi", "VN");
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<>();
...@@ -371,18 +371,52 @@ public class ScenarioServiceImpl implements ScenarioService { ...@@ -371,18 +371,52 @@ public class ScenarioServiceImpl implements ScenarioService {
if (rawDataList.get(i)[0] == null || !DataUtil.isNumber(rawDataList.get(i)[0].toString())) { if (rawDataList.get(i)[0] == null || !DataUtil.isNumber(rawDataList.get(i)[0].toString())) {
sb.append(BundleUtils.getLangString("scenario.questionCode.required")); sb.append(BundleUtils.getLangString("scenario.questionCode.required"));
} }
//question type
if (rawDataList.get(i)[1] == null || rawDataList.get(i)[1].toString().trim().equals("")) { if (rawDataList.get(i)[1] == null || rawDataList.get(i)[1].toString().trim().equals("")) {
sb.append(BundleUtils.getLangString("scenario.questionType.required")); sb.append(BundleUtils.getLangString("scenario.questionType.required"));
} }
if (rawDataList.get(i)[1] != null && !rawDataList.get(i)[1].toString().trim().equals("")) {
if (rawDataList.get(i)[1].toString().trim().equals(BundleUtils.getLangString("scenario.template.singleChoice")) ||
rawDataList.get(i)[1].toString().trim().equals(BundleUtils.getLangString("scenario.template.multiChoice")) ||
rawDataList.get(i)[1].toString().trim().equals(BundleUtils.getLangString("scenario.template.text"))
) {
sb = sb;
} else {
sb.append(BundleUtils.getLangString("scenario.questionType.invalid"));
}
}
//
if (rawDataList.get(i)[2] == null || rawDataList.get(i)[2].toString().trim().equals("")) { if (rawDataList.get(i)[2] == null || rawDataList.get(i)[2].toString().trim().equals("")) {
sb.append(BundleUtils.getLangString("scenario.question.required")); sb.append(BundleUtils.getLangString("scenario.question.required"));
} }
//required
if (rawDataList.get(i)[5] == null || rawDataList.get(i)[5].toString().trim().equals("")) { if (rawDataList.get(i)[5] == null || rawDataList.get(i)[5].toString().trim().equals("")) {
sb.append(BundleUtils.getLangString("scenario.required.required")); sb.append(BundleUtils.getLangString("scenario.required.required"));
} }
if (rawDataList.get(i)[5] != null && !rawDataList.get(i)[5].toString().trim().equals("")) {
if (rawDataList.get(i)[5].toString().trim().equals(BundleUtils.getLangString("scenario.template.yes")) ||
rawDataList.get(i)[5].toString().trim().equals(BundleUtils.getLangString("scenario.template.no"))
) {
sb = sb;
} else {
sb.append(BundleUtils.getLangString("scenario.required.invalid"));
}
}
//
//default
if (rawDataList.get(i)[6] == null || rawDataList.get(i)[6].toString().trim().equals("")) { if (rawDataList.get(i)[6] == null || rawDataList.get(i)[6].toString().trim().equals("")) {
sb.append(BundleUtils.getLangString("scenario.default.required")); sb.append(BundleUtils.getLangString("scenario.default.required"));
} }
if (rawDataList.get(i)[6] != null && !rawDataList.get(i)[6].toString().trim().equals("")) {
if (rawDataList.get(i)[6].toString().trim().equals(BundleUtils.getLangString("scenario.template.yes")) ||
rawDataList.get(i)[6].toString().trim().equals(BundleUtils.getLangString("scenario.template.no"))
) {
sb = sb;
} else {
sb.append(BundleUtils.getLangString("scenario.default.invalid"));
}
}
//
} }
//validate answer //validate answer
...@@ -392,9 +426,20 @@ public class ScenarioServiceImpl implements ScenarioService { ...@@ -392,9 +426,20 @@ public class ScenarioServiceImpl implements ScenarioService {
if ((rawDataList.get(i)[3] == null || rawDataList.get(i)[3].toString().trim().equals("")) && (!selectedType.equals(BundleUtils.getLangString("scenario.template.text")))) { if ((rawDataList.get(i)[3] == null || rawDataList.get(i)[3].toString().trim().equals("")) && (!selectedType.equals(BundleUtils.getLangString("scenario.template.text")))) {
sb.append(BundleUtils.getLangString("scenario.answer.required")); sb.append(BundleUtils.getLangString("scenario.answer.required"));
} }
//hash input
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)[4] != null && !rawDataList.get(i)[4].toString().trim().equals("")) {
if (rawDataList.get(i)[4].toString().trim().equals(BundleUtils.getLangString("scenario.template.yes")) ||
rawDataList.get(i)[4].toString().trim().equals(BundleUtils.getLangString("scenario.template.no"))
) {
sb = sb;
} else {
sb.append(BundleUtils.getLangString("scenario.hashInput.invalid"));
}
}
//
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))
...@@ -429,7 +474,7 @@ public class ScenarioServiceImpl implements ScenarioService { ...@@ -429,7 +474,7 @@ public class ScenarioServiceImpl implements ScenarioService {
ScenarioQuestion question = questionRepository.findScenarioQuestionByCodeAndCompanySiteId(item.getMappingQuestionCode(), item.getCompanySiteId()); ScenarioQuestion question = questionRepository.findScenarioQuestionByCodeAndCompanySiteId(item.getMappingQuestionCode(), item.getCompanySiteId());
if (question != null) { if (question != null) {
ScenarioAnswer answerForUpdate = answerRepository.findScenarioAnswerByCode(item.getCode()); ScenarioAnswer answerForUpdate = answerRepository.findScenarioAnswerByCode(item.getCode());
if(answerForUpdate != null) { if (answerForUpdate != null) {
answerForUpdate.setMappingQuestionId(question.getScenarioQuestionId()); answerForUpdate.setMappingQuestionId(question.getScenarioQuestionId());
answerRepository.save(answerForUpdate); answerRepository.save(answerForUpdate);
} }
...@@ -454,9 +499,9 @@ public class ScenarioServiceImpl implements ScenarioService { ...@@ -454,9 +499,9 @@ public class ScenarioServiceImpl implements ScenarioService {
} catch (Exception ex) { } catch (Exception ex) {
logger.info(ex.getMessage(), ex); logger.info(ex.getMessage(), ex);
result.put("message", BundleUtils.getLangString("customer.errorValidate", locale)); result.put("message", BundleUtils.getLangString("customer.errorValidate", locale));
}finally { } finally {
if (workbook != null) workbook.close(); if (workbook != null) workbook.close();
if(fis != null) fis.close(); if (fis != null) fis.close();
} }
return result; return result;
} }
......
...@@ -138,3 +138,8 @@ scenario.mappingQuestion.invalid="Mapping question invalid" ...@@ -138,3 +138,8 @@ scenario.mappingQuestion.invalid="Mapping question invalid"
ok="Imported" ok="Imported"
error="Error" error="Error"
scenario.questionType.invalid="Question type invalid"
scenario.required.invalid="Required field invalid"
scenario.default.invalid="Default field invalid"
scenario.hashInput.invalid="Has input field invalid"
...@@ -141,6 +141,10 @@ scenario.mappingQuestion.invalid="Câu hỏi liên kết không hợp lệ" ...@@ -141,6 +141,10 @@ scenario.mappingQuestion.invalid="Câu hỏi liên kết không hợp lệ"
ok="Thành công" ok="Thành công"
error="Thất bại" error="Thất bại"
scenario.questionType.invalid="Loại câu hỏi không hợp lệ"
scenario.required.invalid="Giá trị rường bắt buộc không hợp lệ"
scenario.default.invalid="Giá trị trường mặc định không hợp lệ"
scenario.hashInput.invalid="Giá trị nhập text 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