diff --git a/pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java b/pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java index dca97cce..b0fbe48e 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java @@ -11,16 +11,9 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; 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.RestController; -import com.palnet.biz.api.anls.hstry.model.AnlsHstryDetailModel; -import com.palnet.biz.api.anls.hstry.model.AnlsHstryModel; -import com.palnet.biz.api.anls.hstry.model.AnlsHstryRqModel; -import com.palnet.biz.api.anls.smlt.model.AnlsSmltDetailModel; -import com.palnet.biz.api.anls.smlt.model.AnlsSmltStcsModel; -import com.palnet.biz.api.anls.smlt.service.AnlsSmltService; import com.palnet.biz.api.comn.response.BasicResponse; import com.palnet.biz.api.comn.response.ErrorResponse; import com.palnet.biz.api.comn.response.SuccessResponse; @@ -28,7 +21,6 @@ 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 com.palnet.comn.utils.JsonUtils; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; @@ -64,8 +56,7 @@ public class MainDashController { try { - result = service.mainDashStcsDay(yyyymm); - + result = service.mainDashStcsDay(yyyymm); } catch (Exception e) { log.error("IGNORE : {}", e); @@ -167,7 +158,35 @@ public class MainDashController { } - + @GetMapping(value = "/kac/stcs/date") + @ApiOperation(value = "김포공항, 날짜 통계") + @Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API") + @ApiImplicitParam(name = "yyyymm",value = "날짜", dataTypeClass = String.class) + public ResponseEntity kacDateStatistics(String yyyymm){ + + String[] formatParam = null; + + try { + if(yyyymm == null) yyyymm = ""; + formatParam = service.paramCheck(yyyymm); + } catch (NumberFormatException e) { + return ResponseEntity.status(HttpStatus.OK) + .body(new ErrorResponse(RSErrorCode.ER_PARAM)); + } + + List result = null; + + try { + result = service.mainKacDashStcsDay(yyyymm,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(result)); + } } diff --git a/pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java b/pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java index 9783c4cc..e3500e1a 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java @@ -8,6 +8,9 @@ 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; @@ -19,6 +22,7 @@ import com.palnet.biz.jpa.repository.ctr.CtrCntrlBasRepository; import com.palnet.biz.jpa.repository.ctr.CtrCntrlQueryRepository; @Service +@Slf4j public class MainDashService { private Logger logger = LoggerFactory.getLogger(getClass()); @@ -95,6 +99,83 @@ public class MainDashService { return resultList; } + + /** + * 김포공항, 날짜별 통계 + * @param yyyymm + * @return + */ + public List mainKacDashStcsDay(String yyyymm, String[] formatParam){ + + List resultList = query.mainKacDashStcsDay(yyyymm, formatParam); + + return resultList; + } + + /** + * 파라미터 체크 + * 1. 연단위 검색 -> Parameter Null일 경우 + * 2. 월단위 검색 -> Parameter 2023등 연도만 있는경우 + * 3. 일단위 검색 -> Parameter 2023-09 등 월까지 있는경우 + * 4. 일일단위 검색 -> Parameter 2023-09-01 등 한 날짜에 대한 검색 + * 이하 모든 데이터는 Exception 발생 + * @param yyyyMM + * @throws NumberFormatException + */ + public String[] paramCheck(String yyyymm) throws NumberFormatException{ + + String[] result = new String[2]; + + yyyymm = yyyymm.trim(); + String[] paramStrings = yyyymm.split("-"); + + switch (yyyymm.length()) { + case 4: // 2. 월단위 검색 -> Parameter 2023등 연도만 있는경우 + Integer.parseInt(yyyymm.trim()); + + result[0] = "%Y"; + result[1] = "%m"; + break; + case 7: // 3. 일단위 검색 -> Parameter 2023-09 등 월까지 있는경우 + + if(paramStrings.length == 2){ + for(String param : paramStrings){ + Integer.parseInt(param.trim()); + } + + result[0] = "%Y-%m"; + result[1] = "%d"; + } else { + throw new NumberFormatException(); + } + + break; + case 10: // 4. 일일단위 검색 -> Parameter 2023-09-01 등 한 날짜에 대한 검색 + + if(paramStrings.length == 3){ + for(String param : paramStrings){ + + Integer.parseInt(param.trim()); + } + + result[0] = "%Y-%m-%d"; + result[1] = "%d"; + } else { + throw new NumberFormatException(); + } + break; + default: // 1. 연단위 검색 -> Parameter Null일 경우 + if(paramStrings.length > 0) throw new NumberFormatException(); + + result[0] = ""; + result[1] = "%y"; + break; + } + + return result; + } + + diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java index 9dc3c227..65ad442b 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java @@ -33,6 +33,7 @@ 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; @@ -1669,4 +1670,51 @@ public List listCntrlHstry(String id){ // // return arcrftList; } + + /** + * 김포공항, 날짜별 통계 API + * @param yyyymm + * @return + */ + public List mainKacDashStcsDay(String yyyymm, String[] formatParam){ + QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; + + StringTemplate formattedDate = Expressions.stringTemplate( + "DATE_FORMAT({0}, {1})" + , bas.cntrlStDt + , ConstantImpl.create(formatParam[0])); + + StringTemplate formattedDate2 = Expressions.stringTemplate( + "DATE_FORMAT({0}, {1})" + , bas.cntrlStDt + , ConstantImpl.create(formatParam[1])); + + BooleanBuilder builder = new BooleanBuilder(); + builder.and(bas.statusCd.eq("99")); + if(yyyymm != null && yyyymm.length() > 0) builder.and(formattedDate.eq(yyyymm)); + + List result = query + .select( + Projections.bean( + MainDashStcsModel.class , + formattedDate2.as("typeCd"), + bas.count().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; + } }