소스 검색

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

Eric 2 년 전
부모
커밋
712a894e67
36개의 변경된 파일827개의 추가작업 그리고 158개의 파일을 삭제
  1. 1 1
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/dal/dao/SysUserDao.java
  2. 3 3
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java
  3. 25 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java
  4. 22 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/VideoLessonController.java
  5. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetDao.java
  6. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VideoLessonGroupDao.java
  7. 0 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/TeacherApplyDetailReq.java
  8. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/TeacherMusicSheetAuditSearch.java
  9. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/VideoGroupSearch.java
  10. 28 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicSheetAuthRecord.java
  11. 26 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VideoLessonAuthRecord.java
  12. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VideoLessonGroup.java
  13. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetAccompanimentService.java
  14. 5 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetAuthRecordService.java
  15. 15 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java
  16. 2 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VideoLessonGroupDetailService.java
  17. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VideoLessonGroupService.java
  18. 12 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java
  19. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetAccompanimentServiceImpl.java
  20. 42 10
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetAuthRecordServiceImpl.java
  21. 74 35
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  22. 13 14
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherAuthEntryRecordServiceImpl.java
  23. 13 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonGroupDetailServiceImpl.java
  24. 58 20
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonGroupServiceImpl.java
  25. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/LiveCourseInfoVo.java
  26. 56 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicSheetDetailVo.java
  27. 22 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherMusicSheetVo.java
  28. 47 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonAuthGroup.java
  29. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonStudentVo.java
  30. 56 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml
  31. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherAuthEntryRecordMapper.xml
  32. 117 13
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupMapper.xml
  33. 19 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/MusicSheetController.java
  34. 0 12
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherAuthEntryRecordController.java
  35. 56 29
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/VideoLessonGroupController.java
  36. 18 0
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/MusicSheetController.java

+ 1 - 1
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/dal/dao/SysUserDao.java

@@ -173,5 +173,5 @@ public interface SysUserDao extends BaseDAO<Long, SysUser> {
 
     Integer getUnCompCourseNum(@Param("userId") Long userId);
 
-    void updateLockStatus(@Param("userId")Long userId, @Param("lockFlag") Integer lockFlag, @Param("SysUserType")  String sysUserType);
+    void updateLockStatus(@Param("userId")Long userId, @Param("lockFlag") Integer lockFlag, @Param("sysUserType")  String sysUserType);
 }

+ 3 - 3
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java

@@ -341,7 +341,7 @@ public class UserController extends BaseController {
     })
     @ApiOperation(value = "启用/冻结", notes = "传入lockFlag")
     public HttpResponseResult<Boolean> changeLock(@PathVariable("userId") Long userId
-            , @PathVariable("lockFlag") UserLockFlag lockFlag, @PathVariable("userType") SysUserType sysUserType) {
+            , @PathVariable("lockFlag") Integer lockFlag, @PathVariable("userType") SysUserType sysUserType) {
         if (userId == null || lockFlag == null || sysUserType == null) {
             return failed("参数校验异常");
         }
@@ -353,13 +353,13 @@ public class UserController extends BaseController {
             return failed("非法操作");
         }
         //退出对应用户
-        if (UserLockFlag.LOCKED.equals(lockFlag)) {
+        if (UserLockFlag.LOCKED.getCode().equals(lockFlag)) {
             loginOut(sysUser, sysUserType);
         }
         //sysUser.setLockFlag(lockFlag.getCode());
         //sysUser.setUpdateTime(new Date());
         //sysUserService.update(sysUser);
-        sysUserService.updateLockStatus(userId, lockFlag.getCode(), sysUserType.getCode());
+        sysUserService.updateLockStatus(userId, lockFlag, sysUserType.getCode());
         return succeed();
     }
 

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

@@ -17,6 +17,7 @@ import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
 import com.yonge.cooleshow.biz.dal.service.MusicTagService;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.base.page.QueryInfo;
 import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.common.controller.BaseController;
@@ -272,6 +273,30 @@ public class MusicSheetController extends BaseController {
     }
 
 
+    /**
+     * 审核中心-乐谱审核
+     */
+    @GetMapping(value = "/auditDetail/{authMusicSheetId}")
+    @ApiOperation(value = "审核中心-乐谱审核详情",  notes = "传入曲目审核id")
+    public HttpResponseResult<MusicSheetDetailVo> auditDetail(@PathVariable Long authMusicSheetId) {
+
+        return succeed(musicSheetService.auditDetail(authMusicSheetId));
+    }
+
+
+
+    /**
+     * 审核中心-乐谱审核记录列表
+     */
+    @GetMapping(value = "/auditDetailList/{authMusicSheetId}")
+    @ApiOperation(value = "审核中心-乐谱审核详情历史记录",  notes = "传入曲目审核id")
+    public HttpResponseResult<List<MusicSheetDetailVo>> auditDetailList(@PathVariable Long authMusicSheetId) {
+
+        return succeed(musicSheetService.auditDetailList(authMusicSheetId));
+    }
+
+
+
 
 
     @PostMapping(value = "/buySendMessage", consumes="application/json", produces="application/json")

+ 22 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/VideoLessonController.java

@@ -18,7 +18,9 @@ import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.validation.annotation.Validated;
@@ -106,6 +108,24 @@ public class VideoLessonController extends BaseController {
         return succeed(PageUtil.pageInfo(lessonGroupService.queryGroupList(PageUtil.getPage(search), search)));
     }
 
+    @ApiOperation(value = "审核-视频课组历史记录列表", httpMethod = "POST", consumes = "application/json", produces = "application/json")
+    @PostMapping(value = "/queryGroupHistoryList", consumes = "application/json", produces = "application/json")
+    public HttpResponseResult<PageInfo<VideoLessonAuthGroup>> queryGroupHistoryList(@RequestBody VideoGroupSearch search) {
+        return succeed(PageUtil.pageInfo(lessonGroupService.queryGroupHistoryList(PageUtil.getPage(search), search)));
+    }
+
+    /**
+     * @Description: 审核-根据视频课组id查视频课详情
+     * @Author: cy
+     * @Date: 2022/4/20
+     */
+    @ApiOperation(value = "审核-根据视频课组id查视频课详情")
+    @GetMapping("/authGroupDetil")
+    public HttpResponseResult<VideoLessonAuthGroup> authGroupDetil(
+            @ApiParam(value = "当前视频组id", required = true) @RequestParam(value = "videoGroupId") Long videoGroupId) {
+        return succeed(lessonGroupService.authGroupDetil(videoGroupId));
+    }
+
     /**
      * @Description: 审核-根据视频课组id查视频课详情
      * @Author: cy
@@ -119,6 +139,8 @@ public class VideoLessonController extends BaseController {
         return succeed(videoLessonGroupDetailService.list(queryWrapper));
     }
 
+
+
     /**
      * @Description: 审核-修改视频课组审核状态
      * @Author: cy

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

@@ -139,14 +139,27 @@ public interface MusicSheetDao extends BaseMapper<MusicSheet> {
 
     /**
      * 老师统计
+     *
      * @param userId
      * @return
      */
     List<TeacherTotalVo> queryTeacherTotal(@Param("userId") Long userId);
+
     /**
      * 学生统计
+     *
      * @param userId
      * @return
      */
     List<StudentTotalVo> queryStudentTotal(@Param("userId") Long userId);
+
+    /**
+     * 审核历史记录
+     *
+     * @param originalMusicSheetId 原曲目id
+     * @param authMusicSheetId     最新的审核曲目id
+     * @return
+     */
+    List<MusicSheetDetailVo> auditDetailList(@Param("originalMusicSheetId") Long originalMusicSheetId, @Param(
+            "authMusicSheetId") Long authMusicSheetId);
 }

+ 7 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VideoLessonGroupDao.java

