package com.doc.biz.controller; import com.doc.biz.domain.*; import com.doc.biz.service.*; import com.doc.biz.vo.TreeVO; import com.doc.common.annotation.Log; import com.doc.common.constant.Constants; import com.doc.common.core.controller.BaseController; import com.doc.common.core.domain.AjaxResult; import com.doc.common.enums.BusinessType; import com.doc.common.utils.SecurityUtils; import com.doc.common.utils.poi.ExcelUtil; import io.swagger.annotations.*; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.List; /** * 文档目录管理Controller * * @author wukai * @date 2023-08-15 */ @Api(tags = "文档目录管理") @RestController @RequestMapping("/biz/dir") public class DocDirController extends BaseController { @Resource private IDocDirService docDirService; @Resource private IDocInfoService docInfoService; @Resource private IDocSpaceService spaceService; @Resource private IDocDirUserService dirUserService; @Resource private IDocFavoriteService favoriteService; @Resource private IDocRecentService recentService; /** * 获取顶层目录 */ @ApiOperation("获取顶层目录") @GetMapping(value = "/top-dir/{type}") public DocDir topDir(@ApiParam(value = "目录类型(1.公共 2.部门 3.个人)", required = true) @PathVariable("type") String type) { DocSpace space = spaceService.selectDocSpaceListByType(type); DocDir dir = new DocDir(); dir.setSpaceId(space.getSpaceId()); dir.setParentId(0L); List dirList = docDirService.selectDocDirList(dir); if (dirList.size() > 0) { return dirList.get(0); } else { return null; } } /** * 获取目录树 */ @ApiOperation("目录树") @GetMapping(value = "/dir-tree/{type}") public TreeVO dirTree(@ApiParam(value = "目录类型(1.公共 2.部门 3.个人)", required = true) @PathVariable("type") String type) { return tree(type, dirTree); } /** * 文件树 */ private final String fileTree = "1"; /** * 目录树 */ private final String dirTree = "2"; /** * 图片树 */ private final String picTree = "3"; /** * 获取文件树 */ @ApiOperation("文件树") @GetMapping(value = "/file-tree/{type}") public TreeVO fileTree(@ApiParam(value = "目录类型(1.公共 2.部门 3.个人)", required = true) @PathVariable("type") String type) { return tree(type, fileTree); } /** * 获取文件树 */ @ApiOperation("图片文件树") @GetMapping(value = "/pic-tree") public TreeVO picTree() { String type = "3"; return tree(type, picTree); } /** * 获取树 * * @param type 空间类型 * @param st 1.文件树 2.目录树 3.图片树 * @return */ private TreeVO tree(String type, String st) { DocSpace space = spaceService.selectDocSpaceListByType(type); DocDir docDir = new DocDir(); docDir.setSpaceId(space.getSpaceId()); docDir.setParentId(0L); List list = docDirService.selectDocDirList(docDir); TreeVO vo = getChildren(list.get(0), st); return vo; } /** * 递归获取目录树 * * @param dir 目录信息 * @return */ private TreeVO getChildren(DocDir dir, String st) { TreeVO vo = new TreeVO(); vo.setId(dir.getDirId()); vo.setLabel(dir.getDirName()); List children = new ArrayList<>(); DocDir dir1 = new DocDir(); dir1.setParentId(dir.getDirId()); dir1.setSpaceId(dir.getSpaceId()); docDirService.selectDocDirList(dir1).forEach(d -> { children.add(getChildren(d, st)); }); if (!dirTree.equals(st)) { //如果不是目录树 vo.setDisabled(true); DocInfo info = new DocInfo(); info.setDirId(dir.getDirId()); docInfoService.selectDocInfoList(info).forEach(d -> { if (!picTree.equals(st) || Constants.IMAGE_EXTENSION.contains(d.getFileType())) { TreeVO childVO = new TreeVO(); childVO.setId(d.getDocId()); childVO.setLabel(d.getFileName()); childVO.setRemark(d.getFileId()); childVO.setDisabled(false); children.add(childVO); } }); } vo.setChildren(children); return vo; } /** * 查询文档目录管理列表 */ @ApiOperation("查询目录列表") //@PreAuthorize("@ss.hasPermi('biz:dir:list')") @GetMapping("/list") public AjaxResult list(DocDir docDir) { List list = docDirService.selectDocDirList(docDir); DocDir dir = docDirService.selectDocDirByDirId(docDir.getParentId()); if (dir.getParentId() != 0) { //如果不是顶层目录 //插入最近访问记录 DocRecent recent = new DocRecent(); recent.setIsFolder("Y"); recent.setOwner(SecurityUtils.getUserId()); recent.setRelaId(dir.getDirId()); recentService.insertDocRecent(recent); } return success(list); } /** * 导出文档目录管理列表 */ // @ApiOperation("导出文档目录管理列表") //@PreAuthorize("@ss.hasPermi('biz:dir:export')") @Log(title = "文档目录管理", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, DocDir docDir) { List list = docDirService.selectDocDirList(docDir); ExcelUtil util = new ExcelUtil(DocDir.class); util.exportExcel(response, list, "文档目录管理数据"); } /** * 获取文档目录管理详细信息 */ // @ApiOperation("获取文档目录管理详细信息") //@PreAuthorize("@ss.hasPermi('biz:dir:query')") @GetMapping(value = "/{dirId}") public AjaxResult getInfo(@PathVariable("dirId") Long dirId) { DocDir dir = docDirService.selectDocDirByDirId(dirId); DocDirUser dirUser = new DocDirUser(); dirUser.setDirId(dirId); dir.setUsers(dirUserService.selectDocDirUserList(dirUser)); return success(dir); } /** * 新建目录 */ @ApiOperation("新建目录") //@PreAuthorize("@ss.hasPermi('biz:dir:add')") @Log(title = "文档目录管理", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody DocDir docDir) { int i = docDirService.insertDocDir(docDir); //如果是部门目录,则需要插入成员 String dept = "2"; if (dept.equals(docDir.getDirType())) { docDir.getUsers().forEach(u -> { u.setDirId(docDir.getDirId()); dirUserService.insertDocDirUser(u); }); } return toAjax(i); } /** * 重命名 */ @ApiOperation("重命名") @Log(title = "文档目录管理", businessType = BusinessType.UPDATE) @GetMapping("/rename") @ApiImplicitParams({@ApiImplicitParam(name = "dirId", value = "目录ID", required = true), @ApiImplicitParam(name = "name", value = "新目录名", required = true)}) public AjaxResult rename(Long dirId, String name) { DocDir docDir = new DocDir(); docDir.setDirId(dirId); docDir.setDirName(name); docDir.setUpdateBy(SecurityUtils.getUsername()); return toAjax(docDirService.updateDocDir(docDir)); } /** * 修改文档目录管理 */ @ApiOperation("修改目录信息") //@PreAuthorize("@ss.hasPermi('biz:dir:edit')") @Log(title = "文档目录管理", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody DocDir docDir) { //如果是部门目录,则需要插入成员 String dept = "2"; dirUserService.deleteDocDirUserByDirId(docDir.getDirId()); if (dept.equals(docDir.getDirType())) { docDir.getUsers().forEach(u -> { u.setDirId(docDir.getDirId()); dirUserService.insertDocDirUser(u); }); } return toAjax(docDirService.updateDocDir(docDir)); } /** * 删除文档目录管理 */ @ApiOperation("删除目录") //@PreAuthorize("@ss.hasPermi('biz:dir:remove')") @Log(title = "文档目录管理", businessType = BusinessType.DELETE) @DeleteMapping("/{dirId}") public AjaxResult remove(@PathVariable Long dirId) { DocDir dir = new DocDir(); dir.setParentId(dirId); List list = docDirService.selectDocDirList(dir); if (list.size() > 0) { return error("目录不为空,无法删除!"); } DocInfo info = new DocInfo(); info.setDirId(dirId); list = docInfoService.selectDocInfoList(info); if (list.size() > 0) { return error("目录不为空,无法删除!"); } int i = docDirService.deleteDocDirByDirId(dirId); //删除收藏记录 favoriteService.delete("Y", dirId); return toAjax(i); } }