From d1809a6969cf495a0f97e81ab71a5382407ffd45 Mon Sep 17 00:00:00 2001 From: Moon Date: Mon, 19 Jan 2026 16:18:19 +0900 Subject: [PATCH] =?UTF-8?q?=EC=98=81=EC=83=81=EA=B4=80=EB=A6=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapsheet/dto/MapSheetMngDto.java | 3 + .../mapsheet/service/MapSheetMngService.java | 5 + .../postgres/core/MapSheetMngCoreService.java | 11 +++ .../core/MapSheetMngFileJobCoreService.java | 15 +++ .../MapSheetMngFileJobRepositoryCustom.java | 6 ++ .../MapSheetMngFileJobRepositoryImpl.java | 42 ++++++++- .../MapSheetMngFileJobController.java | 91 ++++++++++++------- .../service/MapSheetMngFileJobService.java | 56 +++++++++--- 8 files changed, 181 insertions(+), 48 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/mapsheet/dto/MapSheetMngDto.java b/src/main/java/com/kamco/cd/kamcoback/mapsheet/dto/MapSheetMngDto.java index 4abbd8d0..dafb86f7 100644 --- a/src/main/java/com/kamco/cd/kamcoback/mapsheet/dto/MapSheetMngDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/mapsheet/dto/MapSheetMngDto.java @@ -1,5 +1,6 @@ package com.kamco.cd.kamcoback.mapsheet.dto; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.kamco.cd.kamcoback.common.enums.MngStateType; import com.kamco.cd.kamcoback.common.enums.SyncStateType; import com.kamco.cd.kamcoback.common.utils.enums.EnumType; @@ -53,6 +54,8 @@ public class MapSheetMngDto { @Schema(description = "선택폴더경로", example = "D:\\app\\original-images\\2022") private String mngPath; + + @JsonIgnore private Long createdUid; } @Schema(name = "DeleteFileReq", description = "파일 삭제 요청") diff --git a/src/main/java/com/kamco/cd/kamcoback/mapsheet/service/MapSheetMngService.java b/src/main/java/com/kamco/cd/kamcoback/mapsheet/service/MapSheetMngService.java index 7b9504fd..744e8707 100644 --- a/src/main/java/com/kamco/cd/kamcoback/mapsheet/service/MapSheetMngService.java +++ b/src/main/java/com/kamco/cd/kamcoback/mapsheet/service/MapSheetMngService.java @@ -1,6 +1,7 @@ package com.kamco.cd.kamcoback.mapsheet.service; import com.kamco.cd.kamcoback.common.utils.FIleChecker; +import com.kamco.cd.kamcoback.common.utils.UserUtil; import com.kamco.cd.kamcoback.mapsheet.dto.FileDto.FilesDto; import com.kamco.cd.kamcoback.mapsheet.dto.FileDto.FoldersDto; import com.kamco.cd.kamcoback.mapsheet.dto.FileDto.SrchFilesDto; @@ -37,6 +38,7 @@ import org.springframework.web.multipart.MultipartFile; public class MapSheetMngService { private final MapSheetMngCoreService mapSheetMngCoreService; + private final UserUtil userUtil = new UserUtil(); @Value("${file.sync-root-dir}") private String syncRootDir; @@ -87,6 +89,9 @@ public class MapSheetMngService { @Transactional public DmlReturn mngDataSave(AddReq addReq) { + + addReq.setCreatedUid(userUtil.getId()); + int execCnt = mapSheetMngCoreService.mngDataSave(addReq); return new MapSheetMngDto.DmlReturn("success", addReq.getMngYyyy() + "년, " + execCnt + "건 생성"); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/MapSheetMngCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/MapSheetMngCoreService.java index 7b7a5d23..ca9609df 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/MapSheetMngCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/MapSheetMngCoreService.java @@ -1,5 +1,6 @@ package com.kamco.cd.kamcoback.postgres.core; +import com.kamco.cd.kamcoback.common.enums.MngStateType; import com.kamco.cd.kamcoback.common.exception.CustomApiException; import com.kamco.cd.kamcoback.common.geometry.GeoJsonFileWriter; import com.kamco.cd.kamcoback.common.geometry.GeoJsonFileWriter.ImageFeature; @@ -20,6 +21,7 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.time.ZonedDateTime; import java.util.Arrays; import java.util.List; import java.util.Objects; @@ -136,6 +138,15 @@ public class MapSheetMngCoreService { MapSheetMngEntity entity = new MapSheetMngEntity(); entity.setMngYyyy(addReq.getMngYyyy()); entity.setMngPath(addReq.getMngPath()); + entity.setMngState(MngStateType.NOTYET.name()); + entity.setSyncState(MngStateType.NOTYET.name()); + entity.setSyncCheckState(MngStateType.NOTYET.name()); + entity.setMngStateDttm(ZonedDateTime.now()); + entity.setCreatedDttm(ZonedDateTime.now()); + entity.setUpdatedDttm(ZonedDateTime.now()); + entity.setSyncStateDttm(ZonedDateTime.now()); + entity.setCreatedUid(addReq.getCreatedUid()); + entity.setUpdatedUid(addReq.getCreatedUid()); mapSheetMngRepository.deleteByMngYyyyMngAll(addReq.getMngYyyy()); diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/MapSheetMngFileJobCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/MapSheetMngFileJobCoreService.java index 8d1dbf03..8832f207 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/MapSheetMngFileJobCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/MapSheetMngFileJobCoreService.java @@ -51,4 +51,19 @@ public class MapSheetMngFileJobCoreService { return new MapSheetMngDto.DmlReturn("success", saved.getFileUid().toString()); } + + public Long findByMngYyyyTargetMapSheetNotYetCount(int mngYyyy){ + return mapSheetMngFileJobRepository.findByMngYyyyTargetMapSheetNotYetCount(mngYyyy); + } + + public void mngDataState(int mngYyyy, String mngState) + { + mapSheetMngFileJobRepository.mngDataState(mngYyyy, mngState); + } + + public Integer findNotYetMapSheetMng() + { + return mapSheetMngFileJobRepository.findNotYetMapSheetMng(); + } + } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/MapSheetMngFileJobRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/MapSheetMngFileJobRepositoryCustom.java index 5b10eaee..6467d921 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/MapSheetMngFileJobRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/MapSheetMngFileJobRepositoryCustom.java @@ -12,4 +12,10 @@ public interface MapSheetMngFileJobRepositoryCustom { void mngHstDataSyncStateUpdate(MapSheetMngDto.MngHstDto updateReq); List findTargetMapSheetFileList(long targetNum, int pageSize); + + Long findByMngYyyyTargetMapSheetNotYetCount(int mngYyyy); + + public void mngDataState(int mngYyyy, String mngState); + + public Integer findNotYetMapSheetMng(); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/MapSheetMngFileJobRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/MapSheetMngFileJobRepositoryImpl.java index 116696e9..e109e2cb 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/MapSheetMngFileJobRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/MapSheetMngFileJobRepositoryImpl.java @@ -34,6 +34,20 @@ public class MapSheetMngFileJobRepositoryImpl extends QuerydslRepositorySupport this.queryFactory = queryFactory; } + @Override + public Integer findNotYetMapSheetMng(){ + Integer countQuery = + queryFactory + .select(mapSheetMngEntity.mngYyyy) + .from(mapSheetMngEntity) + .where(mapSheetMngEntity.mngState.eq("NOTYET") + .or(mapSheetMngEntity.mngState.eq("PROCESSING"))) + .limit(1) + .fetchOne(); + + return countQuery; + } + @Override public Page findMapSheetMngList(MapSheetMngDto.MngSearchReq searchReq) { @@ -106,6 +120,30 @@ public class MapSheetMngFileJobRepositoryImpl extends QuerydslRepositorySupport return new PageImpl<>(foundContent, pageable, countQuery); } + @Override + public Long findByMngYyyyTargetMapSheetNotYetCount(int mngYyyy){ + Long countQuery = + queryFactory + .select(mapSheetMngHstEntity.mngYyyy.count()) + .from(mapSheetMngHstEntity) + .where(mapSheetMngHstEntity.mngYyyy.eq(mngYyyy) + .and(mapSheetMngHstEntity.syncState.eq("NOTYET"))) + .fetchOne(); + + return countQuery; + } + + public void mngDataState(int mngYyyy, String mngState){ + long updateCount = + queryFactory + .update(mapSheetMngEntity) + .set(mapSheetMngEntity.mngState, mngState) + .set(mapSheetMngEntity.syncState, mngState) + .set(mapSheetMngEntity.syncCheckState, mngState) + .where(mapSheetMngEntity.mngYyyy.eq(mngYyyy)) + .execute(); + } + public void mngHstDataSyncStateUpdate(MapSheetMngDto.MngHstDto updateReq) { ZonedDateTime now = ZonedDateTime.now(); @@ -118,7 +156,7 @@ public class MapSheetMngFileJobRepositoryImpl extends QuerydslRepositorySupport .set(mapSheetMngHstEntity.dataStateDttm, now) .set(mapSheetMngHstEntity.syncState, updateReq.getSyncState()) .set(mapSheetMngHstEntity.syncEndDttm, now) - .set(mapSheetMngHstEntity.syncCheckState, "DONE") + .set(mapSheetMngHstEntity.syncCheckState, "NOTYET") .set(mapSheetMngHstEntity.syncCheckStrtDttm, now) .set(mapSheetMngHstEntity.syncCheckEndDttm, now) .where(mapSheetMngHstEntity.hstUid.eq(updateReq.getHstUid())) @@ -132,7 +170,7 @@ public class MapSheetMngFileJobRepositoryImpl extends QuerydslRepositorySupport .set(mapSheetMngHstEntity.syncState, updateReq.getSyncState()) .set(mapSheetMngHstEntity.syncStrtDttm, now) .set(mapSheetMngHstEntity.syncEndDttm, now) - .set(mapSheetMngHstEntity.syncCheckState, "PROCESSING") + .set(mapSheetMngHstEntity.syncCheckState, "NOTYET") .set(mapSheetMngHstEntity.syncCheckStrtDttm, now) .set(mapSheetMngHstEntity.syncCheckEndDttm, now) .where(mapSheetMngHstEntity.hstUid.eq(updateReq.getHstUid())) diff --git a/src/main/java/com/kamco/cd/kamcoback/scheduler/MapSheetMngFileJobController.java b/src/main/java/com/kamco/cd/kamcoback/scheduler/MapSheetMngFileJobController.java index 2c6110e7..99cb09a0 100644 --- a/src/main/java/com/kamco/cd/kamcoback/scheduler/MapSheetMngFileJobController.java +++ b/src/main/java/com/kamco/cd/kamcoback/scheduler/MapSheetMngFileJobController.java @@ -14,93 +14,118 @@ public class MapSheetMngFileJobController { // 현재 상태 확인용 Getter @Getter private boolean isSchedulerEnabled = false; + @Getter private boolean isFileSyncSchedulerEnabled = false; @Getter private int mngSyncPageSize = 20; - // 매일 새벽 3시에 실행 (초 분 시 일 월 요일) - @Scheduled(fixedDelay = 5000) - public void mngFileSyncJob00() { + // 파일싱크 진행여부 확인하기 + @Scheduled(fixedDelay = 1000 * 10) + public void checkMngFileSync() { if (!isSchedulerEnabled) return; - System.out.println("mngFileSyncJob00 === " + System.currentTimeMillis()); + Integer mng = 0; + // isFileSyncSchedulerEnabled = false; + if(mapSheetMngFileJobService.checkMngFileSync() != null) + { + mng = mapSheetMngFileJobService.checkMngFileSync(); + this.isFileSyncSchedulerEnabled = true; + System.out.println("MngFileSyncJob ON --> mngYyyy : "+ mng + ", currentTime : " + System.currentTimeMillis()); + } + else{ + this.isFileSyncSchedulerEnabled = false; + System.out.println("MngFileSyncJob OFF --> mngYyyy : "+ mng + ", currentTime : " + System.currentTimeMillis()); + } + + } + + + @Scheduled(fixedDelay = 1000 * 5) + public void mngFileSyncJob00() { + if (!isSchedulerEnabled || !isFileSyncSchedulerEnabled) return; + + System.out.println("mngFileSyncJob 00 Processing currentTime : " + System.currentTimeMillis()); mapSheetMngFileJobService.checkMapSheetFileProcess(0, mngSyncPageSize); } - @Scheduled(fixedDelay = 5000) + @Scheduled(fixedDelay = 1000 * 5) public void mngFileSyncJob01() { - if (!isSchedulerEnabled) return; + if (!isSchedulerEnabled || !isFileSyncSchedulerEnabled) return; - System.out.println("mngFileSyncJob01 === " + System.currentTimeMillis()); + System.out.println("mngFileSyncJob 01 Processing currentTime : " + System.currentTimeMillis()); mapSheetMngFileJobService.checkMapSheetFileProcess(1, mngSyncPageSize); } - @Scheduled(fixedDelay = 5000) - public void mngFileSyncJob02() { - if (!isSchedulerEnabled) return; - System.out.println("mngFileSyncJob00 === " + System.currentTimeMillis()); + @Scheduled(fixedDelay = 1000 * 5) + public void mngFileSyncJob02() { + if (!isSchedulerEnabled || !isFileSyncSchedulerEnabled) return; + + System.out.println("mngFileSyncJob 02 Processing currentTime : " + System.currentTimeMillis()); mapSheetMngFileJobService.checkMapSheetFileProcess(2, mngSyncPageSize); } - @Scheduled(fixedDelay = 5000) + @Scheduled(fixedDelay = 1000 * 5) public void mngFileSyncJob03() { - if (!isSchedulerEnabled) return; + if (!isSchedulerEnabled || !isFileSyncSchedulerEnabled) return; - System.out.println("mngFileSyncJob03 === " + System.currentTimeMillis()); + System.out.println("mngFileSyncJob 03 Processing currentTime : " + System.currentTimeMillis()); mapSheetMngFileJobService.checkMapSheetFileProcess(3, mngSyncPageSize); } - @Scheduled(fixedDelay = 5000) + @Scheduled(fixedDelay = 1000 * 5) public void mngFileSyncJob04() { - if (!isSchedulerEnabled) return; + if (!isSchedulerEnabled || !isFileSyncSchedulerEnabled) return; - System.out.println("mngFileSyncJob04 === " + System.currentTimeMillis()); + System.out.println("mngFileSyncJob 04 Processing currentTime : " + System.currentTimeMillis()); mapSheetMngFileJobService.checkMapSheetFileProcess(4, mngSyncPageSize); } - @Scheduled(fixedDelay = 5000) + @Scheduled(fixedDelay = 1000 * 5) public void mngFileSyncJob05() { - if (!isSchedulerEnabled) return; + if (!isSchedulerEnabled || !isFileSyncSchedulerEnabled) return; - System.out.println("mngFileSyncJob05 === " + System.currentTimeMillis()); + System.out.println("mngFileSyncJob 05 Processing currentTime : " + System.currentTimeMillis()); mapSheetMngFileJobService.checkMapSheetFileProcess(5, mngSyncPageSize); } - @Scheduled(fixedDelay = 5000) + @Scheduled(fixedDelay = 1000 * 5) public void mngFileSyncJob06() { - if (!isSchedulerEnabled) return; + if (!isSchedulerEnabled || !isFileSyncSchedulerEnabled) return; - System.out.println("mngFileSyncJob06 === " + System.currentTimeMillis()); + System.out.println("mngFileSyncJob 06 Processing currentTime : " + System.currentTimeMillis()); mapSheetMngFileJobService.checkMapSheetFileProcess(6, mngSyncPageSize); } - @Scheduled(fixedDelay = 5000) + @Scheduled(fixedDelay = 1000 * 5) public void mngFileSyncJob07() { - if (!isSchedulerEnabled) return; + if (!isSchedulerEnabled || !isFileSyncSchedulerEnabled) return; - System.out.println("mngFileSyncJob07 === " + System.currentTimeMillis()); + System.out.println("mngFileSyncJob 07 Processing currentTime : " + System.currentTimeMillis()); mapSheetMngFileJobService.checkMapSheetFileProcess(7, mngSyncPageSize); } - @Scheduled(fixedDelay = 5000) + @Scheduled(fixedDelay = 1000 * 5) public void mngFileSyncJob08() { - if (!isSchedulerEnabled) return; + if (!isSchedulerEnabled || !isFileSyncSchedulerEnabled) return; - System.out.println("mngFileSyncJob08 === " + System.currentTimeMillis()); + System.out.println("mngFileSyncJob 08 Processing currentTime : " + System.currentTimeMillis()); mapSheetMngFileJobService.checkMapSheetFileProcess(8, mngSyncPageSize); } - @Scheduled(fixedDelay = 5000) + @Scheduled(fixedDelay = 1000 * 5) public void mngFileSyncJob09() { - if (!isSchedulerEnabled) return; + if (!isSchedulerEnabled || !isFileSyncSchedulerEnabled) return; - System.out.println("mngFileSyncJob09 === " + System.currentTimeMillis()); + System.out.println("mngFileSyncJob 09 Processing currentTime : " + System.currentTimeMillis()); mapSheetMngFileJobService.checkMapSheetFileProcess(9, mngSyncPageSize); } + + // 3. 외부에서 플래그를 변경할 수 있는 Setter 메서드 public void setSchedulerEnabled(boolean enabled) { this.isSchedulerEnabled = enabled; - System.out.println("스케줄러 상태 변경됨: " + (enabled ? "ON" : "OFF")); + this.isFileSyncSchedulerEnabled = false; + System.out.println("스케줄러 동작 상태 변경됨: " + (enabled ? "ON" : "OFF")); } public void setMngSyncPageSize(int pageSize) { diff --git a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/MapSheetMngFileJobService.java b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/MapSheetMngFileJobService.java index df1795fb..2bf20cf9 100644 --- a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/MapSheetMngFileJobService.java +++ b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/MapSheetMngFileJobService.java @@ -45,6 +45,12 @@ public class MapSheetMngFileJobService { @Value("${file.sync-file-extention}") private String syncFileExtention; + + public Integer checkMngFileSync() + { + return mapSheetMngFileJobCoreService.findNotYetMapSheetMng(); + } + @Transactional public void checkMapSheetFileProcess(long targetNum, int mngSyncPageSize) { @@ -55,10 +61,15 @@ public class MapSheetMngFileJobService { String syncCheckState = ""; String fileState = ""; String dataState = ""; + int mngYyyy = 0; SrchFilesDepthDto srchDto = new SrchFilesDepthDto(); List basicList = new ArrayList<>(); + if( mapSheetFileNotYetList.size() >= 1 ){ + mngYyyy = mapSheetFileNotYetList.get(0).getMngYyyy(); + } + for (MngHstDto item : mapSheetFileNotYetList) { // 도엽별 파일 체크 진행중으로 변경 @@ -113,9 +124,9 @@ public class MapSheetMngFileJobService { if (tfwCnt == 0 && tifCnt == 0) syncState = "NOFILE"; for (FIleChecker.Basic item2 : basicList) { - System.out.println("path: " + item2.getParentPath()); - System.out.println("path: " + item2.getFileNm()); - System.out.println("path: " + item2.getFullPath()); + //System.out.println("path: " + item2.getParentPath()); + //System.out.println("path: " + item2.getFileNm()); + //System.out.println("path: " + item2.getFullPath()); MapSheetMngDto.MngFileAddReq addReq = new MapSheetMngDto.MngFileAddReq(); addReq.setMngYyyy(item.getMngYyyy()); @@ -136,7 +147,7 @@ public class MapSheetMngFileJobService { fileState = "DUPLICATE"; syncState = fileState; } else if (item2.getFileSize() == 0) { - fileState = "SIZEERROR"; + fileState = "TYPEERROR"; syncState = fileState; } else if (!FIleChecker.checkTfw(item2.getFullPath())) { fileState = "TYPEERROR"; @@ -150,7 +161,7 @@ public class MapSheetMngFileJobService { fileState = "DUPLICATE"; syncState = fileState; } else if (item2.getFileSize() == 0) { - fileState = "SIZEERROR"; + fileState = "TYPEERROR"; syncState = fileState; } else if (!FIleChecker.cmmndGdalInfo(item2.getFullPath())) { fileState = "TYPEERROR"; @@ -168,15 +179,10 @@ public class MapSheetMngFileJobService { item.setSyncState(syncState); mngHstDataSyncStateUpdate(item); - // srchDto. - - // 2. 출력 - // System.out.println("UID: " + hstUid + ", 상태: " + syncState + ", 관리경로: " + - // item.getSyncMngPath()); - - // 3. (필요하다면) 다른 로직 수행 - // ... } + + Long notyetCnt = this.mngDataStateDoneUpdate(mngYyyy); + } public int checkIsNoFile(List basicList) { @@ -187,10 +193,34 @@ public class MapSheetMngFileJobService { return basicList.size(); } + public Long mngDataStateDoneUpdate(int mngYyyy) { + + Long notyetCnt = 0L; + if( mngYyyy > 0 ) + { + notyetCnt = findByMngYyyyTargetMapSheetNotYetCount(mngYyyy); + if( notyetCnt == 0 ) + { + mapSheetMngFileJobCoreService.mngDataState(mngYyyy,"DONE"); + } + else + { + mapSheetMngFileJobCoreService.mngDataState(mngYyyy,"PROCESSING"); + } + } + + return notyetCnt; + } + public List findTargetMapSheetFileList(long targetNum, int pageSize) { return mapSheetMngFileJobCoreService.findTargetMapSheetFileList(targetNum, pageSize); } + + public Long findByMngYyyyTargetMapSheetNotYetCount(int mngYyyy) { + return mapSheetMngFileJobCoreService.findByMngYyyyTargetMapSheetNotYetCount(mngYyyy); + } + public MapSheetMngDto.DmlReturn mngHstDataSyncStateUpdate(MapSheetMngDto.MngHstDto UpdateReq) { return mapSheetMngFileJobCoreService.mngHstDataSyncStateUpdate(UpdateReq); }