04课程发布模块之课程审核

news2024/11/15 17:47:02

课程审核

课程审核是为了防止课程信息出现违规情况,课程信息不完善对网站用户体验也不好,课程审核不仅起到监督作用,也是帮助教学机构规范使用平台的手段

教学机构提交课程审核后,平台运营人员登录运营平台进行课程审核,审核通过后课程方可发布

  • 程序自动审核: 主要审核课程内容的完整性
  • 人工审核: 审核课程预览界面的详情信息

在这里插入图片描述

在课程基本信息表course_base表设置课程审核状态audit_status字段和课程状态status字段

在这里插入图片描述

课程预发布表

课程提交审核后如果不允许再次修改课程是不合理的,因为教学机构提交审核后可以继续做下一个阶段的课程内容,比如添加课程计划,上传课程视频等

  • 如果运营人员审核的课程和教学机构编辑的课程是同一份数据,此时可能会出现教学机构把运营人员正在审核课程的信息修改的情况

在这里插入图片描述

设计course_publish_pre(课程预发布表): 课程审核人员从课程预发布表查询课程信息进行审核,审核通过后发布的课程信息也是从课程预发布表中获取的

  • 运营人员课程审核的同时教学机构可以对课程再次进行修改并且修改后的内容不会写入课程预发布表,但是教学机构如果想要发布修改后的课程信息此时还需要再次提交审核,等待审核通过后方可再次发布
  • 课程只要提交审核都要更新课程基本信息表的课程审核状态为已提交,这样对于已提交审核的课程必须等到本次审核完后才可以再次提交审核

在这里插入图片描述

当运营人员审核完提交的课程后,无论审核有没有通过都需要将审核结果写入课程审核记录表,并且对应的更新课程基本信息表中的审核状态字段的值(将所有状态都同步到课程基本信息表中,方便获取信息)

在这里插入图片描述

@Data
@TableName("course_publish_pre")
public class CoursePublishPre implements Serializable {

    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    private Long id;
    /**
     * 机构ID
     */
    private Long companyId;
    /**
     * 公司名称
     */
    private String companyName;
    /**
     * 课程名称
     */
    private String name;

    /**
     * 适用人群
     */
    private String users;
    /**
     * 标签
     */
    private String tags;
    /**
     * 创建人
     */
    private String username;
    /**
     * 大分类
     */
    private String mt;
    /**
     * 大分类名称
     */
    private String mtName;
    /**
     * 小分类
     */
    private String st;

    /**
     * 小分类名称
     */
    private String stName;
    /**
     * 课程等级
     */
    private String grade;
    /**
     * 教育模式
     */
    private String teachmode;
    /**
     * 课程图片
     */
    private String pic;
    /**
     * 课程介绍
     */
    private String description;
    /**
     * 课程营销信息,json格式
     */
    private String market;
    /**
     * 所有课程计划,json格式
     */
    private String teachplan;
    /**
     * 教师信息,json格式
     */
    private String teachers;
    /**
     * 提交时间
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createDate;
    /**
     * 审核时间
     */
    private LocalDateTime auditDate;
    /**
     * 状态
     */
    private String status;
    /**
     * 备注
     */
    private String remark;
    /**
     * 收费规则,对应数据字典--203
     */
    private String charge;
    /**
     * 现价
     */
    private Float price;
    /**
     * 原价
     */
    private Float originalPrice;
    /**
     * 课程有效期天数
     */
    private Integer validDays;
}

接口定义

content-api接口工程中的CoursePublishController接口中定义提交课程审核的接口,本机构只允许提交本机构的课程

@Slf4j
@RestController
public class CoursePublishController {
    @Autowired
    private CoursePublishService coursePublishService;

    @ResponseBody
    @PostMapping ("/courseaudit/commit/{courseId}")
    public void commitAudit(@PathVariable("courseId") Long courseId){
        Long companyId = 1232141425L;
        coursePublishService.commitAudit(companyId,courseId);
    }
}

业务类

教学机构一旦提交课程审核,后台就需要查询该课程对应的基本信息、营销、计划,师资等相关信息,如果符合约束条件将这些信息整合并写入课程预发布表

  • 提交约束: 已提交审核的课程不允许再次提交审核,没有上传图片不允许提交审核,没有添加课程计划不允许提交审核,本机构只允许提交本机构的课程
public interface CoursePublishService {
    /**
 	* @description 提交审核
 	* @param courseId  课程id
	*/
    public void commitAudit(Long companyId,Long courseId);
}
@Autowired
private CourseBaseMapper courseBaseMapper;

@Autowired
private CourseMarketMapper courseMarketMapper;

