polishing

This commit is contained in:
2025-12-30 10:00:32 +09:00
parent 436bac32a3
commit 7e4f3476b3
9 changed files with 151 additions and 21 deletions

View File

@@ -0,0 +1,22 @@
package com.kamco.cd.kamcoback.common.enums;
import lombok.EqualsAndHashCode;
import lombok.Getter;
public class ApiConfigEnum {
@Getter
@EqualsAndHashCode(of = "enumValue")
public static class EnumDto<T> {
private final T enumValue;
private final String id;
private final String text;
public EnumDto(T enumValue, String id, String text) {
this.enumValue = enumValue;
this.id = id;
this.text = text;
}
}
}

View File

@@ -0,0 +1,40 @@
package com.kamco.cd.kamcoback.common.enums;
import com.kamco.cd.kamcoback.common.utils.enums.EnumType;
import java.util.Arrays;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* Common usage status used across the system.
*
* <p>This enum represents whether a resource is active, excluded from processing, or inactive. It
* is commonly used for filtering, business rules, and status management.
*/
@Getter
@AllArgsConstructor
public enum CommonUseStatus implements EnumType {
// @formatter:off
USE("USE", "Active", 100)
/** Actively used and available */
,
EXCEPT("EXCEPT", "Excluded", 200)
/** Explicitly excluded from use or processing */
,
NOT_USE("NOT_USE", "Inactive", 999)
/** Not used or disabled */
;
// @formatter:on
private String id;
private String text;
private int ordering;
public static CommonUseStatus getEnumById(String id) {
return Arrays.stream(CommonUseStatus.values())
.filter(x -> x.getId().equals(id))
.findFirst()
.orElse(CommonUseStatus.NOT_USE);
}
}

View File

