|
|
@ -1,11 +1,25 @@ |
|
|
|
package com.palnet.server.command; |
|
|
|
package com.palnet.server.command; |
|
|
|
|
|
|
|
|
|
|
|
import com.palnet.comn.collection.GPCollection; |
|
|
|
import com.palnet.comn.collection.GPCollection; |
|
|
|
|
|
|
|
import com.palnet.comn.model.GPHistoryModel; |
|
|
|
import com.palnet.comn.model.GPModel; |
|
|
|
import com.palnet.comn.model.GPModel; |
|
|
|
|
|
|
|
import com.palnet.comn.utils.ContextUtils; |
|
|
|
|
|
|
|
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.codec.SocketPayload; |
|
|
|
|
|
|
|
import com.palnet.server.collection.ChannelCollection; |
|
|
|
|
|
|
|
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame; |
|
|
|
import org.slf4j.Logger; |
|
|
|
import org.slf4j.Logger; |
|
|
|
import org.slf4j.LoggerFactory; |
|
|
|
import org.slf4j.LoggerFactory; |
|
|
|
|
|
|
|
import org.springframework.core.env.Environment; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import java.io.IOException; |
|
|
|
|
|
|
|
import java.io.OutputStream; |
|
|
|
|
|
|
|
import java.net.InetSocketAddress; |
|
|
|
|
|
|
|
import java.net.Socket; |
|
|
|
|
|
|
|
import java.net.SocketAddress; |
|
|
|
|
|
|
|
import java.nio.charset.StandardCharsets; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.LinkedHashMap; |
|
|
|
import java.util.LinkedHashMap; |
|
|
|
import java.util.List; |
|
|
|
import java.util.List; |
|
|
@ -13,27 +27,28 @@ import java.util.List; |
|
|
|
public class SocketCommand { |
|
|
|
public class SocketCommand { |
|
|
|
|
|
|
|
|
|
|
|
private Logger logger = LoggerFactory.getLogger(getClass()); |
|
|
|
private Logger logger = LoggerFactory.getLogger(getClass()); |
|
|
|
|
|
|
|
private MessageProducer messageProducer; |
|
|
|
|
|
|
|
private Environment env; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public SocketCommand() { |
|
|
|
|
|
|
|
this.messageProducer = (MessageProducer) ContextUtils.getBean("messageProducer"); |
|
|
|
|
|
|
|
this.env = env; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
GPCollection collection = new GPCollection(); |
|
|
|
GPCollection collection = new GPCollection(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void openSkyCollectionPut(SocketPayload payload) { |
|
|
|
public void openSkyCollectionPut(SocketPayload payload) { |
|
|
|
|
|
|
|
/** Socket Body **/ |
|
|
|
|
|
|
|
List<LinkedHashMap<?,?>> resultList = (ArrayList)payload.getBody(); |
|
|
|
|
|
|
|
|
|
|
|
/** 전문 설정 ***/ |
|
|
|
/** 전문 설정 ***/ |
|
|
|
String messageType = "OPENSKY"; |
|
|
|
final String messageType = "OPENSKY"; |
|
|
|
String objectType = "FLIGHT"; |
|
|
|
final String objectType = "FLIGHT"; |
|
|
|
|
|
|
|
|
|
|
|
List<LinkedHashMap<?,?>> resultList = new ArrayList<LinkedHashMap<?,?>>(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<GPModel> dataList = new ArrayList<GPModel>(); |
|
|
|
List<GPModel> dataList = new ArrayList<GPModel>(); |
|
|
|
|
|
|
|
|
|
|
|
logger.debug("BODY TYPE :: " + payload.getBody().getClass()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
resultList = (ArrayList)payload.getBody(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GPModel model; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for(LinkedHashMap<?,?> obj : resultList) { |
|
|
|
for(LinkedHashMap<?,?> obj : resultList) { |
|
|
|
model = new GPModel(); |
|
|
|
GPModel model = new GPModel(); |
|
|
|
|
|
|
|
|
|
|
|
model.setObjectType(objectType); |
|
|
|
model.setObjectType(objectType); |
|
|
|
model.setMessageType(messageType); |
|
|
|
model.setMessageType(messageType); |
|
|
@ -66,45 +81,38 @@ public class SocketCommand { |
|
|
|
* @param payload |
|
|
|
* @param payload |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public void sandboxCollectionPut(SocketPayload payload) { |
|
|
|
public void sandboxCollectionPut(SocketPayload payload) { |
|
|
|
|
|
|
|
List<LinkedHashMap<?,?>> resultList = (ArrayList)payload.getBody(); |
|
|
|
|
|
|
|
|
|
|
|
/** 전문 설정 ***/ |
|
|
|
/** 전문 설정 ***/ |
|
|
|
String messageType = "LTEM"; |
|
|
|
final String messageType = "LTEM"; |
|
|
|
String objectType = "DRON"; |
|
|
|
final String objectType = "DRON"; |
|
|
|
|
|
|
|
|
|
|
|
List<LinkedHashMap<?,?>> resultList = new ArrayList<LinkedHashMap<?,?>>(); |
|
|
|
// List<GPModel> dataList = new ArrayList<GPModel>();
|
|
|
|
|
|
|
|
|
|
|
|
List<GPModel> dataList = new ArrayList<GPModel>(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
logger.debug("BODY TYPE :: " + payload.getBody().getClass()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
resultList = (ArrayList)payload.getBody(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GPModel model; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for(LinkedHashMap<?,?> obj : resultList) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** 데이터 모델링 **/ |
|
|
|
|
|
|
|
for(LinkedHashMap<?,?> obj : resultList) { |
|
|
|
//위,경도 좌표가 0으로 들어오는 것은 무시 처리
|
|
|
|
//위,경도 좌표가 0으로 들어오는 것은 무시 처리
|
|
|
|
if((Double)obj.get("lat") > 0 && (Double)obj.get("lon") > 0) { |
|
|
|
if((Double)obj.get("lat") > 0 && (Double)obj.get("lon") > 0) { |
|
|
|
model = new GPModel(); |
|
|
|
GPModel model = new GPModel(); |
|
|
|
// logger.debug(">>>>" + obj.toString());
|
|
|
|
|
|
|
|
model.setObjectType(objectType); |
|
|
|
model.setObjectType(objectType); |
|
|
|
model.setMessageType(messageType); |
|
|
|
model.setMessageType(messageType); |
|
|
|
model.setObjectId(obj.get("objectId").toString().trim()); |
|
|
|
model.setObjectId(obj.get("objectId").toString().trim()); |
|
|
|
model.setTerminalId(payload.getTerminalId()); |
|
|
|
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("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("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("elev") != null) model.setElev(Double.valueOf(obj.get("elev").toString())); |
|
|
|
model.setTerminalRcvDt(obj.get("terminalRcvDt").toString().trim()); |
|
|
|
|
|
|
|
if(obj.get("speed") != null) model.setSpeed(Double.valueOf(obj.get("speed").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("heading") != null) model.setHeading(Double.valueOf(obj.get("heading").toString())); |
|
|
|
model.setSpeedType((String)obj.get("speedType")); |
|
|
|
|
|
|
|
model.setElevType((String)obj.get("elevType")); |
|
|
|
|
|
|
|
model.setMoveDistanceType((String)obj.get("moveDistanceType")); |
|
|
|
|
|
|
|
if(obj.get("moveDistance") != null) model.setMoveDistance(Double.valueOf(obj.get("moveDistance").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("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("betteryVoltage") != null) model.setBetteryVoltage(Double.valueOf(obj.get("betteryVoltage").toString())); |
|
|
|
model.setDronStatus((String)obj.get("dronStatus")); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 환경 데이터 필드 추가
|
|
|
|
// 환경 데이터 필드 추가
|
|
|
|
if(obj.get("sensorCo") != null) model.setSensorCo(Double.valueOf(obj.get("sensorCo").toString())); |
|
|
|
if(obj.get("sensorCo") != null) model.setSensorCo(Double.valueOf(obj.get("sensorCo").toString())); |
|
|
@ -113,13 +121,59 @@ public class SocketCommand { |
|
|
|
if(obj.get("sensorO3") != null) model.setSensorO3(Double.valueOf(obj.get("sensorO3").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("sensorDust") != null) model.setSensorDust(Double.valueOf(obj.get("sensorDust").toString())); |
|
|
|
|
|
|
|
|
|
|
|
dataList.add(model); |
|
|
|
// 서버 수신 시간 정보
|
|
|
|
}else { |
|
|
|
model.setServerRcvDt(DateUtils.getCurrentTime()); |
|
|
|
logger.info("lat , lon No data "); |
|
|
|
|
|
|
|
|
|
|
|
// 관제 이력 정보
|
|
|
|
|
|
|
|
List<GPHistoryModel> hisList; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GPHistoryModel history = new GPHistoryModel(); |
|
|
|
|
|
|
|
history.setObjectId(model.getObjectId()); |
|
|
|
|
|
|
|
history.setLat(model.getLat()); |
|
|
|
|
|
|
|
history.setLng(model.getLng()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(model.getPostionHistory() != null) { |
|
|
|
|
|
|
|
hisList = model.getPostionHistory(); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
hisList = new ArrayList<>(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hisList.add(history); |
|
|
|
|
|
|
|
model.setPostionHistory(hisList); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// STEP 1. Control ID 발급 -> Application Server Http 통신
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// STEP 2. 이력 생성할 전문 전달
|
|
|
|
|
|
|
|
messageProducer.sendToAppServerMessage(model); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// STEP 3. 화면에 표출할 정보 WebSocket 전달
|
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
Socket socket = new Socket(); |
|
|
|
|
|
|
|
SocketAddress address = new InetSocketAddress( |
|
|
|
|
|
|
|
env.getProperty("netty.websocket.host"), |
|
|
|
|
|
|
|
Integer.parseInt(env.getProperty("netty.websocket.port")) |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
socket.connect(address); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String gpsJson = JsonUtils.toJson(model); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
OutputStream outputStream = socket.getOutputStream(); |
|
|
|
|
|
|
|
outputStream.write(gpsJson.getBytes(StandardCharsets.UTF_8)); |
|
|
|
|
|
|
|
outputStream.flush(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
socket.close(); |
|
|
|
|
|
|
|
} catch (IOException e) { |
|
|
|
|
|
|
|
logger.error(""); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// dataList.add(model);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
logger.error("좌표 정보가 존재하지 않습니다."); |
|
|
|
|
|
|
|
throw new IllegalArgumentException("좌표 정보가 존재하지 않습니다."); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
collection.putData(dataList); |
|
|
|
// collection.putData(dataList);
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|