You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			| 
				
					
						
							 | 
			5 months ago | |
|---|---|---|
| .. | ||
| .idea | 6 months ago | |
| src/main | 5 months ago | |
| target/classes | 5 months ago | |
| README.md | 5 months ago | |
| pom.xml | 7 months ago | |
		
			
				
				README.md
			
		
		
	
	微信小程序辩论助手后端
项目介绍
本项目是一个微信小程序辩论助手的后端服务,实现了微信小程序登录、获取用户信息、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+
 
数据库配置
- 创建数据库和表
 
# 执行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='复盘历史记录表';
- 修改数据库连接信息(
application.yml) 
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/wx_miniapp?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    username: root
    password: 1234
微信小程序配置
修改application.yml中的微信小程序配置:
wechat:
  miniapp:
    appid: 你的小程序APPID
    secret: 你的小程序SECRET
AI接口配置
修改application.yml中的AI接口配置:
ai:
  api:
    url: AI接口地址
    key: API密钥(如果需要)
启动项目
mvn spring-boot:run
接口说明
1. 登录接口
- URL: 
/api/wx/login - Method: POST
 - Body:
 
{
    "code": "微信临时登录凭证"
}
- Response:
 
{
    "success": true,
    "code": 200,
    "message": "操作成功",
    "data": {
        "token": "JWT令牌"
    }
}
2. 获取用户信息接口
- URL: 
/api/wx/user - Method: GET
 - Headers:
 
Authorization: 登录接口返回的token
- Response:
 
{
    "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:
 
{
    "conversationId": "对话活动ID(可选,有则更新,无则新建)",
    "topic": "辩题",
    "stance": "立场(正方/反方)"
}
- Response:
 
{
    "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:
 
{
    "conversationId": "对话活动ID(可选,有则更新,无则新建)",
    "content": "用户输入的辩论内容或复盘需求"
}
- Response:
 
{
    "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:
 
{
    "conversationId": "对话活动ID(可选,有则更新,无则新建)",
    "userMessage": "用户当前输入的消息"
}
- Response:
 
{
    "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:
 
{
    "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:
 
{
    "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:
 
{
    "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:
 
{
    "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排序