Bladeren bron

feat(course): 新增训练营和营期相关功能

- 在 FsUserCourseListParam 中新增 trainingCampId 字段
-重构 FsUserCourseListVO,增加训练营、公司、状态及时间字段
- 修改 SQL 查询逻辑,支持按训练营 ID 筛选营期列表
- 新增训练营下拉列表接口 selectTrainingCampListForApp
- 实现训练营下拉列表的 Mapper 和 Service 方法
- 更新 Controller 接口,新增获取训练营和营期列表的 API
- 将 courseList 接口改为 POST 请求并支持分页参数校验
xw 3 weken geleden
bovenliggende
commit
7b52e3fab4

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

@@ -24,6 +24,7 @@ import com.fs.course.param.newfs.UserCourseVideoPageParam;
 import com.fs.course.service.*;
 import com.fs.course.vo.FsCourseWatchLogListVO;
 import com.fs.course.vo.FsUserCourseParticipationRecordVO;
+import com.fs.course.vo.FsUserCourseTrainingCampVO;
 import com.fs.course.vo.newfs.*;
 import com.fs.im.domain.FsImMsgSendLog;
 import com.fs.im.dto.OpenImResponseDTO;
@@ -40,6 +41,8 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import javax.validation.Valid;
+
 import java.io.InputStream;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -57,6 +60,9 @@ public class FsUserCourseVideoController extends AppBaseController {
     @Autowired
     private IFsUserCourseService fsUserCourseService;
 
+    @Autowired
+    private IFsUserCourseTrainingCampService fsUserCourseTrainingCampService;
+
     @Autowired
     private IFsCourseLinkService courseLinkService;
 
@@ -97,16 +103,39 @@ public class FsUserCourseVideoController extends AppBaseController {
     }
 
     @Login
-    @GetMapping("/courseList")
-    @ApiOperation("获取课程下拉列表")
-    public ResponseResult<PageInfo<FsUserCourseListVO>> getAllCourseList(FsUserCourseListParam param) {
+    @PostMapping("/courseList")
+    @ApiOperation("获取营期下拉列表")
+    public ResponseResult<PageInfo<FsUserCourseListVO>> getAllCourseList(@Valid @RequestBody FsUserCourseListParam param) {
+        log.info("查询营期列表 - 参数: trainingCampId={}, companyId={}, keyword={}, pageNum={}, pageSize={}", 
+            param.getTrainingCampId(), getCompanyId(), param.getKeyword(), param.getPageNum(), param.getPageSize());
+        
         PageHelper.startPage(param.getPageNum(), param.getPageSize());
         param.setCompanyId(getCompanyId());
+        
         List<FsUserCourseListVO> fsUserCourseList = fsUserCourseService.getFsUserCourseList(param);
+        log.info("查询营期列表 - 结果数量: {}", fsUserCourseList.size());
+        
         PageInfo<FsUserCourseListVO> pageInfo = new PageInfo<>(fsUserCourseList);
         return ResponseResult.ok(pageInfo);
     }
 
+    @Login
+    @GetMapping("/trainingCampList")
+    @ApiOperation("获取训练营下拉列表")
+    public ResponseResult<PageInfo<FsUserCourseTrainingCampVO>> getTrainingCampList(
+            @RequestParam(defaultValue = "1") Integer pageNum,
+            @RequestParam(defaultValue = "10") Integer pageSize,
+            @RequestParam(required = false) String keyword) {
+        PageHelper.startPage(pageNum, pageSize);
+        Map<String, Object> params = new HashMap<>();
+        params.put("companyId", getCompanyId());
+        if (StringUtils.isNotEmpty(keyword)) {
+            params.put("trainingCampName", keyword);
+        }
+        List<FsUserCourseTrainingCampVO> list = fsUserCourseTrainingCampService.selectTrainingCampListForApp(params);
+        return ResponseResult.ok(new PageInfo<>(list));
+    }
+
     @Login
     @GetMapping("/videoList")
     @ApiOperation("获取视频下拉列表")

+ 17 - 16
fs-service/src/main/java/com/fs/course/mapper/FsUserCourseMapper.java

@@ -254,22 +254,23 @@ public interface FsUserCourseMapper
     List<FsUserCourse> selectFsUserCourseAllCourse();
 
     @Select({"<script> " +
-            "SELECT DISTINCT\n" +
-            "        fcp.period_id,\n" +
-            "        fcp.period_name\n" +
-            "        FROM\n" +
-            "        fs_user_course_period fcp\n" +
-            "        LEFT JOIN fs_user_course_period_days fcpd ON fcpd.period_id = fcp.period_id\n" +
-            "        LEFT JOIN fs_user_course c ON c.course_id = fcpd.course_id\n" +
-            "        WHERE\n" +
-            "        c.is_del = 0 and fcp.del_flag = '0'\n" +
-            "        AND FIND_IN_SET(#{companyId}, fcp.company_id)\n" +
-            "        <if test=\"keyword != null and keyword !='' \">\n" +
-            "            AND fcp.period_name LIKE concat('%',#{keyword},'%'\n" +
-            "            )\n" +
-            "        </if>\n" +
-            "        ORDER BY\n" +
-            "        fcp.create_time desc, fcp.period_status asc"+
+            "SELECT DISTINCT " +
+            "fcp.period_id AS periodId, " +
+            "fcp.period_name AS periodName, " +
+            "fcp.training_camp_id AS trainingCampId, " +
+            "fcp.company_id AS companyId, " +
+            "fcp.period_status AS periodStatus, " +
+            "fcp.period_starting_time AS periodStartingTime, " +
+            "fcp.period_end_time AS periodEndTime, " +
+            "fcp.create_time AS createTime " +
+            "FROM fs_user_course_period fcp " +
+            "WHERE fcp.del_flag = '0' " +
+            "AND fcp.training_camp_id = #{trainingCampId} " +
+            "AND FIND_IN_SET(#{companyId}, fcp.company_id) > 0 " +
+            "<if test=\"keyword != null and keyword !='' \">" +
+            "AND fcp.period_name LIKE concat('%',#{keyword},'%') " +
+            "</if>" +
+            "ORDER BY fcp.create_time DESC, fcp.period_status ASC"+
             "</script>"})
     List<FsUserCourseListVO> getFsUserCourseList(FsUserCourseListParam param);
 

+ 7 - 0
fs-service/src/main/java/com/fs/course/mapper/FsUserCourseTrainingCampMapper.java

@@ -40,4 +40,11 @@ public interface FsUserCourseTrainingCampMapper extends BaseMapper<FsUserCourseT
      * @return  list
      */
     List<OptionsVO> selectCampListByMap(@Param("params") Map<String, Object> params);
+
+    /**
+     * APP端-查询训练营下拉列表(通过公司ID和用户看课记录筛选)
+     * @param params    参数(companyId, userId, trainingCampName)
+     * @return  list
+     */
+    List<FsUserCourseTrainingCampVO> selectTrainingCampListForApp(@Param("params") Map<String, Object> params);
 }

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

@@ -18,6 +18,9 @@ public class FsUserCourseListParam {
     @ApiModelProperty(value = "公司id,不用传")
     private Long companyId;
 
+    @ApiModelProperty(value = "训练营ID", required = true)
+    private Long trainingCampId;
+
     private String corpId;
 
     private String qwUserId;

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

@@ -49,4 +49,11 @@ public interface IFsUserCourseTrainingCampService extends IService<FsUserCourseT
      * @return  list
      */
     List<OptionsVO> selectCampListByMap(Map<String, Object> params);
+
+    /**
+     * APP端-查询训练营下拉列表
+     * @param params    参数
+     * @return  list
+     */
+    List<FsUserCourseTrainingCampVO> selectTrainingCampListForApp(Map<String, Object> params);
 }

+ 5 - 0
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseTrainingCampServiceImpl.java

@@ -182,4 +182,9 @@ public class FsUserCourseTrainingCampServiceImpl extends ServiceImpl<FsUserCours
     public List<OptionsVO> selectCampListByMap(Map<String, Object> params) {
         return baseMapper.selectCampListByMap(params);
     }
+
+    @Override
+    public List<FsUserCourseTrainingCampVO> selectTrainingCampListForApp(Map<String, Object> params) {
+        return baseMapper.selectTrainingCampListForApp(params);
+    }
 }

