diff --git a/dangan-common/src/main/java/com/da/common/core/domain/TreeSelect.java b/dangan-common/src/main/java/com/da/common/core/domain/TreeSelect.java index 976b577..f4e8076 100644 --- a/dangan-common/src/main/java/com/da/common/core/domain/TreeSelect.java +++ b/dangan-common/src/main/java/com/da/common/core/domain/TreeSelect.java @@ -1,11 +1,13 @@ package com.da.common.core.domain; +import com.da.common.core.domain.entity.DaCatalog; +import com.da.common.core.domain.entity.SysDept; +import com.da.common.core.domain.entity.SysMenu; +import com.fasterxml.jackson.annotation.JsonInclude; + import java.io.Serializable; import java.util.List; import java.util.stream.Collectors; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.da.common.core.domain.entity.SysDept; -import com.da.common.core.domain.entity.SysMenu; /** * Treeselect树结构实体类 @@ -45,6 +47,13 @@ public class TreeSelect implements Serializable this.children = menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); } + public TreeSelect(DaCatalog catalog) + { + this.id = catalog.getId(); + this.label = catalog.getMuName(); + this.children = catalog.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); + } + public Long getId() { return id; diff --git a/dangan-dangan/src/main/java/com/da/dangan/domain/DaCatalog.java b/dangan-common/src/main/java/com/da/common/core/domain/entity/DaCatalog.java similarity index 87% rename from dangan-dangan/src/main/java/com/da/dangan/domain/DaCatalog.java rename to dangan-common/src/main/java/com/da/common/core/domain/entity/DaCatalog.java index d4b0aca..da26fd2 100644 --- a/dangan-dangan/src/main/java/com/da/dangan/domain/DaCatalog.java +++ b/dangan-common/src/main/java/com/da/common/core/domain/entity/DaCatalog.java @@ -1,9 +1,12 @@ -package com.da.dangan.domain; +package com.da.common.core.domain.entity; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.da.common.annotation.Excel; import com.da.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.ArrayList; +import java.util.List; /** * 档案目录对象 da_catalog @@ -41,13 +44,22 @@ public class DaCatalog extends BaseEntity /** 菜单状态(0正常 1停用) */ @Excel(name = "菜单状态", readConverterExp = "0=正常,1=停用") private String status; - + /** 子目录 */ + private List children = new ArrayList(); public void setId(Long id) { this.id = id; } - public Long getId() + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + + public Long getId() { return id; } diff --git a/dangan-dangan/src/main/java/com/da/dangan/controller/DaCatalogController.java b/dangan-dangan/src/main/java/com/da/dangan/controller/DaCatalogController.java index d103a15..8c372fd 100644 --- a/dangan-dangan/src/main/java/com/da/dangan/controller/DaCatalogController.java +++ b/dangan-dangan/src/main/java/com/da/dangan/controller/DaCatalogController.java @@ -3,9 +3,9 @@ package com.da.dangan.controller; import com.da.common.annotation.Log; import com.da.common.core.controller.BaseController; import com.da.common.core.domain.AjaxResult; +import com.da.common.core.domain.entity.DaCatalog; import com.da.common.enums.BusinessType; import com.da.common.utils.poi.ExcelUtil; -import com.da.dangan.domain.DaCatalog; import com.da.dangan.service.IDaCatalogService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -38,6 +38,29 @@ public class DaCatalogController extends BaseController return success(catalogs); } + /** + * 获取目录下拉树列表 + */ + @GetMapping("/treeselect") + public AjaxResult treeselect(DaCatalog daCatalog) + { + List daCatalogs = daCatalogService.selectAllDaCatalogList(daCatalog, getUserId()); + return success(daCatalogService.buildCatalogTreeSelect(daCatalogs)); + } + + /** + * 加载对应用户勾选目录列表树 + */ + @GetMapping(value = "/userMenuTreeselect/{userId}") + public AjaxResult roleMenuTreeselect(@PathVariable("userId") Long userId) + { + List catalogs = daCatalogService.selectCatalogList(getUserId()); + AjaxResult ajax = AjaxResult.success(); + ajax.put("checkedKeys", daCatalogService.selectCatalogListByUserId(userId)); + ajax.put("catalogs", daCatalogService.buildCatalogTreeSelect(catalogs)); + return ajax; + } + /** * 导出档案目录列表 */ diff --git a/dangan-dangan/src/main/java/com/da/dangan/controller/DaUserCatalogController.java b/dangan-dangan/src/main/java/com/da/dangan/controller/DaUserCatalogController.java index 6efcb87..cade383 100644 --- a/dangan-dangan/src/main/java/com/da/dangan/controller/DaUserCatalogController.java +++ b/dangan-dangan/src/main/java/com/da/dangan/controller/DaUserCatalogController.java @@ -1,25 +1,21 @@ package com.da.dangan.controller; -import java.util.List; -import javax.servlet.http.HttpServletResponse; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; import com.da.common.annotation.Log; import com.da.common.core.controller.BaseController; import com.da.common.core.domain.AjaxResult; +import com.da.common.core.page.TableDataInfo; import com.da.common.enums.BusinessType; +import com.da.common.utils.StringUtils; +import com.da.common.utils.poi.ExcelUtil; import com.da.dangan.domain.DaUserCatalog; import com.da.dangan.service.IDaUserCatalogService; -import com.da.common.utils.poi.ExcelUtil; -import com.da.common.core.page.TableDataInfo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; /** * 用户目录关联Controller @@ -91,6 +87,35 @@ public class DaUserCatalogController extends BaseController return toAjax(daUserCatalogService.updateDaUserCatalog(daUserCatalog)); } + /** + * 修改用户的档案目录权限 + */ + @Log(title = "用户目录关联", businessType = BusinessType.UPDATE) + @PutMapping("/modify") + @Transactional + public AjaxResult modifyUserCatalog(@RequestBody DaUserCatalog daUserCatalog) + { + Long[] muIds = daUserCatalog.getMuIds(); + // 更新用户权限 + if (StringUtils.isNotNull(muIds)) + { + try { + //根据userId删除数据 + int result = daUserCatalogService.deleteDaUserCatalogByUserId(daUserCatalog.getUserId()); + //根据userId添加数据 + for(Long muId: muIds){ + daUserCatalog.setMuId(muId); + daUserCatalogService.insertDaUserCatalog(daUserCatalog); + } + } catch (Exception e) { + e.printStackTrace(); + return error("操作失败,系统错误"); + } + + } + return success(); + } + /** * 删除用户目录关联 */ diff --git a/dangan-dangan/src/main/java/com/da/dangan/domain/DaUserCatalog.java b/dangan-dangan/src/main/java/com/da/dangan/domain/DaUserCatalog.java index 6c6d46d..846f34a 100644 --- a/dangan-dangan/src/main/java/com/da/dangan/domain/DaUserCatalog.java +++ b/dangan-dangan/src/main/java/com/da/dangan/domain/DaUserCatalog.java @@ -1,9 +1,8 @@ package com.da.dangan.domain; +import com.da.common.core.domain.BaseEntity; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; -import com.da.common.annotation.Excel; -import com.da.common.core.domain.BaseEntity; /** * 用户目录关联对象 da_user_catalog @@ -21,6 +20,17 @@ public class DaUserCatalog extends BaseEntity /** 目录ID */ private Long muId; + public Long[] getMuIds() { + return muIds; + } + + public void setMuIds(Long[] muIds) { + this.muIds = muIds; + } + + /** 目录IDS */ + private Long[] muIds; + public void setUserId(Long userId) { this.userId = userId; @@ -45,6 +55,7 @@ public class DaUserCatalog extends BaseEntity return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) .append("userId", getUserId()) .append("muId", getMuId()) + .append("muIds", getMuIds()) .toString(); } } diff --git a/dangan-dangan/src/main/java/com/da/dangan/mapper/DaCatalogMapper.java b/dangan-dangan/src/main/java/com/da/dangan/mapper/DaCatalogMapper.java index 7491608..f3d1d3c 100644 --- a/dangan-dangan/src/main/java/com/da/dangan/mapper/DaCatalogMapper.java +++ b/dangan-dangan/src/main/java/com/da/dangan/mapper/DaCatalogMapper.java @@ -1,6 +1,7 @@ package com.da.dangan.mapper; -import com.da.dangan.domain.DaCatalog; +import com.da.common.core.domain.entity.DaCatalog; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -60,7 +61,9 @@ public interface DaCatalogMapper */ public int deleteDaCatalogByIds(Long[] ids); - DaCatalog checkDaCatalogNameUnique(String muName, Long pid); + DaCatalog checkDaCatalogNameUnique(@Param("muName") String muName, @Param("pid") Long pid); List selectDaCatalogListByUserId(DaCatalog daCatalog); + + List selectCatalogListByUserId(Long userId); } diff --git a/dangan-dangan/src/main/java/com/da/dangan/service/IDaCatalogService.java b/dangan-dangan/src/main/java/com/da/dangan/service/IDaCatalogService.java index a682f53..03a2dc5 100644 --- a/dangan-dangan/src/main/java/com/da/dangan/service/IDaCatalogService.java +++ b/dangan-dangan/src/main/java/com/da/dangan/service/IDaCatalogService.java @@ -1,6 +1,7 @@ package com.da.dangan.service; -import com.da.dangan.domain.DaCatalog; +import com.da.common.core.domain.TreeSelect; +import com.da.common.core.domain.entity.DaCatalog; import java.util.List; @@ -69,4 +70,25 @@ public interface IDaCatalogService public int deleteDaCatalogById(Long id); boolean checkDaCatalogNameUnique(DaCatalog daCatalog); + + List selectCatalogList(Long userId); + /** + * 构建前端所需要树结构 + * + * @param daCatalogs 目录列表 + * @return 树结构列表 + */ + List buildCatalogTree(List daCatalogs); + + /** + * 构建前端所需要下拉树结构 + * + * @param catalogs 目录列表 + * @return 下拉树结构列表 + */ + List buildCatalogTreeSelect(List catalogs); + + List selectCatalogListByUserId(Long userId); + + } diff --git a/dangan-dangan/src/main/java/com/da/dangan/service/impl/DaCatalogServiceImpl.java b/dangan-dangan/src/main/java/com/da/dangan/service/impl/DaCatalogServiceImpl.java index 5246abd..99d0069 100644 --- a/dangan-dangan/src/main/java/com/da/dangan/service/impl/DaCatalogServiceImpl.java +++ b/dangan-dangan/src/main/java/com/da/dangan/service/impl/DaCatalogServiceImpl.java @@ -1,12 +1,21 @@ package com.da.dangan.service.impl; -import java.util.List; +import com.da.common.constant.UserConstants; +import com.da.common.core.domain.TreeSelect; +import com.da.common.core.domain.entity.SysUser; +import com.da.common.exception.ServiceException; import com.da.common.utils.DateUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; +import com.da.common.utils.StringUtils; +import com.da.common.core.domain.entity.DaCatalog; import com.da.dangan.mapper.DaCatalogMapper; -import com.da.dangan.domain.DaCatalog; import com.da.dangan.service.IDaCatalogService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.stream.Collectors; /** * 档案目录Service业务层处理 @@ -17,7 +26,7 @@ import com.da.dangan.service.IDaCatalogService; @Service public class DaCatalogServiceImpl implements IDaCatalogService { - @Autowired + @Resource private DaCatalogMapper daCatalogMapper; /** @@ -32,9 +41,53 @@ public class DaCatalogServiceImpl implements IDaCatalogService return daCatalogMapper.selectDaCatalogById(id); } + @Override + public List selectCatalogListByUserId(Long userId) { + return daCatalogMapper.selectCatalogListByUserId(userId); + } + + @Override + public List buildCatalogTreeSelect(List catalogs) { + List catalogTrees = buildCatalogTree(catalogs); + return catalogTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + /** + * 构建前端所需要树结构 + * + * @param catalogs 目录列表 + * @return 树结构列表 + */ + @Override + public List buildCatalogTree(List catalogs) + { + List returnList = new ArrayList<>(); + List tempList = catalogs.stream().map(DaCatalog::getId).collect(Collectors.toList()); + for (Iterator iterator = catalogs.iterator(); iterator.hasNext();) + { + DaCatalog catalog = iterator.next(); + // 如果是顶级节点, 遍历该父节点的所有子节点 + if (!tempList.contains(catalog.getPid())) + { + recursionFn(catalogs, catalog); + returnList.add(catalog); + } + } + if (returnList.isEmpty()) + { + returnList = catalogs; + } + return returnList; + } + + + @Override + public List selectCatalogList(Long userId) { + return selectAllDaCatalogList(new DaCatalog(), userId); + } /** * 查询档案目录列表 - * + * * @param daCatalog 档案目录 * @return 档案目录 */ @@ -44,6 +97,22 @@ public class DaCatalogServiceImpl implements IDaCatalogService return daCatalogMapper.selectDaCatalogList(daCatalog); } + @Override + public List selectAllDaCatalogList(DaCatalog daCatalog, Long userId) + { + List catalogList = null; + // 管理员显示所有菜单信息 + if (SysUser.isAdmin(userId)) + { + catalogList = daCatalogMapper.selectDaCatalogList(daCatalog); + } + else + { + daCatalog.getParams().put("userId", userId); + catalogList = daCatalogMapper.selectDaCatalogListByUserId(daCatalog); + } + return catalogList; + } /** * 新增档案目录 * @@ -54,6 +123,17 @@ public class DaCatalogServiceImpl implements IDaCatalogService public int insertDaCatalog(DaCatalog daCatalog) { daCatalog.setCreateTime(DateUtils.getNowDate()); + if(daCatalog.getPid()==0){ //代表添加的是主目录 + daCatalog.setAncestors(daCatalog.getPid().toString()); + }else{ + DaCatalog info = daCatalogMapper.selectDaCatalogById(daCatalog.getPid()); + // 如果父节点不为正常状态,则不允许新增子节点 + if (!UserConstants.DEPT_NORMAL.equals(info.getStatus())) + { + throw new ServiceException("此目录停用,不允许新增"); + } + daCatalog.setAncestors(info.getAncestors() + "," + daCatalog.getPid()); + } return daCatalogMapper.insertDaCatalog(daCatalog); } @@ -82,6 +162,17 @@ public class DaCatalogServiceImpl implements IDaCatalogService return daCatalogMapper.deleteDaCatalogByIds(ids); } + @Override + public boolean checkDaCatalogNameUnique(DaCatalog daCatalog) { + Long daCatalogId = StringUtils.isNull(daCatalog.getId()) ? -1L : daCatalog.getId(); + DaCatalog info = daCatalogMapper.checkDaCatalogNameUnique(daCatalog.getMuName(), daCatalog.getPid()); + if (StringUtils.isNotNull(info) && info.getId().longValue() != daCatalogId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + /** * 删除档案目录信息 * @@ -93,4 +184,50 @@ public class DaCatalogServiceImpl implements IDaCatalogService { return daCatalogMapper.deleteDaCatalogById(id); } + /** + * 递归列表 + * + * @param list 分类表 + * @param t 子节点 + */ + private void recursionFn(List list, DaCatalog t) + { + // 得到子节点列表 + List childList = getChildList(list, t); + t.setChildren(childList); + for (DaCatalog tChild : childList) + { + if (hasChild(list, tChild)) + { + recursionFn(list, tChild); + } + } + } + + /** + * 得到子节点列表 + */ + private List getChildList(List list, DaCatalog t) + { + List tlist = new ArrayList(); + Iterator it = list.iterator(); + while (it.hasNext()) + { + DaCatalog n = (DaCatalog) it.next(); + if (n.getPid().longValue() == t.getId().longValue()) + { + tlist.add(n); + } + } + return tlist; + } + + /** + * 判断是否有子节点 + */ + private boolean hasChild(List list, DaCatalog t) + { + return getChildList(list, t).size() > 0; + } + } diff --git a/dangan-dangan/src/main/resources/mapper/dangan/DaCatalogMapper.xml b/dangan-dangan/src/main/resources/mapper/dangan/DaCatalogMapper.xml index 32d3dbb..6fd0668 100644 --- a/dangan-dangan/src/main/resources/mapper/dangan/DaCatalogMapper.xml +++ b/dangan-dangan/src/main/resources/mapper/dangan/DaCatalogMapper.xml @@ -49,7 +49,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select distinct c.* from da_catalog c left join da_user_catalog uc on c.id = uc.mu_id - where ur.user_id = #{params.userId} + where uc.user_id = #{params.userId} AND c.mu_name like concat('%', #{muName}, '%') @@ -58,6 +58,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" order by c.pid, c.order_num + + insert into da_catalog