Browse Source

통계 API, 비행상단 고정 데이터 API추가

pull/12/head
lkd9125(이경도) 11 months ago
parent
commit
1a81341c7f
  1. 50
      pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java
  2. 12
      pav-server/src/main/java/com/palnet/biz/api/main/dash/model/FlightStaticStcsModel.java
  3. 38
      pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java
  4. 2
      pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlBasRepository.java
  5. 156
      pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java
  6. 1
      pav-server/src/main/java/com/palnet/biz/scheduler/ctr/service/CtrSchedulerService.java

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

@ -20,6 +20,7 @@ import org.springframework.web.bind.annotation.RestController;
import com.palnet.biz.api.comn.response.BasicResponse;
import com.palnet.biz.api.comn.response.ErrorResponse;
import com.palnet.biz.api.comn.response.SuccessResponse;
import com.palnet.biz.api.main.dash.model.FlightStaticStcsModel;
import com.palnet.biz.api.main.dash.model.MainDashListModel;
import com.palnet.biz.api.main.dash.model.MainDashStcsModel;
import com.palnet.biz.api.main.dash.service.MainDashService;
@ -169,6 +170,7 @@ public class MainDashController {
@ApiImplicitParam(name = "date",value = "날짜", dataTypeClass = String.class),
@ApiImplicitParam(name = "type",value = "날짜형식", dataTypeClass = String.class)
})
@Deprecated
public ResponseEntity<? extends BasicResponse> flightStatistics(String date, @PathVariable String type){
String[] formatParam = null;
@ -202,6 +204,7 @@ public class MainDashController {
@ApiImplicitParam(name = "date",value = "날짜", dataTypeClass = String.class),
@ApiImplicitParam(name = "type",value = "날짜형식", dataTypeClass = String.class)
})
@Deprecated
public ResponseEntity<? extends BasicResponse> planAllowStatistics(String date ,@PathVariable String type){
String[] formatParam = null;
@ -236,6 +239,7 @@ public class MainDashController {
@ApiImplicitParam(name = "type",value = "날짜형식", dataTypeClass = String.class),
@ApiImplicitParam(name = "idntfNum",value = "드론식별번호", dataTypeClass = String.class),
})
@Deprecated
public ResponseEntity<? extends BasicResponse> droneFlightStatistics(String date, @RequestParam(required = true) String idntfNum, @PathVariable String type){
log.info("idntfNum -> {}", idntfNum);
@ -270,6 +274,7 @@ public class MainDashController {
@ApiImplicitParam(name = "date",value = "날짜", dataTypeClass = String.class),
@ApiImplicitParam(name = "type",value = "날짜형식", dataTypeClass = String.class)
})
@Deprecated
public ResponseEntity<? extends BasicResponse> warningFlightStatistics(String date, @PathVariable String type){
String[] formatParam = null;
@ -296,4 +301,49 @@ public class MainDashController {
return ResponseEntity.ok().body(new SuccessResponse<List<MainDashStcsModel>>(result));
}
@GetMapping("/stcs/flight-static")
@ApiOperation(value = "비행통계 상단 데이터[DB전체 통계데이터]")
@Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API")
public ResponseEntity<? extends BasicResponse> statisticsStatic(){
List<FlightStaticStcsModel> result = null;
try {
result = service.getFlightStaticStcs();
log.warn("result => {}", result);
} 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<FlightStaticStcsModel>>(result));
}
@GetMapping("/stcs/flight/{type}")
public ResponseEntity<? extends BasicResponse> statistics(@RequestParam String cate, @RequestParam String date, @PathVariable String type){
log.warn("cate => {}, date => {}, type => {}", cate, date, type);
List<MainDashStcsModel> result = null;
try {
String[] formatParam = null;
if(date == null) date = "";
formatParam = service.paramCheck(date,type);
log.warn("result => {}", result);
} 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));
}
}

12
pav-server/src/main/java/com/palnet/biz/api/main/dash/model/FlightStaticStcsModel.java

@ -0,0 +1,12 @@
package com.palnet.biz.api.main.dash.model;
import lombok.Data;
@Data
public class FlightStaticStcsModel {
private String name;
private Object value;
}

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

@ -1,6 +1,7 @@
package com.palnet.biz.api.main.dash.service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -9,17 +10,22 @@ import java.util.stream.Collectors;
import com.palnet.biz.api.bas.group.model.BasGroupModel;
import com.palnet.biz.jpa.repository.pty.*;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.palnet.biz.api.main.dash.model.FlightStaticStcsModel;
import com.palnet.biz.api.main.dash.model.MainDashListModel;
import com.palnet.biz.api.main.dash.model.MainDashStcsModel;
import com.palnet.biz.jpa.repository.ctr.CtrCntrlBasRepository;
import com.palnet.biz.jpa.repository.ctr.CtrCntrlQueryRepository;
import com.palnet.biz.jpa.repository.flt.FltPlanQueryRepository;
@Service
@Slf4j
public class MainDashService {
private Logger logger = LoggerFactory.getLogger(getClass());
@ -36,6 +42,9 @@ public class MainDashService {
@Autowired
private CtrCntrlQueryRepository query;
@Autowired
private CtrCntrlBasRepository cntrlBasRepository;
@ -215,4 +224,33 @@ public class MainDashService {
return result;
}
/**
* 비행관련 고정 통계, 항상 DB 전체값에서 통계진행할것임
* @return
*/
public List<FlightStaticStcsModel> getFlightStaticStcs(){
FlightStaticStcsModel time = query.getFlightTimeStcs();
FlightStaticStcsModel distance = query.getFlightDistanceStcs();
FlightStaticStcsModel fltCount = query.getFlightCountStcs();
List<FlightStaticStcsModel> result = Arrays.asList(time, distance, fltCount);
return result;
}
/**
* 김포공항, 비정상상황 통계
* @param idntfNum
* @param date
* @param formatParam
* @return
*/
public List<FlightStaticStcsModel> statics(String date, String[] formatParam){
List<FlightStaticStcsModel> resultList = query.fltTimeStcs(date, formatParam);
return resultList;
}
}

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

@ -6,6 +6,7 @@ import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import com.palnet.biz.api.main.dash.model.FlightStaticStcsModel;
import com.palnet.biz.jpa.entity.CtrCntrlBas;
import org.springframework.transaction.annotation.Transactional;
@ -45,4 +46,5 @@ public interface CtrCntrlBasRepository extends JpaRepository<CtrCntrlBas, String
@Query(value = " select IDNTF_NUM from CTR_CNTRL_BAS " +
"where CNTRL_ID = :cntrlId ", nativeQuery = true )
String getIdntfNum(@Param("cntrlId") String cntrlId);
}

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

