Administrator
7 hours ago a12b838f8e8555671d0752cd85e8e2ce9d208429
feat(ai): 添加学习记录排行榜功能

- 新增 ApiCompanyStudyRecordDto 请求参数类
- 新增 ApiCompanyStudyRecordVo 响应结果类
- 在 AiMemberAnswerMapper 中添加 getStudyRecordList 查询方法
- 在 AiMemberAnswerService 中添加 getStudyRecordList 服务接口
- 在 AiMemberServiceImpl 中实现 studyRecordList 业务逻辑
- 在 ApiMemberController 中添加 /studyRecordList 接口
- 配置 MyBatis XML 映射文件实现学习记录查询功能
- 添加 Swagger API 文档注解支持
7 files modified
2 files added
100 ■■■■■ changed files
src/main/java/cc/mrbird/febs/ai/controller/member/ApiMemberController.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/mapper/AiMemberAnswerMapper.java 4 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/req/member/ApiCompanyStudyRecordDto.java 27 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/res/member/ApiCompanyStudyRecordVo.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/service/AiMemberAnswerService.java 4 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/service/AiMemberService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberAnswerServiceImpl.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberServiceImpl.java 12 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/AiMemberAnswerMapper.xml 15 ●●●●● patch | view | raw | blame | history
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)
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);
}
src/main/java/cc/mrbird/febs/ai/req/member/ApiCompanyStudyRecordDto.java
New file
@@ -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;
}
src/main/java/cc/mrbird/febs/ai/res/member/ApiCompanyStudyRecordVo.java
New file
@@ -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;
}
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);
}
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);
}
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);
    }
}
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);
    }
}
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>