Browse Source

feat: 드론원스톱 비행계획 추가 및 수정시 알림

feature/dos/statistics
지대한 2 weeks ago
parent
commit
e8a47b8163
  1. 27
      pav-server/src/main/java/com/palnet/biz/api/bas/dos/service/BasDosService.java
  2. 16
      pav-server/src/main/java/com/palnet/biz/api/comn/model/ShareStateUpdateRq.java
  3. 46
      pav-server/src/main/java/com/palnet/biz/api/comn/share/ShareService.java
  4. 6
      pav-server/src/main/java/com/palnet/biz/api/external/service/DronOneStopService.java
  5. 7
      pav-server/src/main/resources/application.yml

27
pav-server/src/main/java/com/palnet/biz/api/bas/dos/service/BasDosService.java

@ -8,14 +8,13 @@ import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.font.FontProvider;
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil;
import com.palnet.biz.api.bas.dos.model.*;
import com.palnet.biz.api.comn.coordinate.service.ComnCoordinateService;
import com.palnet.biz.api.comn.file.model.ValidPdfModel;
import com.palnet.biz.api.comn.share.ShareService;
import com.palnet.biz.api.external.model.ApprovalCd;
import com.palnet.biz.api.external.model.DosApprovalResult;
import com.palnet.biz.api.external.service.DronOneStopService;
import com.palnet.biz.jpa.entity.DosFltPlanArea;
import com.palnet.biz.jpa.entity.DosFltPlanBas;
import com.palnet.biz.jpa.entity.DosFltPlanDrone;
import com.palnet.biz.jpa.entity.DosFltPlanResult;
import com.palnet.biz.jpa.entity.type.ReviewedProcType;
import com.palnet.biz.jpa.entity.type.ReviewedType;
@ -76,6 +75,7 @@ public class BasDosService {
private final DosFltPlanDroneRepository dosFltPlanDroneRepository;
private final DosFltPlanPilotRepository dosFltPlanPilotRepository;
private final DronOneStopService dronOneStopService;
private final ShareService shareService;
private final AreaUtils areaUtils;
private final PdfUtils pdfUtils;
private final JwtTokenUtil jwtTokenUtil;
@ -355,6 +355,8 @@ public class BasDosService {
* @param rq
*/
public void updatePlan(List<BasDosUpdatePlanRq> rq) {
List<Long> sharePlanAreaSnoList = new ArrayList<>();
for (BasDosUpdatePlanRq planRq : rq) {
if (planRq.getPlanAreaSno() == null) {
log.info("planAreaSno is empty.");
@ -374,6 +376,7 @@ public class BasDosService {
area.setReviewedReason(planRq.getReviewedReason());
area = dosFltPlanAreaRepository.save(area);
sharePlanAreaSnoList.add(area.getPlanAreaSno());
// 재검증
if (planRq.getFltElev() != null || planRq.getReqRadius() != null) {
@ -407,10 +410,17 @@ public class BasDosService {
}
dosFltPlanResultRepository.save(dosFltPlanResult);
}
} else {
log.warn("update data is not found : {}", planRq);
}
}
// 상태 변경 알림
if(!sharePlanAreaSnoList.isEmpty()) {
shareService.shareStateUpdate(sharePlanAreaSnoList);
}
}
/**
@ -444,7 +454,11 @@ public class BasDosService {
area.setReviewedType(rq.getReviewedType());
}
dosFltPlanAreaRepository.saveAll(planAreaList);
List<DosFltPlanArea> dosFltPlanAreaList = dosFltPlanAreaRepository.saveAll(planAreaList);
// 상태 변경 알림
List<Long> sharePlanAreaSnoList = dosFltPlanAreaList.stream().map(DosFltPlanArea::getPlanAreaSno).collect(Collectors.toList());
shareService.shareStateUpdate(sharePlanAreaSnoList);
}
/**
@ -479,7 +493,11 @@ public class BasDosService {
area.setReviewedProcType(rq.getReviewedProcType());
}
dosFltPlanAreaRepository.saveAll(planAreaList);
List<DosFltPlanArea> dosFltPlanAreaList = dosFltPlanAreaRepository.saveAll(planAreaList);
// 상태 변경 알림
List<Long> sharePlanAreaSnoList = dosFltPlanAreaList.stream().map(DosFltPlanArea::getPlanAreaSno).collect(Collectors.toList());
shareService.shareStateUpdate(sharePlanAreaSnoList);
}
/**
@ -1330,4 +1348,5 @@ public class BasDosService {
return result;
}
}

16
pav-server/src/main/java/com/palnet/biz/api/comn/model/ShareStateUpdateRq.java

@ -0,0 +1,16 @@
package com.palnet.biz.api.comn.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ShareStateUpdateRq {
List<Long> planAreaSnoList;
}

46
pav-server/src/main/java/com/palnet/biz/api/comn/share/ShareService.java

@ -0,0 +1,46 @@
package com.palnet.biz.api.comn.share;
import com.palnet.biz.api.comn.model.ShareStateUpdateRq;
import com.palnet.comn.utils.JsonUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
import java.util.List;
@Slf4j
@Component
public class ShareService {
@Value("${web-socket.host}")
private String WS_HOST;
private String WS_URI_DOS_FLUSH = "/api/ws/dos/flush";
public void shareStateUpdate(List<Long> updatedDosPlanAreaSnoList) {
ShareStateUpdateRq rq = ShareStateUpdateRq.builder()
.planAreaSnoList(updatedDosPlanAreaSnoList)
.build();
log.info("update state area sno: {}", JsonUtils.toJson(rq));
WebClient client = WebClient.builder()
.baseUrl(WS_HOST)
.defaultHeader("Content-Type", "application/json")
.build();
client.post()
.uri(WS_URI_DOS_FLUSH)
.body(Mono.just(rq), ShareStateUpdateRq.class)
.retrieve()
.bodyToMono(Void.class)
.subscribe();
}
}

6
pav-server/src/main/java/com/palnet/biz/api/external/service/DronOneStopService.java vendored

@ -1,6 +1,7 @@
package com.palnet.biz.api.external.service;
import com.palnet.biz.api.bas.dos.model.LimitZoneType;
import com.palnet.biz.api.comn.share.ShareService;
import com.palnet.biz.api.external.model.ApprovalCd;
import com.palnet.biz.api.external.model.DosApprovalResult;
import com.palnet.biz.api.external.model.DosPlanRq;
@ -38,6 +39,7 @@ public class DronOneStopService {
private final DosFltPlanResultRepository dosFltPlanResultRepository;
private final DosFltPlanDroneRepository dosFltPlanDroneRepository;
private final DosFltPlanPilotRepository dosFltPlanPilotRepository;
private final ShareService shareService;
private final AreaUtils areaUtils;
private final List<String> PASS_PURPOSES = List.of("수색구조", "인명구조", "시설정검");
@ -48,6 +50,7 @@ public class DronOneStopService {
// rs
DosPlanRs rs = new DosPlanRs();
List<DosPlanRs.DosPlan> fltaplylistRs = new ArrayList<>();
List<Long> sharePlanAreaSnoList = new ArrayList<>();
// bas save
List<DosPlanRq.DosPlan> fltaplylist = rq.getFltaplylist();
@ -145,6 +148,7 @@ public class DronOneStopService {
.createDt(Instant.now())
.build();
DosFltPlanArea saveDosFltPlanArea = dosFltPlanAreaRepository.save(dosFltPlanAreaInsert);
sharePlanAreaSnoList.add(saveDosFltPlanArea.getPlanAreaSno());
// 비행 목적이 특정 문구(수색구조, 인명구조, 시설정검 등)인 경우 승인 처리
if (PASS_PURPOSES.contains(fltaply.getPrps())) {
@ -186,6 +190,8 @@ public class DronOneStopService {
});
rs.setFltaplylist(fltaplylistRs);
// 상태 변경 알림
shareService.shareStateUpdate(sharePlanAreaSnoList);
return rs;
}

7
pav-server/src/main/resources/application.yml

@ -76,6 +76,8 @@ url:
app:
host: http://localhost:8080
# host: http://211.253.11.189:8080
web-socket:
host: http://127.0.0.1:8181
---
@ -129,7 +131,8 @@ url:
app:
host: http://211.253.11.189:8080
web-socket:
host: http://127.0.0.1:8181
---
@ -194,3 +197,5 @@ url:
app:
# host: http://211.253.11.189:8080
host: http://121.190.193.50:6081
web-socket:
host: http://127.0.0.1:8181

Loading…
Cancel
Save