Kaynağa Gözat

记录返回ID

刘俊驰 5 ay önce
ebeveyn
işleme
d1b59af8cc

+ 9 - 0
mec-application/src/main/java/com/ym/mec/student/controller/MusicSheetController.java

@@ -6,12 +6,14 @@ import com.microsvc.toolkit.common.response.template.R;
 import com.ym.mec.biz.dal.entity.Instrument;
 import com.ym.mec.biz.dal.entity.SysMusicScore;
 import com.ym.mec.biz.dal.entity.Teacher;
+import com.ym.mec.biz.dal.enums.ClientEnum;
 import com.ym.mec.biz.dal.enums.ClientTypeEnum;
 import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
 import com.ym.mec.biz.dal.wrapper.InstrumentWrapper;
 import com.ym.mec.biz.dal.wrapper.MusicSheetWrapper;
 import com.ym.mec.biz.service.InstrumentService;
 import com.ym.mec.biz.service.SysMusicScoreService;
+import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.vo.MusicSheetVo;
@@ -27,6 +29,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
@@ -46,6 +49,8 @@ public class MusicSheetController {
     private InstrumentService instrumentService;
 
 
+    @Resource
+    private SysUserService sysUserService;
     /**
      * 查询单条
      *
@@ -97,6 +102,7 @@ public class MusicSheetController {
 
         SysExamSongQueryInfo queryInfo = new SysExamSongQueryInfo();
 
+        Integer userId = sysUserService.getUserId();
         if(query.getMusicSheetCategoriesId() != null) {
             queryInfo.setCategoriesId(query.getMusicSheetCategoriesId().toString());
         }
@@ -110,6 +116,9 @@ public class MusicSheetController {
         queryInfo.setType("COMMON");
         queryInfo.setClientFlag(true);
         queryInfo.setClientType(ClientTypeEnum.SMART_PRACTICE);
+
+        queryInfo.setUserId(userId);
+        queryInfo.setClientId(ClientEnum.TEACHER.getCode().toLowerCase());
         PageInfo<SysMusicScore> sysMusicScorePageInfo1 = musicSheetService.queryMusicScorePageInfo(queryInfo);
         PageInfo<MusicSheetWrapper.MusicSheet> convert = sysMusicScorePageInfo1.convert(o -> {
             MusicSheetWrapper.MusicSheet musicSheet = new MusicSheetWrapper.MusicSheet();

+ 3 - 0
mec-application/src/main/java/com/ym/mec/teacher/controller/MusicSheetController.java

@@ -7,6 +7,7 @@ import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.entity.Instrument;
 import com.ym.mec.biz.dal.entity.SysMusicScore;
 import com.ym.mec.biz.dal.entity.Teacher;
+import com.ym.mec.biz.dal.enums.ClientEnum;
 import com.ym.mec.biz.dal.enums.ClientTypeEnum;
 import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
 import com.ym.mec.biz.dal.wrapper.InstrumentWrapper;
@@ -127,6 +128,8 @@ public class MusicSheetController {
         queryInfo.setType("COMMON");
         queryInfo.setClientFlag(true);
         queryInfo.setClientType(ClientTypeEnum.SMART_PRACTICE);
+        queryInfo.setUserId(userId);
+        queryInfo.setClientId(ClientEnum.TEACHER.getCode().toLowerCase());
         PageInfo<SysMusicScore> sysMusicScorePageInfo1 = musicSheetService.queryMusicScorePageInfo(queryInfo);
         PageInfo<MusicSheetWrapper.MusicSheet> convert = sysMusicScorePageInfo1.convert(o -> {
             MusicSheetWrapper.MusicSheet musicSheet = new MusicSheetWrapper.MusicSheet();

+ 138 - 0
mec-application/src/main/java/com/ym/mec/web/controller/MusicPracticeRecordController.java

@@ -0,0 +1,138 @@
+package com.ym.mec.web.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.dayaedu.cbs.common.enums.music.EEvaluationStandard;
+import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
+import com.google.common.collect.Lists;
+import com.microsvc.toolkit.common.response.template.R;
+import com.microsvc.toolkit.common.webportal.exception.BizException;
+import com.microsvc.toolkit.config.validator.group.ValidGroups;
+import com.ym.mec.biz.dal.entity.UserMusic;
+import com.ym.mec.biz.dal.enums.ClientEnum;
+import com.ym.mec.biz.dal.wrapper.MusicPracticeRecordWrapper;
+import com.ym.mec.biz.service.MusicPracticeRecordService;
+import com.ym.mec.biz.service.SysMusicScoreService;
+import com.ym.mec.biz.service.SysUserService;
+import com.ym.mec.biz.service.UserMusicService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+import java.util.Objects;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("${app-config.url.web:}/musicPracticeRecord")
+@Api(tags = "曲目练习记录")
+public class MusicPracticeRecordController {
+
+    @Autowired
+    private MusicPracticeRecordService musicPracticeRecordService;
+
+    @Autowired
+    private UserMusicService userMusicService;
+
+    @Autowired
+    private SysMusicScoreService musicSheetService;
+
+    @Autowired
+    private SysUserService sysUserService;
+
+    /**
+     * 查询单条
+     * @param id 详情ID
+     * @return R<MusicPracticeRecordVo.MusicPracticeRecord>
+     */
+    @ApiOperation(value = "详情", notes = "曲目练习记录-根据详情ID查询单条, 传入id")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "id", dataType = "long")
+    })
+    @GetMapping("/detail/{id}")
+    public R<MusicPracticeRecordWrapper.MusicPracticeRecord> detail(@PathVariable("id") Long id) {
+
+        MusicPracticeRecordWrapper.Entity wrapper = musicPracticeRecordService.detail(id);
+
+        if (wrapper == null) {
+            throw new BizException("记录不存在");
+        }
+
+        // 上传过作品,用作品视频路径覆盖上传视频路径
+        // ID集合
+        Map<Long, UserMusic> userMusicMap = userMusicService.getMapByMusicPracticeRecordIds(Lists.newArrayList(Long.parseLong(wrapper.getId())));
+
+        UserMusic userMusic = userMusicMap.get(Long.parseLong(wrapper.getId()));
+        if (Objects.nonNull(userMusic)) {
+            wrapper.setVideoFilePath(userMusic.getVideoUrl());
+        }
+        MusicPracticeRecordWrapper.MusicPracticeRecord from = MusicPracticeRecordWrapper.MusicPracticeRecord.from(JSON.toJSONString(wrapper));
+
+        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(Integer.parseInt(wrapper.getMusicSheetId()));
+        if (musicSheet != null) {
+            from.setRhythmFlag(musicSheet.getEvaluationStandard() != EEvaluationStandard.FREQUENCY);
+        }
+
+        return R.from(from);
+    }
+
+
+    /**
+     * 新增
+     * @param record MusicPracticeRecordVo.MusicPracticeRecord
+     * @return R<Boolean>
+     */
+    @ApiOperation(value = "新增", notes = "曲目练习记录- 传入 MusicPracticeRecordVo.MusicPracticeRecord")
+    @PostMapping("/save")
+    public R<String> add(@Validated(ValidGroups.Add.class) @RequestBody MusicPracticeRecordWrapper.MusicPracticeRecord record) {
+
+        Integer userId = sysUserService.getUserId();
+        record.userId(String.valueOf(userId)).clientType("education");
+
+        // 新增数据
+        MusicPracticeRecordWrapper.MusicPracticeRecord from = MusicPracticeRecordWrapper.MusicPracticeRecord.from(record.jsonString());
+        if (record.getDelFlag() !=null && record.getDelFlag()) {
+            from.setDelFlag(false);
+            from.setHiddenFlag(true);
+        }
+
+        return R.from(musicPracticeRecordService.add(from));
+    }
+
+    @ApiOperation(value = "用户最后一次评测数据")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "recordId", value = "曲目练习记录Id", dataType = "long")
+    })
+    @GetMapping("/getLastEvaluationMusicalNotesPlayStats")
+    public Object getLastEvaluationMusicalNotesPlayStats(Long recordId){
+        return R.from(musicPracticeRecordService.getLastEvaluationMusicalNotesPlayStats(recordId));
+    }
+
+    @ApiOperation(value = "上传音频文件")
+    @PostMapping("videoUpload")
+    public R<Boolean> videoUpload( @RequestBody MusicPracticeRecordWrapper.MusicPracticeRecord record){
+
+        if (Objects.isNull(record.getId())) {
+            throw BizException.from("recordId不能为空");
+        }
+        if (Objects.isNull(record.getVideoFilePath())) {
+            throw BizException.from("videoUrl不能为空");
+        }
+
+        MusicPracticeRecordWrapper.Entity practiceRecord = musicPracticeRecordService.getById(record.getId());
+        if (Objects.isNull(practiceRecord)) {
+            throw BizException.from("记录不存在");
+        }
+
+        practiceRecord.setVideoFilePath(record.getVideoFilePath());
+        musicPracticeRecordService.update(practiceRecord);
+
+        return R.from(true);
+    }
+
+}

