瀏覽代碼

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/WithdrawController.java
liweifan 3 年之前
父節點
當前提交
1541f09dbb
共有 16 個文件被更改,包括 899 次插入29 次删除
  1. 1 1
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dto/ProductSearch.java
  2. 32 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/CourseGroupController.java
  3. 51 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseGroupDao.java
  4. 73 9
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/CourseGroupSearch.java
  5. 41 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java
  6. 25 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java
  7. 86 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseGroupStudentVo.java
  8. 115 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseGroupVideoVo.java
  9. 87 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseSchedulePaymentVo.java
  10. 106 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseSchedulePlanVo.java
  11. 144 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseGroupMapper.xml
  12. 14 7
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  13. 12 8
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml
  14. 1 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentCourseGroupController.java
  15. 1 1
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/config/ResourceServerConfig.java
  16. 110 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/WithdrawController.java

+ 1 - 1
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dto/ProductSearch.java

@@ -29,7 +29,7 @@ public class ProductSearch {
     @ApiModelProperty("")
     private Integer pageSize= 5;
 
-    @ApiModelProperty("")
+    @ApiModelProperty("1->按新品;2->按销量;3->价格从低到高;4->价格从高到低")
     private Integer sort = 0;
 
     public String getKeyword() {

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

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.admin.controller;
 
 import com.yonge.cooleshow.biz.dal.dto.search.CourseGroupDetailSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.CourseGroupSearch;
+import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail;
 import com.yonge.cooleshow.biz.dal.service.CourseGroupService;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.*;
@@ -43,4 +44,34 @@ public class CourseGroupController extends BaseController {
     public HttpResponseResult<PageInfo<CourseGroupLiveVo>> selectLiveGroup(@RequestBody CourseGroupSearch search) {
         return succeed(PageUtil.pageInfo(courseGroupService.selectLiveGroup(PageUtil.getPage(search), search)));
     }
-}
+
+    @ApiOperation(value = "课程组管理-直播课-购买学员")
+    @PostMapping(value = "/live/studentPayment")
+    public HttpResponseResult<PageInfo<CourseSchedulePaymentVo>> selectLiveGroupStudent(@RequestBody CourseGroupSearch search) {
+        return succeed(PageUtil.pageInfo(courseGroupService.selectLiveGroupStudent(PageUtil.getPage(search), search)));
+    }
+
+    @ApiOperation(value = "课程组管理-直播课-教学计划")
+    @PostMapping(value = "/live/plan")
+    public HttpResponseResult<PageInfo<CourseSchedulePlanVo>> selectLiveGroupPlan(@RequestBody CourseGroupSearch search) {
+        return succeed(PageUtil.pageInfo(courseGroupService.selectLiveGroupPlan(PageUtil.getPage(search), search)));
+    }
+
+    @ApiOperation(value = "课程组管理-视频课")
+    @PostMapping(value = "/video")
+    public HttpResponseResult<PageInfo<CourseGroupVideoVo>> selectVideoGroup(@RequestBody CourseGroupSearch search) {
+        return succeed(PageUtil.pageInfo(courseGroupService.selectVideoGroup(PageUtil.getPage(search), search)));
+    }
+
+    @ApiOperation(value = "课程组管理-视频课-购买学员")
+    @PostMapping(value = "/video/studentPayment")
+    public HttpResponseResult<PageInfo<CourseGroupStudentVo>> selectVideoGroupStudent(@RequestBody CourseGroupSearch search) {
+        return succeed(PageUtil.pageInfo(courseGroupService.selectVideoGroupStudent(PageUtil.getPage(search), search)));
+    }
+
+    @ApiOperation(value = "课程组管理-视频课-教学计划")
+    @PostMapping(value = "/video/plan")
+    public HttpResponseResult<PageInfo<VideoLessonGroupDetail>> selectVideoGroupPlan(@RequestBody CourseGroupSearch search) {
+        return succeed(PageUtil.pageInfo(courseGroupService.selectVideoGroupPlan(PageUtil.getPage(search), search)));
+    }
+}

+ 51 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseGroupDao.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.*;
 import com.yonge.cooleshow.biz.dal.entity.CourseGroup;
+import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import org.apache.ibatis.annotations.Param;
 
@@ -120,5 +121,55 @@ public interface CourseGroupDao extends BaseMapper<CourseGroup> {
      */
     IPage<CourseGroupLiveVo> selectLiveGroup(@Param("page") IPage<CourseGroupLiveVo> page,
                                              @Param("param") CourseGroupSearch search);
+
+    /**
+     * 查询直播课购买学员
+     *
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseSchedulePaymentVo> selectLiveGroupStudent(@Param("page") IPage<CourseSchedulePaymentVo> page,
+                                                          @Param("param") CourseGroupSearch search);
+
+    /**
+     * 查询直播课教学计划
+     *
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseSchedulePlanVo> selectLiveGroupPlan(@Param("page") IPage<CourseSchedulePlanVo> page,
+                                                    @Param("param") CourseGroupSearch search);
+
+    /**
+     * 查询视频课
+     *
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseGroupVideoVo> selectVideoGroup(@Param("page") IPage<CourseGroupVideoVo> page,
+                                               @Param("param") CourseGroupSearch search);
+
+    /**
+     * 查询视频课购课学员
+     *
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseGroupStudentVo> selectVideoGroupStudent(@Param("page") IPage<CourseGroupStudentVo> page,
+                                                        @Param("param") CourseGroupSearch search);
+
+    /**
+     * 查询视频课教学计划
+     *
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<VideoLessonGroupDetail> selectVideoGroupPlan(@Param("page") IPage<VideoLessonGroupDetail> page,
+                                                       @Param("param") CourseGroupSearch search);
 }
 

+ 73 - 9
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/CourseGroupSearch.java

@@ -1,8 +1,12 @@
 package com.yonge.cooleshow.biz.dal.dto.search;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.toolset.base.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
 
 /**
  * @Author: cy
@@ -16,18 +20,78 @@ public class CourseGroupSearch extends QueryInfo {
     @ApiModelProperty("声部id")
     private Long subjectId;
 
+    @ApiModelProperty("课程组id")
+    private Long groupId;
+
+    @ApiModelProperty("课程id")
+    private Long courseId;
+
     @ApiModelProperty(value = "课程状态")
     private String status;
 
-//    @ApiModelProperty(value = "开始时间")
-//    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-//    private Date startTime;
-//
-//    @ApiModelProperty(value = "结束时间")
-//    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-//    private Date endTime;
+    @ApiModelProperty(value = "结算状态")
+    private String salaryStatus;
+
+    @ApiModelProperty(value = "订单号")
+    private String orderNo;
+
+    @ApiModelProperty(value = "开始时间")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date startTime;
+
+    @ApiModelProperty(value = "结束时间")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endTime;
+
+    public Long getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Long courseId) {
+        this.courseId = courseId;
+    }
+
+    public String getSalaryStatus() {
+        return salaryStatus;
+    }
+
+    public void setSalaryStatus(String salaryStatus) {
+        this.salaryStatus = salaryStatus;
+    }
+
+    public Long getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(Long groupId) {
+        this.groupId = groupId;
+    }
+
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
 
     @Override
     public String getSearch() {

+ 41 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java

@@ -10,7 +10,7 @@ import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.search.*;
 import com.yonge.cooleshow.biz.dal.entity.CourseGroup;
 import com.yonge.cooleshow.biz.dal.entity.CourseTimeEntity;
-import com.yonge.cooleshow.biz.dal.entity.UserOrderRefund;
+import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.biz.dal.vo.res.RefundCreateRes;
@@ -195,5 +195,45 @@ public interface CourseGroupService extends IService<CourseGroup> {
      * @return
      */
     IPage<CourseGroupLiveVo> selectLiveGroup(IPage<CourseGroupLiveVo> page, CourseGroupSearch search);
+
+    /**
+     * 课程组管理-直播课-购买学员
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseSchedulePaymentVo> selectLiveGroupStudent(IPage<CourseSchedulePaymentVo> page, CourseGroupSearch search);
+
+    /**
+     * 课程组管理-直播课-教学计划
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseSchedulePlanVo> selectLiveGroupPlan(IPage<CourseSchedulePlanVo> page, CourseGroupSearch search);
+
+    /**
+     * 课程组管理-视频课
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseGroupVideoVo> selectVideoGroup(IPage<CourseGroupVideoVo> page, CourseGroupSearch search);
+
+    /**
+     * 课程组管理-视频课-购买学员
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseGroupStudentVo> selectVideoGroupStudent(IPage<CourseGroupStudentVo> page, CourseGroupSearch search);
+
+    /**
+     * 课程组管理-视频课-教学计划
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<VideoLessonGroupDetail> selectVideoGroupPlan(IPage<VideoLessonGroupDetail> page, CourseGroupSearch search);
 }
 

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

@@ -920,6 +920,31 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         return baseMapper.selectLiveGroup(page,search);
     }
 
+    @Override
+    public IPage<CourseSchedulePaymentVo> selectLiveGroupStudent(IPage<CourseSchedulePaymentVo> page, CourseGroupSearch search) {
+        return baseMapper.selectLiveGroupStudent(page,search);
+    }
+
+    @Override
+    public IPage<CourseSchedulePlanVo> selectLiveGroupPlan(IPage<CourseSchedulePlanVo> page, CourseGroupSearch search) {
+        return baseMapper.selectLiveGroupPlan(page,search);
+    }
+
+    @Override
+    public IPage<CourseGroupVideoVo> selectVideoGroup(IPage<CourseGroupVideoVo> page, CourseGroupSearch search) {
+        return baseMapper.selectVideoGroup(page,search);
+    }
+
+    @Override
+    public IPage<CourseGroupStudentVo> selectVideoGroupStudent(IPage<CourseGroupStudentVo> page, CourseGroupSearch search) {
+        return baseMapper.selectVideoGroupStudent(page,search);
+    }
+
+    @Override
+    public IPage<VideoLessonGroupDetail> selectVideoGroupPlan(IPage<VideoLessonGroupDetail> page, CourseGroupSearch search) {
+        return baseMapper.selectVideoGroupPlan(page,search);
+    }
+
     /**
      * 定时将符合开售日期的未开售的直播课课程组修改为报名中状态
      */

+ 86 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseGroupStudentVo.java

@@ -0,0 +1,86 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.common.entity.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @Author: cy
+ * @Date: 2022/5/19
+ */
+@ApiModel
+public class CourseGroupStudentVo extends BaseEntity {
+    @ApiModelProperty("学生id")
+    private Long studentId;
+    @ApiModelProperty("学生姓名")
+    private String studentName;
+    @ApiModelProperty("学生真实姓名")
+    private String studentRealName;
+    @ApiModelProperty("学生手机号")
+    private String studentPhone;
+    @ApiModelProperty("订单号")
+    private String orderNo;
+    @ApiModelProperty("支付金额")
+    private BigDecimal payMoney;
+    @ApiModelProperty("下单时间")
+    private Date createTime;
+
+    public String getStudentPhone() {
+        return studentPhone;
+    }
+
+    public void setStudentPhone(String studentPhone) {
+        this.studentPhone = studentPhone;
+    }
+
+    public Long getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Long studentId) {
+        this.studentId = studentId;
+    }
+
+    public String getStudentName() {
+        return studentName;
+    }
+
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
+    }
+
+    public String getStudentRealName() {
+        return studentRealName;
+    }
+
+    public void setStudentRealName(String studentRealName) {
+        this.studentRealName = studentRealName;
+    }
+
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
+
+    public BigDecimal getPayMoney() {
+        return payMoney;
+    }
+
+    public void setPayMoney(BigDecimal payMoney) {
+        this.payMoney = payMoney;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+}

+ 115 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseGroupVideoVo.java

@@ -0,0 +1,115 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.common.entity.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
+
+/**
+ * @Author: cy
+ * @Date: 2022/5/19
+ */
+@ApiModel
+public class CourseGroupVideoVo extends BaseEntity {
+    @ApiModelProperty("课程组id")
+    private Long groupId;
+    @ApiModelProperty("课组名称")
+    private String lessonName;
+    @ApiModelProperty("声部id")
+    private Long subjectId;
+    @ApiModelProperty("声部名称")
+    private String subjectName;
+    @ApiModelProperty("购课人数")
+    private Integer buyCount;
+    @ApiModelProperty("课时总数")
+    private Integer lessonCount;
+    @ApiModelProperty("老师id")
+    private Long teacherId;
+    @ApiModelProperty("老师姓名")
+    private String teacherName;
+    @ApiModelProperty("老师真实姓名")
+    private String teacherRealName;
+    @ApiModelProperty("创建日期")
+    private Date createTime;
+
+    public Long getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(Long groupId) {
+        this.groupId = groupId;
+    }
+
+    public String getLessonName() {
+        return lessonName;
+    }
+
+    public void setLessonName(String lessonName) {
+        this.lessonName = lessonName;
+    }
+
+    public Long getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(Long subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public Integer getBuyCount() {
+        return buyCount;
+    }
+
+    public void setBuyCount(Integer buyCount) {
+        this.buyCount = buyCount;
+    }
+
+    public Integer getLessonCount() {
+        return lessonCount;
+    }
+
+    public void setLessonCount(Integer lessonCount) {
+        this.lessonCount = lessonCount;
+    }
+
+    public Long getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Long teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
+    public String getTeacherRealName() {
+        return teacherRealName;
+    }
+
+    public void setTeacherRealName(String teacherRealName) {
+        this.teacherRealName = teacherRealName;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+}

+ 87 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseSchedulePaymentVo.java

@@ -0,0 +1,87 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @Author: cy
+ * @Date: 2022/5/20
+ */
+@ApiModel
+public class CourseSchedulePaymentVo implements Serializable {
+    @ApiModelProperty(value = "学生id")
+    private Long studentId;
+    @ApiModelProperty(value = "学生姓名")
+    private String studentName;
+    @ApiModelProperty(value = "真实姓名")
+    private String studentRealName;
+    @ApiModelProperty(value = "学生手机号")
+    private String studentPhone;
+    @ApiModelProperty(value = "实际价格")
+    private BigDecimal actualPrice;
+    @ApiModelProperty(value = "订单号")
+    private String orderNo;
+    @ApiModelProperty(value = "下单时间")
+    private Date createdOrderTime;
+
+    public Long getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Long studentId) {
+        this.studentId = studentId;
+    }
+
+    public String getStudentName() {
+        return studentName;
+    }
+
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
+    }
+
+    public String getStudentRealName() {
+        return studentRealName;
+    }
+
+    public void setStudentRealName(String studentRealName) {
+        this.studentRealName = studentRealName;
+    }
+
+    public String getStudentPhone() {
+        return studentPhone;
+    }
+
+    public void setStudentPhone(String studentPhone) {
+        this.studentPhone = studentPhone;
+    }
+
+    public BigDecimal getActualPrice() {
+        return actualPrice;
+    }
+
+    public void setActualPrice(BigDecimal actualPrice) {
+        this.actualPrice = actualPrice;
+    }
+
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
+
+    public Date getCreatedOrderTime() {
+        return createdOrderTime;
+    }
+
+    public void setCreatedOrderTime(Date createdOrderTime) {
+        this.createdOrderTime = createdOrderTime;
+    }
+}
+

+ 106 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseSchedulePlanVo.java

@@ -0,0 +1,106 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Author: cy
+ * @Date: 2022/5/20
+ */
+@ApiModel
+public class CourseSchedulePlanVo implements Serializable {
+    @ApiModelProperty(value = "课程id")
+    private Long courseId;
+    @ApiModelProperty(value = "课程介绍")
+    private String courseIntroduce;
+    @ApiModelProperty(value = "课程状态 NOT_START未开始 ING进行中 COMPLETE已完成 CANCEL已取消")
+    private String courseStatus;
+    @ApiModelProperty(value = "课时数")
+    private Integer classNum;
+    @ApiModelProperty(value = "上课日期")
+    private Date classDate;
+    @ApiModelProperty(value = "上课时间")
+    private Date startTime;
+    @ApiModelProperty(value = "下课时间")
+    private Date endTime;
+    @ApiModelProperty(value = "结算状态 NOT_START未上课、WAIT待结算、COMPLETE已结算、CANCEL已取消")
+    private String salaryStatus;
+    @ApiModelProperty(value = "录播地址")
+    private String url;
+
+    public Long getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Long courseId) {
+        this.courseId = courseId;
+    }
+
+    public String getCourseIntroduce() {
+        return courseIntroduce;
+    }
+
+    public void setCourseIntroduce(String courseIntroduce) {
+        this.courseIntroduce = courseIntroduce;
+    }
+
+    public String getCourseStatus() {
+        return courseStatus;
+    }
+
+    public void setCourseStatus(String courseStatus) {
+        this.courseStatus = courseStatus;
+    }
+
+    public Integer getClassNum() {
+        return classNum;
+    }
+
+    public void setClassNum(Integer classNum) {
+        this.classNum = classNum;
+    }
+
+    public Date getClassDate() {
+        return classDate;
+    }
+
+    public void setClassDate(Date classDate) {
+        this.classDate = classDate;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    public String getSalaryStatus() {
+        return salaryStatus;
+    }
+
+    public void setSalaryStatus(String salaryStatus) {
+        this.salaryStatus = salaryStatus;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+}
+

+ 144 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseGroupMapper.xml

@@ -85,6 +85,9 @@
                 or b.name_ like concat('%',#{param.search},'%')
                 )
             </if>
+            <if test="param.type != null and param.type != ''">
+                and b.type_ = #{param.type}
+            </if>
         </where>
     </select>
 
@@ -135,6 +138,9 @@
             <if test="param.auditVersion != null ">
                 and #{param.auditVersion} = b.audit_version_
             </if>
+            <if test="param.subjectId != null ">
+                and #{param.subjectId} = b.subject_id_
+            </if>
         </where>
     </select>
 
@@ -357,7 +363,7 @@
         LEFT JOIN sys_user su ON sp.user_id_=su.id_
         LEFT JOIN (SELECT course_group_id_,COUNT(1) AS count_ FROM course_schedule WHERE type_='PRACTICE' AND status_='COMPLETE' GROUP BY course_group_id_) cs ON cg.id_=cs.course_group_id_
         LEFT JOIN (SELECT course_group_id_,start_time_ FROM course_schedule WHERE type_='PRACTICE' GROUP BY course_group_id_) cst ON cg.id_=cst.course_group_id_
-        WHERE cg.type_='PRACTICE'
+        WHERE cg.type_='PRACTICE' AND cg.status_ IN('ING','COMPLETE')
         <if test="param.search != null and param.search != ''">
             AND (
             cg.id_ LIKE concat('%',#{param.search},'%') OR
@@ -405,6 +411,7 @@
         LEFT JOIN student_attendance sa ON cs.id_=sa.course_schedule_id_
         LEFT JOIN course_schedule_teacher_salary ts ON cs.id_=ts.course_schedule_id_
         WHERE cs.type_='PRACTICE'
+        AND cs.lock_=0
         AND cs.course_group_id_=#{param.courseGroupId}) a
         <where>
             <if test="param.search != null and param.search != ''">
@@ -477,6 +484,142 @@
             AND cg.status_ = #{param.status}
         </if>
     </select>
+    <select id="selectLiveGroupStudent" resultType="com.yonge.cooleshow.biz.dal.vo.CourseSchedulePaymentVo">
+        SELECT
+            p.user_id_ AS studentId,
+            u.username_ AS studentName,
+            u.real_name_ AS studentRealName,
+            u.phone_ AS studentPhone,
+            p.actual_price_ AS actualPrice,
+            p.order_no_ AS orderNo,
+            o.create_time_ AS createdOrderTime
+        FROM course_schedule_student_payment p
+        LEFT JOIN sys_user u ON p.user_id_=u.id_
+        LEFT JOIN user_order o ON p.order_no_ = o.order_no_
+        WHERE p.course_group_id_=#{param.groupId}
+        <if test="param.search != null and param.search != ''">
+            AND (
+            p.course_id_ LIKE concat('%',#{param.search},'%') OR
+            p.user_id_ LIKE concat('%',#{param.search},'%') OR
+            u.username_ LIKE concat('%',#{param.search},'%') OR
+            u.phone_ LIKE concat('%',#{param.search},'%')
+            )
+        </if>
+        <if test="param.orderNo != null and param.orderNo != ''">
+            AND p.order_no_ = #{param.orderNo}
+        </if>
+        <if test="param.startTime != null">
+            AND o.create_time_ &lt;= #{param.startTime}
+        </if>
+        <if test="param.endTime != null">
+            AND o.create_time_ &gt;= #{param.endTime}
+        </if>
+    </select>
+    <select id="selectLiveGroupPlan" resultType="com.yonge.cooleshow.biz.dal.vo.CourseSchedulePlanVo">
+        SELECT
+            cs.id_ AS courseId,
+            g.course_introduce_ AS courseIntroduce,
+            cs.class_num_ AS classNum,
+            cs.class_date_ AS classDate,
+            cs.start_time_ AS startTime,
+            cs.end_time_ AS endTime,
+            ts.status_ AS salaryStatus,
+            v.url_ AS url,
+            cs.status_ AS courseStatus,
+            (CASE WHEN cs.start_time_ &gt;= ta.sign_in_time_ THEN 1 ELSE 0 END) AS teacherInSign,
+            (CASE WHEN cs.end_time_ &lt;= ta.sign_out_time_ THEN 1 ELSE 0 END) AS teacherOutSign
+        FROM course_schedule cs
+        LEFT JOIN course_group g ON cs.course_group_id_=g.id_
+        LEFT JOIN course_schedule_teacher_salary ts ON cs.id_=ts.course_schedule_id_
+        LEFT JOIN live_room_video v ON cs.id_=v.course_id_
+        LEFT JOIN teacher_attendance ta ON cs.id_=ta.course_schedule_id_
+        WHERE cs.course_group_id_= #{param.groupId}
+        <if test="param.salaryStatus != null and param.salaryStatus != ''">
+            AND ts.status_ = #{param.salaryStatus}
+        </if>
+        <if test="param.startTime != null">
+            AND cs.start_time_ &lt;= #{param.startTime}
+        </if>
+        <if test="param.endTime != null">
+            AND cs.end_time_ &gt;= #{param.endTime}
+        </if>
+        <if test="param.endTime != null">
+            AND cs.id_ LIKE concat('%',#{param.courseId},'%')
+        </if>
+    </select>
+    <select id="selectVideoGroup" resultType="com.yonge.cooleshow.biz.dal.vo.CourseGroupVideoVo">
+        SELECT
+            g.id_ AS groupId,
+            g.lesson_name_ AS lessonName,
+            g.lesson_subject_ AS subjectId,
+            s.name_ AS subjectName,
+            g.lesson_count_ AS lessonCount,
+            IFNULL(p.count_,0)  AS buyCount,
+            g.teacher_id_ AS teacherId,
+            u.username_ AS teacherName,
+            u.real_name_ AS teacherRealName,
+            g.create_time_ AS createTime
+        FROM video_lesson_group g
+        LEFT JOIN `subject` s ON g.lesson_subject_=s.id_
+        LEFT JOIN sys_user u ON g.teacher_id_=u.id_
+        LEFT JOIN (
+            SELECT video_lesson_group_id_,COUNT(1) AS count_ FROM video_lesson_purchase_record
+            WHERE order_status_='PAID' GROUP BY video_lesson_group_id_) p ON g.id_=p.video_lesson_group_id_
+        <where>
+            <if test="param.search != null and param.search != ''">
+                AND (
+                g.id_ LIKE concat('%',#{param.search},'%') OR
+                g.lesson_name_ LIKE concat('%',#{param.search},'%') OR
+                g.teacher_id_ LIKE concat('%',#{param.search},'%') OR
+                u.username_ LIKE concat('%',#{param.search},'%')
+                )
+            </if>
+            <if test="param.subjectId != null and param.subjectId != ''">
+                AND g.lesson_subject_ = #{param.subjectId}
+            </if>
+        </where>
+    </select>
+    <select id="selectVideoGroupStudent" resultType="com.yonge.cooleshow.biz.dal.vo.CourseGroupStudentVo">
+        SELECT
+            r.student_id_ AS studentId,
+            u.username_ AS studentName,
+            u.real_name_ AS studentRealName,
+            u.phone_ AS studentPhone,
+            r.order_no_ AS orderNo,
+            r.pay_money_ AS payMoney,
+            o.create_time_ AS createTime
+        FROM video_lesson_purchase_record r
+        LEFT JOIN sys_user u ON r.student_id_=u.id_
+        LEFT JOIN user_order o ON r.order_no_=o.order_no_
+        WHERE r.order_status_='PAID'
+        AND video_lesson_group_id_ = #{param.groupId}
+        <if test="param.search != null and param.search != ''">
+            AND (
+            r.student_id_ LIKE concat('%',#{param.search},'%') OR
+            u.username_ LIKE concat('%',#{param.search},'%') OR
+            u.phone_ LIKE concat('%',#{param.search},'%')
+            )
+        </if>
+        <if test="param.orderNo != null and param.orderNo != ''">
+            AND r.order_no_ = #{param.orderNo}
+        </if>
+        <if test="param.startTime != null">
+            AND o.create_time_ &lt;= #{param.startTime}
+        </if>
+        <if test="param.endTime != null">
+            AND o.create_time_ &gt;= #{param.endTime}
+        </if>
+    </select>
+    <select id="selectVideoGroupPlan" resultType="com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail">
+        SELECT
+            id_ AS id,
+            video_title_ AS videoTitle,
+            video_content_ AS videoContent,
+            video_url_ AS videoUrl,
+            cover_url_ AS coverUrl
+        FROM video_lesson_group_detail
+        WHERE video_lesson_group_id_=#{param.groupId}
+    </select>
 
     <update id="opsPreStudentNum">
         update course_group

+ 14 - 7
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -254,7 +254,8 @@
         FROM course_schedule_student_payment p
         LEFT JOIN course_schedule s ON p.course_id_ = s.id_
         WHERE s.teacher_id_=#{teacherId}
-        AND s.status_='ING'
+        AND s.lock_=0
+        AND s.status_ IN ('ING','COMPLETE','NOT_START')
         <![CDATA[ AND s.class_date_  >= #{startDate} ]]>
         <![CDATA[ AND s.class_date_  <= #{endDate} ]]>
     </select>
@@ -278,7 +279,8 @@
         LEFT JOIN sys_user u ON s.teacher_id_ = u.id_
         LEFT JOIN course_group g ON s.course_group_id_ = g.id_
         LEFT JOIN `subject` b ON g.subject_id_ = b.id_
-        WHERE s.status_='ING'
+        WHERE s.lock_=0
+        AND s.status_ IN ('ING','NOT_START','COMPLETE')
         AND s.id_ IN
         (SELECT course_id_ FROM course_schedule_student_payment WHERE user_id_ = #{param.studentId} AND course_type_ = 'PRACTICE')
         <if test="param.status !=null and param.status !=''">
@@ -318,7 +320,8 @@
         LEFT JOIN course_group g ON cs.course_group_id_ = g.id_
         LEFT JOIN (SELECT course_id_ AS pid,count(*) AS payCount FROM course_schedule_student_payment GROUP BY course_id_ ) p ON cs.id_=p.pid
         LEFT JOIN `subject` sb ON g.subject_id_=sb.id_
-        WHERE cs.status_='ING'
+        WHERE cs.lock_=0
+        AND cs.status_ IN ('ING','COMPLETE','NOT_START')
         AND cs.type_='LIVE'
         AND cs.teacher_id_=#{param.teacherId}
         AND cs.class_date_=#{param.classDate}
@@ -351,7 +354,8 @@
         LEFT JOIN course_schedule cs ON p.course_id_=cs.id_
         LEFT JOIN course_group g ON p.course_group_id_ = g.id_
         LEFT JOIN `subject` sb ON g.subject_id_=sb.id_
-        WHERE cs.status_='ING'
+        WHERE cs.lock_=0
+        AND cs.status_ IN ('ING','COMPLETE','NOT_START')
         AND p.course_id_ IN (SELECT s.id_ FROM course_schedule s WHERE s.type_='PRACTICE' AND s.teacher_id_=#{param.teacherId})
         AND cs.class_date_=#{param.classDate}
         ORDER BY startTime
@@ -360,7 +364,8 @@
     <select id="queryCourseScheduleStudent" resultType="java.lang.String"
             parameterType="com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch">
         SELECT class_date_ FROM course_schedule
-        WHERE status_='ING'
+        WHERE lock_=0
+        AND status_ IN ('ING','NOT_START','COMPLETE')
         AND id_ IN (SELECT course_id_ FROM course_schedule_student_payment WHERE user_id_ = #{studentId})
         <![CDATA[ AND class_date_  >= #{startDate} ]]>
         <![CDATA[ AND class_date_  <= #{endDate} ]]>
@@ -439,7 +444,8 @@
         LEFT JOIN sys_user u ON s.teacher_id_ = u.id_
         LEFT JOIN course_group g ON s.course_group_id_ = g.id_
         LEFT JOIN `subject` b ON g.subject_id_ = b.id_
-        WHERE s.status_ = 'ING'
+        WHERE s.lock_=0
+        AND s.status_ IN ('ING','NOT_START','COMPLETE')
         AND s.id_ IN
         (SELECT course_id_ FROM course_schedule_student_payment WHERE user_id_ = #{param.studentId} AND course_type_ = 'PRACTICE')
         AND s.class_date_ = #{param.classDate}
@@ -461,7 +467,8 @@
         FROM course_schedule s
         LEFT JOIN course_group g ON s.course_group_id_ = g.id_
         LEFT JOIN `subject` sb ON g.subject_id_=sb.id_
-        WHERE s.status_ = 'ING'
+        WHERE s.lock_=0
+        AND s.status_ IN ('ING','NOT_START','COMPLETE')
         AND s.id_ IN
         (SELECT course_id_ FROM course_schedule_student_payment WHERE user_id_ = #{param.studentId} AND course_type_ = 'LIVE')
         AND s.class_date_ = #{param.classDate}

+ 12 - 8
cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml

@@ -485,16 +485,20 @@
 
     <select id="selectPayMusicSheet" resultType="com.yonge.cooleshow.biz.dal.vo.HomeMusicSheetVo$MusicSheetSmall">
 
-        select distinct
+        SELECT
             ms.id_ as musicSheetId,
             ms.music_sheet_name_ as musicSheetName,
-            count(1) as num
-        from music_sheet ms
-        left join music_sheet_purchase_record mspr on mspr.music_sheet_id_ = ms.id_
-            and state_ = 1 and audit_status_ = 'PASS' and del_flag_ = 0 and mspr.order_status_ = 'PAID'
-
-            group by ms.id_, ms.music_sheet_name_
-            order by  count(ms.id_)
+            count(DISTINCT pr.student_id_) as num
+        FROM
+            music_sheet ms
+                LEFT JOIN music_sheet_purchase_record pr ON ms.id_ = pr.music_sheet_id_
+        WHERE
+            ms.del_flag_=0
+          AND ms.charge_type_='CHARGE'
+          AND ms.state_=1
+          AND pr.order_status_='PAID'
+        GROUP BY ms.id_
+        ORDER BY count(DISTINCT pr.student_id_)  DESC,ms.id_ desc
         limit 5
 
     </select>

+ 1 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentCourseGroupController.java

@@ -48,6 +48,7 @@ public class StudentCourseGroupController extends BaseController {
             @ApiImplicitParam(name = "search", dataType = "String", value = "关键字"),
             @ApiImplicitParam(name = "groupStatus", dataType = "String", value = "课程组状态  ING(进行中)  NOT_SALE(未开售,未上架) APPLY(报名中,销售中) COMPLETE(已完成)"),
             @ApiImplicitParam(name = "page", dataType = "Integer", value = "页数"),
+            @ApiImplicitParam(name = "subjectId", dataType = "Integer", value = "声部id"),
             @ApiImplicitParam(name = "rows", dataType = "Integer", value = "每页数量"),
             @ApiImplicitParam(name = "version", dataType = "String", value = "版本"),
             @ApiImplicitParam(name = "platform", dataType = "Integer", value = "平台"),

+ 1 - 1
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/config/ResourceServerConfig.java

@@ -33,7 +33,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
 				.authorizeRequests()
 				.antMatchers("/task/**").hasIpAddress("0.0.0.0/0")
 				.antMatchers("/v2/api-docs", "/code/*","/payment/callback",
-                        "/liveRoom/test","/liveRoom/syncUserStatus","/courseGroup/getLockCache","/withdraw/callback")
+                        "/liveRoom/test","/liveRoom/syncUserStatus","/courseGroup/getLockCache","/withdraw/callback","/withdraw/contractCallback")
                 .permitAll().anyRequest().authenticated().and().httpBasic();
 	}
 

+ 110 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/WithdrawController.java

@@ -0,0 +1,110 @@
+package com.yonge.cooleshow.teacher.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.yonge.cooleshow.biz.dal.entity.UserWithdrawalCallback;
+import com.yonge.cooleshow.biz.dal.service.LingXinService;
+import com.yonge.cooleshow.biz.dal.service.UserWithdrawalCallbackService;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.toolset.thirdparty.lingxinpay.RSA;
+import com.yonge.cooleshow.biz.dal.sdk.WithdrawSdk;
+import com.yonge.toolset.utils.json.JsonUtil;
+import io.swagger.annotations.Api;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * @Description: 提现回调
+ * @Author: cy
+ * @Date: 2022/5/9
+ */
+@RestController
+@RequestMapping("/withdraw")
+@Api(value = "提现回调", tags = "提现回调")
+public class WithdrawController extends BaseController {
+    private final static Logger log = LoggerFactory.getLogger(WithdrawController.class);
+
+    @Value("${withdraw.privateKey}")
+    private String privateKey;//商户自己生成的私钥
+
+    @Autowired
+    private UserWithdrawalCallbackService callbackService;
+    @Autowired
+    private LingXinService lingXinService;
+
+    /**
+     * 异步回调接收
+     *
+     * @param content
+     * @param request
+     * @return
+     */
+    @PostMapping("/callback")
+    public String test(@RequestBody String content, HttpServletRequest request) {
+        System.out.println(privateKey);
+        log.info("交易回调请求地址:{} 请求参数:{}", request.getRemoteAddr(), content);
+        try {
+            if (StringUtils.isBlank(content)) {
+                throw new Exception();
+            }
+            Map<String, Object> map = JSONObject.parseObject(content);
+            String jsonStr = RSA.decryptPri((String) map.get("sign"), privateKey);
+            log.info("jsonStr:{}", jsonStr);
+
+            Map<String, Object> withdrawRecord = JSONObject.parseObject(jsonStr);
+            UserWithdrawalCallback callback = JsonUtil.toJavaObject(withdrawRecord, UserWithdrawalCallback.class);
+            callbackService.insertCallback(callback);
+        } catch (Exception e) {
+            log.error("解密失败e:{}", e);
+            return "failed";
+        }
+        return "success";
+    }
+
+    @PostMapping("/contractCallback")
+    public String contractCallback(@RequestBody String content, HttpServletRequest request) {
+        log.info("回调请求地址:{} 请求参数:{}", request.getRemoteAddr(), content);
+        try {
+            System.out.println("===成功===");
+        } catch (Exception e) {
+            System.out.println("===失败===");
+            return "failed";
+        }
+        return "success";
+    }
+
+    /**
+     * 提现测试接口
+     * @param remark
+     * @return
+     */
+    @GetMapping("/test")
+    public String a(String remark) {
+        WithdrawSdk withdraw = new WithdrawSdk();
+        //输入商户订单号
+        String outerOrderNo = UUID.randomUUID().toString().substring(0, 12);
+        System.out.println("商户订单号:" + outerOrderNo);
+        //输入收款人手机号
+        String name = "何亮";
+        //输入收款人姓名
+        String mobile = "17600220933";
+        //输入收款人身份证号
+        String certificateNo = "130423199206192818";
+        //输入转账金额(单位分)
+        Integer predictAmount = 1;
+        //输入收款人账号
+        String payAccount = "6228480018864836772";
+
+        String requestParam = withdraw.withdraw(outerOrderNo, name, mobile, certificateNo, predictAmount,
+                payAccount, remark);
+        log.info("单笔请求返回参数:{}", requestParam);
+        return requestParam;
+    }
+}