三级目录封装多种方法

工作时遇到了一个需求,查询当前项目拥有的文件夹以及他的文件,封装成树形返回前端,还要加上数字,数字是文件的数量

 工作推荐最好写上自己能够看懂的,以便以后方便维护

第一种

也是最简单的一种,直接拷贝更换实体类即可

工具方法在最下面

    public List<BusiFload> se(){
        List<BusiFload> list = mapper.selectBusiFloadList(16l);

        final List<BusiFload> parent = new ArrayList<>();
        //遍历全表分类元素
        list.forEach(bu-> {
        //currentCategory表⽰当前的⼀个分类
        //找出根分类
            // if (currentClassfication.getPid() == null && parent==null) {
            if (bu.getParentId() == 0 ) {
                //parent[0] = currentClassfication;
                parent.add(bu) ;
            }
//找出当前⼀个分类的孩⼦分类:再次遍历全表元素,与当前分类进行比较
            list.forEach((child)->{
                if(bu.getId().equals(child.getParentId())){
                    bu.getChildren().add(child);
                }
            });
        });

parent.forEach(l -> {
            if (l.getIsFload().equals(Constants.isFload)){
                Long id1 = l.getId();
                Integer count = 0;
                //查询当前文件夹的文件数
                count = extracted(String.valueOf(projectId), l, id1, count);
                l.setNumber(count);
            }
        });

        return parent;

    }

实体类

package m.dsf.controller.doing;

import com.fasterxml.jackson.annotation.JsonFormat;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 对象 busi_fload
 * 文件夹
 * @author ruoyi
 * @date 2023-03-14
 */
public class BusiFload
{

    private List<BusiFload> list = new ArrayList<BusiFload>();;

    public List<BusiFload> getList() {
        return list;
    }

    public void setList(List<BusiFload> list) {
        this.list = list;
    }

    private static final long serialVersionUID = 1L;

    /** 文件夹表id */
    private Long id;

    /** 文件名字 */

    private String fileName;

    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")

    private Date createTiem;

    /** 父文件夹id */

    private Long parentId;

    /** 删除状态/0未删除1删除 */
    private String delFlag;

    /** 项目id */

    private String busiProjectInfoId;

    /** 是否是文件夹/0是1不是 */

    private String isFload;

    /** 文件类型 */

    private String fileType;

    /** 上传作者 */

    private String fileUser;

    /** 摘要 */
    private String makeASummary;

    /** 排序 */
    private Integer  operate;
    /** 文件路径*/
    private String filePath;
    /** 文件大小*/
    private BigDecimal fileSize;
    /** 摘要或者名称*/
    private String keyValue;

    /**路径 */
    private String url;

    private Long userId;

    private String originalFileName;

    /**
     * 项目ID
     */
    private String projectId;


    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    public String getOriginalFileName() {
        return originalFileName;
    }

    public void setOriginalFileName(String originalFileName) {
        this.originalFileName = originalFileName;
    }

    public String getKeyValue() {
        return keyValue;
    }

    public void setKeyValue(String keyValue) {
        this.keyValue = keyValue;
    }

    public BigDecimal getFileSize() {
        return fileSize;
    }

    public void setFileSize(BigDecimal fileSize) {
        this.fileSize = fileSize;
    }

    public String getFilePath() {
        return filePath;
    }

    public void setFilePath(String filePath) {
        this.filePath = filePath;
    }

    /** 子菜单 */
    private List<BusiFload> children = new ArrayList<BusiFload>();

    public List<BusiFload> getChildren() {
        return children;
    }

    public void setChildren(List<BusiFload> children) {
        this.children = children;
    }

    public void setId(Long id)
    {
        this.id = id;
    }

    public Long getId() 
    {
        return id;
    }
    public void setFileName(String fileName) 
    {
        this.fileName = fileName;
    }

    public String getFileName() 
    {
        return fileName;
    }
    public void setCreateTiem(Date createTiem) 
    {
        this.createTiem = createTiem;
    }

    public Date getCreateTiem() 
    {
        return createTiem;
    }
    public void setParentId(Long parentId) 
    {
        this.parentId = parentId;
    }

    public Long getParentId() 
    {
        return parentId;
    }
    public void setDelFlag(String delFlag) 
    {
        this.delFlag = delFlag;
    }

    public String getDelFlag() 
    {
        return delFlag;
    }
    public void setBusiProjectInfoId(String busiProjectInfoId) 
    {
        this.busiProjectInfoId = busiProjectInfoId;
    }

    public String getBusiProjectInfoId() 
    {
        return busiProjectInfoId;
    }
    public void setIsFload(String isFload) 
    {
        this.isFload = isFload;
    }

    public String getIsFload() 
    {
        return isFload;
    }
    public void setFileType(String fileType) 
    {
        this.fileType = fileType;
    }

    public String getFileType() 
    {
        return fileType;
    }
    public void setFileUser(String fileUser) 
    {
        this.fileUser = fileUser;
    }

    public String getFileUser() 
    {
        return fileUser;
    }
    public void setMakeASummary(String makeASummary) 
    {
        this.makeASummary = makeASummary;
    }

