계약관리 & 대금지급 첨부파일 삭제 추가

This commit is contained in:
2025-06-04 16:16:11 +09:00
parent 090b0ed1f1
commit d98040adf5
8 changed files with 91 additions and 1 deletions

View File

@@ -160,4 +160,27 @@ public class ContController {
) { ) {
return ResponseEntity.ok(contService.retrieve(contNo)); return ResponseEntity.ok(contService.retrieve(contNo));
} }
@Operation(summary = "계약관리 첨부파일 삭제", description = "계약관리 문서(첨부파일) 삭제")
@ApiResponses({
@ApiResponse(description = "Success", responseCode = "200",
content = @Content(mediaType = "application/json", schema = @Schema(oneOf =
{String.class}))),
@ApiResponse(description = "Not found", responseCode = "404",
content = @Content(mediaType = "text/plain", schema = @Schema(oneOf =
{String.class}))),
@ApiResponse(description = "Internal Error", responseCode = "500",
content = @Content(mediaType = "application/json", schema = @Schema(oneOf =
{CustomErrorResponse.class })))
})
@DeleteMapping("/cont/{contNo}/{fileOrd}")
public ResponseEntity fileDelete(
@Parameter(description = "계약번호") @PathVariable String contNo,
@Parameter(description = "파일순서") @PathVariable Integer fileOrd,
Principal principal
) {
contService.contAttFileDelete(contNo, fileOrd);
return ResponseEntity.ok("삭제 되었습니다.");
}
} }

View File

@@ -119,4 +119,26 @@ public class SlipController {
slipService.delete(contNo); slipService.delete(contNo);
return ResponseEntity.ok("삭제 되었습니다."); return ResponseEntity.ok("삭제 되었습니다.");
} }
@Operation(summary = "대금지급 첨부파일 삭제", description = "대금지급 문서(첨부파일) 삭제")
@ApiResponses({
@ApiResponse(description = "Success", responseCode = "200",
content = @Content(mediaType = "application/json", schema = @Schema(oneOf =
{String.class}))),
@ApiResponse(description = "Not found", responseCode = "404",
content = @Content(mediaType = "text/plain", schema = @Schema(oneOf =
{String.class}))),
@ApiResponse(description = "Internal Error", responseCode = "500",
content = @Content(mediaType = "application/json", schema = @Schema(oneOf =
{CustomErrorResponse.class })))
})
@DeleteMapping("/slip/{contNo}/{fileOrd}")
public ResponseEntity fileDelete(
@Parameter(description = "계약번호") @PathVariable String contNo,
@Parameter(description = "파일순서") @PathVariable Integer fileOrd,
Principal principal
) {
slipService.slipAttFileDelete(contNo, fileOrd);
return ResponseEntity.ok("삭제 되었습니다.");
}
} }

View File

@@ -15,6 +15,8 @@ public interface ContRepository extends JpaRepository<Cont, String> {
Cont findByContNoAndContStatCd(String contNo, String contStatCd); Cont findByContNoAndContStatCd(String contNo, String contStatCd);
Cont findByContNoAndRegSabun(String contNo, String sabun);
interface IContResponse { interface IContResponse {
String getContNo(); String getContNo();
String getCateCd(); String getCateCd();

View File

@@ -5,5 +5,6 @@ import org.springframework.data.jpa.repository.JpaRepository;
public interface SlipRepository extends JpaRepository<Slip, String> { public interface SlipRepository extends JpaRepository<Slip, String> {
Slip findByContNo(String contNo); Slip findByContNo(String contNo);
Slip findByContNoAndRegSabun(String contNo, String sabun);
Slip findByBelnr(String belnr); Slip findByBelnr(String belnr);
} }

View File

@@ -24,4 +24,6 @@ public interface ContService {
@org.springframework.transaction.annotation.Transactional @org.springframework.transaction.annotation.Transactional
ContSaveResponse retrieve(String contNo); ContSaveResponse retrieve(String contNo);
void contAttFileDelete(String contNo, Integer fileOrd);
} }

View File

@@ -16,4 +16,6 @@ public interface SlipService {
@Transactional @Transactional
void delete(String contNo); void delete(String contNo);
void slipAttFileDelete(String contNo, Integer fileOrd);
} }

View File

@@ -25,7 +25,6 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@@ -283,4 +282,23 @@ public class ContServiceImpl implements ContService {
return ContSaveResponse.from(contRepository.save(cont)); return ContSaveResponse.from(contRepository.save(cont));
} }
@Override
public void contAttFileDelete(String contNo, Integer fileOrd) {
User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
Cont checker = contRepository.findByContNoAndRegSabun(contNo, user.getSabun());
if(checker != null) {
ContAtt contAtt = contAttRepository.findById(ContAttId.builder()
.contNo(contNo)
.fileOrd(fileOrd)
.build()).get();
if (fileUtils.fileDelete(contAtt.getPath())) {
contAttRepository.delete(contAtt);
} else {
throw new CustomException(ErrorCode.FILE_DELETE_ERROR);
}
} else {
throw new CustomException(ErrorCode.AUTHENTICATION_NOT_SUPPORT);
}
}
} }

View File

@@ -342,4 +342,24 @@ public class SlipServiceImpl implements SlipService {
} }
); );
} }
@Override
public void slipAttFileDelete(String contNo, Integer fileOrd) {
User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
Slip checker = slipRepository.findByContNoAndRegSabun(contNo, user.getSabun());
if(checker != null) {
SlipAtt slipAtt = slipAttRepository.findById(SlipAttId.builder()
.contNo(contNo)
.fileOrd(fileOrd)
.build()).get();
if (fileUtils.fileDelete(slipAtt.getPath())) {
slipAttRepository.delete(slipAtt);
} else {
throw new CustomException(ErrorCode.FILE_DELETE_ERROR);
}
} else {
throw new CustomException(ErrorCode.AUTHENTICATION_NOT_SUPPORT);
}
}
} }