Jelajahi Sumber

曲目审核列表

liujunchi 2 tahun lalu
induk
melakukan
b8ea66f2f1
19 mengubah file dengan 445 tambahan dan 53 penghapusan
  1. 25 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java
  2. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetDao.java
  3. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/TeacherMusicSheetAuditSearch.java
  4. 28 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicSheetAuthRecord.java
  5. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetAccompanimentService.java
  6. 5 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetAuthRecordService.java
  7. 17 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java
  8. 12 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java
  9. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetAccompanimentServiceImpl.java
  10. 42 10
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetAuthRecordServiceImpl.java
  11. 71 29
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  12. 13 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonGroupDetailServiceImpl.java
  13. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/LiveCourseInfoVo.java
  14. 56 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicSheetDetailVo.java
  15. 22 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherMusicSheetVo.java
  16. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonStudentVo.java
  17. 56 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml
  18. 19 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/MusicSheetController.java
  19. 18 0
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/MusicSheetController.java

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

@@ -16,6 +16,7 @@ import com.yonge.cooleshow.biz.dal.enums.*;
 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.page.QueryInfo;
 import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.common.controller.BaseController;
@@ -263,6 +264,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")

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

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

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

+ 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);
 
     /**
      * 获取当前曲目审核理由

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

@@ -292,4 +292,21 @@ public interface MusicSheetService extends IService<MusicSheet> {
      * @return
      */
     Boolean stateList(ReasonDto reasonDto);
+
+    /**
+     * 查询审核曲目信息
+     *
+     * @param authMusicSheetId 曲目审核id
+     * @return
+     */
+    MusicSheetDetailVo auditDetail(Long authMusicSheetId);
+
+    /**
+     *
+     * 审核历史记录
+     *
+     * @param authMusicSheetId 曲目审核id
+     * @return
+     */
+    List<MusicSheetDetailVo> auditDetailList(Long authMusicSheetId);
 }

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

+ 71 - 29
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,20 +369,22 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
             throw new BizException("曲目已经过审批");
         }
 
-        boolean flag = false;
-        if (musicSheetAuthRecordService.audit(param, userId)) {
-            musicSheet.setAuditStatus(param.getAuthStatus());
-            musicSheet.setUpdateBy(userId);
-            musicSheet.setUpdateTime(new Date());
-            if (AuthStatusEnum.PASS.getCode().equals(param.getAuthStatus().getCode())) {
-                musicSheet.setState(YesOrNoEnum.YES);
+        boolean flag;
+        Long originalMusicSheetId = musicSheetAuthRecordService.audit(param, userId);
+        musicSheet.setAuditStatus(param.getAuthStatus());
+        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);
+            // 修改老师标签
+            teacherService.setTeacherTag(musicSheet.getUserId(), TeacherTagEnum.MUSIC);
 
-            }
-            flag = this.updateById(musicSheet);
         }
+        flag = this.updateById(musicSheet);
+
 
         // 发送审核通知
         Map<Long, String> receivers = new HashMap<>();
@@ -397,6 +399,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())) {
@@ -437,31 +462,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());
         }
 
@@ -480,7 +504,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);
@@ -489,7 +513,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;
@@ -998,6 +1022,24 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
 
     }
 
+    @Override
+    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)
                 .map(sysUserFeignService::queryUserById)

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

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

+ 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

@@ -237,7 +237,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"/>
@@ -264,6 +264,10 @@
         <result column="reason" jdbcType="VARCHAR" property="reason"/>
         <result column="accompanimentType" jdbcType="VARCHAR" property="accompanimentType"/>
         <result column="notation" jdbcType="VARCHAR" property="notation"/>
+        <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"/>
@@ -483,6 +487,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
@@ -527,6 +532,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>
@@ -633,4 +641,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>

+ 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()));
+    }
 
     /**
      * 我的单曲,收藏单曲

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