2课程分类管理模块

二课程分类管理模块

1具体功能

  • 腾讯云存储服务

  • 分类的树形展示(一级,二级分类)(1课程分类列表展示)

  • 通过excel的读写来管理课程分类(2课程分类导入;3课程分类导出)

2具体知识点

​ 2.1腾讯云存储服务

  • 开通COS服务(阿里云就是oos,其他几乎一样)

  • 创建Bucket

  • 创建API秘钥

  • 引入依赖

  • 配置application.properties

    • #不同的服务器,地址不同
      tencent.cos.file.region=ap-beijing
      tencent.cos.file.secretid=你的id
      tencent.cos.file.secretkey=你的key
      #bucket可以在控制台创建,也可以使用java代码创建
      tencent.cos.file.bucketname=你的bucketName
      
  • 使用官方api

2.2数据库相关字端

  • subject表

    • id:课程Id

    • title:课程名字

    • parent_id:课程父id,如果是一级分类就为0,二级分类就是父一级分类的id

  • course表

    • id
    • teacher_id
    • subject_id:所属二级分类
    • subject_parent_id:所属一级分类
  • course_description

    • id
    • course_id:和上面一一对应
    • decsription:类型为text

2.3EasyExcel

  • 引入相关依赖

  • 实体类(设置表头)

    • @Data
      public class DemoData {
      
          //设置excel表头名称
          //index=0表示是第一列
          @ExcelProperty(value = "学生编号",index = 0)
          private Integer sno;
      
          @ExcelProperty(value = "学生姓名",index = 1)
          private String sname;
      }
      
  • 写操作

    • public class TestWrite {
      
          public static void main(String[] args) {
              //设置文件名称和路径
              String fileName = "C:\\fao\\programXiangMu\\txunguigu\\qita\\test.xlsx";
              //调用方法
              EasyExcel.write(fileName,User.class)
                        .sheet("写操作")
                        .doWrite(data());
          }
      
          //循环设置要添加的数据,最终封装到list集合中
          private static List<User> data() {
              List<User> list = new ArrayList<User>();
              for (int i = 0; i < 10; i++) {
                  User data = new User();
                  data.setId(i);
                  data.setName("lucy"+i);
                  list.add(data);
              }
              return list;
          }
      }
      
  • 读操作

    • 读比写多一个监听器

    • public class ExcelListener extends AnalysisEventListener<User> {
      
          //一行一行读取excel内容,把每行内容封装到user对象
          // 从excel第二行开始读取
          @Override
          public void invoke(User user, AnalysisContext analysisContext) {
              System.out.println(user);
          }
      
          //读取表头内容
          @Override
          public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
              System.out.println("表头:"+headMap);
          }
      
          @Override
          public void doAfterAllAnalysed(AnalysisContext analysisContext) {
      
          }
      }
      
    • public class TestRead {
      
          public static void main(String[] args) {
              //设置文件名称和路径
              String fileName = "C:\\fao\\programXiangMu\\txunguigu\\qita\\test.xlsx";
              //调用方法进行读操作
              EasyExcel.read(fileName,User.class,new ExcelListener()).sheet().doRead();
          }
      }
      

2.3课程分类功能一:课程分类列表

  • //课程分类列表
        //懒加载,每次查询一层数据
    	//不用懒加载就是把所有二级目录全部查出来
        @Override
        public List<Subject> selectSubjectList(Long id) {
            //SELECT * FROM SUBJECT WHERE parent_id=0
            QueryWrapper<Subject> wrapper = new QueryWrapper<>();
            wrapper.eq("parent_id",id);
            List<Subject> subjectList = baseMapper.selectList(wrapper);
            //subjectList遍历,得到每个subject对象,判断是否有下一层数据,有hasChildren=true
            for (Subject subject:subjectList) {
                //获取subject的id值
                Long subjectId = subject.getId();
                //查询
                boolean isChild = this.isChildren(subjectId);
                //封装到对象里面
                subject.setHasChildren(isChild);
            }
            return subjectList;
        }
    
     //判断是否有下一层数据
        private boolean isChildren(Long subjectId) {
            QueryWrapper<Subject> wrapper = new QueryWrapper<>();
            wrapper.eq("parent_id",subjectId);
            Integer count = baseMapper.selectCount(wrapper);
            // 1>0  true   0>0 false
            return count>0;
        }
    
  • 前端:使用使用树形组件

​ 2.4课程分类功能二:课程分类导出/下载

  • //课程分类导出
       @ApiOperation("课程分类导出")
       @GetMapping("exportData")
       public void exportData(HttpServletResponse response) {
           subjectService.exportData(response);
       }
    
  • //课程分类导出
       @Override
       public void exportData(HttpServletResponse response) {
           try {
               //1设置下载信息
               response.setContentType("application/vnd.ms-excel");
               response.setCharacterEncoding("utf-8");
               // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
               String fileName = URLEncoder.encode("课程分类", "UTF-8");
               response.setHeader("Content-disposition", "attachment;filename="+ fileName + ".xlsx");
     
               //2查询课程分类表所有数据
               List<Subject> subjectList = baseMapper.selectList(null);
     
               //3封装数据
               //List<Subject> ---  List<SubjectEeVo>
               List<SubjectEeVo> subjectEeVoList = new ArrayList<>();
               for (Subject subject: subjectList) {
                   SubjectEeVo subjectEeVo = new SubjectEeVo();
    //                subjectEeVo.setId(subject.getId());
    //                subjectEeVo.setParentId(subject.getParentId());
                    BeanUtils.copyProperties(subject,subjectEeVo);
                    subjectEeVoList.add(subjectEeVo);
                }
    
                //4EasyExcel写操作
                EasyExcel.write(response.getOutputStream(), SubjectEeVo.class)
                        .sheet("课程分类")
                        .doWrite(subjectEeVoList);
            }catch(Exception e) {
                throw new GgktException(20001,"导出失败");
            }
        }
    
  • 前端

  • exportData() {
        window.open("http://localhost:8301/admin/vod/subject/exportData")
    }
    

2.5课程分类功能三:课程分类导入/上传

  • //课程分类导入
       @ApiOperation("课程分类导入")
       @PostMapping("importData")
       public Result importData(MultipartFile file) {
           subjectService.importData(file);
           return Result.ok(null);
       }
    
  • //课程分类导入
    	//就一步,直接调用EasyExcel读操作
      @Override
      public void importData(MultipartFile file) {
          try {
              EasyExcel.read(file.getInputStream(),
                      SubjectEeVo.class,
                      subjectListener).sheet().doRead();
          } catch (IOException e) {
              throw new GgktException(20001,"导入失败");
          }
      }
    
posted @ 2022-07-14 15:44  fao99  阅读(438)  评论(0)    收藏  举报