소스 검색

Merge branch 'dev_1_2_1_20220802' into online

liweifan 2 년 전
부모
커밋
1a8d3e955f
49개의 변경된 파일1073개의 추가작업 그리고 99개의 파일을 삭제
  1. 1 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/CacheNameEnum.java
  2. 97 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/AuditReasonController.java
  3. 21 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java
  4. 30 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/AuditReasonDao.java
  5. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseGroupDao.java
  6. 9 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/StudentDao.java
  7. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SubjectDao.java
  8. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherDao.java
  9. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/AuditReasonDto.java
  10. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/LiveCourseGroupDto.java
  11. 23 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ReasonDto.java
  12. 39 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/AuditReasonSearch.java
  13. 118 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/AuditReason.java
  14. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java
  15. 31 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/AuditReasonService.java
  16. 15 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java
  17. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java
  18. 6 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/StudentService.java
  19. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SubjectService.java
  20. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherService.java
  21. 37 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/AuditReasonServiceImpl.java
  22. 50 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java
  23. 66 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  24. 64 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  25. 40 10
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java
  26. 38 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SubjectServiceImpl.java
  27. 37 12
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  28. 25 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/AuditReasonVo.java
  29. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/LessonGroupVo.java
  30. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonStudentDetailVo.java
  31. 50 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/AuditReasonMapper.xml
  32. 6 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseGroupMapper.xml
  33. 4 8
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml
  34. 68 14
      cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml
  35. 41 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/SubjectMapper.xml
  36. 26 8
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  37. 5 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupMapper.xml
  38. 1 1
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MusicAlbumController.java
  39. 3 3
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MusicSheetController.java
  40. 3 2
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentController.java
  41. 9 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentCourseGroupController.java
  42. 3 2
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/SubjectController.java
  43. 3 2
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/SubjectController.java
  44. 4 2
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherController.java
  45. 12 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherCourseGroupController.java
  46. 7 0
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/CourseGroupController.java
  47. 3 2
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/StudentController.java
  48. 3 2
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/TeacherController.java
  49. 3 2
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/open/OpenSubjectController.java

+ 1 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/CacheNameEnum.java

@@ -17,6 +17,7 @@ public enum CacheNameEnum implements BaseEnum<String, CacheNameEnum> {
 
     TEACHER_TOTAL("老师统计缓存"),
     STUDENT_TOTAL("学生统计缓存"),
+    SUBJECT_ITEM("声部下拉缓存", Duration.ofHours(1L)),
     TEACHER_SUBJECT_ITEM("老师声部下拉缓存", Duration.ofHours(1L)),
     STUDENT_SUBJECT_ITEM("学生声部下拉缓存", Duration.ofHours(1L)),
 

+ 97 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/AuditReasonController.java

@@ -0,0 +1,97 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.toolset.base.page.PageInfo;
+import com.yonge.toolset.mybatis.support.PageUtil;
+
+import com.yonge.toolset.base.util.StringUtil;
+import io.swagger.annotations.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+import com.yonge.cooleshow.biz.dal.vo.AuditReasonVo;
+import com.yonge.cooleshow.biz.dal.dto.search.AuditReasonSearch;
+import com.yonge.cooleshow.biz.dal.entity.AuditReason;
+import com.yonge.cooleshow.biz.dal.service.AuditReasonService;
+
+import java.util.Date;
+
+@RestController
+@RequestMapping("/auditReason")
+@Api(value = "审核原因表", tags = "审核原因表")
+public class AuditReasonController extends BaseController {
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+
+    @Autowired
+    private AuditReasonService auditReasonService;
+
+	/**
+     * 查询单条
+     */
+    @GetMapping("/detail/{id}")
+    @ApiOperation(value = "详情", notes = "传入id")
+    public HttpResponseResult<AuditReasonVo> detail(@PathVariable("id") Long id) {
+    	return succeed(auditReasonService.detail(id));
+	}
+    
+    /**
+     * 查询分页
+     */
+    @PostMapping("/page")
+    @ApiOperation(value = "查询分页", notes = "传入auditReasonSearch")
+    public HttpResponseResult<PageInfo<AuditReasonVo>> page(@RequestBody AuditReasonSearch query) {
+		IPage<AuditReasonVo> pages = auditReasonService.selectPage(PageUtil.getPage(query), query);
+        return succeed(PageUtil.pageInfo(pages));
+	}
+    
+    /**
+	 * 新增
+	 */
+	@PostMapping("/save")
+	@ApiOperation(value = "新增", notes = "传入auditReason")
+	public HttpResponseResult save(@Valid @RequestBody AuditReason auditReason) {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null  || sysUser.getId() == null) {
+			return failed("用户信息获取失败");
+		}
+		auditReason.setCreateBy(sysUser.getId());
+		auditReason.setCreateTime(new Date());
+		auditReason.setUpdateBy(sysUser.getId());
+		auditReason.setUpdateTime(new Date());
+    	return status(auditReasonService.save(auditReason));
+	}
+    
+    /**
+	 * 修改
+	 */
+	@PostMapping("/update")
+	@ApiOperation(value = "修改", notes = "传入auditReason")
+	public HttpResponseResult update(@Valid @RequestBody AuditReason auditReason) {
+
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null  || sysUser.getId() == null) {
+			return failed("用户信息获取失败");
+		}
+		auditReason.setUpdateBy(sysUser.getId());
+		auditReason.setUpdateTime(new Date());
+        return status(auditReasonService.updateById(auditReason));
+	}
+
+
+ 	/**
+	 * 删除
+	 */
+	@PostMapping("/remove/{id}")
+	@ApiOperation(value = "删除", notes = "传入ids")
+	public HttpResponseResult remove(@PathVariable Long id) {
+
+		return status(auditReasonService.del(id));
+	}
+}

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

@@ -196,6 +196,27 @@ public class MusicSheetController extends BaseController {
         return status(musicSheetService.state(id,reasonDto.getReason()));
     }
 
+
+    /**
+     * 批量启用/停用
+     */
+    @PostMapping("/stateList")
+    @ApiOperation(value = "批量启用/停用")
+    @PreAuthorize("@pcs.hasPermissions('music/sheet/stateList')")
+    public HttpResponseResult<Boolean> stateList(@RequestBody ReasonDto reasonDto) {
+        if (StringUtil.isEmpty(reasonDto.getMusicSheetIds())) {
+            return failed("参数不能为空");
+        }
+        if (reasonDto.getState() == null) {
+            return failed("启用/禁用状态不能为空");
+        }
+        if (reasonDto.getState().equals(YesOrNoEnum.NO) && StringUtil.isEmpty(reasonDto.getReason())) {
+            return failed("停用原因不能为空");
+        }
+
+        return status(musicSheetService.stateList(reasonDto));
+    }
+
     /**
      * 学生详情-乐谱
      */

+ 30 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/AuditReasonDao.java

@@ -0,0 +1,30 @@
+package com.yonge.cooleshow.biz.dal.dao;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import com.yonge.cooleshow.biz.dal.entity.AuditReason;
+import com.yonge.cooleshow.biz.dal.vo.AuditReasonVo;
+import com.yonge.cooleshow.biz.dal.dto.search.AuditReasonSearch;
+
+
+public interface AuditReasonDao extends BaseMapper<AuditReason>{
+	/**
+	 * 查询详情
+     * @author liweifan
+     * @date 2022-08-12 09:33:55
+     * @return: com.yonge.cooleshow.biz.dal.vo.AuditReasonVo
+	 */
+	AuditReasonVo detail(@Param("id") Long id);
+
+	/**
+	 * 分页查询
+     * @author liweifan
+     * @date 2022-08-12 09:33:55
+     * @return: com.yonge.cooleshow.biz.dal.vo.AuditReasonVo
+	 */
+	List<AuditReasonVo> selectPage(@Param("page") IPage page, @Param("param") AuditReasonSearch auditReason);
+	
+}

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

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yonge.cooleshow.biz.dal.dto.search.*;
 import com.yonge.cooleshow.biz.dal.entity.CourseGroup;
+import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import org.apache.ibatis.annotations.Param;
@@ -255,5 +256,12 @@ public interface CourseGroupDao extends BaseMapper<CourseGroup> {
      */
     IPage<CourseGroupPianoDetailVo> selectPianoGroupTeacherDetail(@Param("page") IPage<CourseGroupPianoDetailVo> page,
                                                                   @Param("param") CourseGroupDetailSearch search);
+
+    /**
+     * 获取直播课报名中的声部
+     *
+     * @return
+     */
+    List<Subject> selectLiveSubject();
 }
 

+ 9 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/StudentDao.java