public class CoursePublishServiceImpl implements CoursePublishService {
    @Transactional// 事务控制
    @Override
    public void commitAudit(Long companyId, Long courseId) {
        // 查询待审核的课程基本信息
        CourseBase courseBase = courseBaseMapper.selectById(courseId);
        // 查询课程营销信息
        CourseMarket courseMarket = courseMarketMapper.selectById(courseId);
        // 查询课程基本信息、课程营销信息
        CourseBaseInfoDto courseBaseInfo = courseBaseInfoService.getCourseBaseInfo(courseId);
        // 查询课程计划
        List<TeachplanDto> teachplanTree = teachplanService.findTeachplanTree(courseId);

        // 已提交审核的课程不允许再次提交,其他情况都可以提交
        String auditStatus = courseBase.getAuditStatus();
        if("202003".equals(auditStatus)){
            XueChengPlusException.cast("当前为等待审核状态,审核完成可以再次提交");
        }
        // 本机构只允许提交本机构的课程
        if(!courseBase.getCompanyId().equals(companyId)){
            XueChengPlusException.cast("不允许提交其它机构的课程。");
        }
        // 没有上传图片的课程不允许提交审核
        if(StringUtils.isEmpty(courseBase.getPic())){
            XueChengPlusException.cast("提交失败,请上传课程图片");
        }
        // 没有添加课程计划,不允许提交审核
        if(teachplanTree == null || teachplanTree.size()<=0){
            XueChengPlusException.cast("提交失败,还没有添加课程计划");
        }

        // 封装课程预发布对象,添加课程预发布记录
        CoursePublishPre coursePublishPre = new CoursePublishPre();
        BeanUtils.copyProperties(courseBaseInfo,coursePublishPre);
        // 将查询的课程营销信息json数据放入课程预发布表
        coursePublishPre.setMarket(JSON.toJSONString(courseMarket));
        // 将查询的课程计划信息json数据放入课程预发布表
        coursePublishPre.setTeachplan(JSON.toJSONString(teachplanTree));
        // 设置教学机构id
        coursePublishPre.setCompanyId(companyId);
        // 设置提交时间
        coursePublishPre.setCreateDate(LocalDateTime.now());
        // 设置课程预发布的状态为已提交
        coursePublishPre.setStatus("202003");
        // 判断是否已经存在预发布记录,若存在则更新,即用户修改课程信息后再次提交课程审核的情况   
        CoursePublishPre coursePublishPreUpdate = coursePublishPreMapper.selectById(courseId);
        if(coursePublishPreUpdate == null){
            coursePublishPreMapper.insert(coursePublishPre);
        }else{
            coursePublishPreMapper.updateById(coursePublishPre);
        }
        // 添加完课程预发布记录后,需要更新课程基本信息表的审核状态为已提交,已提交的课程还可以再次提交审核
        courseBase.setAuditStatus("202003");
        courseBaseMapper.updateById(courseBase);
    }
}

接口测试

约束校验:找一门信息不全的课程,测试各各约束条件

正常提交:观察数据库中课程预发布表记录的内容是否完整

审核过后再次提交:观察数据库中课程预发布表记录的内容是否为最新修改数据

手动修改数据库中的课程预发布表课程基本信息表模拟运营人员对课程的审核结果,如审核通过的状态码为202004,同时将审核结果写入审核记录表

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

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

相关文章

SpringBoot ---HTML转PDF工具

之前项目用的WKHtmlToPdf&#xff0c;速度较慢&#xff0c;现在需要改成基于ITEXT java使用itext7实现html转pdf_java使用itext7实现html转pdf全代码完整示例 cainiaobulan-CSDN博客文章浏览阅读2.7k次。使用itext7html转pdf_java使用itext7实现html转pdf全代码完整示例 caini…

C++之继承详解

一.继承基础知识 继承定义&#xff1a; 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保 持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象 程序设…

电脑文件msvcp100.dll丢失原因,如何快速修复msvcp100.dll

电脑文件msvcp100.dll丢失原因&#xff0c;最近有朋友在问这个&#xff0c;显然会问这个的人&#xff0c;一般都是遇到了msvcp100.dll丢失的问题了&#xff0c;今天我们就来详细的给大家说说msvcp100.dll这个文件吧&#xff0c;我们只有了解了msvcp100.dll这个文件&#xff0c;…

C语言,自定义数据类型

引言&#xff1a; C语言当中除了&#xff0c;自己带的基本数据类型&#xff0c;还有一些自定义数据类型&#xff0c;用户自己可以控制数据类型大小&#xff0c;所包含的元素&#xff0c;使用起来更加方便&#xff0c;快捷。 一 数组arr&#xff1a; 对于数组而言&#xff0…

LeetCod459:重复的子字符串

题目描述 给定一个非空的字符串 s &#xff0c;检查是否可以通过由它的一个子串重复多次构成。 示例 1: 输入: s “abab” 输出: true 解释: 可由子串 “ab” 重复两次构成。 示例 2: 输入: s “aba” 输出: false 示例 3: 输入: s “abcabcabcabc” 输出: true 解释: 可…

Obsidian插件PicGo-图床创建使用[腾讯云保姆级教程]

一、下载PicGo并配置 1&#xff1a;安装插件 首先插件市场搜索picgo会出现Image auto upload&#xff0c;这个就是PicGo安装此插件并启用即可 2&#xff1a;安装PicGo软件 打开此链接&#xff1a;https://github.com/Molunerfinn/PicGo 自己选择一个方式下载&#xff0c;我…

unicloud 云函数 介绍及使用

