Browse Source

Merge remote-tracking branch 'origin/develop' into develop

# Conflicts:
#	pav-server/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java
pull/8/head
지대한 1 year ago
parent
commit
7c8f1ce6e2
  1. 3
      pav-server/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java
  2. 28
      pav-server/src/main/java/com/palnet/biz/api/bas/flight/template/service/TemplateService.java
  3. 86
      pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java
  4. 39
      pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java
  5. 7
      pav-server/src/main/java/com/palnet/biz/config/convert/StringToInstantBinding.java
  6. 2
      pav-server/src/main/java/com/palnet/biz/jpa/repository/com/ComFileBasRepository.java
  7. 101
      pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java
  8. 2
      pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java
  9. 64
      pav-server/src/main/java/com/palnet/comn/utils/PdfUtils.java

3
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.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletResponse;
@Slf4j
@RequiredArgsConstructor

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;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileInputStream;
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.io.OutputStream;
import java.net.URLEncoder;
import java.time.Instant;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;
import javax.servlet.http.HttpServletResponse;
import javax.transaction.Transactional;
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.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;
@ -106,4 +106,18 @@ public class TemplateService {
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);
}
}

86
pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java

@ -4,6 +4,7 @@ import java.util.List;
import java.util.Map;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
@ -13,6 +14,7 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.palnet.biz.api.comn.response.BasicResponse;
@ -163,8 +165,11 @@ public class MainDashController {
@GetMapping(value = "/stcs/flight/date/{type}")
@ApiOperation(value = "김포공항, 비행실적 통계")
@Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API")
@ApiImplicitParam(name = "date",value = "날짜", dataTypeClass = String.class)
public ResponseEntity<? extends BasicResponse> kacDateStatistics(String date, @PathVariable String type){
@ApiImplicitParams({
@ApiImplicitParam(name = "date",value = "날짜", dataTypeClass = String.class),
@ApiImplicitParam(name = "type",value = "날짜형식", dataTypeClass = String.class)
})
public ResponseEntity<? extends BasicResponse> flightStatistics(String date, @PathVariable String type){
String[] formatParam = null;
@ -193,8 +198,11 @@ public class MainDashController {
@GetMapping("/stcs/plan-allow/date/{type}")
@ApiOperation(value = "김포공항, 비행승인 통계")
@Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API")
@ApiImplicitParam(name = "date",value = "날짜", dataTypeClass = String.class)
public ResponseEntity<? extends BasicResponse> kacPlanAllowStatistics(String date ,@PathVariable String type){
@ApiImplicitParams({
@ApiImplicitParam(name = "date",value = "날짜", dataTypeClass = String.class),
@ApiImplicitParam(name = "type",value = "날짜형식", dataTypeClass = String.class)
})
public ResponseEntity<? extends BasicResponse> planAllowStatistics(String date ,@PathVariable String type){
String[] formatParam = null;
@ -209,7 +217,75 @@ public class MainDashController {
List<MainDashStcsModel> result = null;
try {
result = service.mainKacStcsPlanAllow(date,formatParam);
result = service.mainStcsPlanAllow(date,formatParam);
} catch (Exception e) {
log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1"));
}
return ResponseEntity.ok().body(new SuccessResponse<List<MainDashStcsModel>>(result));
}
@GetMapping("/stcs/drone-flight/date/{type}")
@ApiOperation(value = "김포공항, 드론별 비행 통계")
@Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API")
@ApiImplicitParams({
@ApiImplicitParam(name = "date",value = "날짜", dataTypeClass = String.class),
@ApiImplicitParam(name = "type",value = "날짜형식", dataTypeClass = String.class),
@ApiImplicitParam(name = "idntfNum",value = "드론식별번호", dataTypeClass = String.class),
})
public ResponseEntity<? extends BasicResponse> droneFlightStatistics(String date, @RequestParam(required = true) String idntfNum, @PathVariable String type){
log.info("idntfNum -> {}", idntfNum);
String[] formatParam = null;
try {
if(date == null) date = "";
formatParam = service.paramCheck(date,type);
} catch (NumberFormatException e) {
return ResponseEntity.status(HttpStatus.OK)
.body(new ErrorResponse(RSErrorCode.ER_PARAM));
}
List<MainDashStcsModel> result = null;
try {
result = service.mainStcsDroneFlight(date,idntfNum,formatParam);
} catch (Exception e) {
log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1"));
}
return ResponseEntity.ok().body(new SuccessResponse<List<MainDashStcsModel>>(result));
}
@GetMapping("/stcs/warning-flight/date/{type}")
@ApiOperation(value = "김포공항, 비정상상황 비행 통계")
@Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API")
@ApiImplicitParams({
@ApiImplicitParam(name = "date",value = "날짜", dataTypeClass = String.class),
@ApiImplicitParam(name = "type",value = "날짜형식", dataTypeClass = String.class)
})
public ResponseEntity<? extends BasicResponse> warningFlightStatistics(String date, @PathVariable String type){
String[] formatParam = null;
try {
if(date == null) date = "";
formatParam = service.paramCheck(date,type);
} catch (NumberFormatException e) {
return ResponseEntity.status(HttpStatus.OK)
.body(new ErrorResponse(RSErrorCode.ER_PARAM));
}
List<MainDashStcsModel> result = null;
try {
result = service.mainStcsWarningFlight(date,formatParam);
} catch (Exception e) {
log.error("IGNORE : {}", e);

39
pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java

@ -104,7 +104,7 @@ public class MainDashService {
*/
public List<MainDashStcsModel> mainKacDashStcsDay(String date, String[] formatParam){
List<MainDashStcsModel> resultList = query.mainKacDashStcsDay(date, formatParam);
List<MainDashStcsModel> resultList = query.mainStcsFlight(date, null, formatParam);
return resultList;
}
@ -114,9 +114,37 @@ public class MainDashService {
* @param yyyymm
* @return
*/
public List<MainDashStcsModel> mainKacStcsPlanAllow(String date, String[] formatParam){
public List<MainDashStcsModel> mainStcsPlanAllow(String date, String[] formatParam){
List<MainDashStcsModel> resultList = fltPlanQueryRepository.mainKacStcsPlanAllow(date, formatParam);
List<MainDashStcsModel> resultList = fltPlanQueryRepository.mainStcsPlanAllow(date, formatParam);
return resultList;
}
/**
* 김포공항, 드론별 비행실적 통계
* @param idntfNum
* @param date
* @param formatParam
* @return
*/
public List<MainDashStcsModel> mainStcsDroneFlight(String date, String idntfNum, String[] formatParam){
List<MainDashStcsModel> resultList = query.mainStcsFlight(date, idntfNum, formatParam);
return resultList;
}
/**
* 김포공항, 비정상상황 통계
* @param idntfNum
* @param date
* @param formatParam
* @return
*/
public List<MainDashStcsModel> mainStcsWarningFlight(String date, String[] formatParam){
List<MainDashStcsModel> resultList = query.mainStcsWarningFlight(date, formatParam);
return resultList;
}
@ -187,9 +215,4 @@ public class MainDashService {
return result;
}
}

7
pav-server/src/main/java/com/palnet/biz/config/convert/StringToInstantBinding.java

@ -17,10 +17,8 @@ public class StringToInstantBinding implements Converter<String, Instant> {
private final String ZONE = "Asia/Seoul";
@Override
public Instant convert(String date) {
log.error("StringToInstantBinding - convert()");
log.error("date -> {}", date);
public Instant convert(String date) {
if(InstantUtils.isValidFormat(date, DATETIME_FORMAT)) {
return InstantUtils.fromDatetimeString(date);
} else if(InstantUtils.isValidFormat(date, DATE_FORMAT)){
@ -32,7 +30,6 @@ public class StringToInstantBinding implements Converter<String, Instant> {
log.error("ERROR : ", e);
}
}
return null;
}

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;
@Repository
public interface ComFileBasRepository extends JpaRepository<ComFileBas, String>{
public interface ComFileBasRepository extends JpaRepository<ComFileBas, Integer>{
public ComFileBas findFirstByOrderByFileSnoDesc();
}

101
pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java

@ -1,5 +1,19 @@
package com.palnet.biz.jpa.repository.ctr;
import java.time.Duration;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Repository;
import com.palnet.biz.api.acnt.jwt.model.JwtGroupModel;
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil;
import com.palnet.biz.api.anls.hstry.model.AnlsHstryDetailModel;
@ -13,7 +27,23 @@ import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlEndModel;
import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlGroupArcrftModel;
import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlGroupModel;
import com.palnet.biz.api.main.dash.model.MainDashStcsModel;
import com.palnet.biz.jpa.entity.*;
import com.palnet.biz.jpa.entity.ComArcrftBas;
import com.palnet.biz.jpa.entity.ComIdntfBas;
import com.palnet.biz.jpa.entity.CtrCntrlHstry;
import com.palnet.biz.jpa.entity.CtrCntrlHstryArea;
import com.palnet.biz.jpa.entity.FltPlanArea;
import com.palnet.biz.jpa.entity.FltPlanBas;
import com.palnet.biz.jpa.entity.QComArcrftBas;
import com.palnet.biz.jpa.entity.QComIdntfBas;
import com.palnet.biz.jpa.entity.QCtrCntrlBas;
import com.palnet.biz.jpa.entity.QCtrCntrlHstry;
import com.palnet.biz.jpa.entity.QCtrCntrlHstryArea;
import com.palnet.biz.jpa.entity.QCtrCntrlWarnLog;
import com.palnet.biz.jpa.entity.QFltPlanArea;
import com.palnet.biz.jpa.entity.QFltPlanBas;
import com.palnet.biz.jpa.entity.QFltPlanCtrCntrlRel;
import com.palnet.biz.jpa.entity.QPtyCstmrGroup;
import com.palnet.biz.jpa.entity.QPtyGroupBas;
import com.palnet.comn.model.GPHistoryModel;
import com.palnet.comn.utils.DateUtils;
import com.palnet.comn.utils.InstantUtils;
@ -24,22 +54,9 @@ import com.querydsl.core.types.dsl.Expressions;
import com.querydsl.core.types.dsl.StringTemplate;
import com.querydsl.jpa.JPAExpressions;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Repository;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
@Log4j2
@Repository
@ -1672,11 +1689,11 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
}
/**
* 김포공항, 날짜별 통계 API
* 김포공항, 비행실적 통계 API
* @param yyyymm
* @return
*/
public List<MainDashStcsModel> mainKacDashStcsDay(String date, String[] formatParam){
public List<MainDashStcsModel> mainStcsFlight(String date, String idntfNum, String[] formatParam){
QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas;
StringTemplate formattedDate = Expressions.stringTemplate(
@ -1692,6 +1709,7 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
BooleanBuilder builder = new BooleanBuilder();
builder.and(bas.statusCd.eq("99"));
if(date != null && date.length() > 0) builder.and(formattedDate.eq(date));
if(idntfNum != null) builder.and(bas.idntfNum.eq(idntfNum));
List<MainDashStcsModel> result = query
.select(
@ -1703,7 +1721,7 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
)
.from(bas)
.where(builder)
.groupBy(formattedDate2)
.groupBy(formattedDate2)
.fetch();
if(result.size() <= 0){
@ -1717,6 +1735,53 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
return result;
}
/**
* 김포공항, 비정상상황 통계
* @param date
* @param formatParam
* @return
*/
public List<MainDashStcsModel> mainStcsWarningFlight(String date, String[] formatParam){
// QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas;
QCtrCntrlWarnLog bas = QCtrCntrlWarnLog.ctrCntrlWarnLog;
StringTemplate formattedDate = Expressions.stringTemplate(
"DATE_FORMAT({0}, {1})"
, bas.createDt
, ConstantImpl.create(formatParam[0]));
StringTemplate formattedDate2 = Expressions.stringTemplate(
"DATE_FORMAT({0}, {1})"
, bas.createDt
, ConstantImpl.create(formatParam[1]));
BooleanBuilder builder = new BooleanBuilder();
if(date != null && date.length() > 0) builder.and(formattedDate.eq(date));
List<MainDashStcsModel> result = query
.select(
Projections.bean(
MainDashStcsModel.class ,
formattedDate2.as("typeCd"),
bas.cntrlId.countDistinct().as("count")
)
)
.from(bas)
.where(builder)
.groupBy(formattedDate2)
.fetch();
if(result.size() <= 0){
MainDashStcsModel node = new MainDashStcsModel();
node.setCount(0);
node.setTypeCd("NoData");
result.add(node);
}
return result;
}
public List<CtrCntrlHstry> getCompleteInfo(String cntrlId){

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

@ -672,7 +672,7 @@ public class FltPlanQueryRepository {
* @param date
* @return
*/
public List<MainDashStcsModel> mainKacStcsPlanAllow(String date, String[] formatParam){
public List<MainDashStcsModel> mainStcsPlanAllow(String date, String[] formatParam){
QFltPlanBas bas = QFltPlanBas.fltPlanBas;

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

@ -1,19 +1,27 @@
package com.palnet.comn.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.StringReader;
import java.net.URLEncoder;
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 java.util.Objects;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.access.method.P;
import org.springframework.stereotype.Component;
import org.thymeleaf.TemplateEngine;
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.html.HtmlPipeline;
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.comn.code.ErrorCode;
import com.palnet.comn.exception.CustomException;
@Component
public class PdfUtils {
@Autowired
private HttpServletResponse response;
@Autowired
private TemplateEngine templateEngine;
@ -166,4 +177,55 @@ public class PdfUtils {
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