Selaa lähdekoodia

Merge branch 'dev_v1.3.6_20221021' of http://git.dayaedu.com/yonge/cooleshow into dev_v1.3.6_20221021

liujunchi 2 vuotta sitten
vanhempi
commit
666daef540

+ 44 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/music/MusicCompareRecordStatController.java

@@ -7,17 +7,23 @@ import com.yonge.cooleshow.admin.io.request.music.MusicCompareVo;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.service.MusicCompareRecordStatService;
+import com.yonge.cooleshow.biz.dal.service.SysMusicCompareRecordService;
 import com.yonge.cooleshow.biz.dal.wrapper.music.MusicCompareWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.mybatis.support.PageUtil;
 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.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
@@ -39,6 +45,8 @@ public class MusicCompareRecordStatController extends BaseController {
     private SysUserFeignService sysUserFeignService;
     @Autowired
     private MusicCompareRecordStatService musicCompareRecordStatService;
+    @Autowired
+    private SysMusicCompareRecordService sysMusicCompareRecordService;
 
     /**
      * 查询曲目统计汇总信息
@@ -83,4 +91,40 @@ public class MusicCompareRecordStatController extends BaseController {
 
         return succeed(PageUtil.getPageInfo(wrapper, pageInfos));
     }
+
+    /**
+     * 查询曲目统计汇总信息
+     */
+    @ApiOperation(value = "曲目评测信息查询")
+    @PostMapping(value = "/evaluate/page", consumes="application/json", produces="application/json")
+    public HttpResponseResult<PageInfo<MusicCompareWrapper.RecordEvaluate>> musicCompareEvaluatePageInfo(@RequestBody MusicCompareVo.EvaluateQueryInfo request) {
+
+        if (request.invalidParam()) {
+            return failed("无效的请求参数");
+        }
+
+        // 曲目统计信息
+        IPage<MusicCompareWrapper.RecordEvaluate> wrapper = musicCompareRecordStatService.findMusicCompareRecordEvaluatePage(PageUtil.getPage(request),
+                MusicCompareWrapper.EvaluteQueryInfo.from(request.jsonString()));
+
+        return succeed(PageUtil.pageInfo(wrapper));
+    }
+
+    /**
+     * 用户最近一次评测报告
+     * @param recordId 评测记录ID
+     * @return HttpResponseResult<Object>
+     */
+    @ApiOperation(value = "用户最后一次评测数据")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "recordId", value = "评测记录ID", required = true, dataType = "Integer")
+    })
+    @GetMapping("evaluate/report")
+    public HttpResponseResult<Object> getLastEvaluationMusicalNotesPlayStats(@RequestParam("recordId") Long recordId){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(sysUser == null){
+            throw new BizException("请登录");
+        }
+        return succeed(sysMusicCompareRecordService.getLastEvaluationMusicalNotesPlayStats(sysUser.getId(), recordId));
+    }
 }

+ 43 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/io/request/music/MusicCompareVo.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.admin.io.request.music;
 import com.alibaba.fastjson.JSON;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.HeardLevelEnum;
 import com.yonge.cooleshow.biz.dal.enums.MK;
 import com.yonge.cooleshow.biz.dal.enums.music.MusicCompareType;
 import com.yonge.toolset.base.page.QueryInfo;
@@ -171,4 +172,46 @@ public class MusicCompareVo implements Serializable {
         @ApiModelProperty("音乐标签")
         private String musicTagName;
     }
+
+    /**
+     * 评测记录查询
+     */
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @EqualsAndHashCode(callSuper = false)
+    public static class EvaluateQueryInfo extends QueryInfo {
+
+        @ApiModelProperty("客户端类型 TEACHER(老师端) STUDENT(学生端)")
+        private ClientEnum clientType;
+
+        @ApiModelProperty("用户ID ")
+        private Long userId;
+
+        @ApiModelProperty("曲目ID ")
+        private Long musicId;
+
+        @ApiModelProperty("评测难度")
+        private HeardLevelEnum heardLevel;
+
+        @ApiModelProperty("开始时间")
+        @JsonFormat(pattern = MK.TIME_PATTERN, timezone = MK.TIME_ZONE)
+        private Long startTime;
+
+        @ApiModelProperty("结束时间")
+        @JsonFormat(pattern = MK.TIME_PATTERN, timezone = MK.TIME_ZONE)
+        private Long endTime;
+
+        public boolean invalidParam() {
+
+            return Objects.isNull(getClientType())
+                    || Objects.isNull(getUserId())
+                    || Objects.isNull(getMusicId());
+        }
+
+        public String jsonString() {
+
+            return JSON.toJSONString(this);
+        }
+    }
 }

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/HeardLevelEnum.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.enums;
 
