From a12b838f8e8555671d0752cd85e8e2ce9d208429 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Tue, 13 Jan 2026 09:59:12 +0800
Subject: [PATCH] feat(ai): 添加学习记录排行榜功能

---
 src/main/java/cc/mrbird/febs/ai/req/member/ApiCompanyStudyRecordDto.java    |   27 +++++++++++++
 src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberServiceImpl.java       |   12 ++++++
 src/main/java/cc/mrbird/febs/ai/service/AiMemberAnswerService.java          |    4 ++
 src/main/java/cc/mrbird/febs/ai/service/AiMemberService.java                |    2 +
 src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberAnswerServiceImpl.java |    7 +++
 src/main/java/cc/mrbird/febs/ai/controller/member/ApiMemberController.java  |   10 +++++
 src/main/java/cc/mrbird/febs/ai/mapper/AiMemberAnswerMapper.java            |    4 ++
 src/main/resources/mapper/modules/AiMemberAnswerMapper.xml                  |   15 +++++++
 src/main/java/cc/mrbird/febs/ai/res/member/ApiCompanyStudyRecordVo.java     |   19 +++++++++
 9 files changed, 100 insertions(+), 0 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/ai/controller/member/ApiMemberController.java b/src/main/java/cc/mrbird/febs/ai/controller/member/ApiMemberController.java
index 269307d..29f22e9 100644
--- a/src/main/java/cc/mrbird/febs/ai/controller/member/ApiMemberController.java
+++ b/src/main/java/cc/mrbird/febs/ai/controller/member/ApiMemberController.java
@@ -99,6 +99,16 @@
         return aiMemberService.studyList(dto);
     }
 
