Commit 66554285 authored by liuyang's avatar liuyang

完成用户端首页轮播图、标签、推荐课程、搜索、课程详情接口

parent c3c67360
...@@ -3,6 +3,7 @@ package com.qkdata.biz.management.controller; ...@@ -3,6 +3,7 @@ package com.qkdata.biz.management.controller;
import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ClientException;
import com.qkdata.biz.common.BizConstants; import com.qkdata.biz.common.BizConstants;
import com.qkdata.biz.enums.CourseAllowEnum;
import com.qkdata.biz.management.entity.CourseSeriesPO; import com.qkdata.biz.management.entity.CourseSeriesPO;
import com.qkdata.biz.management.service.CourseService; import com.qkdata.biz.management.service.CourseService;
import com.qkdata.biz.management.vo.*; import com.qkdata.biz.management.vo.*;
...@@ -57,8 +58,12 @@ public class CourseController { ...@@ -57,8 +58,12 @@ public class CourseController {
@ApiOperation("课程保存") @ApiOperation("课程保存")
@PostMapping("/save") @PostMapping("/save")
@SysLog("课程保存")
@RequiresRoles(value = {BizConstants.ROLE_ADMIN,BizConstants.ROLE_OPERATOR},logical = Logical.OR) @RequiresRoles(value = {BizConstants.ROLE_ADMIN,BizConstants.ROLE_OPERATOR},logical = Logical.OR)
public Result<String> saveCourse(@RequestBody SaveCourseModel model){ public Result<String> saveCourse(@RequestBody SaveCourseModel model){
if (model.getAllow() == null){
model.setAllow(CourseAllowEnum.ALL);
}
courseService.saveCourse(model); courseService.saveCourse(model);
return Result.succeed("ok"); return Result.succeed("ok");
} }
...@@ -114,10 +119,11 @@ public class CourseController { ...@@ -114,10 +119,11 @@ public class CourseController {
@PostMapping("/saveSeries") @PostMapping("/saveSeries")
@SysLog("添加系列") @SysLog("添加系列")
@RequiresRoles(value = {BizConstants.ROLE_ADMIN,BizConstants.ROLE_OPERATOR},logical = Logical.OR) @RequiresRoles(value = {BizConstants.ROLE_ADMIN,BizConstants.ROLE_OPERATOR},logical = Logical.OR)
public Result<String> saveSeries(@RequestBody CourseSeriesPO po){ public Result<Long> saveSeries(@RequestBody CourseSeriesPO po){
courseService.saveSeries(po); Long id = courseService.saveSeries(po);
return Result.succeed("ok"); return Result.succeed(id);
} }
@ApiOperation("获取视频信息") @ApiOperation("获取视频信息")
@GetMapping("/videoInfo/{videoId}") @GetMapping("/videoInfo/{videoId}")
@RequiresRoles(value = {BizConstants.ROLE_ADMIN,BizConstants.ROLE_OPERATOR},logical = Logical.OR) @RequiresRoles(value = {BizConstants.ROLE_ADMIN,BizConstants.ROLE_OPERATOR},logical = Logical.OR)
......
package com.qkdata.biz.management.entity; package com.qkdata.biz.management.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.qkdata.common.base.entity.BasePO; import com.qkdata.common.base.entity.BasePO;
import lombok.Data; import lombok.Data;
...@@ -14,12 +15,13 @@ import lombok.EqualsAndHashCode; ...@@ -14,12 +15,13 @@ import lombok.EqualsAndHashCode;
* @since 2021-05-19 * @since 2021-05-19
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true)
@TableName("allow_org_course") @TableName("allow_org_course")
public class AllowOrgCoursePO extends BasePO { public class AllowOrgCoursePO {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@TableId
private Long id;
/** /**
* 课程ID * 课程ID
*/ */
......
package com.qkdata.biz.management.entity; package com.qkdata.biz.management.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.qkdata.common.base.entity.BasePO; import com.qkdata.common.base.entity.BasePO;
import lombok.Data; import lombok.Data;
...@@ -14,12 +15,12 @@ import lombok.EqualsAndHashCode; ...@@ -14,12 +15,12 @@ import lombok.EqualsAndHashCode;
* @since 2021-05-19 * @since 2021-05-19
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true)
@TableName("course_tag_rel") @TableName("course_tag_rel")
public class CourseTagRelPO extends BasePO { public class CourseTagRelPO{
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@TableId
private Long id;
/** /**
* 课程ID * 课程ID
*/ */
......
...@@ -8,6 +8,8 @@ import com.qkdata.biz.management.vo.CourseAllowEnterpriseModel; ...@@ -8,6 +8,8 @@ import com.qkdata.biz.management.vo.CourseAllowEnterpriseModel;
import com.qkdata.biz.management.vo.CourseAttachmentModel; import com.qkdata.biz.management.vo.CourseAttachmentModel;
import com.qkdata.biz.management.vo.CourseListItemModel; import com.qkdata.biz.management.vo.CourseListItemModel;
import com.qkdata.biz.management.vo.QueryCourseModel; import com.qkdata.biz.management.vo.QueryCourseModel;
import com.qkdata.biz.web.vo.SearchCourseConditionModel;
import com.qkdata.biz.web.vo.SearchCourseResultModel;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
...@@ -31,4 +33,6 @@ public interface CourseMapper extends BaseMapper<CoursePO> { ...@@ -31,4 +33,6 @@ public interface CourseMapper extends BaseMapper<CoursePO> {
List<CourseAttachmentModel> selectAttachmentListByCourseId(Long id); List<CourseAttachmentModel> selectAttachmentListByCourseId(Long id);
List<CourseAllowEnterpriseModel> selectOrgListByCourseId(Long id); List<CourseAllowEnterpriseModel> selectOrgListByCourseId(Long id);
List<SearchCourseResultModel> searchPageList(Page page, @Param("p") SearchCourseConditionModel model,@Param("enterpriseId") Long enterpriseId);
} }
...@@ -2,8 +2,11 @@ package com.qkdata.biz.management.mapper; ...@@ -2,8 +2,11 @@ package com.qkdata.biz.management.mapper;
import com.qkdata.biz.management.entity.RecommendConfigPO; import com.qkdata.biz.management.entity.RecommendConfigPO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qkdata.biz.management.vo.RecommendConfigModel;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/** /**
* <p> * <p>
* 推荐课程配置 Mapper 接口 * 推荐课程配置 Mapper 接口
...@@ -15,4 +18,5 @@ import org.apache.ibatis.annotations.Mapper; ...@@ -15,4 +18,5 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface RecommendConfigMapper extends BaseMapper<RecommendConfigPO> { public interface RecommendConfigMapper extends BaseMapper<RecommendConfigPO> {
List<RecommendConfigModel> listConfig();
} }
package com.qkdata.biz.management.service; package com.qkdata.biz.management.service;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.vod.model.v20170321.GetPlayInfoResponse; import com.aliyuncs.vod.model.v20170321.GetPlayInfoResponse;
import com.aliyuncs.vod.model.v20170321.GetVideoInfoResponse; import com.aliyuncs.vod.model.v20170321.GetVideoInfoResponse;
...@@ -16,9 +17,14 @@ import com.qkdata.biz.enums.CourseStatusEnum; ...@@ -16,9 +17,14 @@ import com.qkdata.biz.enums.CourseStatusEnum;
import com.qkdata.biz.management.entity.*; import com.qkdata.biz.management.entity.*;
import com.qkdata.biz.management.mapper.*; import com.qkdata.biz.management.mapper.*;
import com.qkdata.biz.management.vo.*; import com.qkdata.biz.management.vo.*;
import com.qkdata.biz.sys.service.SysUserService;
import com.qkdata.biz.web.vo.FullUserInfo;
import com.qkdata.biz.web.vo.SearchCourseConditionModel;
import com.qkdata.biz.web.vo.SearchCourseResultModel;
import com.qkdata.common.base.enums.CodeEnum; import com.qkdata.common.base.enums.CodeEnum;
import com.qkdata.common.base.exception.BusinessException; import com.qkdata.common.base.exception.BusinessException;
import com.qkdata.common.base.model.PageResult; import com.qkdata.common.base.model.PageResult;
import com.qkdata.common.util.UserContext;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -55,6 +61,8 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> { ...@@ -55,6 +61,8 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> {
private AliyunService aliyunService; private AliyunService aliyunService;
@Autowired @Autowired
private ResourceService resourceService; private ResourceService resourceService;
@Autowired
private SysUserService sysUserService;
public PageResult<CourseListItemModel> queryPageList(QueryCourseModel param) { public PageResult<CourseListItemModel> queryPageList(QueryCourseModel param) {
Page page = new Page(param.getPageIndex(), param.getPageSize()); Page page = new Page(param.getPageIndex(), param.getPageSize());
...@@ -200,6 +208,8 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> { ...@@ -200,6 +208,8 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> {
TeacherPO teacherPO = teacherService.getById(model.getTeacherId()); TeacherPO teacherPO = teacherService.getById(model.getTeacherId());
if (teacherPO != null) { if (teacherPO != null) {
model.setTeacherName(teacherPO.getName()); model.setTeacherName(teacherPO.getName());
model.setTeacherAvatar(teacherPO.getAvatarUrl());
model.setTeacherIntroduce(teacherPO.getIntroduce());
} }
} }
...@@ -250,29 +260,39 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> { ...@@ -250,29 +260,39 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> {
ResourcePO resourcePO = resourceService.getById(resourceId); ResourcePO resourcePO = resourceService.getById(resourceId);
if (resourcePO != null) { if (resourcePO != null) {
String videoId = resourcePO.getVideoId(); String videoId = resourcePO.getVideoId();
model.setResourceId(resourceId);
model.setDuration(resourcePO.getVideoDuration());
model.setSize(resourcePO.getSize());
try { try {
GetPlayInfoResponse response = aliyunService.getVideoPlayInfo(videoId); GetVideoInfoResponse response = aliyunService.getVideoInfo(videoId);
List<GetPlayInfoResponse.PlayInfo> playInfoList = response.getPlayInfoList(); GetVideoInfoResponse.Video videoInfo = response.getVideo();
if (CollUtil.isNotEmpty(playInfoList)) { if (videoInfo != null) {
GetPlayInfoResponse.PlayInfo playInfo = playInfoList.get(0); if (StrUtil.isNotBlank(videoInfo.getCoverURL())){
model.setVideoUrl(playInfo.getPlayURL()); model.setCoverUrl(videoInfo.getCoverURL());
GetPlayInfoResponse.VideoBase videoBase = response.getVideoBase();
model.setSnapshotUrl(videoBase.getCoverURL()); }
} }
} catch (ClientException e) { } catch (ClientException e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
} }
} }
} }
public PageResult<CourseSeriesPO> querySeriesPageList(QueryCourseSeriesModel model) { public PageResult<CourseSeriesPO> querySeriesPageList(QueryCourseSeriesModel model) {
Page page = new Page(model.getPageIndex(), model.getPageIndex()); Page page = new Page(model.getPageIndex(), model.getPageSize());
List<CourseSeriesPO> list = seriesMapper.queryPageList(page, model); List<CourseSeriesPO> list = seriesMapper.queryPageList(page, model);
return PageResult.<CourseSeriesPO>builder().code(CodeEnum.SUCCESS.getCode()).count(page.getTotal()).data(list).build(); return PageResult.<CourseSeriesPO>builder().code(CodeEnum.SUCCESS.getCode()).count(page.getTotal()).data(list).build();
} }
public void saveSeries(CourseSeriesPO po) { public Long saveSeries(CourseSeriesPO po) {
seriesMapper.insert(po); seriesMapper.insert(po);
return po.getId();
} }
@Transactional @Transactional
...@@ -369,6 +389,8 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> { ...@@ -369,6 +389,8 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> {
} }
po.setModel(CourseModelEnum.VOD); po.setModel(CourseModelEnum.VOD);
po.setSeriesId(model.getSeriesId()); po.setSeriesId(model.getSeriesId());
po.setAllow(model.getAllow());
save(po);
return po.getId(); return po.getId();
} }
...@@ -381,4 +403,53 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> { ...@@ -381,4 +403,53 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> {
model.setCoverURL(response.getVideo().getCoverURL()); model.setCoverURL(response.getVideo().getCoverURL());
return model; return model;
} }
public PageResult<SearchCourseResultModel> search(SearchCourseConditionModel model) {
Page page = new Page(model.getPageIndex(),model.getPageSize());
String username = UserContext.getUser().getUsername();
FullUserInfo userInfo = sysUserService.findFullUserInfo(username);
List<SearchCourseResultModel> list = baseMapper.searchPageList(page,model,userInfo.getEnterpriseId());
return PageResult.<SearchCourseResultModel>builder().code(CodeEnum.SUCCESS.getCode()).count(page.getTotal()).data(list).build();
}
public List<Long> getAllowEnterpriseList(Long courseId) {
List<AllowOrgCoursePO> enterpriseIdList = allowOrgCourseMapper.selectList(Wrappers.<AllowOrgCoursePO>lambdaQuery().eq(AllowOrgCoursePO::getCourseId,courseId));
if (CollUtil.isNotEmpty(enterpriseIdList)){
return enterpriseIdList.stream().map(AllowOrgCoursePO::getOrgId).collect(Collectors.toList());
}
return Lists.newArrayList();
}
/**
* 验证当前登陆用户是否有该课程权限
* @param courseId
*/
public void checkPerm(Long courseId) {
boolean hasPerm = false;
CoursePO coursePO = getById(courseId);
if (coursePO == null){
throw new BusinessException("请求错误,该课程不存在");
}
if (coursePO.getAllow() == CourseAllowEnum.SPECIFY){
List<Long> allowOrgIds = getAllowEnterpriseList(courseId);
if (CollUtil.isNotEmpty(allowOrgIds)){
String username = UserContext.getUser().getUsername();
FullUserInfo userInfo = sysUserService.findFullUserInfo(username);
if (userInfo.getEnterpriseId() != null){
for (Long orgId : allowOrgIds){
if (orgId.longValue() == userInfo.getEnterpriseId().longValue()){
hasPerm = true;
break;
}
}
}
}
}else {
hasPerm = true;
}
if (!hasPerm){
throw new BusinessException("对不起,您没权限查看该课程");
}
}
} }
\ No newline at end of file
package com.qkdata.biz.management.service; package com.qkdata.biz.management.service;
import cn.hutool.core.collection.CollUtil;
import com.aliyuncs.exceptions.ClientException;
import com.google.common.collect.Lists;
import com.qkdata.biz.enums.CourseAllowEnum;
import com.qkdata.biz.management.entity.CourseTagPO;
import com.qkdata.biz.management.entity.RecommendConfigPO; import com.qkdata.biz.management.entity.RecommendConfigPO;
import com.qkdata.biz.management.entity.ResourcePO;
import com.qkdata.biz.management.mapper.RecommendConfigMapper; import com.qkdata.biz.management.mapper.RecommendConfigMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qkdata.biz.management.vo.CourseChaperModel;
import com.qkdata.biz.management.vo.RecommendConfigModel;
import com.qkdata.biz.management.vo.VideoInfoModel;
import com.qkdata.biz.sys.service.SysUserService;
import com.qkdata.biz.web.vo.FullUserInfo;
import com.qkdata.common.util.UserContext;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
/** /**
* <p> * <p>
* $!{table.comment} 服务类 * $!{table.comment} 服务类
...@@ -13,7 +29,55 @@ import org.springframework.stereotype.Service; ...@@ -13,7 +29,55 @@ import org.springframework.stereotype.Service;
* @author liuyang * @author liuyang
* @since 2021-05-27 * @since 2021-05-27
*/ */
@Slf4j
@Service @Service
public class RecommendConfigService extends ServiceImpl<RecommendConfigMapper, RecommendConfigPO> { public class RecommendConfigService extends ServiceImpl<RecommendConfigMapper, RecommendConfigPO> {
@Autowired
private CourseService courseService;
@Autowired
private ResourceService resourceService;
@Autowired
private CourseTagService tagService;
@Autowired
private SysUserService sysUserService;
public List<RecommendConfigModel> listConfig() {
List<RecommendConfigModel> modelList = baseMapper.listConfig();
List<RecommendConfigModel> resultList = Lists.newArrayList();
for (RecommendConfigModel model : modelList){
if (model.getAllow() == CourseAllowEnum.SPECIFY){
List<Long> orgIds = courseService.getAllowEnterpriseList(model.getCourseId());
String username = UserContext.getUser().getUsername();
FullUserInfo userInfo = sysUserService.findFullUserInfo(username);
boolean hasPerm = false;
for (Long orgId : orgIds){
if (userInfo.getEnterpriseId() != null){
if (orgId.longValue() == userInfo.getEnterpriseId().longValue()){
hasPerm = true;
break;
}
}
}
if (hasPerm){
resultList.add(model);
}else {
continue;
}
}else {
resultList.add(model);
}
List<CourseChaperModel> chaperList = courseService.chaperList(model.getCourseId());
if (CollUtil.isNotEmpty(chaperList)){
CourseChaperModel chaperModel = chaperList.get(0);
ResourcePO resourcePO = resourceService.getById(chaperModel.getResourceId());
if (resourcePO != null){
model.setDuration(resourcePO.getVideoDuration());
}
}
List<CourseTagPO> tagList = tagService.findListByCourseId(model.getCourseId());
model.setTags(tagList);
}
return resultList;
}
} }
\ No newline at end of file
...@@ -28,5 +28,13 @@ public class CourseChaperModel { ...@@ -28,5 +28,13 @@ public class CourseChaperModel {
/** /**
* 视频快照URL * 视频快照URL
*/ */
private String snapshotUrl; private String coverUrl;
/**
* 视频大小
*/
private Long size;
/**
* 视频时长
*/
private Float duration;
} }
...@@ -39,6 +39,14 @@ public class CourseDetailModel { ...@@ -39,6 +39,14 @@ public class CourseDetailModel {
* 讲师名称 * 讲师名称
*/ */
private String teacherName; private String teacherName;
/**
* 讲师头像
*/
private String teacherAvatar;
/**
* 讲师简介
*/
private String teacherIntroduce;
/** /**
* 收费模式(免费、会员免费、付费点播) * 收费模式(免费、会员免费、付费点播)
*/ */
......
package com.qkdata.biz.management.vo;
import com.qkdata.biz.enums.CourseAllowEnum;
import com.qkdata.biz.enums.CourseChargeModelEnum;
import com.qkdata.biz.management.entity.CourseTagPO;
import lombok.Data;
import java.util.List;
@Data
public class RecommendConfigModel {
/**
* 课程ID
*/
private Long courseId;
/**
* 课程名称
*/
private String courseName;
/**
* 课程封面url
*/
private String courseLogoUrl;
/**
* 收费模式
*/
private CourseChargeModelEnum chargeModel;
/**
* 视频时长
*/
private Float duration;
/**
* 标签
*/
private List<CourseTagPO> tags;
/**
* 可见范围
*/
private CourseAllowEnum allow;
}
package com.qkdata.biz.web.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.qkdata.biz.common.BizConstants;
import com.qkdata.biz.management.entity.CourseTagPO;
import com.qkdata.biz.management.entity.RecommendConfigPO;
import com.qkdata.biz.management.service.CourseService;
import com.qkdata.biz.management.service.CourseTagService;
import com.qkdata.biz.management.service.RecommendConfigService;
import com.qkdata.biz.management.service.SwiperConfigService;
import com.qkdata.biz.management.vo.CourseDetailModel;
import com.qkdata.biz.management.vo.CourseTagsModel;
import com.qkdata.biz.management.vo.RecommendConfigModel;
import com.qkdata.biz.management.vo.SwiperConfigModel;
import com.qkdata.biz.web.vo.MainPageModel;
import com.qkdata.biz.web.vo.SearchCourseConditionModel;
import com.qkdata.biz.web.vo.SearchCourseResultModel;
import com.qkdata.common.annotation.SysLog;
import com.qkdata.common.base.model.PageResult;
import com.qkdata.common.base.model.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Api(tags = "首页数据获取")
@RestController
@RequestMapping("/api/web/mainPage")
public class MainPageController {
@Autowired
private SwiperConfigService swiperConfigService;
@Autowired
private CourseTagService courseTagService;
@Autowired
private RecommendConfigService recommendConfigService;
@Autowired
private CourseService courseService;
@Autowired
private CourseTagService tagService;
@ApiOperation("获取配置信息")
@GetMapping("")
@RequiresRoles(value = {BizConstants.ROLE_USER,BizConstants.ROLE_ENTERPRISE_ADMIN},logical = Logical.OR)
public Result<MainPageModel> get(){
List<SwiperConfigModel> swiperConfigModels = swiperConfigService.listConfig();
List<CourseTagPO> tagList = courseTagService.list(Wrappers.<CourseTagPO>lambdaQuery().eq(CourseTagPO::getRecommend,true));
List<RecommendConfigModel> recommendConfigList = recommendConfigService.listConfig();
MainPageModel model = new MainPageModel();
model.setTags(tagList);
model.setSwiperConfigs(swiperConfigModels);
model.setRecommendConfigs(recommendConfigList);
return Result.succeed(model);
}
@ApiOperation("搜索课程")
@PostMapping("/course/search")
@RequiresRoles(value = {BizConstants.ROLE_USER,BizConstants.ROLE_ENTERPRISE_ADMIN},logical = Logical.OR)
@SysLog("搜索课程")
public PageResult<SearchCourseResultModel> searchCourse(@RequestBody SearchCourseConditionModel model){
return courseService.search(model);
}
@ApiOperation("获取全部标签")
@GetMapping("/course/tags")
@RequiresRoles(value = {BizConstants.ROLE_USER,BizConstants.ROLE_ENTERPRISE_ADMIN},logical = Logical.OR)
public Result<List<CourseTagPO>> findCourseTags(){
List<CourseTagPO> tags = tagService.list();
return Result.succeed(tags);
}
@ApiOperation("获取课程详情")
@GetMapping("/course/{id}")
@RequiresRoles(value = {BizConstants.ROLE_USER,BizConstants.ROLE_ENTERPRISE_ADMIN},logical = Logical.OR)
@SysLog("获取课程详情")
public Result<CourseDetailModel> getCourseDetail(@PathVariable Long id){
courseService.checkPerm(id);
CourseDetailModel model = courseService.getCourseDetail(id);
return Result.succeed(model);
}
}
package com.qkdata.biz.web.vo;
import com.qkdata.biz.management.entity.CourseTagPO;
import com.qkdata.biz.management.vo.RecommendConfigModel;
import com.qkdata.biz.management.vo.SwiperConfigModel;
import lombok.Data;
import java.util.List;
@Data
public class MainPageModel {
List<SwiperConfigModel> swiperConfigs;
List<CourseTagPO> tags;
List<RecommendConfigModel> recommendConfigs;
}
package com.qkdata.biz.web.vo;
import com.qkdata.common.constants.Constants;
import lombok.Data;
@Data
public class SearchCourseConditionModel {
private int pageIndex = Constants.DEFAULT_PAGE;
private int pageSize = Constants.DEFAULT_PAGE_SIZE;
private String courseName;
private Long tagId;
}
package com.qkdata.biz.web.vo;
import com.qkdata.biz.enums.CourseChargeModelEnum;
import com.qkdata.biz.management.entity.CourseTagPO;
import lombok.Data;
import java.util.List;
@Data
public class SearchCourseResultModel {
private Long courseId;
private String courseName;
private CourseChargeModelEnum chargeModel;
private Float duration;
private String courseLogoUrl;
private List<CourseTagPO> tags;
}
...@@ -49,4 +49,42 @@ ...@@ -49,4 +49,42 @@
INNER JOIN organization o on r.org_id = o.id INNER JOIN organization o on r.org_id = o.id
WHERE r.course_id = #{id} WHERE r.course_id = #{id}
</select> </select>
<select id="searchPageList" resultType="com.qkdata.biz.web.vo.SearchCourseResultModel">
SELECT
*
FROM
(
SELECT
c.id course_id,
c.`name` course_name,
c.charge_model,
c.logo_url course_logo_url
FROM
course c
WHERE
c.is_del = 0
AND c.allow = 'ALL'
UNION
SELECT
c.id course_id,
c.`name` course_name,
c.charge_model,
c.logo_url course_logo_url
FROM
course c
INNER JOIN allow_org_course o ON c.id = o.course_id
WHERE
c.is_del = 0
AND c.allow = 'SPECIFY'
AND o.org_id = #{enterpriseId}
) tmp
LEFT JOIN course_tag_rel r on tmp.course_id = r.course_id
WHERE 1= 1
<if test="p.courseName != null and p.courseName != ''">
and tmp.course_name like concat ('%',#{p.courseName},'%')
</if>
<if test="p.tagId != null">
and r.tag_id = #{p.tagId}
</if>
</select>
</mapper> </mapper>
...@@ -2,4 +2,14 @@ ...@@ -2,4 +2,14 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qkdata.biz.management.mapper.RecommendConfigMapper"> <mapper namespace="com.qkdata.biz.management.mapper.RecommendConfigMapper">
<select id="listConfig" resultType="com.qkdata.biz.management.vo.RecommendConfigModel">
SELECT c.id course_id,
c.`name` course_name,
c.charge_model,
c.logo_url course_logo_url,
c.allow
from recommend_config cfg
INNER JOIN course c on cfg.course_id = c.id
ORDER BY cfg.sort_no ASC
</select>
</mapper> </mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment