文件系统的实现描述

技术栈运用

后端技术栈 springboot + mybatis
数据库 mysql 5.7
前端 vue cli3.0 (axios、element ui)
分布式文件存储系统 FastDFS

功能实现

前台

前台展示用户上传的经过审核之后的文件相关信息,通过下拉框确定搜索的条件,进行相关内容的模糊查询,根据定位的相关信息,可以预览查看文件相关的详细信息,以及进行附件的下载操作(下载会判断五文件的属性,是否为非公开文件,公开的可以直接下载,反之需要进行登录认证操作,并记录日志)

  • 多维度条件搜索(下拉框实现)

springboot和vue如何生成报告模板到excel中_vue.js

  • 页面跳转详情预览
  • 预览文件
  • 文件下载

后台

后台分为六个板块:

  • 用户管理:新增用户(校验用户昵称是否系统重复),维护用户的登录名称,登录密码,以及真实名称,部门信息,可以删除用户,修改用户密码,(会校验用户的旧密码,进行新密码的修改)
  • 文档管理:新增文档信息(包括上传附件),详情查看(预览附件信息),信息修改,管理端可以对用户上传的文件进行(审核、下线)操作,用户端文档信息上传(区分不同用户只能看到自己上传的文件)
  • 操作日志:记录前台用户下载附件的操作信息
  • 文件类型、标准管理:基本的增删改查操作
  • 部门信息:该部分通过树形结构,可以维护三级部门信息,删除操作会校验部门的引用信息,以及下级部门引用,控制上级部门的删除操作
  • 统计信息管理:该功能为了根据文件类型、文件标准两个维度去统计用户上传的文件数量
  • 用户管理模板
  • springboot和vue如何生成报告模板到excel中_spring_02

  • 文档管理
  • springboot和vue如何生成报告模板到excel中_spring_03

  • 操作日志
  • springboot和vue如何生成报告模板到excel中_vue.js_04

  • 部门管理

springboot和vue如何生成报告模板到excel中_spring_05

  • 标准等级管理
  • 标准层级管理
  • 数据统计管理

核心功能代码

部门管理

package com.core.doc.controller.dept;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.core.doc.DTO.DeptInfoToReg;
import com.core.doc.DTO.DeptShowInfo;
import com.core.doc.entity.DeptInfo;
import com.core.doc.entity.Login;
import com.core.doc.entity.UserInfo;
import com.core.doc.mapper.DeptInfoMapper;
import com.core.doc.mapper.LoginMapper;
import com.core.doc.mapper.UserInfoMapper;
import com.core.doc.response.Result;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.*;
import java.util.stream.Collectors;

@RestController
@RequestMapping("/dept")
public class DeptContorller {


    @Autowired
    DeptInfoMapper deptInfoMapper;

    @Autowired
    UserInfoMapper usermapper;

    @ApiOperation(value = "增加部门信息")
    @PostMapping("/add")
    public Result getDetail(@RequestBody DeptInfo deptInfo){
        int insert = deptInfoMapper.insert(deptInfo);
        System.out.println(deptInfo.getDeptid());

        if(insert > 0){
            return Result.ok();
        }
        return Result.error();
    }

    @ApiOperation(value = "删除部门信息")
    @PostMapping("/del")
    public Result del(Integer id){
        QueryWrapper<UserInfo> userQuery = new QueryWrapper<>();
        userQuery.eq("deptId",id);

        Integer check = usermapper.selectCount(userQuery);
        if(check > 0){
            return Result.error();
        }
        QueryWrapper<DeptInfo> wrapper = new QueryWrapper<>();;
        wrapper.eq("parent",id);
        int count = 0;
        List<DeptInfo> list = deptInfoMapper.selectList(wrapper);
        System.out.println(list);
        if(list != null && list.size() >0){
            Set<Integer> set = list.stream().map(x -> x.getDeptid()).collect(Collectors.toSet());
            Map<String, Set<Integer>> map = new HashMap<>();
            map.put("parent",set);
            wrapper.or()
                    .in("parent",set)
                    .or()
                    .eq("deptId",id);
            List<DeptInfo> deptInfos = deptInfoMapper.selectList(wrapper);
            Set<Integer> deptscollect = deptInfos.stream().map(x -> x.getDeptid()).collect(Collectors.toSet());
            userQuery.or().in("deptId",deptscollect);
            check = usermapper.selectCount(userQuery);
            if(check > 0){
                return Result.error();
            }
            count = deptInfoMapper.delete(wrapper);
        }else {
            QueryWrapper<DeptInfo>  newwrapper = new QueryWrapper<>();
            newwrapper.eq("deptId",id);
            count = deptInfoMapper.delete(newwrapper);
        }

        if(count > 0){
            return Result.ok();
        }
        return Result.error();
    }

