diff --git a/workload-common/pom.xml b/workload-common/pom.xml index c2efd31a68c6d259f218f93be79beef5582e3baf..174ff4d5e6302620d5076b88408c5c3ae417057b 100644 --- a/workload-common/pom.xml +++ b/workload-common/pom.xml @@ -72,12 +72,5 @@ runtime - - - com.aliyun.oss - aliyun-sdk-oss - 3.16.1 - - \ No newline at end of file diff --git "a/workload-server/src/main/resources/static/\345\273\272\350\241\250\350\257\255\345\217\245.sql" "b/workload-server/src/main/resources/static/\345\273\272\350\241\250\350\257\255\345\217\245.sql" index a05801a9e93f23871fe3f5127b5ba9b0ad458557..a03661992dfc19b9297e47748c038b8df610e6d0 100644 --- "a/workload-server/src/main/resources/static/\345\273\272\350\241\250\350\257\255\345\217\245.sql" +++ "b/workload-server/src/main/resources/static/\345\273\272\350\241\250\350\257\255\345\217\245.sql" @@ -37,7 +37,7 @@ CREATE TABLE IF NOT EXISTS `user` `dept_id` BIGINT NOT NULL COMMENT '所属部门ID', `entry_date` DATE COMMENT '来校日期', `remark` VARCHAR(255) COMMENT '备注', - `status` TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '用户状态:1-启用,0-禁用', + `status` TINYINT NOT NULL DEFAULT 1 COMMENT '用户状态:1-启用,0-禁用,-1-逻辑删除', `created_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', UNIQUE INDEX `uk_user_no` (`user_no`), @@ -417,7 +417,7 @@ CREATE TABLE IF NOT EXISTS `audit_content` `list_meta_id` VARCHAR(20) NOT NULL COMMENT '关联list_meta.id', `audit_status` INT NULL DEFAULT NULL COMMENT '审核状态(0,待审核),(1,审核中),(2,已有审核结果)', `result_status` INT NULL DEFAULT NULL COMMENT '审核结果状态(0,待审核),(1,审核通过),(2,审核未通过)', - `feedback_info` TEXT NULL DEFAULT NULL COMMENT '审核反馈信息', + `feedback_info` mediumtext NULL DEFAULT NULL COMMENT '审核反馈信息', `created_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', INDEX `system_id` (`system_id`), diff --git "a/workload-server/src/main/resources/static/\346\225\231\345\255\246\347\256\241\347\220\206\350\200\201\345\270\210\346\250\241\345\235\227-\345\256\236\347\216\260\347\216\260\347\212\266\344\270\216\346\224\271\350\277\233\345\273\272\350\256\256.md" "b/workload-server/src/main/resources/static/\346\225\231\345\255\246\347\256\241\347\220\206\350\200\201\345\270\210\346\250\241\345\235\227-\345\256\236\347\216\260\347\216\260\347\212\266\344\270\216\346\224\271\350\277\233\345\273\272\350\256\256.md" new file mode 100644 index 0000000000000000000000000000000000000000..9fe375641902289e6ba9d7c157b7aaf31817086d --- /dev/null +++ "b/workload-server/src/main/resources/static/\346\225\231\345\255\246\347\256\241\347\220\206\350\200\201\345\270\210\346\250\241\345\235\227-\345\256\236\347\216\260\347\216\260\347\212\266\344\270\216\346\224\271\350\277\233\345\273\272\350\256\256.md" @@ -0,0 +1,138 @@ +### 教学管理老师模块 - 实现现状与改进建议(研发对接版) + +用途:指导前后端快速联调落地。包含:TL;DR、端点清单、状态与实体、集成说明、前端交互要点、示例、差距与任务。 + +--- + +### TL;DR(现状结论) + +- 审核:已实现单次审核流转(待审→审核中→结果)、撤回、记录;PDF/Office 在线预览具备;消息推送具备。 +- 数据范围:未落地“按学院范围”的统一约束;部分端点授权粗颗粒(admin)。 +- 分配/统计/预警:尚缺“分配台账/学院级统计/规则化预警”。 +- 导入/模板:导入与模板下载具备;通用导出缺失。 + +--- + +### 一、API 端点清单(后端) + +1) 审核管理(教学管理老师侧) +- PUT `/api/audit/auditing` 审核工作量申报(AuditManageController) +- PUT `/api/audit/dismiss/{id}` 驳回审核(AuditManageController) +- PUT `/api/audit/withdraw/{id}` 审核撤回(AuditManageController) +- POST `/api/audit/download/{materialId}` 下载佐证材料(AuditManageController) + +2) 审核内容(通用) +- POST `/api/audit/add` 新增审核内容(AuditController) +- POST `/api/audit/queries` 动态查询审核内容(AuditController) +- PUT `/api/audit/update` 更新审核内容(AuditController) +- GET `/api/audit/view-pdf/{materialId}` 获取在线预览链接(AuditController) +- DELETE `/api/audit/revoke/{id}` 撤回审核内容(AuditController) + +3) 教师管理/导入 +- GET `/api/user/page` 分页查询教师 +- GET `/api/user/{id}` 教师详情 +- POST `/api/user` 新增/更新教师 +- PUT `/api/user/status` 批量修改教师状态 +- POST `/api/user/roles/assign` 批量分配角色 +- POST `/api/user/roles/unassign` 批量取消角色 +- DELETE `/api/user/{id}` 逻辑删除 +- POST `/api/user/import` 上传 CSV/Excel(需 `file:upload` 或 `admin`) +- GET `/api/user/template` 下载导入模板 + +4) 项目/名单 +- GET `/api/project/tree` 获取项目-名单树 +- GET `/api/project/projects` 获取所有项目 +- GET `/api/project/meta` 获取名单元数据 +- GET `/api/project/list/{id}` 获取名单详情 +- POST `/api/project/declare` 申报名单表 + +5) 公用/消息 +- POST `/api/common/upload` 文件上传(OSS) +- POST `/api/message/project/pass` 发送项目通过通知 +- POST `/api/message/project/repulse` 发送项目拒绝通知 +- POST `/api/message/private|inform|system|offline` 消息推送/强制下线 + +授权提示:当前部分端点缺少 `@PreAuthorize` 或为 `admin`,落地时需收敛到:`workload:audit:*`、`workload:allocation:*`、`report:college:*` 等。 + +--- + +### 二、状态与实体(后端) + +- 审核状态(AuditStatus):WAITING_FOR_AUDIT → AUDITING → AUDIT_RESULT +- 审核结果(AuditResultStatus):WAITING_FOR_AUDIT | AUDIT_PASS | AUDIT_FAIL +- 审核核心实体:`AuditContent`、`AuditRecord`(记录 latestAuditTeacherId) +- 导入相关:`RosterImportDTO`、`ImportResultVO` + +--- + +### 三、数据表与集成说明(后端) + +- 审核表:`audit_content`、`audit_record`(见已有实现) +- 名单相关:`list_meta` + 动态表 `list_data_{listId}`(ProjectServicelmpl.createDynamicTable) +- PDF 在线预览:`AliOssUtil.generateWebOfficePreviewUrl(...)`,`AuditController.viewPdfFile(...)` +- WebSocket/站内信:`WebSocketMessageService` → `EmailMsgServiceImpl` → `WebSocketServer.sendMessageToUser` + +建议新增(待实现): +- 分配台账:`workload_ledger`、`workload_adjust_log` +- 多级审核:`audit_flow_def`、`audit_flow_node`、`audit_task` +- 预警:`alert_rule`、`alert_event` + +--- + +### 四、前端交互要点(前端) + +- 审核流转:展示当前状态与可执行动作(通过/驳回/撤回),提交时携带 `resultStatus` 与 `feedbackInfo` +- PDF 预览:调用 `GET /api/audit/view-pdf/{materialId}` 拿到签名 URL,前端新窗口打开 +- 导入:先拉取模板 `GET /api/user/template`,再 `POST /api/user/import`,显示批处理结果与错误行 +- 消息:登录后建立 WS 连接,订阅站内信与系统消息;失败降级轮询邮件列表接口 +- 权限:前端路由与按钮按权限点控制显示;后端再次鉴权 + +--- + +### 五、cURL / 请求示例(选摘) + +1) 审核通过 +``` +curl -X PUT \ + -H "Content-Type: application/json" \ + -d '{"id":123, "resultStatus":"AUDIT_PASS", "feedbackInfo":"同意", "auditTeacherId":456}' \ + http://host/api/audit/auditing +``` + +2) 获取PDF预览链接 +``` +curl http://host/api/audit/view-pdf/987 +``` + +3) 导入教师 +``` +curl -X POST http://host/api/user/import \ + -H "Content-Type: multipart/form-data" \ + -F file=@teachers.xlsx +``` + +--- + +### 六、差距与任务清单(Dev Task) + +必做: +- Controller 端点补齐 `@PreAuthorize` 并引入学院维度的数据范围过滤 +- 通用导出接口(CSV/Excel,分页游标+流式写入) +- 分配台账与调整日志(接口/表/留痕) +- 多级审核V1(秘书→教学管理老师),状态机化 +- 学院级统计(聚合SQL/缓存/异步预计算) +- 预警规则与定时任务(触发 WS/站内信) + +--- + +### 七、关键代码索引 + +- 审核实现:`workload-server/src/main/java/cn/edu/gzgs/service/impl/AuditServiceImpl.java` +- 审核接口:`workload-server/src/main/java/cn/edu/gzgs/controller/AuditManageController.java` +- 导入实现:`workload-server/src/main/java/cn/edu/gzgs/service/impl/UserServiceImpl.java` +- 模板下载:`workload-server/src/main/java/cn/edu/gzgs/controller/UserController.java` +- 项目申报:`workload-server/src/main/java/cn/edu/gzgs/controller/ProjectController.java`、`.../service/impl/ProjectServicelmpl.java` +- WS/消息:`workload-server/src/main/java/cn/edu/gzgs/service/WebSocketMessageService.java`、`.../EmailMsgServiceImpl.java`、`.../websocket/WebSocketServer.java` +- OSS/IMM 预览:`workload-server/src/main/java/cn/edu/gzgs/util/AliOssUtil.java` + +