Forráskód Böngészése

feat:课程相关接口提交

caoliqin 2 hónapja
szülő
commit
9910dad3b0

+ 23 - 3
fs-company-app/src/main/java/com/fs/app/controller/FsUserCourseVideoController.java

@@ -1,10 +1,12 @@
 package com.fs.app.controller;
 
-import com.fs.app.annotation.Login;
-import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.ResponseResult;
+import com.fs.course.param.newfs.FsUserCourseListParam;
 import com.fs.course.param.newfs.UserCourseVideoPageParam;
+import com.fs.course.service.IFsUserCourseService;
 import com.fs.course.service.IFsUserCourseVideoService;
+import com.fs.course.vo.FsUserCourseListPVO;
+import com.fs.course.vo.newfs.FsUserCourseVideoDetailsVO;
 import com.fs.course.vo.newfs.FsUserCourseVideoPageListVO;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
@@ -21,11 +23,14 @@ import java.util.List;
 @RestController
 @RequestMapping("/app/fs/course")
 @Slf4j
-public class FsUserCourseVideoController extends BaseController {
+public class FsUserCourseVideoController extends AppBaseController {
 
     @Autowired
     private IFsUserCourseVideoService fsUserCourseVideoService;
 
+    @Autowired
+    private IFsUserCourseService  fsUserCourseService;
+
     @GetMapping("/pageList")
     @ApiOperation("课程分页列表")
     public ResponseResult<PageInfo<FsUserCourseVideoPageListVO>> list(UserCourseVideoPageParam param) {
@@ -35,4 +40,19 @@ public class FsUserCourseVideoController extends BaseController {
         return ResponseResult.ok(pageInfo);
     }
 
+    @ApiOperation("课程视频详情")
+    @GetMapping(value = "/videoDetails")
+    public ResponseResult<FsUserCourseVideoDetailsVO> getVideoDetails(Long videoId) {
+        return fsUserCourseVideoService.getVideoDetails(videoId);
+    }
+
+    @GetMapping("/courseList")
+    @ApiOperation("获取课程下拉列表")
+    public ResponseResult<PageInfo<FsUserCourseListPVO>> getAllCompanyUser(FsUserCourseListParam param){
+        PageHelper.startPage(param.getPageNum(),param.getPageSize());
+        param.setCompanyId(getCompanyId());
+        List<FsUserCourseListPVO> fsUserCourseList = fsUserCourseService.getFsUserCourseList(param);
+        PageInfo<FsUserCourseListPVO> pageInfo = new PageInfo<>(fsUserCourseList);
+        return ResponseResult.ok(pageInfo);
+    }
 }

+ 3 - 0
fs-service-system/src/main/java/com/fs/course/mapper/FsUserCourseMapper.java

@@ -5,6 +5,7 @@ import com.fs.course.domain.FsUserCourse;
 import com.fs.course.param.FsUserCourseAddStudyCourseParam;
 import com.fs.course.param.FsUserCourseListUParam;
 import com.fs.course.param.FsUserCourseParam;
+import com.fs.course.param.newfs.FsUserCourseListParam;
 import com.fs.course.vo.*;
 import com.fs.his.vo.OptionsVO;
 import org.apache.ibatis.annotations.Param;
@@ -227,4 +228,6 @@ public interface FsUserCourseMapper
     @Select("select course_id ,img_url   from fs_user_course where is_del = 0 and is_private = 1")
     List<FsUserCourse> selectFsUserCourseAllCourseByQw();
 
+    List<FsUserCourseListPVO> getFsUserCourseList(FsUserCourseListParam param);
+
 }

+ 22 - 0
fs-service-system/src/main/java/com/fs/course/param/newfs/FsUserCourseListParam.java

@@ -0,0 +1,22 @@
+package com.fs.course.param.newfs;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class FsUserCourseListParam {
+
+    @ApiModelProperty(value = "页码,默认为1", required = true)
+    private Integer pageNum = 1;
+
+    @ApiModelProperty(value = "页大小,默认为10", required = true)
+    private Integer pageSize = 10;
+
+    @ApiModelProperty(value = "模糊搜索,通过视频名称来匹配")
+    private String keyword;
+
+    @ApiModelProperty(value = "公司id,不用传")
+    private Long companyId;
+
+
+}

+ 7 - 0
fs-service-system/src/main/java/com/fs/course/service/IFsUserCourseService.java

@@ -8,6 +8,7 @@ import com.fs.course.param.FsUserCourseAddStudyCourseParam;
 import com.fs.course.param.FsUserCourseGetIntegralParam;
 import com.fs.course.param.FsUserCourseListUParam;
 import com.fs.course.param.FsUserCourseParam;
+import com.fs.course.param.newfs.FsUserCourseListParam;
 import com.fs.course.vo.*;
 import com.fs.his.vo.OptionsVO;
 
@@ -102,4 +103,10 @@ public interface IFsUserCourseService
     FsUserCourseVideoH5DVO selectFsUserCourseVideoH5DVOByVideoId(Long videoId);
 
     List<FsUserCourseListPVO> selectFsUserCourseListCompanyPVO(FsUserCourseParam fsUserCourse);
+
+    /**
+     * h5 获取用户课程下拉列表
+     * @return
+     */
+    List<FsUserCourseListPVO> getFsUserCourseList(FsUserCourseListParam param);
 }

