Browse Source

Merge remote-tracking branch 'origin/master'

weifanli 3 years ago
parent
commit
4dacbf3054
30 changed files with 908 additions and 34 deletions
  1. 13 20
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicAlbumController.java
  2. 1 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java
  3. 105 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/SysManualController.java
  4. 14 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java
  5. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetDao.java
  6. 27 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SysManualDao.java
  7. 37 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/MusicAlbumSheetDto.java
  8. 61 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/HomeworkSearch.java
  9. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicSheetSearch.java
  10. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicSheet.java
  11. 160 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/SysManual.java
  12. 40 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/SourceTypeEnum.java
  13. 35 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/SysManualQueryInfo.java
  14. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java
  15. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicAlbumService.java
  16. 9 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java
  17. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicTagService.java
  18. 24 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysManualService.java
  19. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  20. 9 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicAlbumServiceImpl.java
  21. 12 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  22. 16 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicTagServiceImpl.java
  23. 76 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysManualServiceImpl.java
  24. 24 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/AlbumDetailVo.java
  25. 22 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicSheetDetailVo.java
  26. 21 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  27. 16 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml
  28. 70 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/SysManualMapper.xml
  29. 49 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/CourseHomeworkController.java
  30. 12 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/MusicSheetController.java

+ 13 - 20
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicAlbumController.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.admin.controller;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.MusicAlbumSheetDto;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumDetailSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumSearch;
 import com.yonge.cooleshow.biz.dal.entity.MusicAlbum;
