Browse Source

Merge remote-tracking branch 'origin/master'

weifanli 3 years ago
parent
commit
7dd3284c75
27 changed files with 446 additions and 62 deletions
  1. 1 1
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/CmsPreferenceAreaController.java
  2. 11 1
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/HomeServiceImpl.java
  3. 1 1
      cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/aspect/RedisCacheAspect.java
  4. 1 1
      cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/config/SecurityConfig.java
  5. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java
  6. 9 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleRepliedDao.java
  7. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleStudentPaymentDao.java
  8. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicAlbumSearch.java
  9. 34 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MyCourseSearch.java
  10. 47 32
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseScheduleReplied.java
  11. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicSheet.java
  12. 15 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseRepliedService.java
  13. 2 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java
  14. 108 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseRepliedServiceImpl.java
  15. 30 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  16. 3 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetAuthRecordServiceImpl.java
  17. 8 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  18. 22 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyCourseVo.java
  19. 13 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  20. 17 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleRepliedMapper.xml
  21. 3 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml
  22. 10 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicAlbumMapper.xml
  23. 7 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml
  24. 1 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MusicAlbumController.java
  25. 48 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/CourseRepliedController.java
  26. 4 5
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/CourseScheduleController.java
  27. 25 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/MusicSheetController.java

+ 1 - 1
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/CmsPreferenceAreaController.java

@@ -19,7 +19,7 @@ import java.util.List;
  */
 @Controller
 @Api(tags = "CmsPreferenceAreaController", description = "商品优选管理")
-@RequestMapping("/preferenceArea")
+@RequestMapping("/prefrenceArea")
 public class CmsPreferenceAreaController {
     @Autowired
     private CmsPreferenceAreaService preferenceAreaService;

+ 11 - 1
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/HomeServiceImpl.java

@@ -57,7 +57,7 @@ public class HomeServiceImpl implements HomeService {
         result.setProductCategoryList(getHomeProductCategoryList());
 
         //获取热销商品
-        result.setHotProductList(homeDao.getHotProductList(0,4));
+        result.setHotProductList(getHotProductList());
 
         // 获取商品分类
         result.setProductAttributeCategoryList(getHomeProductAttributeCategory());
@@ -76,6 +76,16 @@ public class HomeServiceImpl implements HomeService {
         return result;
     }
 
+    private List<PmsProduct> getHotProductList() {
+        PmsProductExample example = new PmsProductExample();
+        example.setOrderByClause("sort desc");
+        example.createCriteria().andDeleteStatusEqualTo(0)
+                .andPublishStatusEqualTo(1)
+                .andRecommandStatusEqualTo(1)
+                .andVerifyStatusEqualTo(1);
+        return productMapper.selectByExample(example);
+    }
+
     private long getHomeCartItemCount() {
         OmsCartItemExample example = new OmsCartItemExample();
         // todo 用户id

+ 1 - 1
cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/aspect/RedisCacheAspect.java

@@ -24,7 +24,7 @@ import java.lang.reflect.Method;
 public class RedisCacheAspect {
     private static Logger LOGGER = LoggerFactory.getLogger(RedisCacheAspect.class);
 
-    @Pointcut("execution(public * com.macro.mall.portal.service.*CacheService.*(..)) || execution(public * com.macro.mall.service.*CacheService.*(..))")
+    @Pointcut("execution(public * com.yonge.cooleshow.admin.service.*CacheService.*(..)) || execution(public * com.yonge.cooleshow.admin.service.*CacheService.*(..))")
     public void cacheAspect() {
     }
 

+ 1 - 1
cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/config/SecurityConfig.java

@@ -42,7 +42,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
         registry.and()
                 .authorizeRequests()
                 .anyRequest()
-                .permitAll()
+                .authenticated()
                 // 关闭跨站请求防护及不使用session
                 .and()
                 .csrf()

+ 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();
 }
 

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

@@ -30,6 +30,9 @@ public class MusicAlbumSearch extends QueryInfo{
     @ApiModelProperty("专辑状态0:停用,1:启用")
     private YesOrNoEnum albumStatus;
 
+    @ApiModelProperty(value = "排序规则,1:按收藏人数倒叙",hidden = true)
+    private Integer sortBy;
+
     public String getIdAndName() {
         return idAndName;
     }
@@ -64,4 +67,12 @@ public class MusicAlbumSearch extends QueryInfo{
     public void setAlbumStatus(YesOrNoEnum albumStatus) {
         this.albumStatus = albumStatus;
     }
+
+    public Integer getSortBy() {
+        return sortBy;
+    }
+
+    public void setSortBy(Integer sortBy) {
+        this.sortBy = sortBy;
+    }
 }

+ 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;
     }
-    
 }

+ 12 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicSheet.java

@@ -83,6 +83,10 @@ public class MusicSheet implements Serializable {
     @ApiModelProperty(value = "审核状态(DOING:待审核;PASS:通过;UNPASS:未通过)")
     private AuthStatusEnum auditStatus;
 
+	@TableField("submit_audit_time_")
+	@ApiModelProperty(value = "提交审核时间")
+	private Date submitAuditTime;
+
     @TableField("sort_number_")
     @ApiModelProperty(value = "排序号")
     private Integer sortNumber;  //排序号
@@ -345,4 +349,12 @@ public class MusicSheet implements Serializable {
 	public void setDelFlag(Boolean delFlag) {
 		this.delFlag = delFlag;
 	}
+
+	public Date getSubmitAuditTime() {
+		return submitAuditTime;
+	}
+
+	public void setSubmitAuditTime(Date submitAuditTime) {
+		this.submitAuditTime = submitAuditTime;
+	}
 }

+ 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);
+}

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

@@ -30,8 +30,7 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
      * 老师端-首页-我的课程-直播课
      *
      * @param param 传入参数
-     *              <p> - year 年
-     *              <p> - month 月
+     *              <p> - classDate 年月
      *              <p> - row 条数
      *              <p> - page 页数
      *              <p> - status 课程状态 NOT_START未开始 ING进行中 COMPLETE已完成
@@ -133,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);
+    }
+
+}