+ 8 - 0
fs-service-system/src/main/java/com/fs/course/service/IFsUserCourseVideoService.java

@@ -1,10 +1,12 @@
 package com.fs.course.service;
 
 import com.fs.common.core.domain.R;
+import com.fs.common.core.domain.ResponseResult;
 import com.fs.course.domain.FsUserCourseVideo;
 import com.fs.course.param.*;
 import com.fs.course.param.newfs.UserCourseVideoPageParam;
 import com.fs.course.vo.FsUserCourseVideoListUVO;
+import com.fs.course.vo.newfs.FsUserCourseVideoDetailsVO;
 import com.fs.course.vo.newfs.FsUserCourseVideoPageListVO;
 import com.fs.course.vo.FsUserCourseVideoQVO;
 import com.fs.course.vo.FsUserCourseVideoVO;
@@ -96,4 +98,10 @@ public interface IFsUserCourseVideoService
      */
     List<FsUserCourseVideoPageListVO> pageListCourseVideo(UserCourseVideoPageParam param);
 
+    /**
+     * 获取课程视频详情
+     * @return FsUserCourseVideoDetailsVO
+     */
+    ResponseResult<FsUserCourseVideoDetailsVO> getVideoDetails(Long videoId);
+
 }

+ 6 - 6
fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCourseServiceImpl.java

@@ -14,18 +14,13 @@ import com.fs.course.param.FsUserCourseAddStudyCourseParam;
 import com.fs.course.param.FsUserCourseGetIntegralParam;
 import com.fs.course.param.FsUserCourseListUParam;
 import com.fs.course.param.FsUserCourseParam;
+import com.fs.course.param.newfs.FsUserCourseListParam;
 import com.fs.course.service.IFsUserCourseService;
 import com.fs.course.vo.*;
-import com.fs.store.domain.FsUser;
-import com.fs.store.domain.FsUserIntegralLogs;
-import com.fs.store.mapper.FsUserIntegralLogsMapper;
-import com.fs.store.mapper.FsUserMapper;
 import com.fs.his.vo.OptionsVO;
-import com.fs.system.service.ISysConfigService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-
 import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
@@ -368,4 +363,9 @@ public class FsUserCourseServiceImpl implements IFsUserCourseService
     public List<FsUserCourseListPVO> selectFsUserCourseListCompanyPVO(FsUserCourseParam fsUserCourse) {
         return fsUserCourseMapper.selectFsUserCourseListCompanyPVO(fsUserCourse);
     }
+
+    @Override
+    public List<FsUserCourseListPVO> getFsUserCourseList(FsUserCourseListParam param) {
+        return fsUserCourseMapper.getFsUserCourseList(param);
+    }
 }

+ 38 - 10
fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -5,6 +5,7 @@ import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.fs.common.BeanCopyUtils;
 import com.fs.common.core.domain.R;
+import com.fs.common.core.domain.ResponseResult;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.StringUtils;
@@ -18,7 +19,9 @@ import com.fs.course.service.IFsUserCourseVideoService;
 import com.fs.course.vo.FsUserCourseVideoListUVO;
 import com.fs.course.vo.FsUserCourseVideoQVO;
 import com.fs.course.vo.FsUserCourseVideoVO;
+import com.fs.course.vo.newfs.FsUserCourseVideoDetailsVO;
 import com.fs.course.vo.newfs.FsUserCourseVideoPageListVO;
+import com.fs.course.vo.newfs.FsUserVideoQuestionVO;
 import com.fs.his.param.WxSendRedPacketParam;
 import com.fs.store.domain.FsUser;
 import com.fs.store.domain.FsUserIntegralLogs;
