学成在线: 新增/修改课程计划

新增/修改课程计划(同接口)

界面原型

第一步: 在课程计划界面,点击添加章新增第一级课程计划,点击添加小节可以向某个第一级课程计划下添加小节

  • 新增章/节成功后会自动发起请求刷新课程计划列表并且把新增的课程计划信息添加到数据库当中,新增的课程计划自动排序到最后

第二步: 点击章/节的名称可以修改名称和选择是否免费

  • 点击修改章/节名称时文本框会自动聚焦,此时用户可以修改名称,失去焦点后会自动发起请求更新数据库中对应字段的信息

在这里插入图片描述

请求模型类

新增章/节课程计划

### 新增章,默认添加到所属课程的最后一个章节
POST {{content_host}}/content/teachplan
Content-Type: application/json
{
"courseId" : 74,
"parentid": 0,
"grade" : 1,# 章节等级,当grade为1时parentid为0
"pname" : "新章名称 [点击修改]"# 默认名称
}#### 新增节,默认添加到所属章节的最后一个小节
POST {{content_host}}/content/teachplan
Content-Type: application/json
{
"courseId" : 74,
"parentid": 247,
"grade" : 2,
"pname" : "新小节名称 [点击修改]"# 默认名称
}

修改课程计划的名称和收费规则

#### 修改节,设置是否免费
POST {{content_host}}/content/teachplan
Content-Type: application/json
{"id": 293,"pname": "3.1Nacos作配置中心","parentid": 292,"grade": 2,"mediaType": null,"startTime": null,"endTime": null,"description": null,"timelength": null,"orderby": 1,"courseId": 117,"coursePubId": null,"status": null,"isPreview": null,"createDate": null,"changeDate": null,"teachplanMedia": null,"teachPlanTreeNodes": null,"ctlEditTitle": true,"ctlBarShow": false
}

新增和修改的唯一区别就是请求参数是否有Id,可以通过同一个接口接收新增和修改两个业务的请求,这里可以直接使用PO类Teachplan作为请求参数的模型类

package com.xuecheng.content.model.po;
@Data
@TableName("teachplan")
public class Teachplan implements Serializable {private static final long serialVersionUID = 1L;@TableId(value = "id", type = IdType.AUTO)private Long id;/*** 课程计划名称*/private String pname;/*** 课程计划父级Id*/private Long parentid;/*** 层级,分为1、2、3级*/private Integer grade;/*** 课程类型:1视频、2文档*/private String mediaType;/*** 开始直播时间*/private LocalDateTime startTime;/*** 直播结束时间*/private LocalDateTime endTime;/*** 章节及课程时介绍*/private String description;/*** 时长,单位时:分:秒*/private String timelength;/*** 排序字段*/private Integer orderby;/*** 课程标识*/private Long courseId;/*** 课程发布标识*/private Long coursePubId;/*** 状态(1正常  0删除)*/private Integer status;/*** 是否支持试学或预览(试看)*/private String isPreview;/*** 创建时间*/@TableField(fill = FieldFill.INSERT)private LocalDateTime createDate;/*** 修改时间*/@TableField(fill = FieldFill.INSERT_UPDATE)private LocalDateTime changeDate;
}

业务开发

第一步: 定义新增/修改课程计划(章/节)的接口

@ApiOperation("课程计划创建或修改")
@PostMapping("/teachplan")
public void saveTeachplan(@RequestBody Teachplan teachplanDto) {teachplanService.saveTeachplan(teachplan);
}

第二步: 编写Servcie接口及其实现类

