package com.viettel.campaign.web.rest; import com.viettel.campaign.model.ccms_full.Scenario; import com.viettel.campaign.service.ScenarioService; import com.viettel.campaign.utils.BundleUtils; import com.viettel.campaign.utils.Constants; 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; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; 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; import java.nio.file.Path; import java.nio.file.Paths; import java.text.SimpleDateFormat; import java.util.*; /** * @author anhvd_itsol */ @RestController @RequestMapping("/ipcc/campaign/scenario") @CrossOrigin public class ScenarioController { private static final Logger logger = LoggerFactory.getLogger(ScenarioController.class); @Autowired ScenarioService scenarioService; @RequestMapping(value = "/findOneByCampaignIdAndCompanyId", method = RequestMethod.GET) Scenario findOneByCampaignIdAndCompanyId(@RequestParam Long campaignId, @RequestParam Long companySiteId) { return scenarioService.findScenarioByCampaignIdAndCompanySiteId(campaignId, companySiteId); } @RequestMapping(method = RequestMethod.PUT) ResponseEntity<ResultDTO> update(@RequestBody ScenarioDTO scenario) { ResultDTO resultDTO = scenarioService.update(scenario); return new ResponseEntity<>(resultDTO, HttpStatus.OK); } @RequestMapping(value = "/sort-question-answer", method = RequestMethod.POST) ResponseEntity<ResultDTO> sortQuestionAndAnswer(@RequestBody ScenarioDTO scenarioDTO) { ResultDTO resultDTO = scenarioService.sortQuestionAndAnswer(scenarioDTO); return new ResponseEntity<>(resultDTO, HttpStatus.OK); } @RequestMapping(value = "/count-duplicate-code", method = RequestMethod.GET) ResponseEntity<Integer> countDuplicateCode(@RequestParam String code, @RequestParam Long scenarioId, @RequestParam Long companySiteId) { Integer count = scenarioService.countDuplicateScenarioCode(companySiteId, code, scenarioId); return new ResponseEntity<>(count, HttpStatus.OK); } @RequestMapping(value = "/saveContactQuestResult", method = RequestMethod.POST) ResponseEntity<ResultDTO> saveContactQuestResult(@RequestBody ContactQuestResultDTO dto) { ResultDTO resultDTO = scenarioService.saveContacQuestResult(dto); return new ResponseEntity<>(resultDTO, HttpStatus.OK); } @RequestMapping(value = "/download-file-template", method = RequestMethod.GET) public ResponseEntity<?> downloadFileTemplate(HttpServletResponse response) { XSSFWorkbook workbook = null; byte[] contentReturn = null; try { String fileName = "import_scenario_template.xlsx"; response.setHeader("Content-Disposition", "attachment; filename=" + fileName); OutputStream outputStream; workbook = scenarioService.buildTemplate(); outputStream = response.getOutputStream(); workbook.write(outputStream); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); workbook.write(byteArrayOutputStream); contentReturn = byteArrayOutputStream.toByteArray(); } catch (Exception ex) { logger.error(ex.getMessage(), ex); return new ResponseEntity<byte[]>(null, null, HttpStatus.BAD_REQUEST); } finally { if (workbook != null) { try { workbook.close(); } catch (IOException e) { logger.error(e.getMessage(), e); } } } HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.parseMediaType("application/vnd.ms-excel")); return new ResponseEntity<byte[]>(contentReturn, headers, HttpStatus.OK); } @RequestMapping(value = "/import-file", method = RequestMethod.POST) 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 = (UserSession) RedisUtil.getInstance().get(request.getHeader("X-Auth-Token")); if (file.isEmpty()) { return new ResponseEntity<>(BundleUtils.getLangString("common.fileNotSelected"), HttpStatus.OK); } if (!Objects.equals(FilenameUtils.getExtension(file.getOriginalFilename()), Constants.FileType.xlsx)) { return new ResponseEntity<>(BundleUtils.getLangString("common.fileInvalidFormat", locale), HttpStatus.OK); } String path = saveUploadFile(file); Map<String, Object> map = scenarioService.readAndValidateCustomer(path, scenarioId, campaignId, userSession.getCompanySiteId()); File fileExport = (File) map.get("file"); String message = (String) map.get("message"); ResultDTO resultDTO= new ResultDTO(); resultDTO.setErrorCode("00"); resultDTO.setDescription(message); resultDTO.setData(fileExport); HttpHeaders headers = new HttpHeaders(); headers.add("Content-Type", Constants.MIME_TYPE.EXCEL_XLSX); headers.add("Message", message); return ResponseEntity.ok() .headers(headers) .body(Files.readAllBytes(fileExport.toPath())); } catch (Exception e) { logger.error(e.getMessage()); return new ResponseEntity<>(HttpStatus.BAD_REQUEST); } } private String saveUploadFile(MultipartFile file) { try { String currentTime = new SimpleDateFormat("yyyy_MM_dd_hh_mm_ss").format(new Date()); String fileName = FilenameUtils.getBaseName(file.getOriginalFilename()) + "_" + currentTime + "." + FilenameUtils.getExtension(file.getOriginalFilename()); byte[] content = file.getBytes(); File uploadFolder = new File(System.getProperty("user.dir") + File.separator + "etc" + File.separator + "upload"); if (!uploadFolder.exists()) { uploadFolder.mkdir(); } Path path = Paths.get(System.getProperty("user.dir") + File.separator + "etc", fileName); Files.write(path, content); return path.toString(); } catch (Exception e) { logger.error(e.getMessage()); } return null; } }