+import com.baomidou.mybatisplus.annotation.EnumValue;
 import com.yonge.toolset.base.enums.BaseEnum;
 
 public enum HeardLevelEnum implements BaseEnum<String, HeardLevelEnum> {
@@ -7,6 +8,7 @@ public enum HeardLevelEnum implements BaseEnum<String, HeardLevelEnum> {
     ADVANCED("进阶级", 1, 0.9f, 1.3f),
     PERFORMER("大师级", 3, 0.93f, 1.1f);
 
+    @EnumValue
     private String code;
 
     private String msg;

+ 9 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/MusicCompareRecordStatMapper.java

@@ -33,4 +33,13 @@ public interface MusicCompareRecordStatMapper extends BaseMapper<MusicCompareRec
      * @return List<StatGroupWrapper>
      */
     List<StatGroupWrapper> selectMusicCompareRecordStatInfo(@Param("record") MusicCompareWrapper.StatQueryInfo query);
+
+    /**
+     * 曲目练习评测记录
+     * @param page IPage<MusicCompareWrapper.RecordEvaluate>
+     * @param query MusicCompareWrapper.EvaluteQueryInfo
+     * @return List<MusicCompareWrapper.RecordEvaluate>
+     */
+    List<MusicCompareWrapper.RecordEvaluate> selectMusicCompareEvaluatePage(@Param("page") IPage<MusicCompareWrapper.RecordEvaluate> page,
+                                                                            @Param("record") MusicCompareWrapper.EvaluteQueryInfo query);
 }

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

@@ -38,4 +38,12 @@ public interface MusicCompareRecordStatService extends IService<MusicCompareReco
      * @param recordInfos List<MusicCompareWrapper.RecordInfo>
      */
     void batchUpdateMusicCompareRecordStat(List<MusicCompareWrapper.RecordInfo> recordInfos);
+
+    /**
+     * 曲目评测记录查询
+     * @param page MusicCompareWrapper.RecordEvaluate
+     * @param query MusicCompareWrapper.EvaluteQueryInfo
+     * @return IPage<MusicCompareWrapper.RecordEvaluate>
+     */
+    IPage<MusicCompareWrapper.RecordEvaluate> findMusicCompareRecordEvaluatePage(IPage<MusicCompareWrapper.RecordEvaluate> page, MusicCompareWrapper.EvaluteQueryInfo query);
 }

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

@@ -1,10 +1,13 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.google.common.collect.Lists;
 import com.yonge.cooleshow.biz.dal.entity.MusicCompareRecordStat;
 import com.yonge.cooleshow.biz.dal.entity.MusicTag;
+import com.yonge.cooleshow.biz.dal.entity.SysMusicCompareRecord;
 import com.yonge.cooleshow.biz.dal.enums.EQueryOp;
 import com.yonge.cooleshow.biz.dal.mapper.MusicCompareRecordStatMapper;
 import com.yonge.cooleshow.biz.dal.service.MusicCompareRecordStatService;
@@ -197,4 +200,21 @@ public class MusicCompareRecordStatServiceImp extends ServiceImpl<MusicCompareRe
             }
         }
     }
+
+    /**
+     * 曲目评测记录查询
+     *
+     * @param page  MusicCompareWrapper.RecordEvaluate
+     * @param query MusicCompareWrapper.EvaluteQueryInfo
+     * @return IPage<MusicCompareWrapper.RecordEvaluate>
+     */
+    @Override
+    public IPage<MusicCompareWrapper.RecordEvaluate> findMusicCompareRecordEvaluatePage(IPage<MusicCompareWrapper.RecordEvaluate> page,
+                                                                                        MusicCompareWrapper.EvaluteQueryInfo query) {
+
+        // 分页查询条件
+        List<MusicCompareWrapper.RecordEvaluate> evaluates = getBaseMapper().selectMusicCompareEvaluatePage(page, query);
+
+        return page.setRecords(evaluates);
+    }
 }

+ 80 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/music/MusicCompareWrapper.java

@@ -1,18 +1,25 @@
 package com.yonge.cooleshow.biz.dal.wrapper.music;
 
 import com.alibaba.fastjson.JSON;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.FeatureType;
+import com.yonge.cooleshow.biz.dal.enums.HeardLevelEnum;
+import com.yonge.cooleshow.biz.dal.enums.MK;
 import com.yonge.cooleshow.biz.dal.enums.music.MusicCompareType;
 import com.yonge.toolset.base.page.QueryInfo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
