Browse Source

feat: 드론원스톱 목록 검색조건 추가 - 전송상태(운항과)

feature/dos/statistics
지대한 2 weeks ago
parent
commit
0a75d296cf
  1. 10
      http/server/server.http
  2. 3
      pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/BasDosPlanAreaRs.java
  3. 4
      pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/BasDosPlanRq.java
  4. 63
      pav-server/src/main/java/com/palnet/biz/api/bas/dos/service/BasDosService.java
  5. 8
      pav-server/src/main/java/com/palnet/biz/jpa/repository/dos/DosFltPlanQueryRepository.java

10
http/server/server.http

@ -66,7 +66,8 @@ Authorization: {{accessToken}}
GET {{appHost}}/api/bas/dos/plan GET {{appHost}}/api/bas/dos/plan
?searchStDt=2023-06-29 ?searchStDt=2023-06-29
&searchEndDt=2024-06-29 &searchEndDt=2024-06-29
&sendProcStatus=S # &sendStatus=S
# &sendProcStatus=S
# &reviewedType=W # &reviewedType=W
# &reviewedProcType=W # &reviewedProcType=W
# &limitZoneCd= # &limitZoneCd=
@ -80,8 +81,8 @@ Authorization: {{accessToken}}
const {planSno, applyNo, areaList} = d; const {planSno, applyNo, areaList} = d;
console.log(`planSno: ${planSno}, applyNo: ${applyNo}`); console.log(`planSno: ${planSno}, applyNo: ${applyNo}`);
areaList.forEach(a => { areaList.forEach(a => {
const {planAreaSno, zoneNo, reviewedType, reviewedProcType, approvalCd, limitZoneCd} = a; const {planAreaSno, zoneNo, reviewedType, reviewedProcType, approvalCd, limitZoneCd, sendStatus} = a;
console.log(`planAreaSno: ${planAreaSno}, zoneNo: ${zoneNo}, reviewedType: ${reviewedType}, reviewedProcType: ${reviewedProcType}, approvalCd: ${approvalCd}, limitZoneCd: ${limitZoneCd}`); console.log(`planAreaSno: ${planAreaSno}, zoneNo: ${zoneNo}, reviewedType: ${reviewedType}, reviewedProcType: ${reviewedProcType}, approvalCd: ${approvalCd}, limitZoneCd: ${limitZoneCd}, sendStatus: ${sendStatus}`);
}) })
}); });
@ -273,7 +274,8 @@ Content-Type: application/json
{ {
"planAreaSnoList": [ "planAreaSnoList": [
17,18 17,
18
] ]
} }

3
pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/BasDosPlanAreaRs.java

@ -2,6 +2,7 @@ package com.palnet.biz.api.bas.dos.model;
import com.palnet.biz.jpa.entity.type.ReviewedProcType; import com.palnet.biz.jpa.entity.type.ReviewedProcType;
import com.palnet.biz.jpa.entity.type.ReviewedType; import com.palnet.biz.jpa.entity.type.ReviewedType;
import com.palnet.biz.jpa.entity.type.SendStatusType;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@ -57,6 +58,8 @@ public class BasDosPlanAreaRs {
private String reviewedReason; private String reviewedReason;
// 검토처리유형 // 검토처리유형
private ReviewedProcType reviewedProcType; private ReviewedProcType reviewedProcType;
// 전송상태
private SendStatusType sendStatus;
// 요청반경 // 요청반경
private Long reqRadius; private Long reqRadius;
// 요청고도 // 요청고도

4
pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/BasDosPlanRq.java

@ -53,6 +53,6 @@ public class BasDosPlanRq {
@Schema(description = "전송상태(관제과)", example = "S", implementation = SendStatusType.class) @Schema(description = "전송상태(관제과)", example = "S", implementation = SendStatusType.class)
private SendStatusType sendProcStatus; private SendStatusType sendProcStatus;
// @Schema(description = "전송상태(운항과)", example = "S", implementation = SendStatusType.class) @Schema(description = "전송상태(운항과)", example = "S", implementation = SendStatusType.class)
// private SendStatusType sendPStatus; private SendStatusType sendStatus;
} }

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