@@ -45,9 +48,11 @@ import org.springframework.transaction.annotation.Transactional;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDateTime;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 /**
  * 课堂视频Service业务层处理
@@ -606,10 +611,10 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
                 return R.error("参数错误!");
         }
     }
-    
+
     /**
      * 发放红包奖励
-     * 
+     *
      * @param param 请求参数
      * @param user 用户信息
      * @param log 观看日志
@@ -621,13 +626,13 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
         // 确定红包金额
         BigDecimal amount = BigDecimal.ZERO;
         FsUserCourseVideoRedPackage redPackage = fsUserCourseVideoRedPackageMapper.selectRedPacketByCompanyId(param.getVideoId(), param.getCompanyId());
-        
+
         if (redPackage != null) {
             amount = redPackage.getRedPacketMoney();
         } else if (video != null) {
             amount = new BigDecimal(video.getRedPacketMoney());
         }
-        
+
         // 准备发送红包参数
         WxSendRedPacketParam packetParam = new WxSendRedPacketParam();
         packetParam.setOpenId(user.getMpOpenId());
@@ -637,7 +642,7 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
         }
         packetParam.setAmount(amount);
         packetParam.setSource(param.getSource());
-        
+
         // 发送红包
         R sendRedPacket = paymentService.sendRedPacket(packetParam);
         if (sendRedPacket.get("code").equals(200)) {
@@ -655,7 +660,7 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
             redPacketLog.setAmount(amount);
             redPacketLog.setWatchLogId(log.getLogId() != null ? log.getLogId() : null);
             redPacketLogMapper.insertFsCourseRedPacketLog(redPacketLog);
-            
+
             // 更新观看记录的奖励类型
             if (param.getLinkType() == null || param.getLinkType() == 0) {
                 log.setRewardType(config.getRewardType());
@@ -666,10 +671,10 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
             return R.error("奖励发送失败,请联系客服");
         }
     }
-    
+
     /**
      * 发放积分奖励
-     * 
+     *
      * @param user 用户信息
      * @param log 观看日志
      * @param config 配置信息
@@ -681,7 +686,7 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
         userMap.setUserId(user.getUserId());
         userMap.setIntegral(NumberUtil.add(user.getIntegral(), config.getAnswerIntegral()));
         fsUserMapper.updateFsUser(userMap);
-        
+
         // 记录积分日志
         FsUserIntegralLogs integralLogs = new FsUserIntegralLogs();
         integralLogs.setIntegral(new BigDecimal(config.getAnswerIntegral()));
@@ -691,7 +696,7 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
         integralLogs.setBusinessId(StringUtils.isNotEmpty(log.getLogId().toString()) ? log.getLogId().toString() : null);
         integralLogs.setCreateTime(new Date());
         fsUserIntegralLogsMapper.insertFsUserIntegralLogs(integralLogs);
-        
+
         return R.ok("奖励发放成功");
     }
 
@@ -699,4 +704,27 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
     public List<FsUserCourseVideoPageListVO> pageListCourseVideo(UserCourseVideoPageParam param) {
         return fsUserCourseVideoMapper.selectFsUserCourseVideoPageList(param);
     }
+
+    @Override
+    public ResponseResult<FsUserCourseVideoDetailsVO> getVideoDetails(Long videoId) {
+        FsUserCourseVideo fsUserCourseVideo = fsUserCourseVideoMapper.selectFsUserCourseVideoByVideoId(videoId);
+        FsUserCourseVideoDetailsVO fsUserCourseVideoDetailsVO = new FsUserCourseVideoDetailsVO();
+        BeanUtils.copyProperties(fsUserCourseVideo, fsUserCourseVideoDetailsVO);
+
+        // 获取课程相关的题库
+        String questionBankId = fsUserCourseVideo.getQuestionBankId();
+        List<FsUserVideoQuestionVO> questionList = Collections.emptyList();
+        if (StringUtils.isNotEmpty(questionBankId)) {
+            String[] questionBankIds = questionBankId.split(",");
+            List<FsCourseQuestionBank> fsCourseQuestionBanks = courseQuestionBankMapper.selectFsCourseQuestionBankByIdVO(questionBankIds);
+            questionList = fsCourseQuestionBanks.stream().map(v -> {
+                FsUserVideoQuestionVO fsUserVideoQuestionVO = new FsUserVideoQuestionVO();
+                BeanUtils.copyProperties(v, fsUserVideoQuestionVO);
+                return fsUserVideoQuestionVO;
+            }).collect(Collectors.toList());
+        }
+        
+        fsUserCourseVideoDetailsVO.setQuestionBankList(questionList);
+        return ResponseResult.ok(fsUserCourseVideoDetailsVO);
+    }
 }

+ 3 - 1
fs-service-system/src/main/java/com/fs/course/vo/FsUserCourseListPVO.java

@@ -1,6 +1,7 @@
 package com.fs.course.vo;
 
 import com.fs.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -16,9 +17,10 @@ public class FsUserCourseListPVO extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
 
+    @ApiModelProperty(value = "课程id")
     private Long courseId;
 
-    /** 课程名称 */
+    @ApiModelProperty(value = "课程名称")
     private String courseName;
 
     /** 课程封面 */

