Administrator
2025-08-26 23ade5c0e386c6403a9c89f264ae3d6933c756aa
feat(ai): 添加题目轮播功能

- 在 AiTalkService 接口中新增 questionList 方法
- 实现 AiTalkServiceImpl 类中的 questionList 方法,获取最多 30条问题列表
- 在 ApiAiTalkController 中添加 questionList 的 GET 请求处理
- 新增 ApiTalkQuestionVo 类用于封装问题列表的响应数据
- 更新 WebMvcConfigure 以排除新的 questionList 请求路径
4 files modified
1 files added
61 ■■■■■ changed files
src/main/java/cc/mrbird/febs/ai/controller/talk/ApiAiTalkController.java 11 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/res/talk/ApiTalkQuestionVo.java 20 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/service/AiTalkService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/service/impl/AiTalkServiceImpl.java 27 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/controller/talk/ApiAiTalkController.java
@@ -12,6 +12,7 @@
import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkVo;
import cc.mrbird.febs.ai.res.talk.ApiTalkItemPageVo;
import cc.mrbird.febs.ai.res.talk.ApiTalkPageVo;
import cc.mrbird.febs.ai.res.talk.ApiTalkQuestionVo;
import cc.mrbird.febs.ai.res.talk.ApiTalkVo;
import cc.mrbird.febs.ai.service.AiMemberTalkService;
import cc.mrbird.febs.ai.service.AiTalkService;
@@ -39,6 +40,16 @@
    private final AiTalkService aiTalkService;
    @ApiOperation(value = "题目轮播", notes = "题目轮播")
    @ApiResponses({
            @ApiResponse(code = 200, message = "success", response = ApiTalkQuestionVo.class)
    })
    @GetMapping(value = "/questionList")
    public FebsResponse questionList() {
        return aiTalkService.questionList();
    }
    @ApiOperation(value = "用户AI问答", notes = "用户AI问答")
    @ApiResponses({
            @ApiResponse(code = 200, message = "success", response = ApiTalkVo.class)
src/main/java/cc/mrbird/febs/ai/res/talk/ApiTalkQuestionVo.java
New file
@@ -0,0 +1,20 @@
package cc.mrbird.febs.ai.res.talk;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
 * @author Administrator
 */
@Data
@ApiModel(value = "ApiTalkQuestionVo", description = "参数")
public class ApiTalkQuestionVo {
    @ApiModelProperty(value = "内容", example = "10")
    private String context;
}
src/main/java/cc/mrbird/febs/ai/service/AiTalkService.java
@@ -13,6 +13,8 @@
public interface AiTalkService extends IService<AiTalk> {
    FebsResponse questionList();
    FebsResponse talkOpen(ApiTalkDto dto);
    AiTalk add(String memberUuid, String question, Date date);
src/main/java/cc/mrbird/febs/ai/service/impl/AiTalkServiceImpl.java
@@ -1,5 +1,6 @@
package cc.mrbird.febs.ai.service.impl;
import cc.mrbird.febs.ai.entity.AiProductQuestion;
import cc.mrbird.febs.ai.entity.AiTalk;
import cc.mrbird.febs.ai.mapper.AiTalkMapper;
import cc.mrbird.febs.ai.req.talk.AiTalkAnswerStream;
@@ -8,16 +9,21 @@
import cc.mrbird.febs.ai.req.talk.ApiTalkPageDto;
import cc.mrbird.febs.ai.res.memberAnswer.ApiMemberProductWorkVo;
import cc.mrbird.febs.ai.res.talk.ApiTalkPageVo;
import cc.mrbird.febs.ai.res.talk.ApiTalkQuestionVo;
import cc.mrbird.febs.ai.res.talk.ApiTalkVo;
import cc.mrbird.febs.ai.service.AiProductQuestionService;
import cc.mrbird.febs.ai.service.AiService;
import cc.mrbird.febs.ai.service.AiTalkItemService;
import cc.mrbird.febs.ai.service.AiTalkService;
import cc.mrbird.febs.ai.utils.UUID;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.utils.LoginUserUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
@@ -25,7 +31,9 @@
import org.springframework.stereotype.Service;
import reactor.core.publisher.Flux;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Slf4j
@Service
@@ -33,7 +41,26 @@
public class AiTalkServiceImpl extends ServiceImpl<AiTalkMapper, AiTalk> implements AiTalkService {
    private final AiTalkItemService aiTalkItemService;
    private final AiProductQuestionService aiProductQuestionService;
    private final AiService aiService;
    @Override
    public FebsResponse questionList() {
        List<ApiTalkQuestionVo> list = new ArrayList<>();
        LambdaQueryWrapper<AiProductQuestion> queryWrapper = Wrappers.lambdaQuery(AiProductQuestion.class);
        queryWrapper.orderByDesc(AiProductQuestion::getCreatedTime);
        queryWrapper.last("limit 30");
        List<AiProductQuestion> listByQuery = aiProductQuestionService.getListByQuery(queryWrapper);
        if (CollUtil.isNotEmpty(listByQuery)){
            for (AiProductQuestion aiProductQuestion : listByQuery){
                ApiTalkQuestionVo apiTalkQuestionVo = new ApiTalkQuestionVo();
                apiTalkQuestionVo.setContext(aiProductQuestion.getTitle());
                list.add(apiTalkQuestionVo);
            }
        }
        return new FebsResponse().success().data(list);
    }
    @Override
    public FebsResponse talkOpen(ApiTalkDto dto) {
        String talkId = dto.getTalkId();
src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java
@@ -63,5 +63,6 @@
        registration.excludePathPatterns("/api/ai/productPoint/**");
        registration.excludePathPatterns("/api/ai/test/**");
        registration.excludePathPatterns("/api/ai/memberTalk/answer-stream");
        registration.excludePathPatterns("/api/ai/talk/questionList");
    }
}