+ 30 - 7
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;
@@ -69,8 +75,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      * 老师端-首页-我的课程-直播课
      *
      * @param param 传入参数
-     *              <p> - year 年
-     *              <p> - month 月
+     *              <p> - classDate 年月
      *              <p> - row 条数
      *              <p> - page 页数
      *              <p> - status 课程状态 NOT_START未开始 ING进行中 COMPLETE已完成
@@ -79,10 +84,10 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     public PageInfo<TeacherLiveCourseInfoVo> queryTeacherLiveCourse(Map<String, Object> param) {
         String status = WrapperUtil.toStr(param, "status", "课程状态不能为空!");
         CourseScheduleEnum.existCourseState(status, "查询条件错误,课程状态不正确");
-        Integer year = WrapperUtil.toInt(param, "year", "查询时间年份不能为空!");
-        Integer month = WrapperUtil.toInt(param, "month", "查询时间月份不能为空!");
+        String classDate = WrapperUtil.toStr(param, "classDate", "查询时间不能为空!");
+        String[] classDateSp = classDate.split("-");
         //本月的第一天
-        LocalDate firstDay = LocalDate.of(year, month, 1);
+        LocalDate firstDay = LocalDate.of(Integer.parseInt(classDateSp[0]), Integer.parseInt(classDateSp[1]), 1);
         //本月的最后一天
         LocalDate lastDay = firstDay.with(TemporalAdjusters.lastDayOfMonth());
         //查询该月的所有课程
@@ -604,8 +609,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));
     }
 }
 

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

