当前位置: 首页 > news >正文

高效选课系统:一键管理你的课程表

选课流程

image-20250516172902613

数据模型

image-20250516174503865

我的课程表Controller

@Api(value = "我的课程表接口", tags = "我的课程表接口")
@Slf4j
@RestController
public class MyCourseTablesController {@Autowiredprivate MyCourseTablesService myCourseTablesService;@ApiOperation("添加选课")@PostMapping("/choosecourse/{courseId}")public XcChooseCourseDto addChooseCourse(@PathVariable("courseId") Long courseId) {// 当前登录的用户SecurityUtil.XcUser user = SecurityUtil.getUser();if (user == null) {XueChengPlusException.cast("请登录后继续选课");}// 用户idString userId = user.getId();// 添加选课XcChooseCourseDto xcChooseCourseDto = myCourseTablesService.addChooseCourse(userId, courseId);return xcChooseCourseDto;}@ApiOperation("查询学习资格")@PostMapping("/choosecourse/learnstatus/{courseId}")public XcCourseTablesDto getLearnstatus(@PathVariable("courseId") Long courseId) {log.debug("查询学习资格,参数courseId:{}", courseId);//登录用户SecurityUtil.XcUser user = SecurityUtil.getUser();if (user == null) {XueChengPlusException.cast("请登录后继续选课");}String userId = user.getId();return myCourseTablesService.getLearningStatus(userId, courseId);}@ApiOperation("我的课程表")@GetMapping("/mycoursetable")public PageResult<XcCourseTables> mycoursetable(MyCourseTableParams params) {//登录用户SecurityUtil.XcUser user = SecurityUtil.getUser();if (user == null) {XueChengPlusException.cast("请登录后继续选课");}String userId = user.getId();//设置当前的登录用户params.setUserId(userId);return myCourseTablesService.mycoursetabls(params);}}

我的课程表服务

添加选课记录

/*** 添加选课记录** @param userId   学生ID* @param courseId 课程ID* @return 返回选课记录Dto对象* @throws XueChengPlusException 当课程不存在时抛出异常*/
@Override
public XcChooseCourseDto addChooseCourse(String userId, Long courseId) {// 选课调用内容管理查询课程的收费规则CoursePublish coursepublish = contentServiceClient.getCoursepublish(courseId);if (coursepublish == null) {XueChengPlusException.cast("课程不存在");}// 收费规则String charge = coursepublish.getCharge();// 选课记录XcChooseCourse xcChooseCourse = null;if ("201000".equals(charge)) {// 免费课程,向选课记录表、我的课程表写数据xcChooseCourse = addFreeCourse(userId, coursepublish);// 向我的课程表写数据XcCourseTables xcCourseTables = addCourseTables(xcChooseCourse);} else {// 如果收费课程,向选课记录表写数据xcChooseCourse = addChargeCourse(userId, coursepublish);}// 判断学生的学习资格XcCourseTablesDto xcCourseTablesDto = getLearningStatus(userId, courseId);// 构造返回值XcChooseCourseDto xcChooseCourseDto = new XcChooseCourseDto();BeanUtils.copyProperties(xcChooseCourse, xcChooseCourseDto);// 设置学习资格状态xcChooseCourseDto.setLearnStatus(xcCourseTablesDto.getLearnStatus());return xcChooseCourseDto;
}

添加免费课程,免费课程加入选课记录表、我的课程表

public XcChooseCourse addFreeCourse(String userId, CoursePublish coursepublish) {Long courseId = coursepublish.getId();// 判断,如果存在免费的选课记录且选课状态为成功,直接返回// 创建LambdaQueryWrapper查询对象LambdaQueryWrapper<XcChooseCourse> queryWrapper = new LambdaQueryWrapper<XcChooseCourse>()// 查询用户ID为userId的记录.eq(XcChooseCourse::getUserId, userId)// 查询课程ID为courseId的记录.eq(XcChooseCourse::getCourseId, courseId)// 查询订单类型为免费课程的记录.eq(XcChooseCourse::getOrderType, "700001") // 免费课程// 查询选课状态为成功的记录.eq(XcChooseCourse::getStatus, "701001"); // 选课成功// 执行查询,获取查询结果List<XcChooseCourse> xcChooseCourses = chooseCourseMapper.selectList(queryWrapper);// 如果查询结果不为空且存在选课记录,则直接返回第一条选课记录if (xcChooseCourses != null && !xcChooseCourses.isEmpty()) {return xcChooseCourses.get(0);}// 向选课记录表写数据// 创建XcChooseCourse对象XcChooseCourse xcChooseCourse = new XcChooseCourse();// 设置课程IDxcChooseCourse.setCourseId(courseId);// 设置用户IDxcChooseCourse.setUserId(userId);// 设置课程名称xcChooseCourse.setCourseName(coursepublish.getName());// 设置公司IDxcChooseCourse.setCompanyId(coursepublish.getCompanyId());// 设置订单类型为免费课程xcChooseCourse.setOrderType("700001");// 设置创建时间为当前时间xcChooseCourse.setCreateDate(LocalDateTime.now());// 设置有效天数为365天xcChooseCourse.setValidDays(365);// 设置课程价格为coursepublish的价格xcChooseCourse.setCoursePrice(coursepublish.getPrice());// 设置选课状态为成功xcChooseCourse.setStatus("701001");// 设置有效期开始时间为当前时间xcChooseCourse.setValidtimeStart(LocalDateTime.now());// 设置有效期结束时间为当前时间加365天xcChooseCourse.setValidtimeEnd(LocalDateTime.now().plusDays(365));// 执行插入操作,返回插入结果int insert = chooseCourseMapper.insert(xcChooseCourse);// 如果插入失败,则抛出异常if (insert <= 0) {XueChengPlusException.cast("添加选课记录失败");}// 返回插入成功的选课记录return xcChooseCourse;}

添加收费课程

public XcChooseCourse addChargeCourse(String userId, CoursePublish coursepublish) {Long courseId = coursepublish.getId();// 判断,如果存在收费的选课记录且选课状态为待支付,直接返回// 创建LambdaQueryWrapper查询对象LambdaQueryWrapper<XcChooseCourse> queryWrapper = new LambdaQueryWrapper<XcChooseCourse>()// 查询用户ID为userId的记录.eq(XcChooseCourse::getUserId, userId)// 查询课程ID为courseId的记录.eq(XcChooseCourse::getCourseId, courseId)// 查询订单类型为免费课程的记录.eq(XcChooseCourse::getOrderType, "700002") // 收费课程// 查询选课状态为成功的记录.eq(XcChooseCourse::getStatus, "701002"); // 待支付// 执行查询,获取查询结果List<XcChooseCourse> xcChooseCourses = chooseCourseMapper.selectList(queryWrapper);// 如果查询结果不为空且存在选课记录,则直接返回第一条选课记录if (xcChooseCourses != null && !xcChooseCourses.isEmpty()) {return xcChooseCourses.get(0);}// 向选课记录表写数据// 创建XcChooseCourse对象XcChooseCourse xcChooseCourse = new XcChooseCourse();// 设置课程IDxcChooseCourse.setCourseId(courseId);// 设置用户IDxcChooseCourse.setUserId(userId);// 设置课程名称xcChooseCourse.setCourseName(coursepublish.getName());// 设置公司IDxcChooseCourse.setCompanyId(coursepublish.getCompanyId());// 设置订单类型为免费课程xcChooseCourse.setOrderType("700002"); // 收费课程// 设置创建时间为当前时间xcChooseCourse.setCreateDate(LocalDateTime.now());// 设置有效天数为365天xcChooseCourse.setValidDays(365);// 设置课程价格为coursepublish的价格xcChooseCourse.setCoursePrice(coursepublish.getPrice());// 设置选课状态为成功xcChooseCourse.setStatus("701002"); // 待支付// 设置有效期开始时间为当前时间xcChooseCourse.setValidtimeStart(LocalDateTime.now()); // 有效期开始时间// 设置有效期结束时间为当前时间加365天xcChooseCourse.setValidtimeEnd(LocalDateTime.now().plusDays(365)); // 有效期结束时间// 执行插入操作,返回插入结果int insert = chooseCourseMapper.insert(xcChooseCourse);// 如果插入失败,则抛出异常if (insert <= 0) {XueChengPlusException.cast("添加选课记录失败");}// 返回插入成功的选课记录return xcChooseCourse;
}

根据课程和用户查询我的课程表中某一门课程

/*** @param userId* @param courseId* @return com.xuecheng.learning.model.po.XcCourseTables* @description 根据课程和用户查询我的课程表中某一门课程* @author Mr.M* @date 2022/10/2 17:07*/
public XcCourseTables getXcCourseTables(String userId, Long courseId) {XcCourseTables xcCourseTables = courseTablesMapper.selectOne(new LambdaQueryWrapper<XcCourseTables>().eq(XcCourseTables::getUserId, userId).eq(XcCourseTables::getCourseId, courseId));return xcCourseTables;}

添加到我的课程表

public XcCourseTables addCourseTables(XcChooseCourse xcChooseCourse) {// 选课成功了才可以向我的课程表添加数据String status = xcChooseCourse.getStatus();if (!"701001".equals(status)) {XueChengPlusException.cast("选课未成功,无法添加到我的课程表");}// 查一下我的课程表有没有记录XcCourseTables xcCourseTables = getXcCourseTables(xcChooseCourse.getUserId(), xcChooseCourse.getCourseId());if (xcCourseTables != null) {return xcCourseTables;}xcCourseTables = new XcCourseTables();BeanUtils.copyProperties(xcChooseCourse, xcCourseTables);xcCourseTables.setChooseCourseId(xcChooseCourse.getId());xcCourseTables.setCourseType(xcChooseCourse.getOrderType()); // 选课类型xcCourseTables.setUpdateDate(LocalDateTime.now());int insert = courseTablesMapper.insert(xcCourseTables);if (insert <= 0) {XueChengPlusException.cast("添加到我的课程表失败");}return xcCourseTables;
}

获取用户的学习状态

/*** 获取用户的学习状态** @param userId 用户ID* @param courseId 课程ID* @return XcCourseTablesDto对象,包含用户的学习状态*/
@Override
public XcCourseTablesDto getLearningStatus(String userId, Long courseId) {XcCourseTablesDto xcCourseTablesDto = new XcCourseTablesDto();// 查询我的课程表,如果查询不到说明没有选课XcCourseTables xcCourseTables = getXcCourseTables(userId, courseId);if (xcCourseTables == null) {// 如果没有选课记录,返回学习资格为空// "code":"702002","desc":"没有选课或选课后没有支付"xcCourseTablesDto.setLearnStatus("702002");return xcCourseTablesDto;}// 如果查到了,判断是否过期,如果过期不能继续学习,没有过期可以继续学习boolean before = xcCourseTables.getValidtimeEnd().isBefore(LocalDateTime.now());BeanUtils.copyProperties(xcCourseTables, xcCourseTablesDto);if (before) {// "code":"702003","desc":"己过期周要中请续期或重新支付"xcCourseTablesDto.setLearnStatus("702003");} else {//"code":"702001","desc":"正常学习”xcCourseTablesDto.setLearnStatus("702001");}return xcCourseTablesDto;
}

我的课程表

/*** 我的课程表* @param params 查询条件* @return*/
@Override
public PageResult<XcCourseTables> mycoursestabls(MyCourseTableParams params) {// 用户idString userId = params.getUserId();// 当前页码int pageNo = params.getPage();// 每页记录数int size = params.getSize();// 分页Page<XcCourseTables> courseTablesPage = new Page<>(pageNo, size);// 查询条件LambdaQueryWrapper<XcCourseTables> lambdaQueryWrapper = new LambdaQueryWrapper<XcCourseTables>().eq(XcCourseTables::getUserId, userId);// 查询数据Page<XcCourseTables> result = courseTablesMapper.selectPage(courseTablesPage, lambdaQueryWrapper);List<XcCourseTables> records = result.getRecords();// 总记录数long total = result.getTotal();return new PageResult<>(records, total, pageNo, size);
}

相关文章:

  • 全局对比度调整
  • 开疆智能Profinet转ModbusTCP网关连接BORUNTE伯朗特系统配置案例
  • 目标检测DN-DETR(2022)详细解读
  • 湖北理元理律师事务所:科学债务规划如何平衡还款与生活
  • 健康养生指南:科学生活,活力常驻
  • 【生活tips】保存系统随机的壁纸
  • 使用亮数据代理IP+Python爬虫批量爬取招聘信息训练面试类AI智能体(附完整源码)
  • 鸿蒙应用开发:应用运行到设备报错,可能是版本问题,可通过hdc查询设备API版本
  • 101个α因子#6
  • 从零开始:Python语言基础之变量
  • Facebook隐私保护的成与败:一场对用户信任的考验
  • CentOS系统上挂载磁盘
  • Java 08集合
  • CSS 样式表的四种应用方式详解以及css注释的应用
  • 【开源】一个基于 Vue3 和 Electron 开发的第三方网易云音乐客户端,具有与官方客户端相似的界面布局
  • Spring Boot 多参数统一加解密方案详解:从原理到实战
  • HTB AD域渗透Skills Assessment Part I复现
  • Linux | 开机自启动设置多场景实现
  • 深入解析 OpenManus:开源 AI 智能体框架的技术原理与实践
  • 智能事件分析边缘服务器:交通管理与安全监测的利器
  • 北斗专访|星纪魅族郭鹏:AR眼镜正迈入行业发展“破局之年”
  • 墨西哥城市长私人秘书及顾问遇袭身亡
  • 华住集团:第一季度盈利8.94亿元,同比增长超三成
  • 中疾控:适龄儿童要及时、全程接种百白破疫苗
  • 自然资源部:适应存量时代城市更新发展,严控增量盘活存量
  • 专访《风雪夜归人》导演闫锐:在舞台上表现什么是真正的活着