Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/master'

weifanli 2 gadi atpakaļ
vecāks
revīzija
1bbbcd669b
30 mainītis faili ar 1207 papildinājumiem un 131 dzēšanām
  1. 24 64
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/CourseHomeworkController.java
  2. 49 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseHomeworkDao.java
  3. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicAlbumDao.java
  4. 15 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherFreeTimeDao.java
  5. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/CourseHomeworkReviewDto.java
  6. 52 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/CourseHomeworkSubmitDto.java
  7. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/PracticeTimesSetting.java
  8. 74 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/HomeworkSearch.java
  9. 139 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TeacherSubjectPrice.java
  10. 20 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseHomeworkService.java
  11. 10 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java
  12. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleStudentPaymentService.java
  13. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/StudentCourseHomeworkService.java
  14. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherFreeTimeService.java
  15. 69 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseHomeworkServiceImpl.java
  16. 12 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  17. 18 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleStudentPaymentServiceImpl.java
  18. 11 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicAlbumServiceImpl.java
  19. 20 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentCourseHomeworkServiceImpl.java
  20. 23 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherFreeTimeServiceImpl.java
  21. 47 12
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseHomeworkDetailVo.java
  22. 73 13
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseHomeworkVo.java
  23. 193 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherFreeTimeVo.java
  24. 167 8
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseHomeworkMapper.xml
  25. 25 4
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicAlbumMapper.xml
  26. 5 4
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml
  27. 18 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherFreeTimeMapper.xml
  28. 96 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/CourseHomeworkController.java
  29. 1 1
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/CourseHomeworkController.java
  30. 4 7
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherFreeTimeController.java

+ 24 - 64
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/CourseHomeworkController.java

@@ -1,87 +1,47 @@
 package com.yonge.cooleshow.admin.controller;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
-
+import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.search.HomeworkSearch;
+import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
+import com.yonge.cooleshow.biz.dal.service.CourseHomeworkService;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.page.PageInfo;
-import com.yonge.toolset.utils.string.StringUtil;
-import io.swagger.annotations.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 
-import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo;
-import com.yonge.cooleshow.biz.dal.dto.search.CourseHomeworkSearch;
-import com.yonge.cooleshow.biz.dal.entity.CourseHomework;
-import com.yonge.cooleshow.biz.dal.service.CourseHomeworkService;
-
 @RestController
