更改状态后删除日期

时间:2019-07-26 17:09:41

标签: java spring-boot

我正在尝试跟踪任务的启动和完成时间。我想根据任务状态何时更改来自动设置日期。这是代码:

@RequestMapping(value = "/save/task")
public String addTask(@ModelAttribute(value="task")Task task){
    Task taskBeforeUpdate=taskRepository.findById(task.getId());
    task.setTime(LocalDateTime.now());
    if ((taskBeforeUpdate.getCompletedDate()==null) && (taskBeforeUpdate.getStatus().equalsIgnoreCase("In Progress")) &&(task.getStatus().equalsIgnoreCase("completed"))){
        task.setCompletedDate(LocalDateTime.now());
    }
    else if ((taskBeforeUpdate.getStatus().equals("New, Not Yet Started") ) && (task.getStatus().equalsIgnoreCase("In Progress"))){
        task.setInProgressDate(LocalDateTime.now());
    }
    taskRepository.save(task);
    return "redirect:/client/tasks/"+task.getClient().getId();
}

说任务是“进行中”,并且有一个最初设置为该日期的进行中日期,当我更改为“已完成”时,进行中日期则更改为NULL。我想在我的sql数据库中保留进行中的日期。更改状态后,如何防止其自动删除该日期?

这可以解决此问题,但随后会导致其他未“交换”的字段出现其他问题:

@RequestMapping(value = "/save/task")
    public String addTask(@ModelAttribute(value="task")Task task){
        Task taskBeforeUpdate=taskRepository.findById(task.getId());
        task.setTime(LocalDateTime.now());
        if ((taskBeforeUpdate.getCompletedDate()==null) && (taskBeforeUpdate.getStatus().equalsIgnoreCase("In Progress")) &&(task.getStatus().equalsIgnoreCase("completed"))){
            task.setCompletedDate(LocalDateTime.now());
            taskBeforeUpdate.setCompletedDate(task.getCompletedDate());
            taskBeforeUpdate.setStatus(task.getStatus());
        }
        else if ((taskBeforeUpdate.getStatus().equalsIgnoreCase("New, Not Yet Started") ) && (task.getStatus().equalsIgnoreCase("In Progress"))){
            task.setInProgressDate(LocalDateTime.now());
            taskBeforeUpdate.setInProgressDate(task.getInProgressDate());
            taskBeforeUpdate.setStatus(task.getStatus());
        }else{
           taskRepository.save(task);
        }
        taskRepository.save(taskBeforeUpdate);
        return "redirect:/client/tasks/"+task.getClient().getId();
    }

2 个答案:

答案 0 :(得分:1)

您从数据库“ taskBeforeUpdate”获得的任务具有所有值,而参数“任务”仅具有来自客户端的值。您应该将新值从task复制到taskBeforeUpdate,然后将taskBeforeUpdate保存在数据库中。

答案 1 :(得分:1)

正如Aman Garg所说,您需要将新值复制到旧值,并仅保存旧值。在您的解决方案中,我可以看到您正在保存任务(在else块中),然后保存taskBeforeUpdate,这根本不是必需的,并且会造成问题。