+    @ApiOperation(value = "学习成果-排行版", notes = "学习成果-排行版")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "success", response = ApiCompanyStudyRecordVo.class)
+    })
+    @PostMapping(value = "/studyRecordList")
+    public FebsResponse studyRecordList(@RequestBody @Validated ApiCompanyStudyRecordDto dto) {
+
+        return aiMemberService.studyRecordList(dto);
+    }
+
     @ApiOperation(value = "学习成果-题目正确率", notes = "学习成果-题目正确率")
     @ApiResponses({
             @ApiResponse(code = 200, message = "success", response = ApiCompanyStudyPercentVo.class)
diff --git a/src/main/java/cc/mrbird/febs/ai/mapper/AiMemberAnswerMapper.java b/src/main/java/cc/mrbird/febs/ai/mapper/AiMemberAnswerMapper.java
index 44449ee..5f88713 100644
--- a/src/main/java/cc/mrbird/febs/ai/mapper/AiMemberAnswerMapper.java
+++ b/src/main/java/cc/mrbird/febs/ai/mapper/AiMemberAnswerMapper.java
@@ -2,8 +2,10 @@
 
 import cc.mrbird.febs.ai.entity.AiMemberAnswer;
 import cc.mrbird.febs.ai.req.member.ApiCompanyStudyDto;
+import cc.mrbird.febs.ai.req.member.ApiCompanyStudyRecordDto;
 import cc.mrbird.febs.ai.req.member.ApiMemberAnswerPageDto;
 import cc.mrbird.febs.ai.req.memberAnswer.ApiMemberProductWorkPageDto;
+import cc.mrbird.febs.ai.res.member.ApiCompanyStudyRecordVo;
 import cc.mrbird.febs.ai.res.member.ApiCompanyStudyVo;
 import cc.mrbird.febs.ai.res.member.ApiMemberAnswerPageVo;
 import cc.mrbird.febs.ai.res.memberAnswer.ApiMemberProductWorkVo;
@@ -25,4 +27,6 @@
     Page<ApiMemberAnswerPageVo> getAnswerPage(Page<ApiMemberAnswerPageVo> page, @Param("record")ApiMemberAnswerPageDto dto);
 
     IPage<ApiCompanyStudyVo> selectProductListPage(Page<ApiCompanyStudyVo> page, @Param("record")ApiCompanyStudyDto dto);
+
+    IPage<ApiCompanyStudyRecordVo> getStudyRecordList(Page<ApiCompanyStudyRecordVo> page, @Param("record")ApiCompanyStudyRecordDto dto);
 }
diff --git a/src/main/java/cc/mrbird/febs/ai/req/member/ApiCompanyStudyRecordDto.java b/src/main/java/cc/mrbird/febs/ai/req/member/ApiCompanyStudyRecordDto.java
new file mode 100644
index 0000000..18f711c
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/ai/req/member/ApiCompanyStudyRecordDto.java
@@ -0,0 +1,27 @@
+package cc.mrbird.febs.ai.req.member;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+@Data
+@ApiModel(value = "ApiCompanyStudyRecordDto", description = "参数")
+public class ApiCompanyStudyRecordDto {
+
+    @NotNull(message = "页码不能为空")
+    @ApiModelProperty(value = "页码", example = "1")
+    private Integer pageNow;
+
+    @NotNull(message = "每页数量不能为空")
+    @ApiModelProperty(value = "每页数量", example = "10")
+    private Integer pageSize;
+
+    @NotBlank(message = "产品ID不能为空")
+    @ApiModelProperty(value = "产品ID")
+    private String productId;
+
+    @ApiModelProperty(value = "公司ID")
+    private String companyId;
+}
diff --git a/src/main/java/cc/mrbird/febs/ai/res/member/ApiCompanyStudyRecordVo.java b/src/main/java/cc/mrbird/febs/ai/res/member/ApiCompanyStudyRecordVo.java
new file mode 100644
index 0000000..f57e62c
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/ai/res/member/ApiCompanyStudyRecordVo.java
@@ -0,0 +1,19 @@
+package cc.mrbird.febs.ai.res.member;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "ApiCompanyStudyRecordVo", description = "参数")
+public class ApiCompanyStudyRecordVo {
+
+    @ApiModelProperty(value = "微信名")
+    private String nickName;
+
+    @ApiModelProperty(value = "用户姓名")
+    private String memberName;
+
+    @ApiModelProperty(value = "评分")
+    private Integer score;
+}
diff --git a/src/main/java/cc/mrbird/febs/ai/service/AiMemberAnswerService.java b/src/main/java/cc/mrbird/febs/ai/service/AiMemberAnswerService.java
index 7b0c798..ef4df96 100644
--- a/src/main/java/cc/mrbird/febs/ai/service/AiMemberAnswerService.java
+++ b/src/main/java/cc/mrbird/febs/ai/service/AiMemberAnswerService.java
@@ -2,8 +2,10 @@
 
 import cc.mrbird.febs.ai.entity.AiMemberAnswer;
 import cc.mrbird.febs.ai.req.member.ApiCompanyStudyDto;
+import cc.mrbird.febs.ai.req.member.ApiCompanyStudyRecordDto;
 import cc.mrbird.febs.ai.req.member.ApiMemberAnswerPageDto;
 import cc.mrbird.febs.ai.req.memberAnswer.*;
+import cc.mrbird.febs.ai.res.member.ApiCompanyStudyRecordVo;
 import cc.mrbird.febs.ai.res.member.ApiCompanyStudyVo;
 import cc.mrbird.febs.ai.res.member.ApiMemberAnswerPageVo;
 import cc.mrbird.febs.common.entity.FebsResponse;
@@ -50,4 +52,6 @@
     Page<ApiMemberAnswerPageVo> getAnswerPage(Page<ApiMemberAnswerPageVo> page, ApiMemberAnswerPageDto dto);
 
     IPage<ApiCompanyStudyVo> selectListPage(ApiCompanyStudyDto dto, Page<ApiCompanyStudyVo> page);
+
+    IPage<ApiCompanyStudyRecordVo> getStudyRecordList(Page<ApiCompanyStudyRecordVo> page, ApiCompanyStudyRecordDto dto);
 }
