From d061aa842106480f3a8991d83dc3b978441330ab Mon Sep 17 00:00:00 2001 From: lisy <linlangsur163@163.com> Date: 星期四, 06 七月 2023 17:52:00 +0800 Subject: [PATCH] 修改续课详情页面的支付方式展示;开始上课-课后练习接口开发 --- cloud-server-course/src/main/java/com/dsh/course/service/impl/UserVideoDetailsServiceImpl.java | 20 + cloud-server-course/src/main/java/com/dsh/course/feignclient/model/PurchaseVo.java | 37 + cloud-server-course/src/main/java/com/dsh/course/model/vo/request/UpdateCourseVideoStatusRequest.java | 20 + cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java | 226 ++++++++++ cloud-server-course/src/main/resources/mapper/PostCourseVideoMapper.xml | 26 + cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/BenefitVideoClient.java | 16 cloud-server-course/src/main/java/com/dsh/course/model/vo/response/AppUserVideoResponse.java | 34 + cloud-server-course/src/main/resources/mapper/CoursePackageStudentMapper.xml | 29 + cloud-server-activity/src/main/java/com/dsh/activity/controller/BenefitVideoController.java | 29 + cloud-server-course/src/main/java/com/dsh/course/model/vo/response/CourseOfVideoResponse.java | 37 + cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java | 2 cloud-server-course/src/main/java/com/dsh/course/model/vo/RegisterCourseVo.java | 28 + cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java | 39 + cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageStudentServiceImpl.java | 5 cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java | 4 cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackageStudentMapper.java | 3 cloud-server-course/src/main/java/com/dsh/course/mapper/PostCourseVideoMapper.java | 5 cloud-server-activity/src/main/java/com/dsh/activity/feignclient/BenefitVideoClient.java | 16 cloud-server-course/src/main/java/com/dsh/course/service/CoursePackageStudentService.java | 2 cloud-server-activity/src/main/java/com/dsh/activity/service/impl/BenefitsVideosServiceImpl.java | 20 + cloud-server-course/src/main/java/com/dsh/course/service/UserVideoDetailsService.java | 16 cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/PurchaseVo.java | 37 + cloud-server-course/src/main/resources/mapper/UserVideoDetailsMapper.xml | 32 + cloud-server-activity/src/main/java/com/dsh/activity/entity/BenefitsVideos.java | 74 +++ cloud-server-course/src/main/java/com/dsh/course/model/vo/request/CourseWithDetailsRequest.java | 16 cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java | 52 -- cloud-server-activity/src/main/java/com/dsh/activity/service/BenefitsVideosService.java | 16 cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java | 4 cloud-server-course/src/main/java/com/dsh/course/mapper/UserVideoDetailsMapper.java | 21 + cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/CourseTypeResp.java | 16 cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java | 3 /dev/null | 15 cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/model/BenefitsVideos.java | 61 +++ cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java | 5 cloud-server-activity/src/main/resources/mapper/BenefitsVideosMapper.xml | 6 cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java | 131 ++++++ cloud-server-course/src/main/java/com/dsh/course/entity/UserVideoDetails.java | 63 +++ cloud-server-activity/src/main/java/com/dsh/activity/mapper/BenefitsVideosMapper.java | 16 cloud-server-course/src/main/java/com/dsh/course/model/vo/request/CourseOfAfterRequest.java | 17 39 files changed, 1,111 insertions(+), 88 deletions(-) diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java index 6eafa94..7ff2d81 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java +++ b/cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java @@ -108,7 +108,6 @@ @PostMapping("/api/startCource/addData") @ApiOperation(value = "添加学员信息", tags = {"APP-开始上课"}) @ApiImplicitParams({ - @ApiImplicitParam(value = "学员信息", name = "stu", required = true, dataType = "int"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) @Transactional @@ -370,57 +369,6 @@ }catch (Exception e){ return ResultUtil.runErr(); } - } - - /** - * 课后视频课表 - */ - @ResponseBody - @PostMapping("/api/startCource/afterSourceDetails") - @ApiOperation(value = "课后视频课表", tags = {"APP-开始上课"}) - @ApiImplicitParams({ - @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), - @ApiImplicitParam(value = "学员id", name = "stuId", required = true, dataType = "int"), - }) - public ResultUtil queryAfterSourceDetails(@RequestParam("stuId") Integer stuId){ - try { - Integer appUserId = tokenUtil.getUserIdFormRedis(); - if(null == appUserId){ - return ResultUtil.tokenErr(); - } - // TODO: 2023/7/4 - return ResultUtil.success(); - }catch (Exception e){ - return ResultUtil.runErr(); - } - - - } - - - - /** - * 已报名课程列表 - */ - @ResponseBody - @PostMapping("/api/startCource/registeredCourses") - @ApiOperation(value = "已报名课程列表", tags = {"APP-开始上课"}) - @ApiImplicitParams({ - @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), - @ApiImplicitParam(value = "学员id", name = "stuId", required = true, dataType = "int"), - }) - public ResultUtil<List<RegisterCourseVo>> queryRegisteredCoursesDetails(@RequestParam("stuId") Integer stuId){ - try { - Integer appUserId = tokenUtil.getUserIdFormRedis(); - if(null == appUserId){ - return ResultUtil.tokenErr(); - } - return ResultUtil.success(); - }catch (Exception e){ - return ResultUtil.runErr(); - } - - } diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java index 011f6ac..0b29b58 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java +++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java @@ -27,4 +27,7 @@ @PostMapping("/base/coursePack/afterCourseTwos") List<AfterVideoVo> getAfterCourseTwos(@RequestParam("appUserId") Integer appUserId); + + @PostMapping("/base/coursePack/courseOfPurchased") + List<PurchaseVo> getAppUsersCourseData(@RequestBody Integer appUserId); } diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/CourseTypeResp.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/CourseTypeResp.java new file mode 100644 index 0000000..92901f3 --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/CourseTypeResp.java @@ -0,0 +1,16 @@ +package com.dsh.account.feignclient.course.model; + + +import lombok.Data; + +@Data +public class CourseTypeResp { + + private Integer appUserId; + + private Integer courseTypeId; + + + private String search; + +} diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/PurchaseVo.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/PurchaseVo.java new file mode 100644 index 0000000..50d3165 --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/PurchaseVo.java @@ -0,0 +1,37 @@ +package com.dsh.account.feignclient.course.model; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class PurchaseVo { + + @ApiModelProperty(value = "课包id") + private Integer courseId; + + @ApiModelProperty(value = "课包封面图") + private String packageImg; + + @ApiModelProperty(value = "课包名称") + private String courseName; + + @ApiModelProperty(value = "上课时间段") + private String courseTime; + + @ApiModelProperty(value = "授课老师id") + private Integer teacherId; + + @ApiModelProperty(value = "门店id") + private Integer storeId; + + @ApiModelProperty(value = "已上课时数") + private Integer courseNums; + + @ApiModelProperty(value = "课包状态 1=待支付 2=已购买") + private Integer courseStatus; + + @ApiModelProperty(value = "课包类型id") + private Integer courseTypeId; + +} diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java index 3bcb4d5..13c01eb 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java +++ b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java @@ -8,6 +8,7 @@ import com.dsh.account.feignclient.activity.MerChandiseClient; import com.dsh.account.feignclient.course.CoursePaymentClient; import com.dsh.account.feignclient.course.model.CourseOfStoreVo; +import com.dsh.account.feignclient.course.model.PurchaseVo; import com.dsh.account.feignclient.course.model.QueryStoreList; import com.dsh.account.feignclient.course.model.StuCourseResp; import com.dsh.account.feignclient.other.ImgConfigClient; @@ -25,6 +26,7 @@ import com.dsh.account.model.vo.classDetails.RegisteredCourse; import com.dsh.account.model.vo.classDetails.WeekedCourse; import com.dsh.account.model.vo.classDetails.classInsVo.ClassInfoVo; +import com.dsh.account.model.vo.classDetails.classInsVo.RegisterCourseVo; import com.dsh.account.model.vo.userBenefitDetail.BillingDetailsVo; import com.dsh.account.model.vo.userBenefitDetail.IndexOfUserBenefirVo; import com.dsh.account.service.TAppUserService; @@ -477,7 +479,8 @@ @Override public BillingDetailsVo queryUserBillingDetails(String yearMonth, Integer recordId) { System.out.println("账单传参:yearMonth"+yearMonth+"|"+"recordId"+recordId); - // TODO: 2023/7/4 + // TODO: 2023/7/4 账单列表 return null; } + } diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java index 3ec7783..3683a9d 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java +++ b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java @@ -354,7 +354,7 @@ @Override public ResultUtil renewClassPayment(Integer userIdFormRedis, ClasspaymentRequest request) { - // TODO: 2023/7/5 + // TODO: 2023/7/5 续课支付 switch (request.getPayType()){ case 1: WeChatPayment(); diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/controller/BenefitVideoController.java b/cloud-server-activity/src/main/java/com/dsh/activity/controller/BenefitVideoController.java new file mode 100644 index 0000000..971a10f --- /dev/null +++ b/cloud-server-activity/src/main/java/com/dsh/activity/controller/BenefitVideoController.java @@ -0,0 +1,29 @@ +package com.dsh.activity.controller; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.dsh.activity.entity.BenefitsVideos; +import com.dsh.activity.service.BenefitsVideosService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("") +public class BenefitVideoController { + + + @Autowired + private BenefitsVideosService bfvService; + + + + @PostMapping("base/benefitVideo/getList") + public BenefitsVideos getVideosWithIds(@RequestBody Integer id){ + return bfvService.getOne(new QueryWrapper<BenefitsVideos>().eq("id",id).eq("state",1)); + } + + +} diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/entity/BenefitsVideos.java b/cloud-server-activity/src/main/java/com/dsh/activity/entity/BenefitsVideos.java new file mode 100644 index 0000000..b603c57 --- /dev/null +++ b/cloud-server-activity/src/main/java/com/dsh/activity/entity/BenefitsVideos.java @@ -0,0 +1,74 @@ +package com.dsh.activity.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * <p> + * 福利视频 + * </p> + * + * @author jqs + * @since 2023-07-06 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("t_benefits_videos") +public class BenefitsVideos extends Model<BenefitsVideos> { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + /** + * 分类id + */ + private Integer benefitsVideoClassificationId; + /** + * 视频名称 + */ + private String name; + /** + * 视频封面 + */ + private String cover; + /** + * 视频简介 + */ + private String introduction; + /** + * 视频地址 + */ + private String videos; + /** + * 可得积分 + */ + private String integral; + /** + * 状态(1=正常,2=冻结,3=删除) + */ + private Integer state; + /** + * 添加时间 + */ + private Date insertTime; + + + @Override + protected Serializable pkVal() { + return this.id; + } + +} diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/BenefitVideoClient.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/BenefitVideoClient.java new file mode 100644 index 0000000..3000806 --- /dev/null +++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/BenefitVideoClient.java @@ -0,0 +1,16 @@ +package com.dsh.activity.feignclient; + +import com.dsh.activity.entity.BenefitsVideos; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +@FeignClient(value = "mb-cloud-activity") +public interface BenefitVideoClient { + + + @PostMapping("base/benefitVideo/getList") + BenefitsVideos getVideosWithIds(@RequestBody Integer id); + + +} diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/mapper/BenefitsVideosMapper.java b/cloud-server-activity/src/main/java/com/dsh/activity/mapper/BenefitsVideosMapper.java new file mode 100644 index 0000000..eaa063c --- /dev/null +++ b/cloud-server-activity/src/main/java/com/dsh/activity/mapper/BenefitsVideosMapper.java @@ -0,0 +1,16 @@ +package com.dsh.activity.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dsh.activity.entity.BenefitsVideos; + +/** + * <p> + * 福利视频 Mapper 接口 + * </p> + * + * @author jqs + * @since 2023-07-06 + */ +public interface BenefitsVideosMapper extends BaseMapper<BenefitsVideos> { + +} diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/service/BenefitsVideosService.java b/cloud-server-activity/src/main/java/com/dsh/activity/service/BenefitsVideosService.java new file mode 100644 index 0000000..4727bae --- /dev/null +++ b/cloud-server-activity/src/main/java/com/dsh/activity/service/BenefitsVideosService.java @@ -0,0 +1,16 @@ +package com.dsh.activity.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dsh.activity.entity.BenefitsVideos; + +/** + * <p> + * 福利视频 服务类 + * </p> + * + * @author jqs + * @since 2023-07-06 + */ +public interface BenefitsVideosService extends IService<BenefitsVideos> { + +} diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/BenefitsVideosServiceImpl.java b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/BenefitsVideosServiceImpl.java new file mode 100644 index 0000000..1a7dc72 --- /dev/null +++ b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/BenefitsVideosServiceImpl.java @@ -0,0 +1,20 @@ +package com.dsh.activity.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dsh.activity.entity.BenefitsVideos; +import com.dsh.activity.mapper.BenefitsVideosMapper; +import com.dsh.activity.service.BenefitsVideosService; +import org.springframework.stereotype.Service; + +/** + * <p> + * 福利视频 服务实现类 + * </p> + * + * @author jqs + * @since 2023-07-06 + */ +@Service +public class BenefitsVideosServiceImpl extends ServiceImpl<BenefitsVideosMapper, BenefitsVideos> implements BenefitsVideosService { + +} diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/web/PointsMerchandiseController.java b/cloud-server-activity/src/main/java/com/dsh/activity/web/PointsMerchandiseController.java deleted file mode 100644 index df6ec49..0000000 --- a/cloud-server-activity/src/main/java/com/dsh/activity/web/PointsMerchandiseController.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.dsh.activity.web; - - -import org.springframework.web.bind.annotation.RequestMapping; - -import org.springframework.web.bind.annotation.RestController; - -/** - * <p> - * 积分商品 前端控制器 - * </p> - * - * @author jqs - * @since 2023-07-04 - */ -@RestController -@RequestMapping("/points-merchandise") -public class PointsMerchandiseController { - -} - diff --git a/cloud-server-activity/src/main/resources/mapper/BenefitsVideosMapper.xml b/cloud-server-activity/src/main/resources/mapper/BenefitsVideosMapper.xml new file mode 100644 index 0000000..8350761 --- /dev/null +++ b/cloud-server-activity/src/main/resources/mapper/BenefitsVideosMapper.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.dsh.activity.mapper.BenefitsVideosMapper"> + + +</mapper> diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java index a31e3d3..8cfb4a1 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java +++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java @@ -5,20 +5,31 @@ import com.dsh.course.entity.TCoursePackage; import com.dsh.course.entity.TCoursePackageDiscount; import com.dsh.course.entity.TCoursePackagePayment; +import com.dsh.course.entity.TCoursePackageType; import com.dsh.course.feignclient.model.*; +import com.dsh.course.model.BaseVo; import com.dsh.course.model.dto.DiscountJsonDto; import com.dsh.course.model.vo.CourseDetailRequest; -import com.dsh.course.service.PostCourseVideoService; -import com.dsh.course.service.TCoursePackageDiscountService; -import com.dsh.course.service.TCoursePackagePaymentService; -import com.dsh.course.service.TCoursePackageService; +import com.dsh.course.model.vo.RegisterCourseVo; +import com.dsh.course.model.vo.request.CourseOfAfterRequest; +import com.dsh.course.model.vo.request.CourseWithDetailsRequest; +import com.dsh.course.model.vo.request.UpdateCourseVideoStatusRequest; +import com.dsh.course.model.vo.response.AppUserVideoResponse; +import com.dsh.course.model.vo.response.CourseOfVideoResponse; +import com.dsh.course.service.*; import com.dsh.course.util.DateUtil; +import com.dsh.course.util.ResultUtil; import com.dsh.course.util.StrUtils; +import com.dsh.course.util.TokenUtil; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -49,6 +60,18 @@ @Autowired private PostCourseVideoService pcvService; + + @Autowired + private CoursePackageStudentService cpsService; + + @Autowired + private CancelledClassesService cacService; + + @Autowired + private TCoursePackageTypeService coursePackageTypeService; + + @Autowired + private TokenUtil tokenUtil; private final SimpleDateFormat format = new SimpleDateFormat("MM-dd HH:mm"); @@ -221,7 +244,7 @@ } courseVo.setCourseTime(coursePackage.getClassStartTime()+"-"+coursePackage.getClassEndTime()); - String payType = tCoursePackagePayment.getPayType(); + Integer payType = tCoursePackagePayment.getPayType(); BigDecimal cashPayment = tCoursePackagePayment.getCashPayment(); double cashPaymentValue = cashPayment.doubleValue(); Integer playPaiCoin = tCoursePackagePayment.getPlayPaiCoin(); @@ -240,16 +263,12 @@ throw new RuntimeException(e); } switch (payType) { - case "1;2": - courseVo.setAmount(cashPaymentValue); - courseVo.setVipAmount(discountMember); - courseVo.setWpGold(playPaiCoin); - break; - case "1": + case 1: + case 2: courseVo.setAmount(cashPaymentValue); courseVo.setVipAmount(discountMember); break; - case "2": + case 3: courseVo.setWpGold(playPaiCoin); break; } @@ -266,11 +285,194 @@ List<TCoursePackagePayment> tCoursePackagePayments = packagePaymentService.queryAllCoursePackage(null,null,null,null,appUserId); List<Integer> coursePackageIds = tCoursePackagePayments.stream().map(TCoursePackagePayment::getCoursePackageId).collect(Collectors.toList()); // List<PostCourseVideo> videoList = pcvService.queryAllVideoNoneShow(coursePackageIds); + // TODO: 2023/7/6 两个课后视频 return videoVos; } + @ResponseBody + @PostMapping("/api/course/queryArrangeCourseList") + @ApiOperation(value = "获取布置课程列表", tags = {"APP-课程列表"}) + @ApiImplicitParams({ + }) + public ResultUtil<List<BaseVo>> queryArrangePackageType(){ + try { + Integer appUserId = tokenUtil.getUserIdFormRedis(); + if(null == appUserId){ + return ResultUtil.tokenErr(); + } + List<TCoursePackagePayment> tCoursePackagePayments = packagePaymentService.queryAllCoursePackage(null,null,null,null,appUserId); + List<BaseVo> list = new ArrayList<>(); + tCoursePackagePayments.forEach(c -> { + BaseVo baseVo = new BaseVo(); + baseVo.setId(c.getCoursePackageId()); + TCoursePackage coursePackage = tcpService.getById(c.getCoursePackageId()); + baseVo.setName(coursePackage.getName()); + list.add(baseVo); + }); + return ResultUtil.success(); + }catch (Exception e){ + e.printStackTrace(); + return ResultUtil.runErr(); + } + } + + + /** + * 课后视频课表 + */ + @ResponseBody + @PostMapping("/api/startCource/afterSourceList") + @ApiOperation(value = "课后视频课表", tags = {"APP-开始上课"}) + @ApiImplicitParams({ + @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), + @ApiImplicitParam(name = "search",value = "视频名称", required = true, dataType = "int"), + }) + public ResultUtil<List<AppUserVideoResponse>> queryAfterSourceList(@RequestBody CourseOfAfterRequest search){ + try { + Integer appUserId = tokenUtil.getUserIdFormRedis(); + + if(null == appUserId){ + return ResultUtil.tokenErr(); + } + List<Integer> courseIds = new ArrayList<>(); + List<TCoursePackagePayment> tCoursePackagePayments = packagePaymentService.queryAllCoursePackage(null,null,search.getCourseTypeId(),null,appUserId); + if (tCoursePackagePayments.size() > 0 ){ + courseIds = tCoursePackagePayments.stream().map(TCoursePackagePayment::getCoursePackageId).collect(Collectors.toList()); + } + return ResultUtil.success(packagePaymentService.queryAfterVideo(search,courseIds)); + }catch (Exception e){ + return ResultUtil.runErr(); + } + } + + /** + * 课后视频详情 + */ + @ResponseBody + @PostMapping("/api/startCource/afterSourceDetail") + @ApiOperation(value = "课后视频详情", tags = {"APP-开始上课"}) + @ApiImplicitParams({ + @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), + @ApiImplicitParam(name = "search",value = "视频名称", required = true, dataType = "int"), + }) + public ResultUtil<CourseOfVideoResponse> queryAfterSourceDetails(@RequestBody CourseWithDetailsRequest detailsRequest){ + try { + Integer appUserId = tokenUtil.getUserIdFormRedis(); + if(null == appUserId){ + return ResultUtil.tokenErr(); + } + return ResultUtil.success(packagePaymentService.queryVideoDetails(detailsRequest,appUserId)); + }catch (Exception e){ + return ResultUtil.runErr(); + } + } + + + /** + * 更新课后视频学习状态 + */ + @ResponseBody + @PostMapping("/api/startCource/updateVideoStatus") + @ApiOperation(value = "更新课后视频学习状态", tags = {"APP-开始上课"}) + @ApiImplicitParams({ + @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), + @ApiImplicitParam(name = "search",value = "视频名称", required = true, dataType = "int"), + }) + public ResultUtil updateVideoStatus(@RequestBody UpdateCourseVideoStatusRequest detailsRequest){ + try { + Integer appUserId = tokenUtil.getUserIdFormRedis(); + if(null == appUserId){ + return ResultUtil.tokenErr(); + } + return ResultUtil.success(packagePaymentService.updateVideoStatus(detailsRequest,appUserId)); + }catch (Exception e){ + return ResultUtil.runErr(); + } + } + + + + @ResponseBody + @PostMapping("/api/course/getCourseAppUserDetails") + @ApiOperation(value = "已报名课程-获取课程类型列表", tags = {"APP-课程列表"}) + @ApiImplicitParams({ + }) + public ResultUtil<List<BaseVo>> queryCoursePackageType(){ + try { + List<TCoursePackageType> coursePackageTypes = coursePackageTypeService.list(new QueryWrapper<TCoursePackageType>().eq("state", 1)); + List<BaseVo> list = new ArrayList<>(); + coursePackageTypes.forEach(c -> { + BaseVo baseVo = new BaseVo(); + BeanUtils.copyProperties(c, baseVo); + list.add(baseVo); + }); + return ResultUtil.success(list); + }catch (Exception e){ + e.printStackTrace(); + return ResultUtil.runErr(); + } + } + +// +// @PostMapping("/base/coursePack/courseOfPurchased") +// public List<PurchaseVo> getAppUsersCourseData(@RequestBody Integer appUserId){ +// List<PurchaseVo> voList = new ArrayList<>(); +//// 查询够课包记录 +// List<TCoursePackagePayment> tCoursePackagePayments = packagePaymentService.queryAllCoursePackage(null,null,null,null,appUserId); +// //查询上课记录 +// List<Integer> coursePackageIds = tCoursePackagePayments.stream().map(TCoursePackagePayment::getCoursePackageId).collect(Collectors.toList()); +// List<CoursePackageStudent> packageStudents = cpsService.queryAppUserOfStuAttendClass(appUserId,coursePackageIds); +// Map<Integer, Long> collect = packageStudents.stream() +// .collect(Collectors.groupingBy(CoursePackageStudent::getCoursePackageId, Collectors.counting())); +// +// if (tCoursePackagePayments.size() > 0){ +// for (TCoursePackagePayment tCoursePackagePayment : tCoursePackagePayments) { +// TCoursePackage coursePackage = tcpService.getById(tCoursePackagePayment.getCoursePackageId()); +// PurchaseVo purchaseVo = new PurchaseVo(); +// purchaseVo.setCourseId(tCoursePackagePayment.getCoursePackageId()); +// purchaseVo.setCourseName(coursePackage.getName()); +// purchaseVo.setCourseTime(coursePackage.getClassStartTime()+"-"+coursePackage.getClassEndTime()); +// purchaseVo.setStoreId(coursePackage.getStoreId()); +// purchaseVo.setTeacherId(coursePackage.getCoachId()); +// purchaseVo.setPackageImg(coursePackage.getCoverDrawing()); +// purchaseVo.setCourseStatus(tCoursePackagePayment.getPayStatus()); +// purchaseVo.setCourseTypeId(coursePackage.getCoursePackageTypeId()); +// for (Map.Entry<Integer, Long> entry : collect.entrySet()) { +// int coursePackageId = entry.getKey(); +// if (tCoursePackagePayment.getCoursePackageId() == coursePackageId) { +// purchaseVo.setCourseNums((int) (entry.getValue()*2)); +// } +// } +// voList.add(purchaseVo); +// } +// } +// return voList; +// } + + + /** + * 已报名课程列表 + */ + @ResponseBody + @PostMapping("/api/startCource/registeredCourses") + @ApiOperation(value = "已报名课程-课程列表", tags = {"APP-开始上课"}) + @ApiImplicitParams({ + @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), + }) + public ResultUtil<List<RegisterCourseVo>> queryRegisteredCoursesDetails(@RequestBody CourseOfAfterRequest courseTypeId){ + try { + Integer appUserId = tokenUtil.getUserIdFormRedis(); + if(null == appUserId){ + return ResultUtil.tokenErr(); + } + return ResultUtil.success(packagePaymentService.queryRegisteredCourseList(courseTypeId,appUserId)); + }catch (Exception e){ + return ResultUtil.runErr(); + } + + } diff --git a/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java b/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java index 2869623..73366c1 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java +++ b/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java @@ -43,9 +43,9 @@ */ private Integer coursePackageId; /** - * 支付方式(1=现金,2=玩湃币) + * 支付方式(1=微信,2=支付宝,3=玩湃币) */ - private String payType; + private Integer payType; /** * 课时数 */ diff --git a/cloud-server-course/src/main/java/com/dsh/course/entity/UserVideoDetails.java b/cloud-server-course/src/main/java/com/dsh/course/entity/UserVideoDetails.java new file mode 100644 index 0000000..fbbc9fe --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/entity/UserVideoDetails.java @@ -0,0 +1,63 @@ +package com.dsh.course.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * <p> + * 用户观看视频记录 + * </p> + * + * @author jqs + * @since 2023-07-06 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("t_user_video_details") +public class UserVideoDetails extends Model<UserVideoDetails> { + + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + private Integer id; + /** + * 用户id + */ + private Integer appUserId; + /** + * 课包id + */ + private Integer coursePackageId; + /** + * 课后视频id + */ + private Integer courseId; + /** + * 状态(1未学习 2已学习) + */ + private Integer state; + /** + * 添加时间 + */ + private Date insertTime; + /** + * 更新时间 + */ + private Date updateTime; + + + @Override + protected Serializable pkVal() { + return this.id; + } + +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java index 467c16d..020e7b7 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java +++ b/cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java @@ -28,4 +28,8 @@ @PostMapping("/base/coursePack/afterCourseTwos") List<AfterVideoVo> getAfterCourseTwos(@RequestParam("appUserId") Integer appUserId); + + @PostMapping("/base/coursePack/courseOfPurchased") + public List<PurchaseVo> getAppUsersCourseData(@RequestBody Integer appUserId); + } diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/BenefitVideoClient.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/BenefitVideoClient.java new file mode 100644 index 0000000..2910ddd --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/BenefitVideoClient.java @@ -0,0 +1,16 @@ +package com.dsh.course.feignclient.activity; + +import com.dsh.course.feignclient.activity.model.BenefitsVideos; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +@FeignClient(value = "mb-cloud-activity") +public interface BenefitVideoClient { + + + @PostMapping("base/benefitVideo/getList") + BenefitsVideos getVideosWithIds(@RequestBody Integer id); + + +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/model/BenefitsVideos.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/model/BenefitsVideos.java new file mode 100644 index 0000000..3382f47 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/model/BenefitsVideos.java @@ -0,0 +1,61 @@ +package com.dsh.course.feignclient.activity.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.util.Date; + +/** + * <p> + * 福利视频 + * </p> + * + * @author jqs + * @since 2023-07-06 + */ +@Data +public class BenefitsVideos { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + /** + * 分类id + */ + private Integer benefitsVideoClassificationId; + /** + * 视频名称 + */ + private String name; + /** + * 视频封面 + */ + private String cover; + /** + * 视频简介 + */ + private String introduction; + /** + * 视频地址 + */ + private String videos; + /** + * 可得积分 + */ + private String integral; + /** + * 状态(1=正常,2=冻结,3=删除) + */ + private Integer state; + /** + * 添加时间 + */ + private Date insertTime; + + +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/model/PurchaseVo.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/model/PurchaseVo.java new file mode 100644 index 0000000..887dfde --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/feignclient/model/PurchaseVo.java @@ -0,0 +1,37 @@ +package com.dsh.course.feignclient.model; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class PurchaseVo { + + @ApiModelProperty(value = "课包id") + private Integer courseId; + + @ApiModelProperty(value = "课包封面图") + private String packageImg; + + @ApiModelProperty(value = "课包名称") + private String courseName; + + @ApiModelProperty(value = "上课时间段") + private String courseTime; + + @ApiModelProperty(value = "授课老师id") + private Integer teacherId; + + @ApiModelProperty(value = "门店id") + private Integer storeId; + + @ApiModelProperty(value = "已上课时数") + private Integer courseNums; + + @ApiModelProperty(value = "课包状态 1=待支付 2=已购买") + private Integer courseStatus; + + @ApiModelProperty(value = "课包类型id") + private Integer courseTypeId; + +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackageStudentMapper.java b/cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackageStudentMapper.java index d686cf9..6cbe8f6 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackageStudentMapper.java +++ b/cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackageStudentMapper.java @@ -20,4 +20,7 @@ @Param("stuId") Integer stuId, @Param("appUserId") Integer appUserId); + List<CoursePackageStudent> queryAppUserOfStuAttendClass(@Param("appUserId")Integer appUserId, + @Param("coursePackageIds")List<Integer> coursePackageIds); + } diff --git a/cloud-server-course/src/main/java/com/dsh/course/mapper/PostCourseVideoMapper.java b/cloud-server-course/src/main/java/com/dsh/course/mapper/PostCourseVideoMapper.java index e4a31e5..13370a0 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/mapper/PostCourseVideoMapper.java +++ b/cloud-server-course/src/main/java/com/dsh/course/mapper/PostCourseVideoMapper.java @@ -2,6 +2,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dsh.course.entity.PostCourseVideo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * <p> @@ -13,4 +16,6 @@ */ public interface PostCourseVideoMapper extends BaseMapper<PostCourseVideo> { + List<PostCourseVideo> queryPostCourseVideolist(@Param("courseIds") List<Integer> courseIds); + } diff --git a/cloud-server-course/src/main/java/com/dsh/course/mapper/UserVideoDetailsMapper.java b/cloud-server-course/src/main/java/com/dsh/course/mapper/UserVideoDetailsMapper.java new file mode 100644 index 0000000..e17bb0b --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/mapper/UserVideoDetailsMapper.java @@ -0,0 +1,21 @@ +package com.dsh.course.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dsh.course.entity.UserVideoDetails; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * <p> + * 用户观看视频记录 Mapper 接口 + * </p> + * + * @author jqs + * @since 2023-07-06 + */ +public interface UserVideoDetailsMapper extends BaseMapper<UserVideoDetails> { + + List<UserVideoDetails> queryAppUserWatchVideo(@Param("videoIds") List<Integer> videoIds); + +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/vo/RegisterCourseVo.java b/cloud-server-course/src/main/java/com/dsh/course/model/vo/RegisterCourseVo.java new file mode 100644 index 0000000..3dc6361 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/model/vo/RegisterCourseVo.java @@ -0,0 +1,28 @@ +package com.dsh.course.model.vo; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class RegisterCourseVo { + + @ApiModelProperty(value = "课包id") + private Integer coursePackageId; + + @ApiModelProperty(value = "课包封面图") + private String packageImg; + + @ApiModelProperty(value = "课包名称+门店名称") + private String courseNameStore; + + @ApiModelProperty(value = "上课时间段") + private String courseTime; + + @ApiModelProperty(value = "授课老师") + private String courseTeacher; + + @ApiModelProperty(value = "已上课时数") + private Integer courseNums; + +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/vo/StuCourseRequest.java b/cloud-server-course/src/main/java/com/dsh/course/model/vo/StuCourseRequest.java deleted file mode 100644 index 2a2eec6..0000000 --- a/cloud-server-course/src/main/java/com/dsh/course/model/vo/StuCourseRequest.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.dsh.course.model.vo; - - -import lombok.Data; - -@Data -public class StuCourseRequest { - - Integer courseId; - - Integer stuId; - - Integer appUserId; - -} diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/vo/request/CourseOfAfterRequest.java b/cloud-server-course/src/main/java/com/dsh/course/model/vo/request/CourseOfAfterRequest.java new file mode 100644 index 0000000..5feaa4d --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/model/vo/request/CourseOfAfterRequest.java @@ -0,0 +1,17 @@ +package com.dsh.course.model.vo.request; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class CourseOfAfterRequest { + + @ApiModelProperty(value = "课程类型id",dataType = "int",required = false) + private Integer courseTypeId; + + @ApiModelProperty(value = "课程名称/门店名称",dataType = "string",required = false) + private String search; + + +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/vo/request/CourseWithDetailsRequest.java b/cloud-server-course/src/main/java/com/dsh/course/model/vo/request/CourseWithDetailsRequest.java new file mode 100644 index 0000000..e10b741 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/model/vo/request/CourseWithDetailsRequest.java @@ -0,0 +1,16 @@ +package com.dsh.course.model.vo.request; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class CourseWithDetailsRequest { + + @ApiModelProperty(value = "视频id") + private Integer videoId; + + @ApiModelProperty(value = "课包id") + private Integer coursePackageId; + +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/vo/request/UpdateCourseVideoStatusRequest.java b/cloud-server-course/src/main/java/com/dsh/course/model/vo/request/UpdateCourseVideoStatusRequest.java new file mode 100644 index 0000000..bee3540 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/model/vo/request/UpdateCourseVideoStatusRequest.java @@ -0,0 +1,20 @@ +package com.dsh.course.model.vo.request; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class UpdateCourseVideoStatusRequest { + + + @ApiModelProperty(value = "视频id") + private Integer videoId; + + @ApiModelProperty(value = "课包id") + private Integer coursePackageId; + + @ApiModelProperty(value = "是否看完 1是 2否") + private Integer isOver; + +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/vo/response/AppUserVideoResponse.java b/cloud-server-course/src/main/java/com/dsh/course/model/vo/response/AppUserVideoResponse.java new file mode 100644 index 0000000..49065dc --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/model/vo/response/AppUserVideoResponse.java @@ -0,0 +1,34 @@ +package com.dsh.course.model.vo.response; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AppUserVideoResponse { + + @ApiModelProperty(value = "视频id") + private Integer videoId; + + @ApiModelProperty(value = "课包id") + private Integer coursePackageId; + + @ApiModelProperty(value = "封面图") + private String coverImage; + + @ApiModelProperty(value = "视频名称") + private String videoName; + + @ApiModelProperty(value = "布置课程名称") + private String packageName; + + @ApiModelProperty(value = "简介") + private String synopsis; + + @ApiModelProperty(value = "可得积分") + private String integral; + + @ApiModelProperty(value = "学习状态 1未学习 2已学习") + private Integer studyStatus; + +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/vo/response/CourseOfVideoResponse.java b/cloud-server-course/src/main/java/com/dsh/course/model/vo/response/CourseOfVideoResponse.java new file mode 100644 index 0000000..cc156f2 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/model/vo/response/CourseOfVideoResponse.java @@ -0,0 +1,37 @@ +package com.dsh.course.model.vo.response; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class CourseOfVideoResponse { + + @ApiModelProperty(value = "视频id") + private Integer videoId; + + @ApiModelProperty(value = "课包id") + private Integer coursePackageId; + + @ApiModelProperty(value = "视频url") + private String videoURL; + + @ApiModelProperty(value = "视频名称") + private String videoName; + + @ApiModelProperty(value = "可得积分") + private String integral; + + @ApiModelProperty(value = "学习状态 1未学习 2已学习") + private Integer studyStatus; + + @ApiModelProperty(value = "布置课程名称") + private String packageName; + + @ApiModelProperty(value = "视频简介") + private String synopsis; + + @ApiModelProperty(value = "课程介绍图片") + private String detailedDiagram; + +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/CoursePackageStudentService.java b/cloud-server-course/src/main/java/com/dsh/course/service/CoursePackageStudentService.java index ba01211..98b24c4 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/service/CoursePackageStudentService.java +++ b/cloud-server-course/src/main/java/com/dsh/course/service/CoursePackageStudentService.java @@ -17,4 +17,6 @@ List<CoursePackageStudent> queryStuDeduClassHourNums(Integer courseId, Integer stuId, Integer appUserId); + List<CoursePackageStudent> queryAppUserOfStuAttendClass(Integer appUserId, List<Integer> coursePackageIds); + } diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java b/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java index db11bfd..616f8ba 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java +++ b/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java @@ -2,6 +2,12 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.dsh.course.entity.TCoursePackagePayment; +import com.dsh.course.model.vo.RegisterCourseVo; +import com.dsh.course.model.vo.request.CourseOfAfterRequest; +import com.dsh.course.model.vo.request.CourseWithDetailsRequest; +import com.dsh.course.model.vo.request.UpdateCourseVideoStatusRequest; +import com.dsh.course.model.vo.response.AppUserVideoResponse; +import com.dsh.course.model.vo.response.CourseOfVideoResponse; import java.util.Date; import java.util.List; @@ -25,4 +31,37 @@ * @return */ Integer queryCountNumber(Integer coursePackageId); + + /** + * 查询课包发布的课后视频列表 + * @param search + * @param courseIds + * @return + */ + List<AppUserVideoResponse> queryAfterVideo(CourseOfAfterRequest search,List<Integer> courseIds); + + /** + * 获取课后视频详情 + * @param detailsRequest + * @param appUserId + * @return + */ + CourseOfVideoResponse queryVideoDetails(CourseWithDetailsRequest detailsRequest,Integer appUserId); + + /** + * 更新视频学习状态 + * @param detailsRequest + * @param appUserId + * @return + */ + String updateVideoStatus(UpdateCourseVideoStatusRequest detailsRequest, Integer appUserId); + + /** + * 获取用户已报名课程 + * @param courseTypeId + * @param appUserId + * @return + */ + List<RegisterCourseVo> queryRegisteredCourseList(CourseOfAfterRequest courseTypeId, Integer appUserId); + } diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/UserVideoDetailsService.java b/cloud-server-course/src/main/java/com/dsh/course/service/UserVideoDetailsService.java new file mode 100644 index 0000000..6805af7 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/service/UserVideoDetailsService.java @@ -0,0 +1,16 @@ +package com.dsh.course.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dsh.course.entity.UserVideoDetails; + +/** + * <p> + * 用户观看视频记录 服务类 + * </p> + * + * @author jqs + * @since 2023-07-06 + */ +public interface UserVideoDetailsService extends IService<UserVideoDetails> { + +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageStudentServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageStudentServiceImpl.java index ba33ad3..db6ace9 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageStudentServiceImpl.java +++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageStudentServiceImpl.java @@ -23,4 +23,9 @@ public List<CoursePackageStudent> queryStuDeduClassHourNums(Integer courseId, Integer stuId, Integer appUserId) { return this.baseMapper.queryStuDeduClassHourNums(courseId,stuId,appUserId); } + + @Override + public List<CoursePackageStudent> queryAppUserOfStuAttendClass(Integer appUserId, List<Integer> coursePackageIds) { + return this.baseMapper.queryAppUserOfStuAttendClass(appUserId,coursePackageIds); + } } diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java index f61dff9..04628c9 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java +++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java @@ -1,13 +1,31 @@ package com.dsh.course.service.impl; -import com.dsh.course.entity.TCoursePackagePayment; -import com.dsh.course.mapper.TCoursePackagePaymentMapper; -import com.dsh.course.service.TCoursePackagePaymentService; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dsh.course.entity.PostCourseVideo; +import com.dsh.course.entity.TCoursePackage; +import com.dsh.course.entity.TCoursePackagePayment; +import com.dsh.course.entity.UserVideoDetails; +import com.dsh.course.feignclient.activity.BenefitVideoClient; +import com.dsh.course.feignclient.activity.model.BenefitsVideos; +import com.dsh.course.mapper.PostCourseVideoMapper; +import com.dsh.course.mapper.TCoursePackageMapper; +import com.dsh.course.mapper.TCoursePackagePaymentMapper; +import com.dsh.course.mapper.UserVideoDetailsMapper; +import com.dsh.course.model.vo.RegisterCourseVo; +import com.dsh.course.model.vo.request.CourseOfAfterRequest; +import com.dsh.course.model.vo.request.CourseWithDetailsRequest; +import com.dsh.course.model.vo.request.UpdateCourseVideoStatusRequest; +import com.dsh.course.model.vo.response.AppUserVideoResponse; +import com.dsh.course.model.vo.response.CourseOfVideoResponse; +import com.dsh.course.service.TCoursePackagePaymentService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.Date; -import java.util.List; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; /** * <p> @@ -19,6 +37,22 @@ */ @Service public class TCoursePackagePaymentServiceImpl extends ServiceImpl<TCoursePackagePaymentMapper, TCoursePackagePayment> implements TCoursePackagePaymentService { + + + @Autowired + BenefitVideoClient bfvoClient; + + + @Autowired + private UserVideoDetailsMapper uvdmapper; + + @Autowired + private PostCourseVideoMapper pcvMapper; + + @Autowired + private TCoursePackageMapper tcpmapper; + + @Override public List<TCoursePackagePayment> queryAllCoursePackage(Date startTime, Date endTime , Integer coursePackId, Integer stuId, Integer appUserId) { @@ -34,4 +68,91 @@ public Integer queryCountNumber(Integer coursePackageId) { return this.baseMapper.queryCountNumber(coursePackageId); } + + @Override + public List<AppUserVideoResponse> queryAfterVideo(CourseOfAfterRequest search,List<Integer> courseIds) { + List<AppUserVideoResponse> responses = new ArrayList<>(); + List<PostCourseVideo> videoList = pcvMapper.queryPostCourseVideolist(courseIds); + if (videoList.size() > 0){ + List<Integer> videoIds = videoList.stream().map(PostCourseVideo::getCourseId).collect(Collectors.toList()); + List<UserVideoDetails> userVideoDetails = uvdmapper.queryAppUserWatchVideo(videoIds); + if (userVideoDetails.size() > 0){ + for (UserVideoDetails userVideoDetail : userVideoDetails) { + AppUserVideoResponse response = new AppUserVideoResponse(); + TCoursePackage coursePackage = tcpmapper.selectById(userVideoDetail.getCoursePackageId()); + response.setPackageName(coursePackage.getName()); + response.setCoursePackageId(userVideoDetail.getCoursePackageId()); + BenefitsVideos videosWithIds = bfvoClient.getVideosWithIds(userVideoDetail.getCourseId()); + response.setVideoId(userVideoDetail.getCourseId()); + response.setCoverImage(videosWithIds.getCover()); + if (null != search.getSearch()){ +// 根据正则模糊匹配 + String pattern = ".*" + search.getSearch() + ".*"; + Pattern regex = Pattern.compile(pattern); + Matcher matcher = regex.matcher(videosWithIds.getName()); + if (matcher.matches()) { + response.setVideoName(videosWithIds.getName()); + } + }else { + response.setVideoName(videosWithIds.getName()); + } + response.setSynopsis(videosWithIds.getIntroduction()); + response.setIntegral(videosWithIds.getIntegral()); + response.setStudyStatus(userVideoDetail.getState()); + responses.add(response); + } + Collections.sort(responses, Comparator.comparing(AppUserVideoResponse::getStudyStatus)); + } + } + return responses; + } + + @Override + public CourseOfVideoResponse queryVideoDetails(CourseWithDetailsRequest detailsRequest,Integer appUserId) { + CourseOfVideoResponse response = new CourseOfVideoResponse(); + BenefitsVideos videosWithIds = bfvoClient.getVideosWithIds(detailsRequest.getVideoId()); + TCoursePackage coursePackage = tcpmapper.selectById(detailsRequest.getCoursePackageId()); + if (null != videosWithIds && null != coursePackage){ + response.setCoursePackageId(coursePackage.getId()); + response.setVideoId(videosWithIds.getId()); + response.setVideoURL(videosWithIds.getVideos()); + response.setVideoName(videosWithIds.getName()); + response.setIntegral(videosWithIds.getIntegral()); + UserVideoDetails userVideoDetails = uvdmapper.selectOne(new QueryWrapper<UserVideoDetails>() + .eq("appUserId",appUserId ) + .eq("coursePackageId",coursePackage.getId()) + .eq("courseId",videosWithIds.getId())); + + response.setStudyStatus(userVideoDetails.getState()); + response.setPackageName(coursePackage.getName()); + response.setSynopsis(videosWithIds.getIntroduction()); + response.setDetailedDiagram(coursePackage.getIntroduceDrawing()); + } + + return response; + } + + @Override + public String updateVideoStatus(UpdateCourseVideoStatusRequest detailsRequest, Integer appUserId) { + UserVideoDetails userVideoDetails = uvdmapper.selectOne(new QueryWrapper<UserVideoDetails>() + .eq("appUserId",appUserId ) + .eq("coursePackageId",detailsRequest.getCoursePackageId()) + .eq("courseId",detailsRequest.getVideoId()) + ); + if (null != userVideoDetails && userVideoDetails.getState() ==1 && detailsRequest.getIsOver() == 1){ + userVideoDetails.setState(2); + userVideoDetails.setUpdateTime(new Date()); + uvdmapper.updateById(userVideoDetails); + return "SUCCESS"; + } + return null; + } + + @Override + public List<RegisterCourseVo> queryRegisteredCourseList(CourseOfAfterRequest courseTypeId, Integer appUserId) { + // TODO: 2023/7/6 已报名课程列表 + return null; + } + + } diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/UserVideoDetailsServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/UserVideoDetailsServiceImpl.java new file mode 100644 index 0000000..bb6117d --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/UserVideoDetailsServiceImpl.java @@ -0,0 +1,20 @@ +package com.dsh.course.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dsh.course.entity.UserVideoDetails; +import com.dsh.course.mapper.UserVideoDetailsMapper; +import com.dsh.course.service.UserVideoDetailsService; +import org.springframework.stereotype.Service; + +/** + * <p> + * 用户观看视频记录 服务实现类 + * </p> + * + * @author jqs + * @since 2023-07-06 + */ +@Service +public class UserVideoDetailsServiceImpl extends ServiceImpl<UserVideoDetailsMapper, UserVideoDetails> implements UserVideoDetailsService { + +} diff --git a/cloud-server-course/src/main/resources/mapper/CoursePackageStudentMapper.xml b/cloud-server-course/src/main/resources/mapper/CoursePackageStudentMapper.xml index f9e2d0d..ebdebbe 100644 --- a/cloud-server-course/src/main/resources/mapper/CoursePackageStudentMapper.xml +++ b/cloud-server-course/src/main/resources/mapper/CoursePackageStudentMapper.xml @@ -32,4 +32,33 @@ and appUserId = #{appUserId} </if> </select> + <select id="queryAppUserOfStuAttendClass" resultType="com.dsh.course.entity.CoursePackageStudent"> + SELECT * + FROM t_course_package_student + UNION ALL + SELECT * + FROM t_course_package_student1 + UNION ALL + SELECT * + FROM t_course_package_student2 + UNION ALL + SELECT * + FROM t_course_package_student3 + UNION ALL + SELECT * + FROM t_course_package_student4 + UNION ALL + SELECT * + FROM t_course_package_student5 + WHERE signInOrNot = 1 and reservationStatus = 1 + <if test=" appUserId != null"> + and appUserId = #{appUserId} + </if> + <if test="coursePackageIds.size >0"> + and coursePackageId in + <foreach collection="coursePackageIds" close=")" index="index" open="(" separator="," item="item"> + #{item} + </foreach> + </if> + </select> </mapper> diff --git a/cloud-server-course/src/main/resources/mapper/PostCourseVideoMapper.xml b/cloud-server-course/src/main/resources/mapper/PostCourseVideoMapper.xml index 9d93eb3..e70fffa 100644 --- a/cloud-server-course/src/main/resources/mapper/PostCourseVideoMapper.xml +++ b/cloud-server-course/src/main/resources/mapper/PostCourseVideoMapper.xml @@ -2,4 +2,30 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dsh.course.mapper.PostCourseVideoMapper"> + <select id="queryPostCourseVideolist" resultType="com.dsh.course.entity.PostCourseVideo"> + SELECT * + FROM t_post_course_video + UNION ALL + SELECT * + FROM t_post_course_video1 + UNION ALL + SELECT * + FROM t_post_course_video2 + UNION ALL + SELECT * + FROM t_post_course_video3 + UNION ALL + SELECT * + FROM t_post_course_video4 + UNION ALL + SELECT * + FROM t_post_course_video5 + WHERE 1 = 1 + <if test="courseIds.size > 0 "> + and coursePackageId in + <foreach collection="courseIds" item="item" separator="," open="(" index="index" close=")"> + #{item} + </foreach> + </if> + </select> </mapper> diff --git a/cloud-server-course/src/main/resources/mapper/UserVideoDetailsMapper.xml b/cloud-server-course/src/main/resources/mapper/UserVideoDetailsMapper.xml new file mode 100644 index 0000000..d59762b --- /dev/null +++ b/cloud-server-course/src/main/resources/mapper/UserVideoDetailsMapper.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.dsh.course.mapper.UserVideoDetailsMapper"> + + + <select id="queryAppUserWatchVideo" resultType="com.dsh.course.entity.UserVideoDetails"> + SELECT * + FROM t_user_video_details + UNION ALL + SELECT * + FROM t_user_video_details1 + UNION ALL + SELECT * + FROM t_user_video_details2 + UNION ALL + SELECT * + FROM t_user_video_details3 + UNION ALL + SELECT * + FROM t_user_video_details4 + UNION ALL + SELECT * + FROM t_user_video_details5 + WHERE 1=1 + <if test="videoIds.size > 0 "> + and courseId in + <foreach collection="videoIds" item="item" separator="," open="(" index="index" close=")"> + #{item} + </foreach> + </if> + </select> +</mapper> -- Gitblit v1.7.1