void saveTeachplan(Teachplan teachplan);
@Transactional// 设置多条DML语句,需要控制事务
@Override
public void saveTeachplan(Teachplan teachplan) {Long teachplanId = teachplan.getId();if (teachplanId == null) {// 课程计划id为null表示需要新增章/节,拷贝属性将请求参数中课程计划的信息封装到创建的Teachplan对象中Teachplan plan = new Teachplan();BeanUtils.copyProperties(teachplan, plan);// 设置创建时间和排序号plan.setCreateDate(LocalDateTime.now());// 设置新增章节的排序号.默认排在同等级的最后plan.setOrderby(getTeachplanCount(plan.getCourseId(), plan.getParentid()) + 1);// 如果新增失败会返回0,抛出异常int flag = teachplanMapper.insert(plan);if (flag <= 0) XueChengPlusException.cast("新增失败");} else {// 课程计划id不为null表示需要修改课程,拷贝属性将请求参数中的课程计划信息更新到查询的Teachplan对象中Teachplan plan = teachplanMapper.selectById(teachplanId);BeanUtils.copyProperties(teachplan, plan);// 设置更新时间plan.setChangeDate(LocalDateTime.now());// 如果修改失败会返回0,抛出异常int flag = teachplanMapper.updateById(plan);if (flag <= 0) XueChengPlusException.cast("修改失败");}
}

从当前课程关联的所有课程计划中获取与当前章/节同父同级别的课程计划数量

private int getTeachplanCount(Long courseId, Long parentId) {LambdaQueryWrapper<Teachplan> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(Teachplan::getCourseId, courseId);queryWrapper.eq(Teachplan::getParentid, parentId);return teachplanMapper.selectCount(queryWrapper);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/665190.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS 8 下载

https://mirrors.bfsu.edu.cn/centos/8-stream/isos/x86_64/ 下载地址&#xff1a; https://mirrors.bfsu.edu.cn/centos/8-stream/isos/x86_64/CentOS-Stream-8-x86_64-latest-dvd1.iso

喜报|博睿数据算力调度可观测平台荣获信通院“算力服务领航者计划”优秀案例

近日&#xff0c;中国通信标准化协会云计算标准和开源推进委员会2023年度工作总结会暨算力服务工作组成果发布会在京举行。会上&#xff0c;“2023年算力服务领航者计划优秀案例名单”正式公布&#xff0c;博睿数据的核心产品算力调度可观测平台 Bonree ONE成功入选&#xff0c…

数据结构----队列(Queue)的概念、队列的使用、模拟实现队列、循环队列、模拟实现循环队列、双端队列、模拟实现双端队列

文章目录 1 概念2 队列的使用3 队列模拟实现4 循环队列4.1 循环队列 概念4.1 循环队列模拟实现 5. 双端队列 (Deque)6 用队列实现栈7 用栈实现队列 1 概念 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有…

LeetCode:283. 移动零

283. 移动零 1&#xff09;题目2&#xff09;代码方法一&#xff1a;两层for循环方法二&#xff1a;使用双指针 3&#xff09;结果方法一结果方法二结果 1&#xff09;题目 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的…

QT研究笔记(一)windows 开发环境安装部署

一、Qt 是什么&#xff1f; Qt 是一个跨平台的应用程序开发框架&#xff0c;最初由挪威的 Trolltech 公司开发&#xff0c;并于2008年被诺基亚收购。后来&#xff0c;Qt 框架由 Digia 公司接手&#xff0c;并在2012年成立了 The Qt Company。Qt 提供了一套丰富的工具和类库&am…

如何学习亚马逊、速卖通和阿里国际站等平台的测评自养号技术?

由于近年来各大平台纷纷开展开店政策&#xff0c;并得到国家对跨境电商的大力支持&#xff0c;吸引了众多中国卖家加入其中&#xff0c;每年呈逐渐增长的趋势。然而&#xff0c;与国内的淘宝、京东等平台不同&#xff0c;亚马逊并没有实时通讯工具和客服&#xff0c;卖家在购买…

OceanBase 4.2.2 GA 发布,全新特性快速预览!

在 2023 年度发布会上&#xff0c;OceanBase 沿着“一体化”产品战略思路&#xff0c;发布了一体化数据库的首个长期支持版本 4.2.1 LTS。作为 4.0 系列的首个 LTS 版本&#xff0c;该版本的定位是支撑客户关键业务稳定长久运行&#xff0c;我们非常认真的打磨了这个版本&#…

代码随想录算法训练营Day46|139.单词拆分、多重背包理论基础、背包问题总结

目录 139.单词拆分 方法一&#xff1a;回溯法 算法实现 方法二&#xff1a;背包问题 算法实现 多重背包理论基础 思路 算法实现 背包问题总结 前言 背包递推公式 遍历顺序 0-1背包 完全背包 139.单词拆分 题目链接 文章链接 方法一&#xff1a;回溯法 在回溯专题…

XXE基础知识整理(附加xml基础整理)

全称&#xff1a;XML External Entity 外部实体注入攻击 原理 利用xml进行读取数据时过滤不严导致嵌入了恶意的xml代码&#xff1b;和xss原理雷同 危害 外界攻击者可读取商户服务器上的任意文件&#xff1b; 执行系统命令&#xff1b; 探测内网端口&#xff1b; 攻击内网网站…

【八大排序】冒泡排序 | 快速排序 + 图文详解!!

&#x1f4f7; 江池俊&#xff1a; 个人主页 &#x1f525;个人专栏&#xff1a; ✅数据结构冒险记 ✅C语言进阶之路 &#x1f305; 有航道的人&#xff0c;再渺小也不会迷途。 文章目录 交换排序一、冒泡排序1.1 算法步骤 动图演示1.2 冒泡排序的效率分析1.3 代码实现1.4 …

JavaScript阻止浏览器默认行为

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 浏览器对一些事件具有默认行为,例如点击链接时跳转页面,提交表单时发…

哈希表——C++

目录 一、首先使用拉链法&#xff1a; 二、开放寻址法 三、字符串哈希 1.具体如何使用进制的方式来存储字符前缀的可以看这个y总的这个图 2.接下来说一说算某个中间的区间的字符串哈希值 哈希表是一种数组之间互相映射的数据结构&#xff0c;比如举个简单的例子一个十个的数…

ArrayList常见问题

ArrayList 1、ArrayList底层的实现原理是什么 2、ArrayList list new ArrayList(10)中的list扩容几次 3、如何实现数组和list之间的转换 4、ArrayList和LinkedList的区别是什么

办公软件巨头CCED、WPS面临新考验,新款办公软件异军突起

办公软件巨头CCED、WPS的成长经历 众所周知&#xff0c;CCED和WPS在中国办公软件领域树立了两大知名品牌的地位。然而&#xff0c;它们的成功并非一朝一夕的成就&#xff0c;而是历经了长时间的发展与积淀。 在上世纪80年代末至90年代初&#xff0c;CCED作为中国大陆早期的一款…

java大学生科研创新项目在线管理系统 springboot+vue

预期成果&#xff1a; &#xff08;1&#xff09;实现一个完整的大学生科创项目在线管理系统的设计与实现&#xff0c;可以运行演示。 &#xff08;2&#xff09;预计本系统的页面完整&#xff0c;页面所有文字和图片无漏字、错字、重叠不显示的现象&#xff0c;页面所有链接和…

Unity Meta Quest MR 开发(三):Scene API 配置+实现虚拟与现实之间的碰撞

文章目录 &#x1f4d5;教程说明&#x1f4d5; Scene 配置⭐开启场景理解功能和应用访问空间数据的权限⭐OVRSceneManager⭐制作 Plane Prefab 和 Volume Prefab⭐运行场景⭐添加透视材质 &#x1f4d5;虚拟与现实物体的碰撞&#xff08;弹球 Demo&#xff09;&#x1f4d5;Mes…

web前端--------渐变和过渡

线性渐变&#xff0c;是指颜色沿一条直线进行渐变&#xff0c;例如从上到下、从左到右。 当然&#xff0c;CSS中也支持使用角度来设置渐变的方向&#xff0c;角度单位为deg。 0deg&#xff0c;为12点钟方向&#xff0c;表示从下到上渐变。 90deg&#xff0c;为3点钟方向&…

Android13源码下载及全编译流程

目录 一、源码下载 1.1、配置要求 1.1.1、硬件配置要求 1.1.2、软件要求 1.2、下载环境搭建 1.2.1、依赖安装 1.2.2、工具安装 1.2.3、git配置 1.2.4、repo配置 1.3、源码下载 1.3.1、明确下载版本 1.3.2、替换为清华源 1.3.3、初始化仓库并指定分支 1.3.4、同步全部源码 二、…

【24美赛思路已出】2024年美赛A~F题解题思路已出 | 无偿自提

A题&#xff1a;资源可用性和性别比例 问题一&#xff1a; 涉及当灯鱼种群的性别比例发生变化时&#xff0c;对更大的生态系统产生的影响。为了分析这个问题&#xff0c;可以采用以下的数学建模思路&#xff1a;建立灯鱼种群模型&#xff1a; 首先&#xff0c;建立一个灯鱼种群…

20240203在WIN10下安装Miniconda

20240203在WIN10下安装Miniconda 2024/2/3 21:06 缘起&#xff1a;最近学习stable-diffusion-webui.git&#xff0c;在Ubuntu20.04.6下配置SD成功。 不搞精简版本&#xff1a;Miniconda了。直接上Anacoda&#xff01; https://www.toutiao.com/article/7222852915286016544/ 从…