BoardService.java 8.96 KB
package com.daeucna.board.service;
 
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import com.daeucna.board.common.PagingUtil;
import com.daeucna.board.common.ResultUtil;
import com.daeucna.board.dao.BoardDao;
import com.daeucna.board.domain.BoardDto;
import com.daeucna.board.domain.BoardFileForm;
import com.daeucna.board.domain.BoardForm;
import com.daeucna.board.domain.CommonDto;
import com.daeucna.board.domain.CommonForm;
 
@Transactional(readOnly = true)
@Service
public class BoardService {
 
    protected final Logger logger = LoggerFactory.getLogger(BoardService.class);
    
    @Autowired
    private BoardDao boardDao;
 
    /** 게시판 - 목록 조회 */
    public ResultUtil getBoardList(BoardForm boardForm) throws Exception {
 
        ResultUtil resultUtil = new ResultUtil();
 
        CommonDto commonDto = new CommonDto();
 
        int totalCount = boardDao.getBoardCnt(boardForm);
        if (totalCount != 0) {
            CommonForm commonForm = new CommonForm();
            commonForm.setFunction_name(boardForm.getFunction_name());
            commonForm.setCurrent_page_no(boardForm.getCurrent_page_no());
            commonForm.setCount_per_page(10);
            commonForm.setCount_per_list(12);
            commonForm.setTatal_list_count(totalCount);
            commonDto = PagingUtil.setPageUtil(commonForm);
        }
 
        boardForm.setLimit(commonDto.getLimit());
        boardForm.setOffset(commonDto.getOffset());
 
        List<BoardDto> list = boardDao.getBoardList(boardForm);
 
        HashMap<String, Object> resultMap = new HashMap<String, Object>();
        resultMap.put("list", list);
        resultMap.put("totalCount", totalCount);
        resultMap.put("pagination", commonDto.getPagination());
 
        resultUtil.setData(resultMap);
        resultUtil.setState("SUCCESS");
 
        return resultUtil;
    }
 
    /** 게시판 - 목록 조회 */
    /*
     * public List<BoardDto> getBoardList(BoardForm boardForm) throws Exception {
     * 
     * return boardDao.getBoardList(boardForm); }
     */
 
    /** 게시판 - 상세 조회 */
    public BoardDto getBoardDetail(BoardForm boardForm) throws Exception {
 
        logger.debug("==================== getBoardDetail START ====================");
        
        BoardDto boardDto = new BoardDto();
 
        String searchType = boardForm.getSearch_type();
 
        if ("S".equals(searchType)) {
 
            int updateCnt = boardDao.updateBoardHits(boardForm);
 
            if (updateCnt > 0) {
                boardDto = boardDao.getBoardDetail(boardForm);
            }
 
        } else {
 
            boardDto = boardDao.getBoardDetail(boardForm);
        }
        
        BoardFileForm boardFileForm = new BoardFileForm();
        boardFileForm.setBoard_seq(boardForm.getBoard_seq());
 
        boardDto.setFiles(boardDao.getBoardFileList(boardFileForm));
 
        logger.debug("==================== getBoardDetail END ====================");
        
        return boardDto;
    }
 
    /** 게시판 - 등록 */
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    public BoardDto insertBoard(BoardForm boardForm) throws Exception {
 
        BoardDto boardDto = new BoardDto();
 
        int insertCnt = 0;
 
        int boardReRef = boardDao.getBoardReRef(boardForm);
        boardForm.setBoard_re_ref(boardReRef);
 
        insertCnt = boardDao.insertBoard(boardForm);
        //insertCnt = boardDao.insertBoardFail(boardForm);
 
        List<BoardFileForm> boardFileList = getBoardFileInfo(boardForm); 
        for (BoardFileForm boardFileForm : boardFileList) {
            boardDao.insertBoardFile(boardFileForm);
        }
 
        if (insertCnt > 0) {
            boardDto.setResult("SUCCESS");
        } else {
            boardDto.setResult("FAIL");
        }
 
        return boardDto;
    }
 
    /** 게시판 - 첨부파일 정보 조회 */
    public List<BoardFileForm> getBoardFileInfo(BoardForm boardForm) throws Exception {
 
        List<MultipartFile> files = boardForm.getFiles();
 
        List<BoardFileForm> boardFileList = new ArrayList<BoardFileForm>();
 
        BoardFileForm boardFileForm = new BoardFileForm();
 
        int boardSeq = boardForm.getBoard_seq();
        String fileName = null;
        String fileExt = null;
        String fileNameKey = null;
        String fileSize = null;
        // 파일이 저장될 Path 설정
        String filePath = "C:\\board\\file";
        
        if (files != null && files.size() > 0) {
 
            File file = new File(filePath);
            
            // 디렉토리가 없으면 생성
            if (file.exists() == false) {
                file.mkdirs();
            }
 
            for (MultipartFile multipartFile : files) {
 
                fileName = multipartFile.getOriginalFilename();
                fileExt = fileName.substring(fileName.lastIndexOf("."));
                // 파일명 변경(uuid로 암호화) + 확장자
                fileNameKey = getRandomString() + fileExt;
                fileSize = String.valueOf(multipartFile.getSize());
 
                // 설정한 Path에 파일 저장
                file = new File(filePath + "/" + fileNameKey);
 
                multipartFile.transferTo(file);
 
                boardFileForm = new BoardFileForm();
                boardFileForm.setBoard_seq(boardSeq);
                boardFileForm.setFile_name(fileName);
                boardFileForm.setFile_name_key(fileNameKey);
                boardFileForm.setFile_path(filePath);
                boardFileForm.setFile_size(fileSize);
                boardFileList.add(boardFileForm);
            }
        }
 
        return boardFileList;
    }
 
    /** 게시판 - 삭제 */
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    public BoardDto deleteBoard(BoardForm boardForm) throws Exception {
 
        BoardDto boardDto = new BoardDto();
 
        int deleteCnt = boardDao.deleteBoard(boardForm);
 
        if (deleteCnt > 0) {
            boardDto.setResult("SUCCESS");
        } else {
            boardDto.setResult("FAIL");
        }
 
        return boardDto;
    }
 
    /** 게시판 - 수정 */
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    public BoardDto updateBoard(BoardForm boardForm) throws Exception {
 
        BoardDto boardDto = new BoardDto();
 
        int updateCnt = boardDao.updateBoard(boardForm);
 
        String deleteFile = boardForm.getDelete_file();
        if (!"".equals(deleteFile)) {
 
            String[] deleteFileInfo = deleteFile.split("!");
 
            int boardSeq = Integer.parseInt(deleteFileInfo[0]);
            int fileNo = Integer.parseInt(deleteFileInfo[1]);
 
            BoardFileForm deleteBoardFileForm = new BoardFileForm();
            deleteBoardFileForm.setBoard_seq(boardSeq);
            deleteBoardFileForm.setFile_no(fileNo);
 
            boardDao.deleteBoardFile(deleteBoardFileForm);
        }
 
        List<BoardFileForm> boardFileList = getBoardFileInfo(boardForm);
        for (BoardFileForm boardFileForm : boardFileList) {
            boardDao.insertBoardFile(boardFileForm);
        }
 
        if (updateCnt > 0) {
            boardDto.setResult("SUCCESS");
        } else {
            boardDto.setResult("FAIL");
        }
 
        return boardDto;
    }
 
    /** 게시판 - 답글 등록 */
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    public BoardDto insertBoardReply(BoardForm boardForm) throws Exception {
 
        BoardDto boardDto = new BoardDto();
 
        BoardDto boardReplayInfo = boardDao.getBoardReplyInfo(boardForm);
 
        boardForm.setBoard_seq(boardReplayInfo.getBoard_seq());
        boardForm.setBoard_re_lev(boardReplayInfo.getBoard_re_lev());
        boardForm.setBoard_re_ref(boardReplayInfo.getBoard_re_ref());
        boardForm.setBoard_re_seq(boardReplayInfo.getBoard_re_seq());
 
        int insertCnt = 0;
 
        insertCnt += boardDao.updateBoardReSeq(boardForm);
 
        insertCnt += boardDao.insertBoardReply(boardForm);
 
        if (insertCnt > 0) {
            boardDto.setResult("SUCCESS");
        } else {
            boardDto.setResult("FAIL");
        }
 
        return boardDto;
    }
 
    /** 32글자의 랜덤한 문자열(숫자포함) 생성 */
    public static String getRandomString() {
 
        return UUID.randomUUID().toString().replaceAll("-", "");
    }
}