123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- package org.jeecg.modules.demo.resManager.catalog.service.impl;
- import org.jeecg.common.exception.JeecgBootException;
- import org.jeecg.common.util.oConvertUtils;
- import org.jeecg.modules.demo.resManager.catalog.entity.Rescatalog;
- import org.jeecg.modules.demo.resManager.catalog.mapper.RescatalogMapper;
- import org.jeecg.modules.demo.resManager.catalog.service.IRescatalogService;
- import org.springframework.stereotype.Service;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import org.springframework.transaction.annotation.Transactional;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- /**
- * @Description: 资源目录
- * @Author: jeecg-boot
- * @Date: 2022-01-17
- * @Version: V1.0
- */
- @Service
- public class RescatalogServiceImpl extends ServiceImpl<RescatalogMapper, Rescatalog> implements IRescatalogService {
- @Override
- public void addRescatalog(Rescatalog rescatalog) {
- //新增时设置hasChild为0
- rescatalog.setHasChild(IRescatalogService.NOCHILD);
- if(oConvertUtils.isEmpty(rescatalog.getPid())){
- rescatalog.setPid(IRescatalogService.ROOT_PID_VALUE);
- }else{
- //如果当前节点父ID不为空 则设置父节点的hasChildren 为1
- Rescatalog parent = baseMapper.selectById(rescatalog.getPid());
- if(parent!=null && !"1".equals(parent.getHasChild())){
- parent.setHasChild("1");
- baseMapper.updateById(parent);
- }
- }
- baseMapper.insert(rescatalog);
- }
-
- @Override
- public void updateRescatalog(Rescatalog rescatalog) {
- Rescatalog entity = this.getById(rescatalog.getId());
- if(entity==null) {
- throw new JeecgBootException("未找到对应实体");
- }
- String old_pid = entity.getPid();
- String new_pid = rescatalog.getPid();
- if(!old_pid.equals(new_pid)) {
- updateOldParentNode(old_pid);
- if(oConvertUtils.isEmpty(new_pid)){
- rescatalog.setPid(IRescatalogService.ROOT_PID_VALUE);
- }
- if(!IRescatalogService.ROOT_PID_VALUE.equals(rescatalog.getPid())) {
- baseMapper.updateTreeNodeStatus(rescatalog.getPid(), IRescatalogService.HASCHILD);
- }
- }
- baseMapper.updateById(rescatalog);
- }
-
- @Override
- @Transactional(rollbackFor = Exception.class)
- public void deleteRescatalog(String id) throws JeecgBootException {
- //查询选中节点下所有子节点一并删除
- id = this.queryTreeChildIds(id);
- if(id.indexOf(",")>0) {
- StringBuffer sb = new StringBuffer();
- String[] idArr = id.split(",");
- for (String idVal : idArr) {
- if(idVal != null){
- Rescatalog rescatalog = this.getById(idVal);
- String pidVal = rescatalog.getPid();
- //查询此节点上一级是否还有其他子节点
- List<Rescatalog> dataList = baseMapper.selectList(new QueryWrapper<Rescatalog>().eq("pid", pidVal).notIn("id",Arrays.asList(idArr)));
- if((dataList == null || dataList.size()==0) && !Arrays.asList(idArr).contains(pidVal)
- && !sb.toString().contains(pidVal)){
- //如果当前节点原本有子节点 现在木有了,更新状态
- sb.append(pidVal).append(",");
- }
- }
- }
- //批量删除节点
- baseMapper.deleteBatchIds(Arrays.asList(idArr));
- //修改已无子节点的标识
- String[] pidArr = sb.toString().split(",");
- for(String pid : pidArr){
- this.updateOldParentNode(pid);
- }
- }else{
- Rescatalog rescatalog = this.getById(id);
- if(rescatalog==null) {
- throw new JeecgBootException("未找到对应实体");
- }
- updateOldParentNode(rescatalog.getPid());
- baseMapper.deleteById(id);
- }
- }
-
- @Override
- public List<Rescatalog> queryTreeListNoPage(QueryWrapper<Rescatalog> queryWrapper) {
- List<Rescatalog> dataList = baseMapper.selectList(queryWrapper);
- List<Rescatalog> mapList = new ArrayList<>();
- for(Rescatalog data : dataList){
- String pidVal = data.getPid();
- //递归查询子节点的根节点
- if(pidVal != null && !"0".equals(pidVal)){
- Rescatalog rootVal = this.getTreeRoot(pidVal);
- if(rootVal != null && !mapList.contains(rootVal)){
- mapList.add(rootVal);
- }
- }else{
- if(!mapList.contains(data)){
- mapList.add(data);
- }
- }
- }
- return mapList;
- }
-
- /**
- * 根据所传pid查询旧的父级节点的子节点并修改相应状态值
- * @param pid
- */
- private void updateOldParentNode(String pid) {
- if(!IRescatalogService.ROOT_PID_VALUE.equals(pid)) {
- Integer count = baseMapper.selectCount(new QueryWrapper<Rescatalog>().eq("pid", pid));
- if(count==null || count<=1) {
- baseMapper.updateTreeNodeStatus(pid, IRescatalogService.NOCHILD);
- }
- }
- }
- /**
- * 递归查询节点的根节点
- * @param pidVal
- * @return
- */
- private Rescatalog getTreeRoot(String pidVal){
- Rescatalog data = baseMapper.selectById(pidVal);
- if(data != null && !"0".equals(data.getPid())){
- return this.getTreeRoot(data.getPid());
- }else{
- return data;
- }
- }
- /**
- * 根据id查询所有子节点id
- * @param ids
- * @return
- */
- private String queryTreeChildIds(String ids) {
- //获取id数组
- String[] idArr = ids.split(",");
- StringBuffer sb = new StringBuffer();
- for (String pidVal : idArr) {
- if(pidVal != null){
- if(!sb.toString().contains(pidVal)){
- if(sb.toString().length() > 0){
- sb.append(",");
- }
- sb.append(pidVal);
- this.getTreeChildIds(pidVal,sb);
- }
- }
- }
- return sb.toString();
- }
- /**
- * 递归查询所有子节点
- * @param pidVal
- * @param sb
- * @return
- */
- private StringBuffer getTreeChildIds(String pidVal,StringBuffer sb){
- List<Rescatalog> dataList = baseMapper.selectList(new QueryWrapper<Rescatalog>().eq("pid", pidVal));
- if(dataList != null && dataList.size()>0){
- for(Rescatalog tree : dataList) {
- if(!sb.toString().contains(tree.getId())){
- sb.append(",").append(tree.getId());
- }
- this.getTreeChildIds(tree.getId(),sb);
- }
- }
- return sb;
- }
- }
|