Browse Source

laanc 승인 목록 검색조건 추가

pull/10/head
지대한 12 months ago
parent
commit
667a2f3a50
  1. 4
      pav-server/src/main/java/com/palnet/biz/api/bas/laanc/controller/BasLaancAprvController.java
  2. 11
      pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancAprvListRq.java
  3. 35
      pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancAprvRs.java
  4. 33
      pav-server/src/main/java/com/palnet/biz/api/comn/model/SwaggerPageable.java
  5. 3
      pav-server/src/main/java/com/palnet/biz/config/SwaggerConfig.java
  6. 13
      pav-server/src/main/java/com/palnet/biz/jpa/model/LaancAprvSearchDto.java
  7. 34
      pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java
  8. 5
      pav-server/src/main/java/com/palnet/comn/utils/InstantUtils.java
  9. 28
      pav-server/src/test/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepositoryTest.java

4
pav-server/src/main/java/com/palnet/biz/api/bas/laanc/controller/BasLaancAprvController.java

@ -59,12 +59,12 @@ public class BasLaancAprvController {
rs = basLaancAprvService.getLaancAprvList(rq, pageable);
} catch (CustomException e) {
Map<String, Object> resultMap = new HashMap<String, Object>();
Map<String, Object> resultMap = new HashMap<>();
log.error("IGNORE : ", e);
resultMap.put("result", false);
resultMap.put("errorCode", e.getErrorCode());
resultMap.put("errorMessage", e.getMessage());
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
return ResponseEntity.ok().body(new SuccessResponse<>(resultMap));
} catch (Exception e) {
log.error("IGNORE : ", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)

11
pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancAprvListRq.java

@ -1,7 +1,13 @@
package com.palnet.biz.api.bas.laanc.model;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.palnet.biz.config.convert.InstantDateStrSerializer;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.Instant;
/**
* packageName : com.palnet.biz.api.bas.laanc.model
@ -16,6 +22,9 @@ import lombok.Data;
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class BasLaancAprvListRq {
@JsonSerialize(using = InstantDateStrSerializer.class)
private Instant createDate;
}

35
pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancAprvRs.java

@ -1,5 +1,8 @@
package com.palnet.biz.api.bas.laanc.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.palnet.biz.jpa.entity.type.ArcrftTypeCd;
import com.palnet.biz.jpa.entity.type.ArcrftWghtCd;
import com.palnet.biz.jpa.entity.type.FltPurpose;
import com.palnet.biz.jpa.entity.type.FltType;
import lombok.AllArgsConstructor;
@ -9,6 +12,8 @@ import lombok.NoArgsConstructor;
import java.time.Instant;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* packageName : com.palnet.biz.api.bas.laanc.model
@ -42,14 +47,42 @@ public class BasLaancAprvRs {
private FltType fltType;
private String aprvlYn;
private Instant aprvlDt;
private String delYn;
// private String delYn;
private String createUserId;
private Instant createDt;
private String updateUserId;
private Instant updateDt;
private String serviceType;
private String corpRegYn;
// 하나의 필드로 묶어서 처리
// 항공기 무게(기체 중량)
public String getArcrftWght() {
if (arcrftList == null || arcrftList.isEmpty()) return null;
List<ArcrftWghtCd> arcrftWghtCdList = arcrftList.stream().map(BasLaancArcrftModel::getArcrftWghtCd).distinct().filter(Objects::nonNull).collect(Collectors.toList());
System.out.println(arcrftWghtCdList);
String ArcrftWghtType = arcrftWghtCdList.stream().map(ArcrftWghtCd::getValue).collect(Collectors.joining(","));
return ArcrftWghtType;
}
// 고도
public String getElev() {
if (areaList == null || areaList.isEmpty()) return null;
List<String> elevList = areaList.stream().map(BasLaancAreaModel::getFltElev).distinct().filter(Objects::nonNull).collect(Collectors.toList());
String elev = String.join(",", elevList);
return elev;
}
// 조종사 성명
public String getPilotName() {
if (pilotList == null || pilotList.isEmpty()) return null;
List<String> pilotNameList = pilotList.stream().map(BasLaancPilotModel::getMemberName).distinct().filter(Objects::nonNull).collect(Collectors.toList());
String pilotName = String.join(",", pilotNameList);
return pilotName;
}
private List<BasLaancAreaModel> areaList;
private List<BasLaancArcrftModel> arcrftList;
private List<BasLaancPilotModel> pilotList;
}

33
pav-server/src/main/java/com/palnet/biz/api/comn/model/SwaggerPageable.java

@ -0,0 +1,33 @@
package com.palnet.biz.api.comn.model;
import io.swagger.annotations.ApiParam;
import lombok.Getter;
import org.springframework.lang.Nullable;
/**
* packageName : com.palnet.biz.api.comn.model
* fileName : SwaggerPageable
* author : dhji
* date : 2023-10-11(011)
* description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023-10-11(011) dhji 최초 생성
*/
@Getter
public class SwaggerPageable {
@ApiParam(value = "Number of records per page", example = "0")
@Nullable
private Integer size;
@ApiParam(value = "Results page you want to retrieve (0..N)", example = "0")
@Nullable
private Integer page;
@ApiParam(value = "Sorting criteria in the format: property(,asc|desc). Default sort order is ascending. Multiple sort criteria are supported.")
@Nullable
private String sort;
}

3
pav-server/src/main/java/com/palnet/biz/config/SwaggerConfig.java

@ -1,8 +1,10 @@
package com.palnet.biz.config;
import com.palnet.biz.api.comn.model.SwaggerPageable;
import io.swagger.v3.oas.models.parameters.Parameter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.domain.Pageable;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
@ -39,6 +41,7 @@ public class SwaggerConfig {
.directModelSubstitute(Date.class, String.class)
.directModelSubstitute(LocalDate.class, String.class)
.directModelSubstitute(LocalDateTime.class, String.class)
.directModelSubstitute(Pageable.class, SwaggerPageable.class)
.securityContexts(Arrays.asList(securityContext()))
.securitySchemes(Arrays.asList(apiKey()));
}

13
pav-server/src/main/java/com/palnet/biz/jpa/model/LaancAprvSearchDto.java

@ -1,7 +1,11 @@
package com.palnet.biz.jpa.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.Instant;
/**
* packageName : com.palnet.biz.api.bas.laanc.model
@ -16,6 +20,13 @@ import lombok.Data;
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class LaancAprvSearchDto {
private String serach;
private Instant createDate;
private Instant createStDate;
private Instant createEndDate;
private String memberName;
private Instant schFltStDate;
private Instant schFltEndDate;
}

34
pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java

@ -5,6 +5,7 @@ import com.palnet.biz.api.main.dash.model.MainDashStcsModel;
import com.palnet.biz.jpa.entity.*;
import com.palnet.biz.jpa.model.*;
import com.palnet.comn.utils.DateUtils;
import com.palnet.comn.utils.InstantUtils;
import com.querydsl.core.BooleanBuilder;
import com.querydsl.core.group.GroupBy;
import com.querydsl.core.types.ConstantImpl;
@ -22,10 +23,11 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Repository;
import org.springframework.util.StringUtils;
import java.time.Duration;
import java.time.Instant;
import java.util.List;
import java.util.Optional;
@ -710,14 +712,40 @@ public class FltPlanQueryRepository {
}
// laanc 승인 목록
public Page<LaancPlanDto> findAllAprvListBySearch(LaancAprvSearchDto serach, Pageable pageable) {
public Page<LaancPlanDto> findAllAprvListBySearch(LaancAprvSearchDto search, Pageable pageable) {
QFltPlanBas bas = QFltPlanBas.fltPlanBas;
QFltPlanArea area = QFltPlanArea.fltPlanArea;
QFltPlanArcrft arcrft = QFltPlanArcrft.fltPlanArcrft;
// TODO serach
// serach
BooleanBuilder builder = new BooleanBuilder();
if(search != null){
if(StringUtils.hasText(search.getMemberName())){
builder.and(bas.memberName.contains(search.getMemberName()));
}
if(search.getCreateDate() != null){
Instant createStDate = InstantUtils.toDate(search.getCreateDate());
Instant createEndDate = createStDate.plus(Duration.ofDays(1));
builder.and(bas.createDt.goe(createStDate).and(bas.createDt.lt(createEndDate)));
}
if(search.getCreateStDate() != null) {
Instant createStDate = InstantUtils.toDate(search.getCreateStDate());
builder.and(bas.createDt.goe(createStDate));
}
if(search.getCreateEndDate() != null){
Instant createEndDate = InstantUtils.toDate(search.getCreateEndDate()).plus(Duration.ofDays(1));
builder.and(bas.createDt.lt(createEndDate));
}
if(search.getSchFltStDate() != null){
Instant schFltStDate = InstantUtils.toDate(search.getSchFltStDate());
builder.and(bas.schFltStDt.goe(schFltStDate));
}
if(search.getSchFltEndDate() != null){
Instant schFltEndDate = InstantUtils.toDate(search.getSchFltEndDate()).plus(Duration.ofDays(1));
builder.and(bas.schFltEndDt.lt(schFltEndDate));
}
}
JPAQuery<?> jpaQuery = query.from(bas)

5
pav-server/src/main/java/com/palnet/comn/utils/InstantUtils.java

@ -106,4 +106,9 @@ public class InstantUtils {
return false; // 파싱에 실패하면 유효하지 않은 형식입니다.
}
}
public static Instant toDate(Instant instant) {
LocalDate localDate = LocalDate.ofInstant(instant, ZoneId.of(DEFAULT_ZONE));
return localDate.atStartOfDay(ZoneId.of(DEFAULT_ZONE)).toInstant();
}
}

28
pav-server/src/test/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepositoryTest.java

@ -1,7 +1,9 @@
package com.palnet.biz.jpa.repository.flt;
import com.palnet.biz.api.bas.laanc.model.BasLaancAprvRs;
import com.palnet.biz.jpa.model.LaancAprvSearchDto;
import com.palnet.biz.jpa.model.LaancPlanDto;
import com.palnet.comn.utils.InstantUtils;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
@ -10,6 +12,9 @@ import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.test.context.ActiveProfiles;
import java.time.Duration;
import java.time.Instant;
@Slf4j
@ActiveProfiles("local")
@SpringBootTest
@ -20,11 +25,25 @@ class FltPlanQueryRepositoryTest {
@Test
void findAllAprvListBySearch() {
Instant createDate = InstantUtils.fromDateString("2023-10-06");
Instant createStDate = createDate.minus(Duration.ofDays(1));
Instant createEndDate = createDate.plus(Duration.ofDays(1));
Instant schFltStDate = InstantUtils.fromDateString("2023-10-06");
Instant schFltEndDate = InstantUtils.fromDateString("2023-10-10");
LaancAprvSearchDto serach = LaancAprvSearchDto.builder()
// .createDate(createDate)
// .createStDate(createStDate)
// .createEndDate(createEndDate)
// .memberName("팔네트웍스")
.schFltStDate(schFltStDate)
.schFltEndDate(schFltEndDate)
.build();
PageRequest pageRequest = PageRequest.of(0, 2);
Page<LaancPlanDto> list = fltPlanQueryRepository.findAllAprvListBySearch(null, pageRequest);
log.info("r : {} :: {}", list.getContent(), list);
Page<LaancPlanDto> list2 = fltPlanQueryRepository.findAllAprvListBySearch(null, null);
log.info("r : {} :: {}", list2.getContent(), list2);
Page<LaancPlanDto> list = fltPlanQueryRepository.findAllAprvListBySearch(serach, pageRequest);
log.info("r : {} :: {}", list.getContent().size(), list.getTotalElements());
Page<LaancPlanDto> list2 = fltPlanQueryRepository.findAllAprvListBySearch(serach, null);
log.info("r : {} :: {}", list2.getContent().size(), list.getTotalElements());
}
@ -32,4 +51,5 @@ class FltPlanQueryRepositoryTest {
void findAprvById() {
BasLaancAprvRs rs = new BasLaancAprvRs();
}
}
Loading…
Cancel
Save