Browse Source

좌표로 가장 근접한 지역의 일몰/일출 정보 조회

pull/10/head
지대한 11 months ago
parent
commit
4b5e79f2ce
  1. 32
      pav-server/src/main/java/com/palnet/biz/api/comn/sunriseset/controller/ComnSunrisesetController.java
  2. 39
      pav-server/src/main/java/com/palnet/biz/api/comn/sunriseset/model/ComnSunrisesetCoordRq.java
  3. 2
      pav-server/src/main/java/com/palnet/biz/api/comn/sunriseset/model/ComnSunrisesetRq.java
  4. 27
      pav-server/src/main/java/com/palnet/biz/api/comn/sunriseset/service/ComnSunrisesetService.java
  5. 1
      pav-server/src/main/java/com/palnet/biz/jpa/repository/com/ComRiseSetBasRepository.java
  6. 33
      pav-server/src/main/java/com/palnet/biz/jpa/repository/com/ComRiseSetQueryRepository.java
  7. 16
      pav-server/src/main/resources/config/log/logback-spring.xml

32
pav-server/src/main/java/com/palnet/biz/api/comn/sunriseset/controller/ComnSunrisesetController.java

@ -3,6 +3,7 @@ package com.palnet.biz.api.comn.sunriseset.controller;
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.comn.sunriseset.model.ComnSunrisesetCoordRq;
import com.palnet.biz.api.comn.sunriseset.model.ComnSunrisesetRq;
import com.palnet.biz.api.comn.sunriseset.model.ComnSunrisesetRs;
import com.palnet.biz.api.comn.sunriseset.service.ComnSunrisesetService;
@ -41,9 +42,9 @@ public class ComnSunrisesetController {
private final ComnSunrisesetService comnSunrisesetService;
@ApiOperation(value = "LAANC 승인 상세 조회")
@ApiOperation(value = "일출/일몰 조회", notes = "기간내 모든 일출/일몰조회")
@Tag(name = "공통 API", description = "공통 API")
@GetMapping("/detail/{planSno}")
@GetMapping("/list")
public ResponseEntity<? extends BasicResponse> getSunRiseSetList(ComnSunrisesetRq rq) {
List<ComnSunrisesetRs> rs = null;
try {
@ -66,4 +67,31 @@ public class ComnSunrisesetController {
}
return ResponseEntity.ok().body(new SuccessResponse<>(rs));
}
@ApiOperation(value = "일출/일몰 조회(좌표)", notes = "기간내 근접한 지역의 일출/일몰 조회")
@Tag(name = "공통 API", description = "공통 API")
@GetMapping("/coord")
public ResponseEntity<? extends BasicResponse> getSunRiseSetByCoord(ComnSunrisesetCoordRq rq) {
ComnSunrisesetRs rs = null;
try {
log.debug(">>> rq : {}", rq);
rs = comnSunrisesetService.getSunRiseSetByCoord(rq);
// log.debug(">>> rs : {}", rs);
} catch (CustomException e) {
Map<String, Object> resultMap = new HashMap<String, Object>();
log.error("IGNORE : ", e);
resultMap.put("result", false);
resultMap.put("errorCode", e.getErrorCode());
resultMap.put("errorMessage", e.getMessage());
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
} 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<>(rs));
}
}

39
pav-server/src/main/java/com/palnet/biz/api/comn/sunriseset/model/ComnSunrisesetCoordRq.java

@ -0,0 +1,39 @@
package com.palnet.biz.api.comn.sunriseset.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiParam;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* packageName : com.palnet.biz.api.comn.sunriseset.model
* fileName : ComnSunrisesetCoordRq
* author : dhji
* date : 2023-10-15(015)
* description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023-10-15(015) dhji 최초 생성
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ComnSunrisesetCoordRq {
@ApiParam(value = "시작일자", defaultValue = "20231101", example = "20231101", required = true)
private String locStDate;
@ApiParam(value = "종료일자", defaultValue = "20231231", example = "20231231", required = true)
private String locEndDate;
@ApiParam(value = "위도", defaultValue = "37.4717452", example = "37.11", required = true)
private Double lat;
@ApiParam(value = "경도", defaultValue = "126.7081059", example = "127.11", required = true)
private Double lon;
@JsonIgnore
public boolean hasAllData() {
return (locStDate != null && !locStDate.isEmpty()) && (locEndDate != null && !locEndDate.isEmpty()) && lat != null && lon != null;
}
}

2
pav-server/src/main/java/com/palnet/biz/api/comn/sunriseset/model/ComnSunrisesetRq.java

@ -1,8 +1,6 @@
package com.palnet.biz.api.comn.sunriseset.model;
import io.swagger.annotations.ApiParam;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;

27
pav-server/src/main/java/com/palnet/biz/api/comn/sunriseset/service/ComnSunrisesetService.java

