Commit 34f4766e authored by Vu Duy Anh's avatar Vu Duy Anh

anhvd commit

parent d4565414
This diff is collapsed.
package com.viettel.campaign.filter;
import com.viettel.campaign.utils.RedisUtil;
import com.viettel.econtact.filter.UserSession;
import org.springframework.stereotype.Component;
import javax.servlet.*;
......@@ -28,27 +30,27 @@ public class CorsFilter implements Filter {
HttpServletRequest request = (HttpServletRequest) req;
chain.doFilter(req, response);
// if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
// chain.doFilter(req, resp);
// return;
// }
// if ("/".equals(request.getRequestURI())) {
// chain.doFilter(req, resp);
// return;
// }
// String xAuthToken = request.getHeader("X-Auth-Token");
// if (xAuthToken == null || "".equals(xAuthToken)) {
// response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "The token is null.");
// return;
// }
// Object obj = RedisUtil.getInstance().get(xAuthToken);
// if (obj instanceof UserSession) {
// chain.doFilter(req, resp);
// } else {
// response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "The token is invalid.");
// }
// chain.doFilter(req, response);
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
chain.doFilter(req, resp);
return;
}
if ("/".equals(request.getRequestURI())) {
chain.doFilter(req, resp);
return;
}
String xAuthToken = request.getHeader("X-Auth-Token");
if (xAuthToken == null || "".equals(xAuthToken)) {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "The token is null.");
return;
}
Object obj = RedisUtil.getInstance().get(xAuthToken);
if (obj instanceof UserSession) {
chain.doFilter(req, resp);
} else {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "The token is invalid.");
}
}
@Override
......
......@@ -4,6 +4,7 @@ import com.viettel.campaign.model.ccms_full.Scenario;
import com.viettel.campaign.web.dto.*;
import com.viettel.econtact.filter.UserSession;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
import java.util.Map;
......@@ -25,5 +26,5 @@ public interface ScenarioService {
XSSFWorkbook buildTemplate();
Map<String, Object> readAndValidateCustomer(String path, UserSession userSession);
Map<String, Object> readAndValidateCustomer(String path, Long scenarioId, Long campaignId, Long companySiteId);
}
......@@ -3,6 +3,7 @@ package com.viettel.campaign.service.impl;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.*;
import com.viettel.campaign.repository.ccms_full.*;
import com.viettel.campaign.service.ScenarioQuestionService;
import com.viettel.campaign.service.ScenarioService;
import com.viettel.campaign.utils.BundleUtils;
import com.viettel.campaign.utils.Constants;
......@@ -52,6 +53,9 @@ public class ScenarioServiceImpl implements ScenarioService {
@Autowired
ContactQuestResultRepository questResultRepository;
@Autowired
ScenarioQuestionService questionService;
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public Scenario findScenarioByCampaignIdAndCompanySiteId(Long campaignId, Long companySiteId) {
......@@ -234,7 +238,7 @@ public class ScenarioServiceImpl implements ScenarioService {
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public Map<String, Object> readAndValidateCustomer(String path, UserSession userSession) {
public Map<String, Object> readAndValidateCustomer(String path, Long scenarioId, Long campaignId, Long companySiteId) {
Locale locale = new Locale("vi", "VN");
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Map<String, Object> result = new HashMap<>();
......@@ -294,7 +298,7 @@ public class ScenarioServiceImpl implements ScenarioService {
List<Object[]> rawDataList = new ArrayList<>();
//validate row
for (int i = 3; i < sheet.getPhysicalNumberOfRows(); i++) {
for (int i = 3; i <= sheet.getPhysicalNumberOfRows(); i++) {
Row dataRow = sheet.getRow(i);
if (dataRow != null) {
Object[] obj = new Object[row.getPhysicalNumberOfCells()];
......@@ -311,6 +315,7 @@ public class ScenarioServiceImpl implements ScenarioService {
}
}
}
rawDataList.add(obj);
}
}
......@@ -350,7 +355,7 @@ 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")))) {
sb.append(BundleUtils.getLangString("scenario.answer.required"));
}
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"));
}
}
......@@ -371,10 +376,15 @@ public class ScenarioServiceImpl implements ScenarioService {
//insert data
if (isValid) {
logger.info("----- Data valid, start import scenario question -----");
for (int i = 0; i < rawDataList.size(); i++) {
buildQuestionsLst(rawDataList);
}
}else {
List<ScenarioQuestionDTO> lstQuestion = buildQuestionsLst(rawDataList, scenarioId, campaignId, companySiteId);
lstQuestion.forEach(question -> {
questionService.add(question);
});
FileOutputStream fos = new FileOutputStream(file);
workbook.write(fos);
result.put("file", file);
result.put("message", BundleUtils.getLangString("customer.importSuccess", locale));
} else {
FileOutputStream fos = new FileOutputStream(file);
workbook.write(fos);
result.put("file", file);
......@@ -384,7 +394,7 @@ public class ScenarioServiceImpl implements ScenarioService {
logger.info(ex.getMessage(), ex);
result.put("message", BundleUtils.getLangString("customer.errorValidate", locale));
}
logger.info("Import Questions result:" , result);
logger.info("Import Questions result:", result);
return result;
}
......@@ -393,15 +403,75 @@ public class ScenarioServiceImpl implements ScenarioService {
return false;
}
private List<ScenarioQuestionDTO> buildQuestionsLst(List<Object[]> rawDatas) {
private Long questionOrderIndex = null;
private Integer answerIndex = null;
private List<ScenarioQuestionDTO> buildQuestionsLst(List<Object[]> rawDatas, Long scenarioId, Long campaignId, Long companySiteId) {
List<ScenarioQuestionDTO> lstQuestions = new ArrayList<>();
List<ScenarioAnswerDTO> lstAnswerOfQuestion = new ArrayList<>();
ScenarioQuestionDTO questionDTO = null;
for(int i = 0; i < rawDatas.size(); i++) {
if(rawDatas.get(i)[0] != null && !rawDatas.get(i)[0].toString().trim().equals("")) {
Integer questionIndex = null;
for (int i = 0; i < rawDatas.size(); i++) {
if (rawDatas.get(i)[0] != null && !rawDatas.get(i)[0].toString().trim().equals("")) {
questionIndex = Double.valueOf(rawDatas.get(i)[0].toString().trim()).intValue();
questionDTO = new ScenarioQuestionDTO();
// questionDTO.setCampaignId();
questionDTO.setScenarioId(scenarioId);
questionDTO.setCampaignId(campaignId);
questionDTO.setCompanySiteId(companySiteId);
questionDTO.setImportIndex(questionIndex);
if (rawDatas.get(i)[1].toString().trim().equals(BundleUtils.getLangString("scenario.template.text")))
questionDTO.setType((short) 0);
else if (rawDatas.get(i)[1].toString().trim().equals(BundleUtils.getLangString("scenario.template.singleChoice")))
questionDTO.setType((short) 1);
else questionDTO.setType((short) 2);
questionDTO.setQuestion(rawDatas.get(i)[2].toString().trim());
if (rawDatas.get(i)[5].toString().trim().equals(BundleUtils.getLangString("scenario.template.yes")))
questionDTO.setIsRequire((short) 1);
else questionDTO.setIsRequire((short) 0);
if (rawDatas.get(i)[6].toString().trim().equals(BundleUtils.getLangString("scenario.template.yes")))
questionDTO.setIsDefault((short) 1);
else questionDTO.setIsDefault((short) 0);
lstQuestions.add(questionDTO);
} else {
ScenarioAnswerDTO answerDto = new ScenarioAnswerDTO();
answerDto.setAnswer(rawDatas.get(i)[3].toString().trim());
if (rawDatas.get(i)[4].toString().trim().equals(BundleUtils.getLangString("scenario.template.yes")))
answerDto.setHasInput((short) 1);
else answerDto.setHasInput((short) 0);
if (rawDatas.get(i)[7] != null && !rawDatas.get(i)[7].toString().trim().equals("")) {
answerDto.setMappingQuestionId(Double.valueOf(rawDatas.get(i)[7].toString().trim()).longValue());
}
answerDto.setImportQuestionIndex(questionIndex);
answerDto.setCompanySiteId(companySiteId);
lstAnswerOfQuestion.add(answerDto);
}
}
questionOrderIndex = questionRepository.getMaxOrderId(scenarioId, campaignId, companySiteId);
if(questionOrderIndex == null) questionOrderIndex = 0L;
lstQuestions.forEach(q -> {
questionOrderIndex += 1;
q.setOrderIndex(questionOrderIndex);
q.setCode(campaignId + "_" + questionOrderIndex);
answerIndex = 0;
List<ScenarioAnswerDTO> answers = new ArrayList<>();
lstAnswerOfQuestion.forEach(a -> {
answerIndex += 1;
a.setOrderIndex(answerIndex);
if(a.getImportQuestionIndex() == q.getImportIndex()) answers.add(a);
});
q.setLstAnswers(answers);
});
questionOrderIndex = null;
return lstQuestions;
}
}
......@@ -25,4 +25,5 @@ public class ScenarioAnswerDTO implements Serializable {
public Date deleteTime;
public Long mappingQuestionId;
public Long campaignId;
public Integer importQuestionIndex;
}
......@@ -29,4 +29,5 @@ public class ScenarioQuestionDTO implements Serializable {
private Short isDefault;
private Short answerIndex;
private List<ScenarioAnswerDTO> lstAnswers;
private Integer importIndex;
}
package com.viettel.campaign.web.dto.request_dto;
import lombok.Getter;
import lombok.Setter;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
/**
* @author anhvd_itsol
*/
@Getter
@Setter
public class RequestImportDTO {
CommonsMultipartFile file;
}
......@@ -8,6 +8,7 @@ import com.viettel.campaign.utils.RedisUtil;
import com.viettel.campaign.web.dto.ContactQuestResultDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.ScenarioDTO;
import com.viettel.campaign.web.dto.request_dto.RequestImportDTO;
import com.viettel.econtact.filter.UserSession;
import org.apache.commons.io.FilenameUtils;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
......@@ -21,6 +22,7 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.nio.file.Files;
......@@ -104,12 +106,11 @@ public class ScenarioController {
}
@RequestMapping(value = "/import-file", method = RequestMethod.POST)
public ResponseEntity<?> importFile(@RequestParam MultipartFile file) {
public ResponseEntity<?> importFile(@RequestParam MultipartFile file, @RequestParam Long scenarioId, @RequestParam Long campaignId, HttpServletRequest request) {
logger.info("------------IMPORT FILE TEMPLATE--------------");
Locale locale = new Locale("vi", "VN");
try {
UserSession userSession = new UserSession();
// UserSession userSession = (UserSession) RedisUtil.getInstance().get(authToken);
UserSession userSession = (UserSession) RedisUtil.getInstance().get(request.getHeader("X-Auth-Token"));
if (file.isEmpty()) {
return new ResponseEntity<>(BundleUtils.getLangString("common.fileNotSelected"), HttpStatus.OK);
}
......@@ -117,14 +118,18 @@ public class ScenarioController {
return new ResponseEntity<>(BundleUtils.getLangString("common.fileInvalidFormat", locale), HttpStatus.OK);
}
String path = saveUploadFile(file);
Map<String, Object> map = scenarioService.readAndValidateCustomer(path, userSession);
Map<String, Object> map = scenarioService.readAndValidateCustomer(path, scenarioId, campaignId, userSession.getCompanySiteId());
File fileExport = (File) map.get("file");
String message = (String) map.get("message");
return ResponseEntity.ok()
.header("Content-Type", Constants.MIME_TYPE.EXCEL_XLSX)
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=import_scenario_result.xlsx")
.header("Message", message)
.body(Files.readAllBytes(fileExport.toPath()));
ResultDTO resultDTO = new ResultDTO();
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(message);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
// return ResponseEntity.ok()
// .header("Content-Type", Constants.MIME_TYPE.EXCEL_XLSX)
// .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=import_scenario_result.xlsx")
// .header("Message", message)
// .body(Files.readAllBytes(fileExport.toPath()));
} catch (Exception e) {
logger.error(e.getMessage());
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
......
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