diff --git a/src/main/java/com/dbnt/kcgfilemanager/config/LogStatus.java b/src/main/java/com/dbnt/kcgfilemanager/config/LogStatus.java new file mode 100644 index 0000000..5e3e1a2 --- /dev/null +++ b/src/main/java/com/dbnt/kcgfilemanager/config/LogStatus.java @@ -0,0 +1,30 @@ +package com.dbnt.kcgfilemanager.config; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.HashMap; + +@AllArgsConstructor +@Getter +public enum LogStatus { + WRITE("WRITE", "작성"), + MODIFY("MODIFY", "수정"), + MOVE("MOVE", "이동"), + DELETE("DELETE", "삭제"), + FILE_ADD("FILE_ADD", "파일추가"), + FILE_REMOVE("FILE_REMOVE", "파일삭제"), + FILE_DOWN("FILE_DOWN", "파일다운로드"); + + private String key; + private String value; + + + public static HashMap getStatusMap(){ + HashMap statusMap = new HashMap<>(); + for(LogStatus status: LogStatus.values()){ + statusMap.put(status.getKey(), status.getValue()); + } + return statusMap; + } +} diff --git a/src/main/java/com/dbnt/kcgfilemanager/config/Role.java b/src/main/java/com/dbnt/kcgfilemanager/config/Role.java index 0bf3310..e9b620d 100644 --- a/src/main/java/com/dbnt/kcgfilemanager/config/Role.java +++ b/src/main/java/com/dbnt/kcgfilemanager/config/Role.java @@ -3,6 +3,8 @@ package com.dbnt.kcgfilemanager.config; import lombok.AllArgsConstructor; import lombok.Getter; +import java.util.HashMap; + @AllArgsConstructor @Getter public enum Role { diff --git a/src/main/java/com/dbnt/kcgfilemanager/controller/BoardController.java b/src/main/java/com/dbnt/kcgfilemanager/controller/BoardController.java index c9136bd..a977ede 100644 --- a/src/main/java/com/dbnt/kcgfilemanager/controller/BoardController.java +++ b/src/main/java/com/dbnt/kcgfilemanager/controller/BoardController.java @@ -1,5 +1,6 @@ package com.dbnt.kcgfilemanager.controller; +import com.dbnt.kcgfilemanager.config.LogStatus; import com.dbnt.kcgfilemanager.model.Board; import com.dbnt.kcgfilemanager.model.UserInfo; import com.dbnt.kcgfilemanager.service.BoardService; @@ -10,6 +11,7 @@ import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; import java.security.Principal; +import java.util.HashMap; @RestController @RequiredArgsConstructor @@ -44,4 +46,18 @@ public class BoardController { mav.addObject("searchParams", board); return mav; } + + @GetMapping("/selectBoardContent") + public ModelAndView selectBoardContent(Board content){ + ModelAndView mav = new ModelAndView("board/contentDetail"); + mav.addObject("content", boardService.selectContentDetail(content.getContentSeq())); + return mav; + } + @GetMapping("/selectBoardLog") + public ModelAndView selectBoardLog(Board content){ + ModelAndView mav = new ModelAndView("board/contentLog"); + mav.addObject("statusMap", LogStatus.getStatusMap()); + mav.addObject("logList", boardService.selectContentLog(content.getContentSeq())); + return mav; + } } diff --git a/src/main/java/com/dbnt/kcgfilemanager/mapper/BoardMapper.java b/src/main/java/com/dbnt/kcgfilemanager/mapper/BoardMapper.java index 014e8ce..01f1458 100644 --- a/src/main/java/com/dbnt/kcgfilemanager/mapper/BoardMapper.java +++ b/src/main/java/com/dbnt/kcgfilemanager/mapper/BoardMapper.java @@ -1,6 +1,8 @@ package com.dbnt.kcgfilemanager.mapper; import com.dbnt.kcgfilemanager.model.Board; +import com.dbnt.kcgfilemanager.model.BoardLog; +import com.dbnt.kcgfilemanager.model.HashTag; import org.apache.ibatis.annotations.Mapper; import java.util.List; @@ -9,4 +11,6 @@ import java.util.List; public interface BoardMapper { List selectContentList(Board board); Integer selectContentListCnt(Board board); + List selectHashTagListFromContentSeq(Integer contentSeq); + List selectBoardLogFromContentSeq(Integer contentSeq); } diff --git a/src/main/java/com/dbnt/kcgfilemanager/model/Board.java b/src/main/java/com/dbnt/kcgfilemanager/model/Board.java index 152c111..7a68dd4 100644 --- a/src/main/java/com/dbnt/kcgfilemanager/model/Board.java +++ b/src/main/java/com/dbnt/kcgfilemanager/model/Board.java @@ -42,6 +42,11 @@ public class Board extends BaseModel{ @Transient private Integer fileCnt; + @Transient + private List childFileList; + @Transient + private List hashTagList; + @Transient private String hashTagStr; @Transient diff --git a/src/main/java/com/dbnt/kcgfilemanager/repository/FileInfoRepository.java b/src/main/java/com/dbnt/kcgfilemanager/repository/FileInfoRepository.java index f1fbf4b..8999646 100644 --- a/src/main/java/com/dbnt/kcgfilemanager/repository/FileInfoRepository.java +++ b/src/main/java/com/dbnt/kcgfilemanager/repository/FileInfoRepository.java @@ -3,8 +3,10 @@ package com.dbnt.kcgfilemanager.repository; import com.dbnt.kcgfilemanager.model.FileInfo; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; import java.util.Optional; public interface FileInfoRepository extends JpaRepository { Optional findTopByContentSeqOrderByFileSeqDesc(Integer contentSeq); + List findByContentSeqOrderByFileSeqAsc(Integer contentSeq); } diff --git a/src/main/java/com/dbnt/kcgfilemanager/service/BoardService.java b/src/main/java/com/dbnt/kcgfilemanager/service/BoardService.java index 6afdf80..d37f6e3 100644 --- a/src/main/java/com/dbnt/kcgfilemanager/service/BoardService.java +++ b/src/main/java/com/dbnt/kcgfilemanager/service/BoardService.java @@ -1,5 +1,6 @@ package com.dbnt.kcgfilemanager.service; +import com.dbnt.kcgfilemanager.config.LogStatus; import com.dbnt.kcgfilemanager.mapper.BoardMapper; import com.dbnt.kcgfilemanager.model.*; import com.dbnt.kcgfilemanager.repository.*; @@ -29,18 +30,18 @@ public class BoardService { @Transactional public Integer saveContent(Board content){ Integer contentSeq = boardRepository.save(content).getContentSeq(); - saveBoardLog(contentSeq, "I", null, content.getCreateId()); + saveBoardLog(content.getContentSeq(), LogStatus.WRITE, null, content.getCreateId()); saveHashTagLink(contentSeq, content.getHashTagStr()); - saveUploadFiles(contentSeq, content.getCategorySeq(), content.getFileList()); + saveUploadFiles(content); return contentSeq; } - private void saveBoardLog(Integer contentSeq, String status, String description, String createId){ + private void saveBoardLog(Integer contentSeq, LogStatus status, String description, String createId){ BoardLog lastLog = boardLogRepository.findTopByContentSeqOrderByLogSeqDesc(contentSeq).orElse(null); BoardLog log = new BoardLog(); log.setContentSeq(contentSeq); log.setLogSeq(lastLog == null?1:(lastLog.getLogSeq()+1)); - log.setLogStatus(status); + log.setLogStatus(status.getKey()); log.setDescription(description); log.setCreateId(createId); boardLogRepository.save(log); @@ -67,13 +68,12 @@ public class BoardService { } } } - private void saveUploadFiles(Integer contentSeq, Integer categorySeq, List files){ - FileInfo lastFileInfo = fileInfoRepository.findTopByContentSeqOrderByFileSeqDesc(contentSeq).orElse(null); + private void saveUploadFiles(Board content){ + FileInfo lastFileInfo = fileInfoRepository.findTopByContentSeqOrderByFileSeqDesc(content.getContentSeq()).orElse(null); int fileSeq = lastFileInfo==null?1:(lastFileInfo.getFileSeq()+1); - for(MultipartFile file : files){ - System.out.println(file.getName()); + for(MultipartFile file : content.getFileList()){ String saveName = UUID.randomUUID().toString(); - String path = makeFilePath(categorySeq); + String path = makeFilePath(content.getCategorySeq()); File saveFile = new File(path+"\\"+saveName); if(file.getSize()!=0){ // 저장될 파일 확인 @@ -95,13 +95,14 @@ public class BoardService { String[] originalFilename = Objects.requireNonNull(file.getOriginalFilename()).split("\\."); FileInfo fileInfo = new FileInfo(); - fileInfo.setContentSeq(contentSeq); + fileInfo.setContentSeq(content.getContentSeq()); fileInfo.setFileSeq(fileSeq++); fileInfo.setOriginalName(originalFilename[0]); fileInfo.setExtention(originalFilename[1]); fileInfo.setConversionName(saveName); fileInfo.setSavePath(path); fileInfoRepository.save(fileInfo); + saveBoardLog(content.getContentSeq(), LogStatus.FILE_ADD, file.getOriginalFilename(), content.getCreateId()); } } @@ -127,4 +128,14 @@ public class BoardService { public Integer selectContentListCnt(Board board) { return boardMapper.selectContentListCnt(board); } + + public Board selectContentDetail(Integer contentSeq) { + Board target = boardRepository.findById(contentSeq).orElse(null); + target.setHashTagList(boardMapper.selectHashTagListFromContentSeq(contentSeq)); + target.setChildFileList(fileInfoRepository.findByContentSeqOrderByFileSeqAsc(contentSeq)); + return target; + } + public List selectContentLog(Integer contentSeq){ + return boardMapper.selectBoardLogFromContentSeq(contentSeq); + } } diff --git a/src/main/resources/mybatisMapper/BoardMapper.xml b/src/main/resources/mybatisMapper/BoardMapper.xml index d4d94ce..f11cb1a 100644 --- a/src/main/resources/mybatisMapper/BoardMapper.xml +++ b/src/main/resources/mybatisMapper/BoardMapper.xml @@ -5,7 +5,8 @@ + + + \ No newline at end of file diff --git a/src/main/resources/static/js/admin/userMgt.js b/src/main/resources/static/js/admin/userMgt.js index b70ba20..59a7ebc 100644 --- a/src/main/resources/static/js/admin/userMgt.js +++ b/src/main/resources/static/js/admin/userMgt.js @@ -178,24 +178,6 @@ function valueCheck(form){ return returnFlag; } -function setSearchCondition(){ - const searchConditionSelector = $("#searchConditionSelector").val(); - const searchTextDiv = $("#searchTextDiv"); - const dateSelectorDiv = $("#dateSelectorDiv"); - if(searchConditionSelector === "createDate"){ - dateSelectorDiv.show(); - dateSelectorDiv.children().removeAttr("disabled"); - searchTextDiv.hide(); - searchTextDiv.children().attr("disabled", "disabled"); - }else{ - $("#textSearch").attr("name", searchConditionSelector); - searchTextDiv.show(); - searchTextDiv.children().removeAttr("disabled"); - dateSelectorDiv.hide(); - dateSelectorDiv.children().attr("disabled", "disabled"); - } -} - function getUserSeq(){ return $(".userInfoCheckBox:checked").val(); } diff --git a/src/main/resources/static/js/board/contentList.js b/src/main/resources/static/js/board/contentList.js index e69de29..be90fa8 100644 --- a/src/main/resources/static/js/board/contentList.js +++ b/src/main/resources/static/js/board/contentList.js @@ -0,0 +1,64 @@ +$(function(){ + setSearchCondition(); + + $("#dateSelectorDiv").datepicker({ + format: "yyyy-mm-dd", + language: "ko" + }); +}) + +$(document).on('click', '.contentTr', function (){ + $(".contentCheckBox").prop('checked', false); + const target = $(this).find(".contentCheckBox")[0]; + target.checked = true; + const selectedTab = $(".nav-tabs").find(".active")[0].id; + if(selectedTab === "contentTab"){ + getBoardContent(target.value); + }else if(selectedTab === "logTab"){ + getBoardLog(target.value); + } +}) + +$(document).on('click', '#contentTab', function (){ + getBoardContent(getContentSeq()) +}) +$(document).on('click', '#logTab', function (){ + getBoardLog(getContentSeq()) +}) + +function getContentSeq(){ + return $(".contentCheckBox:checked").val(); +} + +function getBoardContent(contentSeq){ + if(contentSeq !== undefined){ + $.ajax({ + url: '/board/selectBoardContent', + data: {contentSeq: contentSeq}, + type: 'GET', + dataType:"html", + success: function(html){ + $("#boardDiv").empty().append(html) + }, + error:function(){ + + } + }); + } +} +function getBoardLog(contentSeq){ + if(contentSeq !== undefined){ + $.ajax({ + url: '/board/selectBoardLog', + data: {contentSeq: contentSeq}, + type: 'GET', + dataType:"html", + success: function(html){ + $("#boardDiv").empty().append(html) + }, + error:function(){ + + } + }); + } +} \ No newline at end of file diff --git a/src/main/resources/static/js/common.js b/src/main/resources/static/js/common.js index e69de29..7c5288c 100644 --- a/src/main/resources/static/js/common.js +++ b/src/main/resources/static/js/common.js @@ -0,0 +1,18 @@ + +function setSearchCondition(){ + const searchConditionSelector = $("#searchConditionSelector").val(); + const searchTextDiv = $("#searchTextDiv"); + const dateSelectorDiv = $("#dateSelectorDiv"); + if(searchConditionSelector === "createDate"){ + dateSelectorDiv.show(); + dateSelectorDiv.children().removeAttr("disabled"); + searchTextDiv.hide(); + searchTextDiv.children().attr("disabled", "disabled"); + }else{ + $("#textSearch").attr("name", searchConditionSelector); + searchTextDiv.show(); + searchTextDiv.children().removeAttr("disabled"); + dateSelectorDiv.hide(); + dateSelectorDiv.children().attr("disabled", "disabled"); + } +} \ No newline at end of file diff --git a/src/main/resources/templates/board/contentDetail.html b/src/main/resources/templates/board/contentDetail.html new file mode 100644 index 0000000..5698278 --- /dev/null +++ b/src/main/resources/templates/board/contentDetail.html @@ -0,0 +1,3 @@ + + +contentDetail \ No newline at end of file diff --git a/src/main/resources/templates/board/contentList.html b/src/main/resources/templates/board/contentList.html index 0d78771..24e8b5c 100644 --- a/src/main/resources/templates/board/contentList.html +++ b/src/main/resources/templates/board/contentList.html @@ -16,7 +16,7 @@
-
- +
- --> +
@@ -122,15 +126,15 @@
-
+ + + + + + + + + + + + + + + + + + + + +
#행동내용사용자발생일시
+
+ \ No newline at end of file diff --git a/src/main/resources/templates/fragments/leftMenu.html b/src/main/resources/templates/fragments/leftMenu.html index 981bd00..c194ad0 100644 --- a/src/main/resources/templates/fragments/leftMenu.html +++ b/src/main/resources/templates/fragments/leftMenu.html @@ -2,7 +2,7 @@ -
+
게시판 분류 관리 @@ -13,7 +13,7 @@
- +