@ -7,6 +7,8 @@ import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.persistence.criteria.Expression;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
@ -26,6 +28,7 @@ import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlDtlModel;
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.FlightStaticStcsModel;
import com.palnet.biz.api.main.dash.model.MainDashStcsModel;
import com.palnet.biz.jpa.entity.ComArcrftBas;
import com.palnet.biz.jpa.entity.ComIdntfBas;
@ -54,6 +57,7 @@ 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 com.querydsl.sql.SQLExpressions;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
@ -1713,6 +1717,10 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
, bas.cntrlStDt
, ConstantImpl.create(formatParam[1]));
// result[0] = "%Y";
// result[1] = "%m";
BooleanBuilder builder = new BooleanBuilder();
builder.and(bas.statusCd.eq("99"));
if(date != null && date.length() > 0) builder.and(formattedDate.eq(date));
@ -1818,4 +1826,152 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
return result;
}
/**
* DB 데이터내에 가장 많은 비행시간을 가진 기체, 비행시간 SELECT
* @return
*/
public FlightStaticStcsModel getFlightTimeStcs(){
FlightStaticStcsModel result = new FlightStaticStcsModel();
QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas;
List<FlightStaticStcsModel> queryResult = query
.select(
Projections.bean(FlightStaticStcsModel.class,
qCtrCntrlBas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정
Expressions.stringTemplate(
"CONCAT(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF({0}, {1})))))",
qCtrCntrlBas.cntrlEndDt,
qCtrCntrlBas.cntrlStDt
).as("value") // 결과 객체의 프로퍼티 이름을 지정
)
)
.from(qCtrCntrlBas)
.groupBy(qCtrCntrlBas.idntfNum)
.orderBy(Expressions.stringTemplate(
"SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF({0}, {1}))))",
qCtrCntrlBas.cntrlEndDt,
qCtrCntrlBas.cntrlStDt
).desc())
.limit(1)
.fetch();
if(queryResult.size() > 0){
result = queryResult.get(0);
}
return result;
}
/**
* 가장 많이 이동한 기체
* @return
*/
public FlightStaticStcsModel getFlightDistanceStcs(){
FlightStaticStcsModel result = new FlightStaticStcsModel();
QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas;
List<FlightStaticStcsModel> queryResult = query
.select(
Projections.bean(FlightStaticStcsModel.class,
qCtrCntrlBas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정
qCtrCntrlBas.ttlDstnc.sum().as("value")
)
)
.from(qCtrCntrlBas)
.groupBy(qCtrCntrlBas.idntfNum)
.orderBy(qCtrCntrlBas.ttlDstnc.sum().desc())
.limit(1)
.fetch();
if(queryResult.size() > 0){
result = queryResult.get(0);
}
return result;
}
/**
* 가장 많이 비행한 기체
* @return
*/
public FlightStaticStcsModel getFlightCountStcs(){
FlightStaticStcsModel result = new FlightStaticStcsModel();
QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas;
List<FlightStaticStcsModel> queryResult = query
.select(
Projections.bean(FlightStaticStcsModel.class,
qCtrCntrlBas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정
qCtrCntrlBas.cntrlId.count().as("value")
)
)
.from(qCtrCntrlBas)
.groupBy(qCtrCntrlBas.idntfNum)
.orderBy(qCtrCntrlBas.cntrlId.count().desc())
.limit(1)
.fetch();
if(queryResult.size() > 0){
result = queryResult.get(0);
}
return result;
}
/**
* 비행통계 카테고리 시간
* @param date
* @param formatParam
* @return
*/
public List<FlightStaticStcsModel> fltTimeStcs(String date, String[] formatParam){
// QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas;
QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas;
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<FlightStaticStcsModel> result = query
.select(
Projections.bean(
FlightStaticStcsModel.class ,
formattedDate2.as("name"),
Expressions.stringTemplate(
"CONCAT(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF({0}, {1})))))",
bas.cntrlEndDt,
bas.cntrlStDt
).as("value")
)
)
.from(bas)
.where(builder)
.groupBy(formattedDate2)
.fetch();
if(result.size() <= 0){
FlightStaticStcsModel node = new FlightStaticStcsModel();
node.setName(null);
node.setValue("NoData");
result.add(node);
}
return result;
}
}

1
pav-server/src/main/java/com/palnet/biz/scheduler/ctr/service/CtrSchedulerService.java

@ -71,6 +71,7 @@ public class CtrSchedulerService {
ctrCntrlHstryAreaRepository.save(area);
// 총 비행거리 Update
Double distance = getDistancSum(history.getCntrlId());
if(distance == null) log.error("No Search - CntrlId => {}", history.getCntrlId());

Loading…
Cancel
Save