diff --git a/gukyuin/pnu-update/.gradle/8.14/executionHistory/executionHistory.bin b/gukyuin/pnu-update/.gradle/8.14/executionHistory/executionHistory.bin index aaf85e2..b2f1be6 100644 Binary files a/gukyuin/pnu-update/.gradle/8.14/executionHistory/executionHistory.bin and b/gukyuin/pnu-update/.gradle/8.14/executionHistory/executionHistory.bin differ diff --git a/gukyuin/pnu-update/.gradle/8.14/executionHistory/executionHistory.lock b/gukyuin/pnu-update/.gradle/8.14/executionHistory/executionHistory.lock index 4ff9240..077aef9 100644 Binary files a/gukyuin/pnu-update/.gradle/8.14/executionHistory/executionHistory.lock and b/gukyuin/pnu-update/.gradle/8.14/executionHistory/executionHistory.lock differ diff --git a/gukyuin/pnu-update/.gradle/8.14/fileHashes/fileHashes.bin b/gukyuin/pnu-update/.gradle/8.14/fileHashes/fileHashes.bin index a178978..93034a4 100644 Binary files a/gukyuin/pnu-update/.gradle/8.14/fileHashes/fileHashes.bin and b/gukyuin/pnu-update/.gradle/8.14/fileHashes/fileHashes.bin differ diff --git a/gukyuin/pnu-update/.gradle/8.14/fileHashes/fileHashes.lock b/gukyuin/pnu-update/.gradle/8.14/fileHashes/fileHashes.lock index f91b891..0c4960e 100644 Binary files a/gukyuin/pnu-update/.gradle/8.14/fileHashes/fileHashes.lock and b/gukyuin/pnu-update/.gradle/8.14/fileHashes/fileHashes.lock differ diff --git a/gukyuin/pnu-update/.gradle/8.14/fileHashes/resourceHashesCache.bin b/gukyuin/pnu-update/.gradle/8.14/fileHashes/resourceHashesCache.bin index 472b22b..2ea1283 100644 Binary files a/gukyuin/pnu-update/.gradle/8.14/fileHashes/resourceHashesCache.bin and b/gukyuin/pnu-update/.gradle/8.14/fileHashes/resourceHashesCache.bin differ diff --git a/gukyuin/pnu-update/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/gukyuin/pnu-update/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 3379719..b58ffba 100644 Binary files a/gukyuin/pnu-update/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/gukyuin/pnu-update/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/gukyuin/pnu-update/.gradle/buildOutputCleanup/outputFiles.bin b/gukyuin/pnu-update/.gradle/buildOutputCleanup/outputFiles.bin index db372cc..9613d23 100644 Binary files a/gukyuin/pnu-update/.gradle/buildOutputCleanup/outputFiles.bin and b/gukyuin/pnu-update/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/gukyuin/pnu-update/.gradle/file-system.probe b/gukyuin/pnu-update/.gradle/file-system.probe index c5d6096..54bd075 100644 Binary files a/gukyuin/pnu-update/.gradle/file-system.probe and b/gukyuin/pnu-update/.gradle/file-system.probe differ diff --git a/gukyuin/pnu-update/README.md b/gukyuin/pnu-update/README.md index 024c5e8..a94d658 100644 --- a/gukyuin/pnu-update/README.md +++ b/gukyuin/pnu-update/README.md @@ -1,4 +1,4 @@ -# IMAGERY MAKE DATASET +# GUKYUIN PNU UPDATE > 국유인에 연동된 객체 조회하여 pnu update schedule diff --git a/gukyuin/pnu-update/build/classes/java/main/com/kamco/cd/kamcoback/postgres/core/TrainingDataReviewJobCoreService.class b/gukyuin/pnu-update/build/classes/java/main/com/kamco/cd/kamcoback/postgres/core/TrainingDataReviewJobCoreService.class deleted file mode 100644 index d3d4768..0000000 Binary files a/gukyuin/pnu-update/build/classes/java/main/com/kamco/cd/kamcoback/postgres/core/TrainingDataReviewJobCoreService.class and /dev/null differ diff --git a/gukyuin/pnu-update/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepository.class b/gukyuin/pnu-update/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepository.class deleted file mode 100644 index 4e90d28..0000000 Binary files a/gukyuin/pnu-update/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepository.class and /dev/null differ diff --git a/gukyuin/pnu-update/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryCustom.class b/gukyuin/pnu-update/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryCustom.class deleted file mode 100644 index a506e9a..0000000 Binary files a/gukyuin/pnu-update/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryCustom.class and /dev/null differ diff --git a/gukyuin/pnu-update/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryImpl.class b/gukyuin/pnu-update/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryImpl.class deleted file mode 100644 index 57974e6..0000000 Binary files a/gukyuin/pnu-update/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryImpl.class and /dev/null differ diff --git a/gukyuin/pnu-update/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/service/TrainingDataReviewJobService.class b/gukyuin/pnu-update/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/service/TrainingDataReviewJobService.class deleted file mode 100644 index 603957e..0000000 Binary files a/gukyuin/pnu-update/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/service/TrainingDataReviewJobService.class and /dev/null differ diff --git a/gukyuin/pnu-update/build/libs/review-to-down.jar b/gukyuin/pnu-update/build/libs/review-to-down.jar deleted file mode 100644 index d1b860d..0000000 Binary files a/gukyuin/pnu-update/build/libs/review-to-down.jar and /dev/null differ diff --git a/gukyuin/pnu-update/build/reports/problems/problems-report.html b/gukyuin/pnu-update/build/reports/problems/problems-report.html index f1256a3..7ee1a2a 100644 --- a/gukyuin/pnu-update/build/reports/problems/problems-report.html +++ b/gukyuin/pnu-update/build/reports/problems/problems-report.html @@ -650,7 +650,7 @@ code + .copy-button { diff --git a/gukyuin/pnu-update/build/resources/main/application_dev.yml b/gukyuin/pnu-update/build/resources/main/application_dev.yml index a5bc4d9..80d48c2 100644 --- a/gukyuin/pnu-update/build/resources/main/application_dev.yml +++ b/gukyuin/pnu-update/build/resources/main/application_dev.yml @@ -65,3 +65,7 @@ file: 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/pnu-update/build/resources/main/application_local.yml b/gukyuin/pnu-update/build/resources/main/application_local.yml index 328045e..a5a4da3 100644 --- a/gukyuin/pnu-update/build/resources/main/application_local.yml +++ b/gukyuin/pnu-update/build/resources/main/application_local.yml @@ -65,3 +65,7 @@ file: 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/pnu-update/build/resources/main/application_prod.yml b/gukyuin/pnu-update/build/resources/main/application_prod.yml index 1282d26..ea3d329 100644 --- a/gukyuin/pnu-update/build/resources/main/application_prod.yml +++ b/gukyuin/pnu-update/build/resources/main/application_prod.yml @@ -65,3 +65,7 @@ file: 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/pnu-update/build/tmp/bootJar/MANIFEST.MF b/gukyuin/pnu-update/build/tmp/bootJar/MANIFEST.MF index 00bfd94..c5ea48e 100644 --- a/gukyuin/pnu-update/build/tmp/bootJar/MANIFEST.MF +++ b/gukyuin/pnu-update/build/tmp/bootJar/MANIFEST.MF @@ -7,6 +7,6 @@ Spring-Boot-Lib: BOOT-INF/lib/ Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx Spring-Boot-Layers-Index: BOOT-INF/layers.idx Build-Jdk-Spec: 21 -Implementation-Title: kamco-review-to-down-job +Implementation-Title: kamco-pnu-update-job Implementation-Version: 0.0.1-SNAPSHOT diff --git a/gukyuin/pnu-update/build/tmp/compileJava/previous-compilation-data.bin b/gukyuin/pnu-update/build/tmp/compileJava/previous-compilation-data.bin index 6b8d20a..aecf611 100644 Binary files a/gukyuin/pnu-update/build/tmp/compileJava/previous-compilation-data.bin and b/gukyuin/pnu-update/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/common/utils/UserUtil.java b/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/common/utils/UserUtil.java deleted file mode 100644 index 7e64f0a..0000000 --- a/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/common/utils/UserUtil.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.kamco.cd.kamcoback.common.utils; - -import com.kamco.cd.kamcoback.auth.CustomUserDetails; -import com.kamco.cd.kamcoback.members.dto.MembersDto; -import com.kamco.cd.kamcoback.postgres.entity.MemberEntity; -import java.util.Optional; -import lombok.RequiredArgsConstructor; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.stereotype.Component; - -@Component -@RequiredArgsConstructor -public class UserUtil { - - public MembersDto.Member getCurrentUser() { - return Optional.ofNullable(SecurityContextHolder.getContext().getAuthentication()) - .filter(auth -> auth.getPrincipal() instanceof CustomUserDetails) - .map( - auth -> { - CustomUserDetails user = (CustomUserDetails) auth.getPrincipal(); - MemberEntity m = user.getMember(); - return new MembersDto.Member( - m.getId(), m.getName(), m.getEmployeeNo(), m.getUserRole()); - }) - .orElse(null); - } - - public Long getId() { - MembersDto.Member user = getCurrentUser(); - return user != null ? user.getId() : null; - } - - public String getName() { - MembersDto.Member user = getCurrentUser(); - return user != null ? user.getName() : null; - } - - public String getEmployeeNo() { - MembersDto.Member user = getCurrentUser(); - return user != null ? user.getEmployeeNo() : null; - } - - public String getRole() { - MembersDto.Member user = getCurrentUser(); - return user != null ? user.getRole() : null; - } - - public String getIp() { - return Optional.ofNullable(SecurityContextHolder.getContext().getAuthentication()) - .map(auth -> auth.getDetails()) - .map(Object::toString) - .orElse(null); - } -} diff --git a/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/config/api/ApiLogFunction.java b/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/config/api/ApiLogFunction.java deleted file mode 100644 index 29d7864..0000000 --- a/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/config/api/ApiLogFunction.java +++ /dev/null @@ -1,153 +0,0 @@ -package com.kamco.cd.kamcoback.config.api; - -import com.kamco.cd.kamcoback.log.dto.EventStatus; -import com.kamco.cd.kamcoback.log.dto.EventType; -import com.kamco.cd.kamcoback.menu.dto.MenuDto; -import jakarta.servlet.http.HttpServletRequest; -import java.io.UnsupportedEncodingException; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.util.ContentCachingRequestWrapper; - -@Slf4j -public class ApiLogFunction { - - // 클라이언트 IP 추출 - public static String getClientIp(HttpServletRequest request) { - String[] headers = { - "X-Forwarded-For", - "Proxy-Client-IP", - "WL-Proxy-Client-IP", - "HTTP_CLIENT_IP", - "HTTP_X_FORWARDED_FOR" - }; - for (String header : headers) { - String ip = request.getHeader(header); - if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) { - return ip.split(",")[0]; - } - } - String ip = request.getRemoteAddr(); - if ("0:0:0:0:0:0:0:1".equals(ip)) { // local 일 때 - ip = "127.0.0.1"; - } - return ip; - } - - public static String getXFowardedForIp(HttpServletRequest request) { - String ip = request.getHeader("X-Forwarded-For"); - if (ip != null) { - ip = ip.split(",")[0].trim(); - } - return ip; - } - - // 사용자 ID 추출 예시 (Spring Security 기준) - public static String getUserId(HttpServletRequest request) { - try { - return request.getUserPrincipal() != null ? request.getUserPrincipal().getName() : null; - } catch (Exception e) { - return null; - } - } - - public static EventType getEventType(HttpServletRequest request) { - String method = request.getMethod().toUpperCase(); - String uri = request.getRequestURI().toLowerCase(); - - // URL 기반 DOWNLOAD/PRINT 분류 -> /download는 FileDownloadInterceptor로 옮김 - if (uri.contains("/download") || uri.contains("/export")) { - return EventType.DOWNLOAD; - } - if (uri.contains("/print")) { - return EventType.OTHER; - } - - // 일반 CRUD - return switch (method) { - case "POST" -> EventType.ADDED; - case "GET" -> EventType.LIST; - case "DELETE" -> EventType.REMOVE; - case "PUT", "PATCH" -> EventType.MODIFIED; - default -> EventType.OTHER; - }; - } - - public static String getRequestBody( - HttpServletRequest servletRequest, ContentCachingRequestWrapper contentWrapper) { - StringBuilder resultBody = new StringBuilder(); - // GET, form-urlencoded POST 파라미터 - Map paramMap = servletRequest.getParameterMap(); - - String queryParams = - paramMap.entrySet().stream() - .map(e -> e.getKey() + "=" + String.join(",", e.getValue())) - .collect(Collectors.joining("&")); - - resultBody.append(queryParams.isEmpty() ? "" : queryParams); - - // JSON Body - if ("POST".equalsIgnoreCase(servletRequest.getMethod()) - && servletRequest.getContentType() != null - && servletRequest.getContentType().contains("application/json")) { - try { - // json인 경우는 Wrapper를 통해 가져오기 - resultBody.append(getBodyData(contentWrapper)); - - } catch (Exception e) { - resultBody.append("cannot read JSON body ").append(e.toString()); - } - } - - // Multipart form-data - if ("POST".equalsIgnoreCase(servletRequest.getMethod()) - && servletRequest.getContentType() != null - && servletRequest.getContentType().startsWith("multipart/form-data")) { - resultBody.append("multipart/form-data request"); - } - - return resultBody.toString(); - } - - // JSON Body 읽기 - public static String getBodyData(ContentCachingRequestWrapper request) { - byte[] buf = request.getContentAsByteArray(); - if (buf.length == 0) { - return null; - } - try { - return new String(buf, request.getCharacterEncoding()); - } catch (UnsupportedEncodingException e) { - return new String(buf); - } - } - - // ApiResponse 의 Status가 2xx 범위이면 SUCCESS, 아니면 FAILED - public static EventStatus isSuccessFail(ApiResponseDto apiResponse) { - return apiResponse.getHttpStatus().is2xxSuccessful() ? EventStatus.SUCCESS : EventStatus.FAILED; - } - - public static String getUriMenuInfo(List menuList, String uri) { - - String normalizedUri = uri.replace("/api", ""); - MenuDto.Basic basic = - menuList.stream() - .filter( - menu -> menu.getMenuUrl() != null && normalizedUri.startsWith(menu.getMenuUrl())) - .max(Comparator.comparingInt(m -> m.getMenuUrl().length())) - .orElse(null); - - return basic != null ? basic.getMenuUid() : "SYSTEM"; - } - - public static String cutRequestBody(String value) { - int MAX_LEN = 255; - if (value == null) { - return null; - } - return value.length() <= MAX_LEN ? value : value.substring(0, MAX_LEN); - } -} diff --git a/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/postgres/entity/AuditLogEntity.java b/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/postgres/entity/AuditLogEntity.java deleted file mode 100644 index d6c5693..0000000 --- a/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/postgres/entity/AuditLogEntity.java +++ /dev/null @@ -1,143 +0,0 @@ -package com.kamco.cd.kamcoback.postgres.entity; - -import com.kamco.cd.kamcoback.log.dto.AuditLogDto; -import com.kamco.cd.kamcoback.log.dto.EventStatus; -import com.kamco.cd.kamcoback.log.dto.EventType; -import com.kamco.cd.kamcoback.postgres.CommonCreateEntity; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.Table; -import java.util.UUID; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Entity -@Getter -@NoArgsConstructor(access = AccessLevel.PROTECTED) -@Table(name = "tb_audit_log") -public class AuditLogEntity extends CommonCreateEntity { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "audit_log_uid", nullable = false) - private Long id; - - @Column(name = "user_uid") - private Long userUid; - - @Enumerated(EnumType.STRING) - private EventType eventType; - - @Enumerated(EnumType.STRING) - private EventStatus eventStatus; - - @Column(name = "menu_uid") - private String menuUid; - - @Column(name = "ip_address") - private String ipAddress; - - @Column(name = "request_uri") - private String requestUri; - - @Column(name = "request_body") - private String requestBody; - - @Column(name = "error_log_uid") - private Long errorLogUid; - - @Column(name = "download_uuid") - private UUID downloadUuid; - - @Column(name = "login_attempt_id") - private String loginAttemptId; - - public AuditLogEntity( - Long userUid, - EventType eventType, - EventStatus eventStatus, - String menuUid, - String ipAddress, - String requestUri, - String requestBody, - Long errorLogUid, - UUID downloadUuid, - String loginAttemptId) { - this.userUid = userUid; - this.eventType = eventType; - this.eventStatus = eventStatus; - this.menuUid = menuUid; - this.ipAddress = ipAddress; - this.requestUri = requestUri; - this.requestBody = requestBody; - this.errorLogUid = errorLogUid; - this.downloadUuid = downloadUuid; - this.loginAttemptId = loginAttemptId; - } - - /** 파일 다운로드 이력 생성 */ - public static AuditLogEntity forFileDownload( - Long userId, - String requestUri, - String menuUid, - String ip, - int httpStatus, - UUID downloadUuid) { - - return new AuditLogEntity( - userId, - EventType.DOWNLOAD, // 이벤트 타입 고정 - httpStatus < 400 ? EventStatus.SUCCESS : EventStatus.FAILED, // 성공 여부 - menuUid, - ip, - requestUri, - null, // requestBody 없음 - null, // errorLogUid 없음 - downloadUuid, - null // loginAttemptId 없음 - ); - } - - public AuditLogDto.Basic toDto() { - return new AuditLogDto.Basic( - this.id, - this.userUid, - this.eventType, - this.eventStatus, - this.menuUid, - this.ipAddress, - this.requestUri, - this.requestBody, - this.errorLogUid, - super.getCreatedDate()); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append(this.id) - .append("\n") - .append(this.userUid) - .append("\n") - .append(this.eventType) - .append("\n") - .append(this.eventStatus) - .append("\n") - .append(this.menuUid) - .append("\n") - .append(this.ipAddress) - .append("\n") - .append(this.requestUri) - .append("\n") - .append(this.requestBody) - .append("\n") - .append(this.errorLogUid); - return sb.toString(); - } -} diff --git a/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/postgres/repository/GukYuinPnuJobRepository.java b/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinPnuJobRepository.java similarity index 100% rename from gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/postgres/repository/GukYuinPnuJobRepository.java rename to gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinPnuJobRepository.java diff --git a/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/postgres/repository/GukYuinPnuJobRepositoryCustom.java b/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinPnuJobRepositoryCustom.java similarity index 100% rename from gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/postgres/repository/GukYuinPnuJobRepositoryCustom.java rename to gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinPnuJobRepositoryCustom.java diff --git a/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/postgres/repository/GukYuinPnuJobRepositoryImpl.java b/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinPnuJobRepositoryImpl.java similarity index 100% rename from gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/postgres/repository/GukYuinPnuJobRepositoryImpl.java rename to gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinPnuJobRepositoryImpl.java diff --git a/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/postgres/repository/log/AuditLogRepository.java b/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/postgres/repository/log/AuditLogRepository.java deleted file mode 100644 index 803c0e2..0000000 --- a/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/postgres/repository/log/AuditLogRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.kamco.cd.kamcoback.postgres.repository.log; - -import com.kamco.cd.kamcoback.postgres.entity.AuditLogEntity; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface AuditLogRepository - extends JpaRepository, AuditLogRepositoryCustom {} diff --git a/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/postgres/repository/log/AuditLogRepositoryCustom.java b/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/postgres/repository/log/AuditLogRepositoryCustom.java deleted file mode 100644 index 2ab99ad..0000000 --- a/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/postgres/repository/log/AuditLogRepositoryCustom.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.kamco.cd.kamcoback.postgres.repository.log; - -import com.kamco.cd.kamcoback.log.dto.AuditLogDto; -import com.kamco.cd.kamcoback.log.dto.AuditLogDto.DownloadReq; -import java.time.LocalDate; -import org.springframework.data.domain.Page; - -public interface AuditLogRepositoryCustom { - - Page findLogByDaily( - AuditLogDto.searchReq searchReq, LocalDate startDate, LocalDate endDate); - - Page findLogByMenu( - AuditLogDto.searchReq searchReq, String searchValue); - - Page findLogByAccount( - AuditLogDto.searchReq searchReq, String searchValue); - - Page findDownloadLog( - AuditLogDto.searchReq searchReq, DownloadReq downloadReq); - - Page findLogByDailyResult( - AuditLogDto.searchReq searchReq, LocalDate logDate); - - Page findLogByMenuResult(AuditLogDto.searchReq searchReq, String menuId); - - Page findLogByAccountResult( - AuditLogDto.searchReq searchReq, Long accountId); -} diff --git a/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/postgres/repository/log/AuditLogRepositoryImpl.java b/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/postgres/repository/log/AuditLogRepositoryImpl.java deleted file mode 100644 index 3ad0311..0000000 --- a/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/postgres/repository/log/AuditLogRepositoryImpl.java +++ /dev/null @@ -1,523 +0,0 @@ -package com.kamco.cd.kamcoback.postgres.repository.log; - -import static com.kamco.cd.kamcoback.postgres.entity.QAuditLogEntity.auditLogEntity; -import static com.kamco.cd.kamcoback.postgres.entity.QErrorLogEntity.errorLogEntity; -import static com.kamco.cd.kamcoback.postgres.entity.QMemberEntity.memberEntity; -import static com.kamco.cd.kamcoback.postgres.entity.QMenuEntity.menuEntity; - -import com.kamco.cd.kamcoback.log.dto.AuditLogDto; -import com.kamco.cd.kamcoback.log.dto.AuditLogDto.DownloadReq; -import com.kamco.cd.kamcoback.log.dto.ErrorLogDto; -import com.kamco.cd.kamcoback.log.dto.EventStatus; -import com.kamco.cd.kamcoback.log.dto.EventType; -import com.kamco.cd.kamcoback.postgres.entity.AuditLogEntity; -import com.kamco.cd.kamcoback.postgres.entity.QMenuEntity; -import com.querydsl.core.BooleanBuilder; -import com.querydsl.core.types.Projections; -import com.querydsl.core.types.dsl.BooleanExpression; -import com.querydsl.core.types.dsl.CaseBuilder; -import com.querydsl.core.types.dsl.Expressions; -import com.querydsl.core.types.dsl.NumberExpression; -import com.querydsl.core.types.dsl.StringExpression; -import com.querydsl.jpa.impl.JPAQueryFactory; -import io.micrometer.common.util.StringUtils; -import java.time.LocalDate; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.List; -import java.util.Objects; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.Pageable; -import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport; - -public class AuditLogRepositoryImpl extends QuerydslRepositorySupport - implements AuditLogRepositoryCustom { - - private static final ZoneId ZONE = ZoneId.of("Asia/Seoul"); - private final JPAQueryFactory queryFactory; - private final StringExpression NULL_STRING = Expressions.stringTemplate("cast(null as text)"); - - public AuditLogRepositoryImpl(JPAQueryFactory queryFactory) { - super(AuditLogEntity.class); - this.queryFactory = queryFactory; - } - - @Override - public Page findLogByDaily( - AuditLogDto.searchReq searchReq, LocalDate startDate, LocalDate endDate) { - StringExpression groupDateTime = - Expressions.stringTemplate("to_char({0}, 'YYYY-MM-DD')", auditLogEntity.createdDate); - - Pageable pageable = searchReq.toPageable(); - List foundContent = - queryFactory - .select( - Projections.constructor( - AuditLogDto.DailyAuditList.class, - readCount().as("readCount"), - cudCount().as("cudCount"), - printCount().as("printCount"), - downloadCount().as("downloadCount"), - auditLogEntity.count().as("totalCount"), - groupDateTime.as("baseDate"))) - .from(auditLogEntity) - .where(eventEndedAtBetween(startDate, endDate)) - .groupBy(groupDateTime) - .offset(pageable.getOffset()) - .limit(pageable.getPageSize()) - .orderBy(groupDateTime.desc()) - .fetch(); - - Long countQuery = - queryFactory - .select(groupDateTime.countDistinct()) - .from(auditLogEntity) - .where(eventEndedAtBetween(startDate, endDate)) - .fetchOne(); - - return new PageImpl<>(foundContent, pageable, countQuery); - } - - @Override - public Page findLogByMenu( - AuditLogDto.searchReq searchReq, String searchValue) { - Pageable pageable = searchReq.toPageable(); - List foundContent = - queryFactory - .select( - Projections.constructor( - AuditLogDto.MenuAuditList.class, - auditLogEntity.menuUid.as("menuId"), - menuEntity.menuNm.max().as("menuName"), - readCount().as("readCount"), - cudCount().as("cudCount"), - printCount().as("printCount"), - downloadCount().as("downloadCount"), - auditLogEntity.count().as("totalCount"))) - .from(auditLogEntity) - .leftJoin(menuEntity) - .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) - .where(auditLogEntity.menuUid.ne("SYSTEM"), menuNameEquals(searchValue)) - .groupBy(auditLogEntity.menuUid) - .offset(pageable.getOffset()) - .limit(pageable.getPageSize()) - .orderBy(auditLogEntity.createdDate.max().desc()) - .fetch(); - - // count query group by 를 지정하면 하나의 row 가 아니라 그룹핑된 여러 row 가 나올 수 있다. - // select query 의 group by 대상의 컬럼을 count query 에선 select distinct 로 처리 한다. - Long countQuery = - queryFactory - .select(auditLogEntity.menuUid.countDistinct()) - .from(auditLogEntity) - .leftJoin(menuEntity) - .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) - .where(menuNameEquals(searchValue)) - .fetchOne(); - - return new PageImpl<>(foundContent, pageable, countQuery); - } - - @Override - public Page findLogByAccount( - AuditLogDto.searchReq searchReq, String searchValue) { - Pageable pageable = searchReq.toPageable(); - List foundContent = - queryFactory - .select( - Projections.constructor( - AuditLogDto.UserAuditList.class, - auditLogEntity.userUid.as("accountId"), - memberEntity.employeeNo.as("loginId"), - memberEntity.name.as("username"), - readCount().as("readCount"), - cudCount().as("cudCount"), - printCount().as("printCount"), - downloadCount().as("downloadCount"), - auditLogEntity.count().as("totalCount"))) - .from(auditLogEntity) - .leftJoin(memberEntity) - .on(auditLogEntity.userUid.eq(memberEntity.id)) - .where(auditLogEntity.userUid.isNotNull(), loginIdOrUsernameContains(searchValue)) - .groupBy(auditLogEntity.userUid, memberEntity.employeeNo, memberEntity.name) - .offset(pageable.getOffset()) - .limit(pageable.getPageSize()) - // .orderBy(auditLogEntity.eventEndedAt.max().desc()) - .fetch(); - - Long countQuery = - queryFactory - .select(auditLogEntity.userUid.countDistinct()) - .from(auditLogEntity) - .leftJoin(memberEntity) - .on(auditLogEntity.userUid.eq(memberEntity.id)) - .where(loginIdOrUsernameContains(searchValue)) - .fetchOne(); - - return new PageImpl<>(foundContent, pageable, countQuery); - } - - @Override - public Page findDownloadLog( - AuditLogDto.searchReq searchReq, DownloadReq req) { - Pageable pageable = searchReq.toPageable(); - - BooleanBuilder whereBuilder = new BooleanBuilder(); - - whereBuilder.and(auditLogEntity.eventStatus.ne(EventStatus.valueOf("FAILED"))); - whereBuilder.and(auditLogEntity.eventType.eq(EventType.valueOf("DOWNLOAD"))); - - if (req.getMenuId() != null && !req.getMenuId().isEmpty()) { - whereBuilder.and(auditLogEntity.menuUid.eq(req.getMenuId())); - } - - if (req.getUuid() != null) { - whereBuilder.and(auditLogEntity.requestUri.contains("/api/inference/download/")); - whereBuilder.and(auditLogEntity.requestUri.endsWith(String.valueOf(req.getUuid()))); - } - - if (req.getSearchValue() != null && !req.getSearchValue().isEmpty()) { - whereBuilder.and( - memberEntity - .name - .contains(req.getSearchValue()) - .or(memberEntity.employeeNo.contains(req.getSearchValue()))); - } - - List foundContent = - queryFactory - .select( - Projections.constructor( - AuditLogDto.DownloadRes.class, - memberEntity.name, - memberEntity.employeeNo, - auditLogEntity.createdDate.as("downloadDttm"))) - .from(auditLogEntity) - .leftJoin(memberEntity) - .on(auditLogEntity.userUid.eq(memberEntity.id)) - .where(whereBuilder, createdDateBetween(req.getStartDate(), req.getEndDate())) - .offset(pageable.getOffset()) - .limit(pageable.getPageSize()) - .orderBy(auditLogEntity.createdDate.desc()) - .fetch(); - - Long countQuery = - queryFactory - .select(auditLogEntity.userUid.countDistinct()) - .from(auditLogEntity) - .leftJoin(memberEntity) - .on(auditLogEntity.userUid.eq(memberEntity.id)) - .where(whereBuilder, createdDateBetween(req.getStartDate(), req.getEndDate())) - .fetchOne(); - - return new PageImpl<>(foundContent, pageable, countQuery); - } - - @Override - public Page findLogByDailyResult( - AuditLogDto.searchReq searchReq, LocalDate logDate) { - Pageable pageable = searchReq.toPageable(); - QMenuEntity parent = new QMenuEntity("parent"); - // 1depth menu name - StringExpression parentMenuName = - new CaseBuilder() - .when(parent.menuUid.isNull()) - .then(menuEntity.menuNm) - .otherwise(parent.menuNm); - - // 2depth menu name - StringExpression menuName = - new CaseBuilder() - .when(parent.menuUid.isNull()) - .then(NULL_STRING) - .otherwise(menuEntity.menuNm); - - List foundContent = - queryFactory - .select( - Projections.constructor( - AuditLogDto.DailyDetail.class, - auditLogEntity.id.as("logId"), - memberEntity.name.as("userName"), - memberEntity.employeeNo.as("loginId"), - menuEntity.menuNm.as("menuName"), - auditLogEntity.eventType.as("eventType"), - Expressions.stringTemplate( - "to_char({0}, 'YYYY-MM-DD HH24:MI')", auditLogEntity.createdDate) - .as("logDateTime"), - Projections.constructor( - AuditLogDto.LogDetail.class, - Expressions.constant("한국자산관리공사"), // serviceName - parentMenuName.as("parentMenuName"), - menuName, - menuEntity.menuUrl.as("menuUrl"), - menuEntity.description.as("menuDescription"), - menuEntity.menuOrder.as("sortOrder"), - menuEntity.isUse.as("used")))) // TODO - .from(auditLogEntity) - .leftJoin(menuEntity) - .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) - .leftJoin(menuEntity.parent, parent) - .leftJoin(memberEntity) - .on(auditLogEntity.userUid.eq(memberEntity.id)) - .where(eventEndedAtEqDate(logDate)) - .offset(pageable.getOffset()) - .limit(pageable.getPageSize()) - .orderBy(auditLogEntity.createdDate.desc()) - .fetch(); - - Long countQuery = - queryFactory - .select(auditLogEntity.id.countDistinct()) - .from(auditLogEntity) - .leftJoin(menuEntity) - .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) - .leftJoin(menuEntity.parent, parent) - .leftJoin(memberEntity) - .on(auditLogEntity.userUid.eq(memberEntity.id)) - .where(eventEndedAtEqDate(logDate)) - .fetchOne(); - - return new PageImpl<>(foundContent, pageable, countQuery); - } - - @Override - public Page findLogByMenuResult( - AuditLogDto.searchReq searchReq, String menuUid) { - Pageable pageable = searchReq.toPageable(); - QMenuEntity parent = new QMenuEntity("parent"); - // 1depth menu name - StringExpression parentMenuName = - new CaseBuilder() - .when(parent.menuUid.isNull()) - .then(menuEntity.menuNm) - .otherwise(parent.menuNm); - - // 2depth menu name - StringExpression menuName = - new CaseBuilder() - .when(parent.menuUid.isNull()) - .then(NULL_STRING) - .otherwise(menuEntity.menuNm); - - List foundContent = - queryFactory - .select( - Projections.constructor( - AuditLogDto.MenuDetail.class, - auditLogEntity.id.as("logId"), - Expressions.stringTemplate( - "to_char({0}, 'YYYY-MM-DD HH24:MI')", auditLogEntity.createdDate) - .as("logDateTime"), - memberEntity.name.as("userName"), - memberEntity.employeeNo.as("loginId"), - auditLogEntity.eventType.as("eventType"), - Projections.constructor( - AuditLogDto.LogDetail.class, - Expressions.constant("한국자산관리공사"), // serviceName - parentMenuName.as("parentMenuName"), - menuName, - menuEntity.menuUrl.as("menuUrl"), - menuEntity.description.as("menuDescription"), - menuEntity.menuOrder.as("sortOrder"), - menuEntity.isUse.as("used")))) - .from(auditLogEntity) - .leftJoin(menuEntity) - .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) - .leftJoin(menuEntity.parent, parent) - .leftJoin(memberEntity) - .on(auditLogEntity.userUid.eq(memberEntity.id)) - .where(menuUidEq(menuUid)) - .offset(pageable.getOffset()) - .limit(pageable.getPageSize()) - .orderBy(auditLogEntity.createdDate.desc()) - .fetch(); - - Long countQuery = - queryFactory - .select(auditLogEntity.id.countDistinct()) - .from(auditLogEntity) - .leftJoin(menuEntity) - .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) - .leftJoin(menuEntity.parent, parent) - .leftJoin(memberEntity) - .on(auditLogEntity.userUid.eq(memberEntity.id)) - .where(menuUidEq(menuUid)) - .fetchOne(); - - return new PageImpl<>(foundContent, pageable, countQuery); - } - - @Override - public Page findLogByAccountResult( - AuditLogDto.searchReq searchReq, Long userUid) { - Pageable pageable = searchReq.toPageable(); - QMenuEntity parent = new QMenuEntity("parent"); - // 1depth menu name - StringExpression parentMenuName = - new CaseBuilder() - .when(parent.menuUid.isNull()) - .then(menuEntity.menuNm) - .otherwise(parent.menuNm); - - // 2depth menu name - StringExpression menuName = - new CaseBuilder() - .when(parent.menuUid.isNull()) - .then(NULL_STRING) - .otherwise(menuEntity.menuNm); - - List foundContent = - queryFactory - .select( - Projections.constructor( - AuditLogDto.UserDetail.class, - auditLogEntity.id.as("logId"), - Expressions.stringTemplate( - "to_char({0}, 'YYYY-MM-DD HH24:MI')", auditLogEntity.createdDate) - .as("logDateTime"), - menuEntity.menuNm.as("menuName"), - auditLogEntity.eventType.as("eventType"), - Projections.constructor( - AuditLogDto.LogDetail.class, - Expressions.constant("한국자산관리공사"), // serviceName - parentMenuName.as("parentMenuName"), - menuName, - menuEntity.menuUrl.as("menuUrl"), - menuEntity.description.as("menuDescription"), - menuEntity.menuOrder.as("sortOrder"), - menuEntity.isUse.as("used")))) - .from(auditLogEntity) - .leftJoin(menuEntity) - .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) - .leftJoin(menuEntity.parent, parent) - .leftJoin(memberEntity) - .on(auditLogEntity.userUid.eq(memberEntity.id)) - .where(userUidEq(userUid)) - .offset(pageable.getOffset()) - .limit(pageable.getPageSize()) - .orderBy(auditLogEntity.createdDate.desc()) - .fetch(); - - Long countQuery = - queryFactory - .select(auditLogEntity.id.countDistinct()) - .from(auditLogEntity) - .leftJoin(menuEntity) - .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) - .leftJoin(menuEntity.parent, parent) - .leftJoin(memberEntity) - .on(auditLogEntity.userUid.eq(memberEntity.id)) - .where(userUidEq(userUid)) - .fetchOne(); - - return new PageImpl<>(foundContent, pageable, countQuery); - } - - private BooleanExpression eventEndedAtBetween(LocalDate startDate, LocalDate endDate) { - if (Objects.isNull(startDate) || Objects.isNull(endDate)) { - return null; - } - ZoneId zoneId = ZoneId.of("Asia/Seoul"); - ZonedDateTime startDateTime = startDate.atStartOfDay(zoneId); - ZonedDateTime endDateTime = endDate.plusDays(1).atStartOfDay(zoneId); - return auditLogEntity - .createdDate - .goe(startDateTime) - .and(auditLogEntity.createdDate.lt(endDateTime)); - } - - private BooleanExpression createdDateBetween(LocalDate startDate, LocalDate endDate) { - if (startDate == null || endDate == null) { - return null; - } - ZonedDateTime start = startDate.atStartOfDay(ZONE); - ZonedDateTime endExclusive = endDate.plusDays(1).atStartOfDay(ZONE); - - return auditLogEntity.createdDate.goe(start).and(auditLogEntity.createdDate.lt(endExclusive)); - } - - private BooleanExpression menuNameEquals(String searchValue) { - if (StringUtils.isBlank(searchValue)) { - return null; - } - return menuEntity.menuNm.contains(searchValue); - } - - private BooleanExpression loginIdOrUsernameContains(String searchValue) { - if (StringUtils.isBlank(searchValue)) { - return null; - } - return memberEntity - .employeeNo - .contains(searchValue) - .or(memberEntity.name.contains(searchValue)); - } - - private BooleanExpression eventStatusEqFailed() { - return auditLogEntity.eventStatus.eq(EventStatus.FAILED); - } - - private BooleanExpression eventTypeEq(EventType eventType) { - if (Objects.isNull(eventType)) { - return null; - } - return auditLogEntity.eventType.eq(eventType); - } - - private BooleanExpression errorLevelEq(ErrorLogDto.LogErrorLevel level) { - if (Objects.isNull(level)) { - return null; - } - return errorLogEntity.errorLevel.eq(ErrorLogDto.LogErrorLevel.valueOf(level.name())); - } - - private BooleanExpression eventEndedAtEqDate(LocalDate logDate) { - ZoneId zoneId = ZoneId.of("Asia/Seoul"); - ZonedDateTime start = logDate.atStartOfDay(zoneId); - ZonedDateTime end = logDate.plusDays(1).atStartOfDay(zoneId); - - return auditLogEntity.createdDate.goe(start).and(auditLogEntity.createdDate.lt(end)); - } - - private BooleanExpression menuUidEq(String menuUid) { - return auditLogEntity.menuUid.eq(menuUid); - } - - private BooleanExpression userUidEq(Long userUid) { - return auditLogEntity.userUid.eq(userUid); - } - - private NumberExpression readCount() { - return new CaseBuilder() - .when(auditLogEntity.eventType.in(EventType.LIST, EventType.DETAIL)) - .then(1) - .otherwise(0) - .sum(); - } - - private NumberExpression cudCount() { - return new CaseBuilder() - .when(auditLogEntity.eventType.in(EventType.ADDED, EventType.MODIFIED, EventType.REMOVE)) - .then(1) - .otherwise(0) - .sum(); - } - - private NumberExpression printCount() { - return new CaseBuilder() - .when(auditLogEntity.eventType.eq(EventType.OTHER)) - .then(1) - .otherwise(0) - .sum(); - } - - private NumberExpression downloadCount() { - return new CaseBuilder() - .when(auditLogEntity.eventType.eq(EventType.DOWNLOAD)) - .then(1) - .otherwise(0) - .sum(); - } -} diff --git a/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/service/GukYuinApiPnuJobService.java b/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/service/GukYuinApiPnuJobService.java index e653a61..eac9a52 100644 --- a/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/service/GukYuinApiPnuJobService.java +++ b/gukyuin/pnu-update/src/main/java/com/kamco/cd/kamcoback/service/GukYuinApiPnuJobService.java @@ -1,8 +1,6 @@ package com.kamco.cd.kamcoback.scheduler.service; import com.kamco.cd.kamcoback.common.utils.NetUtils; -import com.kamco.cd.kamcoback.common.utils.UserUtil; -import com.kamco.cd.kamcoback.config.api.ApiLogFunction; 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; @@ -12,11 +10,7 @@ import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LearnKeyDto; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.ResultDto; import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus; -import com.kamco.cd.kamcoback.log.dto.EventStatus; -import com.kamco.cd.kamcoback.log.dto.EventType; import com.kamco.cd.kamcoback.postgres.core.GukYuinPnuJobCoreService; -import com.kamco.cd.kamcoback.postgres.entity.AuditLogEntity; -import com.kamco.cd.kamcoback.postgres.repository.log.AuditLogRepository; import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; @@ -24,8 +18,6 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpMethod; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; @Log4j2 @Service @@ -35,9 +27,6 @@ public class GukYuinApiPnuJobService { private final GukYuinPnuJobCoreService gukYuinPnuJobCoreService; private final ExternalHttpClient externalHttpClient; private final NetUtils netUtils = new NetUtils(); - private final AuditLogRepository auditLogRepository; - - private final UserUtil userUtil; @Value("${spring.profiles.active}") private String profile; @@ -97,14 +86,6 @@ public class GukYuinApiPnuJobService { externalHttpClient.call( url, HttpMethod.GET, null, netUtils.jsonHeaders(), ChngDetectMastDto.ResultDto.class); - this.insertGukyuinAuditLog( - EventType.DETAIL.getId(), - netUtils.getLocalIP(), - userUtil.getId(), - url.replace(gukyuinUrl, ""), - null, - response.body().getSuccess()); - ResultDto result = response.body(); if (result == null || result.getResult() == null || result.getResult().isEmpty()) { return succCnt; @@ -161,14 +142,6 @@ public class GukYuinApiPnuJobService { } } - this.insertGukyuinAuditLog( - EventType.LIST.getId(), - netUtils.getLocalIP(), - userUtil.getId(), - url.replace(gukyuinUrl, ""), - null, - response.body().getSuccess()); - ResultContDto cont = response.body(); if (cont == null || cont.getResult().isEmpty()) { return result; // 외부 API 이상 방어 @@ -188,33 +161,4 @@ public class GukYuinApiPnuJobService { return result; } - - @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) - public void insertGukyuinAuditLog( - String actionType, - String myIp, - Long userUid, - String requestUri, - Object requestBody, - boolean successFail) { - try { - AuditLogEntity log = - new AuditLogEntity( - userUid, - EventType.fromName(actionType), - successFail ? EventStatus.SUCCESS : EventStatus.FAILED, - "GUKYUIN", // 메뉴도 국유인으로 하나 따기 - myIp, - requestUri, - requestBody == null ? null : ApiLogFunction.cutRequestBody(requestBody.toString()), - null, - null, - null); - auditLogRepository.save(log); - - } catch (Exception e) { - log.error(e.getMessage()); - throw e; - } - } } diff --git a/gukyuin/pnu-update/dev.backup b/gukyuin/state-check/.gitkeep similarity index 100% rename from gukyuin/pnu-update/dev.backup rename to gukyuin/state-check/.gitkeep diff --git a/gukyuin/state-check/.gradle/8.14/checksums/checksums.lock b/gukyuin/state-check/.gradle/8.14/checksums/checksums.lock new file mode 100644 index 0000000..f939e90 Binary files /dev/null and b/gukyuin/state-check/.gradle/8.14/checksums/checksums.lock differ diff --git a/gukyuin/state-check/.gradle/8.14/executionHistory/executionHistory.bin b/gukyuin/state-check/.gradle/8.14/executionHistory/executionHistory.bin new file mode 100644 index 0000000..da268de Binary files /dev/null and b/gukyuin/state-check/.gradle/8.14/executionHistory/executionHistory.bin differ diff --git a/gukyuin/state-check/.gradle/8.14/executionHistory/executionHistory.lock b/gukyuin/state-check/.gradle/8.14/executionHistory/executionHistory.lock new file mode 100644 index 0000000..860413d Binary files /dev/null and b/gukyuin/state-check/.gradle/8.14/executionHistory/executionHistory.lock differ diff --git a/gukyuin/state-check/.gradle/8.14/fileChanges/last-build.bin b/gukyuin/state-check/.gradle/8.14/fileChanges/last-build.bin new file mode 100644 index 0000000..f76dd23 Binary files /dev/null and b/gukyuin/state-check/.gradle/8.14/fileChanges/last-build.bin differ diff --git a/gukyuin/state-check/.gradle/8.14/fileHashes/fileHashes.bin b/gukyuin/state-check/.gradle/8.14/fileHashes/fileHashes.bin new file mode 100644 index 0000000..8ce2280 Binary files /dev/null and b/gukyuin/state-check/.gradle/8.14/fileHashes/fileHashes.bin differ diff --git a/gukyuin/state-check/.gradle/8.14/fileHashes/fileHashes.lock b/gukyuin/state-check/.gradle/8.14/fileHashes/fileHashes.lock new file mode 100644 index 0000000..07a720f Binary files /dev/null and b/gukyuin/state-check/.gradle/8.14/fileHashes/fileHashes.lock differ diff --git a/gukyuin/state-check/.gradle/8.14/fileHashes/resourceHashesCache.bin b/gukyuin/state-check/.gradle/8.14/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000..88dbc81 Binary files /dev/null and b/gukyuin/state-check/.gradle/8.14/fileHashes/resourceHashesCache.bin differ diff --git a/gukyuin/state-check/.gradle/8.14/gc.properties b/gukyuin/state-check/.gradle/8.14/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/gukyuin/state-check/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/gukyuin/state-check/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000..cc77cd4 Binary files /dev/null and b/gukyuin/state-check/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/gukyuin/state-check/.gradle/buildOutputCleanup/cache.properties b/gukyuin/state-check/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000..fddf220 --- /dev/null +++ b/gukyuin/state-check/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Mon Feb 02 19:50:45 KST 2026 +gradle.version=8.14 diff --git a/gukyuin/state-check/.gradle/buildOutputCleanup/outputFiles.bin b/gukyuin/state-check/.gradle/buildOutputCleanup/outputFiles.bin new file mode 100644 index 0000000..f24140e Binary files /dev/null and b/gukyuin/state-check/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/gukyuin/state-check/.gradle/file-system.probe b/gukyuin/state-check/.gradle/file-system.probe new file mode 100644 index 0000000..a7af4d2 Binary files /dev/null and b/gukyuin/state-check/.gradle/file-system.probe differ diff --git a/gukyuin/state-check/.gradle/vcs-1/gc.properties b/gukyuin/state-check/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/gukyuin/state-check/CODE_STYLE_SETUP.md b/gukyuin/state-check/CODE_STYLE_SETUP.md new file mode 100644 index 0000000..2c07ff5 --- /dev/null +++ b/gukyuin/state-check/CODE_STYLE_SETUP.md @@ -0,0 +1,112 @@ +# Code Style 설정 가이드 + +이 문서는 프로젝트에서 Google Java Style을 자동으로 적용하기 위한 설정 가이드입니다. + +## 자동 포맷팅 구성 + +### 1. 커밋 시점 자동 포맷팅 (Git Pre-commit Hook) + +커밋 전에 자동으로 코드를 포맷팅하고 스테이징합니다. + +**설정 완료:** `.git/hooks/pre-commit` 파일이 자동으로 실행됩니다. + +**동작 방식:** +- 커밋 시도 시 `./gradlew spotlessApply` 자동 실행 +- 스테이징된 Java 파일을 자동으로 포맷팅 +- 포맷팅된 파일을 자동으로 다시 스테이징 +- 포맷팅이 완료되면 커밋 진행 + +**장점:** +- 수동으로 `spotlessApply`를 실행할 필요 없음 +- 항상 일관된 코드 스타일 유지 +- 포맷팅 누락 방지 + +### 2. IntelliJ IDEA 저장 시점 자동 포맷팅 + +#### 방법 1: Code Style 설정 임포트 (권장) + +1. **IntelliJ IDEA 열기** +2. **Settings/Preferences** (Mac: `⌘,` / Windows: `Ctrl+Alt+S`) +3. **Editor > Code Style > Java** +4. **⚙️ (톱니바퀴)** 클릭 > **Import Scheme > IntelliJ IDEA code style XML** +5. 프로젝트 루트의 `intellij-java-google-style.xml` 파일 선택 +6. **OK** 클릭 + +#### 방법 2: 저장 시 자동 포맷팅 활성화 + + +**Option A: Actions on Save 설정** + +1. **Settings/Preferences** > **Tools > Actions on Save** +2. 다음 옵션들을 활성화: + - ✅ **Reformat code** + - ✅ **Optimize imports** + - ✅ **Rearrange code** (선택사항) +3. **Changed lines** 또는 **Whole file** 선택 +4. **OK** 클릭 + +**Option B: Save Actions Plugin 사용 (더 많은 옵션)** + +1. **Settings/Preferences** > **Plugins** +2. **Marketplace**에서 "Save Actions" 검색 및 설치 +3. **Settings/Preferences** > **Other Settings > Save Actions** +4. 다음 옵션 활성화: + - ✅ **Activate save actions on save** + - ✅ **Reformat file** + - ✅ **Optimize imports** + - ✅ **Rearrange fields and methods** (선택사항) + +### 3. Gradle Spotless Plugin 수동 실행 + +#### 코드 포맷팅 체크 +```bash +# 포맷팅 문제 확인만 (수정하지 않음) +./gradlew spotlessCheck +``` + +#### 코드 자동 포맷팅 +```bash +# 모든 Java 파일 자동 포맷팅 적용 +./gradlew spotlessApply +``` + +#### 빌드 시 자동 체크 +```bash +# 빌드 전에 자동으로 spotlessCheck 실행됨 +./gradlew build +``` + +## 코드 스타일 규칙 + +프로젝트는 **Google Java Style Guide** 기반으로 다음 규칙을 따릅니다: + +- **Indentation**: 2 spaces (탭 아님) +- **Line Length**: 180 characters +- **Line Endings**: LF (Unix-style) +- **Charset**: UTF-8 +- **Import Order**: Static imports → 빈 줄 → Regular imports +- **Braces**: 모든 if, for, while, do 문에 중괄호 필수 + +## 문제 해결 + +### Pre-commit hook이 실행되지 않는 경우 +```bash +# 실행 권한 확인 및 부여 +chmod +x .git/hooks/pre-commit +``` + +### Spotless 플러그인이 동작하지 않는 경우 +```bash +# Gradle 의존성 다시 다운로드 +./gradlew clean build --refresh-dependencies +``` + +### IntelliJ 포맷팅이 다르게 적용되는 경우 +1. `intellij-java-google-style.xml` 다시 임포트 +2. **File > Invalidate Caches** > **Invalidate and Restart** + +## 추가 정보 + +- **Google Java Style Guide**: https://google.github.io/styleguide/javaguide.html +- **Spotless Plugin**: https://github.com/diffplug/spotless +- **IntelliJ Code Style**: https://www.jetbrains.com/help/idea/code-style.html diff --git a/gukyuin/state-check/COMMON_CODE_CACHE_REDIS.md b/gukyuin/state-check/COMMON_CODE_CACHE_REDIS.md new file mode 100644 index 0000000..fbff1ee --- /dev/null +++ b/gukyuin/state-check/COMMON_CODE_CACHE_REDIS.md @@ -0,0 +1,282 @@ +# 공통코드 Redis 캐시 시스템 - DanielLee + +## 요구사항 검토 + +### 1. **API를 통해 공통코드 제공** +- **구현 완료**: `CommonCodeApiController`에서 전체 공통코드 조회 API 제공 + ``` + GET /api/code + → 모든 공통코드 조회 + ``` +- **추가 구현**: 캐시 갱신 및 상태 확인 API + ``` + POST /api/code/cache/refresh → 캐시 갱신 + GET /api/code/cache/status → 캐시 상태 확인 + ``` + +--- + +### 2. **애플리케이션 로딩시 Redis 캐시에 올리기** +- **구현 완료**: `CommonCodeCacheManager` 클래스 생성 + +#### 초기화 메커니즘 +```java +@Component +@RequiredArgsConstructor +public class CommonCodeCacheManager { + + @EventListener(ApplicationReadyEvent.class) + public void initializeCommonCodeCache() { + // 애플리케이션 완전히 시작된 후 공통코드를 Redis에 미리 로드 + List allCommonCodes = commonCodeService.getFindAll(); + // @Cacheable이 자동으로 Redis에 캐시함 + } +} +``` + +#### 동작 흐름 +1. 애플리케이션 시작 +2. Spring이 모든 Bean 생성 완료 (`ApplicationReadyEvent` 발생) +3. `CommonCodeCacheManager.initializeCommonCodeCache()` 실행 +4. `commonCodeService.getFindAll()` 호출 (DB에서 조회) +5. `@Cacheable(value = "commonCodes")` 에노테이션이 결과를 Redis에 저장 + +--- + +### 3. **공통코드 변경시 데이터 갱신** + +#### 자동 갱신 +- **등록 (CREATE)**: `@CacheEvict` → 캐시 전체 삭제 +- **수정 (UPDATE)**: `@CacheEvict` → 캐시 전체 삭제 +- **삭제 (DELETE)**: `@CacheEvict` → 캐시 전체 삭제 +- **순서 변경**: `@CacheEvict` → 캐시 전체 삭제 + +```java +@CacheEvict(value = "commonCodes", allEntries = true) +public ResponseObj save(CommonCodeDto.AddReq req) { + // 공통코드 저장 + // ↓ + // 캐시 전체 삭제 (다음 조회 시 DB에서 새로 로드) +} +``` + +#### 수동 갱신 (관리자) +```java +POST /api/code/cache/refresh +``` +- 공통코드 설정이 변경된 후 API를 호출하여 캐시를 강제 갱신 + +#### 캐시 상태 모니터링 +```java +GET /api/code/cache/status +→ 응답: { "data": 150 } // 캐시된 공통코드 150개 +``` + +--- + +## 전체 아키텍처 + +``` +┌─────────────────────────────────────────────────────────┐ +│ 클라이언트 요청 │ +└──────────────────┬──────────────────────────────────────┘ + │ + ┌──────────▼──────────┐ + │ CommonCodeApiController + └──────────┬──────────┘ + │ + ┌─────────┴──────────┐ + │ │ + ┌────▼─────┐ ┌──────▼────────────┐ + │ 조회 API │ │ 캐시 관리 API │ + │ (GET) │ │(POST, GET) │ + └────┬─────┘ └──────┬────────────┘ + │ │ + │ ┌────────▼──────────┐ + │ │CommonCodeCacheManager + │ │(캐시 초기화/갱신) │ + │ └────────┬──────────┘ + │ │ + ┌────▼─────────────────┬─▼────┐ + │ CommonCodeService │ │ + │ (@Cacheable) │ │ + │ (@CacheEvict) │ │ + └────┬──────────────────┴──────┘ + │ + ┌────▼──────────┐ + │ Redis 캐시 │ + │ (공통코드) │ + └────┬──────────┘ + │ + ┌────▼──────────┐ + │ PostgreSQL DB │ + │ (공통코드) │ + └───────────────┘ +``` + +--- + +## API 명세 + +### 1. 공통코드 조회 (캐시됨) +``` +GET /api/code + +응답: +{ + "data": [ + { + "id": 1, + "code": "STATUS", + "name": "상태", + "description": "상태 공통코드", + "used": true, + ... + }, + ... + ] +} +``` + +### 2. 공통코드 캐시 갱신 +``` +POST /api/code/cache/refresh + +응답: +{ + "data": "공통코드 캐시가 갱신되었습니다." +} +``` + +### 3. 캐시 상태 확인 +``` +GET /api/code/cache/status + +응답: +{ + "data": 150 // Redis에 캐시된 공통코드 개수 +} +``` + +--- + +## 캐시 갱신 흐름 + +### 자동 갱신 (CRUD 작업) +``` +관리자가 공통코드 등록/수정/삭제 + ↓ +CommonCodeService.save() / update() / removeCode() +(@CacheEvict 실행) + ↓ +Redis 캐시 전체 삭제 + ↓ +다음 조회 시 DB에서 새로 로드 +``` + +### 수동 갱신 (API 호출) +``` +관리자: POST /api/code/cache/refresh + ↓ +CommonCodeCacheManager.refreshCommonCodeCache() + ↓ +캐시 정리 + 새로운 데이터 로드 + ↓ +Redis 캐시 업데이트 완료 +``` + +--- + +## 성능 최적화 효과 + +| 항목 | 개선 전 | 개선 후 | +|------|--------|--------| +| **조회 속도** | DB 직접 조회 (10-100ms) | Redis 캐시 (1-5ms) | +| **DB 부하** | 매번 조회 | 캐시 미스시만 조회 | +| **네트워크 대역폭** | 높음 (DB 왕복) | 낮음 (로컬 캐시) | +| **응답 시간** | 변동적 | 일정 (캐시) | + +--- + +## 추가 기능 + +### CommonCodeUtil - 전역 공통코드 조회 +```java +@Component +public class CommonCodeUtil { + // 모든 공통코드 조회 (캐시 활용) + public List getAllCommonCodes() + + // 특정 코드로 조회 + public List getCommonCodesByCode(String code) + + // ID로 단건 조회 + public Optional getCommonCodeById(Long id) + + // 코드명 조회 + public Optional getCodeName(String parentCode, String childCode) + + // 하위 코드 조회 + public List getChildCodesByParentCode(String parentCode) + + // 코드 사용 가능 여부 확인 + public boolean isCodeAvailable(Long parentId, String code) +} +``` + +### 사용 예시 +```java +@RequiredArgsConstructor +@RestController +public class SomeController { + + private final CommonCodeUtil commonCodeUtil; + + @GetMapping("/example") + public void example() { + // 1. 모든 공통코드 조회 (캐시됨) + List allCodes = commonCodeUtil.getAllCommonCodes(); + + // 2. 특정 코드 조회 + Optional name = commonCodeUtil.getCodeName("PARENT", "CHILD"); + + // 3. 코드 사용 가능 여부 확인 + boolean available = commonCodeUtil.isCodeAvailable(1L, "NEW_CODE"); + } +} +``` + +--- + +## 완료 체크리스트 + +- Redis 캐싱 어노테이션 적용 (@Cacheable, @CacheEvict) +- 애플리케이션 로딩시 캐시 초기화 +- CRUD 작업시 자동 캐시 갱신 +- 수동 캐시 갱신 API 제공 +- 캐시 상태 모니터링 API +- 전역 공통코드 조회 유틸리티 +- 포괄적인 유닛 테스트 (12개) + +--- + +## 모니터링 + +캐시 상태를 주기적으로 모니터링: +```bash +# 캐시 상태 확인 +curl http://localhost:8080/api/code/cache/status + +# 캐시 갱신 +curl -X POST http://localhost:8080/api/code/cache/refresh +``` + +로그 확인: +``` +=== 공통코드 캐시 초기화 시작 === +✓ 공통코드 150개가 Redis 캐시에 로드되었습니다. + - [STATUS] 상태 (ID: 1) + - [TYPE] 타입 (ID: 2) + ... +=== 공통코드 캐시 초기화 완료 === +``` diff --git a/gukyuin/state-check/Dockerfile-dev b/gukyuin/state-check/Dockerfile-dev new file mode 100644 index 0000000..994ea58 --- /dev/null +++ b/gukyuin/state-check/Dockerfile-dev @@ -0,0 +1,29 @@ +# Stage 1: Build stage (gradle build는 Jenkins에서 이미 수행) +FROM eclipse-temurin:21-jre-jammy + +# GDAL 설치 +RUN apt-get update && apt-get install -y \ + gdal-bin \ + libgdal-dev \ + && rm -rf /var/lib/apt/lists/* + +ARG UID=1000 +ARG GID=1000 + +RUN groupadd -g ${GID} manager01 \ + && useradd -u ${UID} -g ${GID} -m manager01 + +USER manager01 + +# 작업 디렉토리 설정 +WORKDIR /app + +# JAR 파일 복사 (Jenkins에서 빌드된 ROOT.jar) +COPY build/libs/ROOT.jar app.jar + +# 포트 노출 +EXPOSE 8080 + +# 애플리케이션 실행 +# dev 프로파일로 실행 +ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=dev", "app.jar"] diff --git a/gukyuin/state-check/Jenkinsfile-dev b/gukyuin/state-check/Jenkinsfile-dev new file mode 100644 index 0000000..e018a11 --- /dev/null +++ b/gukyuin/state-check/Jenkinsfile-dev @@ -0,0 +1,94 @@ +pipeline { + agent any + tools { + jdk 'jdk21' + } + environment { + BRANCH = 'develop' + GIT_REPO = 'https://10.100.0.10:3210/dabeeo/kamco-dabeeo-backoffice.git' + } + + + stages { + stage('Checkout') { + steps { + checkout([ + $class: 'GitSCM', + branches: [[name: "${env.BRANCH}"]], + userRemoteConfigs: [[ + url: "${env.GIT_REPO}", + credentialsId: 'jenkins-dev-token' + ]] + ]) + } + } + stage('Get Commit Hash') { + steps { + script { + env.COMMIT_HASH = sh(script: "git rev-parse --short HEAD", returnStdout: true).trim() + echo "Current commit hash: ${env.COMMIT_HASH}" + } + } + } + + stage('Build') { + steps { + sh "./gradlew clean build -x test" + } + } + + stage('Docker Build & Deploy') { + steps { + script { + echo "Building Docker image with tag: ${env.COMMIT_HASH}" + + // IMAGE_TAG 환경변수 설정 후 docker-compose로 빌드 및 배포 + sh """ + export IMAGE_TAG=${env.COMMIT_HASH} + + # 기존 컨테이너 중지 및 제거 + docker-compose -f docker-compose-dev.yml down || true + + # 새 이미지 빌드 + docker-compose -f docker-compose-dev.yml build + + # latest 태그도 추가 + docker tag kamco-changedetection-api:${env.COMMIT_HASH} kamco-changedetection-api:latest + + # 컨테이너 시작 + docker-compose -f docker-compose-dev.yml up -d + """ + + // 헬스체크 대기 + echo "Waiting for application to be ready..." + sh """ + for i in {1..30}; do + if docker exec kamco-changedetection-api curl -f http://localhost:8080/monitor/health > /dev/null 2>&1; then + echo "✅ Application is healthy!" + docker-compose -f docker-compose-dev.yml ps + exit 0 + fi + echo "⏳ Waiting for application... (\$i/30)" + sleep 2 + done + echo "⚠️ Warning: Health check timeout, checking container status..." + docker-compose -f docker-compose-dev.yml ps + """ + } + } + } + + stage('Cleanup Old Images') { + steps { + script { + echo "Cleaning up old Docker images..." + sh """ + # Keep latest 5 images, remove older ones + docker images kamco-changedetection-api --format "{{.ID}} {{.Tag}}" | \ + grep -v latest | tail -n +6 | awk '{print \$1}' | xargs -r docker rmi || true + """ + } + } + } + } +} diff --git a/gukyuin/state-check/README.md b/gukyuin/state-check/README.md new file mode 100644 index 0000000..9192788 --- /dev/null +++ b/gukyuin/state-check/README.md @@ -0,0 +1,26 @@ +# GUKYUIN STATE CHECK + +> 국유인에 연동된 마스터 정보에서 이노팸에 다운로드 100%가 되었는지 상태를 체크 schedule + +## 📋 프로젝트 소개 + +**state-check**는 국유인에 연동된 마스터 정보에서 이노팸에 다운로드 100%가 되었는지 상태를 체크하는 schedule 입니다. + +## 🚀 시작하기 +GukYuinApiStatusJobService 의 findGukYuinMastCompleteYn 메소드가 매 10분마다 schedule 실행됨 + +```bash +./gradlew spotlessApply +``` +```bash +./gradlew clean build +``` +```bash +Java -jar state-check.jar \ +``` +### 필수 요구사항 + +- Java 21 (JDK 21) +- PostgreSQL 12+ (PostGIS 확장 필요) +- Gradle 8.x (또는 Gradle Wrapper 사용) +- Docker & Docker Compose (선택사항) \ No newline at end of file diff --git a/gukyuin/state-check/build.gradle b/gukyuin/state-check/build.gradle new file mode 100644 index 0000000..40c311d --- /dev/null +++ b/gukyuin/state-check/build.gradle @@ -0,0 +1,110 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '3.5.7' + id 'io.spring.dependency-management' version '1.1.7' + id 'com.diffplug.spotless' version '6.25.0' +} + +group = 'com.kamco.cd' +version = '0.0.1-SNAPSHOT' +description = 'state-check' + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } +} + +bootJar { + archiveFileName = "state-check.jar" +} + +jar { + enabled = false // plain.jar 안 만들기(혼동 방지) +} + +configurations { + compileOnly { + extendsFrom annotationProcessor + } +} + +repositories { + mavenCentral() + maven { url "https://repo.osgeo.org/repository/release/" } +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.springframework.boot:spring-boot-starter-web' + compileOnly 'org.projectlombok:lombok' + runtimeOnly 'org.postgresql:postgresql' + annotationProcessor 'org.projectlombok:lombok' + testImplementation 'org.springframework.boot:spring-boot-starter-test' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' + implementation 'org.springframework.boot:spring-boot-starter-validation' + + //geometry + implementation 'com.fasterxml.jackson.core:jackson-databind' + implementation "org.geotools:gt-shapefile:30.0" + implementation "org.geotools:gt-referencing:30.0" + implementation "org.geotools:gt-geojson:30.0" + implementation 'org.locationtech.jts.io:jts-io-common:1.20.0' + implementation 'org.locationtech.jts:jts-core:1.19.0' + implementation 'org.hibernate:hibernate-spatial:6.2.7.Final' + implementation 'org.geotools:gt-main:30.0' + implementation("org.geotools:gt-geotiff:30.0") { + exclude group: "javax.media", module: "jai_core" + } + implementation 'org.geotools:gt-epsg-hsql:30.0' + + // QueryDSL JPA + implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' + + // Q클래스 생성용 annotationProcessor + annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta' + annotationProcessor 'jakarta.annotation:jakarta.annotation-api' + annotationProcessor 'jakarta.persistence:jakarta.persistence-api' + + // actuator + implementation 'org.springframework.boot:spring-boot-starter-actuator' + + // Redis + implementation 'org.springframework.boot:spring-boot-starter-data-redis' + + // SpringDoc OpenAPI (Swagger) + implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.7.0' + + // Apache Commons Compress for archive handling + implementation 'org.apache.commons:commons-compress:1.26.0' + + implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310' + implementation 'org.reflections:reflections:0.10.2' + + + implementation 'org.locationtech.jts:jts-core:1.19.0' + implementation 'org.locationtech.jts.io:jts-io-common:1.19.0' +} + +configurations.configureEach { + exclude group: 'javax.media', module: 'jai_core' +} + +tasks.named('test') { + useJUnitPlatform() +} + +// Spotless configuration for code formatting (2-space indent) +spotless { + java { + target 'src/**/*.java' + googleJavaFormat('1.19.2') // Default Google Style = 2 spaces (NO .aosp()!) + trimTrailingWhitespace() + endWithNewline() + } +} + +// Run spotlessCheck before build +tasks.named('build') { + dependsOn 'spotlessCheck' +} diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/KamcoBackApplication.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/KamcoBackApplication.class new file mode 100644 index 0000000..b6f1b43 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/KamcoBackApplication.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/code/dto/CommonCodeDto.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/code/dto/CommonCodeDto.class new file mode 100644 index 0000000..7eea8d4 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/code/dto/CommonCodeDto.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/enums/CodeDto.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/enums/CodeDto.class new file mode 100644 index 0000000..53388dd Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/enums/CodeDto.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/enums/CodeExpose.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/enums/CodeExpose.class new file mode 100644 index 0000000..14a8a8f Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/enums/CodeExpose.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/enums/CodeHidden.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/enums/CodeHidden.class new file mode 100644 index 0000000..c9e70a0 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/enums/CodeHidden.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/enums/EnumType.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/enums/EnumType.class new file mode 100644 index 0000000..f0d43c6 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/enums/EnumType.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/enums/EnumValidator.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/enums/EnumValidator.class new file mode 100644 index 0000000..1363221 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/enums/EnumValidator.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/enums/Enums.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/enums/Enums.class new file mode 100644 index 0000000..62ea942 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/enums/Enums.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/enums/ImageryFitStatus.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/enums/ImageryFitStatus.class new file mode 100644 index 0000000..48c08ea Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/enums/ImageryFitStatus.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/html/HtmlEscapeDeserializer.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/html/HtmlEscapeDeserializer.class new file mode 100644 index 0000000..11f0ebf Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/html/HtmlEscapeDeserializer.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/html/HtmlUnescapeSerializer.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/html/HtmlUnescapeSerializer.class new file mode 100644 index 0000000..fc3bca1 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/html/HtmlUnescapeSerializer.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/interfaces/EnumValid.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/interfaces/EnumValid.class new file mode 100644 index 0000000..156efdb Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/interfaces/EnumValid.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/interfaces/JsonFormatDttm.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/interfaces/JsonFormatDttm.class new file mode 100644 index 0000000..63b5489 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/common/utils/interfaces/JsonFormatDttm.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/config/QuerydslConfig.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/config/QuerydslConfig.class new file mode 100644 index 0000000..11f1c1a Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/config/QuerydslConfig.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/dto/ApiResponseDto.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/dto/ApiResponseDto.class new file mode 100644 index 0000000..7e26f32 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/dto/ApiResponseDto.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/enums/ApiConfigEnum.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/enums/ApiConfigEnum.class new file mode 100644 index 0000000..fad51ec Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/enums/ApiConfigEnum.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/enums/CodeDto.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/enums/CodeDto.class new file mode 100644 index 0000000..b0b057c Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/enums/CodeDto.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/enums/CommonUseStatus.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/enums/CommonUseStatus.class new file mode 100644 index 0000000..6e2f34e Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/enums/CommonUseStatus.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/enums/Enums.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/enums/Enums.class new file mode 100644 index 0000000..6b9ca97 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/enums/Enums.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/enums/MngStateType.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/enums/MngStateType.class new file mode 100644 index 0000000..0e02cb7 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/enums/MngStateType.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/enums/SyncStateType.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/enums/SyncStateType.class new file mode 100644 index 0000000..95c1408 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/enums/SyncStateType.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/gukyuin/dto/GukYuinStatus.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/gukyuin/dto/GukYuinStatus.class new file mode 100644 index 0000000..563ca43 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/gukyuin/dto/GukYuinStatus.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/inference/dto/DetectionClassification.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/inference/dto/DetectionClassification.class new file mode 100644 index 0000000..3fbb835 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/inference/dto/DetectionClassification.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/inference/dto/InferenceDetailDto.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/inference/dto/InferenceDetailDto.class new file mode 100644 index 0000000..439019d Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/inference/dto/InferenceDetailDto.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.class new file mode 100644 index 0000000..83380fa Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/inferface/CodeExpose.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/inferface/CodeExpose.class new file mode 100644 index 0000000..c5c9cc2 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/inferface/CodeExpose.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/inferface/CodeHidden.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/inferface/CodeHidden.class new file mode 100644 index 0000000..ea41d29 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/inferface/CodeHidden.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/inferface/EnumType.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/inferface/EnumType.class new file mode 100644 index 0000000..6700ff7 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/inferface/EnumType.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/inferface/JsonFormatDttm.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/inferface/JsonFormatDttm.class new file mode 100644 index 0000000..190dc12 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/inferface/JsonFormatDttm.class differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto.class similarity index 100% rename from label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto.class rename to gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto.class diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelInspectorDto.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelInspectorDto.class similarity index 100% rename from label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelInspectorDto.class rename to gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelInspectorDto.class diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelLabelerDto.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelLabelerDto.class similarity index 100% rename from label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelLabelerDto.class rename to gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelLabelerDto.class diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/CommonDateEntity.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/CommonDateEntity.class new file mode 100644 index 0000000..e3895f9 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/CommonDateEntity.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/LabelingAssignmentEntity.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/LabelingAssignmentEntity.class new file mode 100644 index 0000000..a2dba9c Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/LabelingAssignmentEntity.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/LabelingInspectorEntity.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/LabelingInspectorEntity.class new file mode 100644 index 0000000..4018c4d Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/LabelingInspectorEntity.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/MapInkx50kEntity.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/MapInkx50kEntity.class new file mode 100644 index 0000000..b910f80 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/MapInkx50kEntity.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/MapInkx5kEntity.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/MapInkx5kEntity.class new file mode 100644 index 0000000..487388e Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/MapInkx5kEntity.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/MapSheetAnalDataInferenceGeomEntity.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/MapSheetAnalDataInferenceGeomEntity.class new file mode 100644 index 0000000..7294a45 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/MapSheetAnalDataInferenceGeomEntity.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/MapSheetAnalInferenceEntity.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/MapSheetAnalInferenceEntity.class new file mode 100644 index 0000000..6e6182b Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/MapSheetAnalInferenceEntity.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearnDataGeomEntity.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearnDataGeomEntity.class new file mode 100644 index 0000000..53eb96f Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearnDataGeomEntity.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearnEntity.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearnEntity.class new file mode 100644 index 0000000..690d141 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearnEntity.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QCommonDateEntity.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QCommonDateEntity.class new file mode 100644 index 0000000..bc26791 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QCommonDateEntity.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QLabelingAssignmentEntity.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QLabelingAssignmentEntity.class new file mode 100644 index 0000000..da2e512 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QLabelingAssignmentEntity.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QLabelingInspectorEntity.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QLabelingInspectorEntity.class new file mode 100644 index 0000000..44a88a7 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QLabelingInspectorEntity.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapInkx50kEntity.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapInkx50kEntity.class new file mode 100644 index 0000000..c263e81 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapInkx50kEntity.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapInkx5kEntity.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapInkx5kEntity.class new file mode 100644 index 0000000..fe95f6f Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapInkx5kEntity.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapSheetAnalDataInferenceGeomEntity.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapSheetAnalDataInferenceGeomEntity.class new file mode 100644 index 0000000..399463e Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapSheetAnalDataInferenceGeomEntity.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapSheetAnalInferenceEntity.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapSheetAnalInferenceEntity.class new file mode 100644 index 0000000..0169645 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapSheetAnalInferenceEntity.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapSheetLearnDataGeomEntity.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapSheetLearnDataGeomEntity.class new file mode 100644 index 0000000..1484071 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapSheetLearnDataGeomEntity.class differ diff --git a/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapSheetLearnEntity.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapSheetLearnEntity.class new file mode 100644 index 0000000..9968414 Binary files /dev/null and b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapSheetLearnEntity.class differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto.class b/gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto.class similarity index 100% rename from label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto.class rename to gukyuin/state-check/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto.class diff --git a/gukyuin/state-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QCommonDateEntity.java b/gukyuin/state-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QCommonDateEntity.java new file mode 100644 index 0000000..2bb519c --- /dev/null +++ b/gukyuin/state-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QCommonDateEntity.java @@ -0,0 +1,39 @@ +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; + + +/** + * QCommonDateEntity is a Querydsl query type for CommonDateEntity + */ +@Generated("com.querydsl.codegen.DefaultSupertypeSerializer") +public class QCommonDateEntity extends EntityPathBase { + + private static final long serialVersionUID = 1355779051L; + + public static final QCommonDateEntity commonDateEntity = new QCommonDateEntity("commonDateEntity"); + + public final DateTimePath createdDate = createDateTime("createdDate", java.time.ZonedDateTime.class); + + public final DateTimePath modifiedDate = createDateTime("modifiedDate", java.time.ZonedDateTime.class); + + public QCommonDateEntity(String variable) { + super(CommonDateEntity.class, forVariable(variable)); + } + + public QCommonDateEntity(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QCommonDateEntity(PathMetadata metadata) { + super(CommonDateEntity.class, metadata); + } + +} + diff --git a/gukyuin/state-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QLabelingAssignmentEntity.java b/gukyuin/state-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QLabelingAssignmentEntity.java new file mode 100644 index 0000000..52939cb --- /dev/null +++ b/gukyuin/state-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QLabelingAssignmentEntity.java @@ -0,0 +1,67 @@ +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; + + +/** + * QLabelingAssignmentEntity is a Querydsl query type for LabelingAssignmentEntity + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QLabelingAssignmentEntity extends EntityPathBase { + + private static final long serialVersionUID = -1647165171L; + + public static final QLabelingAssignmentEntity labelingAssignmentEntity = new QLabelingAssignmentEntity("labelingAssignmentEntity"); + + public final QCommonDateEntity _super = new QCommonDateEntity(this); + + public final NumberPath analUid = createNumber("analUid", Long.class); + + public final StringPath assignGroupId = createString("assignGroupId"); + + public final ComparablePath assignmentUid = createComparable("assignmentUid", java.util.UUID.class); + + //inherited + public final DateTimePath createdDate = _super.createdDate; + + public final NumberPath inferenceGeomUid = createNumber("inferenceGeomUid", Long.class); + + public final StringPath inspectorUid = createString("inspectorUid"); + + public final DateTimePath inspectStatDttm = createDateTime("inspectStatDttm", java.time.ZonedDateTime.class); + + public final StringPath inspectState = createString("inspectState"); + + public final NumberPath learnGeomUid = createNumber("learnGeomUid", Long.class); + + //inherited + public final DateTimePath modifiedDate = _super.modifiedDate; + + public final ComparablePath stagnationYn = createComparable("stagnationYn", Character.class); + + public final StringPath workerUid = createString("workerUid"); + + public final DateTimePath workStatDttm = createDateTime("workStatDttm", java.time.ZonedDateTime.class); + + public final StringPath workState = createString("workState"); + + public QLabelingAssignmentEntity(String variable) { + super(LabelingAssignmentEntity.class, forVariable(variable)); + } + + public QLabelingAssignmentEntity(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QLabelingAssignmentEntity(PathMetadata metadata) { + super(LabelingAssignmentEntity.class, metadata); + } + +} + diff --git a/gukyuin/state-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QLabelingInspectorEntity.java b/gukyuin/state-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QLabelingInspectorEntity.java new file mode 100644 index 0000000..d85c9e5 --- /dev/null +++ b/gukyuin/state-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QLabelingInspectorEntity.java @@ -0,0 +1,49 @@ +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; + + +/** + * QLabelingInspectorEntity is a Querydsl query type for LabelingInspectorEntity + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QLabelingInspectorEntity extends EntityPathBase { + + private static final long serialVersionUID = -1575073251L; + + public static final QLabelingInspectorEntity labelingInspectorEntity = new QLabelingInspectorEntity("labelingInspectorEntity"); + + public final QCommonDateEntity _super = new QCommonDateEntity(this); + + public final NumberPath analUid = createNumber("analUid", Long.class); + + //inherited + public final DateTimePath createdDate = _super.createdDate; + + public final StringPath inspectorUid = createString("inspectorUid"); + + //inherited + public final DateTimePath modifiedDate = _super.modifiedDate; + + public final ComparablePath operatorUid = createComparable("operatorUid", java.util.UUID.class); + + public QLabelingInspectorEntity(String variable) { + super(LabelingInspectorEntity.class, forVariable(variable)); + } + + public QLabelingInspectorEntity(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QLabelingInspectorEntity(PathMetadata metadata) { + super(LabelingInspectorEntity.class, metadata); + } + +} + diff --git a/gukyuin/state-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapInkx50kEntity.java b/gukyuin/state-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapInkx50kEntity.java new file mode 100644 index 0000000..471c2eb --- /dev/null +++ b/gukyuin/state-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapInkx50kEntity.java @@ -0,0 +1,53 @@ +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; + + +/** + * QMapInkx50kEntity is a Querydsl query type for MapInkx50kEntity + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QMapInkx50kEntity extends EntityPathBase { + + private static final long serialVersionUID = 1410103956L; + + public static final QMapInkx50kEntity mapInkx50kEntity = new QMapInkx50kEntity("mapInkx50kEntity"); + + public final QCommonDateEntity _super = new QCommonDateEntity(this); + + //inherited + public final DateTimePath createdDate = _super.createdDate; + + public final NumberPath fid = createNumber("fid", Integer.class); + + public final ComparablePath geom = createComparable("geom", org.locationtech.jts.geom.Geometry.class); + + public final StringPath mapidcdNo = createString("mapidcdNo"); + + public final StringPath mapidNm = createString("mapidNm"); + + public final StringPath mapidNo = createString("mapidNo"); + + //inherited + public final DateTimePath modifiedDate = _super.modifiedDate; + + public QMapInkx50kEntity(String variable) { + super(MapInkx50kEntity.class, forVariable(variable)); + } + + public QMapInkx50kEntity(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QMapInkx50kEntity(PathMetadata metadata) { + super(MapInkx50kEntity.class, metadata); + } + +} + diff --git a/gukyuin/state-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapInkx5kEntity.java b/gukyuin/state-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapInkx5kEntity.java new file mode 100644 index 0000000..be5ad05 --- /dev/null +++ b/gukyuin/state-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapInkx5kEntity.java @@ -0,0 +1,67 @@ +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; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QMapInkx5kEntity is a Querydsl query type for MapInkx5kEntity + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QMapInkx5kEntity extends EntityPathBase { + + private static final long serialVersionUID = 372911320L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QMapInkx5kEntity mapInkx5kEntity = new QMapInkx5kEntity("mapInkx5kEntity"); + + public final QCommonDateEntity _super = new QCommonDateEntity(this); + + //inherited + public final DateTimePath createdDate = _super.createdDate; + + public final NumberPath fid = createNumber("fid", Integer.class); + + public final ComparablePath geom = createComparable("geom", org.locationtech.jts.geom.Geometry.class); + + public final StringPath mapidcdNo = createString("mapidcdNo"); + + public final StringPath mapidNm = createString("mapidNm"); + + public final QMapInkx50kEntity mapInkx50k; + + //inherited + public final DateTimePath modifiedDate = _super.modifiedDate; + + public final EnumPath useInference = createEnum("useInference", com.kamco.cd.kamcoback.enums.CommonUseStatus.class); + + public QMapInkx5kEntity(String variable) { + this(MapInkx5kEntity.class, forVariable(variable), INITS); + } + + public QMapInkx5kEntity(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QMapInkx5kEntity(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QMapInkx5kEntity(PathMetadata metadata, PathInits inits) { + this(MapInkx5kEntity.class, metadata, inits); + } + + public QMapInkx5kEntity(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.mapInkx50k = inits.isInitialized("mapInkx50k") ? new QMapInkx50kEntity(forProperty("mapInkx50k")) : null; + } + +} + diff --git a/gukyuin/state-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapSheetAnalDataInferenceGeomEntity.java b/gukyuin/state-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapSheetAnalDataInferenceGeomEntity.java new file mode 100644 index 0000000..82eac7d --- /dev/null +++ b/gukyuin/state-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapSheetAnalDataInferenceGeomEntity.java @@ -0,0 +1,125 @@ +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; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QMapSheetAnalDataInferenceGeomEntity is a Querydsl query type for MapSheetAnalDataInferenceGeomEntity + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QMapSheetAnalDataInferenceGeomEntity extends EntityPathBase { + + private static final long serialVersionUID = -1600559932L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QMapSheetAnalDataInferenceGeomEntity mapSheetAnalDataInferenceGeomEntity = new QMapSheetAnalDataInferenceGeomEntity("mapSheetAnalDataInferenceGeomEntity"); + + public final NumberPath area = createNumber("area", Double.class); + + public final ComparablePath beforeGeom = createComparable("beforeGeom", org.locationtech.jts.geom.Geometry.class); + + public final NumberPath cdProb = createNumber("cdProb", Double.class); + + public final StringPath classAfterCd = createString("classAfterCd"); + + public final NumberPath classAfterProb = createNumber("classAfterProb", Double.class); + + public final StringPath classBeforeCd = createString("classBeforeCd"); + + public final NumberPath classBeforeProb = createNumber("classBeforeProb", Double.class); + + public final NumberPath compareYyyy = createNumber("compareYyyy", Integer.class); + + public final DateTimePath createdDttm = createDateTime("createdDttm", java.time.ZonedDateTime.class); + + public final NumberPath createdUid = createNumber("createdUid", Long.class); + + public final NumberPath dataUid = createNumber("dataUid", Long.class); + + public final DateTimePath fileCreatedDttm = createDateTime("fileCreatedDttm", java.time.ZonedDateTime.class); + + public final BooleanPath fileCreatedYn = createBoolean("fileCreatedYn"); + + public final StringPath fitState = createString("fitState"); + + public final StringPath fitStateCmmnt = createString("fitStateCmmnt"); + + public final DateTimePath fitStateDttm = createDateTime("fitStateDttm", java.time.ZonedDateTime.class); + + public final ComparablePath geom = createComparable("geom", org.locationtech.jts.geom.Geometry.class); + + public final ComparablePath geomCenter = createComparable("geomCenter", org.locationtech.jts.geom.Geometry.class); + + public final NumberPath geomCnt = createNumber("geomCnt", Long.class); + + public final StringPath geoType = createString("geoType"); + + public final NumberPath geoUid = createNumber("geoUid", Long.class); + + public final NumberPath labelerUid = createNumber("labelerUid", Long.class); + + public final DateTimePath labelSendDttm = createDateTime("labelSendDttm", java.time.ZonedDateTime.class); + + public final StringPath labelState = createString("labelState"); + + public final DateTimePath labelStateDttm = createDateTime("labelStateDttm", java.time.ZonedDateTime.class); + + public final StringPath lockYn = createString("lockYn"); + + public final QMapInkx5kEntity map5k; + + public final NumberPath mapSheetNum = createNumber("mapSheetNum", Long.class); + + public final NumberPath pnu = createNumber("pnu", Long.class); + + public final NumberPath refMapSheetNum = createNumber("refMapSheetNum", Long.class); + + public final StringPath resultUid = createString("resultUid"); + + public final NumberPath stage = createNumber("stage", Integer.class); + + public final NumberPath targetYyyy = createNumber("targetYyyy", Integer.class); + + public final NumberPath testerUid = createNumber("testerUid", Long.class); + + public final StringPath testState = createString("testState"); + + public final DateTimePath testStateDttm = createDateTime("testStateDttm", java.time.ZonedDateTime.class); + + public final DateTimePath updatedDttm = createDateTime("updatedDttm", java.time.ZonedDateTime.class); + + public final NumberPath updatedUid = createNumber("updatedUid", Long.class); + + public final ComparablePath uuid = createComparable("uuid", java.util.UUID.class); + + public QMapSheetAnalDataInferenceGeomEntity(String variable) { + this(MapSheetAnalDataInferenceGeomEntity.class, forVariable(variable), INITS); + } + + public QMapSheetAnalDataInferenceGeomEntity(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QMapSheetAnalDataInferenceGeomEntity(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QMapSheetAnalDataInferenceGeomEntity(PathMetadata metadata, PathInits inits) { + this(MapSheetAnalDataInferenceGeomEntity.class, metadata, inits); + } + + public QMapSheetAnalDataInferenceGeomEntity(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.map5k = inits.isInitialized("map5k") ? new QMapInkx5kEntity(forProperty("map5k"), inits.get("map5k")) : null; + } + +} + diff --git a/gukyuin/state-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapSheetAnalInferenceEntity.java b/gukyuin/state-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapSheetAnalInferenceEntity.java new file mode 100644 index 0000000..57eb0b2 --- /dev/null +++ b/gukyuin/state-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapSheetAnalInferenceEntity.java @@ -0,0 +1,110 @@ +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; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QMapSheetAnalInferenceEntity is a Querydsl query type for MapSheetAnalInferenceEntity + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QMapSheetAnalInferenceEntity extends EntityPathBase { + + private static final long serialVersionUID = -1438711566L; + + public static final QMapSheetAnalInferenceEntity mapSheetAnalInferenceEntity = new QMapSheetAnalInferenceEntity("mapSheetAnalInferenceEntity"); + + public final NumberPath accuracy = createNumber("accuracy", Double.class); + + public final DateTimePath analEndDttm = createDateTime("analEndDttm", java.time.ZonedDateTime.class); + + public final NumberPath analPredSec = createNumber("analPredSec", Long.class); + + public final NumberPath analSec = createNumber("analSec", Long.class); + + public final StringPath analState = createString("analState"); + + public final DateTimePath analStrtDttm = createDateTime("analStrtDttm", java.time.ZonedDateTime.class); + + public final StringPath analTargetType = createString("analTargetType"); + + public final StringPath analTitle = createString("analTitle"); + + public final StringPath baseMapSheetNum = createString("baseMapSheetNum"); + + public final NumberPath compareYyyy = createNumber("compareYyyy", Integer.class); + + public final DateTimePath createdDttm = createDateTime("createdDttm", java.time.ZonedDateTime.class); + + public final NumberPath createdUid = createNumber("createdUid", Long.class); + + public final NumberPath detectingCnt = createNumber("detectingCnt", Long.class); + + public final StringPath detectingDescription = createString("detectingDescription"); + + public final StringPath detectionDataOption = createString("detectionDataOption"); + + public final DateTimePath gukyuinApplyDttm = createDateTime("gukyuinApplyDttm", java.time.ZonedDateTime.class); + + public final StringPath gukyuinUsed = createString("gukyuinUsed"); + + public final MapPath> hyperParams = this.>createMap("hyperParams", String.class, Object.class, SimplePath.class); + + public final NumberPath id = createNumber("id", Long.class); + + public final StringPath inspectionClosedYn = createString("inspectionClosedYn"); + + public final StringPath labelingClosedYn = createString("labelingClosedYn"); + + public final NumberPath learnId = createNumber("learnId", Long.class); + + public final StringPath modelM1Ver = createString("modelM1Ver"); + + public final StringPath modelM2Ver = createString("modelM2Ver"); + + public final StringPath modelM3Ver = createString("modelM3Ver"); + + public final NumberPath modelUid = createNumber("modelUid", Long.class); + + public final NumberPath modelVerUid = createNumber("modelVerUid", Long.class); + + public final StringPath resultUrl = createString("resultUrl"); + + public final StringPath serverIds = createString("serverIds"); + + public final NumberPath stage = createNumber("stage", Integer.class); + + public final NumberPath targetYyyy = createNumber("targetYyyy", Integer.class); + + public final StringPath testRate = createString("testRate"); + + public final ListPath> tranningRate = this.>createList("tranningRate", Double.class, NumberPath.class, PathInits.DIRECT2); + + public final DateTimePath updatedDttm = createDateTime("updatedDttm", java.time.ZonedDateTime.class); + + public final NumberPath updatedUid = createNumber("updatedUid", Long.class); + + public final ComparablePath uuid = createComparable("uuid", java.util.UUID.class); + + public final ListPath> validationRate = this.>createList("validationRate", Double.class, NumberPath.class, PathInits.DIRECT2); + + public QMapSheetAnalInferenceEntity(String variable) { + super(MapSheetAnalInferenceEntity.class, forVariable(variable)); + } + + public QMapSheetAnalInferenceEntity(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QMapSheetAnalInferenceEntity(PathMetadata metadata) { + super(MapSheetAnalInferenceEntity.class, metadata); + } + +} + diff --git a/gukyuin/state-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapSheetLearnDataGeomEntity.java b/gukyuin/state-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapSheetLearnDataGeomEntity.java new file mode 100644 index 0000000..3374760 --- /dev/null +++ b/gukyuin/state-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapSheetLearnDataGeomEntity.java @@ -0,0 +1,59 @@ +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; + + +/** + * QMapSheetLearnDataGeomEntity is a Querydsl query type for MapSheetLearnDataGeomEntity + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QMapSheetLearnDataGeomEntity extends EntityPathBase { + + private static final long serialVersionUID = 1704278203L; + + public static final QMapSheetLearnDataGeomEntity mapSheetLearnDataGeomEntity = new QMapSheetLearnDataGeomEntity("mapSheetLearnDataGeomEntity"); + + public final QCommonDateEntity _super = new QCommonDateEntity(this); + + public final NumberPath afterYyyy = createNumber("afterYyyy", Integer.class); + + public final NumberPath area = createNumber("area", Double.class); + + public final NumberPath beforeYyyy = createNumber("beforeYyyy", Integer.class); + + public final StringPath classAfterCd = createString("classAfterCd"); + + public final StringPath classBeforeCd = createString("classBeforeCd"); + + //inherited + public final DateTimePath createdDate = _super.createdDate; + + public final BooleanPath fileCreateYn = createBoolean("fileCreateYn"); + + public final ComparablePath geom = createComparable("geom", org.locationtech.jts.geom.Geometry.class); + + public final NumberPath geoUid = createNumber("geoUid", Long.class); + + //inherited + public final DateTimePath modifiedDate = _super.modifiedDate; + + public QMapSheetLearnDataGeomEntity(String variable) { + super(MapSheetLearnDataGeomEntity.class, forVariable(variable)); + } + + public QMapSheetLearnDataGeomEntity(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QMapSheetLearnDataGeomEntity(PathMetadata metadata) { + super(MapSheetLearnDataGeomEntity.class, metadata); + } + +} + diff --git a/gukyuin/state-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapSheetLearnEntity.java b/gukyuin/state-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapSheetLearnEntity.java new file mode 100644 index 0000000..2f4b3ec --- /dev/null +++ b/gukyuin/state-check/build/generated/sources/annotationProcessor/java/main/com/kamco/cd/kamcoback/postgres/entity/QMapSheetLearnEntity.java @@ -0,0 +1,141 @@ +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; + + +/** + * QMapSheetLearnEntity is a Querydsl query type for MapSheetLearnEntity + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QMapSheetLearnEntity extends EntityPathBase { + + private static final long serialVersionUID = 1571348757L; + + public static final QMapSheetLearnEntity mapSheetLearnEntity = new QMapSheetLearnEntity("mapSheetLearnEntity"); + + public final DateTimePath applyDttm = createDateTime("applyDttm", java.time.ZonedDateTime.class); + + public final StringPath applyStatus = createString("applyStatus"); + + public final DateTimePath applyStatusDttm = createDateTime("applyStatusDttm", java.time.ZonedDateTime.class); + + public final BooleanPath applyYn = createBoolean("applyYn"); + + public final StringPath chnDtctMstId = createString("chnDtctMstId"); + + public final NumberPath compareYyyy = createNumber("compareYyyy", Integer.class); + + public final DateTimePath createdDttm = createDateTime("createdDttm", java.time.ZonedDateTime.class); + + public final NumberPath createdUid = createNumber("createdUid", Long.class); + + public final NumberPath detectEndCnt = createNumber("detectEndCnt", Long.class); + + public final NumberPath detectingCnt = createNumber("detectingCnt", Long.class); + + public final StringPath detectOption = createString("detectOption"); + + public final DateTimePath elapsedTime = createDateTime("elapsedTime", java.time.ZonedDateTime.class); + + public final NumberPath id = createNumber("id", Long.class); + + public final DateTimePath inferEndDttm = createDateTime("inferEndDttm", java.time.ZonedDateTime.class); + + public final DateTimePath inferStartDttm = createDateTime("inferStartDttm", java.time.ZonedDateTime.class); + + public final NumberPath m1CompletedJobs = createNumber("m1CompletedJobs", Integer.class); + + public final NumberPath m1FailedJobs = createNumber("m1FailedJobs", Integer.class); + + public final NumberPath m1ModelBatchId = createNumber("m1ModelBatchId", Long.class); + + public final DateTimePath m1ModelEndDttm = createDateTime("m1ModelEndDttm", java.time.ZonedDateTime.class); + + public final DateTimePath m1ModelStartDttm = createDateTime("m1ModelStartDttm", java.time.ZonedDateTime.class); + + public final ComparablePath m1ModelUuid = createComparable("m1ModelUuid", java.util.UUID.class); + + public final NumberPath m1PendingJobs = createNumber("m1PendingJobs", Integer.class); + + public final NumberPath m1RunningJobs = createNumber("m1RunningJobs", Integer.class); + + public final NumberPath m2CompletedJobs = createNumber("m2CompletedJobs", Integer.class); + + public final NumberPath m2FailedJobs = createNumber("m2FailedJobs", Integer.class); + + public final NumberPath m2ModelBatchId = createNumber("m2ModelBatchId", Long.class); + + public final DateTimePath m2ModelEndDttm = createDateTime("m2ModelEndDttm", java.time.ZonedDateTime.class); + + public final DateTimePath m2ModelStartDttm = createDateTime("m2ModelStartDttm", java.time.ZonedDateTime.class); + + public final ComparablePath m2ModelUuid = createComparable("m2ModelUuid", java.util.UUID.class); + + public final NumberPath m2PendingJobs = createNumber("m2PendingJobs", Integer.class); + + public final NumberPath m2RunningJobs = createNumber("m2RunningJobs", Integer.class); + + public final NumberPath m3CompletedJobs = createNumber("m3CompletedJobs", Integer.class); + + public final NumberPath m3FailedJobs = createNumber("m3FailedJobs", Integer.class); + + public final NumberPath m3ModelBatchId = createNumber("m3ModelBatchId", Long.class); + + public final DateTimePath m3ModelEndDttm = createDateTime("m3ModelEndDttm", java.time.ZonedDateTime.class); + + public final DateTimePath m3ModelStartDttm = createDateTime("m3ModelStartDttm", java.time.ZonedDateTime.class); + + public final ComparablePath m3ModelUuid = createComparable("m3ModelUuid", java.util.UUID.class); + + public final NumberPath m3PendingJobs = createNumber("m3PendingJobs", Integer.class); + + public final NumberPath m3RunningJobs = createNumber("m3RunningJobs", Integer.class); + + public final StringPath mapSheetCnt = createString("mapSheetCnt"); + + public final StringPath mapSheetScope = createString("mapSheetScope"); + + public final StringPath modelComparePath = createString("modelComparePath"); + + public final StringPath modelTargetPath = createString("modelTargetPath"); + + public final StringPath runningModelType = createString("runningModelType"); + + public final NumberPath stage = createNumber("stage", Integer.class); + + public final StringPath status = createString("status"); + + public final NumberPath targetYyyy = createNumber("targetYyyy", Integer.class); + + public final StringPath title = createString("title"); + + public final NumberPath totalJobs = createNumber("totalJobs", Long.class); + + public final StringPath uid = createString("uid"); + + public final DateTimePath updatedDttm = createDateTime("updatedDttm", java.time.ZonedDateTime.class); + + public final NumberPath updatedUid = createNumber("updatedUid", Long.class); + + public final ComparablePath uuid = createComparable("uuid", java.util.UUID.class); + + public QMapSheetLearnEntity(String variable) { + super(MapSheetLearnEntity.class, forVariable(variable)); + } + + public QMapSheetLearnEntity(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QMapSheetLearnEntity(PathMetadata metadata) { + super(MapSheetLearnEntity.class, metadata); + } + +} + diff --git a/gukyuin/state-check/build/reports/problems/problems-report.html b/gukyuin/state-check/build/reports/problems/problems-report.html new file mode 100644 index 0000000..72e3f54 --- /dev/null +++ b/gukyuin/state-check/build/reports/problems/problems-report.html @@ -0,0 +1,663 @@ + + + + + + + + + + + + + Gradle Configuration Cache + + + +
+ +
+ Loading... +
+ + + + + + diff --git a/gukyuin/state-check/build/resolvedMainClassName b/gukyuin/state-check/build/resolvedMainClassName new file mode 100644 index 0000000..d27cb6f --- /dev/null +++ b/gukyuin/state-check/build/resolvedMainClassName @@ -0,0 +1 @@ +com.kamco.cd.kamcoback.KamcoBackApplication \ No newline at end of file diff --git a/gukyuin/state-check/build/resources/main/application.yml b/gukyuin/state-check/build/resources/main/application.yml new file mode 100644 index 0000000..5d1aadc --- /dev/null +++ b/gukyuin/state-check/build/resources/main/application.yml @@ -0,0 +1,4 @@ +server: + port: 9080 + + diff --git a/gukyuin/state-check/build/resources/main/application_dev.yml b/gukyuin/state-check/build/resources/main/application_dev.yml new file mode 100644 index 0000000..80d48c2 --- /dev/null +++ b/gukyuin/state-check/build/resources/main/application_dev.yml @@ -0,0 +1,71 @@ +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/state-check/build/resources/main/application_local.yml b/gukyuin/state-check/build/resources/main/application_local.yml new file mode 100644 index 0000000..a5a4da3 --- /dev/null +++ b/gukyuin/state-check/build/resources/main/application_local.yml @@ -0,0 +1,71 @@ +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/state-check/build/resources/main/application_prod.yml b/gukyuin/state-check/build/resources/main/application_prod.yml new file mode 100644 index 0000000..ea3d329 --- /dev/null +++ b/gukyuin/state-check/build/resources/main/application_prod.yml @@ -0,0 +1,71 @@ +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/state-check/build/resources/main/static/chunk_upload_test.html b/gukyuin/state-check/build/resources/main/static/chunk_upload_test.html new file mode 100644 index 0000000..2c331d4 --- /dev/null +++ b/gukyuin/state-check/build/resources/main/static/chunk_upload_test.html @@ -0,0 +1,137 @@ + + + + + Chunk Upload Test + + +

