Browse Source

비행 종료 처리 수신 주기 수정: 5분 -> 1분

Test
노승철 2 years ago
parent
commit
8c69af9913
  1. 58
      src/main/java/com/palnet/biz/scheduler/ctr/CtrScheduler.java
  2. 202
      src/main/java/com/palnet/biz/scheduler/ctr/service/CtrSchedulerService.java
  3. 2
      src/main/resources/application.properties

58
src/main/java/com/palnet/biz/scheduler/ctr/CtrScheduler.java

@ -20,60 +20,28 @@ public class CtrScheduler {
private CtrSchedulerService service; private CtrSchedulerService service;
private Logger logger = LoggerFactory.getLogger(getClass()); private Logger logger = LoggerFactory.getLogger(getClass());
/** /**
* 실행 시점 : 10초에 한번 * TODO 비행 종료 처리 - 최신 수신 일로 부터 5분동안 데이터 수신 되지 않는 경우 종료 처리
* 실행 내용 : 특정시간 들어오지 않는 데이터 삭제 처리 *
* 실행 주기 : 10초
*/ */
@Scheduled(fixedDelay = 1000 * 60) @Scheduled(fixedDelay = 1000 * 10)
public void removeCollection() { public void controlEndScheduler() {
logger.debug("=================== {removeCollection} ===================== "); logger.debug("=================== {Control End Scheduler} ===================== ");
service.remove(); service.controlEndProcess();
} }
/** /**
* 실행 시점 : 10초에 한번 * TODO 비행 시작 지점 주소 변환 처리
* 실행 내용 : Database GP 데이터 내용 저장 처리 *
*/ * 실행 주기 : 10초
// @Scheduled(fixedDelay = 1000 * 10)
// public void gpDataInsert() {
// logger.debug("=================== {gpDataInsert} ===================== ");
// service.insertGpData();
// }
/**
* 실행 시점 : 10초에 한번
* 실행 내용 : 주소 변환 처리
*/ */
@Scheduled(fixedDelay = 1000 * 10) @Scheduled(fixedDelay = 1000 * 10)
public void transferLocation() { public void transferLocationScheduler() {
logger.debug("=================== {transferLocation} ===================== "); logger.debug("=================== {transferLocation} ===================== ");
service.trnsLctnPrcss(); service.transferLocationProcess();
} }
/**
* 실행 시점 : 10분에 한번
* 실행 내용 : 종료 처리 되지 않은 데이터 종료 처리
*/
// @Scheduled(fixedDelay = 1000 * 60 * 10)
// public void endData() {
// logger.debug("=================== {endProc} ===================== ");
// service.endData();
// }
/**
* 실행 시점 : 10분에 한번
* 실행 내용 : 종료후 평균값 등을 계산
*/
// @Scheduled(fixedDelay = 1000 * 60 * 10)
// public void endCalProc() {
// logger.debug("=================== {endProc} ===================== ");
// service.endData();
//
// }
} }

202
src/main/java/com/palnet/biz/scheduler/ctr/service/CtrSchedulerService.java