+ 37 - 0
fs-service-system/src/main/java/com/fs/course/vo/newfs/FsUserCourseVideoDetailsVO.java

@@ -0,0 +1,37 @@
+package com.fs.course.vo.newfs;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel
+public class FsUserCourseVideoDetailsVO {
+
+    @ApiModelProperty(value = "课程视频id")
+    private Long videoId;
+
+    @ApiModelProperty(value = "视频标题")
+    private String title;
+
+    @ApiModelProperty(value = "视频描述")
+    private String description;
+
+    @ApiModelProperty(value = "视频URL")
+    private String videoUrl;
+
+    @ApiModelProperty(value = "视频缩略图")
+    private String thumbnail;
+
+    @ApiModelProperty(value = "视频时长")
+    private Long duration;
+
+    @ApiModelProperty(value = "课程ID")
+    private Long courseId;
+
+    @ApiModelProperty(value = "题库内容")
+    private List<FsUserVideoQuestionVO> questionBankList;
+
+}

+ 8 - 3
fs-service-system/src/main/java/com/fs/course/vo/newfs/FsUserCourseVideoPageListVO.java

@@ -1,10 +1,13 @@
 package com.fs.course.vo.newfs;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fs.common.core.domain.BaseEntity;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.util.Date;
+
 @EqualsAndHashCode(callSuper = true)
 @Data
 public class FsUserCourseVideoPageListVO extends BaseEntity {
@@ -18,9 +21,6 @@ public class FsUserCourseVideoPageListVO extends BaseEntity {
     @ApiModelProperty(value = "视频描述")
     private String description;
 
-    @ApiModelProperty(value = "视频URL")
-    private String videoUrl;
-
     @ApiModelProperty(value = "视频缩略图")
     private String thumbnail;
 
@@ -39,4 +39,9 @@ public class FsUserCourseVideoPageListVO extends BaseEntity {
     @ApiModelProperty(value = "课程名称")
     private String courseName;
 
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+
 }

+ 38 - 0
fs-service-system/src/main/java/com/fs/course/vo/newfs/FsUserVideoQuestionVO.java

@@ -0,0 +1,38 @@
+package com.fs.course.vo.newfs;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 课程视频题库
+ */
+@Data
+@ApiModel
+public class FsUserVideoQuestionVO {
+
+    @ApiModelProperty(value = "id")
+    private Long id;
+
+    @ApiModelProperty(value = "问题")
+    private String title;
+
+    @ApiModelProperty(value = "排序")
+    private Long sort;
+
+    @ApiModelProperty(value = "类别,1-单选,2-多选 ")
+    private Long type;
+
+    @ApiModelProperty(value = "状态")
+    private Long status;
+
+    @ApiModelProperty(value = "问题类别")
+    private String questionType;
+
+    @ApiModelProperty(value = "选项")
+    private String question;
+
+    @ApiModelProperty(value = "答案")
+    private String answer;
+
+}

+ 20 - 0
fs-service-system/src/main/resources/mapper/course/FsUserCourseMapper.xml

@@ -229,4 +229,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{courseId}
         </foreach>
     </update>
+
+    <select id="getFsUserCourseList" resultType="FsUserCourseListPVO">
+        SELECT
+            c.*,
+            cc.cate_name,
+            ucc.cate_name AS sub_cate_name
+        FROM
+            fs_user_course c
+                LEFT JOIN fs_user_course_category cc ON c.cate_id = cc.cate_id
+                LEFT JOIN fs_user_course_category ucc ON ucc.cate_id = c.sub_cate_id
+        WHERE
+            c.is_del = 0
+            AND FIND_IN_SET(#{companyId}, c.company_ids)
+        <if test="keyword != null and keyword !='' ">
+            AND c.course_name LIKE concat('%',#{keyword},'%'
+            )
+        </if>
+        ORDER BY
+            c.course_id
+    </select>
 </mapper>