지대한
1 year ago
11 changed files with 287 additions and 242 deletions
@ -1,22 +1,22 @@
|
||||
package com.palnet.process.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.process.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 +1,53 @@
|
||||
package com.palnet.process.message.config; |
||||
|
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springframework.amqp.core.Binding; |
||||
import org.springframework.amqp.core.BindingBuilder; |
||||
import org.springframework.amqp.core.DirectExchange; |
||||
import org.springframework.amqp.core.Queue; |
||||
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; |
||||
import org.springframework.amqp.rabbit.connection.ConnectionFactory; |
||||
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; |
||||
} |
||||
//package com.palnet.process.message.config;
|
||||
//
|
||||
//import lombok.extern.slf4j.Slf4j;
|
||||
//import org.springframework.amqp.core.Binding;
|
||||
//import org.springframework.amqp.core.BindingBuilder;
|
||||
//import org.springframework.amqp.core.DirectExchange;
|
||||
//import org.springframework.amqp.core.Queue;
|
||||
//import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
|
||||
//import org.springframework.amqp.rabbit.connection.ConnectionFactory;
|
||||
//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 CachingConnectionFactory cachingConnectionFactory() {
|
||||
// CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
|
||||
// public Jackson2JsonMessageConverter converter() {
|
||||
// return new Jackson2JsonMessageConverter();
|
||||
// }
|
||||
//
|
||||
//
|
||||
// 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"));
|
||||
// @Bean
|
||||
// public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, Jackson2JsonMessageConverter converter) {
|
||||
// RabbitTemplate rabbitTemplate = new RabbitTemplate();
|
||||
//
|
||||
// return connectionFactory;
|
||||
// rabbitTemplate.setConnectionFactory(connectionFactory);
|
||||
// rabbitTemplate.setMessageConverter(converter);
|
||||
//
|
||||
// return rabbitTemplate;
|
||||
// }
|
||||
|
||||
@Bean |
||||
public Jackson2JsonMessageConverter converter() { |
||||
return new Jackson2JsonMessageConverter(); |
||||
} |
||||
|
||||
|
||||
@Bean |
||||
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, Jackson2JsonMessageConverter converter) { |
||||
RabbitTemplate rabbitTemplate = new RabbitTemplate(); |
||||
|
||||
rabbitTemplate.setConnectionFactory(connectionFactory); |
||||
rabbitTemplate.setMessageConverter(converter); |
||||
|
||||
return rabbitTemplate; |
||||
} |
||||
|
||||
} |
||||
//
|
||||
//}
|
||||
|
@ -1,99 +1,99 @@
|
||||
package com.palnet.process.message.consumer; |
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException; |
||||
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
import com.palnet.comn.model.CtrCntrlModel; |
||||
import com.palnet.comn.model.CtrHistoryShareContext; |
||||
import com.palnet.comn.model.GPModel; |
||||
import com.palnet.comn.utils.JsonUtils; |
||||
import com.palnet.server.collection.ChannelCollection; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springframework.amqp.rabbit.annotation.RabbitHandler; |
||||
import org.springframework.amqp.rabbit.annotation.RabbitListener; |
||||
import org.springframework.core.env.Environment; |
||||
import org.springframework.stereotype.Component; |
||||
|
||||
@Component |
||||
@Slf4j |
||||
public class MessageConsumer { |
||||
|
||||
private ChannelCollection cc = new ChannelCollection(); |
||||
|
||||
private final ObjectMapper objectMapper; |
||||
private final CtrHistoryShareContext gpHistoryShareModel; |
||||
private final Environment env; |
||||
|
||||
public MessageConsumer(CtrHistoryShareContext gpHistoryShareModel, Environment env) { |
||||
this.objectMapper = JsonUtils.getObjectMapper(); |
||||
this.gpHistoryShareModel = gpHistoryShareModel; |
||||
this.env = env; |
||||
} |
||||
|
||||
@RabbitHandler |
||||
@RabbitListener(queues = {"websocket.drone.queue"}, concurrency = "8") |
||||
public void receiveDroneMessage(final String message) throws JsonProcessingException { |
||||
log.info("websocket message : {}", message); |
||||
|
||||
GPModel model = objectMapper.readValue(message, GPModel.class); |
||||
|
||||
CtrCntrlModel history = this.convertModel(model); |
||||
|
||||
// DRON의 대한 식별정보만 이력 관리
|
||||
gpHistoryShareModel.putHistory(model.getObjectId(), history); |
||||
} |
||||
|
||||
public CtrCntrlModel convertModel(final GPModel dataInfo) { |
||||
CtrCntrlModel model = new CtrCntrlModel(); |
||||
CtrCntrlModel prevModel = gpHistoryShareModel.getHistory(dataInfo.getObjectId()); |
||||
|
||||
model.setObjectId(dataInfo.getObjectId()); |
||||
model.setControlId(dataInfo.getControlId()); |
||||
model.setTrmnlId(dataInfo.getTerminalId()); |
||||
model.setControlStartDt(dataInfo.getControlStartDt()); |
||||
model.setObjectTypeCd(dataInfo.getObjectType()); |
||||
model.setLat(dataInfo.getLat()); |
||||
model.setLng(dataInfo.getLng()); |
||||
model.setElevType(dataInfo.getElevType()); |
||||
model.setElev(dataInfo.getElev()); |
||||
model.setSpeedType(dataInfo.getSpeedType()); |
||||
model.setSpeed(dataInfo.getSpeed()); |
||||
model.setBetteryLevel(dataInfo.getBetteryLevel()); |
||||
model.setBetteryVoltage(dataInfo.getBetteryVoltage()); |
||||
model.setDronStatus(dataInfo.getDronStatus()); |
||||
model.setHeading(dataInfo.getHeading()); |
||||
model.setMoveDistance(dataInfo.getMoveDistance()); |
||||
model.setMoveDistanceType(dataInfo.getMoveDistanceType()); |
||||
|
||||
model.setServerRcvDt(dataInfo.getServerRcvDt()); |
||||
|
||||
// 환경 데이터 필드 추가
|
||||
model.setSensorCo(dataInfo.getSensorCo()); |
||||
model.setSensorSo2(dataInfo.getSensorSo2()); |
||||
model.setSensorNo2(dataInfo.getSensorNo2()); |
||||
model.setSensorO3(dataInfo.getSensorO3()); |
||||
model.setSensorDust(dataInfo.getSensorDust()); |
||||
|
||||
// 비정상 상황 식별코드 추가
|
||||
model.setControlWarnCd(dataInfo.isControlWarnCd()); |
||||
|
||||
// if(prevModel == null) {
|
||||
// if(model.isControlWarnCd()) {
|
||||
// model.setControlWarnNotyCd(true); // 최초 비정상 발생
|
||||
// }
|
||||
// } else {
|
||||
// if(prevModel.isControlWarnCd() && model.isControlWarnCd()) {
|
||||
// model.setControlWarnNotyCd(false); // 비정상 -> 비정상
|
||||
// }
|
||||
// if(prevModel.isControlWarnCd() && !model.isControlWarnCd()) {
|
||||
// model.setControlWarnNotyCd(false); // 비정상 -> 정상
|
||||
// }
|
||||
// if(!prevModel.isControlWarnCd() && model.isControlWarnCd()) {
|
||||
// model.setControlWarnNotyCd(true); // 정상 -> 비정상상
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// model.setControlCacheCount(1);
|
||||
|
||||
return model; |
||||
} |
||||
} |
||||
//package com.palnet.process.message.consumer;
|
||||
//
|
||||
//import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
//import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
//import com.palnet.comn.model.CtrCntrlModel;
|
||||
//import com.palnet.comn.model.CtrHistoryShareContext;
|
||||
//import com.palnet.comn.model.GPModel;
|
||||
//import com.palnet.comn.utils.JsonUtils;
|
||||
//import com.palnet.server.collection.ChannelCollection;
|
||||
//import lombok.extern.slf4j.Slf4j;
|
||||
//import org.springframework.amqp.rabbit.annotation.RabbitHandler;
|
||||
//import org.springframework.amqp.rabbit.annotation.RabbitListener;
|
||||
//import org.springframework.core.env.Environment;
|
||||
//import org.springframework.stereotype.Component;
|
||||
//
|
||||
//@Component
|
||||
//@Slf4j
|
||||
//public class MessageConsumer {
|
||||
//
|
||||
// private ChannelCollection cc = new ChannelCollection();
|
||||
//
|
||||
// private final ObjectMapper objectMapper;
|
||||
// private final CtrHistoryShareContext gpHistoryShareModel;
|
||||
// private final Environment env;
|
||||
//
|
||||
// public MessageConsumer(CtrHistoryShareContext gpHistoryShareModel, Environment env) {
|
||||
// this.objectMapper = JsonUtils.getObjectMapper();
|
||||
// this.gpHistoryShareModel = gpHistoryShareModel;
|
||||
// this.env = env;
|
||||
// }
|
||||
//
|
||||
// @RabbitHandler
|
||||
// @RabbitListener(queues = {"websocket.drone.queue"}, concurrency = "8")
|
||||
// public void receiveDroneMessage(final String message) throws JsonProcessingException {
|
||||
// log.info("websocket message : {}", message);
|
||||
//
|
||||
// GPModel model = objectMapper.readValue(message, GPModel.class);
|
||||
//
|
||||
// CtrCntrlModel history = this.convertModel(model);
|
||||
//
|
||||
// // DRON의 대한 식별정보만 이력 관리
|
||||
// gpHistoryShareModel.putHistory(model.getObjectId(), history);
|
||||
// }
|
||||
//
|
||||
// public CtrCntrlModel convertModel(final GPModel dataInfo) {
|
||||
// CtrCntrlModel model = new CtrCntrlModel();
|
||||
// CtrCntrlModel prevModel = gpHistoryShareModel.getHistory(dataInfo.getObjectId());
|
||||
//
|
||||
// model.setObjectId(dataInfo.getObjectId());
|
||||
// model.setControlId(dataInfo.getControlId());
|
||||
// model.setTrmnlId(dataInfo.getTerminalId());
|
||||
// model.setControlStartDt(dataInfo.getControlStartDt());
|
||||
// model.setObjectTypeCd(dataInfo.getObjectType());
|
||||
// model.setLat(dataInfo.getLat());
|
||||
// model.setLng(dataInfo.getLng());
|
||||
// model.setElevType(dataInfo.getElevType());
|
||||
// model.setElev(dataInfo.getElev());
|
||||
// model.setSpeedType(dataInfo.getSpeedType());
|
||||
// model.setSpeed(dataInfo.getSpeed());
|
||||
// model.setBetteryLevel(dataInfo.getBetteryLevel());
|
||||
// model.setBetteryVoltage(dataInfo.getBetteryVoltage());
|
||||
// model.setDronStatus(dataInfo.getDronStatus());
|
||||
// model.setHeading(dataInfo.getHeading());
|
||||
// model.setMoveDistance(dataInfo.getMoveDistance());
|
||||
// model.setMoveDistanceType(dataInfo.getMoveDistanceType());
|
||||
//
|
||||
// model.setServerRcvDt(dataInfo.getServerRcvDt());
|
||||
//
|
||||
// // 환경 데이터 필드 추가
|
||||
// model.setSensorCo(dataInfo.getSensorCo());
|
||||
// model.setSensorSo2(dataInfo.getSensorSo2());
|
||||
// model.setSensorNo2(dataInfo.getSensorNo2());
|
||||
// model.setSensorO3(dataInfo.getSensorO3());
|
||||
// model.setSensorDust(dataInfo.getSensorDust());
|
||||
//
|
||||
// // 비정상 상황 식별코드 추가
|
||||
// model.setControlWarnCd(dataInfo.isControlWarnCd());
|
||||
//
|
||||
//// if(prevModel == null) {
|
||||
//// if(model.isControlWarnCd()) {
|
||||
//// model.setControlWarnNotyCd(true); // 최초 비정상 발생
|
||||
//// }
|
||||
//// } else {
|
||||
//// if(prevModel.isControlWarnCd() && model.isControlWarnCd()) {
|
||||
//// model.setControlWarnNotyCd(false); // 비정상 -> 비정상
|
||||
//// }
|
||||
//// if(prevModel.isControlWarnCd() && !model.isControlWarnCd()) {
|
||||
//// model.setControlWarnNotyCd(false); // 비정상 -> 정상
|
||||
//// }
|
||||
//// if(!prevModel.isControlWarnCd() && model.isControlWarnCd()) {
|
||||
//// model.setControlWarnNotyCd(true); // 정상 -> 비정상상
|
||||
//// }
|
||||
//// }
|
||||
////
|
||||
//// model.setControlCacheCount(1);
|
||||
//
|
||||
// return model;
|
||||
// }
|
||||
//}
|
||||
|
@ -0,0 +1,54 @@
|
||||
package com.palnet.server.controller; |
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException; |
||||
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
import com.palnet.comn.model.CtrCntrlModel; |
||||
import com.palnet.comn.model.CtrHistoryShareContext; |
||||
import com.palnet.comn.model.GPModel; |
||||
import com.palnet.server.task.ctr.service.CtrCntrlTaskService; |
||||
import lombok.RequiredArgsConstructor; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springframework.stereotype.Controller; |
||||
import org.springframework.ui.Model; |
||||
import org.springframework.web.bind.annotation.*; |
||||
|
||||
/** |
||||
* packageName : com.palnet.server.controller |
||||
* fileName : WebSocketReceiverController |
||||
* author : dhji |
||||
* date : 2023-08-28(028) |
||||
* description : |
||||
* =========================================================== |
||||
* DATE AUTHOR NOTE |
||||
* ----------------------------------------------------------- |
||||
* 2023-08-28(028) dhji 최초 생성 |
||||
*/ |
||||
@Slf4j |
||||
@RestController |
||||
@RequiredArgsConstructor |
||||
@RequestMapping("/api/ws") |
||||
public class WebSocketReceiverController { |
||||
|
||||
private final CtrCntrlTaskService service; |
||||
private final CtrHistoryShareContext historyShareContext; |
||||
private final ObjectMapper objectMapper; |
||||
|
||||
@PostMapping("/receiver") |
||||
public String receiver(@RequestBody String message) { |
||||
log.info("websocket message : {}", message); |
||||
|
||||
GPModel model = null; |
||||
try { |
||||
model = objectMapper.readValue(message, GPModel.class); |
||||
} catch (JsonProcessingException e) { |
||||
log.error("ERROR : {}\n{}", e.getMessage(), e.getStackTrace()); |
||||
throw new RuntimeException(e); |
||||
} |
||||
|
||||
CtrCntrlModel history = service.modelConvert(model); |
||||
|
||||
// DRON의 대한 식별정보만 이력 관리
|
||||
historyShareContext.putHistory(model.getObjectId(), history); |
||||
return "SUCCESS"; |
||||
} |
||||
} |
Loading…
Reference in new issue