diff --git a/src/main/java/cc/mrbird/febs/ai/service/AiMemberService.java b/src/main/java/cc/mrbird/febs/ai/service/AiMemberService.java
index 33e932b..8d1d15a 100644
--- a/src/main/java/cc/mrbird/febs/ai/service/AiMemberService.java
+++ b/src/main/java/cc/mrbird/febs/ai/service/AiMemberService.java
@@ -26,4 +26,6 @@
     FebsResponse studyPercentList(ApiCompanyStudyPercentDto dto);
 
     FebsResponse studyInfoList(ApiCompanyStudyInfoDto dto);
+
+    FebsResponse studyRecordList(ApiCompanyStudyRecordDto dto);
 }
diff --git a/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberAnswerServiceImpl.java b/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberAnswerServiceImpl.java
index d4fed26..15da33c 100644
--- a/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberAnswerServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberAnswerServiceImpl.java
@@ -4,8 +4,10 @@
 import cc.mrbird.febs.ai.enumerates.AiTypeEnum;
 import cc.mrbird.febs.ai.mapper.AiMemberAnswerMapper;
 import cc.mrbird.febs.ai.req.member.ApiCompanyStudyDto;
+import cc.mrbird.febs.ai.req.member.ApiCompanyStudyRecordDto;
 import cc.mrbird.febs.ai.req.member.ApiMemberAnswerPageDto;
 import cc.mrbird.febs.ai.req.memberAnswer.*;
+import cc.mrbird.febs.ai.res.member.ApiCompanyStudyRecordVo;
 import cc.mrbird.febs.ai.res.member.ApiCompanyStudyVo;
 import cc.mrbird.febs.ai.res.member.ApiMemberAnswerPageVo;
 import cc.mrbird.febs.ai.res.memberAnswer.*;
@@ -463,4 +465,9 @@
     public IPage<ApiCompanyStudyVo> selectListPage(ApiCompanyStudyDto dto, Page<ApiCompanyStudyVo> page) {
         return aiMemberAnswerMapper.selectProductListPage(page,dto);
     }
+
+    @Override
+    public IPage<ApiCompanyStudyRecordVo> getStudyRecordList(Page<ApiCompanyStudyRecordVo> page, ApiCompanyStudyRecordDto dto) {
+        return aiMemberAnswerMapper.getStudyRecordList(page,dto);
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberServiceImpl.java
index b0eb286..7fadea8 100644
--- a/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberServiceImpl.java
@@ -504,4 +504,16 @@
         }
         return  new FebsResponse().success().data(objects);
     }
+
+    @Override
+    public FebsResponse studyRecordList(ApiCompanyStudyRecordDto dto) {
+
+        String companyId = LoginUserUtil.getLoginUser().getCompanyId();
+        dto.setCompanyId( companyId);
+
+        // 创建分页对象,传入当前页和每页大小
+        Page<ApiCompanyStudyRecordVo> page = new Page<>(dto.getPageNow(), dto.getPageSize());
+        IPage<ApiCompanyStudyRecordVo> result = aiMemberAnswerService.getStudyRecordList(page,dto);
+        return new FebsResponse().success().data(result);
+    }
 }
diff --git a/src/main/resources/mapper/modules/AiMemberAnswerMapper.xml b/src/main/resources/mapper/modules/AiMemberAnswerMapper.xml
index 492dab3..992df16 100644
--- a/src/main/resources/mapper/modules/AiMemberAnswerMapper.xml
+++ b/src/main/resources/mapper/modules/AiMemberAnswerMapper.xml
@@ -59,4 +59,19 @@
         order by b.CREATED_TIME desc
 
     </select>
+
+
+
+    <select id="getStudyRecordList" resultType="cc.mrbird.febs.ai.res.member.ApiCompanyStudyRecordVo">
+        select
+            a.name as nickName,
+            a.real_name as memberName,
+            b.score as score
+        from ai_member_answer b
+        left join mall_member a on b.member_id = a.member_uuid
+        where b.product_id = #{record.productId}
+          and b.company_id = #{record.companyId}
+        order by a.score desc
+
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.1