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

news2024/11/14 22:08:32

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

界面原型

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

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

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

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

在这里插入图片描述

请求模型类

新增章/节课程计划

### 新增章,默认添加到所属课程的最后一个章节
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.coloradmin.cn/o/1430185.html

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

相关文章

2024年第三届能源与环境工程国际会议(CFEEE 2024) | Ei&Scopus双检索

会议简介 Brief Introduction 2024年第三届能源与环境工程国际会议(CFEEE 2024) 会议时间&#xff1a;2024年12月12日-14日 召开地点&#xff1a;澳大利亚凯恩斯 大会官网&#xff1a;CFEEE 2024-2024 International Conference on Frontiers of Energy and Environment Engine…

【python】python爱心代码

一、实现效果&#xff1a; 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 二、准备工作 &#xff08;1)、导入必要的模块&#xff1a; 代码首先导入了需要使用的模块&#xff1a;requests、lxml和csv。 import requests from lxml import etree import csv 如果出现…

不同状态角 θz 下的 K2eff 和 Kav 计算结果

不同状态角 θ z 下的 K 2 eff 和 K av 计算结果 clear clc close all syms theta for theta_z[pi/5,pi/3,pi/2,2*pi/3,4*pi/5,pi] % theta_zdtheta_z*180/pi theta_1-theta_z/2; theta_2theta_z/2; fthetacos(theta); ftheta2cos(theta)^2; Keff2int(ftheta2,theta_1,…

png,jpg,bmp等格式图像转.npy文件(附代码)

目录 一、npy文件二、代码三、转后效果 一、npy文件 .npy 文件是 NumPy 库用于存储数组的二进制文件格式。这种文件可以存储一个或多个 NumPy 数组对象。.npy 文件在保存和加载 NumPy 数组时非常有用&#xff0c;因为它们可以用于在磁盘上高效地存储数据&#xff0c;并且在加载…

MySQL 安装配置 windows

一、下载 去官网MySQL :: MySQL Downloads 下载社区版 然后根据自己的系统选择 直接下载。 二、安装 点击安装程序 这边看样子缺少东西。 去这边下载 Latest supported Visual C Redistributable downloads | Microsoft Learn 然后再一次安装mysql 三、配置 安装完成后&a…

PPT母版页码设置

PPT母版页码设置 一、需求介绍二、达到效果三、具体操作1. 插入页码2. 设置起始页码为03. 进入母版编辑页面4. 内容格式调整5. 删去最后一个板式的三个模块信息6. 尾页处理7. 最终效果 一、需求介绍 PPT的母版可以设定PPT的基调&#xff0c;且在非母版页面不会误改PPT中的固定…

参考数据集INRIA Holidays dataset

Download datasets 很贴心,MATLAB访问代码: % This function reads a siftgeo binary file % % Usage: [v, meta] = siftgeo_read (filename, maxdes) % filename the input filename % maxdes maximum number of descriptors to be loaded % (default=unlimit…

力扣刷题之旅:启程篇(二)

力扣&#xff08;LeetCode&#xff09;是一个在线编程平台&#xff0c;主要用于帮助程序员提升算法和数据结构方面的能力。以下是一些力扣上的入门题目&#xff0c;以及它们的解题代码。 --点击进入刷题地址 1.最后得到的余数 题目描述&#xff1a; 给定两个非空字符串 nu…

2024/2/3

一&#xff0e;选择题 1、适宜采用inline定义函数情况是&#xff08;C&#xff09; A. 函数体含有循环语句 B. 函数体含有递归语句‘、考科一 ’ C. 函数代码少、频繁调用 D. 函数代码多、不常调用 2、假定一个函数为A(int i4, int j0) {;}, 则执行“A (1);”语句后&#xff0c…

C++之std::tuple(一) : 使用

相关系列文章 C之std::tuple(一) : 使用 C三剑客之std::variant(一) : 使用 C三剑客之std::variant(二)&#xff1a;深入剖析 目录 1.简介 2.创建元组 2.1.直接初始化方式 2.2.使用花括号初始化列表方式&#xff08;C11及以上版本&#xff09; 2.3.make_tuple方式 2.4.使…

03.PostgreSQL排序和分页

当我们使用SELECT语句查询表中数据的时候,PostgreSQL不确保按照一定的顺序返回结果。如果想要将查询的结果按照某些规则排序显示,需要使用ORDER BY子句。 1. 排序规则 使用ORDER BY 子句排序 ASC: 升序 DESC:降序 ORDER BY 子句在SELECT语句的结尾 1.1 单列排序 是指按…

手机gif动图怎么操作?这个方法分分钟解决

手机上怎么制作gif动画&#xff1f;Gif动图是当下非常流行的一种表达方式&#xff0c;通过简单的画面循环就能够传达您的想法。但是&#xff0c;想要在手机上制作gif动画的时候应该怎么办呢&#xff1f;通过会用GIF动图在线编辑&#xff08;https://www.gif.cn/&#xff09;工具…

AutoCAD .NET 层次结构介绍

AutoCAD .NET API 提供了一种面向对象的编程接口&#xff0c;通过它可以与AutoCAD进行深度集成和自定义功能开发。以下是基于.NET框架下AutoCAD对象层次结构的基本介绍&#xff1a; Autodesk.AutoCAD.ApplicationServices 命名空间 根对象&#xff0c;代表运行中的AutoCAD应用程…

牛客寒假训练营H题

思路&#xff1a;找出所有m的子集&#xff0c;加到价值中&#xff0c;找出最大价值即可。 代码&#xff1a; void solve(){int n, m;cin >> n >> m;vector<pii>a(n 1);for(int i 1;i < n;i )cin >> a[i].first >> a[i].second;int ans 0…

Servlet(未完结~)

文章目录 前言1 Servlet简介2 Servlet初识2.1 Servlet开发流程2.2 配置欢迎页 3 Servlet案例开发!3.1 开发登录页3.2 开发后台Servlet3.3 配置Servlet 4 HttpServletRequest4.1 回顾http请求4.2 自定义servlet流程图4.3 HttpServletRequest4.4获取请求行信息4.5获取请求头信息4…

Oracle12c R2 ORA-12805 BUG导致生成巨大TRC文件问题处理

1、基础环境 操作系统&#xff1a;unix&solaris 11.3 数据库版本&#xff1a;oracle 12.2 CDB&PDB 数据库补丁信息 oracleQSSJJZDB2:~$ opatch lspatches 23333567; 27959048; 26187578;OCW Interim patch for 26187578 27674384;Database Apr 2018 Release Update :…

HarmonyOS--Stage模型

构建第一个ArkTS应用(Stage模型)-快速入门-入门 | 华为开发者联盟 (huawei.com) 鸿蒙开发两种模型 FA模型:早期使用,现在不主推。Stage模型:推荐HarmonyOS4和HarmonyOS NEXT版本开发从源码到编译到运行 @entry就是一个Ability类的一个模块。 编译期 源码中的所有Ability模…

常见API

文章目录 Math类1.1 概述1.2 常见方法 System类2.1 概述2.2 常见方法 Runtime3.1 概述3.2 常见方法 Object类4.1 概述4.2 常见方法 Objects类5.1 概述5.2 常见方法 BigInteger类6.1 引入6.2 概述6.3 常见方法6.4 底层存储方式&#xff1a; 7 BigDecimal类7.1 引入7.2 概述7.3 常…

《数据安全法》解读篇

《中华人民共和国数据安全法》 颁布时间&#xff1a;2021年6月10日实施时间&#xff1a;2021年9月1日《中华人民共和国数据安全法》整体架构图 数据安全的定义&#xff1a;是指通过采取必要措施&#xff0c;确保数据处于有效保护和合法利用的状态&#xff0c;以及具备保障持续…

STM32--USART串口(2)串口外设

一、USART简介 可配置数据位&#xff1a;不需要校验就是8位&#xff0c;需要校验就选9位&#xff1b; 停止位&#xff1a;决定了帧的间隔; STM32F103C8T6USART&#xff1a;USART1挂载在APB2总线上&#xff0c;USART2和USART3挂载在APB1总线上&#xff1b; 二、USART框图 TXE…