@ -1,26 +1,24 @@
package com.palnet.server.command ;
import com.palnet.comn.collection.GPCollection ;
import com.palnet.comn.model.ControlCacheModel ;
import com.palnet.comn.model.GPHistoryModel ;
import com.palnet.comn.model.GPModel ;
import com.palnet.comn.utils.ContextUtils ;
import com.palnet.comn.utils.ControlCacheUtils ;
import com.palnet.comn.utils.DateUtils ;
import com.palnet.comn.utils.JsonUtils ;
import com.palnet.process.message.producer.MessageProducer ;
import com.palnet.server.codec.SocketPayload ;
import com.palnet.server.collection.ChannelCollection ;
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame ;
import org.slf4j.Logger ;
import org.slf4j.LoggerFactory ;
import org.springframework.core.env.Environment ;
import java.io.IOException ;
import java.io.OutputStream ;
import java.net.* ;
import java.net.http.HttpClient ;
import java.net.http.HttpRequest ;
import java.net.http.HttpResponse ;
import java.nio.charset.StandardCharsets ;
import java.util.* ;
public class SocketCommand {
@ -31,14 +29,14 @@ public class SocketCommand {
public SocketCommand ( ) {
this . messageProducer = ( MessageProducer ) ContextUtils . getBean ( "messageProducer" ) ;
this . env = ( Environment ) ContextUtils . getBean ( "environment" ) ;
this . env = ( Environment ) ContextUtils . getBean ( "environment" ) ;
}
GPCollection collection = new GPCollection ( ) ;
public void openSkyCollectionPut ( SocketPayload payload ) {
/** Socket Body **/
List < LinkedHashMap < ? , ? > > resultList = ( ArrayList ) payload . getBody ( ) ;
List < LinkedHashMap < ? , ? > > resultList = ( ArrayList ) payload . getBody ( ) ;
/** 전문 설정 ***/
final String messageType = "OPENSKY" ;
@ -46,27 +44,27 @@ public class SocketCommand {
List < GPModel > dataList = new ArrayList < GPModel > ( ) ;
for ( LinkedHashMap < ? , ? > obj : resultList ) {
for ( LinkedHashMap < ? , ? > obj : resultList ) {
GPModel model = new GPModel ( ) ;
model . setObjectType ( objectType ) ;
model . setMessageType ( messageType ) ;
model . setObjectId ( obj . get ( "objectId" ) . toString ( ) . trim ( ) ) ;
model . setTerminalId ( obj . get ( "terminalId" ) . toString ( ) . trim ( ) ) ;
model . setLat ( ( Double ) obj . get ( "lat" ) ) ;
model . setLng ( ( Double ) obj . get ( "lng" ) ) ;
model . setElev ( ( Double ) obj . get ( "elev" ) ) ;
model . setLat ( ( Double ) obj . get ( "lat" ) ) ;
model . setLng ( ( Double ) obj . get ( "lng" ) ) ;
model . setElev ( ( Double ) obj . get ( "elev" ) ) ;
model . setTerminalRcvDt ( obj . get ( "terminalRcvDt" ) . toString ( ) . trim ( ) ) ;
model . setSpeed ( ( Double ) obj . get ( "speed" ) ) ;
model . setHeading ( ( Double ) obj . get ( "heading" ) ) ;
model . setSpeedType ( ( String ) obj . get ( "speedType" ) ) ;
model . setElevType ( ( String ) obj . get ( "elevType" ) ) ;
model . setMoveDistanceType ( ( String ) obj . get ( "moveDistanceType" ) ) ;
model . setMoveDistance ( ( Double ) obj . get ( "moveDistance" ) ) ;
model . setSpeed ( ( Double ) obj . get ( "speed" ) ) ;
model . setHeading ( ( Double ) obj . get ( "heading" ) ) ;
model . setSpeedType ( ( String ) obj . get ( "speedType" ) ) ;
model . setElevType ( ( String ) obj . get ( "elevType" ) ) ;
model . setMoveDistanceType ( ( String ) obj . get ( "moveDistanceType" ) ) ;
model . setMoveDistance ( ( Double ) obj . get ( "moveDistance" ) ) ;
model . setBetteryLevel ( ( Double ) obj . get ( "betteryLevel" ) ) ;
model . setBetteryVoltage ( ( Double ) obj . get ( "betteryVoltage" ) ) ;
model . setDronStatus ( ( String ) obj . get ( "dronStatus" ) ) ;
model . setBetteryLevel ( ( Double ) obj . get ( "betteryLevel" ) ) ;
model . setBetteryVoltage ( ( Double ) obj . get ( "betteryVoltage" ) ) ;
model . setDronStatus ( ( String ) obj . get ( "dronStatus" ) ) ;
dataList . add ( model ) ;
}
@ -77,10 +75,11 @@ public class SocketCommand {
/ * *
* 들어온 데이터를 collection넣는 작업을 한다 .
*
* @param payload
* /
public void sandboxCollectionPut ( SocketPayload payload ) {
List < LinkedHashMap < ? , ? > > resultList = ( ArrayList ) payload . getBody ( ) ;
List < LinkedHashMap < ? , ? > > resultList = ( ArrayList ) payload . getBody ( ) ;
/** 전문 설정 ***/
final String messageType = "LTEM" ;
@ -89,9 +88,9 @@ public class SocketCommand {
// List<GPModel> dataList = new ArrayList<GPModel>();
/** 데이터 모델링 **/
for ( LinkedHashMap < ? , ? > obj : resultList ) {
for ( LinkedHashMap < ? , ? > obj : resultList ) {
//위,경도 좌표가 0으로 들어오는 것은 무시 처리
if ( ( Double ) obj . get ( "lat" ) > 0 & & ( Double ) obj . get ( "lon" ) > 0 ) {
if ( ( Double ) obj . get ( "lat" ) > 0 & & ( Double ) obj . get ( "lon" ) > 0 ) {
GPModel model = new GPModel ( ) ;
model . setObjectType ( objectType ) ;
@ -99,26 +98,30 @@ public class SocketCommand {
model . setObjectId ( obj . get ( "objectId" ) . toString ( ) . trim ( ) ) ;
model . setTerminalId ( payload . getTerminalId ( ) ) ;
model . setTerminalRcvDt ( obj . get ( "terminalRcvDt" ) . toString ( ) . trim ( ) ) ;
model . setSpeedType ( ( String ) obj . get ( "speedType" ) ) ;
model . setElevType ( ( String ) obj . get ( "elevType" ) ) ;
model . setMoveDistanceType ( ( String ) obj . get ( "moveDistanceType" ) ) ;
model . setDronStatus ( ( String ) obj . get ( "dronStatus" ) ) ;
if ( obj . get ( "lat" ) ! = null ) model . setLat ( Double . valueOf ( obj . get ( "lat" ) . toString ( ) ) ) ;
if ( obj . get ( "lon" ) ! = null ) model . setLng ( Double . valueOf ( obj . get ( "lon" ) . toString ( ) ) ) ;
if ( obj . get ( "elev" ) ! = null ) model . setElev ( Double . valueOf ( obj . get ( "elev" ) . toString ( ) ) ) ;
if ( obj . get ( "speed" ) ! = null ) model . setSpeed ( Double . valueOf ( obj . get ( "speed" ) . toString ( ) ) ) ;
if ( obj . get ( "heading" ) ! = null ) model . setHeading ( Double . valueOf ( obj . get ( "heading" ) . toString ( ) ) ) ;
if ( obj . get ( "moveDistance" ) ! = null ) model . setMoveDistance ( Double . valueOf ( obj . get ( "moveDistance" ) . toString ( ) ) ) ;
if ( obj . get ( "betteryLevel" ) ! = null ) model . setBetteryLevel ( Double . valueOf ( obj . get ( "betteryLevel" ) . toString ( ) ) ) ;
if ( obj . get ( "betteryVoltage" ) ! = null ) model . setBetteryVoltage ( Double . valueOf ( obj . get ( "betteryVoltage" ) . toString ( ) ) ) ;
model . setSpeedType ( ( String ) obj . get ( "speedType" ) ) ;
model . setElevType ( ( String ) obj . get ( "elevType" ) ) ;
model . setMoveDistanceType ( ( String ) obj . get ( "moveDistanceType" ) ) ;
model . setDronStatus ( ( String ) obj . get ( "dronStatus" ) ) ;
if ( obj . get ( "lat" ) ! = null ) model . setLat ( Double . valueOf ( obj . get ( "lat" ) . toString ( ) ) ) ;
if ( obj . get ( "lon" ) ! = null ) model . setLng ( Double . valueOf ( obj . get ( "lon" ) . toString ( ) ) ) ;
if ( obj . get ( "elev" ) ! = null ) model . setElev ( Double . valueOf ( obj . get ( "elev" ) . toString ( ) ) ) ;
if ( obj . get ( "speed" ) ! = null ) model . setSpeed ( Double . valueOf ( obj . get ( "speed" ) . toString ( ) ) ) ;
if ( obj . get ( "heading" ) ! = null ) model . setHeading ( Double . valueOf ( obj . get ( "heading" ) . toString ( ) ) ) ;
if ( obj . get ( "moveDistance" ) ! = null )
model . setMoveDistance ( Double . valueOf ( obj . get ( "moveDistance" ) . toString ( ) ) ) ;
if ( obj . get ( "betteryLevel" ) ! = null )
model . setBetteryLevel ( Double . valueOf ( obj . get ( "betteryLevel" ) . toString ( ) ) ) ;
if ( obj . get ( "betteryVoltage" ) ! = null )
model . setBetteryVoltage ( Double . valueOf ( obj . get ( "betteryVoltage" ) . toString ( ) ) ) ;
// 환경 데이터 필드 추가
if ( obj . get ( "sensorCo" ) ! = null ) model . setSensorCo ( Double . valueOf ( obj . get ( "sensorCo" ) . toString ( ) ) ) ;
if ( obj . get ( "sensorSo2" ) ! = null ) model . setSensorSo2 ( Double . valueOf ( obj . get ( "sensorSo2" ) . toString ( ) ) ) ;
if ( obj . get ( "sensorNo2" ) ! = null ) model . setSensorNo2 ( Double . valueOf ( obj . get ( "sensorNo2" ) . toString ( ) ) ) ;
if ( obj . get ( "sensorO3" ) ! = null ) model . setSensorO3 ( Double . valueOf ( obj . get ( "sensorO3" ) . toString ( ) ) ) ;
if ( obj . get ( "sensorDust" ) ! = null ) model . setSensorDust ( Double . valueOf ( obj . get ( "sensorDust" ) . toString ( ) ) ) ;
if ( obj . get ( "sensorCo" ) ! = null ) model . setSensorCo ( Double . valueOf ( obj . get ( "sensorCo" ) . toString ( ) ) ) ;
if ( obj . get ( "sensorSo2" ) ! = null ) model . setSensorSo2 ( Double . valueOf ( obj . get ( "sensorSo2" ) . toString ( ) ) ) ;
if ( obj . get ( "sensorNo2" ) ! = null ) model . setSensorNo2 ( Double . valueOf ( obj . get ( "sensorNo2" ) . toString ( ) ) ) ;
if ( obj . get ( "sensorO3" ) ! = null ) model . setSensorO3 ( Double . valueOf ( obj . get ( "sensorO3" ) . toString ( ) ) ) ;
if ( obj . get ( "sensorDust" ) ! = null )
model . setSensorDust ( Double . valueOf ( obj . get ( "sensorDust" ) . toString ( ) ) ) ;
// 서버 수신 시간 정보
model . setServerRcvDt ( DateUtils . getCurrentTime ( ) ) ;
@ -131,7 +134,7 @@ public class SocketCommand {
history . setLat ( model . getLat ( ) ) ;
history . setLng ( model . getLng ( ) ) ;
if ( model . getPostionHistory ( ) ! = null ) {
if ( model . getPostionHistory ( ) ! = null ) {
hisList = model . getPostionHistory ( ) ;
} else {
hisList = new ArrayList < > ( ) ;
@ -140,6 +143,11 @@ public class SocketCommand {
hisList . add ( history ) ;
model . setPostionHistory ( hisList ) ;
Long start = System . currentTimeMillis ( ) ;
// STEP 1. 전에 내부 메모리에서 controlId 조회
ControlCacheModel control = ControlCacheUtils . getControl ( model . getObjectId ( ) ) ;
if ( control = = null ) {
// STEP 1. Control ID 발급 -> Application Server Http 통신
try {
HttpRequest request = HttpRequest . newBuilder ( )
@ -169,17 +177,34 @@ public class SocketCommand {
model . setControlWarnCd ( "Y" . equals ( data . get ( "controlWarnCd" ) ) ? true : false ) ;
model . setControlStartDt ( DateUtils . getCurrentTime ( ) ) ;
ControlCacheModel ccm = new ControlCacheModel ( ) ;
ccm . setControlId ( ( String ) data . get ( "controlId" ) ) ;
ccm . setTypeCd ( ( String ) data . get ( "typeCd" ) ) ;
ccm . setAreaTrnsYn ( ( String ) data . get ( "areaTrnsYn" ) ) ;
ccm . setControlWarnCd ( "Y" . equals ( data . get ( "controlWarnCd" ) ) ? true : false ) ;
ccm . setRegTime ( System . currentTimeMillis ( ) ) ;
ControlCacheUtils . setControl ( model . getObjectId ( ) , ccm ) ;
} catch ( IOException e ) {
logger . error ( "요청한 URL 정보가 잘못되었습니다." , e . getMessage ( ) ) ;
} catch ( Exception e ) {
e . printStackTrace ( ) ;
}
} else {
model . setControlId ( control . getControlId ( ) ) ;
model . setTypeCd ( "2" ) ;
model . setAreaTrnsYn ( control . getAreaTrnsYn ( ) ) ;
model . setControlWarnCd ( control . isControlWarnCd ( ) ) ;
control . setRegTime ( System . currentTimeMillis ( ) ) ;
}
Long end = System . currentTimeMillis ( ) ;
logger . info ( ">>> during time : {}::{}" , model . getObjectId ( ) , end - start ) ;
// STEP 2. 이력 생성할 전문 전달
// messageProducer.sendControlHistoryMessage(model);
messageProducer . sendControlHistoryMessage ( model ) ;
// STEP 3. 화면에 표출할 정보 WebSocket 전달
// messageProducer.sendControlMessage(model);
messageProducer . sendControlMessage ( model ) ;
// try {
// Socket socket = new Socket();