+ 25 - 7
fs-service/src/main/java/com/fs/course/vo/newfs/FsUserCourseListVO.java

@@ -1,24 +1,42 @@
 package com.fs.course.vo.newfs;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.Date;
+
 /**
- * 课程下拉列表 对象(需要分页)
+ * 营期下拉列表 对象(需要分页)
  */
 @Data
 public class FsUserCourseListVO {
 
-//    @ApiModelProperty(value = "课程id")
-//    private Long courseId;
-//
-//    @ApiModelProperty(value = "课程名称")
-//    private String courseName;
-
     @ApiModelProperty(value = "营期id")
     private Long periodId;
 
     @ApiModelProperty(value = "营期名称")
     private String periodName;
 
+    @ApiModelProperty(value = "训练营ID")
+    private Long trainingCampId;
+
+    @ApiModelProperty(value = "公司ID")
+    private String companyId;
+
+    @ApiModelProperty(value = "营期状态")
+    private Integer periodStatus;
+
+    @ApiModelProperty(value = "开营日期")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date periodStartingTime;
+
+    @ApiModelProperty(value = "结营日期")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date periodEndTime;
+
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
 }

+ 22 - 0
fs-service/src/main/resources/mapper/course/FsUserCourseTrainingCampMapper.xml

@@ -58,4 +58,26 @@
             </if>
         </where>
     </select>
+
+    <!-- APP端-查询训练营下拉列表 -->
+    <select id="selectTrainingCampListForApp" resultType="com.fs.course.vo.FsUserCourseTrainingCampVO">
+        SELECT DISTINCT
+            ctc.training_camp_id AS trainingCampId,
+            ctc.training_camp_name AS trainingCampName,
+            ctc.order_number
+        FROM fs_user_course_training_camp ctc
+        INNER JOIN fs_user_course_period period
+            ON ctc.training_camp_id = period.training_camp_id
+            AND period.del_flag = '0'
+        <where>
+            ctc.del_flag = '0'
+            <if test="params.companyId != null and params.companyId != ''">
+                AND period.company_id LIKE CONCAT('%', #{params.companyId}, '%')
+            </if>
+            <if test="params.trainingCampName != null and params.trainingCampName != ''">
+                AND ctc.training_camp_name LIKE CONCAT('%', #{params.trainingCampName}, '%')
+            </if>
+        </where>
+        ORDER BY ctc.order_number DESC, ctc.training_camp_id DESC
+    </select>
 </mapper>