Browse Source

서비스 분리

pull/3/head
lkd9125 1 year ago
parent
commit
8f3055561a
  1. 35
      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. 90
      pav-server/src/main/java/com/palnet/comn/utils/PdfUtils.java

35
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 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.vo.LanncPdfVO;
import com.palnet.biz.api.bas.flight.template.service.TemplateService;
import com.palnet.biz.api.bas.flight.template.vo.LaancPdfVO;
import com.palnet.biz.api.comn.model.ComnPagingRs;
import com.palnet.biz.api.comn.response.BasicResponse;
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.comn.exception.CustomException;
import com.palnet.comn.utils.AreaUtils;
import com.palnet.comn.utils.PdfUtils;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
@ -51,15 +52,19 @@ public class BasFlightController {
private final Environment env;
private final CtrTrnsLctnService ctrTrnsLctnService;
private final AreaUtils utils;
private final PdfService pdfService;
private final TemplateService templateService;
private final PdfUtils pdfUtils;
@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.env = env;
this.ctrTrnsLctnService = ctrTrnsLctnService;
this.utils = AreaUtils;
this.pdfService = pdfService;
this.templateService = templateService;
this.pdfUtils = pdfUtils;
}
@GetMapping("/area")
@ -390,18 +395,14 @@ public class BasFlightController {
@PostMapping("/laanc-pdf/create")
@Tag(name = "비행계획서", description = "비행계획서 관련 API")
@ApiOperation(value = "Lannc 공문 PDF생성")
public void createLancePDF(@RequestBody LanncPdfVO vo) {
String airUser = vo.getUserName();
String etc = String.valueOf(System.currentTimeMillis()); // 동명이인 방지
String fileName = pdfService.getSaveName(airUser, etc);
// PDF 생성 및 저장
String htmlContent = pdfService.getHtmlToString(vo);
ComFileBas comFileBas = pdfService.generatePDF(htmlContent, fileName);
pdfService.save(comFileBas);
@ApiOperation(value = "Laanc 공문 PDF생성")
public void createLancePDF(@RequestBody LaancPdfVO vo) {
// PDF 생성 및 저장
ComFileBas comFileBas = templateService.makeLaancPdf(vo);
// 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
@Setter
@ToString
public class LanncPdfVO extends PdfBaseVO{
public class LaancPdfVO extends PdfBaseVO{
// TODO : 아직 파라미터가 정해지지 않음
private String userName; // 조종사 이름
@ -20,7 +20,7 @@ public class LanncPdfVO extends PdfBaseVO{
private String userGender; // 조종사 성별
public LanncPdfVO (){
public LaancPdfVO (){
init();
}

90
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.FileOutputStream;
@ -12,11 +12,9 @@ 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 org.springframework.stereotype.Component;
import org.thymeleaf.TemplateEngine;
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.bas.flight.template.vo.PdfBaseVO;
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;
@Service
@Slf4j
public class PdfService {
@Autowired
private TemplateEngine templateEngine;
@Component
public class PdfUtils {
@Autowired
private JwtTokenUtil jwtTokenUtil;
@Autowired
private ComFileBasRepository comFileBasRepository;
private TemplateEngine templateEngine;
@Value("${base-url}")
private String BASE_PATH;
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으로 변환
@ -99,8 +65,10 @@ public class PdfService {
// Thymeleaf 방식 html에 입힐 데이터 바인딩
Context context = new Context();
for(Entry<String, Object> entry : param.entrySet()){
context.setVariable(entry.getKey(), param.get(entry.getKey()));
for(Entry<String, Object> entry : param.entrySet()){
String key = entry.getKey();
context.setVariable(key, param.get(key));
}
// 앞 뒤 prefix, suffix는 yml에 정의해놓음
@ -139,7 +107,8 @@ public class PdfService {
pdfDocument.open();
/*
CSS 설정 TODO : 추후 템플릿 CSS 맞춰야 할것
CSS 설정
TODO : CSS 파일이 따로 있을시 임포트해주는 방법, CSS 파일 적용은 필수는 아니지만, 글꼴 적용은 꼭해야만
jar변환 CSS파일을 찾을수도 있어서 InputStream 사용
CSS의 색깔은 키워드로 표기 X, #e73a3a 16진법으로 표기 해야함
*/
@ -148,7 +117,7 @@ public class PdfService {
CSSResolver cssResolver = new StyleAttrCSSResolver();
cssResolver.addCss(cssFile);
// Font 설정 TODO : 추후 템플릿 CSS 맞춰야 할것
// Font 설정
XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
fontProvider.register("static/font/NanumGothic.ttf", "NanumGothic");
CssAppliers cssAppliers = new CssAppliersImpl(fontProvider);
@ -170,23 +139,19 @@ public class PdfService {
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e1){
e1.printStackTrace();
} catch (Exception e2){
e2.printStackTrace();
} catch (DocumentException e){
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
}
finally{
pdfDocument.close();
}
String userId = jwtTokenUtil.getUserIdByToken();
result.setFileGroupNo(0);
result.setFilePath(this.BASE_PATH);
result.setFileExt(this.FILE_EXTENSION);
result.setCreateDt(Instant.now());
result.setCreateUserId(userId);
result.setCreateDt(Instant.now());
result.setFileSaveNm(fileName);
result.setFileOriNm(fileName);
@ -194,28 +159,11 @@ public class PdfService {
String filePath = result.getFileOriNm();
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) {
e.printStackTrace();
}
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