@ -1,17 +1,15 @@
package com.palnet.biz.api.comn.sunriseset.service;
import com.palnet.biz.api.comn.sunriseset.model.ComnSunrisesetCoordRq;
import com.palnet.biz.api.comn.sunriseset.model.ComnSunrisesetRq;
import com.palnet.biz.api.comn.sunriseset.model.ComnSunrisesetRs;
import com.palnet.biz.jpa.entity.ComRiseSetBas;
import com.palnet.biz.jpa.repository.com.ComRiseSetBasRepository;
import com.palnet.biz.jpa.repository.com.ComRiseSetQueryRepository;
import com.palnet.comn.code.ErrorCode;
import com.palnet.comn.exception.CustomException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.StopWatch;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.List;
/**
@ -30,23 +28,16 @@ import java.util.List;
@Service
public class ComnSunrisesetService {
private final ComRiseSetQueryRepository comRiseSetQueryRepository;
public List<ComnSunrisesetRs> getSunRiseSetList(ComnSunrisesetRq rq) {
String locStDate = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
String locEndDate = null;
if (rq != null) {
if (rq.getLocStDate() != null && !rq.getLocStDate().isEmpty()) {
locStDate = rq.getLocStDate();
}
if (rq.getLocEndDate() != null && !rq.getLocEndDate().isEmpty()) {
locEndDate = rq.getLocEndDate();
}
}
List<ComnSunrisesetRs> rs = comRiseSetQueryRepository.findAllBySearchTransform(rq);
return comRiseSetQueryRepository.findAllBySearchTransform(rq);
return rs;
}
public ComnSunrisesetRs getSunRiseSetByCoord(ComnSunrisesetCoordRq rq) {
if(rq == null || !rq.hasAllData()) throw new CustomException(ErrorCode.NON_VALID_PARAMETER);
return comRiseSetQueryRepository.findBySearchCoordTransform(rq);
}
}

1
pav-server/src/main/java/com/palnet/biz/jpa/repository/com/ComRiseSetBasRepository.java

@ -25,4 +25,5 @@ public interface ComRiseSetBasRepository extends JpaRepository<ComRiseSetBas, Co
@Query(value = "SELECT R FROM COM_RISE_SET_BAS R WHERE LOC_DATE >= :locStDate AND LOC_DATE <= :locEndDate", nativeQuery = true)
List<ComRiseSetBas> findByLocStDateAndLocEndDate(@Param("locStDate") String locStDate, @Param("locEndDate") String locEndDate);
}

33
pav-server/src/main/java/com/palnet/biz/jpa/repository/com/ComRiseSetQueryRepository.java

@ -1,11 +1,13 @@
package com.palnet.biz.jpa.repository.com;
import com.palnet.biz.api.comn.sunriseset.model.ComnSunrisesetCoordRq;
import com.palnet.biz.api.comn.sunriseset.model.ComnSunrisesetRq;
import com.palnet.biz.api.comn.sunriseset.model.ComnSunrisesetRs;
import com.palnet.biz.jpa.entity.ComRiseSetBas;
import com.palnet.biz.jpa.entity.QComRiseSetBas;
import com.querydsl.core.BooleanBuilder;
import com.querydsl.core.types.Projections;
import com.querydsl.core.types.dsl.Expressions;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -90,4 +92,35 @@ public class ComRiseSetQueryRepository {
return results;
}
public ComnSunrisesetRs findBySearchCoordTransform(ComnSunrisesetCoordRq rq) {
QComRiseSetBas bas = QComRiseSetBas.comRiseSetBas;
BooleanBuilder builder = new BooleanBuilder();
builder.and(bas.id.locDate.goe(rq.getLocStDate()));
builder.and(bas.id.locDate.loe(rq.getLocEndDate()));
return query
.select(Projections.bean(
ComnSunrisesetRs.class,
bas.id.location,
bas.sunrise.max().as("sunrise"),
bas.sunset.min().as("sunset"),
bas.civilm.max().as("civilm"),
bas.civile.min().as("civile")
))
.from(bas)
.where(builder)
.groupBy(bas.id.location)
.orderBy(Expressions.stringTemplate("ST_Distance_Sphere({0}, {1})",
Expressions.stringTemplate("POINT({0}, {1})",
rq.getLon(),
rq.getLat()
),
Expressions.stringTemplate("POINT({0}, {1})",
bas.lon,
bas.lat
)
).asc())
.fetchFirst();
}
}

16
pav-server/src/main/resources/config/log/logback-spring.xml

@ -44,23 +44,25 @@
</appender>
<!-- JDBC -->
<logger name="jdbc" level="OFF"/>
<logger name="jdbc.sqlonly" level="OFF"/>
<logger name="jdbc.audit" level="OFF"/>
<logger name="jdbc.resultset" level="OFF"/>
<logger name="jdbc.resultsettable" level="OFF"/>
<logger name="jdbc.sqlonly" level="OFF"/>
<logger name="jdbc.sqltiming" level="OFF"/>
<logger name="jdbc.connection" level="OFF"/>
<logger name="io.swagger.models.parameters.AbstractSerializableParameter" level="ERROR"/>
<!-- root -->
<!-- TRACE > DEBUG > INFO > WARN > ERROR, 대소문자 구분 안함 -->
<!-- profile 을 읽어서 appender 을 설정할수 있다.(phase별 파일을 안만들어도 되는 좋은 기능) -->
<springProfile name="local">
<logger name="jdbc.sqltiming" level="WARN"/>
<logger name="jdbc.sqltiming" level="DEBUG"/>
<logger name="jdbc.resultsettable" level="DEBUG"/>
<logger name="log4jdbc" level="WARN"/>
<logger name="com.palnet" level="DEBUG" />
<logger name="com.ibe.framework" level="DEBUG" />
<logger name="jdbc.resultsettable" level="WARN"/>
<root level="INFO">
<appender-ref ref="FILE" />
<appender-ref ref="CONSOLE" />
@ -68,9 +70,9 @@
</springProfile>
<springProfile name="!local">
<logger name="jdbc.sqltiming" level="WARN"/>
<logger name="jdbc.resultsettable" level="WARN"/>
<logger name="com.palnet" level="INFO"/>
<logger name="com.ibe.framework" level="INFO" />
<logger name="jdbc.resultsettable" level="WARN"/>
<root level="WARN">
<appender-ref ref="FILE" />
<appender-ref ref="CONSOLE" />

Loading…
Cancel
Save