Browse Source

비행통계 API 추가

pull/12/head
lkd9125(이경도) 11 months ago
parent
commit
9348e201ad
  1. 27
      pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java
  2. 14
      pav-server/src/main/java/com/palnet/biz/api/main/dash/model/FlightStcsModel.java
  3. 40
      pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java
  4. 233
      pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java

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

@ -3,10 +3,6 @@ package com.palnet.biz.api.main.dash.controller;
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;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
@ -21,11 +17,16 @@ 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.FlightStcsModel;
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;
import com.palnet.comn.code.RSErrorCode;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
@ -322,10 +323,17 @@ public class MainDashController {
}
@GetMapping("/stcs/flight/{type}")
public ResponseEntity<? extends BasicResponse> statistics(@RequestParam String cate, @RequestParam String date, @PathVariable String type){
@ApiOperation(value = "비행통계 cate = ['TIME', 'DISTANCE','FLT_COUNT'], type=['year','month','day','one-day']")
@Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API")
@ApiImplicitParams({
@ApiImplicitParam(name = "date",value = "날짜[2023]", dataTypeClass = String.class),
@ApiImplicitParam(name = "cate",value = "비행시간,거리,횟수[TIME]", dataTypeClass = String.class),
@ApiImplicitParam(name = "type",value = "날짜형식[month]", dataTypeClass = String.class)
})
public ResponseEntity<? extends BasicResponse> statistics(@RequestParam String cate, String date, @PathVariable String type){
log.warn("cate => {}, date => {}, type => {}", cate, date, type);
List<MainDashStcsModel> result = null;
FlightStcsModel result = new FlightStcsModel();
try {
String[] formatParam = null;
@ -333,8 +341,11 @@ public class MainDashController {
if(date == null) date = "";
formatParam = service.paramCheck(date,type);
List<FlightStaticStcsModel> graphData = service.fltStatics(cate, date, formatParam);
List<FlightStaticStcsModel> topData = service.fltTopStatics(cate, date, formatParam);
result.setGraphData(graphData);
result.setTopData(topData);
log.warn("result => {}", result);
} catch (Exception e) {
@ -343,7 +354,7 @@ public class MainDashController {
.body(new ErrorResponse("Server Error", "-1"));
}
return ResponseEntity.ok().body(new SuccessResponse<List<MainDashStcsModel>>(result));
return ResponseEntity.ok().body(new SuccessResponse<FlightStcsModel>(result));
}
}

14
pav-server/src/main/java/com/palnet/biz/api/main/dash/model/FlightStcsModel.java

@ -0,0 +1,14 @@
package com.palnet.biz.api.main.dash.model;
import java.util.List;
import lombok.Data;
@Data
public class FlightStcsModel {
private List<FlightStaticStcsModel> graphData;
private List<FlightStaticStcsModel> topData;
}

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

@ -247,9 +247,45 @@ public class MainDashService {
* @param formatParam
* @return
*/
public List<FlightStaticStcsModel> statics(String date, String[] formatParam){
public List<FlightStaticStcsModel> fltStatics(String cate, String date, String[] formatParam){
List<FlightStaticStcsModel> resultList = query.fltTimeStcs(date, formatParam);
List<FlightStaticStcsModel> resultList = null;
switch (cate) {
case "TIME":
resultList = query.fltTimeStcs(date, formatParam);
break;
case "DISTANCE":
resultList = query.fltDistanceStcs(date, formatParam);
break;
case "FLT_COUNT":
resultList = query.fltCountStcs(date, formatParam);
break;
}
return resultList;
}
public List<FlightStaticStcsModel> fltTopStatics(String cate, String date, String[] formatParam){
List<FlightStaticStcsModel> resultList = null;
switch (cate) {
case "TIME":
resultList = query.fltTopTimeStcs(date, formatParam);
break;
case "DISTANCE":
resultList = query.fltTopDistanceStcs(date, formatParam);
break;
case "FLT_COUNT":
resultList = query.fltTopCountStcs(date, formatParam);
break;
}
return resultList;
}

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

@ -1974,4 +1974,237 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
return result;
}
/**
* 비행통계 카테고리 거리
* @param date
* @param formatParam
* @return
*/
public List<FlightStaticStcsModel> fltDistanceStcs(String date, String[] formatParam){
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"),
bas.ttlDstnc.sum().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;
}
/**
* 비행통계 카테고리 비행횟수
* @param date
* @param formatParam
* @return
*/
public List<FlightStaticStcsModel> fltCountStcs(String date, String[] formatParam){
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"),
bas.cntrlId.count().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;
}
/**
* 비행 시간, 날짜데이터에 맞춘 TOP5
* @param date
* @param formatParam
* @return
*/
public List<FlightStaticStcsModel> fltTopTimeStcs(String date, String[] formatParam){
QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas;
StringTemplate formattedDate = Expressions.stringTemplate(
"DATE_FORMAT({0}, {1})"
, bas.createDt
, ConstantImpl.create(formatParam[0]));
BooleanBuilder builder = new BooleanBuilder();
if(date != null && date.length() > 0) builder.and(formattedDate.eq(date));
List<FlightStaticStcsModel> result = query
.select(
Projections.bean(FlightStaticStcsModel.class,
bas.idntfNum.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(bas.idntfNum)
.orderBy(Expressions.stringTemplate(
"SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF({0}, {1}))))",
bas.cntrlEndDt,
bas.cntrlStDt
).desc())
.limit(5)
.fetch();
if(result.size() <= 0){
FlightStaticStcsModel node = new FlightStaticStcsModel();
node.setName(null);
node.setValue("NoData");
result.add(node);
}
return result;
}
/**
* 비행 거리, 날짜데이터에 맞춘 TOP5
* @param date
* @param formatParam
* @return
*/
public List<FlightStaticStcsModel> fltTopDistanceStcs(String date, String[] formatParam){
QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas;
StringTemplate formattedDate = Expressions.stringTemplate(
"DATE_FORMAT({0}, {1})"
, bas.createDt
, ConstantImpl.create(formatParam[0]));
BooleanBuilder builder = new BooleanBuilder();
if(date != null && date.length() > 0) builder.and(formattedDate.eq(date));
List<FlightStaticStcsModel> result = query
.select(
Projections.bean(FlightStaticStcsModel.class,
bas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정
bas.ttlDstnc.sum().as("value")
)
)
.from(bas)
.where(builder)
.groupBy(bas.idntfNum)
.orderBy(bas.ttlDstnc.sum().desc())
.limit(5)
.fetch();
if(result.size() <= 0){
FlightStaticStcsModel node = new FlightStaticStcsModel();
node.setName(null);
node.setValue("NoData");
result.add(node);
}
return result;
}
/**
* 비행 횟수, 날짜데이터에 맞춘 TOP5
* @param date
* @param formatParam
* @return
*/
public List<FlightStaticStcsModel> fltTopCountStcs(String date, String[] formatParam){
QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas;
StringTemplate formattedDate = Expressions.stringTemplate(
"DATE_FORMAT({0}, {1})"
, bas.createDt
, ConstantImpl.create(formatParam[0]));
BooleanBuilder builder = new BooleanBuilder();
if(date != null && date.length() > 0) builder.and(formattedDate.eq(date));
List<FlightStaticStcsModel> result = query
.select(
Projections.bean(FlightStaticStcsModel.class,
bas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정
bas.cntrlId.count().as("value")
)
)
.from(bas)
.where(builder)
.groupBy(bas.idntfNum)
.orderBy(bas.cntrlId.count().desc())
.limit(5)
.fetch();
if(result.size() <= 0){
FlightStaticStcsModel node = new FlightStaticStcsModel();
node.setName(null);
node.setValue("NoData");
result.add(node);
}
return result;
}
}

Loading…
Cancel
Save