-@RequestMapping("/courseHomework")
+@RequestMapping("/homework")
 @Api(value = "课程作业表", tags = "课程作业表")
 public class CourseHomeworkController extends BaseController {
 
     @Autowired
     private CourseHomeworkService courseHomeworkService;
 
-	/**
-     * 查询单条
-     */
-    @GetMapping("/detail/{id}")
-    @ApiOperation(value = "详情", notes = "传入id")
-    public HttpResponseResult<CourseHomeworkVo> detail(@PathVariable("id") Long id) {
-    	return succeed(courseHomeworkService.detail(id));
-	}
-    
-    /**
-     * 查询分页
-     */
-    @PostMapping("/page")
-    @ApiOperation(value = "查询分页", notes = "传入courseHomeworkSearch")
-    public HttpResponseResult<PageInfo<CourseHomeworkVo>> page(@RequestBody HomeworkSearch query) {
-		IPage<CourseHomeworkVo> pages = courseHomeworkService.selectPage(PageUtil.getPage(query), query);
-        return succeed(PageUtil.pageInfo(pages));
-	}
-    
-    /**
-	 * 新增
-	 */
-	@PostMapping("/save")
-	@ApiOperation(value = "新增", notes = "传入courseHomework")
-	public HttpResponseResult save(@Valid @RequestBody CourseHomework courseHomework) {
-    	return status(courseHomeworkService.save(courseHomework));
-	}
-    
-    /**
-	 * 修改
-	 */
-	@PostMapping("/update")
-	@ApiOperation(value = "修改", notes = "传入courseHomework")
-	public HttpResponseResult update(@Valid @RequestBody CourseHomework courseHomework) {
-        return status(courseHomeworkService.updateById(courseHomework));
+
+	@ApiOperation(value = "课后作业-列表", httpMethod = "POST", consumes = "application/json", produces = "application/json")
+	@PostMapping(value = "/list", consumes = "application/json", produces = "application/json")
+	public HttpResponseResult<PageInfo<CourseHomeworkVo>> list(@Valid @RequestBody HomeworkSearch query) {
+		query.setDecorate(YesOrNoEnum.YES);
+		query.setCourseStatus(CourseScheduleEnum.COMPLETE);
+		query.setCourseType(CourseScheduleEnum.PRACTICE);
+		return succeed(PageUtil.pageInfo(courseHomeworkService.selectAdminPage(PageUtil.getPage(query),query)));
 	}
-    
-    /**
-	 * 新增或修改
-	 */
-    @PostMapping("/submit")
-    @ApiOperation(value = "新增或修改", notes = "传入courseHomework")
-	public HttpResponseResult submit(@Valid @RequestBody CourseHomework courseHomework) {
-        return status(courseHomeworkService.saveOrUpdate(courseHomework));
-    }
 
- 	/**
-	 * 删除
-	 */
-	@PostMapping("/remove")
-	@ApiOperation(value = "逻辑删除", notes = "传入ids")
-	public HttpResponseResult remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-        if (StringUtil.isEmpty(ids)) {
-			return failed("参数不能为空");
-		}
-		return status(courseHomeworkService.removeByIds(StringUtil.toLongList(ids)));
+
+	@ApiOperation(value = "首页-我的课程-课程详情(陪练课)-课后作业信息详情",notes = "传入课程编号ID")
+	@GetMapping(value = "/detail/{courseId}")
+	public HttpResponseResult<CourseHomeworkDetailVo> detail(@ApiParam(value = "课程编号ID", required = true)
+															 @PathVariable("courseId") Long courseId) {
+		return succeed(courseHomeworkService.getCourseHomeworkDetailByCourseId(courseId));
 	}
 }

+ 49 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseHomeworkDao.java

@@ -36,7 +36,7 @@ public interface CourseHomeworkDao extends BaseMapper<CourseHomework> {
 	 * @param courseId 课程id
 	 * @return 课后作业信息
 	 */
-    CourseHomeworkDetailVo selectCourseHomeworkDetailByCourseId(@Param("courseId") Long courseId);
+	CourseHomeworkDetailVo selectCourseHomeworkDetailByCourseId(@Param("courseId") Long courseId);
 
 	/**
 	 * 获取课程购买的用户信息
@@ -45,8 +45,54 @@ public interface CourseHomeworkDao extends BaseMapper<CourseHomework> {
 	 * @param courseScheduleId 课程id
 	 * @return 购买用户信息
 	 */
-	CourseHomeworkDetailVo selectPaymentStudentInfo(@Param("courseGroupId") Long courseGroupId, @Param(
-			"courseScheduleId") Long courseScheduleId);
+	CourseHomeworkDetailVo selectPaymentStudentInfo(@Param("courseScheduleId") Long courseScheduleId);
 
+	/**
+	 * 获取课程购买的用户信息
+	 *
+	 * @param records 课程id集合
+	 * @return
+	 */
 	List<CourseHomeworkVo> selectStudentInfo(@Param("records") List<CourseHomeworkVo> records);
+
+	/**
+	 * 查询课程组声部信息 和老师信息
+	 *
+	 * @param courseGroupId 课程组id
+	 * @return
+	 */
+	CourseHomeworkDetailVo selectSubjectAndTeacherInfo(@Param("courseGroupId") Long courseGroupId);
+
+	/**
+	 * 查询课程组声部信息
+	 *
+	 * @param records 课程组id集合
+	 * @return
+	 */
+	List<CourseHomeworkVo> selectSubjectInfoList(@Param("records") List<CourseHomeworkVo> records);
+
+	/**
+	 * 查询课程老师信息和学生旷课信息
+	 *
+	 * @param records 课程id集合
+	 * @return
+	 */
+	List<CourseHomeworkVo> selectTeacherInfo(@Param("records") List<CourseHomeworkVo> records);
+
+	/**
+	 * 管理平台查询
+	 *
+	 * @param page
+	 * @param query
+	 * @return
+	 */
+	List<CourseHomeworkVo> selectAdminPage(@Param("page") IPage<CourseHomeworkVo> page, @Param("param") HomeworkSearch query);
+
+	/**
+	 * 查询课程提交时间
+	 *
+	 * @param courseIdList 课程id集合
+	 * @return
+	 */
+	List<CourseHomeworkVo> selectSubmitTime(@Param("courseIdList") List<Long> courseIdList);
 }

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

@@ -37,4 +37,12 @@ public interface MusicAlbumDao extends BaseMapper<MusicAlbum> {
      */
     List<MusicAlbumVo> selectFavoritePage(@Param("page") IPage<MusicAlbumVo> page, @Param(
             "query") StudentMusicAlbumSearch search);
+
+    /**
+     * 查询收藏专辑的收藏数和曲谱数
+     *
+     * @param records 专辑id集合
+     * @return
+     */
+    List<MusicAlbumVo> selectFavoriteNumAndMusicNum(@Param("records") List<MusicAlbumVo> records);
 }

+ 15 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherFreeTimeDao.java

@@ -1,7 +1,10 @@
 package com.yonge.cooleshow.biz.dal.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yonge.cooleshow.biz.dal.dto.PracticeTimesSetting;
 import com.yonge.cooleshow.biz.dal.entity.TeacherFreeTime;
+import com.yonge.cooleshow.biz.dal.entity.TeacherSubjectPrice;
+import com.yonge.cooleshow.biz.dal.vo.TeacherFreeTimeVo;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -37,5 +40,17 @@ public interface TeacherFreeTimeDao extends BaseMapper<TeacherFreeTime> {
     * @date 2022/3/29 10:02
     */
     void updateDefaultFlag(@Param("defaultFlag") boolean defaultFlag, @Param("teacherId") Long teacherId);
+
+    //根据id删除关联表数据
+    void deleteSubjectPrice(Long id);
+
+    //新增声部价格
+    void insertPrice(List<TeacherSubjectPrice> list);
+
+    //查询老师配置
+    TeacherFreeTimeVo getDetail(PracticeTimesSetting practiceTimesSetting);
+
+    //根据id查声部售价
+    List<TeacherSubjectPrice> getPrice(Long id);
 }
 

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/CourseHomeworkReviewDto.java

@@ -23,7 +23,7 @@ public class CourseHomeworkReviewDto {
     @NotBlank(message = "点评信息不能为空")
     private String review;
 
-    @ApiModelProperty("老师id")
+    @ApiModelProperty(value = "老师id",hidden = true)
     private Long teacherId;
 
     public Long getTeacherId() {

+ 52 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/CourseHomeworkSubmitDto.java

@@ -0,0 +1,52 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * Description 学生提交作业
+ *
+ * @author liujunchi
+ * @date 2022-04-14
+ */
+@ApiModel("学生提交作业")
+public class CourseHomeworkSubmitDto {
+
+    @ApiModelProperty(value = "课程ID",required = true)
+    @NotNull(message = "课程ID不能为空 ")
+    private Long courseScheduleId;
+
+    @ApiModelProperty(value = "提交信息",required = true)
+    @NotBlank(message = "提交信息不能为空")
+    private String submit;
+
+    @ApiModelProperty(value = "学生id",hidden = true)
+    private Long studentId;
+
+    public Long getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Long studentId) {
+        this.studentId = studentId;
+    }
+
+    public Long getCourseScheduleId() {
+        return courseScheduleId;
+    }
+
+    public void setCourseScheduleId(Long courseScheduleId) {
+        this.courseScheduleId = courseScheduleId;
+    }
+
+    public String getSubmit() {
+        return submit;
+    }
+
+    public void setSubmit(String submit) {
+        this.submit = submit;
+    }
+}

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

@@ -15,6 +15,17 @@ public class PracticeTimesSetting {
     @ApiModelProperty(value = "单课时分钟数")
     private Integer courseMinutes;
 
+    @ApiModelProperty(value = "用户id")
+    private Long userId;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
     public Integer getFreeMinutes() {
         return freeMinutes;
     }

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

@@ -1,10 +1,14 @@
 package com.yonge.cooleshow.biz.dal.dto.search;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.cooleshow.common.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
 
 /**
  * Description 课后作业查询条件
@@ -27,9 +31,31 @@ public class HomeworkSearch extends QueryInfo {
     @ApiModelProperty("布置作业状态 0:否,1:是")
     private YesOrNoEnum decorate;
 
+    @ApiModelProperty("提交作业状态 0:否,1:是")
+    private YesOrNoEnum submit;
+
     @ApiModelProperty(value = "课程编号ID",hidden = true)
     private Long courseScheduleId;
 
+    @ApiModelProperty(value = "年月 格式:yyyy-MM",required = true)
+    private String date;
+
+    @ApiModelProperty(value = "学生编号",hidden = true)
+    private Long studentId;
+
+    @ApiModelProperty("布置老师、学生,名称/手机号/编号")
+    private String search;
+
+    @ApiModelProperty("布置开始时间")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date startTime;
+
+    @ApiModelProperty("布置结束时间")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endTime;
+
     public Long getCourseScheduleId() {
         return courseScheduleId;
     }
@@ -69,4 +95,52 @@ public class HomeworkSearch extends QueryInfo {
     public void setDecorate(YesOrNoEnum decorate) {
         this.decorate = decorate;
     }
+
+    public String getDate() {
+        return date;
+    }
+
+    public void setDate(String date) {
+        this.date = date;
+    }
+
+    public YesOrNoEnum getSubmit() {
+        return submit;
+    }
+
+    public void setSubmit(YesOrNoEnum submit) {
+        this.submit = submit;
+    }
+
+    public Long getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Long studentId) {
+        this.studentId = studentId;
+    }
+
+    public String getSearch() {
+        return search;
+    }
+
+    public void setSearch(String search) {
+        this.search = search;
+    }
+
+    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;
+    }
 }

+ 139 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TeacherSubjectPrice.java

@@ -0,0 +1,139 @@
+package com.yonge.cooleshow.biz.dal.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+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/4/15
+ */
+@ApiModel(value = "teacher_subject_price-老师声部价格")
+public class TeacherSubjectPrice implements Serializable {
+    @TableId(value = "id_", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
+    private Long id;
+
+    @TableId("teacher_free_time_id")
+    @ApiModelProperty(value = "排课时间表id")
+    private Long teacherFreeTimeId;
+
+    @TableField("teacher_id_")
+    @ApiModelProperty(value = "老师id")
+    private Long teacherId;
+
+    @TableField("free_minutes_")
+    @ApiModelProperty(value = "课间休息时长(分钟)")
+    private Integer freeMinutes;
+
+    @TableField("course_minutes_")
+    @ApiModelProperty(value = "单课时长(分钟)")
+    private Integer courseMinutes;
+
+    @TableField("subject_id_")
+    @ApiModelProperty(value = "声部id")
+    private Long subjectId;
+
+    @TableField("subject_name_")
+    @ApiModelProperty(value = "声部名称")
+    private String subjectName;
+
+    @TableField("subject_price_")
+    @ApiModelProperty(value = "声部价格")
+    private BigDecimal subjectPrice;
+
+    @TableField("create_time_")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @TableField("update_time_")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+    public Long getTeacherFreeTimeId() {
+        return teacherFreeTimeId;
+    }
+
+    public void setTeacherFreeTimeId(Long teacherFreeTimeId) {
+        this.teacherFreeTimeId = teacherFreeTimeId;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Long teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public Integer getFreeMinutes() {
+        return freeMinutes;
+    }
+
+    public void setFreeMinutes(Integer freeMinutes) {
+        this.freeMinutes = freeMinutes;
+    }
+
+    public Integer getCourseMinutes() {
+        return courseMinutes;
+    }
+
+    public void setCourseMinutes(Integer courseMinutes) {
+        this.courseMinutes = courseMinutes;
+    }
+
+    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 BigDecimal getSubjectPrice() {
+        return subjectPrice;
+    }
+
+    public void setSubjectPrice(BigDecimal subjectPrice) {
+        this.subjectPrice = subjectPrice;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+}
+

+ 20 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseHomeworkService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.dto.CourseHomeworkReviewDto;
 import com.yonge.cooleshow.biz.dal.dto.CourseHomeworkSaveDto;
+import com.yonge.cooleshow.biz.dal.dto.CourseHomeworkSubmitDto;
 import com.yonge.cooleshow.biz.dal.dto.search.HomeworkSearch;
 import com.yonge.cooleshow.biz.dal.entity.CourseHomework;
 import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkDetailVo;
@@ -51,4 +52,23 @@ public interface CourseHomeworkService extends IService<CourseHomework>  {
 	 * @return boolean
 	 */
     boolean reviewCourseHomework(CourseHomeworkReviewDto reviewDto);
+
+	/**
+	 * 学生提交课程作业
+	 *
+	 * @param submitDto 学生提交信息
+	 * @return boolean
+	 */
+	boolean submitCourseHomework(CourseHomeworkSubmitDto submitDto);
+
+	/**
+	 * 分页查询
+	 *
+	 * @param page 分页信息
+	 * @param query 查询
+	 * @return
+	 */
+	IPage<CourseHomeworkVo>  selectAdminPage(IPage<CourseHomeworkVo> page, HomeworkSearch query);
+
+
 }

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

@@ -155,8 +155,17 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
      * @param courseId 课程id
      * @return boolean true 属于老师
      */
-    boolean checkCourseSchedule(Long teacherId, Long courseId);
+    boolean checkTeacherCourseSchedule(Long teacherId, Long courseId);
 
     List<String> queryCourseScheduleStudent(MyCourseSearch search);
+
+    /**
+     * 检查学生是否购买课程
+     *
+     * @param studentId 学生id
+     * @param courseId 课程id
+     * @return boolean true 购买
+     */
+    boolean checkStudentCourseSchedule(Long studentId, Long courseId);
 }
 

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

@@ -24,5 +24,13 @@ public interface CourseScheduleStudentPaymentService extends IService<CourseSche
      * @param groupId 课程组id
      */
     List<LiveCourseInfoVo.CourseBuyStudentVo> queryStudentInfoByGroupId(@Param("groupId") Long groupId);
+
+    /**
+     * 根据陪练课 课程id查看购买记录
+     *
+     * @param courseId 课程id
+     * @return 购买记录
+     */
+    CourseScheduleStudentPayment getByCourseId(Long courseId);
 }
 

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

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.StudentCourseHomeworkVo;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentCourseHomeworkSearch;
 import com.yonge.cooleshow.biz.dal.entity.StudentCourseHomework;
@@ -35,4 +36,13 @@ public interface StudentCourseHomeworkService extends IService<StudentCourseHome
 	 * @return boolean
 	 */
     boolean reviewCourseHome(Long studentHomeworkId, String review);
+
+	/**
+	 * 学生提交作业
+	 *
+	 * @param courseHomeworkDetailVo 课程作业信息
+	 * @param submit 提交信息
+	 * @return boolean
+	 */
+	boolean submitCourseHome(CourseHomeworkDetailVo courseHomeworkDetailVo, String submit, Long studentId);
 }

+ 4 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherFreeTimeService.java

@@ -2,7 +2,9 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.dao.TeacherFreeTimeDao;
+import com.yonge.cooleshow.biz.dal.dto.PracticeTimesSetting;
 import com.yonge.cooleshow.biz.dal.entity.TeacherFreeTime;
+import com.yonge.cooleshow.biz.dal.vo.TeacherFreeTimeVo;
 
 /**
  * 老师可排课时间表(TeacherFreeTime)表服务接口
@@ -22,5 +24,7 @@ public interface TeacherFreeTimeService extends IService<TeacherFreeTime> {
     * @date 2022/3/25 10:18
     */
     void upSet(TeacherFreeTime teacherFreeTime);
+
+    TeacherFreeTimeVo getDetail(PracticeTimesSetting practiceTimesSetting);
 }
 

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

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.dao.CourseHomeworkDao;
 import com.yonge.cooleshow.biz.dal.dto.CourseHomeworkReviewDto;
 import com.yonge.cooleshow.biz.dal.dto.CourseHomeworkSaveDto;
+import com.yonge.cooleshow.biz.dal.dto.CourseHomeworkSubmitDto;
 import com.yonge.cooleshow.biz.dal.dto.search.HomeworkSearch;
 import com.yonge.cooleshow.biz.dal.entity.CourseHomework;
 import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
@@ -25,6 +26,7 @@ import org.springframework.util.CollectionUtils;
 
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 
 @Service
@@ -50,12 +52,24 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
     public IPage<CourseHomeworkVo> selectPage(IPage<CourseHomeworkVo> page, HomeworkSearch query){
         IPage<CourseHomeworkVo> courseHomeworkVoIPage = page.setRecords(baseMapper.selectPage(page, query));
         List<CourseHomeworkVo> records = courseHomeworkVoIPage.getRecords();
-        List<CourseHomeworkVo> userInfoList = baseMapper.selectStudentInfo(records);
+        if (CollectionUtils.isEmpty(records)) {
+            return courseHomeworkVoIPage;
+        }
+        // 学生信息
+        List<CourseHomeworkVo> studentInfoList = baseMapper.selectStudentInfo(records);
+
+        // 旷课状态 和老师信息
+        List<CourseHomeworkVo> teacherInfoList = baseMapper.selectTeacherInfo(records);
+
+        // 声部信息
+        List<CourseHomeworkVo> subjectList = baseMapper.selectSubjectInfoList(records);
         for (int i = 0; i < records.size(); i++) {
-            CourseHomeworkVo userInfo = userInfoList.get(i);
-            records.get(i).setStudentAvatar(userInfo.getStudentAvatar());
-            records.get(i).setStudentName(userInfo.getStudentName());
-            records.get(i).setSubjectName(userInfo.getSubjectName());
+            records.get(i).setStudentAvatar(studentInfoList.get(i).getStudentAvatar());
+            records.get(i).setStudentName(studentInfoList.get(i).getStudentName());
+            records.get(i).setSubjectName(subjectList.get(i).getSubjectName());
+            records.get(i).setTeacherAvatar(teacherInfoList.get(i).getTeacherAvatar());
+            records.get(i).setTeacherName(teacherInfoList.get(i).getTeacherName());
+            records.get(i).setAbsenteeism(teacherInfoList.get(i).getAbsenteeism());
         }
         return courseHomeworkVoIPage;
     }
@@ -68,12 +82,18 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
 
         // 学生信息
         CourseHomeworkDetailVo studentInfoDetailVo = baseMapper
-                .selectPaymentStudentInfo(courseHomeworkDetailVo.getCourseGroupId(),courseHomeworkDetailVo.getCourseScheduleId());
+                .selectPaymentStudentInfo(courseHomeworkDetailVo.getCourseScheduleId());
+
+        // 声部信息
+        CourseHomeworkDetailVo subjectAndTeacherInfoVo = baseMapper
+                .selectSubjectAndTeacherInfo(courseHomeworkDetailVo.getCourseGroupId());
 
         // 拼接数据
         courseHomeworkDetailVo.setStudentName(studentInfoDetailVo.getStudentName());
         courseHomeworkDetailVo.setStudentAvatar(studentInfoDetailVo.getStudentAvatar());
-        courseHomeworkDetailVo.setSubjectName(studentInfoDetailVo.getSubjectName());
+        courseHomeworkDetailVo.setSubjectName(subjectAndTeacherInfoVo.getSubjectName());
+        courseHomeworkDetailVo.setTeacherAvatar(subjectAndTeacherInfoVo.getTeacherAvatar());
+        courseHomeworkDetailVo.setTeacherName(subjectAndTeacherInfoVo.getTeacherName());
         return courseHomeworkDetailVo;
     }
 
@@ -135,6 +155,48 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
         return studentCourseHomeworkService.reviewCourseHome(courseHomeworkDetailVo.getStudentHomeworkId(),reviewDto.getReview());
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean submitCourseHomework(CourseHomeworkSubmitDto submitDto) {
+        // 检查 老师 陪练课 课程状态为完成,有学生考勤记录 没有布置作业
+        checkCourseSchedule(submitDto.getCourseScheduleId());
+
+        // 检查已经布置了课后作业
+        if (checkHasHomework(submitDto.getCourseScheduleId()) == null) {
+            throw new BizException("没布置作业,不能提交作业");
+        }
+        // 课程基本信息
+        CourseHomeworkDetailVo courseHomeworkDetailVo = baseMapper
+                .selectCourseHomeworkDetailByCourseId(submitDto.getCourseScheduleId());
+
+        // 检查老师是否评价作业
+        if (YesOrNoEnum.YES.getCode().equals(courseHomeworkDetailVo.getReviewHomework().getCode())) {
+            throw  new BizException("老师已经点评作业,不能在提交");
+        }
+        return studentCourseHomeworkService.submitCourseHome(courseHomeworkDetailVo,submitDto.getSubmit(),submitDto.getStudentId());
+
+    }
+
+    @Override
+    public IPage<CourseHomeworkVo> selectAdminPage(IPage<CourseHomeworkVo> page, HomeworkSearch query) {
+        IPage<CourseHomeworkVo> courseHomeworkVoIPage = page.setRecords(baseMapper.selectAdminPage(page, query));
+
+        List<CourseHomeworkVo> records = courseHomeworkVoIPage.getRecords();
+        List<Long> courseIdList = records
+                                                  .stream()
+                                                  .map(CourseHomeworkVo::getCourseId)
+                                                  .collect(Collectors.toList());
+        if (CollectionUtils.isEmpty(courseIdList)) {
+            return courseHomeworkVoIPage;
+        }
+        // 查询提交时间
+        List<CourseHomeworkVo> courseHomeworkVoList = baseMapper.selectSubmitTime(courseIdList);
+        for (int i = 0; i < records.size(); i++) {
+            records.get(i).setSubmitTime(courseHomeworkVoList.get(i).getSubmitTime());
+        }
+        return courseHomeworkVoIPage;
+    }
+
     /**
      * 检查课程能否布置作业
      *

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

@@ -67,6 +67,9 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     @Autowired
     private CourseGroupService courseGroupService;
 
+    @Autowired
+    private CourseScheduleStudentPaymentService courseScheduleStudentPaymentService;
+
     @Override
     public CourseScheduleDao getDao() {
         return this.baseMapper;
@@ -677,7 +680,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     }
 
     @Override
-    public boolean checkCourseSchedule(Long teacherId, Long courseId) {
+    public boolean checkTeacherCourseSchedule(Long teacherId, Long courseId) {
         CourseSchedule courseSchedule = this.getById(courseId);
         return teacherId.equals(courseSchedule.getTeacherId());
     }
@@ -689,5 +692,13 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     public List<String> queryCourseScheduleStudent(MyCourseSearch search) {
         return baseMapper.queryCourseScheduleStudent(search);
     }
+
+    @Override
+    public boolean checkStudentCourseSchedule(Long studentId, Long courseId) {
+        CourseScheduleStudentPayment courseScheduleStudentPayment = courseScheduleStudentPaymentService
+                .getByCourseId(courseId);
+        return courseScheduleStudentPayment != null && studentId.equals(courseScheduleStudentPayment.getUserId());
+
+    }
 }
 

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

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.dao.CourseScheduleStudentPaymentDao;
 import com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudentPayment;
+import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.service.CourseScheduleStudentPaymentService;
 import com.yonge.cooleshow.biz.dal.vo.LiveCourseInfoVo;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -10,7 +11,9 @@ import org.springframework.stereotype.Service;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.util.CollectionUtils;
 
+import java.util.Collection;
 import java.util.List;
 
 /**
@@ -39,6 +42,21 @@ public class CourseScheduleStudentPaymentServiceImpl extends ServiceImpl<CourseS
         return baseMapper.queryStudentInfoByGroupId(groupId);
     }
 
+    @Override
+    public CourseScheduleStudentPayment getByCourseId(Long courseId) {
+        List<CourseScheduleStudentPayment> list = this.lambdaQuery()
+                                                      .eq(CourseScheduleStudentPayment::getCourseId, courseId)
+                                                      .eq(CourseScheduleStudentPayment::getCourseType,
+                                                          CourseScheduleEnum.PRACTICE.getCode())
+                                                      .isNotNull(CourseScheduleStudentPayment::getUserId)
+                                                      .list();
+        if (CollectionUtils.isEmpty(list)) {
+            return null;
+        }
+        return list.get(0);
+
+    }
+
 
 }
 

+ 11 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicAlbumServiceImpl.java

@@ -163,8 +163,18 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
     @Override
     public IPage<MusicAlbumVo> favoriteAlbum(IPage<MusicAlbumVo> page, StudentMusicAlbumSearch search) {
 
-        return page.setRecords(baseMapper.selectFavoritePage(page,search));
+        IPage<MusicAlbumVo> iPage = page.setRecords(baseMapper.selectFavoritePage(page, search));
+        List<MusicAlbumVo> records = iPage.getRecords();
+        if (CollectionUtils.isEmpty(records)) {
+            return iPage;
+        }
+        List<MusicAlbumVo> favoriteNumAndMusicNumList =baseMapper.selectFavoriteNumAndMusicNum(records);
 
+        for (int i = 0; i < records.size(); i++) {
+            records.get(i).setAlbumFavoriteCount(favoriteNumAndMusicNumList.get(i).getAlbumFavoriteCount());
+            records.get(i).setMusicSheetCount(favoriteNumAndMusicNumList.get(i).getMusicSheetCount());
+        }
+        return iPage;
     }
 
     private boolean checkNameRepeat(String albumName, Long id) {

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

@@ -2,12 +2,16 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkDetailVo;
 import org.springframework.stereotype.Service;
 import com.yonge.cooleshow.biz.dal.entity.StudentCourseHomework;
 import com.yonge.cooleshow.biz.dal.vo.StudentCourseHomeworkVo;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentCourseHomeworkSearch;
 import com.yonge.cooleshow.biz.dal.dao.StudentCourseHomeworkDao;
 import com.yonge.cooleshow.biz.dal.service.StudentCourseHomeworkService;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
 
 
 @Service
@@ -25,6 +29,7 @@ public class StudentCourseHomeworkServiceImpl extends ServiceImpl<StudentCourseH
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public boolean reviewCourseHome(Long studentHomeworkId, String review) {
         return this.lambdaUpdate()
                 .eq(StudentCourseHomework::getId,studentHomeworkId)
@@ -32,4 +37,19 @@ public class StudentCourseHomeworkServiceImpl extends ServiceImpl<StudentCourseH
                 .update();
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean submitCourseHome(CourseHomeworkDetailVo courseHomeworkDetailVo, String submit, Long studentId) {
+        StudentCourseHomework studentCourseHomework = new StudentCourseHomework();
+        studentCourseHomework.setCourseHomeworkId(courseHomeworkDetailVo.getId());
+        studentCourseHomework.setCourseGroupType(courseHomeworkDetailVo.getCourseType().getCode());
+        studentCourseHomework.setCourseGroupId(courseHomeworkDetailVo.getCourseGroupId());
+        studentCourseHomework.setCourseScheduleId(courseHomeworkDetailVo.getCourseScheduleId());
+        studentCourseHomework.setStudentId(studentId);
+        studentCourseHomework.setAttachments(submit);
+        studentCourseHomework.setSubmitTime(new Date());
+        studentCourseHomework.setTeacherReplied("");
+        return this.saveOrUpdate(studentCourseHomework);
+    }
+
 }

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

@@ -1,15 +1,20 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.dao.TeacherFreeTimeDao;
+import com.yonge.cooleshow.biz.dal.dto.PracticeTimesSetting;
 import com.yonge.cooleshow.biz.dal.entity.TeacherFreeTime;
+import com.yonge.cooleshow.biz.dal.entity.TeacherSubjectPrice;
 import com.yonge.cooleshow.biz.dal.service.TeacherFreeTimeService;
+import com.yonge.cooleshow.biz.dal.vo.TeacherFreeTimeVo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -37,13 +42,28 @@ public class TeacherFreeTimeServiceImpl extends ServiceImpl<TeacherFreeTimeDao,
         //删除原有设置
         if(Objects.nonNull(oldTeacherFreeTime)){
             baseMapper.deleteById(oldTeacherFreeTime.getId());
+            baseMapper.deleteSubjectPrice(oldTeacherFreeTime.getId());
         }
         //将其他配置改为非默认
         baseMapper.updateDefaultFlag(false,teacherFreeTime.getTeacherId());
-        Date date = new Date();
-        teacherFreeTime.setCreateTime(date);
-        teacherFreeTime.setUpdateTime(date);
         baseMapper.insert(teacherFreeTime);
+
+        List<TeacherSubjectPrice> priceList= JSONArray.parseArray(teacherFreeTime.getSubjectPrice(), TeacherSubjectPrice.class);
+        for (TeacherSubjectPrice price : priceList) {
+            price.setTeacherFreeTimeId(teacherFreeTime.getId());
+            price.setTeacherId(teacherFreeTime.getTeacherId());
+            price.setFreeMinutes(teacherFreeTime.getFreeMinutes());
+            price.setCourseMinutes(teacherFreeTime.getCourseMinutes());
+        }
+        baseMapper.insertPrice(priceList);
+    }
+
+    @Override
+    public TeacherFreeTimeVo getDetail(PracticeTimesSetting practiceTimesSetting) {
+        TeacherFreeTimeVo getDetail=baseMapper.getDetail(practiceTimesSetting);
+        List<TeacherSubjectPrice> priceList=baseMapper.getPrice(getDetail.getId());
+        getDetail.setSubjectPrice(priceList);
+        return getDetail;
     }
 }
 

+ 47 - 12
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseHomeworkDetailVo.java

@@ -34,19 +34,19 @@ public class CourseHomeworkDetailVo {
     private CourseScheduleEnum courseType;
 
     @ApiModelProperty("上课日期")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
-    private String classDate;
+    private Date classDate;
 
     @ApiModelProperty("上课时间")
-    @DateTimeFormat(pattern = "HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
-    private String startTime;
+    private Date startTime;
 
     @ApiModelProperty("下课时间")
-    @DateTimeFormat(pattern = "HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
-    private String endTime;
+    private Date endTime;
 
     @ApiModelProperty("课程状态 NOT_START未开始 ING进行中 COMPLETE已完成 CANCEL已取消")
     private CourseScheduleEnum courseStatus;
@@ -80,6 +80,12 @@ public class CourseHomeworkDetailVo {
     @ApiModelProperty("学员头像")
     private String studentAvatar;
 
+    @ApiModelProperty("老师姓名")
+    private String teacherName;
+
+    @ApiModelProperty("老师头像")
+    private String teacherAvatar;
+
     @ApiModelProperty("布置作业,0:未布置,1:已布置")
     private YesOrNoEnum decorateHomework;
 
@@ -89,6 +95,27 @@ public class CourseHomeworkDetailVo {
     @ApiModelProperty("点评作业 0:未点评,1:已点评")
     private YesOrNoEnum reviewHomework;
 
+    @ApiModelProperty("作业布置时间")
+    private Date decorateTime;
+
+
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
+    public String getTeacherAvatar() {
+        return teacherAvatar;
+    }
+
+    public void setTeacherAvatar(String teacherAvatar) {
+        this.teacherAvatar = teacherAvatar;
+    }
+
     public YesOrNoEnum getDecorateHomework() {
         return decorateHomework;
     }
@@ -145,27 +172,27 @@ public class CourseHomeworkDetailVo {
         this.courseType = courseType;
     }
 
-    public String getClassDate() {
+    public Date getClassDate() {
         return classDate;
     }
 
-    public void setClassDate(String classDate) {
+    public void setClassDate(Date classDate) {
         this.classDate = classDate;
     }
 
-    public String getStartTime() {
+    public Date getStartTime() {
         return startTime;
     }
 
-    public void setStartTime(String startTime) {
+    public void setStartTime(Date startTime) {
         this.startTime = startTime;
     }
 
-    public String getEndTime() {
+    public Date getEndTime() {
         return endTime;
     }
 
-    public void setEndTime(String endTime) {
+    public void setEndTime(Date endTime) {
         this.endTime = endTime;
     }
 
@@ -256,4 +283,12 @@ public class CourseHomeworkDetailVo {
     public void setStudentHomeworkId(Long studentHomeworkId) {
         this.studentHomeworkId = studentHomeworkId;
     }
+
+    public Date getDecorateTime() {
+        return decorateTime;
+    }
+
+    public void setDecorateTime(Date decorateTime) {
+        this.decorateTime = decorateTime;
+    }
 }

+ 73 - 13
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseHomeworkVo.java

@@ -1,15 +1,18 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import java.util.Date;
+
 /**
  * @Author: liweifan
  * @Data: 2022-03-30 13:53:51
  */
-@ApiModel(value = "CourseHomeworkVo对象", description = "课程作业表查询视图对象")
+@ApiModel( description = "课程作业表查询视图对象")
 public class CourseHomeworkVo{
 	private static final long serialVersionUID = 1L;
 
@@ -22,19 +25,19 @@ public class CourseHomeworkVo{
 
 
 	@ApiModelProperty("上课日期")
-	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
-	private String classDate;
+	private Date classDate;
 
 	@ApiModelProperty("上课时间")
-	@DateTimeFormat(pattern = "HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
-	private String startTime;
+	private Date startTime;
 
 	@ApiModelProperty("下课时间")
-	@DateTimeFormat(pattern = "HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
-	private String endTime;
+	private Date endTime;
 
 	@ApiModelProperty("声部名称")
 	private String subjectName;
@@ -45,6 +48,55 @@ public class CourseHomeworkVo{
 	@ApiModelProperty("学员头像")
 	private String studentAvatar;
 
+
+	@ApiModelProperty("老师姓名")
+	private String teacherName;
+
+	@ApiModelProperty("老师头像")
+	private String teacherAvatar;
+
+	@ApiModelProperty("旷课 0:否,1:是")
+	private YesOrNoEnum absenteeism;
+
+	@ApiModelProperty("作业布置时间")
+	private Date decorateTime;
+
+	@ApiModelProperty("作业提交时间")
+	private Date submitTime;
+
+
+	public Date getDecorateTime() {
+		return decorateTime;
+	}
+
+	public void setDecorateTime(Date decorateTime) {
+		this.decorateTime = decorateTime;
+	}
+
+	public Date getSubmitTime() {
+		return submitTime;
+	}
+
+	public void setSubmitTime(Date submitTime) {
+		this.submitTime = submitTime;
+	}
+
+	public String getTeacherName() {
+		return teacherName;
+	}
+
+	public void setTeacherName(String teacherName) {
+		this.teacherName = teacherName;
+	}
+
+	public String getTeacherAvatar() {
+		return teacherAvatar;
+	}
+
+	public void setTeacherAvatar(String teacherAvatar) {
+		this.teacherAvatar = teacherAvatar;
+	}
+
 	public Long getCourseId() {
 		return courseId;
 	}
@@ -61,27 +113,27 @@ public class CourseHomeworkVo{
 		this.courseGroupId = courseGroupId;
 	}
 
-	public String getClassDate() {
+	public Date getClassDate() {
 		return classDate;
 	}
 
-	public void setClassDate(String classDate) {
+	public void setClassDate(Date classDate) {
 		this.classDate = classDate;
 	}
 
-	public String getStartTime() {
+	public Date getStartTime() {
 		return startTime;
 	}
 
-	public void setStartTime(String startTime) {
+	public void setStartTime(Date startTime) {
 		this.startTime = startTime;
 	}
 
-	public String getEndTime() {
+	public Date getEndTime() {
 		return endTime;
 	}
 
-	public void setEndTime(String endTime) {
+	public void setEndTime(Date endTime) {
 		this.endTime = endTime;
 	}
 
@@ -108,4 +160,12 @@ public class CourseHomeworkVo{
 	public void setStudentAvatar(String studentAvatar) {
 		this.studentAvatar = studentAvatar;
 	}
+
+	public YesOrNoEnum getAbsenteeism() {
+		return absenteeism;
+	}
+
+	public void setAbsenteeism(YesOrNoEnum absenteeism) {
+		this.absenteeism = absenteeism;
+	}
 }

+ 193 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherFreeTimeVo.java

@@ -0,0 +1,193 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.entity.TeacherSubjectPrice;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author: cy
+ * @Date: 2022/4/15
+ */
+@ApiModel(value = "TeacherFreeTimeVo")
+public class TeacherFreeTimeVo implements Serializable {
+    @ApiModelProperty(value = "主键")
+    private Long id;
+
+    @ApiModelProperty(value = "老师编号")
+    private Long teacherId;
+
+    @ApiModelProperty(value = "课间休息分钟数")
+    private Integer freeMinutes;
+
+    @ApiModelProperty(value = "单课时分钟数")
+    private Integer courseMinutes;
+
+    @ApiModelProperty(value = "是否跳过节假日1是0否")
+    private Boolean skipHolidayFlag;
+
+    @ApiModelProperty(value = "声部金额")
+    private List<TeacherSubjectPrice> subjectPrice;
+
+    @ApiModelProperty(value = "周一")
+    private String monday;
+
+    @ApiModelProperty(value = "周二")
+    private String tuesday;
+
+    @ApiModelProperty(value = "周三")
+    private String wednesday;
+
+    @ApiModelProperty(value = "周四")
+    private String thursday;
+
+    @ApiModelProperty(value = "周五")
+    private String friday;
+
+    @ApiModelProperty(value = "周六")
+    private String saturday;
+
+    @ApiModelProperty(value = "周日")
+    private String sunday;
+
+    @ApiModelProperty(value = "是否默认配置")
+    private Boolean defaultFlag = true;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "修改时间")
+    private Date updateTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Long teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public Integer getFreeMinutes() {
+        return freeMinutes;
+    }
+
+    public void setFreeMinutes(Integer freeMinutes) {
+        this.freeMinutes = freeMinutes;
+    }
+
+    public Integer getCourseMinutes() {
+        return courseMinutes;
+    }
+
+    public void setCourseMinutes(Integer courseMinutes) {
+        this.courseMinutes = courseMinutes;
+    }
+
+    public Boolean getSkipHolidayFlag() {
+        return skipHolidayFlag;
+    }
+
+    public void setSkipHolidayFlag(Boolean skipHolidayFlag) {
+        this.skipHolidayFlag = skipHolidayFlag;
+    }
+
+    public List<TeacherSubjectPrice> getSubjectPrice() {
+        return subjectPrice;
+    }
+
+    public void setSubjectPrice(List<TeacherSubjectPrice> subjectPrice) {
+        this.subjectPrice = subjectPrice;
+    }
+
+    public String getMonday() {
+        return monday;
+    }
+
+    public void setMonday(String monday) {
+        this.monday = monday;
+    }
+
+    public String getTuesday() {
+        return tuesday;
+    }
+
+    public void setTuesday(String tuesday) {
+        this.tuesday = tuesday;
+    }
+
+    public String getWednesday() {
+        return wednesday;
+    }
+
+    public void setWednesday(String wednesday) {
+        this.wednesday = wednesday;
+    }
+
+    public String getThursday() {
+        return thursday;
+    }
+
+    public void setThursday(String thursday) {
+        this.thursday = thursday;
+    }
+
+    public String getFriday() {
+        return friday;
+    }
+
+    public void setFriday(String friday) {
+        this.friday = friday;
+    }
+
+    public String getSaturday() {
+        return saturday;
+    }
+
+    public void setSaturday(String saturday) {
+        this.saturday = saturday;
+    }
+
+    public String getSunday() {
+        return sunday;
+    }
+
+    public void setSunday(String sunday) {
+        this.sunday = sunday;
+    }
+
+    public Boolean getDefaultFlag() {
+        return defaultFlag;
+    }
+
+    public void setDefaultFlag(Boolean defaultFlag) {
+        this.defaultFlag = defaultFlag;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+}
+

+ 167 - 8
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseHomeworkMapper.xml

@@ -37,15 +37,74 @@
         where t.id_ = #{id}
     </select>
 
+    <select id="selectAdminPage" resultType="com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo">
+        select
+        cs.id_ AS courseId,
+        cs.course_group_id_ AS courseGroupId,
+        cs.class_date_ AS classDate,
+        cs.start_time_ AS startTime,
+        cs.end_time_ AS endTime,
+        ch.create_time_ as decorateTime,
+        su2.username_ as studentName,
+        su2.avatar_ as studentAvatar,
+        su.username_ as teacherName,
+        su.avatar_ as teacherAvatar,
+        ch.create_time_ as decorateTime
+        from  course_homework ch
+        left join course_schedule cs on ch.course_schedule_id_ = cs.id_
+        left join course_schedule_student_payment cssp on cssp.course_id_ = cs.id_
+        left join sys_user su on cs.teacher_id_ = su.id_
+        left join sys_user su2 on cssp.user_id_ = su2.id_
+        <where>
+            <if test="param.courseStatus != null">
+                and cs.type_ = #{param.courseType}
+            </if>
+            <if test="param.courseType != null">
+                and cs.status_ = #{param.courseStatus}
+            </if>
+            <if test="param.teacherId != null">
+                and cs.teacher_id_ = #{param.teacherId}
+            </if>
+            <if test="param.studentId != null">
+                and cssp.user_id_ = #{param.studentId}
+            </if>
+            <if test="param.courseScheduleId != null ">
+                and cs.id_ = #{param.courseScheduleId}
+            </if>
+            <if test="param.date != null and param.date != ''">
+                and date_format(cs.class_date_,'%Y-%m') = #{param.date}
+            </if>
+            <if test="param.startTime != null">
+                and #{param.startTime} &lt; ch.create_time_
+            </if>
+            <if test="param.endTime != null">
+                and #{param.endTime} &gt; ch.create_time_
+            </if>
+            <if test="param.search != null and param.search != ''">
+                and (su.id_ like concat('%',#{param.search},'%')
+                    or su.username_ like concat('%',#{param.search},'%')
+                    or su.phone_ like concat('%',#{param.search},'%')
+                    or su2.id_ like concat('%',#{param.search},'%')
+                    or su2.username_ like concat('%',#{param.search},'%')
+                    or su2.phone_ like concat('%',#{param.search},'%') )
+            </if>
+        </where>
+        order by cs.start_time_ desc
+    </select>
+
     <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo">
         select
         cs.id_ AS courseId,
-        cs.course_group_id_ AS courseGoupId,
+        cs.course_group_id_ AS courseGroupId,
         cs.class_date_ AS classDate,
         cs.start_time_ AS startTime,
-        cs.end_time_ AS endTime
+        cs.end_time_ AS endTime,
+        ch.create_time_ as decorateTime,
+        sch.submit_time_ as submitTime
         from course_schedule cs
         left join course_homework ch on ch.course_schedule_id_ = cs.id_
+        left join student_course_homework sch on ch.id_ = sch.course_homework_id_
+        left join course_schedule_student_payment cssp on cssp.course_id_ = cs.id_
         <where>
             <if test="param.decorate != null">
                 <if test="param.decorate.code == 0">
@@ -55,6 +114,14 @@
                     and ch.id_ is not null
                 </if>
             </if>
+            <if test="param.submit != null">
+                <if test="param.submit.code == 0">
+                    and sch.id_ is null
+                </if>
+                <if test="param.submit.code == 1">
+                    and sch.id_ is not null
+                </if>
+            </if>
             <if test="param.courseStatus != null">
                 and cs.type_ = #{param.courseType}
             </if>
@@ -64,10 +131,23 @@
             <if test="param.teacherId != null">
                 and cs.teacher_id_ = #{param.teacherId}
             </if>
+            <if test="param.studentId != null">
+                and cssp.user_id_ = #{param.studentId}
+            </if>
             <if test="param.courseScheduleId != null ">
                 and cs.id_ = #{param.courseScheduleId}
             </if>
+            <if test="param.date != null and param.date != ''">
+                and date_format(cs.class_date_,'%Y-%m') = #{param.date}
+            </if>
+            <if test="param.startTime != null">
+                and #{param.startTime} &lt; ch.create_time_
+            </if>
+            <if test="param.endTime != null">
+                and #{param.endTime} &gt; ch.create_time_
+            </if>
         </where>
+        order by cs.start_time_ desc
 	</select>
 
 	<select id="selectCourseHomeworkDetailByCourseId"
@@ -77,6 +157,7 @@
         ,ch.title_ as title
         ,ch.content_ as content
         ,ch.attachments_ as attachments
+        ,ch.create_time_ as decorateTime
         ,sch.attachments_ as studentAttachments
         ,sch.teacher_replied_ as teacherReplied
         ,sch.submit_time_ as submitTime
@@ -103,18 +184,28 @@
 	<select id="selectPaymentStudentInfo" resultType="com.yonge.cooleshow.biz.dal.vo.CourseHomeworkDetailVo">
         select su.username_ as studentName
         ,su.avatar_ as stduentAvatar
-        ,s.name_ as subjectName
+        from course_schedule cs
+        left join course_schedule_student_payment cssp on cs.id_ = cssp.course_id_
+        left join sys_user su on su.id_ = cssp.user_id_
+        <where>
+            <if test="courseScheduleId != null">
+                and cs.id_ = #{courseScheduleId}
+            </if>
+        </where>
+    </select>
+
+
+    <select id="selectSubjectAndTeacherInfo" resultType="com.yonge.cooleshow.biz.dal.vo.CourseHomeworkDetailVo">
+        select s.name_ as subjectName
+        ,su.username_ as teacherName
+        ,su.avatar_ as teacherAvatar
         from course_group cg
         left join subject s on cg.subject_id_ = s.id_
-        left join course_schedule_student_payment cssp on cg.id_ = cssp.course_group_id_
-        left join sys_user su on su.id_ = cssp.user_id_
+        left join sys_user su on cg.teacher_id_ = su.id_
         <where>
             <if test="courseGroupId != null">
                 and cg.id_ = #{courseGroupId}
             </if>
-            <if test="courseScheduleId != null">
-                and cssp.course_id_ = #{courseScheduleId}
-            </if>
         </where>
     </select>
 
@@ -142,4 +233,72 @@
             </foreach>
         </if>
     </select>
+
+	<select id="selectSubjectInfoList" resultType="com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo">
+        select
+        s.name_ as subjectName
+        from course_schedule cs
+        left join course_group cg on cs.course_group_id_ = cg.id_
+        left join subject s on s.id_ = cg.subject_id_
+        <where>
+            <if test="records != null and records.size() != 0">
+                and cs.id_ in
+                <foreach collection="records" separator="," close=")" open="(" item="item" >
+                    #{item.courseId}
+                </foreach>
+            </if>
+        </where>
+        <if test="records != null and records.size() != 0">
+            order by field(cs.id_,
+            <foreach collection="records" separator="," close=")" open="" item="item" >
+                #{item.courseId}
+            </foreach>
+        </if>
+    </select>
+
+	<select id="selectTeacherInfo" resultType="com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo">
+        select
+        su.username_ as teacherName
+        ,su.avatar_ as teacherAvatar
+        ,if(sa.id_ is null,1,0) as absenteeism
+        from course_schedule cs
+        left join sys_user su on cs.teacher_id_ = su.id_
+        left join student_attendance sa on sa.course_schedule_id_ = cs.id_
+        <where>
+            <if test="records != null and records.size() != 0">
+                and cs.id_ in
+                <foreach collection="records" separator="," close=")" open="(" item="item" >
+                    #{item.courseId}
+                </foreach>
+            </if>
+        </where>
+        <if test="records != null and records.size() != 0">
+            order by field(cs.id_,
+            <foreach collection="records" separator="," close=")" open="" item="item" >
+                #{item.courseId}
+            </foreach>
+        </if>
+    </select>
+
+	<select id="selectSubmitTime" resultType="com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo">
+        select
+        cs.id_ as courseId,
+        sch.submit_time_ as submitTime
+        from course_schedule cs
+        left join  student_course_homework sch on sch.course_schedule_id_ = cs.id_
+        <where>
+            <if test="courseIdList != null and courseIdList.size() != 0">
+                and cs.id_ in
+                <foreach collection="courseIdList" separator="," close=")" open="(" item="item">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+        <if test="courseIdList != null and courseIdList.size() != 0">
+            order by field(cs.id_,
+            <foreach collection="courseIdList" separator="," close=")" open="" item="item" >
+                #{item}
+            </foreach>
+        </if>
+    </select>
 </mapper>

+ 25 - 4
cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicAlbumMapper.xml

@@ -74,12 +74,8 @@
         select <include refid="Base_Column_List"/>
         ,(select group_concat(mt.name_) from music_tag mt
         where find_in_set(mt.id_,t.album_tag_) and mt.del_flag_ = 0) as musicTagNames
-        , t1.num as musicSheetCount
-        ,t2.num as albumFavoriteCount
         from music_album t
         left join album_favorite af2 on af2.album_id_ = t.id_
-        left join (select count(1) as num,amr.album_id_ from album_music_relate amr group by amr.album_id_) t1 on t1.album_id_ = t.id_
-        left join (select count(1) as num,af.album_id_ from album_favorite af group by af.album_id_) t2 on t2.album_id_ = t.id_
         <where>
             <if test="query.studentId != null">
                 and af2.user_id_ = #{query.studentId}
@@ -98,5 +94,30 @@
                 and t.album_status_ = #{query.albumStatus}
             </if>
         </where>
+        order by  af2.favorite_time_ desc
+    </select>
+
+    <select id="selectFavoriteNumAndMusicNum" resultType="com.yonge.cooleshow.biz.dal.vo.MusicAlbumVo">
+        select
+        t1.num as musicSheetCount
+        ,t2.num as albumFavoriteCount
+        from music_album t
+        left join (select count(1) as num,amr.album_id_ from album_music_relate amr group by amr.album_id_) t1 on t1.album_id_ = t.id_
+        left join (select count(1) as num,af.album_id_ from album_favorite af group by af.album_id_) t2 on t2.album_id_ = t.id_
+        <where>
+            <if test="records != null and records.size() != 0">
+                and t.id_ in
+                <foreach collection="records" item="item" open="(" close=")" separator=",">
+                    #{item.id}
+                </foreach>
+            </if>
+        </where>
+        order by
+        <if test="records != null and records.size() != 0">
+            field(t.id_,
+            <foreach collection="records" item="item" open="" close=")" separator=",">
+                #{item.id}
+            </foreach>
+        </if>
     </select>
 </mapper>

+ 5 - 4
cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml

@@ -138,18 +138,19 @@
             <if test="param.state != null">
                 and t.state_ = #{param.state}
             </if>
+            <if test="param.delFlag != null">
+                and t.del_flag_ = #{param.delFlag}
+            </if>
             <if test="param.id != null">
                 <if test="param.type == 2">
                     and amr.album_id_ = #{param.id}
                     order by amr.create_time_
                 </if>
                 <if test="param.type == 1">
-                    and (amr.album_id_ &lt;&gt;  #{param.id} or amr.album_id_ is null)
+                    and not exists(select amr2.music_sheet_id_  from album_music_relate amr2
+                        where amr2.album_id_ = #{param.id} and t.id_ = amr2.music_sheet_id_)
                 </if>
             </if>
-            <if test="param.delFlag != null">
-                and t.del_flag_ = #{param.delFlag}
-            </if>
         </where>
     </select>
 

+ 18 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherFreeTimeMapper.xml

@@ -37,14 +37,31 @@
             #{entity.friday}, #{entity.saturday}, #{entity.sunday}, #{entity.defaultFlag},NOW(),NOW())
         </foreach>
     </insert>
+    <insert id="insertPrice" parameterType="java.util.List">
+        INSERT INTO teacher_subject_price
+            (teacher_free_time_id,teacher_id_,free_minutes_,course_minutes_,subject_id_,subject_name_,subject_price_)VALUES
+        <foreach collection="list" item="item" index="index" separator=",">
+            (#{item.teacherFreeTimeId},#{item.teacherId},#{item.freeMinutes},#{item.courseMinutes},#{item.subjectId},#{item.subjectName},#{item.subjectPrice})
+        </foreach>
+    </insert>
     <update id="updateDefaultFlag">
         UPDATE teacher_free_time SET default_flag_ = #{defaultFlag} WHERE teacher_id_ = #{teacherId}
     </update>
+    <delete id="deleteSubjectPrice" parameterType="java.lang.Long">
+        DELETE FROM teacher_subject_price WHERE teacher_free_time_id = #{id}
+    </delete>
     <select id="findOne" resultMap="BaseResultMap">
         SELECT <include refid="Base_Column_List"/>
         FROM teacher_free_time WHERE teacher_id_ = #{teacherId}
         AND free_minutes_ = #{freeMinutes}
         AND course_minutes_ = #{courseMinutes} LIMIT 1
     </select>
-
+    <select id="getDetail" resultType="com.yonge.cooleshow.biz.dal.vo.TeacherFreeTimeVo"
+            parameterType="com.yonge.cooleshow.biz.dal.dto.PracticeTimesSetting">
+        SELECT * FROM teacher_free_time WHERE teacher_id_=#{userId} AND free_minutes_=#{freeMinutes} AND course_minutes_=#{courseMinutes}
+    </select>
+    <select id="getPrice" resultType="com.yonge.cooleshow.biz.dal.entity.TeacherSubjectPrice"
+            parameterType="java.lang.Long">
+        SELECT * FROM teacher_subject_price WHERE teacher_free_time_id = #{id}
+    </select>
 </mapper>

+ 96 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/CourseHomeworkController.java

@@ -0,0 +1,96 @@
+package com.yonge.cooleshow.student.controller;
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.CourseHomeworkReviewDto;
+import com.yonge.cooleshow.biz.dal.dto.CourseHomeworkSaveDto;
+import com.yonge.cooleshow.biz.dal.dto.CourseHomeworkSubmitDto;
+import com.yonge.cooleshow.biz.dal.dto.search.HomeworkSearch;
+import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
+import com.yonge.cooleshow.biz.dal.service.CourseHomeworkService;
+import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
+import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.vo.CountVo;
+import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo;
+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.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ * Description 老师课后作业相关接口
+ *
+ * @author liujunchi
+ * @date 2022-04-13
+ */
+@Api(tags = "学生课后作业相关接口")
+@RestController
+@RequestMapping("/homework")
+public class CourseHomeworkController extends BaseController {
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @Autowired
+    private CourseScheduleService courseScheduleService;
+
+    @Autowired
+    private CourseHomeworkService courseHomeworkService;
+
+
+    @ApiOperation(value = "首页-我的课程-课程详情(陪练课)-课后作业信息详情",notes = "传入课程编号ID")
+    @GetMapping(value = "/detail/{courseId}")
+    public HttpResponseResult<CourseHomeworkDetailVo> detail(@ApiParam(value = "课程编号ID", required = true)
+                                                                 @PathVariable("courseId") Long courseId) {
+
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        HttpResponseResult info = checkCourseSchedule(courseId,sysUser);
+        if (info != null) return info;
+        return succeed(courseHomeworkService.getCourseHomeworkDetailByCourseId(courseId));
+    }
+
+    private HttpResponseResult checkCourseSchedule(Long courseId,SysUser sysUser) {
+        if (sysUser == null  || sysUser.getId() == null) {
+            return failed("用户信息获取失败");
+        }
+        if (!courseScheduleService.checkStudentCourseSchedule(sysUser.getId(), courseId)) {
+            return failed("学生只能看自己购买的课程详情");
+        }
+        return null;
+    }
+
+
+    @ApiOperation(value = "陪练课-作业提交", httpMethod = "POST", consumes = "application/json", produces = "application/json")
+    @PostMapping(value = "/submit", consumes = "application/json", produces = "application/json")
+    public HttpResponseResult<Boolean> reviewCourseHomework(@Valid @RequestBody CourseHomeworkSubmitDto submitDto) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        HttpResponseResult info = checkCourseSchedule(submitDto.getCourseScheduleId(),sysUser);
+        if (info != null) return info;
+        submitDto.setStudentId(sysUser.getId());
+        return succeed(courseHomeworkService.submitCourseHomework(submitDto));
+    }
+
+    @ApiOperation(value = "课后作业-列表", httpMethod = "POST", consumes = "application/json", produces = "application/json")
+    @PostMapping(value = "/list", consumes = "application/json", produces = "application/json")
+    public HttpResponseResult<PageInfo<CourseHomeworkVo>> list(@Valid @RequestBody HomeworkSearch query) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (query.getSubmit() == null) {
+            return failed("提交状态不能为空");
+        }
+        query.setDecorate(YesOrNoEnum.YES);
+        query.setStudentId(sysUser.getId());
+        query.setCourseStatus(CourseScheduleEnum.COMPLETE);
+        query.setCourseType(CourseScheduleEnum.PRACTICE);
+        return succeed(PageUtil.pageInfo(courseHomeworkService.selectPage(PageUtil.getPage(query),query)));
+    }
+
+
+}

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

@@ -78,7 +78,7 @@ public class CourseHomeworkController extends BaseController {
         if (sysUser == null  || sysUser.getId() == null) {
             return failed("用户信息获取失败");
         }
-        if (!courseScheduleService.checkCourseSchedule(sysUser.getId(), courseId)) {
+        if (!courseScheduleService.checkTeacherCourseSchedule(sysUser.getId(), courseId)) {
             return failed("老师只能看自己的课程详情");
         }
         return null;

+ 4 - 7
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherFreeTimeController.java

@@ -1,12 +1,11 @@
 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.dto.PracticeTimesSetting;
-import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.entity.TeacherFreeTime;
 import com.yonge.cooleshow.biz.dal.service.TeacherFreeTimeService;
+import com.yonge.cooleshow.biz.dal.vo.TeacherFreeTimeVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
@@ -19,8 +18,6 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
-import java.util.List;
-import java.util.Map;
 
 /**
  * 老师可排课时间表(TeacherFreeTime)表控制层
@@ -54,13 +51,13 @@ public class TeacherFreeTimeController extends BaseController {
 
     @ApiOperation(value = "获取老师陪练课设置")
     @PostMapping("/getDetail")
-    public HttpResponseResult<TeacherFreeTime> detDetail(@Valid @RequestBody PracticeTimesSetting practiceTimesSetting){
+    public HttpResponseResult<TeacherFreeTimeVo> getDetail(@Valid @RequestBody PracticeTimesSetting practiceTimesSetting){
         SysUser user = sysUserFeignService.queryUserInfo();
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        return succeed(teacherFreeTimeService.getDao().
-                findOne(user.getId(),practiceTimesSetting.getCourseMinutes(),practiceTimesSetting.getFreeMinutes()));
+        practiceTimesSetting.setUserId(user.getId());
+        return succeed(teacherFreeTimeService.getDetail(practiceTimesSetting));
     }
 }