diff --git a/pom.xml b/pom.xml
index d8cf678..68bc974 100644
--- a/pom.xml
+++ b/pom.xml
@@ -140,15 +140,15 @@
-
- org.springframework.amqp
- spring-rabbit-test
- test
-
-
- org.springframework.boot
- spring-boot-starter-amqp
-
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/palnet/Application.java b/src/main/java/com/palnet/PavApplication.java
similarity index 71%
rename from src/main/java/com/palnet/Application.java
rename to src/main/java/com/palnet/PavApplication.java
index 3254d1d..bc264f9 100644
--- a/src/main/java/com/palnet/Application.java
+++ b/src/main/java/com/palnet/PavApplication.java
@@ -1,10 +1,8 @@
package com.palnet;
-import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
-import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
@@ -12,10 +10,10 @@ import org.springframework.scheduling.annotation.EnableScheduling;
@EnableScheduling
@EnableAsync
@EnableCaching
-public class Application {
+public class PavApplication {
public static void main(String[] args) {
- SpringApplication.run(Application.class, args);
+ SpringApplication.run(PavApplication.class, args);
}
}
diff --git a/src/main/java/com/palnet/biz/config/MessageConfig.java b/src/main/java/com/palnet/biz/config/MessageConfig.java
index f894ed8..8b0179c 100644
--- a/src/main/java/com/palnet/biz/config/MessageConfig.java
+++ b/src/main/java/com/palnet/biz/config/MessageConfig.java
@@ -1,86 +1,86 @@
-package com.palnet.biz.config;
-
-import com.rabbitmq.client.ShutdownSignalException;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.core.*;
-import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
-import org.springframework.amqp.rabbit.connection.Connection;
-import org.springframework.amqp.rabbit.connection.ConnectionFactory;
-import org.springframework.amqp.rabbit.connection.ConnectionListener;
-import org.springframework.amqp.rabbit.core.RabbitTemplate;
-import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.env.Environment;
-
-@Configuration
-@Slf4j
-public class MessageConfig {
- private final Environment env;
-
- public MessageConfig(Environment env) {
- this.env = env;
- }
-
-// @Bean
-// public CachingConnectionFactory cachingConnectionFactory() {
-// CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
+//package com.palnet.biz.config;
//
-// connectionFactory.setHost(env.getProperty("spring.rabbitmq.host"));
-// connectionFactory.setPort(Integer.parseInt(env.getProperty("spring.rabbitmq.port")));
-// connectionFactory.setUsername(env.getProperty("spring.rabbitmq.username"));
-// connectionFactory.setPassword(env.getProperty("spring.rabbitmq.password"));
+//import com.rabbitmq.client.ShutdownSignalException;
+//import lombok.extern.slf4j.Slf4j;
+//import org.springframework.amqp.core.*;
+//import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
+//import org.springframework.amqp.rabbit.connection.Connection;
+//import org.springframework.amqp.rabbit.connection.ConnectionFactory;
+//import org.springframework.amqp.rabbit.connection.ConnectionListener;
+//import org.springframework.amqp.rabbit.core.RabbitTemplate;
+//import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
+//import org.springframework.context.annotation.Bean;
+//import org.springframework.context.annotation.Configuration;
+//import org.springframework.core.env.Environment;
//
-// return connectionFactory;
-// }
-
- @Bean
- public Jackson2JsonMessageConverter converter() {
- return new Jackson2JsonMessageConverter();
- }
-
-// @Bean
-// public DirectExchange appDroneExchange() {
-// return new DirectExchange(env.getProperty("message.app.exchange-name"));
-// }
+//@Configuration
+//@Slf4j
+//public class MessageConfig {
+// private final Environment env;
//
-// @Bean
-// public DirectExchange websocketDroneExchange() {
-// return new DirectExchange(env.getProperty("message.websocket.exchange-name"));
+// public MessageConfig(Environment env) {
+// this.env = env;
// }
//
-// @Bean
-// public Queue appDroneQueue() {
-// return new Queue(env.getProperty("message.app.queue-name"), false);
-// }
+//// @Bean
+//// public CachingConnectionFactory cachingConnectionFactory() {
+//// CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
+////
+//// connectionFactory.setHost(env.getProperty("spring.rabbitmq.host"));
+//// connectionFactory.setPort(Integer.parseInt(env.getProperty("spring.rabbitmq.port")));
+//// connectionFactory.setUsername(env.getProperty("spring.rabbitmq.username"));
+//// connectionFactory.setPassword(env.getProperty("spring.rabbitmq.password"));
+////
+//// return connectionFactory;
+//// }
//
// @Bean
-// public Queue websocketDroneQueue() {
-// return new Queue(env.getProperty("message.websocket.queue-name"), false);
+// public Jackson2JsonMessageConverter converter() {
+// return new Jackson2JsonMessageConverter();
// }
//
-// @Bean
-// public Binding appDroneBinding(Queue appDroneQueue, DirectExchange appDroneExchange) {
-// return BindingBuilder.bind(appDroneQueue)
-// .to(appDroneExchange)
-// .with(env.getProperty("message.app.routing-key"));
-// }
+//// @Bean
+//// public DirectExchange appDroneExchange() {
+//// return new DirectExchange(env.getProperty("message.app.exchange-name"));
+//// }
+////
+//// @Bean
+//// public DirectExchange websocketDroneExchange() {
+//// return new DirectExchange(env.getProperty("message.websocket.exchange-name"));
+//// }
+////
+//// @Bean
+//// public Queue appDroneQueue() {
+//// return new Queue(env.getProperty("message.app.queue-name"), false);
+//// }
+////
+//// @Bean
+//// public Queue websocketDroneQueue() {
+//// return new Queue(env.getProperty("message.websocket.queue-name"), false);
+//// }
+////
+//// @Bean
+//// public Binding appDroneBinding(Queue appDroneQueue, DirectExchange appDroneExchange) {
+//// return BindingBuilder.bind(appDroneQueue)
+//// .to(appDroneExchange)
+//// .with(env.getProperty("message.app.routing-key"));
+//// }
+////
+//// @Bean
+//// public Binding websocketDroneBinding(Queue websocketDroneQueue, DirectExchange websocketDroneExchange) {
+//// return BindingBuilder.bind(websocketDroneQueue)
+//// .to(websocketDroneExchange)
+//// .with(env.getProperty("message.websocket.routing-key"));
+//// }
//
// @Bean
-// public Binding websocketDroneBinding(Queue websocketDroneQueue, DirectExchange websocketDroneExchange) {
-// return BindingBuilder.bind(websocketDroneQueue)
-// .to(websocketDroneExchange)
-// .with(env.getProperty("message.websocket.routing-key"));
+// public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, Jackson2JsonMessageConverter converter) {
+// RabbitTemplate rabbitTemplate = new RabbitTemplate();
+//
+// rabbitTemplate.setConnectionFactory(connectionFactory);
+// rabbitTemplate.setMessageConverter(converter);
+//
+// return rabbitTemplate;
// }
-
- @Bean
- public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, Jackson2JsonMessageConverter converter) {
- RabbitTemplate rabbitTemplate = new RabbitTemplate();
-
- rabbitTemplate.setConnectionFactory(connectionFactory);
- rabbitTemplate.setMessageConverter(converter);
-
- return rabbitTemplate;
- }
-
-}
+//
+//}
diff --git a/src/main/java/com/palnet/biz/message/Receiver.java b/src/main/java/com/palnet/biz/message/Receiver.java
index e71b37c..2fc119f 100644
--- a/src/main/java/com/palnet/biz/message/Receiver.java
+++ b/src/main/java/com/palnet/biz/message/Receiver.java
@@ -1,22 +1,22 @@
-package com.palnet.biz.message;
-
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
-
-import java.util.concurrent.CountDownLatch;
-
-@Component
-@Slf4j
-public class Receiver {
-
- private CountDownLatch latch = new CountDownLatch(1);
-
- public void receiveMessage(String message) {
- log.info("Received <" + message);
- latch.countDown();
- }
-
- public CountDownLatch getLatch() {
- return latch;
- }
-}
+//package com.palnet.biz.message;
+//
+//import lombok.extern.slf4j.Slf4j;
+//import org.springframework.stereotype.Component;
+//
+//import java.util.concurrent.CountDownLatch;
+//
+//@Component
+//@Slf4j
+//public class Receiver {
+//
+// private CountDownLatch latch = new CountDownLatch(1);
+//
+// public void receiveMessage(String message) {
+// log.info("Received <" + message);
+// latch.countDown();
+// }
+//
+// public CountDownLatch getLatch() {
+// return latch;
+// }
+//}
diff --git a/src/main/java/com/palnet/biz/message/consumer/MessageConsumer.java b/src/main/java/com/palnet/biz/message/consumer/MessageConsumer.java
index aac4734..c8ce341 100644
--- a/src/main/java/com/palnet/biz/message/consumer/MessageConsumer.java
+++ b/src/main/java/com/palnet/biz/message/consumer/MessageConsumer.java
@@ -1,53 +1,53 @@
-package com.palnet.biz.message.consumer;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.palnet.biz.message.service.MessageService;
-import com.palnet.comn.model.GPModel;
-import com.palnet.comn.utils.JsonUtils;
-import com.rabbitmq.client.Channel;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.amqp.support.AmqpHeaders;
-import org.springframework.messaging.handler.annotation.Header;
-import org.springframework.stereotype.Component;
-
-import java.io.IOException;
-
-@Component
-@Slf4j
-public class MessageConsumer {
-
- private final MessageService messageService;
- private final ObjectMapper objectMapper;
-
- public MessageConsumer(MessageService messageService) {
- this.messageService = messageService;
- this.objectMapper = JsonUtils.getObjectMapper();
- }
-
- @RabbitHandler
- @RabbitListener(queues = {"app.drone.queue"})
- public void receivedDroneMessage(final String message, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) throws IOException {
- try {
- GPModel model = objectMapper.readValue(message, GPModel.class);
-
- messageService.insert(model); // GPS 정보 DB 동기화 처리
-
-/* channel.queueDeclare(message, true, false, false, null); rabbitMQ 서버 강제 종료 등 Queue가 유실되는 것을 방지하기 위해 disk에 Queue를 적재 ( Queue 영속성 )
- -> 이 옵션 설정시 Queue의 유실은 방지할 수 있으나 Consumer Ack의 응답률이 절반으로 떨어지게 되고 , Unacked -> Ready로 되돌아가는 Queue가 생김 */
-// channel.basicConsume(message, true, null);
-
- channel.basicAck(tag, true); // channel 유지를 위해 Consumer -> Producer로 수신 확인 신호를 자동으로 전송
-
-// channel.exchangeDeclare(message, "direct", true); Queue Exchange 방식 지정(binding 안되어있으면 설정)
-
-
-
-
- } catch (RuntimeException e) {
- channel.basicReject(tag, false);
- }
- }
-
-}
+//package com.palnet.biz.message.consumer;
+//
+//import com.fasterxml.jackson.databind.ObjectMapper;
+//import com.palnet.biz.message.service.MessageService;
+//import com.palnet.comn.model.GPModel;
+//import com.palnet.comn.utils.JsonUtils;
+//import com.rabbitmq.client.Channel;
+//import lombok.extern.slf4j.Slf4j;
+//import org.springframework.amqp.rabbit.annotation.RabbitHandler;
+//import org.springframework.amqp.rabbit.annotation.RabbitListener;
+//import org.springframework.amqp.support.AmqpHeaders;
+//import org.springframework.messaging.handler.annotation.Header;
+//import org.springframework.stereotype.Component;
+//
+//import java.io.IOException;
+//
+//@Component
+//@Slf4j
+//public class MessageConsumer {
+//
+// private final MessageService messageService;
+// private final ObjectMapper objectMapper;
+//
+// public MessageConsumer(MessageService messageService) {
+// this.messageService = messageService;
+// this.objectMapper = JsonUtils.getObjectMapper();
+// }
+//
+// @RabbitHandler
+// @RabbitListener(queues = {"app.drone.queue"})
+// public void receivedDroneMessage(final String message, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) throws IOException {
+// try {
+// GPModel model = objectMapper.readValue(message, GPModel.class);
+//
+// messageService.insert(model); // GPS 정보 DB 동기화 처리
+//
+///* channel.queueDeclare(message, true, false, false, null); rabbitMQ 서버 강제 종료 등 Queue가 유실되는 것을 방지하기 위해 disk에 Queue를 적재 ( Queue 영속성 )
+// -> 이 옵션 설정시 Queue의 유실은 방지할 수 있으나 Consumer Ack의 응답률이 절반으로 떨어지게 되고 , Unacked -> Ready로 되돌아가는 Queue가 생김 */
+//// channel.basicConsume(message, true, null);
+//
+// channel.basicAck(tag, true); // channel 유지를 위해 Consumer -> Producer로 수신 확인 신호를 자동으로 전송
+//
+//// channel.exchangeDeclare(message, "direct", true); Queue Exchange 방식 지정(binding 안되어있으면 설정)
+//
+//
+//
+//
+// } catch (RuntimeException e) {
+// channel.basicReject(tag, false);
+// }
+// }
+//
+//}
diff --git a/src/main/java/com/palnet/biz/message/service/MessageService.java b/src/main/java/com/palnet/biz/message/service/MessageService.java
index dd44cee..a705843 100644
--- a/src/main/java/com/palnet/biz/message/service/MessageService.java
+++ b/src/main/java/com/palnet/biz/message/service/MessageService.java
@@ -1,13 +1,13 @@
-package com.palnet.biz.message.service;
-
-import com.palnet.comn.model.GPModel;
-
-public interface MessageService {
-
- GPModel mapper(GPModel model);
-
- void insert(GPModel model);
-
- void sendToMessage(GPModel model);
-
-}
+//package com.palnet.biz.message.service;
+//
+//import com.palnet.comn.model.GPModel;
+//
+//public interface MessageService {
+//
+// GPModel mapper(GPModel model);
+//
+// void insert(GPModel model);
+//
+// void sendToMessage(GPModel model);
+//
+//}
diff --git a/src/main/java/com/palnet/biz/message/service/impl/MessageServiceImpl.java b/src/main/java/com/palnet/biz/message/service/impl/MessageServiceImpl.java
index e2c9aa4..f56799b 100644
--- a/src/main/java/com/palnet/biz/message/service/impl/MessageServiceImpl.java
+++ b/src/main/java/com/palnet/biz/message/service/impl/MessageServiceImpl.java
@@ -1,203 +1,203 @@
-package com.palnet.biz.message.service.impl;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-import com.palnet.biz.api.bas.flight.model.BasFlightPlanArcrftModel;
-import com.palnet.biz.api.bas.flight.model.BasFlightPlanModel;
-import com.palnet.biz.jpa.entity.*;
-import com.palnet.biz.jpa.repository.com.ComArcrftBasRepository;
-import com.palnet.biz.jpa.repository.com.ComIdntBasRepository;
-import com.palnet.biz.jpa.repository.ctr.CtrCntrlBasRepository;
-import com.palnet.biz.jpa.repository.ctr.CtrCntrlHstryRepository;
-import com.palnet.biz.jpa.repository.flt.FltPlanArcrftRepository;
-import com.palnet.biz.jpa.repository.flt.FltPlanBasRepository;
-import com.palnet.biz.jpa.repository.flt.FltPlanCtrCntrlRelRepository;
-import com.palnet.biz.jpa.repository.flt.FltPlanQueryRepository;
-import com.palnet.biz.jpa.repository.pty.PtyDronQueryRepository;
-import com.palnet.biz.jpa.service.ctr.CtrCntrlJpaService;
-import com.palnet.biz.api.comn.model.ControlGpsDataContext;
-import com.palnet.biz.message.service.MessageService;
-import com.palnet.comn.model.GPDatabaseModel;
-import com.palnet.comn.model.GPModel;
-import com.palnet.comn.utils.DateUtils;
-import com.palnet.comn.utils.JsonUtils;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.rabbit.core.RabbitTemplate;
-import org.springframework.beans.BeanUtils;
-import org.springframework.core.env.Environment;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.*;
-
-@Service
-@Slf4j
-public class MessageServiceImpl implements MessageService {
-
- private final CtrCntrlJpaService ctrCntrlJpaService;
- private final CtrCntrlBasRepository ctrCntrlBasRepository;
- private final CtrCntrlHstryRepository ctrCntrlHstryRepository;
- private final PtyDronQueryRepository ptyDronQueryRepository;
- private final ComArcrftBasRepository arcrftBasRepository;
- private final ComIdntBasRepository idntBasRepository;
- private final FltPlanQueryRepository fltPlanQueryRepository;
- private final FltPlanCtrCntrlRelRepository ctrCntrlRelRepository;
- private final ControlGpsDataContext shareContext;
- private final RabbitTemplate rabbitTemplate;
- private final Environment env;
- private final ObjectMapper objectMapper;
-
- public MessageServiceImpl(CtrCntrlJpaService ctrCntrlJpaService,
- CtrCntrlBasRepository ctrCntrlBasRepository,
- CtrCntrlHstryRepository ctrCntrlHstryRepository,
- PtyDronQueryRepository ptyDronQueryRepository,
- ComArcrftBasRepository arcrftBasRepository,
- ComIdntBasRepository idntBasRepository,
- FltPlanQueryRepository fltPlanQueryRepository,
- FltPlanCtrCntrlRelRepository ctrCntrlRelRepository,
- ControlGpsDataContext shareContext,
- RabbitTemplate rabbitTemplate,
- Environment env
- ) {
- this.ctrCntrlJpaService = ctrCntrlJpaService;
- this.ctrCntrlBasRepository = ctrCntrlBasRepository;
- this.ctrCntrlHstryRepository = ctrCntrlHstryRepository;
- this.ptyDronQueryRepository = ptyDronQueryRepository;
- this.arcrftBasRepository = arcrftBasRepository;
- this.idntBasRepository = idntBasRepository;
- this.fltPlanQueryRepository = fltPlanQueryRepository;
- this.ctrCntrlRelRepository = ctrCntrlRelRepository;
- this.shareContext = shareContext;
- this.rabbitTemplate = rabbitTemplate;
- this.env = env;
- this.objectMapper = JsonUtils.getObjectMapper();
- }
-
- /**
- * TODO Control-Id Mapping
- *
- * @param model
- * @return
- */
- @Override
- @Transactional(readOnly = true)
- public GPModel mapper(GPModel model) {
- /* 식별번호의 가장 최근 이력 불러오기 */
- CtrCntrlBas latestControl = ctrCntrlBasRepository.findFirstByIdntfNumOrderByCreateDtDesc(model.getObjectId()).orElse(null);
-
- boolean isControl = false;
- if(latestControl != null) {
- CtrCntrlHstry latestHistory = ctrCntrlHstryRepository.findFirstByCntrlIdOrderBySrvrRcvDtDesc(latestControl.getCntrlId()).orElse(null);
- long diffMinute = DateUtils.diffMinute(latestHistory.getSrvrRcvDt(), new Date());
- 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;
- }
-
- if(isControl) {
- model.setControlId(latestControl.getCntrlId());
- model.setTypeCd("02");
- model.setAreaTrnsYn("E");
- } else {
- String controlID = UUID.randomUUID().toString();
-
- model.setControlId(controlID);
- model.setTypeCd("01");
- model.setAreaTrnsYn("N");
- model.setControlStartDt(DateUtils.getCurrentTime());
- }
-
- // 기체 식별번호의 관제 ID 저장
- shareContext.putIdntfKey(model.getObjectId(), model.getControlId());
-
- return model;
- }
-
- /**
- * TODO 비행 이력 생성
- *
- * @param model
- */
- @Override
- @Transactional
- public void insert(GPModel model) {
- GPDatabaseModel dbModel = new GPDatabaseModel();
- BeanUtils.copyProperties(model, dbModel);
-
- if(model.getTypeCd().equals("01")) {
- String prodNumber = ptyDronQueryRepository.findIdntfNumByProdNumber(model.getObjectId());
- dbModel.setProdNumber(prodNumber);
-
- // 비행 이력 생성
- CtrCntrlBas ctrCntrlBas = ctrCntrlJpaService.insertCtrCntrlBas(dbModel);
-
- // 비행 이력, 비행 계획서 mapping
- if ("PA".equals(model.getObjectId().substring(0,2))) {
- FltPlanCtrCntrlRel fltPlanCtrCntrlRel = new FltPlanCtrCntrlRel();
-
- // 1. 식별 번호의 소유자 정보 저장.
- ComIdntfBas idntfBas = idntBasRepository.findById(model.getObjectId()).orElse(null);
-
- // 1-1. 식별 번호의 모델 정보 조회
- ComArcrftBas arcrftBas = arcrftBasRepository.findById(idntfBas.getArcrftSno()).orElse(null);
-
- if (idntfBas != null && arcrftBas != null) {
- fltPlanCtrCntrlRel.setCntrlId(ctrCntrlBas.getCntrlId());
- fltPlanCtrCntrlRel.setIdntfNum(ctrCntrlBas.getIdntfNum());
- fltPlanCtrCntrlRel.setIdntfCstmrSno(idntfBas.getCstmrSno());
- fltPlanCtrCntrlRel.setGroupId(arcrftBas.getGroupId());
- }
-
- // 2. 해당 되는 비행계획서 정보 저장.
- List planArcrft =
- fltPlanQueryRepository.findByFlightPlanArcrft(ctrCntrlBas.getIdntfNum(), dbModel.getServerRcvDt());
-
- if (!planArcrft.isEmpty()) {
- for (FltPlanBas plan : planArcrft) {
- fltPlanCtrCntrlRel.setPlanSno(plan.getPlanSno());
- }
- }
-
- // 3. mapping 정보 주입.
- if (!fltPlanCtrCntrlRel.getCntrlId().isEmpty()) {
- ctrCntrlRelRepository.save(fltPlanCtrCntrlRel);
- }
- }
- }
-
- // Drone인 경우에만 history 생성
- CtrCntrlHstry ctrCntrlHstry = ctrCntrlJpaService.insertCtrCntrlHstry(dbModel);
-
- if(model.getTypeCd().equals("01") || model.getTypeCd().equals("99")) {
- ctrCntrlJpaService.insertCtrCntrlHstryArea(dbModel, ctrCntrlHstry.getHstrySno());
- }
-
- }
-
- @Override
- public void sendToMessage(GPModel model) {
- String json ="";
-
- try {
- json = objectMapper.writeValueAsString(model);
- } catch (JsonProcessingException e) {
- e.printStackTrace();
- }
-
- /* Websocket 서버로 전달 할 드론 데이터 */
- rabbitTemplate.convertAndSend(
- Objects.requireNonNull(env.getProperty("message.websocket.exchange-name")),
- Objects.requireNonNull(env.getProperty("message.websocket.routing-key")),
- json
- );
- }
-}
+//package com.palnet.biz.message.service.impl;
+//
+//import com.fasterxml.jackson.core.JsonProcessingException;
+//import com.fasterxml.jackson.databind.ObjectMapper;
+//
+//import com.palnet.biz.api.bas.flight.model.BasFlightPlanArcrftModel;
+//import com.palnet.biz.api.bas.flight.model.BasFlightPlanModel;
+//import com.palnet.biz.jpa.entity.*;
+//import com.palnet.biz.jpa.repository.com.ComArcrftBasRepository;
+//import com.palnet.biz.jpa.repository.com.ComIdntBasRepository;
+//import com.palnet.biz.jpa.repository.ctr.CtrCntrlBasRepository;
+//import com.palnet.biz.jpa.repository.ctr.CtrCntrlHstryRepository;
+//import com.palnet.biz.jpa.repository.flt.FltPlanArcrftRepository;
+//import com.palnet.biz.jpa.repository.flt.FltPlanBasRepository;
+//import com.palnet.biz.jpa.repository.flt.FltPlanCtrCntrlRelRepository;
+//import com.palnet.biz.jpa.repository.flt.FltPlanQueryRepository;
+//import com.palnet.biz.jpa.repository.pty.PtyDronQueryRepository;
+//import com.palnet.biz.jpa.service.ctr.CtrCntrlJpaService;
+//import com.palnet.biz.api.comn.model.ControlGpsDataContext;
+//import com.palnet.biz.message.service.MessageService;
+//import com.palnet.comn.model.GPDatabaseModel;
+//import com.palnet.comn.model.GPModel;
+//import com.palnet.comn.utils.DateUtils;
+//import com.palnet.comn.utils.JsonUtils;
+//import lombok.extern.slf4j.Slf4j;
+//import org.springframework.amqp.rabbit.core.RabbitTemplate;
+//import org.springframework.beans.BeanUtils;
+//import org.springframework.core.env.Environment;
+//import org.springframework.scheduling.annotation.Async;
+//import org.springframework.stereotype.Service;
+//import org.springframework.transaction.annotation.Transactional;
+//
+//import java.util.*;
+//
+//@Service
+//@Slf4j
+//public class MessageServiceImpl implements MessageService {
+//
+// private final CtrCntrlJpaService ctrCntrlJpaService;
+// private final CtrCntrlBasRepository ctrCntrlBasRepository;
+// private final CtrCntrlHstryRepository ctrCntrlHstryRepository;
+// private final PtyDronQueryRepository ptyDronQueryRepository;
+// private final ComArcrftBasRepository arcrftBasRepository;
+// private final ComIdntBasRepository idntBasRepository;
+// private final FltPlanQueryRepository fltPlanQueryRepository;
+// private final FltPlanCtrCntrlRelRepository ctrCntrlRelRepository;
+// private final ControlGpsDataContext shareContext;
+// private final RabbitTemplate rabbitTemplate;
+// private final Environment env;
+// private final ObjectMapper objectMapper;
+//
+// public MessageServiceImpl(CtrCntrlJpaService ctrCntrlJpaService,
+// CtrCntrlBasRepository ctrCntrlBasRepository,
+// CtrCntrlHstryRepository ctrCntrlHstryRepository,
+// PtyDronQueryRepository ptyDronQueryRepository,
+// ComArcrftBasRepository arcrftBasRepository,
+// ComIdntBasRepository idntBasRepository,
+// FltPlanQueryRepository fltPlanQueryRepository,
+// FltPlanCtrCntrlRelRepository ctrCntrlRelRepository,
+// ControlGpsDataContext shareContext,
+// RabbitTemplate rabbitTemplate,
+// Environment env
+// ) {
+// this.ctrCntrlJpaService = ctrCntrlJpaService;
+// this.ctrCntrlBasRepository = ctrCntrlBasRepository;
+// this.ctrCntrlHstryRepository = ctrCntrlHstryRepository;
+// this.ptyDronQueryRepository = ptyDronQueryRepository;
+// this.arcrftBasRepository = arcrftBasRepository;
+// this.idntBasRepository = idntBasRepository;
+// this.fltPlanQueryRepository = fltPlanQueryRepository;
+// this.ctrCntrlRelRepository = ctrCntrlRelRepository;
+// this.shareContext = shareContext;
+// this.rabbitTemplate = rabbitTemplate;
+// this.env = env;
+// this.objectMapper = JsonUtils.getObjectMapper();
+// }
+//
+// /**
+// * TODO Control-Id Mapping
+// *
+// * @param model
+// * @return
+// */
+// @Override
+// @Transactional(readOnly = true)
+// public GPModel mapper(GPModel model) {
+// /* 식별번호의 가장 최근 이력 불러오기 */
+// CtrCntrlBas latestControl = ctrCntrlBasRepository.findFirstByIdntfNumOrderByCreateDtDesc(model.getObjectId()).orElse(null);
+//
+// boolean isControl = false;
+// if(latestControl != null) {
+// CtrCntrlHstry latestHistory = ctrCntrlHstryRepository.findFirstByCntrlIdOrderBySrvrRcvDtDesc(latestControl.getCntrlId()).orElse(null);
+// long diffMinute = DateUtils.diffMinute(latestHistory.getSrvrRcvDt(), new Date());
+// 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;
+// }
+//
+// if(isControl) {
+// model.setControlId(latestControl.getCntrlId());
+// model.setTypeCd("02");
+// model.setAreaTrnsYn("E");
+// } else {
+// String controlID = UUID.randomUUID().toString();
+//
+// model.setControlId(controlID);
+// model.setTypeCd("01");
+// model.setAreaTrnsYn("N");
+// model.setControlStartDt(DateUtils.getCurrentTime());
+// }
+//
+// // 기체 식별번호의 관제 ID 저장
+// shareContext.putIdntfKey(model.getObjectId(), model.getControlId());
+//
+// return model;
+// }
+//
+// /**
+// * TODO 비행 이력 생성
+// *
+// * @param model
+// */
+// @Override
+// @Transactional
+// public void insert(GPModel model) {
+// GPDatabaseModel dbModel = new GPDatabaseModel();
+// BeanUtils.copyProperties(model, dbModel);
+//
+// if(model.getTypeCd().equals("01")) {
+// String prodNumber = ptyDronQueryRepository.findIdntfNumByProdNumber(model.getObjectId());
+// dbModel.setProdNumber(prodNumber);
+//
+// // 비행 이력 생성
+// CtrCntrlBas ctrCntrlBas = ctrCntrlJpaService.insertCtrCntrlBas(dbModel);
+//
+// // 비행 이력, 비행 계획서 mapping
+// if ("PA".equals(model.getObjectId().substring(0,2))) {
+// FltPlanCtrCntrlRel fltPlanCtrCntrlRel = new FltPlanCtrCntrlRel();
+//
+// // 1. 식별 번호의 소유자 정보 저장.
+// ComIdntfBas idntfBas = idntBasRepository.findById(model.getObjectId()).orElse(null);
+//
+// // 1-1. 식별 번호의 모델 정보 조회
+// ComArcrftBas arcrftBas = arcrftBasRepository.findById(idntfBas.getArcrftSno()).orElse(null);
+//
+// if (idntfBas != null && arcrftBas != null) {
+// fltPlanCtrCntrlRel.setCntrlId(ctrCntrlBas.getCntrlId());
+// fltPlanCtrCntrlRel.setIdntfNum(ctrCntrlBas.getIdntfNum());
+// fltPlanCtrCntrlRel.setIdntfCstmrSno(idntfBas.getCstmrSno());
+// fltPlanCtrCntrlRel.setGroupId(arcrftBas.getGroupId());
+// }
+//
+// // 2. 해당 되는 비행계획서 정보 저장.
+// List planArcrft =
+// fltPlanQueryRepository.findByFlightPlanArcrft(ctrCntrlBas.getIdntfNum(), dbModel.getServerRcvDt());
+//
+// if (!planArcrft.isEmpty()) {
+// for (FltPlanBas plan : planArcrft) {
+// fltPlanCtrCntrlRel.setPlanSno(plan.getPlanSno());
+// }
+// }
+//
+// // 3. mapping 정보 주입.
+// if (!fltPlanCtrCntrlRel.getCntrlId().isEmpty()) {
+// ctrCntrlRelRepository.save(fltPlanCtrCntrlRel);
+// }
+// }
+// }
+//
+// // Drone인 경우에만 history 생성
+// CtrCntrlHstry ctrCntrlHstry = ctrCntrlJpaService.insertCtrCntrlHstry(dbModel);
+//
+// if(model.getTypeCd().equals("01") || model.getTypeCd().equals("99")) {
+// ctrCntrlJpaService.insertCtrCntrlHstryArea(dbModel, ctrCntrlHstry.getHstrySno());
+// }
+//
+// }
+//
+// @Override
+// public void sendToMessage(GPModel model) {
+// String json ="";
+//
+// try {
+// json = objectMapper.writeValueAsString(model);
+// } catch (JsonProcessingException e) {
+// e.printStackTrace();
+// }
+//
+// /* Websocket 서버로 전달 할 드론 데이터 */
+// rabbitTemplate.convertAndSend(
+// Objects.requireNonNull(env.getProperty("message.websocket.exchange-name")),
+// Objects.requireNonNull(env.getProperty("message.websocket.routing-key")),
+// json
+// );
+// }
+//}