@ -1,82 +1,44 @@
package com.palnet.biz.scheduler.ctr.service; package com.palnet.biz.scheduler.ctr.service;
import java.util.*; import java.util.*;
import java.util.concurrent.ConcurrentLinkedQueue;
import com.palnet.biz.jpa.repository.ctr.CtrCntrlBasRepository; import com.palnet.biz.jpa.repository.ctr.CtrCntrlBasRepository;
import com.palnet.biz.jpa.repository.ctr.CtrCntrlHstryAreaRepository; import com.palnet.biz.jpa.repository.ctr.CtrCntrlHstryAreaRepository;
import com.palnet.biz.jpa.repository.ctr.CtrCntrlHstryRepository; import com.palnet.biz.jpa.repository.ctr.CtrCntrlHstryRepository;
import com.palnet.biz.api.comn.model.ControlGpsDataContext; import com.palnet.biz.api.comn.model.ControlGpsDataContext;
import org.slf4j.Logger; import lombok.RequiredArgsConstructor;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlEndModel;
import com.palnet.biz.jpa.entity.CtrCntrlHstry; import com.palnet.biz.jpa.entity.CtrCntrlHstry;
import com.palnet.biz.jpa.entity.CtrCntrlHstryArea; import com.palnet.biz.jpa.entity.CtrCntrlHstryArea;
import com.palnet.biz.jpa.repository.ctr.CtrCntrlQueryRepository; import com.palnet.biz.jpa.repository.ctr.CtrCntrlQueryRepository;
import com.palnet.biz.jpa.repository.pty.PtyDronQueryRepository;
import com.palnet.biz.jpa.service.ctr.CtrCntrlJpaService; import com.palnet.biz.jpa.service.ctr.CtrCntrlJpaService;
import com.palnet.biz.scheduler.ctr.model.CtrTrnsLctnModel; import com.palnet.biz.scheduler.ctr.model.CtrTrnsLctnModel;
import com.palnet.comn.collection.GPCollection;
import com.palnet.comn.collection.GPDatabaseCollection;
import com.palnet.comn.model.GPDatabaseModel;
import com.palnet.comn.utils.DateUtils; import com.palnet.comn.utils.DateUtils;
@Service @Service
@RequiredArgsConstructor
public class CtrSchedulerService { public class CtrSchedulerService {
private GPCollection cic = new GPCollection();
private GPDatabaseCollection gpdc = new GPDatabaseCollection();
@Autowired
private CtrCntrlJpaService service;
@Autowired
private CtrCntrlQueryRepository query;
@Autowired private final CtrCntrlJpaService service;
private CtrTrnsLctnService trnsService; private final CtrTrnsLctnService trnsService;
private final CtrCntrlQueryRepository ctrCntrlQueryRepository;
@Autowired private final CtrCntrlHstryRepository ctrCntrlHstryRepository;
private PtyDronQueryRepository dronQuery; private final CtrCntrlBasRepository ctrCntrlBasRepository;
private final CtrCntrlHstryAreaRepository ctrCntrlHstryAreaRepository;
@Autowired private final ControlGpsDataContext gpsDataContext;
private ControlGpsDataContext gpsDataContext;
@Autowired
private CtrCntrlHstryRepository ctrCntrlHstryRepository;
@Autowired
private CtrCntrlBasRepository ctrCntrlBasRepository;
@Autowired
private CtrCntrlHstryAreaRepository ctrCntrlHstryAreaRepository;
private Logger logger = LoggerFactory.getLogger(getClass());
@Value("${gp.remove.time}")
private long GP_REMOVE_TIME;
@Value("${gp.insert.count}")
private long GP_INSERT_COUNT;
@Value("${gp.end.time}") @Value("${gp.end.time}")
private long GP_END_TIME; private long GP_END_TIME;
/** /**
* 일정 주기로 위치 데이터가 오지 않는 데이터 중지 처리 * TODO 비행 종료 처리 - 최신 수신 일로 부터 5분동안 데이터 수신 되지 않는 경우 종료 처리
* 기준 *
* 1) {param} 이상 데이터가 들어오지 않을 경우
* 2) 마지막 데이터 속도가 0 , 고도가 0 (현재 적용 X)
*/ */
public void remove() { public void controlEndProcess() {
Map<String, String> keys = gpsDataContext.getAllKeys(); Map<String, String> keys = gpsDataContext.getAllKeys();
keys.forEach((key, value) -> { keys.forEach((key, value) -> {
@ -85,7 +47,7 @@ public class CtrSchedulerService {
if(Objects.nonNull(history)) { if(Objects.nonNull(history)) {
long diffMinute = DateUtils.diffMinute(history.getSrvrRcvDt(), new Date()); long diffMinute = DateUtils.diffMinute(history.getSrvrRcvDt(), new Date());
if(diffMinute > GP_REMOVE_TIME) { if(diffMinute > GP_END_TIME) {
ctrCntrlBasRepository.updateCntrlEndType("01", DateUtils.nowDate(), "99", history.getCntrlId()); ctrCntrlBasRepository.updateCntrlEndType("01", DateUtils.nowDate(), "99", history.getCntrlId());
/* 종료지점 주소 저장 */ /* 종료지점 주소 저장 */
@ -107,41 +69,9 @@ public class CtrSchedulerService {
} }
}); });
} }
/*public void removeInfo() {
Map<String , GPModel> cicData = cic.getData();
GPModel model;
Date nowDate = new Date(); // 현재 시간 구하기
Iterator<String> itKey = cicData.keySet().iterator();
while (itKey.hasNext()) {
String index = itKey.next();
model = cicData.get(index);
Date lastRevDate = DateUtils.stringToDatetime(model.getServerRcvDt());
long diffMinute = DateUtils.diffMinute(lastRevDate, nowDate);
if(diffMinute > GP_REMOVE_TIME) {
model.setControlEndDt(DateUtils.getCurrentTime());
model.setTypeCd("99");
model.setAreaTrnsYn("N");
cic.putDatabase(model);
itKey.remove();
}
}
logger.debug("{removeInfo } collection size :: " + cicData.size() + "");
}*/
public void transferLocationProcess() {
public void trnsLctnPrcss() { List<CtrCntrlHstryArea> list = ctrCntrlQueryRepository.listCntrlHstryArea();
List<CtrCntrlHstryArea> list = query.listCntrlHstryArea();
if(list.size() > 0) { if(list.size() > 0) {
for(CtrCntrlHstryArea entity : list) { for(CtrCntrlHstryArea entity : list) {
@ -155,101 +85,5 @@ public class CtrSchedulerService {
service.updateCtrCntrlHstryArea(lctnModel); service.updateCtrCntrlHstryArea(lctnModel);
} }
} }
}
public void insertGpData() {
ConcurrentLinkedQueue<GPDatabaseModel> gpdcList = gpdc.getData();
int count = 0;
Iterator<GPDatabaseModel> itKey = gpdcList.iterator();
logger.debug("SIZE >>>" + gpdcList.size());
GPDatabaseModel model;
while (itKey.hasNext()) {
model = itKey.next();
if(count == GP_INSERT_COUNT) {
break;
}
logger.debug("%%%%" + model.getTypeCd());
if(!model.getMessageType().equals("OPENSKY")) {
if(model.getTypeCd().equals("01")) {
//마스터 정보에저장
//식별번호로 제작번호 알아오기
String prodNumber = dronQuery.findIdntfNumByProdNumber(model.getObjectId());
model.setProdNumber(prodNumber);
service.insertCtrCntrlBas(model);
}else if(model.getTypeCd().equals("99")) {
//마스터 정보에 종료 처리 저장
model.setEndTypeCd("01");
service.updateCtrCntrlBas(model);
}
CtrCntrlHstry hstryEntity = service.insertCtrCntrlHstry(model);
if(model.getTypeCd().equals("01") || model.getTypeCd().equals("99")) {
service.insertCtrCntrlHstryArea(model, hstryEntity.getHstrySno());
}
}
itKey.remove();
count ++;
}
} }
public void endData() {
List<CtrCntrlEndModel> endList = query.endList();
Date nowDate = new Date(); // 현재 시간 구하기
for(CtrCntrlEndModel data : endList) {
long diffMinute = DateUtils.diffMinute(data.getSrvrRcvDt(), nowDate);
if(diffMinute > GP_END_TIME) {
GPDatabaseModel model = new GPDatabaseModel();
model.setEndTypeCd("02");
model.setControlId(data.getCntrlId());;
model.setTypeCd("99");
model.setControlEndDt(DateUtils.getCurrentTime());
service.updateCtrCntrlBas(model);
}
}
}
// private static List<GPDatabaseModel> dataList = Collections.synchronizedList(new ArrayList<GPDatabaseModel>());
// public static void main(String [] args) {
// int COUNT = 1000;
// int count =0;
// for(int i=0 ; i< 4000; i++) {
//
//
// GPDatabaseModel model = new GPDatabaseModel();
// model.setControlId(i + " slfjwelfjklwjflwejflwejflwjfklwjlfwejlf");
// dataList.add(model);
// }
//
// System.out.println("SIZE ============>" + dataList.size());
//
//
// Iterator<GPDatabaseModel> iter = dataList.iterator();
//
// while (iter.hasNext()) {
//
// if(count == COUNT) {
//
// break;
// }
// count ++;
// GPDatabaseModel model = iter.next();
// System.out.println("count ====> " + count + "model ============> " + model.getControlId());
// iter.remove();
// }
//
//
// }
} }

2
src/main/resources/application.properties

@ -3,7 +3,7 @@
###### GP 데이터 데이터 저장 설정 ####### ###### GP 데이터 데이터 저장 설정 #######
gp.remove.time = 5 gp.remove.time = 5
gp.insert.count = 1000 gp.insert.count = 1000
gp.end.time=10 gp.end.time= 1
####### Naver 주소변화 API 값 ############# ####### Naver 주소변화 API 값 #############
naver.api.id=5md90yszqj naver.api.id=5md90yszqj

Loading…
Cancel
Save