Browse Source

Merge pull request 'feature/lannc/pdf-download' (#4) from feature/lannc/pdf-download into develop

Reviewed-on: #4
pull/7/head
lkd9125 1 year ago
parent
commit
83512429cd
  1. 15
      pav-server/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java
  2. 4
      pav-server/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java
  3. 28
      pav-server/src/main/java/com/palnet/biz/api/bas/flight/template/service/TemplateService.java
  4. 2
      pav-server/src/main/java/com/palnet/biz/jpa/repository/com/ComFileBasRepository.java
  5. 64
      pav-server/src/main/java/com/palnet/comn/utils/PdfUtils.java

15
pav-server/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java

@ -35,7 +35,6 @@ import com.palnet.biz.jpa.entity.ComFileBas;
import com.palnet.biz.scheduler.ctr.service.CtrTrnsLctnService; import com.palnet.biz.scheduler.ctr.service.CtrTrnsLctnService;
import com.palnet.comn.exception.CustomException; import com.palnet.comn.exception.CustomException;
import com.palnet.comn.utils.AreaUtils; import com.palnet.comn.utils.AreaUtils;
import com.palnet.comn.utils.PdfUtils;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@ -53,18 +52,14 @@ public class BasFlightController {
private final CtrTrnsLctnService ctrTrnsLctnService; private final CtrTrnsLctnService ctrTrnsLctnService;
private final AreaUtils utils; private final AreaUtils utils;
private final TemplateService templateService; private final TemplateService templateService;
private final PdfUtils pdfUtils;
@Autowired @Autowired
public BasFlightController(BasFlightService basFlightService, Environment env, CtrTrnsLctnService ctrTrnsLctnService, AreaUtils AreaUtils, TemplateService templateService, PdfUtils pdfUtils) { public BasFlightController(BasFlightService basFlightService, Environment env, CtrTrnsLctnService ctrTrnsLctnService, AreaUtils AreaUtils, TemplateService templateService) {
this.basFlightService = basFlightService; this.basFlightService = basFlightService;
this.env = env; this.env = env;
this.ctrTrnsLctnService = ctrTrnsLctnService; this.ctrTrnsLctnService = ctrTrnsLctnService;
this.utils = AreaUtils; this.utils = AreaUtils;
this.templateService = templateService; this.templateService = templateService;
this.pdfUtils = pdfUtils;
} }
@GetMapping("/area") @GetMapping("/area")
@ -432,6 +427,12 @@ public class BasFlightController {
templateService.save(comFileBas); templateService.save(comFileBas);
} }
@GetMapping("/laanc-pdf/download")
@Tag(name = "비행계획서", description = "비행계획서 관련 API")
@ApiOperation(value = "Laanc 공문 다운로드")
public void downloadPDF(int fileSno){
templateService.fileDownload(fileSno);
}
} }

4
pav-server/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java

@ -47,8 +47,11 @@ import java.time.Instant;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.servlet.http.HttpServletResponse;
@Slf4j @Slf4j
@RequiredArgsConstructor @RequiredArgsConstructor
@ -838,5 +841,4 @@ public class BasFlightService {
return jsonObject; return jsonObject;
} }
} }

28
pav-server/src/main/java/com/palnet/biz/api/bas/flight/template/service/TemplateService.java

@ -1,17 +1,15 @@
package com.palnet.biz.api.bas.flight.template.service; package com.palnet.biz.api.bas.flight.template.service;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.StringReader; import java.io.OutputStream;
import java.nio.charset.Charset; import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.time.Instant; import java.time.Instant;
import java.util.Map; import java.util.Objects;
import java.util.Map.Entry;
import javax.servlet.http.HttpServletResponse;
import javax.transaction.Transactional; import javax.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -22,6 +20,8 @@ import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil;
import com.palnet.biz.api.bas.flight.template.vo.LaancPdfVO; import com.palnet.biz.api.bas.flight.template.vo.LaancPdfVO;
import com.palnet.biz.jpa.entity.ComFileBas; import com.palnet.biz.jpa.entity.ComFileBas;
import com.palnet.biz.jpa.repository.com.ComFileBasRepository; import com.palnet.biz.jpa.repository.com.ComFileBasRepository;
import com.palnet.comn.code.ErrorCode;
import com.palnet.comn.exception.CustomException;
import com.palnet.comn.utils.InstantUtils; import com.palnet.comn.utils.InstantUtils;
import com.palnet.comn.utils.PdfUtils; import com.palnet.comn.utils.PdfUtils;
@ -106,4 +106,18 @@ public class TemplateService {
comFileBasRepository.save(comFileBas); comFileBasRepository.save(comFileBas);
} }
/**
* 파일 다운로드
* @param fileSno
* @param response
*/
public void fileDownload(int fileSno) {
ComFileBas comFileBas = comFileBasRepository.findById(fileSno).orElse(null);
if(comFileBas == null) throw new CustomException(ErrorCode.DATA_NOTFIND);
pdfUtils.fileDownload(comFileBas);
}
} }