普通云函数 callFunction方式云函数&#xff0c;也称之为普通云函数。 uni-app的前端代码&#xff0c;不再执行uni.request联网&#xff0c;而是通过uniCloud.callFunction调用云函数。 callFunction方式避免了服务器提供域名&#xff0c;不暴露固定ip&#xff0c;减少被攻击…

【JS】闭包的漏洞

下面这段代码可以实现&#xff1a;通过立即执行函数o返回对象中的get方法&#xff0c;通过参数key得到fn函数内部对象obj中的值。 var fn function () {var obj {a: 1,b: 2}return {get: function (key) {return obj[key]}} }() console.log(fn.get(b)); // 2这是一个典型的…

3个好用的WP免费主题

免费wordpress模板下载 高端大气上档次的免费wordpress主题&#xff0c;首页大图全屏显示经典风格的wordpress主题。 https://www.wpniu.com/themes/289.html 经典的红色免费wordpress主题 这是一款经典的免费wordpress主题&#xff0c;被广泛应用于多个行业的网站。 https…

智慧公厕的系统构成与功能解析

智慧公厕系统是通过传感器和云平台相结合的创新技术&#xff0c;旨在提供更好的公厕管理与服务。智慧公厕从系统的构成来看&#xff0c;主要分为感知层&#xff08;数据收集&#xff09;、传输层&#xff08;数据传输&#xff09;、平台层&#xff08;数据处理&#xff09;和应…

VUE+Vant实现H5组织架构选人选公司组件

提醒自己&#xff1a; 这是之前的逻辑&#xff0c;或许你重新写会有更好的方法&#xff0c;可以参考逻辑&#xff01;&#xff01;&#xff01; 功能介绍 1.有面包屑点击切换 2.有公司、部门、人员 3.单选、多选实现 4.编辑/回显 5.使用随意切换层级和跳转到指定层级回显等功…

CSAPP | Lab1-Data Lab 详细解析

You may assume that your machine:1. Uses 2s complement, 32-bit representations of integers.2. Performs right shifts arithmetically.3. Has unpredictable behavior when shifting if the shift amountis less than 0 or greater than 31.Part1&#xff1a;整数 1.Bit…

力扣爆刷第102天之hot100五连刷96-100

力扣爆刷第102天之hot100五连刷96-100 文章目录 力扣爆刷第102天之hot100五连刷96-100一、136. 只出现一次的数字二、169. 多数元素三、75. 颜色分类四、31. 下一个排列五、287. 寻找重复数 一、136. 只出现一次的数字 题目链接&#xff1a;https://leetcode.cn/problems/sing…

Java疫苗接种管理系统

本系统lw为2024-3-21本人原创&#xff0c;查chong13% 1.3W字&#xff0c;可以直接上交&#xff0c;这并不是乱七八糟的技术文档和项目文档。 4.2 功能结构设计 可视化的疫苗接种管理系统功能结构设计主要包括以下几个模块&#xff1a; 登录注册模块&#xff1a;这个模块负责…

算法体系-14 第十四 贪心算法(上)

一 、 递归套路解决判断完全二叉树 1.1 描述 1.2 分析 1.2 分析 第二种 第三种 第四种 1.3 代码 public static boolean isCBT2(Node head) {return process(head).isCBT;}public static class Info {public boolean isFull;public boolean isCBT;public int height;public…

hcia静态实验

题目&#xff1a; 要求&#xff1a; 1、R6为isp&#xff0c;接口ip均为公有地址&#xff0c;该设备只能配置ip地址&#xff0c;之后不能再对其进行任何其他配置 2、r1到r5为局域网&#xff0c;私有ip地址为192.168.1.0 24&#xff0c;合理分配 3、r1,r2,r4各有两个环回地址&am…

2024年全国职业院校技能大赛中职组大数据应用与服务赛项题库参考答案陆续更新中,敬请期待…

2024年全国职业院校技能大赛中职组大数据应用与服务赛项题库参考答案陆续更新中&#xff0c;敬请期待… 武汉唯众智创科技有限公司 2024 年 3 月 联系人&#xff1a;辜渝傧13037102709 题号&#xff1a;试题04 ZZ052-大数据应用与服务赛选赛题04 模块一&#xff1a;平台搭建…

JVM面试篇

面试篇就是复习前面学的 什么是JVM 1.定义&#xff1a;JVM指的是Java虚拟机&#xff0c;本质是一个运行在计算机上的程序 2.作用&#xff1a;为了支持Java中Write Once &#xff0c;Run Anywhere 编写一次 到处运行的跨平台特性 功能&#xff1a; 1.解释和运行 2.内存管理…

jconsole的使用

前提 已安装jdk 使用步骤 1、命令行输入jconsole

#Linux(第一个Hello World以及GCC基本用法)

&#xff08;一&#xff09;发行版&#xff1a;Ubuntu16.04.7 &#xff08;二&#xff09;记录&#xff1a; &#xff08;1&#xff09;gcc简介&#xff1a;GCC&#xff08;GNU Compiler Collection&#xff0c;GNU编译器套件&#xff09;是由GNU开发的编程语言编译器。GNU编译…