Compare commits
3 Commits
master
...
feature/re
Author | SHA1 | Date |
---|---|---|
지대한 | dc70c4f37e | 1 year ago |
지대한 | 6c12365a23 | 1 year ago |
지대한 | 35fbb41664 | 1 year ago |
11 changed files with 130 additions and 246 deletions
@ -1,22 +0,0 @@
|
||||
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 +0,0 @@
|
||||
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 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 +0,0 @@
|
||||
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,67 @@
|
||||
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.http.ResponseEntity; |
||||
import org.springframework.web.bind.annotation.*; |
||||
|
||||
import java.util.concurrent.Callable; |
||||
|
||||
/** |
||||
* 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 SocketReceiverController { |
||||
|
||||
private final CtrCntrlTaskService service; |
||||
private final CtrHistoryShareContext historyShareContext; |
||||
private final ObjectMapper objectMapper; |
||||
|
||||
@PostMapping("/receiver") |
||||
public ResponseEntity<?> receiver(@RequestBody GPModel model) { |
||||
log.info("websocket message : {}", model); |
||||
// 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 ResponseEntity.ok().build(); |
||||
} |
||||
|
||||
@PostMapping("/receiver/async") |
||||
public Callable<String> asyncReceiver(@RequestBody GPModel model) { |
||||
return () -> { |
||||
log.info("websocket message : {}", model); |
||||
CtrCntrlModel history = service.modelConvert(model); |
||||
// DRON의 대한 식별정보만 이력 관리
|
||||
historyShareContext.putHistory(model.getObjectId(), history); |
||||
|
||||
return "OK"; |
||||
}; |
||||
} |
||||
} |
Loading…
Reference in new issue