+ 10 - 0
mec-application/src/main/java/com/ym/mec/web/controller/MusicSheetController.java

@@ -5,12 +5,14 @@ import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
 import com.microsvc.toolkit.common.response.template.R;
 import com.ym.mec.biz.dal.entity.Instrument;
 import com.ym.mec.biz.dal.entity.SysMusicScore;
+import com.ym.mec.biz.dal.enums.ClientEnum;
 import com.ym.mec.biz.dal.enums.ClientTypeEnum;
 import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
 import com.ym.mec.biz.dal.wrapper.InstrumentWrapper;
 import com.ym.mec.biz.dal.wrapper.MusicSheetWrapper;
 import com.ym.mec.biz.service.InstrumentService;
 import com.ym.mec.biz.service.SysMusicScoreService;
+import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.vo.MusicSheetVo;
 import io.swagger.annotations.Api;
@@ -24,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
@@ -42,6 +45,8 @@ public class MusicSheetController {
     @Autowired
     private InstrumentService instrumentService;
 
+    @Resource
+    private SysUserService sysUserService;
     /**
      * 查询单条
      *
@@ -93,6 +98,7 @@ public class MusicSheetController {
 
         SysExamSongQueryInfo queryInfo = new SysExamSongQueryInfo();
 
+        Integer userId = sysUserService.getUserId();
         if(query.getMusicSheetCategoriesId() != null) {
             queryInfo.setCategoriesId(query.getMusicSheetCategoriesId().toString());
         }
@@ -103,9 +109,13 @@ public class MusicSheetController {
                 queryInfo.setSubjectId(instrument.getSubjectId());
             }
         }
+        queryInfo.setRecentFlag(query.getRecentFlag());
+        queryInfo.setExcludeMusicId(query.getExcludeMusicId());
         queryInfo.setType("COMMON");
         queryInfo.setClientFlag(true);
         queryInfo.setClientType(ClientTypeEnum.SMART_PRACTICE);
+        queryInfo.setUserId(userId);
+        queryInfo.setClientId("education");
         PageInfo<SysMusicScore> sysMusicScorePageInfo = musicSheetService.queryMusicScorePage(queryInfo);
         PageInfo<MusicSheetWrapper.MusicSheet> convert = sysMusicScorePageInfo.convert(o -> {
             MusicSheetWrapper.MusicSheet musicSheet = new MusicSheetWrapper.MusicSheet();

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicCompareRecordDao.java

@@ -132,4 +132,6 @@ public interface SysMusicCompareRecordDao extends BaseDAO<Long, SysMusicCompareR
     int countByStudent(Map<String, Object> params);
 
     List<MusicCompareRecordWapper.Result> queryPageByStudent(Map<String, Object> params);
+
+    Long getLastData(@Param("clientId") String clientId, @Param("userId") Integer userId, @Param("feature") String feature, @Param("sysMusicScoreId") Integer sysMusicScoreId);
 }

+ 13 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/SysExamSongQueryInfo.java

@@ -57,4 +57,17 @@ public class SysExamSongQueryInfo extends QueryInfo {
 
     @ApiModelProperty("谱面类型")
     private String scoreType;
+
+
+    @ApiModelProperty("是否最近练习")
+    private Boolean recentFlag = false;
+
+    @ApiModelProperty("最近练习 当前曲目ID")
+    private Long excludeMusicId;
+
+    @ApiModelProperty(value = "用户ID",hidden = true)
+    private Integer userId;
+
+    @ApiModelProperty(value = "用户类型",hidden = true)
+    private String clientId;
 }

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicPracticeRecordServiceImpl.java

@@ -2,6 +2,8 @@ package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.ym.mec.biz.dal.dao.SysMusicCompareRecordDao;
+import com.ym.mec.biz.dal.dao.SysMusicScoreDao;
 import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
 import com.ym.mec.biz.dal.entity.SysMusicScore;
 import com.ym.mec.biz.dal.enums.FeatureType;
@@ -25,6 +27,9 @@ public class MusicPracticeRecordServiceImpl implements MusicPracticeRecordServic
     @Autowired
     private SysMusicScoreService musicSheetService;
 
+    @Autowired
+    private SysMusicCompareRecordDao sysMusicCompareRecordDao;
+
     /**
      * 查询记录详情
      *

+ 7 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicCompareRecordServiceImpl.java

@@ -93,7 +93,9 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 
 			updateCampData(bean);
 		}
-		return insert;
+
+        return sysMusicCompareRecordDao.getLastData(bean.getClientId(),bean.getUserId()
+            ,bean.getFeature().getCode(),bean.getSysMusicScoreId());
 	}
 
     @Override
@@ -171,12 +173,14 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 
         Integer userId = sysMusicCompareRecord.getUserId();
 
-        long insert = sysMusicCompareRecordDao.insert(sysMusicCompareRecord);
+        sysMusicCompareRecordDao.insert(sysMusicCompareRecord);
+        Long id = sysMusicCompareRecordDao.getLastData(sysMusicCompareRecord.getClientId(),sysMusicCompareRecord.getUserId()
+            ,sysMusicCompareRecord.getFeature().getCode(),sysMusicCompareRecord.getSysMusicScoreId());
         studentDao.addStudentCloudStudySequenceDays(userId);
         updateCampData(sysMusicCompareRecord);
         sysMusicCompareWeekDataService
             .updateUserWeekTrainData(userId, LocalDate.now().with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue()));
-        return insert;
+        return id;
     }
 
 	@Override

+ 6 - 0
mec-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml

@@ -635,4 +635,10 @@
 		<include refid="queryPageByStudentSql"/>
 		order by mcr.create_date_ DESC
 	</select>
+
+	<select id="getLastData" resultType="java.lang.Long">
+        select id_ from sys_music_compare_record
+        where client_id_ =#{clientId} and user_id_ = #{userId} and feature_ = #{feature} and sys_music_score_id_ = #{sysMusicScoreId}
+        order by  create_time_ desc,id_ desc   limit 1
+    </select>
 </mapper>

+ 15 - 1
mec-biz/src/main/resources/config/mybatis/SysMusicScoreMapper.xml

@@ -146,9 +146,20 @@
 		SELECT ses.*,su.real_name_ create_user_name_,ses.cbs_music_categories_id_ categories_id_,ses.subject_ids_
 		FROM sys_music_score ses
 		LEFT JOIN sys_user su ON ses.create_user_id_ = su.id_
+        <if test="recentFlag !=null and recentFlag == true">
+            <if test="subjectId != null">
+                right JOIN sys_music_compare_record sms ON ses.id_ = sms.sys_music_score_id_ and sms.user_id_ = #{userId} and sms.client_id_ = #{clientId}
+            </if>
+        </if>
 		<include refid="queryPageSql"/>
 		GROUP BY ses.id_
-		ORDER BY ses.cbs_music_categories_id_ DESC,ses.order_ ASC,ses.create_time_ DESC,ses.id_ desc
+        order by
+        <if test="recentFlag !=null and recentFlag == true">
+            <if test="subjectId != null">
+                 max(sms.create_time_) desc,
+            </if>
+        </if>
+		 ses.cbs_music_categories_id_ DESC,ses.order_ ASC,ses.create_time_ DESC,ses.id_ desc
 		<include refid="global.limit"/>
 	</select>
 	
@@ -320,6 +331,9 @@
 					AND ses.create_user_id_ = #{createUserId}
 				</if>
 			</if>
+            <if test="excludeMusicId !=null">
+                AND ses.id_ != #{excludeMusicId}
+            </if>
 		</where>
 	</sql>
 </mapper>