From c36129450b0bc7408df08ac9266b8f429cd9d7a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dhji=28=EC=A7=80=EB=8C=80=ED=95=9C=29?= Date: Fri, 23 Feb 2024 17:02:27 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20model=20=EA=B3=B5=ED=86=B5=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=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-socket-app/build.gradle | 1 + .../kac/socket/KacSocketApplication.java | 6 +- .../kac/socket/core/codec/DronDecoder.java | 4 +- .../kac/socket/core/command/DronCommand.java | 4 +- .../command/impl/AdsbDronCommandImpl.java | 37 +++---- .../command/impl/AntosDronCommandImpl.java | 36 +++---- .../command/impl/SandboxDronCommandImpl.java | 33 +++---- .../kac/socket/core/handler/DronHandler.java | 24 ++--- .../palnet/kac/socket/core/model/DronDTO.java | 97 ------------------- .../core/model/{DronRQ.java => DronRq.java} | 5 +- .../core/model/{DronRS.java => DronRs.java} | 2 +- .../socket/core/storage/ControlStorage.java | 2 +- .../kac/socket/core/storage/DronStorage.java | 16 +-- .../kac/socket/service/KacAppService.java | 4 +- .../kac/socket/service/WebSocketService.java | 4 +- app/kac-websocket-app/build.gradle | 5 +- .../controller/SocketReceiverController.java | 8 +- .../websocket/core/model/DronHistoryDTO.java | 20 ---- .../core/storage/ControlStorage.java | 15 ++- .../kac/websocket/service/ControlService.java | 16 +-- .../websocket/service/ScheduledService.java | 5 +- common/model/build.gradle | 4 + .../kac/common/model/common}/ControlDto.java | 2 +- .../common/model/common/DronControlDto.java | 6 +- .../kac/common/model/common/DronDto.java | 8 +- .../common/model/common/DronHistoryDto.java | 4 +- 26 files changed, 130 insertions(+), 238 deletions(-) delete mode 100644 app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/DronDTO.java rename app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/{DronRQ.java => DronRq.java} (75%) rename app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/{DronRS.java => DronRs.java} (92%) delete mode 100644 app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/model/DronHistoryDTO.java create mode 100644 common/model/build.gradle rename {app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model => common/model/src/main/java/kr/co/palnet/kac/common/model/common}/ControlDto.java (88%) rename app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/model/ControlDTO.java => common/model/src/main/java/kr/co/palnet/kac/common/model/common/DronControlDto.java (91%) rename app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/model/DronDTO.java => common/model/src/main/java/kr/co/palnet/kac/common/model/common/DronDto.java (91%) rename app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/DronHistoryDTO.java => common/model/src/main/java/kr/co/palnet/kac/common/model/common/DronHistoryDto.java (79%) diff --git a/app/kac-socket-app/build.gradle b/app/kac-socket-app/build.gradle index 56b9d75..bbffec7 100644 --- a/app/kac-socket-app/build.gradle +++ b/app/kac-socket-app/build.gradle @@ -3,6 +3,7 @@ dependencies { implementation "$boot:spring-boot-starter" implementation "io.netty:netty-all:4.1.68.Final" implementation project(":common:util") + compileOnly project(":common:model") } diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/KacSocketApplication.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/KacSocketApplication.java index ec93226..98d7e7f 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/KacSocketApplication.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/KacSocketApplication.java @@ -1,15 +1,15 @@ package kr.co.palnet.kac.socket; -import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; -@Slf4j + +@EnableScheduling @SpringBootApplication public class KacSocketApplication { public static void main(String[] args) { - log.info(">>>>> main <<<<<"); SpringApplication.run(KacSocketApplication.class, args); } } \ No newline at end of file diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/codec/DronDecoder.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/codec/DronDecoder.java index ae23f77..010c88d 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/codec/DronDecoder.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/codec/DronDecoder.java @@ -3,7 +3,7 @@ package kr.co.palnet.kac.socket.core.codec; import com.fasterxml.jackson.databind.ObjectMapper; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToMessageDecoder; -import kr.co.palnet.kac.socket.core.model.DronRQ; +import kr.co.palnet.kac.socket.core.model.DronRq; import kr.co.palnet.kac.util.ObjectMapperUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -24,7 +24,7 @@ public class DronDecoder extends MessageToMessageDecoder { // TypeReference typeRef = new TypeReference() { // }; // DronRQ payload = objectMapper.readValue(in, typeRef); - DronRQ payload = objectMapper.readValue(in, DronRQ.class); + DronRq payload = objectMapper.readValue(in, DronRq.class); if (payload != null) { out.add(payload); } diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/DronCommand.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/DronCommand.java index e00b1ac..2c94d2f 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/DronCommand.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/DronCommand.java @@ -1,8 +1,8 @@ package kr.co.palnet.kac.socket.core.command; -import kr.co.palnet.kac.socket.core.model.DronRQ; +import kr.co.palnet.kac.socket.core.model.DronRq; public interface DronCommand { - void command(final DronRQ rq); + void command(final DronRq rq); String getCommandName(); } diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/AdsbDronCommandImpl.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/AdsbDronCommandImpl.java index 59a2fd7..bbd8e1b 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/AdsbDronCommandImpl.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/AdsbDronCommandImpl.java @@ -1,10 +1,10 @@ package kr.co.palnet.kac.socket.core.command.impl; -import kr.co.palnet.kac.socket.core.model.ControlDto; -import kr.co.palnet.kac.socket.core.model.DronDTO; -import kr.co.palnet.kac.socket.core.model.DronHistoryDTO; -import kr.co.palnet.kac.socket.core.model.DronRQ; +import kr.co.palnet.kac.common.model.common.ControlDto; +import kr.co.palnet.kac.common.model.common.DronDto; +import kr.co.palnet.kac.common.model.common.DronHistoryDto; import kr.co.palnet.kac.socket.core.command.DronCommand; +import kr.co.palnet.kac.socket.core.model.DronRq; import kr.co.palnet.kac.socket.core.storage.ControlStorage; import kr.co.palnet.kac.socket.core.storage.DronStorage; import kr.co.palnet.kac.socket.core.util.DronUtil; @@ -22,7 +22,10 @@ import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.time.Instant; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; @Slf4j @RequiredArgsConstructor @@ -42,16 +45,16 @@ public class AdsbDronCommandImpl implements DronCommand { } @Override - public void command(DronRQ rq) { + public void command(DronRq rq) { log.info(">>>> AdsbCommandServiceImpl <<<<<"); - List resultList = rq.getBody(); + List resultList = rq.getBody(); /** 전문 설정 ***/ final String messageType = "LTEM"; final String objectType = "DRON"; /** 데이터 모델링 **/ - for (DronDTO dron : resultList) { + for (DronDto dron : resultList) { // 위,경도 좌표가 0으로 들어오는 것은 무시 처리 if (DronUtil.latlonCheck(dron.getLat(), dron.getLon())) { @@ -64,9 +67,9 @@ public class AdsbDronCommandImpl implements DronCommand { dron.setServerRcvDt(Instant.now()); // 관제 이력 정보 - List hisList; + List hisList; - DronHistoryDTO history = DronHistoryDTO.builder() + DronHistoryDto history = DronHistoryDto.builder() .objectId(dron.getObjectId()) .lat(dron.getLat()) .lon(dron.getLon()) @@ -83,8 +86,8 @@ public class AdsbDronCommandImpl implements DronCommand { // STEP 1. 전에 내부 메모리에서 controlId 조회 - ControlStorage controlCacheUtil = ControlStorage.getInstance(); - ControlDto dronCacheDTO = controlCacheUtil.get(dron.getObjectId()); + ControlStorage controlStorage = ControlStorage.getInstance(); + ControlDto dronCacheDTO = controlStorage.get(dron.getObjectId()); if (dronCacheDTO == null) { // STEP 1. Control ID 발급 -> Application Server Http 통신 @@ -117,9 +120,7 @@ public class AdsbDronCommandImpl implements DronCommand { controlDto.setTypeCd((String) data.get("typeCd")); controlDto.setAreaTrnsYn((String) data.get("areaTrnsYn")); controlDto.setRegTime(System.currentTimeMillis()); - - ControlDto newDronCacheDTO = ControlDto.builder().build(); - controlCacheUtil.put(dron.getObjectId(), newDronCacheDTO); + controlStorage.put(dron.getObjectId(), controlDto); } catch (IOException e) { log.error("요청한 URL 정보가 잘못되었습니다.", e.getMessage()); @@ -134,13 +135,13 @@ public class AdsbDronCommandImpl implements DronCommand { dron.setControlWarnCd(dronCacheDTO.isControlWarnCd()); dronCacheDTO.setRegTime(System.currentTimeMillis()); - controlCacheUtil.put(dron.getObjectId(), dronCacheDTO); + controlStorage.put(dron.getObjectId(), dronCacheDTO); } // STEP 2. 이력 생성할 전문 전달 -> DRON의 대한 식별정보만 이력 관리 try { // 저장 해 놓았다가 한거번에 전송 - DronStorage dronCacheUtil = DronStorage.getInstance(); - dronCacheUtil.add(dron); + DronStorage dronStorage = DronStorage.getInstance(); + dronStorage.add(dron); } catch (Exception e) { log.error("ERROR : {}\n{}", e.getMessage(), e.getStackTrace()); } diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/AntosDronCommandImpl.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/AntosDronCommandImpl.java index e256df3..5502ebf 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/AntosDronCommandImpl.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/AntosDronCommandImpl.java @@ -1,10 +1,10 @@ package kr.co.palnet.kac.socket.core.command.impl; -import kr.co.palnet.kac.socket.core.model.ControlDto; -import kr.co.palnet.kac.socket.core.model.DronDTO; -import kr.co.palnet.kac.socket.core.model.DronHistoryDTO; -import kr.co.palnet.kac.socket.core.model.DronRQ; +import kr.co.palnet.kac.common.model.common.ControlDto; +import kr.co.palnet.kac.common.model.common.DronDto; +import kr.co.palnet.kac.common.model.common.DronHistoryDto; import kr.co.palnet.kac.socket.core.command.DronCommand; +import kr.co.palnet.kac.socket.core.model.DronRq; import kr.co.palnet.kac.socket.core.storage.ControlStorage; import kr.co.palnet.kac.socket.core.storage.DronStorage; import kr.co.palnet.kac.socket.core.util.DronUtil; @@ -22,7 +22,10 @@ import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.time.Instant; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; @Slf4j @RequiredArgsConstructor @@ -41,16 +44,16 @@ public class AntosDronCommandImpl implements DronCommand { } @Override - public void command(DronRQ rq) { + public void command(DronRq rq) { log.info(">>>> AntosCommandServiceImpl <<<<<"); - List resultList = rq.getBody(); + List resultList = rq.getBody(); /** 전문 설정 ***/ final String messageType = "LTEM"; final String objectType = "DRON"; /** 데이터 모델링 **/ - for (DronDTO dron : resultList) { + for (DronDto dron : resultList) { // 위,경도 좌표가 0으로 들어오는 것은 무시 처리 if (DronUtil.latlonCheck(dron.getLat(), dron.getLon())) { @@ -63,9 +66,9 @@ public class AntosDronCommandImpl implements DronCommand { dron.setServerRcvDt(Instant.now()); // 관제 이력 정보 - List hisList; + List hisList; - DronHistoryDTO history = DronHistoryDTO.builder() + DronHistoryDto history = DronHistoryDto.builder() .objectId(dron.getObjectId()) .lat(dron.getLat()) .lon(dron.getLon()) @@ -82,8 +85,8 @@ public class AntosDronCommandImpl implements DronCommand { // STEP 1. 전에 내부 메모리에서 controlId 조회 - ControlStorage controlCacheUtil = ControlStorage.getInstance(); - ControlDto dronCacheDTO = controlCacheUtil.get(dron.getObjectId()); + ControlStorage controlStorage = ControlStorage.getInstance(); + ControlDto dronCacheDTO = controlStorage.get(dron.getObjectId()); if (dronCacheDTO == null) { // STEP 1. Control ID 발급 -> Application Server Http 통신 @@ -117,7 +120,7 @@ public class AntosDronCommandImpl implements DronCommand { controlDto.setRegTime(System.currentTimeMillis()); ControlDto newDronCacheDTO = ControlDto.builder().build(); - controlCacheUtil.put(dron.getObjectId(), newDronCacheDTO); + controlStorage.put(dron.getObjectId(), newDronCacheDTO); } catch (IOException e) { log.error("요청한 URL 정보가 잘못되었습니다.", e.getMessage()); @@ -132,19 +135,18 @@ public class AntosDronCommandImpl implements DronCommand { dron.setControlWarnCd(dronCacheDTO.isControlWarnCd()); dronCacheDTO.setRegTime(System.currentTimeMillis()); - controlCacheUtil.put(dron.getObjectId(), dronCacheDTO); + controlStorage.put(dron.getObjectId(), dronCacheDTO); } // STEP 2. 이력 생성할 전문 전달 -> DRON의 대한 식별정보만 이력 관리 try { // 저장 해 놓았다가 한거번에 전송 - DronStorage dronCacheUtil = DronStorage.getInstance(); - dronCacheUtil.add(dron); + DronStorage dronStorage = DronStorage.getInstance(); + dronStorage.add(dron); } catch (Exception e) { log.error("ERROR : {}\n{}", e.getMessage(), e.getStackTrace()); } - // STEP 3. 화면에 표출할 정보 WebSocket 전달 if ("PA".equals(dron.getObjectId().substring(0, 2))) { webSocketService.sendData(dron); diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/SandboxDronCommandImpl.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/SandboxDronCommandImpl.java index bf26667..b31faec 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/SandboxDronCommandImpl.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/SandboxDronCommandImpl.java @@ -1,10 +1,10 @@ package kr.co.palnet.kac.socket.core.command.impl; +import kr.co.palnet.kac.common.model.common.ControlDto; +import kr.co.palnet.kac.common.model.common.DronDto; +import kr.co.palnet.kac.common.model.common.DronHistoryDto; import kr.co.palnet.kac.socket.core.command.DronCommand; -import kr.co.palnet.kac.socket.core.model.ControlDto; -import kr.co.palnet.kac.socket.core.model.DronDTO; -import kr.co.palnet.kac.socket.core.model.DronHistoryDTO; -import kr.co.palnet.kac.socket.core.model.DronRQ; +import kr.co.palnet.kac.socket.core.model.DronRq; import kr.co.palnet.kac.socket.core.storage.ControlStorage; import kr.co.palnet.kac.socket.core.storage.DronStorage; import kr.co.palnet.kac.socket.core.util.DronUtil; @@ -44,15 +44,15 @@ public class SandboxDronCommandImpl implements DronCommand { } @Override - public void command(DronRQ rq) { + public void command(DronRq rq) { log.info(">>>> SandboxCommandServiceImpl <<<<<"); - List resultList = rq.getBody(); + List resultList = rq.getBody(); /** 전문 설정 ***/ final String messageType = "LTEM"; final String objectType = "DRON"; /** 데이터 모델링 **/ - for (DronDTO dron : resultList) { + for (DronDto dron : resultList) { // 위,경도 좌표가 0으로 들어오는 것은 무시 처리 if (DronUtil.latlonCheck(dron.getLat(), dron.getLon())) { @@ -65,9 +65,9 @@ public class SandboxDronCommandImpl implements DronCommand { dron.setServerRcvDt(Instant.now()); // 관제 이력 정보 - List hisList; + List hisList; - DronHistoryDTO history = DronHistoryDTO.builder() + DronHistoryDto history = DronHistoryDto.builder() .objectId(dron.getObjectId()) .lat(dron.getLat()) .lon(dron.getLon()) @@ -85,8 +85,8 @@ public class SandboxDronCommandImpl implements DronCommand { Long start = System.currentTimeMillis(); // STEP 1. 전에 내부 메모리에서 controlId 조회 - ControlStorage controlCacheUtil = ControlStorage.getInstance(); - ControlDto dronCacheDTO = controlCacheUtil.get(dron.getObjectId()); + ControlStorage controlStorage = ControlStorage.getInstance(); + ControlDto dronCacheDTO = controlStorage.get(dron.getObjectId()); if (dronCacheDTO == null) { // STEP 1. Control ID 발급 -> Application Server Http 통신 @@ -121,7 +121,7 @@ public class SandboxDronCommandImpl implements DronCommand { controlDto.setRegTime(System.currentTimeMillis()); ControlDto newDronCacheDTO = ControlDto.builder().build(); - controlCacheUtil.put(dron.getObjectId(), newDronCacheDTO); + controlStorage.put(dron.getObjectId(), newDronCacheDTO); } catch (IOException e) { log.error("요청한 URL 정보가 잘못되었습니다.", e.getMessage()); @@ -136,16 +136,15 @@ public class SandboxDronCommandImpl implements DronCommand { dron.setControlWarnCd(dronCacheDTO.isControlWarnCd()); dronCacheDTO.setRegTime(System.currentTimeMillis()); - controlCacheUtil.put(dron.getObjectId(), dronCacheDTO); + controlStorage.put(dron.getObjectId(), dronCacheDTO); } - // STEP 2. 이력 생성할 전문 전달 -> DRON의 대한 식별정보만 이력 관리 try { // 저장 해 놓았다가 한거번에 전송 - DronStorage dronCacheUtil = DronStorage.getInstance(); -// dronCacheUtil.set(dron); + DronStorage dronStorage = DronStorage.getInstance(); +// dronStorage.set(dron); } catch (Exception e) { log.error("ERROR : {}\n{}", e.getMessage(), e.getStackTrace()); } @@ -154,7 +153,7 @@ public class SandboxDronCommandImpl implements DronCommand { // webSocketService.sendData(dron); Long end = System.currentTimeMillis(); - log.info(">>> during time : {}::{}", dron.getObjectId(),end - start); + log.info(">>> during time : {}::{}", dron.getObjectId(), end - start); } else { log.error("좌표 정보가 존재하지 않습니다."); diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/handler/DronHandler.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/handler/DronHandler.java index 72c7b66..d903543 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/handler/DronHandler.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/handler/DronHandler.java @@ -4,8 +4,8 @@ import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import kr.co.palnet.kac.socket.core.command.DronCommand; -import kr.co.palnet.kac.socket.core.model.DronRQ; -import kr.co.palnet.kac.socket.core.model.DronRS; +import kr.co.palnet.kac.socket.core.model.DronRq; +import kr.co.palnet.kac.socket.core.model.DronRs; import kr.co.palnet.kac.socket.core.storage.AuthKeyStorage; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -17,7 +17,7 @@ import java.util.Map; @Slf4j @ChannelHandler.Sharable @Component -public class DronHandler extends SimpleChannelInboundHandler { +public class DronHandler extends SimpleChannelInboundHandler { private final Map commandMap; @@ -31,11 +31,11 @@ public class DronHandler extends SimpleChannelInboundHandler { // @Override - protected void channelRead0(ChannelHandlerContext ctx, DronRQ rq) throws Exception { + protected void channelRead0(ChannelHandlerContext ctx, DronRq rq) throws Exception { log.info(">>>> channelRead0 <<<<<"); // key 검사 if (rq == null) { - ctx.writeAndFlush(DronRS.builder() + ctx.writeAndFlush(DronRs.builder() .code("-1000") .message("data is empty.") .build()); @@ -43,7 +43,7 @@ public class DronHandler extends SimpleChannelInboundHandler { } if (rq.getCommand() == null || rq.getCommand().isEmpty()) { - ctx.writeAndFlush(DronRS.builder() + ctx.writeAndFlush(DronRs.builder() .code("-1001") .message("command is empty.") .build()); @@ -51,7 +51,7 @@ public class DronHandler extends SimpleChannelInboundHandler { } if (rq.getAuthKey() == null || rq.getAuthKey().isEmpty()) { - ctx.writeAndFlush(DronRS.builder() + ctx.writeAndFlush(DronRs.builder() .code("-2000") .message("auth key is empty.") .build()); @@ -59,7 +59,7 @@ public class DronHandler extends SimpleChannelInboundHandler { } if (AuthKeyStorage.getInstance().checkAuthKey(rq.getCommand())) { - ctx.writeAndFlush(DronRS.builder() + ctx.writeAndFlush(DronRs.builder() .code("-2000") .message("Invalid auth key.") .build()); @@ -69,7 +69,7 @@ public class DronHandler extends SimpleChannelInboundHandler { log.info(">>> rq : {}", rq); DronCommand commandService = commandMap.get(rq.getCommand().trim()); if (commandService == null) { - ctx.writeAndFlush(DronRS.builder() + ctx.writeAndFlush(DronRs.builder() .code("-2100") .message("this command is not exist.") .build()); @@ -78,13 +78,13 @@ public class DronHandler extends SimpleChannelInboundHandler { try { commandService.command(rq); } catch (Exception e) { - ctx.writeAndFlush(DronRS.builder() + ctx.writeAndFlush(DronRs.builder() .code("-500") .message("server error - execute command") .build()); return; } - ctx.writeAndFlush(DronRS.builder() + ctx.writeAndFlush(DronRs.builder() .code("0") .message("success") .build()); @@ -94,7 +94,7 @@ public class DronHandler extends SimpleChannelInboundHandler { @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { log.info(">>>> exceptionCaught <<<<<"); - DronRS rs = DronRS.builder() + DronRs rs = DronRs.builder() .code("-9999") .message("error - etc") .build(); diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/DronDTO.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/DronDTO.java deleted file mode 100644 index 4c11d32..0000000 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/DronDTO.java +++ /dev/null @@ -1,97 +0,0 @@ -package kr.co.palnet.kac.socket.core.model; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.time.Instant; -import java.time.LocalDateTime; -import java.util.List; - -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -public class DronDTO { - private String typeCd; // 01 : 최초 들어온 데이터 , 99 : 종료 시킬 데이터 - - private String messageType; - - private String terminalId; - - @Builder.Default - private Double moveDistance = 0.0; - - private String moveDistanceType; - - private String controlId; // 처음 위치 데이터가 들어 왔을때 생성 함 - - private String objectType; - - private String objectId; - - @Builder.Default - private Double lat = 0.0; - - @Builder.Default - private Double lon = 0.0; - - private String elevType; - - @Builder.Default - private Double elev = 0.0; - - private String speedType; - - @Builder.Default - private Double speed = 0.0; - - @Builder.Default - private Double betteryLevel = 0.0; - - @Builder.Default - private Double betteryVoltage = 0.0; - - private String dronStatus; - - @Builder.Default - private Double heading = 0.0; - - private String terminalRcvDt; - - private Instant serverRcvDt; - - private Instant controlStartDt; - - private Instant controlEndDt; - - private String areaTrnsYn; - - // 환경센서 필드 - @Builder.Default - private Double sensorCo = 0.0; - @Builder.Default - private Double sensorSo2 = 0.0; - @Builder.Default - private Double sensorNo2 = 0.0; - @Builder.Default - private Double sensorO3 = 0.0; - @Builder.Default - private Double sensorDust = 0.0; - - //최근 5건만 저장 - private List recentPositionHistory; - - // 전체 히스토리 저장 - private List postionHistory; - - // 비정상 상황 식별 코드 - private boolean controlWarnCd; - - // 큐가 Socket서버에 도착한 시간 - private Instant regDt; - // 큐가 Socket서버에 도착한 시간 - private boolean sendUtm; // 불법드론 전송 여부 - -} diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/DronRQ.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/DronRq.java similarity index 75% rename from app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/DronRQ.java rename to app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/DronRq.java index 7f6da6b..73eca4e 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/DronRQ.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/DronRq.java @@ -1,5 +1,6 @@ package kr.co.palnet.kac.socket.core.model; +import kr.co.palnet.kac.common.model.common.DronDto; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -11,7 +12,7 @@ import java.util.List; @NoArgsConstructor @AllArgsConstructor @Builder -public class DronRQ { +public class DronRq { private String authKey; @@ -19,6 +20,6 @@ public class DronRQ { private String command; - private List body; + private List body; } diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/DronRS.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/DronRs.java similarity index 92% rename from app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/DronRS.java rename to app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/DronRs.java index c0d56f5..6780365 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/DronRS.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/DronRs.java @@ -9,7 +9,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor @AllArgsConstructor @Builder -public class DronRS { +public class DronRs { private String code; private String message; } diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/storage/ControlStorage.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/storage/ControlStorage.java index 715c14a..08cb7ff 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/storage/ControlStorage.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/storage/ControlStorage.java @@ -1,6 +1,6 @@ package kr.co.palnet.kac.socket.core.storage; -import kr.co.palnet.kac.socket.core.model.ControlDto; +import kr.co.palnet.kac.common.model.common.ControlDto; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/storage/DronStorage.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/storage/DronStorage.java index f0768f2..1a20f73 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/storage/DronStorage.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/storage/DronStorage.java @@ -1,6 +1,6 @@ package kr.co.palnet.kac.socket.core.storage; -import kr.co.palnet.kac.socket.core.model.DronDTO; +import kr.co.palnet.kac.common.model.common.DronDto; import lombok.extern.slf4j.Slf4j; import java.time.Instant; @@ -12,7 +12,7 @@ import java.util.concurrent.ConcurrentHashMap; @Slf4j public class DronStorage { - private final Map> dronMap; + private final Map> dronMap; private final int REMOVE_TIME = 1000 * 10; @@ -28,14 +28,14 @@ public class DronStorage { private static final DronStorage INSTANCE = new DronStorage(); } - public Map> getAll() { + public Map> getAll() { if (dronMap.keySet().isEmpty()) { return null; } return dronMap; } - public List get(String objectId) { + public List get(String objectId) { if (objectId == null || objectId.isEmpty()) { return null; } @@ -45,12 +45,12 @@ public class DronStorage { return dronMap.get(objectId); } - public void add(DronDTO dron) { + public void add(DronDto dron) { if (dron == null || dron.getObjectId() == null || dron.getObjectId().isEmpty()) { return; } - List list = dronMap.get(dron.getObjectId()); + List list = dronMap.get(dron.getObjectId()); if (list == null) { list = new ArrayList<>(); @@ -63,11 +63,11 @@ public class DronStorage { public void removeScheduled() { log.info("removeScheduled start - dronMap size : {}", dronMap.size()); for (String key : dronMap.keySet()) { - List list = dronMap.get(key); + List list = dronMap.get(key); if (list == null || list.isEmpty()) { continue; } - DronDTO dron = list.get(list.size() - 1); + DronDto dron = list.get(list.size() - 1); // 1분 이상된 데이터 삭제 Instant compareTime = Instant.now().minusSeconds(60); if (compareTime.isAfter(dron.getRegDt())) { diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/KacAppService.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/KacAppService.java index 0e6dcd9..dd8d978 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/KacAppService.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/KacAppService.java @@ -1,6 +1,6 @@ package kr.co.palnet.kac.socket.service; -import kr.co.palnet.kac.socket.core.model.DronDTO; +import kr.co.palnet.kac.common.model.common.DronDto; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -9,7 +9,7 @@ import org.springframework.stereotype.Service; @RequiredArgsConstructor @Service public class KacAppService { - public void sendData(DronDTO dto) { + public void sendData(DronDto dto) { } } diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/WebSocketService.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/WebSocketService.java index 178e488..f795b44 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/WebSocketService.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/WebSocketService.java @@ -1,6 +1,6 @@ package kr.co.palnet.kac.socket.service; -import kr.co.palnet.kac.socket.core.model.DronDTO; +import kr.co.palnet.kac.common.model.common.DronDto; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -10,7 +10,7 @@ import org.springframework.stereotype.Service; @Service public class WebSocketService { - public void sendData(DronDTO dto) { + public void sendData(DronDto dto) { } diff --git a/app/kac-websocket-app/build.gradle b/app/kac-websocket-app/build.gradle index c607bb1..a8dda8b 100644 --- a/app/kac-websocket-app/build.gradle +++ b/app/kac-websocket-app/build.gradle @@ -1,8 +1,9 @@ - - dependencies { + implementation "$boot:spring-boot-starter-web" implementation "io.netty:netty-all:4.1.68.Final" implementation project(":common:util") + compileOnly project(":common:model") + } diff --git a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/controller/SocketReceiverController.java b/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/controller/SocketReceiverController.java index bb2fac9..e08bb9c 100644 --- a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/controller/SocketReceiverController.java +++ b/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/controller/SocketReceiverController.java @@ -1,8 +1,8 @@ package kr.co.palnet.kac.websocket.controller; -import kr.co.palnet.kac.websocket.core.model.ControlDTO; -import kr.co.palnet.kac.websocket.core.model.DronDTO; +import kr.co.palnet.kac.common.model.common.DronControlDto; +import kr.co.palnet.kac.common.model.common.DronDto; import kr.co.palnet.kac.websocket.core.storage.ControlStorage; import kr.co.palnet.kac.websocket.service.ControlService; import lombok.RequiredArgsConstructor; @@ -22,10 +22,10 @@ public class SocketReceiverController { private final ControlService controlService; @PostMapping("/dron") - public ResponseEntity receiver(@RequestBody DronDTO dronDTO) { + public ResponseEntity receiver(@RequestBody DronDto dronDTO) { log.info("websocket message receiver : {}", dronDTO); - ControlDTO history = controlService.dronDtoToControlDtoConvert(dronDTO); + DronControlDto history = controlService.dronDtoToControlDtoConvert(dronDTO); // DRON의 대한 식별정보만 이력 관리 ControlStorage controlCache = ControlStorage.getInstance(); diff --git a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/model/DronHistoryDTO.java b/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/model/DronHistoryDTO.java deleted file mode 100644 index 96dbbf7..0000000 --- a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/model/DronHistoryDTO.java +++ /dev/null @@ -1,20 +0,0 @@ -package kr.co.palnet.kac.websocket.core.model; - - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -public class DronHistoryDTO { - private String objectId; - - @Builder.Default - private Double lat = 0.0; - @Builder.Default - private Double lon = 0.0; -} diff --git a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/storage/ControlStorage.java b/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/storage/ControlStorage.java index f6e7c64..ae8b586 100644 --- a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/storage/ControlStorage.java +++ b/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/storage/ControlStorage.java @@ -1,6 +1,6 @@ package kr.co.palnet.kac.websocket.core.storage; -import kr.co.palnet.kac.websocket.core.model.ControlDTO; +import kr.co.palnet.kac.common.model.common.DronControlDto; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -8,7 +8,6 @@ import org.springframework.stereotype.Component; import java.time.Instant; import java.util.*; import java.util.concurrent.ConcurrentHashMap; -import java.util.stream.Collectors; @Slf4j @Component @@ -16,7 +15,7 @@ public class ControlStorage { private final int REMOVE_TIME_SECOND = 60; // 화면 노출 시간 - private final Map controlMap; + private final Map controlMap; private ControlStorage() { controlMap = new ConcurrentHashMap<>(); @@ -30,14 +29,14 @@ public class ControlStorage { private static final ControlStorage INSTANCE = new ControlStorage(); } - public Map getAll() { + public Map getAll() { if (controlMap.keySet().isEmpty()) { return null; } return controlMap; } - public ControlDTO get(String objectId) { + public DronControlDto get(String objectId) { if (objectId == null || objectId.isEmpty()) { return null; } @@ -47,7 +46,7 @@ public class ControlStorage { return controlMap.get(objectId); } - public ControlDTO put(ControlDTO control) { + public DronControlDto put(DronControlDto control) { if (control == null || control.getObjectId() == null || control.getObjectId().isEmpty()) { return null; } @@ -55,11 +54,11 @@ public class ControlStorage { return controlMap.put(control.getObjectId(), control); } - public List getList() { + public List getList() { return new ArrayList<>(controlMap.values()); } - public ControlDTO remove(String objectId) { + public DronControlDto remove(String objectId) { return controlMap.remove(objectId); } diff --git a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/service/ControlService.java b/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/service/ControlService.java index aaa7c36..16ab975 100644 --- a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/service/ControlService.java +++ b/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/service/ControlService.java @@ -1,7 +1,7 @@ package kr.co.palnet.kac.websocket.service; -import kr.co.palnet.kac.websocket.core.model.ControlDTO; -import kr.co.palnet.kac.websocket.core.model.DronDTO; +import kr.co.palnet.kac.common.model.common.DronControlDto; +import kr.co.palnet.kac.common.model.common.DronDto; import kr.co.palnet.kac.websocket.core.storage.ControlStorage; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -15,11 +15,11 @@ import java.util.*; public class ControlService { - public List getList() { - List list = new ArrayList<>(); + public List getList() { + List list = new ArrayList<>(); ControlStorage controlCache = ControlStorage.getInstance(); - Map allHistory = controlCache.getAll(); + Map allHistory = controlCache.getAll(); log.info(">>> getList :: {}", allHistory); @@ -53,12 +53,12 @@ public class ControlService { return list; } - public ControlDTO dronDtoToControlDtoConvert(DronDTO dronDTO) { + public DronControlDto dronDtoToControlDtoConvert(DronDto dronDTO) { ControlStorage controlCache = ControlStorage.getInstance(); - ControlDTO prevControlDTO = controlCache.get(dronDTO.getObjectId()); + DronControlDto prevControlDTO = controlCache.get(dronDTO.getObjectId()); - ControlDTO controlDTO = new ControlDTO(); + DronControlDto controlDTO = new DronControlDto(); controlDTO.setObjectId(dronDTO.getObjectId()); controlDTO.setControlId(dronDTO.getControlId()); diff --git a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/service/ScheduledService.java b/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/service/ScheduledService.java index 22e11d8..54ce50d 100644 --- a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/service/ScheduledService.java +++ b/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/service/ScheduledService.java @@ -4,8 +4,8 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.netty.channel.group.ChannelGroup; import io.netty.handler.codec.http.websocketx.TextWebSocketFrame; +import kr.co.palnet.kac.common.model.common.DronControlDto; import kr.co.palnet.kac.util.ObjectMapperUtils; -import kr.co.palnet.kac.websocket.core.model.ControlDTO; import kr.co.palnet.kac.websocket.core.storage.ChannelStorage; import kr.co.palnet.kac.websocket.core.storage.ControlStorage; import lombok.RequiredArgsConstructor; @@ -24,6 +24,7 @@ public class ScheduledService { private int count = 0; private int count2 = 0; + @Scheduled(fixedDelay = 1000) public void test() { log.info("test.... : {}", count++); @@ -38,7 +39,7 @@ public class ScheduledService { ChannelGroup channelGroup = channelStorage.getAll(); // 데이터 가져오기 ControlStorage controlStorage = ControlStorage.getInstance(); - List controlDtoList = controlStorage.getList(); + List controlDtoList = controlStorage.getList(); if (controlDtoList == null || controlDtoList.isEmpty()) return; diff --git a/common/model/build.gradle b/common/model/build.gradle new file mode 100644 index 0000000..46754e9 --- /dev/null +++ b/common/model/build.gradle @@ -0,0 +1,4 @@ +dependencies { + +} + diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/ControlDto.java b/common/model/src/main/java/kr/co/palnet/kac/common/model/common/ControlDto.java similarity index 88% rename from app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/ControlDto.java rename to common/model/src/main/java/kr/co/palnet/kac/common/model/common/ControlDto.java index a086473..4b9cb41 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/ControlDto.java +++ b/common/model/src/main/java/kr/co/palnet/kac/common/model/common/ControlDto.java @@ -1,4 +1,4 @@ -package kr.co.palnet.kac.socket.core.model; +package kr.co.palnet.kac.common.model.common; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/model/ControlDTO.java b/common/model/src/main/java/kr/co/palnet/kac/common/model/common/DronControlDto.java similarity index 91% rename from app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/model/ControlDTO.java rename to common/model/src/main/java/kr/co/palnet/kac/common/model/common/DronControlDto.java index 103801c..fb79136 100644 --- a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/model/ControlDTO.java +++ b/common/model/src/main/java/kr/co/palnet/kac/common/model/common/DronControlDto.java @@ -1,4 +1,4 @@ -package kr.co.palnet.kac.websocket.core.model; +package kr.co.palnet.kac.common.model.common; import lombok.AllArgsConstructor; import lombok.Builder; @@ -13,7 +13,7 @@ import java.util.Map; @NoArgsConstructor @AllArgsConstructor @Builder -public class ControlDTO implements Comparable { +public class DronControlDto implements Comparable { private String messageTypeCd; @@ -76,7 +76,7 @@ public class ControlDTO implements Comparable { private Instant regDt; @Override - public int compareTo(ControlDTO o) { + public int compareTo(DronControlDto o) { if (o.getControlStartDt() != null && controlStartDt != null) { return o.getControlStartDt().compareTo(controlStartDt); } diff --git a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/model/DronDTO.java b/common/model/src/main/java/kr/co/palnet/kac/common/model/common/DronDto.java similarity index 91% rename from app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/model/DronDTO.java rename to common/model/src/main/java/kr/co/palnet/kac/common/model/common/DronDto.java index fc7dabd..6ff8dd5 100644 --- a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/model/DronDTO.java +++ b/common/model/src/main/java/kr/co/palnet/kac/common/model/common/DronDto.java @@ -1,4 +1,4 @@ -package kr.co.palnet.kac.websocket.core.model; +package kr.co.palnet.kac.common.model.common; import lombok.AllArgsConstructor; import lombok.Builder; @@ -12,7 +12,7 @@ import java.util.List; @NoArgsConstructor @AllArgsConstructor @Builder -public class DronDTO { +public class DronDto { private String typeCd; // 01 : 최초 들어온 데이터 , 99 : 종료 시킬 데이터 private String messageType; @@ -80,10 +80,10 @@ public class DronDTO { private Double sensorDust = 0.0; //최근 5건만 저장 - private List recentPositionHistory; + private List recentPositionHistory; // 전체 히스토리 저장 - private List postionHistory; + private List postionHistory; // 비정상 상황 식별 코드 private boolean controlWarnCd; diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/DronHistoryDTO.java b/common/model/src/main/java/kr/co/palnet/kac/common/model/common/DronHistoryDto.java similarity index 79% rename from app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/DronHistoryDTO.java rename to common/model/src/main/java/kr/co/palnet/kac/common/model/common/DronHistoryDto.java index cf3ad62..992e594 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/DronHistoryDTO.java +++ b/common/model/src/main/java/kr/co/palnet/kac/common/model/common/DronHistoryDto.java @@ -1,4 +1,4 @@ -package kr.co.palnet.kac.socket.core.model; +package kr.co.palnet.kac.common.model.common; import lombok.AllArgsConstructor; @@ -10,7 +10,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor @AllArgsConstructor @Builder -public class DronHistoryDTO { +public class DronHistoryDto { private String objectId; @Builder.Default