From 6670dfd803a708f7da1adf8d90fceab61226eb71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dhji=28=EC=A7=80=EB=8C=80=ED=95=9C=29?= Date: Wed, 28 Feb 2024 00:30:41 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20kac-app=20control=20=EC=A0=95=EB=B3=B4?= =?UTF-8?q?=20=EA=B0=80=EC=A0=B8=EC=98=A4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/kac-app/build.gradle | 5 +- .../controller/InnerSocketController.java | 37 ++++++++ .../socket/service/InnerSocketService.java | 85 +++++++++++++++++++ .../ctr/repository/CtrCntrlBasRepository.java | 4 + .../repository/CtrCntrlHstryRepository.java | 3 + 5 files changed, 132 insertions(+), 2 deletions(-) create mode 100644 app/kac-app/src/main/java/kr/co/palnet/kac/app/api/v1/inner/socket/controller/InnerSocketController.java create mode 100644 app/kac-app/src/main/java/kr/co/palnet/kac/app/api/v1/inner/socket/service/InnerSocketService.java diff --git a/app/kac-app/build.gradle b/app/kac-app/build.gradle index 215278e..d73864c 100644 --- a/app/kac-app/build.gradle +++ b/app/kac-app/build.gradle @@ -21,7 +21,7 @@ dependencies { // implementation "org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4:1.16" implementation("org.springframework:spring-tx") // jpa -// implementation "$boot:spring-boot-starter-data-jpa" + implementation "$boot:spring-boot-starter-data-jpa" // querydsl // implementation "com.querydsl:querydsl-jpa:5.0.0:jakarta" @@ -37,12 +37,13 @@ dependencies { implementation project(":common:core") // implementation project(":common:config-db") implementation project(":common:util") + implementation project(":common:model") implementation project(":web:security") implementation project(":web:api-common") + implementation project(":data:ctr") // implementation project(":data:cns") // implementation project(":data:com") -// implementation project(":data:ctr") // implementation project(":data:flt") // implementation project(":data:other") // implementation project(":data:pty") diff --git a/app/kac-app/src/main/java/kr/co/palnet/kac/app/api/v1/inner/socket/controller/InnerSocketController.java b/app/kac-app/src/main/java/kr/co/palnet/kac/app/api/v1/inner/socket/controller/InnerSocketController.java new file mode 100644 index 0000000..ecc7c09 --- /dev/null +++ b/app/kac-app/src/main/java/kr/co/palnet/kac/app/api/v1/inner/socket/controller/InnerSocketController.java @@ -0,0 +1,37 @@ +package kr.co.palnet.kac.app.api.v1.inner.socket.controller; + +import kr.co.palnet.kac.app.api.v1.inner.socket.service.InnerSocketService; +import kr.co.palnet.kac.common.model.common.DronDto; +import kr.co.palnet.kac.common.model.common.SimpleControlDto; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/v1/inner/socket") +public class InnerSocketController { + + private final InnerSocketService innerSocketService; + + // dorn의 control 조회 + public ResponseEntity getControlId(String objectId) { + log.debug(">>>>> getControlId <<<<<"); + log.debug(">>>>> objectId : {} <<<<<", objectId); + SimpleControlDto simpleControlDto = innerSocketService.getControlId(objectId); + return ResponseEntity.ok(simpleControlDto); + } + // dron 정보 저장 + @PostMapping("/receiver/dron") + public ResponseEntity receiverDronData(@RequestBody DronDto dronDto) { + log.debug(">>>>> receiver <<<<<"); + innerSocketService.setDronData(dronDto); + return ResponseEntity.ok().build(); + } + +} diff --git a/app/kac-app/src/main/java/kr/co/palnet/kac/app/api/v1/inner/socket/service/InnerSocketService.java b/app/kac-app/src/main/java/kr/co/palnet/kac/app/api/v1/inner/socket/service/InnerSocketService.java new file mode 100644 index 0000000..487d36c --- /dev/null +++ b/app/kac-app/src/main/java/kr/co/palnet/kac/app/api/v1/inner/socket/service/InnerSocketService.java @@ -0,0 +1,85 @@ +package kr.co.palnet.kac.app.api.v1.inner.socket.service; + +import kr.co.palnet.kac.common.model.common.DronDto; +import kr.co.palnet.kac.common.model.common.SimpleControlDto; +import kr.co.palnet.kac.data.ctr.model.CtrCntrlBas; +import kr.co.palnet.kac.data.ctr.model.CtrCntrlHstry; +import kr.co.palnet.kac.data.ctr.repository.CtrCntrlBasRepository; +import kr.co.palnet.kac.data.ctr.repository.CtrCntrlHstryRepository; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.util.List; +import java.util.UUID; + +@Slf4j +@RequiredArgsConstructor +@Service +@Transactional +public class InnerSocketService { + + private final CtrCntrlBasRepository ctrCntrlBasRepository; + private final CtrCntrlHstryRepository ctrCntrlHstryRepository; + + public SimpleControlDto getControlId(String objectId) { + log.debug(">>>>> getControlId <<<<<"); + log.debug(">>>>> objectId : {} <<<<<", objectId); + CtrCntrlBas latestControl = ctrCntrlBasRepository.findFirstByIdntfNumOrderByCreateDtDesc(objectId).orElse(null); + boolean isControl = false; + if (latestControl != null) { + CtrCntrlHstry latestHistory = ctrCntrlHstryRepository.findFirstByCntrlIdOrderBySrvrRcvDtDesc(latestControl.getCntrlId()).orElse(null); + + if (latestHistory != null) { + long diffMinute = ChronoUnit.MINUTES.between(latestHistory.getSrvrRcvDt(), Instant.now()); +// log.info("DIFF MINUTE : {}", diffMinute); + + if ("01".equals(latestControl.getEndTypeCd()) || diffMinute > 5) { + isControl = false; + } + if (!"01".equals(latestControl.getEndTypeCd()) && diffMinute < 5) { + isControl = true; + } + } else { + isControl = false; + } + + } else { + isControl = false; + } + + SimpleControlDto simpleControlDto = new SimpleControlDto(); + if (isControl) { + simpleControlDto.setControlId(latestControl.getCntrlId()); + simpleControlDto.setTypeCd("02"); + simpleControlDto.setAreaTrnsYn("E"); + } else { + simpleControlDto.setControlId(UUID.randomUUID().toString()); + simpleControlDto.setTypeCd("01"); + simpleControlDto.setAreaTrnsYn("N"); + + // 기체 식별번호의 관제 ID 저장 (single ton) +// shareContext.putIdntfKey(id, controlID); + } + + return simpleControlDto; + } + + public static void main(String[] args) { + Instant now = Instant.now(); + Instant d = now.plus(12, ChronoUnit.MINUTES); + long diffMinutes = ChronoUnit.MINUTES.between(now, d); + System.out.println(diffMinutes); + long diffMinutes2 = ChronoUnit.MINUTES.between(d, now); + System.out.println(diffMinutes2); + } + + // socket으로부터 받은 dron 정보 저장 + public void setDronData(DronDto dronDto) { + // TODO + } +} diff --git a/data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/repository/CtrCntrlBasRepository.java b/data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/repository/CtrCntrlBasRepository.java index 08debca..aa6618c 100644 --- a/data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/repository/CtrCntrlBasRepository.java +++ b/data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/repository/CtrCntrlBasRepository.java @@ -3,6 +3,10 @@ package kr.co.palnet.kac.data.ctr.repository; import kr.co.palnet.kac.data.ctr.model.CtrCntrlBas; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.Optional; + public interface CtrCntrlBasRepository extends JpaRepository { + Optional findFirstByIdntfNumOrderByCreateDtDesc(String idntfNum); + } diff --git a/data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/repository/CtrCntrlHstryRepository.java b/data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/repository/CtrCntrlHstryRepository.java index 98c6b9a..ebb395b 100644 --- a/data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/repository/CtrCntrlHstryRepository.java +++ b/data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/repository/CtrCntrlHstryRepository.java @@ -3,7 +3,10 @@ package kr.co.palnet.kac.data.ctr.repository; import kr.co.palnet.kac.data.ctr.model.CtrCntrlHstry; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.Optional; + public interface CtrCntrlHstryRepository extends JpaRepository { + Optional findFirstByCntrlIdOrderBySrvrRcvDtDesc(String cntrlId); }