package kcg.faics.board.service.impl; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.annotation.Resource; import kcg.faics.board.util.BoardUtils; import kcg.faics.board.util.BoardVOHandler; import kcg.faics.board.vo.BoardFileVO; import kcg.faics.cmmn.bbs.BaseFileService; import kcg.faics.cmmn.egov.file.EgovFileMngUtil; import kcg.faics.cmmn.egov.vo.FileVO; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; /** * BoardFileServiceImpl.java * @author 임새미 * @since 2016. 9. 28. * * 수정일 수정자 수정내용 * ------------- -------- --------------------------- * 2016. 9. 28. 임새미 최초생성 * */ @Service("boardFileService") public class BoardFileServiceImpl implements BaseFileService { /** * BoardFileMapper - 게시판 파일 데이터 처리에 관한 Mapper 클래스 **/ @Resource(name = "boardFileMapper") private BoardFileMapper boardFileMapper; /** * EgovFileMngUtil - 파일 업로드 처리에 관한 Util 클래스 **/ @Resource(name = "EgovFileMngUtil") private EgovFileMngUtil fileUtil; /** * 선택한 게시물의 파일 리스트를 반환한다. * * @param bfBdSeq 게시판 아이디 * @return 선택한 게시물의 덧글 리스트 * @throws Exception 기본 예외 처리 */ @Override public List selectList(final BoardFileVO boardFileVO) throws Exception { return (List) boardFileMapper.selectFiles(boardFileVO); } /** * 선택한 파일정보를 반환한다. * * @param bfSeq 덧글 아이디 * @return 선택한 덧글의 상세 내용 * @throws Exception 기본 예외 처리 */ @Override public BoardFileVO select(final BoardFileVO boardFileVO) throws Exception { return boardFileMapper.selectFile(boardFileVO); } /** * 게시물의 첨부파일을 DB에 추가한다. * * @param bfBdSeq 게시물 아이디 * @param fileVO 파일 정보 객체 * @return 성공 - 1, 실패 - 0 * @exception Exception 기본 예외 처리 */ @Override public int insert(final BoardFileVO boardFileVO) throws Exception { return boardFileMapper.insertFile(boardFileVO); } /** * 게시물의 첨부파일들을 업로드한다. * * @param bfBdSeq 게시물 아이디 * @param fileMap 검색, 페이지 정보 객체 * @return 성공 - 1, 실패 - 0 * @exception Exception 기본 예외 처리 */ @Override @Transactional public int insertAndSaveFiles(BoardFileVO boardFileVO, final Map fileMap) throws Exception { int result = 1; String storePathKey = ""; String boardId = ""; /* 파일쓰기 */ if (!fileMap.isEmpty()) { if (boardFileVO != null) { boardId = boardFileVO.getId(); boardId = StringUtils.lowerCase(boardId); } storePathKey = BoardUtils.getStorePathKey(boardId); List uploadedFile = fileUtil.parseFileInf(fileMap, "_", 0, "", storePathKey); /* DB에 업로드한 첨부파일 레코드를 추가한다. */ Iterator itr = uploadedFile.iterator(); while (itr.hasNext()) { FileVO fileVO = itr.next(); boardFileVO.setOrgName(fileVO.getOrignlFileNm()); boardFileVO.setSaveName(fileVO.getStreFileNm()); boardFileVO.setOrders(Integer.parseInt(fileVO.getFileSn().replace("file", ""))); result = insert(boardFileVO); if (result != 1) { throw new Exception(); } } } return result; } /** * 파일을 삭제한다. * * @param boardFileVO 파일정보 * @return 성공 - 1, 실패 - 0 * @throws Exception 기본 예외 처리 */ @Override public int deleteAndRemoveFile(final BoardFileVO boardFileVO) throws Exception { int result = boardFileMapper.deleteFile(boardFileVO); String storePathKey = ""; if (result == 1) { /* DB에서 파일 데이터 삭제 후 실제 파일 삭제 여부는 보장하지 않는다. */ try { storePathKey = BoardUtils.getStorePathKey(boardFileVO.getId()); fileUtil.deleteFile(boardFileVO.getSaveName(), storePathKey); } catch (Exception e) { e.printStackTrace(); } } return result; } /** * 선택한 파일을 삭제한다. * * @param bfBdSeq 선택한 게시물 아이디 * @param deleteFiles 선택한 게시물 아이디 * @return 성공 - 1, 실패 - 0 * @throws Exception 기본 예외 처리 */ @Override @Transactional public int delete(final BoardFileVO boardFileVO) throws Exception { int result = 1; if (boardFileVO.getDeleteFiles() != null) { for (String fileSeq : boardFileVO.getDeleteFiles()) { BoardFileVO deleteFile = BoardVOHandler.getBFileVO(boardFileVO); deleteFile.setSeq(Integer.parseInt(fileSeq)); deleteFile = select(deleteFile); result = deleteAndRemoveFile(deleteFile); if (result != 1) { throw new Exception(); } } } return result; } /** * 게시물 내의 모든 파일을 삭제한다. * * @param bfBdSeq 선택한 게시물 아이디 * @return 성공 - 1, 실패 - 0 * @throws Exception 기본 예외 처리 */ @Override @Transactional public int deleteAndRemoveFiles(final BoardFileVO boardFileVO) throws Exception { int result = 1; List fileList = boardFileMapper.selectFiles(boardFileVO); if (fileList != null) { for (BoardFileVO file : fileList) { result = deleteAndRemoveFile(file); if (result != 1) { throw new Exception(); } } } return result; } }