|
|
@ -3,12 +3,21 @@ package kr.co.palnet.kac.app.api.v1.inner.socket.service; |
|
|
|
import kr.co.palnet.kac.app.api.v1.inner.socket.storage.ControlGpsStorage; |
|
|
|
import kr.co.palnet.kac.app.api.v1.inner.socket.storage.ControlGpsStorage; |
|
|
|
import kr.co.palnet.kac.common.model.common.DroneDto; |
|
|
|
import kr.co.palnet.kac.common.model.common.DroneDto; |
|
|
|
import kr.co.palnet.kac.common.model.common.SimpleControlDto; |
|
|
|
import kr.co.palnet.kac.common.model.common.SimpleControlDto; |
|
|
|
|
|
|
|
import kr.co.palnet.kac.core.exception.BaseErrorCode; |
|
|
|
|
|
|
|
import kr.co.palnet.kac.data.com.domain.ComArcrftBas; |
|
|
|
|
|
|
|
import kr.co.palnet.kac.data.com.domain.ComIdntfBas; |
|
|
|
|
|
|
|
import kr.co.palnet.kac.data.com.repository.ComArcrftBasRepository; |
|
|
|
|
|
|
|
import kr.co.palnet.kac.data.com.repository.ComIdntBasRepository; |
|
|
|
import kr.co.palnet.kac.data.ctr.model.CtrCntrlBas; |
|
|
|
import kr.co.palnet.kac.data.ctr.model.CtrCntrlBas; |
|
|
|
import kr.co.palnet.kac.data.ctr.model.CtrCntrlHstry; |
|
|
|
import kr.co.palnet.kac.data.ctr.model.CtrCntrlHstry; |
|
|
|
import kr.co.palnet.kac.data.ctr.model.CtrCntrlHstryArea; |
|
|
|
import kr.co.palnet.kac.data.ctr.model.CtrCntrlHstryArea; |
|
|
|
import kr.co.palnet.kac.data.ctr.repository.CtrCntrlBasRepository; |
|
|
|
import kr.co.palnet.kac.data.ctr.repository.CtrCntrlBasRepository; |
|
|
|
import kr.co.palnet.kac.data.ctr.repository.CtrCntrlHstryAreaRepository; |
|
|
|
import kr.co.palnet.kac.data.ctr.repository.CtrCntrlHstryAreaRepository; |
|
|
|
import kr.co.palnet.kac.data.ctr.repository.CtrCntrlHstryRepository; |
|
|
|
import kr.co.palnet.kac.data.ctr.repository.CtrCntrlHstryRepository; |
|
|
|
|
|
|
|
import kr.co.palnet.kac.data.flt.model.FltPlanBas; |
|
|
|
|
|
|
|
import kr.co.palnet.kac.data.flt.model.FltPlanCtrCntrlRel; |
|
|
|
|
|
|
|
import kr.co.palnet.kac.data.flt.repository.FltPlanBasRepository; |
|
|
|
|
|
|
|
import kr.co.palnet.kac.data.flt.repository.FltPlanCtrCntrlRelRepository; |
|
|
|
import kr.co.palnet.kac.util.CoordUtil; |
|
|
|
import kr.co.palnet.kac.util.CoordUtil; |
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
@ -24,14 +33,20 @@ import java.util.*; |
|
|
|
@Service |
|
|
|
@Service |
|
|
|
@Transactional |
|
|
|
@Transactional |
|
|
|
public class InnerSocketService { |
|
|
|
public class InnerSocketService { |
|
|
|
|
|
|
|
private final FltPlanBasRepository fltPlanBasRepository; |
|
|
|
|
|
|
|
|
|
|
|
private final CtrCntrlBasRepository ctrCntrlBasRepository; |
|
|
|
private final CtrCntrlBasRepository ctrCntrlBasRepository; |
|
|
|
private final CtrCntrlHstryRepository ctrCntrlHstryRepository; |
|
|
|
private final CtrCntrlHstryRepository ctrCntrlHstryRepository; |
|
|
|
private final CtrCntrlHstryAreaRepository ctrCntrlHstryAreaRepository; |
|
|
|
private final CtrCntrlHstryAreaRepository ctrCntrlHstryAreaRepository; |
|
|
|
|
|
|
|
private final ComArcrftBasRepository comArcrftBasRepository; |
|
|
|
|
|
|
|
private final ComIdntBasRepository comIdntBasRepository; |
|
|
|
|
|
|
|
private final FltPlanCtrCntrlRelRepository fltPlanCtrCntrlRelRepository; |
|
|
|
|
|
|
|
|
|
|
|
private long STOP_UNKON = 5; |
|
|
|
private long STOP_UNKON = 5; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// socket에 보내줄 control 조회 (controlId 발급용도)
|
|
|
|
// socket에 보내줄 control 조회 (controlId 발급용도)
|
|
|
|
|
|
|
|
@Transactional(readOnly = true) |
|
|
|
public SimpleControlDto getControlId(String objectId) { |
|
|
|
public SimpleControlDto getControlId(String objectId) { |
|
|
|
log.debug(">>>>> getControlId <<<<<"); |
|
|
|
log.debug(">>>>> getControlId <<<<<"); |
|
|
|
log.debug(">>>>> objectId : {} <<<<<", objectId); |
|
|
|
log.debug(">>>>> objectId : {} <<<<<", objectId); |
|
|
@ -78,8 +93,76 @@ public class InnerSocketService { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// socket으로부터 받은 dron 정보 저장
|
|
|
|
// socket으로부터 받은 dron 정보 저장
|
|
|
|
public void setDronData(DroneDto dronDto) { |
|
|
|
public void setDronData(DroneDto droneDto) { |
|
|
|
// TODO
|
|
|
|
|
|
|
|
|
|
|
|
if ("01".equals(droneDto.getTypeCd())) { |
|
|
|
|
|
|
|
// 비행 이력 생성
|
|
|
|
|
|
|
|
CtrCntrlBas ctrCntrlBas = ctrCntrlBasRepository.findById(droneDto.getControlId()).orElse(null); |
|
|
|
|
|
|
|
if (ctrCntrlBas != null) { |
|
|
|
|
|
|
|
log.debug(BaseErrorCode.DATA_ALREADY_EXISTS.message()); |
|
|
|
|
|
|
|
ctrCntrlBas = null; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
CtrCntrlBas insertCtrCntrlBas = CtrCntrlBas.builder() |
|
|
|
|
|
|
|
.cntrlId(droneDto.getControlId()) |
|
|
|
|
|
|
|
.idntfNum(droneDto.getObjectId()) |
|
|
|
|
|
|
|
.objectTypeCd(droneDto.getObjectType()) |
|
|
|
|
|
|
|
.statusCd(droneDto.getTypeCd()) |
|
|
|
|
|
|
|
.procStatusYn("N") |
|
|
|
|
|
|
|
.cntrlStDt(droneDto.getControlStartDt()) |
|
|
|
|
|
|
|
.createDt(Instant.now()) |
|
|
|
|
|
|
|
.updateDt(Instant.now()) |
|
|
|
|
|
|
|
.build(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ctrCntrlBas = ctrCntrlBasRepository.save(insertCtrCntrlBas); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 비행 이력, 비행 계획서 mapping
|
|
|
|
|
|
|
|
if (!"PA".equals(droneDto.getObjectId().substring(0, 2))) return; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FltPlanCtrCntrlRel fltPlanCtrCntrlRel = new FltPlanCtrCntrlRel(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 1. 식별 번호의 소유자 정보 저장.
|
|
|
|
|
|
|
|
ComIdntfBas comIdntfBas = comIdntBasRepository.findById(droneDto.getObjectId()).orElse(null); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 1-1. 식별 번호의 모델 정보 조회
|
|
|
|
|
|
|
|
// PAV-KAC에서는 기초데이터가 필수가 아니여서 idntBas가 null일 수 있음.
|
|
|
|
|
|
|
|
ComArcrftBas comArcrftBas = null; |
|
|
|
|
|
|
|
if (comIdntfBas != null && comIdntfBas.getArcrftSno() != null) { |
|
|
|
|
|
|
|
comArcrftBas = comArcrftBasRepository.findById(comIdntfBas.getArcrftSno()).orElse(null); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (ctrCntrlBas.getCntrlId() != null && !ctrCntrlBas.getCntrlId().isEmpty()) { |
|
|
|
|
|
|
|
fltPlanCtrCntrlRel.setCntrlId(ctrCntrlBas.getCntrlId()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (ctrCntrlBas.getIdntfNum() != null && !ctrCntrlBas.getIdntfNum().isEmpty()) { |
|
|
|
|
|
|
|
fltPlanCtrCntrlRel.setIdntfNum(ctrCntrlBas.getIdntfNum()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (comIdntfBas != null && comIdntfBas.getCstmrSno() != null) { |
|
|
|
|
|
|
|
fltPlanCtrCntrlRel.setIdntfCstmrSno(comIdntfBas.getCstmrSno()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (comArcrftBas != null && comArcrftBas.getGroupId() != null && !comArcrftBas.getGroupId().isEmpty()) { |
|
|
|
|
|
|
|
fltPlanCtrCntrlRel.setGroupId(comArcrftBas.getGroupId()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 2. 해당 되는 비행계획서 정보 저장.
|
|
|
|
|
|
|
|
List<FltPlanBas> fltPlanBas = null; |
|
|
|
|
|
|
|
if (ctrCntrlBas.getCntrlId() != null && !ctrCntrlBas.getCntrlId().isEmpty()) { |
|
|
|
|
|
|
|
fltPlanBas = fltPlanBasRepository.findAllByServerRctDtAndIdntfNum(ctrCntrlBas.getIdntfNum(), droneDto.getServerRcvDt()); |
|
|
|
|
|
|
|
for (FltPlanBas plan : fltPlanBas) { |
|
|
|
|
|
|
|
fltPlanCtrCntrlRel.setPlanSno(plan.getPlanSno()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 3. mapping 정보 주입.
|
|
|
|
|
|
|
|
if (fltPlanCtrCntrlRel.getCntrlId() != null && !fltPlanCtrCntrlRel.getCntrlId().isEmpty() && fltPlanCtrCntrlRel.getPlanSno() != null) { |
|
|
|
|
|
|
|
fltPlanCtrCntrlRelRepository.save(fltPlanCtrCntrlRel); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|