学成在线-删除课程计划

27 篇文章 0 订阅
26 篇文章 2 订阅

本人技术有限写的不好的地方敬请原谅,如有什么问题或者更好的解决方案大家可以留言或者私信


前言

教程中讲解了课程计划查询展示以及新增,并没有实现课程计划的修改以及删除,所以本文将实现课程计划的删除


一、解决思路

1.获取课程计划Id

course_plan.vue这个页面中有一个方法renderContent,包含删除,修改按钮可以获取到所要操作的课程计划的对应的课程计划ID
在这里插入图片描述

2.传入到后台需要考虑的问题

(1)传入的课程计划是父节点还是子节点

a: 如果是子节点直接删除就ok,
b:如果是父节点先删除对应的所有子节点,然后在删除父节点

(2)如果是子节点,删除对应与视频关联的信息(teachplan_media表)

首先根据课程计划ID查询teachplan_media表是否包含对应的关联信息包含就删除;
不包含对应的关联信息包括两种情况,
第一前台传递的ID为子节点本来就没有选择视频直接调用删除即可;
第二前台传递的ID为父节点查询对应的子节点然后循环去判断是否包含关联信息 包含就删除关联信息,然后在删除对应的课程计划

本人技术小白解释可能会不清楚。如果有任何问题或者更好的解决方案直接私聊或者评论即可

二、代码实现

1.vue前端

(1)course_plan.vue增加删除方法

给删除按钮增加一个点击事件

 renderContent(h, { node, data, store }) {
        return (
          <span style="flex: 1; display: flex; align-items: center; justify-content: space-between; font-size: 14px; padding-right: 8px;">
            <span>
              <span>{node.label}</span>
            </span>
            <span>
              <el-button style="font-size: 12px;" type="text" on-click={ () => this.choosevideo(data) }>{data.mediaFileOriginalName}&nbsp;&nbsp;&nbsp;&nbsp; 选择视频</el-button>
              <el-button style="font-size: 12px;" type="text" on-click={ () => this.edit(data) }>修改</el-button>
              <el-button style="font-size: 12px;" type="text" on-click={ () => this.remove(node, data) }>删除</el-button>
            </span>
          </span>);
      },

删除按钮触发的方法

 //删除章节
      remove(node, data) {
        if (data.children==null && (data.mediaFileOriginalName==null||data.mediaFileOriginalName=="")){
          //删除子章节,章节并没有选择对应的视频
          this.$confirm('确认删除这个子章节吗?', '提示', {}).then(() => {
            courseApi.deleteTeachPlan(data.id).then(res=>{
              if(res.success){
                this.$message.success("删除成功,请及时更新发布");
                this.findTeachplan();//重新查询下分类信息
              }else{
                this.$message.error("删除失败");
              }
            });
          });
        }else if (data.children==null && (data.mediaFileOriginalName!=null||data.mediaFileOriginalName!="")) {
          //删除子章节,并且章节选择了视频
          this.$confirm('确认删除这个子章节吗,此章节下已经选择了对应的视频?', '提示', {}).then(() => {
            courseApi.deleteTeachPlan(data.id).then(res=>{
              if(res.success){
                this.$message.success("删除成功,请及时更新发布");
                this.findTeachplan();//重新查询下分类信息
              }else{
                this.$message.error("删除失败");
              }
            });
          });
        }else {
          console.log(data);
          this.$confirm('确认删除这个父章节及其子章节吗,其中部分子章节可能已经选择了对应的视频?', '提示', {}).then(() => {
            courseApi.deleteTeachPlan(data.id).then(res => {
              if (res.success) {
                this.$message.success("删除成功,请及时更新发布");
                this.findTeachplan();
              } else {
                this.$message.error("删除失败");
              }
            });
          });
        }
      },

(2)course.js删除计划的请求

/*删除一个章节课程计划*/
export const deleteTeachPlan= teachPlanId => {
  return http.requestDelete(apiUrl+'/course/teachplan/delete?teachPlanId='+teachPlanId)
}

2.Java服务端

xc-service-manage-course服务

(1)课程管理controller与api

controller

@Override
    @DeleteMapping("/teachplan/delete")
    public ResponseResult deleteTeachPlan(@RequestParam("teachPlanId") String teachPlanId) {//删除子章节课程计划
        return this.courseService.deleteTeachPlan(teachPlanId);
    }

api

@ApiOperation("删除子章节课程计划")
    public ResponseResult deleteTeachPlan(String teachPlanId);

(2)service处理删除逻辑

//删除子章节课程计划
    @Transactional
    public ResponseResult deleteTeachPlan(String teachPlanId) {
        if (StringUtils.isEmpty(teachPlanId)) {
            //传入参数为空抛出异常
            return new ResponseResult(CommonCode.INVALID_PARAM);
        }
        //首先根据ID去查询TeachPlan_media是否选择了对应的视频(选择了就删除media关联信息然后删除对应的课程计划,没有选择就不删除只需要删除对应的课程计划)
        //查询TeachPlan_media是否选择了对应的视频,选择了就删除
        this.deleteTeachPlanMedia(teachPlanId);
        //2.如果选择删除的是父课程计划就需要查询对应的子课程计划判断media关联信息是否存在,存在循环调用方法删除
        List<Teachplan> teachPlanList = this.teachPlanRepository.findByParentidEquals(teachPlanId);
        if (teachPlanList.size() > 0) {
            //包含子节点,首先获取对应子节点的ID循环判断是否包含对应的关联信息,存在就删除
            for (Teachplan teachplan : teachPlanList) {
                this.deleteTeachPlanMedia(teachplan.getId());
            }
            //删除完成之后,然后根据parentID(ID)删除子节点
            this.teachPlanRepository.deleteByParentidEquals(teachPlanId);
        }
        //删除完字节点或者没有子节点 根据Id删除对应的父课程计划节点
        long result = this.teachPlanRepository.deleteByIdEquals(teachPlanId);//返回删除的记录数
        if (result <= 0) {
            return new ResponseResult(CommonCode.FAIL);
        }
        return new ResponseResult(CommonCode.SUCCESS);
    }

    //删除课程计划与视频的关联信息(参数为课程计划Id)
    private void deleteTeachPlanMedia(String teachPlanId){
        //查询TeachPlan_media是否选择了对应的视频
        Optional<TeachplanMedia> optionalTeachPlanMedia = this.teachPlanMediaRepository.findById(teachPlanId);
        if (optionalTeachPlanMedia.isPresent()){
            //表示有对应的关联信息,删掉
            this.teachPlanMediaRepository.deleteById(teachPlanId);
        }
    }

(3)TeachPlanRepository

//当返回值大于0删除成功的记录数(删除子章节课程计划单条数据),
long deleteByIdEquals(String teachPlanId);
//查询当前章节是否包含子章节
List<Teachplan> findByParentidEquals(String teachPlanId);
//根据父节点Id删除子节点
long deleteByParentidEquals(String teachPlanId);

三.测试

选择对应的视频,然后删除子课程计划查看数据库teachplan与teachplan_media对应信息也完成删除,然后删除父课程计划查看对应信息已经删除。

最后删除成功之后请及时更新发布以获取最新的课程计划目录

本人技术有限写的不好的地方敬请原谅,如有什么问题或者更好的解决方案大家可以留言或者私信

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值