    @ApiOperation(value = "查询部门信息")
    @PostMapping("/detail")
    public Result getDetail(Integer id){
        DeptInfo deptInfo = deptInfoMapper.selectByPrimaryKey(id);
        return Result.ok().data("msg",deptInfo);
    }

    @ApiOperation(value = "修改部门信息")
    @PostMapping("/updata")
    public Result updatainfo(@RequestBody DeptInfo deptInfo){
        int i = deptInfoMapper.updateById(deptInfo);
        if (i > 0){
            return Result.ok().data("msg",deptInfo);
        }else {
            return Result.error();
        }
    }

    @ApiOperation(value = "获取所有的部门信息")
    @PostMapping("/info")
    public Result getAllDeptInfo(){
        List<DeptInfo> deptInfos = deptInfoMapper.selectList(null);
        // level_id : parent_id
        Map<Integer,Integer> allmap =  transform(deptInfos);

        List<DeptShowInfo> level1 = new ArrayList<>();
        List<DeptShowInfo> level2 = new ArrayList<>();

        for (DeptInfo info : deptInfos) {
            DeptShowInfo resData = new DeptShowInfo();
            resData.setEdit(false);
            resData.setId(info.getDeptid());
            resData.setDeptid(info.getDeptid());
            resData.setLabel(info.getDeptname());
            if(info.getParent() == 0){
                level1.add(resData);
            }else {
                level2.add(resData);
            }
        }
        DeptShowInfo[] deptShowInfos = new DeptShowInfo[level1.size()];
        Map<Integer,DeptShowInfo> lis = transtoMap(level2);
        Map<Integer,DeptShowInfo> temp1map =  transform1(level1);
        Map<Integer,DeptShowInfo> temp2map =  transform1(level2);

        for (DeptShowInfo info : level2) {

            Integer parentid = allmap.get(info.getId());
            if (temp1map.get(parentid) !=null){
                if(temp1map.get(parentid).getChildren() ==null){
                    List<DeptShowInfo> infos = new ArrayList<>();
                    infos.add(info);
                    temp1map.get(parentid).setChildren(infos);
                }else {
                    temp1map.get(parentid).getChildren().add(info);
                }
            }
            if (temp2map.get(parentid) !=null){
                if(temp2map.get(parentid).getChildren() ==null){
                    List<DeptShowInfo> infos = new ArrayList<>();
                    infos.add(info);
                    temp2map.get(parentid).setChildren(infos);
                }else {
                    temp2map.get(parentid).getChildren().add(info);
                }
            }

        }


        return Result.ok().data("msg",level1.toArray());
    }

    private Map<Integer, DeptShowInfo> transtoMap(List<DeptShowInfo> level2) {
        Map<Integer, DeptShowInfo> map = new HashMap<>();
        for (DeptShowInfo info : level2) {
            map.put(info.getId(),info);
        }
        return map;
    }

    private Map<Integer, Integer> transform(List<DeptInfo> deptInfos) {
        Map<Integer,Integer> map = new HashMap<>();
        for (DeptInfo info : deptInfos) {
            map.put(info.getDeptid(),info.getParent());
        }
        return map;
    }

    private Map<Integer, DeptShowInfo> transform1(List<DeptShowInfo> deptInfos) {
        Map<Integer,DeptShowInfo> map = new HashMap<>();
        for (DeptShowInfo info : deptInfos) {
            map.put(info.getId(),info);
        }
        return map;
    }

    @ApiOperation(value = "获取部门的信息用于用户的信息注册")
    @PostMapping("/deptinfotoregis")
    public Result getAllDeptInfoToRegist(){
        List<DeptInfo> deptInfos = deptInfoMapper.selectList(null);
        List<DeptInfoToReg> regs = new ArrayList<>();
        for (DeptInfo info : deptInfos) {
            regs.add(new DeptInfoToReg(info.getDeptid(), info.getDeptname()));
        }
        return Result.ok().data("msg",regs);
    }

}

