# 微信小程序辩论助手后端 ## 项目介绍 本项目是一个微信小程序辩论助手的后端服务,实现了微信小程序登录、获取用户信息、AI辅助立论、复盘分析、模拟辩论等功能,并支持历史记录的保存与查询。 ## 技术栈 - Spring Boot 3.0.12 - MyBatis 3.0.1 - MySQL 8.0 - JWT - RestTemplate (AI接口调用) ## 项目结构 ``` src/main/java/com/learning/newdemo ├── config // 配置类 ├── controller // 控制器 ├── entity // 实体类 ├── mapper // 数据访问层 ├── service // 服务层 │ └── impl // 服务实现 ├── util // 工具类 └── common // 通用类 ``` ## 运行环境 - JDK 17+ - MySQL 8.0+ - Maven 3.6+ ## 数据库配置 1. 创建数据库和表 ```sql # 执行src/main/resources/db/wx_miniapp.sql脚本 # 用户表 CREATE TABLE `wx_user` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `openid` varchar(100) NOT NULL COMMENT '微信openid', `nickname` varchar(50) DEFAULT NULL COMMENT '昵称', `avatar_url` varchar(255) DEFAULT NULL COMMENT '头像', `gender` tinyint DEFAULT NULL COMMENT '性别 0-未知 1-男 2-女', `country` varchar(50) DEFAULT NULL COMMENT '国家', `province` varchar(50) DEFAULT NULL COMMENT '省份', `city` varchar(50) DEFAULT NULL COMMENT '城市', `language` varchar(50) DEFAULT NULL COMMENT '语言', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_openid` (`openid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='微信用户表'; # 对话活动表 CREATE TABLE `wx_conversation` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `user_id` bigint NOT NULL COMMENT '用户ID', `type` varchar(20) NOT NULL COMMENT '对话类型(debate/argument/review)', `title` varchar(255) DEFAULT NULL COMMENT '对话标题', `preview` varchar(255) DEFAULT NULL COMMENT '预览内容(最后一次AI回复的前10个字符)', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_user_id` (`user_id`), KEY `idx_type` (`type`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='对话活动表'; # 辩论历史记录表 CREATE TABLE `wx_debate_record` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `conversation_id` bigint NOT NULL COMMENT '对话活动ID', `content` text COMMENT 'AI回复内容', `user_message` text COMMENT '用户消息', `sequence` int NOT NULL COMMENT '消息序号', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_conversation_id` (`conversation_id`), KEY `idx_sequence` (`sequence`), CONSTRAINT `fk_debate_conversation` FOREIGN KEY (`conversation_id`) REFERENCES `wx_conversation` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='辩论历史记录表'; # 立论历史记录表 CREATE TABLE `wx_argument_record` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `conversation_id` bigint NOT NULL COMMENT '对话活动ID', `topic` varchar(255) DEFAULT NULL COMMENT '辩题', `stance` varchar(50) DEFAULT NULL COMMENT '立场', `content` text COMMENT 'AI回复内容', `user_message` text COMMENT '用户消息', `sequence` int NOT NULL COMMENT '消息序号', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_conversation_id` (`conversation_id`), KEY `idx_sequence` (`sequence`), CONSTRAINT `fk_argument_conversation` FOREIGN KEY (`conversation_id`) REFERENCES `wx_conversation` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='立论历史记录表'; # 复盘历史记录表 CREATE TABLE `wx_review_record` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `conversation_id` bigint NOT NULL COMMENT '对话活动ID', `content` text COMMENT 'AI回复内容', `user_message` text COMMENT '用户消息', `sequence` int NOT NULL COMMENT '消息序号', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_conversation_id` (`conversation_id`), KEY `idx_sequence` (`sequence`), CONSTRAINT `fk_review_conversation` FOREIGN KEY (`conversation_id`) REFERENCES `wx_conversation` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='复盘历史记录表'; ``` 2. 修改数据库连接信息(`application.yml`) ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/wx_miniapp?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root password: 1234 ``` ## 微信小程序配置 修改`application.yml`中的微信小程序配置: ```yaml wechat: miniapp: appid: 你的小程序APPID secret: 你的小程序SECRET ``` ## AI接口配置 修改`application.yml`中的AI接口配置: ```yaml ai: api: url: AI接口地址 key: API密钥(如果需要) ``` ## 启动项目 ```bash mvn spring-boot:run ``` ## 接口说明 ### 1. 登录接口 - URL: `/api/wx/login` - Method: POST - Body: ```json { "code": "微信临时登录凭证" } ``` - Response: ```json { "success": true, "code": 200, "message": "操作成功", "data": { "token": "JWT令牌" } } ``` ### 2. 获取用户信息接口 - URL: `/api/wx/user` - Method: GET - Headers: ``` Authorization: 登录接口返回的token ``` - Response: ```json { "success": true, "code": 200, "message": "操作成功", "data": { "id": 1, "openid": "用户openid", "nickname": "用户昵称", "avatarUrl": "头像URL", "gender": 1, "country": "国家", "province": "省份", "city": "城市", "language": "语言" } } ``` ### 3. AI接口 #### 3.1 立论接口 - URL: `/api/ai/argument` - Method: POST - Headers: ``` Authorization: 登录接口返回的token ``` - Body: ```json { "conversationId": "对话活动ID(可选,有则更新,无则新建)", "topic": "辩题", "stance": "立场(正方/反方)" } ``` - Response: ```json { "success": true, "code": 200, "message": "操作成功", "data": { "content": "AI生成的立论内容", "conversationId": "对话活动ID" } } ``` - 调用时机:用户在立论助手页面输入辩题和选择立场后,点击发送按钮时调用 - 数据库操作: - 如果没有conversationId,则在wx_conversation表中新建一条记录,type为"argument",并返回新建的conversationId - 在wx_argument_record表中插入一条记录,包含用户消息和AI回复内容 - 更新wx_conversation表中对应记录的preview字段(取AI回复内容前10个字符) #### 3.2 复盘接口 - URL: `/api/ai/review` - Method: POST - Headers: ``` Authorization: 登录接口返回的token ``` - Body: ```json { "conversationId": "对话活动ID(可选,有则更新,无则新建)", "content": "用户输入的辩论内容或复盘需求" } ``` - Response: ```json { "success": true, "code": 200, "message": "操作成功", "data": { "content": "AI生成的复盘分析内容", "conversationId": "对话活动ID" } } ``` - 调用时机:用户在复盘分析页面输入辩论内容或复盘需求后,点击发送按钮时调用 - 数据库操作: - 如果没有conversationId,则在wx_conversation表中新建一条记录,type为"review",并返回新建的conversationId - 在wx_review_record表中插入一条记录,包含用户消息和AI回复内容 - 更新wx_conversation表中对应记录的preview字段(取AI回复内容前10个字符) #### 3.3 辩论接口 - URL: `/api/ai/debate` - Method: POST - Headers: ``` Authorization: 登录接口返回的token ``` - Body: ```json { "conversationId": "对话活动ID(可选,有则更新,无则新建)", "userMessage": "用户当前输入的消息" } ``` - Response: ```json { "success": true, "code": 200, "message": "操作成功", "data": { "content": "AI生成的辩论回复内容", "conversationId": "对话活动ID" } } ``` - 调用时机:用户在模拟辩论页面输入消息后,点击发送按钮时调用 - 数据库操作: - 如果没有conversationId,则在wx_conversation表中新建一条记录,type为"debate",并返回新建的conversationId - 在wx_debate_record表中插入一条记录,包含用户消息和AI回复内容 - 更新wx_conversation表中对应记录的preview字段(取AI回复内容前10个字符) ### 4. 历史记录接口 #### 4.1 获取对话活动列表 - URL: `/api/conversation/list` - Method: GET - Headers: ``` Authorization: 登录接口返回的token ``` - Response: ```json { "success": true, "code": 200, "message": "操作成功", "data": [ { "id": 1, "type": "debate", "title": "对话标题", "preview": "AI回复的前10个字符", "createTime": "2023-01-01 12:00:00" } ] } ``` - 调用时机:用户进入历史记录列表页面时调用,根据当前所在模块传入不同的type参数 - 数据库操作:查询当前用户在wx_conversation表中指定type的所有记录,按创建时间倒序排列 #### 4.2 获取辩论历史记录详情 - URL: `/api/conversation/debate/{conversationId}` - Method: GET - Headers: ``` Authorization: 登录接口返回的token ``` - Response: ```json { "success": true, "code": 200, "message": "操作成功", "data": { "id": 1, "userMessage": "用户消息", "content": "AI回复内容", "sequence": 1, "createTime": "2023-01-01 12:00:00" } } ``` - 调用时机:用户点击辩论历史记录列表中的某一项时调用 - 数据库操作: - 查询wx_conversation表中指定id的记录 - 查询wx_debate_record表中conversation_id等于指定id的所有记录,按sequence排序 #### 4.3 获取立论历史记录详情 - URL: `/api/conversation/argument/{conversationId}` - Method: GET - Headers: ``` Authorization: 登录接口返回的token ``` - Response: ```json { "success": true, "code": 200, "message": "操作成功", "data": [ { "id": 1, "userMessage": "用户消息", "content": "AI回复内容", "sequence": 1, "createTime": "2023-01-01 12:00:00" } ] } ``` - 调用时机:用户点击立论历史记录列表中的某一项时调用 - 数据库操作: - 查询wx_conversation表中指定id的记录 - 查询wx_argument_record表中conversation_id等于指定id的所有记录,按sequence排序 #### 4.4 获取复盘历史记录详情 - URL: `/api/conversation/review/{conversationId}` - Method: GET - Headers: ``` Authorization: 登录接口返回的token ``` - Response: ```json { "success": true, "code": 200, "message": "操作成功", "data": { [ { "id": 1, "userMessage": "用户消息", "content": "AI回复内容", "sequence": 1, "createTime": "2023-01-01 12:00:00" } ] } } ``` - 调用时机:用户点击复盘历史记录列表中的某一项时调用 - 数据库操作: - 查询wx_conversation表中指定id的记录 - 查询wx_review_record表中conversation_id等于指定id的所有记录,按sequence排序