# 科院编程梦工厂
**Repository Path**: RicheFactory/code-factroy
## Basic Information
- **Project Name**: 科院编程梦工厂
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-10-16
- **Last Updated**: 2025-12-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 科院编程导航
生产级 SpringBoot 企业后端
特性 •
技术栈 •
快速开始 •
项目结构 •
接口文档 •
部署
---
## 📖 项目概述
代码工厂后端是一个基于 SpringBoot 的企业级应用模板,专为构建可扩展、易维护的后端服务而设计。它集成了现代化的开发框架、最佳实践和生产级功能,包括题库管理、用户认证、帖子管理等完整业务模块。
## ✨ 特性
### 核心业务模块
- **题目管理系统**
- 题目增删改查与全文检索
- 题库组织与分类管理
- 题库-题目关联关系管理
- Elasticsearch 高级搜索集成
- **用户管理**
- 用户注册与认证
- 基于角色的访问控制(普通用户/管理员/封禁)
- 微信 OAuth 集成(开放平台 & 公众号)
- 基于 Redis 的会话管理
- **帖子与社交功能**
- 帖子创建、编辑和管理
- 点赞/取消点赞功能
- 收藏/取消收藏系统
- 基于 Elasticsearch 的帖子搜索
- **文件管理**
- 腾讯云 COS 对象存储集成
- 多业务文件上传支持
- 文件大小和类型验证
### 技术亮点
- **企业级架构**
- 清晰的分层架构(Controller → Service → Mapper)
- 基于 AOP 的日志记录和权限验证
- 全局异常处理
- 统一响应封装
- **数据与缓存**
- MySQL + MyBatis Plus(分页、逻辑删除)
- Redis 分布式会话和缓存
- Redisson 分布式锁
- Druid 连接池与监控
- **搜索与索引**
- Elasticsearch 集成
- 全文搜索能力
- 定时同步任务(全量和增量)
- **开发工具**
- CRUD 操作自动代码生成器
- Knife4j 接口文档(Swagger)
- Spring DevTools 热重载
- FreeMarker 代码生成模板
- **生产就绪**
- Docker 支持与优化的 Dockerfile
- 多环境配置(dev/test/prod)
- 完善的日志记录
- Druid 健康监控
## 🛠 技术栈
### 框架与核心
| 技术 | 版本 | 用途 |
|------------|---------|----------|
| Spring Boot | 2.7.2 | 核心框架 |
| Spring MVC | - | Web 层 |
| MyBatis Plus | 3.5.2 | ORM 框架 |
| Spring AOP | - | 切面编程 |
| Spring Scheduler | - | 定时任务 |
### 数据存储
| 技术 | 用途 |
|------------|----------|
| MySQL | 主数据库 |
| Redis | 缓存与会话存储 |
| Elasticsearch | 搜索引擎 |
| 腾讯云 COS | 对象存储 |
### 工具与类库
| 类库 | 用途 |
|---------|----------|
| Hutool | Java 工具包 |
| Lombok | 简化样板代码 |
| EasyExcel | Excel 处理 |
| Apache Commons Lang3 | 通用工具类 |
| Knife4j | 接口文档 |
| Redisson | 分布式锁 |
| WxJava | 微信集成 |
## 🚀 快速开始
### 环境要求
- JDK 8+
- Maven 3.6+
- MySQL 8.0+
- Redis 5.0+(可选)
- Elasticsearch 7.x+(可选)
### 安装步骤
1. **克隆仓库**
```bash
git clone
cd code-factory-backend
```
2. **数据库配置**
创建数据库并执行初始化脚本:
```bash
mysql -u root -p
CREATE DATABASE mianshiya;
USE mianshiya;
source sql/create_table.sql
```
3. **配置文件**
修改 `src/main/resources/application.yml`:
```yaml
spring:
datasource:
url: jdbc:mysql://localhost:3306/mianshiya
username: 你的用户名
password: 你的密码
```
4. **构建与运行**
```bash
# 使用 Maven
mvn clean install
mvn spring-boot:run
# 或直接运行
java -jar target/code-factory-backend-0.0.1-SNAPSHOT.jar
```
5. **访问应用**
- 接口文档:`http://localhost:8101/api/doc.html`
- Druid 监控:`http://localhost:8101/api/druid/`(用户名:root,密码:123)
### 可选服务配置
#### 启用 Redis
1. 修改 `application.yml`:
```yaml
spring:
redis:
host: localhost
port: 6379
database: 1
session:
store-type: redis
```
#### 启用 Elasticsearch
1. 配置连接信息:
```yaml
spring:
elasticsearch:
uris: http://localhost:9200
username: elastic
password: 你的密码
```
2. 使用 `sql/post_es_mapping.json` 中的映射创建索引
3. 取消以下文件中 `@Component` 注解的注释以启用同步任务:
- `job/once/FullSyncPostToEs.java`
- `job/cycle/IncSyncPostToEs.java`
#### 配置微信集成
在 `application.yml` 中更新微信配置:
```yaml
wx:
mp:
appId: 你的公众号appid
secret: 你的公众号secret
open:
appId: 你的开放平台appid
appSecret: 你的开放平台secret
```
#### 配置腾讯云 COS
```yaml
cos:
client:
accessKey: 你的accessKey
secretKey: 你的secretKey
region: 你的地域
bucket: 你的存储桶
```
## 📁 项目结构
```
code-factory-backend/
├── sql/ # 数据库脚本
│ ├── create_table.sql # 建表脚本
│ ├── init_data.sql # 初始化数据
│ └── post_es_mapping.json # Elasticsearch 映射
├── src/main/
│ ├── java/com/riche/codefactory/
│ │ ├── annotation/ # 自定义注解
│ │ │ └── AuthCheck.java # 权限校验注解
│ │ ├── aop/ # AOP 切面
│ │ │ ├── AuthInterceptor.java # 权限拦截器
│ │ │ └── LogInterceptor.java # 日志拦截器
│ │ ├── common/ # 通用类
│ │ │ ├── BaseResponse.java # 统一响应封装
│ │ │ ├── ErrorCode.java # 错误码枚举
│ │ │ └── PageRequest.java # 分页请求
│ │ ├── config/ # 配置类
│ │ │ ├── CorsConfig.java # 跨域配置
│ │ │ ├── MyBatisPlusConfig.java # MyBatis Plus 配置
│ │ │ ├── RedissonConfig.java # Redisson 配置
│ │ │ └── WxOpenConfig.java # 微信配置
│ │ ├── controller/ # REST 控制器
│ │ │ ├── UserController.java
│ │ │ ├── QuestionController.java
│ │ │ ├── QuestionBankController.java
│ │ │ ├── PostController.java
│ │ │ └── ...
│ │ ├── service/ # 服务层
│ │ │ ├── impl/
│ │ │ └── I*SVC.java # 服务接口
│ │ ├── mapper/ # MyBatis 映射器
│ │ ├── model/ # 数据模型
│ │ │ ├── domain/ # 领域实体
│ │ │ ├── c2s/ # 客户端到服务端 DTOs
│ │ │ └── s2c/ # 服务端到客户端 VOs
│ │ ├── esdao/ # Elasticsearch DAOs
│ │ ├── job/ # 定时任务
│ │ │ ├── cycle/ # 周期性任务
│ │ │ └── once/ # 一次性任务
│ │ ├── generate/ # 代码生成器
│ │ │ └── CodeGenerator.java
│ │ ├── exception/ # 异常处理
│ │ ├── utils/ # 工具类
│ │ └── MainApplication.java # 应用入口
│ └── resources/
│ ├── mapper/ # MyBatis XML 映射文件
│ ├── templates/ # 代码生成模板
│ ├── application.yml # 主配置文件
│ ├── application-dev.yml # 开发环境
│ ├── application-test.yml # 测试环境
│ └── application-prod.yml # 生产环境
└── src/test/ # 单元测试
└── java/com/riche/codefactory/
├── service/
├── mapper/
└── ...
```
## 📚 接口文档
项目使用 **Knife4j**(增强版 Swagger)提供交互式接口文档。
### 访问文档
启动应用后,访问:
```
http://localhost:8101/api/doc.html
```
### 主要接口模块
#### 用户管理接口
- `POST /user/register` - 用户注册
- `POST /user/login` - 用户登录
- `POST /user/logout` - 用户登出
- `GET /user/current` - 获取当前用户信息
- `POST /user/update` - 更新用户信息
#### 题目接口
- `POST /question/add` - 创建题目
- `POST /question/delete` - 删除题目
- `POST /question/update` - 更新题目
- `GET /question/get/vo` - 获取题目详情
- `POST /question/list/page/vo` - 分页查询题目列表
- `POST /question/search/page` - 搜索题目
#### 题库接口
- `POST /questionBank/add` - 创建题库
- `POST /questionBank/update` - 更新题库
- `POST /questionBank/list/page/vo` - 分页查询题库列表
#### 帖子接口
- `POST /post/add` - 创建帖子
- `POST /post/update` - 更新帖子
- `POST /post/list/page/vo` - 分页查询帖子列表
- `POST /post/search/page` - 搜索帖子
#### 帖子互动接口
- `POST /post_thumb/do` - 点赞/取消点赞
- `POST /post_favour/add` - 收藏帖子
- `POST /post_favour/list/page` - 查询收藏列表
## 🔧 代码生成器
项目内置强大的代码生成器,可快速生成 CRUD 操作脚手架代码。
### 使用方法
1. 打开 `generate/CodeGenerator.java`
2. 配置生成参数:
```java
String packageName = "com.riche.codefactory";
String dataName = "评论"; // 业务中文名
String dataKey = "comment"; // 实体键(驼峰命名)
String upperDataKey = "Comment"; // 实体键(帕斯卡命名)
```
3. 运行生成器
4. 生成的文件包括:
- 领域实体
- 请求/响应 DTOs
- 服务接口和实现
- 包含 CRUD 端点的控制器
## 🐳 部署
### Docker 部署
1. **构建 Docker 镜像**
```bash
docker build -t code-factory-backend:latest .
```
2. **运行容器**
```bash
docker run -d \
--name code-factory-backend \
-p 8101:8101 \
-e SPRING_PROFILES_ACTIVE=prod \
code-factory-backend:latest
```
### 环境变量
生产环境部署时,可通过环境变量覆盖配置:
```bash
-e SPRING_DATASOURCE_URL=jdbc:mysql://你的数据库地址:3306/mianshiya
-e SPRING_DATASOURCE_USERNAME=你的用户名
-e SPRING_DATASOURCE_PASSWORD=你的密码
-e SPRING_REDIS_HOST=你的Redis地址
-e SPRING_REDIS_PORT=6379
```
### 健康检查
监控应用健康状态:
- Druid 监控:`http://your-host:8101/api/druid/`
- 接口文档:`http://your-host:8101/api/doc.html`
## 🧪 测试
运行单元测试:
```bash
mvn test
```
测试覆盖范围:
- 服务层测试
- Mapper 层测试
- 控制器集成测试
- Elasticsearch 测试
## 📝 开发指南
### 添加新业务模块
1. 使用 `CodeGenerator` 生成基础代码
2. 创建数据库表并执行迁移
3. 在服务层实现自定义业务逻辑
4. 在 DTOs 中添加请求验证
5. 使用 Knife4j 界面测试接口
### 代码规范
- 遵循 Java 命名约定
- 使用 Lombok 减少样板代码
- 添加完善的 JavaDoc 注释
- 实现适当的异常处理
- 使用 `ThrowUtils` 处理业务异常
## 🤝 贡献
欢迎贡献!请遵循以下步骤:
1. Fork 本仓库
2. 创建特性分支
3. 提交你的更改
4. 推送到分支
5. 提交 Pull Request
## 📄 许可证
本项目采用 MIT 许可证。
## 🙏 致谢
- Spring Boot 团队
- MyBatis Plus 社区
- 所有贡献者和用户
---
Made with ❤️ by Riche