diff --git a/roncoo-education-common/roncoo-education-common-service/src/main/java/com/roncoo/education/common/es/EsCourse.java b/roncoo-education-common/roncoo-education-common-service/src/main/java/com/roncoo/education/common/es/EsCourse.java index d9dfc403f3bd608d44e722982ba9945c3c3b4ed8..237d07f94e7a80e0d2d2d701c06351ce17c2cee0 100644 --- a/roncoo-education-common/roncoo-education-common-service/src/main/java/com/roncoo/education/common/es/EsCourse.java +++ b/roncoo-education-common/roncoo-education-common-service/src/main/java/com/roncoo/education/common/es/EsCourse.java @@ -18,8 +18,8 @@ import java.util.Date; @Data @Accessors(chain = true) public class EsCourse implements Serializable { - public static final String COURSE = "edu_course"; private static final long serialVersionUID = 1L; + public static final String COURSE = "rc_course"; /** * 主键 @@ -35,46 +35,32 @@ public class EsCourse implements Serializable { */ private Date gmtModified; /** - * 排序 - */ - private Integer sort; - /** - * 讲师名称 - */ - private String lecturerName; - /** - * 课程编号 + * 课程名称 */ - private Long courseNo; + private String courseName; /** * 课程封面 */ private String courseLogo; /** - * 课程名称 + * 分类 */ - private String courseName; + private Long categoryId; /** - * 课程排序 + * 是否免费(1:免费,0:收费) */ - private Integer courseSort; + private Integer isFree; /** * 原价 */ - private BigDecimal courseOriginal; + private BigDecimal rulingPrice; /** * 优惠价 */ - private BigDecimal courseDiscount; + private BigDecimal coursePrice; /** - * 是否免费(1:免费,0:收费) + * 课程排序 */ - private Integer isFree; - - @Override - public String toString() { - return "EsCourse [id=" + id + ", gmtCreate=" + gmtCreate + ", gmtModified=" + gmtModified + ", sort=" + sort + ", lecturerName=" + lecturerName + ", courseNo=" + courseNo + ", courseLogo=" + courseLogo + ", courseName=" + courseName + ", courseSort=" + courseSort + ", courseOriginal=" - + courseOriginal + ", courseDiscount=" + courseDiscount + ", isFree=" + isFree + "]"; - } + private Integer courseSort; } diff --git a/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/dao/CourseChapterDao.java b/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/dao/CourseChapterDao.java index 3b30f9c1983f4e77186d10aee2e11470d46e5d66..7145ce3ab2c94f4b9e5ede055946c21a5cd3001b 100644 --- a/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/dao/CourseChapterDao.java +++ b/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/dao/CourseChapterDao.java @@ -59,7 +59,7 @@ public interface CourseChapterDao { /** * 章节信息--条件列出 * - * @param example 查询条件 + * @param example 查询条件 * @return 章节信息列表 */ List listByExample(CourseChapterExample example); @@ -67,8 +67,12 @@ public interface CourseChapterDao { /** * 章节信息--条件统计 * - * @param example 统计条件 + * @param example 统计条件 * @return 章节信息数量 */ int countByExample(CourseChapterExample example); + + List listByCourseId(Long courseId); + + List listByCourseIdAndStatusId(Long id, Integer statusId); } diff --git a/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/dao/CourseChapterPeriodDao.java b/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/dao/CourseChapterPeriodDao.java index 57245d8b84d2689f4e0d05d1fb8d41d2f106153a..b42495e34fdae76e722f800c13ecd9e1cc7be10e 100644 --- a/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/dao/CourseChapterPeriodDao.java +++ b/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/dao/CourseChapterPeriodDao.java @@ -59,7 +59,7 @@ public interface CourseChapterPeriodDao { /** * 课时信息--条件列出 * - * @param example 查询条件 + * @param example 查询条件 * @return 课时信息列表 */ List listByExample(CourseChapterPeriodExample example); @@ -67,8 +67,10 @@ public interface CourseChapterPeriodDao { /** * 课时信息--条件统计 * - * @param example 统计条件 + * @param example 统计条件 * @return 课时信息数量 */ int countByExample(CourseChapterPeriodExample example); + + List listByCourseIdAndStatusId(Long courseId, Integer statusId); } diff --git a/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/dao/impl/CourseChapterDaoImpl.java b/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/dao/impl/CourseChapterDaoImpl.java index 24b0e9cc649129be50a916d225e3f379a3ade084..7e37adb370f2f04dd33648fb798441f870e88cbe 100644 --- a/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/dao/impl/CourseChapterDaoImpl.java +++ b/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/dao/impl/CourseChapterDaoImpl.java @@ -68,7 +68,23 @@ public class CourseChapterDaoImpl implements CourseChapterDao { } @Override - public int countByExample(CourseChapterExample example){ + public int countByExample(CourseChapterExample example) { return this.mapper.countByExample(example); } + + @Override + public List listByCourseId(Long courseId) { + CourseChapterExample example = new CourseChapterExample(); + example.createCriteria().andCourseIdEqualTo(courseId); + example.setOrderByClause(" sort asc, id desc "); + return this.mapper.selectByExample(example); + } + + @Override + public List listByCourseIdAndStatusId(Long courseId, Integer statusId) { + CourseChapterExample example = new CourseChapterExample(); + example.createCriteria().andCourseIdEqualTo(courseId).andStatusIdEqualTo(statusId); + example.setOrderByClause(" sort asc, id desc "); + return this.mapper.selectByExample(example); + } } diff --git a/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/dao/impl/CourseChapterPeriodDaoImpl.java b/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/dao/impl/CourseChapterPeriodDaoImpl.java index 40ce832449dd65315dfec52226e5aa32db676769..efc50b229810a041c01757fc9b2c91ae7f796eba 100644 --- a/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/dao/impl/CourseChapterPeriodDaoImpl.java +++ b/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/dao/impl/CourseChapterPeriodDaoImpl.java @@ -68,7 +68,19 @@ public class CourseChapterPeriodDaoImpl implements CourseChapterPeriodDao { } @Override - public int countByExample(CourseChapterPeriodExample example){ + public int countByExample(CourseChapterPeriodExample example) { return this.mapper.countByExample(example); } + + @Override + public List listByCourseIdAndStatusId(Long courseId, Integer statusId) { + CourseChapterPeriodExample example = new CourseChapterPeriodExample(); + CourseChapterPeriodExample.Criteria c = example.createCriteria(); + c.andCourseIdEqualTo(courseId); + if (null != statusId) { + c.andStatusIdEqualTo(statusId); + } + example.setOrderByClause("sort asc, id desc"); + return this.mapper.selectByExample(example); + } } diff --git a/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/ApiCourseController.java b/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/ApiCourseController.java index 79d489131fc2efaf721fa6d267b97f11bb1dd4d5..0d14b9b62afc62c51257c131b30e78b4cd8afdbd 100644 --- a/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/ApiCourseController.java +++ b/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/ApiCourseController.java @@ -1,9 +1,18 @@ package com.roncoo.education.course.service.api; +import com.roncoo.education.common.core.base.Page; +import com.roncoo.education.common.core.base.Result; import com.roncoo.education.course.service.api.biz.ApiCourseBiz; +import com.roncoo.education.course.service.api.req.ApiCoursePageReq; +import com.roncoo.education.course.service.api.req.ApiCourseReq; +import com.roncoo.education.course.service.api.resp.ApiCoursePageResp; +import com.roncoo.education.course.service.api.resp.ApiCourseResp; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import javax.validation.constraints.NotNull; @@ -23,4 +32,23 @@ public class ApiCourseController { @NotNull private final ApiCourseBiz biz; + /** + * 课程信息列表接口 + * + * @author fengyw + */ + @ApiOperation(value = "列表和搜索接口", notes = "根据条件进行课程列出") + @RequestMapping(value = "/search", method = RequestMethod.POST) + public Result> searchForPage(@RequestBody ApiCoursePageReq req) { + return biz.searchForPage(req); + } + + /** + * 课程详情接口 + */ + @ApiOperation(value = "课程详情接口", notes = "根据课程ID获取课程信息") + @RequestMapping(value = "/view", method = RequestMethod.POST) + public Result view(@RequestBody ApiCourseReq req) { + return biz.view(req); + } } diff --git a/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/biz/ApiCourseBiz.java b/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/biz/ApiCourseBiz.java index 857d0bf5d939dab257c2f65ffaff7e24b7b480b7..f5f4cf22224a78490dffe70dd2a32a3382b28916 100644 --- a/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/biz/ApiCourseBiz.java +++ b/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/biz/ApiCourseBiz.java @@ -1,11 +1,47 @@ package com.roncoo.education.course.service.api.biz; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import com.roncoo.education.common.core.base.Page; +import com.roncoo.education.common.core.base.Result; +import com.roncoo.education.common.core.enums.PutawayEnum; +import com.roncoo.education.common.core.enums.StatusIdEnum; +import com.roncoo.education.common.core.tools.BeanUtil; +import com.roncoo.education.common.es.EsCourse; +import com.roncoo.education.common.es.EsPageUtil; import com.roncoo.education.common.service.BaseBiz; +import com.roncoo.education.course.dao.CourseChapterDao; +import com.roncoo.education.course.dao.CourseChapterPeriodDao; import com.roncoo.education.course.dao.CourseDao; +import com.roncoo.education.course.dao.impl.mapper.entity.Course; +import com.roncoo.education.course.dao.impl.mapper.entity.CourseChapter; +import com.roncoo.education.course.dao.impl.mapper.entity.CourseChapterPeriod; +import com.roncoo.education.course.service.api.req.ApiCoursePageReq; +import com.roncoo.education.course.service.api.req.ApiCourseReq; +import com.roncoo.education.course.service.api.resp.*; +import com.roncoo.education.user.feign.interfaces.IFeignLecturer; +import com.roncoo.education.user.feign.interfaces.vo.LecturerViewVO; import lombok.RequiredArgsConstructor; +import org.elasticsearch.index.query.BoolQueryBuilder; +import org.elasticsearch.index.query.MultiMatchQueryBuilder; +import org.elasticsearch.index.query.QueryBuilders; +import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; +import org.elasticsearch.search.sort.FieldSortBuilder; +import org.elasticsearch.search.sort.SortOrder; +import org.springframework.cache.annotation.CacheConfig; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; +import org.springframework.data.elasticsearch.core.SearchHits; +import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates; +import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; import javax.validation.constraints.NotNull; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * API-课程信息 @@ -13,10 +49,83 @@ import javax.validation.constraints.NotNull; * @author wujing */ @Component +@CacheConfig(cacheNames = {"course"}) @RequiredArgsConstructor public class ApiCourseBiz extends BaseBiz { @NotNull private final CourseDao dao; + @NotNull + private final CourseChapterDao chapterDao; + @NotNull + private final CourseChapterPeriodDao periodDao; + + @NotNull + private final IFeignLecturer feignLecturer; + + @NotNull + private final ElasticsearchRestTemplate elasticsearchRestTemplate; + + public Result> searchForPage(ApiCoursePageReq req) { + + NativeSearchQueryBuilder nsb = new NativeSearchQueryBuilder(); + // 高亮字段 + nsb.withHighlightFields(new HighlightBuilder.Field("courseName").preTags("").postTags("")); + // 课程排序(courseSort) + nsb.withSort(new FieldSortBuilder("courseSort").order(SortOrder.DESC)); + // 分页 + nsb.withPageable(PageRequest.of(req.getPageCurrent() - 1, req.getPageSize())); + + BoolQueryBuilder qb = QueryBuilders.boolQuery(); + if (ObjectUtil.isNotEmpty(req.getCategoryId())) { + qb.must(QueryBuilders.termQuery(req.getCategoryId().toString(), "categoryId")); + } + if (ObjectUtil.isNotEmpty(req.getIsFree())) { + qb.must(QueryBuilders.termQuery(req.getIsFree().toString(), "isFree")); + } + if (StringUtils.hasText(req.getCourseName())) { + // 模糊查询multiMatchQuery,最佳字段best_fields + qb.must(QueryBuilders.multiMatchQuery(req.getCourseName(), "courseName").type(MultiMatchQueryBuilder.Type.BEST_FIELDS)); + } + nsb.withQuery(qb); + + SearchHits searchHits = elasticsearchRestTemplate.search(nsb.build(), EsCourse.class, IndexCoordinates.of(EsCourse.COURSE)); + return Result.success(EsPageUtil.transform(searchHits, req.getPageCurrent(), req.getPageSize(), ApiCoursePageResp.class)); + } + + @Cacheable + public Result view(ApiCourseReq req) { + Course course = dao.getById(req.getCourseId()); + if (course == null) { + return Result.error("找不到该课程信息"); + } + if (!course.getStatusId().equals(StatusIdEnum.YES.getCode())) { + return Result.error("该课程已被禁用"); + } + if (course.getIsPutaway().equals(PutawayEnum.DOWN.getCode())) { + return Result.error("该课程已下架"); + } + ApiCourseResp courseResp = BeanUtil.copyProperties(course, ApiCourseResp.class); + + // 获取讲师信息 + LecturerViewVO lecturerViewVO = feignLecturer.getById(course.getLecturerId()); + if (ObjectUtil.isNotEmpty(lecturerViewVO)) { + courseResp.setLecturerResp(BeanUtil.copyProperties(lecturerViewVO, ApiCourseLecturerResp.class)); + } + // 章节信息 + List chapterList = chapterDao.listByCourseIdAndStatusId(course.getId(), StatusIdEnum.YES.getCode()); + if (CollUtil.isNotEmpty(chapterList)) { + courseResp.setChapterRespList(BeanUtil.copyProperties(chapterList, ApiCourseChapterResp.class)); + // 课时信息 + List periodList = periodDao.listByCourseIdAndStatusId(course.getId(), StatusIdEnum.YES.getCode()); + if (CollUtil.isNotEmpty(periodList)) { + Map> map = periodList.stream().collect(Collectors.groupingBy(CourseChapterPeriod::getChapterId, Collectors.toList())); + for (ApiCourseChapterResp chapterResp : courseResp.getChapterRespList()) { + chapterResp.setPeriodRespList(BeanUtil.copyProperties(map.get(chapterResp.getId()), ApiCourseChapterPeriodResp.class)); + } + } + } + return Result.success(courseResp); + } } diff --git a/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/req/ApiCoursePageReq.java b/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/req/ApiCoursePageReq.java new file mode 100644 index 0000000000000000000000000000000000000000..82f5175c1a43de6e304d6f174876cc29fed319ad --- /dev/null +++ b/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/req/ApiCoursePageReq.java @@ -0,0 +1,49 @@ +package com.roncoo.education.course.service.api.req; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + *

+ * API-课程信息 + *

+ * + * @author wujing + * @date 2022-08-25 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "ApiCourseReq", description = "API-课程信息") +public class ApiCoursePageReq implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "分类ID") + private Long categoryId; + + @ApiModelProperty(value = "课程名称") + private String courseName; + + @ApiModelProperty(value = "是否免费(1:免费,0:收费)") + private Integer isFree; + + @ApiModelProperty(value = "购买人数") + private Integer countBuy; + + @ApiModelProperty(value = "学习人数") + private Integer countStudy; + /** + * 当前页 + */ + @ApiModelProperty(value = "当前页") + private Integer pageCurrent = 1; + /** + * 每页条数 + */ + @ApiModelProperty(value = "每页条数") + private Integer pageSize = 20; +} diff --git a/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/req/ApiCourseReq.java b/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/req/ApiCourseReq.java index e7baa42e5fe0a9854c8df558f98110e717b1dc4f..65837b318d5937122859764f0cceffa278f773df 100644 --- a/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/req/ApiCourseReq.java +++ b/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/req/ApiCourseReq.java @@ -1,14 +1,12 @@ package com.roncoo.education.course.service.api.req; -import com.fasterxml.jackson.annotation.JsonFormat; -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.io.Serializable; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; +import java.io.Serializable; + /** *

* API-课程信息 @@ -24,56 +22,7 @@ public class ApiCourseReq implements Serializable { private static final long serialVersionUID = 1L; - @ApiModelProperty(value = "主键") - private Long id; - - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @ApiModelProperty(value = "创建时间") - private LocalDateTime gmtCreate; - - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @ApiModelProperty(value = "修改时间") - private LocalDateTime gmtModified; - - @ApiModelProperty(value = "状态(1:正常,0:禁用)") - private Integer statusId; - - @ApiModelProperty(value = "排序") - private Integer sort; - - @ApiModelProperty(value = "讲师ID") - private Long lecturerId; - - @ApiModelProperty(value = "分类ID") - private Long categoryId; - - @ApiModelProperty(value = "课程名称") - private String courseName; - - @ApiModelProperty(value = "课程封面") - private String courseLogo; - - @ApiModelProperty(value = "课程简介") - private String introduce; - - @ApiModelProperty(value = "是否免费(1:免费,0:收费)") - private Integer isFree; - - @ApiModelProperty(value = "原价") - private BigDecimal courseOriginal; - - @ApiModelProperty(value = "优惠价") - private BigDecimal courseDiscount; - - @ApiModelProperty(value = "是否上架(1:上架,0:下架)") - private Integer isPutaway; - - @ApiModelProperty(value = "课程排序(前端显示使用)") - private Integer courseSort; - - @ApiModelProperty(value = "购买人数") - private Integer countBuy; + @ApiModelProperty(value = "课程ID") + private Long courseId; - @ApiModelProperty(value = "学习人数") - private Integer countStudy; } diff --git a/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/resp/ApiCourseChapterPeriodResp.java b/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/resp/ApiCourseChapterPeriodResp.java index b575c5f4c0563125b8307d35cf7a35544bb6e735..3acc2ce070effc20f981abfe65bdfa4b2eae2a84 100644 --- a/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/resp/ApiCourseChapterPeriodResp.java +++ b/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/resp/ApiCourseChapterPeriodResp.java @@ -1,13 +1,14 @@ package com.roncoo.education.course.service.api.resp; import com.fasterxml.jackson.annotation.JsonFormat; -import java.time.LocalDateTime; -import java.io.Serializable; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; +import java.io.Serializable; +import java.time.LocalDateTime; + /** *

* API-课时信息 @@ -34,12 +35,6 @@ public class ApiCourseChapterPeriodResp implements Serializable { @ApiModelProperty(value = "修改时间") private LocalDateTime gmtModified; - @ApiModelProperty(value = "状态(1:正常,0:禁用)") - private Integer statusId; - - @ApiModelProperty(value = "排序") - private Integer sort; - @ApiModelProperty(value = "课程ID") private Long courseId; diff --git a/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/resp/ApiCourseChapterResp.java b/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/resp/ApiCourseChapterResp.java index 0427186529dc7f4fd544afde1affa0770ef1167d..4bf180ffa3f777d1fcd96aa9c46b0d173a7c41c3 100644 --- a/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/resp/ApiCourseChapterResp.java +++ b/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/resp/ApiCourseChapterResp.java @@ -1,13 +1,15 @@ package com.roncoo.education.course.service.api.resp; import com.fasterxml.jackson.annotation.JsonFormat; -import java.time.LocalDateTime; -import java.io.Serializable; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.List; + /** *

* API-章节信息 @@ -34,12 +36,6 @@ public class ApiCourseChapterResp implements Serializable { @ApiModelProperty(value = "修改时间") private LocalDateTime gmtModified; - @ApiModelProperty(value = "状态(1:正常,0:禁用)") - private Integer statusId; - - @ApiModelProperty(value = "排序") - private Integer sort; - @ApiModelProperty(value = "课程ID") private Long courseId; @@ -51,4 +47,7 @@ public class ApiCourseChapterResp implements Serializable { @ApiModelProperty(value = "是否免费(1免费,0收费)") private Integer isFree; + + @ApiModelProperty(value = "课时信息") + private List periodRespList; } diff --git a/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/resp/ApiCourseLecturerResp.java b/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/resp/ApiCourseLecturerResp.java new file mode 100644 index 0000000000000000000000000000000000000000..defd2242f7f6aeb77ffe78d3b4b55e4fc3806871 --- /dev/null +++ b/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/resp/ApiCourseLecturerResp.java @@ -0,0 +1,41 @@ +package com.roncoo.education.course.service.api.resp; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + *

+ * ADMIN-讲师信息 + *

+ * + * @author wujing + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "ApiLecturerResp", description = "ADMIN-讲师信息查看") +public class ApiCourseLecturerResp implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键") + private Long id; + + @ApiModelProperty(value = "讲师名称") + private String lecturerName; + + @ApiModelProperty(value = "讲师手机") + private String lecturerMobile; + + @ApiModelProperty(value = "讲师职位") + private String lecturerPosition; + + @ApiModelProperty(value = "讲师头像") + private String lecturerHead; + + @ApiModelProperty(value = "简介") + private String introduce; +} diff --git a/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/resp/ApiCoursePageResp.java b/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/resp/ApiCoursePageResp.java new file mode 100644 index 0000000000000000000000000000000000000000..0ac4b3fd17c189ae298b21656f9f3056446c6823 --- /dev/null +++ b/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/resp/ApiCoursePageResp.java @@ -0,0 +1,71 @@ +package com.roncoo.education.course.service.api.resp; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + *

+ * API-课程信息 + *

+ * + * @author wujing + * @date 2022-08-25 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "ApiCourseResp", description = "API-课程信息") +public class ApiCoursePageResp implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键") + private Long id; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建时间") + private LocalDateTime gmtCreate; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "修改时间") + private LocalDateTime gmtModified; + + @ApiModelProperty(value = "讲师ID") + private Long lecturerId; + + @ApiModelProperty(value = "分类ID") + private Long categoryId; + + @ApiModelProperty(value = "课程名称") + private String courseName; + + @ApiModelProperty(value = "课程封面") + private String courseLogo; + + @ApiModelProperty(value = "课程简介") + private String introduce; + + @ApiModelProperty(value = "是否免费(1:免费,0:收费)") + private Integer isFree; + + @ApiModelProperty(value = "原价") + private BigDecimal rulingPrice; + + @ApiModelProperty(value = "优惠价") + private BigDecimal coursePrice; + + @ApiModelProperty(value = "课程排序(前端显示使用)") + private Integer courseSort; + +// @ApiModelProperty(value = "购买人数") +// private Integer countBuy; +// +// @ApiModelProperty(value = "学习人数") +// private Integer countStudy; +} diff --git a/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/resp/ApiCourseResp.java b/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/resp/ApiCourseResp.java index c4d1f93dfb315abdd3deb38a4a09417e35654316..ca82aeb56c36f7fc6d2bf8967c1903e06994a85b 100644 --- a/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/resp/ApiCourseResp.java +++ b/roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/api/resp/ApiCourseResp.java @@ -9,6 +9,7 @@ import lombok.experimental.Accessors; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; +import java.util.List; /** *

@@ -36,18 +37,6 @@ public class ApiCourseResp implements Serializable { @ApiModelProperty(value = "修改时间") private LocalDateTime gmtModified; - @ApiModelProperty(value = "状态(1:正常,0:禁用)") - private Integer statusId; - - @ApiModelProperty(value = "排序") - private Integer sort; - - @ApiModelProperty(value = "讲师ID") - private Long lecturerId; - - @ApiModelProperty(value = "分类ID") - private Long categoryId; - @ApiModelProperty(value = "课程名称") private String courseName; @@ -66,15 +55,21 @@ public class ApiCourseResp implements Serializable { @ApiModelProperty(value = "优惠价") private BigDecimal courseDiscount; - @ApiModelProperty(value = "是否上架(1:上架,0:下架)") - private Integer isPutaway; - - @ApiModelProperty(value = "课程排序(前端显示使用)") - private Integer courseSort; - @ApiModelProperty(value = "购买人数") private Integer countBuy; @ApiModelProperty(value = "学习人数") private Integer countStudy; + + @ApiModelProperty(value = "分类ID") + private Long categoryId; + + @ApiModelProperty(value = "讲师ID") + private Long lecturerId; + + @ApiModelProperty(value = "讲师信息") + private ApiCourseLecturerResp lecturerResp; + + @ApiModelProperty(value = "章节信息") + private List chapterRespList; } diff --git a/roncoo-education-course/roncoo-education-course-service/src/test/java/com/roncoo/education/course/test/CourseTest.java b/roncoo-education-course/roncoo-education-course-service/src/test/java/com/roncoo/education/course/test/CourseTest.java new file mode 100644 index 0000000000000000000000000000000000000000..02fb261576f290e13f9f46d120fa85a44c719020 --- /dev/null +++ b/roncoo-education-course/roncoo-education-course-service/src/test/java/com/roncoo/education/course/test/CourseTest.java @@ -0,0 +1,24 @@ +package com.roncoo.education.course.test; + +import com.roncoo.education.common.core.base.Result; +import com.roncoo.education.course.service.api.biz.ApiCourseBiz; +import com.roncoo.education.course.service.api.req.ApiCourseReq; +import com.roncoo.education.course.service.api.resp.ApiCourseResp; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +@Slf4j +public class CourseTest extends BaseTest { + + @Autowired + private ApiCourseBiz courseBiz; + + @Test + public void view() { + ApiCourseReq req = new ApiCourseReq(); + req.setCourseId(1080759557655564289L); + Result result = courseBiz.view(req); + log.info("course={}", result.getData()); + } +}