Bläddra i källkod

Merge remote-tracking branch 'origin/master'

hgw 3 år sedan
förälder
incheckning
7a3525528d
49 ändrade filer med 1134 tillägg och 261 borttagningar
  1. 24 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/CourseGroupController.java
  2. 0 5
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderController.java
  3. 29 5
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserWithdrawalController.java
  4. 10 3
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/VideoLessonController.java
  5. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseGroupDao.java
  6. 5 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java
  7. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleRepliedDao.java
  8. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderDao.java
  9. 8 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderDetailDao.java
  10. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VideoLessonGroupDao.java
  11. 64 16
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderReq.java
  12. 0 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/OrderSearch.java
  13. 70 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/PracticeTeacherSearch.java
  14. 19 65
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrder.java
  15. 76 10
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderDetail.java
  16. 11 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderPayment.java
  17. 44 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/GoodTypeEnum.java
  18. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/OrderStatusEnum.java
  19. 5 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/PaymentSdk.java
  20. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java
  21. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseRepliedService.java
  22. 5 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java
  23. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderDetailService.java
  24. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VideoLessonGroupService.java
  25. 3 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VipCardService.java
  26. 6 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java
  27. 9 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseRepliedServiceImpl.java
  28. 36 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  29. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderDetailServiceImpl.java
  30. 154 95
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  31. 6 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonGroupServiceImpl.java
  32. 10 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VipCardServiceImpl.java
  33. 101 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseRepliedVo.java
  34. 146 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/PracticeTeacherVo.java
  35. 22 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderDetailVo.java
  36. 6 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderVo.java
  37. 38 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonExamineVo.java
  38. 13 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/res/OrderCreateRes.java
  39. 23 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseGroupMapper.xml
  40. 36 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  41. 24 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleRepliedMapper.xml
  42. 6 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/PracticeMapper.xml
  43. 25 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderDetailMapper.xml
  44. 6 14
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml
  45. 2 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderPaymentMapper.xml
  46. 8 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupMapper.xml
  47. 9 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/CourseScheduleController.java
  48. 2 1
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/CourseRepliedController.java
  49. 15 5
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/CourseScheduleController.java

+ 24 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/CourseGroupController.java

@@ -59,6 +59,26 @@ public class CourseGroupController extends BaseController {
         return succeed(PageUtil.pageInfo(liveCourseGroupVoIPage));
     }
 
