考试管理系统
本系统是为教育考试中心开发的考务人员签到与补助管理平台,包含微信小程序端和Spring Boot后端服务。系统支持考务人员在考试期间进行地理位置签到,并上传税务发票申领补助。
exam-manager/
├── backend/ # Spring Boot后端项目
│ ├── src/main/java/com/examcenter/
│ │ ├── config/ # 配置类
│ │ ├── controller/ # 控制器层
│ │ ├── dto/ # 数据传输对象
│ │ ├── entity/ # 实体类
│ │ ├── enums/ # 枚举类
│ │ ├── exception/ # 异常类
│ │ ├── repository/ # 数据访问层
│ │ ├── service/ # 服务层
│ │ └── util/ # 工具类
│ ├── src/main/resources/
│ │ └── application.yml # 配置文件
│ └── pom.xml # Maven依赖配置
├── miniprogram/ # 微信小程序项目
│ ├── pages/ # 页面目录
│ │ ├── index/ # 首页(考试列表+公告)
│ │ ├── exam-detail/ # 考试详情+签到
│ │ ├── register/ # 用户注册
│ │ ├── my/ # 个人中心
│ │ ├── invoice/ # 发票管理
│ │ └── announcement/ # 公告详情
│ ├── utils/ # 工具函数
│ │ ├── api.js # API请求封装
│ │ ├── location.js # 地理位置计算
│ │ └── validator.js # 数据校验
│ ├── app.js # 小程序入口
│ ├── app.json # 全局配置
│ └── app.wxss # 全局样式
├── database/ # 数据库脚本
│ └── schema.sql # 建表SQL
└── README.md # 项目说明
mysql -u root -p < database/schema.sql
在backend/src/main/resources/application.yml中配置或设置环境变量:
export DB_PASSWORD=your_db_password
export MINIO_ENDPOINT=http://localhost:9000
export MINIO_ACCESS_KEY=your_minio_key
export MINIO_SECRET_KEY=your_minio_secret
export WECHAT_APP_ID=your_wechat_appid
export WECHAT_APP_SECRET=your_wechat_appsecret
export JWT_SECRET=your_jwt_secret_key
cd backend
mvn clean package
java -jar target/exam-checkin-system-1.0.0.jar
后端服务将启动在 http://localhost:8080
cd miniprogram
npm install tdesign-miniprogram
在miniprogram/utils/api.js中配置后端API地址:
const BASE_URL = 'https://your-domain.com/api'
| 接口 | 方法 | 说明 | 是否需要Token |
|---|---|---|---|
/api/user/login |
POST | 微信登录(code换token) | ❌ |
/api/user/register |
POST | 用户注册 | ❌ |
/api/user/profile |
GET | 获取个人信息 | ✅ |
| 接口 | 方法 | 说明 | 是否需要Token |
|---|---|---|---|
/api/exam/list |
GET | 获取考试列表 | ✅ |
/api/exam/{examId} |
GET | 获取考试详情 | ✅ |
/api/exam/{examId}/sites |
GET | 获取考点列表 | ✅ |
| 接口 | 方法 | 说明 | 是否需要Token |
|---|---|---|---|
/api/checkin |
POST | 执行签到(需传入经纬度) | ✅ |
| 接口 | 方法 | 说明 | 是否需要Token |
|---|---|---|---|
/api/invoice/upload |
POST | 上传发票PDF文件 | ✅ |
/api/invoice/status/{examId} |
GET | 查询发票状态 | ✅ |
| 接口 | 方法 | 说明 | 是否需要Token |
|---|---|---|---|
/api/announcement/latest |
GET | 获取最新公告 | ✅ |
/api/announcement/list |
GET | 分页查询公告 | ✅ |
/api/announcement/{id} |
GET | 获取公告详情 | ✅ |
invoices/{examId}/{userId}_{timestamp}.pdf
系统已内置测试数据:
项目使用Spring Boot 3.x,采用MVC三层架构:
exam-invoices
采用Haversine公式计算地球表面两点间的距离,精度可达米级:
// DistanceUtil.java
public static double calculateDistance(double lat1, double lon1, double lat2, double lon2) {
double R = 6371000; // 地球半径(米)
// ... Haversine公式实现
}
(user_id, exam_id) 确保每场考试只保留一个发票实现完整的身份证号校验算法:
(user_id, exam_id, checkin_date) 从根本上防止重复签到MIT License
欢迎提交Issue和Pull Request!
如有问题或建议,请通过GitHub Issues联系我们。