대용량 파일 청크 업로드 테스트

+ +* Chunk 테스트 사이즈 10M (10 * 1024 * 1024) - 성능에 따라 변경가능

+ +* 업로드 API선택

+ +

+* 파일첨부

+

+ +



+* 업로드시 업로드 이력을 추적하기 위해 UUID생성해서 전달(파일병합시 사용)(script 예제참고)

+UUID :

+ +* API 호출시 파일정보 추출해서 자동 할당해야 함.(script 예제참고)

+chunkIndex :

+chunkTotalIndex :

+ +* API 호출시 파일정보 추출해서 자동 할당해야 함.(script 예제참고)

+fileSize :

+ + + +

+* 진행율(%)

+
+

+* 결과메세지

+
+ + + + diff --git a/gukyuin/state-check/build/tmp/bootJar/MANIFEST.MF b/gukyuin/state-check/build/tmp/bootJar/MANIFEST.MF new file mode 100644 index 0000000..5140d0d --- /dev/null +++ b/gukyuin/state-check/build/tmp/bootJar/MANIFEST.MF @@ -0,0 +1,12 @@ +Manifest-Version: 1.0 +Main-Class: org.springframework.boot.loader.launch.JarLauncher +Start-Class: com.kamco.cd.kamcoback.KamcoBackApplication +Spring-Boot-Version: 3.5.7 +Spring-Boot-Classes: BOOT-INF/classes/ +Spring-Boot-Lib: BOOT-INF/lib/ +Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx +Spring-Boot-Layers-Index: BOOT-INF/layers.idx +Build-Jdk-Spec: 21 +Implementation-Title: kamco-state-check-job +Implementation-Version: 0.0.1-SNAPSHOT + diff --git a/gukyuin/state-check/build/tmp/compileJava/previous-compilation-data.bin b/gukyuin/state-check/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000..fae9482 Binary files /dev/null and b/gukyuin/state-check/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/gukyuin/state-check/build/tmp/spotless-register-dependencies b/gukyuin/state-check/build/tmp/spotless-register-dependencies new file mode 100644 index 0000000..56a6051 --- /dev/null +++ b/gukyuin/state-check/build/tmp/spotless-register-dependencies @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/gukyuin/state-check/docker-compose-dev.yml b/gukyuin/state-check/docker-compose-dev.yml new file mode 100644 index 0000000..40b4346 --- /dev/null +++ b/gukyuin/state-check/docker-compose-dev.yml @@ -0,0 +1,35 @@ +services: + kamco-changedetection-api: + build: + context: . + dockerfile: Dockerfile-dev + args: + UID: 1000 # manager01 UID + GID: 1000 # manager01 GID + image: kamco-changedetection-api:${IMAGE_TAG:-latest} + container_name: kamco-changedetection-api + user: "1000:1000" + ports: + - "7100:8080" + environment: + - SPRING_PROFILES_ACTIVE=dev + - TZ=Asia/Seoul + volumes: + - /mnt/nfs_share/images:/app/original-images + - /mnt/nfs_share/model_output:/app/model-outputs + - /mnt/nfs_share/train_dataset:/app/train-dataset + - /mnt/nfs_share/tmp:/app/tmp + - /kamco-nfs:/kamco-nfs + networks: + - kamco-cds + restart: unless-stopped + healthcheck: + test: [ "CMD", "curl", "-f", "http://localhost:8080/monitor/health" ] + interval: 10s + timeout: 5s + retries: 5 + start_period: 40s + +networks: + kamco-cds: + external: true diff --git a/gukyuin/state-check/gradle/wrapper/gradle-wrapper.jar b/gukyuin/state-check/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..1b33c55 Binary files /dev/null and b/gukyuin/state-check/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gukyuin/state-check/gradle/wrapper/gradle-wrapper.properties b/gukyuin/state-check/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..ca025c8 --- /dev/null +++ b/gukyuin/state-check/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gukyuin/state-check/gradlew b/gukyuin/state-check/gradlew new file mode 100644 index 0000000..23d15a9 --- /dev/null +++ b/gukyuin/state-check/gradlew @@ -0,0 +1,251 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH="\\\"\\\"" + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gukyuin/state-check/gradlew.bat b/gukyuin/state-check/gradlew.bat new file mode 100644 index 0000000..db3a6ac --- /dev/null +++ b/gukyuin/state-check/gradlew.bat @@ -0,0 +1,94 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH= + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/gukyuin/state-check/http/CommonCode.http b/gukyuin/state-check/http/CommonCode.http new file mode 100644 index 0000000..6083e22 --- /dev/null +++ b/gukyuin/state-check/http/CommonCode.http @@ -0,0 +1,4 @@ +### GET getByCodeId +GET http://localhost:8080/api/code/1 +Content-Type: application/json +### diff --git a/gukyuin/state-check/intellij-java-google-style.xml b/gukyuin/state-check/intellij-java-google-style.xml new file mode 100644 index 0000000..d63d731 --- /dev/null +++ b/gukyuin/state-check/intellij-java-google-style.xml @@ -0,0 +1,598 @@ + + + + + + diff --git a/gukyuin/state-check/settings.gradle b/gukyuin/state-check/settings.gradle new file mode 100644 index 0000000..b3e80a4 --- /dev/null +++ b/gukyuin/state-check/settings.gradle @@ -0,0 +1,6 @@ +pluginManagement { + plugins { + id 'org.jetbrains.kotlin.jvm' version '2.2.20' + } +} +rootProject.name = 'kamco-state-check-job' diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/KamcoBackApplication.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/KamcoBackApplication.java new file mode 100644 index 0000000..c6b1ae0 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/KamcoBackApplication.java @@ -0,0 +1,14 @@ +package com.kamco.cd.kamcoback; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; + +@SpringBootApplication +@EnableScheduling +public class KamcoBackApplication { + + public static void main(String[] args) { + SpringApplication.run(KamcoBackApplication.class, args); + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/code/dto/CommonCodeDto.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/code/dto/CommonCodeDto.java new file mode 100644 index 0000000..baa9fdc --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/code/dto/CommonCodeDto.java @@ -0,0 +1,189 @@ +package com.kamco.cd.kamcoback.code.dto; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.kamco.cd.kamcoback.common.utils.html.HtmlEscapeDeserializer; +import com.kamco.cd.kamcoback.common.utils.html.HtmlUnescapeSerializer; +import com.kamco.cd.kamcoback.common.utils.interfaces.JsonFormatDttm; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import java.time.ZonedDateTime; +import java.util.List; +import lombok.AllArgsConstructor; +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 CommonCodeDto { + + @Schema(name = "CodeAddReq", description = "공통코드 저장 정보") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class AddReq { + + @NotEmpty private String code; + @NotEmpty private String name; + private String description; + private int order; + private boolean used; + private Long parentId; + + @JsonDeserialize(using = HtmlEscapeDeserializer.class) + private String props1; + + @JsonDeserialize(using = HtmlEscapeDeserializer.class) + private String props2; + + @JsonDeserialize(using = HtmlEscapeDeserializer.class) + private String props3; + } + + @Schema(name = "CodeModifyReq", description = "공통코드 수정 정보") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class ModifyReq { + + @NotEmpty private String name; + private String description; + private boolean used; + + @JsonDeserialize(using = HtmlEscapeDeserializer.class) + private String props1; + + @JsonDeserialize(using = HtmlEscapeDeserializer.class) + private String props2; + + @JsonDeserialize(using = HtmlEscapeDeserializer.class) + private String props3; + } + + @Schema(name = "CodeOrderReq", description = "공통코드 순서 변경 정보") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class OrderReq { + + @NotNull private Long id; + @NotNull private Integer order; + } + + @Schema(name = "CommonCode Basic", description = "공통코드 기본 정보") + @Getter + public static class Basic { + + private Long id; + private String code; + private String description; + private String name; + private Integer order; + private Boolean used; + private Boolean deleted; + private List children; + + @JsonFormatDttm private ZonedDateTime createdDttm; + + @JsonFormatDttm private ZonedDateTime updatedDttm; + + @JsonSerialize(using = HtmlUnescapeSerializer.class) + private String props1; + + @JsonSerialize(using = HtmlUnescapeSerializer.class) + private String props2; + + @JsonSerialize(using = HtmlUnescapeSerializer.class) + private String props3; + + @JsonFormatDttm private ZonedDateTime deletedDttm; + + public Basic( + Long id, + String code, + String description, + String name, + Integer order, + Boolean used, + Boolean deleted, + List children, + ZonedDateTime createdDttm, + ZonedDateTime updatedDttm, + String props1, + String props2, + String props3, + ZonedDateTime deletedDttm) { + this.id = id; + this.code = code; + this.description = description; + this.name = name; + this.order = order; + this.used = used; + this.deleted = deleted; + this.children = children; + this.createdDttm = createdDttm; + this.updatedDttm = updatedDttm; + this.props1 = props1; + this.props2 = props2; + this.props3 = props3; + this.deletedDttm = deletedDttm; + } + } + + @Schema(name = "SearchReq", description = "검색 요청") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class SearchReq { + + // 검색 조건 + private String name; + + // 페이징 파라미터 + 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); + } + } + + @Getter + public static class Clazzes { + + private String code; + private String name; + private Integer order; + private String color; + + public Clazzes(String code, String name, Integer order, String color) { + this.code = code; + this.name = name; + this.order = order; + this.color = color; + } + } + + @Getter + @AllArgsConstructor + public static class CodeDto { + + private String code; + private String name; + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/enums/RoleType.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/enums/RoleType.java new file mode 100644 index 0000000..3321e90 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/enums/RoleType.java @@ -0,0 +1,27 @@ +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/state-check/src/main/java/com/kamco/cd/kamcoback/common/enums/StatusType.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/enums/StatusType.java new file mode 100644 index 0000000..8559968 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/enums/StatusType.java @@ -0,0 +1,27 @@ +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/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/NetUtils.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/NetUtils.java new file mode 100644 index 0000000..9c6ee78 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/NetUtils.java @@ -0,0 +1,61 @@ +package com.kamco.cd.kamcoback.common.utils; + +import com.fasterxml.jackson.databind.ObjectMapper; +import java.net.InetAddress; +import java.net.URLEncoder; +import java.net.UnknownHostException; +import java.nio.charset.StandardCharsets; +import java.util.Map; +import java.util.stream.Collectors; +import org.springframework.http.HttpHeaders; + +public class NetUtils { + + public String getLocalIP() { + + String ip; + { + try { + InetAddress local = InetAddress.getLocalHost(); + ip = local.getHostAddress(); + } catch (UnknownHostException e) { + throw new RuntimeException(e); + } + } + + return ip; + } + + public String dtoToQueryString(Object dto, String queryString) { + ObjectMapper objectMapper = new ObjectMapper(); + + Map map = objectMapper.convertValue(dto, Map.class); + + String qStr = + map.entrySet().stream() + .filter(entry -> entry.getValue() != null) // null 제외 + .map( + entry -> + String.format( + "%s=%s", + entry.getKey(), + URLEncoder.encode(entry.getValue().toString(), StandardCharsets.UTF_8))) + .collect(Collectors.joining("&")); + + if (queryString == null || queryString.isEmpty()) { + queryString = "?" + qStr; + } else { + queryString = queryString + "&" + qStr; + } + + // 2. Map을 쿼리 스트링 문자열로 변환 + return queryString; + } + + public HttpHeaders jsonHeaders() { + HttpHeaders headers = new HttpHeaders(); + headers.set(HttpHeaders.ACCEPT, "application/json;charset=UTF-8"); + headers.set(HttpHeaders.CONTENT_TYPE, "application/json;charset=UTF-8"); + return headers; + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/CodeDto.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/CodeDto.java new file mode 100644 index 0000000..c77d1a2 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/CodeDto.java @@ -0,0 +1,20 @@ +package com.kamco.cd.kamcoback.common.utils.enums; + +public class CodeDto { + + private String code; + private String name; + + public CodeDto(String code, String name) { + this.code = code; + this.name = name; + } + + public String getCode() { + return code; + } + + public String getName() { + return name; + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/CodeExpose.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/CodeExpose.java new file mode 100644 index 0000000..425e1f8 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/CodeExpose.java @@ -0,0 +1,10 @@ +package com.kamco.cd.kamcoback.common.utils.enums; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface CodeExpose {} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/CodeHidden.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/CodeHidden.java new file mode 100644 index 0000000..ad320cd --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/CodeHidden.java @@ -0,0 +1,10 @@ +package com.kamco.cd.kamcoback.common.utils.enums; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface CodeHidden {} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/EnumType.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/EnumType.java new file mode 100644 index 0000000..22761bb --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/EnumType.java @@ -0,0 +1,8 @@ +package com.kamco.cd.kamcoback.common.utils.enums; + +public interface EnumType { + + String getId(); + + String getText(); +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/EnumValidator.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/EnumValidator.java new file mode 100644 index 0000000..344fb02 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/EnumValidator.java @@ -0,0 +1,26 @@ +package com.kamco.cd.kamcoback.common.utils.enums; + +import com.kamco.cd.kamcoback.common.utils.interfaces.EnumValid; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; +import java.util.Arrays; +import java.util.Set; +import java.util.stream.Collectors; + +public class EnumValidator implements ConstraintValidator { + + private Set acceptedValues; + + @Override + public void initialize(EnumValid constraintAnnotation) { + acceptedValues = + Arrays.stream(constraintAnnotation.enumClass().getEnumConstants()) + .map(Enum::name) + .collect(Collectors.toSet()); + } + + @Override + public boolean isValid(String value, ConstraintValidatorContext context) { + return value != null && acceptedValues.contains(value); + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/Enums.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/Enums.java new file mode 100644 index 0000000..97f2b3f --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/Enums.java @@ -0,0 +1,84 @@ +package com.kamco.cd.kamcoback.common.utils.enums; + +import com.kamco.cd.kamcoback.code.dto.CommonCodeDto.CodeDto; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.reflections.Reflections; + +public class Enums { + + private static final String BASE_PACKAGE = "com.kamco.cd.kamcoback"; + + /** 노출 가능한 enum만 모아둔 맵 key: enum simpleName (예: RoleType) value: enum Class */ + private static final Map>> exposedEnumMap = scanExposedEnumMap(); + + // code로 enum 찾기 + public static & EnumType> E fromId(Class enumClass, String id) { + if (id == null) { + return null; + } + + for (E e : enumClass.getEnumConstants()) { + if (id.equalsIgnoreCase(e.getId())) { + return e; + } + } + return null; + } + + // enum -> CodeDto list + public static List toList(Class> enumClass) { + Object[] enums = enumClass.getEnumConstants(); + + return Arrays.stream(enums) + .map(e -> (EnumType) e) + .filter(e -> !isHidden(enumClass, (Enum) e)) + .map(e -> new CodeDto(e.getId(), e.getText())) + .toList(); + } + + private static boolean isHidden(Class> enumClass, Enum e) { + try { + return enumClass.getField(e.name()).isAnnotationPresent(CodeHidden.class); + } catch (NoSuchFieldException ex) { + return false; + } + } + + /** 특정 타입(enum)만 조회 /codes/{type} -> type = RoleType 같은 값 */ + public static List getCodes(String type) { + Class> enumClass = exposedEnumMap.get(type); + if (enumClass == null) { + throw new IllegalArgumentException("지원하지 않는 코드 타입: " + type); + } + return toList(enumClass); + } + + /** 전체 enum 코드 조회 */ + public static Map> getAllCodes() { + Map> result = new HashMap<>(); + for (Map.Entry>> e : exposedEnumMap.entrySet()) { + result.put(e.getKey(), toList(e.getValue())); + } + return result; + } + + /** CodeExpose + EnumType 인 enum만 스캔해서 Map 구성 */ + private static Map>> scanExposedEnumMap() { + Reflections reflections = new Reflections(BASE_PACKAGE); + + Set> types = reflections.getTypesAnnotatedWith(CodeExpose.class); + + Map>> result = new HashMap<>(); + + for (Class clazz : types) { + if (clazz.isEnum() && EnumType.class.isAssignableFrom(clazz)) { + result.put(clazz.getSimpleName(), (Class>) clazz); + } + } + return result; + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/ImageryFitStatus.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/ImageryFitStatus.java new file mode 100644 index 0000000..777c31f --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/ImageryFitStatus.java @@ -0,0 +1,41 @@ +package com.kamco.cd.kamcoback.common.utils.enums; + +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/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/html/HtmlEscapeDeserializer.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/html/HtmlEscapeDeserializer.java new file mode 100644 index 0000000..df1c8a3 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/html/HtmlEscapeDeserializer.java @@ -0,0 +1,18 @@ +package com.kamco.cd.kamcoback.common.utils.html; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import java.io.IOException; +import org.springframework.web.util.HtmlUtils; + +public class HtmlEscapeDeserializer extends JsonDeserializer { + + @Override + public Object deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) + throws IOException, JacksonException { + String value = jsonParser.getValueAsString(); + return value == null ? null : HtmlUtils.htmlEscape(value); + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/html/HtmlUnescapeSerializer.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/html/HtmlUnescapeSerializer.java new file mode 100644 index 0000000..181a0ef --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/html/HtmlUnescapeSerializer.java @@ -0,0 +1,20 @@ +package com.kamco.cd.kamcoback.common.utils.html; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import java.io.IOException; +import org.springframework.web.util.HtmlUtils; + +public class HtmlUnescapeSerializer extends JsonSerializer { + @Override + public void serialize( + String value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) + throws IOException { + if (value == null) { + jsonGenerator.writeNull(); + } else { + jsonGenerator.writeString(HtmlUtils.htmlUnescape(value)); + } + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/interfaces/EnumValid.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/interfaces/EnumValid.java new file mode 100644 index 0000000..5033df9 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/interfaces/EnumValid.java @@ -0,0 +1,23 @@ +package com.kamco.cd.kamcoback.common.utils.interfaces; + +import com.kamco.cd.kamcoback.common.utils.enums.EnumValidator; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +@Constraint(validatedBy = EnumValidator.class) +public @interface EnumValid { + + String message() default "올바르지 않은 값입니다."; + + Class[] groups() default {}; + + Class[] payload() default {}; + + Class> enumClass(); +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/interfaces/JsonFormatDttm.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/interfaces/JsonFormatDttm.java new file mode 100644 index 0000000..6145980 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/common/utils/interfaces/JsonFormatDttm.java @@ -0,0 +1,15 @@ +package com.kamco.cd.kamcoback.common.utils.interfaces; + +import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; +import com.fasterxml.jackson.annotation.JsonFormat; +import java.lang.annotation.*; + +@Target({ElementType.FIELD, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@JacksonAnnotationsInside +@JsonFormat( + shape = JsonFormat.Shape.STRING, + pattern = "yyyy-MM-dd'T'HH:mm:ssXXX", + timezone = "Asia/Seoul") +public @interface JsonFormatDttm {} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/config/QuerydslConfig.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/config/QuerydslConfig.java new file mode 100644 index 0000000..7db36f4 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/config/QuerydslConfig.java @@ -0,0 +1,18 @@ +package com.kamco.cd.kamcoback.config; + +import com.querydsl.jpa.impl.JPAQueryFactory; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class QuerydslConfig { + + @PersistenceContext private EntityManager entityManager; + + @Bean + public JPAQueryFactory jpaQueryFactory() { + return new JPAQueryFactory(entityManager); + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/config/resttemplate/ExternalHttpClient.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/config/resttemplate/ExternalHttpClient.java new file mode 100644 index 0000000..e4e656d --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/config/resttemplate/ExternalHttpClient.java @@ -0,0 +1,120 @@ +package com.kamco.cd.kamcoback.config.resttemplate; + +import com.fasterxml.jackson.databind.ObjectMapper; +import java.nio.charset.StandardCharsets; +import java.util.List; +import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; +import org.springframework.web.client.HttpStatusCodeException; +import org.springframework.web.client.RestTemplate; + +@RequiredArgsConstructor +@Component +@Log4j2 +public class ExternalHttpClient { + + private final RestTemplate restTemplate; + private final ObjectMapper objectMapper; + + public ExternalCallResult call( + String url, HttpMethod method, Object body, HttpHeaders headers, Class responseType) { + + // responseType 기반으로 Accept 동적 세팅 + HttpHeaders resolvedHeaders = resolveHeaders(headers, responseType); + logRequestBody(body); + + HttpEntity entity = new HttpEntity<>(body, resolvedHeaders); + + try { + // String: raw bytes -> UTF-8 string + if (responseType == String.class) { + ResponseEntity res = restTemplate.exchange(url, method, entity, byte[].class); + String raw = + (res.getBody() == null) ? null : new String(res.getBody(), StandardCharsets.UTF_8); + + @SuppressWarnings("unchecked") + T casted = (T) raw; + return new ExternalCallResult<>(res.getStatusCodeValue(), true, casted, null); + } + + // byte[]: raw bytes로 받고, JSON이면 에러로 처리 + if (responseType == byte[].class) { + ResponseEntity res = restTemplate.exchange(url, method, entity, byte[].class); + + MediaType ct = res.getHeaders().getContentType(); + byte[] bytes = res.getBody(); + + if (isJsonLike(ct)) { + String err = (bytes == null) ? null : new String(bytes, StandardCharsets.UTF_8); + return new ExternalCallResult<>(res.getStatusCodeValue(), false, null, err); + } + + @SuppressWarnings("unchecked") + T casted = (T) bytes; + return new ExternalCallResult<>(res.getStatusCodeValue(), true, casted, null); + } + + // DTO 등: 일반 역직렬화 + ResponseEntity res = restTemplate.exchange(url, method, entity, responseType); + return new ExternalCallResult<>(res.getStatusCodeValue(), true, res.getBody(), null); + + } catch (HttpStatusCodeException e) { + return new ExternalCallResult<>( + e.getStatusCode().value(), false, null, e.getResponseBodyAsString()); + } + } + + // 기존 resolveJsonHeaders를 "동적"으로 교체 + private HttpHeaders resolveHeaders(HttpHeaders headers, Class responseType) { + // 원본 headers를 그대로 쓰면 외부에서 재사용할 때 사이드이펙트 날 수 있어서 복사 권장 + HttpHeaders h = (headers == null) ? new HttpHeaders() : new HttpHeaders(headers); + + // 요청 바디 기본은 JSON이라고 가정 (필요하면 호출부에서 덮어쓰기) + if (h.getContentType() == null) { + h.setContentType(MediaType.APPLICATION_JSON); + } + + // 호출부에서 Accept를 명시했으면 존중 + if (h.getAccept() != null && !h.getAccept().isEmpty()) { + return h; + } + + // responseType 기반 Accept 자동 지정 + if (responseType == byte[].class) { + h.setAccept( + List.of( + MediaType.APPLICATION_OCTET_STREAM, + MediaType.valueOf("application/zip"), + MediaType.APPLICATION_JSON // 실패(JSON 에러 바디) 대비 + )); + } else { + h.setAccept(List.of(MediaType.APPLICATION_JSON)); + } + + return h; + } + + private boolean isJsonLike(MediaType ct) { + if (ct == null) return false; + return ct.includes(MediaType.APPLICATION_JSON) + || "application/problem+json".equalsIgnoreCase(ct.toString()); + } + + private void logRequestBody(Object body) { + try { + if (body != null) { + log.info("[HTTP-REQ-BODY-JSON] {}", objectMapper.writeValueAsString(body)); + } + } catch (Exception e) { + log.warn("[HTTP-REQ-BODY-JSON] serialize failed: {}", e.getMessage()); + } + } + + public record ExternalCallResult(int statusCode, boolean success, T body, String errBody) {} +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/dto/ApiResponseDto.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/dto/ApiResponseDto.java new file mode 100644 index 0000000..56313e3 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/dto/ApiResponseDto.java @@ -0,0 +1,223 @@ +package com.kamco.cd.kamcoback.dto; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.kamco.cd.kamcoback.inferface.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/state-check/src/main/java/com/kamco/cd/kamcoback/dto/LabelAllocateDto.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/dto/LabelAllocateDto.java new file mode 100644 index 0000000..f07f34c --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/dto/LabelAllocateDto.java @@ -0,0 +1,362 @@ +package com.kamco.cd.kamcoback.label.dto; + +import com.kamco.cd.kamcoback.common.utils.enums.CodeExpose; +import com.kamco.cd.kamcoback.common.utils.enums.EnumType; +import io.swagger.v3.oas.annotations.media.Schema; +import java.time.ZonedDateTime; +import java.util.List; +import java.util.UUID; +import lombok.AllArgsConstructor; +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 LabelAllocateDto { + + @CodeExpose + @Getter + @AllArgsConstructor + public enum LabelMngState implements EnumType { + PENDING("작업대기"), + ASSIGNED("작업할당"), + ING("진행중"), + FINISH("종료"); + + private String desc; + + @Override + public String getId() { + return name(); + } + + @Override + public String getText() { + return desc; + } + } + + @CodeExpose + @Getter + @AllArgsConstructor + public enum LabelState implements EnumType { + WAIT("대기"), + ASSIGNED("배정"), + SKIP("스킵"), + DONE("완료"); + + private String desc; + + @Override + public String getId() { + return name(); + } + + @Override + public String getText() { + return desc; + } + } + + @CodeExpose + @Getter + @AllArgsConstructor + public enum InspectState implements EnumType { + UNCONFIRM("미확인"), + EXCEPT("제외"), + COMPLETE("완료"); + + private String desc; + + @Override + public String getId() { + return name(); + } + + @Override + public String getText() { + return desc; + } + } + + @Getter + @Setter + @AllArgsConstructor + public static class AllocateDto { + + @Schema( + description = "회차 마스터 key", + example = "f97dc186-e6d3-4645-9737-3173dde8dc64", + required = true) + private UUID uuid; + + @Schema(description = "비교년도-기준년도", example = "2022-2024", required = true) + private String yyyy; + + // @Schema(description = "비교년도", example = "2022", required = true) + // private Integer compareYyyy; + // + // @Schema(description = "기준년도", example = "2024", required = true) + // private Integer targetYyyy; + + @Schema(description = "회차", example = "4") + private Integer stage; + + @Schema( + description = "라벨러 할당 목록", + example = + """ + [ + { + "userId": "123456", + "demand": 1000 + }, + { + "userId": "010222297501", + "demand": 400 + }, + { + "userId": "01022223333", + "demand": 440 + } + ] + """) + private List labelers; + + @Schema( + description = "검수자 할당 목록", + example = + """ + ["K20251216001", + "01022225555", + "K20251212001" + ] + """) + private List inspectors; + } + + @Getter + public static class TargetUser { + + @Schema(description = "라벨러 사번", example = "labeler44") + private final String userId; + + @Schema(description = "할당 건수", example = "200") + private final int demand; + + public TargetUser(String userId, int demand) { + this.userId = userId; + this.demand = demand; + } + } + + @Getter + @AllArgsConstructor + public static class TargetInspector { + + @Schema(description = "검수자 사번", example = "K20251212001") + private final String inspectorUid; + + @Schema(description = "할당 명수", example = "3") + private int userCount; + } + + @Getter + @Setter + @AllArgsConstructor + public static class Basic { + + private UUID assignmentUid; + private Long inferenceGeomUid; + private String workerUid; + private String inspectorUid; + private String workState; + private Character stagnationYn; + private String assignGroupId; + private Long learnGeomUid; + private Long analUid; + private ZonedDateTime createdDttm; + private ZonedDateTime updatedDttm; + private String inspectState; + private ZonedDateTime workStatDttm; + private ZonedDateTime inspectStatDttm; + } + + @Getter + @Setter + @AllArgsConstructor + public static class UserList { + + private String userRole; + private String employeeNo; + private String name; + } + + @Getter + @Setter + @AllArgsConstructor + public static class InferenceDetail { + + private String analTitle; + private Integer stage; + private ZonedDateTime gukyuinDttm; + private Long count; + } + + @Getter + @Setter + @AllArgsConstructor + public static class LabelerDetail { + + private String roleType; + private String name; + private String userId; // 사번 + private Long count; + private Long completeCnt; + private Long skipCnt; + private Double percent; + private Integer ranking; + private ZonedDateTime createdDttm; + private String ownerName; + private Long remainCnt; + } + + @Getter + @Setter + @AllArgsConstructor + public static class AllocateMoveDto { + + @Schema(description = "총 잔여 건수", example = "5061") + private Integer totalCnt; + + @Schema( + description = "이관할 라벨러", + example = """ + [ + "87654321" + ] + """) + private List labelers; + + @Schema(description = "회차 마스터 key", example = "f97dc186-e6d3-4645-9737-3173dde8dc64") + private String uuid; + + @Schema(description = "대상 사번", example = "01022223333") + private String userId; + } + + @Getter + @Setter + @AllArgsConstructor + public static class AllocateInfoDto { + + private Long geoUid; + private Long mapSheetNum; + private Long pnu; + } + + @Getter + @Setter + @AllArgsConstructor + public static class LabelingStatDto { + + private String workDate; + private Long dailyTotalCnt; + private Long totalCnt; + private Long assignedCnt; + private Long skipCnt; + private Long completeCnt; + private Long remainCnt; + } + + @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); + } + } + + @Getter + @Setter + @AllArgsConstructor + public static class MoveUserList { + + private String userRole; + private String employeeNo; + private String name; + private Long remainCnt; + private Double percent; + } + + @Getter + @Setter + @AllArgsConstructor + public static class MoveInfo { + + private Long totalCnt; + private List moveUserList; + } + + @Schema(name = "WorkHistoryDto", description = "WorkHistoryDto") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class WorkHistoryDto { + + @Schema(description = "행 번호") + private Integer rowNum; + + @Schema(description = "변화탐지년도", example = "2021-2022") + private String changeDetectionYear; + + @Schema(description = "국유IN 회차") + private Long stage; + + @Schema(description = "반영일") + private ZonedDateTime gukyuinApplyDttm; + + @Schema(description = "할당건수") + private Long assignedCnt; + + @Schema(description = "완료건수") + private Long completeCnt; + + @Schema(description = "Skip건수") + private Long skipCnt; + + @Schema(description = "잔여건수") + private Long remainCnt; + + @Schema(description = "상태 (진행중/완료)") + private String status; + + @Schema(description = "진행률 (%)") + private Double percent; + + @Schema(description = "작업기간 시작일") + private ZonedDateTime createdDttm; + + @Schema(description = "작업기간 종료일") + private ZonedDateTime projectCloseDttm; + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/dto/LabelInspectorDto.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/dto/LabelInspectorDto.java new file mode 100644 index 0000000..89fd8ef --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/dto/LabelInspectorDto.java @@ -0,0 +1,22 @@ +package com.kamco.cd.kamcoback.label.dto; + +import java.time.ZonedDateTime; +import java.util.UUID; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +public class LabelInspectorDto { + + @Getter + @Setter + @AllArgsConstructor + public static class Basic { + + private UUID operatorUid; + private Long analUid; + private String inspectorUid; + private ZonedDateTime createdDttm; + private ZonedDateTime updatedDttm; + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/dto/LabelLabelerDto.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/dto/LabelLabelerDto.java new file mode 100644 index 0000000..80360db --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/dto/LabelLabelerDto.java @@ -0,0 +1,27 @@ +package com.kamco.cd.kamcoback.label.dto; + +import java.time.ZonedDateTime; +import java.util.UUID; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +public class LabelLabelerDto { + + @Getter + @Setter + @AllArgsConstructor + public static class Basic { + + private UUID lbUsrUid; + private Long analUid; + private String workerUid; + private Long allocateCnt; + private Boolean deleted; + private Boolean reAllocateYn; + private Long reAllocateCnt; + private String reAllocateWorkerUid; + private ZonedDateTime createdDttm; + private ZonedDateTime updatedDttm; + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/dto/TrainingDataReviewJobDto.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/dto/TrainingDataReviewJobDto.java new file mode 100644 index 0000000..7d452c8 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/dto/TrainingDataReviewJobDto.java @@ -0,0 +1,137 @@ +package com.kamco.cd.kamcoback.scheduler.dto; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.CompleteLabelData.GeoJsonFeature; +import java.util.List; +import java.util.UUID; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; + +public class TrainingDataReviewJobDto { + + @Getter + @Setter + @RequiredArgsConstructor + @AllArgsConstructor + public static class Tasks { + + private UUID assignmentUid; + private Long inferenceUid; + private Long analUid; + } + + @Getter + @Setter + @RequiredArgsConstructor + @AllArgsConstructor + public static class InspectorPendingDto { + + String inspectorUid; + Long pendingCount; + } + + @Getter + @Setter + @RequiredArgsConstructor + @AllArgsConstructor + public static class AnalCntInfo { + + Long analUid; + String resultUid; + Long allCnt; + Long completeCnt; + Long fileCnt; + } + + @Getter + @Setter + @RequiredArgsConstructor + @AllArgsConstructor + public static class AnalMapSheetList { + + private Integer compareYyyy; + private Integer targetYyyy; + private String mapSheetNum; + } + + @Getter + @Setter + @JsonPropertyOrder({"type", "features"}) + public static class FeatureCollection { + + private final String type = "FeatureCollection"; + private List features; + + public FeatureCollection(List features) { + this.features = features; + } + } + + @Getter + @Setter + @JsonPropertyOrder({"type", "geometry", "properties"}) + public static class CompleteLabelData { + + private Long geoUid; + private String type; + @JsonIgnore private String geomStr; + private JsonNode geometry; + private Properties properties; + + public CompleteLabelData(Long geoUid, String type, String geomStr, Properties properties) { + this.geoUid = geoUid; + this.type = type; + this.geomStr = geomStr; + ObjectMapper mapper = new ObjectMapper(); + JsonNode jsonNode = null; + try { + if (geomStr != null) { + jsonNode = mapper.readTree(this.geomStr); + } + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + + this.geometry = jsonNode; + if (jsonNode != null && jsonNode.isObject()) { + ((ObjectNode) jsonNode).remove("crs"); + } + + this.properties = properties; + } + + @Getter + @Setter + @RequiredArgsConstructor + @AllArgsConstructor + public static class Properties { + + private String modelId; + private String before; + private String after; + } + + @Getter + @AllArgsConstructor + public static class GeoJsonFeature { + + private String type; + private JsonNode geometry; + private Properties properties; + + public static GeoJsonFeature from(CompleteLabelData data) { + return new GeoJsonFeature( + data.getType(), + data.getGeometry(), // geoUid 없음 + data.getProperties()); + } + } + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/enums/ApiConfigEnum.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/enums/ApiConfigEnum.java new file mode 100644 index 0000000..79cd405 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/enums/ApiConfigEnum.java @@ -0,0 +1,22 @@ +package com.kamco.cd.kamcoback.enums; + +import lombok.EqualsAndHashCode; +import lombok.Getter; + +public class ApiConfigEnum { + + @Getter + @EqualsAndHashCode(of = "enumValue") + public static class EnumDto { + + private final T enumValue; + private final String id; + private final String text; + + public EnumDto(T enumValue, String id, String text) { + this.enumValue = enumValue; + this.id = id; + this.text = text; + } + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/enums/CodeDto.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/enums/CodeDto.java new file mode 100644 index 0000000..ae4bc00 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/enums/CodeDto.java @@ -0,0 +1,20 @@ +package com.kamco.cd.kamcoback.enums; + +public class CodeDto { + + private String code; + private String name; + + public CodeDto(String code, String name) { + this.code = code; + this.name = name; + } + + public String getCode() { + return code; + } + + public String getName() { + return name; + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/enums/CommonUseStatus.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/enums/CommonUseStatus.java new file mode 100644 index 0000000..bcd0b39 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/enums/CommonUseStatus.java @@ -0,0 +1,46 @@ +package com.kamco.cd.kamcoback.enums; + +import com.kamco.cd.kamcoback.enums.ApiConfigEnum.EnumDto; +import com.kamco.cd.kamcoback.inferface.EnumType; +import java.util.Arrays; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * Common usage status used across the system. + * + *