+    @ApiOperation(value = "直播课详情")
+    @PostMapping(value="/detail/{courseGroupId}")
+    public HttpResponseResult<LiveCourseGroupVo> detail(@ApiParam(value = "课程组编号ID", required = true)
+                                                                   @PathVariable("courseGroupId") Long courseGroupId) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null || sysUser.getId() == null) {
+            return failed("用户信息获取失败");
+        }
+        if (courseGroupId == null) {
+            return failed("课程组id不能为空");
+        }
+
+        LiveCourseGroupVo liveCourseGroupVo = courseGroupService.detail(courseGroupId);
+        if (liveCourseGroupVo == null) {
+            return failed("没找到课程组信息");
+        }
+        return succeed(liveCourseGroupVo);
+    }
+
+
     @ApiOperation(value = "直播课购买学员信息", httpMethod="POST", consumes="application/json", produces="application/json")
     @PostMapping(value="/live/student", consumes="application/json", produces="application/json")
     public HttpResponseResult<PageInfo<LiveCourseGroupStudentVo>> student(@Valid @RequestBody LiveCourseGroupStudentSearch query) {
@@ -78,9 +98,12 @@ public class CourseGroupController extends BaseController {
     public HttpResponseResult<List<LiveCourseGroupPlanVo>> student(@ApiParam(value = "课程组编号ID", required = true)
                                                                               @PathVariable("courseGroupId") Long courseGroupId) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
+        if (sysUser == null || sysUser.getId() == null) {
             return failed("用户信息获取失败");
         }
+        if (courseGroupId == null) {
+            return failed("课程组id不能为空");
+        }
 
         List<LiveCourseGroupPlanVo> LiveCourseGroupPlanVoList = courseGroupService.selectAdminLivePlan(courseGroupId);
         return succeed(LiveCourseGroupPlanVoList);

+ 0 - 5
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderController.java

@@ -9,17 +9,12 @@ import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.page.PageInfo;
 import com.yonge.toolset.utils.easyexcel.ExcelUtils;
-import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.*;
 import org.apache.commons.beanutils.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import javax.servlet.http.HttpServletResponse;
-import javax.validation.Valid;
-
 import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
-import com.yonge.cooleshow.biz.dal.entity.UserOrder;
 import com.yonge.cooleshow.biz.dal.service.UserOrderService;
 
 import java.lang.reflect.InvocationTargetException;

+ 29 - 5
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserWithdrawalController.java

@@ -2,11 +2,8 @@ package com.yonge.cooleshow.admin.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
-import com.yonge.cooleshow.biz.dal.dto.excel.UserOrderExport;
 import com.yonge.cooleshow.biz.dal.dto.excel.UserWithdrawalExport;
-import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
-import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.page.PageInfo;
@@ -55,9 +52,9 @@ public class UserWithdrawalController extends BaseController {
     /**
      * 查询导出
      */
-    @PostMapping("/export")
+    @PostMapping("/exportExcel")
     @ApiOperation(value = "查询导出", notes = "传入TeacherWithdrawalSearch")
-    public void export(@RequestBody TeacherWithdrawalSearch query) {
+    public void exportExcel(@RequestBody TeacherWithdrawalSearch query) {
         List<UserWithdrawalVo> withdrawalVoList = userWithdrawalService.selectList(query);
         List<UserWithdrawalExport> list = new ArrayList<>();
         withdrawalVoList.forEach(o-> {
@@ -81,6 +78,33 @@ public class UserWithdrawalController extends BaseController {
     }
 
 
+    /**
+     * 查询导出
+     */
+    @PostMapping("/importExcel")
+    @ApiOperation(value = "查询导出", notes = "传入TeacherWithdrawalSearch")
+    public void importExcel(@RequestBody TeacherWithdrawalSearch query) {
+        List<UserWithdrawalVo> withdrawalVoList = userWithdrawalService.selectList(query);
+        List<UserWithdrawalExport> list = new ArrayList<>();
+        withdrawalVoList.forEach(o-> {
+            UserWithdrawalExport export = new UserWithdrawalExport();
+            try {
+                BeanUtils.copyProperties(export,o);
+                StringBuffer buffer = new StringBuffer(export.getId().toString());
+                buffer.append(export.getAmount());
+                buffer.append(export.getActualAmount());
+                String s = DigestUtils.md5DigestAsHex(buffer.toString().getBytes());
+                export.setSign(s);
+                list.add(export);
+            } catch (IllegalAccessException e) {
+                e.printStackTrace();
+            } catch (InvocationTargetException e) {
+                e.printStackTrace();
+            }
+        });
+        ExcelUtils.exportExcel(list, "提现列表数据" + System.currentTimeMillis(),
+                "列表数据");
+    }
 
     
 

+ 10 - 3
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/VideoLessonController.java

@@ -8,9 +8,7 @@ import com.yonge.cooleshow.biz.dal.service.VideoLessonGroupService;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.valid.AddGroup;
 import com.yonge.cooleshow.biz.dal.valid.SelectGroup;
-import com.yonge.cooleshow.biz.dal.vo.VideoLessonPurchaseVo;
-import com.yonge.cooleshow.biz.dal.vo.VideoLessonStudentDetailVo;
-import com.yonge.cooleshow.biz.dal.vo.VideoLessonTeacherVo;
+import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.page.PageInfo;
@@ -35,6 +33,15 @@ public class VideoLessonController extends BaseController {
     private VideoLessonGroupService lessonGroupService;
     @Autowired
     private VideoLessonGroupDetailService videoLessonGroupDetailService;
+    @Autowired
+    private VideoLessonGroupService videoLessonGroupService;
+
+    @ApiOperation(value = "修改视频课组审核状态", httpMethod = "POST", consumes = "application/json", produces = "application/json")
+    @PostMapping(value = "/updateGroup", consumes = "application/json", produces = "application/json")
+    public HttpResponseResult<Object> update(@Validated @RequestBody VideoLessonExamineVo examineVo) {
+        videoLessonGroupService.updateGroup(examineVo);
+        return succeed();
+    }
 
     @ApiOperation(value = "根据视频课组id查详情")
     @GetMapping(value = "/selectGroupById")

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseGroupDao.java

@@ -63,5 +63,13 @@ public interface CourseGroupDao extends BaseMapper<CourseGroup> {
      * @return
      */
     List<LiveCourseGroupPlanVo> selectAdminLivePlan(@Param("courseGroupId") Long courseGroupId);
+
+    /**
+     * 查询课程组详情
+     *
+     * @param courseGroupId 课程组id
+     * @return
+     */
+    LiveCourseGroupVo selectAdminLiveCourseGroup(@Param("courseGroupId") Long courseGroupId);
 }
 

+ 5 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yonge.cooleshow.biz.dal.dto.search.HomeworkSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch;
+import com.yonge.cooleshow.biz.dal.dto.search.PracticeTeacherSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.VideoLessonGroupSearch;
 import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
 import com.yonge.cooleshow.biz.dal.vo.*;
@@ -91,6 +92,9 @@ public interface CourseScheduleDao extends BaseMapper<CourseSchedule> {
     Set<String> queryCourseScheduleStudent(MyCourseSearch search);
 
     //老师端-课表-日历-用户
-    List<CourseStudent> queryCourseUser(IPage<CourseStudent> page, @Param("param") MyCourseSearch search);
+    List<CourseStudent> queryCourseUser(@Param("param") MyCourseSearch search);
+
+    //学生端-首页-陪练课老师列表
+    List<PracticeTeacherVo> teacherList(IPage<PracticeTeacherVo> page, @Param("param") PracticeTeacherSearch search);
 }
 

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleRepliedDao.java

@@ -5,6 +5,7 @@ import java.util.List;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch;
+import com.yonge.cooleshow.biz.dal.vo.CourseRepliedVo;
 import com.yonge.cooleshow.biz.dal.vo.MyRepliedVo;
 import org.apache.ibatis.annotations.Param;
 import com.yonge.cooleshow.biz.dal.entity.CourseScheduleReplied;
@@ -51,4 +52,11 @@ public interface CourseScheduleRepliedDao extends BaseMapper<CourseScheduleRepli
 	 * @Date: 2022/4/13
 	 */
 	void insertReplied(@Param("param") CourseScheduleReplied replied);
+
+	/**
+	 * @Description: 查询评价详情
+	 * @Author: cy
+	 * @Date: 2022/4/19
+	 */
+    CourseRepliedVo selectReplied(CourseScheduleReplied replied);
 }

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderDao.java

@@ -5,6 +5,7 @@ import java.util.List;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.biz.dal.entity.UserOrder;
+import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
 import org.apache.ibatis.annotations.Param;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
@@ -46,4 +47,13 @@ public interface UserOrderDao extends BaseMapper<UserOrder>{
 	 * @return: java.util.List<com.yonge.cooleshow.biz.dal.entity.UserOrder>
 	 */
 	List<UserOrderVo> selectPendingList();
+	/***
+	 * 修改订单状态
+	 * @author liweifan
+	 * @param: orderNo
+	 * @param: paying
+	 * @updateTime 2022/4/19 10:57
+	 * @return: java.lang.Integer
+	 */
+    Integer updateStatusByOrderNo(@Param("orderNo")String orderNo,@Param("orderStatus") String orderStatus);
 }

+ 8 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderDetailDao.java

@@ -32,5 +32,12 @@ public interface UserOrderDetailDao extends BaseMapper<UserOrderDetail>{
      * @return: com.yonge.cooleshow.biz.dal.vo.OrderDetailVo
 	 */
 	List<UserOrderDetailVo> selectPage(@Param("page") IPage page, @Param("param") OrderDetailSearch orderDetail);
-
+	/***
+	 * 通过订单号查询订单详情
+	 * @author liweifan
+	 * @param: orderNo
+	 * @updateTime 2022/4/19 14:01
+	 * @return: java.util.List<com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo>
+	 */
+    List<UserOrderDetailVo> getOrderDetilListByOrderNo(@Param("orderNo")String orderNo);
 }

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VideoLessonGroupDao.java

@@ -22,6 +22,7 @@ public interface VideoLessonGroupDao extends BaseMapper<VideoLessonGroup> {
 
     //修改视频课组
     void updateGroup(VideoLessonGroupUpVo lessonGroupUpVo);
+    void updateExamine(VideoLessonExamineVo examineVo);
 
     //学员详情-查询视频课列表
     List<VideoLessonStudentDetailVo> selectStudentPage(IPage page, @Param("param") VideoLessonSearch videoLessonSearch);

+ 64 - 16
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderReq.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.dto.req;
 
+import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -7,6 +8,7 @@ import io.swagger.annotations.ApiModelProperty;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * 下单请求
@@ -21,17 +23,55 @@ public class OrderReq {
     @NotBlank(message = "订单名称不能为空")
     @ApiModelProperty(value = "订单名称 ", required = true)
     private String orderName;
-    @ApiModelProperty(value = "订单描述信息 ")
-    private String orderDesc;
     @NotNull(message = "订单类型不能为空")
     @ApiModelProperty(value = "订单类型:  VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ", required = true)
     private OrderTypeEnum orderType;
+    @ApiModelProperty(value = "订单描述信息 ")
+    private String orderDesc;
     @ApiModelProperty("用户备注 ")
     private String userNote;
-    @ApiModelProperty(value = "业务内容 订单业务内容json")
-    private String bizContent;
     @ApiModelProperty(value = "优惠券id")
     private Long couponId;
+    @NotNull(message = "订单金额不能为空")
+    @ApiModelProperty(value = "订单金额", required = true)
+    private BigDecimal actualPrice;
+    @NotNull(message = "商品详情不能为空")
+    @ApiModelProperty(value = "业务请求详情", required = true)
+    private List<OrderReqInfo> orderInfos;
+
+    @ApiModel(value = "OrderReqInfo", description = "下单请求业务详情对象")
+    public class OrderReqInfo {
+        private Long userId;
+        @NotNull(message = "商品类型不能为空")
+        @ApiModelProperty(value = "商品类型:  VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ", required = true)
+        private GoodTypeEnum goodType;
+        @ApiModelProperty(value = "业务内容 订单业务内容json")
+        private String bizContent;
+
+        public Long getUserId() {
+            return userId;
+        }
+
+        public void setUserId(Long userId) {
+            this.userId = userId;
+        }
+
+        public GoodTypeEnum getGoodType() {
+            return goodType;
+        }
+
+        public void setGoodType(GoodTypeEnum goodType) {
+            this.goodType = goodType;
+        }
+
+        public String getBizContent() {
+            return bizContent;
+        }
+
+        public void setBizContent(String bizContent) {
+            this.bizContent = bizContent;
+        }
+    }
 
     public Long getUserId() {
         return userId;
@@ -49,14 +89,6 @@ public class OrderReq {
         this.orderName = orderName;
     }
 
-    public String getOrderDesc() {
-        return orderDesc;
-    }
-
-    public void setOrderDesc(String orderDesc) {
-        this.orderDesc = orderDesc;
-    }
-
     public OrderTypeEnum getOrderType() {
         return orderType;
     }
@@ -65,12 +97,20 @@ public class OrderReq {
         this.orderType = orderType;
     }
 
-    public String getBizContent() {
-        return bizContent;
+    public String getOrderDesc() {
+        return orderDesc;
+    }
+
+    public void setOrderDesc(String orderDesc) {
+        this.orderDesc = orderDesc;
     }
 
-    public void setBizContent(String bizContent) {
-        this.bizContent = bizContent;
+    public List<OrderReqInfo> getOrderInfos() {
+        return orderInfos;
+    }
+
+    public void setOrderInfos(List<OrderReqInfo> orderInfos) {
+        this.orderInfos = orderInfos;
     }
 
     public String getUserNote() {
@@ -88,4 +128,12 @@ public class OrderReq {
     public void setCouponId(Long couponId) {
         this.couponId = couponId;
     }
+
+    public BigDecimal getActualPrice() {
+        return actualPrice;
+    }
+
+    public void setActualPrice(BigDecimal actualPrice) {
+        this.actualPrice = actualPrice;
+    }
 }

+ 0 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/OrderSearch.java

@@ -17,7 +17,6 @@ import java.util.Date;
 @ApiModel(value = "OrderSearch对象", description = "平台订单表查询对象")
 public class OrderSearch extends QueryInfo{
 	private static final long serialVersionUID = 1L;
-
 	@ApiModelProperty("交易流水号/订单号")
 	private String searchNo;
 	@ApiModelProperty("订单类型:  VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播")

+ 70 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/PracticeTeacherSearch.java

@@ -0,0 +1,70 @@
+package com.yonge.cooleshow.biz.dal.dto.search;
+
+import com.yonge.cooleshow.common.page.QueryInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author: cy
+ * @Date: 2022/4/19
+ */
+@ApiModel(value = "PracticeTeacherSearch")
+public class PracticeTeacherSearch extends QueryInfo {
+    @ApiModelProperty(value = "声部id")
+    private Integer subjectId;
+
+    @ApiModelProperty(value = "老师名称")
+    private String search;
+
+    @ApiModelProperty(value = "排序字段(starGrade,expTime,subjectPrice)")
+    private String sortField;
+
+    @ApiModelProperty(value = "排序规则(升序:ASC 降序:DESC)")
+    private String collation;
+
+    private String sort;
+
+    @Override
+    public String getSort() {
+        return sort;
+    }
+
+    @Override
+    public void setSort(String sort) {
+        this.sort = sort;
+    }
+
+    public Integer getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(Integer subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    @Override
+    public String getSearch() {
+        return search;
+    }
+
+    @Override
+    public void setSearch(String search) {
+        this.search = search;
+    }
+
+    public String getSortField() {
+        return sortField;
+    }
+
+    public void setSortField(String sortField) {
+        this.sortField = sortField;
+    }
+
+    public String getCollation() {
+        return collation;
+    }
+
+    public void setCollation(String collation) {
+        this.collation = collation;
+    }
+}

+ 19 - 65
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrder.java

@@ -32,12 +32,12 @@ public class UserOrder implements Serializable {
     @ApiModelProperty("买家id ")
     @TableField(value = "user_id_")
     private Long userId;
-    @ApiModelProperty("卖家id ")
-    @TableField(value = "merch_id_")
-    private Long merchId;
     @ApiModelProperty("订单名称 ")
     @TableField(value = "order_name_")
     private String orderName;
+    @ApiModelProperty("订单类型:  VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播")
+    @TableField(value = "order_type_")
+    private OrderTypeEnum orderType;
     @ApiModelProperty("订单描述信息 ")
     @TableField(value = "order_desc_")
     private String orderDesc;
@@ -59,18 +59,9 @@ public class UserOrder implements Serializable {
     @ApiModelProperty("平台服务费 ")
     @TableField(value = "plantform_fee_")
     private BigDecimal plantformFee;
-    @ApiModelProperty("平台服务费比例% ")
-    @TableField(value = "plantform_fee_rate_")
-    private BigDecimal plantformFeeRate;
-    @ApiModelProperty("退款金额 ")
-    @TableField(value = "refund_amount_")
-    private BigDecimal refundAmount;
     @ApiModelProperty("用户备注 ")
     @TableField(value = "user_note_")
     private String userNote;
-    @ApiModelProperty("订单类型:  VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播")
-    @TableField(value = "order_type_")
-    private OrderTypeEnum orderType;
     @ApiModelProperty("下单时间 ")
     @TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -81,11 +72,6 @@ public class UserOrder implements Serializable {
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date payTime;
-    @ApiModelProperty("退款时间 ")
-    @TableField(value = "refund_time_")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    private Date refundTime;
     @TableField(value = "update_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@@ -115,14 +101,6 @@ public class UserOrder implements Serializable {
         this.userId = userId;
     }
 
-    public Long getMerchId() {
-        return merchId;
-    }
-
-    public void setMerchId(Long merchId) {
-        this.merchId = merchId;
-    }
-
     public String getOrderName() {
         return orderName;
     }
@@ -131,6 +109,14 @@ public class UserOrder implements Serializable {
         this.orderName = orderName;
     }
 
+    public OrderTypeEnum getOrderType() {
+        return orderType;
+    }
+
+    public void setOrderType(OrderTypeEnum orderType) {
+        this.orderType = orderType;
+    }
+
     public String getOrderDesc() {
         return orderDesc;
     }
@@ -139,6 +125,14 @@ public class UserOrder implements Serializable {
         this.orderDesc = orderDesc;
     }
 
+    public OrderStatusEnum getStatus() {
+        return status;
+    }
+
+    public void setStatus(OrderStatusEnum status) {
+        this.status = status;
+    }
+
     public BigDecimal getOriginalPrice() {
         return originalPrice;
     }
@@ -179,22 +173,6 @@ public class UserOrder implements Serializable {
         this.plantformFee = plantformFee;
     }
 
-    public BigDecimal getPlantformFeeRate() {
-        return plantformFeeRate;
-    }
-
-    public void setPlantformFeeRate(BigDecimal plantformFeeRate) {
-        this.plantformFeeRate = plantformFeeRate;
-    }
-
-    public BigDecimal getRefundAmount() {
-        return refundAmount;
-    }
-
-    public void setRefundAmount(BigDecimal refundAmount) {
-        this.refundAmount = refundAmount;
-    }
-
     public String getUserNote() {
         return userNote;
     }
@@ -219,14 +197,6 @@ public class UserOrder implements Serializable {
         this.payTime = payTime;
     }
 
-    public Date getRefundTime() {
-        return refundTime;
-    }
-
-    public void setRefundTime(Date refundTime) {
-        this.refundTime = refundTime;
-    }
-
     public Date getUpdateTime() {
         return updateTime;
     }
@@ -234,20 +204,4 @@ public class UserOrder implements Serializable {
     public void setUpdateTime(Date updateTime) {
         this.updateTime = updateTime;
     }
-
-    public OrderStatusEnum getStatus() {
-        return status;
-    }
-
-    public void setStatus(OrderStatusEnum status) {
-        this.status = status;
-    }
-
-    public OrderTypeEnum getOrderType() {
-        return orderType;
-    }
-
-    public void setOrderType(OrderTypeEnum orderType) {
-        this.orderType = orderType;
-    }
 }

+ 76 - 10
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderDetail.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -25,18 +26,36 @@ public class UserOrderDetail implements Serializable {
     @ApiModelProperty("订单号 ")
 	@TableField(value = "order_no_")
     private String orderNo;
+    @ApiModelProperty("卖家id ")
+    @TableField(value = "merch_id_")
+    private Long merchId;
+    @ApiModelProperty("订单类型:  VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播")
+    @TableField(value = "good_type_")
+    private GoodTypeEnum goodType;
     @ApiModelProperty("业务id ")
 	@TableField(value = "biz_id_")
     private Long bizId;
     @ApiModelProperty("业务内容 ")
 	@TableField(value = "biz_content_")
     private String bizContent;
+    @ApiModelProperty("原价 ")
+    @TableField(value = "original_price_")
+    private BigDecimal originalPrice;
+    @ApiModelProperty("预计价格 ")
+    @TableField(value = "expect_price_")
+    private BigDecimal expectPrice;
     @ApiModelProperty("商品数量 ")
     @TableField(value = "good_num_")
     private Integer goodNum;
     @ApiModelProperty("商品单价 ")
     @TableField(value = "good_price_")
     private BigDecimal goodPrice;
+    @ApiModelProperty("平台服务费 ")
+    @TableField(value = "plantform_fee_")
+    private BigDecimal plantformFee;
+    @ApiModelProperty("平台服务费比例% ")
+    @TableField(value = "plantform_fee_rate_")
+    private BigDecimal plantformFeeRate;
     @ApiModelProperty("下单时间 ")
 	@TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -47,31 +66,47 @@ public class UserOrderDetail implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date updateTime;
 
-	public Long getId() {
+    public Long getId() {
         return id;
     }
 
     public void setId(Long id) {
         this.id = id;
     }
-    
-	public String getOrderNo() {
+
+    public String getOrderNo() {
         return orderNo;
     }
 
     public void setOrderNo(String orderNo) {
         this.orderNo = orderNo;
     }
-    
-	public Long getBizId() {
+
+    public Long getMerchId() {
+        return merchId;
+    }
+
+    public void setMerchId(Long merchId) {
+        this.merchId = merchId;
+    }
+
+    public GoodTypeEnum getGoodType() {
+        return goodType;
+    }
+
+    public void setGoodType(GoodTypeEnum goodType) {
+        this.goodType = goodType;
+    }
+
+    public Long getBizId() {
         return bizId;
     }
 
     public void setBizId(Long bizId) {
         this.bizId = bizId;
     }
-    
-	public String getBizContent() {
+
+    public String getBizContent() {
         return bizContent;
     }
 
@@ -79,6 +114,22 @@ public class UserOrderDetail implements Serializable {
         this.bizContent = bizContent;
     }
 
+    public BigDecimal getOriginalPrice() {
+        return originalPrice;
+    }
+
+    public void setOriginalPrice(BigDecimal originalPrice) {
+        this.originalPrice = originalPrice;
+    }
+
+    public BigDecimal getExpectPrice() {
+        return expectPrice;
+    }
+
+    public void setExpectPrice(BigDecimal expectPrice) {
+        this.expectPrice = expectPrice;
+    }
+
     public Integer getGoodNum() {
         return goodNum;
     }
@@ -95,6 +146,22 @@ public class UserOrderDetail implements Serializable {
         this.goodPrice = goodPrice;
     }
 
+    public BigDecimal getPlantformFee() {
+        return plantformFee;
+    }
+
+    public void setPlantformFee(BigDecimal plantformFee) {
+        this.plantformFee = plantformFee;
+    }
+
+    public BigDecimal getPlantformFeeRate() {
+        return plantformFeeRate;
+    }
+
+    public void setPlantformFeeRate(BigDecimal plantformFeeRate) {
+        this.plantformFeeRate = plantformFeeRate;
+    }
+
     public Date getCreateTime() {
         return createTime;
     }
@@ -102,13 +169,12 @@ public class UserOrderDetail implements Serializable {
     public void setCreateTime(Date createTime) {
         this.createTime = createTime;
     }
-    
-	public Date getUpdateTime() {
+
+    public Date getUpdateTime() {
         return updateTime;
     }
 
     public void setUpdateTime(Date updateTime) {
         this.updateTime = updateTime;
     }
-    
 }

+ 11 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderPayment.java

@@ -45,12 +45,14 @@ public class UserOrderPayment implements Serializable {
     @ApiModelProperty("交易状态 pending 交易处理中 succeeded 交易成功 failed 交易失败")
     @TableField(value = "status_")
     private PayStatusEnum status;
+    @ApiModelProperty("失败信息 ")
+    @TableField(value = "pay_fail_msg_")
+    private String payFailMsg;
     @ApiModelProperty("到账时间 ")
 	@TableField(value = "arrival_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date arrivalTime;
-
     @ApiModelProperty("创建时间 ")
     @TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -149,4 +151,12 @@ public class UserOrderPayment implements Serializable {
     public void setFeeAmt(BigDecimal feeAmt) {
         this.feeAmt = feeAmt;
     }
+
+    public String getPayFailMsg() {
+        return payFailMsg;
+    }
+
+    public void setPayFailMsg(String payFailMsg) {
+        this.payFailMsg = payFailMsg;
+    }
 }

+ 44 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/GoodTypeEnum.java

@@ -0,0 +1,44 @@
+package com.yonge.cooleshow.biz.dal.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.cooleshow.common.enums.BaseEnum;
+
+/**
+ * 商品类型
+ * @Author: liweifan
+ * @Data: 2022/3/31 14:59
+ */
+public enum GoodTypeEnum implements BaseEnum<String, GoodTypeEnum> {
+    VIP("VIP","开通会员"),
+    PRACTICE("PRACTICE","陪练课购买"),
+    LIVE("LIVE","直播课购买"),
+    VIDEO("VIDEO","视频课购买"),
+    MUSIC("MUSIC","单曲点播")
+    ;
+    @EnumValue
+    private String code;
+    private String msg;
+
+    GoodTypeEnum(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+
+}

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/OrderStatusEnum.java

@@ -12,7 +12,8 @@ public enum OrderStatusEnum implements BaseEnum<String, OrderStatusEnum> {
     WAIT_PAY("WAIT_PAY","待支付"),
     PAYING("PAYING","支付中"),
     PAID("PAID","已付款"),
-    CLOSE("CLOSE","已关闭")
+    CLOSE("CLOSE","已关闭"),
+    FAIL("FAIL","支付失败"),
     ;
     @EnumValue
     private String code;

+ 5 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/PaymentSdk.java

@@ -31,7 +31,7 @@ public class PaymentSdk {
      * @return 创建的支付对象
      * @throws Exception 异常
      */
-    public Map<String, Object> executePayment(PaymentReq paymentReq) {
+    public HttpResponseResult<Map<String, Object>> executePayment(PaymentReq paymentReq) {
         paymentReq.setApp_id(HuifuConfiguration.getHuifuProperties().getAppId());
         //创建分账对象
         Map<String, String> div_member = new HashMap<>();
@@ -48,18 +48,18 @@ public class PaymentSdk {
         try {
             res = Payment.create(paymentParams);
         } catch (BaseAdaPayException e) {
-            throw new ThirdpartyException(e.getMessage());
+            return HttpResponseResult.failed(e.getMessage());
         }
         if (null == res) {
-            throw new ThirdpartyException("请求失败");
+            return HttpResponseResult.failed("请求失败");
         }
         log.info("汇付[创建支付对象] Resp:{}", res);
         String errorCode = (String) res.get("error_code");
         if (null != errorCode) {
             String errorMsg = (String) res.get("error_msg");
-            throw new BizException(errorMsg);
+            return HttpResponseResult.failed(errorMsg);
         }
-        return res;
+        return HttpResponseResult.succeed(res);
     }
 
     /**

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java

@@ -90,5 +90,13 @@ public interface CourseGroupService extends IService<CourseGroup> {
      * @return
      */
     List<LiveCourseGroupPlanVo> selectAdminLivePlan(Long courseGroupId);
+
+    /**
+     * 直播课详情
+     *
+     * @param courseGroupId 直播课id
+     * @return
+     */
+    LiveCourseGroupVo detail(Long courseGroupId);
 }
 

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseRepliedService.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch;
 import com.yonge.cooleshow.biz.dal.entity.CourseScheduleReplied;
+import com.yonge.cooleshow.biz.dal.vo.CourseRepliedVo;
 import com.yonge.cooleshow.biz.dal.vo.MyRepliedVo;
 
 /**
@@ -14,7 +15,7 @@ import com.yonge.cooleshow.biz.dal.vo.MyRepliedVo;
 public interface CourseRepliedService extends IService<CourseScheduleReplied> {
     void replied(CourseScheduleReplied replied, SysUser sysUser);
 
-    CourseScheduleReplied selectReplied(CourseScheduleReplied replied);
+    CourseRepliedVo selectReplied(CourseScheduleReplied replied);
 
     IPage<MyRepliedVo> myReplied(IPage<MyRepliedVo> page, MyCourseSearch search);
 }

+ 5 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java

@@ -5,10 +5,12 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.dao.CourseScheduleDao;
 import com.yonge.cooleshow.biz.dal.dto.search.HomeworkSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch;
+import com.yonge.cooleshow.biz.dal.dto.search.PracticeTeacherSearch;
 import com.yonge.cooleshow.biz.dal.entity.CourseCalendarEntity;
 import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
 import com.yonge.cooleshow.biz.dal.vo.CourseStudent;
 import com.yonge.cooleshow.biz.dal.vo.MyCourseVo;
+import com.yonge.cooleshow.biz.dal.vo.PracticeTeacherVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherLiveCourseInfoVo;
 import com.yonge.cooleshow.common.page.PageInfo;
 
@@ -178,6 +180,8 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
      */
     boolean checkStudentCourseSchedule(Long studentId, Long courseId);
 
-    IPage<CourseStudent> queryCourseUser(IPage<CourseStudent> page, MyCourseSearch search);
+    Map<String,Object> queryCourseUser(MyCourseSearch search);
+
+    IPage<PracticeTeacherVo> teacherList(IPage<PracticeTeacherVo> page, PracticeTeacherSearch search);
 }
 

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderDetailService.java

@@ -6,6 +6,8 @@ import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.biz.dal.dto.search.OrderDetailSearch;
 import com.yonge.cooleshow.biz.dal.entity.UserOrderDetail;
 
+import java.util.List;
+
 /**
  * 平台订单表 服务类
  * @author liweifan
@@ -25,6 +27,14 @@ public interface UserOrderDetailService extends IService<UserOrderDetail>  {
 	 * @date 2022-03-30
 	 */
 	UserOrderDetailVo detail(String orderNo);
+	/***
+	 * 通过订单号查询订单详情
+	 * @author liweifan
+	 * @param: orderNo
+	 * @updateTime 2022/4/19 14:00
+	 * @return: com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo
+	 */
+	List<UserOrderDetailVo> getOrderDetilListByOrderNo(String orderNo);
     /**
      * 分页查询
      * @author liweifan

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VideoLessonGroupService.java

@@ -22,6 +22,8 @@ public interface VideoLessonGroupService extends IService<VideoLessonGroup> {
 
     void updateGroup(VideoLessonGroupUpVo lessonGroupUpVo);
 
+    void updateGroup(VideoLessonExamineVo examineVo);
+
     void deleteGroup(Long id);
 
     void add(VideoLessonVo lessonVo, SysUser sysUser);

+ 3 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VipCardService.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.vo.VipCardVo;
 import com.yonge.cooleshow.biz.dal.entity.VipCard;
@@ -37,12 +38,12 @@ public interface VipCardService extends IService<VipCard>  {
 	 * @updateTime 2022/3/31 15:47
 	 * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.lang.Boolean>
 	 */
-	HttpResponseResult<OrderCreateRes> orderCreate(OrderReq orderReq);
+	HttpResponseResult<OrderCreateRes> orderCreate(OrderReq.OrderReqInfo orderReqInfo);
 	/***
 	 * 订单下单后操作
 	 * @author liweifan
 	 * @param: orderVo
 	 * @updateTime 2022/3/31 17:24
 	 */
-	void orderSuccess(UserOrderVo orderVo);
+	void orderSuccess(UserOrderDetailVo orderDetailVo);
 }

+ 6 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java

@@ -477,6 +477,12 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         return baseMapper.selectAdminLivePlan(courseGroupId);
     }
 
+    @Override
+    public LiveCourseGroupVo detail(Long courseGroupId) {
+        return baseMapper.selectAdminLiveCourseGroup(courseGroupId);
+
+    }
+
     /**
      * 学生购买直播课程组
      *

+ 9 - 7
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseRepliedServiceImpl.java

@@ -13,6 +13,7 @@ import com.yonge.cooleshow.biz.dal.entity.CourseScheduleReplied;
 import com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudentPayment;
 import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.service.CourseRepliedService;
+import com.yonge.cooleshow.biz.dal.vo.CourseRepliedVo;
 import com.yonge.cooleshow.biz.dal.vo.MyRepliedVo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -123,13 +124,14 @@ public class CourseRepliedServiceImpl extends ServiceImpl<CourseScheduleRepliedD
      * @Date: 2022/4/12
      */
     @Override
-    public CourseScheduleReplied selectReplied(CourseScheduleReplied replied) {
-        QueryWrapper<CourseScheduleReplied> wrapper = new QueryWrapper<>();
-        wrapper.eq("course_group_type_", CourseScheduleEnum.PRACTICE);
-        wrapper.eq("student_id_", replied.getStudentId());
-        wrapper.eq("course_schedule_id_", replied.getCourseScheduleId());
-        wrapper.eq("course_group_id_", replied.getCourseGroupId());
-        return repliedDao.selectOne(wrapper);
+    public CourseRepliedVo selectReplied(CourseScheduleReplied replied) {
+//        QueryWrapper<CourseScheduleReplied> wrapper = new QueryWrapper<>();
+//        wrapper.eq("course_group_type_", CourseScheduleEnum.PRACTICE);
+//        wrapper.eq("student_id_", replied.getStudentId());
+//        wrapper.eq("course_schedule_id_", replied.getCourseScheduleId());
+//        wrapper.eq("course_group_id_", replied.getCourseGroupId());
+        CourseRepliedVo repliedVo=repliedDao.selectReplied(replied);
+        return repliedVo;
     }
 
     /**

+ 36 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java

@@ -12,6 +12,7 @@ import com.yonge.cooleshow.biz.dal.dao.CourseScheduleStudentPaymentDao;
 import com.yonge.cooleshow.biz.dal.dao.CourseScheduleDao;
 import com.yonge.cooleshow.biz.dal.dto.search.HomeworkSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch;
+import com.yonge.cooleshow.biz.dal.dto.search.PracticeTeacherSearch;
 import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.service.*;
@@ -19,6 +20,7 @@ import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
 import com.yonge.cooleshow.biz.dal.vo.CourseStudent;
 import com.yonge.cooleshow.biz.dal.vo.MyCourseVo;
+import com.yonge.cooleshow.biz.dal.vo.PracticeTeacherVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherLiveCourseInfoVo;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.exception.BizException;
@@ -736,15 +738,45 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     }
 
     /**
-     * search:  {"classDate":"2022-03-27"}
-     *
      * @Description: 老师端-课表-日历-用户
      * @Author: cy
      * @Date: 2022/4/18
      */
     @Override
-    public IPage<CourseStudent> queryCourseUser(IPage<CourseStudent> page, MyCourseSearch search) {
-        return page.setRecords(baseMapper.queryCourseUser(page, search));
+    public Map<String,Object> queryCourseUser(MyCourseSearch search) {
+        List<CourseStudent> studentList = baseMapper.queryCourseUser(search);
+
+        Map<String, String> sysConfig = new HashMap<>();
+        //提前XX分钟创建/进入陪练课房间时间
+        sysConfig.put("practiceStartTime",sysConfigService.findConfigValue(SysConfigConstant.PRE_CREATE_PRACTICE_ROOM_MINUTE));
+        //陪练课结束后,XX分钟关闭房间
+        sysConfig.put("practiceEndTime",sysConfigService.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE));
+        //提前XX分钟创建/进入直播房间的时间
+        sysConfig.put("liveStartTime",sysConfigService.findConfigValue(SysConfigConstant.PRE_CREATE_LIVE_ROOM_MINUTE));
+        //直播结束后,XX分钟关闭房间
+        sysConfig.put("liveEndTime",sysConfigService.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_LIVE_ROOM_MINUTE));
+
+        Map map=new HashMap();
+        map.put("sysConfig",sysConfig);
+        map.put("studentList",studentList);
+        return map;
+    }
+
+    /**
+     * @Description: 学生端-首页-陪练课老师列表
+     * @Author: cy
+     * @Date: 2022/4/19
+     */
+    @Override
+    public IPage<PracticeTeacherVo> teacherList(IPage<PracticeTeacherVo> page, PracticeTeacherSearch search) {
+        String collation = search.getCollation();//排序规则
+        String sortField = search.getSortField();//排序字段
+        if (StringUtils.isNotBlank(sortField)){
+            if (StringUtils.isNotBlank(collation)){
+                search.setSort(sortField+" "+collation);
+            }else search.setSort(sortField);
+        }
+        return page.setRecords(baseMapper.teacherList(page, search));
     }
 }
 

+ 7 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderDetailServiceImpl.java

@@ -9,6 +9,8 @@ import com.yonge.cooleshow.biz.dal.dto.search.OrderDetailSearch;
 import com.yonge.cooleshow.biz.dal.dao.UserOrderDetailDao;
 import com.yonge.cooleshow.biz.dal.service.UserOrderDetailService;
 
+import java.util.List;
+
 
 @Service
 public class UserOrderDetailServiceImpl extends ServiceImpl<UserOrderDetailDao, UserOrderDetail> implements UserOrderDetailService {
@@ -26,6 +28,11 @@ public class UserOrderDetailServiceImpl extends ServiceImpl<UserOrderDetailDao,
     }
 
     @Override
+    public List<UserOrderDetailVo> getOrderDetilListByOrderNo(String orderNo) {
+        return baseMapper.getOrderDetilListByOrderNo(orderNo);
+    }
+
+    @Override
     public IPage<UserOrderDetailVo> selectPage(IPage<UserOrderDetailVo> page, OrderDetailSearch query){
         return page.setRecords(baseMapper.selectPage(page, query));
     }

+ 154 - 95
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.config.HuifuConfiguration;
+import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderPayReq;
@@ -11,10 +12,6 @@ import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.entity.UserOrderDetail;
 import com.yonge.cooleshow.biz.dal.entity.UserOrder;
 import com.yonge.cooleshow.biz.dal.entity.UserOrderPayment;
-import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
-import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
-import com.yonge.cooleshow.biz.dal.enums.PayChannelEnum;
-import com.yonge.cooleshow.biz.dal.enums.PayStatusEnum;
 import com.yonge.cooleshow.biz.dal.sdk.PaymentSdk;
 import com.yonge.cooleshow.biz.dal.sdk.req.DeviceInfo;
 import com.yonge.cooleshow.biz.dal.sdk.req.PaymentReq;
@@ -59,26 +56,28 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     private IdGeneratorService idGeneratorService;
 
     //验证订单是否可以下单
-    private static final Map<OrderTypeEnum, Function<OrderReq, HttpResponseResult<OrderCreateRes>>> orderCreate = new HashMap<>();
+    private static final Map<GoodTypeEnum, Function<OrderReq.OrderReqInfo, HttpResponseResult<OrderCreateRes>>> orderCreate = new HashMap<>();
     //插入订单后执行
-    private static final Map<OrderTypeEnum, Consumer<UserOrderVo>> orderAfter = new HashMap<>();
+    private static final Map<GoodTypeEnum, Consumer<UserOrderDetailVo>> orderAfter = new HashMap<>();
+
+
     //订单完成后执行
-    private static final Map<OrderTypeEnum, Consumer<UserOrderVo>> orderSuccess = new HashMap<>();
+    private static final Map<GoodTypeEnum, Consumer<UserOrderDetailVo>> orderSuccess = new HashMap<>();
     //订单取消后执行
-    private static final Map<OrderTypeEnum, Consumer<UserOrderVo>> orderCancel = new HashMap<>();
+    private static final Map<GoodTypeEnum, Consumer<UserOrderDetailVo>> orderCancel = new HashMap<>();
 
     @PostConstruct
     private void init() {
         /**********订单生成前******************/
         //vip开通缴费
-        orderCreate.put(OrderTypeEnum.VIP, vipCardService::orderCreate);
+        orderCreate.put(GoodTypeEnum.VIP, vipCardService::orderCreate);
 
         /**********订单生成后******************/
         //orderAfter.put(OrderTypeEnum.VIP, vipCardService::orderAfter);
 
         /**********订单完成后******************/
         //vip开通缴费
-        orderSuccess.put(OrderTypeEnum.VIP, vipCardService::orderSuccess);
+        orderSuccess.put(GoodTypeEnum.VIP, vipCardService::orderSuccess);
 
 
         /**********订单取消后******************/
@@ -89,7 +88,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     public UserOrderVo detail(Long id) {
         UserOrderVo userOrderVo = baseMapper.detailById(id);
         if (null != userOrderVo) {
-            userOrderVo.setOrderDetail(orderDetailService.detail(userOrderVo.getOrderNo()));
+            userOrderVo.setOrderDetailList(orderDetailService.getOrderDetilListByOrderNo(userOrderVo.getOrderNo()));
         }
         return userOrderVo;
     }
@@ -98,7 +97,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     public UserOrderVo detail(String orderNo) {
         UserOrderVo userOrderVo = baseMapper.detailByOrderNo(orderNo);
         if (null != userOrderVo) {
-            userOrderVo.setOrderDetail(orderDetailService.detail(userOrderVo.getOrderNo()));
+            userOrderVo.setOrderDetailList(orderDetailService.getOrderDetilListByOrderNo(userOrderVo.getOrderNo()));
         }
         return userOrderVo;
     }
@@ -118,27 +117,34 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     public HttpResponseResult<UserOrder> executeOrder(OrderReq orderReq) {
         log.info("订单[创建订单] Req:{}", JSONObject.toJSONString(orderReq));
         //验证参数,必须验证参数
-        Function<OrderReq, HttpResponseResult<OrderCreateRes>> checkFunction = orderCreate.get(orderReq.getOrderType());
-        if (Objects.isNull(checkFunction)) {
-            return HttpResponseResult.failed("订单商品信息获取失败");
-        }
-        HttpResponseResult<OrderCreateRes> checkResult = checkFunction.apply(orderReq);
-        OrderCreateRes createRes = checkResult.getData();
-        if (!checkResult.getStatus() || null == createRes || !createRes.getRes()) {
-            log.info("订单[创建订单] Res:{}", JSONObject.toJSONString(checkResult));
-            return HttpResponseResult.failed("订单商品信息获取失败");
-        }
-        if (!checkPositiveOrZero(createRes.getOriginalPrice())
-                || !checkPositiveOrZero(createRes.getExpectPrice())
-        ) {
-            return HttpResponseResult.failed("金额校验失败");
+        List<OrderCreateRes> resList = new ArrayList<>();
+        for (OrderReq.OrderReqInfo info : orderReq.getOrderInfos()) {
+            Function<OrderReq.OrderReqInfo, HttpResponseResult<OrderCreateRes>> createFunction = orderCreate.get(info.getGoodType());
+            if (Objects.isNull(createFunction)) {
+                return HttpResponseResult.failed("订单商品信息获取失败");
+            }
+            info.setUserId(orderReq.getUserId());
+            HttpResponseResult<OrderCreateRes> createResult = createFunction.apply(info);
+            OrderCreateRes createRes = createResult.getData();
+            createRes.setGoodType(info.getGoodType());
+            if (!createResult.getStatus() || null == createRes || !createRes.getRes()) {
+                log.info("订单[创建订单] Res:{}", JSONObject.toJSONString(createResult));
+                return HttpResponseResult.failed("订单商品信息获取失败");
+            }
+            resList.add(createRes);
         }
-        //验证成功后,订单入库
-        UserOrderVo orderVo = insertOrder(orderReq, checkResult.getData());
 
-        Consumer<UserOrderVo> afterFunction = orderAfter.get(orderReq.getOrderType());
-        if (!Objects.isNull(afterFunction)) {
-            afterFunction.accept(orderVo);
+        //验证成功后,订单入库
+        UserOrderVo orderVo = insertOrder(orderReq, resList);
+        List<UserOrderDetailVo> orderDetailList = orderVo.getOrderDetailList();
+        for(UserOrderDetailVo orderDetailVo : orderDetailList){
+            orderDetailVo.setUserId(orderReq.getUserId());
+            orderDetailVo.setOrderId(orderVo.getId());
+
+            Consumer<UserOrderDetailVo> afterFunction = orderAfter.get(orderDetailVo.getGoodType());
+            if (!Objects.isNull(afterFunction)) {
+                afterFunction.accept(orderDetailVo);
+            }
         }
         return HttpResponseResult.succeed(orderVo);
     }
@@ -151,7 +157,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         if (null == detail || !payReq.getUserId().equals(detail.getUserId())) {
             return HttpResponseResult.failed("订单不存在");
         }
-        if (OrderStatusEnum.WAIT_PAY.equals(detail.getStatus())) {
+        if (OrderStatusEnum.WAIT_PAY.equals(detail.getStatus()) || OrderStatusEnum.FAIL.equals(detail.getStatus())) {
             //处于待支付状态,需要调用汇付发起付款请求接口
             return orderPayWaitPay(payReq, detail);
         } else if (OrderStatusEnum.PAYING.equals(detail.getStatus())) {
@@ -171,7 +177,9 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
                 log.error("汇付支付回调,订单未找到。 req is {}", data);
                 return;
             }
-            if (detail.getStatus().equals(OrderStatusEnum.PAYING)) {
+            if (!detail.getStatus().equals(OrderStatusEnum.PAID)
+                    && !detail.getStatus().equals(OrderStatusEnum.WAIT_PAY)
+                    && !detail.getStatus().equals(OrderStatusEnum.CLOSE)) {
                 orderSuccess(detail, hfRes);
             } else {
                 log.error("汇付支付回调,订单状态异常。 req is {}", data);
@@ -186,6 +194,9 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         List<UserOrderVo> orderList = baseMapper.selectPendingList();
         for (UserOrderVo userOrder : orderList) {
             //待支付订单直接取消
+            if (OrderStatusEnum.FAIL.equals(userOrder.getStatus())) {
+                failPayOrderHandle(userOrder);
+            }
             if (OrderStatusEnum.WAIT_PAY.equals(userOrder.getStatus())) {
                 waitPayOrderHandle(userOrder);
             }
@@ -196,6 +207,16 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     }
 
     /***
+     * 处理支付失败订单
+     * @author liweifan
+     * @param: userOrder
+     * @updateTime 2022/4/13 16:51
+     */
+    private void failPayOrderHandle(UserOrderVo userOrder) {
+        orderCancel(userOrder);
+    }
+
+    /***
      * 处理待支付订单
      * @author liweifan
      * @param: userOrder
@@ -263,15 +284,24 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             paymentReq.setExpend(expend);
         }
         //付款请求
-        Map<String, Object> res = paymentSdk.executePayment(paymentReq);
-
-        OrderPayRes orderPayRes = new OrderPayRes();
-        orderPayRes.setPay_amt(detail.getActualPrice().setScale(2).toString());
-        String pay_info = ((JSONObject) res.get("expend")).getString("pay_info");
-        orderPayRes.setPay_info(pay_info);
-        //入订单付款表,同时修改订单状态
-        insertOrderPayment(res, payReq);
-        return HttpResponseResult.succeed(orderPayRes);
+        HttpResponseResult<Map<String, Object>> responseResult = paymentSdk.executePayment(paymentReq);
+        if (responseResult.getStatus()) {
+            OrderPayRes orderPayRes = new OrderPayRes();
+            orderPayRes.setPay_amt(detail.getActualPrice().setScale(2).toString());
+            String pay_info = ((JSONObject) responseResult.getData().get("expend")).getString("pay_info");
+            orderPayRes.setPay_info(pay_info);
+
+            //入订单付款表,同时修改订单状态
+            insertOrderPayment(responseResult, payReq);
+            baseMapper.updateStatusByOrderNo(payReq.getOrderNo(), OrderStatusEnum.PAYING.getCode());
+            return HttpResponseResult.succeed(orderPayRes);
+        } else {
+            //入订单付款表,同时修改订单状态
+            insertOrderPayment(responseResult, payReq);
+            baseMapper.updateStatusByOrderNo(payReq.getOrderNo(), OrderStatusEnum.FAIL.getCode());
+            return HttpResponseResult.failed(responseResult.getMsg());
+        }
+
     }
 
     /***
@@ -282,19 +312,23 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
      * @updateTime 2022/4/13 17:56
      * @return: com.yonge.cooleshow.biz.dal.entity.UserOrderPayment
      */
-    private UserOrderPayment insertOrderPayment(Map<String, Object> res, OrderPayReq payReq) {
+    private UserOrderPayment insertOrderPayment(HttpResponseResult<Map<String, Object>> responseResult, OrderPayReq payReq) {
         UserOrderPayment orderPayment = new UserOrderPayment();
         orderPayment.setOrderNo(payReq.getOrderNo());
         orderPayment.setPayChannel(payReq.getPayChannel());
-
-        orderPayment.setTransNo(res.get("id").toString());
-        orderPayment.setPayAmt(
-                new BigDecimal(res.get("pay_amt").toString()).setScale(2)
-        );
-        String pay_info = ((JSONObject) res.get("expend")).getString("pay_info");
-        orderPayment.setPayInfo(pay_info);
-        orderPayment.setStatus(PayStatusEnum.pending);
-
+        if (responseResult.getStatus()) {
+            Map<String, Object> res = responseResult.getData();
+            orderPayment.setTransNo(res.get("id").toString());
+            orderPayment.setPayAmt(
+                    new BigDecimal(res.get("pay_amt").toString()).setScale(2)
+            );
+            String pay_info = ((JSONObject) res.get("expend")).getString("pay_info");
+            orderPayment.setPayInfo(pay_info);
+            orderPayment.setStatus(PayStatusEnum.pending);
+        } else {
+            orderPayment.setPayFailMsg(responseResult.getMsg());
+            orderPayment.setStatus(PayStatusEnum.failed);
+        }
         orderPaymentService.save(orderPayment);
         return orderPayment;
     }
@@ -326,52 +360,65 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
      * @updateTime 2022/3/31 16:15
      * @return: com.yonge.cooleshow.biz.dal.entity.Order
      */
-    private UserOrderVo insertOrder(OrderReq orderReq, OrderCreateRes data) {
+    private UserOrderVo insertOrder(OrderReq orderReq, List<OrderCreateRes> resList) {
         UserOrder userOrder = new UserOrder();
         //订单号生成
         Long orderNo = idGeneratorService.generatorId("userOrder");
         userOrder.setOrderNo(orderNo.toString());
         userOrder.setUserId(orderReq.getUserId());
-        userOrder.setMerchId(data.getMerchId());
         userOrder.setOrderName(orderReq.getOrderName());
+        userOrder.setOrderType(orderReq.getOrderType());
         userOrder.setOrderDesc(orderReq.getOrderDesc());
         userOrder.setStatus(OrderStatusEnum.WAIT_PAY);
-        userOrder.setOriginalPrice(data.getOriginalPrice());
-        userOrder.setExpectPrice(data.getExpectPrice());
+        userOrder.setUserNote(orderReq.getUserNote());
+        userOrder.setCreateTime(new Date());
+        userOrder.setOriginalPrice(new BigDecimal(0));
+        userOrder.setExpectPrice(new BigDecimal(0));
+        userOrder.setPlantformFee(new BigDecimal(0));
+        List<UserOrderDetailVo> orderDetailList = new ArrayList<>();
+        for (OrderCreateRes res : resList) {
+            UserOrderDetailVo orderDetail = new UserOrderDetailVo();
+            orderDetail.setOrderNo(userOrder.getOrderNo());
+            orderDetail.setMerchId(res.getMerchId());
+            orderDetail.setGoodType(res.getGoodType());
+            orderDetail.setBizId(res.getBizId());
+            orderDetail.setBizContent(res.getBizContent());
+            orderDetail.setOriginalPrice(null != res.getOriginalPrice() ? res.getOriginalPrice() : new BigDecimal(0));
+            orderDetail.setExpectPrice(null != res.getExpectPrice() ? res.getExpectPrice() : new BigDecimal(0));
+            orderDetail.setGoodNum(null != res.getGoodNum() ? res.getGoodNum() : 1);
+            //商品单价计算,使用商品原价计算,退费计算公式(退费金额=实际订单金额-(商品单价 * 已经使用商品数))
+            //其中,已经使用的商品单价按照原价算
+            orderDetail.setGoodPrice(
+                    orderDetail.getOriginalPrice().divide(new BigDecimal(orderDetail.getGoodNum())).setScale(2)
+            );
+            //平台服务费
+            BigDecimal serviceFeeRate = getServiceFeeRate(res.getGoodType());
+            orderDetail.setPlantformFee(userOrder.getExpectPrice().multiply(serviceFeeRate));
+            orderDetail.setPlantformFeeRate(serviceFeeRate);
+
+            orderDetail.setCreateTime(new Date());
+            orderDetailService.save(orderDetail);
+            orderDetailList.add(orderDetail);
+
+            userOrder.setOriginalPrice(userOrder.getOriginalPrice().add(orderDetail.getOriginalPrice()));
+            userOrder.setExpectPrice(userOrder.getExpectPrice().add(orderDetail.getExpectPrice()));
+            userOrder.setPlantformFee(userOrder.getPlantformFee().add(orderDetail.getPlantformFee()));
+        }
 
         //todo 优惠券优惠金额,暂时为0
         BigDecimal couponAmount = new BigDecimal(0);
-
-        userOrder.setActualPrice(data.getExpectPrice().subtract(couponAmount).setScale(2));
+        userOrder.setActualPrice(userOrder.getExpectPrice().subtract(couponAmount).setScale(2));
         userOrder.setCouponAmount(couponAmount);
-        //平台服务费
-        BigDecimal serviceFeeRate = getServiceFeeRate(orderReq.getOrderType());
-        userOrder.setPlantformFee(userOrder.getActualPrice().multiply(serviceFeeRate));
-        userOrder.setPlantformFeeRate(serviceFeeRate);
-        userOrder.setUserNote(orderReq.getUserNote());
-        userOrder.setOrderType(orderReq.getOrderType());
-        userOrder.setCreateTime(new Date());
+        if (userOrder.getActualPrice().subtract(orderReq.getActualPrice()).abs()
+                .compareTo(new BigDecimal(0.01)) > 0) {
+            throw new BizException("交易金额异常");
+        }
+
         int insert = baseMapper.insert(userOrder);
 
         if (insert == 0 || null == userOrder.getId()) {
             throw new BizException("插入失败");
         }
-        UserOrderDetail orderDetail = new UserOrderDetail();
-        orderDetail.setOrderNo(userOrder.getOrderNo());
-        orderDetail.setBizId(data.getBizId());
-        orderDetail.setBizContent(data.getBizContent());
-        if (null != data.getGoodNum()) {
-            orderDetail.setGoodNum(data.getGoodNum());
-        }
-
-        //商品单价计算,使用商品原价计算,退费计算公式(退费金额=实际订单金额-(商品单价 * 已经使用商品数))
-        //其中,已经使用的商品单价按照原价算
-        orderDetail.setGoodPrice(
-                data.getOriginalPrice().divide(new BigDecimal(data.getGoodNum())).setScale(2)
-        );
-        orderDetail.setCreateTime(new Date());
-        orderDetailService.save(orderDetail);
-
         UserOrderVo vo = new UserOrderVo();
         try {
             BeanUtils.copyProperties(vo, userOrder);
@@ -379,7 +426,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             e.printStackTrace();
             throw new BizException("对象转换失败");
         }
-        vo.setOrderDetail(orderDetail);
+        vo.setOrderDetailList(orderDetailList);
         return vo;
     }
 
@@ -390,15 +437,15 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
      * @updateTime 2022/3/31 16:49
      * @return: java.math.BigDecimal
      */
-    private BigDecimal getServiceFeeRate(OrderTypeEnum orderTypeEnum) {
+    private BigDecimal getServiceFeeRate(GoodTypeEnum goodTypeEnum) {
         String configValue = "0";
-        if (OrderTypeEnum.VIDEO.equals(orderTypeEnum)) {
+        if (GoodTypeEnum.VIDEO.equals(goodTypeEnum)) {
             configValue = sysConfigService.findConfigValue(SysConfigConstant.VIDEO_LESSON_SERVICE_FEE);
-        } else if (OrderTypeEnum.PRACTICE.equals(orderTypeEnum)) {
+        } else if (GoodTypeEnum.PRACTICE.equals(goodTypeEnum)) {
             configValue = sysConfigService.findConfigValue(SysConfigConstant.PRACTICE_SERVICE_FEE);
-        } else if (OrderTypeEnum.LIVE.equals(orderTypeEnum)) {
+        } else if (GoodTypeEnum.LIVE.equals(goodTypeEnum)) {
             configValue = sysConfigService.findConfigValue(SysConfigConstant.LIVE_SERVICE_RATE);
-        } else if (OrderTypeEnum.MUSIC.equals(orderTypeEnum)) {
+        } else if (GoodTypeEnum.MUSIC.equals(goodTypeEnum)) {
             configValue = sysConfigService.findConfigValue(SysConfigConstant.MUSIC_SHEET_SERVICE_FEE);
         }
         return new BigDecimal(configValue).divide(new BigDecimal(100));
@@ -429,12 +476,18 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         if (null != orderPayment) {
             //更新付款单
             orderPayment.setStatus(PayStatusEnum.failed);
+            orderPayment.setPayFailMsg("交易取消");
             orderPaymentService.updateById(orderPayment);
         }
-        //调用业务
-        Consumer<UserOrderVo> userOrderVoConsumer = orderCancel.get(userOrder.getOrderType());
-        if (!Objects.isNull(userOrderVoConsumer)) {
-            userOrderVoConsumer.accept(userOrder);
+        List<UserOrderDetailVo> orderDetailList = orderDetailService.getOrderDetilListByOrderNo(userOrder.getOrderNo());
+        for(UserOrderDetailVo orderDetailVo : orderDetailList){
+            orderDetailVo.setUserId(userOrder.getUserId());
+            orderDetailVo.setOrderId(userOrder.getId());
+            //调用业务
+            Consumer<UserOrderDetailVo> userOrderVoConsumer = orderCancel.get(orderDetailVo.getGoodType());
+            if (!Objects.isNull(userOrderVoConsumer)) {
+                userOrderVoConsumer.accept(orderDetailVo);
+            }
         }
     }
 
@@ -468,10 +521,16 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             }
         }
         orderPaymentService.updateById(orderPayment);
-        //调用业务
-        Consumer<UserOrderVo> userOrderVoConsumer = orderSuccess.get(detail.getOrderType());
-        if (!Objects.isNull(userOrderVoConsumer)) {
-            userOrderVoConsumer.accept(detail);
+
+        List<UserOrderDetailVo> orderDetailList = orderDetailService.getOrderDetilListByOrderNo(detail.getOrderNo());
+        for(UserOrderDetailVo orderDetailVo : orderDetailList){
+            orderDetailVo.setUserId(detail.getUserId());
+            orderDetailVo.setOrderId(detail.getId());
+            //调用业务
+            Consumer<UserOrderDetailVo> userOrderVoConsumer = orderSuccess.get(orderDetailVo.getGoodType());
+            if (!Objects.isNull(userOrderVoConsumer)) {
+                userOrderVoConsumer.accept(orderDetailVo);
+            }
         }
     }
 }

+ 6 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonGroupServiceImpl.java

@@ -78,6 +78,12 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
         videoLessonGroupDao.updateGroup(lessonGroupUpVo);
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void updateGroup(VideoLessonExamineVo examineVo) {
+        videoLessonGroupDao.updateExamine(examineVo);
+    }
+
     /**
      * @Description: 删除视频课
      * @Author: cy

+ 10 - 8
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VipCardServiceImpl.java

@@ -5,10 +5,12 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.entity.VipCardRecord;
+import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.VipTimeTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.StudentService;
 import com.yonge.cooleshow.biz.dal.service.VipCardRecordService;
 import com.yonge.cooleshow.biz.dal.vo.StudentVo;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -52,8 +54,8 @@ public class VipCardServiceImpl extends ServiceImpl<VipCardDao, VipCard> impleme
     }
 
     @Override
-    public HttpResponseResult<OrderCreateRes> orderCreate(OrderReq orderReq) {
-        VipCardVo detail = detail(Long.parseLong(orderReq.getBizContent()));
+    public HttpResponseResult<OrderCreateRes> orderCreate(OrderReq.OrderReqInfo orderReqInfo) {
+        VipCardVo detail = detail(Long.parseLong(orderReqInfo.getBizContent()));
         if (null == detail) {
             return HttpResponseResult.failed("未找到会员卡信息");
         }
@@ -62,7 +64,7 @@ public class VipCardServiceImpl extends ServiceImpl<VipCardDao, VipCard> impleme
         orderCreateRes.setRes(true);
         orderCreateRes.setBizId(detail.getId());
         orderCreateRes.setBizContent("会员卡购买-" + detail.getTimeTypeName());
-
+        orderCreateRes.setGoodNum(1);
         orderCreateRes.setOriginalPrice(detail.getOriginalPrice());
         orderCreateRes.setExpectPrice(detail.getActualPrice());
         return HttpResponseResult.succeed(orderCreateRes);
@@ -70,19 +72,19 @@ public class VipCardServiceImpl extends ServiceImpl<VipCardDao, VipCard> impleme
 
 
     @Override
-    public void orderSuccess(UserOrderVo orderVo) {
-        VipCardVo detail = detail(orderVo.getOrderDetail().getBizId());
+    public void orderSuccess(UserOrderDetailVo orderDetailVo) {
+        VipCardVo detail = detail(orderDetailVo.getBizId());
         if (null == detail) {
             return;
         }
-        StudentVo studentVo = studentService.detail(orderVo.getUserId());
+        StudentVo studentVo = studentService.detail(orderDetailVo.getUserId());
         //修改用户会员时长
         Date membershipEndTime = studentVo.getMembershipEndTime();
         Calendar now = Calendar.getInstance();
 
         VipCardRecord vipCardRecord = new VipCardRecord();
-        vipCardRecord.setUserId(orderVo.getUserId());
-        vipCardRecord.setOrderId(orderVo.getId());
+        vipCardRecord.setUserId(orderDetailVo.getUserId());
+        vipCardRecord.setOrderId(orderDetailVo.getOrderId());
         vipCardRecord.setVipCardId(detail.getId());
 
 

+ 101 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseRepliedVo.java

@@ -0,0 +1,101 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.entity.CourseScheduleReplied;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.util.Date;
+
+/**
+ * @Author: cy
+ * @Date: 2022/4/19
+ */
+@ApiModel(value = "CourseRepliedVo")
+public class CourseRepliedVo extends CourseScheduleReplied {
+    @ApiModelProperty("用户名")
+    private String userName;
+
+    @ApiModelProperty("头像地址")
+    private String avatar;
+
+    @ApiModelProperty("上课日期")
+    private String classDate;
+
+    @ApiModelProperty("上课时间")
+    private String startTime;
+
+    @ApiModelProperty("下课时间")
+    private String endTime;
+
+    @ApiModelProperty("课程状态 NOT_START未开始 ING进行中 COMPLETE已完成 CANCEL已取消")
+    private String status;
+
+    @ApiModelProperty("声部id")
+    private Integer subjectId;
+
+    @ApiModelProperty("声部名称")
+    private String subjectName;
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public String getClassDate() {
+        return classDate;
+    }
+
+    public void setClassDate(String classDate) {
+        this.classDate = classDate;
+    }
+
+    public String getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(String startTime) {
+        this.startTime = startTime;
+    }
+
+    public String getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(String endTime) {
+        this.endTime = endTime;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public Integer getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(Integer subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+}

+ 146 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/PracticeTeacherVo.java

@@ -0,0 +1,146 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * @Author: cy
+ * @Date: 2022/4/19
+ */
+@ApiModel(value = "PracticeTeacherVo")
+public class PracticeTeacherVo implements Serializable {
+    @ApiModelProperty(value = "老师id")
+    private Integer teacherId;
+
+    @ApiModelProperty(value = "用户姓名")
+    private String userName;
+
+    @ApiModelProperty(value = "头像地址")
+    private String avatar;
+
+    @ApiModelProperty(value = "星级")
+    private String starGrade;
+
+    @ApiModelProperty(value = "已上课时")
+    private String expTime;
+
+    @ApiModelProperty(value = "毕业学校")
+    private String school;
+
+    @ApiModelProperty(value = "学校专业")
+    private String schoolSubject;
+
+    @ApiModelProperty(value = "设置的声部")
+    private String configSubject;
+
+    @ApiModelProperty(value = "声部id")
+    private Integer subjectId;
+
+    @ApiModelProperty(value = "声部名称")
+    private String subjectName;
+
+    @ApiModelProperty(value = "声部价格")
+    private String subjectPrice;
+
+    @ApiModelProperty(value = "课程时长(分钟)")
+    private String courseMinutes;
+
+    public Integer getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Integer teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public String getStarGrade() {
+        return starGrade;
+    }
+
+    public void setStarGrade(String starGrade) {
+        this.starGrade = starGrade;
+    }
+
+    public String getExpTime() {
+        return expTime;
+    }
+
+    public void setExpTime(String expTime) {
+        this.expTime = expTime;
+    }
+
+    public String getSchool() {
+        return school;
+    }
+
+    public void setSchool(String school) {
+        this.school = school;
+    }
+
+    public String getSchoolSubject() {
+        return schoolSubject;
+    }
+
+    public void setSchoolSubject(String schoolSubject) {
+        this.schoolSubject = schoolSubject;
+    }
+
+    public String getConfigSubject() {
+        return configSubject;
+    }
+
+    public void setConfigSubject(String configSubject) {
+        this.configSubject = configSubject;
+    }
+
+    public Integer getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(Integer subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public String getSubjectPrice() {
+        return subjectPrice;
+    }
+
+    public void setSubjectPrice(String subjectPrice) {
+        this.subjectPrice = subjectPrice;
+    }
+
+    public String getCourseMinutes() {
+        return courseMinutes;
+    }
+
+    public void setCourseMinutes(String courseMinutes) {
+        this.courseMinutes = courseMinutes;
+    }
+}
+

+ 22 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderDetailVo.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.vo;
 
 import com.yonge.cooleshow.biz.dal.entity.UserOrderDetail;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 
 /**
  * @Author: liweifan
@@ -11,4 +12,25 @@ import io.swagger.annotations.ApiModel;
 public class UserOrderDetailVo extends UserOrderDetail {
 	private static final long serialVersionUID = 1L;
 
+	@ApiModelProperty("买家id ")
+	private Long userId;
+
+	@ApiModelProperty("订单id ")
+	private Long orderId;
+
+	public Long getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Long userId) {
+		this.userId = userId;
+	}
+
+	public Long getOrderId() {
+		return orderId;
+	}
+
+	public void setOrderId(Long orderId) {
+		this.orderId = orderId;
+	}
 }

+ 6 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderVo.java

@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * @Author: liweifan
@@ -15,7 +16,7 @@ import java.math.BigDecimal;
 public class UserOrderVo extends UserOrder {
 	private static final long serialVersionUID = 1L;
 	@ApiModelProperty("订单详情 ")
-	private UserOrderDetail orderDetail;
+	private List<UserOrderDetailVo> orderDetailList;
 	@ApiModelProperty("交易流水号 ")
 	private String transNo;
 	@ApiModelProperty("汇付收取的服务费 ")
@@ -25,12 +26,12 @@ public class UserOrderVo extends UserOrder {
 	@ApiModelProperty(value = "手机号")
 	private String phone;
 
-	public UserOrderDetail getOrderDetail() {
-		return orderDetail;
+	public List<UserOrderDetailVo> getOrderDetailList() {
+		return orderDetailList;
 	}
 
-	public void setOrderDetail(UserOrderDetail orderDetail) {
-		this.orderDetail = orderDetail;
+	public void setOrderDetailList(List<UserOrderDetailVo> orderDetailList) {
+		this.orderDetailList = orderDetailList;
 	}
 
 	public String getTransNo() {

+ 38 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonExamineVo.java

@@ -0,0 +1,38 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.valid.ListValue;
+import com.yonge.cooleshow.common.entity.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Author: cy
+ * @Date: 2022/4/19
+ */
+@ApiModel(value = "VideoLessonExamineVo")
+public class VideoLessonExamineVo extends BaseEntity {
+    @ApiModelProperty(value = "主键id")
+    @NotNull(message = "视频组id不能为空")
+    private Long id;
+
+    @ApiModelProperty(value = "审核状态  UNPAALY、未申请 DOING、审核中 PASS、通过 UNPASS、不通过")
+    private String auditStatus;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getAuditStatus() {
+        return auditStatus;
+    }
+
+    public void setAuditStatus(String auditStatus) {
+        this.auditStatus = auditStatus;
+    }
+}

+ 13 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/res/OrderCreateRes.java

@@ -1,5 +1,8 @@
 package com.yonge.cooleshow.biz.dal.vo.res;
 
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -15,13 +18,14 @@ public class OrderCreateRes {
     private Boolean res;
     @ApiModelProperty("商家id")
     private Long merchId;
+    @ApiModelProperty("商品类型:  VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播")
+    private GoodTypeEnum goodType;
     @ApiModelProperty("业务id")
     private Long bizId;
     @ApiModelProperty(value = "业务内容")
     private String bizContent;
     @ApiModelProperty("商品数量 ")
     private Integer goodNum;
-
     @ApiModelProperty(value = "原价 ")
     private BigDecimal originalPrice;
     @ApiModelProperty(value = "预计价格 ")
@@ -82,4 +86,12 @@ public class OrderCreateRes {
     public void setGoodNum(Integer goodNum) {
         this.goodNum = goodNum;
     }
+
+    public GoodTypeEnum getGoodType() {
+        return goodType;
+    }
+
+    public void setGoodType(GoodTypeEnum goodType) {
+        this.goodType = goodType;
+    }
 }

+ 23 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseGroupMapper.xml

@@ -216,4 +216,27 @@
         </where>
         order by  cs.class_num_
     </select>
+
+    <select id="selectAdminLiveCourseGroup" resultType="com.yonge.cooleshow.biz.dal.vo.LiveCourseGroupVo">
+        select distinct
+            cg.id_ as courseGroupId,
+            cg.name_ as name,
+            cg.complete_course_num_ as endCourseNum,
+            if(cg.complete_course_num_ = 0 ,cg.course_num_,cg.course_num_ - cg.complete_course_num_) as noStartCourseNum,
+            cg.course_price_ as coursePrice,
+            cg.pre_student_num_ as preStudentNum,
+            cg.status_ as status,
+            cg.course_num_ as courseNum,
+            cg.created_time_ as createTime,
+            cg.course_introduce_ as courseIntroduce,
+            s.name_ as subjectName
+        from course_group cg
+         left join course_schedule_student_payment cssp on cg.id_ = cssp.course_group_id_
+        left join subject s on cg.subject_id_ = s.id_
+        <where>
+            <if test="courseGroupId != null">
+                and #{courseGroupId} = cg.id_
+            </if>
+        </where>
+    </select>
 </mapper>

+ 36 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -312,4 +312,40 @@
         <![CDATA[ AND class_date_  >= #{startDate} ]]>
         <![CDATA[ AND class_date_  <= #{endDate} ]]>
     </select>
+    <select id="teacherList" resultType="com.yonge.cooleshow.biz.dal.vo.PracticeTeacherVo">
+        SELECT
+            cs.teacher_id_ AS teacherId,
+            u.username_ AS userName,
+            u.avatar_ AS avatar,
+
+            tt.star_grade_ AS starGrade,
+            tt.exp_time_ AS expTime,
+            t.graduate_school_ AS school,
+            t.subject_ AS schoolSubject,
+
+            (SELECT group_concat(p.subject_name_) FROM teacher_subject_price p WHERE find_in_set(cs.teacher_id_,p.teacher_id_)) AS configSubject,
+            sp.subject_id_ AS subjectId,
+            sp.subject_name_ AS subjectName,
+            sp.subject_price_ AS subjectPrice,
+            sp.course_minutes_ AS courseMinutes
+
+        FROM course_schedule cs
+        LEFT JOIN sys_user u ON cs.teacher_id_ = u.id_
+        LEFT JOIN teacher_total tt ON cs.teacher_id_=tt.user_id_
+        LEFT JOIN teacher t ON cs.teacher_id_=t.user_id_
+        LEFT JOIN teacher_subject_price sp ON cs.teacher_id_=sp.teacher_id_
+
+        WHERE cs.type_='PRACTICE'
+        <if test="param.subjectId !=null">
+            AND sp.subject_id_=#{param.subjectId}
+        </if>
+        <if test="param.search !=null and param.search !=''">
+            AND u.username_ LIKE CONCAT('%', #{param.search}, '%')
+        </if>
+        <choose>
+            <when test="param.sort !=null and param.sort !=''">
+                ORDER BY ${param.sort}
+            </when>
+        </choose>
+    </select>
 </mapper>

+ 24 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleRepliedMapper.xml

@@ -133,4 +133,28 @@
             AND DATE_FORMAT(s.class_date_,'%Y-%m') = #{param.classDate}
         </if>
     </select>
+    <select id="selectReplied" resultType="com.yonge.cooleshow.biz.dal.vo.CourseRepliedVo"
+            parameterType="com.yonge.cooleshow.biz.dal.entity.CourseScheduleReplied">
+        SELECT
+            <include refid="baseColumns"/>,
+            u.username_ AS userName,
+            u.avatar_ AS avatar,
+
+            s.class_date_ AS classDate,
+            s.start_time_ AS startTime,
+            s.end_time_ AS endTime,
+            s.status_ AS status,
+
+            g.subject_id_ AS subjectId,
+            sb.name_ AS subjectName
+        FROM course_schedule_replied t
+        LEFT JOIN sys_user u ON t.student_id_=u.id_
+        LEFT JOIN course_schedule s ON t.course_schedule_id_=s.id_
+        LEFT JOIN course_group g ON t.course_group_id_=g.id_
+        LEFT JOIN `subject` sb ON g.subject_id_=sb.id_
+        WHERE t.student_id_=#{studentId}
+        AND t.course_schedule_id_=#{courseScheduleId}
+        AND t.course_group_id_=#{courseGroupId}
+        AND t.course_group_type_=#{courseGroupType}
+    </select>
 </mapper>

+ 6 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/PracticeMapper.xml

@@ -37,6 +37,9 @@
 		<if test="null != param.subjectId">
 			AND s.id_ = #{param.subjectId}
 		</if>
+		<if test="null != param.status and '' != param.status">
+			AND cs.status_ = #{param.status}
+		</if>
 		<if test="param.startTime !=null">
 			<![CDATA[AND p.created_time_ >= #{param.startTime} ]]>
 		</if>
@@ -76,6 +79,9 @@
 		<if test="null != param.orderNo and '' != param.orderNo">
 			AND p.order_no_ = #{param.orderNo}
 		</if>
+		<if test="null != param.status and '' != param.status">
+			AND cs.status_ = #{param.status}
+		</if>
 		<if test="null != param.subjectId">
 			AND s.id_ = #{param.subjectId}
 		</if>

+ 25 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderDetailMapper.xml

@@ -4,8 +4,16 @@
 	<resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.UserOrderDetail">
             <result column="id_" property="id" />
 	        <result column="order_no_" property="orderNo" />
-	        <result column="biz_id_" property="bizId" />
+            <result column="merch_id_" property="merchId" />
+            <result column="good_type_" property="goodType" />
+            <result column="biz_id_" property="bizId" />
 	        <result column="biz_content_" property="bizContent" />
+            <result column="original_price_" property="originalPrice" />
+            <result column="expect_price_" property="expectPrice" />
+            <result column="good_num_" property="goodNum" />
+            <result column="good_price_" property="goodPrice" />
+            <result column="plantform_fee_" property="plantformFee" />
+            <result column="plantform_fee_rate_" property="plantformFeeRate" />
 	        <result column="create_time_" property="createTime" />
 	        <result column="update_time_" property="updateTime" />
 		</resultMap>
@@ -14,8 +22,16 @@
     <sql id="baseColumns">
          t.id_ as id
         , t.order_no_ as orderNo
+        , t.merch_id_ as merchId
+        , t.good_type_ as goodType
         , t.biz_id_ as bizId
         , t.biz_content_ as bizContent
+        , t.original_price_ as originalPrice
+        , t.expect_price_ as expectPrice
+        , t.good_num_ as goodNum
+        , t.good_price_ as goodPrice
+        , t.plantform_fee_ as plantformFee
+        , t.plantform_fee_rate_ as plantformFeeRate
         , t.create_time_ as createTime
         , t.update_time_ as updateTime
         </sql>
@@ -33,9 +49,16 @@
         where t.order_no_ = #{orderNo}
     </select>
 
-    <select id="selectPage" resultMap="BaseResultMap">
+    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo">
 		SELECT         
         	<include refid="baseColumns" />
 		FROM user_order_detail t
 	</select>
+
+    <select id="getOrderDetilListByOrderNo" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo">
+        SELECT
+            <include refid="baseColumns" />
+        FROM user_order_detail t
+        where t.order_no_ = #{orderNo}
+    </select>
 </mapper>

+ 6 - 14
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml

@@ -5,22 +5,18 @@
             <result column="id_" property="id" />
 	        <result column="order_no_" property="orderNo" />
 	        <result column="user_id_" property="userId" />
-	        <result column="merch_id_" property="merchId" />
 	        <result column="order_name_" property="orderName" />
-	        <result column="order_desc_" property="orderDesc" />
+            <result column="order_type_" property="orderType" />
+            <result column="order_desc_" property="orderDesc" />
 	        <result column="status_" property="status" />
 	        <result column="original_price_" property="originalPrice" />
 	        <result column="expect_price_" property="expectPrice" />
 	        <result column="actual_price_" property="actualPrice" />
 	        <result column="coupon_amount_" property="couponAmount" />
 	        <result column="plantform_fee_" property="plantformFee" />
-	        <result column="plantform_fee_rate_" property="plantformFeeRate" />
-	        <result column="refund_amount_" property="refundAmount" />
 	        <result column="user_note_" property="userNote" />
-	        <result column="order_type_" property="orderType" />
 	        <result column="create_time_" property="createTime" />
 	        <result column="pay_time_" property="payTime" />
-	        <result column="refund_time_" property="refundTime" />
 	        <result column="update_time_" property="updateTime" />
 		</resultMap>  
     
@@ -29,8 +25,8 @@
          t.id_ as id
         , t.order_no_ as orderNo
         , t.user_id_ as userId
-        , t.merch_id_ as merchId
         , t.order_name_ as orderName
+        , t.order_type_ as orderType
         , t.order_desc_ as orderDesc
         , t.status_ as status
         , t.original_price_ as originalPrice
@@ -38,13 +34,9 @@
         , t.actual_price_ as actualPrice
         , t.coupon_amount_ as couponAmount
         , t.plantform_fee_ as plantformFee
-        , t.plantform_fee_rate_ as plantformFeeRate
-        , t.refund_amount_ as refundAmount
         , t.user_note_ as userNote
-        , t.order_type_ as orderType
         , t.create_time_ as createTime
         , t.pay_time_ as payTime
-        , t.refund_time_ as refundTime
         , t.update_time_ as updateTime
         </sql>
 
@@ -114,9 +106,6 @@
             <if test="param.userId !=null">
                 AND t.user_id_ = #{param.userId}
             </if>
-            <if test="param.merchId !=null">
-                AND t.merch_id_ = #{param.merchId}
-            </if>
         </where>
         order by t.create_time_ desc
         </sql>
@@ -133,4 +122,7 @@
         and t.create_time_ &lt;= date_sub(now(),interval 30 minute)
     </select>
 
+    <update id="updateStatusByOrderNo">
+        update user_order set status_ = #{orderStatus} where order_no_ = #{orderNo}
+    </update>
 </mapper>

+ 2 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderPaymentMapper.xml

@@ -10,6 +10,7 @@
         <result column="fee_amt_" property="feeAmt" />
         <result column="pay_info_" property="payInfo" />
         <result column="status_" property="status" />
+        <result column="pay_fail_msg_" property="payFailMsg" />
         <result column="arrival_time_" property="arrivalTime" />
         <result column="create_time_" property="createTime" />
         <result column="update_time_" property="updateTime" />
@@ -25,6 +26,7 @@
         , t.fee_amt_ as feeAmt
         , t.pay_info_ as payInfo
         , t.status_ as status
+        , t.pay_fail_msg_ as payFailMsg
         , t.arrival_time_ as arrivalTime
         , t.create_time_ as createTime
         , t.update_time_ as updateTime

+ 8 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupMapper.xml

@@ -56,6 +56,14 @@
 		</set>
 		WHERE id_ = #{id}
 	</update>
+	<update id="updateExamine" parameterType="com.yonge.cooleshow.biz.dal.vo.VideoLessonExamineVo">
+		UPDATE video_lesson_group
+		<set>
+			<if test="auditStatus !=null">audit_status_ = #{auditStatus},</if>
+			update_time_ = SYSDATE()
+		</set>
+		WHERE id_ = #{id}
+	</update>
 	<select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.VideoLessonGroupVo">
 		SELECT
 			<include refid="baseColumns"/>,

+ 9 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/CourseScheduleController.java

@@ -4,12 +4,14 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch;
+import com.yonge.cooleshow.biz.dal.dto.search.PracticeTeacherSearch;
 import com.yonge.cooleshow.biz.dal.entity.CourseScheduleReplied;
 import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.service.CourseRepliedService;
 import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.MyCourseVo;
+import com.yonge.cooleshow.biz.dal.vo.PracticeTeacherVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.page.PageInfo;
@@ -90,5 +92,12 @@ public class CourseScheduleController extends BaseController {
         search.setStudentId(user.getId());
         return succeed(courseScheduleService.queryCourseScheduleStudent(search));
     }
+
+    @ApiOperation("学生端-首页-陪练课老师列表")
+    @PostMapping("/teacherList")
+    public HttpResponseResult<PageInfo<PracticeTeacherVo>> teacherList(@RequestBody PracticeTeacherSearch search) {
+        IPage<PracticeTeacherVo> pages = courseScheduleService.teacherList(PageUtil.getPage(search), search);
+        return succeed(PageUtil.pageInfo(pages));
+    }
 }
 

+ 2 - 1
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/CourseRepliedController.java

@@ -8,6 +8,7 @@ import com.yonge.cooleshow.biz.dal.entity.CourseScheduleReplied;
 import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.service.CourseRepliedService;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.vo.CourseRepliedVo;
 import com.yonge.cooleshow.biz.dal.vo.MyRepliedVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -46,7 +47,7 @@ public class CourseRepliedController extends BaseController {
 
     @ApiOperation(value = "首页-我的课程-课程详情-查询陪练课评价")
     @PostMapping(value = "/selectReplied")
-    public HttpResponseResult<CourseScheduleReplied> selectReplied(@Validated @RequestBody CourseScheduleReplied replied) {
+    public HttpResponseResult<CourseRepliedVo> selectReplied(@Validated @RequestBody CourseScheduleReplied replied) {
         replied.setCourseGroupType(CourseScheduleEnum.PRACTICE.getCode());
         return succeed(repliedService.selectReplied(replied));
     }

+ 15 - 5
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/CourseScheduleController.java

@@ -85,7 +85,18 @@ public class CourseScheduleController extends BaseController {
         return succeed(courseScheduleService.createPracticeCourseCalender(param));
     }
 
-    @ApiOperation("老师端-首页-我的课程-陪练课")
+    @ApiOperation(value = "陪练课查询",
+            notes = "老师端-首页-我的课程-陪练课\n" +
+            "search:{\"classMonth\":\"2022-03\",\"status\":\"COMPLETE\",\"subjectId\":1}\n" +
+            "老师端-首页-课后评价\n" +
+            "search:{\"classMonth\":\"2022-03\",\"replied\":0,\"studentName\":\"测试王\"}\n" +
+            "老师端-我的-我的主页\n" +
+            "search:{\"classMonth\":\"2022-03\"}\n" +
+            "老师端-课表\n" +
+            "search:{\"classDate\":\"2022-03-27\"}\n" +
+            "     search:{\"classMonth\":\"2022-03\"}\n" +
+            "老师端-课表-陪练课\n" +
+            "     search:{\"classDate\":\"2022-03-27\"}")
     @PostMapping("/queryTeacherPracticeCourse")
     public HttpResponseResult<PageInfo<MyCourseVo>> queryTeacherPracticeCourse(@RequestBody MyCourseSearch search) {
         SysUser user = sysUserFeignService.queryUserInfo();
@@ -108,16 +119,15 @@ public class CourseScheduleController extends BaseController {
         return succeed(courseScheduleService.queryCourseSchedule(search));
     }
 
-    @ApiOperation("老师端-课表-日历-用户")
+    @ApiOperation(value = "老师端-课表-日历-用户",notes = "search:{\"classDate\":\"2022-03-27\"}")
     @PostMapping("/queryCourseUser")
-    public HttpResponseResult<PageInfo<CourseStudent>> queryCourseUser(@RequestBody MyCourseSearch search) {
+    public HttpResponseResult<Map<String,Object>> queryCourseUser(@RequestBody MyCourseSearch search) {
         SysUser user = sysUserFeignService.queryUserInfo();
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
         search.setTeacherId(user.getId());
-        IPage<CourseStudent> pages = courseScheduleService.queryCourseUser(PageUtil.getPage(search), search);
-        return succeed(PageUtil.pageInfo(pages));
+        return succeed(courseScheduleService.queryCourseUser(search));
     }
 }