소스 검색

Merge branch 'master' of http://git.dayaedu.com/yonge/cooleshow

liujunchi 3 년 전
부모
커밋
40c9d99a79
22개의 변경된 파일509개의 추가작업 그리고 98개의 파일을 삭제
  1. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java
  2. 9 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleRepliedDao.java
  3. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleStudentPaymentDao.java
  4. 34 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MyCourseSearch.java
  5. 47 32
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseScheduleReplied.java
  6. 16 15
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/StudentTotal.java
  7. 28 27
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TeacherTotal.java
  8. 15 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseRepliedService.java
  9. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java
  10. 108 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseRepliedServiceImpl.java
  11. 32 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  12. 4 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentTotalServiceImpl.java
  13. 51 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherTotalServiceImpl.java
  14. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  15. 22 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyCourseVo.java
  16. 13 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  17. 17 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleRepliedMapper.xml
  18. 3 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml
  19. 50 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/CourseGroupController.java
  20. 3 3
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/PaymentController.java
  21. 48 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/CourseRepliedController.java
  22. 3 3
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/CourseScheduleController.java

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

@@ -67,6 +67,6 @@ public interface CourseScheduleDao extends BaseMapper<CourseSchedule> {
     <T> IPage<T> queryLiveTeacherCourse(Page<T> page, @Param("param") Map<String, Object> param);
 
     //根据老师id查询购课学员
-    List<MyCourseVo> selectPage(IPage page, @Param("param") MyCourseSearch query);
+    List<MyCourseVo> queryTeacherPracticeCourse(IPage page, @Param("param") MyCourseSearch query);
 }
 

+ 9 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleRepliedDao.java

@@ -26,5 +26,13 @@ public interface CourseScheduleRepliedDao extends BaseMapper<CourseScheduleRepli
      * @return: com.yonge.cooleshow.biz.dal.vo.CourseScheduleRepliedVo
 	 */
 	List<CourseScheduleRepliedVo> selectPage(@Param("page") IPage page, @Param("param") CourseScheduleRepliedSearch courseScheduleReplied);
-	
+
+	/**
+	 * @Description: 修改陪练课评论
+	 * @Author: cy
+	 * @Date: 2022/4/12
+	 */
+    void updateReplied(CourseScheduleReplied replied);
+
+    List<Long> selectAll();
 }

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleStudentPaymentDao.java

@@ -35,5 +35,7 @@ public interface CourseScheduleStudentPaymentDao extends BaseMapper<CourseSchedu
      * @param groupId 课程组id
      */
     List<LiveCourseInfoVo.CourseBuyStudentVo> queryStudentInfoByGroupId(@Param("groupId") Long groupId);
+
+    List<Long> selectAll();
 }
 

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

