지대한
1 year ago
23 changed files with 393 additions and 325 deletions
@ -1,112 +0,0 @@
|
||||
package com.palnet.biz.api.bas.flight.template.service; |
||||
|
||||
import java.time.Instant; |
||||
|
||||
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.code.ErrorCode; |
||||
import com.palnet.comn.exception.CustomException; |
||||
import com.palnet.comn.utils.InstantUtils; |
||||
import com.palnet.comn.utils.PdfUtils; |
||||
|
||||
@Service |
||||
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); |
||||
} |
||||
|
||||
/** |
||||
* 파일 다운로드 |
||||
* @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); |
||||
|
||||
} |
||||
|
||||
} |
@ -0,0 +1,41 @@
|
||||
package com.palnet.biz.api.comn.file.controller; |
||||
|
||||
import com.palnet.biz.api.comn.file.service.ComnFileService; |
||||
import io.swagger.annotations.ApiOperation; |
||||
import io.swagger.v3.oas.annotations.tags.Tag; |
||||
import lombok.RequiredArgsConstructor; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springframework.web.bind.annotation.GetMapping; |
||||
import org.springframework.web.bind.annotation.RequestMapping; |
||||
import org.springframework.web.bind.annotation.RestController; |
||||
|
||||
/** |
||||
* packageName : com.palnet.biz.api.comn.file.controller |
||||
* fileName : ComnFileController |
||||
* author : dhji |
||||
* date : 2023-09-25(025) |
||||
* description : |
||||
* =========================================================== |
||||
* DATE AUTHOR NOTE |
||||
* ----------------------------------------------------------- |
||||
* 2023-09-25(025) dhji 최초 생성 |
||||
*/ |
||||
@Slf4j |
||||
@Tag(name = "공통 파일", description = "공통 파일 관련 API") |
||||
@RequiredArgsConstructor |
||||
@RequestMapping("/api/comn/file") |
||||
@RestController |
||||
public class ComnFileController { |
||||
|
||||
private final ComnFileService comnFileService; |
||||
|
||||
@GetMapping("/download") |
||||
@ApiOperation(value = "파일 다운로드") |
||||
public void downloadPDF(int fileSno) { |
||||
try { |
||||
comnFileService.fileDownload(fileSno); |
||||
} catch (Exception e) { |
||||
log.error("ERROR: ", e); |
||||
} |
||||
} |
||||
} |
@ -1,11 +1,11 @@
|
||||
package com.palnet.biz.api.bas.flight.template.vo; |
||||
package com.palnet.biz.api.comn.file.model; |
||||
|
||||
import java.util.Map; |
||||
|
||||
import lombok.Data; |
||||
|
||||
@Data |
||||
public abstract class PdfBaseVO { |
||||
public abstract class PdfBaseModel { |
||||
|
||||
private String template; |
||||
|
@ -0,0 +1,148 @@
|
||||
package com.palnet.biz.api.comn.file.service; |
||||
|
||||
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; |
||||
import com.palnet.biz.api.comn.file.model.LaancPdfModel; |
||||
import com.palnet.biz.jpa.entity.ComFileBas; |
||||
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.PdfUtils; |
||||
import lombok.RequiredArgsConstructor; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.apache.commons.io.FileUtils; |
||||
import org.apache.commons.io.FilenameUtils; |
||||
import org.springframework.core.io.ClassPathResource; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
import javax.transaction.Transactional; |
||||
import java.io.File; |
||||
import java.io.IOException; |
||||
import java.time.Instant; |
||||
import java.util.Base64; |
||||
|
||||
@Slf4j |
||||
@RequiredArgsConstructor |
||||
@Service |
||||
public class ComnFileService { |
||||
|
||||
private final PdfUtils pdfUtils; |
||||
private final JwtTokenUtil jwtTokenUtil; |
||||
private final ComFileBasRepository comFileBasRepository; |
||||
|
||||
private final String FILE_EXTENSION = ".pdf"; |
||||
|
||||
/** |
||||
* 파일명 만들기, 앞에 기본으로 금일 날짜있음 |
||||
* [예시] 20230102_[추가파라미터] |
||||
* |
||||
* @param etcName |
||||
* @return |
||||
*/ |
||||
private String getLaancSaveName(String... etcName) { |
||||
|
||||
String date = InstantUtils.toDatetimeStringByFormat(Instant.now(), "yyyyMMddHHmmss"); |
||||
|
||||
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 model |
||||
* @return |
||||
*/ |
||||
public ComFileBas makePdf(LaancPdfModel model) { |
||||
|
||||
String airUser = model.getUserName(); |
||||
String etc = String.valueOf(System.currentTimeMillis()); // 동명이인 방지
|
||||
String fileName = getLaancSaveName(airUser, etc); |
||||
|
||||
// TODO 추후 img tag의 src로 들어가는 이미지들을 base64로 변환하여 html에 넣어줘야함
|
||||
// images 넣기(임시)
|
||||
log.debug(">>> {}", model.getTemplate()); |
||||
if ("laanc/official_document".equals(model.getTemplate())) { |
||||
System.out.println("!!!!! official_document.html"); |
||||
String imgMlit = imagesToBase64ForSrc("templates/imgs/od-mlit.jpg"); |
||||
model.setImgMlit(imgMlit); |
||||
String imgExpo = imagesToBase64ForSrc("templates/imgs/od-expo2030.png"); |
||||
model.setImgExpo(imgExpo); |
||||
} |
||||
|
||||
String htmlContent = pdfUtils.getHtmlToString(model); |
||||
System.out.println(">>>" + htmlContent); |
||||
ComFileBas comFileBas = pdfUtils.generatePDF(htmlContent, fileName); |
||||
|
||||
String userId = jwtTokenUtil.getUserIdByToken(); |
||||
if (userId == null) userId = "NONE"; |
||||
comFileBas.setCreateUserId(userId); |
||||
return this.save(comFileBas); |
||||
} |
||||
|
||||
/** |
||||
* DB 인서트, 최신데이터 가져온 후 Group NO 1추가함 |
||||
* |
||||
* @param comFileBas |
||||
* @return |
||||
*/ |
||||
@Transactional |
||||
public ComFileBas save(ComFileBas comFileBas) { |
||||
|
||||
// DB Insert
|
||||
// ComFileBas lastComFileBas = comFileBasRepository.findFirstByOrderByFileSnoDesc();
|
||||
ComFileBas lastComFileBas = comFileBasRepository.findFirstByOrderByFileGroupNoDesc(); |
||||
int fileGroupNo = (lastComFileBas == null) ? 1 : lastComFileBas.getFileGroupNo() + 1; |
||||
|
||||
comFileBas.setFileGroupNo(fileGroupNo); |
||||
|
||||
return comFileBasRepository.save(comFileBas); |
||||
} |
||||
|
||||
/** |
||||
* 파일 다운로드 |
||||
* |
||||
* @param fileSno |
||||
*/ |
||||
public void fileDownload(int fileSno) { |
||||
|
||||
ComFileBas comFileBas = comFileBasRepository.findById(fileSno).orElse(null); |
||||
if (comFileBas == null) throw new CustomException(ErrorCode.DATA_NOTFIND); |
||||
|
||||
pdfUtils.fileDownload(comFileBas); |
||||
|
||||
} |
||||
|
||||
public String imagesToBase64ForSrc(String path) { |
||||
StringBuilder str = new StringBuilder(); |
||||
ClassPathResource resource = new ClassPathResource(path); |
||||
File file = null; |
||||
try { |
||||
file = resource.getFile(); |
||||
System.out.println(file.getName()); |
||||
String ext = FilenameUtils.getExtension(file.getName()); |
||||
byte[] fileContent = FileUtils.readFileToByteArray(file); |
||||
String encodedString = Base64.getEncoder().encodeToString(fileContent); |
||||
str |
||||
.append("data:image/") |
||||
.append(ext) |
||||
.append(";base64,") |
||||
.append(encodedString); |
||||
|
||||
} catch (IOException e) { |
||||
throw new RuntimeException(e); |
||||
} |
||||
return str.toString(); |
||||
} |
||||
|
||||
|
||||
} |
@ -1,12 +0,0 @@
|
||||
|
||||
body{ |
||||
font-family: NanumGothic; |
||||
} |
||||
|
||||
p{ |
||||
background-color: #e73a3a; |
||||
} |
||||
|
||||
div { |
||||
background-color: #e73a3a; |
||||
} |
Binary file not shown.
After Width: | Height: | Size: 6.3 KiB |
After Width: | Height: | Size: 3.0 KiB |
@ -0,0 +1,30 @@
|
||||
<html lang="ko" xmlns:th="http://www.thymeleaf.org"> |
||||
<head> |
||||
<meta charset="UTF-8"/> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> |
||||
<style> |
||||
body { |
||||
font-family: NanumGothic, serif; |
||||
} |
||||
|
||||
p { |
||||
background-color: #e73a3a; |
||||
} |
||||
|
||||
div { |
||||
background-color: #e73a3a; |
||||
} |
||||
|
||||
</style> |
||||
</head> |
||||
<!--<body style="font-family: NanumGothic, serif;">--> |
||||
<body> |
||||
<img style="width:100px; height:100px;" th:src="@{${imgMlit}}" alt="11"/> |
||||
<img style="width:100px; height:100px;" th:src="@{${imgExpo}}" alt="11"/> |
||||
<hr/> |
||||
<p style="color: #3ae743; height: 100px">Thymeleaf Tutorials</p> |
||||
<p>이름 : [[${userName}]]</p> |
||||
<p>나이 : [[${userAge}]]</p> |
||||
<p>성별 : [[${userGender}]]</p> |
||||
</body> |
||||
</html> |
@ -1,12 +0,0 @@
|
||||
<html lang="ko" xmlns:th="http://www.thymeleaf.org"> |
||||
<head> |
||||
<meta charset="UTF-8" /> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
||||
</head> |
||||
<body> |
||||
<p>Thymeleaf Tutorials</p> |
||||
<p>이름 : [[${userName}]]</p> |
||||
<p>나이 : [[${userAge}]]</p> |
||||
<p>성별 : [[${userGender}]]</p> |
||||
</body> |
||||
</html> |
@ -0,0 +1,27 @@
|
||||
package com.palnet.biz.api.comn.file.service; |
||||
|
||||
import com.palnet.biz.api.comn.file.model.LaancPdfModel; |
||||
import com.palnet.biz.jpa.entity.ComFileBas; |
||||
import org.junit.jupiter.api.Test; |
||||
import org.springframework.beans.factory.annotation.Autowired; |
||||
import org.springframework.boot.test.context.SpringBootTest; |
||||
import org.springframework.test.context.ActiveProfiles; |
||||
|
||||
|
||||
@ActiveProfiles("local") |
||||
@SpringBootTest |
||||
class ComnFileServiceTest { |
||||
|
||||
@Autowired |
||||
private ComnFileService comnFileService; |
||||
|
||||
@Test |
||||
void makePdf() { |
||||
LaancPdfModel model = new LaancPdfModel(); |
||||
model.setUserName("test"); |
||||
model.setUserGender("M"); |
||||
model.setUserName("쿠쿠다스"); |
||||
ComFileBas comFileBas = comnFileService.makePdf(model); |
||||
System.out.println(comFileBas.toString()); |
||||
} |
||||
} |
Loading…
Reference in new issue