From b7470d11d4e9db12a217ece13accf71587de5a2e Mon Sep 17 00:00:00 2001 From: teddy Date: Fri, 27 Feb 2026 14:01:14 +0900 Subject: [PATCH 1/4] =?UTF-8?q?=EC=B6=94=EB=A1=A0=20=EC=A3=BC=EC=84=9D=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/kamco/cd/kamcoback/config/SecurityConfig.java | 1 + .../postgres/core/InferenceResultCoreService.java | 8 +++++++- .../InferenceResultsTestingRepositoryCustom.java | 6 ++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/config/SecurityConfig.java b/src/main/java/com/kamco/cd/kamcoback/config/SecurityConfig.java index 83585d18..1db8aec8 100644 --- a/src/main/java/com/kamco/cd/kamcoback/config/SecurityConfig.java +++ b/src/main/java/com/kamco/cd/kamcoback/config/SecurityConfig.java @@ -111,6 +111,7 @@ public class SecurityConfig { .requestMatchers( "/api/user/**", "/api/my/menus", + "/api/members/*/password", "/api/training-data/label/**", "/api/training-data/review/**") .authenticated() diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java index a65930bc..fde336b7 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java @@ -283,7 +283,7 @@ public class InferenceResultCoreService { .distinct() // 중복 방지 (선택) .toList(); - // testing 추론결과 테이블 조회하여 탐지 개수 업데이트 + // testing 테이블 추론결과 테이블 조회하여 탐지 개수 업데이트 Long testing = getInferenceResultCnt(batchIds); // 공통 영역 업데이트 @@ -535,6 +535,12 @@ public class InferenceResultCoreService { return list.stream().map(InferenceResultsTestingEntity::toDto).toList(); } + /** + * 테스팅 테이블 조회하여 탐지건수 조회 + * + * @param batchIds batchIds + * @return batchIds 조회 count 수 + */ public Long getInferenceResultCnt(List batchIds) { return inferenceResultsTestingRepository.getInferenceResultCnt(batchIds); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/InferenceResultsTestingRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/InferenceResultsTestingRepositoryCustom.java index 79326d61..ee8e13fd 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/InferenceResultsTestingRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/InferenceResultsTestingRepositoryCustom.java @@ -7,5 +7,11 @@ public interface InferenceResultsTestingRepositoryCustom { List getInferenceResultList(List batchIds); + /** + * 테스팅 테이블 조회하여 탐지건수 조회 + * + * @param batchIds batchIds + * @return batchIds 조회 count 수 + */ Long getInferenceResultCnt(List batchIds); } From d069981c8f1f474a6b22eb506ab2d055defec817 Mon Sep 17 00:00:00 2001 From: teddy Date: Fri, 27 Feb 2026 14:01:54 +0900 Subject: [PATCH 2/4] =?UTF-8?q?=ED=8C=A8=EC=8A=A4=EC=9B=8C=EB=93=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20=EA=B6=8C=ED=95=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/kamco/cd/kamcoback/config/SecurityConfig.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/config/SecurityConfig.java b/src/main/java/com/kamco/cd/kamcoback/config/SecurityConfig.java index 4799aae1..f08ad5c9 100644 --- a/src/main/java/com/kamco/cd/kamcoback/config/SecurityConfig.java +++ b/src/main/java/com/kamco/cd/kamcoback/config/SecurityConfig.java @@ -112,7 +112,6 @@ public class SecurityConfig { .requestMatchers( "/api/user/**", "/api/my/menus", - "/api/members/*/password", "/api/training-data/label/**", "/api/training-data/review/**") .authenticated() From 9f379c6dc3d2c3d9d11926f66f8e4d786516f80b Mon Sep 17 00:00:00 2001 From: "gayoun.park" Date: Fri, 27 Feb 2026 14:07:44 +0900 Subject: [PATCH 3/4] =?UTF-8?q?=EC=98=81=EC=83=81=EA=B4=80=EB=A6=AC,=20?= =?UTF-8?q?=EB=8F=84=EC=97=BD=EA=B4=80=EB=A6=AC=20API=EB=A7=8C=20=EC=9A=B0?= =?UTF-8?q?=EC=84=A0=20=EC=A0=95=EB=A6=AC=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapsheet/MapSheetMngApiController.java | 127 +++--------------- .../scene/MapInkxMngApiController.java | 2 + 2 files changed, 20 insertions(+), 109 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/mapsheet/MapSheetMngApiController.java b/src/main/java/com/kamco/cd/kamcoback/mapsheet/MapSheetMngApiController.java index 3e976db4..46de540c 100644 --- a/src/main/java/com/kamco/cd/kamcoback/mapsheet/MapSheetMngApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/mapsheet/MapSheetMngApiController.java @@ -1,14 +1,10 @@ package com.kamco.cd.kamcoback.mapsheet; import com.kamco.cd.kamcoback.code.dto.CommonCodeDto; -import com.kamco.cd.kamcoback.code.service.CommonCodeService; import com.kamco.cd.kamcoback.config.api.ApiResponseDto; -import com.kamco.cd.kamcoback.mapsheet.dto.FileDto.FilesDto; import com.kamco.cd.kamcoback.mapsheet.dto.FileDto.FoldersDto; -import com.kamco.cd.kamcoback.mapsheet.dto.FileDto.SrchFilesDto; import com.kamco.cd.kamcoback.mapsheet.dto.FileDto.SrchFoldersDto; import com.kamco.cd.kamcoback.mapsheet.dto.MapSheetMngDto; -import com.kamco.cd.kamcoback.mapsheet.dto.MapSheetMngDto.MngYyyyDto; import com.kamco.cd.kamcoback.mapsheet.service.MapSheetMngService; import com.kamco.cd.kamcoback.model.dto.ModelMngDto.ModelUploadResDto; import com.kamco.cd.kamcoback.upload.dto.UploadDto; @@ -42,7 +38,6 @@ import org.springframework.web.multipart.MultipartFile; @RequestMapping({"/api/imagery/dataset"}) public class MapSheetMngApiController { - private final CommonCodeService commonCodeService; private final MapSheetMngService mapSheetMngService; @Value("${file.sync-root-dir}") @@ -51,7 +46,7 @@ public class MapSheetMngApiController { @Value("${file.sync-tmp-dir}") private String syncRootTmpDir; - @Operation(summary = "영상 데이터 관리 목록 조회", description = "영상 데이터 관리 목록 조회") + @Operation(summary = "영상데이터관리 > 목록 조회", description = "영상데이터관리 > 목록 조회") @ApiResponses( value = { @ApiResponse( @@ -70,7 +65,7 @@ public class MapSheetMngApiController { return ApiResponseDto.ok(mapSheetMngService.findMapSheetMngList()); } - @Operation(summary = "영상 데이터 관리 상세", description = "영상 데이터 관리 상세") + @Operation(summary = "영상데이터관리 > 상세 조회", description = "영상데이터관리 > 상세 조회") @ApiResponses( value = { @ApiResponse( @@ -89,7 +84,7 @@ public class MapSheetMngApiController { return ApiResponseDto.ok(mapSheetMngService.findMapSheetMng(mngYyyy)); } - @Operation(summary = "영상관리 > 데이터 등록", description = "영상관리 > 데이터 등록") + @Operation(summary = "영상데이터관리 > 데이터 등록", description = "영상데이터관리 > 데이터 등록") @ApiResponses( value = { @ApiResponse( @@ -109,26 +104,7 @@ public class MapSheetMngApiController { return ApiResponseDto.ok(mapSheetMngService.mngDataSave(AddReq)); } - @Operation(summary = "영상관리 > 작업완료", description = "영상관리 > 작업완료") - @ApiResponses( - value = { - @ApiResponse( - responseCode = "201", - description = "작업완료 처리 성공", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = Long.class))), - @ApiResponse(responseCode = "400", description = "잘못된 요청 데이터", content = @Content), - @ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음", content = @Content), - @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) - }) - @PutMapping("/mng-complete") - public ApiResponseDto mngComplete(@RequestParam @Valid int mngYyyy) { - return ApiResponseDto.ok(mapSheetMngService.mngComplete(mngYyyy)); - } - - @Operation(summary = "영상 데이터 관리 년도 목록", description = "영상 데이터 관리 년도 목록") + @Operation(summary = "영상데이터관리 > 데이터 등록 > 연도 선택 목록", description = "영상데이터관리 > 데이터 등록 > 연도 선택 목록") @ApiResponses( value = { @ApiResponse( @@ -147,7 +123,7 @@ public class MapSheetMngApiController { return ApiResponseDto.ok(mapSheetMngService.findMapSheetMngYyyyList()); } - @Operation(summary = "영상 데이터 관리 오류 목록", description = "영상 데이터 관리 오류 목록") + @Operation(summary = "영상데이터관리 > 상세 > 오류 처리 내역", description = "영상데이터관리 > 상세 > 오류 처리 내역") @ApiResponses( value = { @ApiResponse( @@ -166,42 +142,9 @@ public class MapSheetMngApiController { return ApiResponseDto.ok(mapSheetMngService.findMapSheetErrorList(searchReq)); } - /* - @Operation(summary = "오류데이터 팝업 > 업로드 처리", description = "오류데이터 팝업 > 업로드 처리") - @ApiResponses( - value = { - @ApiResponse( - responseCode = "201", - description = "업로드 처리 성공", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = Long.class))), - @ApiResponse(responseCode = "400", description = "잘못된 요청 데이터", content = @Content), - @ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음", content = @Content), - @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) - }) - @PutMapping("/upload-process") - public ApiResponseDto uploadProcess( - @RequestBody @Valid List hstUidList) { - return ApiResponseDto.ok(mapSheetMngService.uploadProcess(hstUidList)); - } - - */ - - /* - @Operation(summary = "오류데이터 팝업 > 추론 제외", description = "오류데이터 팝업 > 추론 제외") - @PutMapping("/except-inference") - public ApiResponseDto updateExceptUseInference( - @RequestBody @Valid List hstUidList) { - return ApiResponseDto.ok(mapSheetMngService.updateExceptUseInference(hstUidList)); - } - - - - */ - - @Operation(summary = "페어 파일 업로드", description = "TFW/TIF 두 파일을 쌍으로 업로드 및 검증") + @Operation( + summary = "영상데이터관리 > 상세 > 오류 처리 내역 > 업로드 (페어 파일 저장)", + description = "영상데이터관리 > 상세 > 오류 처리 내역 > 업로드 (페어 파일 저장)") @PostMapping(value = "/upload-pair", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public ApiResponseDto uploadPair( @RequestPart("tfw") MultipartFile tfwFile, @@ -213,7 +156,9 @@ public class MapSheetMngApiController { mapSheetMngService.uploadPair(tfwFile, tifFile, hstUid, tifFileSize)); } - @Operation(summary = "영상관리 > 파일조회", description = "영상관리 > 파일조회") + @Operation( + summary = "영상데이터관리 > 상세 > 오류 처리 내역 > 중복제거 > 팝업 내 해당 파일조회", + description = "영상데이터관리 > 상세 > 오류 처리 내역 > 중복제거 > 팝업 내 해당 파일조회") @ApiResponses( value = { @ApiResponse( @@ -234,13 +179,13 @@ public class MapSheetMngApiController { } @Operation( - summary = "영상관리 > 파일사용설정 및 중복제거", - description = "영상관리 >파일사용설정 및 중복제거(중복파일제거 및 선택파일사용설정)") + summary = "영상데이터관리 > 상세 > 오류 처리 내역 > 중복제거 업데이트", + description = "영상데이터관리 > 상세 > 오류 처리 내역 > 중복제거 업데이트") @ApiResponses( value = { @ApiResponse( responseCode = "201", - description = "파일사용설정 처리 성공", + description = "중복제거 업데이트 처리 성공", content = @Content( mediaType = "application/json", @@ -255,7 +200,7 @@ public class MapSheetMngApiController { return ApiResponseDto.ok(mapSheetMngService.setUseByFileUidMngFile(fileUids)); } - @Operation(summary = "폴더 조회", description = "폴더 조회 (ROOT:/app/original-images 이하로 경로입력)") + @Operation(summary = "영상데이터관리 > 데이터 등록 > NAS 폴더 선택", description = "영상데이터관리 > 데이터 등록 > NAS 폴더 선택") @ApiResponses( value = { @ApiResponse( @@ -274,45 +219,9 @@ public class MapSheetMngApiController { return ApiResponseDto.createOK(mapSheetMngService.getFolderAll(srchDto)); } - @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) - }) - @PostMapping("/file-list") - public ApiResponseDto getFiles(@RequestBody SrchFilesDto srchDto) { - - return ApiResponseDto.createOK(mapSheetMngService.getFilesAll(srchDto)); - } - - @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) - }) - @PostMapping("/mng-done-yyyy-list") - public ApiResponseDto> findMapSheetMngDoneYyyyList() { - - return ApiResponseDto.ok(mapSheetMngService.findMapSheetMngDoneYyyyList()); - } - - @Operation(summary = "영상 tif 대용량 파일 분할 전송", description = "영상 tif 파일 대용량 파일을 청크 단위로 전송합니다.") + @Operation( + summary = "영상데이터관리 > 상세 > 오류 처리 내역 > 업로드 (영상 tif 대용량 파일 분할 전송)", + description = "영상데이터관리 > 상세 > 오류 처리 내역 > 업로드 (영상 tif 대용량 파일 분할 전송)") @ApiResponses( value = { @ApiResponse(responseCode = "200", description = "청크 업로드 성공", content = @Content), diff --git a/src/main/java/com/kamco/cd/kamcoback/scene/MapInkxMngApiController.java b/src/main/java/com/kamco/cd/kamcoback/scene/MapInkxMngApiController.java index 2c827153..028a33d2 100644 --- a/src/main/java/com/kamco/cd/kamcoback/scene/MapInkxMngApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/scene/MapInkxMngApiController.java @@ -59,6 +59,8 @@ public class MapInkxMngApiController { mapInkxMngService.findMapInkxMngList(searchReq, useInference, searchVal)); } + // 미사용 : 기획에서 도엽정보 등록 로직 제거됨 + @Hidden @Operation(summary = "저장", description = "도엽정보를 저장 합니다.") @ApiResponses( value = { From 396e76c362f966afb72a716943e27d51f8bfff05 Mon Sep 17 00:00:00 2001 From: "gayoun.park" Date: Fri, 27 Feb 2026 15:14:18 +0900 Subject: [PATCH 4/4] =?UTF-8?q?=EA=B5=AD=EC=9C=A0=EC=9D=B8=20=EC=97=B0?= =?UTF-8?q?=EB=8F=99=20outputdir=20=EA=B2=BD=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gukyuin/service/GukYuinApiService.java | 15 ++++++++------- src/main/resources/application-dev.yml | 1 + src/main/resources/application-prod.yml | 1 + 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/gukyuin/service/GukYuinApiService.java b/src/main/java/com/kamco/cd/kamcoback/gukyuin/service/GukYuinApiService.java index 5adff07d..8dfa70f8 100644 --- a/src/main/java/com/kamco/cd/kamcoback/gukyuin/service/GukYuinApiService.java +++ b/src/main/java/com/kamco/cd/kamcoback/gukyuin/service/GukYuinApiService.java @@ -69,8 +69,8 @@ public class GukYuinApiService { @Value("${file.nfs}") private String nfs; - // @Value("${file.dataset-dir}") - // private String datasetDir; + @Value("${inference.output-dir}") + private String outputDir; @Transactional public ChngDetectMastDto.RegistResDto regist( @@ -456,10 +456,11 @@ public class GukYuinApiService { return new ResponseObj(ApiResponseCode.DUPLICATE_DATA, "이미 국유인 연동을 한 회차입니다."); } - // String kamconfsDatasetExportPathfsDatasetExportPath = "/kamco-nfs/dataset/export/"; - String kamconfsDatasetExportPathfsDatasetExportPath = - String.format("%s%s", nfs, "/dataset/export/"); - if (!Files.isDirectory(Path.of(kamconfsDatasetExportPathfsDatasetExportPath + info.getUid()))) { + // 추론 shp 파일 생성되는 위치 + String kamconfsDatasetExportPathfsDatasetExportPath = outputDir; + log.info("outputDir path : " + kamconfsDatasetExportPathfsDatasetExportPath); + if (!Files.isDirectory( + Path.of(kamconfsDatasetExportPathfsDatasetExportPath + "/" + info.getUid()))) { return new ResponseObj( ApiResponseCode.NOT_FOUND_DATA, "파일 경로에 회차 실행 파일이 생성되지 않았습니다. 확인 부탁드립니다."); } @@ -474,7 +475,7 @@ public class GukYuinApiService { reqDto.setCrtrYr(String.valueOf(info.getTargetYyyy())); reqDto.setChnDtctSno(String.valueOf(maxStage + 1)); reqDto.setChnDtctId(info.getUid()); - reqDto.setPathNm(kamconfsDatasetExportPathfsDatasetExportPath + info.getUid()); + reqDto.setPathNm(kamconfsDatasetExportPathfsDatasetExportPath + "/" + info.getUid()); // 1회차를 종료 상태로 처리하고 2회차를 보내야 함 // 추론(learn), 학습데이터(inference) 둘 다 종료 처리 diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 266218ef..8dc9f7a0 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -101,6 +101,7 @@ inference: batch-url: http://192.168.2.183:8000/batches jar-path: ${inference.nfs}/repo/jar/shp-exporter.jar inference-server-name: server1,server2,server3,server4 + output-dir: ${inference.nfs}/model_output/export gukyuin: #url: http://localhost:8080 diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 43ec3ffd..96379657 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -95,6 +95,7 @@ inference: batch-url: http://172.16.4.56:8000/batches jar-path: ${inference.nfs}/repo/jar/shp-exporter.jar inference-server-name: server1,server2,server3,server4 + output-dir: ${inference.nfs}/model_output/export gukyuin: url: http://127.0.0.1:5301