From e8a47b8163b730a2abe57bb8e76fb9cb89441ad5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dhji=28=EC=A7=80=EB=8C=80=ED=95=9C=29?= Date: Tue, 3 Sep 2024 14:05:11 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=93=9C=EB=A1=A0=EC=9B=90=EC=8A=A4?= =?UTF-8?q?=ED=86=B1=20=EB=B9=84=ED=96=89=EA=B3=84=ED=9A=8D=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B0=8F=20=EC=88=98=EC=A0=95=EC=8B=9C=20=EC=95=8C?= =?UTF-8?q?=EB=A6=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/bas/dos/service/BasDosService.java | 27 +++++++++-- .../api/comn/model/ShareStateUpdateRq.java | 16 +++++++ .../biz/api/comn/share/ShareService.java | 46 +++++++++++++++++++ .../external/service/DronOneStopService.java | 6 +++ pav-server/src/main/resources/application.yml | 7 ++- 5 files changed, 97 insertions(+), 5 deletions(-) create mode 100644 pav-server/src/main/java/com/palnet/biz/api/comn/model/ShareStateUpdateRq.java create mode 100644 pav-server/src/main/java/com/palnet/biz/api/comn/share/ShareService.java diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/dos/service/BasDosService.java b/pav-server/src/main/java/com/palnet/biz/api/bas/dos/service/BasDosService.java index 5c6322e5..985314a8 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/dos/service/BasDosService.java +++ b/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 rq) { + List 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 dosFltPlanAreaList = dosFltPlanAreaRepository.saveAll(planAreaList); + + // 상태 변경 알림 + List 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 dosFltPlanAreaList = dosFltPlanAreaRepository.saveAll(planAreaList); + + // 상태 변경 알림 + List sharePlanAreaSnoList = dosFltPlanAreaList.stream().map(DosFltPlanArea::getPlanAreaSno).collect(Collectors.toList()); + shareService.shareStateUpdate(sharePlanAreaSnoList); } /** @@ -1330,4 +1348,5 @@ public class BasDosService { return result; } + } diff --git a/pav-server/src/main/java/com/palnet/biz/api/comn/model/ShareStateUpdateRq.java b/pav-server/src/main/java/com/palnet/biz/api/comn/model/ShareStateUpdateRq.java new file mode 100644 index 00000000..5d3ce507 --- /dev/null +++ b/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 planAreaSnoList; +} diff --git a/pav-server/src/main/java/com/palnet/biz/api/comn/share/ShareService.java b/pav-server/src/main/java/com/palnet/biz/api/comn/share/ShareService.java new file mode 100644 index 00000000..858e399a --- /dev/null +++ b/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 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(); + + + + } +} diff --git a/pav-server/src/main/java/com/palnet/biz/api/external/service/DronOneStopService.java b/pav-server/src/main/java/com/palnet/biz/api/external/service/DronOneStopService.java index 198ab8d1..ef26fbd4 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/external/service/DronOneStopService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/external/service/DronOneStopService.java @@ -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 PASS_PURPOSES = List.of("수색구조", "인명구조", "시설정검"); @@ -48,6 +50,7 @@ public class DronOneStopService { // rs DosPlanRs rs = new DosPlanRs(); List fltaplylistRs = new ArrayList<>(); + List sharePlanAreaSnoList = new ArrayList<>(); // bas save List 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; } diff --git a/pav-server/src/main/resources/application.yml b/pav-server/src/main/resources/application.yml index 1eede46c..11f48b8b 100644 --- a/pav-server/src/main/resources/application.yml +++ b/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