| | |
| | | } |
| | | |
| | | @Override |
| | | public FebsResponse talkReportList(ApiTalkReportListDto dto) { |
| | | ApiTalkReportListVo apiTalkReportListDto = new ApiTalkReportListVo(); |
| | | |
| | | public Flux<FebsResponse> talkReportList(ApiTalkReportListDto dto) { |
| | | String memberTalkId = dto.getMemberTalkId(); |
| | | AiMemberTalk byId = aiMemberTalkService.getById(memberTalkId); |
| | | apiTalkReportListDto.setAnalysis(byId.getAnalysis()); |
| | | return new FebsResponse().success().data(apiTalkReportListDto); |
| | | String analysis = byId.getAnalysis(); |
| | | |
| | | if (StrUtil.isEmpty(analysis)) { |
| | | return Flux.just(new FebsResponse().success().data("")); |
| | | } |
| | | |
| | | // 将分析报告分块,每块100个字符 |
| | | return Flux.generate( |
| | | () -> 0, // 初始状态 |
| | | (index, sink) -> { |
| | | int endIndex = Math.min(index + 100, analysis.length()); |
| | | String chunk = analysis.substring(index, endIndex); |
| | | |
| | | Map<String, Object> responseData = new HashMap<>(); |
| | | responseData.put("chunk", chunk); |
| | | responseData.put("isLast", endIndex >= analysis.length()); |
| | | responseData.put("progress", Math.min(100, (endIndex * 100) / analysis.length())); |
| | | |
| | | sink.next(new FebsResponse().success().data(responseData)); |
| | | |
| | | if (endIndex >= analysis.length()) { |
| | | sink.complete(); |
| | | return index; // 结束状态 |
| | | } |
| | | |
| | | return endIndex; // 下一次的起始索引 |
| | | } |
| | | ); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public FebsResponse reload(ApiMemberTalkReloadStreamDto dto) { |
| | | |