@@ -44,6 +44,12 @@ public interface VideoLessonGroupDao extends BaseMapper<VideoLessonGroup> {
     //查询所有视频课组
     List<VideoLessonAuthGroup> queryGroupList(IPage<VideoLessonAuthGroup> page, @Param("param") VideoGroupSearch query);
 
+    List<VideoLessonAuthGroup> queryGroupHistoryList(IPage<VideoLessonAuthGroup> page, @Param("param") VideoGroupSearch query);
+
+    VideoLessonAuthGroup authGroupDetil(@Param("videoGroupId") Long videoGroupId);
+
+    VideoLessonAuthGroup lastAuthGroupDetil(@Param("videoGroupId")Long videoGroupId,@Param("groupId") Long groupId);
+
     //根据组id查详情
     VideoLessonGroup selectGroupById(Long groupId);
 
@@ -52,4 +58,5 @@ public interface VideoLessonGroupDao extends BaseMapper<VideoLessonGroup> {
 
     //查询付费人数前5的课程
     List<CountVideoGroupVo.VideoLesson> selectVideoLesson();
+
 }

+ 0 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/TeacherApplyDetailReq.java

@@ -58,7 +58,6 @@ public class TeacherApplyDetailReq implements Serializable {
     private String teacherCertificate;
 
     @ApiModelProperty("老师风采视频json 格式:[{'videoUrl':'视频地址','cover':'视频封面地址'},{'videoUrl':'视频地址','cover':'视频封面地址'}] ,将单引号替换为双引号")
-    @NotBlank(message = "至少要有一个老师风采视频")
     private String styleVideoJson;
 
     public Long getUserId() {

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

@@ -22,6 +22,9 @@ public class TeacherMusicSheetAuditSearch extends QueryInfo{
     @ApiModelProperty("老师编号/名称/电话")
     private String idAndName;
 
+    @ApiModelProperty("审核类型  0:新增 1:修改")
+    private Integer firstAuth;
+
 
     @ApiModelProperty("审批人")
     private String auditName;
@@ -45,6 +48,14 @@ public class TeacherMusicSheetAuditSearch extends QueryInfo{
     @ApiModelProperty(value = "假删除 0 : 未删除 1:已删除",hidden = true)
     private Boolean delFlag = false;
 
+    public Integer getFirstAuth() {
+        return firstAuth;
+    }
+
+    public void setFirstAuth(Integer firstAuth) {
+        this.firstAuth = firstAuth;
+    }
+
     public ChargeTypeEnum getChargeType() {
         return chargeType;
     }

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

@@ -39,6 +39,9 @@ public class VideoGroupSearch extends QueryInfo {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date endTime;
 
+    @ApiModelProperty(value = "历史记录所属视频组id")
+    private Long groupId;
+
     public String getSearch() {
         return search;
     }
@@ -94,4 +97,12 @@ public class VideoGroupSearch extends QueryInfo {
     public void setEndTime(Date endTime) {
         this.endTime = endTime;
     }
+
+    public Long getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(Long groupId) {
+        this.groupId = groupId;
+    }
 }

+ 28 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicSheetAuthRecord.java

@@ -26,6 +26,17 @@ public class MusicSheetAuthRecord implements Serializable {
     @ApiModelProperty("曲目id ")
 	@TableField(value = "music_sheet_id_")
     private Long musicSheetId;
+
+
+    @ApiModelProperty("原本的曲目id ")
+    @TableField(value = "original_music_sheet_id_")
+    private Long originalMusicSheetId;
+
+
+    @ApiModelProperty("第一次提交审核 ")
+    @TableField(value = "first_auth_")
+    private Integer firstAuth;
+
     @ApiModelProperty("审核状态 DOING:审核中;PASS:通过;UNPASS:未通过 ")
 	@TableField(value = "audit_state_")
     private AuthStatusEnum auditState;
@@ -44,7 +55,23 @@ public class MusicSheetAuthRecord implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date updateTime;
 
-	public Long getId() {
+    public Integer getFirstAuth() {
+        return firstAuth;
+    }
+
+    public void setFirstAuth(Integer firstAuth) {
+        this.firstAuth = firstAuth;
+    }
+
+    public Long getOriginalMusicSheetId() {
+        return originalMusicSheetId;
+    }
+
+    public void setOriginalMusicSheetId(Long originalMusicSheetId) {
+        this.originalMusicSheetId = originalMusicSheetId;
+    }
+
+    public Long getId() {
         return id;
     }
 

+ 26 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VideoLessonAuthRecord.java

@@ -3,6 +3,7 @@ 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.yonge.cooleshow.biz.dal.enums.AuthTypeEnum;
 import com.yonge.cooleshow.common.entity.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -20,9 +21,13 @@ public class VideoLessonAuthRecord extends BaseEntity {
     private Long id;
 
     @TableField("video_group_id_")
-    @ApiModelProperty(value = "视频课组id")
+    @ApiModelProperty(value = "当前视频课组id")
     private Long videoGroupId;
 
+    @TableField("group_id_")
+    @ApiModelProperty(value = "视频课组id")
+    private Long groupId;
+
     @TableField("audit_status_")
     @ApiModelProperty(value = "审核状态(DOING:待审核,PASS:通过,UNPASS:拒绝)")
     private String auditStatus;
@@ -35,6 +40,10 @@ public class VideoLessonAuthRecord extends BaseEntity {
     @ApiModelProperty(value = "审批人id")
     private Long auditId;
 
+    @TableField("auth_type_")
+    @ApiModelProperty(value = "认证审核类型 ADD 新增 MODIFY 修改")
+    private AuthTypeEnum authType;
+
     @TableField("remarks")
     @ApiModelProperty(value = "备注")
     private String remarks;
@@ -110,4 +119,20 @@ public class VideoLessonAuthRecord extends BaseEntity {
     public void setUpdateTime(Date updateTime) {
         this.updateTime = updateTime;
     }
+
+    public Long getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(Long groupId) {
+        this.groupId = groupId;
+    }
+
+    public AuthTypeEnum getAuthType() {
+        return authType;
+    }
+
+    public void setAuthType(AuthTypeEnum authType) {
+        this.authType = authType;
+    }
 }

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

@@ -126,6 +126,11 @@ public class VideoLessonGroup extends BaseEntity {
     @ApiModelProperty(value = "是否审核时可见 (0:否  1:是)")
     private YesOrNoEnum auditVersion = YesOrNoEnum.NO;
 
+    @TableField("history_flag_")
+    @ApiModelProperty(value = "是否历史数据 (0:否  1:是)")
+    private YesOrNoEnum historyFlag;
+
+
     public Long getId() {
         return id;
     }
@@ -309,4 +314,12 @@ public class VideoLessonGroup extends BaseEntity {
     public void setShelvesId(Long shelvesId) {
         this.shelvesId = shelvesId;
     }
+
+    public YesOrNoEnum getHistoryFlag() {
+        return historyFlag;
+    }
+
+    public void setHistoryFlag(YesOrNoEnum historyFlag) {
+        this.historyFlag = historyFlag;
+    }
 }

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

@@ -4,6 +4,8 @@ import com.yonge.cooleshow.biz.dal.dao.MusicSheetAccompanimentDao;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheetAccompaniment;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * MusicSheetAccompanimentService服务类
  * @author yzp
@@ -19,4 +21,6 @@ public interface MusicSheetAccompanimentService extends IService<MusicSheetAccom
      */
     void delByMusicSheetId(Long musicSheetId);
     MusicSheetAccompanimentDao getDao();
+
+    List<MusicSheetAccompaniment> getByMusicSheetId(Long musicSheetId);
 }

+ 5 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetAuthRecordService.java

@@ -3,7 +3,6 @@ package com.yonge.cooleshow.biz.dal.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.dto.req.TeacherMusicSheetAuditReq;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheetAuthRecord;
-import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 
 /**
  * 曲目审核表 服务类
@@ -19,14 +18,15 @@ public interface MusicSheetAuthRecordService extends IService<MusicSheetAuthReco
      * @param userId 用户id
      * @return boolean
      */
-    boolean audit(TeacherMusicSheetAuditReq param, Long userId);
+    Long audit(TeacherMusicSheetAuditReq param, Long userId);
 
     /**
      * 设置曲目审核中状态
-     *
-     * @param musicSheetId 曲目id
+     *  @param musicSheetId 曲目id
+     * @param originalMusicSheetId
+     * @param lastMusicSheetId
      */
-    void setAuditDoing(Long musicSheetId);
+    void setAuditDoing(Long musicSheetId, Long originalMusicSheetId, Long lastMusicSheetId);
 
     /**
      * 获取当前曲目审核理由

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

@@ -301,4 +301,19 @@ public interface MusicSheetService extends IService<MusicSheet> {
      * @return
      */
     Boolean updateMusicImg(String musicImg, Long musicSheetId);
+     /** 查询审核曲目信息
+     *
+     * @param authMusicSheetId 曲目审核id
+     * @return
+     */
+    MusicSheetDetailVo auditDetail(Long authMusicSheetId);
+
+    /**
+     *
+     * 审核历史记录
+     *
+     * @param authMusicSheetId 曲目审核id
+     * @return
+     */
+    List<MusicSheetDetailVo> auditDetailList(Long authMusicSheetId);
 }

+ 2 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VideoLessonGroupDetailService.java

@@ -5,10 +5,7 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.search.VideoLessonSearch;
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.yonge.cooleshow.biz.dal.vo.VideoLessonGroupDetailUpVo;
-import com.yonge.cooleshow.biz.dal.vo.VideoLessonGroupDetailVo;
-import com.yonge.cooleshow.biz.dal.vo.VideoLessonPurchaseStudent;
-import com.yonge.cooleshow.biz.dal.vo.VideoLessonStudentVo;
+import com.yonge.cooleshow.biz.dal.vo.*;
 
 import java.util.List;
 
@@ -30,4 +27,5 @@ public interface VideoLessonGroupDetailService extends IService<VideoLessonGroup
     void deleteDetail(Long id);
 
     VideoLessonStudentVo selectVideoLesson(Long groupId,Long userId);
+
 }

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

@@ -52,6 +52,10 @@ public interface VideoLessonGroupService extends IService<VideoLessonGroup> {
 
     IPage<VideoLessonAuthGroup> queryGroupList(IPage<VideoLessonAuthGroup> page, VideoGroupSearch query);
 
+    IPage<VideoLessonAuthGroup> queryGroupHistoryList(IPage<VideoLessonAuthGroup> page, VideoGroupSearch search);
+
+    VideoLessonAuthGroup authGroupDetil(Long videoGroupId);
+
     IPage<LessonGroupVo> selectLessonGroupById(IPage<LessonGroupVo> page, VideoLessonGroupSearch query);
 
     CountVideoGroupVo countVideoGroup();

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

@@ -97,6 +97,8 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
     @Autowired
     private UserAccountService userAccountService;
 
+    @Autowired
+    private TeacherService teacherService;
 
     @Override
     public CourseGroupDao getDao() {
@@ -140,19 +142,23 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         result.setMixStudentNum(group.getMixStudentNum());
         result.setImGroupId(group.getImGroupId());
         result.setAuditVersion(group.getAuditVersion());
-        SysUser teacher = getSysUser(group.getTeacherId());
-        if (teacher == null) {
+        SysUser teacherUser = getSysUser(group.getTeacherId());
+        if (teacherUser == null) {
             throw new BizException("用户不存在");
         }
-        if (sysUser.getId().equals(teacher.getId())) {
+        if (sysUser.getId().equals(teacherUser.getId())) {
             result.setMyself(true);
         } else {
             result.setMyself(false);
         }
+        Teacher teacher = teacherService.getById(teacherUser.getId());
 
-        result.setTeacherName(teacher.getRealName());
-        result.setUserName(teacher.getUsername());
-        result.setAvatar(teacher.getAvatar());
+        if (teacher != null) {
+            result.setTeacherTag(teacher.getTag());
+        }
+        result.setTeacherName(teacherUser.getRealName());
+        result.setUserName(teacherUser.getUsername());
+        result.setAvatar(teacherUser.getAvatar());
         Optional.ofNullable(group.getSubjectId()).map(subjectService::get)
                 .ifPresent(subject -> result.setSubjectName(subject.getName()));
         //课程组计划

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

@@ -9,6 +9,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.beans.factory.annotation.Autowired;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
+import java.util.List;
+
 /**
  * MusicSheetAccompanimentService服务实现类
  * @author yzp
@@ -29,6 +31,14 @@ public class MusicSheetAccompanimentServiceImpl extends ServiceImpl<MusicSheetAc
     }
 
     @Override
+    public List<MusicSheetAccompaniment> getByMusicSheetId(Long musicSheetId) {
+
+        return this.lambdaQuery()
+                .eq(MusicSheetAccompaniment::getMusicSheetId,musicSheetId)
+                .list();
+    }
+
+    @Override
     public void delByMusicSheetId(Long musicSheetId) {
         musicSheetAccompanimentDao.delByMusicSheetId(musicSheetId);
     }

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

@@ -6,7 +6,6 @@ import com.yonge.cooleshow.biz.dal.dto.req.TeacherMusicSheetAuditReq;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheetAuthRecord;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.service.MusicSheetAuthRecordService;
-import com.yonge.toolset.base.exception.BizException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -21,25 +20,51 @@ public class MusicSheetAuthRecordServiceImpl extends ServiceImpl<MusicSheetAuthR
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public boolean audit(TeacherMusicSheetAuditReq param, Long userId) {
+    public Long audit(TeacherMusicSheetAuditReq param, Long userId) {
 
-        // 删除审核中的状态
-        this.lambdaUpdate()
-                .eq(MusicSheetAuthRecord::getMusicSheetId,param.getMusicSheetId())
-                .eq(MusicSheetAuthRecord::getAuditState, AuthStatusEnum.DOING.getCode())
-                .remove();
+        // 查询到审核记录
+        List<MusicSheetAuthRecord> list = this.lambdaQuery()
+                                              .eq(MusicSheetAuthRecord::getMusicSheetId, param.getMusicSheetId())
+                                              .eq(MusicSheetAuthRecord::getAuditState, AuthStatusEnum.DOING.getCode())
+                                              .list();
 
         MusicSheetAuthRecord musicSheetAuthRecord = new MusicSheetAuthRecord();
+        if (!CollectionUtils.isEmpty(list)) {
+            musicSheetAuthRecord = list.get(0);
+        } else {
+            musicSheetAuthRecord.setCreateTime(new Date());
+        }
+
+        // 替换审核id
+        replaceAuthRecord(param, musicSheetAuthRecord);
         musicSheetAuthRecord.setMusicSheetId(param.getMusicSheetId());
-        musicSheetAuthRecord.setCreateTime(new Date());
         musicSheetAuthRecord.setAuditState(param.getAuthStatus());
         musicSheetAuthRecord.setReason(param.getRemark());
         musicSheetAuthRecord.setVerifyUserId(userId);
-        return this.saveOrUpdate(musicSheetAuthRecord);
+        musicSheetAuthRecord.setUpdateTime(new Date());
+        this.saveOrUpdate(musicSheetAuthRecord);
+        return musicSheetAuthRecord.getOriginalMusicSheetId();
+    }
+
+    private void replaceAuthRecord(TeacherMusicSheetAuditReq param, MusicSheetAuthRecord musicSheetAuthRecord) {
+        if (param.getAuthStatus().equals(AuthStatusEnum.PASS) && !musicSheetAuthRecord.getOriginalMusicSheetId().equals(
+                musicSheetAuthRecord.getMusicSheetId())) {
+            List<MusicSheetAuthRecord> musicSheetAuthRecords = this.lambdaQuery()
+                                                   .eq(MusicSheetAuthRecord::getMusicSheetId,
+                                                       musicSheetAuthRecord.getOriginalMusicSheetId())
+                                                   .list();
+            if (!CollectionUtils.isEmpty(musicSheetAuthRecords)) {
+                MusicSheetAuthRecord record = musicSheetAuthRecords.get(0);
+                record.setMusicSheetId(param.getMusicSheetId());
+                this.saveOrUpdate(record);
+            }
+
+            musicSheetAuthRecord.setMusicSheetId(musicSheetAuthRecord.getOriginalMusicSheetId());
+        }
     }
 
     @Override
-    public void setAuditDoing(Long musicSheetId) {
+    public void setAuditDoing(Long musicSheetId, Long originalMusicSheetId, Long lastMusicSheetId) {
         List<MusicSheetAuthRecord> list = this.lambdaQuery()
                                               .eq(MusicSheetAuthRecord::getMusicSheetId, musicSheetId)
                                               .eq(MusicSheetAuthRecord::getAuditState, AuthStatusEnum.DOING.getCode())
@@ -50,6 +75,13 @@ public class MusicSheetAuthRecordServiceImpl extends ServiceImpl<MusicSheetAuthR
         MusicSheetAuthRecord musicSheetAuthRecord = new MusicSheetAuthRecord();
         musicSheetAuthRecord.setMusicSheetId(musicSheetId);
         musicSheetAuthRecord.setAuditState(AuthStatusEnum.DOING);
+        if (originalMusicSheetId == null) {
+            originalMusicSheetId = musicSheetId;
+            musicSheetAuthRecord.setFirstAuth(0);
+        } else {
+            musicSheetAuthRecord.setFirstAuth(1);
+        }
+        musicSheetAuthRecord.setOriginalMusicSheetId(originalMusicSheetId);
         this.saveOrUpdate(musicSheetAuthRecord);
     }
 

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

@@ -112,7 +112,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     }
 
     @Transactional(rollbackFor = Exception.class)
-    public boolean saveMp3AndAccompaniment(MusicSheetDto musicSheetDto, Long userId) {
+    public boolean saveMp3AndAccompaniment(MusicSheetDto musicSheetDto, Long userId, Long originalMusicSheetId, Long lastMusicSheetId) {
         MusicSheet musicSheet = new MusicSheet();
         BeanUtils.copyProperties(musicSheetDto, musicSheet);
         //保存主表
@@ -122,7 +122,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         this.saveOrUpdate(musicSheet);
 
         if (musicSheet.getAuditStatus() == null || AuthStatusEnum.DOING.getCode().equals(musicSheet.getAuditStatus().getCode())) {
-            musicSheetAuthRecordService.setAuditDoing(musicSheet.getId());
+            musicSheetAuthRecordService.setAuditDoing(musicSheet.getId(), originalMusicSheetId, lastMusicSheetId);
         }
 
         Long sheetId = musicSheet.getId();
@@ -369,25 +369,26 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
             throw new BizException("曲目已经过审批");
         }
 
-        boolean flag = false;
-        if (musicSheetAuthRecordService.audit(param, userId)) {
-            musicSheet.setAuditStatus(param.getAuthStatus());
-            if (param.getAuthStatus().equals(AuthStatusEnum.PASS) && StringUtil.isEmpty(param.getMusicImg())) {
-                throw new BizException("曲目渲染失败");
-            } else if (param.getAuthStatus().equals(AuthStatusEnum.PASS) && !StringUtil.isEmpty(param.getMusicImg())) {
-                musicSheet.setMusicImg(param.getMusicImg());
-            }
-            musicSheet.setUpdateBy(userId);
-            musicSheet.setUpdateTime(new Date());
-            if (AuthStatusEnum.PASS.getCode().equals(param.getAuthStatus().getCode())) {
-                musicSheet.setState(YesOrNoEnum.YES);
-
-                // 修改老师标签
-                teacherService.setTeacherTag(musicSheet.getUserId(), TeacherTagEnum.MUSIC);
+        boolean flag;
+        Long originalMusicSheetId = musicSheetAuthRecordService.audit(param, userId);
+        musicSheet.setAuditStatus(param.getAuthStatus());
+        if (param.getAuthStatus().equals(AuthStatusEnum.PASS) && StringUtil.isEmpty(param.getMusicImg())) {
+            throw new BizException("曲目渲染失败");
+        } else if (param.getAuthStatus().equals(AuthStatusEnum.PASS) && !StringUtil.isEmpty(param.getMusicImg())) {
+            musicSheet.setMusicImg(param.getMusicImg());
+        }
+        musicSheet.setUpdateBy(userId);
+        musicSheet.setUpdateTime(new Date());
+        if (AuthStatusEnum.PASS.getCode().equals(param.getAuthStatus().getCode())) {
+            musicSheet.setState(YesOrNoEnum.YES);
+            // 替换曲目id
+            replaceMusicSheet(param, musicSheet, originalMusicSheetId);
+            // 修改老师标签
+            teacherService.setTeacherTag(musicSheet.getUserId(), TeacherTagEnum.MUSIC);
 
-            }
-            flag = this.updateById(musicSheet);
         }
+        flag = this.updateById(musicSheet);
+
 
         // 发送审核通知
         Map<Long, String> receivers = new HashMap<>();
@@ -402,6 +403,29 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         return flag;
     }
 
+    private void replaceMusicSheet(TeacherMusicSheetAuditReq param, MusicSheet musicSheet, Long originalMusicSheetId) {
+        if (!musicSheet.getId().equals(originalMusicSheetId)) {
+            musicSheet.setId(originalMusicSheetId);
+            MusicSheet originalMusicSheet = getById(originalMusicSheetId);
+            originalMusicSheet.setId(param.getMusicSheetId());
+            this.saveOrUpdate(originalMusicSheet);
+
+            // 替换 伴奏
+            List<MusicSheetAccompaniment> musicSheetAccompanimentList = musicSheetAccompanimentService.getByMusicSheetId(
+                                                                                                              musicSheet.getId()).stream()
+                                                                                                      .peek(musicSheetAccompaniment -> musicSheetAccompaniment.setMusicSheetId(
+                                                                                                              originalMusicSheetId))
+                                                                                                      .collect(Collectors.toList());
+            List<MusicSheetAccompaniment> originalMusicSheetAccompanimentList = musicSheetAccompanimentService.getByMusicSheetId(
+                                                                                                                      originalMusicSheetId).stream()
+                                                                                                              .peek(musicSheetAccompaniment -> musicSheetAccompaniment.setMusicSheetId(
+                                                                                                                      musicSheet.getId()))
+                                                                                                              .collect(Collectors.toList());
+            musicSheetAccompanimentList.addAll(originalMusicSheetAccompanimentList);
+            musicSheetAccompanimentService.saveOrUpdateBatch(musicSheetAccompanimentList);
+        }
+    }
+
     // 发送曲目审核消息
     private void sendMusicSheetAuditMessage(TeacherMusicSheetAuditReq param, MusicSheet musicSheet, Map<Long, String> receivers) {
         if (AuthStatusEnum.PASS.getCode().equals(param.getAuthStatus().getCode())) {
@@ -442,31 +466,30 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     public boolean saveMusicSheet(MusicSheetDto musicSheetDto, Long userId) {
 
         MusicSheet oldMusicSheet = null;
+        Long originalMusicSheetId = null;
+        Long lastMusicSheetId = musicSheetDto.getId();
         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);
+            if (oldMusicSheet != null && !AuthStatusEnum.DOING.equals(oldMusicSheet.getAuditStatus())) {
                 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();
+                this.saveOrUpdate(oldMusicSheet);
+                List<MusicSheetAuthRecord> list = musicSheetAuthRecordService.lambdaQuery()
+                                                                             .eq(MusicSheetAuthRecord::getMusicSheetId,
+                                                                                 musicSheetDto.getId())
+                                                                             .list();
+                if (!CollectionUtils.isEmpty(list)) {
+                    originalMusicSheetId = list.get(0).getOriginalMusicSheetId();
+                }
+                musicSheetDto.setId(null);
             }
 
         }
 
-        if (musicSheetDto.getId() != null) {
+        if (musicSheetDto.getId() != null && musicSheetDto.getSourceType().equals(SourceTypeEnum.PLATFORM)) {
             musicSheetAccompanimentService.delByMusicSheetId(musicSheetDto.getId());
         }
 
@@ -485,7 +508,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
             if (CollectionUtils.isEmpty(list)) {
                 throw new BizException("mp3音频文件对应的主音或者伴奏文件没有提供");
             }
-            return saveMp3AndAccompaniment(musicSheetDto, userId);
+            return saveMp3AndAccompaniment(musicSheetDto, userId,originalMusicSheetId,lastMusicSheetId);
         } else {
             MusicSheet musicSheet = new MusicSheet();
             BeanUtils.copyProperties(musicSheetDto, musicSheet);
@@ -494,7 +517,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
             musicSheet.setState(YesOrNoEnum.NO);
             this.saveOrUpdate(musicSheet);
             if (musicSheet.getAuditStatus() == null || AuthStatusEnum.DOING.getCode().equals(musicSheet.getAuditStatus().getCode())) {
-                musicSheetAuthRecordService.setAuditDoing(musicSheet.getId());
+                musicSheetAuthRecordService.setAuditDoing(musicSheet.getId(),originalMusicSheetId,lastMusicSheetId);
             }
 
             return true;
@@ -1012,6 +1035,22 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
 
         return true;
     }
+    public MusicSheetDetailVo auditDetail(Long authMusicSheetId) {
+
+        MusicSheetAuthRecord musicSheetAuthRecord = musicSheetAuthRecordService.getById(authMusicSheetId);
+        MusicSheetDetailVo detail = detail(musicSheetAuthRecord.getMusicSheetId(), null, null);
+        List<MusicSheetDetailVo> musicSheetDetailVos = auditDetailList(authMusicSheetId);
+        if (!CollectionUtils.isEmpty(musicSheetDetailVos)) {
+            detail.setLastMusicSheet(musicSheetDetailVos.get(0));
+        }
+        return detail;
+    }
+
+    @Override
+    public List<MusicSheetDetailVo> auditDetailList(Long authMusicSheetId) {
+        MusicSheetAuthRecord musicSheetAuthRecord = musicSheetAuthRecordService.getById(authMusicSheetId);
+        return baseMapper.auditDetailList(musicSheetAuthRecord.getOriginalMusicSheetId(),authMusicSheetId);
+    }
 
     private SysUser getSysUser(Long userId) {
         return Optional.ofNullable(userId)

+ 13 - 14
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherAuthEntryRecordServiceImpl.java

@@ -59,7 +59,7 @@ public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEn
     public TeacherAuthEntryRecordVo detail(Long id) {
         TeacherAuthEntryRecordVo detail = baseMapper.detail(id);
         //查询上一次的提交
-        TeacherAuthEntryRecordVo lastDetil = baseMapper.lastDetil(id,detail.getUserId());
+        TeacherAuthEntryRecordVo lastDetil = baseMapper.lastDetil(id, detail.getUserId());
         detail.setLastDetil(lastDetil);
         return detail;
     }
@@ -111,11 +111,13 @@ public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEn
                 saveStyleVideo(styleVideoJson, build.getUserId(), sysUser.getId());
 
                 //记录达人认证时间
-                userFirstTimeService.recordTime(build.getUserId(),ClientEnum.TEACHER, UserFirstTimeTypeEnum.ENTRY);
+                userFirstTimeService.recordTime(build.getUserId(), ClientEnum.TEACHER, UserFirstTimeTypeEnum.ENTRY);
 
                 setTag(authOperaReq, build, teacher);
             }
-            teacher.setEntryFlag(authOperaReq.getPass() ? YesOrNoEnum.YES : YesOrNoEnum.NO);
+            if (null == teacher.getEntryFlag() || YesOrNoEnum.NO.equals(teacher.getEntryFlag())) {
+                teacher.setEntryFlag(authOperaReq.getPass() ? YesOrNoEnum.YES : YesOrNoEnum.NO);
+            }
             teacher.setEntryAuthDate(new Date());
             teacher.setUpdateTime(new Date());
 
@@ -136,8 +138,8 @@ public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEn
                 teacherService.setTeacherTag(build.getUserId(), TeacherTagEnum.TEACHER);
             } else if (!StringUtil.isEmpty(teacher.getTag())) {
                 teacher.setTag(Arrays.stream(teacher.getTag().split(","))
-                                     .filter(s -> !s.equals("TEACHER"))
-                                     .collect(Collectors.joining(",")));
+                        .filter(s -> !s.equals("TEACHER"))
+                        .collect(Collectors.joining(",")));
             }
         }
         if (authOperaReq.getPass()) {
@@ -145,8 +147,8 @@ public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEn
                 teacherService.setTeacherTag(build.getUserId(), TeacherTagEnum.DEGREE);
             } else if (!StringUtil.isEmpty(teacher.getTag())) {
                 teacher.setTag(Arrays.stream(teacher.getTag().split(","))
-                                     .filter(s -> !s.equals("DEGREE"))
-                                     .collect(Collectors.joining(",")));
+                        .filter(s -> !s.equals("DEGREE"))
+                        .collect(Collectors.joining(",")));
             }
         }
     }
@@ -174,7 +176,9 @@ public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEn
                 video.setEntryFlag(YesOrNoEnum.YES);
                 batchVideoList.add(video);
             }
-            teacherStyleVideoService.batchAddStyleVideo(batchVideoList);
+            if (!CollectionUtils.isEmpty(batchVideoList)) {
+                teacherStyleVideoService.batchAddStyleVideo(batchVideoList);
+            }
         }
     }
 
@@ -222,11 +226,6 @@ public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEn
         if (hasApply(sysUser.getId())) {
             return HttpResponseResult.failed("已经提交过申请");
         }
-        //判断用户是否已经通过申请
-        Teacher teacher = teacherDao.selectById(sysUser.getId());
-        if (YesOrNoEnum.YES.equals(teacher.getEntryFlag())) {
-            return HttpResponseResult.failed("已经通过审批");
-        }
 
         //新增申请记录
         TeacherAuthEntryRecord teacherAuthEntryRecord = new TeacherAuthEntryRecord();
@@ -236,7 +235,7 @@ public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEn
 
         List<TeacherAuthEntryRecord> olds = baseMapper.selectList(Wrappers.<TeacherAuthEntryRecord>query().lambda()
                 .eq(TeacherAuthEntryRecord::getUserId, sysUser.getId()));
-        if(CollectionUtils.isEmpty(olds)){
+        if (CollectionUtils.isEmpty(olds)) {
             teacherAuthEntryRecord.setTeacherAuthType(AuthTypeEnum.ADD);
         }
         return HttpResponseResult.status(baseMapper.insert(teacherAuthEntryRecord) > 0);

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

@@ -9,6 +9,7 @@ import com.yonge.cooleshow.biz.dal.dao.VideoLessonPurchaseRecordDao;
 import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.VideoLessonGroupSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.VideoLessonSearch;
+import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroup;
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail;
 import com.yonge.cooleshow.biz.dal.dao.VideoLessonGroupDetailDao;
@@ -17,6 +18,7 @@ import com.yonge.cooleshow.biz.dal.entity.VideoLessonPurchaseRecord;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
+import com.yonge.cooleshow.biz.dal.service.TeacherService;
 import com.yonge.cooleshow.biz.dal.service.UserOrderService;
 import com.yonge.cooleshow.biz.dal.service.VideoLessonGroupDetailService;
 import com.yonge.cooleshow.biz.dal.vo.*;
@@ -51,6 +53,9 @@ public class VideoLessonGroupDetailServiceImpl extends ServiceImpl<VideoLessonGr
     @Autowired
     private UserOrderService orderService;
 
+    @Autowired
+    private TeacherService teacherService;
+
     public VideoLessonGroupDetailDao getDao() {
         return videoLessonGroupDetailDao;
     }
@@ -168,7 +173,14 @@ public class VideoLessonGroupDetailServiceImpl extends ServiceImpl<VideoLessonGr
         if (lessonGroup.isEmpty()){
             return lessonStudentVo;
         }
-        lessonStudentVo.setLessonGroup(lessonGroup.get(0));
+        VideoLessonGroupVo videoLessonGroupVo = lessonGroup.get(0);
+
+        Teacher teacher = teacherService.getById(videoLessonGroupVo.getTeacherId());
+        if (teacher != null) {
+            lessonStudentVo.setTeacherTag(teacher.getTag());
+        }
+
+        lessonStudentVo.setLessonGroup(videoLessonGroupVo);
 
         VideoLessonSearch search = new VideoLessonSearch();
         search.setVideoLessonGroupId(groupId);

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

@@ -15,11 +15,8 @@ import com.yonge.cooleshow.biz.dal.dto.search.VideoGroupSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.VideoLessonGroupSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.VideoLessonSearch;
 import com.yonge.cooleshow.biz.dal.entity.*;
-import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
-import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
-import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.service.SysConfigService;
-import com.yonge.cooleshow.biz.dal.enums.TeacherTagEnum;
 import com.yonge.cooleshow.biz.dal.service.SysMessageService;
 import com.yonge.cooleshow.biz.dal.service.TeacherService;
 import com.yonge.cooleshow.biz.dal.service.VideoLessonGroupService;
@@ -254,7 +251,9 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
         //记录video_lesson_auth_record
         VideoLessonAuthRecord record = new VideoLessonAuthRecord();
         record.setVideoGroupId(lessonGroup.getId());
+        record.setGroupId(lessonGroup.getId());
         record.setAuditStatus(AuthStatusEnum.DOING.getCode());
+        record.setAuthType(AuthTypeEnum.ADD);
         recordDao.insert(record);
     }
 
@@ -326,25 +325,40 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
     public void update(VideoLessonVo lessonVo, SysUser sysUser) {
         VideoLessonGroup lessonGroup = lessonVo.getLessonGroup();
         List<VideoLessonGroupDetail> lessonList = lessonVo.getLessonList();
+        //判断是否有正在审核中
+        List<VideoLessonAuthRecord> videoLessonAuthRecords = recordDao.selectList(Wrappers.<VideoLessonAuthRecord>lambdaQuery()
+                .eq(VideoLessonAuthRecord::getGroupId, lessonGroup.getId())
+                .eq(VideoLessonAuthRecord::getAuditStatus, AuthStatusEnum.DOING.getCode()));
+        if(CollectionUtils.isNotEmpty(videoLessonAuthRecords)){
+            return;
+        }
 
-        //查询原评审信息
-        List<VideoLessonAuthRecord> recordList = recordDao.selectList(Wrappers.<VideoLessonAuthRecord>lambdaQuery().eq(VideoLessonAuthRecord::getVideoGroupId, lessonGroup.getId()));
-        List<Long> recoreIds = recordList.stream().map(VideoLessonAuthRecord::getId).collect(Collectors.toList());
+        //校验声部
+        Long subjectId = Long.valueOf(lessonGroup.getLessonSubject());
+        List<Subject> subjectList = teacherDao.querySubject(sysUser.getId());
+        List<Long> longList = subjectList.stream().map(Subject::getId).collect(Collectors.toList());
+        if (!longList.contains(subjectId)) {
+            throw new BizException("该声部无法选择");
+        }
 
-        //清除原有组&课
-        videoLessonGroupDao.deleteById(lessonGroup.getId());
-        videoLessonGroupDetailDao.deleteByGroupId(lessonGroup.getId());
+        //创建新的评审记录
+        VideoLessonAuthRecord authRecord = new VideoLessonAuthRecord();
+        authRecord.setGroupId(lessonGroup.getId());
 
-        //添加组
+        //创建新的课程组记录
         lessonGroup.setTeacherId(sysUser.getId());
+        lessonGroup.setAuditVersion(YesOrNoEnum.NO);
+        lessonGroup.setHistoryFlag(YesOrNoEnum.YES);
+        lessonGroup.setAuditStatus(AuthStatusEnum.DOING);
+        lessonGroup.setId(null);
         videoLessonGroupDao.insert(lessonGroup);
+        authRecord.setVideoGroupId(lessonGroup.getId());
 
         for (VideoLessonGroupDetail detail : lessonList) {
+            detail.setId(null);
             detail.setVideoLessonGroupId(lessonGroup.getId());
             detail.setTeacherId(sysUser.getId());
         }
-
-        //添加课程
         videoLessonGroupDetailDao.insertVideoLesson(lessonList);
 
         //刷新统计
@@ -352,14 +366,11 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
         groupUpVo.setId(lessonGroup.getId());
         videoLessonGroupDao.updateGroup(groupUpVo);
 
-        //更新历史记录的组id
-        recordDao.updateIds(recoreIds, lessonGroup.getId());
+        //提交审核
+        authRecord.setAuditStatus(AuthStatusEnum.DOING.getCode());
+        authRecord.setAuthType(AuthTypeEnum.MODIFY);
 
-        //重新提审
-        VideoLessonAuthRecord record = new VideoLessonAuthRecord();
-        record.setVideoGroupId(lessonGroup.getId());
-        record.setAuditStatus(AuthStatusEnum.DOING.getCode());
-        recordDao.insert(record);
+        recordDao.insert(authRecord);
     }
 
     /**
@@ -392,6 +403,33 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
         return page.setRecords(baseMapper.queryGroupList(page, query));
     }
 
+    @Override
+    public IPage<VideoLessonAuthGroup> queryGroupHistoryList(IPage<VideoLessonAuthGroup> page, VideoGroupSearch query) {
+        return page.setRecords(baseMapper.queryGroupHistoryList(page, query));
+    }
+
+    @Override
+    public VideoLessonAuthGroup authGroupDetil(Long videoGroupId) {
+        VideoLessonAuthGroup videoLessonAuthGroup = baseMapper.authGroupDetil(videoGroupId);
+
+        List<VideoLessonGroupDetail> details = videoLessonGroupDetailDao.selectList(Wrappers.<VideoLessonGroupDetail>lambdaQuery()
+                .eq(VideoLessonGroupDetail::getVideoLessonGroupId, videoGroupId));
+        videoLessonAuthGroup.setVideoList(details);
+
+        //查询上一次的提交
+        VideoLessonAuthGroup lastDetil = baseMapper.lastAuthGroupDetil(
+                videoGroupId, videoLessonAuthGroup.getGroupId());
+
+        if(null != lastDetil){
+            List<VideoLessonGroupDetail> lastDetails = videoLessonGroupDetailDao.selectList(Wrappers.<VideoLessonGroupDetail>lambdaQuery()
+                    .eq(VideoLessonGroupDetail::getVideoLessonGroupId, lastDetil.getVideoGroupId()));
+            lastDetil.setVideoList(lastDetails);
+
+            videoLessonAuthGroup.setLastDetil(lastDetil);
+        }
+        return videoLessonAuthGroup;
+    }
+
     /**
      * @Description: 学生端-我的-我的课程-购买的视频课组
      * @Author: cy

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

@@ -29,6 +29,18 @@ public class LiveCourseInfoVo extends CourseGroupVo implements Serializable {
     @ApiModelProperty(value = "是否审核时可见 (0:否  1:是)")
     private YesOrNoEnum auditVersion = YesOrNoEnum.NO;
 
+    @ApiModelProperty("老师标签")
+    private String teacherTag;
+
+    public String getTeacherTag() {
+        return teacherTag;
+    }
+
+    public void setTeacherTag(String teacherTag) {
+        this.teacherTag = teacherTag;
+    }
+
+
     public YesOrNoEnum getAuditVersion() {
         return auditVersion;
     }

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

@@ -6,6 +6,7 @@ import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -49,6 +50,61 @@ public class MusicSheetDetailVo extends MusicSheet {
     @ApiModelProperty("审核理由")
     private String reason;
 
+    @ApiModelProperty("上一次审核的曲目信息")
+    private MusicSheetDetailVo lastMusicSheet;
+
+    @ApiModelProperty("真实姓名")
+    private String realName;
+
+    @ApiModelProperty("审核时间")
+    private Date auditTime;
+
+    @ApiModelProperty("审核人")
+    private String  auditName;
+
+    @ApiModelProperty("审核理由")
+    private String auditReason;
+
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
+    public Date getAuditTime() {
+        return auditTime;
+    }
+
+    public void setAuditTime(Date auditTime) {
+        this.auditTime = auditTime;
+    }
+
+    public String getAuditName() {
+        return auditName;
+    }
+
+    public void setAuditName(String auditName) {
+        this.auditName = auditName;
+    }
+
+    public String getAuditReason() {
+        return auditReason;
+    }
+
+    public void setAuditReason(String auditReason) {
+        this.auditReason = auditReason;
+    }
+
+    public MusicSheetDetailVo getLastMusicSheet() {
+        return lastMusicSheet;
+    }
+
+    public void setLastMusicSheet(MusicSheetDetailVo lastMusicSheet) {
+        this.lastMusicSheet = lastMusicSheet;
+    }
+
     public Integer getAiDefaultFrequency() {
         return aiDefaultFrequency;
     }

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

@@ -15,6 +15,12 @@ import java.util.Date;
  */
 public class TeacherMusicSheetVo {
 
+    @ApiModelProperty("曲目审核id")
+    private Long authMusicSheetId;
+
+    @ApiModelProperty("0:新增,1:修改")
+    private Integer authType;
+
     @ApiModelProperty("老师编号ID")
     private Long teacherId;
 
@@ -63,6 +69,22 @@ public class TeacherMusicSheetVo {
     @ApiModelProperty("审批人姓名")
     private String auditName;
 
+    public Integer getAuthType() {
+        return authType;
+    }
+
+    public void setAuthType(Integer authType) {
+        this.authType = authType;
+    }
+
+    public Long getAuthMusicSheetId() {
+        return authMusicSheetId;
+    }
+
+    public void setAuthMusicSheetId(Long authMusicSheetId) {
+        this.authMusicSheetId = authMusicSheetId;
+    }
+
     public AccompanimentTypeEnum getAccompanimentType() {
         return accompanimentType;
     }

+ 47 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonAuthGroup.java

@@ -1,9 +1,12 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroup;
+import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.util.List;
+
 /**
  * @Author: cy
  * @Date: 2022/4/20
@@ -13,6 +16,12 @@ public class VideoLessonAuthGroup extends VideoLessonGroup {
     @ApiModelProperty(value = "老师姓名")
     private String teacherName;
 
+    @ApiModelProperty(value = "当前视频组id")
+    private Long videoGroupId;
+
+    @ApiModelProperty(value = "历史记录所属视频组id")
+    private Long groupId;
+
     private String realName;
 
     @ApiModelProperty(value = "老师手机号")
@@ -24,6 +33,12 @@ public class VideoLessonAuthGroup extends VideoLessonGroup {
     @ApiModelProperty("审核理由")
     private String remarks;
 
+    @ApiModelProperty("视频集合")
+    private List<VideoLessonGroupDetail> videoList;
+
+    @ApiModelProperty("上一次的审核对象")
+    private VideoLessonAuthGroup lastDetil;
+
     public String getRemarks() {
         return remarks;
     }
@@ -63,4 +78,36 @@ public class VideoLessonAuthGroup extends VideoLessonGroup {
     public void setSubjectName(String subjectName) {
         this.subjectName = subjectName;
     }
+
+    public Long getVideoGroupId() {
+        return videoGroupId;
+    }
+
+    public void setVideoGroupId(Long videoGroupId) {
+        this.videoGroupId = videoGroupId;
+    }
+
+    public Long getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(Long groupId) {
+        this.groupId = groupId;
+    }
+
+    public List<VideoLessonGroupDetail> getVideoList() {
+        return videoList;
+    }
+
+    public void setVideoList(List<VideoLessonGroupDetail> videoList) {
+        this.videoList = videoList;
+    }
+
+    public VideoLessonAuthGroup getLastDetil() {
+        return lastDetil;
+    }
+
+    public void setLastDetil(VideoLessonAuthGroup lastDetil) {
+        this.lastDetil = lastDetil;
+    }
 }

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonStudentVo.java

@@ -23,6 +23,17 @@ public class VideoLessonStudentVo extends BaseEntity {
     @ApiModelProperty(value = "true 自己的课,false 其他老师的课程")
     private Boolean myself;
 
+    @ApiModelProperty("老师标签")
+    private String teacherTag;
+
+    public String getTeacherTag() {
+        return teacherTag;
+    }
+
+    public void setTeacherTag(String teacherTag) {
+        this.teacherTag = teacherTag;
+    }
+
     public Boolean getMyself() {
         return myself;
     }

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

@@ -239,7 +239,7 @@
         <result column="canEvaluate" jdbcType="TINYINT" property="canEvaluate"/>
         <result column="showFingering" jdbcType="TINYINT" property="showFingering"/>
         <result column="chargeType" jdbcType="TINYINT" property="chargeType"/>
-        <result column="auditStatus" jdbcType="TINYINT" property="auditStatus"/>
+        <result column="auditStatus" property="auditStatus"/>
         <result column="state" jdbcType="TINYINT" property="state"/>
         <result column="sortNumber" jdbcType="INTEGER" property="sortNumber"/>
         <result column="topFlag" jdbcType="TINYINT" property="topFlag"/>
@@ -267,6 +267,10 @@
         <result column="accompanimentType" jdbcType="VARCHAR" property="accompanimentType"/>
         <result column="notation" jdbcType="VARCHAR" property="notation"/>
         <result column="musicImg" jdbcType="VARCHAR" property="musicImg"/>
+        <result column="realName" jdbcType="VARCHAR" property="realName"/>
+        <result column="auditTime" jdbcType="VARCHAR" property="auditTime"/>
+        <result column="auditName" jdbcType="VARCHAR" property="auditName"/>
+        <result column="auditReason" jdbcType="VARCHAR" property="auditReason"/>
         <result column="aiDefaultFrequency" jdbcType="VARCHAR" property="aiDefaultFrequency"/>
         <collection property="background" ofType="com.yonge.cooleshow.biz.dal.entity.MusicSheetAccompaniment">
             <id column="accompanimentId" jdbcType="BIGINT" property="id"/>
@@ -486,6 +490,7 @@
 
     <select id="selectAuditPage" resultType="com.yonge.cooleshow.biz.dal.vo.TeacherMusicSheetVo">
         select
+        msar.id_ as authMusicSheetId,
         ms.create_by_ as teacherId
         ,ms.title_img_ as titleImg
         ,ms.accompaniment_type_ as accompanimentType
@@ -530,6 +535,9 @@
             <if test="param.chargeType != null">
                 and ms.charge_type_ = #{param.chargeType}
             </if>
+            <if test="param.firstAuth != null">
+                and msar.first_auth_ = #{param.firstAuth}
+            </if>
         </where>
         order by field(ms.audit_status_,'DOING') desc,  ms.submit_audit_time_ desc
     </select>
@@ -636,4 +644,51 @@
             </if>
         </where>
     </select>
+
+    <select id="auditDetailList" resultMap="DetailResultMap">
+        SELECT
+        <include refid="Base_Column_List"/>
+        ,t.url_ as url
+        ,t.midi_url_ as midiUrl
+        ,t.metronome_url_ as metronomeUrl
+        ,msa.id_ as accompanimentId
+        ,msa.music_sheet_id_ as accompanimentMusicSheetId
+        ,msa.music_subject_ as accompanimentMusicSubject
+        ,msa.audio_file_url_ as accompanimentAudioFileUrl
+        ,msa.sort_number_ as accompanimentSortNumber
+        ,msa.create_time_ as accompanimentCreateTime
+        ,msa.metronome_url_ as accompanimentMetronomeUrl
+        ,msa.track_ as track
+        ,su.username_ as userName
+        ,su.avatar_ as userAvatar
+        ,(
+        select group_concat(mt.name_) from music_tag mt
+        where find_in_set(mt.id_,t.music_tag_)
+        and mt.del_flag_ = 0  and mt.state_ = 1
+        ) as musicTagNames
+        ,s2.name_ as subjectNames
+        ,s2.code_ as code
+        ,s2.ai_default_frequency_ as aiDefaultFrequency
+
+        ,su.real_name_ as realName
+        ,msar.update_time_ as auditTime
+        ,su2.username_ as auditName
+        ,msar.reason_ as auditReason
+        from music_sheet_auth_record  msar
+        left join  music_sheet t on t.id_ = msar.music_sheet_id_
+        left join sys_user su on su.id_ = t.create_by_
+        left join sys_user su2 on msar.verify_user_id_ = su2.id_
+        left join music_sheet_accompaniment msa on msa.music_sheet_id_ = t.id_
+        left join subject s2 on t.music_subject_ = s2.id_
+        <where>
+            <if test="originalMusicSheetId != null">
+                and #{originalMusicSheetId} = msar.original_music_sheet_id_
+            </if>
+            <if test="authMusicSheetId != null">
+                and #{authMusicSheetId} != msar.id_
+            </if>
+        </where>
+
+        order by msar.id_ desc
+    </select>
 </mapper>

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

@@ -146,7 +146,7 @@
         left join sys_user u on t.user_id_ = u.id_
         left join sys_user v on t.verify_user_id_ = v.id_
         <where>
-            u.del_flag_ = 0
+            u.del_flag_ = 0 and t.teacher_auth_status_ != 'DOING'
             <if test="null != param.search and '' != param.search">
                 AND (
                 t.user_id_ LIKE CONCAT('%', #{param.search}, '%') or

+ 117 - 13
cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupMapper.xml

@@ -24,6 +24,7 @@
 		<result column="audit_name_" jdbcType="VARCHAR" property="auditName" />
 		<result column="create_time_" jdbcType="TIMESTAMP" property="createTime" />
 		<result column="update_time_" jdbcType="TIMESTAMP" property="updateTime" />
+		<result column="history_flag_" property="historyFlag" />
 	</resultMap>
 
 	<sql id="baseColumns">
@@ -49,6 +50,7 @@
 		g.update_time_ AS updateTime,
 		g.audit_id_ AS auditId,
 		g.audit_name_ AS auditName,
+		g.history_flag_ AS historyFlag,
 	</sql>
 	<sql id="recordColumns">
 		g.id_ AS id,
@@ -70,6 +72,7 @@
 		g.update_time_ AS updateTime,
 		g.audit_id_ AS auditId,
 		g.audit_name_ AS auditName,
+		g.history_flag_ AS historyFlag,
 	</sql>
 
 	<update id="updateGroup" parameterType="com.yonge.cooleshow.biz.dal.vo.VideoLessonGroupUpVo">
@@ -125,6 +128,7 @@
 		LEFT JOIN sys_user s ON g.teacher_id_ = s.id_
 		LEFT JOIN `subject` b ON g.lesson_subject_=b.id_
 		<where>
+		    and g.history_flag_ = 0
 			<if test="param.shelvesFlag !=null">
 				AND g.shelves_flag_ = #{param.shelvesFlag}
 			</if>
@@ -168,6 +172,7 @@
 		LEFT JOIN sys_user s ON g.teacher_id_ = s.id_
 		LEFT JOIN subject j ON g.lesson_subject_ = j.id_
 		<where>
+			AND g.history_flag_ = 0
 			<if test="param.userId !=null">
 				AND p.student_id_ = #{param.userId}
 			</if>
@@ -214,6 +219,7 @@
 		FROM video_lesson_group g
 		LEFT JOIN subject j ON g.lesson_subject_ = j.id_
 		<where>
+			AND g.history_flag_ = 0
 			<if test="param.userId !=null">
 				AND g.teacher_id_ = #{param.userId}
 			</if>
@@ -287,7 +293,7 @@
 		LEFT JOIN sys_user u ON g.teacher_id_=u.id_
 		LEFT JOIN `subject` s ON g.lesson_subject_ = s.id_
 		<where>
-		    u.del_flag_ = 0
+			AND g.history_flag_ = 0 and u.del_flag_ = 0
 			<if test="null != param.search and '' != param.search">
 				AND (
 				u.username_ LIKE CONCAT('%', #{param.search}, '%') OR
@@ -318,18 +324,77 @@
 	</select>
 	<select id="queryGroupList" resultType="com.yonge.cooleshow.biz.dal.vo.VideoLessonAuthGroup">
 		SELECT
-		<include refid="recordColumns"/>
-		r.audit_status_ AS auditStatus,
-		r.remarks as remarks,
-		s.name_ AS subjectName,
-		t.username_ AS teacherName,
-		t.real_name_ AS realName,
-		t.phone_ AS teacherPhone
-		FROM video_lesson_group g
+			<include refid="recordColumns"/>
+			r.video_group_id_ as videoGroupId,
+			r.group_id_ as groupId,
+			r.audit_status_ AS auditStatus,
+			r.remarks as remarks,
+			s.name_ AS subjectName,
+			t.username_ AS teacherName,
+			t.real_name_ AS realName,
+			t.phone_ AS teacherPhone
+		FROM (
+			select group_id_,max(id_) as id_ from video_lesson_auth_record group by group_id_
+		) a
+		LEFT JOIN video_lesson_auth_record r ON a.id_ = r.id_
+		LEFT JOIN video_lesson_group g ON g.id_=r.video_group_id_
 		LEFT JOIN `subject` s ON g.lesson_subject_=s.id_
 		LEFT JOIN sys_user t ON g.teacher_id_=t.id_
-		LEFT JOIN video_lesson_auth_record r ON g.id_=r.video_group_id_
 		<where>
+			<if test="null != param.groupId">
+				AND r.group_id_ = #{param.groupId}
+			</if>
+			<if test="null != param.search and '' != param.search">
+				AND (
+					g.id_ LIKE CONCAT('%', #{param.search}, '%') OR
+					g.lesson_name_ LIKE CONCAT('%', #{param.search}, '%') OR
+					t.id_ LIKE CONCAT('%', #{param.search}, '%') OR
+					t.username_ LIKE CONCAT('%', #{param.search}, '%') OR
+					t.phone_ LIKE CONCAT('%', #{param.search}, '%')
+				)
+			</if>
+			<if test="param.auditStatus !=null and param.auditStatus !=''">
+				AND r.audit_status_ = #{param.auditStatus}
+			</if>
+			<if test="param.shelvesFlag !=null">
+				AND g.shelves_flag_ = #{param.shelvesFlag}
+			</if>
+			<if test="param.subjectId !=null">
+				AND g.lesson_subject_ = #{param.subjectId}
+			</if>
+			<if test="param.auditName !=null and param.auditName !=''">
+				AND r.audit_name_ LIKE CONCAT('%', #{param.auditName}, '%')
+			</if>
+			<if test="param.startTime !=null">
+				<![CDATA[AND g.create_time_ >= #{param.startTime} ]]>
+			</if>
+			<if test="param.endTime !=null">
+				<![CDATA[AND g.create_time_ <= #{param.endTime} ]]>
+			</if>
+		</where>
+		ORDER BY g.create_time_
+	</select>
+
+	<select id="queryGroupHistoryList" resultType="com.yonge.cooleshow.biz.dal.vo.VideoLessonAuthGroup">
+		SELECT
+			<include refid="recordColumns"/>
+			r.video_group_id_ as videoGroupId,
+			r.group_id_ as groupId,
+			r.audit_status_ AS auditStatus,
+			r.remarks as remarks,
+			s.name_ AS subjectName,
+			t.username_ AS teacherName,
+			t.real_name_ AS realName,
+			t.phone_ AS teacherPhone
+		FROM video_lesson_auth_record r
+		LEFT JOIN video_lesson_group g ON g.id_=r.video_group_id_
+		LEFT JOIN `subject` s ON g.lesson_subject_=s.id_
+		LEFT JOIN sys_user t ON g.teacher_id_=t.id_
+		<where>
+			and r.audit_status_ != 'DOING'
+			<if test="null != param.groupId">
+				AND r.group_id_ = #{param.groupId}
+			</if>
 			<if test="null != param.search and '' != param.search">
 				AND (
 				g.id_ LIKE CONCAT('%', #{param.search}, '%') OR
@@ -360,11 +425,50 @@
 		</where>
 		ORDER BY g.create_time_ DESC
 	</select>
-    <select id="selectGroupById" resultType="com.yonge.cooleshow.biz.dal.entity.VideoLessonGroup"
+
+	<select id="authGroupDetil" resultType="com.yonge.cooleshow.biz.dal.vo.VideoLessonAuthGroup">
+		SELECT
+			<include refid="recordColumns"/>
+			r.video_group_id_ as videoGroupId,
+			r.group_id_ as groupId,
+			r.audit_status_ AS auditStatus,
+			r.remarks as remarks,
+			s.name_ AS subjectName,
+			t.username_ AS teacherName,
+			t.real_name_ AS realName,
+			t.phone_ AS teacherPhone
+		FROM video_lesson_auth_record r
+		LEFT JOIN video_lesson_group g ON g.id_=r.video_group_id_
+		LEFT JOIN `subject` s ON g.lesson_subject_=s.id_
+		LEFT JOIN sys_user t ON g.teacher_id_=t.id_
+		where r.video_group_id_ = #{videoGroupId}
+	</select>
+
+	<select id="lastAuthGroupDetil" resultType="com.yonge.cooleshow.biz.dal.vo.VideoLessonAuthGroup">
+		SELECT
+			<include refid="recordColumns"/>
+			r.video_group_id_ as videoGroupId,
+			r.group_id_ as groupId,
+			r.audit_status_ AS auditStatus,
+			r.remarks as remarks,
+			s.name_ AS subjectName,
+			t.username_ AS teacherName,
+			t.real_name_ AS realName,
+			t.phone_ AS teacherPhone
+		FROM video_lesson_auth_record r
+		LEFT JOIN video_lesson_group g ON g.id_=r.video_group_id_
+		LEFT JOIN `subject` s ON g.lesson_subject_=s.id_
+		LEFT JOIN sys_user t ON g.teacher_id_=t.id_
+		where r.video_group_id_ != #{videoGroupId} and r.group_id_ = #{groupId}
+		order by r.id_ desc limit 1
+	</select>
+
+
+	<select id="selectGroupById" resultType="com.yonge.cooleshow.biz.dal.entity.VideoLessonGroup"
             parameterType="java.lang.Long">
 		SELECT
-		<include refid="baseColumns"/>
-		s.name_ AS lessonSubjectName
+			<include refid="baseColumns"/>
+			s.name_ AS lessonSubjectName
 		FROM video_lesson_group g
 		LEFT JOIN `subject` s ON g.lesson_subject_=s.id_
 		WHERE g.id_=#{groupId}

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

@@ -4,7 +4,9 @@ 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.MusicSheetDto;
+import com.yonge.cooleshow.biz.dal.dto.ReasonDto;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetSearch;
+import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.enums.ChargeTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
@@ -19,11 +21,13 @@ import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.base.page.QueryInfo;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.mybatis.support.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
@@ -150,6 +154,21 @@ public class MusicSheetController extends BaseController {
         return succeed(PageUtil.pageInfo(musicSheetVoIPage));
     }
 
+    /**
+     * 启用/停用
+     */
+    @PostMapping("/state/{id}")
+    @ApiOperation(value = "启用/停用", notes = "传入id")
+    public HttpResponseResult<Boolean> state(@ApiParam(value = "曲目编号", required = true)  @PathVariable Long id, @RequestBody ReasonDto reasonDto) {
+        if (StringUtil.isEmpty(id)) {
+            return failed("参数不能为空");
+        }
+        MusicSheet musicSheet = musicSheetService.getById(id);
+        if (musicSheet == null) {
+            return failed("未找到曲目");
+        }
+        return status(musicSheetService.state(id,reasonDto.getReason()));
+    }
 
     /**
      * 我的单曲,收藏单曲

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

@@ -1,7 +1,5 @@
 package com.yonge.cooleshow.teacher.controller;
 
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.req.TeacherApplyDetailReq;
@@ -9,20 +7,15 @@ import com.yonge.cooleshow.biz.dal.vo.TeacherAuthEntryRecordVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
 import com.yonge.cooleshow.biz.dal.service.TeacherAuthEntryRecordService;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
-import javax.validation.constraints.NotBlank;
 
 @RestController
 @RequestMapping("/teacherAuthEntryRecord")
@@ -51,11 +44,6 @@ public class TeacherAuthEntryRecordController extends BaseController {
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        String styleVideoJson = teacherApplyDetailDto.getStyleVideoJson();
-        JSONArray jsonArray = JSONObject.parseArray(styleVideoJson);
-        if(CollectionUtils.isEmpty(jsonArray)){
-            return failed("至少要有一个老师风采视频");
-        }
         //处理老师申请逻辑
         return teacherAuthEntryRecordService.doApply(teacherApplyDetailDto, user);
     }

+ 56 - 29
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/VideoLessonGroupController.java

@@ -12,11 +12,11 @@ import com.yonge.cooleshow.biz.dal.service.AppVersionInfoService;
 
 import com.yonge.cooleshow.biz.dal.vo.*;
 
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.valid.AddGroup;
 import com.yonge.cooleshow.biz.dal.valid.UpdateGroup;
 import com.yonge.toolset.base.page.PageInfo;
-import io.netty.util.internal.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.collections.CollectionUtils;
@@ -33,12 +33,14 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 
 import javax.validation.constraints.NotNull;
+import java.util.Date;
 
 /**
  * 视频课基本信息表 web 控制层
+ *
  * @author yzp
- * @date 2022-03-26 00:21:46
  * @version v1.0
+ * @date 2022-03-26 00:21:46
  **/
 @RestController
 @RequestMapping("/videoLessonGroup")
@@ -52,11 +54,12 @@ public class VideoLessonGroupController extends BaseController {
 
     @Autowired
     private AppVersionInfoService appVersionInfoService;
+
     /**
-    * @Description: 查询视频课组
-    * @Author: cy
-    * @Date: 2022/3/31
-    */
+     * @Description: 查询视频课组
+     * @Author: cy
+     * @Date: 2022/3/31
+     */
     @ApiOperation(value = "查询视频课组")
     @PostMapping(value = "/page")
     public HttpResponseResult<PageInfo<VideoLessonGroupVo>> page(@RequestBody VideoLessonGroupSearch query) {
@@ -68,7 +71,7 @@ public class VideoLessonGroupController extends BaseController {
             query.setTeacherId(sysUser.getId());
         } else {
             // 检查app版本
-            query.setAuditVersion(appVersionInfoService.getAppAuditVersion(query.getPlatform(),query.getVersion()));
+            query.setAuditVersion(appVersionInfoService.getAppAuditVersion(query.getPlatform(), query.getVersion()));
         }
         if (query.getMyself() != null && !query.getMyself()) {
             query.setAuditStatus(AuthStatusEnum.PASS.getCode());
@@ -78,10 +81,10 @@ public class VideoLessonGroupController extends BaseController {
     }
 
     /**
-    * @Description: 新增视频课组
-    * @Author: cy
-    * @Date: 2022/3/31
-    */
+     * @Description: 新增视频课组
+     * @Author: cy
+     * @Date: 2022/3/31
+     */
     @ApiOperation(value = "新增视频课组", httpMethod = "POST", consumes = "application/json", produces = "application/json")
     @PostMapping(value = "/create", consumes = "application/json", produces = "application/json")
     public HttpResponseResult<Object> create(@Validated @RequestBody VideoLessonGroup videoLessonGroup) {
@@ -96,10 +99,10 @@ public class VideoLessonGroupController extends BaseController {
     }
 
     /**
-    * @Description: 修改视频课组
-    * @Author: cy
-    * @Date: 2022/3/31
-    */
+     * @Description: 修改视频课组
+     * @Author: cy
+     * @Date: 2022/3/31
+     */
     @ApiOperation(value = "修改视频课组", httpMethod = "POST", consumes = "application/json", produces = "application/json")
     @PostMapping(value = "/updateGroup", consumes = "application/json", produces = "application/json")
     public HttpResponseResult<Object> update(@Validated @RequestBody VideoLessonGroupUpVo lessonGroupUpVo) {
@@ -108,10 +111,10 @@ public class VideoLessonGroupController extends BaseController {
     }
 
     /**
-    * @Description: 删除视频课组
-    * @Author: cy
-    * @Date: 2022/3/31
-    */
+     * @Description: 删除视频课组
+     * @Author: cy
+     * @Date: 2022/3/31
+     */
     @ApiOperation(value = "删除视频课组", httpMethod = "POST", consumes = "application/json", produces = "application/json")
     @PostMapping("/delete/{id}")
     public Object delete(@PathVariable Long id) {
@@ -120,22 +123,22 @@ public class VideoLessonGroupController extends BaseController {
     }
 
     /**
-    * @Description: 新增视频课组&视频课
-    * @Author: cy
-    * @Date: 2022/4/1
-    */
+     * @Description: 新增视频课组&视频课
+     * @Author: cy
+     * @Date: 2022/4/1
+     */
     @ApiOperation(value = "新增视频课组&视频课", httpMethod = "POST", consumes = "application/json", produces = "application/json")
     @PostMapping(value = "/add", consumes = "application/json", produces = "application/json")
     public HttpResponseResult<Object> add(@Validated(AddGroup.class) @RequestBody VideoLessonVo lessonVo) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
 
-        if (sysUser == null||sysUser.getId()==null) {
+        if (sysUser == null || sysUser.getId() == null) {
             return failed("用户信息获取失败");
         }
         if (CollectionUtils.isEmpty(lessonVo.getLessonList())) {
             return failed("课程不能为空");
         }
-        videoLessonGroupService.add(lessonVo,sysUser);
+        videoLessonGroupService.add(lessonVo, sysUser);
         return succeed();
     }
 
@@ -145,7 +148,7 @@ public class VideoLessonGroupController extends BaseController {
      * @Date: 2022/4/2
      */
     @ApiOperation(value = "根据组id查询视频课&视频课组")
-    @GetMapping(value="/selectVideoLesson")
+    @GetMapping(value = "/selectVideoLesson")
     public HttpResponseResult<VideoLessonStudentVo> selectVideoLesson(@NotNull(message = "视频组id不能为空") Long groupId) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null || sysUser.getId() == null) {
@@ -153,7 +156,7 @@ public class VideoLessonGroupController extends BaseController {
         }
 
         VideoLessonStudentVo videoLessonStudentVo = videoLessonGroupService.selectVideoLesson(groupId);
-        if (videoLessonStudentVo.getLessonGroup().getTeacherId().equals(sysUser.getId()))  {
+        if (videoLessonStudentVo.getLessonGroup().getTeacherId().equals(sysUser.getId())) {
             videoLessonStudentVo.setMyself(true);
         } else {
             videoLessonStudentVo.setMyself(false);
@@ -164,7 +167,31 @@ public class VideoLessonGroupController extends BaseController {
             videoLessonStudentVo.setAlreadyBuy(false);
         }
         return succeed(videoLessonStudentVo);
+    }
+
+    /**
+     * @Description: 更新上架状态
+     * @Author: cy
+     * @Date: 2022/4/25
+     */
+    @ApiOperation(value = "更新上架状态", httpMethod = "POST", consumes = "application/json", produces = "application/json")
+    @PostMapping(value = "/updateShelves", consumes = "application/json", produces = "application/json")
+    public HttpResponseResult<Object> updateShelves(@Validated @RequestBody VideoLessonShelvesVo shelvesVo) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        if (shelvesVo.getShelvesFlag() != 0) {
+            return failed("只能做下架操作");
+        }
+        if (shelvesVo.getShelvesFlag() == 0 && StringUtil.isEmpty(shelvesVo.getShelvesReason())) {
+            return failed("下架必须要有下架原因");
+        }
 
+        shelvesVo.setShelvesId(user.getId());
+        shelvesVo.setShelvesTime(new Date());
+        videoLessonGroupService.updateShelves(shelvesVo);
+        return succeed();
     }
 
     /**
@@ -177,13 +204,13 @@ public class VideoLessonGroupController extends BaseController {
     public HttpResponseResult<Object> update(@Validated(UpdateGroup.class) @RequestBody VideoLessonVo lessonVo) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
 
-        if (sysUser == null||sysUser.getId()==null) {
+        if (sysUser == null || sysUser.getId() == null) {
             return failed("用户信息获取失败");
         }
         if (CollectionUtils.isEmpty(lessonVo.getLessonList())) {
             return failed("课程不能为空");
         }
-        videoLessonGroupService.update(lessonVo,sysUser);
+        videoLessonGroupService.update(lessonVo, sysUser);
         return succeed();
     }
 

+ 18 - 0
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/MusicSheetController.java

@@ -4,14 +4,17 @@ 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.MusicSheetDto;
+import com.yonge.cooleshow.biz.dal.dto.ReasonDto;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetSearch;
+import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.enums.ChargeTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
 import com.yonge.cooleshow.biz.dal.vo.TeacherAuditMusicSheetVo;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
 import com.yonge.cooleshow.common.controller.BaseController;
@@ -147,6 +150,21 @@ public class MusicSheetController extends BaseController {
         return succeed("新增曲谱成功");
     }
 
+    /**
+     * 启用/停用
+     */
+    @PostMapping("/state/{id}")
+    @ApiOperation(value = "启用/停用", notes = "传入id")
+    public HttpResponseResult<Boolean> state(@ApiParam(value = "曲目编号", required = true)  @PathVariable Long id, @RequestBody ReasonDto reasonDto) {
+        if (StringUtil.isEmpty(id)) {
+            return failed("参数不能为空");
+        }
+        MusicSheet musicSheet = musicSheetService.getById(id);
+        if (musicSheet == null) {
+            return failed("未找到曲目");
+        }
+        return status(musicSheetService.state(id,reasonDto.getReason()));
+    }
 
 
     @ApiOperation(value = "修改", httpMethod="POST", consumes="application/json", produces="application/json")