@ -288,6 +288,7 @@ public class BasDosService {
.reviewedType(reviewedType) .reviewedType(reviewedType)
.reviewedReason(area.getReviewedReason()) .reviewedReason(area.getReviewedReason())
.reviewedProcType(area.getReviewedProcType()) .reviewedProcType(area.getReviewedProcType())
.sendStatus(area.getSendStatus())
.reqRadius(area.getReqRadius()) .reqRadius(area.getReqRadius())
.allowRadius(area.getAllowRadius()) .allowRadius(area.getAllowRadius())
.limitZoneCd(area.getLimitZone()) .limitZoneCd(area.getLimitZone())
@ -419,7 +420,7 @@ public class BasDosService {
// 상태 변경 알림 // 상태 변경 알림
if(!sharePlanAreaSnoList.isEmpty()) { if (!sharePlanAreaSnoList.isEmpty()) {
shareService.shareStateUpdate(sharePlanAreaSnoList); shareService.shareStateUpdate(sharePlanAreaSnoList);
} }
} }
@ -991,12 +992,13 @@ public class BasDosService {
/** /**
* 페이징처리 * 페이징처리
*
* @param rq * @param rq
* @param type * @param type
* @return * @return
*/ */
@Transactional(readOnly = true) @Transactional(readOnly = true)
public SearchBasDosPlanRS getPagingDosPlan(SearchBasDosPlanRQ rq, PlanSelectType type){ public SearchBasDosPlanRS getPagingDosPlan(SearchBasDosPlanRQ rq, PlanSelectType type) {
List<DosFltPlanBas> planBasList = dosFltPlanQueryRepository.findPlanByBasSearch(rq); List<DosFltPlanBas> planBasList = dosFltPlanQueryRepository.findPlanByBasSearch(rq);
if (planBasList.isEmpty()) { if (planBasList.isEmpty()) {
@ -1008,9 +1010,10 @@ public class BasDosService {
Long totalDataCount = dosFltPlanQueryRepository.countByPlanSnoInAndSearchOrderByZoneNoAsc(planSnoList, rq); Long totalDataCount = dosFltPlanQueryRepository.countByPlanSnoInAndSearchOrderByZoneNoAsc(planSnoList, rq);
Long totalPages = totalDataCount / rq.getPageDataSize(); Long totalPages = totalDataCount / rq.getPageDataSize();
if(totalDataCount % rq.getPageDataSize() > 0) totalPages ++; if (totalDataCount % rq.getPageDataSize() > 0) totalPages++;
if(rq.getPage() > totalPages || rq.getPage() < 1) throw new CustomException(ErrorCode.NON_VALID_PARAMETER, String.format("페이지는 [ %s ] page 부터 [ %s ] page 까지입니다.", 1, totalPages)); if (rq.getPage() > totalPages || rq.getPage() < 1)
throw new CustomException(ErrorCode.NON_VALID_PARAMETER, String.format("페이지는 [ %s ] page 부터 [ %s ] page 까지입니다.", 1, totalPages));
Boolean isFirst = rq.getPage() == 1; Boolean isFirst = rq.getPage() == 1;
Boolean isLast = rq.getPage().equals(totalPages); Boolean isLast = rq.getPage().equals(totalPages);
@ -1023,8 +1026,8 @@ public class BasDosService {
pagination.setIsFirst(isFirst); pagination.setIsFirst(isFirst);
pagination.setIsLast(isLast); pagination.setIsLast(isLast);
Map<Long , DosFltPlanBas> fltPlanBasMap = this.getConvertMap(planBasList, "planSno", Long.class); Map<Long, DosFltPlanBas> fltPlanBasMap = this.getConvertMap(planBasList, "planSno", Long.class);
Map<Long , List<BasDosPlanDroneRs>> fltDroneBasMap = dosFltPlanDroneRepository.findByPlanSnoIn(planSnoList).stream() Map<Long, List<BasDosPlanDroneRs>> fltDroneBasMap = dosFltPlanDroneRepository.findByPlanSnoIn(planSnoList).stream()
.map(drone -> { .map(drone -> {
String weightCd = drone.getWeightCd(); String weightCd = drone.getWeightCd();
WeightCdType weightCdType = WeightCdType.fromCode(weightCd); WeightCdType weightCdType = WeightCdType.fromCode(weightCd);
@ -1038,19 +1041,20 @@ public class BasDosService {
.planSno(drone.getPlanSno()) .planSno(drone.getPlanSno())
.build(); .build();
}) })
.collect(Collectors.groupingBy(BasDosPlanDroneRs::getPlanSno));; .collect(Collectors.groupingBy(BasDosPlanDroneRs::getPlanSno));
;
Map<Long , List<BasDosPlanPilotRs>> fltPliotBasMap = dosFltPlanPilotRepository.findByPlanSnoIn(planSnoList).stream()
.map(pilot -> { Map<Long, List<BasDosPlanPilotRs>> fltPliotBasMap = dosFltPlanPilotRepository.findByPlanSnoIn(planSnoList).stream()
return BasDosPlanPilotRs.builder() .map(pilot -> {
.planPilotSno(pilot.getPlanPilotSno()) return BasDosPlanPilotRs.builder()
.pilotNm(pilot.getPilotNm()) .planPilotSno(pilot.getPlanPilotSno())
.birthDate(pilot.getBirthDate()) .pilotNm(pilot.getPilotNm())
.crtfctNo(pilot.getCrtfctNo()) .birthDate(pilot.getBirthDate())
.planSno(pilot.getPlanPilotSno()) .crtfctNo(pilot.getCrtfctNo())
.build(); .planSno(pilot.getPlanPilotSno())
}) .build();
.collect(Collectors.groupingBy(BasDosPlanPilotRs::getPlanSno)); })
.collect(Collectors.groupingBy(BasDosPlanPilotRs::getPlanSno));
List<DosFltPlanArea> areaList = dosFltPlanQueryRepository.findByPlanSnoInAndSearchOrderByZoneNoAsc(planSnoList, rq); List<DosFltPlanArea> areaList = dosFltPlanQueryRepository.findByPlanSnoInAndSearchOrderByZoneNoAsc(planSnoList, rq);
List<DosFltPlanResult> resultList = dosFltPlanResultRepository.findByPlanSnoIn(planSnoList); List<DosFltPlanResult> resultList = dosFltPlanResultRepository.findByPlanSnoIn(planSnoList);
@ -1059,8 +1063,8 @@ public class BasDosService {
Set<Long> removePlanSnoSet = new HashSet<>(planSnoList); Set<Long> removePlanSnoSet = new HashSet<>(planSnoList);
removePlanSnoSet.removeAll(areaPlanSno); removePlanSnoSet.removeAll(areaPlanSno);
List<Long> removeList = new ArrayList<>(removePlanSnoSet); List<Long> removeList = new ArrayList<>(removePlanSnoSet);
for(Long removePlanSno : removeList){ for (Long removePlanSno : removeList) {
fltPlanBasMap.remove(removePlanSno); fltPlanBasMap.remove(removePlanSno);
} }
@ -1082,7 +1086,7 @@ public class BasDosService {
LinkedHashMap::new LinkedHashMap::new
)); ));
for(Map.Entry<Long, DosFltPlanBas> entry : sortedMap.entrySet()){ for (Map.Entry<Long, DosFltPlanBas> entry : sortedMap.entrySet()) {
Long planSno = entry.getKey(); Long planSno = entry.getKey();
DosFltPlanBas bas = entry.getValue(); DosFltPlanBas bas = entry.getValue();
@ -1103,7 +1107,7 @@ public class BasDosService {
List<BasDosPlanAreaRs> areaRsList = new ArrayList<>(); List<BasDosPlanAreaRs> areaRsList = new ArrayList<>();
for (int i = 0; i < areaList.size(); i ++) { for (int i = 0; i < areaList.size(); i++) {
DosFltPlanArea area = areaList.get(i); DosFltPlanArea area = areaList.get(i);
@ -1306,7 +1310,7 @@ public class BasDosService {
int count = 0; int count = 0;
for(int i = 0; i < rs.size(); i ++){ for (int i = 0; i < rs.size(); i++) {
BasDosPlanRs rsNode = rs.get(i); BasDosPlanRs rsNode = rs.get(i);
count += rsNode.getAreaList().size(); count += rsNode.getAreaList().size();
@ -1322,13 +1326,14 @@ public class BasDosService {
/** /**
* List 노드객체의 컬럼중 하나를 Key값으로 잡아 Map을 만듬 * List 노드객체의 컬럼중 하나를 Key값으로 잡아 Map을 만듬
* EX -> PlanBas의 planSno를 키값으로 잡아 Map<planSno, PlanBas> 형태로 변환 * EX -> PlanBas의 planSno를 키값으로 잡아 Map<planSno, PlanBas> 형태로 변환
* @param list Map으로 바꿀 리스트 *
* @param list Map으로 바꿀 리스트
* @param fieldName Map의 key가 컬럼 이름 * @param fieldName Map의 key가 컬럼 이름
* @param keyType Map의 key가 클래스 타입 * @param keyType Map의 key가 클래스 타입
* @return
* @param <P> * @param <P>
* @param <B> * @param <B>
* @param <C> * @param <C>
* @return
*/ */
private <P, B extends List<C>, C> Map<P, C> getConvertMap(B list, String fieldName, Class<P> keyType) { private <P, B extends List<C>, C> Map<P, C> getConvertMap(B list, String fieldName, Class<P> keyType) {
Map<P, C> result = new HashMap<>(); Map<P, C> result = new HashMap<>();
@ -1357,12 +1362,12 @@ public class BasDosService {
*/ */
public void sendDosPlan(BasDosSendDosPlanRq rq) { public void sendDosPlan(BasDosSendDosPlanRq rq) {
List<DosFltPlanArea> dosFltPlanAreaList = dosFltPlanAreaRepository.findByPlanAreaSnoIn(rq.getPlanAreaSnoList()); List<DosFltPlanArea> dosFltPlanAreaList = dosFltPlanAreaRepository.findByPlanAreaSnoIn(rq.getPlanAreaSnoList());
if(dosFltPlanAreaList == null || dosFltPlanAreaList.isEmpty()) { if (dosFltPlanAreaList == null || dosFltPlanAreaList.isEmpty()) {
throw new CustomException(ErrorCode.DATA_NOTFIND); throw new CustomException(ErrorCode.DATA_NOTFIND);
} }
boolean isNotSuccess = dosFltPlanAreaList.stream().anyMatch(area -> area.getReviewedType() != ReviewedType.SUCCESS); boolean isNotSuccess = dosFltPlanAreaList.stream().anyMatch(area -> area.getReviewedType() != ReviewedType.SUCCESS);
if(isNotSuccess) { if (isNotSuccess) {
throw new CustomException(ErrorCode.DOS_NOT_VALID_REVIEWED_TYPE); throw new CustomException(ErrorCode.DOS_NOT_VALID_REVIEWED_TYPE);
} }

8
pav-server/src/main/java/com/palnet/biz/jpa/repository/dos/DosFltPlanQueryRepository.java

@ -106,12 +106,16 @@ public class DosFltPlanQueryRepository {
} }
// 관제과 전송여부 // 관제과 전송여부
if (rq.getSendProcStatus() != null) { if (rq.getSendProcStatus() != null) {
if(rq.getSendProcStatus() == SendStatusType.SEND) { if (rq.getSendProcStatus() == SendStatusType.SEND) {
builder.and(qDosFltPlanArea.reviewedProcType.in(ReviewedProcType.CANCEL, ReviewedProcType.PROCESS, ReviewedProcType.RE_REVIEW, ReviewedProcType.SUCCESS)); builder.and(qDosFltPlanArea.reviewedProcType.in(ReviewedProcType.CANCEL, ReviewedProcType.PROCESS, ReviewedProcType.RE_REVIEW, ReviewedProcType.SUCCESS));
} else if(rq.getSendProcStatus() == SendStatusType.NOT_SEND) { } else if (rq.getSendProcStatus() == SendStatusType.NOT_SEND) {
builder.and(qDosFltPlanArea.reviewedProcType.eq(ReviewedProcType.WAIT)); builder.and(qDosFltPlanArea.reviewedProcType.eq(ReviewedProcType.WAIT));
} }
} }
// 운항과 전송여부
if (rq.getSendStatus() != null) {
builder.and(qDosFltPlanArea.sendStatus.eq(rq.getSendStatus()));
}
return query return query
.select(qDosFltPlanArea) .select(qDosFltPlanArea)

Loading…
Cancel
Save