@@ -139,20 +140,16 @@ public class MusicAlbumController extends BaseController {
     /**
      * 专辑详情删除曲目列表
      */
-    @PostMapping("/detail/delMusicSheet")
-    @ApiOperation(value = "专辑详情删除曲目列表")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "albumId",value = "专辑编号ID", required = true, dataType = "Integer"),
-            @ApiImplicitParam(name = "musicSheetIds",value = "删除曲目编号,多个逗号隔开", required = true, dataType = "String")
-    })
-    public HttpResponseResult<Boolean> detailDelMusicSheet(Long albumId, String musicSheetIds) {
-        if (StringUtil.isEmpty(albumId)) {
+    @PostMapping(value = "/detail/delMusicSheet" ,consumes="application/json", produces="application/json")
+    @ApiOperation(value = "专辑详情删除曲目列表",  httpMethod="POST", consumes="application/json", produces="application/json")
+    public HttpResponseResult<Boolean> detailDelMusicSheet(@Valid @RequestBody MusicAlbumSheetDto query) {
+        if (StringUtil.isEmpty(query.getAlbumId())) {
             return failed("专辑编号ID不能为空");
         }
-        if (StringUtil.isEmpty(musicSheetIds)) {
+        if (StringUtil.isEmpty(query.getMusicSheetIds())) {
             return failed("曲目编号不能为空");
         }
-        return status(musicAlbumService.delMusicSheet(albumId,musicSheetIds));
+        return status(musicAlbumService.delMusicSheet(query.getAlbumId(),query.getMusicSheetIds()));
     }
 
 
@@ -160,24 +157,20 @@ public class MusicAlbumController extends BaseController {
     /**
      * 专辑详情添加曲目列表
      */
-    @PostMapping("/detail/addMusicSheet")
-    @ApiOperation(value = "专辑详情添加曲目列表")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "albumId",value = "专辑编号ID", required = true, dataType = "Integer"),
-            @ApiImplicitParam(name = "musicSheetIds",value = "添加曲目编号,多个逗号隔开", required = true, dataType = "String")
-    })
-    public HttpResponseResult<Boolean> detailAddMusicSheet(Long albumId, String musicSheetIds) {
+    @PostMapping(value = "/detail/addMusicSheet",consumes="application/json", produces="application/json")
+    @ApiOperation(value = "专辑详情添加曲目列表",  httpMethod="POST", consumes="application/json", produces="application/json")
+    public HttpResponseResult<Boolean> detailAddMusicSheet(@Valid @RequestBody MusicAlbumSheetDto query) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {
             return failed("用户信息获取失败");
         }
-        if (StringUtil.isEmpty(albumId)) {
+        if (StringUtil.isEmpty(query.getAlbumId())) {
             return failed("专辑编号ID不能为空");
         }
-        if (StringUtil.isEmpty(musicSheetIds)) {
+        if (StringUtil.isEmpty(query.getMusicSheetIds())) {
             return failed("曲目编号不能为空");
         }
-        return status(musicAlbumService.addMusicSheet(albumId,musicSheetIds,sysUser.getId()));
+        return status(musicAlbumService.addMusicSheet(query.getAlbumId(),query.getMusicSheetIds(),sysUser.getId()));
     }
 
 }

+ 1 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java

@@ -95,6 +95,7 @@ public class MusicSheetController extends BaseController {
         musicSheetDto.setUserId(sysUser.getId());
         musicSheetDto.setAuditStatus(AuthStatusEnum.PASS);
         musicSheetDto.setDelFlag(false);
+        musicSheetDto.setSourceType(SourceTypeEnum.PLATFORM);
         List<MusicSheetAccompaniment> list;
         if (!AudioTypeEnum.MIDI.getCode().equals(musicSheetDto.getAudioType().getCode())){
             list = musicSheetDto.getBackground();

+ 105 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/SysManualController.java

@@ -0,0 +1,105 @@
+package com.yonge.cooleshow.admin.controller;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.entity.SysManual;
+import com.yonge.cooleshow.biz.dal.queryInfo.SysManualQueryInfo;
+import com.yonge.cooleshow.biz.dal.service.SysManualService;
+import com.yonge.cooleshow.common.controller.BaseController;
+
+/**
+ * (SysManual)表控制层
+ *
+ * @author makejava
+ * @since 2021-12-20 14:23:36
+ */
+@RestController
+@Api(tags = "帮助手册")
+@RequestMapping("/sysManual")
+public class SysManualController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Autowired
+    private SysManualService sysManualService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @ApiOperation(value = "查询操作手册")
+    @RequestMapping("/listMenuIds")
+    public Object listMenuIds() {
+        return succeed(sysManualService.listMenuIds());
+    }
+
+    @ApiOperation(value = "查询操作手册")
+    @RequestMapping("/list")
+    public Object list(SysManualQueryInfo queryInfo) {
+        return succeed(sysManualService.query(queryInfo));
+    }
+
+    @ApiOperation(value = "新增帮助手册")
+    @PostMapping("/add")
+    public Object add(@RequestBody SysManual sysManual) throws Exception {
+        this.check(sysManual);
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        return succeed(sysManualService.add(sysManual, sysUser.getId()));
+    }
+
+    @ApiOperation(value = "修改帮助手册")
+    @PostMapping("/update")
+    public Object update(@RequestBody SysManual sysManual) throws Exception {
+        this.check(sysManual);
+        if (sysManual.getId() == null) {
+            throw new Exception("更新必须有id");
+        }
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        return succeed(sysManualService.update(sysManual, sysUser.getId()));
+    }
+
+    private void check(SysManual sysManual) throws Exception {
+        if (sysManual.getMenuId() == null) {
+            throw new Exception("菜单Id是必须");
+        }
+        if (sysManual.getName() == null) {
+            throw new Exception("菜单名是必填");
+        }
+        if (sysManual.getName().length() > 256) {
+            throw new Exception("菜单名不能超过256");
+        }
+        if (sysManual.getOpFlow() == null) {
+            throw new Exception("操作流程必填");
+        }
+        if (sysManual.getOpFlow().length() > 8000) {
+            throw new Exception("操作流程不能超过8000字节");
+        }
+        if (sysManual.getFunRule() == null) {
+            throw new Exception("功能规则必填");
+        }
+        if (sysManual.getFunRule().length() > 8000) {
+            throw new Exception("功能规则不能超过8000字节");
+        }
+    }
+
+    @ApiOperation(value = "删除帮助手册")
+    @PostMapping("/remove")
+    public Object remove(@RequestBody SysManual sysManual) throws Exception {
+        sysManualService.removeById(sysManual.getId());
+        return succeed();
+    }
+
+}

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

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.dao;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yonge.cooleshow.biz.dal.dto.search.HomeworkSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.VideoLessonGroupSearch;
 import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
@@ -43,6 +44,7 @@ public interface CourseScheduleDao extends BaseMapper<CourseSchedule> {
 
     /**
      * 根据学生id查询课程
+     *
      * @param param 传入参数
      *              <p> - studentId 学生id
      *              <p> - status 课程状态 NOT_START未开始 ING进行中 COMPLETE已完成
@@ -69,6 +71,18 @@ public interface CourseScheduleDao extends BaseMapper<CourseSchedule> {
     //根据老师id查询购课学员
     List<MyCourseVo> queryTeacherPracticeCourse(IPage page, @Param("param") MyCourseSearch query);
 
+
+
+    /**
+     * 老师未布置的课程作业数量
+     * <p>
+     * 陪练课 课程状态为完成,有学生考勤记录 没有学生课程记录
+     *
+     * @param param 查询条件
+     * @return number
+     */
+    Integer countTeacherNoDecorateHomework(@Param("param") HomeworkSearch param);
+
     //查询老师约课日历
     List<String> queryCourseSchedule(MyCourseSearch search);
 

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

@@ -34,7 +34,7 @@ public interface MusicSheetDao extends BaseMapper<MusicSheet> {
      * @param query 查询条件
      * @return
      */
-    List<MusicSheet> selectAlbumDetailPage(@Param("page") IPage<MusicSheet> page, @Param("param") MusicAlbumDetailSearch query);
+    List<MusicSheetVo> selectAlbumDetailPage(@Param("page") IPage<MusicSheetVo> page, @Param("param") MusicAlbumDetailSearch query);
 
     /**
      * 获取曲目详情

+ 27 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SysManualDao.java

@@ -0,0 +1,27 @@
+package com.yonge.cooleshow.biz.dal.dao;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.ibatis.annotations.Param;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yonge.cooleshow.biz.dal.entity.SysManual;
+
+/**
+ * (SysManual)表数据库访问层
+ *
+ * @author makejava
+ * @since 2021-12-20 17:22:42
+ */
+public interface SysManualDao extends BaseMapper<SysManual> {
+
+    int insertBatch(@Param("entities") List<SysManual> entities);
+
+    int findRecordCount(Map<String, Object> params);
+
+    List<SysManual> queryRecord(Map<String, Object> params);
+
+    List<String> listMenuIds();
+}
+

+ 37 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/MusicAlbumSheetDto.java

@@ -0,0 +1,37 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Description 专辑新增或删除曲目
+ *
+ * @author liujunchi
+ * @date 2022-04-14
+ */
+@ApiModel("专辑新增或删除曲目")
+public class MusicAlbumSheetDto {
+
+    @ApiModelProperty("专辑id")
+    private Long albumId;
+
+    @ApiModelProperty("曲目id,多个逗号隔开")
+    private String musicSheetIds;
+
+
+    public Long getAlbumId() {
+        return albumId;
+    }
+
+    public void setAlbumId(Long albumId) {
+        this.albumId = albumId;
+    }
+
+    public String getMusicSheetIds() {
+        return musicSheetIds;
+    }
+
+    public void setMusicSheetIds(String musicSheetIds) {
+        this.musicSheetIds = musicSheetIds;
+    }
+}

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

@@ -0,0 +1,61 @@
+package com.yonge.cooleshow.biz.dal.dto.search;
+
+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;
+
+/**
+ * Description 课后作业查询条件
+ *
+ * @author liujunchi
+ * @date 2022-04-13
+ */
+@ApiModel("课后作业查询条件")
+public class HomeworkSearch extends QueryInfo {
+
+    @ApiModelProperty("老师id")
+    private Long teacherId;
+
+    @ApiModelProperty("课程类型: PRACTICE 陪练课; LIVE 直播课")
+    private CourseScheduleEnum courseType;
+
+    @ApiModelProperty("课程状态: NOT_START:未开始; ING:进行中; COMPLETE:已完成; CANCEL:已取消")
+    private CourseScheduleEnum courseStatus;
+
+    @ApiModelProperty("布置作业 0:否,1:是")
+    private YesOrNoEnum decorate;
+
+    public Long getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Long teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public CourseScheduleEnum getCourseType() {
+        return courseType;
+    }
+
+    public void setCourseType(CourseScheduleEnum courseType) {
+        this.courseType = courseType;
+    }
+
+    public CourseScheduleEnum getCourseStatus() {
+        return courseStatus;
+    }
+
+    public void setCourseStatus(CourseScheduleEnum courseStatus) {
+        this.courseStatus = courseStatus;
+    }
+
+    public YesOrNoEnum getDecorate() {
+        return decorate;
+    }
+
+    public void setDecorate(YesOrNoEnum decorate) {
+        this.decorate = decorate;
+    }
+}

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

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.dto.search;
 
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.cooleshow.common.page.QueryInfo;
 import com.yonge.toolset.utils.string.StringUtil;
@@ -34,6 +35,9 @@ public class MusicSheetSearch  extends QueryInfo{
     @ApiModelProperty(hidden = true)
     private List<Long> subjectIdList;
 
+    @ApiModelProperty(value = "曲目来源类型 TEACHER 老师 PLATFORM 平台")
+    private SourceTypeEnum sourceType;
+
     @ApiModelProperty("曲目状态(0:停用,1:启用))")
     private YesOrNoEnum state;
 
@@ -123,4 +127,12 @@ public class MusicSheetSearch  extends QueryInfo{
     public void setDelFlag(Boolean delFlag) {
         this.delFlag = delFlag;
     }
+
+    public SourceTypeEnum getSourceType() {
+        return sourceType;
+    }
+
+    public void setSourceType(SourceTypeEnum sourceType) {
+        this.sourceType = sourceType;
+    }
 }

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

@@ -37,6 +37,11 @@ public class MusicSheet implements Serializable {
     @ApiModelProperty(value = "曲谱来源(平台用户ID或者是老师ID)")
     private Long userId;  //曲谱来源(平台用户ID或者是老师ID)
 
+
+	@TableField("source_type_")
+	@ApiModelProperty(value = "曲目来源类型 TEACHER 老师 PLATFORM 平台")
+	private SourceTypeEnum sourceType;
+
     @NotBlank(message = "作曲人不能为空!")
     @Size(max = 32, message = "作曲人长度不能超过32位!")
     @TableField("composer_")
@@ -357,4 +362,12 @@ public class MusicSheet implements Serializable {
 	public void setSubmitAuditTime(Date submitAuditTime) {
 		this.submitAuditTime = submitAuditTime;
 	}
+
+	public SourceTypeEnum getSourceType() {
+		return sourceType;
+	}
+
+	public void setSourceType(SourceTypeEnum sourceType) {
+		this.sourceType = sourceType;
+	}
 }

+ 160 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/SysManual.java

@@ -0,0 +1,160 @@
+package com.yonge.cooleshow.biz.dal.entity;
+
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.io.Serializable;
+
+/**
+ * (SysManual)表实体类
+ *
+ * @author makejava
+ * @since 2021-12-20 13:46:08
+ */
+@ApiModel(value = "sys_manual-${tableInfo.comment}")
+public class SysManual implements Serializable {
+    @TableId(value = "id_", type = IdType.AUTO)
+    @ApiModelProperty(value = "${column.comment}")
+    private Integer id;
+
+    @TableField("menu_id_")
+    @ApiModelProperty(value = "菜单Id")
+    private Integer menuId;
+
+    @TableField("name_")
+    @ApiModelProperty(value = "手册名称")
+    private String name;
+
+    @TableField("op_flow_")
+    @ApiModelProperty(value = "操作流程")
+    private String opFlow;
+
+    @TableField("fun_rule_")
+    @ApiModelProperty(value = "功能规则")
+    private String funRule;
+
+    @TableField("video_url_")
+    @ApiModelProperty(value = "操作视频")
+    private String videoUrl;
+
+    @TableField("create_time_")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @TableField("update_time_")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+    @TableField("operator_id_")
+    @ApiModelProperty(value = "操作人")
+    private Long operatorId;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "操作人名称")
+    private String operatorName;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "菜单名")
+    private String menuName;
+
+    // -------------------------------------------------------------------------
+
+    public String getOperatorName() {
+        return operatorName;
+    }
+
+    public void setOperatorName(String operatorName) {
+        this.operatorName = operatorName;
+    }
+
+    public String getMenuName() {
+        return menuName;
+    }
+
+    public void setMenuName(String menuName) {
+        this.menuName = menuName;
+    }
+
+    private static final long serialVersionUID = 1L;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getMenuId() {
+        return menuId;
+    }
+
+    public void setMenuId(Integer menuId) {
+        this.menuId = menuId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getOpFlow() {
+        return opFlow;
+    }
+
+    public void setOpFlow(String opFlow) {
+        this.opFlow = opFlow;
+    }
+
+    public String getFunRule() {
+        return funRule;
+    }
+
+    public void setFunRule(String funRule) {
+        this.funRule = funRule;
+    }
+
+    public String getVideoUrl() {
+        return videoUrl;
+    }
+
+    public void setVideoUrl(String videoUrl) {
+        this.videoUrl = videoUrl;
+    }
+
+    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;
+    }
+
+    public Long getOperatorId() {
+        return operatorId;
+    }
+
+    public void setOperatorId(Long operatorId) {
+        this.operatorId = operatorId;
+    }
+
+
+}
+

+ 40 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/SourceTypeEnum.java

@@ -0,0 +1,40 @@
+package com.yonge.cooleshow.biz.dal.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.cooleshow.common.enums.BaseEnum;
+
+/**
+ * Description 数据类型  TEACHER 老师 PLATFORM 平台
+ *
+ * @author liujunchi
+ * @date 2022-04-13
+ */
+public enum SourceTypeEnum  implements BaseEnum<String,AuditStatusEnum> {
+
+
+
+    TEACHER("TEACHER","TEACHER"),
+    PLATFORM("PLATFORM","PLATFORM");
+
+    @EnumValue
+    private String code;
+    private String msg;
+
+    SourceTypeEnum(String code,String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+}

+ 35 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/SysManualQueryInfo.java

@@ -0,0 +1,35 @@
+package com.yonge.cooleshow.biz.dal.queryInfo;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import com.yonge.cooleshow.common.page.QueryInfo;
+
+/**
+ * Description
+ *
+ * @author: feng-ji
+ * @date: 2021-12-20
+ */
+public class SysManualQueryInfo  extends QueryInfo {
+
+    private Integer id;
+
+    @ApiModelProperty(value = "按菜单查询")
+    private Integer menuId;
+
+    public Integer getMenuId() {
+        return menuId;
+    }
+
+    public void setMenuId(Integer menuId) {
+        this.menuId = menuId;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+}

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

@@ -3,6 +3,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.dao.CourseScheduleDao;
+import com.yonge.cooleshow.biz.dal.dto.search.HomeworkSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch;
 import com.yonge.cooleshow.biz.dal.entity.CourseCalendarEntity;
 import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
@@ -134,8 +135,18 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
 
     IPage<MyCourseVo> queryTeacherPracticeCourse(IPage<MyCourseVo> page, MyCourseSearch search);
 
+    /**
+     * 老师未布置的课程作业数量
+     * 陪练课 课程状态为完成,有学生考勤记录 没有学生课程记录
+     *
+     * @param homeworkSearch 查询信息
+     * @return number
+     */
+    Integer countTeacherNoDecorateHomework(HomeworkSearch homeworkSearch);
+
     List<String> queryCourseSchedule(MyCourseSearch search);
 
     IPage<MyCourseVo> queryStudentPracticeCourse(IPage<MyCourseVo> page, MyCourseSearch search);
+
 }
 

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

@@ -10,6 +10,7 @@ import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.cooleshow.biz.dal.vo.AlbumDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicAlbumVo;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
 
 /**
  * MusicAlbumService服务类
@@ -43,7 +44,7 @@ public interface MusicAlbumService extends IService<MusicAlbum> {
      * @param query 查询条件
      * @return AlbumDetailVo
      */
-    AlbumDetailVo detail(IPage<MusicSheet> page, MusicAlbumDetailSearch query);
+    AlbumDetailVo detail(IPage<MusicSheetVo> page, MusicAlbumDetailSearch query);
 
     /**
      * 删除专辑详情关联曲目

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

@@ -49,7 +49,7 @@ public interface MusicSheetService extends IService<MusicSheet> {
      * @param query 查询条件
      * @return MusicSheet
      */
-    IPage<MusicSheet> selectAlbumDetailPage(IPage<MusicSheet> page, MusicAlbumDetailSearch query);
+    IPage<MusicSheetVo> selectAlbumDetailPage(IPage<MusicSheetVo> page, MusicAlbumDetailSearch query);
 
     /**
      * 老师分享乐谱信息
@@ -157,4 +157,12 @@ public interface MusicSheetService extends IService<MusicSheet> {
      * @return boolean
      */
     boolean del(Long id);
+
+    /**
+     *  展示已过审的乐谱数量
+     *
+     * @param sysUser 老师信息
+     * @return
+     */
+    Integer countTeacherMusicSheet(SysUser sysUser);
 }

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

@@ -74,4 +74,12 @@ public interface MusicTagService extends IService<MusicTag>  {
 	 * @return boolean
 	 */
     boolean checkParentDifferent(List<Long> musicTagIdList);
+
+	/**
+	 *  获取标签名字符串
+	 *
+	 * @param tagIdList 标签id集合
+	 * @return 标签名字符串
+	 */
+    String getMusicTagNames(List<Long> tagIdList);
 }

+ 24 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysManualService.java

@@ -0,0 +1,24 @@
+package com.yonge.cooleshow.biz.dal.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.entity.SysManual;
+import com.yonge.cooleshow.biz.dal.queryInfo.SysManualQueryInfo;
+import com.yonge.cooleshow.common.page.PageInfo;
+
+/**
+ * (SysManual)表服务接口
+ *
+ * @author makejava
+ * @since 2021-12-20 13:46:08
+ */
+public interface SysManualService extends IService<SysManual> {
+
+    PageInfo<SysManual> query(SysManualQueryInfo queryInfo);
+
+    Boolean add(SysManual sysManual, Long userId);
+
+    int update(SysManual sysManual, Long userId);
+
+    String listMenuIds();
+}
+

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

@@ -10,6 +10,7 @@ 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.HomeworkSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch;
 import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
@@ -650,6 +651,13 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         return page.setRecords(baseMapper.queryTeacherPracticeCourse(page, search));
     }
 
+    @Override
+    public Integer countTeacherNoDecorateHomework(HomeworkSearch homeworkSearch) {
+
+        // 陪练课 课程状态为完成,有学生考勤记录 没有学生课程记录
+        return baseMapper.countTeacherNoDecorateHomework(homeworkSearch);
+    }
+
     /**
      * @Description: 查询老师约课日历
      * @Author: cy

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

@@ -11,13 +11,11 @@ import com.yonge.cooleshow.biz.dal.entity.AlbumFavorite;
 import com.yonge.cooleshow.biz.dal.entity.MusicAlbum;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
-import com.yonge.cooleshow.biz.dal.service.AlbumFavoriteService;
-import com.yonge.cooleshow.biz.dal.service.AlbumMusicRelateService;
-import com.yonge.cooleshow.biz.dal.service.MusicAlbumService;
-import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
+import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.AlbumDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicAlbumVo;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
 import com.yonge.cooleshow.common.exception.BizException;
 import com.yonge.toolset.utils.string.StringUtil;
 import org.slf4j.Logger;
@@ -52,6 +50,9 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
     private MusicSheetService musicSheetService;
 
     @Autowired
+    private MusicTagService musicTagService;
+
+    @Autowired
     private AlbumFavoriteService albumFavoriteService;
 
     public MusicAlbumDao getDao() {
@@ -79,7 +80,7 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
     }
 
     @Override
-    public AlbumDetailVo detail(IPage<MusicSheet> page, MusicAlbumDetailSearch query) {
+    public AlbumDetailVo detail(IPage<MusicSheetVo> page, MusicAlbumDetailSearch query) {
         MusicAlbum musicAlbum = this.getById(query.getId());
         if (musicAlbum == null) {
             throw  new BizException("未找到专辑信息");
@@ -88,8 +89,10 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
         albumDetailVo.setId(musicAlbum.getId());
         albumDetailVo.setAlbumName(musicAlbum.getAlbumName());
         albumDetailVo.setAlbumDesc(musicAlbum.getAlbumDesc());
+        albumDetailVo.setAlbumTag(musicAlbum.getAlbumTag());
+        albumDetailVo.setMusicTagNames(musicTagService.getMusicTagNames(StringUtil.toLongList(musicAlbum.getAlbumTag())));
 
-        IPage<MusicSheet> musicSheetVoIPage = musicSheetService.selectAlbumDetailPage(page,query);
+        IPage<MusicSheetVo> musicSheetVoIPage = musicSheetService.selectAlbumDetailPage(page,query);
         albumDetailVo.setMusicSheetList(PageUtil.pageInfo(musicSheetVoIPage));
         return albumDetailVo;
     }

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

@@ -108,7 +108,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
     }
 
     @Override
-    public IPage<MusicSheet> selectAlbumDetailPage(IPage<MusicSheet> page, MusicAlbumDetailSearch query) {
+    public IPage<MusicSheetVo> selectAlbumDetailPage(IPage<MusicSheetVo> page, MusicAlbumDetailSearch query) {
         return page.setRecords(baseMapper.selectAlbumDetailPage(page, query));
     }
 
@@ -119,6 +119,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
         query.setCreateBy(sysUser.getId());
         query.setAuditStatus(AuthStatusEnum.PASS);
         query.setState(YesOrNoEnum.YES);
+        query.setDelFlag(false);
         // 只查3条
         query.setRows(3);
         IPage<MusicSheetVo> musicSheetVoIPage = selectPage(PageUtil.getPage(query), query);
@@ -258,4 +259,14 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
                 .update();
 
     }
+
+    @Override
+    public Integer countTeacherMusicSheet(SysUser sysUser) {
+        return this.lambdaQuery()
+                .eq(MusicSheet::getAuditStatus,AuthStatusEnum.PASS)
+                .eq(MusicSheet::getCreateBy,sysUser.getId())
+                .eq(MusicSheet::getState,YesOrNoEnum.YES)
+                .eq(MusicSheet::getDelFlag,YesOrNoEnum.NO)
+                .count();
+    }
 }

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

@@ -223,5 +223,21 @@ public class MusicTagServiceImpl extends ServiceImpl<MusicTagDao, MusicTag> impl
 
     }
 
+    @Override
+    public String getMusicTagNames(List<Long> tagIdList) {
+
+        if (CollectionUtils.isEmpty(tagIdList)) {
+            return "";
+        }
+        List<MusicTag> list = this.lambdaQuery()
+                                  .in(MusicTag::getId, tagIdList)
+                                    .eq(MusicTag::getDelFlag,YesOrNoEnum.NO)
+                                  .list();
+        if (CollectionUtils.isEmpty(list)) {
+            return "";
+        }
+        return list.stream().map(MusicTag::getName).collect(Collectors.joining(","));
+    }
+
 
 }

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

@@ -0,0 +1,76 @@
+package com.yonge.cooleshow.biz.dal.service.impl;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import jodd.util.StringUtil;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.biz.dal.dao.SysManualDao;
+import com.yonge.cooleshow.biz.dal.entity.SysManual;
+import com.yonge.cooleshow.biz.dal.queryInfo.SysManualQueryInfo;
+import com.yonge.cooleshow.biz.dal.service.SysManualService;
+import com.yonge.cooleshow.common.page.PageInfo;
+import com.yonge.toolset.utils.collection.MapUtil;
+
+/**
+ * (SysManual)表服务实现类
+ *
+ * @author makejava
+ * @since 2021-12-20 17:19:38
+ */
+@Service("sysManualService")
+public class SysManualServiceImpl extends ServiceImpl<SysManualDao, SysManual> implements SysManualService {
+
+    private final static Logger logger = LoggerFactory.getLogger(SysManualServiceImpl.class);
+
+    @Autowired
+    private SysManualDao sysManualDao;
+
+    public PageInfo<SysManual> query(SysManualQueryInfo queryInfo) {
+        PageInfo<SysManual> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<>();
+        MapUtil.populateMap(params, queryInfo);
+        List<SysManual> dataList = null;
+        int count = sysManualDao.findRecordCount(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = sysManualDao.queryRecord(params);
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+
+        return pageInfo;
+    }
+
+    public Boolean add(SysManual sysManual, Long userId) {
+        sysManual.setOperatorId(userId);
+        sysManual.setCreateTime(new Date());
+        sysManual.setUpdateTime(new Date());
+        return this.save(sysManual);
+    }
+
+    public int update(SysManual sysManual, Long userId) {
+        sysManual.setOperatorId(userId);
+        sysManual.setUpdateTime(new Date());
+        return sysManualDao.updateById(sysManual);
+    }
+
+    @Override
+    public String listMenuIds() {
+        List<String> menuIds = sysManualDao.listMenuIds();
+        return StringUtil.join(menuIds, ",");
+    }
+}
+

+ 24 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/AlbumDetailVo.java

@@ -29,8 +29,29 @@ public class AlbumDetailVo {
     private YesOrNoEnum favorite;
 
     @ApiModelProperty("专辑详情曲目")
-    private PageInfo<MusicSheet> musicSheetList;
+    private PageInfo<MusicSheetVo> musicSheetList;
 
+    @ApiModelProperty(value = "专辑标签(多个标签以逗号分开)",required = true)
+    private String albumTag;  //专辑标签(多个标签以逗号分开)
+
+    @ApiModelProperty("教材标签")
+    private String musicTagNames;
+
+    public String getAlbumTag() {
+        return albumTag;
+    }
+
+    public void setAlbumTag(String albumTag) {
+        this.albumTag = albumTag;
+    }
+
+    public String getMusicTagNames() {
+        return musicTagNames;
+    }
+
+    public void setMusicTagNames(String musicTagNames) {
+        this.musicTagNames = musicTagNames;
+    }
 
     public Long getId() {
         return id;
@@ -48,11 +69,11 @@ public class AlbumDetailVo {
         this.albumName = albumName;
     }
 
-    public PageInfo<MusicSheet> getMusicSheetList() {
+    public PageInfo<MusicSheetVo> getMusicSheetList() {
         return musicSheetList;
     }
 
-    public void setMusicSheetList(PageInfo<MusicSheet> musicSheetList) {
+    public void setMusicSheetList(PageInfo<MusicSheetVo> musicSheetList) {
         this.musicSheetList = musicSheetList;
     }
 

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

@@ -24,6 +24,28 @@ public class MusicSheetDetailVo extends MusicSheet {
     @ApiModelProperty("上传老师名称")
     private String userName;
 
+    @ApiModelProperty("标签名")
+    private String musicTagNames;
+
+    @ApiModelProperty("声部名")
+    private String subjectNames;
+
+    public String getMusicTagNames() {
+        return musicTagNames;
+    }
+
+    public void setMusicTagNames(String musicTagNames) {
+        this.musicTagNames = musicTagNames;
+    }
+
+    public String getSubjectNames() {
+        return subjectNames;
+    }
+
+    public void setSubjectNames(String subjectNames) {
+        this.subjectNames = subjectNames;
+    }
+
     public String getUserName() {
         return userName;
     }

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

@@ -177,6 +177,27 @@
             AND u.username_ LIKE CONCAT('%', #{param.studentName}, '%')
         </if>
     </select>
+
+    <select id="countTeacherNoDecorateHomework" resultType="java.lang.Integer">
+
+        select count(1)
+        from course_schedule cs
+        left join student_attendance sa on cs.id_ = sa.course_schedule_id_
+        left join course_homework ch on ch.course_schedule_id_ = sa.course_schedule_id_
+        <where>
+            ch.id_ is null
+            <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>
+        </where>
+    </select>
+
     <select id="queryCourseSchedule" resultType="java.lang.String"
             parameterType="com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch">
         SELECT s.class_date_

+ 16 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml

@@ -55,6 +55,8 @@
         t.update_time_ as updateTime,
         t.update_by_ as updateBy,
         t.del_flag_ as delFlag,
+        t.source_type_ as sourceType,
+        t.submit_audit_time_ as submitAuditTime,
         t.remark_ as remark
     </sql>
 
@@ -103,10 +105,17 @@
         <if test="param.delFlag != null">
             and t.del_flag_ = #{param.delFlag}
         </if>
+        <if test="param.sourceType != null">
+            and t.source_type_ = #{param.sourceType}
+        </if>
     </sql>
 
-    <select id="selectAlbumDetailPage" resultType="com.yonge.cooleshow.biz.dal.entity.MusicSheet">
+    <select id="selectAlbumDetailPage" resultType="com.yonge.cooleshow.biz.dal.vo.MusicSheetVo">
         select <include refid="Base_Column_List"/>
+        ,(select group_concat(mt.name_) from music_tag mt
+        where find_in_set(mt.id_,t.music_tag_) and mt.del_flag_ = 0) as musicTagNames
+        ,(select group_concat(s.name_) from subject s
+        where find_in_set(s.id_,t.music_subject_) and s.del_flag_ = 0 ) as subjectNames
         from music_sheet t
         left join album_music_relate amr on t.id_ = amr.music_sheet_id_
         <where>
@@ -154,6 +163,10 @@
         ,msa.sort_number_ as accompanimentSortNumber
         ,msa.create_time_ as accompanimentCreateTime
         ,su.username_ as userName
+        ,(select group_concat(mt.name_) from music_tag mt
+        where find_in_set(mt.id_,t.music_tag_) and mt.del_flag_ = 0) as musicTagNames
+        ,(select group_concat(s.name_) from subject s
+        where find_in_set(s.id_,t.music_subject_)  and s.del_flag_ = 0) as subjectNames
         FROM music_sheet t
         left join music_sheet_accompaniment msa on msa.music_sheet_id_ = t.id_
         left join sys_user su on t.create_by_ = su.id_
@@ -180,6 +193,8 @@
         <result column="hotFlag" jdbcType="TINYINT" property="hotFlag"/>
         <result column="musicPrice" jdbcType="DECIMAL" property="musicPrice"/>
         <result column="audioFileUrl" jdbcType="VARCHAR" property="audioFileUrl"/>
+        <result column="musicTagNames" jdbcType="VARCHAR" property="musicTagNames"/>
+        <result column="subjectNames" jdbcType="VARCHAR" property="subjectNames"/>
         <result column="xmlFileUrl" jdbcType="VARCHAR" property="xmlFileUrl"/>
         <result column="hasBeat" jdbcType="TINYINT" property="hasBeat"/>
         <result column="createTime" jdbcType="TIMESTAMP" property="createTime"/>

+ 70 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/SysManualMapper.xml

@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.yonge.cooleshow.biz.dal.dao.SysManualDao">
+	<resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.SysManual">
+		<id column="id_" jdbcType="INTEGER" property="id" />
+		<result column="menu_id_" jdbcType="INTEGER" property="menuId" />
+		<result column="name_" jdbcType="VARCHAR" property="name" />
+		<result column="op_flow_" jdbcType="VARCHAR" property="opFlow" />
+		<result column="fun_rule_" jdbcType="VARCHAR" property="funRule" />
+		<result column="video_url_" jdbcType="VARCHAR" property="videoUrl" />
+		<result column="create_time_" jdbcType="TIMESTAMP" property="createTime" />
+		<result column="update_time_" jdbcType="TIMESTAMP" property="updateTime" />
+		<result column="operator_id_" jdbcType="INTEGER" property="operatorId" />
+	</resultMap>
+
+	<sql id="Base_Column_List">
+		id_, menu_id_, name_, op_flow_, fun_rule_, video_url_, create_time_,
+		update_time_, operator_id_
+	</sql>
+
+	<insert id="insertBatch" keyColumn="id_" keyProperty="id"
+		useGeneratedKeys="true" parameterType="com.yonge.cooleshow.biz.dal.entity.SysManual">
+		insert into sys_manual(menu_id_, name_, op_flow_, fun_rule_,
+		video_url_, create_time_, update_time_, operator_id_)
+		values
+		<foreach collection="entities" item="entity" separator=",">
+			(#{entity.menuId}, #{entity.name}, #{entity.opFlow},
+			#{entity.funRule}, #{entity.videoUrl}, #{entity.createTime},
+			#{entity.updateTime}, #{entity.operatorId})
+		</foreach>
+	</insert>
+	<select id="findRecordCount" resultType="java.lang.Integer">
+		select count(1) from sys_manual sm
+		left join sys_user u on sm.operator_id_ = u.id_
+		left join sys_menu m on sm.menu_id_ = m.id_
+		<where>
+			1 = 1
+			<if test="menuId != null and menuId != '' ">
+				AND menu_id_ = #{menuId}
+			</if>
+			<if test="search != null and search != '' ">
+				AND (sm.name_ like concat('%', #{search} '%') )
+			</if>
+		</where>
+		<include refid="global.limit" />
+	</select>
+
+	<select id="queryRecord" resultType="com.yonge.cooleshow.biz.dal.entity.SysManual">
+		select sm.*
+		, u.username_ as operatorName
+		, m.name_ as menuName
+		from sys_manual sm
+		left join sys_user u on sm.operator_id_ = u.id_
+		left join sys_menu m on sm.menu_id_ = m.id_
+		<where>
+			1 = 1
+			<if test="menuId != null and menuId != '' ">
+				AND sm.menu_id_ = #{menuId}
+			</if>
+			<if test="search != null and search != '' ">
+				AND (sm.name_ like concat('%', #{search} '%') )
+			</if>
+		</where>
+		<include refid="global.limit" />
+	</select>
+	<select id="listMenuIds" resultType="java.lang.String">
+		select menu_id_ from sys_manual
+	</select>
+
+</mapper>

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

@@ -0,0 +1,49 @@
+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.search.HomeworkSearch;
+import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
+import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
+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.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 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;
+
+    @ApiOperation(value = "未布置的课后作业数量")
+    @GetMapping(value="/count")
+    public HttpResponseResult<Integer> countTeacherNoDecorateHomework() {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null  || sysUser.getId() == null) {
+            return failed("用户信息获取失败");
+        }
+        HomeworkSearch homeworkSearch = new HomeworkSearch();
+        // 默认查当前老师,陪练课 课程状态为完成,有学生考勤记录 没有学生课程记录
+        homeworkSearch.setTeacherId(sysUser.getId());
+        homeworkSearch.setCourseStatus(CourseScheduleEnum.COMPLETE);
+        homeworkSearch.setCourseType(CourseScheduleEnum.PRACTICE);
+        return succeed(courseScheduleService.countTeacherNoDecorateHomework(homeworkSearch));
+    }
+
+}

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

@@ -75,6 +75,7 @@ public class MusicSheetController extends BaseController {
         musicSheetDto.setUserId(sysUser.getId());
         musicSheetDto.setAuditStatus(AuthStatusEnum.DOING);
         musicSheetDto.setSubmitAuditTime(new Date());
+        musicSheetDto.setSourceType(SourceTypeEnum.TEACHER);
         List<MusicSheetAccompaniment> list;
         if (!AudioTypeEnum.MIDI.getCode().equals(musicSheetDto.getAudioType().getCode())){
             list = musicSheetDto.getBackground();
@@ -140,4 +141,15 @@ public class MusicSheetController extends BaseController {
         }
         return succeed(musicSheetService.shareMusicSheet(sysUser));
     }
+
+
+    @ApiOperation(value = "我的乐谱数量")
+    @GetMapping(value="/count")
+    public HttpResponseResult<Integer> countTeacherMusicSheet() {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null  || sysUser.getId() == null) {
+            return failed("用户信息获取失败");
+        }
+        return succeed(musicSheetService.countTeacherMusicSheet(sysUser));
+    }
 }