# da-ti-tong **Repository Path**: kangxin_java/da-ti-tong ## Basic Information - **Project Name**: da-ti-tong - **Description**: 基于java17,百度ocr,阿里云oss,微信支付答题小程序后端 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: bgxc-20250416 - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-04-30 - **Last Updated**: 2026-05-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 答题通后端服务 答题通是一个基于 Spring Boot 的题库、刷题、考试与资料下载后端服务。项目面向管理后台和客户端/小程序两类使用场景,提供题库维护、试卷管理、章节分类、考试记录、错题收藏、会员配置、支付订单、文档上传下载、短信登录、微信小程序登录、OCR 搜题等能力。 ## 技术栈 - Java 17 - Spring Boot 3.1.1 - Spring MVC / Validation / AOP - MyBatis-Plus 3.5.3.1 - MySQL 8 - Redis - Druid 数据源 - Knife4j / springdoc-openapi - Hutool、EasyPOI、ZXing、Jsoup - 阿里云 OSS、阿里云短信 - 百度 OCR - 微信小程序登录、微信支付回调 - Docker / Docker Compose / Nginx ## 项目结构 ```text . ├── Dockerfile # 后端镜像构建文件 ├── docker-compose.yml # 服务编排示例 ├── default.conf # Nginx 配置示例 ├── lib/ # 本地 system scope 依赖 jar ├── pom.xml # Maven 配置 ├── run.sh # Docker 构建运行脚本 ├── src/main/java/com/huhuhu/project │ ├── common/ # 通用配置、拦截器、异常、登录、OSS、短信、OCR 等 │ ├── controller/ # admin、customer、callback 三类接口 │ ├── entity/ # 数据库实体 │ ├── enums/ # 业务枚举 │ ├── excel/ # Excel 导入导出模型 │ ├── form/ # 请求参数与表单 DTO │ ├── mapper/ # MyBatis-Plus Mapper │ ├── mapper/xml/ # XML SQL 映射 │ ├── service/ # Service 接口 │ ├── service/impl/ # Service 实现 │ ├── utils/ # 工具类 │ └── vo/ # 响应视图对象 └── src/main/resources ├── application.yml # Spring Profile 入口配置 ├── application-dev.yml # 开发环境配置 ├── application-pro.yml # 生产环境配置 ├── excel-template/ # Excel 模板 ├── question/ # 内置题库 JSON 数据 └── zfont/ # 文档转换相关字体 ``` ## 核心功能 - 管理端 - 管理员登录 - 科目、分类、章节维护 - 题型、题目、试卷维护 - 题目 Excel 导入导出与模板下载 - 考试配置、考试信息、考试记录管理 - 客户、机构、会员配置、订单、消息、文档、反馈管理 - 客户端/小程序端 - 手机短信登录、微信小程序登录、手机号授权 - 分类树、章节、科目、题型查询 - 题目列表、题型统计、试卷统计 - 图片 OCR 搜题、Base64 图片搜题 - 收藏、错题、笔记、考试记录 - 资料文档列表、下载记录 - 会员套餐、会员激活、支付下单 - 消息、反馈、文件上传 - 第三方能力 - 阿里云 OSS:文档、封面、通用文件上传 - 阿里云短信:验证码发送 - 百度 OCR:图片文字识别搜题 - 微信:小程序登录、手机号解析、支付/退款回调 ## 环境要求 - JDK 17+ - Maven 3.8+ - MySQL 8.x - Redis - Docker 和 Docker Compose,可选 ## 本地启动 1. 准备数据库 创建项目数据库,并导入业务表结构和初始化数据。当前仓库未包含 SQL 初始化文件,如需全新部署,需要补充对应的数据库脚本。 2. 修改配置 默认启用 `dev` 环境: ```yaml spring: profiles: active: dev ``` 请在 `src/main/resources/application-dev.yml` 中配置自己的环境信息: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/da-ti-tong?useUnicode=true&characterEncoding=utf-8&useSSL=false username: your_username password: your_password aliyun: oss: endpoint: your_oss_endpoint accessKeyId: your_access_key_id accessKeySecret: your_access_key_secret bucketName: your_bucket filedir: prod/doc/ baidu: appId: your_app_id appKey: your_app_key secretKey: your_secret_key ``` 注意:仓库配置文件中存在数据库、OSS、微信、百度等敏感配置。正式协作或公开仓库前,建议改为环境变量、外部配置文件或配置中心,并轮换已暴露的密钥。 3. 启动服务 ```bash mvn spring-boot:run ``` 或打包后运行: ```bash mvn clean package java -jar target/da-ti-tong-1.0.jar ``` 4. 访问服务 默认端口为 `8080`,上下文路径为 `/da-ti-tong`: ```text http://localhost:8080/da-ti-tong ``` ## API 文档 项目集成了 springdoc-openapi 和 Knife4j。 - Swagger UI:`http://localhost:8080/da-ti-tong/swagger-ui.html` - OpenAPI JSON:`http://localhost:8080/da-ti-tong/v3/api-docs` - Knife4j:`http://localhost:8080/da-ti-tong/doc.html` 接口文档按两组扫描: - 客户端接口:`/customer/**` - 管理端接口:`/admin/**` ## 主要接口前缀 - 管理端:`/da-ti-tong/admin/api/project/**` - 客户端:`/da-ti-tong/customer/api/project/**` - 客户端 OSS 上传:`/da-ti-tong/customer/common/oss/upload` - 微信支付回调:`/da-ti-tong/wx/callback/pay/callback` - 微信退款回调:`/da-ti-tong/wx/callback/refund/callback` ## 鉴权说明 项目通过 `LoginCheckInterceptor` 对大部分接口做登录校验。 放行接口包括: - 管理员登录:`/admin/api/project/admin/login` - 客户端短信发送:`/customer/api/project/customer/send/sm` - 客户端短信登录:`/customer/api/project/customer/sm/login` - 微信小程序登录:`/customer/api/project/customer/min-app/login` - 微信手机号授权:`/customer/api/project/customer/min-app/phone` - 部分公开查询接口,如会员配置列表、文档列表、分类树 - Swagger、Knife4j、WebJars、微信回调等 登录成功后,后续请求需要携带项目约定的 Token。拦截器会根据登录用户类型限制访问范围:管理员只能访问 `/admin`,客户端用户只能访问 `/customer`。 ## 配置说明 常用配置项: | 配置项 | 说明 | | --- | --- | | `server.port` | 服务端口,默认 `8080` | | `server.servlet.context-path` | 应用上下文路径,默认 `/da-ti-tong` | | `spring.datasource.*` | MySQL 数据源配置 | | `mybatis-plus.mapper-locations` | Mapper XML 扫描路径 | | `wx_appid` / `wx_secret` | 微信小程序配置 | | `aliyun.oss.*` | 阿里云 OSS 配置 | | `aliyun.sms.*` | 阿里云短信配置 | | `baidu.*` | 百度 OCR 配置 | | `order.pay.callback` | 支付回调地址 | | `order.refund.callback` | 退款回调地址 | | `knife4j.enable` | 是否启用 Knife4j 增强 | 生产环境建议使用外部配置文件,例如 Dockerfile 当前使用: ```bash -Dspring.config.location=./conf/application-pro.yml ``` ## 构建与部署 ### Maven 打包 ```bash mvn clean package ``` 构建产物: ```text target/da-ti-tong-1.0.jar ``` `pom.xml` 中启用了 `includeSystemScope`,会把 `lib/` 下的本地 jar 一并打入可执行包。 ### Docker 运行 先将打包后的 jar 与所需字体文件放到 Docker 构建上下文中,或按 Dockerfile 调整路径。 ```bash docker build -t da-ti-tong . docker run -d --name da-ti-tong -p 8080:8080 -p 5005:5005 da-ti-tong ``` 也可以参考 `run.sh` 和 `docker-compose.yml`。 ### Docker Compose ```bash docker compose up -d ``` 当前 `docker-compose.yml` 包含后端和 Nginx 服务示例,MySQL 服务配置处于注释状态。部署时需要准备: - `/service/nginx/html` - `/service/nginx/conf.d` - `/service/nginx/nginx.conf` - 外部生产配置文件 `./conf/application-pro.yml` - 数据库和初始化数据 更完整的服务器部署流程见 [部署文档.md](./部署文档.md)。 ## 开发约定 - 控制器按访问端拆分为 `admin` 和 `customer`。 - 业务服务采用 `Service` + `ServiceImpl` 结构。 - 数据访问采用 MyBatis-Plus Mapper,复杂 SQL 放在 `mapper/xml`。 - 接口响应统一使用 `CommonResult`。 - 业务异常通过 `BusinessException` 和 `GlobalExceptionHandler` 统一处理。 - Excel 导入导出模型放在 `excel` 包中。 - 请求参数放在 `form/params` 和 `form/dto`。 ## 注意事项 - 当前仓库未看到完整数据库初始化 SQL,首次部署前需要准备表结构和基础数据。 - `application-dev.yml`、`application-pro.yml` 中存在敏感信息,建议迁移到外部配置并进行密钥轮换。 - Dockerfile 中开启了 JDWP 调试端口 `5005`,生产环境如无需要建议关闭。 - `spring.config.location=./conf/application-pro.yml` 会覆盖默认配置加载方式,容器运行时必须挂载或提供该文件。 - 项目依赖 `lib/` 下本地 jar,删除或移动这些文件会导致 Maven 构建失败。 ## 联系方式 ![联系方式](./images/3541777998903_.pic.jpg) ## 前端 [前端h5/小程序](http://gitee.com/kangxin_java/shutitong-h5)