This enum represents whether a resource is active, excluded from processing, or inactive. It + * is commonly used for filtering, business rules, and status management. + */ +@Getter +@AllArgsConstructor +public enum CommonUseStatus implements EnumType { + + // @formatter:off + USE("USE", "사용중", 100) + /** Actively used and available */ + , + EXCEPT("EXCEPT", "영구 추론제외", 200) + /** Explicitly excluded from use or processing */ + , + AUTO_EXCEPT("AUTO_EXCEPT", "자동추론 제외", 300), + NOT_USE("NOT_USE", "사용안함", 999) +/** Not used or disabled */ +; + // @formatter:on + + private String id; + private String text; + private int ordering; + + public static CommonUseStatus getEnumById(String id) { + return Arrays.stream(CommonUseStatus.values()) + .filter(x -> x.getId().equals(id)) + .findFirst() + .orElse(CommonUseStatus.NOT_USE); + } + + public EnumDto getEnumDto() { + return new EnumDto<>(this, this.id, this.text); + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/enums/Enums.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/enums/Enums.java new file mode 100644 index 0000000..c87856e --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/enums/Enums.java @@ -0,0 +1,86 @@ +package com.kamco.cd.kamcoback.enums; + +import com.kamco.cd.kamcoback.inferface.CodeExpose; +import com.kamco.cd.kamcoback.inferface.CodeHidden; +import com.kamco.cd.kamcoback.inferface.EnumType; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.reflections.Reflections; + +public class Enums { + + private static final String BASE_PACKAGE = "com.kamco.cd.kamcoback"; + + /** 노출 가능한 enum만 모아둔 맵 key: enum simpleName (예: RoleType) value: enum Class */ + private static final Map>> exposedEnumMap = scanExposedEnumMap(); + + // code로 enum 찾기 + public static & EnumType> E fromId(Class enumClass, String id) { + if (id == null) { + return null; + } + + for (E e : enumClass.getEnumConstants()) { + if (id.equalsIgnoreCase(e.getId())) { + return e; + } + } + return null; + } + + // enum -> CodeDto list + public static List toList(Class> enumClass) { + Object[] enums = enumClass.getEnumConstants(); + + return Arrays.stream(enums) + .map(e -> (EnumType) e) + .filter(e -> !isHidden(enumClass, (Enum) e)) + .map(e -> new CodeDto(e.getId(), e.getText())) + .toList(); + } + + private static boolean isHidden(Class> enumClass, Enum e) { + try { + return enumClass.getField(e.name()).isAnnotationPresent(CodeHidden.class); + } catch (NoSuchFieldException ex) { + return false; + } + } + + /** 특정 타입(enum)만 조회 /codes/{type} -> type = RoleType 같은 값 */ + public static List getCodes(String type) { + Class> enumClass = exposedEnumMap.get(type); + if (enumClass == null) { + throw new IllegalArgumentException("지원하지 않는 코드 타입: " + type); + } + return toList(enumClass); + } + + /** 전체 enum 코드 조회 */ + public static Map> getAllCodes() { + Map> result = new HashMap<>(); + for (Map.Entry>> e : exposedEnumMap.entrySet()) { + result.put(e.getKey(), toList(e.getValue())); + } + return result; + } + + /** CodeExpose + EnumType 인 enum만 스캔해서 Map 구성 */ + private static Map>> scanExposedEnumMap() { + Reflections reflections = new Reflections(BASE_PACKAGE); + + Set> types = reflections.getTypesAnnotatedWith(CodeExpose.class); + + Map>> result = new HashMap<>(); + + for (Class clazz : types) { + if (clazz.isEnum() && EnumType.class.isAssignableFrom(clazz)) { + result.put(clazz.getSimpleName(), (Class>) clazz); + } + } + return result; + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/enums/MngStateType.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/enums/MngStateType.java new file mode 100644 index 0000000..f5fd245 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/enums/MngStateType.java @@ -0,0 +1,26 @@ +package com.kamco.cd.kamcoback.enums; + +import com.kamco.cd.kamcoback.inferface.EnumType; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum MngStateType implements EnumType { + NOTYET("동기화 시작"), + PROCESSING("데이터 체크"), + DONE("동기화 작업 종료"), + TAKINGERROR("오류 데이터 처리중"); + + private final String desc; + + @Override + public String getId() { + return name(); + } + + @Override + public String getText() { + return desc; + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/enums/SyncStateType.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/enums/SyncStateType.java new file mode 100644 index 0000000..adba1cc --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/enums/SyncStateType.java @@ -0,0 +1,33 @@ +package com.kamco.cd.kamcoback.enums; + +import com.kamco.cd.kamcoback.inferface.CodeExpose; +import com.kamco.cd.kamcoback.inferface.CodeHidden; +import com.kamco.cd.kamcoback.inferface.EnumType; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@CodeExpose +@Getter +@AllArgsConstructor +public enum SyncStateType implements EnumType { + @CodeHidden + NOTYET("미처리"), + NOFILE("파일없음"), + NOTPAIR("페어파일누락"), + DUPLICATE("파일중복"), + TYPEERROR("손상파일"), + @CodeHidden + DONE("완료"); + + private final String desc; + + @Override + public String getId() { + return name(); + } + + @Override + public String getText() { + return desc; + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectContDto.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectContDto.java new file mode 100644 index 0000000..57df805 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectContDto.java @@ -0,0 +1,117 @@ +package com.kamco.cd.kamcoback.gukyuin.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import java.util.List; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +public class ChngDetectContDto { + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class ContBasic { + + private String chnDtctMstId; // 탐지콘텐츠아이디 + private String chnDtctContId; // 탐지마스타아이디 + private String cprsYr; // 비교년도 2023 + private String crtrYr; // 기준년도 2024 + private String chnDtctSno; // 차수 (1 | 2 | ...) + private String mpqdNo; // 도엽번호 + private String chnDtctId; // 탐지아이디. UUID를 기반으로 '-'를 제거하고 대문자/숫자로 구성 + private String chnDtctObjtId; // 탐지객체아이디. UUID를 기반으로 '-'를 제거하고 대문자/숫자로 구성 + private String chnDtctPolygon; // 탐지객체폴리곤 + private String chnDtctSqms; // 탐지객체면적 + private String chnCd; // 변화코드 + private String chnDtctJson; // 변화탐지JSON + private String chnDtctProb; // 변화탐지정확도 + private String bfClsCd; // 이전부류코드 + private String bfClsProb; // 이전분류정확도 + private String afClsCd; // 이후분류코드 + private String afClsProb; // 이후분류정확도 + private String crtDt; // 생성일시 + private String crtEpno; // 생성사원번호 + private String crtIp; // 생성사원아이피 + private String delYn; // 삭제여부 + private String[] pnuList; // pnuList + private String reqEpno; // 요청사원번호 + private String reqIp; // 요청사원아이피 + } + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class ChnDetectContReqDto { + + private String cprsYr; // 비교년도 2023 + private String crtrYr; // 기준년도 2024 + private String chnDtctSno; // 차수 (1 | 2 | ...) + private String mpqdNo; // 도엽번호 + private String chnDtctId; // 탐지아이디. UUID를 기반으로 '-'를 제거하고 대문자/숫자로 구성 + private String chnDtctObjtId; // 탐지객체아이디. UUID를 기반으로 '-'를 제거하고 대문자/숫자로 구성 + private String reqEpno; // 사원번호 + private String reqIp; + } + + @Schema(name = "ResReturn", description = "수행 후 리턴") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class ResReturn { + + private String flag; + private String message; + } + + @Schema(name = "ResultContDto", description = "cont list 리턴 형태") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class ResultContDto { + + private Integer code; + private String message; + private List result; + private Boolean success; + } + + @Schema(name = "DtoPnuDetectMpng", description = "PNU 결과 형태") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class DtoPnuDetectMpng { + + private String pnuDtctId; + private String lrmYmd; + private String pnu; + private String pnuSqms; + private String pnuDtctSqms; + + private String chnDtctSqms; + private String chnDtctMstId; + private String chnDtctContId; + private String chnDtctId; + private String chnDtctObjtId; + private String crtDt; + } + + @Schema(name = "ResultPnuDto", description = "pnu list 리턴 형태") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class ResultPnuDto { + + private Integer code; + private String message; + private List result; + private Boolean success; + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectMastDto.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectMastDto.java new file mode 100644 index 0000000..644b77b --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectMastDto.java @@ -0,0 +1,291 @@ +package com.kamco.cd.kamcoback.gukyuin.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import java.time.ZonedDateTime; +import java.util.List; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +public class ChngDetectMastDto { + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class Basic { + + private String chnDtctMstId; // 탐지마스터아이디 + private String cprsYr; // 비교년도 2023 + private String crtrYr; // 기준년도 2024 + private String chnDtctSno; // 차수 (1 | 2 | ...) + private String chnDtctId; // 탐지아이디. UUID를 기반으로 '-'를 제거하고 대문자/숫자로 구성 + private String chnDtctCnt; // 탐지객체개수 + private String pnuMpngCnt; // PNU매핑개수 + private String lrmYmd; // 지적도일자 + private String pathNm; // 탐지결과 절대경로명 /kamco_nas/export/{chnDtctId} + private List excnList; // 등록진행상태히스토리 (최근것부터 DESC) + private String excnStepCd; // 실행단계코드 + private String excnStep; // 실행단계코드에 해당하는 영문명 + private String excnPgrt; // 실행단계진행율 + private String excnBngnDt; // 실행단계시작시간 + private String excnEndDt; // 실행단계종료시간 + private String rmk; // 비고 + private String crtDt; // 생성일시 + private String crtEpno; // 생성사원번호 + private String crtIp; // 생성사원아이피 + private String chgDt; // 변경일시 + private String chgEpno; // 변경사원번호 + private String chgIp; // 변경사원아이피 + private String delYn; // 삭제여부 + // + private String reqEpno; // 요청사원번호 + private String reqIp; // 요청사원어이피 + } + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class ChnDetectMastExcnStepDto { + + private String srno; // 일련번호 + private String chnDtctMstId; // 탐지마스터아이디 + private String excnStepCd; // 실행단계코드 + private String excnStep; // 실행단계코드에 해당하는 영문명 + private String excnPgrt; // 실행단계진행율 + private String excnEndDt; // 실행단계종료시간 + private String errCd; // 오류코드 + private String errMsg; // 오류메세지 + private String crtDt; // 실행단계시작시간 + } + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class ChnDetectMastReqDto { + + @Schema(description = "비교년도", example = "2023") + private String cprsYr; + + @Schema(description = "기준년도", example = "2024") + private String crtrYr; + + @Schema(description = "차수", example = "1") + private String chnDtctSno; + + @Schema( + description = "탐지아이디, UUID를 기반으로 '-'를 제거하고 대문자/숫자로 구성", + example = "D5F192EC76D34F6592035BE63A84F591") + private String chnDtctId; + + @Schema( + description = "탐지결과 절대경로명 /kamco_nas/export/{chnDtctId}", + example = "/kamco-nfs/dataset/export/D5F192EC76D34F6592035BE63A84F591") + private String pathNm; + + @Schema(description = "사원번호", example = "123456") + private String reqEpno; + + @Schema(description = "사원아이피", example = "127.0.0.1") + private String reqIp; + } + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class ChnDetectContDto { + + private String chnDtctMstId; // 탐지콘텐츠아이디 + private String chnDtctContId; // 탐지마스타아이디 + private String cprsYr; // 비교년도 2023 + private String crtrYr; // 기준년도 2024 + private String chnDtctSno; // 차수 (1 | 2 | ...) + private String mpqdNo; // 도엽번호 + private String chnDtctId; // 탐지아이디. UUID를 기반으로 '-'를 제거하고 대문자/숫자로 구성 + private String chnDtctObjtId; // 탐지객체아이디. UUID를 기반으로 '-'를 제거하고 대문자/숫자로 구성 + private String chnDtctPolygon; // 탐지객체폴리곤 + private String chnDtctSqms; // 탐지객체면적 + private String chnCd; // 변화코드 + private String chnDtctJson; // 변화탐지JSON + private String chnDtctProb; // 변화탐지정확도 + private String bfClsCd; // 이전부류코드 + private String bfClsProb; // 이전분류정확도 + private String afClsCd; // 이후분류코드 + private String afClsProb; // 이후분류정확도 + private String crtDt; // 생성일시 + private String crtEpno; // 생성사원번호 + private String crtIp; // 생성사원아이피 + private String delYn; // 삭제여부 + // + private String reqEpno; // 요청사원번호 + private String reqIp; // 요청사원아이피 + } + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class ChnDetectContReqDto { + + private String cprsYr; // 비교년도 2023 + private String crtrYr; // 기준년도 2024 + private String chnDtctSno; // 차수 (1 | 2 | ...) + private String mpqdNo; // 도엽번호 + private String chnDtctId; // 탐지아이디. UUID를 기반으로 '-'를 제거하고 대문자/숫자로 구성 + private String chnDtctObjtId; // 탐지객체아이디. UUID를 기반으로 '-'를 제거하고 대문자/숫자로 구성 + private String reqEpno; // 사원번호 + private String reqIp; + } + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class ChngDetectMastSearchDto { + + // private String chnDtctId; + private String cprsYr; + private String crtrYr; + private String chnDtctSno; + } + + @Schema(name = "ResReturn", description = "수행 후 리턴") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class ResReturn { + + private String flag; + private String message; + } + + @Schema(name = "ResultDto", description = "mast list 리턴 형태") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class ResultDto { + + private Integer code; + private String message; + private List result; + private Boolean success; + } + + @Schema(name = "RegistResDto", description = "reg 등록 후 리턴 형태") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class RegistResDto { + + private Integer code; + private String message; + private Basic result; + private Boolean success; + } + + @Schema(name = "LearnKeyDto", description = "learn 엔티티 key 정보") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class LearnKeyDto { + + private Long id; + private String uid; + private String chnDtctMstId; + } + + @Schema(name = "LabelSendDto", description = "라벨링 전송한 목록") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class LabelSendDto { + + private String chnDtctObjtId; + private String labelerId; + private ZonedDateTime labelerWorkDttm; + private String reviewerId; + private ZonedDateTime reviewerWorkDttm; + private ZonedDateTime labelSendDttm; + } + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class ErrorResDto { + + private String timestamp; + private Integer status; + private String error; + private String path; + } + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class RlbDtctDto { + + private Integer code; + private String message; + private List result; + private Boolean success; + } + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class RlbDtctMastDto { + + private String pnuDtctId; + private String pnu; + private String lrmSyncYmd; + private String pnuSyncYmd; + private String mpqdNo; // 도엽번호 + private String cprsYr; // 비교년도 + private String crtrYr; // 기준년도 + private String chnDtctSno; // 회차 + private String chnDtctId; + + private String chnDtctMstId; + private String chnDtctObjtId; + private String chnDtctContId; + private String chnCd; + private String chnDtctProb; + + private String bfClsCd; // 이전분류코드 + private String bfClsProb; // 이전분류정확도 + private String afClsCd; // 이후분류코드 + private String afClsProb; // 이후분류정확도 + + 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 crtDt; // 생성일시 + private String crtEpno; // 생성사원번호 + private String crtIp; // 생성사원아이피 + private String chgDt; + private String chgEpno; + private String chgIp; + private String delYn; // 삭제여부 + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/DetectMastDto.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/DetectMastDto.java new file mode 100644 index 0000000..59c6e86 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/DetectMastDto.java @@ -0,0 +1,80 @@ +package com.kamco.cd.kamcoback.gukyuin.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +public class DetectMastDto { + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class Basic { + + private Long dtctMstId; + private String cprsBfYr; + private String cprsAdYr; + private Integer dtctSno; + private String pathNm; + private String crtEpno; + private String crtIp; + } + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class DetectMastReq { + + @NotBlank + @Schema(description = "before 연도", example = "2023") + private String cprsBfYr; + + @NotBlank + @Schema(description = "after 연도", example = "2024") + private String cprsAdYr; + + @NotNull + @Schema(description = "차수(회차)", example = "4") + private Integer dtctSno; + + @NotBlank + @Schema(description = "파일경로", example = "/app/detect/result/2023_2024/4") + private String pathNm; + + @NotBlank + @Schema(description = "사원번호", example = "1234567") + private String crtEpno; + + @NotBlank + @Schema(description = "아이피", example = "0.0.0.0") + private String crtIp; + } + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class DetectMastSearch { + + private String cprsBfYr; + private String cprsAdYr; + private Integer dtctSno; + private String featureId; + } + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class FeaturePnuDto { + + private String featureId; // polygon_id + private String pnu; // 랜덤 생성 + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/GukYuinDto.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/GukYuinDto.java new file mode 100644 index 0000000..da25f65 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/GukYuinDto.java @@ -0,0 +1,77 @@ +package com.kamco.cd.kamcoback.gukyuin.dto; + +import com.kamco.cd.kamcoback.common.utils.enums.EnumType; +import java.util.UUID; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +public class GukYuinDto { + + /** 실패 코드 enum */ + @Getter + @AllArgsConstructor + public enum GukYuinLinkFailCode implements EnumType { + OK("연동 가능"), + NOT_FOUND("대상 회차가 없습니다."), + SCOPE_PART_NOT_ALLOWED("부분 도엽은 연동 불가능 합니다."), + HAS_RUNNING_INFERENCE("라벨링 진행 중 회차가 있습니다."), + OTHER_GUKYUIN_IN_PROGRESS("국유in 연동 진행 중 회차가 있습니다."); + + private final String desc; + + @Override + public String getId() { + return name(); + } + + @Override + public String getText() { + return desc; + } + } + + @Getter + @Setter + public static class GukYuinLinkableRes { + + private boolean linkable; + // private GukYuinLinkFailCode code; + private String message; + } + + // Repository가 반환할 Fact(조회 결과) + public record GukYuinLinkFacts( + boolean existsLearn, + boolean isPartScope, + boolean hasRunningInference, + boolean hasOtherUnfinishedGukYuin) {} + + @Getter + @Setter + @AllArgsConstructor + public static class LearnInfo { + + private Long id; + private UUID uuid; + private Integer compareYyyy; + private Integer targetYyyy; + private Integer stage; + private String uid; + private String applyStatus; + private Boolean applyYn; + + public Boolean getApplyYn() { + return this.applyYn != null && this.applyYn; + } + } + + @Getter + @Setter + @AllArgsConstructor + public static class GeomUidDto { + + private Long geoUid; + private String resultUid; + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/GukYuinStatus.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/GukYuinStatus.java new file mode 100644 index 0000000..16b22e4 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/GukYuinStatus.java @@ -0,0 +1,29 @@ +package com.kamco.cd.kamcoback.gukyuin.dto; + +import com.kamco.cd.kamcoback.common.utils.enums.EnumType; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum GukYuinStatus implements EnumType { + PENDING("대기"), + IN_PROGRESS("진행중"), + GUK_COMPLETED("국유인 매핑 완료"), + PNU_COMPLETED("PNU 싱크 완료"), + PNU_FAILED("PNU 싱크 중 에러"), + END("종료"), + CANCELED("취소"); + + private final String desc; + + @Override + public String getId() { + return name(); + } + + @Override + public String getText() { + return desc; + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/inference/dto/DetectionClassification.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/inference/dto/DetectionClassification.java new file mode 100644 index 0000000..d2a1330 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/inference/dto/DetectionClassification.java @@ -0,0 +1,56 @@ +package com.kamco.cd.kamcoback.inference.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum DetectionClassification { + ROAD("road", "도로", 10), + BUILDING("building", "건물", 20), + GREENHOUSE("greenhouse", "비닐하우스", 30), + FIELD("field", "논/밭", 40), + ORCHARD("orchard", "과수원", 50), + GRASS("grass", "초지", 60), + FOREST("forest", "숲", 70), + WATER("water", "물", 80), + STONE("stone", "모래/자갈", 90), + WASTE("waste", "적치물", 100), + CONTAINER("container", "컨테이너", 110), + LAND("land", "일반토지", 120), + SOLAR("solar", "태양광", 130), + TANK("tank", "물탱크", 140), + NDC("NDC", "미분류", 150), + ETC("ETC", "기타", 160); + + private final String id; + private final String desc; + private final int order; + + /** + * Optional: Helper method to get the enum from a String, case-insensitive, or return ETC if not + * found. + */ + public static DetectionClassification fromString(String text) { + if (text == null || text.trim().isEmpty()) { + return ETC; + } + + try { + return DetectionClassification.valueOf(text.toUpperCase()); + } catch (IllegalArgumentException e) { + // If the string doesn't match any enum constant name, return ETC + return ETC; + } + } + + /** + * Desc 한글명 get 하기 + * + * @return + */ + public static String fromStrDesc(String text) { + DetectionClassification dtf = fromString(text); + return dtf.getDesc(); + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceDetailDto.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceDetailDto.java new file mode 100644 index 0000000..4cfe330 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceDetailDto.java @@ -0,0 +1,561 @@ +package com.kamco.cd.kamcoback.inference.dto; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.kamco.cd.kamcoback.common.utils.enums.ImageryFitStatus; +import com.kamco.cd.kamcoback.common.utils.interfaces.JsonFormatDttm; +import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.DetectOption; +import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.MapSheetScope; +import io.swagger.v3.oas.annotations.media.Schema; +import java.time.Duration; +import java.time.ZonedDateTime; +import java.util.List; +import java.util.UUID; +import lombok.AllArgsConstructor; +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 InferenceDetailDto { + + @Schema(name = "InferenceResultBasic", description = "분석결과 기본 정보") + @Getter + public static class Basic { + + private Long id; + private String dataName; + private Long mapSheepNum; + private Long detectingCnt; + @JsonFormatDttm private ZonedDateTime analStrtDttm; + @JsonFormatDttm private ZonedDateTime analEndDttm; + private Long analSec; + private String analState; + + public Basic( + Long id, + String dataName, + Long mapSheepNum, + Long detectingCnt, + ZonedDateTime analStrtDttm, + ZonedDateTime analEndDttm, + Long analSec, + String analState) { + this.id = id; + this.dataName = dataName; + this.mapSheepNum = mapSheepNum; + this.detectingCnt = detectingCnt; + this.analStrtDttm = analStrtDttm; + this.analEndDttm = analEndDttm; + this.analSec = analSec; + this.analState = analState; + } + } + + @Schema(name = "AnalysisResultList", description = "분석결과 목록") + @Getter + public static class AnalResList { + + private Long id; + private String analTitle; + private Long detectingCnt; + @JsonFormatDttm private ZonedDateTime analStrtDttm; + @JsonFormatDttm private ZonedDateTime analEndDttm; + private Long analSec; + private Long analPredSec; + private String analState; + private String analStateNm; + private String gukyuinUsed; + + public AnalResList( + Long id, + String analTitle, + Long detectingCnt, + ZonedDateTime analStrtDttm, + ZonedDateTime analEndDttm, + Long analSec, + Long analPredSec, + String analState, + String analStateNm, + String gukyuinUsed) { + this.id = id; + this.analTitle = analTitle; + this.detectingCnt = detectingCnt; + this.analStrtDttm = analStrtDttm; + this.analEndDttm = analEndDttm; + this.analSec = analSec; + this.analPredSec = analPredSec; + this.analState = analState; + this.analStateNm = analStateNm; + this.gukyuinUsed = gukyuinUsed; + } + } + + @Schema(name = "AnalysisResultSummary", description = "분석결과 요약정보") + @Getter + public static class AnalResSummary { + + private Long id; + private String analTitle; + private String modelInfo; + private Integer targetYyyy; + private Integer compareYyyy; + @JsonFormatDttm private ZonedDateTime analStrtDttm; + @JsonFormatDttm private ZonedDateTime analEndDttm; + private Long analSec; + private Long analPredSec; + private String resultUrl; + private Long detectingCnt; + private Double accuracy; + private String analState; + private String analStateNm; + + public AnalResSummary( + Long id, + String analTitle, + String modelInfo, + Integer targetYyyy, + Integer compareYyyy, + ZonedDateTime analStrtDttm, + ZonedDateTime analEndDttm, + Long analSec, + Long analPredSec, + String resultUrl, + Long detectingCnt, + Double accuracy, + String analState, + String analStateNm) { + this.id = id; + this.analTitle = analTitle; + this.modelInfo = modelInfo; + this.targetYyyy = targetYyyy; + this.compareYyyy = compareYyyy; + this.analStrtDttm = analStrtDttm; + this.analEndDttm = analEndDttm; + this.analSec = analSec; + this.analPredSec = analPredSec; + this.resultUrl = resultUrl; + this.detectingCnt = detectingCnt; + this.accuracy = accuracy; + this.analState = analState; + this.analStateNm = analStateNm; + } + } + + @Getter + public static class Dashboard { + + String classAfterCd; + String classAfterName; + Long classAfterCnt; + + public Dashboard(String classAfterCd, Long classAfterCnt) { + this.classAfterCd = classAfterCd; + this.classAfterName = DetectionClassification.fromString(classAfterCd).getDesc(); + this.classAfterCnt = classAfterCnt; + } + } + + @Getter + public static class Detail { + + AnalResSummary summary; + List dashboard; + Long totalCnt; + + public Detail(AnalResSummary summary, List dashboard, Long totalCnt) { + this.summary = summary; + this.dashboard = dashboard; + this.totalCnt = totalCnt; + } + } + + // 분석 상세 ROW + @Getter + @AllArgsConstructor + public static class DetailListEntity { + + private Uid code; + private Double detectionScore; + private Clazzes compare; + private Clazzes target; + private MapSheet mapSheet; + private Coordinate center; + @JsonFormatDttm private ZonedDateTime updatedDttm; + + public DetailListEntity( + UUID uuid, + Double detectionScore, + Clazzes compare, + Clazzes target, + MapSheet mapSheet, + Coordinate center, + ZonedDateTime updatedDttm) { + this.code = new Uid(uuid); + this.detectionScore = detectionScore; + this.compare = compare; + this.target = target; + this.mapSheet = mapSheet; + this.center = center; + this.updatedDttm = updatedDttm; + } + } + + @Getter + @AllArgsConstructor + public static class Uid { + + private String shortCode; + private String code; + + public Uid(UUID uuid) { + if (uuid != null) { + this.shortCode = uuid.toString().substring(0, 8).toUpperCase(); + this.code = uuid.toString(); + } + } + } + + // MAP NO + @Getter + @AllArgsConstructor + public static class MapSheet { + + private String number; + private String name; + } + + // classification info + @Getter + public static class Clazz { + + private String code; + private String name; + @JsonIgnore private Double score; + + public Clazz(String code, Double score) { + this.code = code; + this.score = score; + this.name = DetectionClassification.fromString(code).getDesc(); + } + + public Clazz(String code) { + this.code = code; + this.name = DetectionClassification.fromString(code).getDesc(); + } + } + + // classification info + @Getter + public static class Clazzes { + + private DetectionClassification code; + private String name; + + @JsonInclude(JsonInclude.Include.NON_NULL) + private Double score; + + private Integer order; + + public Clazzes(DetectionClassification classification, Double score) { + this.code = classification; + this.name = classification.getDesc(); + this.order = classification.getOrder(); + this.score = score; + } + + public Clazzes(DetectionClassification classification) { + this.code = classification; + this.name = classification.getDesc(); + this.order = classification.getOrder(); + } + } + + // 좌표 정보 point + @Getter + public static class Coordinate { + + private Double lon; // 경도(Longitude) + private Double lat; // 위도(Latitude) + private String srid; // Spatial Reference ID의 약자로, 데이터베이스에서 좌표계를 식별하는 고유 번호 추후enum으로 + + public Coordinate(Double lon, Double lat) { + this.lon = lon; + this.lat = lat; + this.srid = "EPSG:4326"; + } + } + + @Getter + public static class Geom { + + UUID uuid; + String uid; + Integer compareYyyy; + Integer targetYyyy; + Double cdProb; + String classBeforeCd; + String classBeforeName; + Double classBeforeProb; + String classAfterCd; + String classAfterName; + Double classAfterProb; + Long mapSheetNum; + String mapSheetName; + String subUid; + String pnu; + String fitState; + + public Geom( + UUID uuid, + String uid, + Integer compareYyyy, + Integer targetYyyy, + Double cdProb, + String classBeforeCd, + Double classBeforeProb, + String classAfterCd, + Double classAfterProb, + Long mapSheetNum, + String mapSheetName, + String subUid, + String pnu, + String fitState) { + this.uuid = uuid; + this.uid = uid; + this.compareYyyy = compareYyyy; + this.targetYyyy = targetYyyy; + this.cdProb = cdProb; + this.classBeforeCd = classBeforeCd; + this.classBeforeName = DetectionClassification.fromString(classBeforeCd).getDesc(); + this.classBeforeProb = classBeforeProb; + this.classAfterCd = classAfterCd; + this.classAfterName = DetectionClassification.fromString(classAfterCd).getDesc(); + this.classAfterProb = classAfterProb; + this.mapSheetNum = mapSheetNum; + this.mapSheetName = mapSheetName; + this.subUid = subUid; + this.pnu = pnu; + this.fitState = fitState; + } + + @JsonProperty("fitState") + public String getFitState() { + return this.fitState == null ? null : this.fitState; + } + + // @JsonIgnore String gemoStr; + // @JsonIgnore String geomCenterStr; + // JsonNode gemo; + // JsonNode geomCenter; + + @JsonProperty("fitStateName") + public String fitStateName() { + return ImageryFitStatus.getDescByCode(this.fitState); + } + } + + @Schema(name = "InferenceResultSearchReq", description = "분석결과 목록 요청 정보") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class SearchReq { + + // 검색 조건 + private String statCode; + private String title; + + // 페이징 파라미터 + private int page = 0; + private int size = 20; + + public Pageable toPageable() { + return PageRequest.of(page, size); + } + } + + @Schema(name = "InferenceResultSearchReq", description = "분석결과 목록 요청 정보") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class SearchGeoReq { + + // 기준년도 + private String targetClass; + // 비교년도 + private String compareClass; + // 분석도엽 + private Long mapSheetNum; + + // 페이징 파라미터 + 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); + } + } + + @Getter + @Setter + @AllArgsConstructor + @NoArgsConstructor + public static class InferenceBatchSheet { + + private Long id; + private UUID uuid; + private Long m1BatchId; + private Long m2BatchId; + private Long m3BatchId; + private String status; + private String runningModelType; + private UUID m1ModelUuid; + private UUID m2ModelUuid; + private UUID m3ModelUuid; + private String uid; + } + + @Schema(name = "AnalResultInfo", description = "추론결과 기본정보") + @Getter + @Setter + @AllArgsConstructor + @NoArgsConstructor + public static class AnalResultInfo { + + private String analTitle; + private String modelVer1; + private String modelVer2; + private String modelVer3; + private Integer compareYyyy; + private Integer targetYyyy; + private String detectOption; + private String mapSheetScope; + @JsonFormatDttm private ZonedDateTime inferStartDttm; + @JsonFormatDttm private ZonedDateTime inferEndDttm; + private Integer stage; + private String elapsedDuration; + private String subUid; + private Boolean applyYn; + @JsonFormatDttm private ZonedDateTime applyDttm; + + private String bboxGeom; + private String bboxCenterPoint; + private UUID inferenceUuid; + + public AnalResultInfo( + String analTitle, + String modelVer1, + String modelVer2, + String modelVer3, + Integer compareYyyy, + Integer targetYyyy, + String detectOption, + String mapSheetScope, + ZonedDateTime inferStartDttm, + ZonedDateTime inferEndDttm, + Integer stage, + String subUid, + Boolean applyYn, + ZonedDateTime applyDttm, + UUID inferenceUuid) { + this.analTitle = analTitle; + this.modelVer1 = modelVer1; + this.modelVer2 = modelVer2; + this.modelVer3 = modelVer3; + this.compareYyyy = compareYyyy; + this.targetYyyy = targetYyyy; + this.detectOption = DetectOption.getDescByCode(detectOption); + this.mapSheetScope = MapSheetScope.getDescByCode(mapSheetScope); + this.inferStartDttm = inferStartDttm; + this.inferEndDttm = inferEndDttm; + this.stage = stage; + this.subUid = subUid; + this.applyYn = applyYn; + this.applyDttm = applyDttm; + Duration elapsed = + (inferStartDttm != null && inferEndDttm != null) + ? Duration.between(inferStartDttm, inferEndDttm) + : null; + + if (elapsed != null) { + long seconds = elapsed.getSeconds(); + long abs = Math.abs(seconds); + + long h = abs / 3600; + long m = (abs % 3600) / 60; + long s = abs % 60; + + this.elapsedDuration = String.format("%02d:%02d:%02d", h, m, s); + } + this.inferenceUuid = inferenceUuid; + } + + @JsonProperty("bboxGeom") + public JsonNode getBboxGeom() { + ObjectMapper mapper = new ObjectMapper(); + try { + if (this.bboxGeom != null) { + return mapper.readTree(this.bboxGeom); + } else { + return null; + } + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + @JsonProperty("bboxCenterPoint") + public JsonNode getBboxCenterPoint() { + ObjectMapper mapper = new ObjectMapper(); + try { + if (this.bboxCenterPoint != null) { + return mapper.readTree(this.bboxCenterPoint); + } else { + return null; + } + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + public Boolean getApplyYn() { + return this.applyYn != null && this.applyYn; + } + } + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class BboxPointDto { + + private String bboxGeom; + private String bboxCenterPoint; + } + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class Scene { + + private String path; + private Integer size; + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java new file mode 100644 index 0000000..2ee0526 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java @@ -0,0 +1,679 @@ +package com.kamco.cd.kamcoback.inference.dto; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.kamco.cd.kamcoback.common.utils.enums.EnumType; +import com.kamco.cd.kamcoback.common.utils.interfaces.EnumValid; +import com.kamco.cd.kamcoback.common.utils.interfaces.JsonFormatDttm; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import java.time.Duration; +import java.time.LocalDate; +import java.time.ZonedDateTime; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; + +public class InferenceResultDto { + + /** 분석대상 도엽 enum */ + @Getter + @AllArgsConstructor + public enum MapSheetScope implements EnumType { + ALL("전체"), + PART("부분"), + ; + + private final String desc; + + public static MapSheetScope fromCode(String code) { + return Arrays.stream(values()).filter(v -> v.name().equals(code)).findFirst().orElse(null); + } + + public static String getDescByCode(String code) { + return fromCode(code).getDesc(); + } + + @Override + public String getId() { + return name(); + } + + @Override + public String getText() { + return desc; + } + } + + /** 탐지 데이터 옵션 dto */ + @Getter + @AllArgsConstructor + public enum DetectOption implements EnumType { + EXCL("추론제외"), + PREV("이전 년도 도엽 사용"), + ; + private final String desc; + + public static DetectOption fromCode(String code) { + return Arrays.stream(values()).filter(v -> v.name().equals(code)).findFirst().orElse(null); + } + + public static String getDescByCode(String code) { + return fromCode(code).getDesc(); + } + + @Override + public String getId() { + return name(); + } + + @Override + public String getText() { + return desc; + } + } + + @Getter + @AllArgsConstructor + public enum Status implements EnumType { + READY("대기"), + IN_PROGRESS("진행중"), + END("완료"), + FORCED_END("강제종료"); + private final String desc; + + public static Status fromCode(String code) { + return Arrays.stream(values()).filter(v -> v.name().equals(code)).findFirst().orElse(null); + } + + public static String getDescByCode(String code) { + return fromCode(code).getDesc(); + } + + @Override + public String getId() { + return name(); + } + + @Override + public String getText() { + return desc; + } + } + + @Getter + @AllArgsConstructor + public enum ServerStatus implements EnumType { + SAFETY("원활"), + CAUTION("주의"), + FAILUR("장애"), + ; + + private final String desc; + + @Override + public String getId() { + return name(); + } + + @Override + public String getText() { + return desc; + } + } + + /** 목록조회 dto */ + @Schema(name = "ResultList", description = "추론관리 목록") + @Getter + @Setter + @AllArgsConstructor + @NoArgsConstructor + public static class ResultList { + + private UUID uuid; + + @Schema(description = "제목") + private String title; + + @Schema(description = "회차") + private Integer stage; + + @Schema(description = "상태") + private String status; + + @Schema(description = "분석 도엽") + private String mapSheetCnt; + + @Schema(description = "탐지건수") + private Long detectingCnt; + + @Schema(description = "시작일시") + @JsonFormatDttm + private ZonedDateTime startTime; + + @Schema(description = "종료일시") + @JsonFormatDttm + private ZonedDateTime endTime; + + @Schema(description = "반영여부") + private Boolean applyYn; + + @Schema(description = "반영일시") + @JsonFormatDttm + private ZonedDateTime applyDttm; + + @Schema(description = "비교년도") + private Integer compareYyyy; + + @Schema(description = "기준년도") + private Integer targetYyyy; + + @Schema(description = "uid") + private String uid; + + @Schema(description = "uid 앞 8자리") + @JsonProperty("subUid") + public String subUid() { + return this.uid.substring(0, 8).toUpperCase(); + } + + @Schema(description = "상태명") + @JsonProperty("statusName") + public String statusName() { + return Status.getDescByCode(this.status); + } + + @Schema(description = "소요시간") + @JsonProperty("elapsedTim") + public String getElapsedTime() { + if (this.startTime == null || this.endTime == null) { + return null; + } + ZonedDateTime start = this.startTime; + ZonedDateTime end = this.endTime; + Duration d = Duration.between(start, end); + + if (d.isNegative()) { + d = d.negated(); + } + + long s = d.getSeconds(); + long h = s / 3600; + long m = (s % 3600) / 60; + long sec = s % 60; + + return String.format("%d시간 %d분 %d초", h, m, sec); + } + } + + /** 목록조회 검색 조건 dto */ + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class SearchListReq { + + // 검색 조건 + private String applyYn; + private LocalDate strtDttm; + private LocalDate endDttm; + private String title; + + // 페이징 파라미터 + private int page = 0; + private int size = 20; + + public Pageable toPageable() { + return PageRequest.of(page, size); + } + } + + /** 변화탐지 실행 정보 저장 요청 정보 */ + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class RegReq { + + @Schema(description = "제목", example = "2023-2024 변화탐지 테스트") + @NotBlank + private String title; + + @Schema(description = "M1", example = "b40e0f68-c1d8-49fc-93f9-a36270093861") + @NotNull + private UUID model1Uuid; + + @Schema(description = "M2", example = "ec92b7d2-b5a3-4915-9bdf-35fb3ca8ad27") + @NotNull + private UUID model2Uuid; + + @Schema(description = "M3", example = "37f45782-8ccf-4cf6-911c-a055a1510d39") + @NotNull + private UUID model3Uuid; + + @Schema(description = "비교년도", example = "2023") + @NotNull + private Integer compareYyyy; + + @Schema(description = "탐지년도", example = "2024") + @NotNull + private Integer targetYyyy; + + @Schema(description = "분석대상 도엽 - 전체(ALL), 부분(PART)", example = "PART") + @NotBlank + @EnumValid(enumClass = MapSheetScope.class, message = "분석대상 도엽 옵션은 '전체', '부분' 만 사용 가능합니다.") + private String mapSheetScope; + + @Schema(description = "탐지 데이터 옵션 - 추론제외(EXCL), 이전 년도 도엽 사용(PREV)", example = "EXCL") + @NotBlank + @EnumValid( + enumClass = DetectOption.class, + message = "탐지 데이터 옵션은 '추론제외', '이전 년도 도엽 사용' 만 사용 가능합니다.") + private String detectOption; + + @Schema(description = "5k 도협 번호 목록", example = "[33605,33606, 33610, 34802, 35603, 35611]") + @NotNull + private List mapSheetNum; + } + + @Getter + @Setter + public static class MapSheetNumDto { + + private String mapSheetNum; + private String mapSheetName; + } + + @Getter + @Setter + @NoArgsConstructor + @Schema(name = "InferenceStatusDetailDto", description = "추론(변화탐지) 진행상태") + public static class InferenceStatusDetailDto { + + @Schema(description = "탐지대상 도엽수") + private Long detectingCnt; + + @Schema(description = "모델1 분석 대기") + private Integer m1PendingJobs; + + @Schema(description = "모델2 분석 대기") + private Integer m2PendingJobs; + + @Schema(description = "모델3 분석 대기") + private Integer m3PendingJobs; + + @Schema(description = "모델1 분석 진행중") + private Integer m1RunningJobs; + + @Schema(description = "모델2 분석 진행중") + private Integer m2RunningJobs; + + @Schema(description = "모델3 분석 진행중") + private Integer m3RunningJobs; + + @Schema(description = "모델1 분석 완료") + private Integer m1CompletedJobs; + + @Schema(description = "모델2 분석 완료") + private Integer m2CompletedJobs; + + @Schema(description = "모델3 분석 완료") + private Integer m3CompletedJobs; + + @Schema(description = "모델1 분석 실패") + private Integer m1FailedJobs; + + @Schema(description = "모델2 분석 실패") + private Integer m2FailedJobs; + + @Schema(description = "모델3 분석 실패") + private Integer m3FailedJobs; + + @Schema(description = "모델1 사용시간 시작일시") + @JsonFormatDttm + ZonedDateTime m1ModelStartDttm; + + @Schema(description = "모델2 사용시간 시작일시") + @JsonFormatDttm + ZonedDateTime m2ModelStartDttm; + + @Schema(description = "모델3 사용시간 시작일시") + @JsonFormatDttm + ZonedDateTime m3ModelStartDttm; + + @Schema(description = "모델1 사용시간 종료일시") + @JsonFormatDttm + ZonedDateTime m1ModelEndDttm; + + @Schema(description = "모델2 사용시간 종료일시") + @JsonFormatDttm + ZonedDateTime m2ModelEndDttm; + + @Schema(description = "모델3 사용시간 종료일시") + @JsonFormatDttm + ZonedDateTime m3ModelEndDttm; + + @Schema(description = "변화탐지 제목") + private String title; + + @Schema(description = "비교년도") + private Integer compareYyyy; + + @Schema(description = "기준년도") + private Integer targetYyyy; + + @Schema(description = "회차") + private Integer stage; + + @Schema(description = "변화탐지 시작") + @JsonFormatDttm + private ZonedDateTime inferStartDttm; + + @Schema(description = "변화탐지 종료") + @JsonFormatDttm + private ZonedDateTime inferEndDttm; + + @Schema(description = "변화탐지 옵션") + private String detectOption; + + @Schema(description = "분석도엽") + private String mapSheetScope; + + @Schema(description = "모델1 버전") + private String modelVer1; + + @Schema(description = "모델2 버전") + private String modelVer2; + + @Schema(description = "모델3 버전") + private String modelVer3; + + @Schema(description = "탑지 도엽 수") + @JsonIgnore + private Long totalJobs; + + public InferenceStatusDetailDto( + Long detectingCnt, + Integer m1PendingJobs, + Integer m2PendingJobs, + Integer m3PendingJobs, + Integer m1RunningJobs, + Integer m2RunningJobs, + Integer m3RunningJobs, + Integer m1CompletedJobs, + Integer m2CompletedJobs, + Integer m3CompletedJobs, + Integer m1FailedJobs, + Integer m2FailedJobs, + Integer m3FailedJobs, + ZonedDateTime m1ModelStartDttm, + ZonedDateTime m2ModelStartDttm, + ZonedDateTime m3ModelStartDttm, + ZonedDateTime m1ModelEndDttm, + ZonedDateTime m2ModelEndDttm, + ZonedDateTime m3ModelEndDttm, + String title, + Integer compareYyyy, + Integer targetYyyy, + Integer stage, + ZonedDateTime inferStartDttm, + ZonedDateTime inferEndDttm, + String detectOption, + String mapSheetScope, + String modelVer1, + String modelVer2, + String modelVer3, + Long totalJobs) { + this.detectingCnt = detectingCnt; + this.m1PendingJobs = m1PendingJobs; + this.m2PendingJobs = m2PendingJobs; + this.m3PendingJobs = m3PendingJobs; + this.m1RunningJobs = m1RunningJobs; + this.m2RunningJobs = m2RunningJobs; + this.m3RunningJobs = m3RunningJobs; + this.m1CompletedJobs = m1CompletedJobs; + this.m2CompletedJobs = m2CompletedJobs; + this.m3CompletedJobs = m3CompletedJobs; + this.m1FailedJobs = m1FailedJobs; + this.m2FailedJobs = m2FailedJobs; + this.m3FailedJobs = m3FailedJobs; + this.m1ModelStartDttm = m1ModelStartDttm; + this.m2ModelStartDttm = m2ModelStartDttm; + this.m3ModelStartDttm = m3ModelStartDttm; + this.m1ModelEndDttm = m1ModelEndDttm; + this.m2ModelEndDttm = m2ModelEndDttm; + this.m3ModelEndDttm = m3ModelEndDttm; + this.title = title; + this.compareYyyy = compareYyyy; + this.targetYyyy = targetYyyy; + this.stage = stage; + this.inferStartDttm = inferStartDttm; + this.inferEndDttm = inferEndDttm; + this.detectOption = detectOption; + this.mapSheetScope = mapSheetScope; + this.modelVer1 = modelVer1; + this.modelVer2 = modelVer2; + this.modelVer3 = modelVer3; + this.totalJobs = totalJobs; + } + + @Schema(description = "진행률") + @JsonProperty("progress") + private int getProgress() { + long tiles = this.totalJobs == null ? 0L : this.totalJobs; // 도엽수 + int models = 3; // 모델 개수 + int completed = + this.m1CompletedJobs + + this.m2CompletedJobs + + this.m3CompletedJobs + + this.m1FailedJobs + + this.m2FailedJobs + + this.m3FailedJobs; // 완료수 + + long total = tiles * models; // 전체 작업량 + if (completed >= total) { + return 100; + } + return (int) ((completed * 100L) / total); + } + + @Schema(description = "변화탐지 옵션명") + @JsonProperty("detectOptionName") + private String getDetectOptionName() { + return DetectOption.getDescByCode(this.detectOption); + } + + @Schema(description = "분석도엽 명") + @JsonProperty("mapSheetScopeName") + private String getMapSheetScopeName() { + return MapSheetScope.getDescByCode(this.mapSheetScope); + } + + @Schema(description = "M1 사용시간") + @JsonProperty("m1ElapsedTim") + public String getM1ElapsedTime() { + return formatElapsedTime(this.m1ModelStartDttm, this.m1ModelEndDttm); + } + + @Schema(description = "M2 사용시간") + @JsonProperty("m2ElapsedTim") + public String getM2ElapsedTime() { + return formatElapsedTime(this.m2ModelStartDttm, this.m2ModelEndDttm); + } + + @Schema(description = "M3 사용시간") + @JsonProperty("m3ElapsedTim") + public String getM3ElapsedTime() { + return formatElapsedTime(this.m3ModelStartDttm, this.m3ModelEndDttm); + } + + private String formatElapsedTime(ZonedDateTime start, ZonedDateTime end) { + if (start == null || end == null) { + return null; + } + + Duration d = Duration.between(start, end); + if (d.isNegative()) { + d = d.negated(); + } + + long s = d.getSeconds(); + long h = s / 3600; + long m = (s % 3600) / 60; + long sec = s % 60; + + return String.format("%d시간 %d분 %d초", h, m, sec); + } + } + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class InferenceServerStatusDto { + + private String serverName; + @JsonIgnore private float cpu_user; + @JsonIgnore private float cpu_system; + @JsonIgnore private float memused; + private Long kbmemused; + private float gpuUtil; + + // private String cpuStatusName; + // private String memStatusName; + // private String gpuStatusName; + // private float cpu_use_rate; + // private float gpu_use_rate; + // private float mem_use_rate; + + public float getCpuUseRate() { + return this.cpu_user + this.cpu_system; + } + + public String getServerStatus() { + String enumId = "SAFETY"; + if (this.cpu_user + this.cpu_system + this.gpuUtil + this.kbmemused == 0) { + enumId = "FAILUR"; + } + // if( this.cpu_user+this.cpu_system >= 80 )enumId = "CAUTION"; + return enumId; + } + + public String getServerStatusName() { + String enumStr = ServerStatus.SAFETY.getText(); + if (this.cpu_user + this.cpu_system + this.gpuUtil + this.kbmemused == 0) { + enumStr = ServerStatus.FAILUR.getText(); + } + return enumStr; + } + + public String getCpuStatus() { + String enumId = "SAFETY"; + if (this.cpu_user + this.cpu_system >= 80) { + enumId = "CAUTION"; + } else if (this.cpu_user + this.cpu_system + this.memused == 0) { + enumId = "FAILUR"; + } + return enumId; + } + + public String getGpuStatus() { + String enumId = "SAFETY"; + if (this.gpuUtil >= 80) { + enumId = "CAUTION"; + } else if (this.cpu_user + this.cpu_system == 0) { + enumId = "FAILUR"; + } + return enumId; + } + + public String getMemStatus() { + String enumId = "SAFETY"; + if (this.memused >= 80) { + enumId = "CAUTION"; + } else if (this.cpu_user + this.cpu_system + this.memused == 0) { + enumId = "FAILUR"; + } + return enumId; + } + + public String getCpuStatusName() { + if (this.cpu_user + this.cpu_system >= 80) { + return ServerStatus.CAUTION.getText(); + } else if (this.cpu_user + this.cpu_system + this.memused == 0) { + return ServerStatus.FAILUR.getText(); + } + return ServerStatus.SAFETY.getText(); + } + + public String getGpuStatusName() { + if (this.gpuUtil >= 80) { + return ServerStatus.CAUTION.getText(); + } else if (this.cpu_user + this.cpu_system + this.memused == 0) { + return ServerStatus.FAILUR.getText(); + } + return ServerStatus.SAFETY.getText(); + } + + public String getMemStatusName() { + if (this.memused >= 80) { + return ServerStatus.CAUTION.getText(); + } else if (this.cpu_user + this.cpu_system + this.memused == 0) { + return ServerStatus.FAILUR.getText(); + } + return ServerStatus.SAFETY.getText(); + } + } + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class InferenceStatusDetailDto2 { + + InferenceServerStatusDto serverStatus; + } + + @Getter + @Setter + @AllArgsConstructor + @NoArgsConstructor + public static class SaveInferenceAiDto { + + private UUID uuid; + private Long batchId; + private String status; + private String type; + private ZonedDateTime inferStartDttm; + private ZonedDateTime inferEndDttm; + private Long detectEndCnt; + private String modelComparePath; + private String modelTargetPath; + private String modelModelPath; + private ZonedDateTime modelStartDttm; + private ZonedDateTime modelEndDttm; + private Long updateUid; + private String runningModelType; + private Integer pendingJobs; + private Integer runningJobs; + private Integer completedJobs; + private Integer failedJobs; + } + + @Getter + @Setter + public static class InferenceLearnDto { + + private String uid; + private Long m1ModelBatchId; + private Long m2ModelBatchId; + private Long m3ModelBatchId; + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/inferface/CodeExpose.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/inferface/CodeExpose.java new file mode 100644 index 0000000..aa50c0e --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/inferface/CodeExpose.java @@ -0,0 +1,10 @@ +package com.kamco.cd.kamcoback.inferface; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface CodeExpose {} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/inferface/CodeHidden.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/inferface/CodeHidden.java new file mode 100644 index 0000000..7516dfe --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/inferface/CodeHidden.java @@ -0,0 +1,10 @@ +package com.kamco.cd.kamcoback.inferface; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface CodeHidden {} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/inferface/EnumType.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/inferface/EnumType.java new file mode 100644 index 0000000..2fa5f21 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/inferface/EnumType.java @@ -0,0 +1,8 @@ +package com.kamco.cd.kamcoback.inferface; + +public interface EnumType { + + String getId(); + + String getText(); +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/inferface/JsonFormatDttm.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/inferface/JsonFormatDttm.java new file mode 100644 index 0000000..aabb352 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/inferface/JsonFormatDttm.java @@ -0,0 +1,19 @@ +package com.kamco.cd.kamcoback.inferface; + +import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; +import com.fasterxml.jackson.annotation.JsonFormat; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ElementType.FIELD, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@JacksonAnnotationsInside +@JsonFormat( + shape = JsonFormat.Shape.STRING, + pattern = "yyyy-MM-dd'T'HH:mm:ssXXX", + timezone = "Asia/Seoul") +public @interface JsonFormatDttm {} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/log/dto/EventStatus.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/log/dto/EventStatus.java new file mode 100644 index 0000000..1768945 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/log/dto/EventStatus.java @@ -0,0 +1,24 @@ +package com.kamco.cd.kamcoback.log.dto; + +import com.kamco.cd.kamcoback.common.utils.enums.EnumType; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum EventStatus implements EnumType { + SUCCESS("이벤트 결과 성공"), + FAILED("이벤트 결과 실패"); + + private final String desc; + + @Override + public String getId() { + return name(); + } + + @Override + public String getText() { + return desc; + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/log/dto/EventType.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/log/dto/EventType.java new file mode 100644 index 0000000..891429f --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/log/dto/EventType.java @@ -0,0 +1,42 @@ +package com.kamco.cd.kamcoback.log.dto; + +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 EventType implements EnumType { + LIST("목록"), + DETAIL("상세"), + POPUP("팝업"), + STATUS("상태"), + ADDED("추가"), + MODIFIED("수정"), + REMOVE("삭제"), + DOWNLOAD("다운로드"), + LOGIN("로그인"), + OTHER("기타"); + + private final String desc; + + public static EventType fromName(String name) { + try { + return EventType.valueOf(name.toUpperCase()); + } catch (Exception e) { + return OTHER; + } + } + + @Override + public String getId() { + return name(); + } + + @Override + public String getText() { + return desc; + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinJobCoreService.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinJobCoreService.java new file mode 100644 index 0000000..c8dbb13 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinJobCoreService.java @@ -0,0 +1,25 @@ +package com.kamco.cd.kamcoback.postgres.core; + +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LearnKeyDto; +import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus; +import com.kamco.cd.kamcoback.postgres.repository.gukyuin.GukYuinRepository; +import java.util.List; +import org.springframework.stereotype.Service; + +@Service +public class GukYuinJobCoreService { + + private final GukYuinRepository gukYuinRepository; + + public GukYuinJobCoreService(GukYuinRepository gukYuinRepository) { + this.gukYuinRepository = gukYuinRepository; + } + + public void updateGukYuinApplyStateComplete(Long id, GukYuinStatus status) { + gukYuinRepository.updateGukYuinApplyStateComplete(id, status); + } + + public List findGukyuinApplyStatusUidList(List gukYuinStatus) { + return gukYuinRepository.findGukyuinApplyStatusUidList(gukYuinStatus); + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/CommonCreateEntity.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/CommonCreateEntity.java new file mode 100644 index 0000000..94374fe --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/CommonCreateEntity.java @@ -0,0 +1,22 @@ +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/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/CommonDateEntity.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/CommonDateEntity.java new file mode 100644 index 0000000..cb9abe9 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/CommonDateEntity.java @@ -0,0 +1,34 @@ +package com.kamco.cd.kamcoback.postgres.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.MappedSuperclass; +import jakarta.persistence.PrePersist; +import jakarta.persistence.PreUpdate; +import java.time.ZonedDateTime; +import lombok.Getter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; + +@Getter +@MappedSuperclass +public class CommonDateEntity { + + @CreatedDate + @Column(name = "created_dttm", updatable = false, nullable = false) + private ZonedDateTime createdDate; + + @LastModifiedDate + @Column(name = "updated_dttm", nullable = false) + private ZonedDateTime modifiedDate; + + @PrePersist + protected void onPersist() { + this.createdDate = ZonedDateTime.now(); + this.modifiedDate = ZonedDateTime.now(); + } + + @PreUpdate + protected void onUpdate() { + this.modifiedDate = ZonedDateTime.now(); + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/LabelingAssignmentEntity.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/LabelingAssignmentEntity.java new file mode 100644 index 0000000..0e0abea --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/LabelingAssignmentEntity.java @@ -0,0 +1,69 @@ +package com.kamco.cd.kamcoback.postgres.entity; + +import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import java.time.ZonedDateTime; +import java.util.UUID; + +@Entity +@Table(name = "tb_labeling_assignment") +public class LabelingAssignmentEntity extends CommonDateEntity { + + @Id + @Column(name = "assignment_uid") + private UUID assignmentUid; + + @Column(name = "inference_geom_uid") + private Long inferenceGeomUid; + + @Column(name = "worker_uid") + private String workerUid; + + @Column(name = "inspector_uid") + private String inspectorUid; + + @Column(name = "work_state") + private String workState; + + @Column(name = "stagnation_yn") + private Character stagnationYn; + + @Column(name = "assign_group_id") + private String assignGroupId; + + @Column(name = "learn_geom_uid") + private Long learnGeomUid; + + @Column(name = "anal_uid") + private Long analUid; + + @Column(name = "inspect_state") + private String inspectState; + + @Column(name = "work_stat_dttm") + private ZonedDateTime workStatDttm; + + @Column(name = "inspect_stat_dttm") + private ZonedDateTime inspectStatDttm; + + public LabelAllocateDto.Basic toDto() { + return new LabelAllocateDto.Basic( + this.assignmentUid, + this.inferenceGeomUid, + this.workerUid, + this.inspectorUid, + this.workState, + this.stagnationYn, + this.assignGroupId, + this.learnGeomUid, + this.analUid, + super.getCreatedDate(), + super.getModifiedDate(), + this.inspectState, + this.workStatDttm, + this.inspectStatDttm); + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/LabelingInspectorEntity.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/LabelingInspectorEntity.java new file mode 100644 index 0000000..c378179 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/LabelingInspectorEntity.java @@ -0,0 +1,32 @@ +package com.kamco.cd.kamcoback.postgres.entity; + +import com.kamco.cd.kamcoback.label.dto.LabelInspectorDto; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import java.util.UUID; + +@Entity +@Table(name = "tb_labeling_inspector") +public class LabelingInspectorEntity extends CommonDateEntity { + + @Id + @Column(name = "operator_uid") + private UUID operatorUid; + + @Column(name = "anal_uid") + private Long analUid; + + @Column(name = "inspector_uid") + private String inspectorUid; + + public LabelInspectorDto.Basic toDto() { + return new LabelInspectorDto.Basic( + this.operatorUid, + this.analUid, + this.inspectorUid, + super.getCreatedDate(), + super.getModifiedDate()); + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapInkx50kEntity.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapInkx50kEntity.java new file mode 100644 index 0000000..c483e5c --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapInkx50kEntity.java @@ -0,0 +1,48 @@ +package com.kamco.cd.kamcoback.postgres.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.locationtech.jts.geom.Geometry; + +@Getter +@Setter +@Table(name = "tb_map_inkx_50k") +@Entity +@NoArgsConstructor +public class MapInkx50kEntity extends CommonDateEntity { + + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "tb_map_inkx_50k_fid_seq_gen") + @SequenceGenerator( + name = "tb_map_inkx_50k_fid_seq_gen", + sequenceName = "tb_map_inkx_50k_fid_seq", + allocationSize = 1) + private Integer fid; + + @Column(name = "mapidcd_no") + private String mapidcdNo; + + @Column(name = "mapid_nm") + private String mapidNm; + + @Column(name = "mapid_no") + private String mapidNo; + + @Column(name = "geom") + private Geometry geom; + + public MapInkx50kEntity(String mapidcdNo, String mapidNm, String mapidNo, Geometry geom) { + this.mapidcdNo = mapidcdNo; + this.mapidNm = mapidNm; + this.mapidNo = mapidNo; + this.geom = geom; + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapInkx5kEntity.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapInkx5kEntity.java new file mode 100644 index 0000000..3246924 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapInkx5kEntity.java @@ -0,0 +1,75 @@ +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 jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.locationtech.jts.geom.Geometry; + +@Getter +@Setter +@Table(name = "tb_map_inkx_5k") +@Entity +@NoArgsConstructor +public class MapInkx5kEntity extends CommonDateEntity { + + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "tb_map_inkx_5k_fid_seq_gen") + @SequenceGenerator( + name = "tb_map_inkx_5k_fid_seq_gen", + sequenceName = "tb_map_inkx_5k_fid_seq", + allocationSize = 1) + private Integer fid; + + @Column(name = "mapidcd_no") + private String mapidcdNo; + + @Column(name = "mapid_nm") + private String mapidNm; + + @Column(name = "geom") + private Geometry geom; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "fid_k50", referencedColumnName = "fid") + private MapInkx50kEntity mapInkx50k; + + // 사용상태 USE, + @Column(name = "use_inference") + @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) { + this.mapidcdNo = mapidcdNo; + this.mapidNm = mapidNm; + this.geom = geom; + this.mapInkx50k = mapInkx50k; + // 생성시 default 사용함 (사용,제외,사용안함) + this.useInference = CommonUseStatus.USE; + } + + // 변경 사용상태 (추론사용여부) + public void updateUseInference(CommonUseStatus useInference) { + this.useInference = useInference; + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetAnalDataInferenceGeomEntity.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetAnalDataInferenceGeomEntity.java new file mode 100644 index 0000000..c0487a1 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetAnalDataInferenceGeomEntity.java @@ -0,0 +1,181 @@ +package com.kamco.cd.kamcoback.postgres.entity; + +import com.kamco.cd.kamcoback.inference.dto.DetectionClassification; +import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto; +import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.Clazzes; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import jakarta.validation.constraints.Size; +import java.time.ZonedDateTime; +import java.util.UUID; +import lombok.Getter; +import lombok.Setter; +import org.hibernate.annotations.ColumnDefault; +import org.locationtech.jts.geom.Geometry; + +@Getter +@Setter +@Entity +@Table(name = "tb_map_sheet_anal_data_inference_geom") +public class MapSheetAnalDataInferenceGeomEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "geo_uid") + private Long geoUid; + + @Column(name = "cd_prob") + private Double cdProb; + + @Size(max = 40) + @Column(name = "class_before_cd", length = 40) + private String classBeforeCd; + + @Column(name = "class_before_prob") + private Double classBeforeProb; + + @Size(max = 40) + @Column(name = "class_after_cd", length = 40) + private String classAfterCd; + + @Column(name = "class_after_prob") + private Double classAfterProb; + + @Column(name = "map_sheet_num") + private Long mapSheetNum; + + @Column(name = "compare_yyyy") + private Integer compareYyyy; + + @Column(name = "target_yyyy") + private Integer targetYyyy; + + @Column(name = "area") + private Double area; + + @Size(max = 100) + @Column(name = "geo_type", length = 100) + private String geoType; + + @Column(name = "data_uid") + private Long dataUid; + + @ColumnDefault("now()") + @Column(name = "created_dttm") + private ZonedDateTime createdDttm; + + @Column(name = "created_uid") + private Long createdUid; + + @ColumnDefault("now()") + @Column(name = "updated_dttm") + private ZonedDateTime updatedDttm; + + @Column(name = "updated_uid") + private Long updatedUid; + + @ColumnDefault("0") + @Column(name = "geom_cnt") + private Long geomCnt; + + @ColumnDefault("0") + @Column(name = "pnu") + private Long pnu; + + @Size(max = 20) + @Column(name = "fit_state", length = 20) + private String fitState; + + @ColumnDefault("now()") + @Column(name = "fit_state_dttm") + private ZonedDateTime fitStateDttm; + + @Column(name = "labeler_uid") + private Long labelerUid; + + @Size(max = 20) + @ColumnDefault("'0'") + @Column(name = "label_state", length = 20) + private String labelState; + + @ColumnDefault("now()") + @Column(name = "label_state_dttm") + private ZonedDateTime labelStateDttm; + + @Column(name = "tester_uid") + private Long testerUid; + + @Size(max = 20) + @ColumnDefault("'0'") + @Column(name = "test_state", length = 20) + private String testState; + + @ColumnDefault("now()") + @Column(name = "test_state_dttm") + private ZonedDateTime testStateDttm; + + @Column(name = "fit_state_cmmnt", length = Integer.MAX_VALUE) + private String fitStateCmmnt; + + @Column(name = "ref_map_sheet_num") + private Long refMapSheetNum; + + @ColumnDefault("uuid_generate_v4()") + @Column(name = "uuid") + private UUID uuid; + + @Column(name = "stage") + private Integer stage; + + @Column(name = "file_created_yn") + private Boolean fileCreatedYn; + + @Column(name = "geom", columnDefinition = "geometry") + private Geometry geom; + + @Column(name = "geom_center", columnDefinition = "geometry") + private Geometry geomCenter; + + @Column(name = "before_geom", columnDefinition = "geometry") + private Geometry beforeGeom; + + @Column(name = "file_created_dttm") + private ZonedDateTime fileCreatedDttm; + + @Column(name = "result_uid") + private String resultUid; + + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "map_5k_id", referencedColumnName = "fid") + private MapInkx5kEntity map5k; + + @Column(name = "label_send_dttm") + private ZonedDateTime labelSendDttm; + + @Column(name = "lock_yn") + private String lockYn; + + public InferenceDetailDto.DetailListEntity toEntity() { + DetectionClassification classification = DetectionClassification.fromString(classBeforeCd); + Clazzes comparedClazz = new Clazzes(classification, classBeforeProb); + DetectionClassification classification1 = DetectionClassification.fromString(classAfterCd); + Clazzes targetClazz = new Clazzes(classification1, classAfterProb); + InferenceDetailDto.MapSheet mapSheet = map5k != null ? map5k.toEntity() : null; + + InferenceDetailDto.Coordinate coordinate = null; + if (geomCenter != null) { + org.locationtech.jts.geom.Point point = (org.locationtech.jts.geom.Point) geomCenter; + coordinate = new InferenceDetailDto.Coordinate(point.getX(), point.getY()); + } + + return new InferenceDetailDto.DetailListEntity( + uuid, cdProb, comparedClazz, targetClazz, mapSheet, coordinate, createdDttm); + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetAnalInferenceEntity.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetAnalInferenceEntity.java new file mode 100644 index 0000000..cfbbf42 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetAnalInferenceEntity.java @@ -0,0 +1,165 @@ +package com.kamco.cd.kamcoback.postgres.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; +import jakarta.validation.constraints.Size; +import java.time.ZonedDateTime; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import lombok.Getter; +import lombok.Setter; +import org.hibernate.annotations.ColumnDefault; +import org.hibernate.annotations.JdbcTypeCode; +import org.hibernate.type.SqlTypes; + +@Getter +@Setter +@Entity +@Table(name = "tb_map_sheet_anal_inference") +public class MapSheetAnalInferenceEntity { + + @Id + @GeneratedValue( + strategy = GenerationType.SEQUENCE, + generator = "tb_map_sheet_anal_inference_id_gen") + @SequenceGenerator( + name = "tb_map_sheet_anal_inference_id_gen", + sequenceName = "tb_map_sheet_anal_inference_uid", + allocationSize = 1) + @Column(name = "anal_uid", nullable = false) + private Long id; + + @Column(name = "compare_yyyy") + private Integer compareYyyy; + + @Column(name = "target_yyyy") + private Integer targetYyyy; + + @Column(name = "model_uid") + private Long modelUid; + + @Size(max = 100) + @Column(name = "server_ids", length = 100) + private String serverIds; + + @Column(name = "anal_strt_dttm") + private ZonedDateTime analStrtDttm; + + @Column(name = "anal_end_dttm") + private ZonedDateTime analEndDttm; + + @Column(name = "anal_sec") + private Long analSec; + + @Size(max = 20) + @Column(name = "anal_state", length = 20) + private String analState; + + @Size(max = 20) + @Column(name = "gukyuin_used", length = 20) + private String gukyuinUsed; + + @Column(name = "accuracy") + private Double accuracy; + + @Size(max = 255) + @Column(name = "result_url") + private String resultUrl; + + @ColumnDefault("now()") + @Column(name = "created_dttm") + private ZonedDateTime createdDttm; + + @Column(name = "created_uid") + private Long createdUid; + + @ColumnDefault("now()") + @Column(name = "updated_dttm") + private ZonedDateTime updatedDttm; + + @Column(name = "updated_uid") + private Long updatedUid; + + @Size(max = 255) + @Column(name = "anal_title") + private String analTitle; + + @Column(name = "detecting_cnt") + private Long detectingCnt; + + @Column(name = "anal_pred_sec") + private Long analPredSec; + + @Column(name = "model_ver_uid") + private Long modelVerUid; + + @Column(name = "hyper_params") + @JdbcTypeCode(SqlTypes.JSON) + private Map hyperParams; + + @Column(name = "tranning_rate") + private List tranningRate; + + @Column(name = "validation_rate") + private List validationRate; + + @Column(name = "test_rate", length = Integer.MAX_VALUE) + private String testRate; + + @Size(max = 128) + @Column(name = "detecting_description", length = 128) + private String detectingDescription; + + @Size(max = 12) + @Column(name = "base_map_sheet_num", length = 12) + private String baseMapSheetNum; + + @ColumnDefault("gen_random_uuid()") + @Column(name = "uuid") + private UUID uuid; + + @Size(max = 50) + @Column(name = "model_m1_ver", length = 50) + private String modelM1Ver; + + @Size(max = 50) + @Column(name = "model_m2_ver", length = 50) + private String modelM2Ver; + + @Size(max = 50) + @Column(name = "model_m3_ver", length = 50) + private String modelM3Ver; + + @Size(max = 20) + @Column(name = "anal_target_type", length = 20) + private String analTargetType; + + @Column(name = "gukyuin_apply_dttm") + private ZonedDateTime gukyuinApplyDttm; + + @Size(max = 20) + @Column(name = "detection_data_option", length = 20) + private String detectionDataOption; + + @Column(name = "stage") + private Integer stage; + + @Size(max = 1) + @ColumnDefault("'N'") + @Column(name = "labeling_closed_yn", length = 1) + private String labelingClosedYn = "N"; + + @Size(max = 1) + @ColumnDefault("'N'") + @Column(name = "inspection_closed_yn", length = 1) + private String inspectionClosedYn = "N"; + + @Column(name = "learn_id") + private Long learnId; +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearnDataGeomEntity.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearnDataGeomEntity.java new file mode 100644 index 0000000..d560d54 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearnDataGeomEntity.java @@ -0,0 +1,45 @@ +package com.kamco.cd.kamcoback.postgres.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Getter; +import lombok.Setter; +import org.locationtech.jts.geom.Geometry; + +/** 라벨링 툴에서 그린 폴리곤 저장 테이블 */ +@Getter +@Setter +@Entity +@Table(name = "tb_map_sheet_learn_data_geom") +public class MapSheetLearnDataGeomEntity extends CommonDateEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "geo_uid", nullable = false) + private Long geoUid; + + @Column(name = "after_yyyy") + private Integer afterYyyy; + + @Column(name = "area") + private Double area; + + @Column(name = "before_yyyy") + private Integer beforeYyyy; + + @Column(name = "class_after_cd") + private String classAfterCd; + + @Column(name = "class_before_cd") + private String classBeforeCd; + + @Column(name = "geom") + private Geometry geom; + + @Column(name = "file_create_yn") + private Boolean fileCreateYn; +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearnEntity.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearnEntity.java new file mode 100644 index 0000000..a161c05 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearnEntity.java @@ -0,0 +1,221 @@ +package com.kamco.cd.kamcoback.postgres.entity; + +import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus; +import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import java.time.ZonedDateTime; +import java.util.UUID; +import lombok.Getter; +import lombok.Setter; +import org.hibernate.annotations.ColumnDefault; + +@Getter +@Setter +@Entity +@Table(name = "tb_map_sheet_learn") +public class MapSheetLearnEntity { + + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "tb_map_sheet_learn_id_gen") + @SequenceGenerator( + name = "tb_map_sheet_learn_id_gen", + sequenceName = "tb_map_sheet_learn_uid", + allocationSize = 1) + @Column(name = "id", nullable = false) + private Long id; + + @ColumnDefault("gen_random_uuid()") + @Column(name = "uuid") + private UUID uuid = UUID.randomUUID(); + + @Size(max = 200) + @NotNull + @Column(name = "title", nullable = false, length = 200) + private String title; + + @Size(max = 20) + @Column(name = "status", length = 10) + private String status; + + @Column(name = "m1_model_uuid") + private UUID m1ModelUuid; + + @Column(name = "m2_model_uuid") + private UUID m2ModelUuid; + + @Column(name = "m3_model_uuid") + private UUID m3ModelUuid; + + @Column(name = "compare_yyyy") + private Integer compareYyyy; + + @Column(name = "target_yyyy") + private Integer targetYyyy; + + @Size(max = 20) + @Column(name = "detect_option", length = 20) + private String detectOption; + + @Size(max = 100) + @Column(name = "map_sheet_cnt", length = 100) + private String mapSheetCnt; + + @Size(max = 20) + @Column(name = "map_sheet_scope", length = 20) + private String mapSheetScope; + + @Column(name = "detecting_cnt") + private Long detectingCnt; + + @Column(name = "infer_start_dttm") + private ZonedDateTime inferStartDttm; + + @Column(name = "infer_end_dttm") + private ZonedDateTime inferEndDttm; + + @Column(name = "elapsed_time") + private ZonedDateTime elapsedTime; + + @Column(name = "apply_yn") + private Boolean applyYn; + + @Column(name = "apply_dttm") + private ZonedDateTime applyDttm; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "created_dttm") + private ZonedDateTime createdDttm; + + @Column(name = "created_uid") + private Long createdUid; + + @ColumnDefault("now()") + @Column(name = "updated_dttm") + private ZonedDateTime updatedDttm; + + @Column(name = "updated_uid") + private Long updatedUid; + + @Column(name = "running_model_type") + private String runningModelType; + + @Column(name = "detect_end_cnt") + private Long detectEndCnt; + + @Column(name = "model_compare_path") + private String modelComparePath; + + @Column(name = "model_target_path") + private String modelTargetPath; + + @Column(name = "stage") + private Integer stage; + + /* ===================== M1 ===================== */ + + @Column(name = "m1_model_batch_id") + private Long m1ModelBatchId; + + @Column(name = "m1_model_start_dttm") + private ZonedDateTime m1ModelStartDttm; + + @Column(name = "m1_model_end_dttm") + private ZonedDateTime m1ModelEndDttm; + + @Column(name = "m1_pending_jobs", nullable = false) + private int m1PendingJobs = 0; + + @Column(name = "m1_running_jobs", nullable = false) + private int m1RunningJobs = 0; + + @Column(name = "m1_completed_jobs", nullable = false) + private int m1CompletedJobs = 0; + + @Column(name = "m1_failed_jobs", nullable = false) + private int m1FailedJobs = 0; + + /* ===================== M2 ===================== */ + + @Column(name = "m2_model_batch_id") + private Long m2ModelBatchId; + + @Column(name = "m2_model_start_dttm") + private ZonedDateTime m2ModelStartDttm; + + @Column(name = "m2_model_end_dttm") + private ZonedDateTime m2ModelEndDttm; + + @Column(name = "m2_pending_jobs", nullable = false) + private int m2PendingJobs = 0; + + @Column(name = "m2_running_jobs", nullable = false) + private int m2RunningJobs = 0; + + @Column(name = "m2_completed_jobs", nullable = false) + private int m2CompletedJobs = 0; + + @Column(name = "m2_failed_jobs", nullable = false) + private int m2FailedJobs = 0; + + /* ===================== M3 ===================== */ + @Column(name = "m3_model_batch_id") + private Long m3ModelBatchId; + + @Column(name = "m3_model_start_dttm") + private ZonedDateTime m3ModelStartDttm; + + @Column(name = "m3_model_end_dttm") + private ZonedDateTime m3ModelEndDttm; + + @Column(name = "m3_pending_jobs", nullable = false) + private int m3PendingJobs = 0; + + @Column(name = "m3_running_jobs", nullable = false) + private int m3RunningJobs = 0; + + @Column(name = "m3_completed_jobs", nullable = false) + private int m3CompletedJobs = 0; + + @Column(name = "m3_failed_jobs", nullable = false) + private int m3FailedJobs = 0; + + @Column(name = "apply_status") + private String applyStatus = GukYuinStatus.PENDING.getId(); + + @Column(name = "apply_status_dttm") + private ZonedDateTime applyStatusDttm; + + @Column(name = "uid", nullable = false) + private String uid = UUID.randomUUID().toString().replace("-", "").toUpperCase(); + + @Column(name = "total_jobs") + private Long totalJobs; + + @Column(name = "chn_dtct_mst_id") + private String chnDtctMstId; + + public InferenceResultDto.ResultList toDto() { + return new InferenceResultDto.ResultList( + this.uuid, + this.title, + this.stage, + this.status, + this.mapSheetCnt, + this.detectingCnt, + this.inferStartDttm, + this.inferEndDttm, + this.applyYn, + this.applyDttm, + this.compareYyyy, + this.targetYyyy, + this.uid); + } +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/PnuEntity.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/PnuEntity.java new file mode 100644 index 0000000..46daada --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/entity/PnuEntity.java @@ -0,0 +1,50 @@ +package com.kamco.cd.kamcoback.postgres.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import java.time.OffsetDateTime; +import lombok.Getter; +import lombok.Setter; +import org.hibernate.annotations.ColumnDefault; + +@Getter +@Setter +@Entity +@Table(name = "tb_pnu") +public class PnuEntity { + + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "tb_pnu_id_gen") + @SequenceGenerator(name = "tb_pnu_id_gen", sequenceName = "tb_pnu_uid", allocationSize = 1) + @Column(name = "id", nullable = false) + private Long id; + + @NotNull + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn(name = "geo_uid", nullable = false) + private MapSheetAnalDataInferenceGeomEntity geo; + + @Size(max = 19) + @Column(name = "pnu", length = 19) + private String pnu; + + @Column(name = "created_dttm") + private OffsetDateTime createdDttm; + + @Column(name = "created_uid") + private Long createdUid; + + @ColumnDefault("false") + @Column(name = "del_yn") + private Boolean delYn; +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepository.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepository.java new file mode 100644 index 0000000..83a1e07 --- /dev/null +++ b/gukyuin/state-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/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepositoryCustom.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepositoryCustom.java new file mode 100644 index 0000000..25d5ad4 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepositoryCustom.java @@ -0,0 +1,42 @@ +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(Basic resultBody); + + void updateInferenceGeomDataPnuCnt(String chnDtctObjtId, long pnuCnt); + + Long findMapSheetAnalDataInferenceGeomUid(String chnDtctObjtId); + + void insertGeoUidPnuData(Long geoUid, String[] pnuList); + + 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); +} diff --git a/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepositoryImpl.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepositoryImpl.java new file mode 100644 index 0000000..946c7a4 --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepositoryImpl.java @@ -0,0 +1,282 @@ +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.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(Basic resultBody) { + queryFactory + .update(mapSheetLearnEntity) + .set(mapSheetLearnEntity.applyStatus, GukYuinStatus.CANCELED.getId()) + .set(mapSheetLearnEntity.applyStatusDttm, ZonedDateTime.now()) + .where(mapSheetLearnEntity.uid.eq(resultBody.getChnDtctId())) + .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) { + for (String pnu : pnuList) { + queryFactory + .insert(pnuEntity) + .columns(pnuEntity.geo.geoUid, pnuEntity.pnu, pnuEntity.createdDttm) + .values(geoUid, pnu, ZonedDateTime.now()) + .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()) + .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 + @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/state-check/src/main/java/com/kamco/cd/kamcoback/service/GukYuinApiStatusJobService.java b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/service/GukYuinApiStatusJobService.java new file mode 100644 index 0000000..351000f --- /dev/null +++ b/gukyuin/state-check/src/main/java/com/kamco/cd/kamcoback/service/GukYuinApiStatusJobService.java @@ -0,0 +1,95 @@ +package com.kamco.cd.kamcoback.scheduler.service; + +import com.fasterxml.jackson.databind.ObjectMapper; +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.ChngDetectMastDto.LearnKeyDto; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.ResultDto; +import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus; +import com.kamco.cd.kamcoback.postgres.core.GukYuinJobCoreService; +import java.util.List; +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 +@Service +@RequiredArgsConstructor +public class GukYuinApiStatusJobService { + + private final ExternalHttpClient externalHttpClient; + private final NetUtils netUtils = new NetUtils(); + private final GukYuinJobCoreService gukYuinJobCoreService; + + private final ObjectMapper objectMapper; + + @Value("${spring.profiles.active}") + private String profile; + + @Value("${gukyuin.url}") + private String gukyuinUrl; + + @Value("${gukyuin.cdi}") + private String gukyuinCdiUrl; + + /** + * 실행중인 profile + * + * @return + */ + private boolean isLocalProfile() { + return "local".equalsIgnoreCase(profile); + } + + /** 국유인 연동 후, 100% 되었는지 확인하는 스케줄링 매 10분마다 호출 */ + @Scheduled(cron = "0 0/10 * * * *") + public void findGukYuinMastCompleteYn() { + if (isLocalProfile()) { + return; + } + + List list = + gukYuinJobCoreService.findGukyuinApplyStatusUidList( + List.of(GukYuinStatus.IN_PROGRESS.getId())); + if (list.isEmpty()) { + return; + } + + for (LearnKeyDto dto : list) { + try { + String url = gukyuinCdiUrl + "/chn/mast/list/" + dto.getChnDtctMstId(); + + ExternalCallResult response = + externalHttpClient.call( + url, + HttpMethod.GET, + null, + netUtils.jsonHeaders(), + ChngDetectMastDto.ResultDto.class); + + ResultDto result = response.body(); + + if (result == null || result.getResult() == null || result.getResult().isEmpty()) { + log.warn("[GUKYUIN] empty result chnDtctMstId={}", dto.getChnDtctMstId()); + continue; + } + + ChngDetectMastDto.Basic basic = result.getResult().get(0); + + Integer progress = + basic.getExcnPgrt() == null ? null : Integer.parseInt(basic.getExcnPgrt().trim()); + if (progress != null && progress == 100) { + gukYuinJobCoreService.updateGukYuinApplyStateComplete( + dto.getId(), GukYuinStatus.GUK_COMPLETED); + } + } catch (Exception e) { + log.error("[GUKYUIN] failed uid={}", dto.getChnDtctMstId(), e); + } + } + } +} diff --git a/gukyuin/state-check/src/main/resources/application.yml b/gukyuin/state-check/src/main/resources/application.yml new file mode 100644 index 0000000..5d1aadc --- /dev/null +++ b/gukyuin/state-check/src/main/resources/application.yml @@ -0,0 +1,4 @@ +server: + port: 9080 + + diff --git a/gukyuin/state-check/src/main/resources/application_dev.yml b/gukyuin/state-check/src/main/resources/application_dev.yml new file mode 100644 index 0000000..80d48c2 --- /dev/null +++ b/gukyuin/state-check/src/main/resources/application_dev.yml @@ -0,0 +1,71 @@ +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/state-check/src/main/resources/application_local.yml b/gukyuin/state-check/src/main/resources/application_local.yml new file mode 100644 index 0000000..a5a4da3 --- /dev/null +++ b/gukyuin/state-check/src/main/resources/application_local.yml @@ -0,0 +1,71 @@ +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/state-check/src/main/resources/application_prod.yml b/gukyuin/state-check/src/main/resources/application_prod.yml new file mode 100644 index 0000000..ea3d329 --- /dev/null +++ b/gukyuin/state-check/src/main/resources/application_prod.yml @@ -0,0 +1,71 @@ +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/state-check/src/main/resources/static/chunk_upload_test.html b/gukyuin/state-check/src/main/resources/static/chunk_upload_test.html new file mode 100644 index 0000000..2c331d4 --- /dev/null +++ b/gukyuin/state-check/src/main/resources/static/chunk_upload_test.html @@ -0,0 +1,137 @@ + + + + + Chunk Upload Test + + +

대용량 파일 청크 업로드 테스트

+ +* Chunk 테스트 사이즈 10M (10 * 1024 * 1024) - 성능에 따라 변경가능

+ +* 업로드 API선택

+ +

+* 파일첨부

+

+ +



+* 업로드시 업로드 이력을 추적하기 위해 UUID생성해서 전달(파일병합시 사용)(script 예제참고)

+UUID :

+ +* API 호출시 파일정보 추출해서 자동 할당해야 함.(script 예제참고)

+chunkIndex :

+chunkTotalIndex :

+ +* API 호출시 파일정보 추출해서 자동 할당해야 함.(script 예제참고)

+fileSize :

+ + + +

+* 진행율(%)

+
+

+* 결과메세지

+
+ + + + diff --git a/label/label-to-review/.gradle/8.14/executionHistory/executionHistory.bin b/label/label-to-review/.gradle/8.14/executionHistory/executionHistory.bin index b5d8d77..c2fffe4 100644 Binary files a/label/label-to-review/.gradle/8.14/executionHistory/executionHistory.bin and b/label/label-to-review/.gradle/8.14/executionHistory/executionHistory.bin differ diff --git a/label/label-to-review/.gradle/8.14/executionHistory/executionHistory.lock b/label/label-to-review/.gradle/8.14/executionHistory/executionHistory.lock index 5370e61..04ac6bf 100644 Binary files a/label/label-to-review/.gradle/8.14/executionHistory/executionHistory.lock and b/label/label-to-review/.gradle/8.14/executionHistory/executionHistory.lock differ diff --git a/label/label-to-review/.gradle/8.14/fileHashes/fileHashes.bin b/label/label-to-review/.gradle/8.14/fileHashes/fileHashes.bin index c2db215..c9e8a50 100644 Binary files a/label/label-to-review/.gradle/8.14/fileHashes/fileHashes.bin and b/label/label-to-review/.gradle/8.14/fileHashes/fileHashes.bin differ diff --git a/label/label-to-review/.gradle/8.14/fileHashes/fileHashes.lock b/label/label-to-review/.gradle/8.14/fileHashes/fileHashes.lock index 0030c93..e10faee 100644 Binary files a/label/label-to-review/.gradle/8.14/fileHashes/fileHashes.lock and b/label/label-to-review/.gradle/8.14/fileHashes/fileHashes.lock differ diff --git a/label/label-to-review/.gradle/8.14/fileHashes/resourceHashesCache.bin b/label/label-to-review/.gradle/8.14/fileHashes/resourceHashesCache.bin index 6502d3c..86e0be4 100644 Binary files a/label/label-to-review/.gradle/8.14/fileHashes/resourceHashesCache.bin and b/label/label-to-review/.gradle/8.14/fileHashes/resourceHashesCache.bin differ diff --git a/label/label-to-review/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/label/label-to-review/.gradle/buildOutputCleanup/buildOutputCleanup.lock index a00c62f..aaca4c6 100644 Binary files a/label/label-to-review/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/label/label-to-review/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/label/label-to-review/.gradle/file-system.probe b/label/label-to-review/.gradle/file-system.probe index 2dea263..599825a 100644 Binary files a/label/label-to-review/.gradle/file-system.probe and b/label/label-to-review/.gradle/file-system.probe differ diff --git a/label/label-to-review/README.md b/label/label-to-review/README.md index bcef71a..78f614a 100644 --- a/label/label-to-review/README.md +++ b/label/label-to-review/README.md @@ -1,4 +1,4 @@ -# IMAGERY MAKE DATASET +# LABEL TO REVIEW > 어제 라벨링 완료된 것 검수할당 schedule diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$AllocateDto.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$AllocateDto.class deleted file mode 100644 index a553955..0000000 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$AllocateDto.class and /dev/null differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$AllocateInfoDto.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$AllocateInfoDto.class deleted file mode 100644 index b3249df..0000000 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$AllocateInfoDto.class and /dev/null differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$AllocateMoveDto.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$AllocateMoveDto.class deleted file mode 100644 index 57115ff..0000000 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$AllocateMoveDto.class and /dev/null differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$Basic.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$Basic.class deleted file mode 100644 index ee396af..0000000 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$Basic.class and /dev/null differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$InferenceDetail.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$InferenceDetail.class deleted file mode 100644 index 9f2c136..0000000 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$InferenceDetail.class and /dev/null differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$InspectState.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$InspectState.class deleted file mode 100644 index 10a85d5..0000000 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$InspectState.class and /dev/null differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$LabelMngState.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$LabelMngState.class deleted file mode 100644 index d8f3a01..0000000 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$LabelMngState.class and /dev/null differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$LabelState.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$LabelState.class deleted file mode 100644 index dc99b29..0000000 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$LabelState.class and /dev/null differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$LabelerDetail.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$LabelerDetail.class deleted file mode 100644 index 6af39b2..0000000 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$LabelerDetail.class and /dev/null differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$LabelingStatDto.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$LabelingStatDto.class deleted file mode 100644 index c6e7a6a..0000000 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$LabelingStatDto.class and /dev/null differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$MoveInfo.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$MoveInfo.class deleted file mode 100644 index 1acd221..0000000 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$MoveInfo.class and /dev/null differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$MoveUserList.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$MoveUserList.class deleted file mode 100644 index 663dcb7..0000000 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$MoveUserList.class and /dev/null differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$TargetInspector.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$TargetInspector.class deleted file mode 100644 index 98634ad..0000000 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$TargetInspector.class and /dev/null differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$TargetUser.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$TargetUser.class deleted file mode 100644 index 53dee8e..0000000 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$TargetUser.class and /dev/null differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$UserList.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$UserList.class deleted file mode 100644 index 7b4c74f..0000000 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$UserList.class and /dev/null differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$WorkHistoryDto.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$WorkHistoryDto.class deleted file mode 100644 index 56f3cef..0000000 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$WorkHistoryDto.class and /dev/null differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$searchReq.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$searchReq.class deleted file mode 100644 index 555a40d..0000000 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$searchReq.class and /dev/null differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelInspectorDto$Basic.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelInspectorDto$Basic.class deleted file mode 100644 index 1801b99..0000000 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelInspectorDto$Basic.class and /dev/null differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelLabelerDto$Basic.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelLabelerDto$Basic.class deleted file mode 100644 index be9ec1e..0000000 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelLabelerDto$Basic.class and /dev/null differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/postgres/core/TrainingDataLabelJobCoreService.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/postgres/core/TrainingDataLabelJobCoreService.class index 93e52d0..35a328c 100644 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/postgres/core/TrainingDataLabelJobCoreService.class and b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/postgres/core/TrainingDataLabelJobCoreService.class differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/LabelingAssignmentEntity.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/LabelingAssignmentEntity.class index a2dba9c..0298c50 100644 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/LabelingAssignmentEntity.class and b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/LabelingAssignmentEntity.class differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/LabelingInspectorEntity.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/LabelingInspectorEntity.class index 4018c4d..2f7d166 100644 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/LabelingInspectorEntity.class and b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/LabelingInspectorEntity.class differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataLabelJobRepositoryCustom.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataLabelJobRepositoryCustom.class index 189c11f..60a1f82 100644 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataLabelJobRepositoryCustom.class and b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataLabelJobRepositoryCustom.class differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataLabelJobRepositoryImpl.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataLabelJobRepositoryImpl.class index 05cec56..0476d72 100644 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataLabelJobRepositoryImpl.class and b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataLabelJobRepositoryImpl.class differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$AnalCntInfo.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$AnalCntInfo.class deleted file mode 100644 index fe3de82..0000000 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$AnalCntInfo.class and /dev/null differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$AnalMapSheetList.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$AnalMapSheetList.class deleted file mode 100644 index 6ca71b7..0000000 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$AnalMapSheetList.class and /dev/null differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$CompleteLabelData$GeoJsonFeature.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$CompleteLabelData$GeoJsonFeature.class deleted file mode 100644 index 749ef9b..0000000 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$CompleteLabelData$GeoJsonFeature.class and /dev/null differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$CompleteLabelData$Properties.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$CompleteLabelData$Properties.class deleted file mode 100644 index 47ab502..0000000 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$CompleteLabelData$Properties.class and /dev/null differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$CompleteLabelData.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$CompleteLabelData.class deleted file mode 100644 index 8a837d3..0000000 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$CompleteLabelData.class and /dev/null differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$FeatureCollection.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$FeatureCollection.class deleted file mode 100644 index 75f80b3..0000000 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$FeatureCollection.class and /dev/null differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$InspectorPendingDto.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$InspectorPendingDto.class deleted file mode 100644 index 131c4ee..0000000 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$InspectorPendingDto.class and /dev/null differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$Tasks.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$Tasks.class deleted file mode 100644 index 7e4f989..0000000 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$Tasks.class and /dev/null differ diff --git a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/service/TrainingDataLabelJobService.class b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/service/TrainingDataLabelJobService.class index 106e71d..2f9fef1 100644 Binary files a/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/service/TrainingDataLabelJobService.class and b/label/label-to-review/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/service/TrainingDataLabelJobService.class differ diff --git a/label/label-to-review/build/libs/label-to-review.jar b/label/label-to-review/build/libs/label-to-review.jar index c0415ea..bc3494d 100644 Binary files a/label/label-to-review/build/libs/label-to-review.jar and b/label/label-to-review/build/libs/label-to-review.jar differ diff --git a/label/label-to-review/build/tmp/compileJava/previous-compilation-data.bin b/label/label-to-review/build/tmp/compileJava/previous-compilation-data.bin index de6142c..f076f10 100644 Binary files a/label/label-to-review/build/tmp/compileJava/previous-compilation-data.bin and b/label/label-to-review/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/dto/LabelAllocateDto.java b/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/dto/LabelAllocateDto.java index f07f34c..1112194 100644 --- a/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/dto/LabelAllocateDto.java +++ b/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/dto/LabelAllocateDto.java @@ -1,4 +1,4 @@ -package com.kamco.cd.kamcoback.label.dto; +package com.kamco.cd.kamcoback.dto; import com.kamco.cd.kamcoback.common.utils.enums.CodeExpose; import com.kamco.cd.kamcoback.common.utils.enums.EnumType; diff --git a/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/dto/LabelInspectorDto.java b/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/dto/LabelInspectorDto.java index 89fd8ef..171748b 100644 --- a/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/dto/LabelInspectorDto.java +++ b/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/dto/LabelInspectorDto.java @@ -1,4 +1,4 @@ -package com.kamco.cd.kamcoback.label.dto; +package com.kamco.cd.kamcoback.dto; import java.time.ZonedDateTime; import java.util.UUID; diff --git a/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/dto/LabelLabelerDto.java b/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/dto/LabelLabelerDto.java index 80360db..16ab3be 100644 --- a/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/dto/LabelLabelerDto.java +++ b/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/dto/LabelLabelerDto.java @@ -1,4 +1,4 @@ -package com.kamco.cd.kamcoback.label.dto; +package com.kamco.cd.kamcoback.dto; import java.time.ZonedDateTime; import java.util.UUID; diff --git a/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/dto/TrainingDataReviewJobDto.java b/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/dto/TrainingDataReviewJobDto.java index 7d452c8..16d130c 100644 --- a/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/dto/TrainingDataReviewJobDto.java +++ b/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/dto/TrainingDataReviewJobDto.java @@ -1,4 +1,4 @@ -package com.kamco.cd.kamcoback.scheduler.dto; +package com.kamco.cd.kamcoback.dto; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonPropertyOrder; @@ -6,7 +6,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.CompleteLabelData.GeoJsonFeature; +import com.kamco.cd.kamcoback.dto.TrainingDataReviewJobDto.CompleteLabelData.GeoJsonFeature; import java.util.List; import java.util.UUID; import lombok.AllArgsConstructor; diff --git a/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/core/TrainingDataLabelJobCoreService.java b/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/core/TrainingDataLabelJobCoreService.java index 640783b..578b3da 100644 --- a/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/core/TrainingDataLabelJobCoreService.java +++ b/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/core/TrainingDataLabelJobCoreService.java @@ -1,8 +1,8 @@ package com.kamco.cd.kamcoback.postgres.core; +import com.kamco.cd.kamcoback.dto.TrainingDataReviewJobDto.InspectorPendingDto; +import com.kamco.cd.kamcoback.dto.TrainingDataReviewJobDto.Tasks; import com.kamco.cd.kamcoback.postgres.repository.scheduler.TrainingDataLabelJobRepository; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.InspectorPendingDto; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.Tasks; import java.util.List; import java.util.UUID; import lombok.RequiredArgsConstructor; diff --git a/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/entity/LabelingAssignmentEntity.java b/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/entity/LabelingAssignmentEntity.java index 0e0abea..804706c 100644 --- a/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/entity/LabelingAssignmentEntity.java +++ b/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/entity/LabelingAssignmentEntity.java @@ -1,6 +1,6 @@ package com.kamco.cd.kamcoback.postgres.entity; -import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto; +import com.kamco.cd.kamcoback.dto.LabelAllocateDto; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Id; diff --git a/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/entity/LabelingInspectorEntity.java b/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/entity/LabelingInspectorEntity.java index c378179..6aeee48 100644 --- a/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/entity/LabelingInspectorEntity.java +++ b/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/entity/LabelingInspectorEntity.java @@ -1,6 +1,6 @@ package com.kamco.cd.kamcoback.postgres.entity; -import com.kamco.cd.kamcoback.label.dto.LabelInspectorDto; +import com.kamco.cd.kamcoback.dto.LabelInspectorDto; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Id; diff --git a/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/repository/TrainingDataLabelJobRepository.java b/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataLabelJobRepository.java similarity index 100% rename from label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/repository/TrainingDataLabelJobRepository.java rename to label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataLabelJobRepository.java diff --git a/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/repository/TrainingDataLabelJobRepositoryCustom.java b/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataLabelJobRepositoryCustom.java similarity index 71% rename from label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/repository/TrainingDataLabelJobRepositoryCustom.java rename to label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataLabelJobRepositoryCustom.java index cb824f9..66654fa 100644 --- a/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/repository/TrainingDataLabelJobRepositoryCustom.java +++ b/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataLabelJobRepositoryCustom.java @@ -1,7 +1,7 @@ package com.kamco.cd.kamcoback.postgres.repository.scheduler; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.InspectorPendingDto; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.Tasks; +import com.kamco.cd.kamcoback.dto.TrainingDataReviewJobDto.InspectorPendingDto; +import com.kamco.cd.kamcoback.dto.TrainingDataReviewJobDto.Tasks; import java.util.List; import java.util.UUID; diff --git a/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/repository/TrainingDataLabelJobRepositoryImpl.java b/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataLabelJobRepositoryImpl.java similarity index 93% rename from label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/repository/TrainingDataLabelJobRepositoryImpl.java rename to label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataLabelJobRepositoryImpl.java index f1bfe27..e17e87e 100644 --- a/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/repository/TrainingDataLabelJobRepositoryImpl.java +++ b/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataLabelJobRepositoryImpl.java @@ -4,11 +4,11 @@ import static com.kamco.cd.kamcoback.postgres.entity.QLabelingAssignmentEntity.l import static com.kamco.cd.kamcoback.postgres.entity.QLabelingInspectorEntity.labelingInspectorEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataInferenceGeomEntity.mapSheetAnalDataInferenceGeomEntity; -import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.InspectState; -import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelState; +import com.kamco.cd.kamcoback.dto.LabelAllocateDto.InspectState; +import com.kamco.cd.kamcoback.dto.LabelAllocateDto.LabelState; +import com.kamco.cd.kamcoback.dto.TrainingDataReviewJobDto.InspectorPendingDto; +import com.kamco.cd.kamcoback.dto.TrainingDataReviewJobDto.Tasks; import com.kamco.cd.kamcoback.postgres.entity.LabelingAssignmentEntity; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.InspectorPendingDto; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.Tasks; import com.querydsl.core.types.Projections; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.core.types.dsl.Expressions; diff --git a/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/service/TrainingDataLabelJobService.java b/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/service/TrainingDataLabelJobService.java index 5f9a98a..d157ea9 100644 --- a/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/service/TrainingDataLabelJobService.java +++ b/label/label-to-review/src/main/java/com/kamco/cd/kamcoback/service/TrainingDataLabelJobService.java @@ -1,8 +1,8 @@ package com.kamco.cd.kamcoback.scheduler.service; +import com.kamco.cd.kamcoback.dto.TrainingDataReviewJobDto.InspectorPendingDto; +import com.kamco.cd.kamcoback.dto.TrainingDataReviewJobDto.Tasks; import com.kamco.cd.kamcoback.postgres.core.TrainingDataLabelJobCoreService; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.InspectorPendingDto; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.Tasks; import jakarta.transaction.Transactional; import java.util.ArrayList; import java.util.LinkedHashMap; diff --git a/label/review-to-down/.gradle/8.14/executionHistory/executionHistory.bin b/label/review-to-down/.gradle/8.14/executionHistory/executionHistory.bin index 258627c..3eb7f2e 100644 Binary files a/label/review-to-down/.gradle/8.14/executionHistory/executionHistory.bin and b/label/review-to-down/.gradle/8.14/executionHistory/executionHistory.bin differ diff --git a/label/review-to-down/.gradle/8.14/executionHistory/executionHistory.lock b/label/review-to-down/.gradle/8.14/executionHistory/executionHistory.lock index 077aef9..a100832 100644 Binary files a/label/review-to-down/.gradle/8.14/executionHistory/executionHistory.lock and b/label/review-to-down/.gradle/8.14/executionHistory/executionHistory.lock differ diff --git a/label/review-to-down/.gradle/8.14/fileHashes/fileHashes.bin b/label/review-to-down/.gradle/8.14/fileHashes/fileHashes.bin index 5f9b0fd..83ac6a1 100644 Binary files a/label/review-to-down/.gradle/8.14/fileHashes/fileHashes.bin and b/label/review-to-down/.gradle/8.14/fileHashes/fileHashes.bin differ diff --git a/label/review-to-down/.gradle/8.14/fileHashes/fileHashes.lock b/label/review-to-down/.gradle/8.14/fileHashes/fileHashes.lock index 7dc8ca8..79bb85a 100644 Binary files a/label/review-to-down/.gradle/8.14/fileHashes/fileHashes.lock and b/label/review-to-down/.gradle/8.14/fileHashes/fileHashes.lock differ diff --git a/label/review-to-down/.gradle/8.14/fileHashes/resourceHashesCache.bin b/label/review-to-down/.gradle/8.14/fileHashes/resourceHashesCache.bin index 472b22b..2619d8a 100644 Binary files a/label/review-to-down/.gradle/8.14/fileHashes/resourceHashesCache.bin and b/label/review-to-down/.gradle/8.14/fileHashes/resourceHashesCache.bin differ diff --git a/label/review-to-down/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/label/review-to-down/.gradle/buildOutputCleanup/buildOutputCleanup.lock index fa01cb1..050f5b3 100644 Binary files a/label/review-to-down/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/label/review-to-down/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/label/review-to-down/.gradle/file-system.probe b/label/review-to-down/.gradle/file-system.probe index 0b5b881..e29ced6 100644 Binary files a/label/review-to-down/.gradle/file-system.probe and b/label/review-to-down/.gradle/file-system.probe differ diff --git a/label/review-to-down/README.md b/label/review-to-down/README.md index 008c946..43793fe 100644 --- a/label/review-to-down/README.md +++ b/label/review-to-down/README.md @@ -1,4 +1,4 @@ -# IMAGERY MAKE DATASET +# REVIEW TO DOWN > 어제 검수완료된 것 geojson 생성 schedule diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$AllocateDto.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$AllocateDto.class deleted file mode 100644 index a553955..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$AllocateDto.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$AllocateInfoDto.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$AllocateInfoDto.class deleted file mode 100644 index b3249df..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$AllocateInfoDto.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$AllocateMoveDto.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$AllocateMoveDto.class deleted file mode 100644 index 57115ff..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$AllocateMoveDto.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$Basic.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$Basic.class deleted file mode 100644 index ee396af..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$Basic.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$InferenceDetail.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$InferenceDetail.class deleted file mode 100644 index 9f2c136..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$InferenceDetail.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$InspectState.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$InspectState.class deleted file mode 100644 index 10a85d5..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$InspectState.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$LabelMngState.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$LabelMngState.class deleted file mode 100644 index d8f3a01..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$LabelMngState.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$LabelState.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$LabelState.class deleted file mode 100644 index dc99b29..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$LabelState.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$LabelerDetail.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$LabelerDetail.class deleted file mode 100644 index 6af39b2..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$LabelerDetail.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$LabelingStatDto.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$LabelingStatDto.class deleted file mode 100644 index c6e7a6a..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$LabelingStatDto.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$MoveInfo.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$MoveInfo.class deleted file mode 100644 index 1acd221..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$MoveInfo.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$MoveUserList.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$MoveUserList.class deleted file mode 100644 index 663dcb7..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$MoveUserList.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$TargetInspector.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$TargetInspector.class deleted file mode 100644 index 98634ad..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$TargetInspector.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$TargetUser.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$TargetUser.class deleted file mode 100644 index 53dee8e..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$TargetUser.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$UserList.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$UserList.class deleted file mode 100644 index 7b4c74f..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$UserList.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$WorkHistoryDto.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$WorkHistoryDto.class deleted file mode 100644 index 56f3cef..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$WorkHistoryDto.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$searchReq.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$searchReq.class deleted file mode 100644 index 555a40d..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto$searchReq.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto.class deleted file mode 100644 index 3aeced1..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelInspectorDto$Basic.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelInspectorDto$Basic.class deleted file mode 100644 index 1801b99..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelInspectorDto$Basic.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelInspectorDto.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelInspectorDto.class deleted file mode 100644 index 6e3b61d..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelInspectorDto.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelLabelerDto$Basic.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelLabelerDto$Basic.class deleted file mode 100644 index be9ec1e..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelLabelerDto$Basic.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelLabelerDto.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelLabelerDto.class deleted file mode 100644 index 5a1b01d..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/label/dto/LabelLabelerDto.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/postgres/core/TrainingDataReviewJobCoreService.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/postgres/core/TrainingDataReviewJobCoreService.class index d3d4768..22761ae 100644 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/postgres/core/TrainingDataReviewJobCoreService.class and b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/postgres/core/TrainingDataReviewJobCoreService.class differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/LabelingAssignmentEntity.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/LabelingAssignmentEntity.class index a2dba9c..0298c50 100644 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/LabelingAssignmentEntity.class and b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/LabelingAssignmentEntity.class differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/LabelingInspectorEntity.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/LabelingInspectorEntity.class index 4018c4d..2f7d166 100644 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/LabelingInspectorEntity.class and b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/postgres/entity/LabelingInspectorEntity.class differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryCustom.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryCustom.class index a506e9a..a72a959 100644 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryCustom.class and b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryCustom.class differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryImpl.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryImpl.class index 57974e6..3e55bd1 100644 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryImpl.class and b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryImpl.class differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$AnalCntInfo.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$AnalCntInfo.class deleted file mode 100644 index fe3de82..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$AnalCntInfo.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$AnalMapSheetList.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$AnalMapSheetList.class deleted file mode 100644 index 6ca71b7..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$AnalMapSheetList.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$CompleteLabelData$GeoJsonFeature.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$CompleteLabelData$GeoJsonFeature.class deleted file mode 100644 index 749ef9b..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$CompleteLabelData$GeoJsonFeature.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$CompleteLabelData$Properties.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$CompleteLabelData$Properties.class deleted file mode 100644 index 47ab502..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$CompleteLabelData$Properties.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$CompleteLabelData.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$CompleteLabelData.class deleted file mode 100644 index 8a837d3..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$CompleteLabelData.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$FeatureCollection.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$FeatureCollection.class deleted file mode 100644 index 75f80b3..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$FeatureCollection.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$InspectorPendingDto.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$InspectorPendingDto.class deleted file mode 100644 index 131c4ee..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$InspectorPendingDto.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$Tasks.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$Tasks.class deleted file mode 100644 index 7e4f989..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto$Tasks.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto.class deleted file mode 100644 index 78177dd..0000000 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/dto/TrainingDataReviewJobDto.class and /dev/null differ diff --git a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/service/TrainingDataReviewJobService.class b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/service/TrainingDataReviewJobService.class index 603957e..58e90df 100644 Binary files a/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/service/TrainingDataReviewJobService.class and b/label/review-to-down/build/classes/java/main/com/kamco/cd/kamcoback/scheduler/service/TrainingDataReviewJobService.class differ diff --git a/label/review-to-down/build/libs/review-to-down.jar b/label/review-to-down/build/libs/review-to-down.jar index ac49687..2cf1b6f 100644 Binary files a/label/review-to-down/build/libs/review-to-down.jar and b/label/review-to-down/build/libs/review-to-down.jar differ diff --git a/label/review-to-down/build/tmp/compileJava/previous-compilation-data.bin b/label/review-to-down/build/tmp/compileJava/previous-compilation-data.bin index ce55dc8..a0d4976 100644 Binary files a/label/review-to-down/build/tmp/compileJava/previous-compilation-data.bin and b/label/review-to-down/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/dto/LabelAllocateDto.java b/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/dto/LabelAllocateDto.java index f07f34c..1112194 100644 --- a/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/dto/LabelAllocateDto.java +++ b/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/dto/LabelAllocateDto.java @@ -1,4 +1,4 @@ -package com.kamco.cd.kamcoback.label.dto; +package com.kamco.cd.kamcoback.dto; import com.kamco.cd.kamcoback.common.utils.enums.CodeExpose; import com.kamco.cd.kamcoback.common.utils.enums.EnumType; diff --git a/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/dto/LabelInspectorDto.java b/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/dto/LabelInspectorDto.java index 89fd8ef..171748b 100644 --- a/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/dto/LabelInspectorDto.java +++ b/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/dto/LabelInspectorDto.java @@ -1,4 +1,4 @@ -package com.kamco.cd.kamcoback.label.dto; +package com.kamco.cd.kamcoback.dto; import java.time.ZonedDateTime; import java.util.UUID; diff --git a/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/dto/LabelLabelerDto.java b/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/dto/LabelLabelerDto.java index 80360db..16ab3be 100644 --- a/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/dto/LabelLabelerDto.java +++ b/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/dto/LabelLabelerDto.java @@ -1,4 +1,4 @@ -package com.kamco.cd.kamcoback.label.dto; +package com.kamco.cd.kamcoback.dto; import java.time.ZonedDateTime; import java.util.UUID; diff --git a/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/dto/TrainingDataReviewJobDto.java b/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/dto/TrainingDataReviewJobDto.java index 7d452c8..16d130c 100644 --- a/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/dto/TrainingDataReviewJobDto.java +++ b/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/dto/TrainingDataReviewJobDto.java @@ -1,4 +1,4 @@ -package com.kamco.cd.kamcoback.scheduler.dto; +package com.kamco.cd.kamcoback.dto; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonPropertyOrder; @@ -6,7 +6,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.CompleteLabelData.GeoJsonFeature; +import com.kamco.cd.kamcoback.dto.TrainingDataReviewJobDto.CompleteLabelData.GeoJsonFeature; import java.util.List; import java.util.UUID; import lombok.AllArgsConstructor; diff --git a/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/core/TrainingDataReviewJobCoreService.java b/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/core/TrainingDataReviewJobCoreService.java index ad72ea5..94443d3 100644 --- a/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/core/TrainingDataReviewJobCoreService.java +++ b/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/core/TrainingDataReviewJobCoreService.java @@ -1,9 +1,9 @@ package com.kamco.cd.kamcoback.postgres.core; +import com.kamco.cd.kamcoback.dto.TrainingDataReviewJobDto.AnalCntInfo; +import com.kamco.cd.kamcoback.dto.TrainingDataReviewJobDto.AnalMapSheetList; +import com.kamco.cd.kamcoback.dto.TrainingDataReviewJobDto.CompleteLabelData; import com.kamco.cd.kamcoback.postgres.repository.scheduler.TrainingDataReviewJobRepository; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.AnalCntInfo; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.AnalMapSheetList; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.CompleteLabelData; import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; diff --git a/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/entity/LabelingAssignmentEntity.java b/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/entity/LabelingAssignmentEntity.java index 0e0abea..804706c 100644 --- a/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/entity/LabelingAssignmentEntity.java +++ b/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/entity/LabelingAssignmentEntity.java @@ -1,6 +1,6 @@ package com.kamco.cd.kamcoback.postgres.entity; -import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto; +import com.kamco.cd.kamcoback.dto.LabelAllocateDto; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Id; diff --git a/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/entity/LabelingInspectorEntity.java b/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/entity/LabelingInspectorEntity.java index c378179..6aeee48 100644 --- a/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/entity/LabelingInspectorEntity.java +++ b/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/entity/LabelingInspectorEntity.java @@ -1,6 +1,6 @@ package com.kamco.cd.kamcoback.postgres.entity; -import com.kamco.cd.kamcoback.label.dto.LabelInspectorDto; +import com.kamco.cd.kamcoback.dto.LabelInspectorDto; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Id; diff --git a/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/repository/TrainingDataReviewJobRepository.java b/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepository.java similarity index 100% rename from label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/repository/TrainingDataReviewJobRepository.java rename to label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepository.java diff --git a/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/repository/TrainingDataReviewJobRepositoryCustom.java b/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryCustom.java similarity index 61% rename from label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/repository/TrainingDataReviewJobRepositoryCustom.java rename to label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryCustom.java index 02ab78a..af7e751 100644 --- a/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/repository/TrainingDataReviewJobRepositoryCustom.java +++ b/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryCustom.java @@ -1,8 +1,8 @@ package com.kamco.cd.kamcoback.postgres.repository.scheduler; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.AnalCntInfo; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.AnalMapSheetList; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.CompleteLabelData; +import com.kamco.cd.kamcoback.dto.TrainingDataReviewJobDto.AnalCntInfo; +import com.kamco.cd.kamcoback.dto.TrainingDataReviewJobDto.AnalMapSheetList; +import com.kamco.cd.kamcoback.dto.TrainingDataReviewJobDto.CompleteLabelData; import java.util.List; public interface TrainingDataReviewJobRepositoryCustom { diff --git a/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/repository/TrainingDataReviewJobRepositoryImpl.java b/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryImpl.java similarity index 93% rename from label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/repository/TrainingDataReviewJobRepositoryImpl.java rename to label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryImpl.java index b27ff55..ada2f1d 100644 --- a/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/repository/TrainingDataReviewJobRepositoryImpl.java +++ b/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryImpl.java @@ -5,13 +5,13 @@ import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalInferenceEntit import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetLearnDataGeomEntity.mapSheetLearnDataGeomEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetLearnEntity.mapSheetLearnEntity; -import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.InspectState; -import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelMngState; +import com.kamco.cd.kamcoback.dto.LabelAllocateDto.InspectState; +import com.kamco.cd.kamcoback.dto.LabelAllocateDto.LabelMngState; +import com.kamco.cd.kamcoback.dto.TrainingDataReviewJobDto.AnalCntInfo; +import com.kamco.cd.kamcoback.dto.TrainingDataReviewJobDto.AnalMapSheetList; +import com.kamco.cd.kamcoback.dto.TrainingDataReviewJobDto.CompleteLabelData; +import com.kamco.cd.kamcoback.dto.TrainingDataReviewJobDto.CompleteLabelData.Properties; import com.kamco.cd.kamcoback.postgres.entity.LabelingAssignmentEntity; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.AnalCntInfo; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.AnalMapSheetList; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.CompleteLabelData; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.CompleteLabelData.Properties; import com.querydsl.core.types.Projections; import com.querydsl.core.types.dsl.CaseBuilder; import com.querydsl.core.types.dsl.Expressions; diff --git a/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/service/TrainingDataReviewJobService.java b/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/service/TrainingDataReviewJobService.java index 8f4255a..80b70a5 100644 --- a/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/service/TrainingDataReviewJobService.java +++ b/label/review-to-down/src/main/java/com/kamco/cd/kamcoback/service/TrainingDataReviewJobService.java @@ -2,12 +2,12 @@ package com.kamco.cd.kamcoback.scheduler.service; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; +import com.kamco.cd.kamcoback.dto.TrainingDataReviewJobDto.AnalCntInfo; +import com.kamco.cd.kamcoback.dto.TrainingDataReviewJobDto.AnalMapSheetList; +import com.kamco.cd.kamcoback.dto.TrainingDataReviewJobDto.CompleteLabelData; +import com.kamco.cd.kamcoback.dto.TrainingDataReviewJobDto.CompleteLabelData.GeoJsonFeature; +import com.kamco.cd.kamcoback.dto.TrainingDataReviewJobDto.FeatureCollection; import com.kamco.cd.kamcoback.postgres.core.TrainingDataReviewJobCoreService; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.AnalCntInfo; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.AnalMapSheetList; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.CompleteLabelData; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.CompleteLabelData.GeoJsonFeature; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.FeatureCollection; import jakarta.transaction.Transactional; import java.io.IOException; import java.nio.file.Files;