지대한
1 year ago
5 changed files with 127 additions and 65 deletions
@ -1,77 +1,106 @@ |
|||||||
package com.palnet.comn.collection; |
package com.palnet.comn.collection; |
||||||
|
|
||||||
import com.palnet.comn.model.GPHistoryModel; |
|
||||||
import com.palnet.comn.model.GPModel; |
import com.palnet.comn.model.GPModel; |
||||||
import com.palnet.comn.utils.DateUtils; |
|
||||||
import com.palnet.comn.utils.JsonUtils; |
|
||||||
import lombok.extern.slf4j.Slf4j; |
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.springframework.scheduling.annotation.Scheduled; |
||||||
|
import org.springframework.stereotype.Component; |
||||||
|
|
||||||
import java.io.IOException; |
import java.time.Instant; |
||||||
import java.io.OutputStream; |
import java.util.*; |
||||||
import java.net.InetSocketAddress; |
|
||||||
import java.net.Socket; |
|
||||||
import java.net.SocketAddress; |
|
||||||
import java.nio.charset.StandardCharsets; |
|
||||||
import java.util.ArrayList; |
|
||||||
import java.util.List; |
|
||||||
|
|
||||||
/** |
/** |
||||||
* 현재 움직이는 물체/비행체에 대한 정보를 전송하기 위해 저장하는 Collection |
* 현재 움직이는 물체/비행체에 대한 정보를 전송하기 위해 저장하는 Collection |
||||||
* @author kang |
|
||||||
* |
* |
||||||
|
* @author kang |
||||||
*/ |
*/ |
||||||
|
|
||||||
@Slf4j |
@Slf4j |
||||||
|
@Component |
||||||
public class GPCollection { |
public class GPCollection { |
||||||
// private MessageProducer messageProducer;
|
|
||||||
|
|
||||||
// public GPCollection() {
|
|
||||||
// this.messageProducer = (MessageProducer) ContextUtils.getBean("messageProducer");
|
|
||||||
// }
|
|
||||||
|
|
||||||
// 받은 데이터 정보를 데이터구조에 맞게 저장 한다.
|
|
||||||
// 최초에 데이터를 수신한 경우 관제 ID , 관제시작 시간을 셋팅한다.
|
|
||||||
public void putData(List<GPModel> paramData) { |
|
||||||
List<GPHistoryModel> historyList; |
|
||||||
|
|
||||||
for(GPModel data : paramData) { |
|
||||||
data.setServerRcvDt(DateUtils.getCurrentTime()); //서버에서 받은 시간 넣기
|
|
||||||
|
|
||||||
// History Coordinates Settings
|
|
||||||
GPHistoryModel historyModel = new GPHistoryModel(); |
|
||||||
historyModel.setObjectId(data.getObjectId()); |
|
||||||
historyModel.setLat(data.getLat()); |
|
||||||
historyModel.setLng(data.getLng()); |
|
||||||
|
|
||||||
if (data.getPostionHistory() != null) { |
|
||||||
historyList = data.getPostionHistory(); |
|
||||||
} else { |
|
||||||
historyList = new ArrayList<>(); |
|
||||||
} |
|
||||||
|
|
||||||
historyList.add(historyModel); |
|
||||||
data.setPostionHistory(historyList); |
|
||||||
|
|
||||||
/* Message Queue Server 전달 */ |
|
||||||
// messageProducer.sendControlMessage(data);
|
|
||||||
|
|
||||||
try { |
|
||||||
Socket socket = new Socket(); |
|
||||||
SocketAddress address = new InetSocketAddress("192.168.0.26", 4355); |
|
||||||
socket.connect(address); |
|
||||||
|
|
||||||
String gpsJson = JsonUtils.toJson(data); |
|
||||||
|
|
||||||
OutputStream outputStream = socket.getOutputStream(); |
|
||||||
outputStream.write(gpsJson.getBytes(StandardCharsets.UTF_8)); |
|
||||||
outputStream.flush(); |
|
||||||
|
|
||||||
socket.close(); |
|
||||||
|
|
||||||
} catch (IOException e) { |
private static Map<String, List<GPModel>> gpMap = Collections.synchronizedMap(new HashMap<>()); // 누적 GPModel key-objectId
|
||||||
e.printStackTrace(); |
|
||||||
} |
public static void init() { |
||||||
} |
gpMap = Collections.synchronizedMap(new HashMap<>()); |
||||||
} |
} |
||||||
|
|
||||||
|
public static void init(String objectId) { |
||||||
|
if (objectId == null || objectId.isEmpty()) { |
||||||
|
return; |
||||||
|
} |
||||||
|
gpMap.remove(objectId); |
||||||
|
} |
||||||
|
|
||||||
|
public static Map<String, List<GPModel>> getAll() { |
||||||
|
if (gpMap.keySet().size() < 1) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
return gpMap; |
||||||
|
} |
||||||
|
|
||||||
|
public static List<GPModel> get(String objectId) { |
||||||
|
if (objectId == null || objectId.isEmpty()) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
if (gpMap.get(objectId) == null) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
return gpMap.get(objectId); |
||||||
|
} |
||||||
|
|
||||||
|
public static void set(GPModel model) { |
||||||
|
if (model == null || model.getObjectId() == null || model.getObjectId().isEmpty()) { |
||||||
|
return; |
||||||
|
} |
||||||
|
List<GPModel> list = gpMap.get(model.getObjectId()); |
||||||
|
if (list == null) { |
||||||
|
list = new ArrayList<>(); |
||||||
|
} |
||||||
|
list.add(model); |
||||||
|
gpMap.put(model.getObjectId(), list); |
||||||
|
} |
||||||
|
|
||||||
|
public static List<GPModel> send(String objectId) { |
||||||
|
if (objectId == null || objectId.isEmpty()) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
if (!gpMap.containsKey(objectId)) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
List<GPModel> list = gpMap.get(objectId); |
||||||
|
gpMap.remove(objectId); |
||||||
|
return list; |
||||||
|
} |
||||||
|
|
||||||
|
public static Map<String, List<GPModel>> sendAll() { |
||||||
|
log.info("sendAll start - GPMap size : {}", gpMap.size()); |
||||||
|
if(gpMap.keySet().size() < 1) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
Map<String, List<GPModel>> map = gpMap; |
||||||
|
GPCollection.init(); |
||||||
|
log.info("sendAll end - GPMap size : {}/{}", gpMap.size(), map.size()); |
||||||
|
return map; |
||||||
|
} |
||||||
|
|
||||||
|
// 1분마다 데이터 삭제
|
||||||
|
@Scheduled(fixedDelay = 1000 * 60) |
||||||
|
public void removeSchedule() { |
||||||
|
log.info("removeSchedule start - GPMap size : {}", gpMap.size()); |
||||||
|
for (String key : gpMap.keySet()) { |
||||||
|
List<GPModel> list = gpMap.get(key); |
||||||
|
if (list == null || list.size() == 0) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
GPModel model = list.get(list.size() - 1); |
||||||
|
// 1분 이상된 데이터 삭제
|
||||||
|
Instant compareTime = Instant.now().minusSeconds(60); |
||||||
|
if (compareTime.isAfter(model.getRegDt())) { |
||||||
|
log.info("remove data - 1 munite over : {}", key); |
||||||
|
gpMap.remove(key); |
||||||
|
} |
||||||
|
} |
||||||
|
log.info("removeSchedule end - GPMap size : {}", gpMap.size()); |
||||||
|
} |
||||||
|
|
||||||
} |
} |
||||||
|
Loading…
Reference in new issue