diff --git a/src/main/java/com/kamco/cd/kamcoback/common/enums/MngStateType.java b/src/main/java/com/kamco/cd/kamcoback/common/enums/MngStateType.java index 93da7946..29e561e0 100644 --- a/src/main/java/com/kamco/cd/kamcoback/common/enums/MngStateType.java +++ b/src/main/java/com/kamco/cd/kamcoback/common/enums/MngStateType.java @@ -9,7 +9,9 @@ import lombok.Getter; public enum MngStateType implements EnumType { NOTYET("미처리"), PROCESSING("진행중"), - DONE ("완료"); + DONE ("싱크완료"), + COMPLETE("작업완료"); + private final String desc; diff --git a/src/main/java/com/kamco/cd/kamcoback/mapsheet/MapSheetMngApiController.java b/src/main/java/com/kamco/cd/kamcoback/mapsheet/MapSheetMngApiController.java index 471ac327..a0ff578a 100644 --- a/src/main/java/com/kamco/cd/kamcoback/mapsheet/MapSheetMngApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/mapsheet/MapSheetMngApiController.java @@ -15,7 +15,9 @@ import jakarta.validation.Valid; import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; +import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; @Tag(name = "영상 관리", description = "영상 관리 API") @RestController @@ -84,6 +86,26 @@ public class MapSheetMngApiController { return ApiResponseDto.ok(mapSheetMngService.mngDataSave(AddReq)); } + @Operation(summary = "영상관리 > 작업완료", description = "영상관리 > 작업완료") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "201", + description = "작업완료 처리 성공", + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = Long.class))), + @ApiResponse(responseCode = "400", description = "잘못된 요청 데이터", content = @Content), + @ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @PutMapping("/mng-complete") + public ApiResponseDto mngComplete( + @RequestParam @Valid int mngYyyy) { + return ApiResponseDto.ok(mapSheetMngService.mngComplete(mngYyyy)); + } + /** * 오류데이터 목록 조회 * @@ -96,10 +118,7 @@ public class MapSheetMngApiController { return ApiResponseDto.ok(mapSheetMngService.findMapSheetErrorList(searchReq)); } - /** - * @param hstUidList - * @return - */ + @Operation(summary = "오류데이터 팝업 > 업로드 처리", description = "오류데이터 팝업 > 업로드 처리") @ApiResponses( value = { @@ -130,4 +149,17 @@ public class MapSheetMngApiController { @RequestBody @Valid List hstUidList) { return ApiResponseDto.ok(mapSheetMngService.updateExceptUseInference(hstUidList)); } + + + + + @Operation(summary = "페어 파일 업로드", description = "TFW/TIF 두 파일을 쌍으로 업로드 및 검증") + @PostMapping(value = "/upload-pair", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public ApiResponseDto uploadPair( + @RequestPart("tfw") MultipartFile tfwFile, + @RequestPart("tif") MultipartFile tifFile, + @RequestParam(value = "hstUid", required = false) Long hstUid) { + return ApiResponseDto.createOK( + mapSheetMngService.uploadPair(tfwFile, tifFile, hstUid)); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/mapsheet/MapSheetMngFileCheckerApiController.java b/src/main/java/com/kamco/cd/kamcoback/mapsheet/MapSheetMngFileCheckerApiController.java index 854f7a04..6ba95edd 100644 --- a/src/main/java/com/kamco/cd/kamcoback/mapsheet/MapSheetMngFileCheckerApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/mapsheet/MapSheetMngFileCheckerApiController.java @@ -83,18 +83,7 @@ public class MapSheetMngFileCheckerApiController { mapSheetMngFileCheckerService.uploadFile(file, targetPath, overwrite, hstUid)); } - @Operation(summary = "페어 파일 업로드", description = "TFW/TIF 두 파일을 쌍으로 업로드 및 검증") - @PostMapping(value = "/upload-pair", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) - public ApiResponseDto uploadPair( - @RequestPart("tfw") MultipartFile tfwFile, - @RequestPart("tif") MultipartFile tifFile, - @RequestParam("targetPath") String targetPath, - @RequestParam(value = "overwrite", required = false, defaultValue = "false") - boolean overwrite, - @RequestParam(value = "hstUid", required = false) Long hstUid) { - return ApiResponseDto.createOK( - mapSheetMngFileCheckerService.uploadPair(tfwFile, tifFile, targetPath, overwrite, hstUid)); - } + @Operation(summary = "파일 삭제", description = "중복 파일 등 파일 삭제") @PostMapping("/delete") 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 8c43732d..b75b572a 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 @@ -2,6 +2,9 @@ package com.kamco.cd.kamcoback.mapsheet.service; import static java.lang.String.CASE_INSENSITIVE_ORDER; +import com.kamco.cd.kamcoback.common.exception.DuplicateFileException; +import com.kamco.cd.kamcoback.common.exception.ValidationException; +import com.kamco.cd.kamcoback.common.utils.FIleChecker; import com.kamco.cd.kamcoback.mapsheet.dto.FileDto; import com.kamco.cd.kamcoback.mapsheet.dto.FileDto.FilesDto; import com.kamco.cd.kamcoback.mapsheet.dto.FileDto.SrchFilesDepthDto; @@ -29,6 +32,7 @@ import org.apache.commons.io.FilenameUtils; import org.springframework.data.domain.Page; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; @Service @RequiredArgsConstructor @@ -220,11 +224,24 @@ public class MapSheetMngService { return mapSheetMngCoreService.findMapSheetMng(mngYyyy); } + + @Transactional + public MapSheetMngDto.DmlReturn mngComplete(int mngYyyy) { + + mapSheetMngCoreService.MapSheetMngComplete(mngYyyy); + + return new MapSheetMngDto.DmlReturn("success", "작업완료 처리되었습니다."); + } + public Page findMapSheetErrorList( MapSheetMngDto.@Valid ErrorSearchReq searchReq) { return mapSheetMngCoreService.findMapSheetErrorList(searchReq); } + public MapSheetMngDto.ErrorDataDto findMapSheetError(Long hstUid) { + return mapSheetMngCoreService.findMapSheetError(hstUid); + } + @Transactional public MapSheetMngDto.DmlReturn mngDataSave(MapSheetMngDto.AddReq AddReq) { return mapSheetMngCoreService.mngDataSave(AddReq); @@ -248,4 +265,39 @@ public class MapSheetMngService { public MapSheetMngDto.DmlReturn updateExceptUseInference(@Valid List hstUidList) { return mapSheetMngCoreService.updateExceptUseInference(hstUidList); } + + @Transactional + public MapSheetMngDto.DmlReturn uploadPair( + MultipartFile tfwFile, + MultipartFile tifFile, + //String targetPath, + Long hstUid) { + + // 파일 유효성 검증 + if (tfwFile == null || tfwFile.isEmpty() || tfwFile.getSize() == 0) { + return new MapSheetMngDto.DmlReturn("fail", "TFW 파일이(0Byte) 비어있습니다."); + }else if (tifFile == null || tifFile.isEmpty() || tifFile.getSize() == 0) { + return new MapSheetMngDto.DmlReturn("fail", "TIF 파일이(0Byte) 비어있습니다."); + } + + if( ! tfwFile.getOriginalFilename() + .substring(tfwFile.getOriginalFilename().lastIndexOf('.') + 1) + .toLowerCase() + .equals("tfw") ) + { + return new MapSheetMngDto.DmlReturn("fail", "파일명이 TFW형식이 아닙니다."); + }else if( ! tifFile.getOriginalFilename() + .substring(tifFile.getOriginalFilename().lastIndexOf('.') + 1) + .toLowerCase() + .equals("tif") ) + { + return new MapSheetMngDto.DmlReturn("fail", "파일명이 TIF형식이 아닙니다."); + } + + + return new MapSheetMngDto.DmlReturn("success", "파일 업로드 완료되었습니다."); + + } + + } 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 84802c85..74bfd2b3 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 @@ -32,11 +32,6 @@ public class MapSheetMngCoreService { @Value("{spring.profiles.active}") private String activeEnv; - public Page findMapSheetErrorList( - MapSheetMngDto.@Valid ErrorSearchReq searchReq) { - return mapSheetMngRepository.findMapSheetErrorList(searchReq); - } - public List findMapSheetMngList() { return mapSheetMngRepository.findMapSheetMngList(); } @@ -45,6 +40,22 @@ public class MapSheetMngCoreService { return mapSheetMngRepository.findMapSheetMng(mngYyyy); } + public void MapSheetMngComplete(@Valid int mngYyyy) { + mapSheetMngRepository.MapSheetMngComplete(mngYyyy); + } + + + public Page findMapSheetErrorList( + MapSheetMngDto.@Valid ErrorSearchReq searchReq) { + return mapSheetMngRepository.findMapSheetErrorList(searchReq); + } + + public MapSheetMngDto.ErrorDataDto findMapSheetError(Long hstUid){ + return mapSheetMngRepository.findMapSheetError(hstUid); + } + + + public MapSheetMngDto.DmlReturn uploadProcess(@Valid List hstUidList) { int count = 0; if (!Objects.isNull(hstUidList) && !hstUidList.isEmpty()) { diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/mapsheet/MapSheetMngRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/mapsheet/MapSheetMngRepositoryCustom.java index 185f3ab6..db933de3 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/mapsheet/MapSheetMngRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/mapsheet/MapSheetMngRepositoryCustom.java @@ -13,6 +13,8 @@ public interface MapSheetMngRepositoryCustom { MapSheetMngDto.MngDto findMapSheetMng(int mngYyyy); + void MapSheetMngComplete(int mngYyyy); + Optional findMapSheetMngHstInfo(Long hstUid); int insertMapSheetOrgDataToMapSheetMngHst(int mngYyyy); @@ -28,5 +30,7 @@ public interface MapSheetMngRepositoryCustom { Page findMapSheetErrorList( MapSheetMngDto.@Valid ErrorSearchReq searchReq); + MapSheetMngDto.ErrorDataDto findMapSheetError(Long hstUid); + void updateHstFileSizes(Long hstUid, long tifSizeBytes, long tfwSizeBytes, long totalSizeBytes); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/mapsheet/MapSheetMngRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/mapsheet/MapSheetMngRepositoryImpl.java index 375cd240..8edc9eb9 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/mapsheet/MapSheetMngRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/mapsheet/MapSheetMngRepositoryImpl.java @@ -367,6 +367,56 @@ public class MapSheetMngRepositoryImpl extends QuerydslRepositorySupport return new PageImpl<>(foundContent, pageable, countQuery); } + + @Override + public MapSheetMngDto.ErrorDataDto findMapSheetError(Long hstUid){ + + BooleanBuilder whereBuilder = new BooleanBuilder(); + whereBuilder.and( mapSheetMngHstEntity.hstUid.eq(hstUid)); + + MapSheetMngDto.ErrorDataDto foundContent = + queryFactory + .select( + Projections.constructor( + MapSheetMngDto.ErrorDataDto.class, + mapSheetMngHstEntity.hstUid, + Expressions.stringTemplate( + "concat({0},substring({1}, 0, 6))", + mapInkx5kEntity.mapidNm, mapSheetMngHstEntity.mapSheetNum).as("map50kName"), + Expressions.stringTemplate( + "concat({0},substring({1}, 6, 8))", + mapInkx5kEntity.mapidNm, mapSheetMngHstEntity.mapSheetNum).as("map5kName"), + Expressions.stringTemplate( + "concat({0},substring({1}, 6, 8))", + mapInkx5kEntity.mapidNm, mapSheetMngHstEntity.mapSheetNum).as("mapSrcName"), + mapInkx5kEntity.fid, + mapSheetMngHstEntity.createdDate, + mapSheetMngHstEntity.syncState, + mapSheetMngHstEntity.syncTfwFileName, + mapSheetMngHstEntity.syncTifFileName, + mapSheetMngHstEntity.syncCheckState, + mapSheetMngHstEntity.syncCheckTfwFileName, + mapSheetMngHstEntity.syncCheckTifFileName + ) + ) + .from(mapSheetMngHstEntity) + .innerJoin(mapInkx5kEntity).on(mapSheetMngHstEntity.mapSheetNum.eq(mapInkx5kEntity.mapidcdNo)) + .where(whereBuilder) + .fetchOne(); + + return foundContent; + } + + + public void MapSheetMngComplete(int mngYyyy) { + long execCount = + queryFactory + .update(mapSheetMngEntity) + .set(mapSheetMngEntity.mngState, "COMPLETE") + .where(mapSheetMngEntity.mngYyyy.eq(mngYyyy)) + .execute(); + } + @Override public void deleteByMngYyyyMngAll(int mngYyyy) {