|
|
|
@ -7,7 +7,7 @@ import com.palnet.biz.jpa.entity.DosFltPlanArea;
|
|
|
|
|
import com.palnet.biz.jpa.entity.DosFltPlanBas; |
|
|
|
|
import com.palnet.biz.jpa.entity.DosFltPlanResult; |
|
|
|
|
import com.palnet.biz.jpa.repository.dos.DosFltPlanAreaRepository; |
|
|
|
|
import com.palnet.biz.jpa.repository.dos.DosFltPlanBasRepository; |
|
|
|
|
import com.palnet.biz.jpa.repository.dos.DosFltPlanQueryRepository; |
|
|
|
|
import com.palnet.biz.jpa.repository.dos.DosFltPlanResultRepository; |
|
|
|
|
import com.palnet.comn.utils.AreaUtils; |
|
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
@ -19,6 +19,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.Map; |
|
|
|
|
import java.util.Optional; |
|
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
|
@Slf4j |
|
|
|
@ -27,24 +28,24 @@ import java.util.stream.Collectors;
|
|
|
|
|
@Service |
|
|
|
|
public class BasDosService { |
|
|
|
|
|
|
|
|
|
private final DosFltPlanBasRepository dosFltPlanBasRepository; |
|
|
|
|
private final DosFltPlanAreaRepository dosFltPlanAreaRepository; |
|
|
|
|
private final DosFltPlanResultRepository dosFltPlanResultRepository; |
|
|
|
|
private final DosFltPlanQueryRepository dosFltPlanQueryRepository; |
|
|
|
|
private final AreaUtils areaUtils; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 드론원스톱 비행계획 조회 |
|
|
|
|
* 비행계획서 및 버퍼 좌표(비행구역데이터로 추출) |
|
|
|
|
* |
|
|
|
|
* @param rq |
|
|
|
|
* @return |
|
|
|
|
* @param rq: BasDosPlanRq |
|
|
|
|
* @return List<BasDosPlanRs> |
|
|
|
|
*/ |
|
|
|
|
@Transactional(readOnly = true) |
|
|
|
|
public List<BasDosPlanRs> getDosPlan(BasDosPlanRq rq) { |
|
|
|
|
|
|
|
|
|
List<DosFltPlanBas> planBasList = dosFltPlanBasRepository.findBySchFltStDtLessThanEqualAndSchFltEndDtGreaterThanEqualOrderByApplyDtAscCreateDtAsc(rq.getSearchEndDt(), rq.getSearchStDt()); |
|
|
|
|
List<DosFltPlanBas> planBasList = dosFltPlanQueryRepository.findPlanByBasSearch(rq); |
|
|
|
|
|
|
|
|
|
if(planBasList.isEmpty()) { |
|
|
|
|
if (planBasList.isEmpty()) { |
|
|
|
|
return new ArrayList<>(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -54,29 +55,45 @@ public class BasDosService {
|
|
|
|
|
List<DosFltPlanArea> areaList = dosFltPlanAreaRepository.findByPlanSnoInOrderByZoneNoAsc(planSnoList); |
|
|
|
|
List<DosFltPlanResult> resultList = dosFltPlanResultRepository.findByPlanSnoIn(planSnoList); |
|
|
|
|
|
|
|
|
|
List<BasDosPlanRs> rs = planBasList.stream().map(bas -> { |
|
|
|
|
List<BasDosPlanRs> rs = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
for (DosFltPlanBas bas : planBasList) { |
|
|
|
|
Long planSno = bas.getPlanSno(); |
|
|
|
|
|
|
|
|
|
List<BasDosPlanAreaRs> areaRsList = areaList.stream() |
|
|
|
|
.filter(area -> area.getPlanSno().equals(planSno)) |
|
|
|
|
.map(area -> { |
|
|
|
|
DosFltPlanResult dosFltPlanResult = resultList.stream().filter(result -> result.getPlanAreaSno().equals(area.getPlanAreaSno())).findFirst().get(); |
|
|
|
|
return BasDosPlanAreaRs.builder() |
|
|
|
|
.planAreaSno(area.getPlanAreaSno()) |
|
|
|
|
.planSno(area.getPlanSno()) |
|
|
|
|
.zoneNo(area.getZoneNo()) |
|
|
|
|
.bufferZone(area.getBufferZone()) |
|
|
|
|
.fltElev(area.getFltElev()) |
|
|
|
|
.lat(area.getLat()) |
|
|
|
|
.lon(area.getLon()) |
|
|
|
|
.approvalCd(dosFltPlanResult.getApprovalCd()) |
|
|
|
|
.bufferCoordList(getBufferCoords(area)) |
|
|
|
|
.build(); |
|
|
|
|
}).collect(Collectors.toList()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return BasDosPlanRs.builder() |
|
|
|
|
List<BasDosPlanAreaRs> areaRsList = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
for (DosFltPlanArea area : areaList) { |
|
|
|
|
if (area.getPlanSno().equals(planSno)) { |
|
|
|
|
Optional<DosFltPlanResult> first = resultList.stream().filter(result -> result.getPlanAreaSno().equals(area.getPlanAreaSno())).findFirst(); |
|
|
|
|
String approvalCd = ""; |
|
|
|
|
if(first.isPresent()){ |
|
|
|
|
DosFltPlanResult dosFltPlanResult = first.get(); |
|
|
|
|
approvalCd = dosFltPlanResult.getApprovalCd(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (rq.getApprovalCd() != null && !rq.getApprovalCd().equals(approvalCd)) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
BasDosPlanAreaRs areaRs = BasDosPlanAreaRs.builder() |
|
|
|
|
.planAreaSno(area.getPlanAreaSno()) |
|
|
|
|
.planSno(area.getPlanSno()) |
|
|
|
|
.zoneNo(area.getZoneNo()) |
|
|
|
|
.bufferZone(area.getBufferZone()) |
|
|
|
|
.fltElev(area.getFltElev()) |
|
|
|
|
.lat(area.getLat()) |
|
|
|
|
.lon(area.getLon()) |
|
|
|
|
.approvalCd(approvalCd) |
|
|
|
|
.bufferCoordList(getBufferCoords(area)) |
|
|
|
|
.build(); |
|
|
|
|
areaRsList.add(areaRs); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (areaRsList.isEmpty()) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
BasDosPlanRs basRs = BasDosPlanRs.builder() |
|
|
|
|
.planSno(bas.getPlanSno()) |
|
|
|
|
.applyNo(bas.getApplyNo()) |
|
|
|
|
.applyDt(bas.getApplyDt()) |
|
|
|
@ -87,7 +104,8 @@ public class BasDosService {
|
|
|
|
|
.createDt(bas.getCreateDt()) |
|
|
|
|
.areaList(areaRsList) |
|
|
|
|
.build(); |
|
|
|
|
}).collect(Collectors.toList()); |
|
|
|
|
rs.add(basRs); |
|
|
|
|
} |
|
|
|
|
return rs; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -95,8 +113,8 @@ public class BasDosService {
|
|
|
|
|
* Buffer 좌표 추출 |
|
|
|
|
* 비행구역의 데이터를 이용하여 주변의 좌표를 추출한다. |
|
|
|
|
* |
|
|
|
|
* @param area |
|
|
|
|
* @return |
|
|
|
|
* @param area: DosFltPlanArea |
|
|
|
|
* @return List<Map<String, Double>> |
|
|
|
|
*/ |
|
|
|
|
private List<Map<String, Double>> getBufferCoords(DosFltPlanArea area) { |
|
|
|
|
// Circle만 체크
|
|
|
|
|