@@ -45,7 +45,14 @@ public interface StudentDao extends BaseMapper<Student> {
      * @return: java.lang.Integer
      */
     Integer setSubject(@Param("id") Long id, @Param("subjectIds") String subjectIds);
-
+    /**
+     * @param
+     * @return java.util.List<com.yonge.cooleshow.biz.dal.entity.Subject>
+     * @description: 获取学生声部列表
+     * @author zx
+     * @date 2022/3/25 09:38
+     */
+    List<Subject> querySubject(@Param("userId") Long userId);
     /***
      * 获取声部下拉框
      * @author liweifan
@@ -53,7 +60,7 @@ public interface StudentDao extends BaseMapper<Student> {
      * @updateTime 2022/5/9 10:17
      * @return: java.util.List<com.yonge.cooleshow.biz.dal.entity.Subject>
      */
-    List<Subject> querySubjectItem(@Param("userId") Long id);
+    List<Subject> querySubjectItem(@Param("userId") Long id,@Param("type")  String type);
 
     /**
      * 我的关注

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

@@ -54,4 +54,5 @@ public interface SubjectDao extends BaseDAO<Long, Subject> {
 
     Subject queryByName(@Param("name") String name);
 
+    List<Subject> subjectSelect(@Param("type") String type);
 }

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

@@ -81,7 +81,7 @@ public interface TeacherDao extends BaseMapper<Teacher> {
      * @updateTime 2022/5/9 10:17
      * @return: java.util.List<com.yonge.cooleshow.biz.dal.entity.Subject>
      */
-    List<Subject> querySubjectItem(@Param("userId") Long id);
+    List<Subject> querySubjectItem(@Param("userId") Long userId, @Param("type")String type);
 
     /**
      * 查询我的粉丝

+ 13 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/AuditReasonDto.java

@@ -0,0 +1,13 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import com.yonge.cooleshow.biz.dal.entity.AuditReason;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022-08-12 09:33:55
+ */
+@ApiModel(value = "AuditReasonDto对象", description = "审核原因表数据传输对象")
+public class AuditReasonDto extends AuditReason{
+	private static final long serialVersionUID = 1L;
+}

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

@@ -91,6 +91,18 @@ public class LiveCourseGroupDto implements Serializable {
         @ApiModelProperty(value = "教学计划/最多200字")
         private String plan;
 
+        @ApiModelProperty("教学计划id")
+        private Long planId;
+
+
+        public Long getPlanId() {
+            return planId;
+        }
+
+        public void setPlanId(Long planId) {
+            this.planId = planId;
+        }
+
         public Integer getClassNum() {
             return classNum;
         }

+ 23 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ReasonDto.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.dto;
 
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -15,6 +16,28 @@ public class ReasonDto {
     @ApiModelProperty("曲目下架原因")
     private String  reason;
 
+    @ApiModelProperty("曲目id集合 逗号隔开")
+    private String musicSheetIds;
+
+    @ApiModelProperty("启用: 1 ,停用 : 0")
+    private YesOrNoEnum state;
+
+    public YesOrNoEnum getState() {
+        return state;
+    }
+
+    public void setState(YesOrNoEnum state) {
+        this.state = state;
+    }
+
+    public String getMusicSheetIds() {
+        return musicSheetIds;
+    }
+
+    public void setMusicSheetIds(String musicSheetIds) {
+        this.musicSheetIds = musicSheetIds;
+    }
+
     public String getReason() {
         return reason;
     }

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

@@ -0,0 +1,39 @@
+package com.yonge.cooleshow.biz.dal.dto.search;
+
+import com.yonge.toolset.base.page.QueryInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022-08-12 09:33:55
+ */
+@ApiModel(value = "AuditReasonSearch对象", description = "审核原因表查询对象")
+public class AuditReasonSearch extends QueryInfo{
+	private static final long serialVersionUID = 1L;
+
+
+	@ApiModelProperty("审核原因分类 TEACHER: 达人认证,MUSIC:乐谱审核/下架,VIDEO:视频课审核/下架,STYLE:个人风采审核,LIVE:直播课下架")
+	private String type;
+
+	@ApiModelProperty("话术")
+	private String search;
+
+	@Override
+	public String getSearch() {
+		return search;
+	}
+
+	@Override
+	public void setSearch(String search) {
+		this.search = search;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+}

+ 118 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/AuditReason.java

@@ -0,0 +1,118 @@
+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 com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.Size;
+
+/**
+ * 审核原因表
+ */
+@TableName("audit_reason")
+@ApiModel(value = "AuditReason对象", description = "审核原因表")
+public class AuditReason implements Serializable {
+	private static final long serialVersionUID = 1L;
+    @ApiModelProperty("id ")
+    @TableId(value = "id_", type = IdType.AUTO)
+    private Long id;
+    @ApiModelProperty("审核原因 ")
+	@TableField(value = "name_")
+    @Size(max = 50,message = "话术最长50个字")
+    private String name;
+    @ApiModelProperty("审核原因分类 TEACHER: 达人认证,MUSIC:乐谱审核/下架,VIDEO:视频课审核/下架,STYLE:个人风采审核,LIVE:直播课下架")
+	@TableField(value = "type_")
+    private String type;
+    @ApiModelProperty("假删标识(0:正常,1:删除) ")
+	@TableField(value = "del_flag_")
+    private Boolean delFlag;
+    @ApiModelProperty("创建时间 ")
+	@TableField(value = "create_time_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date createTime;
+    @ApiModelProperty("更新时间 ")
+	@TableField(value = "update_time_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date updateTime;
+    @ApiModelProperty("更新人(后台平台用户) ")
+	@TableField(value = "update_by_")
+    private Long updateBy;
+    @ApiModelProperty("创建人(后台平台用户) ")
+	@TableField(value = "create_by_")
+    private Long createBy;
+
+	public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    
+	public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+    
+	public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+    
+	public Boolean getDelFlag() {
+        return delFlag;
+    }
+
+    public void setDelFlag(Boolean delFlag) {
+        this.delFlag = delFlag;
+    }
+    
+	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 getUpdateBy() {
+        return updateBy;
+    }
+
+    public void setUpdateBy(Long updateBy) {
+        this.updateBy = updateBy;
+    }
+    
+	public Long getCreateBy() {
+        return createBy;
+    }
+
+    public void setCreateBy(Long createBy) {
+        this.createBy = createBy;
+    }
+    
+}

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java

@@ -100,7 +100,8 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     PIANO_ROOM_TIMES_ADD("后台增加琴房时长通知"),
     PIANO_ROOM_TIMES_SUB("后台扣除琴房时长通知"),
 
-
+    PIANO_ROOM_ADJUST("琴房课调整"),
+    PRACTICE_ADJUST("陪练课调整"),
 
     ;
 

+ 31 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/AuditReasonService.java

@@ -0,0 +1,31 @@
+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.AuditReasonVo;
+import com.yonge.cooleshow.biz.dal.dto.search.AuditReasonSearch;
+import com.yonge.cooleshow.biz.dal.entity.AuditReason;
+
+/**
+ * 审核原因表 服务类
+ * @author liweifan
+ * @date 2022-08-12
+ */
+public interface AuditReasonService extends IService<AuditReason>  {
+
+	/**
+     * 查询详情
+     * @author liweifan
+ 	 * @date 2022-08-12
+     */
+	AuditReasonVo detail(Long id);
+
+    /**
+     * 分页查询
+     * @author liweifan
+ 	 * @date 2022-08-12
+     */
+    IPage<AuditReasonVo> selectPage(IPage<AuditReasonVo> page, AuditReasonSearch query);
+
+	boolean del(Long id);
+}

+ 15 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java

@@ -10,10 +10,7 @@ import com.yonge.cooleshow.biz.dal.dto.LiveSaleOutDto;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderRefundReq;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.search.*;
-import com.yonge.cooleshow.biz.dal.entity.CourseGroup;
-import com.yonge.cooleshow.biz.dal.entity.CourseTimeEntity;
-import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroup;
-import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail;
+import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.biz.dal.vo.res.RefundCreateRes;
@@ -338,5 +335,19 @@ public interface CourseGroupService extends IService<CourseGroup> {
      * @return
      */
     Boolean liveSaleOut(LiveSaleOutDto dto);
+
+    /**
+     * 报名中的直播课声部
+     *
+     * @return
+     */
+    List<Subject> liveSubject();
+
+    /**
+     * 修改直播课程组
+     *
+     * @param dto
+     */
+    void updateLiveCourse(LiveCourseGroupDto dto);
 }
 

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

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.ReasonDto;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.dto.MusicSheetDto;
 import com.yonge.cooleshow.biz.dal.dto.MusicSheetExport;
@@ -283,4 +284,12 @@ public interface MusicSheetService extends IService<MusicSheet> {
      * @return
      */
     Boolean top(Long musicSheetId);
+
+    /**
+     * 批量启用/停用
+     *
+     * @param reasonDto
+     * @return
+     */
+    Boolean stateList(ReasonDto reasonDto);
 }

+ 6 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/StudentService.java

@@ -31,6 +31,7 @@ public interface StudentService extends IService<Student> {
 
     /**
      * 查询学员详情
+     *
      * @param phone
      * @return
      */
@@ -63,6 +64,8 @@ public interface StudentService extends IService<Student> {
      */
     Integer setSubject(Long id, String subjectIds);
 
+    List<Subject> querySubject(Long userId);
+
     /***
      * 获取声部下拉框
      * @author liweifan
@@ -70,7 +73,7 @@ public interface StudentService extends IService<Student> {
      * @updateTime 2022/5/9 10:16
      * @return: java.util.List<com.yonge.cooleshow.biz.dal.entity.Subject>
      */
-    List<Subject> querySubjectItem(Long id);
+    List<Subject> querySubjectItem(Long id, String type);
 
     /**
      * 我的关注
@@ -83,10 +86,11 @@ public interface StudentService extends IService<Student> {
 
     /**
      * 学院绑定老师
+     *
      * @param phone
      * @param userId
      * @param isUpdate
      * @return
      */
-    HttpResponseResult<Map<String,TeacherVo>> bindTeacher(String phone, Long userId, Boolean isUpdate);
+    HttpResponseResult<Map<String, TeacherVo>> bindTeacher(String phone, Long userId, Boolean isUpdate);
 }

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

@@ -50,5 +50,5 @@ public interface SubjectService extends BaseService<Long, Subject> {
 	 * @updateTime 2022/3/21 17:23
 	 * @return: java.util.List<com.yonge.cooleshow.biz.dal.vo.SubjectSelectVo>
 	 */
-	List<Subject> subjectSelect();
+	List<Subject> subjectSelect(String type);
 }

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

@@ -117,7 +117,7 @@ public interface TeacherService extends IService<Teacher> {
      * @updateTime 2022/5/9 10:16
      * @return: java.util.List<com.yonge.cooleshow.biz.dal.entity.Subject>
      */
-    List<Subject> querySubjectItem(Long id);
+    List<Subject> querySubjectItem(Long id,String type);
 
     /**
      * 我的粉丝

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

@@ -0,0 +1,37 @@
+package com.yonge.cooleshow.biz.dal.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.yonge.cooleshow.biz.dal.entity.AuditReason;
+import com.yonge.cooleshow.biz.dal.vo.AuditReasonVo;
+import com.yonge.cooleshow.biz.dal.dto.search.AuditReasonSearch;
+import com.yonge.cooleshow.biz.dal.dao.AuditReasonDao;
+import com.yonge.cooleshow.biz.dal.service.AuditReasonService;
+
+
+@Service
+public class AuditReasonServiceImpl extends ServiceImpl<AuditReasonDao, AuditReason> implements AuditReasonService {
+    private final static Logger log = LoggerFactory.getLogger(AuditReasonServiceImpl.class);
+
+	@Override
+    public AuditReasonVo detail(Long id) {
+        return baseMapper.detail(id);
+    }
+    
+    @Override
+    public IPage<AuditReasonVo> selectPage(IPage<AuditReasonVo> page, AuditReasonSearch query){
+        return page.setRecords(baseMapper.selectPage(page, query));
+    }
+
+    @Override
+    public boolean del(Long id) {
+        AuditReason auditReason = new AuditReason();
+        auditReason.setId(id);
+        auditReason.setDelFlag(true);
+        return this.updateById(auditReason);
+    }
+
+}

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

@@ -97,6 +97,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
     @Autowired
     private UserAccountService userAccountService;
 
+
     @Override
     public CourseGroupDao getDao() {
         return this.baseMapper;
@@ -281,6 +282,39 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         cacheTime.delete();
     }
 
+
+    @Override
+    public void updateLiveCourse(LiveCourseGroupDto dto) {
+        CourseGroup courseGroup = this.getById(dto.getId());
+        if (!courseGroup.getStatus().equals(CourseGroupEnum.NOT_SALE.getCode()) && !courseGroup.getStatus().equals(CourseGroupEnum.OUT_SALE.getCode())) {
+            throw new BizException("只有未开售和下架状态的课程能修改");
+        }
+        //写入课程组表
+        CourseGroup group = new CourseGroup();
+        group.setId(dto.getId());
+        group.setName(dto.getName());
+        group.setCourseIntroduce(dto.getCourseIntroduce());
+        if (courseGroup.getStatus().equals(CourseGroupEnum.OUT_SALE.getCode())) {
+            group.setStatus(CourseGroupEnum.APPLY.getCode());
+        }
+        group.setSalesStartDate(dto.getSalesStartDate());
+        group.setSalesEndDate(dto.getSalesEndDate());
+        group.setBackgroundPic(dto.getBackgroundPic());
+        this.saveOrUpdate(group);
+
+        //修改课程计划表
+        List<CoursePlan> planList = new ArrayList<>();
+        dto.getCoursePlanList().forEach(o -> {
+            CoursePlan plan = new CoursePlan();
+            plan.setCourseGroupId(group.getId());
+            plan.setClassNum(o.getClassNum());
+            plan.setPlan(o.getPlan());
+            plan.setId(o.getPlanId());
+            planList.add(plan);
+        });
+        coursePlanService.saveOrUpdateBatch(planList);
+    }
+
     /**
      * 取消课程组-下架课程组
      *
@@ -1307,6 +1341,22 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         return this.updateById(liveCourseGroupVo);
     }
 
+    @Override
+    public List<Subject> liveSubject() {
+
+        List<Subject> subjectList = baseMapper.selectLiveSubject();
+        List<Long> subjectParentIdList = subjectList.stream().map(Subject::getParentSubjectId).collect(Collectors.toList());
+        List<Subject> parentSubjectList = subjectService.findBySubjectByIdList(subjectParentIdList);
+        for (Subject subject : parentSubjectList) {
+            List<Subject> children = subjectList.stream()
+                           .filter(subject1 -> subject1.getParentSubjectId().equals(subject.getId()))
+                           .collect(Collectors.toList());
+            subject.setSubjects(children);
+        }
+        return parentSubjectList;
+    }
+
+
     private void sendOutSaleMessage(LiveSaleOutDto dto, CourseGroup liveCourseGroupVo) {
         // 发送课程下架通知
         try {

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

@@ -54,6 +54,8 @@ import java.text.SimpleDateFormat;
 import java.time.Instant;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
 import java.time.temporal.TemporalAdjusters;
 import java.util.*;
@@ -1262,6 +1264,36 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         this.batchCheckTeacherCourseTime(studentPayment.getUserId(), timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime);
 
         baseMapper.courseAdjust(adjustVo);
+
+        // 课程调整后给学生发消息
+        sendCourseAdjustMessage(teacherId,studentPayment.getUserId(),adjustVo.getCourseId(),adjustVo.getStartTime());
+    }
+
+    //{老师昵称}已将{课程类型陪练课、琴房课}{课程名称}课调整到{上课时间yyyy-MM-dd HH:mm:ss},请注意查看
+    private void sendCourseAdjustMessage(Long teacherId,Long studentId,Integer courseScheduleId,Date date) {
+        //  陪练课调整模板
+        try {
+            //  发送消息
+            SysUser teacher = sysUserFeignService.queryUserById(teacherId);
+            SysUser student = sysUserFeignService.queryUserById(studentId);
+
+            CourseSchedule courseSchedule = this.getById(courseScheduleId);
+            CourseGroup courseGroup = courseGroupService.getById(courseSchedule.getCourseGroupId());
+
+            String courseName = courseGroup.getName() + "-第" + courseSchedule.getClassNum() + "课";
+
+            String dateString = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().format(
+                    DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+
+            Map<Long, String> receivers = new HashMap<>();
+            receivers.put(studentId, student.getPhone());
+
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PRACTICE_ADJUST, receivers, null,
+                                               0, null, ClientEnum.STUDENT.getCode(), teacher.getUsername(),"陪练课",courseName,dateString);
+
+        } catch (Exception e) {
+            log.error("陪练课调整发送消息失败--> {}", e.fillInStackTrace());
+        }
     }
 
     /**
@@ -2228,6 +2260,40 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                 .set(CourseSchedule::getClassDate, DateUtil.trunc(startTime))
                 .set(CourseSchedule::getStartTime, startTime)
                 .set(CourseSchedule::getEndTime, endTime));
+
+        if (CollectionUtils.isNotEmpty(studentPayments)) {
+            SysUser teacher = sysUserFeignService.queryUserById(teacherId);
+
+            CourseSchedule schedule = this.getById(courseId);
+            CourseGroup courseGroup = courseGroupService.getById(courseSchedule.getCourseGroupId());
+
+            String courseName = courseGroup.getName() + "-第" + courseSchedule.getClassNum() + "课";
+
+            String dateString = startTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().format(
+                    DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+
+            for (CourseScheduleStudentPayment payment : studentPayments) {
+                sendPianoCourseAdjustMessage(teacher,payment.getUserId(),courseName,dateString);
+
+            }
+        }
+    }
+
+    //{老师昵称}已将{课程类型琴房课}{课程名称}课调整到{上课时间yyyy-MM-dd HH:mm:ss},请注意查看
+    private void sendPianoCourseAdjustMessage(SysUser teacher,Long studentId,String courseName,String dateString) {
+        //  琴房课调整模板
+        try {
+            //  发送消息
+            SysUser student = sysUserFeignService.queryUserById(studentId);
+
+            Map<Long, String> receivers = new HashMap<>();
+            receivers.put(studentId, student.getPhone());
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PIANO_ROOM_ADJUST, receivers, null,
+                    0, null, ClientEnum.STUDENT.getCode(), teacher.getUsername(),"琴房课",courseName,dateString);
+
+        } catch (Exception e) {
+            log.error("琴房课调整发送消息失败--> {}", e.fillInStackTrace());
+        }
     }
 
     /**

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

@@ -5,12 +5,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.*;
+import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
 import com.yonge.cooleshow.common.enums.PostStatusEnum;
 import com.yonge.cooleshow.biz.dal.dao.MusicSheetDao;
-import com.yonge.cooleshow.biz.dal.dto.MusicSheetDto;
-import com.yonge.cooleshow.biz.dal.dto.MusicSheetExport;
-import com.yonge.cooleshow.biz.dal.dto.MusicSheetPayDto;
-import com.yonge.cooleshow.biz.dal.dto.UserAccountRecordDto;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.req.TeacherMusicSheetAuditReq;
 import com.yonge.cooleshow.biz.dal.dto.search.*;
@@ -38,6 +36,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.*;
@@ -55,7 +54,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
 
     private static final Logger log = LoggerFactory.getLogger(MusicSheetServiceImpl.class);
 
-    @Autowired
+    @Resource
     private MusicSheetDao musicSheetDao;
 
     @Autowired
@@ -82,7 +81,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     @Autowired
     private AlbumMusicRelateService albumMusicRelateService;
 
-    @Autowired
+    @Resource
     private SysUserFeignService sysUserFeignService;
 
     @Autowired
@@ -437,6 +436,31 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     @Transactional(rollbackFor = Exception.class)
     public boolean saveMusicSheet(MusicSheetDto musicSheetDto, Long userId) {
 
+        MusicSheet oldMusicSheet = null;
+        if (musicSheetDto.getId() != null) {
+            oldMusicSheet = getById(musicSheetDto.getId());
+        }
+        // 保存审核拒绝的数据
+        if (musicSheetDto.getId() != null && AuthStatusEnum.DOING.getCode().equals(musicSheetDto.getAuditStatus().getCode())) {
+            // 保存删除的曲目
+            if (oldMusicSheet.getAuditStatus().equals(AuthStatusEnum.UNPASS)) {
+                oldMusicSheet.setId(null);
+                oldMusicSheet.setDelFlag(true);
+                this.save(oldMusicSheet);
+                // 删除的曲目的伴奏
+                musicSheetAccompanimentService.lambdaUpdate()
+                                              .eq(MusicSheetAccompaniment::getMusicSheetId,musicSheetDto.getId())
+                                              .set(MusicSheetAccompaniment::getMusicSheetId,oldMusicSheet.getId())
+                                              .update();
+                // 审核拒绝的原因
+                musicSheetAuthRecordService.lambdaUpdate()
+                                           .eq(MusicSheetAuthRecord::getMusicSheetId,musicSheetDto.getId())
+                                           .set(MusicSheetAuthRecord::getMusicSheetId,oldMusicSheet.getId())
+                                           .update();
+            }
+
+        }
+
         if (musicSheetDto.getId() != null) {
             musicSheetAccompanimentService.delByMusicSheetId(musicSheetDto.getId());
         }
@@ -446,7 +470,9 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         }
 
         // 删除曲目专辑关联
-        // delAlbumSheetRef(musicSheetDto.getId(), musicSheetDto.getMusicSubject());
+        if (oldMusicSheet != null && !oldMusicSheet.getMusicSubject().equals(musicSheetDto.getMusicSubject())) {
+            delAlbumSheetRef(musicSheetDto.getId(), musicSheetDto.getMusicSubject());
+        }
 
         List<MusicSheetAccompaniment> list;
         if (!AudioTypeEnum.MIDI.getCode().equals(musicSheetDto.getAudioType().getCode())) {
@@ -722,7 +748,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         dataList.sort(Comparator.comparingInt(ExcelDataReaderProperty::getRowIndex));
         List<MusicSheetDto> musicSheetDtoList = new ArrayList<>();
         List<MusicTagVo> musicTagVoList = musicTagService.selectMusicTagTree();
-        List<Subject> subjects = subjectService.subjectSelect();
+        List<Subject> subjects = subjectService.subjectSelect(null);
         Date date = new Date();
         for (ExcelDataReaderProperty<MusicSheetExport> readerProperty : dataList) {
             MusicSheetDto musicSheetDto = new MusicSheetDto();
@@ -942,6 +968,36 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         return this.saveOrUpdate(musicSheet);
     }
 
+    @Override
+    public Boolean stateList(ReasonDto reasonDto) {
+        List<Long> idList = WrapperUtil.toLongList(reasonDto.getMusicSheetIds());
+
+        Collection<MusicSheet> musicSheets = this.listByIds(idList);
+        List<MusicSheet> musicSheetList = musicSheets.stream()
+                                              .filter(musicSheet -> !musicSheet.getState().equals(reasonDto.getState()))
+                                              .collect(Collectors.toList());
+        if (CollectionUtils.isEmpty(musicSheetList)) {
+            return true;
+        }
+        this.lambdaUpdate()
+            .in(MusicSheet::getId,musicSheetList.stream().map(MusicSheet::getId).collect(Collectors.toList()))
+            .set(MusicSheet::getState,reasonDto.getState())
+            .update();
+
+        // 发送推送
+        if (reasonDto.getState().equals(YesOrNoEnum.YES)){
+            return true;
+        }
+        for (MusicSheet musicSheet : musicSheetList) {
+             if (SourceTypeEnum.TEACHER.equals(musicSheet.getSourceType())) {
+                 sendOutSaleMessage(reasonDto.getReason(),musicSheet);
+             }
+        }
+
+        return true;
+
+    }
+
     private SysUser getSysUser(Long userId) {
         return Optional.ofNullable(userId)
                 .map(sysUserFeignService::queryUserById)

+ 40 - 10
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
@@ -18,8 +19,10 @@ import com.yonge.cooleshow.biz.dal.service.StudentTotalService;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.enums.UserLockFlag;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.utils.date.DateUtil;
 import com.yonge.toolset.utils.string.ValueUtil;
+import org.redisson.api.RMap;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -46,8 +49,6 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
     private StudentService studentService;
     @Autowired
     private TeacherDao teacherDao;
-    @Autowired
-    private TeacherService teacherService;
 
     @Override
     public StudentVo detail(Long userId) {
@@ -100,19 +101,48 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
     }
 
     @Override
-    public List<Subject> querySubjectItem(Long id) {
-        List<Subject> subjectList = (List<Subject>) redissonClient.getBucket(CacheNameEnum.STUDENT_SUBJECT_ITEM.getRedisKey(id)).get();
-        if (null == subjectList) {
-            subjectList = baseMapper.querySubjectItem(id);
-            redissonClient.getBucket(CacheNameEnum.STUDENT_SUBJECT_ITEM.getRedisKey(id))
-                    .set(subjectList, CacheNameEnum.STUDENT_SUBJECT_ITEM.getDuration().toHours(),
-                            TimeUnit.HOURS);
+    public List<Subject> querySubject(Long userId) {
+        List<Subject> subjects = baseMapper.querySubject(userId);
+        return subjects;
+    }
+
+    @Override
+    public List<Subject> querySubjectItem(Long userId, String type) {
+        //先查询自己的声部
+        List<Subject> subjectList = querySubject(userId);
+
+        List<Subject> cacheByType = getCacheByType(userId, type);
+        if (CollectionUtils.isNotEmpty(cacheByType)) {
+            subjectList.addAll(cacheByType);
         }
         return subjectList;
     }
 
+    private List<Subject> getCacheByType(Long userId, String type) {
+        RMap<String, List<Subject>> map = redissonClient.getMap(CacheNameEnum.STUDENT_SUBJECT_ITEM.getRedisKey(userId));
+        //设置过期时间
+        map.expire(CacheNameEnum.STUDENT_SUBJECT_ITEM.getDuration().toHours(),
+                TimeUnit.HOURS);
+
+        if (StringUtil.isEmpty(type)) {
+            List<Subject> subjectList = map.get("ALL");
+            if (CollectionUtils.isEmpty(subjectList)) {
+                subjectList = baseMapper.querySubjectItem(userId, null);
+                map.put("ALL", subjectList);
+            }
+            return subjectList;
+        } else {
+            List<Subject> subjectList = map.get(type);
+            if (CollectionUtils.isEmpty(subjectList)) {
+                subjectList = baseMapper.querySubjectItem(userId, type);
+                map.put(type, subjectList);
+            }
+            return subjectList;
+        }
+    }
+
     @Override
-    public IPage<MyFollow> queryMyFollow(IPage<MyFollow> page,  QueryMyFollowSearch query) {
+    public IPage<MyFollow> queryMyFollow(IPage<MyFollow> page, QueryMyFollowSearch query) {
         List<MyFollow> teacherVos = baseMapper.queryMyFollow(page, query);
         return page.setRecords(teacherVos);
     }

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

@@ -1,10 +1,15 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
+import com.yonge.cooleshow.biz.dal.entity.TeacherTotal;
+import com.yonge.cooleshow.common.enums.CacheNameEnum;
 import com.yonge.toolset.base.page.PageInfo;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.mybatis.service.impl.BaseServiceImpl;
+import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -22,6 +27,8 @@ public class SubjectServiceImpl extends BaseServiceImpl<Long, Subject> implement
 
     @Autowired
     private SubjectDao subjectDao;
+    @Autowired
+    private RedissonClient redissonClient;
 
     @Override
     public BaseDAO<Long, Subject> getDAO() {
@@ -81,16 +88,36 @@ public class SubjectServiceImpl extends BaseServiceImpl<Long, Subject> implement
     }
 
     @Override
-    public List<Subject> subjectSelect() {
-        List<Subject> allList = subjectDao.findAll(new HashMap<>());
+    public List<Subject> subjectSelect(String type) {
+        Object cacheRes = redissonClient.getBucket(CacheNameEnum.SUBJECT_ITEM.getRedisKey(type)).get();
+        if (null != cacheRes) {
+            List<Subject> resList = (List<Subject>) cacheRes;
+            if (!CollectionUtils.isEmpty(resList)) {
+                return resList;
+            }
+        }
+
+        List<Subject> parents;
+        List<Subject> subjects;
+
+        if(StringUtil.isEmpty(type)){
+            List<Subject> allList = subjectDao.findAll(new HashMap<>());
 
-        List<Subject> parents = allList.stream()
-                .filter(o -> (null == o.getParentSubjectId() || o.getParentSubjectId().equals(0L)))
-                .collect(Collectors.toList());
+            parents = allList.stream()
+                    .filter(o -> (null == o.getParentSubjectId() || o.getParentSubjectId().equals(0L)))
+                    .collect(Collectors.toList());
+
+            subjects = allList.stream()
+                    .filter(o -> !(null == o.getParentSubjectId() || o.getParentSubjectId().equals(0L)))
+                    .collect(Collectors.toList());
+        }else{
+            subjects = subjectDao.subjectSelect(type);
+
+            List<Long> parentIds = subjects.stream().map(Subject::getParentSubjectId).collect(Collectors.toList());
+
+            parents = findBySubjectByIdList(parentIds);
+        }
 
-        List<Subject> subjects = allList.stream()
-                .filter(o -> !(null == o.getParentSubjectId() || o.getParentSubjectId().equals(0L)))
-                .collect(Collectors.toList());
 
         for (Subject parent : parents) {
             if (null == parent.getId()) {
@@ -110,6 +137,9 @@ public class SubjectServiceImpl extends BaseServiceImpl<Long, Subject> implement
                 }
             }
         }
+
+        redissonClient.getBucket(CacheNameEnum.SUBJECT_ITEM.getRedisKey(type)).set(parents,
+                CacheNameEnum.STUDENT_SUBJECT_ITEM.getDuration().toHours(),TimeUnit.HOURS);
         return parents;
     }
 

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

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
@@ -111,8 +112,8 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
             return HttpResponseResult.failed("未查询到老师信息");
         }
         TeacherHomeVo teacherHomeVo = new TeacherHomeVo();
-        BeanUtils.copyProperties(teacher,teacherHomeVo);
-   
+        BeanUtils.copyProperties(teacher, teacherHomeVo);
+
         //身份证号、手机号脱敏
         teacherHomeVo.setIdCardNo(ValueUtil.fuzzyIdCard(teacherHomeVo.getIdCardNo()));
         teacherHomeVo.setPhone(ValueUtil.fuzzyMobile(teacherHomeVo.getPhone()));
@@ -187,7 +188,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
             baseMapper.updateById(teacher);
 
             // 添加标签
-            this.setTeacherTag(id,TeacherTagEnum.LIVE);
+            this.setTeacherTag(id, TeacherTagEnum.LIVE);
 
             return HttpResponseResult.status(true);
         } else {
@@ -322,7 +323,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
             sysUser.setUserType(sysUser.getUserType() + ",TEACHER");
         }
         //设置默认头像
-        if(StringUtil.isEmpty(sysUser.getAvatar())){
+        if (StringUtil.isEmpty(sysUser.getAvatar())) {
             String defaultHeard = sysConfigService.findConfigValue(SysConfigConstant.DEFAULT_HEARD);
             sysUser.setAvatar(defaultHeard);
         }
@@ -423,17 +424,41 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
     }
 
     @Override
-    public List<Subject> querySubjectItem(Long id) {
-        List<Subject> subjectList = (List<Subject>) redissonClient.getBucket(CacheNameEnum.TEACHER_SUBJECT_ITEM.getRedisKey(id)).get();
-        if (null == subjectList) {
-            subjectList = baseMapper.querySubjectItem(id);
-            redissonClient.getBucket(CacheNameEnum.TEACHER_SUBJECT_ITEM.getRedisKey(id))
-                    .set(subjectList, CacheNameEnum.TEACHER_SUBJECT_ITEM.getDuration().toHours(),
-                            TimeUnit.HOURS);
+    public List<Subject> querySubjectItem(Long userId, String type) {
+        //先查询自己的声部
+        List<Subject> subjectList = querySubject(userId);
+
+        List<Subject> cacheByType = getCacheByType(userId, type);
+        if (CollectionUtils.isNotEmpty(cacheByType)) {
+            subjectList.addAll(cacheByType);
         }
         return subjectList;
     }
 
+    private List<Subject> getCacheByType(Long userId, String type) {
+        RMap<String, List<Subject>> map = redissonClient.getMap(CacheNameEnum.TEACHER_SUBJECT_ITEM.getRedisKey(userId));
+        //设置过期时间
+        map.expire(CacheNameEnum.TEACHER_SUBJECT_ITEM.getDuration().toHours(),
+                TimeUnit.HOURS);
+
+        if(StringUtil.isEmpty(type)){
+            List<Subject> subjectList = map.get("ALL");
+            if(CollectionUtils.isEmpty(subjectList)){
+                subjectList = baseMapper.querySubjectItem(userId, null);
+                map.put("ALL",subjectList);
+            }
+            return subjectList;
+        }else{
+            List<Subject> subjectList = map.get(type);
+            if(CollectionUtils.isEmpty(subjectList)) {
+                subjectList = baseMapper.querySubjectItem(userId, type);
+                map.put(type,subjectList);
+            }
+            return subjectList;
+        }
+    }
+
+
     public IPage<MyFens> queryMyFans(IPage<MyFens> page, Long teacherId) {
         List<MyFens> teacherVos = baseMapper.queryMyFans(page, teacherId);
         return page.setRecords(teacherVos);
@@ -447,7 +472,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         }
         if (StringUtil.isEmpty(teacherVo.getTag())) {
             teacherVo.setTag(teacherTagEnum.getCode());
-        } else  if (teacherVo.getTag().contains(teacherTagEnum.getCode())) {
+        } else if (teacherVo.getTag().contains(teacherTagEnum.getCode())) {
             return;
         } else {
             teacherVo.setTag(teacherVo.getTag() + "," + teacherTagEnum.getCode());

+ 25 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/AuditReasonVo.java

@@ -0,0 +1,25 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.entity.AuditReason;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022-08-12 09:33:55
+ */
+@ApiModel(value = "AuditReasonVo对象", description = "审核原因表查询视图对象")
+public class AuditReasonVo extends AuditReason{
+	private static final long serialVersionUID = 1L;
+
+	@ApiModelProperty("更新人名称")
+	private String updateName;
+
+	public String getUpdateName() {
+		return updateName;
+	}
+
+	public void setUpdateName(String updateName) {
+		this.updateName = updateName;
+	}
+}

+ 12 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/LessonGroupVo.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
 import com.yonge.cooleshow.common.entity.BaseEntity;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -50,6 +51,17 @@ public class LessonGroupVo extends BaseEntity {
     @ApiModelProperty("购买人数")
     private Integer countStudent;
 
+    @ApiModelProperty("审核版本")
+    private YesOrNoEnum auditVersion;
+
+    public YesOrNoEnum getAuditVersion() {
+        return auditVersion;
+    }
+
+    public void setAuditVersion(YesOrNoEnum auditVersion) {
+        this.auditVersion = auditVersion;
+    }
+
     public String getRealName() {
         return realName;
     }

+ 12 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonStudentDetailVo.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
 import com.yonge.cooleshow.common.entity.BaseEntity;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -34,6 +35,17 @@ public class VideoLessonStudentDetailVo extends BaseEntity {
     @ApiModelProperty("购买时间")
     private String purchaseTime;
 
+    @ApiModelProperty("审核版本")
+    private YesOrNoEnum auditVersion;
+
+    public YesOrNoEnum getAuditVersion() {
+        return auditVersion;
+    }
+
+    public void setAuditVersion(YesOrNoEnum auditVersion) {
+        this.auditVersion = auditVersion;
+    }
+
     public String getLessonSubjectName() {
         return lessonSubjectName;
     }

+ 50 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/AuditReasonMapper.xml

@@ -0,0 +1,50 @@
+<?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.AuditReasonDao">
+	<resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.AuditReason">
+            <result column="id_" property="id" />
+	        <result column="name_" property="name" />
+	        <result column="type_" property="type" />
+	        <result column="del_flag_" property="delFlag" />
+	        <result column="create_time_" property="createTime" />
+	        <result column="update_time_" property="updateTime" />
+	        <result column="update_by_" property="updateBy" />
+	        <result column="create_by_" property="createBy" />
+		</resultMap>  
+    
+    <!-- 表字段 -->
+    <sql id="baseColumns">
+         t.id_ as id
+        , t.name_ as name
+        , t.type_ as type
+        , t.del_flag_ as delFlag
+        , t.create_time_ as createTime
+        , t.update_time_ as updateTime
+        , t.update_by_ as updateBy
+        , t.create_by_ as createBy
+        </sql> 
+    
+    <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.AuditReasonVo">
+        SELECT
+            <include refid="baseColumns"/>
+        FROM audit_reason t
+        where t.id_ = #{id}
+    </select>
+    
+    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.AuditReasonVo">
+		SELECT         
+        	<include refid="baseColumns" />
+        ,su.username_ as updateName
+		FROM audit_reason t
+        left join sys_user su on su.id_ = t.update_by_
+        <where>
+            t.del_flag_ = 0
+            <if test="param.type != null and param.type != ''">
+                and t.type_ = #{param.type}
+            </if>
+            <if test="param.search != null and param.search != ''">
+                and t.name_ like concat('%', #{param.search},'%')
+            </if>
+        </where>
+	</select>
+</mapper>

+ 6 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseGroupMapper.xml

@@ -977,4 +977,10 @@
         </where>
         GROUP BY courseId
     </select>
+
+    <select id="selectLiveSubject" resultType="com.yonge.cooleshow.biz.dal.entity.Subject">
+        select distinct s.* from course_group cg
+        left join subject s on cg.subject_id_ = s.id_
+        where cg.status_ = 'APPLY' and cg.type_ = 'LIVE'
+    </select>
 </mapper>

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

@@ -480,17 +480,16 @@
         where find_in_set(mt.id_,ms.music_tag_) and mt.del_flag_ = 0  and mt.state_ = 1) as musicTagNames
         ,ms.play_speed_ as playSpeed
         ,ms.music_price_ as musicPrice
-        ,ms.create_time_ as createTime
+        ,ms.update_time_ as createTime
         ,if(msar.audit_state_ is null,ms.audit_status_,msar.audit_state_) as auditStatus
         ,su2.username_ as auditName
-        from music_sheet ms
+        from music_sheet_auth_record  msar
+        left join  music_sheet ms on ms.id_ = msar.music_sheet_id_
         left join sys_user su on su.id_ = ms.create_by_
-        left join music_sheet_auth_record msar on ms.id_ = msar.music_sheet_id_
         left join sys_user su2 on msar.verify_user_id_ = su2.id_
         <where>
             su.del_flag_ = 0 and
-            ms.source_type_  = 'TEACHER' and
-            msar.id_ is not null
+            ms.source_type_  = 'TEACHER'
             <if test="param.idAndName != null and param.idAndName != ''">
                 and (su.id_ like concat('%',#{param.idAndName} ,'%')
                 or su.username_ like concat('%',#{param.idAndName},'%')
@@ -508,9 +507,6 @@
             <if test="param.endTime != null">
                 and ms.create_time_ &lt; #{param.endTime}
             </if>
-            <if test="param.delFlag != null">
-                and ms.del_flag_ = #{param.delFlag}
-            </if>
             <if test="param.chargeType != null">
                 and ms.charge_type_ = #{param.chargeType}
             </if>

+ 68 - 14
cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -120,22 +120,76 @@
         </where>
     </select>
 
+    <select id="querySubject" resultMap="com.yonge.cooleshow.biz.dal.dao.SubjectDao.Subject">
+        SELECT s.* FROM `subject` s
+        LEFT JOIN student t ON FIND_IN_SET(s.id_,t.subject_id_)
+        WHERE t.user_id_ = #{userId}
+    </select>
+
     <select id="querySubjectItem" resultType="com.yonge.cooleshow.biz.dal.entity.Subject">
-        select * from subject t
-        where exists(
+        select t.* from subject t
+        join (
+        <trim prefixOverrides="union all">
+            <if test="type == null or type =='MUSIC'">
+                union all
+                (
+                    select
+                        a.music_subject_ as subject_id_
+                    from music_sheet a
+                    join music_sheet_purchase_record a1 on a.id_ = a1.music_sheet_id_
+                    where a1.student_id_ = #{userId} and a1.order_status_ = 'PAID'
+                    GROUP BY a.music_subject_
+                )
+            </if>
+            <if test="type == null or type =='VIDEO'">
+                union all
+                (
+                    select
+                        a.lesson_subject_ as subject_id_
+                    from video_lesson_group a
+                    join video_lesson_purchase_record a1 on a.id_ = a1.video_lesson_group_id_
+                    where a1.student_id_ = #{userId}
+                    GROUP BY a.lesson_subject_
+                )
+            </if>
+            <if test="type == null or type =='PINAO_ROOM'">
+                union all
+                (
+                    select
+                        a.subject_id_ as subject_id_
+                    from course_group a
+                    join course_schedule_student_payment a1 on a.id_ = a1.course_group_id_
+                    where a.type_ = 'PIANO_ROOM_CLASS' and a1.user_id_ = #{userId}
+                    GROUP BY a.subject_id_
+                )
+            </if>
+            <if test="type == null or type =='PRACTICE'">
+                union all
+                (
+                    select
+                        a.subject_id_ as subject_id_
+                    from course_group a
+                    join course_schedule_student_payment a1 on a.id_ = a1.course_group_id_
+                    where a.type_ = 'PRACTICE' and a1.user_id_ = #{userId}
+                    GROUP BY a.subject_id_
+                )
+            </if>
+            <if test="type == null or type =='LIVE'">
+                union all
+                (
+                    select
+                        a.subject_id_ as subject_id_
+                    from course_group a
+                    join course_schedule_student_payment a1 on a.id_ = a1.course_group_id_
+                    where a.type_ = 'LIVE' and a1.user_id_ = #{userId}
+                    GROUP BY a.subject_id_
+                )
+            </if>
+        </trim>
+        ) a on t.id_ = a.subject_id_
+        where t.parent_subject_id_ != 0
+        and not exists(
             select 1 from student s where s.user_id_ = #{userId} and find_in_set(t.id_,s.subject_id_)
-            union all
-            select 1 from music_sheet a
-            left join music_sheet_purchase_record a1 on a.id_ = a1.music_sheet_id_
-            where a1.student_id_ = #{userId} and a1.order_status_ = 'PAID' and find_in_set(t.id_,a.music_subject_)
-            union all
-            select 1 from course_group b
-            left join course_schedule_student_payment b1 on b.id_ = b1.course_group_id_
-            where b1.user_id_ = #{userId} and find_in_set(t.id_,b.subject_id_)
-            union all
-            select 1 from video_lesson_group c
-            left join video_lesson_purchase_record c1 on c.id_ = c1.video_lesson_group_id_
-            where c1.student_id_ = #{userId} and find_in_set(t.id_,c.lesson_subject_)
         )
     </select>
 

+ 41 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/SubjectMapper.xml

@@ -28,6 +28,45 @@
 		SELECT * FROM subject where del_flag_ = 0 ORDER BY id_
 	</select>
 
+    <select id="subjectSelect" resultType="com.yonge.cooleshow.biz.dal.entity.Subject">
+        select t.* from subject t
+        join (
+        <trim prefixOverrides="union all">
+            <if test="type == null or type =='MUSIC'">
+                union all
+                (select a.music_subject_ as subject_id_ from music_sheet a
+                    where a.del_flag_ = 0 and a.state_ = 1
+                    GROUP BY a.music_subject_)
+            </if>
+            <if test="type == null or type =='VIDEO'">
+                union all
+                (select a.lesson_subject_ as subject_id_ from video_lesson_group a
+                    where a.audit_status_ = 'PASS' and a.shelves_flag_ = 1
+                    GROUP BY a.lesson_subject_)
+            </if>
+            <if test="type == null or type =='PINAO_ROOM'">
+                union all
+                (select a.subject_id_ as subject_id_ from course_group a
+                    where a.type_ = 'PIANO_ROOM_CLASS' and a.status_ in ('ING','COMPLETE','APPLY')
+                    GROUP BY a.subject_id_)
+            </if>
+            <if test="type == null or type =='PRACTICE'">
+                union all
+                (select a.subject_id_ as subject_id_ from course_group a
+                    where a.type_ = 'PRACTICE' and a.status_ in ('ING','COMPLETE','APPLY')
+                    GROUP BY a.subject_id_)
+            </if>
+            <if test="type == null or type =='LIVE'">
+                union all
+                (select a.subject_id_ as subject_id_ from course_group a
+                    where a.type_ = 'LIVE' and a.status_ in ('APPLY')
+                    GROUP BY a.subject_id_)
+            </if>
+        </trim>
+        ) a on t.id_ = a.subject_id_
+        where t.parent_subject_id_ != 0
+    </select>
+
     <!-- 向数据库增加一条记录 -->
     <insert id="insert" parameterType="com.yonge.cooleshow.biz.dal.entity.Subject" useGeneratedKeys="true"
             keyColumn="id"
@@ -155,4 +194,6 @@
         where  t.id_ = #{id}
     </select>
 
+
+
 </mapper>

+ 26 - 8
cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -157,16 +157,34 @@
     </update>
 
     <select id="querySubjectItem" resultType="com.yonge.cooleshow.biz.dal.entity.Subject">
-        select * from subject t
+        select t.* from subject t
+        join (
+            <trim prefixOverrides="union all">
+                <if test="type == null or type =='MUSIC'">
+                    union all
+                    (select music_subject_ as subject_id_ from music_sheet where user_id_ = #{userId} GROUP BY music_subject_)
+                </if>
+                <if test="type == null or type =='VIDEO'">
+                    union all
+                    (select lesson_subject_ as subject_id_ from video_lesson_group where teacher_id_ = #{userId} GROUP BY lesson_subject_)
+                </if>
+                <if test="type == null or type =='PINAO_ROOM'">
+                    union all
+                    (select subject_id_ as subject_id_ from course_group where type_ = 'PIANO_ROOM_CLASS' and teacher_id_ = #{userId} GROUP BY subject_id_)
+                </if>
+                <if test="type == null or type =='PRACTICE'">
+                    union all
+                    (select subject_id_ as subject_id_ from course_group where type_ = 'PRACTICE' and teacher_id_ = #{userId} GROUP BY subject_id_)
+                </if>
+                <if test="type == null or type =='LIVE'">
+                    union all
+                    (select subject_id_ as subject_id_ from course_group where type_ = 'LIVE' and teacher_id_ = #{userId} GROUP BY subject_id_)
+                </if>
+            </trim>
+        ) a on t.id_ = a.subject_id_
         where t.parent_subject_id_ != 0
-        and exists(
+        and not exists(
             select 1 from teacher s where s.user_id_ = #{userId} and find_in_set(t.id_,s.subject_id_)
-            union all
-            select 1 from music_sheet a where a.user_id_ = #{userId} and find_in_set(t.id_,a.music_subject_)
-            union all
-            select 1 from course_group b where b.teacher_id_ = #{userId} and find_in_set(t.id_,b.subject_id_)
-            union all
-            select 1 from video_lesson_group c where c.teacher_id_ = #{userId} and find_in_set(t.id_,c.lesson_subject_)
         )
     </select>
 

+ 5 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupMapper.xml

@@ -43,6 +43,7 @@
 		g.shelves_time_ as shelvesTime,
 		g.shelves_reason_ as shelvesReason,
 		g.audit_status_ AS auditStatus,
+		g.audit_version_ as auditVersion,
 		g.shelves_id_ as shelvesId,
 		g.create_time_ AS createTime,
 		g.update_time_ AS updateTime,
@@ -108,6 +109,7 @@
 			<if test="shelvesTime !=null">shelves_time_ = #{shelvesTime},</if>
 			<if test="shelvesReason !=null and shelvesReason!=''">shelves_reason_ = #{shelvesReason},</if>
 			<if test="shelvesId !=null">shelves_id_ = #{shelvesId},</if>
+		    <if test="shelvesFlag != null and shelvesFlag == 0">audit_status_ = 'DOING',audit_name_ = null,audit_id_ = null,</if>
 			update_time_ = SYSDATE()
 		</set>
 		WHERE id_ = #{id}
@@ -160,7 +162,8 @@
 			g.lesson_count_ AS lessonCount,
 			p.pay_money_ AS payMoney,
 			p.order_no_ AS orderNo,
-			p.purchase_time_ AS purchaseTime
+			p.purchase_time_ AS purchaseTime,
+			g.audit_version_ as auditVersion
 		FROM video_lesson_group g
 		LEFT JOIN video_lesson_purchase_record p ON g.id_ = p.video_lesson_group_id_
 		LEFT JOIN sys_user s ON g.teacher_id_ = s.id_
@@ -279,6 +282,7 @@
 			u.username_ AS userName,
 			u.real_name_ AS realName,
 			u.avatar_ AS avatar,
+			g.audit_version_ as auditVersion,
 			(SELECT COUNT(1) FROM video_lesson_purchase_record r WHERE r.video_lesson_group_id_=g.id_ AND r.order_status_='PAID') AS countStudent
 		FROM video_lesson_group g
 		LEFT JOIN sys_user u ON g.teacher_id_=u.id_

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

@@ -65,7 +65,7 @@ public class MusicAlbumController extends BaseController {
         query.setAuditVersion(appVersionInfoService.getAppAuditVersion(query.getPlatform(),query.getVersion()));
 
 
-        query.setSubjectIds(student.getSubjectId());
+        // query.setSubjectIds(student.getSubjectId());
         query.setAlbumStatus(YesOrNoEnum.YES);
         query.setSortBy(1);
         IPage<MusicAlbumVo> iPage = musicAlbumService.selectStudentPage(PageUtil.getPage(query),query);

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

@@ -85,7 +85,7 @@ public class MusicSheetController extends BaseController {
         query.setAuditVersion(appVersionInfoService.getAppAuditVersion(query.getPlatform(),query.getVersion()));
 
 
-        query.setSubjectIds(student.getSubjectId());
+        // query.setSubjectIds(student.getSubjectId());
 
         // 学生 只能看通过审核 并且 启用的 曲目
         query.setState(YesOrNoEnum.YES);
@@ -117,7 +117,7 @@ public class MusicSheetController extends BaseController {
         query.setAuditStatus(AuthStatusEnum.PASS);
         query.setStudentId(sysUser.getId());
 
-        query.setSubjectIds(student.getSubjectId());
+        // query.setSubjectIds(student.getSubjectId());
         query.setRows(query.getSheetRow());
         IPage<MusicSheetVo> musicSheetVoIPage = musicSheetService.selectStudentPage(PageUtil.getPage(query), query);
 
@@ -128,7 +128,7 @@ public class MusicSheetController extends BaseController {
         musicAlbumSearch.setAuditVersion(appAuditVersion);
         musicAlbumSearch.setAlbumTagIds(query.getMusicTagIds());
         musicAlbumSearch.setPage(query.getPage());
-        musicAlbumSearch.setSubjectIds(student.getSubjectId());
+        // musicAlbumSearch.setSubjectIds(student.getSubjectId());
         musicAlbumSearch.setRows(query.getAlbumRow());
         IPage<MusicAlbumVo> musicAlbumVoIPage = musicAlbumService.selectPage(PageUtil.getPage(musicAlbumSearch), musicAlbumSearch);
 

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

@@ -68,12 +68,13 @@ public class StudentController extends BaseController {
 
     @ApiOperation(value = "获取声部搜索下拉框")
     @PostMapping("/querySubjectItem")
-    public HttpResponseResult<List<Subject>> querySubjectItem() {
+    public HttpResponseResult<List<Subject>> querySubjectItem(
+            @ApiParam(value = "类型 PRACTICE 陪练课 LIVE 直播课 VIDEO 视频课 PINAO_ROOM 琴房 MUSIC 曲目 ") String type) {
         SysUser user = sysUserFeignService.queryUserInfo();
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        return succeed(studentService.querySubjectItem(user.getId()));
+        return succeed(studentService.querySubjectItem(user.getId(), type));
     }
 
     @ApiOperation(value = "我的关注")

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

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.student.controller;
 
 import com.yonge.cooleshow.biz.dal.dto.CheckCourseTimeDto;
 import com.yonge.cooleshow.biz.dal.entity.CourseTimeEntity;
+import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.service.AppVersionInfoService;
 import com.yonge.cooleshow.biz.dal.service.CourseGroupService;
 import com.yonge.cooleshow.biz.dal.vo.CourseGroupVo;
@@ -78,5 +79,13 @@ public class StudentCourseGroupController extends BaseController {
         return succeed();
     }
 
+
+
+    @ApiOperation("直播课拥有的声部信息")
+    @GetMapping("/liveSubject")
+    public HttpResponseResult<List<Subject>> liveSubject() {
+        List<Subject> subjectList = courseGroupService.liveSubject();
+        return succeed(subjectList);
+    }
 }
 

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

@@ -27,8 +27,9 @@ public class SubjectController extends BaseController {
 
     @ApiOperation(value = "获取声部")
     @GetMapping("/subjectSelect")
-    public HttpResponseResult<List<Subject>> subjectSelect() {
-        List<Subject> subjectSelect = subjectService.subjectSelect();
+    public HttpResponseResult<List<Subject>> subjectSelect(
+            @ApiParam(value = "类型 PRACTICE 陪练课 LIVE 直播课 VIDEO 视频课 PINAO_ROOM 琴房 MUSIC 曲目 ") String type) {
+        List<Subject> subjectSelect = subjectService.subjectSelect(type);
         return succeed(subjectSelect);
     }
 

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

@@ -33,8 +33,9 @@ public class SubjectController extends BaseController {
 
 	@ApiOperation(value = "获取声部")
 	@GetMapping("/subjectSelect")
-    public HttpResponseResult<List<Subject>> subjectSelect(){
-        List<Subject> subjectSelect = subjectService.subjectSelect();
+    public HttpResponseResult<List<Subject>> subjectSelect(
+			@ApiParam(value = "类型 PRACTICE 陪练课 LIVE 直播课 VIDEO 视频课 PINAO_ROOM 琴房 MUSIC 曲目 ") String type){
+        List<Subject> subjectSelect = subjectService.subjectSelect(type);
         return succeed(subjectSelect);
     }
 }

+ 4 - 2
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherController.java

@@ -5,6 +5,7 @@ import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.TeacherDto;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
+import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.SysUserService;
 import com.yonge.cooleshow.biz.dal.service.TeacherService;
 import com.yonge.toolset.mybatis.support.PageUtil;
@@ -79,12 +80,13 @@ public class TeacherController extends BaseController {
 
     @ApiOperation(value = "获取声部搜索下拉框")
     @PostMapping("/querySubjectItem")
-    public HttpResponseResult<List<Subject>> querySubjectItem() {
+    public HttpResponseResult<List<Subject>> querySubjectItem(
+            @ApiParam(value = "类型 PRACTICE 陪练课 LIVE 直播课 VIDEO 视频课 PINAO_ROOM 琴房 MUSIC 曲目 ") String type) {
         SysUser user = sysUserFeignService.queryUserInfo();
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        return succeed(teacherService.querySubjectItem(user.getId()));
+        return succeed(teacherService.querySubjectItem(user.getId(), type));
     }
 
     @ApiOperation(value = "我的-个人风采")

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

@@ -7,6 +7,7 @@ import com.yonge.cooleshow.biz.dal.dto.CheckCourseTimeDto;
 import com.yonge.cooleshow.biz.dal.dto.LiveCourseGroupDto;
 import com.yonge.cooleshow.biz.dal.dto.search.ShareProfitParam;
 import com.yonge.cooleshow.biz.dal.entity.CourseTimeEntity;
+import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.service.AppVersionInfoService;
 import com.yonge.cooleshow.biz.dal.service.CourseGroupService;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
@@ -88,6 +89,8 @@ public class TeacherCourseGroupController extends BaseController {
         return succeed(courseGroupService.queryPageLiveCourseGroup(param));
     }
 
+
+
     @ApiOperation("创建直播课程组-新增课程组")
     @PostMapping("/addLiveCourse")
     public HttpResponseResult<Object> addLiveCourse(@RequestBody LiveCourseGroupDto dto) {
@@ -95,6 +98,15 @@ public class TeacherCourseGroupController extends BaseController {
         return succeed();
     }
 
+
+    @ApiOperation("修改直播课程组")
+    @PostMapping("/updateLiveCourse")
+    public HttpResponseResult<Object> updateLiveCourse(@RequestBody LiveCourseGroupDto dto) {
+        courseGroupService.updateLiveCourse(dto);
+        return succeed();
+    }
+
+
     @ApiOperation("创建直播课程组-锁定课程时间-将课时写到缓存当作锁定的时间")
     @PostMapping("/lockCourseToCache")
     public HttpResponseResult<List<CourseTimeEntity>> lockCourseToCache(@RequestBody CheckCourseTimeDto dto) {

+ 7 - 0
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/CourseGroupController.java

@@ -85,5 +85,12 @@ public class CourseGroupController extends BaseController {
         return succeed(courseGroupService.getLiveLockTimeCache(teacherId).get(teacherId));
     }
 
+
+    @ApiOperation("修改直播课程组")
+    @PostMapping("/updateLiveCourse")
+    public HttpResponseResult<Object> updateLiveCourse(@RequestBody LiveCourseGroupDto dto) {
+        courseGroupService.updateLiveCourse(dto);
+        return succeed();
+    }
 }
 

+ 3 - 2
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/StudentController.java

@@ -73,12 +73,13 @@ public class StudentController extends BaseController {
 
     @ApiOperation(value = "获取声部搜索下拉框")
     @PostMapping("/querySubjectItem")
-    public HttpResponseResult<List<Subject>> querySubjectItem() {
+    public HttpResponseResult<List<Subject>> querySubjectItem(
+            @ApiParam(value = "类型 PRACTICE 陪练课 LIVE 直播课 VIDEO 视频课 PINAO_ROOM 琴房 MUSIC 曲目 ") String type) {
         SysUser user = sysUserFeignService.queryUserInfo();
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        return succeed(studentService.querySubjectItem(user.getId()));
+        return succeed(studentService.querySubjectItem(user.getId(),type));
     }
 
     @ApiOperation(value = "我的关注")

+ 3 - 2
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/TeacherController.java

@@ -82,12 +82,13 @@ public class TeacherController extends BaseController {
 
     @ApiOperation(value = "获取声部搜索下拉框")
     @PostMapping("/querySubjectItem")
-    public HttpResponseResult<List<Subject>> querySubjectItem() {
+    public HttpResponseResult<List<Subject>> querySubjectItem(
+            @ApiParam(value = "类型 PRACTICE 陪练课 LIVE 直播课 VIDEO 视频课 PINAO_ROOM 琴房 MUSIC 曲目 ") String type) {
         SysUser user = sysUserFeignService.queryUserInfo();
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        return succeed(teacherService.querySubjectItem(user.getId()));
+        return succeed(teacherService.querySubjectItem(user.getId(), type));
     }
 
     @ApiOperation(value = "我的-个人风采")

+ 3 - 2
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/open/OpenSubjectController.java

@@ -35,8 +35,9 @@ public class OpenSubjectController extends BaseController {
 
     @ApiOperation(value = "获取声部")
     @GetMapping("/subjectSelect")
-    public HttpResponseResult<List<Subject>> subjectSelect() {
-        List<Subject> subjectSelect = subjectService.subjectSelect();
+    public HttpResponseResult<List<Subject>> subjectSelect(
+            @ApiParam(value = "类型 PRACTICE 陪练课 LIVE 直播课 VIDEO 视频课 PINAO_ROOM 琴房 MUSIC 曲目 ") String type) {
+        List<Subject> subjectSelect = subjectService.subjectSelect(type);
         return succeed(subjectSelect);
     }