课程审核
课程审核是为了防止课程信息出现违规情况,课程信息不完善对网站用户体验也不好,课程审核不仅起到监督作用,也是帮助教学机构规范使用平台的手段
教学机构提交课程审核后,平台运营人员登录运营平台进行课程审核,审核通过后课程方可发布
- 程序自动审核: 主要审核课程内容的完整性
- 人工审核: 审核课程预览界面的详情信息
在课程基本信息表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,同时将审核结果写入审核记录表