# cp-team-mgmt **Repository Path**: Bik1/cp-team-mgmt ## Basic Information - **Project Name**: cp-team-mgmt - **Description**: No description available - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-10 - **Last Updated**: 2026-01-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 云监考团队管理系统 ## 项目简介 云监考团队管理系统(Cloud Proctoring Team Management System)是一个基于Spring Boot + MyBatis-Plus的监考人员管理平台,实现了监考任务分配、现场反馈、结算管理等核心功能。 ### 核心功能 - **用户认证与权限管理**:Spring Security + JWT + RBAC - **智能验证码**:拖拽拼图验证码,提供安全的人机验证 - **项目与任务管理**:项目创建、任务分配、签到签退 - **任务反馈与审核**:现场照片上传、文字反馈、管理员审核 - **监考员组员管理**:项目管理员接收与管理监考员团队 - **结算管理**:基于任务记录的灵活结算、Excel回执自动匹配 - **日志审计**:操作日志记录、审计查询 ## 技术栈 ### 后端技术 - **核心框架**:Spring Boot 3.5.7 - **安全框架**:Spring Security 6.x - **认证方案**:JWT (jjwt 0.12.6) - **持久层**:MyBatis-Plus 3.5.9 - **数据验证**:Hibernate Validator 8.0.1 - **数据库**:MySQL 8.0 + Redis (缓存) - **API文档**:SpringDoc OpenAPI 3 - **工具库**:Lombok, Fastjson2 ### 前端技术 - **核心框架**:Vue 3 - **UI组件库**:Element Plus - **状态管理**:Pinia - **路由管理**:Vue Router 4 - **HTTP客户端**:Axios - **样式预处理**:Sass ### 项目结构 ``` cp-team-mgmt/ ├── CpTeam-Common/ # 公共模块 │ ├── result/ # 统一返回结果 │ ├── exception/ # 统一异常处理 │ ├── constant/ # 常量定义 │ ├── utils/ # 工具类 │ └── aspect/ # AOP切面(日志) ├── CpTeam-Pojo/ # 实体模块 │ ├── entity/ # 数据库实体 │ ├── dto/ # 数据传输对象 │ └── vo/ # 视图对象 ├── CpTeam-Service/ # 服务模块 │ ├── config/ # 配置类 │ ├── security/ # 安全配置 │ ├── mapper/ # MyBatis Mapper │ ├── service/ # 业务逻辑 │ └── controller/ # REST API └── docs/ # 项目文档 ``` ## 快速开始 ### 环境要求 **后端:** - JDK 21+ - Maven 3.8+ - MySQL 8.0+ - Redis 6.0+ (可选) **视频时长提取(可选):** - ffmpeg/ffprobe(用于培训视频自动提取时长;未安装时系统会降级为不写入 `duration`) 安装示例: ```bash # macOS (Homebrew) brew install ffmpeg # Ubuntu/Debian sudo apt-get update && sudo apt-get install -y ffmpeg # CentOS/RHEL sudo yum install -y ffmpeg ``` **前端:** - Node.js 16+ - npm 8+ 或 yarn 1.22+ ### 数据库初始化 ```bash # 1. 创建数据库 mysql -u root -p CREATE DATABASE app_db DEFAULT CHARACTER SET utf8mb4; # 2. 导入表结构 mysql -u root -p app_db < app_db_schema_v1.2.sql # 3. 导入初始数据(可选) mysql -u root -p app_db < init_data.sql ``` ### 配置文件 **后端配置:** 修改 `CpTeam-Service/src/main/resources/application.yml`: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/app_db?serverTimezone=Asia/Shanghai username: your_username password: your_password # JWT配置 jwt: secret: your_jwt_secret_key_at_least_256_bits expiration: 86400000 # 24小时 # 微信登录配置(可选) wechat: appId: your_wechat_appid appSecret: your_wechat_appsecret # 文件上传配置 file: upload: path: /data/uploads access: prefix: /uploads ``` **前端配置:** 项目已提供了环境配置模板文件: - `.env.development` - 开发环境配置(默认API地址:http://localhost:8080) - `.env.production` - 生产环境配置(需根据实际服务器地址修改) 如需自定义配置,可修改对应文件中的`VUE_APP_BASE_API`参数。 ### 启动项目 **后端服务:** ```bash # 编译项目 mvn clean compile # 启动服务 mvn spring-boot:run -pl CpTeam-Service # 或者打包后运行 mvn clean package -DskipTests java -jar CpTeam-Service/target/CpTeam-service-0.0.1-SNAPSHOT.jar ``` 服务启动后访问: - API文档:http://localhost:8080/doc.html - Swagger UI:http://localhost:8080/swagger-ui.html **前端服务:** ```bash # 进入前端目录 cd cp-team-front # 安装依赖(首次运行) npm install # 启动开发服务器 npm run serve # 构建生产版本 npm run build ``` 前端服务启动后访问:http://localhost:3000 ## 功能模块 ### 1. 用户认证与权限管理 #### 核心功能 - 账号密码登录 - 微信扫码登录 - JWT Token认证 - RBAC权限控制 - 用户信息管理 - 动态菜单路由 #### 角色说明 - **SUPER_ADMIN**:超级管理员,拥有所有权限 - **PROJECT_ADMIN**:项目管理员,管理项目和任务 - **PROCTOR**:监考员,执行监考任务 #### 安全特性 - 密码BCrypt加密存储 - JWT Token认证 - 拖拽拼图验证码(防机器人) - Redis缓存验证码状态 - 请求参数验证(Hibernate Validator) ### 2. 项目与任务管理 #### 核心功能 - 项目创建与管理 - 任务创建与分配 - 监考员签到签退 - 任务状态跟踪 - 项目统计分析 #### 业务流程 ``` 创建项目 → 创建任务 → 分配监考员 → 签到 → 执行任务 → 签退 → 完成 ``` ### 3. 任务反馈与审核 #### 核心功能 - **多次反馈支持**:每次发现异常都可创建新反馈(考生作弊、设备故障等) - **多图上传**:每次反馈可上传多张现场照片作为证据 - **详细记录**:填写反馈内容、任务说明、情况反馈 - **管理员审核**:审核反馈并标记通过/异常 - **完整追溯**:保留所有异常事件记录 #### 业务流程 ``` 监考中 → 发现异常 → 创建反馈 → 上传证据照片 → 待审核 → 管理员审核 → 通过/异常 ↓ 重复:每次异常都可创建新反馈 ``` **使用场景**: - 09:15 发现考生作弊 → 创建反馈1 - 10:30 设备故障 → 创建反馈2 - 11:00 再次发现作弊 → 创建反馈3 ### 4. 监考小组管理(2025-12-15 重构) #### 核心功能 - **小组管理**:超级管理员创建、编辑、删除监考小组 - **小组分配**:为小组指定项目管理员,支持更换管理员 - **申请加入**:监考员申请加入小组,附带申请留言 - **审批管理**:项目管理员审批申请(同意/拒绝) - **成员管理**:查看小组成员,移除成员 - **数据隔离**:任务、结算、反馈等数据按小组隔离 #### 业务流程 ``` 超级管理员创建小组 → 指定项目管理员 → 管理员开启接收申请 → 监考员申请加入 → 管理员审批 → 自动绑定到小组 → 后续任务分配、结算由该小组管理员管理 ``` #### 优势(相比旧版 manager_id 直接绑定) - **管理员可更换**:更换小组管理员后,监考员绑定关系不变 - **申请制**:监考员主动申请,管理员审批,流程更规范 - **灵活管理**:支持一个管理员管理多个小组 ### 5. 结算管理 #### 核心功能 - **任务级别结算**:每条任务记录独立结算,默认30元/场 - **灵活调整费用**:管理员可单独调整每场任务费用 - **监考员端查看**:查看自己的任务结算明细和汇总统计 - **管理员端管理**:查看组员结算、调整费用、导出清单 - **Excel回执上传**:上传支付宝批量付款回执(Excel格式) - **自动匹配结算**:根据手机号、姓名、金额自动匹配任务并更新结算状态 - **支持差异支付**:实付金额可与应付金额不同,系统记录差异 #### 业务流程 ``` 完成任务 → 任务记录生成(应付金额=30元) → 管理员可调整费用 → 导出未结算清单 → 支付宝批量转账 → 上传回执Excel → 自动匹配 → 结算完成(更新实付金额) ``` #### 数据结构特点 - **group_id**:任务记录所属小组,用于数据隔离 - **payment_amount**:应付金额(可调整) - **actual_payment**:实付金额(来自回执) - **settlement_status**:0=未结算,1=已结算 - **payment_record_id**:关联支付回执记录 #### Excel回执格式 支持标准支付宝批量付款回执格式: ``` 序号 | 创建时间 | 订单号 | 流水号 | 收款账号 | 姓名 | 金额(元) | 状态 | 备注 | 失败原因 ``` ### 代码重构说明(2025-11-09) #### 重构内容 - **用户模块整合**:合并UserController和UserManagementController,统一用户相关功能到`/api/user` - **任务模块整合**:合并TaskController和TaskRecordController,统一任务管理和执行功能到`/api/task` - **结算模块统一**:删除旧版结算功能,统一使用新版结算系统,路径统一为`/api/settlement` - **路径统一**:所有API路径统一使用新路径,删除所有旧路径和兼容代码 #### Controller结构优化 - **重构前**:11个Controller(功能分散) - **重构后**:8个Controller(功能集中) - AuthController - 认证相关 - UserController - 用户管理(整合用户信息、用户管理、菜单查询) - ProjectController - 项目管理 - TaskController - 任务管理(整合任务管理和任务执行) - TaskFeedbackController - 任务反馈 - SettlementController - 结算管理(仅新版功能) - ProctorManagementController - 监考员管理 - SysLogController - 系统日志 #### 路径变更说明 - 用户信息:`/api/auth/userinfo` → `/api/user/info` - 动态菜单:`/api/auth/menus` → `/api/user/menus` - 头像上传:`/api/user/upload-avatar` → `/api/user/avatar` - 任务执行:`/api/task-record/*` → `/api/task/*` - 结算管理:`/api/settlement/v2/*` → `/api/settlement/*` ### 6. 日志审计 #### 核心功能 - AOP自动记录操作日志 - 记录用户、操作、IP、时间 - 多条件日志查询 - 操作追溯 #### 记录的操作 - 用户登录/注册 - 项目/任务创建 - 任务分配/签到/签退 - 反馈提交/审核 - 结算调整/上传回执 ## API接口总览 ### 认证相关 (5个) ``` POST /api/auth/login # 用户登录 POST /api/auth/register # 用户注册 POST /api/auth/wechat/login # 微信登录 GET /api/auth/wechat/qr-config # 获取微信扫码配置 POST /api/auth/logout # 退出登录 ``` ### 用户管理 (7个) ``` GET /api/user/info # 获取当前用户信息 GET /api/user/menus # 获取动态菜单 PUT /api/user/profile # 更新个人信息 POST /api/user/avatar # 上传头像 GET /api/user/list # 获取用户列表(管理员) POST /api/user # 添加用户(管理员) PUT /api/user/{id} # 更新用户信息(管理员) DELETE /api/user/{id} # 删除用户(管理员) ``` ### 项目管理 (5个) ``` POST /api/project # 创建项目 PUT /api/project # 更新项目 DELETE /api/project/{id} # 删除项目 GET /api/project/{id} # 查询项目详情 GET /api/project/page # 分页查询项目 ``` ### 任务管理 (13个) ``` POST /api/task # 创建任务 PUT /api/task # 更新任务 DELETE /api/task/{id} # 删除任务 GET /api/task/{id} # 查询任务详情 GET /api/task/page # 分页查询任务 GET /api/task/my/page # 查询我的任务 POST /api/task/assign # 分配监考员 POST /api/task/{id}/check-in # 签到 POST /api/task/{id}/check-out # 签退 PUT /api/task/record # 更新任务记录 GET /api/task/records/page # 分页查询任务记录 GET /api/task/records/my/page # 查询我的任务记录 GET /api/task/records/{id} # 查询任务记录详情 ``` ### 反馈管理 (9个) ``` POST /api/task-feedback # 创建反馈 PUT /api/task-feedback # 更新反馈 POST /api/task-feedback/{id}/upload-image # 上传图片 DELETE /api/task-feedback/image/{id} # 删除图片 POST /api/task-feedback/audit # 审核反馈 GET /api/task-feedback/page # 查询所有反馈 GET /api/task-feedback/my/page # 查询我的反馈 GET /api/task-feedback/{id} # 查询反馈详情 GET /api/task-feedback/by-task-record/{id} # 根据记录查询反馈 ``` ### 监考小组管理 (17个) ``` POST /api/group # 创建小组(超管) PUT /api/group # 更新小组(超管) DELETE /api/group/{id} # 删除小组(超管) GET /api/group/page # 分页查询小组(超管) GET /api/group/{id} # 查询小组详情 GET /api/group/my # 查询我管理的小组(管理员) PUT /api/group/{id}/accepting # 设置是否接收申请(管理员) GET /api/group/{id}/members # 查询小组成员 DELETE /api/group/{id}/members/{userId} # 移除小组成员 GET /api/group/available # 查询可申请的小组(监考员) POST /api/group/{groupId}/apply # 申请加入小组(监考员) GET /api/group/applications/my # 查询我的申请(监考员) DELETE /api/group/applications/{id} # 取消申请(监考员) GET /api/group/applications/pending # 查询待审批申请(管理员) POST /api/group/applications/{id}/approve # 同意申请(管理员) POST /api/group/applications/{id}/reject # 拒绝申请(管理员) GET /api/group/applications/pending/count # 待审批数量(管理员) ``` ### 监考员管理 (3个) - 已废弃,请使用小组管理 ``` GET /api/proctor-management/unassigned # 查询未分配监考员 GET /api/proctor-management/my-proctors # 查询我的监考员 GET /api/proctor-management/managed-users # 查询管理对象列表 ``` ### 结算管理 (5个) ``` POST /api/settlement/my-settlement # 监考员查看自己的结算 POST /api/settlement/manager/list # 管理员查看组员结算 POST /api/settlement/manager/update-payment # 调整任务费用 GET /api/settlement/manager/export # 导出未结算清单 POST /api/settlement/manager/upload-receipt # 上传支付回执 ``` ### 日志审计 (1个) ``` GET /api/sys-log/page # 分页查询日志 ``` **总计:61个API接口** ## 数据库设计 ### 核心表说明 | 表名 | 说明 | 主要字段 | |------|------|---------| | sys_user | 用户表 | id, username, password, real_name, phone, **group_id**, training_completed, status | | sys_role | 角色表 | id, role_name, role_code, description | | sys_user_role | 用户角色关系表 | user_id, role_id | | user_auth | 第三方登录表 | user_id, identity_type, identifier, credential | | **proctor_group** | **监考小组表** | id, name, description, manager_id, accepting_applications, member_count, status | | **group_application** | **小组申请表** | id, group_id, applicant_id, message, status, reviewer_id, review_time | | project | 项目表 | id, name, description, start_date, end_date, status | | task | 任务表(含费用) | id, project_id, name, location, task_date, payment (default 30.00), status | | task_record | 任务执行记录表(含结算) | id, task_id, proctor_id, **group_id**, payment_amount, actual_payment, settlement_status, status | | task_feedback | 任务反馈表 | id, task_record_id, content, task_description, situation_feedback, audit_status | | task_feedback_image | 反馈图片表 | id, feedback_id, image_url, sort_order | | payment_record | 支付回执表 | id, manager_id, order_no, transaction_no, payee_account, payee_name, amount, pay_status, matched | | settlement | 结算汇总表 | id, proctor_id, project_id, total_tasks, amount_due, amount_paid, status | | sys_log | 系统日志表 | id, user_id, action, detail, ip_address, created_at | **注**:加粗字段为结算系统重构新增或修改的字段。 ## 开发规范 ### 代码结构 - Controller:只负责接收请求和返回响应 - Service:业务逻辑处理 - Mapper:数据访问层 ### 统一返回格式 ```json { "code": 200, "message": "操作成功", "data": {} } ``` ### 异常处理 - 业务异常:`BusinessException` - 认证异常:`AuthException` - 全局异常处理:`GlobalExceptionHandler` ### 日志记录 使用`@LogOperation`注解自动记录操作日志: ```java @LogOperation(value = "创建项目", description = "管理员创建新项目") public void createProject(ProjectCreateDTO dto) { // 业务逻辑 } ``` ## 测试指南 ### 初始化测试数据 ```sql -- 创建管理员账号 INSERT INTO sys_user (username, password, real_name, status) VALUES ('admin', '$2a$10$encrypted_password', '管理员', 1); -- 创建监考员账号 INSERT INTO sys_user (username, password, real_name, phone, status) VALUES ('proctor', '$2a$10$encrypted_password', '张三', '13800138000', 1); -- 分配角色 INSERT INTO sys_user_role (user_id, role_id) VALUES (1, 1); -- 管理员 INSERT INTO sys_user_role (user_id, role_id) VALUES (2, 3); -- 监考员 ``` ### 接口测试 #### 1. 登录获取Token ```bash curl -X POST http://localhost:8080/api/auth/login \ -H "Content-Type: application/json" \ -d '{"username":"admin","password":"admin123"}' ``` #### 2. 创建项目 ```bash curl -X POST http://localhost:8080/api/project \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "name": "2025春季期末考试", "description": "全校期末考试监考", "startTime": "2025-06-15 00:00:00", "endTime": "2025-06-25 23:59:59" }' ``` #### 3. 创建任务 ```bash curl -X POST http://localhost:8080/api/task \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "projectId": 1, "name": "教学楼A栋监考", "location": "教学楼A栋", "taskDate": "2025-06-15", "startTime": "2025-06-15 09:00:00", "endTime": "2025-06-15 11:00:00", "payment": 30.00 }' ``` 更多测试用例请查看各功能模块的详细文档。 ## 常见问题 ### Q1: JWT Token过期怎么办? A: Token默认有效期24小时,过期后需要重新登录获取新Token。 ### Q2: 如何修改默认管理员密码? A: 登录后通过用户信息维护接口修改,或直接在数据库中更新(需BCrypt加密)。 ### Q3: 微信登录如何配置? A: 在application.yml中配置微信开放平台的AppID和AppSecret。 ### Q4: 结算金额如何计算? A: 结算系统默认30元/场,可在task表中调整默认费用,管理员也可单独调整每场任务费用。 ### Q5: 如何查看系统日志? A: 管理员可通过日志查询接口查看所有操作日志。 ### Q6: 文件上传路径如何配置? A: 在application.yml中配置`file.upload.path`。 ## 部署指南 ### 生产环境配置 ```yaml spring: profiles: active: prod datasource: # 使用连接池 type: com.zaxxer.hikari.HikariDataSource hikari: maximum-pool-size: 20 minimum-idle: 5 # 日志配置 logging: level: root: INFO com.haiden: INFO file: name: logs/cp-team-mgmt.log ``` ### Docker部署 ```dockerfile FROM openjdk:21-jdk WORKDIR /app COPY CpTeam-Service/target/*.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"] ``` ```bash # 构建镜像 docker build -t cp-team-mgmt:1.0 . # 运行容器 docker run -d -p 8080:8080 \ -e SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/app_db \ -e SPRING_DATASOURCE_USERNAME=root \ -e SPRING_DATASOURCE_PASSWORD=password \ cp-team-mgmt:1.0 ``` ## 性能优化建议 1. **数据库优化** - 为常用查询字段添加索引 - 使用分页查询避免全表扫描 - 定期清理历史日志 2. **缓存优化** - 使用Redis缓存用户信息 - 缓存项目和任务列表 - 缓存权限信息 3. **文件优化** - 图片上传前端压缩 - 使用CDN加速静态资源 - 定期清理无用文件 4. **接口优化** - 合理使用分页 - 避免N+1查询问题 - 使用异步处理耗时操作 ## 后续规划 ### 第二阶段功能 - [ ] 消息通知(短信/邮件) - [ ] 数据导出(Excel/PDF) - [ ] 数据统计大屏 - [ ] 移动端APP - [ ] 在线帮助文档 ### 第三阶段功能 - [ ] AI智能审核 - [ ] 人脸识别签到 - [ ] 实时视频监控 - [ ] 区块链存证 - [ ] 多租户支持 ## 技术支持与文档 ### 核心文档 - 📖 **[文档目录.md](./文档目录.md)** - 文档导航与快速查找 - 📘 **[功能使用指南.md](./功能使用指南.md)** - 完整的API接口和功能使用说明 - 📗 **[结算功能重构说明.md](./结算功能重构说明.md)** - 结算系统升级指南 - 📙 **[README.md](./README.md)** - 本文档(项目总览) ### OpenSpec 规范 (openspec/specs/) - 🎨 **[前端设计系统](./openspec/specs/frontend-design-system/spec.md)** - 色彩、组件、布局、交互规范 - 🔐 **[权限与角色管理](./openspec/specs/rbac-authorization/spec.md)** - RBAC权限模型、数据隔离 - 🏛️ **[系统架构](./openspec/specs/system-architecture/spec.md)** - 技术栈、模块划分、分层设计 - 🔄 **[业务流程](./openspec/specs/business-workflow/spec.md)** - 任务下发、报名、分配、执行、结算 - 🔌 **[API接口规范](./openspec/specs/api-contracts/spec.md)** - RESTful设计、统一返回格式 ### 其他资源 - 在线API文档:http://localhost:8080/doc.html - Swagger UI:http://localhost:8080/swagger-ui.html - 问题反馈:通过Issue提交 ## 项目统计 - 开发语言:Java 21 + TypeScript/JavaScript - 后端代码:约15000+行 - 前端代码:约8000+行 - API接口:50个 - 数据表:12个 - 核心文档:5个(包含界面美化方案) - 开发周期: - 第一阶段完成(核心功能) - 结算系统重构完成(2025-11-09) - 代码重构完成(2025-11-09) - 安全增强与UI美化(2025-11-11) - 监考小组系统重构(2025-12-15) ## 许可证 本项目仅供学习和内部使用。 --- ## 最新更新日志 ### v1.1.0 - 监考小组系统(2025-12-15) - ✅ 新增监考小组管理功能 - ✅ 监考员申请加入小组流程 - ✅ 项目管理员审批申请 - ✅ 数据隔离改为基于小组(group_id) - ✅ 移除旧的 manager_id 直接绑定模式 ### v1.0.0 - 初始版本 - ✅ 完成核心功能开发 --- **最后更新:2025-12-15(监考小组系统重构)**