+import java.util.Optional;
 
 /**
  * Created by Eric.Shang on 2022/10/17.
@@ -26,6 +33,7 @@ public class MusicCompareWrapper {
     @Builder
     @NoArgsConstructor
     @AllArgsConstructor
+    @EqualsAndHashCode(callSuper = false)
     public static class StatQueryInfo extends QueryInfo {
 
         @ApiModelProperty("客户端类型 TEACHER(老师端) STUDENT(学生端)")
@@ -251,4 +259,76 @@ public class MusicCompareWrapper {
         @ApiModelProperty("功能类型 ")
         private FeatureType feature;
     }
+
+    /**
+     * 曲目评测查询条件
+     */
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @EqualsAndHashCode(callSuper = false)
+    public static class EvaluteQueryInfo extends QueryInfo {
+
+        @ApiModelProperty("客户端类型 TEACHER(老师端) STUDENT(学生端)")
+        private ClientEnum clientType;
+
+        @ApiModelProperty("用户ID ")
+        private Long userId;
+
+        @ApiModelProperty("曲目ID ")
+        private Long musicId;
+
+        @ApiModelProperty("评测难度")
+        private HeardLevelEnum heardLevel;
+
+        @ApiModelProperty("评测类型")
+        private FeatureType feature;
+
+        @ApiModelProperty("开始时间")
+        private Date startTime;
+
+        @ApiModelProperty("结束时间")
+        private Date endTime;
+
+        public static EvaluteQueryInfo from(String record) {
+
+            return JSON.parseObject(record, EvaluteQueryInfo.class);
+        }
+
+        public FeatureType getFeature() {
+            return Optional.ofNullable(feature).orElse(FeatureType.CLOUD_STUDY_EVALUATION);
+        }
+    }
+
+    /**
+     * 曲目评测记录信息
+     */
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class RecordEvaluate implements Serializable {
+
+        @ApiModelProperty("评测记录ID ")
+        private Long id;
+
+        @ApiModelProperty("评测难度: 入门级,进阶级,大师级")
+        private HeardLevelEnum heardLevel;
+
+        @ApiModelProperty("总分 ")
+        private BigDecimal score;
+
+        @ApiModelProperty("音准 ")
+        private BigDecimal intonation;
+
+        @ApiModelProperty("节奏")
+        private BigDecimal cadence;
+
+        @ApiModelProperty("完成度 ")
+        private BigDecimal integrity;
+
+        @ApiModelProperty("评测时间")
+        @JsonFormat(pattern = MK.TIME_PATTERN, timezone = MK.TIME_ZONE)
+        private Date createTime;
+    }
 }

+ 34 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicCompareRecordStatMapper.xml

@@ -87,4 +87,38 @@
         GROUP BY t1.user_id_
     </select>
     <!--用户曲目统计汇总-->
+
+    <!--曲目评测记录查询-->
+    <resultMap id="MusicCompareEvaluatePageResultMap"
+               type="com.yonge.cooleshow.biz.dal.wrapper.music.MusicCompareWrapper$RecordEvaluate">
+        <id column="id_" property="id" />
+        <result column="score_" property="score" />
+        <result column="intonation_" property="intonation" />
+        <result column="cadence_" property="cadence" />
+        <result column="integrity_" property="integrity" />
+        <result column="heard_level_" property="heardLevel" />
+        <result column="create_time_" property="createTime" />
+    </resultMap>
+    <select id="selectMusicCompareEvaluatePage" resultMap="MusicCompareEvaluatePageResultMap">
+        SELECT t1.id_, t1.score_, t1.intonation_, t1.cadence_, t1.integrity_, t1.heard_level_, t1.create_time_
+        FROM sys_music_compare_record t1
+        <where>
+            <if test="record.clientType != null">
+                AND t1.client_id_ = #{record.clientType}
+            </if>
+            <if test="record.userId != null">
+                AND t1.user_id_ = #{record.userId}
+            </if>
+            <if test="record.musicId != null">
+                AND t1.music_sheet_id_ = #{record.musicId}
+            </if>
+            <if test="record.heardLevel != null">
+                AND t1.heard_level_ = #{record.heardLevel}
+            </if>
+            <if test="record.startTime != null and record.endTime != null">
+                AND (t1.create_time_ >= #{record.startTime} AND t1.create_time_ &lt;= #{record.endTime})
+            </if>
+        </where>
+    </select>
+    <!--曲目评测记录查询-->
 </mapper>

+ 1 - 1
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/SysMusicCompareRecordController.java

@@ -47,7 +47,7 @@ public class SysMusicCompareRecordController extends BaseController {
             return failed("请设置功能点");
         }
         record.setUserId(sysUser.getId());
-        record.setClientId(ClientEnum.TEACHER.name());
+        record.setClientId(ClientEnum.TEACHER.name().toLowerCase());
         return succeed(sysMusicCompareRecordService.insert(record));
     }