Browse Source

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

liujunchi 2 years ago
parent
commit
707a545192

+ 34 - 11
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/music/MusicCompareRecordStatController.java

@@ -1,28 +1,25 @@
 package com.yonge.cooleshow.admin.controller.music;
 
 
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 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.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.service.MusicCompareRecordStatService;
-import com.yonge.cooleshow.biz.dal.vo.MusicSheetDetailVo;
 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.page.PageInfo;
+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.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 
-import org.springframework.stereotype.Controller;
-
 import java.util.List;
 
 /**
@@ -48,21 +45,47 @@ public class MusicCompareRecordStatController extends BaseController {
      */
     @ApiOperation(value = "曲目统计汇总信息", notes = "传入id")
     @PostMapping(value = "/record/stat", consumes="application/json", produces="application/json")
-    public HttpResponseResult<MusicCompareVo.RecordStat> detail(@RequestBody MusicCompareVo.StatQueryRequest info) {
+    public HttpResponseResult<MusicCompareVo.RecordStat> musicCompareRecordStatInfo(@RequestBody MusicCompareVo.StatQueryRequest request) {
 
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {
             return failed("用户信息获取失败");
         }
 
-        if (info.invalidParam()) {
+        if (request.userId(sysUser.getId()).invalidParam()) {
             return failed("无效的请求参数");
         }
 
         MusicCompareWrapper.RecordStat records = musicCompareRecordStatService.findMusicCompareRecordStatInfo(sysUser.getId(),
-                MusicCompareWrapper.StatQueryInfo.from(info.jsonString()));
+                MusicCompareWrapper.StatQueryInfo.from(request.jsonString()));
 
         return succeed(MusicCompareVo.RecordStat.from(records.jsonString()));
     }
 
+    /**
+     * 查询曲目统计汇总信息
+     */
+    @ApiOperation(value = "曲目统计信息查询", notes = "传入id")
+    @PostMapping(value = "/record/page", consumes="application/json", produces="application/json")
+    public HttpResponseResult<PageInfo<MusicCompareVo.RecordInfo>> musicCompareRecordPageInfo(@RequestBody MusicCompareVo.StatQueryRequest request) {
+
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null  || sysUser.getId() == null) {
+            return failed("用户信息获取失败");
+        }
+
+        if (request.userId(sysUser.getId()).invalidParam()) {
+            return failed("无效的请求参数");
+        }
+
+        // 曲目统计信息
+        IPage<MusicCompareWrapper.RecordInfo> wrapper = musicCompareRecordStatService.findMusicCompareRecordPage(PageUtil.getPage(request),
+                MusicCompareWrapper.StatQueryInfo.from(request.jsonString()));
+
+        // 数据转换
+        List<MusicCompareVo.RecordInfo> pageInfos = JSON.parseArray(JSON.toJSONString(wrapper.getRecords()),
+                MusicCompareVo.RecordInfo.class);
+
+        return succeed(PageUtil.getPageInfo(wrapper, pageInfos));
+    }
 }

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

@@ -2,15 +2,18 @@ package com.yonge.cooleshow.admin.io.request.music;
 
 import com.alibaba.fastjson.JSON;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+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.Data;