2
pav-server/src/main/java/com/palnet/biz/jpa/repository/com/ComFileBasRepository.java

@ -6,7 +6,7 @@ import org.springframework.stereotype.Repository;
import com.palnet.biz.jpa.entity.ComFileBas; import com.palnet.biz.jpa.entity.ComFileBas;
@Repository @Repository
public interface ComFileBasRepository extends JpaRepository<ComFileBas, String>{ public interface ComFileBasRepository extends JpaRepository<ComFileBas, Integer>{
public ComFileBas findFirstByOrderByFileSnoDesc(); public ComFileBas findFirstByOrderByFileSnoDesc();
} }

64
pav-server/src/main/java/com/palnet/comn/utils/PdfUtils.java

@ -1,19 +1,27 @@
package com.palnet.comn.utils; package com.palnet.comn.utils;
import java.io.File; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream;
import java.io.StringReader; import java.io.StringReader;
import java.net.URLEncoder;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.time.Instant; import java.time.Instant;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Objects;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.access.method.P;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.thymeleaf.TemplateEngine; import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context; import org.thymeleaf.context.Context;
@ -35,13 +43,16 @@ import com.itextpdf.tool.xml.pipeline.css.CssResolverPipeline;
import com.itextpdf.tool.xml.pipeline.end.PdfWriterPipeline; import com.itextpdf.tool.xml.pipeline.end.PdfWriterPipeline;
import com.itextpdf.tool.xml.pipeline.html.HtmlPipeline; import com.itextpdf.tool.xml.pipeline.html.HtmlPipeline;
import com.itextpdf.tool.xml.pipeline.html.HtmlPipelineContext; import com.itextpdf.tool.xml.pipeline.html.HtmlPipelineContext;
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil;
import com.palnet.biz.api.bas.flight.template.vo.PdfBaseVO; import com.palnet.biz.api.bas.flight.template.vo.PdfBaseVO;
import com.palnet.biz.jpa.entity.ComFileBas; import com.palnet.biz.jpa.entity.ComFileBas;
import com.palnet.comn.code.ErrorCode;
import com.palnet.comn.exception.CustomException;
@Component @Component
public class PdfUtils { public class PdfUtils {
@Autowired
private HttpServletResponse response;
@Autowired @Autowired
private TemplateEngine templateEngine; private TemplateEngine templateEngine;
@ -166,4 +177,55 @@ public class PdfUtils {
return result; return result;
} }
/**
* 파일 Download
* @param comFileBas
*/
public void fileDownload(ComFileBas comFileBas){
InputStream inputStream = null;
OutputStream outputStream = null;
try {
File pdfFile = new File(comFileBas.getFilePath() + comFileBas.getFileSaveNm());
inputStream = new FileInputStream(pdfFile);
String fileOriName = comFileBas.getFileOriNm();
fileOriName = URLEncoder.encode(comFileBas.getFileOriNm(), "UTF-8");
response.setContentType("application/octet-stream");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileOriName + "\"");
response.setContentLengthLong(Long.parseLong(comFileBas.getFileSize()));
response.setStatus(HttpServletResponse.SC_OK);
outputStream = response.getOutputStream();
byte[] buffer = new byte[1024]; //1KB 설정
int length;
while((length = inputStream.read(buffer)) != -1) {
outputStream.write(buffer);
}
} catch (FileNotFoundException e) {
throw new CustomException(ErrorCode.DATA_NO);
} catch (IOException e){
e.printStackTrace();
} finally {
try {
if(outputStream != null){
Objects.requireNonNull(outputStream).flush();
outputStream.close();
}
if(inputStream != null){
inputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
} }

Loading…
Cancel
Save