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