diff --git a/src/main/java/com/kamco/cd/kamcoback/common/enums/CommonUseStatus.java b/src/main/java/com/kamco/cd/kamcoback/common/enums/CommonUseStatus.java index c099d74f..75596c54 100644 --- a/src/main/java/com/kamco/cd/kamcoback/common/enums/CommonUseStatus.java +++ b/src/main/java/com/kamco/cd/kamcoback/common/enums/CommonUseStatus.java @@ -1,5 +1,7 @@ package com.kamco.cd.kamcoback.common.enums; +import com.kamco.cd.kamcoback.common.enums.ApiConfigEnum.EnumDto; +import com.kamco.cd.kamcoback.common.utils.enums.CodeExpose; import com.kamco.cd.kamcoback.common.utils.enums.EnumType; import java.util.Arrays; import lombok.AllArgsConstructor; @@ -11,18 +13,19 @@ import lombok.Getter; *

This enum represents whether a resource is active, excluded from processing, or inactive. It * is commonly used for filtering, business rules, and status management. */ +@CodeExpose @Getter @AllArgsConstructor public enum CommonUseStatus implements EnumType { // @formatter:off - USE("USE", "Active", 100) + USE("USE", "사용중", 100) /** Actively used and available */ , - EXCEPT("EXCEPT", "Excluded", 200) + EXCEPT("EXCEPT", "영구 추론제외", 200) /** Explicitly excluded from use or processing */ , - NOT_USE("NOT_USE", "Inactive", 999) + NOT_USE("NOT_USE", "사용안", 999) /** Not used or disabled */ ; // @formatter:on @@ -37,4 +40,8 @@ public enum CommonUseStatus implements EnumType { .findFirst() .orElse(CommonUseStatus.NOT_USE); } + + public EnumDto getEnumDto() { + return new EnumDto<>(this, this.id, this.text); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/MapInkxMngCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/MapInkxMngCoreService.java index 67e2dfa3..78aecaa1 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/MapInkxMngCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/MapInkxMngCoreService.java @@ -9,6 +9,7 @@ import com.kamco.cd.kamcoback.postgres.entity.MapInkx5kEntity; import com.kamco.cd.kamcoback.postgres.repository.scene.MapInkx50kRepository; import com.kamco.cd.kamcoback.postgres.repository.scene.MapInkx5kRepository; import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto; +import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto.MapListEntity; import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto.UseInferReq; import jakarta.persistence.EntityNotFoundException; import jakarta.validation.Valid; @@ -101,4 +102,11 @@ public class MapInkxMngCoreService { return getScene5k.toEntity(); } + + public Page getSceneListByPage( + CommonUseStatus useInference, String searchVal, MapInkxMngDto.searchReq searchReq) { + return mapInkx5kRepository + .getSceneListByPage(useInference, searchVal, searchReq) + .map(MapInkx5kEntity::toDto); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapInkx50kEntity.java b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapInkx50kEntity.java index 95649a18..df11dee0 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapInkx50kEntity.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapInkx50kEntity.java @@ -1,5 +1,6 @@ package com.kamco.cd.kamcoback.postgres.entity; +import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.MapSheet; import com.kamco.cd.kamcoback.postgres.CommonDateEntity; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -46,4 +47,8 @@ public class MapInkx50kEntity extends CommonDateEntity { this.mapidNo = mapidNo; this.geom = geom; } + + public MapSheet toEntity() { + return new MapSheet(mapidcdNo, mapidNm); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapInkx5kEntity.java b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapInkx5kEntity.java index 80247365..b4d26049 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapInkx5kEntity.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapInkx5kEntity.java @@ -4,6 +4,7 @@ import com.kamco.cd.kamcoback.common.enums.CommonUseStatus; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.MapSheet; import com.kamco.cd.kamcoback.postgres.CommonDateEntity; +import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto.MapListEntity; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; @@ -73,4 +74,14 @@ public class MapInkx5kEntity extends CommonDateEntity { public InferenceResultDto.MapSheet toEntity() { return new MapSheet(mapidcdNo, mapidNm); } + + public MapListEntity toDto() { + return MapListEntity.builder() + .scene5k(this.toEntity()) + .scene50k(this.mapInkx50k.toEntity()) + .useInference(useInference) + .createdDttm(super.getCreatedDate()) + .updatedDttm(super.getModifiedDate()) + .build(); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scene/MapInkx5kRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scene/MapInkx5kRepositoryCustom.java index 50bdf94f..ee971c5c 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scene/MapInkx5kRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scene/MapInkx5kRepositoryCustom.java @@ -4,6 +4,7 @@ import com.kamco.cd.kamcoback.common.enums.CommonUseStatus; import com.kamco.cd.kamcoback.postgres.entity.MapInkx5kEntity; import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto; import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto.MapList; +import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto.searchReq; import java.util.List; import java.util.Optional; import org.springframework.data.domain.Page; @@ -18,4 +19,7 @@ public interface MapInkx5kRepositoryCustom { Long findByMapidCdNoExists(String mapidcdNo); Optional findByMapidCdNoInfo(String mapidcdNo); + + Page getSceneListByPage( + CommonUseStatus useInference, String searchVal, searchReq searchReq); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scene/MapInkx5kRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scene/MapInkx5kRepositoryImpl.java index 6485e9c1..6e3789d3 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scene/MapInkx5kRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scene/MapInkx5kRepositoryImpl.java @@ -102,6 +102,31 @@ public class MapInkx5kRepositoryImpl extends QuerydslRepositorySupport .fetchOne()); } + @Override + public Page getSceneListByPage( + CommonUseStatus useInference, String searchVal, searchReq searchReq) { + Pageable pageable = searchReq.toPageable(); + List content = + queryFactory + .selectFrom(mapInkx5kEntity) + .innerJoin(mapInkx5kEntity.mapInkx50k, mapInkx50kEntity) + .fetchJoin() + .where(searchUseInference(useInference), searchValueMapCdNm(searchVal)) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + .orderBy(mapInkx5kEntity.mapidcdNo.asc()) + .fetch(); + Long count = + queryFactory + .select(mapInkx5kEntity.count()) + .from(mapInkx5kEntity) + .innerJoin(mapInkx5kEntity.mapInkx50k, mapInkx50kEntity) + .where(searchUseInference(useInference), searchValueMapCdNm(searchVal)) + .fetchOne(); + + return new PageImpl<>(content, pageable, count); + } + private BooleanExpression searchUseInference(CommonUseStatus useInference) { if (Objects.isNull(useInference)) { return null; diff --git a/src/main/java/com/kamco/cd/kamcoback/scene/MapInkxMngApiV2Controller.java b/src/main/java/com/kamco/cd/kamcoback/scene/MapInkxMngApiV2Controller.java new file mode 100644 index 00000000..39a1dae7 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/scene/MapInkxMngApiV2Controller.java @@ -0,0 +1,52 @@ +package com.kamco.cd.kamcoback.scene; + +import com.kamco.cd.kamcoback.code.dto.CommonCodeDto; +import com.kamco.cd.kamcoback.common.enums.CommonUseStatus; +import com.kamco.cd.kamcoback.config.api.ApiResponseDto; +import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto; +import com.kamco.cd.kamcoback.scene.service.MapInkxMngService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@Tag(name = "도엽 관리", description = "도엽 관리 API") +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/v2/scene") +public class MapInkxMngApiV2Controller { + + private final MapInkxMngService mapInkxMngService; + + @Operation(summary = "목록 조회", description = "도엽 목록 조회") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "200", + description = "조회 성공", + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = CommonCodeDto.Basic.class))), + @ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @GetMapping + public ApiResponseDto> findMapInkxMngList( + @RequestParam(defaultValue = "0") int page, + @RequestParam(defaultValue = "20") int size, + @RequestParam(required = false) CommonUseStatus useInference, + @RequestParam(required = false) String searchVal) { + MapInkxMngDto.searchReq searchReq = new MapInkxMngDto.searchReq(page, size, ""); + return ApiResponseDto.ok( + mapInkxMngService.findMapInkxMngLists(useInference, searchVal, searchReq)); + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto.java b/src/main/java/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto.java index caa995a6..32464f83 100644 --- a/src/main/java/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto.java @@ -1,15 +1,17 @@ package com.kamco.cd.kamcoback.scene.dto; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.databind.JsonNode; +import com.kamco.cd.kamcoback.common.enums.ApiConfigEnum.EnumDto; import com.kamco.cd.kamcoback.common.enums.CommonUseStatus; -import com.kamco.cd.kamcoback.common.utils.enums.CodeExpose; -import com.kamco.cd.kamcoback.common.utils.enums.EnumType; +import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.persistence.EntityNotFoundException; import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -19,25 +21,26 @@ import org.springframework.data.domain.Sort; public class MapInkxMngDto { - @CodeExpose - @Getter - @AllArgsConstructor - public enum UseInferenceType implements EnumType { - USE("사용중"), - EXCEPT("영구 추론제외"); - - private final String desc; - - @Override - public String getId() { - return name(); - } - - @Override - public String getText() { - return desc; - } - } + // CommonUseStatus class로 통합 20251230 + // @CodeExpose + // @Getter + // @AllArgsConstructor + // public enum UseInferenceType implements EnumType { + // USE("사용중"), + // EXCEPT("영구 추론제외"); + // + // private final String desc; + // + // @Override + // public String getId() { + // return name(); + // } + // + // @Override + // public String getText() { + // return desc; + // } + // } @Schema(name = "Basic", description = "Basic") @Getter @@ -55,6 +58,46 @@ public class MapInkxMngDto { private ZonedDateTime updatedDttm; } + @Getter + @Schema(name = "MapListEntity", description = "목록 항목") + public static class MapListEntity { + + private InferenceResultDto.MapSheet scene50k; + private InferenceResultDto.MapSheet scene5k; + private CommonUseStatus useInference; + + @JsonFormat( + shape = JsonFormat.Shape.STRING, + pattern = "yyyy-MM-dd'T'HH:mm:ssXXX", + timezone = "Asia/Seoul") + private ZonedDateTime createdDttm; + + @JsonFormat( + shape = JsonFormat.Shape.STRING, + pattern = "yyyy-MM-dd'T'HH:mm:ssXXX", + timezone = "Asia/Seoul") + private ZonedDateTime updatedDttm; + + public EnumDto getUseInference() { + EnumDto enumDto = useInference.getEnumDto(); + return enumDto; + } + + @Builder + public MapListEntity( + InferenceResultDto.MapSheet scene50k, + InferenceResultDto.MapSheet scene5k, + CommonUseStatus useInference, + ZonedDateTime createdDttm, + ZonedDateTime updatedDttm) { + this.scene50k = scene50k; + this.scene5k = scene5k; + this.useInference = useInference; + this.createdDttm = createdDttm; + this.updatedDttm = updatedDttm; + } + } + @Schema(name = "MapList", description = "목록 항목") @Getter @Setter diff --git a/src/main/java/com/kamco/cd/kamcoback/scene/service/MapInkxMngService.java b/src/main/java/com/kamco/cd/kamcoback/scene/service/MapInkxMngService.java index 5cd06c7c..bab97bbf 100644 --- a/src/main/java/com/kamco/cd/kamcoback/scene/service/MapInkxMngService.java +++ b/src/main/java/com/kamco/cd/kamcoback/scene/service/MapInkxMngService.java @@ -25,11 +25,18 @@ public class MapInkxMngService { private final MapInkxMngCoreService mapInkxMngCoreService; + // 도엽의 리스트 조회 public Page findMapInkxMngList( MapInkxMngDto.searchReq searchReq, CommonUseStatus useInference, String searchVal) { return mapInkxMngCoreService.findMapInkxMngList(searchReq, useInference, searchVal); } + // 도엽의 리스트 조회 + public Page findMapInkxMngLists( + CommonUseStatus useInference, String searchVal, MapInkxMngDto.searchReq searchReq) { + return mapInkxMngCoreService.getSceneListByPage(useInference, searchVal, searchReq); + } + public ResponseObj saveMapInkx5k(@Valid MapInkxMngDto.AddMapReq req) { String[] coordinates = req.getCoordinates().split("\\r?\\n");