xinquan-api/xinquan-api-course/src/main/java/com/xinquan/course/api/domain/Course.java
@@ -4,10 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.xinquan.common.core.utils.page.PageDTO; import com.xinquan.common.core.web.domain.BaseModel; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableField; import com.xinquan.user.api.domain.AppUser; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.math.BigDecimal; @@ -112,7 +112,4 @@ @TableField("latitude") private Double latitude; @ApiModelProperty(value = "xx人已加入学习") @TableField(exist = false) private List<AppUser> listUser; } xinquan-api/xinquan-api-user/src/main/java/com/xinquan/user/api/factory/RemoteAppUserFallbackFactory.java
@@ -26,6 +26,11 @@ public RemoteAppUserService create(Throwable cause) { return new RemoteAppUserService() { @Override public R<List<String>> getUserByCourseId(Long courseId) { return R.fail("查询课程加入学习人数"); } @Override public R<AppUser> getUserByCondition(AppUserDTO dto, String source) { return R.fail("获取用户信息失败。"); } xinquan-api/xinquan-api-user/src/main/java/com/xinquan/user/api/feign/RemoteAppUserService.java
@@ -13,10 +13,7 @@ import java.util.Collection; import java.util.List; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.*; /** * @author mitao @@ -25,6 +22,9 @@ @FeignClient(contextId = "remoteAppUserService", value = ServiceNameConstants.APP_USER_SERVICE, fallbackFactory = RemoteAppUserFallbackFactory.class) public interface RemoteAppUserService { @GetMapping("/client/app-user-course/getUserByCourseId/{courseId}") R<List<String>> getUserByCourseId(@PathVariable("courseId") Long courseId); /** * 获取未注销的用户信息 * xinquan-modules/xinquan-course/src/main/java/com/xinquan/course/controller/client/ClientCourseController.java
@@ -1,21 +1,29 @@ package com.xinquan.course.controller.client; import com.alibaba.nacos.common.utils.StringUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.xinquan.common.core.constant.SecurityConstants; import com.xinquan.common.core.domain.R; import com.xinquan.common.core.utils.page.BeanUtils; import com.xinquan.common.core.utils.page.CollUtils; import com.xinquan.common.core.utils.page.PageDTO; import com.xinquan.course.domain.Course; import com.xinquan.course.api.domain.Course; import com.xinquan.course.domain.CourseChapter; import com.xinquan.course.domain.vo.ClientCourseCategoryVO; import com.xinquan.course.domain.vo.ClientCourseVO; import com.xinquan.course.service.CourseCategoryService; import com.xinquan.course.service.CourseChapterService; import com.xinquan.course.service.CourseService; import com.xinquan.system.api.RemoteBannerService; import com.xinquan.system.api.domain.vo.BannerVO; import com.xinquan.user.api.feign.RemoteAppUserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import java.util.List; import java.util.Objects; import io.swagger.models.auth.In; import lombok.RequiredArgsConstructor; @@ -24,6 +32,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; /** * <p> @@ -42,6 +52,9 @@ private final CourseCategoryService courseCategoryService; private final CourseService courseService; private final RemoteBannerService remoteBannerService; private final RemoteAppUserService appUserService; @Resource private CourseChapterService courseChapterService; /** * 获取轮播图列表 @@ -81,9 +94,35 @@ */ @GetMapping("/getPayCourseInfoById") @ApiOperation(value = "根据id获取课程详情-付费课程") public R<Course> getPayCourseInfoById(String id) { @ApiImplicitParams({ @ApiImplicitParam(value = "课程id", name = "id", required = true, dataType = "String"), @ApiImplicitParam(value = "分页参数,当前页码", name = "pageCurr", required = true, dataType = "Integer"), @ApiImplicitParam(value = "分页参数,每页数量", name = "pageSize", required = true, dataType = "Integer") }) public R<ClientCourseVO> getPayCourseInfoById(@RequestParam(value = "id")Long id, @RequestParam(value = "pageCurr", defaultValue = "1") Integer pageCurr, @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { Course byId = courseService.getById(id); ClientCourseVO clientCourseVO = new ClientCourseVO(); BeanUtils.copyProperties(byId, clientCourseVO); // 查询章节 Page<CourseChapter> page = courseChapterService.lambdaQuery() .eq(CourseChapter::getCourseId, id) .orderByDesc(CourseChapter::getSortNum) .page(new Page<>(pageCurr, pageSize)); if (CollUtils.isEmpty(page.getRecords())) { PageDTO<CourseChapter> empty = PageDTO.empty(page); clientCourseVO.setList(empty); } // 查询学习人数和头像列表 List<String> data = appUserService.getUserByCourseId(id).getData(); if (data!=null){ clientCourseVO.setCount(data.size()); } clientCourseVO.setHeaders(data); // 查询推荐课程 return R.ok(courseService.getById(id)); return R.ok(clientCourseVO); } /** xinquan-modules/xinquan-course/src/main/java/com/xinquan/course/controller/client/ClientTutorSpecialColumnController.java
@@ -7,7 +7,7 @@ import com.xinquan.common.core.utils.page.BeanUtils; import com.xinquan.common.core.utils.page.CollUtils; import com.xinquan.common.core.utils.page.PageDTO; import com.xinquan.course.domain.Course; import com.xinquan.course.api.domain.Course; import com.xinquan.course.domain.TutorSpecialColumn; import com.xinquan.course.domain.TutorSpecialColumnCourse; import com.xinquan.course.domain.vo.ClientCourseVO; xinquan-modules/xinquan-course/src/main/java/com/xinquan/course/domain/vo/ClientCourseVO.java
@@ -1,8 +1,12 @@ package com.xinquan.course.domain.vo; import com.xinquan.common.core.utils.page.PageDTO; import com.xinquan.course.domain.CourseChapter; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.math.BigDecimal; import java.util.List; import lombok.Data; /** @@ -72,4 +76,11 @@ @ApiModelProperty(value = "课程地址纬度") private Double latitude; @ApiModelProperty(value = "已学习人数") private Integer count; @ApiModelProperty(value = "头像列表") private List<String> headers; @ApiModelProperty(value = "章节列表") private PageDTO<CourseChapter> list; } xinquan-modules/xinquan-order/src/main/java/com/xinquan/order/service/impl/OrderServiceImpl.java
@@ -33,6 +33,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; /** * <p> * 订单表 服务实现类 @@ -45,10 +47,14 @@ @RequiredArgsConstructor public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService { private final RemoteMeditationService remoteMeditationService; private final RemoteCourseService remoteCourseService; private final RemoteAppUserService remoteAppUserService; private final OrderPaymentRecordService orderPaymentRecordService; @Resource private RemoteMeditationService remoteMeditationService; @Resource private RemoteCourseService remoteCourseService; @Resource private RemoteAppUserService remoteAppUserService; @Resource private OrderPaymentRecordService orderPaymentRecordService; /** * 创建待支付订单 xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserCourseController.java
@@ -1,9 +1,18 @@ package com.xinquan.user.controller.client; import org.springframework.web.bind.annotation.RequestMapping; import com.xinquan.common.core.domain.R; import com.xinquan.user.api.domain.AppUser; import com.xinquan.user.domain.AppUserCourse; import com.xinquan.user.domain.vo.AppUserVO; import com.xinquan.user.service.AppUserCourseService; import com.xinquan.user.service.AppUserService; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.List; import java.util.stream.Collectors; /** * <p> @@ -16,6 +25,26 @@ @RestController @RequestMapping("/client/app-user-course") public class ClientAppUserCourseController { @Resource private AppUserService appUserService; @Resource private AppUserCourseService appUserCourseService; /** * 远程调用 根据课程id 查询拥有课程的用户 * * @return 用户信息 * @see com.xinquan.user.domain.vo.AppUserVO */ @GetMapping("/getUserByCourseId/{courseId}") public R<List<String>> getUserByCourseId(@PathVariable("courseId") Long courseId) { List<Long> collect = appUserCourseService.lambdaQuery().eq(AppUserCourse::getCourseId, courseId).list() .stream().map(AppUserCourse::getAppUserId).collect(Collectors.toList()); // 批量查询用户头像 List<String> collect1 = appUserService.lambdaQuery().in(!collect.isEmpty(), AppUser::getId, collect).list() .stream().map(AppUser::getAvatar).collect(Collectors.toList()); return R.ok(collect1); } } xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/AppUserService.java
@@ -1,6 +1,7 @@ package com.xinquan.user.service; import com.baomidou.mybatisplus.extension.service.IService; import com.xinquan.common.core.domain.R; import com.xinquan.system.api.model.AppCaptchaBody; import com.xinquan.system.api.model.AppLoginUser; import com.xinquan.system.api.model.AppVerifyCellPhoneBody; @@ -10,6 +11,9 @@ import com.xinquan.user.domain.dto.UserAnswerDTO; import com.xinquan.user.domain.vo.AppUserVO; import com.xinquan.user.domain.vo.TagVO; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import java.util.List; import java.util.Optional; @@ -22,6 +26,9 @@ * @since 2024-08-21 */ public interface AppUserService extends IService<AppUser> { /** * 获取用户信息 *