Skip to content

LiHuaJZOAQ/SmartTask

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SmartTask 智能任务调度系统

基于依赖关系的智能任务调度系统,自动将子任务拓扑排序并分配到可用时间槽中,支持周/月视图可视化。

功能特性

  • 任务与子任务管理 — 创建包含子任务的任务,设置优先级与预计时长,支持嵌套展开查看
  • 依赖关系管理 — 子任务级前置依赖,自动循环检测,完成状态级联传播
  • 时间块管理 — 定义周期性(每周)或一次性可用时间段,重叠自动校验
  • 自动调度引擎 — Kahn 拓扑排序 + 优先级排序 + 贪心槽位分配,子任务可跨时段拆分
  • 智能重新调度 — 提前完成时自动前移依赖子任务,时间块变更时保留已完成任务
  • 周视图日历 — 深色 7 天网格,90px 时间轴(00:00–23:30),30 分钟增量,当天高亮 + 实时时间线
  • 月视图日历 — 任务计数徽章(≤99 / 99+),优先级排序标题,点击日期查看详情
  • 认证与安全 — JWT(HttpOnly Cookie, ≤15min)+ 刷新令牌(≤7d,单次轮换),数据隔离

技术栈

层级 技术
后端 Java 17, Spring Boot 3.2, Spring Security, MyBatis-Plus 3.5.5
数据库 MySQL 8.0+
认证 JWT (jjwt 0.12.3, HS256), BCrypt (wf ≥ 10)
前端 Vue 3 (Composition API), Vite 5, Vue Router 4
状态管理 Pinia
HTTP 客户端 Axios (withCredentials)
日期处理 date-fns 3

项目结构

SmartTask/
├── server/                          # Spring Boot 后端
│   ├── src/main/java/com/smarttask/
│   │   ├── controller/              # REST 控制器
│   │   ├── service/                 # 业务逻辑层
│   │   ├── mapper/                  # MyBatis-Plus 数据访问
│   │   ├── entity/                  # 数据库实体
│   │   ├── dto/                     # 请求/响应 DTO
│   │   ├── scheduler/               # 调度引擎(拓扑排序 + 贪心分配)
│   │   ├── security/                # JWT 过滤器、令牌提供者
│   │   ├── exception/               # 全局异常处理器
│   │   └── config/                  # Spring 配置
│   ├── src/main/resources/
│   │   └── application.yml          # 应用配置
│   └── pom.xml
├── client/                          # Vue 3 前端
│   ├── src/
│   │   ├── views/                   # 页面视图
│   │   │   ├── WeekView.vue         # 周视图日历
│   │   │   ├── MonthView.vue        # 月视图日历
│   │   │   ├── TasksView.vue        # 任务管理
│   │   │   ├── TimeBlocksView.vue   # 时间块管理
│   │   │   ├── DashboardView.vue    # 仪表盘
│   │   │   ├── LoginView.vue        # 登录
│   │   │   └── RegisterView.vue     # 注册
│   │   ├── components/              # 可复用组件
│   │   │   ├── NotificationToast.vue
│   │   │   └── DependencyDialog.vue
│   │   ├── stores/                  # Pinia 状态管理
│   │   ├── services/api.js          # Axios 实例与拦截器
│   │   ├── router/index.js          # 路由配置
│   │   └── styles/tokens.css        # 设计令牌
│   ├── package.json
│   └── vite.config.js
└── smart_task.sql                   # 数据库建表脚本

快速开始

前置要求

  • JDK 17+
  • Maven 3.8+
  • Node.js 18+
  • MySQL 8.0+

1. 初始化数据库

mysql -u root -p < smart_task.sql

2. 启动后端

cd server
mvn spring-boot:run

服务启动在 http://localhost:8080

3. 启动前端

cd client
npm install
npm run dev

前端启动在 http://localhost:5173,自动代理 API 请求到后端。

4. 配置说明

数据库连接等配置在 server/src/main/resources/application.yml

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/smarttask
    username: root
    password: root

jwt:
  secret: <your-256-bit-secret>
  access-token-validity: 900000    # 15 分钟
  refresh-token-validity: 604800000 # 7 天

API 概览

方法 端点 说明
POST /api/auth/register 注册(设置 HttpOnly Cookie)
POST /api/auth/login 登录
POST /api/auth/refresh 轮换令牌
POST /api/auth/logout 登出
GET /api/auth/me 当前用户
POST /api/tasks 创建任务(含子任务与依赖)
GET /api/tasks 任务列表
GET /api/tasks/{id} 任务详情
PUT /api/tasks/{id} 更新任务
DELETE /api/tasks/{id} 删除任务
POST /api/tasks/{tid}/subtasks/{sid}/complete 标记子任务完成
POST /api/tasks/{tid}/subtasks/{sid}/incomplete 撤销子任务
POST /api/tasks/subtasks/{sid}/dependencies/{prereqId} 添加依赖
DELETE /api/tasks/subtasks/{sid}/dependencies/{prereqId} 移除依赖
POST /api/timeblocks/recurring 创建周期性时间块
POST /api/timeblocks/onetime 创建一次性时间块
GET /api/timeblocks 时间块列表
GET /api/timeblocks/weekly 每周概览
PUT /api/timeblocks/{id} 更新时间块
DELETE /api/timeblocks/{id} 删除时间块
POST /api/schedule/generate 生成调度
GET /api/schedule 查询调度范围
GET /api/schedule/unschedulable 不可调度子任务

调度算法

  1. 构建依赖图 — 以子任务为节点,构建邻接表
  2. Kahn 拓扑排序 — 生成线性执行顺序
  3. 优先级排序 — 就绪队列按优先级 ASC + ID 排序
  4. 时间块展开 — 将周期性/一次性时间块展开为连续时间段(默认 84 天窗口)
  5. 贪心分配 — 按时间顺序遍历槽位,分配首个适配的子任务
  6. 拆分支持 — 超长子任务可拆分到多个不连续槽位,周视图标注 "(1/3)" 等
  7. 不可调度报告 — 无法安排的子任务名称随结果返回

设计系统

  • 主色调: #cc785c(珊瑚)
  • 背景: #faf9f5(奶油色)
  • 深色表面: #181715(深海军蓝)
  • 圆角: 6px / 8px / 12px / 16px / 9999px
  • 间距基座: 4px(xxs: 4, xs: 8, sm: 12, md: 16, lg: 24, xl: 32, xxl: 48)
  • 字体: Copernicus(展示)+ StyreneB(正文)+ JetBrains Mono(代码)

About

基于依赖关系的智能任务调度系统

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors