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 list = boardDao.getBoardList(boardForm); HashMap resultMap = new HashMap(); resultMap.put("list", list); resultMap.put("totalCount", totalCount); resultMap.put("pagination", commonDto.getPagination()); resultUtil.setData(resultMap); resultUtil.setState("SUCCESS"); return resultUtil; } /** 게시판 - 목록 조회 */ /* * public List 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 boardFileList = getBoardFileInfo(boardForm); for (BoardFileForm boardFileForm : boardFileList) { boardDao.insertBoardFile(boardFileForm); } if (insertCnt > 0) { boardDto.setResult("SUCCESS"); } else { boardDto.setResult("FAIL"); } return boardDto; } /** 게시판 - 첨부파일 정보 조회 */ public List getBoardFileInfo(BoardForm boardForm) throws Exception { List files = boardForm.getFiles(); List boardFileList = new ArrayList(); 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 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("-", ""); } }