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

选课流程

数据模型

我的课程表Controller

java 复制代码
@Api(value = "我的课程表接口", tags = "我的课程表接口")
@Slf4j
@RestController
public class MyCourseTablesController {

    @Autowired
    private MyCourseTablesService myCourseTablesService;


    @ApiOperation("添加选课")
    @PostMapping("/choosecourse/{courseId}")
    public XcChooseCourseDto addChooseCourse(@PathVariable("courseId") Long courseId) {
        // 当前登录的用户
        SecurityUtil.XcUser user = SecurityUtil.getUser();
        if (user == null) {
            XueChengPlusException.cast("请登录后继续选课");
        }
        // 用户id
        String 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);
    }


}

我的课程表服务

添加选课记录

java 复制代码
/**
 * 添加选课记录
 *
 * @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;
}

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

java 复制代码
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();
        // 设置课程ID
        xcChooseCourse.setCourseId(courseId);
        // 设置用户ID
        xcChooseCourse.setUserId(userId);
        // 设置课程名称
        xcChooseCourse.setCourseName(coursepublish.getName());
        // 设置公司ID
        xcChooseCourse.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;
    }

添加收费课程

java 复制代码
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();
    // 设置课程ID
    xcChooseCourse.setCourseId(courseId);
    // 设置用户ID
    xcChooseCourse.setUserId(userId);
    // 设置课程名称
    xcChooseCourse.setCourseName(coursepublish.getName());
    // 设置公司ID
    xcChooseCourse.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;
}

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

java 复制代码
/**
 * @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;

}

添加到我的课程表

java 复制代码
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;
}

获取用户的学习状态

java 复制代码
/**
 * 获取用户的学习状态
 *
 * @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;
}

我的课程表

java 复制代码
/**
 * 我的课程表
 * @param params 查询条件
 * @return
 */
@Override
public PageResult<XcCourseTables> mycoursestabls(MyCourseTableParams params) {
    // 用户id
    String 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);
}
相关推荐
今天背单词了吗98014 分钟前
算法学习笔记:8.Bellman-Ford 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题
java·开发语言·后端·算法·最短路径问题
天天摸鱼的java工程师17 分钟前
使用 Spring Boot 整合高德地图实现路线规划功能
java·后端
东阳马生架构32 分钟前
订单初版—2.生单链路中的技术问题说明文档
java
咖啡啡不加糖1 小时前
暴力破解漏洞与命令执行漏洞
java·后端·web安全
风象南1 小时前
SpringBoot敏感配置项加密与解密实战
java·spring boot·后端
DKPT1 小时前
Java享元模式实现方式与应用场景分析
java·笔记·学习·设计模式·享元模式
Percep_gan1 小时前
idea的使用小技巧,个人向
java·ide·intellij-idea
缘来是庄1 小时前
设计模式之迭代器模式
java·设计模式·迭代器模式
Liudef061 小时前
基于HTML与Java的简易在线会议系统实现
java·前端·html
JosieBook1 小时前
【Java编程动手学】Java常用工具类
java·python·mysql