统计数据

package com.core.doc.project;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.core.doc.entity.FileInfo;
import com.core.doc.entity.FileLevel;
import com.core.doc.entity.FileType;
import com.core.doc.mapper.FileInfoMapper;
import com.core.doc.mapper.FileLevelMapper;
import com.core.doc.mapper.FileTypeMapper;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.*;
import java.util.stream.Collectors;

//import org.springframework.util.ObjectUtils;
@RestController
@RequestMapping("/query")
public class QueryController {

    @Autowired
    FileLevelMapper fileLevelMapper;

    @Autowired
    FileTypeMapper fileTypeMapper;

    @Autowired
    FileInfoMapper fileInfoMapper;

    public static List<FTobj> toA() {
        FTobj l1 = new FTobj(1, "ZSA");
        FTobj l2 = new FTobj(2, "LSA");
        FTobj l3 = new FTobj(3, "WWA");
        FTobj l4 = new FTobj(4, "ZZA");
        List<FTobj> list = new LinkedList<>();
        list.add(l1);
        list.add(l2);
        list.add(l3);
        list.add(l4);
        return list;
    }

    public static List<FTobj> toB() {
        FTobj l1 = new FTobj(11, "ZSB");
        FTobj l2 = new FTobj(22, "LSB");
        FTobj l3 = new FTobj(33, "WWB");
        FTobj l4 = new FTobj(44, "ZZB");
        List<FTobj> list = new LinkedList<>();
        list.add(l1);
        list.add(l2);
        list.add(l3);
        list.add(l4);
        return list;
    }

    public List<ResutlData> toData(Map<String, Set<String>> map) {
        for (Map.Entry<String, Set<String>> entry : map.entrySet()) {
            for (String s : entry.getValue()) {
//                System.out.println(entry.getKey() + ":" + s);
            }
        }
        List<ResutlData> resutlData = new LinkedList<>();
        List<FileInfo> list = fileInfoMapper.selectList(null);
//        Map<Integer, Integer> collect = list.stream().collect(Collectors.toMap(FileInfo::getFiletypeid, FileInfo::getFilestandardid));
        HashMap<Integer, Map<Integer, Integer>> listHashMap = new LinkedHashMap<>();

        for (FileInfo info : list) {
           Map<Integer, Integer> mapList =  listHashMap.get(info.getFiletypeid());
            if(mapList == null){
                HashMap<Integer, Integer> map1 = new HashMap<>();
                map1.put(info.getFilestandardid(),1);
                listHashMap.put(info.getFiletypeid(),map1);
            }else {
                Integer integer = mapList.get(info.getFilestandardid());
                if (integer == null){
                    mapList.put(info.getFilestandardid(),1);
                }
                else {
                    Integer count = mapList.get(info.getFilestandardid());
                    mapList.put(info.getFilestandardid(),count + 1);
                }
            }
        }
//        System.out.println();
        for (Map.Entry<Integer, Map<Integer, Integer>> entry : listHashMap.entrySet()) {
            for (Map.Entry<Integer, Integer> integerEntry : entry.getValue().entrySet()) {
                resutlData.add(new ResutlData(entry.getKey(), integerEntry.getKey(), integerEntry.getValue()));
            }
        }


       /* for (FileInfo info : list) {
            resutlData.add(new ResutlData(info.getFiletypeid(), info.getFilestandardid(), 3));
        }*/
//        System.out.println(resutlData);
        return resutlData;
    }