@@ -26,16 +26,15 @@ public class MusicSheetAuthRecordServiceImpl extends ServiceImpl<MusicSheetAuthR
                                               .eq(MusicSheetAuthRecord::getMusicSheetId, param.getMusicSheetId())
                                               .eq(MusicSheetAuthRecord::getVerifyUserId, userId)
                                               .list();
+        MusicSheetAuthRecord musicSheetAuthRecord = new MusicSheetAuthRecord();
         if (!CollectionUtils.isEmpty(list)) {
-            throw  new BizException("曲目已经过审批");
+            musicSheetAuthRecord = list.get(0);
         }
-
-        MusicSheetAuthRecord musicSheetAuthRecord = new MusicSheetAuthRecord();
         musicSheetAuthRecord.setMusicSheetId(param.getMusicSheetId());
         musicSheetAuthRecord.setCreateTime(new Date());
         musicSheetAuthRecord.setAuditState(param.getAuthStatus());
         musicSheetAuthRecord.setReason(param.getRemark());
         musicSheetAuthRecord.setVerifyUserId(userId);
-        return this.save(musicSheetAuthRecord);
+        return this.saveOrUpdate(musicSheetAuthRecord);
     }
 }

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

@@ -152,11 +152,12 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
                     detail.setPlay(YesOrNoEnum.YES);
                 }
             }
-            // 学生进入云教练练习,添加一条练习记录
-            musicSheetPracticeRecordService.addRecord(id,sysUser.getId());
+
         } else {
             detail.setPlay(YesOrNoEnum.YES);
         }
+        // 学生进入云教练练习,添加一条练习记录
+        musicSheetPracticeRecordService.addRecord(id,sysUser.getId());
         return detail;
     }
 
@@ -233,9 +234,14 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
         if (musicSheet == null) {
             throw  new BizException("未找到曲目信息");
         }
+        if (AuthStatusEnum.DOING.getCode().equals(musicSheet.getAuditStatus().getCode())) {
+            throw  new BizException("曲目已经过审批");
+        }
 
         if (musicSheetAuthRecordService.audit(param,userId)) {
             musicSheet.setAuditStatus(param.getAuthStatus());
+            musicSheet.setUpdateBy(userId);
+            musicSheet.setUpdateTime(new Date());
             return this.updateById(musicSheet);
         } else {
             return false;

+ 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>

+ 10 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicAlbumMapper.xml

@@ -58,6 +58,16 @@
                 and t.album_status_ = #{query.albumStatus}
             </if>
         </where>
+        <if test="query.sortBy != null">
+            <choose>
+                <when test="query.sortBy == 1">
+                    order by t2.num desc
+                </when>
+            </choose>
+        </if>
+        <if test="query.sortBy == null">
+            order by t.id_ desc
+        </if>
     </select>
 
     <select id="selectFavoritePage" resultType="com.yonge.cooleshow.biz.dal.vo.MusicAlbumVo">

+ 7 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml

@@ -71,6 +71,7 @@
         <where>
             <include refid="QueryInfo"/>
         </where>
+        order by  t.id_ desc
     </select>
 
     <sql id="QueryInfo">
@@ -217,6 +218,7 @@
         <where>
             <include refid="QueryInfo"/>
         </where>
+        order by  t.id_ desc
     </select>
 
     <select id="selectMyMusicPage" resultType="com.yonge.cooleshow.biz.dal.vo.MusicSheetVo">
@@ -237,6 +239,7 @@
                 and mspr.order_status_ = 1
             </if>
         </where>
+        order by  mspr.id_ desc
     </select>
 
     <select id="selectFavoriteMusicPage" resultType="com.yonge.cooleshow.biz.dal.vo.MusicSheetVo">
@@ -257,6 +260,7 @@
                 and mf.user_id_ = #{param.studentId}
             </if>
         </where>
+        order by mf.id_ desc
     </select>
 
     <select id="selectPracticeMusicPage" resultType="com.yonge.cooleshow.biz.dal.vo.MusicSheetVo">
@@ -328,6 +332,7 @@
                 and ms.del_flag_ = #{param.delFlag}
             </if>
         </where>
+        order by mspr.id_ desc
     </select>
 
     <select id="selectTeacherPage" resultType="com.yonge.cooleshow.biz.dal.vo.TeacherMusicSheetVo">
@@ -364,6 +369,7 @@
                 and ms.del_flag_ = #{param.delFlag}
             </if>
         </where>
+        order by  ms.id_ desc
     </select>
 
     <select id="selectAuditPage" resultType="com.yonge.cooleshow.biz.dal.vo.TeacherMusicSheetVo">
@@ -409,5 +415,6 @@
                 and ms.del_flag_ = #{param.delFlag}
             </if>
         </where>
+        order by  ms.submit_audit_time_ desc
     </select>
 </mapper>

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

@@ -48,6 +48,7 @@ public class MusicAlbumController extends BaseController {
             return failed("用户信息获取失败");
         }
         query.setAlbumStatus(YesOrNoEnum.YES);
+        query.setSortBy(1);
         IPage<MusicAlbumVo> iPage = musicAlbumService.selectPage(PageUtil.getPage(query),query);
         return succeed(PageUtil.pageInfo(iPage));
     }

