Java:基于Spring Boot的在线任务管理系统

功能描述:

本系统实现了一个在线任务管理系统,用户可以创建、分配、更新、查看和删除任务。每个任务有不同的状态(如未开始、进行中、已完成),并且可以设置任务的截止日期。系统支持用户角色管理(管理员与普通用户)和任务分配给特定的用户。所有任务和用户信息都存储在数据库中。管理员可以管理所有任务,而普通用户只能查看和更新自己分配的任务。

主要特点:
  1. 用户管理: 支持管理员添加用户、删除用户、修改用户角色。
  2. 任务管理: 用户可以查看、创建、更新和删除任务。
  3. 任务状态: 任务可以设置不同的状态(未开始、进行中、已完成)。
  4. 任务分配: 管理员可以将任务分配给特定用户。
  5. 任务搜索和筛选: 支持按任务状态、截止日期等条件进行筛选。
  6. 权限管理: 管理员可以查看所有任务和用户,普通用户只能查看和更新自己负责的任务。

技术栈:

  • 后端: Spring Boot, Spring Data JPA, Spring Security
  • 前端: Thymeleaf(用于构建Web界面)
  • 数据库: MySQL(存储任务和用户数据)
  • 依赖管理: Maven

数据库设计:

  1. users 表:存储用户信息。

    CREATE TABLE users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        username VARCHAR(50) UNIQUE NOT NULL,
        password VARCHAR(100) NOT NULL,
        role VARCHAR(20) NOT NULL
    );
    
  2. tasks 表:存储任务信息。

    CREATE TABLE tasks (
        id INT AUTO_INCREMENT PRIMARY KEY,
        title VARCHAR(100) NOT NULL,
        description TEXT,
        status VARCHAR(20) NOT NULL,
        due_date DATETIME,
        assigned_to INT,
        FOREIGN KEY (assigned_to) REFERENCES users(id)
    );
    

Spring Boot代码实现:

1. User实体类(User.java)
import javax.persistence.*;

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String username;
    private String password;
    private String role;

    // Getters and setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }
}
2. Task实体类(Task.java)
import javax.persistence.*;
import java.util.Date;

@Entity
public class Task {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String title;
    private String description;
    private String status;
    private Date dueDate;

    @ManyToOne
    @JoinColumn(name = "assigned_to")
    private User assignedTo;

    // Getters and setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public Date getDueDate() {
        return dueDate;
    }

    public void setDueDate(Date dueDate) {
        this.dueDate = dueDate;
    }

    public User getAssignedTo() {
        return assignedTo;
    }

    public void setAssignedTo(User assignedTo) {
        this.assignedTo = assignedTo;
    }
}
3. TaskRepository接口(TaskRepository.java)
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;

public interface TaskRepository extends JpaRepository<Task, Long> {
    List<Task> findByAssignedTo(User user);
    List<Task> findByStatus(String status);
    List<Task> findByDueDateBefore(Date date);
}
4. UserRepository接口(UserRepository.java)
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
    User findByUsername(String username);
}
5. TaskController类(TaskController.java)
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.util.List;

@Controller
@RequestMapping("/tasks")
public class TaskController {

    @Autowired
    private TaskRepository taskRepository;

    @Autowired
    private UserRepository userRepository;

    // 显示所有任务
    @GetMapping
    public String viewTasks(Model model) {
        List<Task> tasks = taskRepository.findAll();
        model.addAttribute("tasks", tasks);
        return "tasks/list";
    }

    // 创建任务
    @GetMapping("/create")
    public String createTaskForm(Model model) {
        model.addAttribute("task", new Task());
        model.addAttribute("users", userRepository.findAll());
        return "tasks/create";
    }

    @PostMapping("/create")
    public String createTask(@ModelAttribute Task task) {
        taskRepository.save(task);
        return "redirect:/tasks";
    }

    // 编辑任务
    @GetMapping("/edit/{id}")
    public String editTaskForm(@PathVariable Long id, Model model) {
        Task task = taskRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("Invalid task ID"));
        model.addAttribute("task", task);
        model.addAttribute("users", userRepository.findAll());
        return "tasks/edit";
    }

    @PostMapping("/edit/{id}")
    public String editTask(@PathVariable Long id, @ModelAttribute Task task) {
        task.setId(id);
        taskRepository.save(task);
        return "redirect:/tasks";
    }

    // 删除任务
    @GetMapping("/delete/{id}")
    public String deleteTask(@PathVariable Long id) {
        taskRepository.deleteById(id);
        return "redirect:/tasks";
    }
}
6. 安全配置(WebSecurityConfig.java)
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/tasks/create", "/tasks/edit/**", "/tasks/delete/**").hasRole("ADMIN")
                .antMatchers("/tasks").hasAnyRole("ADMIN", "USER")
                .anyRequest().authenticated()
            .and()
            .formLogin()
                .permitAll()
            .and()
            .logout()
                .permitAll();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

使用说明:

功能简介:

这个在线任务管理系统允许用户创建、管理和分配任务,系统会根据用户的角色提供不同的权限。管理员可以查看、创建、编辑和删除所有任务,而普通用户只能查看和更新自己分配的任务。任务的状态可以通过系统进行更新,确保任务的进度得到跟踪。

使用步骤:
  1. 配置数据库:

    • 创建名为 task_management 的数据库。
    • 创建表 userstasks
  2. 运行Spring Boot应用:

    • 使用Maven命令 mvn spring-boot:run 启动应用。
    • 访问 http://localhost:8080 打开任务管理系统。
  3. 用户注册与登录:

    • 管理员登录后,可以创建用户并分配角色。
    • 普通用户可以登录并查看自己分配的任务。
  4. 任务管理:

    • 管理员可以创建、编辑和删除任务,并分配任务给指定用户。
    • 普通用户只能更新和查看自己负责的任务。
  5. 任务状态管理:

    • 用户可以更新任务的状态为“未开始”、“进行中”或“已完成”。
  6. 任务筛选与搜索:

    • 可以根据任务状态、截止日期等条件筛选任务。

示例输出:
Task Management System

1. View all tasks
2. Create a task (Admin Only)
3. Edit task (Admin Only)
4. Delete task (Admin Only)
5. Logout
应用场景:
  • 项目管理: 用于团队管理和任务分配。
  • 企业任务分配: 管理员可以分配任务给员工,确保工作进度。
  • 团队协作: 支持多人协作,任务分配清晰明了。

该项目展示了如何使用Spring Boot实现一个在线任务管理系统,支持用户角色管理、任务分配、任务状态更新等功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值