    @RequestMapping("/info")
    public List<ShowObj> queryMethod() {
        Map<String, Set<String>> map = new HashMap<>();
        QueryWrapper<FileType> fileTypeQueryWrapper = new QueryWrapper<>();
        fileTypeQueryWrapper.orderByAsc("filetypeid");
        QueryWrapper<FileLevel> FileLevelQueryWrapper = new QueryWrapper<>();
        FileLevelQueryWrapper.orderByAsc("filelevelid");
        List<FileType> obja = fileTypeMapper.selectList(fileTypeQueryWrapper);
        List<FileLevel> objb = fileLevelMapper.selectList(FileLevelQueryWrapper);


//        List<FTobj> obja = toA();
//        List<FTobj> objb = toB();
        // 使用示例
        Map<Long, String> collectA = obja.stream().collect(Collectors.toMap(FileType::getFiletypeid, FileType::getFiletypename));
        Map<Integer, String> collectB = objb.stream().collect(Collectors.toMap(FileLevel::getFilelevelid, FileLevel::getFilelevelname));

//        System.out.println(collectA);
        Set<String> collect = objb.stream().map(x -> x.getFilelevelname()).collect(Collectors.toSet());
        for (FileType a : obja) {
            map.put(a.getFiletypename(), collect);
        }

        List<ResutlData> resutlData = toData(map);

        Map<String, ShowObj> tempmap = null;
        for (ResutlData data : resutlData) {
            String s1 = collectA.get(data.getNum1().longValue());
//            System.out.println("+==="+s1);
            String s2 = collectB.get(data.getNum2());
            Integer coun = data.getCoun();
            List<FileTypeDTO> fillist = null;
            if (tempmap == null) {
                tempmap = new HashMap<>();
                fillist = new ArrayList<>();
                FileTypeDTO dto = new FileTypeDTO(s2, coun);
                fillist.add(dto);
                tempmap.put(s1, new ShowObj(s1, fillist));
            } else {
                ShowObj showObj = tempmap.get(s1);
                if (showObj != null) {
                    List<FileTypeDTO> count = showObj.getCount();
                    if (count != null && count.size() > 0) {
                        FileTypeDTO dto = new FileTypeDTO(s2, coun);
                        count.add(dto);
                    }
                } else {
                    fillist = new ArrayList<>();
                    FileTypeDTO dto = new FileTypeDTO(s2, coun);
                    fillist.add(dto);
                    tempmap.put(s1, new ShowObj(s1, fillist));
                }

            }

        }
        // 去填充所有的结果集
        Set<String> tempSetA = collectA.entrySet().stream().map(x -> x.getValue()).collect(Collectors.toSet());
        Set<String> tempSetB = collectB.entrySet().stream().map(x -> x.getValue()).collect(Collectors.toSet());


//        System.out.println("========");
//        System.out.println(tempSetB);

        for (String num1 : tempSetA) {
            List<FileTypeDTO> fillist = null;
            ShowObj showObj = tempmap.get(num1);
            if (showObj == null) {
                fillist = new ArrayList<>();
                for (String num2 : tempSetB) {
                    FileTypeDTO dto = new FileTypeDTO(num2, 0);

                    fillist.add(dto);
                }

                tempmap.put(num1, new ShowObj(num1, fillist));
            }else {
                fillist = showObj.getCount();
                Set<String> set = fillist.stream().map(x -> x.getStandardtype()).collect(Collectors.toSet());
                for (String s : tempSetB) {
                    boolean flag = false;
                    for (String s1 : set) {
                        if(s1.equals(s)){
                            flag = true;
                        }
                    }
                    if(!flag){
                        FileTypeDTO dto = new FileTypeDTO(s, 0);
                        fillist.add(dto);
                    }
                }

            }
        }


        Set<ShowObj> collect1 = tempmap.entrySet().stream().map(x -> x.getValue()).collect(Collectors.toSet());


        System.out.println(collect1);
        System.out.println("=====");
        System.out.println(tempSetA);
        System.out.println(tempSetB);
        // 排序
//        Map<String, ShowObj> resmap = new LinkedHashMap<>();
        LinkedList<ShowObj> list = new LinkedList<>();
        for (String key1 : tempSetA) {
            List<FileTypeDTO> newlist = new LinkedList<>();
            for (String key2 : tempSetB) {
                List<FileTypeDTO> templist = tempmap.get(key1).getCount();
                for (FileTypeDTO dto : templist) {
                    if (dto.getStandardtype().equals(key2)){
                        FileTypeDTO fileTypeDTO = new FileTypeDTO(key2, dto.getCount());
                        newlist.add(fileTypeDTO);
                    }
                }
            }
            list.add(new ShowObj(key1,newlist));
        }


        return list;
    }

}

相关功能实现

Vue+Springboot实现数据表格合并列(附前后端代码实现)

记录springboot+vue+fastdfs实现简易的文件(上传、下载、删除、预览)操作

源码下载:GIT