+import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 
 /**
  * Created by Eric.Shang on 2022/10/17.
@@ -23,15 +26,25 @@ public class MusicCompareVo implements Serializable {
     @Data
     @NoArgsConstructor
     @AllArgsConstructor
+    @EqualsAndHashCode(callSuper = false)
     public static class StatQueryRequest extends QueryInfo {
 
         @ApiModelProperty("客户端类型 TEACHER(老师端) STUDENT(学生端)")
         private ClientEnum clientType;
 
+        @ApiModelProperty("用户ID ")
+        private Long userId;
+
+        @ApiModelProperty("排序类型 TRAIN_DURATION(练习时长) TRAIN_FREQ(练习次数) EVALUATE_DURATION(评测时长) EVALUATE_FREQ(评测次数)")
+        private MusicCompareType compareType;
+
+        @ApiModelProperty("排序方式 升序(ASC) 降序(DESC)")
+        private String sortType;
 
         public boolean invalidParam() {
 
             return Objects.isNull(getClientType())
+                    || Objects.isNull(getUserId())
                     || ClientEnum.invalid(getClientType().getCode());
         }
 
@@ -39,6 +52,30 @@ public class MusicCompareVo implements Serializable {
 
             return JSON.toJSONString(this);
         }
+
+        public MusicCompareType getCompareType() {
+            return Optional.ofNullable(compareType).orElse(MusicCompareType.EVALUATE_DURATION);
+        }
+
+        public String getSortType() {
+            return Optional.ofNullable(sortType).orElse("DESC");
+        }
+
+        public StatQueryRequest userId(Long userId) {
+            this.userId = userId;
+            return this;
+        }
+
+
+        public StatQueryRequest compareType(MusicCompareType compareType) {
+            this.compareType = compareType;
+            return this;
+        }
+
+        public StatQueryRequest sortType(String sortType) {
+            this.sortType = sortType;
+            return this;
+        }
     }
 
     /**
@@ -49,8 +86,8 @@ public class MusicCompareVo implements Serializable {
     @AllArgsConstructor
     public static class RecordStat implements Serializable {
 
-        @ApiModelProperty("曲目总数")
-        private Long musicNums;
+        @ApiModelProperty("练习曲目总数")
+        private Long trainMusicNums;
 
         @ApiModelProperty("使用时长")
         private Long trainDuration;
@@ -58,20 +95,20 @@ public class MusicCompareVo implements Serializable {
         @ApiModelProperty("使用次数")
         private Long trainFrequency;
 
+        @ApiModelProperty("评测曲目总数")
+        private Long evaluateMusicNums;
+
         @ApiModelProperty("评测时长")
         private Long evaluateDuration;
 
         @ApiModelProperty("评测次数")
         private Long evaluateFrequency;
 
-        @ApiModelProperty("最近使用时间")
-        private Long recentTime;
-
         private List<RecordInfo> recordInfos;
 
-        public static RecordStat from(String recv) {
+        public static RecordStat from(String record) {
 
-            return JSON.parseObject(recv, RecordStat.class);
+            return JSON.parseObject(record, RecordStat.class);
         }
     }
 

+ 53 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/music/MusicCompareType.java

@@ -0,0 +1,53 @@
+package com.yonge.cooleshow.biz.dal.enums.music;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.toolset.base.enums.BaseEnum;
+
+/**
+ * 曲目统计排序类型
+ *
+ * @author liujunchi
+ * @date 2022-04-28
+ */
+public enum MusicCompareType implements BaseEnum<String, MusicCompareType> {
+    TRAIN_DURATION("练习时长"),
+    TRAIN_FREQ("练习次数"),
+    EVALUATE_DURATION("评测时长"),
+    EVALUATE_FREQ("评测次数"),
+    ;
+    @EnumValue
+    private String code;
+    private String msg;
+
+    MusicCompareType(String msg) {
+        this.code = this.name();
+        this.msg = msg;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    /**
+     * 校验类型合法性
+     * @param clientType 客户端类型
+     * @return boolean
+     */
+    public static boolean invalid(String clientType) {
+
+        MusicCompareType[] values = MusicCompareType.values();
+
+        for (MusicCompareType item : values) {
+
+            if (item.getCode().equals(clientType)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+}

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

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.biz.dal.entity.MusicCompareRecordStat;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.wrapper.music.MusicCompareWrapper;
@@ -21,4 +22,12 @@ public interface MusicCompareRecordStatService extends IService<MusicCompareReco
      * @return MusicCompareWrapper.RecordStat
      */
     MusicCompareWrapper.RecordStat findMusicCompareRecordStatInfo(Long sysUserId, MusicCompareWrapper.StatQueryInfo info);
+
+    /**
+     * 曲目统计信息查询
+     * @param page IPage<MusicCompareWrapper.RecordInfo>
+     * @param query MusicCompareWrapper.StatQueryInfo
+     * @return IPage<MusicCompareWrapper.RecordInfo>
+     */
+    IPage<MusicCompareWrapper.RecordInfo> findMusicCompareRecordPage(IPage<Object> page, MusicCompareWrapper.StatQueryInfo query);
 }

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

@@ -1,6 +1,9 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.google.common.collect.Lists;
 import com.yonge.cooleshow.biz.dal.entity.MusicCompareRecordStat;
+import com.yonge.cooleshow.biz.dal.enums.EQueryOp;
 import com.yonge.cooleshow.biz.dal.mapper.MusicCompareRecordStatMapper;
 import com.yonge.cooleshow.biz.dal.service.MusicCompareRecordStatService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -27,6 +30,50 @@ public class MusicCompareRecordStatServiceImp extends ServiceImpl<MusicCompareRe
      */
     @Override
     public MusicCompareWrapper.RecordStat findMusicCompareRecordStatInfo(Long sysUserId, MusicCompareWrapper.StatQueryInfo info) {
+
+        // 统计汇总信息
+        MusicCompareWrapper.RecordStat wrapper = MusicCompareWrapper.RecordStat.builder()
+                .trainMusicNums(0L)
+                .trainDuration(0L)
+                .trainFrequency(0L)
+                .evaluateMusicNums(0L)
+                .evaluateDuration(0L)
+                .evaluateFrequency(0L)
+                .recordInfos(Lists.newArrayList())
+                .build();
+
+        // 指标统计信息
+        Lists.newArrayList(EQueryOp.values()).parallelStream().forEach(dataType -> {
+
+            switch (dataType) {
+                case FUNCTION_1: // 练习曲目
+
+                    break;
+                case FUNCTION_2: // 评测曲目
+
+                    break;
+                default:
+                    break;
+            }
+        });
+
+        // 曲目统计信息
+
+        return wrapper;
+    }
+
+    /**
+     * 曲目统计信息查询
+     *
+     * @param page  IPage<MusicCompareWrapper.RecordInfo>
+     * @param query MusicCompareWrapper.StatQueryInfo
+     * @return IPage<MusicCompareWrapper.RecordInfo>
+     */
+    @Override
+    public IPage<MusicCompareWrapper.RecordInfo> findMusicCompareRecordPage(IPage<Object> page, MusicCompareWrapper.StatQueryInfo query) {
+
+        // 用户曲目统计信息
+
         return null;
     }
 }

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

@@ -2,9 +2,11 @@ package com.yonge.cooleshow.biz.dal.wrapper.music;
 
 import com.alibaba.fastjson.JSON;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+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.NoArgsConstructor;
 
@@ -20,6 +22,7 @@ public class MusicCompareWrapper {
      * 统计汇总查询条件
      */
     @Data
+    @Builder
     @NoArgsConstructor
     @AllArgsConstructor
     public static class StatQueryInfo extends QueryInfo {
@@ -27,10 +30,18 @@ public class MusicCompareWrapper {
         @ApiModelProperty("客户端类型 TEACHER(老师端) STUDENT(学生端)")
         private ClientEnum clientType;
 
+        @ApiModelProperty("用户ID ")
+        private Long userId;
 
-        public static StatQueryInfo from(String recv) {
+        @ApiModelProperty("排序类型 ")
+        private MusicCompareType compareType;
 
-            return JSON.parseObject(recv, StatQueryInfo.class);
+        @ApiModelProperty("排序方式 升序(ASC) 降序(DESC)")
+        private String sortType;
+
+        public static StatQueryInfo from(String record) {
+
+            return JSON.parseObject(record, StatQueryInfo.class);
         }
 
     }
@@ -39,12 +50,13 @@ public class MusicCompareWrapper {
      * 曲目统计汇总信息
      */
     @Data
+    @Builder
     @NoArgsConstructor
     @AllArgsConstructor
     public static class RecordStat implements Serializable {
 
-        @ApiModelProperty("曲目总数")
-        private Long musicNums;
+        @ApiModelProperty("练习曲目总数")
+        private Long trainMusicNums;
 
         @ApiModelProperty("使用时长")
         private Long trainDuration;
@@ -52,15 +64,15 @@ public class MusicCompareWrapper {
         @ApiModelProperty("使用次数")
         private Long trainFrequency;
 
+        @ApiModelProperty("评测曲目总数")
+        private Long evaluateMusicNums;
+
         @ApiModelProperty("评测时长")
         private Long evaluateDuration;
 
         @ApiModelProperty("评测次数")
         private Long evaluateFrequency;
 
-        @ApiModelProperty("最近使用时间")
-        private Long recentTime;
-
         private List<RecordInfo> recordInfos;
 
         public String jsonString() {
@@ -73,6 +85,7 @@ public class MusicCompareWrapper {
      * 曲目统计信息
      */
     @Data
+    @Builder
     @NoArgsConstructor
     @AllArgsConstructor
     public static class RecordInfo implements Serializable {