@@ -4,7 +4,7 @@ import com.yonge.cooleshow.common.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
-import java.util.Date;
+import java.util.List;
 
 /**
  * @Author: cy
@@ -24,9 +24,42 @@ public class MyCourseSearch extends QueryInfo {
     @ApiModelProperty(value = "老师id")
     private Long teacherId;
 
+    @ApiModelProperty(value = "0:未评价 1:已评价")
+    private Integer replied;
+
+    @ApiModelProperty(value = "评价学员id")
+    private List<Long> repliedIds;
+
+    @ApiModelProperty(value = "学生姓名")
+    private String studentName;
+
 //    @ApiModelProperty(value = "筛选条件")
 //    private String search;
 
+    public String getStudentName() {
+        return studentName;
+    }
+
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
+    }
+
+    public Integer getReplied() {
+        return replied;
+    }
+
+    public void setReplied(Integer replied) {
+        this.replied = replied;
+    }
+
+    public List<Long> getRepliedIds() {
+        return repliedIds;
+    }
+
+    public void setRepliedIds(List<Long> repliedIds) {
+        this.repliedIds = repliedIds;
+    }
+
     public Long getTeacherId() {
         return teacherId;
     }

+ 47 - 32
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseScheduleReplied.java

@@ -9,129 +9,144 @@ import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
 import java.util.Date;
+
 import com.fasterxml.jackson.annotation.JsonFormat;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
 /**
  * 课程点评
  */
 @TableName("course_schedule_replied")
 @ApiModel(value = "CourseScheduleReplied对象", description = "课程点评")
 public class CourseScheduleReplied implements Serializable {
-	private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 1L;
     @ApiModelProperty("主键 ")
     @TableId(value = "id_", type = IdType.AUTO)
     private Long id;
+
     @ApiModelProperty("学生id ")
-	@TableField(value = "student_id_")
+    @TableField(value = "student_id_")
+    @NotNull(message = "学生id不能为空")
     private Long studentId;
+
     @ApiModelProperty("课程编号 ")
-	@TableField(value = "course_schedule_id_")
+    @TableField(value = "course_schedule_id_")
+    @NotNull(message = "课程编号不能为空")
     private Long courseScheduleId;
+
     @ApiModelProperty("课程组类型PRACTICE、LIVE; ")
-	@TableField(value = "course_group_type_")
+    @TableField(value = "course_group_type_")
     private String courseGroupType;
+
     @ApiModelProperty("课程组编号; ")
-	@TableField(value = "course_group_id_")
+    @TableField(value = "course_group_id_")
+    @NotBlank(message = "课程组编号不能为空")
     private String courseGroupId;
+
     @ApiModelProperty("学员评分 ")
-	@TableField(value = "score_")
+    @TableField(value = "score_")
     private Integer score;
+
     @ApiModelProperty("学员课后评价 ")
-	@TableField(value = "student_replied_")
+    @TableField(value = "student_replied_")
     private String studentReplied;
+
     @ApiModelProperty("老师课后评价 ")
-	@TableField(value = "teacher_replied_")
+    @TableField(value = "teacher_replied_")
     private String teacherReplied;
+
     @ApiModelProperty("创建时间 ")
-	@TableField(value = "create_time_")
+    @TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
+
     @ApiModelProperty("修改时间 ")
-	@TableField(value = "update_time_")
+    @TableField(value = "update_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    @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 Long getStudentId() {
+
+    public Long getStudentId() {
         return studentId;
     }
 
     public void setStudentId(Long studentId) {
         this.studentId = studentId;
     }
-    
-	public Long getCourseScheduleId() {
+
+    public Long getCourseScheduleId() {
         return courseScheduleId;
     }
 
     public void setCourseScheduleId(Long courseScheduleId) {
         this.courseScheduleId = courseScheduleId;
     }
-    
-	public String getCourseGroupType() {
+
+    public String getCourseGroupType() {
         return courseGroupType;
     }
 
     public void setCourseGroupType(String courseGroupType) {
         this.courseGroupType = courseGroupType;
     }
-    
-	public String getCourseGroupId() {
+
+    public String getCourseGroupId() {
         return courseGroupId;
     }
 
     public void setCourseGroupId(String courseGroupId) {
         this.courseGroupId = courseGroupId;
     }
-    
-	public Integer getScore() {
+
+    public Integer getScore() {
         return score;
     }
 
     public void setScore(Integer score) {
         this.score = score;
     }
-    
-	public String getStudentReplied() {
+
+    public String getStudentReplied() {
         return studentReplied;
     }
 
     public void setStudentReplied(String studentReplied) {
         this.studentReplied = studentReplied;
     }
-    
-	public String getTeacherReplied() {
+
+    public String getTeacherReplied() {
         return teacherReplied;
     }
 
     public void setTeacherReplied(String teacherReplied) {
         this.teacherReplied = teacherReplied;
     }
-    
-	public Date getCreateTime() {
+
+    public Date getCreateTime() {
         return createTime;
     }
 
     public void setCreateTime(Date createTime) {
         this.createTime = createTime;
     }
-    
-	public Date getUpdateTime() {
+
+    public Date getUpdateTime() {
         return updateTime;
     }
 
     public void setUpdateTime(Date updateTime) {
         this.updateTime = updateTime;
     }
-    
 }

+ 16 - 15
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/StudentTotal.java

@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
 import java.util.Date;
+
 import com.fasterxml.jackson.annotation.JsonFormat;
 import org.springframework.format.annotation.DateTimeFormat;
 
@@ -17,31 +18,31 @@ import org.springframework.format.annotation.DateTimeFormat;
 @TableName("student_total")
 @ApiModel(value = "StudentTotal对象", description = "学生统计总表")
 public class StudentTotal implements Serializable {
-	private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 1L;
     @ApiModelProperty("对应user表用户编号 ")
     @TableId(value = "user_id_")
     private Long userId;
     @ApiModelProperty("累计练习天数 ")
-	@TableField(value = "exercise_days_")
-    private Integer exerciseDays;
+    @TableField(value = "exercise_days_")
+    private Integer exerciseDays = 0;
     @ApiModelProperty("累计练习时长 ")
-	@TableField(value = "exercise_hours_")
-    private Double exerciseHours;
+    @TableField(value = "exercise_hours_")
+    private Double exerciseHours = 0.0;
     @ApiModelProperty("累计评测次数 ")
-	@TableField(value = "testing_num_")
-    private Integer testingNum;
+    @TableField(value = "testing_num_")
+    private Integer testingNum = 0;
     @ApiModelProperty("已完成课时数 ")
-	@TableField(value = "finsh_hours_")
-    private Integer finshHours;
+    @TableField(value = "finsh_hours_")
+    private Integer finshHours = 0;
     @ApiModelProperty("剩余课时数 ")
-	@TableField(value = "unfinsh_hours_")
-    private Integer unfinshHours;
+    @TableField(value = "unfinsh_hours_")
+    private Integer unfinshHours = 0;
     @ApiModelProperty("关注老师数 ")
-	@TableField(value = "star_teacher_num_")
-    private Integer starTeacherNum;
-	@TableField(value = "update_time_")
+    @TableField(value = "star_teacher_num_")
+    private Integer starTeacherNum = 0;
+    @TableField(value = "update_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
     public Long getUserId() {

+ 28 - 27
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TeacherTotal.java

@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
 import java.util.Date;
+
 import com.fasterxml.jackson.annotation.JsonFormat;
 import org.springframework.format.annotation.DateTimeFormat;
 
@@ -17,84 +18,84 @@ import org.springframework.format.annotation.DateTimeFormat;
 @TableName("teacher_total")
 @ApiModel(value = "TeacherTotal对象", description = "教师统计总表")
 public class TeacherTotal implements Serializable {
-	private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 1L;
     @ApiModelProperty("对应user表用户编号 ")
     @TableId(value = "user_id_")
     private Long userId;
     @ApiModelProperty("星级 ")
-	@TableField(value = "star_grade_")
-    private Double starGrade;
+    @TableField(value = "star_grade_")
+    private Double starGrade = 0.0;
     @ApiModelProperty("粉丝数 ")
-	@TableField(value = "fans_num_")
-    private Integer fansNum;
+    @TableField(value = "fans_num_")
+    private Integer fansNum = 0;
     @ApiModelProperty("已上课时 ")
-	@TableField(value = "exp_time_")
-    private Integer expTime;
+    @TableField(value = "exp_time_")
+    private Integer expTime = 0;
     @ApiModelProperty("未上课时 ")
-	@TableField(value = "un_exp_time_")
-    private Integer unExpTime;
+    @TableField(value = "un_exp_time_")
+    private Integer unExpTime = 0;
     @ApiModelProperty("是否在直播 ")
-	@TableField(value = "live_flag_")
-    private Boolean liveFlag;
-	@TableField(value = "update_time_")
+    @TableField(value = "live_flag_")
+    private Boolean liveFlag = false;
+    @TableField(value = "update_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
-	public Long getUserId() {
+    public Long getUserId() {
         return userId;
     }
 
     public void setUserId(Long userId) {
         this.userId = userId;
     }
-    
-	public Double getStarGrade() {
+
+    public Double getStarGrade() {
         return starGrade;
     }
 
     public void setStarGrade(Double starGrade) {
         this.starGrade = starGrade;
     }
-    
-	public Integer getFansNum() {
+
+    public Integer getFansNum() {
         return fansNum;
     }
 
     public void setFansNum(Integer fansNum) {
         this.fansNum = fansNum;
     }
-    
-	public Integer getExpTime() {
+
+    public Integer getExpTime() {
         return expTime;
     }
 
     public void setExpTime(Integer expTime) {
         this.expTime = expTime;
     }
-    
-	public Integer getUnExpTime() {
+
+    public Integer getUnExpTime() {
         return unExpTime;
     }
 
     public void setUnExpTime(Integer unExpTime) {
         this.unExpTime = unExpTime;
     }
-    
-	public Boolean getLiveFlag() {
+
+    public Boolean getLiveFlag() {
         return liveFlag;
     }
 
     public void setLiveFlag(Boolean liveFlag) {
         this.liveFlag = liveFlag;
     }
-    
-	public Date getUpdateTime() {
+
+    public Date getUpdateTime() {
         return updateTime;
     }
 
     public void setUpdateTime(Date updateTime) {
         this.updateTime = updateTime;
     }
-    
+
 }

+ 15 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseRepliedService.java

@@ -0,0 +1,15 @@
+package com.yonge.cooleshow.biz.dal.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.entity.CourseScheduleReplied;
+
+/**
+ * @Author: cy
+ * @Date: 2022/4/12
+ */
+public interface CourseRepliedService extends IService<CourseScheduleReplied> {
+    void replied(CourseScheduleReplied replied, SysUser sysUser);
+
+    CourseScheduleReplied selectReplied(CourseScheduleReplied replied);
+}

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

@@ -132,6 +132,6 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
      */
     List<CourseCalendarEntity> createPracticeCourseCalender(Map<String, Object> param);
 
-    IPage<MyCourseVo> myCourse(IPage<MyCourseVo> page, MyCourseSearch search);
+    IPage<MyCourseVo> queryTeacherPracticeCourse(IPage<MyCourseVo> page, MyCourseSearch search);
 }
 

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

@@ -0,0 +1,108 @@
+package com.yonge.cooleshow.biz.dal.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dao.CourseScheduleDao;
+import com.yonge.cooleshow.biz.dal.dao.CourseScheduleRepliedDao;
+import com.yonge.cooleshow.biz.dal.dao.CourseScheduleStudentPaymentDao;
+import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
+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 org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * @Author: cy
+ * @Date: 2022/4/12
+ */
+@Service
+public class CourseRepliedServiceImpl extends ServiceImpl<CourseScheduleRepliedDao, CourseScheduleReplied> implements CourseRepliedService {
+    private final static Logger log = LoggerFactory.getLogger(CourseRepliedServiceImpl.class);
+
+    @Autowired
+    private CourseScheduleRepliedDao repliedDao;
+    @Autowired
+    private CourseScheduleDao scheduleDao;
+    @Autowired
+    private CourseScheduleStudentPaymentDao paymentDao;
+
+    public CourseScheduleRepliedDao getDao() {
+        return repliedDao;
+    }
+
+    /**
+     * @Description: 首页-我的课程-课程详情-评价陪练课
+     * @Author: cy
+     * @Date: 2022/4/12
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void replied(CourseScheduleReplied replied, SysUser sysUser) {
+        Long userId = sysUser.getId();
+        Long scheduleId = replied.getCourseScheduleId();
+        Long studentId = replied.getStudentId();
+
+        CourseSchedule schedule = scheduleDao.selectById(scheduleId);
+        if (schedule == null) {
+            throw new RuntimeException("课程不存在");
+        }
+        if (schedule.getStatus().equals(CourseScheduleEnum.NOT_START.getCode())) {
+            throw new RuntimeException("课程未开始无法评论");
+        }
+
+        //评论存在执行修改
+        QueryWrapper<CourseScheduleReplied> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("student_id_", replied.getStudentId());
+        queryWrapper.eq("course_schedule_id_", replied.getCourseScheduleId());
+        queryWrapper.eq("course_group_id_", replied.getCourseGroupId());
+        queryWrapper.eq("course_group_type_", CourseScheduleEnum.PRACTICE.getCode());
+        CourseScheduleReplied scheduleReplied = repliedDao.selectOne(queryWrapper);
+        if (scheduleReplied != null) {
+            repliedDao.updateReplied(replied);
+            return;
+        }
+
+        //当前用户为老师
+        CourseSchedule courseSchedule = scheduleDao.selectById(scheduleId);
+        if (courseSchedule != null) {
+            Long teacherId = courseSchedule.getTeacherId();
+            if (userId == teacherId) {
+                repliedDao.insert(replied);
+                return;
+            }
+        }
+
+        //当前用户为学员
+        QueryWrapper<CourseScheduleStudentPayment> wrapper = new QueryWrapper<>();
+        wrapper.eq("user_id_", userId);
+        wrapper.eq("course_id_", scheduleId);
+        wrapper.eq("course_type_", CourseScheduleEnum.PRACTICE);
+        CourseScheduleStudentPayment payment = paymentDao.selectOne(wrapper);
+        if (payment == null || userId != studentId) {
+            throw new RuntimeException("未购买该课无法评论");
+        }
+        repliedDao.insert(replied);
+    }
+
+    /**
+     * @Description: 首页-我的课程-课程详情-查询评价
+     * @Author: cy
+     * @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);
+    }
+
+}

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

@@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dao.CourseScheduleRepliedDao;
+import com.yonge.cooleshow.biz.dal.dao.CourseScheduleStudentPaymentDao;
 import com.yonge.cooleshow.biz.dal.dao.CourseScheduleDao;
 import com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch;
 import com.yonge.cooleshow.biz.dal.entity.*;
@@ -56,6 +58,10 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     @Autowired
     private SysConfigService sysConfigService;
     @Autowired
+    private CourseScheduleRepliedDao repliedDao;
+    @Autowired
+    private CourseScheduleStudentPaymentDao paymentDao;
+    @Autowired
     private TeacherFreeTimeService teacherFreeTimeService;
     @Autowired
     private CourseGroupService courseGroupService;
@@ -81,7 +87,12 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         String classDate = WrapperUtil.toStr(param, "classDate", "查询时间不能为空!");
         String[] classDateSp = classDate.split("-");
         //本月的第一天
-        LocalDate firstDay = LocalDate.of(Integer.parseInt(classDateSp[0]), Integer.parseInt(classDateSp[1]), 1);
+        LocalDate firstDay;
+        try {
+            firstDay = LocalDate.of(Integer.parseInt(classDateSp[0]), Integer.parseInt(classDateSp[1]), 1);
+        } catch (Exception e) {
+            throw new BizException("查询时间格式不正确 ["+classDate+"]");
+        }
         //本月的最后一天
         LocalDate lastDay = firstDay.with(TemporalAdjusters.lastDayOfMonth());
         //查询该月的所有课程
@@ -603,8 +614,26 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      * @Date: 2022/4/11
      */
     @Override
-    public IPage<MyCourseVo> myCourse(IPage<MyCourseVo> page, MyCourseSearch search) {
-        return page.setRecords(baseMapper.selectPage(page, search));
+    public IPage<MyCourseVo> queryTeacherPracticeCourse(IPage<MyCourseVo> page, MyCourseSearch search) {
+        //查询所有已评价学生id
+        List<Long> studentList=repliedDao.selectAll();
+
+        Integer replied = search.getReplied();
+        if (replied!=null){
+            //按评价筛选 0:未评价 1:已评价
+            if (replied == 0) {
+                //查询所有购课用户
+                List<Long> userList=paymentDao.selectAll();
+                //取差集
+                userList.removeAll(studentList);
+                search.setRepliedIds(userList);
+            }
+
+            if (replied == 1) {
+                search.setRepliedIds(studentList);
+            }
+        }
+        return page.setRecords(baseMapper.queryTeacherPracticeCourse(page, search));
     }
 }
 

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

@@ -131,19 +131,16 @@ public class StudentTotalServiceImpl extends ServiceImpl<StudentTotalDao, Studen
             }
             //处理sql
             action.accept(subList);
-            if (start >= resultList.size()) {
+            if (end >= resultList.size()) {
                 break;
             }
             start += batchSize;
         }
     }
 
-    private void saveBatch(List<StudentTotal> resultList) {
-        //todo 批量保存
-    }
-
     private void updateBatch(List<StudentTotal> resultList) {
-        //todo 批量更新
+        for (StudentTotal total : resultList) {
+            updateById(total);
+        }
     }
-
 }

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

@@ -26,6 +26,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Consumer;
 import java.util.stream.Collectors;
 
 
@@ -119,6 +120,56 @@ public class TeacherTotalServiceImpl extends ServiceImpl<TeacherTotalDao, Teache
         return resultList;
     }
 
+    int batchSize = 100;
+
+    /***
+     * 批量更新插入
+     * @author liweifan
+     * @param: resultList
+     * @updateTime 2022/4/12 16:52
+     */
+    private void saveOrUpdateBatch(List<TeacherTotal> resultList) {
+        List<TeacherTotal> teacherTotals = baseMapper.selectList(Wrappers.<TeacherTotal>emptyWrapper().select("userId"));
+        Map<Long, TeacherTotal> teacherTotalMap = new HashMap<>();
+        if (!CollectionUtils.isEmpty(teacherTotals)) {
+            teacherTotals.forEach(o -> teacherTotalMap.put(o.getUserId(), o));
+        }
+        //批量插入
+        List<TeacherTotal> saveList = resultList.stream()
+                .filter(o -> null == teacherTotalMap.get(o.getUserId())).collect(Collectors.toList());
+        batchOpera(saveList, this::saveBatch);
+
+        //批量更新
+        List<TeacherTotal> updateList = resultList.stream()
+                .filter(o -> null != teacherTotalMap.get(o.getUserId())).collect(Collectors.toList());
+        batchOpera(updateList, this::updateBatch);
+    }
+
+    private void batchOpera(List<TeacherTotal> resultList, Consumer<List<TeacherTotal>> action) {
+        int start = 0;
+        while (true) {
+            int end = start + batchSize;
+            List<TeacherTotal> subList;
+            if (resultList.size() > end) {
+                subList = resultList.subList(start, start + batchSize);
+            } else {
+                subList = resultList.subList(start, resultList.size());
+            }
+            //处理sql
+            action.accept(subList);
+            if (end >= resultList.size()) {
+                break;
+            }
+            start += batchSize;
+        }
+    }
+
+    private void updateBatch(List<TeacherTotal> resultList) {
+        for (TeacherTotal total : resultList) {
+            updateById(total);
+        }
+    }
+
     @Override
     public Object getRedisValueByKey(String key) {
         return redissonClient.getBucket(key).get();

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

@@ -119,7 +119,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         if (!Objects.isNull(afterFunction)) {
             afterFunction.accept(orderVo);
         }
-        return HttpResponseResult.succeed();
+        return HttpResponseResult.succeed(orderVo);
     }
 
     @Override
@@ -127,7 +127,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     public HttpResponseResult<OrderPayRes> orderPay(OrderPayReq payReq) {
         //查询订单
         UserOrderVo detail = detail(payReq.getOrderNo());
-        if (null == detail) {
+        if (null == detail || !payReq.getUserId().equals(detail.getUserId())) {
             return HttpResponseResult.failed("订单不存在");
         }
         if (OrderStatusEnum.WAIT_PAY.equals(detail.getStatus())) {

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

@@ -42,6 +42,28 @@ public class MyCourseVo implements Serializable {
     @ApiModelProperty(value = "声部名称")
     private String subjectName;
 
+    @ApiModelProperty(value = "课程组id")
+    private Integer courseGoupId;
+
+    @ApiModelProperty(value = "课程id")
+    private Integer courseId;
+
+    public Integer getCourseGoupId() {
+        return courseGoupId;
+    }
+
+    public void setCourseGoupId(Integer courseGoupId) {
+        this.courseGoupId = courseGoupId;
+    }
+
+    public Integer getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Integer courseId) {
+        this.courseId = courseId;
+    }
+
     public Long getId() {
         return id;
     }

+ 13 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -135,7 +135,7 @@
             AND b.subject_id_ = #{param.subjectId}
         </if>
     </select>
-    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.MyCourseVo">
+    <select id="queryTeacherPracticeCourse" resultType="com.yonge.cooleshow.biz.dal.vo.MyCourseVo">
         SELECT
             u.id_ AS userId,
             u.username_ AS userName,
@@ -145,7 +145,9 @@
             cs.end_time_ AS endTime,
             cs.status_ AS `status`,
             g.subject_id_ AS subjectId,
-            sb.name_ AS subjectName
+            sb.name_ AS subjectName,
+            p.course_id_ AS courseId,
+            p.course_group_id_ AS courseGoupId
         FROM course_schedule_student_payment p
         LEFT JOIN sys_user u ON p.user_id_ =u.id_
         LEFT JOIN course_schedule cs ON p.course_id_=cs.id_
@@ -162,6 +164,15 @@
         <if test="param.classDate !=null and param.classDate !=''">
             AND cs.class_date_ = #{param.classDate}
         </if>
+        <if test="param.repliedIds !=null">
+            AND p.user_id_ IN
+            <foreach collection="param.repliedIds" item="repliedIds" open="(" close=")" separator=",">
+                #{repliedIds}
+            </foreach>
+        </if>
+        <if test="param.studentName !=null and param.studentName !=''">
+            AND u.username_ LIKE CONCAT('%', #{param.studentName}, '%')
+        </if>
     </select>
 
 </mapper>

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

@@ -40,4 +40,21 @@
         	<include refid="baseColumns" />
 		FROM course_schedule_replied t
 	</select>
+    <select id="selectAll" resultType="java.lang.Long">
+        SELECT student_id_ FROM course_schedule_replied WHERE course_group_type_='PRACTICE'
+    </select>
+
+    <update id="updateReplied" parameterType="com.yonge.cooleshow.biz.dal.entity.CourseScheduleReplied">
+        UPDATE course_schedule_replied
+        <set>
+            <if test="score !=null">score_ = #{score},</if>
+            <if test="studentReplied !=null and studentReplied !=''">student_replied_ = #{studentReplied},</if>
+            <if test="teacherReplied !=null and teacherReplied !=''">teacher_replied_ = #{teacherReplied},</if>
+            update_time_ = SYSDATE()
+        </set>
+        WHERE student_id_ = #{studentId}
+        AND course_schedule_id_ = #{courseScheduleId}
+        AND course_group_id_ = #{courseGroupId}
+        AND course_group_type_ = #{courseGroupType}
+    </update>
 </mapper>

+ 3 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml

@@ -52,5 +52,8 @@
                  left join sys_user as b on a.user_id_ = b.id_
         where a.course_group_id_ = #{groupId}
     </select>
+    <select id="selectAll" resultType="java.lang.Long">
+        SELECT user_id_ FROM course_schedule_student_payment WHERE course_type_ = 'PRACTICE'
+    </select>
 
 </mapper>

+ 50 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/CourseGroupController.java

@@ -0,0 +1,50 @@
+package com.yonge.cooleshow.student.controller;
+
+import com.yonge.cooleshow.biz.dal.service.CourseGroupService;
+import com.yonge.cooleshow.biz.dal.vo.CourseGroupVo;
+import com.yonge.cooleshow.biz.dal.vo.LiveCourseInfoVo;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.page.PageInfo;
+import io.swagger.annotations.*;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.Map;
+
+/**
+ * 课程组表(CourseGroup)表控制层
+ *
+ * @author hgw
+ * @since 2022-03-18 15:29:10
+ */
+@Api(tags = "课程组表")
+@RestController
+@RequestMapping("/courseGroup")
+public class CourseGroupController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private CourseGroupService courseGroupService;
+
+    @ApiOperation("直播课详情")
+    @GetMapping("/queryLiveCourseInfo")
+    public HttpResponseResult<LiveCourseInfoVo> queryLiveCourseInfo(@ApiParam(value = "课程组id", required = true) @RequestParam(value = "groupId") Long groupId) {
+        return succeed(courseGroupService.queryLiveCourseInfo(groupId));
+    }
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "teacherId", dataType = "Long", value = "老师id"),
+            @ApiImplicitParam(name = "groupStatus", dataType = "String", value = "课程组状态  ING(进行中)  NOT_SALE(未开售,未上架) APPLY(报名中,销售中) COMPLETE(已完成)"),
+            @ApiImplicitParam(name = "page", dataType = "Integer", value = "页数"),
+            @ApiImplicitParam(name = "rows", dataType = "Integer", value = "每页数量"),
+    })
+    @ApiOperation("分页查询直播课课程组列表")
+    @PostMapping("/queryPageCourseGroup")
+    public HttpResponseResult<PageInfo<CourseGroupVo>> queryPageLiveCourseGroup(@RequestBody Map<String, Object> param) {
+        return succeed(courseGroupService.queryPageLiveCourseGroup(param));
+    }
+
+}
+

+ 3 - 3
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/PaymentController.java

@@ -37,8 +37,6 @@ public class PaymentController extends BaseController {
     private UserOrderService userOrderService;
     @Autowired
     private SysUserFeignService sysUserFeignService;
-    @Autowired
-    private EmployeeService employeeService;
 
     @ApiOperation(value = "查询付款单")
     @GetMapping("/queryPayment")
@@ -57,7 +55,7 @@ public class PaymentController extends BaseController {
         if (responseResult.getStatus()) {
             Map<String, String> data = responseResult.getData();
             //绑定到用户表
-            user.setWechatId(data.get("openid"));
+            user.setWxOpenid(data.get("openid"));
             log.info("绑定用户openid,param is {}", JSONObject.toJSONString(user));
             sysUserFeignService.bindOpenId(user);
         }
@@ -82,8 +80,10 @@ public class PaymentController extends BaseController {
             String publicKey = AdapayCore.PUBLIC_KEY;
             //验签
             boolean checkSign = AdapaySign.verifySign(data, sign, publicKey);
+            log.info("汇付回调,res is {}", data);
             if (checkSign) {
                 //验签成功逻辑
+                log.info("验签成功");
                 userOrderService.orderCallback(data);
             }
         } catch (Exception e) {

+ 48 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/CourseRepliedController.java

@@ -0,0 +1,48 @@
+package com.yonge.cooleshow.teacher.controller;
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+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.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @Author: cy
+ * @Date: 2022/4/12
+ */
+@Api(tags = "陪练课")
+@RestController
+@RequestMapping("/courseReplied")
+public class CourseRepliedController extends BaseController {
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private CourseRepliedService repliedService;
+
+    @ApiOperation(value = "首页-我的课程-课程详情-评价陪练课", httpMethod = "POST", consumes = "application/json", produces = "application/json")
+    @PostMapping(value = "/replied", consumes = "application/json", produces = "application/json")
+    public HttpResponseResult<Object> replied(@Validated @RequestBody CourseScheduleReplied replied) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null  || sysUser.getId() == null) {
+            return failed("用户信息获取失败");
+        }
+
+        replied.setCourseGroupType(CourseScheduleEnum.PRACTICE.getCode());
+        repliedService.replied(replied,sysUser);
+        return succeed();
+    }
+
+    @ApiOperation(value = "首页-我的课程-课程详情-查询陪练课评价")
+    @PostMapping(value = "/selectReplied")
+    public HttpResponseResult<CourseScheduleReplied> selectReplied(@Validated @RequestBody CourseScheduleReplied replied) {
+        replied.setCourseGroupType(CourseScheduleEnum.PRACTICE.getCode());
+        return succeed(repliedService.selectReplied(replied));
+    }
+}

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

@@ -85,14 +85,14 @@ public class CourseScheduleController extends BaseController {
     }
 
     @ApiOperation("老师端-首页-我的课程-陪练课")
-    @PostMapping("/myCourse")
-    public HttpResponseResult<PageInfo<MyCourseVo>> myCourse(@RequestBody MyCourseSearch search) {
+    @PostMapping("/queryTeacherPracticeCourse")
+    public HttpResponseResult<PageInfo<MyCourseVo>> queryTeacherPracticeCourse(@RequestBody MyCourseSearch search) {
         SysUser user = sysUserFeignService.queryUserInfo();
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
         search.setTeacherId(user.getId());
-        IPage<MyCourseVo> pages = courseScheduleService.myCourse(PageUtil.getPage(search), search);
+        IPage<MyCourseVo> pages = courseScheduleService.queryTeacherPracticeCourse(PageUtil.getPage(search), search);
         return succeed(PageUtil.pageInfo(pages));
     }
 }