+ 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));
+    }
+}

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

@@ -46,8 +46,7 @@ public class CourseScheduleController extends BaseController {
     private SysUserFeignService sysUserFeignService;
 
     @ApiImplicitParams({
-            @ApiImplicitParam(name = "year", dataType = "Integer", value = "年"),
-            @ApiImplicitParam(name = "month", dataType = "Integer", value = "月"),
+            @ApiImplicitParam(name = "classDate", dataType = "Integer", value = "年月"),
             @ApiImplicitParam(name = "status", dataType = "String", value = "课程状态 NOT_START未开始 ING进行中 COMPLETE已完成"),
             @ApiImplicitParam(name = "subjectId", dataType = "Long", value = "声部id"),
             @ApiImplicitParam(name = "page", dataType = "Integer", value = "页数"),
@@ -86,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));
     }
 }

+ 25 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/MusicSheetController.java

@@ -74,6 +74,7 @@ public class MusicSheetController extends BaseController {
 
         musicSheetDto.setUserId(sysUser.getId());
         musicSheetDto.setAuditStatus(AuthStatusEnum.DOING);
+        musicSheetDto.setSubmitAuditTime(new Date());
         List<MusicSheetAccompaniment> list;
         if (!AudioTypeEnum.MIDI.getCode().equals(musicSheetDto.getAudioType().getCode())){
             list = musicSheetDto.getBackground();
@@ -92,6 +93,30 @@ public class MusicSheetController extends BaseController {
         return succeed("新增曲谱成功");
     }
 
+
+    @ApiOperation(value = "修改", httpMethod="POST", consumes="application/json", produces="application/json")
+    @PostMapping(value="/update", consumes="application/json", produces="application/json")
+    public HttpResponseResult<Object> update(@Valid @RequestBody MusicSheet musicSheet) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null  || sysUser.getId() == null) {
+            return failed("用户信息获取失败");
+        }
+        if (musicSheet.getId()==null){
+            return failed("缺少ID");
+        }
+
+        musicSheet.setUpdateBy(sysUser.getId());
+        musicSheet.setUpdateTime(new Date());
+        musicSheet.setSubmitAuditTime(new Date());
+        musicSheet.setAuditStatus(AuthStatusEnum.DOING);
+        boolean result = musicSheetService.updateById(musicSheet);
+        if (result){
+            return succeed("修改成功");
+        } else {
+            return failed("修改失败");
+        }
+    }
+
     @ApiOperation(value = "分页查询", httpMethod="POST", consumes="application/json", produces="application/json")
     @PostMapping(value="/list", consumes="application/json", produces="application/json")
     public HttpResponseResult<PageInfo<MusicSheetVo>> list(@RequestBody MusicSheetSearch query) {