Browse Source

서비스 분리

pull/3/head
lkd9125 1 year ago
parent
commit
8f3055561a
  1. 29
      pav-server/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java
  2. 109
      pav-server/src/main/java/com/palnet/biz/api/bas/flight/template/service/TemplateService.java
  3. 4
      pav-server/src/main/java/com/palnet/biz/api/bas/flight/template/vo/LaancPdfVO.java
  4. 82
      pav-server/src/main/java/com/palnet/comn/utils/PdfUtils.java

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

@ -25,8 +25,8 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import com.palnet.biz.api.bas.flight.service.BasFlightService; import com.palnet.biz.api.bas.flight.service.BasFlightService;
import com.palnet.biz.api.bas.flight.template.service.PdfService; import com.palnet.biz.api.bas.flight.template.service.TemplateService;
import com.palnet.biz.api.bas.flight.template.vo.LanncPdfVO; import com.palnet.biz.api.bas.flight.template.vo.LaancPdfVO;
import com.palnet.biz.api.comn.model.ComnPagingRs; import com.palnet.biz.api.comn.model.ComnPagingRs;
import com.palnet.biz.api.comn.response.BasicResponse; import com.palnet.biz.api.comn.response.BasicResponse;
import com.palnet.biz.api.comn.response.ErrorResponse; import com.palnet.biz.api.comn.response.ErrorResponse;
@ -35,6 +35,7 @@ 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;
@ -51,15 +52,19 @@ public class BasFlightController {
private final Environment env; private final Environment env;
private final CtrTrnsLctnService ctrTrnsLctnService; private final CtrTrnsLctnService ctrTrnsLctnService;
private final AreaUtils utils; private final AreaUtils utils;
private final PdfService pdfService; private final TemplateService templateService;
private final PdfUtils pdfUtils;
@Autowired @Autowired
public BasFlightController(BasFlightService basFlightService, Environment env, CtrTrnsLctnService ctrTrnsLctnService, AreaUtils AreaUtils, PdfService pdfService) { public BasFlightController(BasFlightService basFlightService, Environment env, CtrTrnsLctnService ctrTrnsLctnService, AreaUtils AreaUtils, TemplateService templateService, PdfUtils pdfUtils) {
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.pdfService = pdfService; this.templateService = templateService;
this.pdfUtils = pdfUtils;
} }
@GetMapping("/area") @GetMapping("/area")
@ -390,18 +395,14 @@ public class BasFlightController {
@PostMapping("/laanc-pdf/create") @PostMapping("/laanc-pdf/create")
@Tag(name = "비행계획서", description = "비행계획서 관련 API") @Tag(name = "비행계획서", description = "비행계획서 관련 API")
@ApiOperation(value = "Lannc 공문 PDF생성") @ApiOperation(value = "Laanc 공문 PDF생성")
public void createLancePDF(@RequestBody LanncPdfVO vo) { public void createLancePDF(@RequestBody LaancPdfVO vo) {
String airUser = vo.getUserName();
String etc = String.valueOf(System.currentTimeMillis()); // 동명이인 방지
String fileName = pdfService.getSaveName(airUser, etc);
// PDF 생성 및 저장 // PDF 생성 및 저장
String htmlContent = pdfService.getHtmlToString(vo); ComFileBas comFileBas = templateService.makeLaancPdf(vo);
ComFileBas comFileBas = pdfService.generatePDF(htmlContent, fileName);
pdfService.save(comFileBas); // DB 저장
templateService.save(comFileBas);
} }

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

@ -0,0 +1,109 @@
package com.palnet.biz.api.bas.flight.template.service;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.time.Instant;
import java.util.Map;
import java.util.Map.Entry;
import javax.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil;
import com.palnet.biz.api.bas.flight.template.vo.LaancPdfVO;
import com.palnet.biz.jpa.entity.ComFileBas;
import com.palnet.biz.jpa.repository.com.ComFileBasRepository;
import com.palnet.comn.utils.InstantUtils;
import com.palnet.comn.utils.PdfUtils;
import lombok.extern.slf4j.Slf4j;
@Service
@Slf4j
public class TemplateService {
@Autowired
private PdfUtils pdfUtils;
@Autowired
private JwtTokenUtil jwtTokenUtil;
@Autowired
private ComFileBasRepository comFileBasRepository;
@Value("${base-url}")
private String BASE_PATH;
private final String FILE_EXTENSION = ".pdf";
/**
* 파일명 만들기, 앞에 기본으로 금일 날짜있음
* [예시] 20230102_[추가파라미터]
* @param etcName
* @return
*/
private String getLaancSaveName(String ...etcName){
String date = InstantUtils.toDateString(Instant.now()).replace("-", "");
StringBuilder result = new StringBuilder();
result.append(date);
for(String name : etcName){
result.append("-")
.append(name);
}
result.append(this.FILE_EXTENSION);
return result.toString();
}
/**
* PDF 생성
* @param vo
* @return
*/
public ComFileBas makeLaancPdf(LaancPdfVO vo){
String airUser = vo.getUserName();
String etc = String.valueOf(System.currentTimeMillis()); // 동명이인 방지
String fileName = getLaancSaveName(airUser, etc);
String htmlContent = pdfUtils.getHtmlToString(vo);
ComFileBas comFileBas = pdfUtils.generatePDF(htmlContent, fileName);
String userId = jwtTokenUtil.getUserIdByToken();
comFileBas.setCreateUserId(userId);
return comFileBas;
}
/**
* DB 인서트, 최신데이터 가져온 Group NO 1추가함
* @param comFileBas
*/
@Transactional
public void save(ComFileBas comFileBas){
// DB Insert
ComFileBas lastComFileBas = comFileBasRepository.findFirstByOrderByFileSnoDesc();
int fileGroupNo = (lastComFileBas == null) ? 1 : lastComFileBas.getFileGroupNo() + 1;
comFileBas.setFileGroupNo(fileGroupNo);
comFileBasRepository.save(comFileBas);
}
}

4
pav-server/src/main/java/com/palnet/biz/api/bas/flight/template/vo/LanncPdfVO.java → pav-server/src/main/java/com/palnet/biz/api/bas/flight/template/vo/LaancPdfVO.java

@ -10,7 +10,7 @@ import lombok.ToString;
@Getter @Getter
@Setter @Setter
@ToString @ToString
public class LanncPdfVO extends PdfBaseVO{ public class LaancPdfVO extends PdfBaseVO{
// TODO : 아직 파라미터가 정해지지 않음 // TODO : 아직 파라미터가 정해지지 않음
private String userName; // 조종사 이름 private String userName; // 조종사 이름
@ -20,7 +20,7 @@ public class LanncPdfVO extends PdfBaseVO{
private String userGender; // 조종사 성별 private String userGender; // 조종사 성별
public LanncPdfVO (){ public LaancPdfVO (){
init(); init();
} }

82
pav-server/src/main/java/com/palnet/biz/api/bas/flight/template/service/PdfService.java → pav-server/src/main/java/com/palnet/comn/utils/PdfUtils.java

@ -1,4 +1,4 @@
package com.palnet.biz.api.bas.flight.template.service; package com.palnet.comn.utils;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
@ -12,11 +12,9 @@ import java.time.Instant;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import javax.transaction.Transactional;
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.stereotype.Service; import org.springframework.stereotype.Component;
import org.thymeleaf.TemplateEngine; import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context; import org.thymeleaf.context.Context;
@ -40,51 +38,19 @@ import com.itextpdf.tool.xml.pipeline.html.HtmlPipelineContext;
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; 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.biz.jpa.repository.com.ComFileBasRepository;
import com.palnet.comn.utils.InstantUtils;
import lombok.extern.slf4j.Slf4j; @Component
public class PdfUtils {
@Service
@Slf4j
public class PdfService {
@Autowired @Autowired
private TemplateEngine templateEngine; private TemplateEngine templateEngine;
@Autowired
private JwtTokenUtil jwtTokenUtil;
@Autowired
private ComFileBasRepository comFileBasRepository;
@Value("${base-url}") @Value("${base-url}")
private String BASE_PATH; private String BASE_PATH;
private final String FILE_EXTENSION = ".pdf"; private final String FILE_EXTENSION = ".pdf";
/**
* 파일명 만들기, 앞에 기본으로 금일 날짜있음
* [예시] 20230102_[추가파라미터]
* @param etcName
* @return
*/
public String getSaveName(String ...etcName){
String date = InstantUtils.toDateString(Instant.now()).replace("-", "");
StringBuilder result = new StringBuilder();
result.append(date);
for(String name : etcName){
result.append("-")
.append(name);
}
result.append(this.FILE_EXTENSION);
return result.toString();
}
/** /**
* Thymeleaf HTML 파일을 데이터 바인딩하여 String으로 변환 * Thymeleaf HTML 파일을 데이터 바인딩하여 String으로 변환
@ -100,7 +66,9 @@ public class PdfService {
Context context = new Context(); Context context = new Context();
for(Entry<String, Object> entry : param.entrySet()){ for(Entry<String, Object> entry : param.entrySet()){
context.setVariable(entry.getKey(), param.get(entry.getKey())); String key = entry.getKey();
context.setVariable(key, param.get(key));
} }
// 앞 뒤 prefix, suffix는 yml에 정의해놓음 // 앞 뒤 prefix, suffix는 yml에 정의해놓음
@ -139,7 +107,8 @@ public class PdfService {
pdfDocument.open(); pdfDocument.open();
/* /*
CSS 설정 TODO : 추후 템플릿 CSS 맞춰야 할것 CSS 설정
TODO : CSS 파일이 따로 있을시 임포트해주는 방법, CSS 파일 적용은 필수는 아니지만, 글꼴 적용은 꼭해야만
jar변환 CSS파일을 찾을수도 있어서 InputStream 사용 jar변환 CSS파일을 찾을수도 있어서 InputStream 사용
CSS의 색깔은 키워드로 표기 X, #e73a3a 16진법으로 표기 해야함 CSS의 색깔은 키워드로 표기 X, #e73a3a 16진법으로 표기 해야함
*/ */
@ -148,7 +117,7 @@ public class PdfService {
CSSResolver cssResolver = new StyleAttrCSSResolver(); CSSResolver cssResolver = new StyleAttrCSSResolver();
cssResolver.addCss(cssFile); cssResolver.addCss(cssFile);
// Font 설정 TODO : 추후 템플릿 CSS 맞춰야 할것 // Font 설정
XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS); XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
fontProvider.register("static/font/NanumGothic.ttf", "NanumGothic"); fontProvider.register("static/font/NanumGothic.ttf", "NanumGothic");
CssAppliers cssAppliers = new CssAppliersImpl(fontProvider); CssAppliers cssAppliers = new CssAppliersImpl(fontProvider);
@ -170,23 +139,19 @@ public class PdfService {
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} catch (DocumentException e1){ } catch (DocumentException e){
e1.printStackTrace(); e.printStackTrace();
} catch (Exception e2){ } catch (Exception e){
e2.printStackTrace(); e.printStackTrace();
} }
finally{ finally{
pdfDocument.close(); pdfDocument.close();
} }
String userId = jwtTokenUtil.getUserIdByToken();
result.setFileGroupNo(0); result.setFileGroupNo(0);
result.setFilePath(this.BASE_PATH); result.setFilePath(this.BASE_PATH);
result.setFileExt(this.FILE_EXTENSION); result.setFileExt(this.FILE_EXTENSION);
result.setCreateDt(Instant.now()); result.setCreateDt(Instant.now());
result.setCreateUserId(userId);
result.setFileSaveNm(fileName); result.setFileSaveNm(fileName);
result.setFileOriNm(fileName); result.setFileOriNm(fileName);
@ -194,28 +159,11 @@ public class PdfService {
String filePath = result.getFileOriNm(); String filePath = result.getFileOriNm();
long fileSize = Files.size(Paths.get(pdfPath + filePath)) / 1024; long fileSize = Files.size(Paths.get(pdfPath + filePath)) / 1024;
if(fileSize > 0) result.setFileSize(String.valueOf(fileSize)); if(fileSize >= 0) result.setFileSize(String.valueOf(fileSize));
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
return result; return result;
} }
/**
* DB 인서트, 최신데이터 가져온 Group NO 1추가함
* @param comFileBas
*/
@Transactional
public void save(ComFileBas comFileBas){
// DB Insert
ComFileBas lastComFileBas = comFileBasRepository.findFirstByOrderByFileSnoDesc();
int fileGroupNo = (lastComFileBas == null) ? 1 : lastComFileBas.getFileGroupNo() + 1;
comFileBas.setFileGroupNo(fileGroupNo);
comFileBasRepository.save(comFileBas);
}
} }
Loading…
Cancel
Save