Browse Source

feat: 통계 상단 API CPT_CD 구분자 계산 추가, 통계 하단 CPT_CD 컬럼추가

feature/dos/statistics
lkd9125(이경도) 1 week ago
parent
commit
e46a819b4c
  1. 8
      pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/AllStatDataRS.java
  2. 2
      pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/CptStatRS.java
  3. 3
      pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java
  4. 61
      pav-server/src/main/java/com/palnet/biz/jpa/repository/dos/DosFltPlanAreaQueryRepository.java

8
pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/AllStatDataRS.java

@ -25,4 +25,12 @@ public class AllStatDataRS {
private Long day;
}
@Data
public static class CptCountModel{
private String cptName;
private Long count;
}
}

2
pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/CptStatRS.java

@ -16,6 +16,8 @@ public class CptStatRS {
private String cptName; // 관할청 이름
private String cptCd;
private List<DateCountModel> countModel; // 카운트
private List<CoordinateModel> coordinateModels; // 중심좌표

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

@ -1361,7 +1361,8 @@ public class CtrCntrlQueryRepository{
.from(qCntrlBasEntity)
.leftJoin(qCtrCntrHstry)
.on(qCntrlBasEntity.cntrlId.eq(qCtrCntrHstry.cntrlId))
.where(builder) .orderBy(qCtrCntrHstry.hstrySno.asc())
.where(builder)
.orderBy(qCtrCntrHstry.hstrySno.asc())
.fetch();
return result;

61
pav-server/src/main/java/com/palnet/biz/jpa/repository/dos/DosFltPlanAreaQueryRepository.java

@ -20,7 +20,10 @@ import org.springframework.stereotype.Repository;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Repository
@Slf4j
@ -35,8 +38,53 @@ public class DosFltPlanAreaQueryRepository {
QDosFltPlanArea qDosFltPlanArea = QDosFltPlanArea.dosFltPlanArea;
QDosFltPlanBas qDosFltPlanBas = QDosFltPlanBas.dosFltPlanBas;
// TODO :: CPT_CD가 추가 되면 사용할 것, 가장 신청이 많은 항공청 코드를 가져와야함
// String cptCd = "";
// TODO :: CPT_CD의 데이터가 없음으로 임시 F0002처리
StringTemplate ifTemplate = Expressions.stringTemplate("CASE WHEN {0} IS NULL THEN 'F0002' ELSE {0} END", qDosFltPlanArea.cptCd);
Map<String, Long> cptCountModels = query
.select(
Projections.bean(
AllStatDataRS.CptCountModel.class,
ifTemplate.as("cptName"),
qDosFltPlanArea.count().as("count")
)
)
.from(qDosFltPlanArea)
.groupBy(qDosFltPlanArea.cptCd)
.fetch()
.stream()
.collect(Collectors.toMap(
AllStatDataRS.CptCountModel::getCptName,
AllStatDataRS.CptCountModel::getCount
));
for(Map.Entry<String, Long> entry : cptCountModels.entrySet()){
String[] cptCdArray = entry.getKey().split(",");
if(cptCdArray.length > 1) continue;
for(String cptCd : cptCdArray){
Long newCount = cptCountModels.get(cptCd) + entry.getValue();
cptCountModels.put(cptCd, newCount);
}
}
// 정렬
Long max = -1000L;
String cptCd = "";
for(Map.Entry<String, Long> entry : cptCountModels.entrySet()){
Long value = entry.getValue();
if(value > max){
max = value;
cptCd = entry.getKey();
}
}
Integer year = LocalDate.now().getYear();
Integer month = LocalDate.now().getMonth().getValue();
@ -46,7 +94,7 @@ public class DosFltPlanAreaQueryRepository {
NumberTemplate<Long> todayTemplate = Expressions.numberTemplate(Long.class, "COUNT(CASE WHEN DATE({0}) = CURDATE() THEN 1 END)", qDosFltPlanBas.applyDt);
BooleanBuilder builder = new BooleanBuilder();
// builder.and(qDosFltPlanArea.cptCd.eq(cptCd));
builder.and(qDosFltPlanArea.cptCd.contains(cptCd));
AllStatDataRS.GroupModel groupModel = query
.select(
@ -63,7 +111,7 @@ public class DosFltPlanAreaQueryRepository {
.on(qDosFltPlanArea.planSno.eq(qDosFltPlanBas.planSno))
.fetchOne();
// groupModel.setGroupName(cptCd);
groupModel.setGroupName(cptCd);
return groupModel;
}
@ -80,8 +128,6 @@ public class DosFltPlanAreaQueryRepository {
for(StatisticsDosService.CompetentAgency competnetAgency : constants){
String cptCd = competnetAgency.name();
String format = this.getFormat(rq.getCategory());
StringTemplate formattedDate = Expressions.stringTemplate("DATE_FORMAT({0},{1})", qDosFltPlanBas.applyDt , format);
@ -124,9 +170,10 @@ public class DosFltPlanAreaQueryRepository {
CptStatRS.CptStat cptStatModel = new CptStatRS.CptStat();
cptStatModel.setCptName(competnetAgency.getDesc());
cptStatModel.setCptCd(competnetAgency.name());
// TODO :: CPT_CD 나오기전 임시 코드
if(cptCd.equals("F0002")){
if(competnetAgency.name().equals("F0002")){
cptStatModel.setCountModel(countModel);
cptStatModel.setCoordinateModels(coordinateModels);
}

Loading…
Cancel
Save