    public String getMakeASummary()
    {
        return makeASummary;
    }

    public void setOperate(Integer operate)
    {
        this.operate = operate;
    }

    public Integer getOperate()
    {
        return operate;
    }

    @Override
    public String toString() {
        return "BusiFload{" +

                ", id=" + id +
                ", fileName='" + fileName + '\'' +
                ", createTiem=" + createTiem +
                ", parentId=" + parentId +
                ", delFlag='" + delFlag + '\'' +
                ", busiProjectInfoId='" + busiProjectInfoId + '\'' +
                ", isFload='" + isFload + '\'' +
                ", fileType='" + fileType + '\'' +
                ", fileUser='" + fileUser + '\'' +
                ", makeASummary='" + makeASummary + '\'' +
                ", operate=" + operate +
                ", filePath='" + filePath + '\'' +
                ", fileSize=" + fileSize +
                ", keyValue='" + keyValue + '\'' +
                ", url='" + url + '\'' +
                ", userId=" + userId +
                ", originalFileName='" + originalFileName + '\'' +
                ", projectId='" + projectId + '\'' +
                ", children=" + children +
                "list=" + list +
                '}';
    }

    public String getProjectId() {
        return projectId;
    }

    public void setProjectId(String projectId) {
        this.projectId = projectId;
    }
}

数据库

CREATE TABLE `busi_fload` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '文件夹表id',
  `file_name` varchar(255) NOT NULL COMMENT '文件名字',
  `create_tiem` datetime NOT NULL COMMENT '创建时间',
  `parent_id` int(11) DEFAULT NULL COMMENT '父文件夹id',
  `update_time` datetime DEFAULT NULL COMMENT '修改时间',
  `del_flag` char(1) NOT NULL COMMENT '删除状态/0未删除1删除',
  `busi_project_info_id` varchar(255) NOT NULL COMMENT '项目id',
  `is_fload` char(1) NOT NULL COMMENT '是否是文件夹/0是1不是',
  `file_type` varchar(255) DEFAULT NULL COMMENT '文件类型',
  `file_user` varchar(255) DEFAULT NULL COMMENT '上传作者',
  `make_a_summary` varchar(255) DEFAULT NULL COMMENT '摘要',
  `operate` int(255) DEFAULT NULL COMMENT '排序',
  `file_path` varchar(255) DEFAULT NULL COMMENT '文件路径',
  `file_size` double DEFAULT NULL COMMENT '文件大小',
  `original_file_name` varchar(255) DEFAULT NULL COMMENT '原文件名',
  `user_id` int(11) DEFAULT NULL COMMENT '用户id',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=263 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

第二种

 
    public List select(){
        List<BusiFload> list = mapper.selectBusiFloadList(16l);
        List<BusiFload> busiFloads = new ArrayList<>();
        //将最大 的节点放入最外面一级目录
        list.forEach(l->{
            if (l.getParentId() == 0){
                busiFloads.add(l);
            }
        });
        //删除最大节点元素
        list.removeAll(busiFloads);
        //   extracted(list, busiFloads);
        add(list,busiFloads);
busiFloads.forEach(l -> {
            if (l.getIsFload().equals(Constants.isFload)){
                Long id1 = l.getId();
                Integer count = 0;
                //查询当前文件夹的文件数
                count = extracted(String.valueOf(projectId), l, id1, count);
                l.setNumber(count);
            }
        });


        return busiFloads;
    }


    public static void add(List<BusiFload> list ,List<BusiFload> busiFloads){
        //遍历出事文件夹
        busiFloads.forEach(b->{
            //如果是文件,直接跳出本次循环
            if (b.getIsFload().equals(1)){
                return;
            }
            //使用下标循环用于删除元素,使用增强for循环无法进行删除操作
            for (int i = 0; i < list.size(); i++) {
                //拿到这个元素
                BusiFload busiFload = list.get(i);
                //判断不是本身以及子文件夹父级id和父id相等
                if (busiFload.getParentId().equals(b.getId()) && busiFload.getId() != b.getId()){
                    //判读如果集合是null则需要给他new出一个集合
                    if (b.getList() == null){
                        b.setList(new ArrayList<>());
                    }
                    b.getList().add(busiFload);
                    //元素添加后进行删除掉这个元素
                    list.remove(i);
                    i--;
                }
            }
            List<BusiFload> list1 = b.getList();
            //如果这个文件夹的子集合不为空,则继续递归他的子文件夹
            if (!CollectionUtils.isEmpty(list1)){
                add(list,list1);
            }

        });
    }

最后的数量都要吊一下查询数量的方法



    public int extracted(String busiProjectInfoId, BusiFload l, Long id1, Integer count) {
        count = busiFloadMapper.selectByIdFile(id1, busiProjectInfoId);//1
        List<TreeSelect> children = l.getChildren(); //1
        if (children.size() != 0) { //1
            for (int i = 0; i < children.size(); i++) {
                Long id2 = children.get(i).getId();
                int extracted = extracted(busiProjectInfoId, children.get(i), id2, count);
                children.get(i).setNumber(extracted);
                count += extracted;
            }

        }
        return count;

    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值