diff --git a/gukyuin/stblt-check/.gradle/8.14/executionHistory/executionHistory.bin b/gukyuin/stblt-check/.gradle/8.14/executionHistory/executionHistory.bin index 09034f7..0866ad0 100644 Binary files a/gukyuin/stblt-check/.gradle/8.14/executionHistory/executionHistory.bin and b/gukyuin/stblt-check/.gradle/8.14/executionHistory/executionHistory.bin differ diff --git a/gukyuin/stblt-check/.gradle/8.14/executionHistory/executionHistory.lock b/gukyuin/stblt-check/.gradle/8.14/executionHistory/executionHistory.lock index 37a0330..6061dd6 100644 Binary files a/gukyuin/stblt-check/.gradle/8.14/executionHistory/executionHistory.lock and b/gukyuin/stblt-check/.gradle/8.14/executionHistory/executionHistory.lock differ diff --git a/gukyuin/stblt-check/.gradle/8.14/fileHashes/fileHashes.bin b/gukyuin/stblt-check/.gradle/8.14/fileHashes/fileHashes.bin index 88bde45..0cd7938 100644 Binary files a/gukyuin/stblt-check/.gradle/8.14/fileHashes/fileHashes.bin and b/gukyuin/stblt-check/.gradle/8.14/fileHashes/fileHashes.bin differ diff --git a/gukyuin/stblt-check/.gradle/8.14/fileHashes/fileHashes.lock b/gukyuin/stblt-check/.gradle/8.14/fileHashes/fileHashes.lock index 91fcc75..6682dbb 100644 Binary files a/gukyuin/stblt-check/.gradle/8.14/fileHashes/fileHashes.lock and b/gukyuin/stblt-check/.gradle/8.14/fileHashes/fileHashes.lock differ diff --git a/gukyuin/stblt-check/.gradle/8.14/fileHashes/resourceHashesCache.bin b/gukyuin/stblt-check/.gradle/8.14/fileHashes/resourceHashesCache.bin index f19ace8..e872a85 100644 Binary files a/gukyuin/stblt-check/.gradle/8.14/fileHashes/resourceHashesCache.bin and b/gukyuin/stblt-check/.gradle/8.14/fileHashes/resourceHashesCache.bin differ diff --git a/gukyuin/stblt-check/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/gukyuin/stblt-check/.gradle/buildOutputCleanup/buildOutputCleanup.lock index a316cb7..eaa3e78 100644 Binary files a/gukyuin/stblt-check/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/gukyuin/stblt-check/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/gukyuin/stblt-check/.gradle/buildOutputCleanup/outputFiles.bin b/gukyuin/stblt-check/.gradle/buildOutputCleanup/outputFiles.bin index 5783eb6..e2b220d 100644 Binary files a/gukyuin/stblt-check/.gradle/buildOutputCleanup/outputFiles.bin and b/gukyuin/stblt-check/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/gukyuin/stblt-check/.gradle/file-system.probe b/gukyuin/stblt-check/.gradle/file-system.probe index 4090b67..aeb4831 100644 Binary files a/gukyuin/stblt-check/.gradle/file-system.probe and b/gukyuin/stblt-check/.gradle/file-system.probe differ diff --git a/gukyuin/stblt-check/.idea/.gitignore b/gukyuin/stblt-check/.idea/.gitignore new file mode 100644 index 0000000..c3f502a --- /dev/null +++ b/gukyuin/stblt-check/.idea/.gitignore @@ -0,0 +1,8 @@ +# 디폴트 무시된 파일 +/shelf/ +/workspace.xml +# 에디터 기반 HTTP 클라이언트 요청 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/gukyuin/stblt-check/.idea/.name b/gukyuin/stblt-check/.idea/.name new file mode 100644 index 0000000..54d4896 --- /dev/null +++ b/gukyuin/stblt-check/.idea/.name @@ -0,0 +1 @@ +kamco-stblt-check-job \ No newline at end of file diff --git a/gukyuin/stblt-check/.idea/compiler.xml b/gukyuin/stblt-check/.idea/compiler.xml new file mode 100644 index 0000000..e5ddae5 --- /dev/null +++ b/gukyuin/stblt-check/.idea/compiler.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/gukyuin/stblt-check/.idea/gradle.xml b/gukyuin/stblt-check/.idea/gradle.xml new file mode 100644 index 0000000..ce1c62c --- /dev/null +++ b/gukyuin/stblt-check/.idea/gradle.xml @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/gukyuin/stblt-check/.idea/kamco-gukyuin-stblt.iml b/gukyuin/stblt-check/.idea/kamco-gukyuin-stblt.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/gukyuin/stblt-check/.idea/kamco-gukyuin-stblt.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/gukyuin/stblt-check/.idea/misc.xml b/gukyuin/stblt-check/.idea/misc.xml new file mode 100644 index 0000000..c6d45de --- /dev/null +++ b/gukyuin/stblt-check/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/gukyuin/stblt-check/.idea/modules.xml b/gukyuin/stblt-check/.idea/modules.xml new file mode 100644 index 0000000..1e70a62 --- /dev/null +++ b/gukyuin/stblt-check/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/gukyuin/stblt-check/.idea/modules/kamco-stblt-check-job.main.iml b/gukyuin/stblt-check/.idea/modules/kamco-stblt-check-job.main.iml new file mode 100644 index 0000000..afc1871 --- /dev/null +++ b/gukyuin/stblt-check/.idea/modules/kamco-stblt-check-job.main.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/common/enums/RoleType.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/common/enums/RoleType.class deleted file mode 100644 index d8eb664..0000000 Binary files a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/common/enums/RoleType.class and /dev/null differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/common/enums/StatusType.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/common/enums/StatusType.class deleted file mode 100644 index 2498b27..0000000 Binary files a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/common/enums/StatusType.class and /dev/null differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/config/RestTemplateConfig.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/config/RestTemplateConfig.class new file mode 100644 index 0000000..af8bfce Binary files /dev/null and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/config/RestTemplateConfig.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/config/api/ApiResponseDto$ApiResponseCode.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/config/api/ApiResponseDto$ApiResponseCode.class new file mode 100644 index 0000000..2219089 Binary files /dev/null and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/config/api/ApiResponseDto$ApiResponseCode.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/config/api/ApiResponseDto$Error.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/config/api/ApiResponseDto$Error.class new file mode 100644 index 0000000..d41d4bb Binary files /dev/null and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/config/api/ApiResponseDto$Error.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/config/api/ApiResponseDto$ResponseObj.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/config/api/ApiResponseDto$ResponseObj.class new file mode 100644 index 0000000..1958e9a Binary files /dev/null and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/config/api/ApiResponseDto$ResponseObj.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/config/api/ApiResponseDto.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/config/api/ApiResponseDto.class new file mode 100644 index 0000000..6eec4e3 Binary files /dev/null and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/config/api/ApiResponseDto.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/enums/ImageryFitStatus.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/enums/ImageryFitStatus.class new file mode 100644 index 0000000..41b8062 Binary files /dev/null and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/enums/ImageryFitStatus.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectContDto$ReqInfo.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectContDto$ReqInfo.class new file mode 100644 index 0000000..4c6294b Binary files /dev/null and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectContDto$ReqInfo.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectContDto$ResultLabelDto.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectContDto$ResultLabelDto.class new file mode 100644 index 0000000..e65d3c4 Binary files /dev/null and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectContDto$ResultLabelDto.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectContDto$StbltResult.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectContDto$StbltResult.class new file mode 100644 index 0000000..6bf6277 Binary files /dev/null and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectContDto$StbltResult.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectContDto.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectContDto.class index 76ff8b4..3419471 100644 Binary files a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectContDto.class and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectContDto.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectMastDto$RemoveResDto.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectMastDto$RemoveResDto.class new file mode 100644 index 0000000..15e965d Binary files /dev/null and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectMastDto$RemoveResDto.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectMastDto.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectMastDto.class index ebe4afa..74c7f0e 100644 Binary files a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectMastDto.class and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectMastDto.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/core/GukYuinCoreService.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/core/GukYuinCoreService.class new file mode 100644 index 0000000..f649cb8 Binary files /dev/null and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/core/GukYuinCoreService.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/core/GukYuinStbltJobCoreService.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/core/GukYuinStbltJobCoreService.class index f853048..d8df1c3 100644 Binary files a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/core/GukYuinStbltJobCoreService.class and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/core/GukYuinStbltJobCoreService.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/CommonCreateEntity.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/CommonCreateEntity.class deleted file mode 100644 index cd39577..0000000 Binary files a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/CommonCreateEntity.class and /dev/null differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/MapInkx50kEntity.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/MapInkx50kEntity.class index b910f80..75cc76b 100644 Binary files a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/MapInkx50kEntity.class and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/MapInkx50kEntity.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/MapInkx5kEntity.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/MapInkx5kEntity.class index 487388e..98b5812 100644 Binary files a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/MapInkx5kEntity.class and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/MapInkx5kEntity.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/PnuEntity.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/PnuEntity.class index 637fcac..dbe76a0 100644 Binary files a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/PnuEntity.class and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/PnuEntity.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QCommonCreateEntity.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QCommonCreateEntity.class deleted file mode 100644 index 5584dbe..0000000 Binary files a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QCommonCreateEntity.class and /dev/null differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QPnuEntity.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QPnuEntity.class index bab8207..04c84fc 100644 Binary files a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QPnuEntity.class and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QPnuEntity.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepository.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepository.class new file mode 100644 index 0000000..f7119d1 Binary files /dev/null and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepository.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepositoryCustom.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepositoryCustom.class new file mode 100644 index 0000000..b4a6030 Binary files /dev/null and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepositoryCustom.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepositoryImpl.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepositoryImpl.class new file mode 100644 index 0000000..e4f57f1 Binary files /dev/null and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepositoryImpl.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepository.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepository.class index d9fc7cd..9b5c195 100644 Binary files a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepository.class and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepository.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryCustom.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryCustom.class index 927b337..2b52411 100644 Binary files a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryCustom.class and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryCustom.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryImpl.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryImpl.class index 0a3ec43..1e837d7 100644 Binary files a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryImpl.class and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryImpl.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto$AddMapReq.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto$AddMapReq.class new file mode 100644 index 0000000..f29388c Binary files /dev/null and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto$AddMapReq.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto$Basic.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto$Basic.class new file mode 100644 index 0000000..7c5c3fd Binary files /dev/null and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto$Basic.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto$MapList.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto$MapList.class new file mode 100644 index 0000000..afee85a Binary files /dev/null and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto$MapList.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto$MapListEntity$MapListEntityBuilder.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto$MapListEntity$MapListEntityBuilder.class new file mode 100644 index 0000000..55035ee Binary files /dev/null and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto$MapListEntity$MapListEntityBuilder.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto$MapListEntity.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto$MapListEntity.class new file mode 100644 index 0000000..09c41b8 Binary files /dev/null and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto$MapListEntity.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto$Search5kReq.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto$Search5kReq.class new file mode 100644 index 0000000..a7f4847 Binary files /dev/null and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto$Search5kReq.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto$UseInferReq.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto$UseInferReq.class new file mode 100644 index 0000000..6a9be6d Binary files /dev/null and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto$UseInferReq.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto$searchReq.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto$searchReq.class new file mode 100644 index 0000000..911727c Binary files /dev/null and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto$searchReq.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto.class new file mode 100644 index 0000000..d876673 Binary files /dev/null and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiStbltJobService.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiStbltJobService.class deleted file mode 100644 index 7d2a661..0000000 Binary files a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiStbltJobService.class and /dev/null differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/service/GukYuinApiService.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/service/GukYuinApiService.class new file mode 100644 index 0000000..d2e40f7 Binary files /dev/null and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/service/GukYuinApiService.class differ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/service/GukYuinApiStbltJobService.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/service/GukYuinApiStbltJobService.class new file mode 100644 index 0000000..8a8ce79 Binary files /dev/null and b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/service/GukYuinApiStbltJobService.class differ diff --git a/gukyuin/stblt-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QCommonCreateEntity.java b/gukyuin/stblt-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QCommonCreateEntity.java deleted file mode 100644 index d28dcf5..0000000 --- a/gukyuin/stblt-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QCommonCreateEntity.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.kamco.cd.kamcoback.postgres.entity; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; - - -/** - * QCommonCreateEntity is a Querydsl query type for CommonCreateEntity - */ -@Generated("com.querydsl.codegen.DefaultSupertypeSerializer") -public class QCommonCreateEntity extends EntityPathBase { - - private static final long serialVersionUID = 2072822841L; - - public static final QCommonCreateEntity commonCreateEntity = new QCommonCreateEntity("commonCreateEntity"); - - public final DateTimePath createdDate = createDateTime("createdDate", java.time.ZonedDateTime.class); - - public QCommonCreateEntity(String variable) { - super(CommonCreateEntity.class, forVariable(variable)); - } - - public QCommonCreateEntity(Path path) { - super(path.getType(), path.getMetadata()); - } - - public QCommonCreateEntity(PathMetadata metadata) { - super(CommonCreateEntity.class, metadata); - } - -} - diff --git a/gukyuin/stblt-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QPnuEntity.java b/gukyuin/stblt-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QPnuEntity.java index ed1b33c..06510ac 100644 --- a/gukyuin/stblt-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QPnuEntity.java +++ b/gukyuin/stblt-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QPnuEntity.java @@ -22,18 +22,86 @@ public class QPnuEntity extends EntityPathBase { public static final QPnuEntity pnuEntity = new QPnuEntity("pnuEntity"); - public final DateTimePath createdDttm = createDateTime("createdDttm", java.time.OffsetDateTime.class); + public final StringPath afClsCd = createString("afClsCd"); + + public final StringPath afClsProb = createString("afClsProb"); + + public final StringPath bfClsCd = createString("bfClsCd"); + + public final StringPath bfClsProb = createString("bfClsProb"); + + public final StringPath chgDt = createString("chgDt"); + + public final StringPath chgEpno = createString("chgEpno"); + + public final StringPath chgIp = createString("chgIp"); + + public final StringPath chgYn = createString("chgYn"); + + public final StringPath chnCd = createString("chnCd"); + + public final StringPath chnDtctContId = createString("chnDtctContId"); + + public final StringPath chnDtctId = createString("chnDtctId"); + + public final StringPath chnDtctMstId = createString("chnDtctMstId"); + + public final StringPath chnDtctObjtId = createString("chnDtctObjtId"); + + public final StringPath chnDtctProb = createString("chnDtctProb"); + + public final StringPath chnDtctSno = createString("chnDtctSno"); + + public final StringPath chnDtctSqms = createString("chnDtctSqms"); + + public final StringPath cprsYr = createString("cprsYr"); + + public final DateTimePath createdDttm = createDateTime("createdDttm", java.time.ZonedDateTime.class); public final NumberPath createdUid = createNumber("createdUid", Long.class); + public final StringPath crtDt = createString("crtDt"); + + public final StringPath crtEpno = createString("crtEpno"); + + public final StringPath crtIp = createString("crtIp"); + + public final StringPath crtrYr = createString("crtrYr"); + public final BooleanPath delYn = createBoolean("delYn"); public final QMapSheetAnalDataInferenceGeomEntity geo; public final NumberPath id = createNumber("id", Long.class); + public final StringPath incyCd = createString("incyCd"); + + public final StringPath incyRsnCont = createString("incyRsnCont"); + + public final StringPath lblYn = createString("lblYn"); + + public final StringPath lockYn = createString("lockYn"); + + public final StringPath lrmSyncYmd = createString("lrmSyncYmd"); + + public final StringPath mpqdNo = createString("mpqdNo"); + public final StringPath pnu = createString("pnu"); + public final StringPath pnuDtctId = createString("pnuDtctId"); + + public final StringPath pnuDtctSqms = createString("pnuDtctSqms"); + + public final StringPath pnuSqms = createString("pnuSqms"); + + public final StringPath pnuSyncYmd = createString("pnuSyncYmd"); + + public final StringPath rmk = createString("rmk"); + + public final StringPath rsatctNo = createString("rsatctNo"); + + public final StringPath stbltYn = createString("stbltYn"); + public QPnuEntity(String variable) { this(PnuEntity.class, forVariable(variable), INITS); } diff --git a/gukyuin/stblt-check/build/libs/stblt-check.jar b/gukyuin/stblt-check/build/libs/stblt-check.jar index 598c4f3..cc1f0ff 100644 Binary files a/gukyuin/stblt-check/build/libs/stblt-check.jar and b/gukyuin/stblt-check/build/libs/stblt-check.jar differ diff --git a/gukyuin/stblt-check/build/reports/problems/problems-report.html b/gukyuin/stblt-check/build/reports/problems/problems-report.html index 385c9a4..6aaee27 100644 --- a/gukyuin/stblt-check/build/reports/problems/problems-report.html +++ b/gukyuin/stblt-check/build/reports/problems/problems-report.html @@ -650,7 +650,7 @@ code + .copy-button { diff --git a/gukyuin/stblt-check/build/resources/main/application-dev.yml b/gukyuin/stblt-check/build/resources/main/application-dev.yml new file mode 100644 index 0000000..d7611e7 --- /dev/null +++ b/gukyuin/stblt-check/build/resources/main/application-dev.yml @@ -0,0 +1,136 @@ +spring: + config: + activate: + on-profile: dev + + jpa: + show-sql: false + hibernate: + ddl-auto: validate + properties: + hibernate: + default_batch_fetch_size: 100 # ✅ 성능 - N+1 쿼리 방지 + order_updates: true # ✅ 성능 - 업데이트 순서 정렬로 데드락 방지 + order_inserts: true + use_sql_comments: true # ⚠️ 선택 - SQL에 주석 추가 (디버깅용) + format_sql: true # ⚠️ 선택 - SQL 포맷팅 (가독성) + jdbc: + batch_size: 1000 # ✅ 추가 (JDBC batch) + open-in-view: false + mvc: + async: + request-timeout: 300s # 5분 (예: 30s, 120s, 10m 등도 가능) + + datasource: + url: jdbc:postgresql://192.168.2.127:15432/kamco_cds + #url: jdbc:postgresql://localhost:15432/kamco_cds + username: kamco_cds + password: kamco_cds_Q!W@E#R$ + hikari: + minimum-idle: 10 + maximum-pool-size: 20 + connection-timeout: 60000 # 60초 연결 타임아웃 + idle-timeout: 300000 # 5분 유휴 타임아웃 + max-lifetime: 1800000 # 30분 최대 수명 + leak-detection-threshold: 60000 # 연결 누수 감지 + + transaction: + default-timeout: 300 # 5분 트랜잭션 타임아웃 + + data: + redis: + host: 192.168.2.109 + port: 6379 + password: kamco + + servlet: + multipart: + enabled: true + max-file-size: 4GB + max-request-size: 4GB + file-size-threshold: 10MB + +server: + tomcat: + max-swallow-size: 4GB + max-http-form-post-size: 4GB + +jwt: + secret: "kamco_token_9b71e778-19a3-4c1d-97bf-2d687de17d5b" + access-token-validity-in-ms: 86400000 # 1일 + refresh-token-validity-in-ms: 604800000 # 7일 + #access-token-validity-in-ms: 60000 # 1분 + #refresh-token-validity-in-ms: 300000 # 5분 + +token: + refresh-cookie-name: kamco-dev # 개발용 쿠키 이름 + refresh-cookie-secure: false # 로컬 http 테스트면 false + +springdoc: + swagger-ui: + persist-authorization: true # 스웨거 새로고침해도 토큰 유지, 로컬스토리지에 저장 + +logging: + level: + root: INFO + org.springframework.web: DEBUG + org.springframework.security: DEBUG + + # 헬스체크 노이즈 핵심만 다운 + org.springframework.security.web.FilterChainProxy: INFO + org.springframework.security.web.authentication.AnonymousAuthenticationFilter: INFO + org.springframework.security.web.authentication.Http403ForbiddenEntryPoint: INFO + org.springframework.web.servlet.DispatcherServlet: INFO + + +mapsheet: + upload: + skipGdalValidation: true + shp: + baseurl: /app/tmp/detect/result #현재사용안함 + + + +file: + #sync-root-dir: D:/kamco-nfs/images/ + sync-root-dir: /kamco-nfs/images/ + sync-tmp-dir: /kamco-nfs/requests/temp # image upload temp dir + #sync-tmp-dir: ${file.sync-root-dir}/tmp + sync-file-extention: tfw,tif + sync-auto-exception-start-year: 2024 + sync-auto-exception-before-year-cnt: 3 + + #dataset-dir: D:/kamco-nfs/model_output/ + dataset-dir: /kamco-nfs/model_output/export/ # 마운트경로 AI 추론결과 + dataset-tmp-dir: ${file.dataset-dir}tmp/ + + #model-dir: D:/kamco-nfs/ckpt/model/ + model-dir: /kamco-nfs/ckpt/model/ # 학습서버에서 트레이닝한 모델업로드경로 + model-tmp-dir: ${file.model-dir}tmp/ + model-file-extention: pth,json,py + + pt-path: /kamco-nfs/ckpt/model/v6-cls-checkpoints/ + pt-FileName: yolov8_6th-6m.pt + + dataset-response: /kamco-nfs/dataset/response/ + +inference: + url: http://192.168.2.183:8000/jobs + batch-url: http://192.168.2.183:8000/batches + geojson-dir: /kamco-nfs/requests/ # 추론실행을 위한 파일생성경로 + jar-path: /kamco-nfs/repo/jar/shp-exporter.jar + inference-server-name: server1,server2,server3,server4 + +gukyuin: + #url: http://localhost:8080 + url: http://192.168.2.129:5301 + cdi: ${gukyuin.url}/api/kcd/cdi + +training-data: + geojson-dir: /kamco-nfs/dataset/request/ + +layer: + geoserver-url: https://kamco.geo-dev.gs.dabeeo.com + wms-path: geoserver/cd + wmts-path: geoserver/cd/gwc/service + workspace: cd diff --git a/gukyuin/stblt-check/build/resources/main/application-local.yml b/gukyuin/stblt-check/build/resources/main/application-local.yml new file mode 100644 index 0000000..cb09429 --- /dev/null +++ b/gukyuin/stblt-check/build/resources/main/application-local.yml @@ -0,0 +1,114 @@ +spring: + config: + activate: + on-profile: local + + jpa: + show-sql: false + hibernate: + ddl-auto: validate # 로컬만 완화(시킬려면 update으로 변경) + properties: + hibernate: + default_batch_fetch_size: 100 # ✅ 성능 - N+1 쿼리 방지 + order_updates: true # ✅ 성능 - 업데이트 순서 정렬로 데드락 방지 + use_sql_comments: true # ⚠️ 선택 - SQL에 주석 추가 (디버깅용) + format_sql: true # ⚠️ 선택 - SQL 포맷팅 (가독성) + + datasource: + url: jdbc:postgresql://192.168.2.127:15432/kamco_cds + # url: jdbc:postgresql://localhost:5432/local_0128 + username: kamco_cds + password: kamco_cds_Q!W@E#R$ + # username: postgres + # password: 1234 + hikari: + minimum-idle: 1 + maximum-pool-size: 5 + + data: + redis: + host: 192.168.2.109 + port: 6379 + password: kamco + + servlet: + multipart: + enabled: true + max-file-size: 4GB + max-request-size: 4GB + file-size-threshold: 10MB + +server: + tomcat: + max-swallow-size: 4GB + max-http-form-post-size: 4GB + +jwt: + secret: "kamco_token_9b71e778-19a3-4c1d-97bf-2d687de17d5b" + access-token-validity-in-ms: 86400000 # 1일 + refresh-token-validity-in-ms: 604800000 # 7일 + +token: + refresh-cookie-name: kamco-local # 개발용 쿠키 이름 + refresh-cookie-secure: false # 로컬 http 테스트면 false + +springdoc: + swagger-ui: + persist-authorization: true # 스웨거 새로고침해도 토큰 유지, 로컬스토리지에 저장 + +logging: + level: + org.hibernate.SQL: debug + org.hibernate.orm.jdbc.bind: trace + +mapsheet: + upload: + skipGdalValidation: true + shp: + baseurl: /Users/bokmin/detect/result + + + +file: + sync-root-dir: C:/Users/gypark/kamco-nfs/images/ + #sync-root-dir: /kamco-nfs/images/ + sync-tmp-dir: ${file.sync-root-dir}/tmp/ + sync-file-extention: tfw,tif + sync-auto-exception-start-year: 2025 + sync-auto-exception-before-year-cnt: 3 + + dataset-dir: C:/Users/gypark/kamco-nfs/dataset/ + #dataset-dir: /kamco-nfs/dataset/export/ + dataset-tmp-dir: ${file.dataset-dir}tmp/ + + model-dir: C:/Users/gypark/kamco-nfs/ckpt/model/ + #model-dir: /kamco-nfs/ckpt/model/ + model-tmp-dir: ${file.model-dir}tmp/ + model-file-extention: pth,json,py + + pt-path: /kamco-nfs/ckpt/classification/ + pt-FileName: v5-best.pt + + dataset-response: /kamco-nfs/dataset/response/ + +inference: + url: http://10.100.0.11:8000/jobs + batch-url: http://10.100.0.11:8000/batches + geojson-dir: /kamco-nfs/requests/ + jar-path: jar/makeshp-1.0.0.jar + inference-server-name: server1,server2,server3,server4 + +gukyuin: + #url: http://localhost:8080 + url: http://192.168.2.129:5301 + cdi: ${gukyuin.url}/api/kcd/cdi + +training-data: + geojson-dir: /kamco-nfs/model_output/labeling/ + +layer: + geoserver-url: https://kamco.geo-dev.gs.dabeeo.com + wms-path: geoserver/cd + wmts-path: geoserver/cd/gwc/service + workspace: cd + diff --git a/gukyuin/stblt-check/build/resources/main/application-prod.yml b/gukyuin/stblt-check/build/resources/main/application-prod.yml new file mode 100644 index 0000000..471febd --- /dev/null +++ b/gukyuin/stblt-check/build/resources/main/application-prod.yml @@ -0,0 +1,122 @@ +spring: + config: + activate: + on-profile: prod + + jpa: + show-sql: true + hibernate: + ddl-auto: validate + properties: + hibernate: + default_batch_fetch_size: 100 # ✅ 성능 - N+1 쿼리 방지 + order_updates: true # ✅ 성능 - 업데이트 순서 정렬로 데드락 방지 + order_inserts: true + use_sql_comments: true # ⚠️ 선택 - SQL에 주석 추가 (디버깅용) + format_sql: true # ⚠️ 선택 - SQL 포맷팅 (가독성) + jdbc: + batch_size: 1000 # ✅ 추가 (JDBC batch) + open-in-view: false + mvc: + async: + request-timeout: 300s # 5분 (예: 30s, 120s, 10m 등도 가능) + + datasource: + url: jdbc:postgresql://kamco-cd-postgis:5432/kamco_cds + #url: jdbc:postgresql://localhost:15432/kamco_cds + username: kamco_cds + password: kamco_cds_Q!W@E#R$ + hikari: + minimum-idle: 10 + maximum-pool-size: 20 + connection-timeout: 60000 # 60초 연결 타임아웃 + idle-timeout: 300000 # 5분 유휴 타임아웃 + max-lifetime: 1800000 # 30분 최대 수명 + leak-detection-threshold: 60000 # 연결 누수 감지 + + transaction: + default-timeout: 300 # 5분 트랜잭션 타임아웃 + + data: + redis: + host: 127.0.0.1 + port: 16379 + password: kamco + + servlet: + multipart: + enabled: true + max-file-size: 4GB + max-request-size: 4GB + file-size-threshold: 10MB + +server: + tomcat: + max-swallow-size: 4GB + max-http-form-post-size: 4GB + +jwt: + secret: "kamco_token_9b71e778-19a3-4c1d-97bf-2d687de17d5b" + access-token-validity-in-ms: 86400000 # 1일 + refresh-token-validity-in-ms: 604800000 # 7일 + +token: + refresh-cookie-name: kamco # 개발용 쿠키 이름 + refresh-cookie-secure: true # 로컬 http 테스트면 false + +logging: + level: + root: INFO + org.springframework.web: DEBUG + org.springframework.security: DEBUG + + # 헬스체크 노이즈 핵심만 다운 + org.springframework.security.web.FilterChainProxy: INFO + org.springframework.security.web.authentication.AnonymousAuthenticationFilter: INFO + org.springframework.security.web.authentication.Http403ForbiddenEntryPoint: INFO + org.springframework.web.servlet.DispatcherServlet: INFO + + +mapsheet: + upload: + skipGdalValidation: true + shp: + baseurl: /app/detect/result #현재사용안함 + +file: + sync-root-dir: /kamco-nfs/images/ + sync-tmp-dir: /kamco-nfs/repo/tmp # image upload temp dir + sync-file-extention: tfw,tif + + #dataset-dir: D:/kamco-nfs/model_output/ #변경 model_output + dataset-dir: /kamco-nfs/model_output/export/ # 마운트경로 AI 추론결과 + dataset-tmp-dir: ${file.dataset-dir}tmp/ + + #model-dir: D:/kamco-nfs/ckpt/model/ + model-dir: /kamco-nfs/ckpt/model/ # 학습서버에서 트레이닝한 모델업로드경로 + model-tmp-dir: ${file.model-dir}tmp/ + model-file-extention: pth,json,py + + pt-path: /kamco-nfs/ckpt/v6-cls-checkpoints/ + pt-FileName: yolov8_6th-6m.pt + dataset-response: /kamco-nfs/dataset/response/ + +inference: + url: http://127.0.0.1:8000/jobs + batch-url: http://127.0.0.1:8000/batches + geojson-dir: /kamco-nfs/requests/ # 학습서버에서 트레이닝한 모델업로드경로 + jar-path: /kamco-nfs/repo/jar/shp-exporter.jar # 추론실행을 위한 파일생성경로 + inference-server-name: server1,server2,server3,server4 + +gukyuin: + url: http://127.0.0.1:5301 + cdi: ${gukyuin.url}/api/kcd/cdi + +training-data: + geojson-dir: /kamco-nfs/dataset/request/ + +layer: + geoserver-url: https://kamco.geo-dev.gs.dabeeo.com + wms-path: geoserver/cd + wmts-path: geoserver/cd/gwc/service + workspace: cd diff --git a/gukyuin/stblt-check/build/resources/main/application.yml b/gukyuin/stblt-check/build/resources/main/application.yml index 5d1aadc..ef65ab4 100644 --- a/gukyuin/stblt-check/build/resources/main/application.yml +++ b/gukyuin/stblt-check/build/resources/main/application.yml @@ -1,4 +1,8 @@ server: - port: 9080 - + port: 8080 +spring: + application: + name: kamco-gukyuin-stblt + profiles: + active: prod # 사용할 프로파일 지정 (ex. dev, prod, test) diff --git a/gukyuin/stblt-check/build/resources/main/application_dev.yml b/gukyuin/stblt-check/build/resources/main/application_dev.yml deleted file mode 100644 index 80d48c2..0000000 --- a/gukyuin/stblt-check/build/resources/main/application_dev.yml +++ /dev/null @@ -1,71 +0,0 @@ -server: - port: 9080 - -spring: - application: - name: label-to-review - profiles: - active: dev # 사용할 프로파일 지정 (ex. dev, prod, test) - - datasource: - url: jdbc:postgresql://192.168.2.127:15432/kamco_cds - #url: jdbc:postgresql://localhost:5432/kamco_cds - username: kamco_cds - password: kamco_cds_Q!W@E#R$ - hikari: - minimum-idle: 1 - maximum-pool-size: 5 - - jpa: - hibernate: - ddl-auto: update # 테이블이 없으면 생성, 있으면 업데이트 - properties: - hibernate: - jdbc: - batch_size: 50 - default_batch_fetch_size: 100 -logging: - level: - root: INFO - org.springframework.web: DEBUG - org.springframework.security: DEBUG - - # 헬스체크 노이즈 핵심만 다운 - org.springframework.security.web.FilterChainProxy: INFO - org.springframework.security.web.authentication.AnonymousAuthenticationFilter: INFO - org.springframework.security.web.authentication.Http403ForbiddenEntryPoint: INFO - org.springframework.web.servlet.DispatcherServlet: INFO -# actuator -management: - health: - readinessstate: - enabled: true - livenessstate: - enabled: true - endpoint: - health: - probes: - enabled: true - show-details: always - endpoints: - jmx: - exposure: - exclude: "*" - web: - base-path: /monitor - exposure: - include: - - "health" - -file: - #sync-root-dir: D:/kamco-nfs/images/ - sync-root-dir: /kamco-nfs/images/ - sync-tmp-dir: ${file.sync-root-dir}/tmp - sync-file-extention: tfw,tif - sync-auto-exception-start-year: 2025 - sync-auto-exception-before-year-cnt: 3 - -gukyuin: - #url: http://localhost:8080 - url: http://192.168.2.129:5301 - cdi: ${gukyuin.url}/api/kcd/cdi \ No newline at end of file diff --git a/gukyuin/stblt-check/build/resources/main/application_local.yml b/gukyuin/stblt-check/build/resources/main/application_local.yml deleted file mode 100644 index a5a4da3..0000000 --- a/gukyuin/stblt-check/build/resources/main/application_local.yml +++ /dev/null @@ -1,71 +0,0 @@ -server: - port: 9080 - -spring: - application: - name: imagery-make-dataset - profiles: - active: local # 사용할 프로파일 지정 (ex. dev, prod, test) - - datasource: - url: jdbc:postgresql://192.168.2.127:15432/kamco_cds - #url: jdbc:postgresql://localhost:5432/kamco_cds - username: kamco_cds - password: kamco_cds_Q!W@E#R$ - hikari: - minimum-idle: 1 - maximum-pool-size: 5 - - jpa: - hibernate: - ddl-auto: update # 테이블이 없으면 생성, 있으면 업데이트 - properties: - hibernate: - jdbc: - batch_size: 50 - default_batch_fetch_size: 100 -logging: - level: - root: INFO - org.springframework.web: DEBUG - org.springframework.security: DEBUG - - # 헬스체크 노이즈 핵심만 다운 - org.springframework.security.web.FilterChainProxy: INFO - org.springframework.security.web.authentication.AnonymousAuthenticationFilter: INFO - org.springframework.security.web.authentication.Http403ForbiddenEntryPoint: INFO - org.springframework.web.servlet.DispatcherServlet: INFO -# actuator -management: - health: - readinessstate: - enabled: true - livenessstate: - enabled: true - endpoint: - health: - probes: - enabled: true - show-details: always - endpoints: - jmx: - exposure: - exclude: "*" - web: - base-path: /monitor - exposure: - include: - - "health" - -file: - #sync-root-dir: D:/kamco-nfs/images/ - sync-root-dir: /kamco-nfs/images/ - sync-tmp-dir: ${file.sync-root-dir}/tmp - sync-file-extention: tfw,tif - sync-auto-exception-start-year: 2025 - sync-auto-exception-before-year-cnt: 3 - -gukyuin: - #url: http://localhost:8080 - url: http://192.168.2.129:5301 - cdi: ${gukyuin.url}/api/kcd/cdi \ No newline at end of file diff --git a/gukyuin/stblt-check/build/resources/main/application_prod.yml b/gukyuin/stblt-check/build/resources/main/application_prod.yml deleted file mode 100644 index ea3d329..0000000 --- a/gukyuin/stblt-check/build/resources/main/application_prod.yml +++ /dev/null @@ -1,71 +0,0 @@ -server: - port: 9080 - -spring: - application: - name: imagery-make-dataset - profiles: - active: prod # 사용할 프로파일 지정 (ex. dev, prod, test) - - datasource: - url: jdbc:postgresql://192.168.2.127:15432/kamco_cds - #url: jdbc:postgresql://localhost:5432/kamco_cds - username: kamco_cds - password: kamco_cds_Q!W@E#R$ - hikari: - minimum-idle: 1 - maximum-pool-size: 5 - - jpa: - hibernate: - ddl-auto: update # 테이블이 없으면 생성, 있으면 업데이트 - properties: - hibernate: - jdbc: - batch_size: 50 - default_batch_fetch_size: 100 -logging: - level: - root: INFO - org.springframework.web: DEBUG - org.springframework.security: DEBUG - - # 헬스체크 노이즈 핵심만 다운 - org.springframework.security.web.FilterChainProxy: INFO - org.springframework.security.web.authentication.AnonymousAuthenticationFilter: INFO - org.springframework.security.web.authentication.Http403ForbiddenEntryPoint: INFO - org.springframework.web.servlet.DispatcherServlet: INFO -# actuator -management: - health: - readinessstate: - enabled: true - livenessstate: - enabled: true - endpoint: - health: - probes: - enabled: true - show-details: always - endpoints: - jmx: - exposure: - exclude: "*" - web: - base-path: /monitor - exposure: - include: - - "health" - -file: - #sync-root-dir: D:/kamco-nfs/images/ - sync-root-dir: /kamco-nfs/images/ - sync-tmp-dir: ${file.sync-root-dir}/tmp - sync-file-extention: tfw,tif - sync-auto-exception-start-year: 2025 - sync-auto-exception-before-year-cnt: 3 - -gukyuin: - #url: http://localhost:8080 - url: http://192.168.2.129:5301 - cdi: ${gukyuin.url}/api/kcd/cdi \ No newline at end of file diff --git a/gukyuin/stblt-check/build/tmp/compileJava/previous-compilation-data.bin b/gukyuin/stblt-check/build/tmp/compileJava/previous-compilation-data.bin index f292179..e1e8868 100644 Binary files a/gukyuin/stblt-check/build/tmp/compileJava/previous-compilation-data.bin and b/gukyuin/stblt-check/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/common/enums/RoleType.java b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/common/enums/RoleType.java deleted file mode 100644 index 3321e90..0000000 --- a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/common/enums/RoleType.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.kamco.cd.kamcoback.common.enums; - -import com.kamco.cd.kamcoback.common.utils.enums.CodeExpose; -import com.kamco.cd.kamcoback.common.utils.enums.EnumType; -import lombok.AllArgsConstructor; -import lombok.Getter; - -@CodeExpose -@Getter -@AllArgsConstructor -public enum RoleType implements EnumType { - ADMIN("관리자"), - LABELER("라벨러"), - REVIEWER("검수자"); - - private final String desc; - - @Override - public String getId() { - return name(); - } - - @Override - public String getText() { - return desc; - } -} diff --git a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/common/enums/StatusType.java b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/common/enums/StatusType.java deleted file mode 100644 index 8559968..0000000 --- a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/common/enums/StatusType.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.kamco.cd.kamcoback.common.enums; - -import com.kamco.cd.kamcoback.common.utils.enums.CodeExpose; -import com.kamco.cd.kamcoback.common.utils.enums.EnumType; -import lombok.AllArgsConstructor; -import lombok.Getter; - -@CodeExpose -@Getter -@AllArgsConstructor -public enum StatusType implements EnumType { - ACTIVE("사용"), - INACTIVE("사용중지"), - PENDING("계정등록"); - - private final String desc; - - @Override - public String getId() { - return name(); - } - - @Override - public String getText() { - return desc; - } -} diff --git a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/config/RestTemplateConfig.java b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/config/RestTemplateConfig.java new file mode 100644 index 0000000..c1e1a87 --- /dev/null +++ b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/config/RestTemplateConfig.java @@ -0,0 +1,15 @@ +package com.kamco.cd.kamcoback.config; + +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.client.RestTemplate; + +@Configuration +public class RestTemplateConfig { + + @Bean + public RestTemplate restTemplate(RestTemplateBuilder builder) { + return builder.build(); + } +} diff --git a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/config/api/ApiResponseDto.java b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/config/api/ApiResponseDto.java new file mode 100644 index 0000000..c32c958 --- /dev/null +++ b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/config/api/ApiResponseDto.java @@ -0,0 +1,223 @@ +package com.kamco.cd.kamcoback.config.api; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.kamco.cd.kamcoback.common.utils.enums.EnumType; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.ToString; +import org.springframework.http.HttpStatus; + +@Getter +@ToString +public class ApiResponseDto { + + private T data; + + @JsonInclude(JsonInclude.Include.NON_NULL) + private Error error; + + @JsonInclude(JsonInclude.Include.NON_NULL) + private T errorData; + + @JsonIgnore private HttpStatus httpStatus; + + @JsonIgnore private Long errorLogUid; + + public ApiResponseDto(T data) { + this.data = data; + } + + private ApiResponseDto(T data, HttpStatus httpStatus) { + this.data = data; + this.httpStatus = httpStatus; + } + + public ApiResponseDto(ApiResponseCode code) { + this.error = new Error(code.getId(), code.getMessage()); + } + + public ApiResponseDto(ApiResponseCode code, String message) { + this.error = new Error(code.getId(), message); + } + + public ApiResponseDto(ApiResponseCode code, String message, HttpStatus httpStatus) { + this.error = new Error(code.getId(), message); + this.httpStatus = httpStatus; + } + + public ApiResponseDto( + ApiResponseCode code, String message, HttpStatus httpStatus, Long errorLogUid) { + this.error = new Error(code.getId(), message); + this.httpStatus = httpStatus; + this.errorLogUid = errorLogUid; + } + + public ApiResponseDto(ApiResponseCode code, String message, T errorData) { + this.error = new Error(code.getId(), message); + this.errorData = errorData; + } + + // HTTP 상태 코드가 내장된 ApiResponseDto 반환 메서드들 + public static ApiResponseDto createOK(T data) { + return new ApiResponseDto<>(data, HttpStatus.CREATED); + } + + public static ApiResponseDto ok(T data) { + return new ApiResponseDto<>(data, HttpStatus.OK); + } + + public static ApiResponseDto okObject(ResponseObj data) { + if (data.getCode().equals(ApiResponseCode.OK)) { + return new ApiResponseDto<>(data, HttpStatus.NO_CONTENT); + } else { + return new ApiResponseDto<>(data.getCode(), data.getMessage(), HttpStatus.CONFLICT); + } + } + + public static ApiResponseDto deleteOk(T data) { + return new ApiResponseDto<>(data, HttpStatus.NO_CONTENT); + } + + public static ApiResponseDto createException(ApiResponseCode code) { + return new ApiResponseDto<>(code); + } + + public static ApiResponseDto createException(ApiResponseCode code, String message) { + return new ApiResponseDto<>(code, message); + } + + public static ApiResponseDto createException( + ApiResponseCode code, String message, HttpStatus httpStatus) { + return new ApiResponseDto<>(code, message, httpStatus); + } + + public static ApiResponseDto createException( + ApiResponseCode code, String message, HttpStatus httpStatus, Long errorLogUid) { + return new ApiResponseDto<>(code, message, httpStatus, errorLogUid); + } + + public static ApiResponseDto createException( + ApiResponseCode code, String message, T data) { + return new ApiResponseDto<>(code, message, data); + } + + @Getter + public static class Error { + + private final String code; + private final String message; + + public Error(String code, String message) { + this.code = code; + this.message = message; + } + } + + /** Error가 아닌 Business상 성공이거나 실패인 경우, 메세지 함께 전달하기 위한 object */ + @Getter + public static class ResponseObj { + + private final ApiResponseCode code; + private final String message; + + public ResponseObj(ApiResponseCode code, String message) { + this.code = code; + this.message = message; + } + } + + @Getter + @RequiredArgsConstructor + public enum ApiResponseCode implements EnumType { + + // @formatter:off + OK("요청이 성공하였습니다."), + BAD_REQUEST("요청 파라미터가 잘못되었습니다."), + BAD_GATEWAY("네트워크 상태가 불안정합니다."), + ALREADY_EXIST_MALL("이미 등록된 쇼핑센터입니다."), + NOT_FOUND_MAP("지도를 찾을 수 없습니다."), + UNAUTHORIZED("권한이 없습니다."), + CONFLICT("이미 등록된 컨텐츠입니다."), + NOT_FOUND("Resource를 찾을 수 없습니다."), + NOT_FOUND_DATA("데이터를 찾을 수 없습니다."), + NOT_FOUND_WEATHER_DATA("날씨 데이터를 찾을 수 없습니다."), + FAIL_SEND_MESSAGE("메시지를 전송하지 못했습니다."), + TOO_MANY_CONNECTED_MACHINES("연결된 기기가 너무 많습니다."), + UNAUTHENTICATED("인증에 실패하였습니다."), + INVALID_TOKEN("잘못된 토큰입니다."), + EXPIRED_TOKEN("만료된 토큰입니다."), + INTERNAL_SERVER_ERROR("서버에 문제가 발생 하였습니다."), + FORBIDDEN("권한을 확인해주세요."), + INVALID_PASSWORD("잘못된 비밀번호 입니다."), + NOT_FOUND_CAR_IN("입차정보가 없습니다."), + WRONG_STATUS("잘못된 상태입니다."), + FAIL_VERIFICATION("인증에 실패하였습니다."), + INVALID_EMAIL("잘못된 형식의 이메일입니다."), + REQUIRED_EMAIL("이메일은 필수 항목입니다."), + WRONG_PASSWORD("잘못된 패스워드입니다."), + DUPLICATE_EMAIL("이미 가입된 이메일입니다."), + DUPLICATE_DATA("이미 등록되어 있습니다."), + DATA_INTEGRITY_ERROR("데이터 무결성이 위반되어 요청을 처리할수 없습니다."), + FOREIGN_KEY_ERROR("참조 중인 데이터가 있어 삭제할 수 없습니다."), + DUPLICATE_EMPLOYEEID("이미 가입된 사번입니다."), + NOT_FOUND_USER_FOR_EMAIL("이메일로 유저를 찾을 수 없습니다."), + NOT_FOUND_USER("사용자를 찾을 수 없습니다."), + UNPROCESSABLE_ENTITY("이 데이터는 삭제할 수 없습니다."), + LOGIN_ID_NOT_FOUND("아이디를 잘못 입력하셨습니다."), + LOGIN_PASSWORD_MISMATCH("비밀번호를 잘못 입력하셨습니다."), + LOGIN_PASSWORD_EXCEEDED("비밀번호 오류 횟수를 초과하여 이용하실 수 없습니다.\n로그인 오류에 대해 관리자에게 문의하시기 바랍니다."), + INACTIVE_ID("사용할 수 없는 계정입니다."), + INVALID_EMAIL_TOKEN( + "You can only reset your password within 24 hours from when the email was sent.\n" + + "To reset your password again, please submit a new request through \"Forgot" + + " Password.\""), + PAYLOAD_TOO_LARGE("업로드 용량 제한을 초과했습니다."), + NOT_FOUND_TARGET_YEAR("기준년도 도엽을 찾을 수 없습니다."), + NOT_FOUND_COMPARE_YEAR("비교년도 도엽을 찾을 수 없습니다."), + FAIL_SAVE_MAP_SHEET("도엽 저장 중 오류가 발생했습니다."), + FAIL_CREATE_MAP_SHEET_FILE("도엽 설정파일 생성 중 오류가 발생했습니다."), + ; + // @formatter:on + private final String message; + + @Override + public String getId() { + return name(); + } + + @Override + public String getText() { + return message; + } + + public static ApiResponseCode getCode(String name) { + return ApiResponseCode.valueOf(name.toUpperCase()); + } + + public static String getMessage(String name) { + return ApiResponseCode.valueOf(name.toUpperCase()).getText(); + } + + public static ApiResponseCode from(String codeName, HttpStatus status) { + + if (codeName != null && !codeName.isBlank()) { + try { + return ApiResponseCode.valueOf(codeName.toUpperCase()); + } catch (IllegalArgumentException ignore) { + // fallback + } + } + + if (status != null) { + try { + return ApiResponseCode.valueOf(status.name()); + } catch (IllegalArgumentException ignore) { + // fallback + } + } + + return INTERNAL_SERVER_ERROR; + } + } +} diff --git a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/enums/ImageryFitStatus.java b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/enums/ImageryFitStatus.java new file mode 100644 index 0000000..5d878b9 --- /dev/null +++ b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/enums/ImageryFitStatus.java @@ -0,0 +1,43 @@ +package com.kamco.cd.kamcoback.enums; + +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; +import lombok.Getter; + +@CodeExpose +@Getter +@AllArgsConstructor +public enum ImageryFitStatus implements EnumType { + FIT("적합"), + UNFIT("부적합"); + + private final String desc; + + @Override + public String getId() { + return name(); + } + + @Override + public String getText() { + return desc; + } + + public static ImageryFitStatus fromCode(String code) { + if (code == null) { + return null; + } + String c = code.trim(); + return Arrays.stream(values()) + .filter(v -> v.name().equalsIgnoreCase(c)) + .findFirst() + .orElse(null); + } + + public static String getDescByCode(String code) { + ImageryFitStatus status = fromCode(code); + return status != null ? status.getDesc() : null; + } +} diff --git a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectContDto.java b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectContDto.java index 57df805..1e11806 100644 --- a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectContDto.java +++ b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectContDto.java @@ -114,4 +114,38 @@ public class ChngDetectContDto { private List result; private Boolean success; } + + @Schema(name = "ResultLabelDto", description = "ResultLabelDto list 리턴 형태") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class ResultLabelDto { + + private Integer code; + private String message; + private DtoPnuDetectMpng result; + private Boolean success; + } + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class ReqInfo { + + private String reqIp; + private String reqEpno; + } + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class StbltResult { + + private String stbltYn; + private String incyCd; + private String incyCmnt; + } } diff --git a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectMastDto.java b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectMastDto.java index 644b77b..67ab78d 100644 --- a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectMastDto.java +++ b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectMastDto.java @@ -247,45 +247,58 @@ public class ChngDetectMastDto { @AllArgsConstructor public static class RlbDtctMastDto { - private String pnuDtctId; - private String pnu; - private String lrmSyncYmd; - private String pnuSyncYmd; - private String mpqdNo; // 도엽번호 + private String pnuDtctId; // PNU탐지ID + private String pnu; // PNU코드(19자리) + private String lrmSyncYmd; // 지적도동기화일자(YYYYMMDD) + private String pnuSyncYmd; // PNU동기화일자(YYYYMMDD) + private String mpqdNo; // 도곽번호 private String cprsYr; // 비교년도 private String crtrYr; // 기준년도 - private String chnDtctSno; // 회차 - private String chnDtctId; + private String chnDtctSno; // 회차, 변화탐지순번 + private String chnDtctId; // 변화탐지ID(UUID) - private String chnDtctMstId; - private String chnDtctObjtId; - private String chnDtctContId; - private String chnCd; - private String chnDtctProb; + private String chnDtctMstId; // 변화탐지마스터ID + private String chnDtctObjtId; // 변화탐지객체ID + private String chnDtctContId; // 변화탐지내용ID + private String chnCd; // 변화코드 + private String chnDtctProb; // 변화탐지정확도(0~1) private String bfClsCd; // 이전분류코드 - private String bfClsProb; // 이전분류정확도 + private String bfClsProb; // 이전분류정확도(0~1) private String afClsCd; // 이후분류코드 - private String afClsProb; // 이후분류정확도 + private String afClsProb; // 이후분류정확도(0~1) - private String pnuSqms; - private String pnuDtctSqms; - private String chnDtctSqms; - private String stbltYn; - private String incyCd; - private String incyRsnCont; - private String lockYn; - private String lblYn; - private String chgYn; - private String rsatctNo; - private String rmk; + private String pnuSqms; // PNU면적(㎡) + private String pnuDtctSqms; // PNU탐지면적(㎡) + private String chnDtctSqms; // 변화탐지면적(㎡) + private String stbltYn; // 적합여부(Y/N) - 안정성 (Y:부적합, N:적합) + private String incyCd; // 부적합코드 + private String incyRsnCont; // 부적합사유내용 + private String lockYn; // 잠금여부(Y/N) + private String lblYn; // 라벨여부(Y/N) + private String chgYn; // 변경여부(Y/N) + private String rsatctNo; // 부동산등기번호 + private String rmk; // 비고 private String crtDt; // 생성일시 private String crtEpno; // 생성사원번호 private String crtIp; // 생성사원아이피 - private String chgDt; - private String chgEpno; - private String chgIp; + private String chgDt; // 변경일시 + private String chgEpno; // 변경자사번 + private String chgIp; // 변경자IP private String delYn; // 삭제여부 } + + @Schema(name = "RemoveResDto", description = "remove 후 리턴 형태") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class RemoveResDto { + + private Integer code; + private String message; + private Boolean result; + private Boolean success; + } } diff --git a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinCoreService.java b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinCoreService.java new file mode 100644 index 0000000..ec0f0f6 --- /dev/null +++ b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinCoreService.java @@ -0,0 +1,67 @@ +package com.kamco.cd.kamcoback.postgres.core; + +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.Basic; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LabelSendDto; +import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.LearnInfo; +import com.kamco.cd.kamcoback.postgres.repository.gukyuin.GukYuinRepository; +import java.time.LocalDate; +import java.util.List; +import java.util.UUID; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class GukYuinCoreService { + + private final GukYuinRepository gukYuinRepository; + + public void updateGukYuinMastRegResult(Basic resultBody) { + gukYuinRepository.updateGukYuinMastRegResult(resultBody); + } + + public void updateGukYuinMastRegRemove(String chnDtctId) { + gukYuinRepository.updateGukYuinMastRegRemove(chnDtctId); + } + + public void updateInferenceGeomDataPnuCnt(String chnDtctObjtId, long pnuCnt) { + gukYuinRepository.updateInferenceGeomDataPnuCnt(chnDtctObjtId, pnuCnt); + } + + public Long findMapSheetAnalDataInferenceGeomUid(String chnDtctObjtId) { + return gukYuinRepository.findMapSheetAnalDataInferenceGeomUid(chnDtctObjtId); + } + + public void insertGeoUidPnuData(Long geoUid, String[] pnuList, String chnDtctObjtId) { + gukYuinRepository.insertGeoUidPnuData(geoUid, pnuList, chnDtctObjtId); + } + + public LearnInfo findMapSheetLearnInfo(UUID uuid) { + return gukYuinRepository.findMapSheetLearnInfo(uuid); + } + + public Integer findMapSheetLearnYearStage(Integer compareYyyy, Integer targetYyyy) { + return gukYuinRepository.findMapSheetLearnYearStage(compareYyyy, targetYyyy); + } + + public void updateAnalInferenceApplyDttm(Basic registRes) { + gukYuinRepository.updateAnalInferenceApplyDttm(registRes); + } + + public List findLabelingCompleteSendList(LocalDate yesterday) { + return gukYuinRepository.findLabelingCompleteSendList(yesterday); + } + + public Long findMapSheetLearnInfoByYyyy( + Integer compareYyyy, Integer targetYyyy, Integer maxStage) { + return gukYuinRepository.findMapSheetLearnInfoByYyyy(compareYyyy, targetYyyy, maxStage); + } + + public void updateMapSheetLearnGukyuinEndStatus(Long learnId) { + gukYuinRepository.updateMapSheetLearnGukyuinEndStatus(learnId); + } + + public void updateMapSheetInferenceLabelEndStatus(Long learnId) { + gukYuinRepository.updateMapSheetInferenceLabelEndStatus(learnId); + } +} diff --git a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinStbltJobCoreService.java b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinStbltJobCoreService.java index 9e273af..5ad8168 100644 --- a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinStbltJobCoreService.java +++ b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinStbltJobCoreService.java @@ -1,9 +1,14 @@ package com.kamco.cd.kamcoback.postgres.core; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectContDto.StbltResult; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LearnKeyDto; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.RlbDtctMastDto; +import com.kamco.cd.kamcoback.postgres.entity.PnuEntity; import com.kamco.cd.kamcoback.postgres.repository.gukyuin.GukYuinStbltJobRepository; +import java.time.ZonedDateTime; import java.util.List; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Service public class GukYuinStbltJobCoreService { @@ -18,7 +23,54 @@ public class GukYuinStbltJobCoreService { return gukYuinStbltRepository.findGukYuinEligibleForSurveyList(status); } - public void updateGukYuinEligibleForSurvey(String resultUid, String stbltYn, String lockYn) { - gukYuinStbltRepository.updateGukYuinEligibleForSurvey(resultUid, stbltYn, lockYn); + @Transactional + public void updateGukYuinEligibleForSurvey(String resultUid, RlbDtctMastDto stbltDto) { + PnuEntity entity = + gukYuinStbltRepository.findPnuEntityByResultUid(resultUid, stbltDto.getPnu()); + + if (entity != null) { + entity.setPnuDtctId(stbltDto.getPnuDtctId()); + entity.setPnu(stbltDto.getPnu()); + entity.setLrmSyncYmd(stbltDto.getLrmSyncYmd()); + entity.setPnuSyncYmd(stbltDto.getPnuSyncYmd()); + entity.setMpqdNo(stbltDto.getMpqdNo()); + entity.setCprsYr(stbltDto.getCprsYr()); + entity.setCrtrYr(stbltDto.getCrtrYr()); + entity.setChnDtctSno(stbltDto.getChnDtctSno()); + entity.setChnDtctId(stbltDto.getChnDtctId()); + entity.setChnDtctMstId(stbltDto.getChnDtctMstId()); + entity.setChnDtctObjtId(stbltDto.getChnDtctObjtId()); + entity.setChnDtctContId(stbltDto.getChnDtctContId()); + entity.setChnCd(stbltDto.getChnCd()); + entity.setBfClsCd(stbltDto.getBfClsCd()); + entity.setBfClsProb(stbltDto.getBfClsProb()); + entity.setAfClsCd(stbltDto.getAfClsCd()); + entity.setAfClsProb(stbltDto.getAfClsProb()); + entity.setPnuSqms(stbltDto.getPnuSqms()); + entity.setPnuDtctSqms(stbltDto.getPnuDtctSqms()); + entity.setChnDtctSqms(stbltDto.getChnDtctSqms()); + entity.setStbltYn(stbltDto.getStbltYn()); + entity.setIncyCd(stbltDto.getIncyCd()); + entity.setIncyRsnCont(stbltDto.getIncyRsnCont()); + entity.setLockYn(stbltDto.getLockYn()); + entity.setLblYn(stbltDto.getLblYn()); + entity.setChgYn(stbltDto.getChgYn()); + entity.setRsatctNo(stbltDto.getRsatctNo()); + entity.setRmk(stbltDto.getRmk()); + entity.setCrtDt(stbltDto.getCrtDt()); + entity.setCrtEpno(stbltDto.getCrtEpno()); + entity.setCrtIp(stbltDto.getCrtIp()); + entity.setChgDt(stbltDto.getChgDt()); + entity.setChgIp(stbltDto.getChgIp()); + entity.setDelYn(stbltDto.getDelYn().equals("Y")); + + entity.setCreatedDttm(ZonedDateTime.now()); + gukYuinStbltRepository.save(entity); + } + } + + @Transactional + public void updateGukYuinObjectStbltYn(String resultUid, StbltResult stbResult) { + gukYuinStbltRepository.updateGukYuinObjectStbltYn(resultUid, stbResult); } } diff --git a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/CommonCreateEntity.java b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/CommonCreateEntity.java deleted file mode 100644 index 94374fe..0000000 --- a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/CommonCreateEntity.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.kamco.cd.kamcoback.postgres.entity; - -import jakarta.persistence.Column; -import jakarta.persistence.MappedSuperclass; -import jakarta.persistence.PrePersist; -import java.time.ZonedDateTime; -import lombok.Getter; -import org.springframework.data.annotation.CreatedDate; - -@Getter -@MappedSuperclass -public class CommonCreateEntity { - - @CreatedDate - @Column(name = "created_dttm", updatable = false, nullable = false) - private ZonedDateTime createdDate; - - @PrePersist - protected void onPersist() { - this.createdDate = ZonedDateTime.now(); - } -} diff --git a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapInkx50kEntity.java b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapInkx50kEntity.java index c483e5c..39b2de4 100644 --- a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapInkx50kEntity.java +++ b/gukyuin/stblt-check/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.InferenceDetailDto.MapSheet; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; @@ -45,4 +46,8 @@ public class MapInkx50kEntity extends CommonDateEntity { this.mapidNo = mapidNo; this.geom = geom; } + + public MapSheet toEntity() { + return new MapSheet(mapidcdNo, mapidNm); + } } diff --git a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapInkx5kEntity.java b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapInkx5kEntity.java index 3246924..5efc3df 100644 --- a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapInkx5kEntity.java +++ b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapInkx5kEntity.java @@ -3,6 +3,7 @@ package com.kamco.cd.kamcoback.postgres.entity; import com.kamco.cd.kamcoback.enums.CommonUseStatus; import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto; import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.MapSheet; +import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto.MapListEntity; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; @@ -53,10 +54,6 @@ public class MapInkx5kEntity extends CommonDateEntity { @Enumerated(EnumType.STRING) private CommonUseStatus useInference; - public InferenceDetailDto.MapSheet toEntity() { - return new MapSheet(mapidcdNo, mapidNm); - } - // Constructor public MapInkx5kEntity( String mapidcdNo, String mapidNm, Geometry geom, MapInkx50kEntity mapInkx50k) { @@ -72,4 +69,18 @@ public class MapInkx5kEntity extends CommonDateEntity { public void updateUseInference(CommonUseStatus useInference) { this.useInference = useInference; } + + public InferenceDetailDto.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/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/PnuEntity.java b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/PnuEntity.java index 46daada..26f9c8e 100644 --- a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/PnuEntity.java +++ b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/PnuEntity.java @@ -12,7 +12,7 @@ import jakarta.persistence.SequenceGenerator; import jakarta.persistence.Table; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; -import java.time.OffsetDateTime; +import java.time.ZonedDateTime; import lombok.Getter; import lombok.Setter; import org.hibernate.annotations.ColumnDefault; @@ -39,7 +39,7 @@ public class PnuEntity { private String pnu; @Column(name = "created_dttm") - private OffsetDateTime createdDttm; + private ZonedDateTime createdDttm; @Column(name = "created_uid") private Long createdUid; @@ -47,4 +47,140 @@ public class PnuEntity { @ColumnDefault("false") @Column(name = "del_yn") private Boolean delYn; + + @Size(max = 40) + @Column(name = "pnu_dtct_id", length = 40) + private String pnuDtctId; + + @Size(max = 10) + @Column(name = "lrm_sync_ymd", length = 10) + private String lrmSyncYmd; + + @Size(max = 10) + @Column(name = "pnu_sync_ymd", length = 10) + private String pnuSyncYmd; + + @Size(max = 20) + @Column(name = "mpqd_no", length = 20) + private String mpqdNo; + + @Size(max = 10) + @Column(name = "cprs_yr", length = 10) + private String cprsYr; + + @Size(max = 10) + @Column(name = "crtr_yr", length = 10) + private String crtrYr; + + @Size(max = 255) + @Column(name = "chn_dtct_id") + private String chnDtctId; + + @Size(max = 10) + @Column(name = "chn_dtct_mst_id", length = 10) + private String chnDtctMstId; + + @Size(max = 255) + @Column(name = "chn_dtct_objt_id") + private String chnDtctObjtId; + + @Size(max = 255) + @Column(name = "chn_dtct_cont_id") + private String chnDtctContId; + + @Size(max = 50) + @Column(name = "chn_cd", length = 50) + private String chnCd; + + @Size(max = 50) + @Column(name = "chn_dtct_prob", length = 50) + private String chnDtctProb; + + @Size(max = 50) + @Column(name = "bf_cls_cd", length = 50) + private String bfClsCd; + + @Size(max = 50) + @Column(name = "bf_cls_prob", length = 50) + private String bfClsProb; + + @Size(max = 50) + @Column(name = "af_cls_cd", length = 50) + private String afClsCd; + + @Size(max = 50) + @Column(name = "af_cls_prob", length = 50) + private String afClsProb; + + @Size(max = 100) + @Column(name = "pnu_sqms", length = 100) + private String pnuSqms; + + @Size(max = 100) + @Column(name = "pnu_dtct_sqms", length = 100) + private String pnuDtctSqms; + + @Size(max = 100) + @Column(name = "chn_dtct_sqms", length = 100) + private String chnDtctSqms; + + @Size(max = 1) + @Column(name = "stblt_yn", length = 1) + private String stbltYn; + + @Size(max = 30) + @Column(name = "incy_cd", length = 30) + private String incyCd; + + @Size(max = 255) + @Column(name = "incy_rsn_cont") + private String incyRsnCont; + + @Size(max = 1) + @Column(name = "lock_yn", length = 1) + private String lockYn; + + @Size(max = 1) + @Column(name = "lbl_yn", length = 1) + private String lblYn; + + @Size(max = 1) + @Column(name = "chg_yn", length = 1) + private String chgYn; + + @Size(max = 50) + @Column(name = "rsatct_no", length = 50) + private String rsatctNo; + + @Size(max = 100) + @Column(name = "rmk", length = 100) + private String rmk; + + @Size(max = 20) + @Column(name = "crt_dt", length = 20) + private String crtDt; + + @Size(max = 20) + @Column(name = "crt_epno", length = 20) + private String crtEpno; + + @Size(max = 20) + @Column(name = "crt_ip", length = 20) + private String crtIp; + + @Size(max = 20) + @Column(name = "chg_dt", length = 20) + private String chgDt; + + @Size(max = 20) + @Column(name = "chg_epno", length = 20) + private String chgEpno; + + @Size(max = 20) + @Column(name = "chg_ip", length = 20) + private String chgIp; + + @Size(max = 10) + @Column(name = "chn_dtct_sno", length = 10) + private String chnDtctSno; } diff --git a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepository.java b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepository.java new file mode 100644 index 0000000..83a1e07 --- /dev/null +++ b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepository.java @@ -0,0 +1,7 @@ +package com.kamco.cd.kamcoback.postgres.repository.gukyuin; + +import com.kamco.cd.kamcoback.postgres.entity.MapSheetLearnEntity; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface GukYuinRepository + extends JpaRepository, GukYuinRepositoryCustom {} diff --git a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepositoryCustom.java b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepositoryCustom.java new file mode 100644 index 0000000..84d92ff --- /dev/null +++ b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepositoryCustom.java @@ -0,0 +1,48 @@ +package com.kamco.cd.kamcoback.postgres.repository.gukyuin; + +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.Basic; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LabelSendDto; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LearnKeyDto; +import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.GeomUidDto; +import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.LearnInfo; +import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus; +import java.time.LocalDate; +import java.util.List; +import java.util.UUID; + +public interface GukYuinRepositoryCustom { + + void updateGukYuinMastRegResult(Basic resultBody); + + void updateGukYuinMastRegRemove(String chnDtctId); + + void updateInferenceGeomDataPnuCnt(String chnDtctObjtId, long pnuCnt); + + Long findMapSheetAnalDataInferenceGeomUid(String chnDtctObjtId); + + void insertGeoUidPnuData(Long geoUid, String[] pnuList, String chnDtctObjtId); + + void updateGukYuinApplyStateComplete(Long id, GukYuinStatus status); + + List findGukyuinApplyStatusUidList(List gukYuinStatus); + + long upsertMapSheetDataAnalGeomPnu(String uid, String[] pnuList); + + LearnInfo findMapSheetLearnInfo(UUID uuid); + + Integer findMapSheetLearnYearStage(Integer compareYyyy, Integer targetYyyy); + + void updateAnalInferenceApplyDttm(Basic registRes); + + List findYesterdayLabelingCompleteList(); + + void updateAnalDataInferenceGeomSendDttm(Long geoUid); + + List findLabelingCompleteSendList(LocalDate yesterday); + + Long findMapSheetLearnInfoByYyyy(Integer compareYyyy, Integer targetYyyy, Integer maxStage); + + void updateMapSheetLearnGukyuinEndStatus(Long learnId); + + void updateMapSheetInferenceLabelEndStatus(Long learnId); +} diff --git a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepositoryImpl.java b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepositoryImpl.java new file mode 100644 index 0000000..d274d85 --- /dev/null +++ b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepositoryImpl.java @@ -0,0 +1,331 @@ +package com.kamco.cd.kamcoback.postgres.repository.gukyuin; + +import static com.kamco.cd.kamcoback.postgres.entity.QLabelingAssignmentEntity.labelingAssignmentEntity; +import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataInferenceGeomEntity.mapSheetAnalDataInferenceGeomEntity; +import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalInferenceEntity.mapSheetAnalInferenceEntity; +import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetLearnEntity.mapSheetLearnEntity; +import static com.kamco.cd.kamcoback.postgres.entity.QPnuEntity.pnuEntity; + +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.Basic; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LabelSendDto; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LearnKeyDto; +import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.GeomUidDto; +import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.LearnInfo; +import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus; +import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.InspectState; +import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelMngState; +import com.kamco.cd.kamcoback.postgres.entity.PnuEntity; +import com.querydsl.core.types.Projections; +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberExpression; +import com.querydsl.jpa.impl.JPAQueryFactory; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.transaction.Transactional; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.util.List; +import java.util.UUID; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +@Repository +@RequiredArgsConstructor +public class GukYuinRepositoryImpl implements GukYuinRepositoryCustom { + + private final JPAQueryFactory queryFactory; + @PersistenceContext private EntityManager em; + + @Override + public void updateGukYuinMastRegResult(Basic resultBody) { + + int excnPgrt = Integer.parseInt(resultBody.getExcnPgrt()); + int stage = Integer.parseInt(resultBody.getChnDtctSno()); + GukYuinStatus status = GukYuinStatus.IN_PROGRESS; + if (excnPgrt == 100) { + status = GukYuinStatus.GUK_COMPLETED; + } + + queryFactory + .update(mapSheetLearnEntity) + .set(mapSheetLearnEntity.stage, stage) + .set(mapSheetLearnEntity.applyStatus, status.getId()) + .set(mapSheetLearnEntity.applyStatusDttm, ZonedDateTime.now()) + .set(mapSheetLearnEntity.chnDtctMstId, resultBody.getChnDtctMstId()) + .set(mapSheetLearnEntity.applyYn, true) + .set(mapSheetLearnEntity.applyDttm, ZonedDateTime.now()) + .where(mapSheetLearnEntity.uid.eq(resultBody.getChnDtctId())) + .execute(); + } + + @Override + public void updateGukYuinMastRegRemove(String chnDtctId) { + queryFactory + .update(mapSheetLearnEntity) + .set(mapSheetLearnEntity.applyStatus, GukYuinStatus.CANCELED.getId()) + .set(mapSheetLearnEntity.applyStatusDttm, ZonedDateTime.now()) + .set(mapSheetLearnEntity.applyYn, false) + .where(mapSheetLearnEntity.uid.eq(chnDtctId)) + .execute(); + } + + @Override + public void updateInferenceGeomDataPnuCnt(String chnDtctObjtId, long pnuCnt) { + queryFactory + .update(mapSheetAnalDataInferenceGeomEntity) + .set(mapSheetAnalDataInferenceGeomEntity.pnu, pnuCnt) + .where(mapSheetAnalDataInferenceGeomEntity.resultUid.eq(chnDtctObjtId)) + .execute(); + } + + @Override + public Long findMapSheetAnalDataInferenceGeomUid(String chnDtctObjtId) { + return queryFactory + .select(mapSheetAnalDataInferenceGeomEntity.geoUid) + .from(mapSheetAnalDataInferenceGeomEntity) + .where(mapSheetAnalDataInferenceGeomEntity.resultUid.eq(chnDtctObjtId)) + .fetchOne(); + } + + @Override + public void insertGeoUidPnuData(Long geoUid, String[] pnuList, String chnDtctObjtId) { + for (String pnu : pnuList) { + PnuEntity entity = + queryFactory + .selectFrom(pnuEntity) + .where( + pnuEntity.geo.geoUid.eq(geoUid), + pnuEntity.pnu.eq(pnu), + pnuEntity.chnDtctObjtId.eq(chnDtctObjtId)) + .fetchOne(); + + if (entity == null) { + queryFactory + .insert(pnuEntity) + .columns( + pnuEntity.geo.geoUid, pnuEntity.pnu, pnuEntity.createdDttm, pnuEntity.chnDtctObjtId) + .values(geoUid, pnu, ZonedDateTime.now(), chnDtctObjtId) + .execute(); + } + } + } + + @Override + public List findGukyuinApplyStatusUidList(List status) { + return queryFactory + .select( + Projections.constructor( + LearnKeyDto.class, + mapSheetLearnEntity.id, + mapSheetLearnEntity.uid, + mapSheetLearnEntity.chnDtctMstId)) + .from(mapSheetLearnEntity) + .where(mapSheetLearnEntity.applyStatus.in(status)) + .fetch(); + } + + @Override + public long upsertMapSheetDataAnalGeomPnu(String chnDtctObjtId, String[] pnuList) { + long length = pnuList.length; + queryFactory + .update(mapSheetAnalDataInferenceGeomEntity) + .set(mapSheetAnalDataInferenceGeomEntity.pnu, length) + .where(mapSheetAnalDataInferenceGeomEntity.resultUid.eq(chnDtctObjtId)) + .execute(); + + Long geoUid = + queryFactory + .select(mapSheetAnalDataInferenceGeomEntity.geoUid) + .from(mapSheetAnalDataInferenceGeomEntity) + .where(mapSheetAnalDataInferenceGeomEntity.resultUid.eq(chnDtctObjtId)) + .fetchOne(); + + long succCnt = 0; + for (String pnu : pnuList) { + long result = + queryFactory + .insert(pnuEntity) + .columns(pnuEntity.geo.geoUid, pnuEntity.pnu, pnuEntity.createdDttm) + .values(geoUid, pnu, ZonedDateTime.now()) + .execute(); + if (result > 0) { + succCnt++; + } + } + return succCnt; + } + + @Override + public LearnInfo findMapSheetLearnInfo(UUID uuid) { + return queryFactory + .select( + Projections.constructor( + LearnInfo.class, + mapSheetLearnEntity.id, + mapSheetLearnEntity.uuid, + mapSheetLearnEntity.compareYyyy, + mapSheetLearnEntity.targetYyyy, + mapSheetLearnEntity.stage, + mapSheetLearnEntity.uid, + mapSheetLearnEntity.applyStatus, + mapSheetLearnEntity.applyYn)) + .from(mapSheetLearnEntity) + .where(mapSheetLearnEntity.uuid.eq(uuid)) + .fetchOne(); + } + + @Override + public Integer findMapSheetLearnYearStage(Integer compareYyyy, Integer targetYyyy) { + NumberExpression stageExpr = + Expressions.numberTemplate(Integer.class, "coalesce({0}, 0)", mapSheetLearnEntity.stage); + + return queryFactory + .select(stageExpr.max().coalesce(0)) + .from(mapSheetLearnEntity) + .where( + mapSheetLearnEntity.compareYyyy.eq(compareYyyy), + mapSheetLearnEntity.targetYyyy.eq(targetYyyy), + mapSheetLearnEntity.applyStatus.isNotNull(), + mapSheetLearnEntity.applyStatus.ne(GukYuinStatus.PENDING.getId())) + .fetchOne(); + } + + @Override + public void updateAnalInferenceApplyDttm(Basic registRes) { + Long learnId = + queryFactory + .select(mapSheetLearnEntity.id) + .from(mapSheetLearnEntity) + .where(mapSheetLearnEntity.uid.eq(registRes.getChnDtctId())) + .fetchOne(); + + queryFactory + .update(mapSheetAnalInferenceEntity) + .set(mapSheetAnalInferenceEntity.gukyuinUsed, "Y") + .set(mapSheetAnalInferenceEntity.gukyuinApplyDttm, ZonedDateTime.now()) + .set(mapSheetAnalInferenceEntity.stage, Integer.parseInt(registRes.getChnDtctSno())) + .where(mapSheetAnalInferenceEntity.learnId.eq(learnId)) + .execute(); + } + + @Override + public List findYesterdayLabelingCompleteList() { + ZoneId zone = ZoneId.of("Asia/Seoul"); + ZonedDateTime todayStart = ZonedDateTime.now(zone).toLocalDate().atStartOfDay(zone); + ZonedDateTime yesterdayStart = todayStart.minusDays(1); + + BooleanExpression isYesterday = + labelingAssignmentEntity + .inspectStatDttm + .goe(yesterdayStart) + .and(labelingAssignmentEntity.inspectStatDttm.lt(todayStart)); + + return queryFactory + .select( + Projections.constructor( + GeomUidDto.class, + labelingAssignmentEntity.inferenceGeomUid, + mapSheetAnalDataInferenceGeomEntity.resultUid)) + .from(labelingAssignmentEntity) + .innerJoin(mapSheetAnalDataInferenceGeomEntity) + .on( + labelingAssignmentEntity.inferenceGeomUid.eq( + mapSheetAnalDataInferenceGeomEntity.geoUid)) + .innerJoin(mapSheetAnalInferenceEntity) + .on(labelingAssignmentEntity.analUid.eq(mapSheetAnalInferenceEntity.id)) + .innerJoin(mapSheetLearnEntity) + .on( + mapSheetAnalInferenceEntity.learnId.eq(mapSheetLearnEntity.id), + mapSheetLearnEntity.applyStatus.in( + GukYuinStatus.GUK_COMPLETED.getId(), GukYuinStatus.PNU_COMPLETED.getId())) + .where(labelingAssignmentEntity.inspectState.eq(InspectState.COMPLETE.getId()), isYesterday) + .fetch(); + } + + @Override + public void updateAnalDataInferenceGeomSendDttm(Long geoUid) { + queryFactory + .update(mapSheetAnalDataInferenceGeomEntity) + .set(mapSheetAnalDataInferenceGeomEntity.labelSendDttm, ZonedDateTime.now()) + .where(mapSheetAnalDataInferenceGeomEntity.geoUid.eq(geoUid)) + .execute(); + } + + @Override + public List findLabelingCompleteSendList(LocalDate yesterday) { + + ZoneId zone = ZoneId.of("Asia/Seoul"); + ZonedDateTime from = yesterday.atStartOfDay(zone); + ZonedDateTime to = from.plusDays(1); + + BooleanExpression isYesterday = + labelingAssignmentEntity + .inspectStatDttm + .goe(from) + .and(labelingAssignmentEntity.inspectStatDttm.lt(to)); + + return queryFactory + .select( + Projections.constructor( + LabelSendDto.class, + mapSheetAnalDataInferenceGeomEntity.resultUid, + labelingAssignmentEntity.workerUid, + labelingAssignmentEntity.workStatDttm, + labelingAssignmentEntity.inspectorUid, + labelingAssignmentEntity.inspectStatDttm, + mapSheetAnalDataInferenceGeomEntity.labelSendDttm)) + .from(labelingAssignmentEntity) + .innerJoin(mapSheetAnalDataInferenceGeomEntity) + .on( + labelingAssignmentEntity.inferenceGeomUid.eq( + mapSheetAnalDataInferenceGeomEntity.geoUid)) + .where(labelingAssignmentEntity.inspectState.eq(InspectState.COMPLETE.getId()), isYesterday) + .fetch(); + } + + @Override + public Long findMapSheetLearnInfoByYyyy( + Integer compareYyyy, Integer targetYyyy, Integer maxStage) { + return queryFactory + .select(mapSheetLearnEntity.id) + .from(mapSheetLearnEntity) + .where( + mapSheetLearnEntity.compareYyyy.eq(compareYyyy), + mapSheetLearnEntity.targetYyyy.eq(targetYyyy), + mapSheetLearnEntity.stage.eq(maxStage)) + .fetchOne(); + } + + @Override + public void updateMapSheetLearnGukyuinEndStatus(Long learnId) { + queryFactory + .update(mapSheetLearnEntity) + .set(mapSheetLearnEntity.applyStatus, GukYuinStatus.END.getId()) + .set(mapSheetLearnEntity.applyStatusDttm, ZonedDateTime.now()) + .where(mapSheetLearnEntity.id.eq(learnId)) + .execute(); + } + + @Override + public void updateMapSheetInferenceLabelEndStatus(Long learnId) { + queryFactory + .update(mapSheetAnalInferenceEntity) + .set(mapSheetAnalInferenceEntity.analState, LabelMngState.FINISH.getId()) + .set(mapSheetAnalInferenceEntity.updatedDttm, ZonedDateTime.now()) + .where(mapSheetAnalInferenceEntity.learnId.eq(learnId)) + .execute(); + } + + @Override + @Transactional + public void updateGukYuinApplyStateComplete(Long id, GukYuinStatus status) { + queryFactory + .update(mapSheetLearnEntity) + .set(mapSheetLearnEntity.applyStatus, status.getId()) + .set(mapSheetLearnEntity.applyStatusDttm, ZonedDateTime.now()) + .where(mapSheetLearnEntity.id.eq(id)) + .execute(); + } +} diff --git a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepository.java b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepository.java index 5c48860..eaa2732 100644 --- a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepository.java +++ b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepository.java @@ -1,7 +1,7 @@ package com.kamco.cd.kamcoback.postgres.repository.gukyuin; -import com.kamco.cd.kamcoback.postgres.entity.MapSheetLearnEntity; +import com.kamco.cd.kamcoback.postgres.entity.PnuEntity; import org.springframework.data.jpa.repository.JpaRepository; public interface GukYuinStbltJobRepository - extends JpaRepository, GukYuinStbltJobRepositoryCustom {} + extends JpaRepository, GukYuinStbltJobRepositoryCustom {} diff --git a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryCustom.java b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryCustom.java index 73d5f34..be54950 100644 --- a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryCustom.java +++ b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryCustom.java @@ -1,11 +1,18 @@ package com.kamco.cd.kamcoback.postgres.repository.gukyuin; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectContDto.StbltResult; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LearnKeyDto; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.RlbDtctMastDto; +import com.kamco.cd.kamcoback.postgres.entity.PnuEntity; import java.util.List; public interface GukYuinStbltJobRepositoryCustom { List findGukYuinEligibleForSurveyList(String status); - void updateGukYuinEligibleForSurvey(String resultUid, String stbltYn, String lockYn); + void updateGukYuinEligibleForSurvey(String resultUid, RlbDtctMastDto stbltDto); + + PnuEntity findPnuEntityByResultUid(String resultUid, String pnu); + + void updateGukYuinObjectStbltYn(String resultUid, StbltResult stbResult); } diff --git a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryImpl.java b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryImpl.java index 8ad78a8..0d05318 100644 --- a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryImpl.java +++ b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryImpl.java @@ -4,10 +4,15 @@ import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataInferenceE import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataInferenceGeomEntity.mapSheetAnalDataInferenceGeomEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalInferenceEntity.mapSheetAnalInferenceEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetLearnEntity.mapSheetLearnEntity; +import static com.kamco.cd.kamcoback.postgres.entity.QPnuEntity.pnuEntity; -import com.kamco.cd.kamcoback.common.utils.enums.ImageryFitStatus; +import com.kamco.cd.kamcoback.enums.ImageryFitStatus; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectContDto.StbltResult; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LearnKeyDto; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.RlbDtctMastDto; import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus; +import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalDataInferenceGeomEntity; +import com.kamco.cd.kamcoback.postgres.entity.PnuEntity; import com.querydsl.core.types.Projections; import com.querydsl.jpa.impl.JPAQueryFactory; import jakarta.persistence.EntityManager; @@ -42,7 +47,7 @@ public class GukYuinStbltJobRepositoryImpl implements GukYuinStbltJobRepositoryC .on(mapSheetAnalDataInferenceEntity.id.eq(mapSheetAnalDataInferenceGeomEntity.dataUid)) .where( mapSheetLearnEntity.applyStatus.eq(GukYuinStatus.PNU_COMPLETED.getId()), - mapSheetAnalDataInferenceGeomEntity.pnu.isNotNull(), + mapSheetAnalDataInferenceGeomEntity.pnu.gt(0), mapSheetAnalDataInferenceGeomEntity.fitState.isNull()) .groupBy(mapSheetLearnEntity.id, mapSheetLearnEntity.uid, mapSheetLearnEntity.chnDtctMstId) .having(mapSheetAnalDataInferenceGeomEntity.geoUid.count().gt(1L)) @@ -50,14 +55,54 @@ public class GukYuinStbltJobRepositoryImpl implements GukYuinStbltJobRepositoryC } @Override - public void updateGukYuinEligibleForSurvey(String resultUid, String stbltYn, String lockYn) { + public void updateGukYuinEligibleForSurvey(String resultUid, RlbDtctMastDto stbltDto) { + + MapSheetAnalDataInferenceGeomEntity geomEntity = + queryFactory + .selectFrom(mapSheetAnalDataInferenceGeomEntity) + .where(mapSheetAnalDataInferenceGeomEntity.resultUid.eq(resultUid)) + .fetchOne(); + + if (geomEntity != null) { + PnuEntity pnuEt = + queryFactory + .selectFrom(pnuEntity) + .where(pnuEntity.chnDtctObjtId.eq(resultUid)) + .fetchFirst(); + + queryFactory + .update(mapSheetAnalDataInferenceGeomEntity) + .set( + mapSheetAnalDataInferenceGeomEntity.fitState, + pnuEt.getStbltYn().equals("Y") + ? ImageryFitStatus.UNFIT.getId() + : ImageryFitStatus.FIT.getId()) // 적합여부가 Y 이면 부적합인 것, N 이면 적합한 것이라고 함 + .set(mapSheetAnalDataInferenceGeomEntity.fitStateDttm, ZonedDateTime.now()) + .set(mapSheetAnalDataInferenceGeomEntity.lockYn, stbltDto.getLockYn()) + .where(mapSheetAnalDataInferenceGeomEntity.resultUid.eq(resultUid)) + .execute(); + } + } + + @Override + public PnuEntity findPnuEntityByResultUid(String resultUid, String pnu) { + return queryFactory + .selectFrom(pnuEntity) + .where(pnuEntity.pnu.eq(pnu), pnuEntity.chnDtctObjtId.eq(resultUid)) + .fetchOne(); + } + + @Override + public void updateGukYuinObjectStbltYn(String resultUid, StbltResult stbResult) { queryFactory .update(mapSheetAnalDataInferenceGeomEntity) .set( mapSheetAnalDataInferenceGeomEntity.fitState, - stbltYn.equals("Y") ? ImageryFitStatus.FIT.getId() : ImageryFitStatus.UNFIT.getId()) + stbResult.getStbltYn().equals("Y") + ? ImageryFitStatus.UNFIT.getId() + : ImageryFitStatus.FIT.getId()) // 적합여부가 Y 이면 부적합인 것, N 이면 적합한 것이라고 함 .set(mapSheetAnalDataInferenceGeomEntity.fitStateDttm, ZonedDateTime.now()) - .set(mapSheetAnalDataInferenceGeomEntity.lockYn, lockYn) + .set(mapSheetAnalDataInferenceGeomEntity.fitStateCmmnt, stbResult.getIncyCmnt()) .where(mapSheetAnalDataInferenceGeomEntity.resultUid.eq(resultUid)) .execute(); } diff --git a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto.java b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto.java new file mode 100644 index 0000000..26b0986 --- /dev/null +++ b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto.java @@ -0,0 +1,220 @@ +package com.kamco.cd.kamcoback.scene.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.JsonNode; +import com.kamco.cd.kamcoback.enums.ApiConfigEnum.EnumDto; +import com.kamco.cd.kamcoback.enums.CommonUseStatus; +import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto; +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; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; + +public class MapInkxMngDto { + + // 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 + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class Basic { + + private Integer fid; + private String mapidcdNo; + private String mapidNm; + private JsonNode geom; + private String useInference; + private ZonedDateTime createdDttm; + private ZonedDateTime updatedDttm; + } + + @Getter + @Schema(name = "MapListEntity", description = "목록 항목") + public static class MapListEntity { + + private InferenceDetailDto.MapSheet scene50k; + private InferenceDetailDto.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( + InferenceDetailDto.MapSheet scene50k, + InferenceDetailDto.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 + @NoArgsConstructor + public static class MapList { + + private Integer rowNum; + private String mapidcdNo5k; + private String mapidcdNo50k; + private String mapidNm; + private String createdDttm; + private String updatedDttm; + private String useInference; + private ZonedDateTime createdDttmTime; + private ZonedDateTime updatedDttmTime; + + // 목록 Querydsl 에서 리턴 받는 건 생성자 기준임 -> 쿼리 컬럼 그대로 받고 여기서 Java 형변환 해서 return 하기 + public MapList( + Integer rowNum, + String mapidcdNo5k, + String mapidcdNo50k, + String mapidNm, + ZonedDateTime createdDttmTime, + ZonedDateTime updatedDttmTime, + CommonUseStatus useInference) { + this.rowNum = rowNum; + this.mapidcdNo5k = mapidcdNo5k; + this.mapidcdNo50k = mapidcdNo50k; + this.mapidNm = mapidNm; + + DateTimeFormatter fmt = + DateTimeFormatter.ofPattern("yyyy-MM-dd").withZone(ZoneId.of("Asia/Seoul")); + this.createdDttm = fmt.format(createdDttmTime); + this.updatedDttm = fmt.format(updatedDttmTime); + this.createdDttmTime = createdDttmTime; + this.updatedDttmTime = updatedDttmTime; + this.useInference = useInference.getId(); + } + } + + @Schema(name = "searchReq", description = "검색 요청") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class searchReq { + + // 페이징 파라미터 + private int page = 0; + private int size = 20; + private String sort; + + public Pageable toPageable() { + if (sort != null && !sort.isEmpty()) { + String[] sortParams = sort.split(","); + String property = sortParams[0]; + Sort.Direction direction = + sortParams.length > 1 ? Sort.Direction.fromString(sortParams[1]) : Sort.Direction.ASC; + return PageRequest.of(page, size, Sort.by(direction, property)); + } + return PageRequest.of(page, size); + } + } + + @Schema(name = "AddMapReq", description = "등록 요청") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class AddMapReq { + + @Schema(description = "도엽번호", example = "31540687") + private String mapidcdNo; + + @Schema(description = "도엽명", example = "공덕") + private String mapidNm; + + @Schema( + description = "좌표 목록 (한 줄에 한 점, '경도 위도' 형식)", + example = + "127.17500001632317 36.17499998262991\n" + + "127.14999995475043 36.17500002877932\n" + + "127.15000004313612 36.199999984012415\n" + + "127.1750000466954 36.20000001863179") + private String coordinates; + } + + @Schema(name = "UseInferReq", description = "추론제외 업데이트 요청") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class UseInferReq { + + private String mapidcdNo; + 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자리 숫자로 구성되어야 합니다."); + } + } + } + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class Search5kReq { + + private String mapidcdNo; + private String useInference; + } +} diff --git a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/service/GukYuinApiService.java b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/service/GukYuinApiService.java new file mode 100644 index 0000000..48c0a7d --- /dev/null +++ b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/service/GukYuinApiService.java @@ -0,0 +1,390 @@ +package com.kamco.cd.kamcoback.service; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.kamco.cd.kamcoback.common.utils.NetUtils; +import com.kamco.cd.kamcoback.config.api.ApiResponseDto.ApiResponseCode; +import com.kamco.cd.kamcoback.config.api.ApiResponseDto.ResponseObj; +import com.kamco.cd.kamcoback.config.resttemplate.ExternalHttpClient; +import com.kamco.cd.kamcoback.config.resttemplate.ExternalHttpClient.ExternalCallResult; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectContDto; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectContDto.ContBasic; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectContDto.ReqInfo; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectContDto.ResultContDto; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectContDto.ResultPnuDto; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.ChnDetectMastReqDto; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.ErrorResDto; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LabelSendDto; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.ResultDto; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.RlbDtctDto; +import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.GukYuinLinkFacts; +import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.GukYuinLinkFailCode; +import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.LearnInfo; +import com.kamco.cd.kamcoback.postgres.core.GukYuinCoreService; +import java.nio.file.Files; +import java.nio.file.Path; +import java.time.LocalDate; +import java.util.List; +import java.util.UUID; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpMethod; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Slf4j +@Service +@Transactional +@RequiredArgsConstructor +public class GukYuinApiService { + + private final GukYuinCoreService gukyuinCoreService; + private final ExternalHttpClient externalHttpClient; + private final NetUtils netUtils = new NetUtils(); + + private final ObjectMapper objectMapper; + private final String myip = netUtils.getLocalIP(); + + @Value("${spring.profiles.active:local}") + private String profile; + + @Value("${gukyuin.url}") + private String gukyuinUrl; + + @Value("${gukyuin.cdi}") + private String gukyuinCdiUrl; + + @Value("${file.dataset-dir}") + private String datasetDir; + + @Transactional + public ChngDetectMastDto.RegistResDto regist(ChnDetectMastReqDto chnDetectMastReq) { + + String url = gukyuinCdiUrl + "/chn/mast/regist"; + + chnDetectMastReq.setReqIp(myip); + chnDetectMastReq.setReqEpno("BATCH"); + + ExternalCallResult result = + externalHttpClient.call( + url, + HttpMethod.POST, + chnDetectMastReq, + netUtils.jsonHeaders(), + ChngDetectMastDto.RegistResDto.class); + + ChngDetectMastDto.RegistResDto resultBody = result.body(); + boolean success = false; + if (resultBody != null && resultBody.getSuccess() != null) { + ChngDetectMastDto.Basic registRes = resultBody.getResult(); + + success = resultBody.getSuccess(); + + // 이미 등록한 경우에는 result가 없음 + if (resultBody.getResult() == null) { + return resultBody; + } + + // 추론 회차에 applyStatus, applyStatusDttm 업데이트 + gukyuinCoreService.updateGukYuinMastRegResult(registRes); + + // anal_inference 에도 국유인 반영여부, applyDttm 업데이트 + gukyuinCoreService.updateAnalInferenceApplyDttm(registRes); + } else { + String errBody = result.errBody(); + ErrorResDto error = null; + try { + error = objectMapper.readValue(errBody, ErrorResDto.class); + return new ChngDetectMastDto.RegistResDto(error.getStatus(), error.getError(), null, false); + } catch (JsonProcessingException e) { + log.error("에러 응답 파싱 실패. rawBody={}", errBody, e); + return new ChngDetectMastDto.RegistResDto( + result.statusCode(), // HTTP status + errBody, // 원문 그대로 + null, + false); + } + } + + return resultBody; + } + + @Transactional + public ChngDetectMastDto.RemoveResDto remove(ChnDetectMastReqDto chnDetectMastReq) { + String url = gukyuinCdiUrl + "/chn/mast/remove"; + + chnDetectMastReq.setReqIp(myip); + chnDetectMastReq.setReqEpno("BATCH"); + + boolean success = false; + ExternalCallResult result = + externalHttpClient.call( + url, + HttpMethod.POST, + chnDetectMastReq, + netUtils.jsonHeaders(), + ChngDetectMastDto.RemoveResDto.class); + + ChngDetectMastDto.RemoveResDto resultBody = result.body(); + if (resultBody != null && resultBody.getSuccess() != null) { + + success = resultBody.getSuccess(); + if (resultBody.getSuccess()) { + gukyuinCoreService.updateGukYuinMastRegRemove(chnDetectMastReq.getChnDtctId()); + } + } + + return resultBody; + } + + // 등록목록 1개 확인 + public ResultDto detail(String chnDtctMstId) { + + String url = + gukyuinCdiUrl + "/chn/mast/list/" + chnDtctMstId + "?reqIp=" + myip + "&reqEpno=" + "BATCH"; + + ExternalCallResult result = + externalHttpClient.call(url, HttpMethod.GET, null, netUtils.jsonHeaders(), ResultDto.class); + + return result.body(); + } + + // 등록목록 비교년도,기준년도,차수 조합해서 n개 확인 + public ResultDto listYearStage(ChngDetectMastDto.ChngDetectMastSearchDto searchDto) { + String queryString = netUtils.dtoToQueryString(searchDto, null); + String url = + gukyuinCdiUrl + "/chn/mast" + queryString + "&reqIp=" + myip + "&reqEpno=" + "BATCH"; + + ExternalCallResult result = + externalHttpClient.call(url, HttpMethod.GET, null, netUtils.jsonHeaders(), ResultDto.class); + + return result.body(); + } + + private GukYuinLinkFailCode decideCode(GukYuinLinkFacts f) { + + if (!f.existsLearn()) { + return GukYuinLinkFailCode.NOT_FOUND; + } + + if (f.isPartScope()) { + return GukYuinLinkFailCode.SCOPE_PART_NOT_ALLOWED; + } + + if (f.hasRunningInference()) { + return GukYuinLinkFailCode.HAS_RUNNING_INFERENCE; + } + + if (f.hasOtherUnfinishedGukYuin()) { + return GukYuinLinkFailCode.OTHER_GUKYUIN_IN_PROGRESS; + } + + return GukYuinLinkFailCode.OK; + } + + // 탐지객체 리스트 조회 + public ResultContDto findChnContList( + String chnDtctId, Integer pageIndex, Integer pageSize, String batchYn) { + + String url = + gukyuinCdiUrl + + "/chn/cont/" + + chnDtctId + + "?pageIndex=" + + pageIndex + + "&pageSize=" + + pageSize + + "&reqIp=" + + myip + + "&reqEpno=" + + "BATCH"; + + ExternalCallResult result = + externalHttpClient.call( + url, HttpMethod.GET, null, netUtils.jsonHeaders(), ResultContDto.class); + + List contList = result.body().getResult(); + if (contList == null || contList.isEmpty()) { + return new ResultContDto( + result.body().getCode(), + result.body().getMessage(), + result.body().getResult(), + result.body().getSuccess()); + } + + return result.body(); + } + + public ResultPnuDto findPnuObjMgmtList(String chnDtctId, String chnDtctObjtId) { + String url = + gukyuinCdiUrl + + "/chn/pnu/" + + chnDtctId + + "/objt/" + + chnDtctObjtId + + "?reqIp=" + + myip + + "&reqEpno=" + + "BATCH"; + + ExternalCallResult result = + externalHttpClient.call( + url, HttpMethod.GET, null, netUtils.jsonHeaders(), ResultPnuDto.class); + + return result.body(); + } + + public ChngDetectContDto.ResultLabelDto updateChnDtctObjtLabelingYn( + String chnDtctObjtId, String lblYn, String batchYn) { + String url = gukyuinCdiUrl + "/rlb/objt/" + chnDtctObjtId + "/lbl/" + lblYn; + + ReqInfo info = new ReqInfo(); + info.setReqIp(myip); + info.setReqEpno("BATCH"); + + ExternalCallResult result = + externalHttpClient.call( + url, + HttpMethod.POST, + info, + netUtils.jsonHeaders(), + ChngDetectContDto.ResultLabelDto.class); + + return result.body(); + } + + public ResultContDto findChnPnuToContList(String chnDtctId, String pnu) { + + String url = + gukyuinCdiUrl + + "/chn/cont/" + + chnDtctId + + "/pnu/" + + pnu + + "?reqIp=" + + myip + + "&reqEpno=" + + "BATCH"; + + ExternalCallResult result = + externalHttpClient.call( + url, HttpMethod.GET, null, netUtils.jsonHeaders(), ResultContDto.class); + + return result.body(); + } + + public ResultDto listChnDtctId(String chnDtctId, String batchYn) { + String url = + gukyuinCdiUrl + "/chn/mast/" + chnDtctId + "?reqIp=" + myip + "&reqEpno=" + "BATCH"; + + ExternalCallResult result = + externalHttpClient.call(url, HttpMethod.GET, null, netUtils.jsonHeaders(), ResultDto.class); + + return result.body(); + } + + public ResponseObj connectChnMastRegist(UUID uuid) { + // uuid로 추론 회차 조회 + LearnInfo info = gukyuinCoreService.findMapSheetLearnInfo(uuid); + if (info.getApplyYn() != null && info.getApplyYn()) { + return new ResponseObj(ApiResponseCode.DUPLICATE_DATA, "이미 국유인 연동을 한 회차입니다."); + } + + if (!Files.isDirectory(Path.of("/kamco-nfs/dataset/export/" + info.getUid()))) { + return new ResponseObj( + ApiResponseCode.NOT_FOUND_DATA, "파일 경로에 회차 실행 파일이 생성되지 않았습니다. 확인 부탁드립니다."); + } + + // 비교년도,기준년도로 전송한 데이터 있는지 확인 후 회차 번호 생성 + Integer maxStage = + gukyuinCoreService.findMapSheetLearnYearStage(info.getCompareYyyy(), info.getTargetYyyy()); + + // reqDto 셋팅 + ChnDetectMastReqDto reqDto = new ChnDetectMastReqDto(); + reqDto.setCprsYr(String.valueOf(info.getCompareYyyy())); + reqDto.setCrtrYr(String.valueOf(info.getTargetYyyy())); + reqDto.setChnDtctSno(String.valueOf(maxStage + 1)); + reqDto.setChnDtctId(info.getUid()); + reqDto.setPathNm("/kamco-nfs/dataset/export/" + info.getUid()); + + // 1회차를 종료 상태로 처리하고 2회차를 보내야 함 + // 추론(learn), 학습데이터(inference) 둘 다 종료 처리 + if (maxStage > 0) { + Long learnId = + gukyuinCoreService.findMapSheetLearnInfoByYyyy( + info.getCompareYyyy(), info.getTargetYyyy(), maxStage); + gukyuinCoreService.updateMapSheetLearnGukyuinEndStatus(learnId); + gukyuinCoreService.updateMapSheetInferenceLabelEndStatus(learnId); + } + + // 국유인 /chn/mast/regist 전송 + ChngDetectMastDto.RegistResDto result = this.regist(reqDto); + if (result.getSuccess()) { + return new ResponseObj(ApiResponseCode.OK, "연동되었습니다."); + } else { + return new ResponseObj(ApiResponseCode.INTERNAL_SERVER_ERROR, result.getMessage()); + } + } + + public List findLabelingCompleteSendList(LocalDate yesterday) { + return gukyuinCoreService.findLabelingCompleteSendList(yesterday); + } + + public ResultContDto findChnPnuToContObject( + String chnDtctId, String chnDtctObjtId, Integer pageIndex, Integer pageSize) { + + String url = + gukyuinCdiUrl + + "/chn/cont/" + + chnDtctId + + "/chnDtctObjtId/" + + chnDtctObjtId + + "?pageIndex=" + + pageIndex + + "&pageSize=" + + pageSize + + "&reqIp=" + + myip + + "&reqEpno=" + + "BATCH"; + + ExternalCallResult result = + externalHttpClient.call( + url, HttpMethod.GET, null, netUtils.jsonHeaders(), ResultContDto.class); + + return result.body(); + } + + public RlbDtctDto findRlbDtctList(String chnDtctId, String yyyymmdd, String batchYn) { + + String url = + gukyuinCdiUrl + + "/rlb/dtct/" + + chnDtctId + + "?reqIp=" + + myip + + "&reqEpno=" + + "BATCH" + + "&yyyymmdd=" + + yyyymmdd; + + ExternalCallResult result = + externalHttpClient.call( + url, HttpMethod.GET, null, netUtils.jsonHeaders(), RlbDtctDto.class); + + return result.body(); + } + + public RlbDtctDto findRlbDtctObject(String chnDtctObjtId) { + String url = + gukyuinCdiUrl + "/rlb/objt/" + chnDtctObjtId + "?reqIp=" + myip + "&reqEpno=" + "BATCH"; + + ExternalCallResult result = + externalHttpClient.call( + url, HttpMethod.GET, null, netUtils.jsonHeaders(), RlbDtctDto.class); + + return result.body(); + } +} diff --git a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/service/GukYuinApiStbltJobService.java b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/service/GukYuinApiStbltJobService.java index 3686cf3..2608361 100644 --- a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/service/GukYuinApiStbltJobService.java +++ b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/service/GukYuinApiStbltJobService.java @@ -1,20 +1,20 @@ -package com.kamco.cd.kamcoback.scheduler.service; +package com.kamco.cd.kamcoback.service; -import com.kamco.cd.kamcoback.common.utils.NetUtils; -import com.kamco.cd.kamcoback.config.resttemplate.ExternalHttpClient; -import com.kamco.cd.kamcoback.config.resttemplate.ExternalHttpClient.ExternalCallResult; -import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectContDto.StbltResult; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LearnKeyDto; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.RlbDtctDto; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.RlbDtctMastDto; import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus; import com.kamco.cd.kamcoback.postgres.core.GukYuinStbltJobCoreService; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Value; -import org.springframework.http.HttpMethod; -import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @Log4j2 @@ -22,19 +22,12 @@ import org.springframework.stereotype.Service; @RequiredArgsConstructor public class GukYuinApiStbltJobService { - private final ExternalHttpClient externalHttpClient; - private final NetUtils netUtils = new NetUtils(); private final GukYuinStbltJobCoreService gukYuinStbltJobCoreService; + private final GukYuinApiService gukYuinApiService; @Value("${spring.profiles.active}") private String profile; - @Value("${gukyuin.url}") - private String gukyuinUrl; - - @Value("${gukyuin.cdi}") - private String gukyuinCdiUrl; - /** * 실행중인 profile * @@ -44,12 +37,16 @@ public class GukYuinApiStbltJobService { return "local".equalsIgnoreCase(profile); } + // @Scheduled(cron = "0 * * * * *") + public void runTask() { + findGukYuinEligibleForSurvey(null); + } + /** 국유인 연동 후, 실태조사 적합여부 확인하여 update */ - @Scheduled(cron = "0 0 3 * * *") - public void findGukYuinEligibleForSurvey() { - if (isLocalProfile()) { - return; - } + public void findGukYuinEligibleForSurvey(LocalDate baseDate) { + // if (isLocalProfile()) { + // return; + // } List list = gukYuinStbltJobCoreService.findGukYuinEligibleForSurveyList( @@ -60,17 +57,16 @@ public class GukYuinApiStbltJobService { for (LearnKeyDto dto : list) { try { - String url = gukyuinCdiUrl + "/rlb/dtct/" + dto.getUid(); + String targetDate = + LocalDate.now(ZoneId.of("Asia/Seoul")) + .minusDays(1) + .format(DateTimeFormatter.ofPattern("yyyyMMdd")); - ExternalCallResult response = - externalHttpClient.call( - url, - HttpMethod.GET, - null, - netUtils.jsonHeaders(), - ChngDetectMastDto.RlbDtctDto.class); + if (baseDate != null) { // 파라미터가 있으면 + targetDate = baseDate.format(DateTimeFormatter.ofPattern("yyyyMMdd")); + } - RlbDtctDto result = response.body(); + RlbDtctDto result = gukYuinApiService.findRlbDtctList(dto.getUid(), targetDate, "Y"); if (result == null || result.getResult() == null || result.getResult().isEmpty()) { log.warn("[GUKYUIN] empty result chnDtctMstId={}", dto.getChnDtctMstId()); @@ -79,9 +75,45 @@ public class GukYuinApiStbltJobService { for (RlbDtctMastDto stbltDto : result.getResult()) { String resultUid = stbltDto.getChnDtctObjtId(); - gukYuinStbltJobCoreService.updateGukYuinEligibleForSurvey( - resultUid, stbltDto.getStbltYn(), stbltDto.getLockYn()); + gukYuinStbltJobCoreService.updateGukYuinEligibleForSurvey(resultUid, stbltDto); } + + Map resultMap = + result.getResult().stream() + .collect(Collectors.groupingBy(RlbDtctMastDto::getChnDtctObjtId)) + .entrySet() + .stream() + .collect( + Collectors.toMap( + Map.Entry::getKey, + e -> { + List pnuList = e.getValue(); + + boolean hasY = pnuList.stream().anyMatch(v -> "Y".equals(v.getStbltYn())); + + String fitYn = hasY ? "Y" : "N"; + + RlbDtctMastDto selected = + hasY + ? pnuList.stream() + .filter(v -> "Y".equals(v.getStbltYn())) + .findFirst() + .orElse(null) + : pnuList.stream() + .filter(v -> "N".equals(v.getStbltYn())) + .findFirst() + .orElse(null); + + if (selected == null) { + return null; // 방어 코드 + } + + return new StbltResult( + fitYn, selected.getIncyCd(), selected.getIncyRsnCont()); + })); + + resultMap.forEach(gukYuinStbltJobCoreService::updateGukYuinObjectStbltYn); + } catch (Exception e) { log.error("[GUKYUIN] failed uid={}", dto.getChnDtctMstId(), e); } diff --git a/gukyuin/stblt-check/src/main/resources/application-dev.yml b/gukyuin/stblt-check/src/main/resources/application-dev.yml new file mode 100644 index 0000000..d7611e7 --- /dev/null +++ b/gukyuin/stblt-check/src/main/resources/application-dev.yml @@ -0,0 +1,136 @@ +spring: + config: + activate: + on-profile: dev + + jpa: + show-sql: false + hibernate: + ddl-auto: validate + properties: + hibernate: + default_batch_fetch_size: 100 # ✅ 성능 - N+1 쿼리 방지 + order_updates: true # ✅ 성능 - 업데이트 순서 정렬로 데드락 방지 + order_inserts: true + use_sql_comments: true # ⚠️ 선택 - SQL에 주석 추가 (디버깅용) + format_sql: true # ⚠️ 선택 - SQL 포맷팅 (가독성) + jdbc: + batch_size: 1000 # ✅ 추가 (JDBC batch) + open-in-view: false + mvc: + async: + request-timeout: 300s # 5분 (예: 30s, 120s, 10m 등도 가능) + + datasource: + url: jdbc:postgresql://192.168.2.127:15432/kamco_cds + #url: jdbc:postgresql://localhost:15432/kamco_cds + username: kamco_cds + password: kamco_cds_Q!W@E#R$ + hikari: + minimum-idle: 10 + maximum-pool-size: 20 + connection-timeout: 60000 # 60초 연결 타임아웃 + idle-timeout: 300000 # 5분 유휴 타임아웃 + max-lifetime: 1800000 # 30분 최대 수명 + leak-detection-threshold: 60000 # 연결 누수 감지 + + transaction: + default-timeout: 300 # 5분 트랜잭션 타임아웃 + + data: + redis: + host: 192.168.2.109 + port: 6379 + password: kamco + + servlet: + multipart: + enabled: true + max-file-size: 4GB + max-request-size: 4GB + file-size-threshold: 10MB + +server: + tomcat: + max-swallow-size: 4GB + max-http-form-post-size: 4GB + +jwt: + secret: "kamco_token_9b71e778-19a3-4c1d-97bf-2d687de17d5b" + access-token-validity-in-ms: 86400000 # 1일 + refresh-token-validity-in-ms: 604800000 # 7일 + #access-token-validity-in-ms: 60000 # 1분 + #refresh-token-validity-in-ms: 300000 # 5분 + +token: + refresh-cookie-name: kamco-dev # 개발용 쿠키 이름 + refresh-cookie-secure: false # 로컬 http 테스트면 false + +springdoc: + swagger-ui: + persist-authorization: true # 스웨거 새로고침해도 토큰 유지, 로컬스토리지에 저장 + +logging: + level: + root: INFO + org.springframework.web: DEBUG + org.springframework.security: DEBUG + + # 헬스체크 노이즈 핵심만 다운 + org.springframework.security.web.FilterChainProxy: INFO + org.springframework.security.web.authentication.AnonymousAuthenticationFilter: INFO + org.springframework.security.web.authentication.Http403ForbiddenEntryPoint: INFO + org.springframework.web.servlet.DispatcherServlet: INFO + + +mapsheet: + upload: + skipGdalValidation: true + shp: + baseurl: /app/tmp/detect/result #현재사용안함 + + + +file: + #sync-root-dir: D:/kamco-nfs/images/ + sync-root-dir: /kamco-nfs/images/ + sync-tmp-dir: /kamco-nfs/requests/temp # image upload temp dir + #sync-tmp-dir: ${file.sync-root-dir}/tmp + sync-file-extention: tfw,tif + sync-auto-exception-start-year: 2024 + sync-auto-exception-before-year-cnt: 3 + + #dataset-dir: D:/kamco-nfs/model_output/ + dataset-dir: /kamco-nfs/model_output/export/ # 마운트경로 AI 추론결과 + dataset-tmp-dir: ${file.dataset-dir}tmp/ + + #model-dir: D:/kamco-nfs/ckpt/model/ + model-dir: /kamco-nfs/ckpt/model/ # 학습서버에서 트레이닝한 모델업로드경로 + model-tmp-dir: ${file.model-dir}tmp/ + model-file-extention: pth,json,py + + pt-path: /kamco-nfs/ckpt/model/v6-cls-checkpoints/ + pt-FileName: yolov8_6th-6m.pt + + dataset-response: /kamco-nfs/dataset/response/ + +inference: + url: http://192.168.2.183:8000/jobs + batch-url: http://192.168.2.183:8000/batches + geojson-dir: /kamco-nfs/requests/ # 추론실행을 위한 파일생성경로 + jar-path: /kamco-nfs/repo/jar/shp-exporter.jar + inference-server-name: server1,server2,server3,server4 + +gukyuin: + #url: http://localhost:8080 + url: http://192.168.2.129:5301 + cdi: ${gukyuin.url}/api/kcd/cdi + +training-data: + geojson-dir: /kamco-nfs/dataset/request/ + +layer: + geoserver-url: https://kamco.geo-dev.gs.dabeeo.com + wms-path: geoserver/cd + wmts-path: geoserver/cd/gwc/service + workspace: cd diff --git a/gukyuin/stblt-check/src/main/resources/application-local.yml b/gukyuin/stblt-check/src/main/resources/application-local.yml new file mode 100644 index 0000000..cb09429 --- /dev/null +++ b/gukyuin/stblt-check/src/main/resources/application-local.yml @@ -0,0 +1,114 @@ +spring: + config: + activate: + on-profile: local + + jpa: + show-sql: false + hibernate: + ddl-auto: validate # 로컬만 완화(시킬려면 update으로 변경) + properties: + hibernate: + default_batch_fetch_size: 100 # ✅ 성능 - N+1 쿼리 방지 + order_updates: true # ✅ 성능 - 업데이트 순서 정렬로 데드락 방지 + use_sql_comments: true # ⚠️ 선택 - SQL에 주석 추가 (디버깅용) + format_sql: true # ⚠️ 선택 - SQL 포맷팅 (가독성) + + datasource: + url: jdbc:postgresql://192.168.2.127:15432/kamco_cds + # url: jdbc:postgresql://localhost:5432/local_0128 + username: kamco_cds + password: kamco_cds_Q!W@E#R$ + # username: postgres + # password: 1234 + hikari: + minimum-idle: 1 + maximum-pool-size: 5 + + data: + redis: + host: 192.168.2.109 + port: 6379 + password: kamco + + servlet: + multipart: + enabled: true + max-file-size: 4GB + max-request-size: 4GB + file-size-threshold: 10MB + +server: + tomcat: + max-swallow-size: 4GB + max-http-form-post-size: 4GB + +jwt: + secret: "kamco_token_9b71e778-19a3-4c1d-97bf-2d687de17d5b" + access-token-validity-in-ms: 86400000 # 1일 + refresh-token-validity-in-ms: 604800000 # 7일 + +token: + refresh-cookie-name: kamco-local # 개발용 쿠키 이름 + refresh-cookie-secure: false # 로컬 http 테스트면 false + +springdoc: + swagger-ui: + persist-authorization: true # 스웨거 새로고침해도 토큰 유지, 로컬스토리지에 저장 + +logging: + level: + org.hibernate.SQL: debug + org.hibernate.orm.jdbc.bind: trace + +mapsheet: + upload: + skipGdalValidation: true + shp: + baseurl: /Users/bokmin/detect/result + + + +file: + sync-root-dir: C:/Users/gypark/kamco-nfs/images/ + #sync-root-dir: /kamco-nfs/images/ + sync-tmp-dir: ${file.sync-root-dir}/tmp/ + sync-file-extention: tfw,tif + sync-auto-exception-start-year: 2025 + sync-auto-exception-before-year-cnt: 3 + + dataset-dir: C:/Users/gypark/kamco-nfs/dataset/ + #dataset-dir: /kamco-nfs/dataset/export/ + dataset-tmp-dir: ${file.dataset-dir}tmp/ + + model-dir: C:/Users/gypark/kamco-nfs/ckpt/model/ + #model-dir: /kamco-nfs/ckpt/model/ + model-tmp-dir: ${file.model-dir}tmp/ + model-file-extention: pth,json,py + + pt-path: /kamco-nfs/ckpt/classification/ + pt-FileName: v5-best.pt + + dataset-response: /kamco-nfs/dataset/response/ + +inference: + url: http://10.100.0.11:8000/jobs + batch-url: http://10.100.0.11:8000/batches + geojson-dir: /kamco-nfs/requests/ + jar-path: jar/makeshp-1.0.0.jar + inference-server-name: server1,server2,server3,server4 + +gukyuin: + #url: http://localhost:8080 + url: http://192.168.2.129:5301 + cdi: ${gukyuin.url}/api/kcd/cdi + +training-data: + geojson-dir: /kamco-nfs/model_output/labeling/ + +layer: + geoserver-url: https://kamco.geo-dev.gs.dabeeo.com + wms-path: geoserver/cd + wmts-path: geoserver/cd/gwc/service + workspace: cd + diff --git a/gukyuin/stblt-check/src/main/resources/application-prod.yml b/gukyuin/stblt-check/src/main/resources/application-prod.yml new file mode 100644 index 0000000..471febd --- /dev/null +++ b/gukyuin/stblt-check/src/main/resources/application-prod.yml @@ -0,0 +1,122 @@ +spring: + config: + activate: + on-profile: prod + + jpa: + show-sql: true + hibernate: + ddl-auto: validate + properties: + hibernate: + default_batch_fetch_size: 100 # ✅ 성능 - N+1 쿼리 방지 + order_updates: true # ✅ 성능 - 업데이트 순서 정렬로 데드락 방지 + order_inserts: true + use_sql_comments: true # ⚠️ 선택 - SQL에 주석 추가 (디버깅용) + format_sql: true # ⚠️ 선택 - SQL 포맷팅 (가독성) + jdbc: + batch_size: 1000 # ✅ 추가 (JDBC batch) + open-in-view: false + mvc: + async: + request-timeout: 300s # 5분 (예: 30s, 120s, 10m 등도 가능) + + datasource: + url: jdbc:postgresql://kamco-cd-postgis:5432/kamco_cds + #url: jdbc:postgresql://localhost:15432/kamco_cds + username: kamco_cds + password: kamco_cds_Q!W@E#R$ + hikari: + minimum-idle: 10 + maximum-pool-size: 20 + connection-timeout: 60000 # 60초 연결 타임아웃 + idle-timeout: 300000 # 5분 유휴 타임아웃 + max-lifetime: 1800000 # 30분 최대 수명 + leak-detection-threshold: 60000 # 연결 누수 감지 + + transaction: + default-timeout: 300 # 5분 트랜잭션 타임아웃 + + data: + redis: + host: 127.0.0.1 + port: 16379 + password: kamco + + servlet: + multipart: + enabled: true + max-file-size: 4GB + max-request-size: 4GB + file-size-threshold: 10MB + +server: + tomcat: + max-swallow-size: 4GB + max-http-form-post-size: 4GB + +jwt: + secret: "kamco_token_9b71e778-19a3-4c1d-97bf-2d687de17d5b" + access-token-validity-in-ms: 86400000 # 1일 + refresh-token-validity-in-ms: 604800000 # 7일 + +token: + refresh-cookie-name: kamco # 개발용 쿠키 이름 + refresh-cookie-secure: true # 로컬 http 테스트면 false + +logging: + level: + root: INFO + org.springframework.web: DEBUG + org.springframework.security: DEBUG + + # 헬스체크 노이즈 핵심만 다운 + org.springframework.security.web.FilterChainProxy: INFO + org.springframework.security.web.authentication.AnonymousAuthenticationFilter: INFO + org.springframework.security.web.authentication.Http403ForbiddenEntryPoint: INFO + org.springframework.web.servlet.DispatcherServlet: INFO + + +mapsheet: + upload: + skipGdalValidation: true + shp: + baseurl: /app/detect/result #현재사용안함 + +file: + sync-root-dir: /kamco-nfs/images/ + sync-tmp-dir: /kamco-nfs/repo/tmp # image upload temp dir + sync-file-extention: tfw,tif + + #dataset-dir: D:/kamco-nfs/model_output/ #변경 model_output + dataset-dir: /kamco-nfs/model_output/export/ # 마운트경로 AI 추론결과 + dataset-tmp-dir: ${file.dataset-dir}tmp/ + + #model-dir: D:/kamco-nfs/ckpt/model/ + model-dir: /kamco-nfs/ckpt/model/ # 학습서버에서 트레이닝한 모델업로드경로 + model-tmp-dir: ${file.model-dir}tmp/ + model-file-extention: pth,json,py + + pt-path: /kamco-nfs/ckpt/v6-cls-checkpoints/ + pt-FileName: yolov8_6th-6m.pt + dataset-response: /kamco-nfs/dataset/response/ + +inference: + url: http://127.0.0.1:8000/jobs + batch-url: http://127.0.0.1:8000/batches + geojson-dir: /kamco-nfs/requests/ # 학습서버에서 트레이닝한 모델업로드경로 + jar-path: /kamco-nfs/repo/jar/shp-exporter.jar # 추론실행을 위한 파일생성경로 + inference-server-name: server1,server2,server3,server4 + +gukyuin: + url: http://127.0.0.1:5301 + cdi: ${gukyuin.url}/api/kcd/cdi + +training-data: + geojson-dir: /kamco-nfs/dataset/request/ + +layer: + geoserver-url: https://kamco.geo-dev.gs.dabeeo.com + wms-path: geoserver/cd + wmts-path: geoserver/cd/gwc/service + workspace: cd diff --git a/gukyuin/stblt-check/src/main/resources/application.yml b/gukyuin/stblt-check/src/main/resources/application.yml index 5d1aadc..ef65ab4 100644 --- a/gukyuin/stblt-check/src/main/resources/application.yml +++ b/gukyuin/stblt-check/src/main/resources/application.yml @@ -1,4 +1,8 @@ server: - port: 9080 - + port: 8080 +spring: + application: + name: kamco-gukyuin-stblt + profiles: + active: prod # 사용할 프로파일 지정 (ex. dev, prod, test) diff --git a/gukyuin/stblt-check/src/main/resources/application_dev.yml b/gukyuin/stblt-check/src/main/resources/application_dev.yml deleted file mode 100644 index 80d48c2..0000000 --- a/gukyuin/stblt-check/src/main/resources/application_dev.yml +++ /dev/null @@ -1,71 +0,0 @@ -server: - port: 9080 - -spring: - application: - name: label-to-review - profiles: - active: dev # 사용할 프로파일 지정 (ex. dev, prod, test) - - datasource: - url: jdbc:postgresql://192.168.2.127:15432/kamco_cds - #url: jdbc:postgresql://localhost:5432/kamco_cds - username: kamco_cds - password: kamco_cds_Q!W@E#R$ - hikari: - minimum-idle: 1 - maximum-pool-size: 5 - - jpa: - hibernate: - ddl-auto: update # 테이블이 없으면 생성, 있으면 업데이트 - properties: - hibernate: - jdbc: - batch_size: 50 - default_batch_fetch_size: 100 -logging: - level: - root: INFO - org.springframework.web: DEBUG - org.springframework.security: DEBUG - - # 헬스체크 노이즈 핵심만 다운 - org.springframework.security.web.FilterChainProxy: INFO - org.springframework.security.web.authentication.AnonymousAuthenticationFilter: INFO - org.springframework.security.web.authentication.Http403ForbiddenEntryPoint: INFO - org.springframework.web.servlet.DispatcherServlet: INFO -# actuator -management: - health: - readinessstate: - enabled: true - livenessstate: - enabled: true - endpoint: - health: - probes: - enabled: true - show-details: always - endpoints: - jmx: - exposure: - exclude: "*" - web: - base-path: /monitor - exposure: - include: - - "health" - -file: - #sync-root-dir: D:/kamco-nfs/images/ - sync-root-dir: /kamco-nfs/images/ - sync-tmp-dir: ${file.sync-root-dir}/tmp - sync-file-extention: tfw,tif - sync-auto-exception-start-year: 2025 - sync-auto-exception-before-year-cnt: 3 - -gukyuin: - #url: http://localhost:8080 - url: http://192.168.2.129:5301 - cdi: ${gukyuin.url}/api/kcd/cdi \ No newline at end of file diff --git a/gukyuin/stblt-check/src/main/resources/application_local.yml b/gukyuin/stblt-check/src/main/resources/application_local.yml deleted file mode 100644 index a5a4da3..0000000 --- a/gukyuin/stblt-check/src/main/resources/application_local.yml +++ /dev/null @@ -1,71 +0,0 @@ -server: - port: 9080 - -spring: - application: - name: imagery-make-dataset - profiles: - active: local # 사용할 프로파일 지정 (ex. dev, prod, test) - - datasource: - url: jdbc:postgresql://192.168.2.127:15432/kamco_cds - #url: jdbc:postgresql://localhost:5432/kamco_cds - username: kamco_cds - password: kamco_cds_Q!W@E#R$ - hikari: - minimum-idle: 1 - maximum-pool-size: 5 - - jpa: - hibernate: - ddl-auto: update # 테이블이 없으면 생성, 있으면 업데이트 - properties: - hibernate: - jdbc: - batch_size: 50 - default_batch_fetch_size: 100 -logging: - level: - root: INFO - org.springframework.web: DEBUG - org.springframework.security: DEBUG - - # 헬스체크 노이즈 핵심만 다운 - org.springframework.security.web.FilterChainProxy: INFO - org.springframework.security.web.authentication.AnonymousAuthenticationFilter: INFO - org.springframework.security.web.authentication.Http403ForbiddenEntryPoint: INFO - org.springframework.web.servlet.DispatcherServlet: INFO -# actuator -management: - health: - readinessstate: - enabled: true - livenessstate: - enabled: true - endpoint: - health: - probes: - enabled: true - show-details: always - endpoints: - jmx: - exposure: - exclude: "*" - web: - base-path: /monitor - exposure: - include: - - "health" - -file: - #sync-root-dir: D:/kamco-nfs/images/ - sync-root-dir: /kamco-nfs/images/ - sync-tmp-dir: ${file.sync-root-dir}/tmp - sync-file-extention: tfw,tif - sync-auto-exception-start-year: 2025 - sync-auto-exception-before-year-cnt: 3 - -gukyuin: - #url: http://localhost:8080 - url: http://192.168.2.129:5301 - cdi: ${gukyuin.url}/api/kcd/cdi \ No newline at end of file diff --git a/gukyuin/stblt-check/src/main/resources/application_prod.yml b/gukyuin/stblt-check/src/main/resources/application_prod.yml deleted file mode 100644 index ea3d329..0000000 --- a/gukyuin/stblt-check/src/main/resources/application_prod.yml +++ /dev/null @@ -1,71 +0,0 @@ -server: - port: 9080 - -spring: - application: - name: imagery-make-dataset - profiles: - active: prod # 사용할 프로파일 지정 (ex. dev, prod, test) - - datasource: - url: jdbc:postgresql://192.168.2.127:15432/kamco_cds - #url: jdbc:postgresql://localhost:5432/kamco_cds - username: kamco_cds - password: kamco_cds_Q!W@E#R$ - hikari: - minimum-idle: 1 - maximum-pool-size: 5 - - jpa: - hibernate: - ddl-auto: update # 테이블이 없으면 생성, 있으면 업데이트 - properties: - hibernate: - jdbc: - batch_size: 50 - default_batch_fetch_size: 100 -logging: - level: - root: INFO - org.springframework.web: DEBUG - org.springframework.security: DEBUG - - # 헬스체크 노이즈 핵심만 다운 - org.springframework.security.web.FilterChainProxy: INFO - org.springframework.security.web.authentication.AnonymousAuthenticationFilter: INFO - org.springframework.security.web.authentication.Http403ForbiddenEntryPoint: INFO - org.springframework.web.servlet.DispatcherServlet: INFO -# actuator -management: - health: - readinessstate: - enabled: true - livenessstate: - enabled: true - endpoint: - health: - probes: - enabled: true - show-details: always - endpoints: - jmx: - exposure: - exclude: "*" - web: - base-path: /monitor - exposure: - include: - - "health" - -file: - #sync-root-dir: D:/kamco-nfs/images/ - sync-root-dir: /kamco-nfs/images/ - sync-tmp-dir: ${file.sync-root-dir}/tmp - sync-file-extention: tfw,tif - sync-auto-exception-start-year: 2025 - sync-auto-exception-before-year-cnt: 3 - -gukyuin: - #url: http://localhost:8080 - url: http://192.168.2.129:5301 - cdi: ${gukyuin.url}/api/kcd/cdi \ No newline at end of file