diff --git a/Debate_backend/src/main/java/com/learning/newdemo/controller/WxAIController.java b/Debate_backend/src/main/java/com/learning/newdemo/controller/WxAIController.java index 0727827..f4f41bb 100644 --- a/Debate_backend/src/main/java/com/learning/newdemo/controller/WxAIController.java +++ b/Debate_backend/src/main/java/com/learning/newdemo/controller/WxAIController.java @@ -1,14 +1,17 @@ package com.learning.newdemo.controller; - import com.learning.newdemo.common.Result; +import com.learning.newdemo.entity.DebateHistory; +import com.learning.newdemo.service.DebateHistoryService; import com.learning.newdemo.service.WxArgumentService; import com.learning.newdemo.service.WxDebateService; import com.learning.newdemo.service.WxReviewService; +import com.learning.newdemo.util.JwtUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -27,20 +30,23 @@ public class WxAIController { @Autowired private WxDebateService wxDebateService; + + @Autowired + private DebateHistoryService debateHistoryService; + + @Autowired + private JwtUtil jwtUtil; private String topic; - private String stance; - private String content; @PostMapping("/argument") - public Result> getArgument(@RequestBody Map params){ + public Result> getArgument(@RequestBody Map params) { topic = params.get("topic"); stance = params.get("stance"); - - if(topic == null || stance == null){ + if(topic == null || stance == null) { return Result.error("立论主题或者内容为空"); } @@ -54,20 +60,18 @@ public class WxAIController { Map data = new HashMap<>(); data.put("argument", argument); - // 查看data log.info("立论获取成功:{}", argument); return Result.success(data); - }catch (Exception e){ + } catch (Exception e) { log.error("立论获取失败", e); return Result.error("立论获取失败:" + e.getMessage()); } } @PostMapping("/review") - public Result> review(@RequestBody Map params){ + public Result> review(@RequestBody Map params) { log.info("请求内容: {}", params); - content = params.get("content"); try { @@ -78,35 +82,70 @@ public class WxAIController { Map data = new HashMap<>(); data.put("review", review); - // 查看data log.info("复盘获取成功:{}", review); return Result.success(data); - }catch (Exception e){ + } catch (Exception e) { log.error("复盘获取失败", e); return Result.error("复盘获取失败:" + e.getMessage()); } } + @PostMapping("/debate") - public Result> debate(@RequestBody Map params){ + public Result> debate(@RequestBody Map params, + @RequestHeader("Authorization") String token) { log.info("请求内容: {}", params); String history = params.get("history"); String userMessage = params.get("userMessage"); + Integer currentRound = params.get("currentRound") != null ? Integer.parseInt(params.get("currentRound")) : 1; + String debateMode = params.get("debateMode"); // "ten" 或 "twenty" + + // 根据辩论模式设置最大轮数 + int maxRounds = "twenty".equals(debateMode) ? 20 : 10; + try { - String debate = wxDebateService.GetDebate(history, userMessage); + // 获取辩论结果 + Map debateResult = wxDebateService.GetDebate(history, userMessage, currentRound, maxRounds); + String debate = (String) debateResult.get("response"); + boolean isDebateEnded = (boolean) debateResult.get("isEnded"); + if (debate == null) { return Result.error("辩论获取失败"); } Map data = new HashMap<>(); data.put("debate", debate); - // 查看data - log.info("辩论获取成功:{}", debate); + data.put("currentRound", currentRound); + data.put("maxRounds", maxRounds); + data.put("isEnded", isDebateEnded); + data.put("debateMode", debateMode); + + // 如果辩论结束,自动保存历史记录 + if (isDebateEnded) { + Integer userId = jwtUtil.getUserIdFromToken(token); + if (userId != null) { + DebateHistory debateHistory = new DebateHistory(); + debateHistory.setUserId(userId); + debateHistory.setTopic(topic); + debateHistory.setStance(stance); + debateHistory.setContent(history + "\n\n用户发言: " + userMessage + "\n\nAI回复: " + debate); + debateHistory.setRounds(currentRound); + + // 生成并保存复盘 + String review = wxReviewService.GetReview(debateHistory.getContent()); + debateHistory.setReview(review); + + debateHistoryService.saveDebateHistory(debateHistory); + data.put("review", review); + data.put("historyId", debateHistory.getId()); + } + } + log.info("辩论获取成功:{}", debate); return Result.success(data); - }catch (Exception e){ + } catch (Exception e) { log.error("辩论获取失败", e); return Result.error("辩论获取失败:" + e.getMessage()); } } -} +} \ No newline at end of file diff --git a/Debate_backend/src/main/java/com/learning/newdemo/service/WxDebateService.java b/Debate_backend/src/main/java/com/learning/newdemo/service/WxDebateService.java index 93bafa4..242e955 100644 --- a/Debate_backend/src/main/java/com/learning/newdemo/service/WxDebateService.java +++ b/Debate_backend/src/main/java/com/learning/newdemo/service/WxDebateService.java @@ -1,5 +1,9 @@ + + package com.learning.newdemo.service; +import java.util.Map; + public interface WxDebateService { - String GetDebate(String history, String userMessage); -} + Map GetDebate(String history, String userMessage, int currentRound, int maxRounds); +} \ No newline at end of file diff --git a/Debate_backend/src/main/java/com/learning/newdemo/service/impl/WxDebateServiceImpl.java b/Debate_backend/src/main/java/com/learning/newdemo/service/impl/WxDebateServiceImpl.java index 7d46c79..c5a7c31 100644 --- a/Debate_backend/src/main/java/com/learning/newdemo/service/impl/WxDebateServiceImpl.java +++ b/Debate_backend/src/main/java/com/learning/newdemo/service/impl/WxDebateServiceImpl.java @@ -1,19 +1,26 @@ + + package com.learning.newdemo.service.impl; import com.learning.newdemo.service.WxDebateService; +import com.learning.newdemo.service.WxReviewService; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.*; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; - +import java.util.HashMap; +import java.util.Map; @Service @Slf4j public class WxDebateServiceImpl implements WxDebateService { - // 通过构造函数从IOC容器中注入RestTemplate private final RestTemplate restTemplate; + + @Autowired + private WxReviewService wxReviewService; @Value("${ai.debate.body.message.content-sys}") private String contentSys; @Value("${ai.debate.header.Authorization}") private String authorizationHeader; @@ -36,18 +43,29 @@ public class WxDebateServiceImpl implements WxDebateService { } @Override - public String GetDebate(String history, String userMessage){ + public Map GetDebate(String history, String userMessage, int currentRound, int maxRounds) { + Map result = new HashMap<>(); try { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); headers.set("Authorization", authorizationHeader); + // 构建系统提示,包含轮数信息 + String systemPrompt = contentSys + String.format("\n当前是第%d轮辩论,共%d轮。", currentRound, maxRounds); + if (currentRound >= maxRounds) { + systemPrompt += "\n这是最后一轮辩论,请给出总结性回复。"; + } else if (maxRounds == 10) { + systemPrompt += "\n这是10回合快速对辩模式,请保持回答简洁有力。"; + } else if (maxRounds == 20) { + systemPrompt += "\n这是20回合深度对辩模式,可以进行更深入的分析和讨论。"; + } + StringBuilder requestBodyBuilder = new StringBuilder(); requestBodyBuilder.append("{") .append("\"messages\": [") .append("{") .append("\"role\": \"").append(roleSys).append("\",") - .append("\"content\": \"").append(escapeJson(contentSys)).append("\"") + .append("\"content\": \"").append(escapeJson(systemPrompt)).append("\"") .append("},") .append("{") .append("\"role\": \"").append(roleUser).append("\",") @@ -74,10 +92,21 @@ public class WxDebateServiceImpl implements WxDebateService { log.info("请求体:{}", requestBody); HttpEntity requestEntity = new HttpEntity<>(requestBody, headers); ResponseEntity response = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class); - return response.getBody(); - } catch (Exception e){ + + // 判断辩论是否结束 + boolean isDebateEnded = currentRound >= maxRounds; + + result.put("response", response.getBody()); + result.put("currentRound", currentRound); + result.put("maxRounds", maxRounds); + result.put("isEnded", isDebateEnded); + + return result; + } catch (Exception e) { log.error("模拟辩论获取失败", e); - return null; + result.put("response", null); + result.put("isEnded", false); + return result; } } @@ -90,4 +119,4 @@ public class WxDebateServiceImpl implements WxDebateService { .replace("\r", "\\r") .replace("\t", "\\t"); } -} +} \ No newline at end of file diff --git a/Debate_backend/target/classes/com/learning/newdemo/NewDemoApplication.class b/Debate_backend/target/classes/com/learning/newdemo/NewDemoApplication.class index f79830e..388ed9d 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/NewDemoApplication.class and b/Debate_backend/target/classes/com/learning/newdemo/NewDemoApplication.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/common/Result.class b/Debate_backend/target/classes/com/learning/newdemo/common/Result.class index 6b3c970..17902a3 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/common/Result.class and b/Debate_backend/target/classes/com/learning/newdemo/common/Result.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/config/CorsConfig.class b/Debate_backend/target/classes/com/learning/newdemo/config/CorsConfig.class index 3bbbc45..73e11c0 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/config/CorsConfig.class and b/Debate_backend/target/classes/com/learning/newdemo/config/CorsConfig.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/config/GlobalExceptionHandler.class b/Debate_backend/target/classes/com/learning/newdemo/config/GlobalExceptionHandler.class index d8e9c0a..da8a936 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/config/GlobalExceptionHandler.class and b/Debate_backend/target/classes/com/learning/newdemo/config/GlobalExceptionHandler.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/config/RestTemplateConfig.class b/Debate_backend/target/classes/com/learning/newdemo/config/RestTemplateConfig.class index c5af04f..f96619c 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/config/RestTemplateConfig.class and b/Debate_backend/target/classes/com/learning/newdemo/config/RestTemplateConfig.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/controller/DebateHistoryController.class b/Debate_backend/target/classes/com/learning/newdemo/controller/DebateHistoryController.class index 729ef04..5c3350f 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/controller/DebateHistoryController.class and b/Debate_backend/target/classes/com/learning/newdemo/controller/DebateHistoryController.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/controller/ReviewHistoryController.class b/Debate_backend/target/classes/com/learning/newdemo/controller/ReviewHistoryController.class index 124b91e..9a50b6a 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/controller/ReviewHistoryController.class and b/Debate_backend/target/classes/com/learning/newdemo/controller/ReviewHistoryController.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/controller/WxAIController.class b/Debate_backend/target/classes/com/learning/newdemo/controller/WxAIController.class index b136fa9..1a84a67 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/controller/WxAIController.class and b/Debate_backend/target/classes/com/learning/newdemo/controller/WxAIController.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/controller/WxLoginController.class b/Debate_backend/target/classes/com/learning/newdemo/controller/WxLoginController.class index b1f61a2..bf1946c 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/controller/WxLoginController.class and b/Debate_backend/target/classes/com/learning/newdemo/controller/WxLoginController.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/entity/ArgumentHistory.class b/Debate_backend/target/classes/com/learning/newdemo/entity/ArgumentHistory.class index 761aeac..2c6f45b 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/entity/ArgumentHistory.class and b/Debate_backend/target/classes/com/learning/newdemo/entity/ArgumentHistory.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/entity/DebateHistory.class b/Debate_backend/target/classes/com/learning/newdemo/entity/DebateHistory.class index f0654d7..176e85f 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/entity/DebateHistory.class and b/Debate_backend/target/classes/com/learning/newdemo/entity/DebateHistory.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/entity/WxUser.class b/Debate_backend/target/classes/com/learning/newdemo/entity/WxUser.class index ee772e0..2727c47 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/entity/WxUser.class and b/Debate_backend/target/classes/com/learning/newdemo/entity/WxUser.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/enums/Position.class b/Debate_backend/target/classes/com/learning/newdemo/enums/Position.class index a74b845..0f8323d 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/enums/Position.class and b/Debate_backend/target/classes/com/learning/newdemo/enums/Position.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/mapper/ArgumentHistoryMapper.class b/Debate_backend/target/classes/com/learning/newdemo/mapper/ArgumentHistoryMapper.class index 1a4e64c..74182c1 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/mapper/ArgumentHistoryMapper.class and b/Debate_backend/target/classes/com/learning/newdemo/mapper/ArgumentHistoryMapper.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/mapper/DebateHistoryMapper.class b/Debate_backend/target/classes/com/learning/newdemo/mapper/DebateHistoryMapper.class index d2121d3..8a633b8 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/mapper/DebateHistoryMapper.class and b/Debate_backend/target/classes/com/learning/newdemo/mapper/DebateHistoryMapper.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/mapper/WxUserMapper.class b/Debate_backend/target/classes/com/learning/newdemo/mapper/WxUserMapper.class index fae010a..a9b6094 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/mapper/WxUserMapper.class and b/Debate_backend/target/classes/com/learning/newdemo/mapper/WxUserMapper.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/service/DebateHistoryService.class b/Debate_backend/target/classes/com/learning/newdemo/service/DebateHistoryService.class index 0c3f4b0..2a22482 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/service/DebateHistoryService.class and b/Debate_backend/target/classes/com/learning/newdemo/service/DebateHistoryService.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/service/WxArgumentService.class b/Debate_backend/target/classes/com/learning/newdemo/service/WxArgumentService.class index d8eabf7..27113b1 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/service/WxArgumentService.class and b/Debate_backend/target/classes/com/learning/newdemo/service/WxArgumentService.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/service/WxDebateService.class b/Debate_backend/target/classes/com/learning/newdemo/service/WxDebateService.class index c29f778..d4817ea 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/service/WxDebateService.class and b/Debate_backend/target/classes/com/learning/newdemo/service/WxDebateService.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/service/WxReviewService.class b/Debate_backend/target/classes/com/learning/newdemo/service/WxReviewService.class index dccd6e5..cee8393 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/service/WxReviewService.class and b/Debate_backend/target/classes/com/learning/newdemo/service/WxReviewService.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/service/WxUserService.class b/Debate_backend/target/classes/com/learning/newdemo/service/WxUserService.class index ab1450c..7676664 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/service/WxUserService.class and b/Debate_backend/target/classes/com/learning/newdemo/service/WxUserService.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/service/impl/DebateHistoryServiceImpl.class b/Debate_backend/target/classes/com/learning/newdemo/service/impl/DebateHistoryServiceImpl.class index b20fa19..ffb9c52 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/service/impl/DebateHistoryServiceImpl.class and b/Debate_backend/target/classes/com/learning/newdemo/service/impl/DebateHistoryServiceImpl.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/service/impl/WxArgumentServiceImpl.class b/Debate_backend/target/classes/com/learning/newdemo/service/impl/WxArgumentServiceImpl.class index 32f48a1..784723a 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/service/impl/WxArgumentServiceImpl.class and b/Debate_backend/target/classes/com/learning/newdemo/service/impl/WxArgumentServiceImpl.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/service/impl/WxDebateServiceImpl.class b/Debate_backend/target/classes/com/learning/newdemo/service/impl/WxDebateServiceImpl.class index 90f4229..9c259f0 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/service/impl/WxDebateServiceImpl.class and b/Debate_backend/target/classes/com/learning/newdemo/service/impl/WxDebateServiceImpl.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/service/impl/WxReviewServiceImpl.class b/Debate_backend/target/classes/com/learning/newdemo/service/impl/WxReviewServiceImpl.class index cbb0627..e7d3b41 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/service/impl/WxReviewServiceImpl.class and b/Debate_backend/target/classes/com/learning/newdemo/service/impl/WxReviewServiceImpl.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/service/impl/WxUserServiceImpl.class b/Debate_backend/target/classes/com/learning/newdemo/service/impl/WxUserServiceImpl.class index c83f16f..426cea4 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/service/impl/WxUserServiceImpl.class and b/Debate_backend/target/classes/com/learning/newdemo/service/impl/WxUserServiceImpl.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/util/JwtUtil.class b/Debate_backend/target/classes/com/learning/newdemo/util/JwtUtil.class index 18d189a..ffdb07a 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/util/JwtUtil.class and b/Debate_backend/target/classes/com/learning/newdemo/util/JwtUtil.class differ