首页 > 编程语言 >java后台删除当前节点及其子节点-递归

java后台删除当前节点及其子节点-递归

时间:2023-07-04 15:45:03浏览次数:49  
标签:java String 递归 private id value import 节点 name

一、表设计

 二、entity

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.joyoung.cloud.security.common.entity.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import javax.persistence.Column;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

@ApiModel(value = "自助售卖产品销售区域架构表")
@Table(name = "sys_sellarea")
@Data
@Accessors(chain = true)
public class SysSellarea extends BaseEntity implements Serializable {
    private static final long serialVersionUID = 1L;


    /**
     * 销售区域编码
     */
    @Column(name = "sellarea_code")
    @ApiModelProperty(value = "销售区域编码")
    private String sellareaCode;

    /**
     * 销售区域名称
     */
    @Column(name = "sellarea_name")
    @ApiModelProperty(value = "销售区域名称")
    private String sellareaName;

    /**
     * 上级ID
     */
    @Column(name = "parent_id")
    @ApiModelProperty(value = "上级ID")
    private String parentId;

    /**
     * 地址
     */
    @Column(name = "path")
    @ApiModelProperty(value = "地址")
    private String path;

    /**
     * 等级
     */
    @Column(name = "path_level")
    @ApiModelProperty(value = "等级")
    private String pathLevel;

    /**
     * 排序
     */
    @Column(name = "seq")
    @ApiModelProperty(value = "排序")
    private BigDecimal seq;

    /**
     * 描述
     */
    @Column(name = "remark")
    @ApiModelProperty(value = "描述")
    private String remark;

    @Transient
    private boolean hasChecked;
    @Transient
    private boolean hasChildren;

    @Transient
    private List<SysSellarea> children = new LinkedList<SysSellarea>();


    @JsonIgnore
    public static List<SysSellarea> sortList(Map<String, SysSellarea> map) {
        List<SysSellarea> SysSellareaTree = new ArrayList<>();
        map.forEach((id, obj) -> {
            if (map.containsKey(obj.getParentId())) {
                map.get(obj.getParentId()).getChildren().add(obj);
            } else {
                SysSellareaTree.add(obj);
            }
        });
        return SysSellareaTree;
    }

}

三、controller

/**
     * 删除销售区域
     * @param id
     * @return
     */
    @Override
    @ApiOperation(value = "删除销售区域及下面所有销售区域")
    @DeleteMapping("/{id}")
    public Result del(@PathVariable String id) {
        service.del(id);
        return ResultGenerator.genSuccessResult();
    }

四、service

public interface SysSellareaService extends BaseService<SysSellarea> {

    void del(String id);
}

五、serviceimpl

@Service
@Transactional
public class SysSellareaServiceImpl extends BaseServiceImpl<SysSellareaDao, SysSellarea> implements SysSellareaService {
  
/**
     * 删除销售区域
     * @param id
     */
    @Override
    public void del(String id) {
        //删除该节点以及下面节点
        delete(id);
    }

    private void delete(String id){
        //删除该节点
        try {
            dao.deleteSellareaById(id);
            List<SysSellarea> sysSellareas = dao.selectListByParentId(id);
            //递归删除该节点下所有节点
            if (sysSellareas==null||sysSellareas.size()==0){
                return;
            }else {
                for (SysSellarea sysSellarea1 : sysSellareas){
                    delete(sysSellarea1.getId());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw new BaseSystemException(SELLAREA_DEL_FAIL.getCode(),SELLAREA_DEL_FAIL.getMsg());
        }
    }

}

六、dao

@Repository
public interface SysSellareaDao extends TKMapper<SysSellarea> {
/**
     * 根据parentId查询
     * @param parentId
     * @return
     */
    List<SysSellarea> selectListByParentId(String parentId);
}

七、mapper

 <select id="selectListByParentId" resultType="com.joyoung.cloud.security.common.entity.system.SysSellarea">
        SELECT
        <include refid="Sellarea_param"/>,
        EXISTS (SELECT id FROM sys_sellarea WHERE parent_id = ssa.id AND del_flag = 0) AS hasChildren
        FROM sys_sellarea ssa WHERE ssa.del_flag = 0 AND ssa.parent_id = #{parentId}
    </select>

 

标签:java,String,递归,private,id,value,import,节点,name
From: https://www.cnblogs.com/wffzk/p/17525921.html

相关文章

  • Java数组
    Java数组数组概述1.数组概述1.相同类型变量的有序集合2.数组的声明和创建1.dataType[]arrayRefVar2.dataType[]arrayRefVar=newdataType[arraySize]内存分析1.声明数组int[]array=null;在栈中声明了array2.创建数组array=newint[10];在......
  • java+geotools (geotools for java)
    geotools所需的依赖,在pom.xml引入;<dependencies><!--forgeotoolsbegin--><!--处理空间数据--><!--geotools主要依赖--><dependency><groupId>org.geotools</groupId><artifa......
  • java工具类static静态方法读取yml配置
    当我们需要在工具类中获取yml配置的时候,由于变量是staic导致获取不到yml配置因为spring加载静态方法比IOC早,所以不能直接使用@Value注解读取yml配置,读取结果是null。@ComponentpublicclassTestUtil{//使用@Value注解读取yml配置的数据@Value("${test.url}")......
  • 【大厂面试必问】Java8 新特性
    博主介绍:✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家✌......
  • java限流-基于redis+lua
    redis是线程安全的,天然具有线程安全的特性,支持原子性操作,限流服务不仅需要承接超高QPS,还要保证限流逻辑的执行层面具备线程安全的特性,利用Redis这些特性做限流,既能保证线程安全,也能保证性能。结合上面的流程图,这里梳理出一个整体的实现思路:编写lua脚本,指定入参的限流规则,比如对......
  • javascript现代编程系列教程之X——javascript人工智能
    JavaScript在人工智能(AI)领域的应用主要体现在以下几个方面:浏览器端的机器学习:TensorFlow.js是一个在浏览器中运行的JavaScript机器学习库,它允许开发者训练和部署机器学习模型。这使得开发者可以在浏览器端进行实时的机器学习任务,无需将数据传输到服务器端,从而提高了用户的隐......
  • (一)Java中的IO操作—— File类
    一、File类在系统中用户通过文件系统所提供的系统调用实施对文件的操作。最基本的文件操作有:创建文件、删除文件、读文件、写文件、截断文件和设置文件的读/写位置。在Java中使用File类来作为目录或者文件的表示形式,也就是说我们想要表示一个文件,构造一个File对象即可。构......
  • java限流-基于基于guava实现
     1、引入guava依赖<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>23.0</version></dependency>2、自定义限流注解自定义一个限流用的注解,后面在需要限流的方法或接口上面只需添加该注解即可; importjava......
  • java8 日期、时间处理类
    一、LocalDate类创建LocalDate方法说明staticLocalDatenow()获取默认时区的当前日期,默认返回格式yyyy-MM-ddstaticLocalDatenow(Clockclock)从指定时钟获取当前日期staticLocalDatenow(ZoneIdzone)获取指定时区的当前日期staticLocalDateof(i......
  • 【四】JavaScript之类型转换
    【四】JavaScript之类型转换【1】类型转换javascript是弱类型的编程语言所以本身不仅提供了数据类型的转换甚至在数据使用运算符的时候,javascript的解释器也会出现默认隐式转换数据类型的情况。【2】字符串字符串转换成布尔值除了空字符串("")被转为false,其他的任......