Compare commits
7 Commits
master
...
feature/re
Author | SHA1 | Date |
---|---|---|
지대한 | 683ae23396 | 2 months ago |
지대한 | 6ebc9a7e08 | 1 year ago |
지대한 | b0ebcb1d8c | 1 year ago |
지대한 | b2c8df5ae9 | 1 year ago |
지대한 | 13ae901633 | 1 year ago |
지대한 | 02e3fe5ca2 | 1 year ago |
지대한 | 4fcd911176 | 1 year ago |
15 changed files with 194 additions and 395 deletions
@ -0,0 +1,58 @@
|
||||
package com.palnet.biz.api.ctr.cntrl.controller; |
||||
|
||||
import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlModel; |
||||
import com.palnet.biz.api.ctr.cntrl.service.SocketReceiverService; |
||||
import com.palnet.comn.model.GPModel; |
||||
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; |
||||
|
||||
import java.util.List; |
||||
import java.util.Map; |
||||
import java.util.concurrent.Callable; |
||||
|
||||
/** |
||||
* packageName : com.palnet.biz.api.ctr.cntrl.controller |
||||
* fileName : SocketReciverController |
||||
* author : dhji |
||||
* date : 2023-08-29(029) |
||||
* description : |
||||
* =========================================================== |
||||
* DATE AUTHOR NOTE |
||||
* ----------------------------------------------------------- |
||||
* 2023-08-29(029) dhji 최초 생성 |
||||
*/ |
||||
@Slf4j |
||||
@RequiredArgsConstructor |
||||
@RestController |
||||
@RequestMapping("/api/server") |
||||
public class SocketReceiverController { |
||||
|
||||
private final SocketReceiverService socketReceiverService; |
||||
@PostMapping("/receiver") |
||||
public ResponseEntity<?> receiver(@RequestBody GPModel model) { |
||||
System.out.println("socket message : " + model); |
||||
socketReceiverService.insert(model); |
||||
return ResponseEntity.ok().build(); |
||||
} |
||||
|
||||
@PostMapping("/receiver/async") |
||||
public Callable<String> asyncReceiver(@RequestBody GPModel model) { |
||||
return () -> { |
||||
log.info("websocket message : {}", model); |
||||
socketReceiverService.insert(model); |
||||
return "OK"; |
||||
}; |
||||
} |
||||
|
||||
@PostMapping("/receiver/all") |
||||
public ResponseEntity<?> receiver(@RequestBody Map<String, List<GPModel>> models) { |
||||
// System.out.println("socket message : " + models);
|
||||
socketReceiverService.insertAll(models); |
||||
return ResponseEntity.ok().build(); |
||||
} |
||||
} |
@ -0,0 +1,117 @@
|
||||
package com.palnet.biz.api.ctr.cntrl.service; |
||||
|
||||
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.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.comn.model.GPDatabaseModel; |
||||
import com.palnet.comn.model.GPModel; |
||||
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 org.springframework.util.StopWatch; |
||||
|
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* packageName : com.palnet.biz.api.ctr.cntrl.service |
||||
* fileName : SocketReciverService |
||||
* author : dhji |
||||
* date : 2023-08-29(029) |
||||
* description : |
||||
* =========================================================== |
||||
* DATE AUTHOR NOTE |
||||
* ----------------------------------------------------------- |
||||
* 2023-08-29(029) dhji 최초 생성 |
||||
*/ |
||||
@Slf4j |
||||
@RequiredArgsConstructor |
||||
@Service |
||||
public class SocketReceiverService { |
||||
|
||||
private final CtrCntrlJpaService ctrCntrlJpaService; |
||||
private final PtyDronQueryRepository ptyDronQueryRepository; |
||||
private final ComArcrftBasRepository arcrftBasRepository; |
||||
private final ComIdntBasRepository idntBasRepository; |
||||
private final FltPlanQueryRepository fltPlanQueryRepository; |
||||
private final FltPlanCtrCntrlRelRepository ctrCntrlRelRepository; |
||||
|
||||
@Transactional |
||||
public void insert(GPModel model) { |
||||
GPDatabaseModel dbModel = new GPDatabaseModel(); |
||||
BeanUtils.copyProperties(model, dbModel); |
||||
|
||||
if ("01".equals(model.getTypeCd())) { |
||||
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<FltPlanBas> 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 ("01".equals(model.getTypeCd()) || "99".equals(model.getTypeCd())) { |
||||
ctrCntrlJpaService.insertCtrCntrlHstryArea(dbModel, ctrCntrlHstry.getHstrySno()); |
||||
} |
||||
|
||||
} |
||||
|
||||
@Transactional |
||||
public void insertAll(Map<String, List<GPModel>> models) { |
||||
// TODO 일괄 처리 필요
|
||||
log.info(">>> models :: {}", models.size()); |
||||
StopWatch stopWatch = new StopWatch(); |
||||
stopWatch.start(); |
||||
for (String key : models.keySet()) { |
||||
List<GPModel> list = models.get(key); |
||||
log.info(">>> models size :: {}", list.size()); |
||||
for (GPModel model : list) { |
||||
log.info(">> model: {}", model); |
||||
this.insert(model); |
||||
} |
||||
} |
||||
stopWatch.stop(); |
||||
log.info(">>> insertAll time : {}", stopWatch.getTotalTimeSeconds()); |
||||
} |
||||
} |
@ -1,86 +0,0 @@
|
||||
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();
|
||||
//
|
||||
// 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 Jackson2JsonMessageConverter converter() { |
||||
return new Jackson2JsonMessageConverter(); |
||||
} |
||||
|
||||
// @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 RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, Jackson2JsonMessageConverter converter) { |
||||
RabbitTemplate rabbitTemplate = new RabbitTemplate(); |
||||
|
||||
rabbitTemplate.setConnectionFactory(connectionFactory); |
||||
rabbitTemplate.setMessageConverter(converter); |
||||
|
||||
return rabbitTemplate; |
||||
} |
||||
|
||||
} |
@ -1,22 +0,0 @@
|
||||
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; |
||||
} |
||||
} |
@ -1,53 +0,0 @@
|
||||
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); |
||||
} |
||||
} |
||||
|
||||
} |
@ -1,13 +0,0 @@
|
||||
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); |
||||
|
||||
} |
@ -1,203 +0,0 @@
|
||||
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<FltPlanBas> 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 |
||||
); |
||||
} |
||||
} |
Loading…
Reference in new issue