@@ -1,7 +1,9 @@
package com.kamco.cd.kamcoback.postgres.core; package com.kamco.cd.kamcoback.postgres.core;
import com.kamco.cd.kamcoback.common.enums.CommonUseStatus;
import com.kamco.cd.kamcoback.config.api.ApiResponseDto.ApiResponseCode; import com.kamco.cd.kamcoback.config.api.ApiResponseDto.ApiResponseCode;
import com.kamco.cd.kamcoback.config.api.ApiResponseDto.ResponseObj; import com.kamco.cd.kamcoback.config.api.ApiResponseDto.ResponseObj;
import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.MapSheet;
import com.kamco.cd.kamcoback.postgres.entity.MapInkx50kEntity; import com.kamco.cd.kamcoback.postgres.entity.MapInkx50kEntity;
import com.kamco.cd.kamcoback.postgres.entity.MapInkx5kEntity; 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.MapInkx50kRepository;
@@ -10,12 +12,16 @@ import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto;
import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto.UseInferReq; import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto.UseInferReq;
import jakarta.persistence.EntityNotFoundException; import jakarta.persistence.EntityNotFoundException;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import java.util.Optional; import java.util.Optional;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.locationtech.jts.geom.Polygon; import org.locationtech.jts.geom.Polygon;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Slf4j
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class MapInkxMngCoreService { public class MapInkxMngCoreService {
@@ -25,7 +31,7 @@ public class MapInkxMngCoreService {
// 목록 // 목록
public Page<MapInkxMngDto.MapList> findMapInkxMngList( public Page<MapInkxMngDto.MapList> findMapInkxMngList(
MapInkxMngDto.searchReq searchReq, String useInference, String searchVal) { MapInkxMngDto.searchReq searchReq, CommonUseStatus useInference, String searchVal) {
return mapInkx5kRepository.findMapInkxMngList(searchReq, useInference, searchVal); return mapInkx5kRepository.findMapInkxMngList(searchReq, useInference, searchVal);
} }
@@ -44,15 +50,14 @@ public class MapInkxMngCoreService {
} }
MapInkx5kEntity entity = MapInkx5kEntity entity =
new MapInkx5kEntity( new MapInkx5kEntity(req.getMapidcdNo(), req.getMapidNm(), map_polygon, mapInkx50k);
req.getMapidcdNo(), req.getMapidNm(), map_polygon, mapInkx50k, "USE" // 기본은 USE로
);
mapInkx5kRepository.save(entity); mapInkx5kRepository.save(entity);
return new ResponseObj(ApiResponseCode.OK, ""); return new ResponseObj(ApiResponseCode.OK, "");
} }
// 도엽의 사용여부를 변경한다.
public ResponseObj updateUseInference(@Valid UseInferReq useInferReq) { public ResponseObj updateUseInference(@Valid UseInferReq useInferReq) {
Optional<MapInkx5kEntity> entity = Optional<MapInkx5kEntity> entity =
Optional.ofNullable( Optional.ofNullable(
@@ -63,4 +68,37 @@ public class MapInkxMngCoreService {
entity.get().updateUseInference(useInferReq.getUseInference()); entity.get().updateUseInference(useInferReq.getUseInference());
return new ResponseObj(ApiResponseCode.OK, ""); return new ResponseObj(ApiResponseCode.OK, "");
} }
/**
* Updates the inference usage status of a given map sheet (도엽) based on the provided scene ID and
* usage status. 도엽의 사용여부를 변경한다.
*
* @param sceneId5k the unique identifier for the map sheet whose usage status is being updated
* @param useStatus the new usage status to be set for the specified map sheet
* @return a ResponseObj indicating the outcome of the operation, including a response code and
* message
* @throws EntityNotFoundException if no map sheet is found for the provided scene ID
*/
@Transactional
public MapSheet updateUseInference(
@NotNull String sceneId5k, @NotNull CommonUseStatus useStatus) {
log.debug("[updateUseInference]CHANGE_SCENE STATUS start: {}", sceneId5k);
// 5k도엽 정보를 가져온다.
MapInkx5kEntity getScene5k =
mapInkx5kRepository
.findByMapidCdNoInfo(sceneId5k)
.orElseThrow(() -> new EntityNotFoundException("도엽정보를 찾을 수 없습니다."));
log.debug(
"[updateUseInference]CHANGE_SCENE STATUS: {} |BEFORE {} |AFTER {}",
sceneId5k,
getScene5k.getUseInference(),
useStatus);
// 상태를 업데이트한다.
getScene5k.updateUseInference(useStatus);
return getScene5k.toEntity();
}
} }

View File

@@ -1,10 +1,13 @@
package com.kamco.cd.kamcoback.postgres.entity; package com.kamco.cd.kamcoback.postgres.entity;
import com.kamco.cd.kamcoback.common.enums.CommonUseStatus;
import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto;
import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.MapSheet; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.MapSheet;
import com.kamco.cd.kamcoback.postgres.CommonDateEntity; import com.kamco.cd.kamcoback.postgres.CommonDateEntity;
import jakarta.persistence.Column; import jakarta.persistence.Column;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.FetchType; import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType; import jakarta.persistence.GenerationType;
@@ -46,23 +49,24 @@ public class MapInkx5kEntity extends CommonDateEntity {
@JoinColumn(name = "fid_k50", referencedColumnName = "fid") @JoinColumn(name = "fid_k50", referencedColumnName = "fid")
private MapInkx50kEntity mapInkx50k; private MapInkx50kEntity mapInkx50k;
// 사용상태 USE,
@Column(name = "use_inference") @Column(name = "use_inference")
private String useInference; @Enumerated(EnumType.STRING)
private CommonUseStatus useInference;
// Constructor
public MapInkx5kEntity( public MapInkx5kEntity(
String mapidcdNo, String mapidcdNo, String mapidNm, Geometry geom, MapInkx50kEntity mapInkx50k) {
String mapidNm,
Geometry geom,
MapInkx50kEntity mapInkx50k,
String useInference) {
this.mapidcdNo = mapidcdNo; this.mapidcdNo = mapidcdNo;
this.mapidNm = mapidNm; this.mapidNm = mapidNm;
this.geom = geom; this.geom = geom;
this.mapInkx50k = mapInkx50k; this.mapInkx50k = mapInkx50k;
this.useInference = useInference; // 생성시 default 사용함 (사용,제외,사용안함)
this.useInference = CommonUseStatus.USE;
} }
public void updateUseInference(String useInference) { // 변경 사용상태 (추론사용여부)
public void updateUseInference(CommonUseStatus useInference) {
this.useInference = useInference; this.useInference = useInference;
} }

View File

@@ -1,5 +1,6 @@
package com.kamco.cd.kamcoback.postgres.repository.scene; package com.kamco.cd.kamcoback.postgres.repository.scene;
import com.kamco.cd.kamcoback.common.enums.CommonUseStatus;
import com.kamco.cd.kamcoback.postgres.entity.MapInkx5kEntity; import com.kamco.cd.kamcoback.postgres.entity.MapInkx5kEntity;
import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto; 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.MapList;
@@ -12,7 +13,7 @@ public interface MapInkx5kRepositoryCustom {
List<MapInkx5kEntity> listGetScenes5k(List<String> codes); List<MapInkx5kEntity> listGetScenes5k(List<String> codes);
Page<MapList> findMapInkxMngList( Page<MapList> findMapInkxMngList(
MapInkxMngDto.searchReq searchReq, String useInference, String searchVal); MapInkxMngDto.searchReq searchReq, CommonUseStatus useInference, String searchVal);
Long findByMapidCdNoExists(String mapidcdNo); Long findByMapidCdNoExists(String mapidcdNo);

View File

@@ -3,6 +3,7 @@ package com.kamco.cd.kamcoback.postgres.repository.scene;
import static com.kamco.cd.kamcoback.postgres.entity.QMapInkx50kEntity.mapInkx50kEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapInkx50kEntity.mapInkx50kEntity;
import static com.kamco.cd.kamcoback.postgres.entity.QMapInkx5kEntity.mapInkx5kEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapInkx5kEntity.mapInkx5kEntity;
import com.kamco.cd.kamcoback.common.enums.CommonUseStatus;
import com.kamco.cd.kamcoback.postgres.entity.MapInkx5kEntity; import com.kamco.cd.kamcoback.postgres.entity.MapInkx5kEntity;
import com.kamco.cd.kamcoback.postgres.entity.QMapInkx5kEntity; import com.kamco.cd.kamcoback.postgres.entity.QMapInkx5kEntity;
import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto; import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto;
@@ -42,7 +43,7 @@ public class MapInkx5kRepositoryImpl extends QuerydslRepositorySupport
@Override @Override
public Page<MapList> findMapInkxMngList( public Page<MapList> findMapInkxMngList(
searchReq searchReq, String useInference, String searchVal) { searchReq searchReq, CommonUseStatus useInference, String searchVal) {
Pageable pageable = searchReq.toPageable(); Pageable pageable = searchReq.toPageable();
List<MapInkxMngDto.MapList> foundContent = List<MapInkxMngDto.MapList> foundContent =
@@ -103,7 +104,7 @@ public class MapInkx5kRepositoryImpl extends QuerydslRepositorySupport
.fetchOne()); .fetchOne());
} }
private BooleanExpression searchUseInference(String useInference) { private BooleanExpression searchUseInference(CommonUseStatus useInference) {
if (Objects.isNull(useInference)) { if (Objects.isNull(useInference)) {
return null; return null;
} }

View File

@@ -1,7 +1,10 @@
package com.kamco.cd.kamcoback.scene; package com.kamco.cd.kamcoback.scene;
import com.kamco.cd.kamcoback.code.dto.CommonCodeDto; 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.config.api.ApiResponseDto;
import com.kamco.cd.kamcoback.config.api.ApiResponseDto.ApiResponseCode;
import com.kamco.cd.kamcoback.config.api.ApiResponseDto.ResponseObj;
import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto; import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto;
import com.kamco.cd.kamcoback.scene.service.MapInkxMngService; import com.kamco.cd.kamcoback.scene.service.MapInkxMngService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
@@ -46,7 +49,7 @@ public class MapInkxMngApiController {
public ApiResponseDto<Page<MapInkxMngDto.MapList>> findMapInkxMngList( public ApiResponseDto<Page<MapInkxMngDto.MapList>> findMapInkxMngList(
@RequestParam int page, @RequestParam int page,
@RequestParam(defaultValue = "20") int size, @RequestParam(defaultValue = "20") int size,
@RequestParam(required = false) String useInference, @RequestParam(required = false) CommonUseStatus useInference,
@RequestParam(required = false) String searchVal) { @RequestParam(required = false) String searchVal) {
MapInkxMngDto.searchReq searchReq = new MapInkxMngDto.searchReq(page, size, ""); MapInkxMngDto.searchReq searchReq = new MapInkxMngDto.searchReq(page, size, "");
return ApiResponseDto.ok( return ApiResponseDto.ok(
@@ -108,6 +111,7 @@ public class MapInkxMngApiController {
@RequestBody @RequestBody
@Valid @Valid
MapInkxMngDto.UseInferReq useInferReq) { MapInkxMngDto.UseInferReq useInferReq) {
return ApiResponseDto.okObject(mapInkxMngService.updateUseInference(useInferReq)); mapInkxMngService.updateUseInference(useInferReq);
return ApiResponseDto.okObject(new ResponseObj(ApiResponseCode.OK, ""));
} }
} }

View File

@@ -1,9 +1,11 @@
package com.kamco.cd.kamcoback.scene.dto; package com.kamco.cd.kamcoback.scene.dto;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
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.CodeExpose;
import com.kamco.cd.kamcoback.common.utils.enums.EnumType; import com.kamco.cd.kamcoback.common.utils.enums.EnumType;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.persistence.EntityNotFoundException;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
@@ -151,6 +153,18 @@ public class MapInkxMngDto {
public static class UseInferReq { public static class UseInferReq {
private String mapidcdNo; private String mapidcdNo;
private String useInference; private CommonUseStatus useInference; // 변경하고자하는 상태
public void valid() {
if (mapidcdNo == null || mapidcdNo.isEmpty()) {
throw new IllegalArgumentException("도엽번호는 필수 입력값입니다.");
}
// 공백제거
mapidcdNo = mapidcdNo.trim();
if (!mapidcdNo.matches("^\\d{8}$")) {
throw new EntityNotFoundException("도엽번호는 8자리 숫자로 구성되어야 합니다.");
}
}
} }
} }

View File

@@ -1,6 +1,8 @@
package com.kamco.cd.kamcoback.scene.service; package com.kamco.cd.kamcoback.scene.service;
import com.kamco.cd.kamcoback.common.enums.CommonUseStatus;
import com.kamco.cd.kamcoback.config.api.ApiResponseDto.ResponseObj; import com.kamco.cd.kamcoback.config.api.ApiResponseDto.ResponseObj;
import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.MapSheet;
import com.kamco.cd.kamcoback.postgres.core.MapInkxMngCoreService; import com.kamco.cd.kamcoback.postgres.core.MapInkxMngCoreService;
import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto; 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.MapList;
@@ -15,6 +17,7 @@ import org.locationtech.jts.geom.LinearRing;
import org.locationtech.jts.geom.PrecisionModel; import org.locationtech.jts.geom.PrecisionModel;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@@ -23,7 +26,7 @@ public class MapInkxMngService {
private final MapInkxMngCoreService mapInkxMngCoreService; private final MapInkxMngCoreService mapInkxMngCoreService;
public Page<MapList> findMapInkxMngList( public Page<MapList> findMapInkxMngList(
MapInkxMngDto.searchReq searchReq, String useInference, String searchVal) { MapInkxMngDto.searchReq searchReq, CommonUseStatus useInference, String searchVal) {
return mapInkxMngCoreService.findMapInkxMngList(searchReq, useInference, searchVal); return mapInkxMngCoreService.findMapInkxMngList(searchReq, useInference, searchVal);
} }
@@ -52,7 +55,10 @@ public class MapInkxMngService {
return mapInkxMngCoreService.saveMapInkx5k(req, GEOMETRY_FACTORY.createPolygon(shell)); return mapInkxMngCoreService.saveMapInkx5k(req, GEOMETRY_FACTORY.createPolygon(shell));
} }
public ResponseObj updateUseInference(@Valid UseInferReq useInferReq) { // 도엽의 상태를 업데이트한다.
return mapInkxMngCoreService.updateUseInference(useInferReq); @Transactional
public MapSheet updateUseInference(@Valid UseInferReq useInferReq) {
return mapInkxMngCoreService.updateUseInference(
useInferReq.getMapidcdNo(), useInferReq.getUseInference());
} }
} }