三级目录封装多种方法

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

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

第一种

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

工具方法在最下面

    public List se(){List list = mapper.selectBusiFloadList(16l);final List 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 list = new ArrayList();;public List getList() {return list;}public void setList(List 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 children = new ArrayList();public List getChildren() {return children;}public void setChildren(List 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;}@Overridepublic 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 list = mapper.selectBusiFloadList(16l);List 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 list ,List 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 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);//1List children = l.getChildren(); //1if (children.size() != 0) { //1for (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;}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部