package org.hepx.tasksys.web.controller;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.hepx.tasksys.entity.Task;
import org.hepx.tasksys.entity.User;
import org.hepx.tasksys.service.TaskService;
import org.hepx.tasksys.service.UserService;
import org.hepx.tasksys.velocity.Functions;
import org.hepx.tasksys.web.ResponseResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import java.util.Map;
@Controller
@RequestMapping("/task")
public class TaskController {
private static Logger logger = LoggerFactory.getLogger(TaskController.class);
@Autowired
private TaskService taskService;
@Autowired
private UserService userService;
@RequiresPermissions("task:view")
@RequestMapping(method = RequestMethod.GET)
public String list(Model model) {
model.addAttribute("taskList", taskService.findAll());
return "task/list";
}
@RequiresPermissions(value = {"task:create","mytask:create"},logical = Logical.OR)
@RequestMapping(value = "/create", method = RequestMethod.GET)
public String showCreateForm(@RequestParam(defaultValue = "1")String type,Model model) {
model.addAttribute("op", "新增");
model.addAttribute("type",type);
return "task/edit";
}
@RequiresPermissions(value = {"task:create","mytask:create"},logical = Logical.OR)
@RequestMapping(value = "/create", method = RequestMethod.POST)
public String create(Task task, @RequestParam("type")String type, RedirectAttributes redirectAttributes) {
if("2".equals(type)){
task.setUserId(Functions.getCurrentUserId());
}
taskService.createTask(task);
redirectAttributes.addFlashAttribute("msg", "新增成功");
if("2".equals(type)){
return "redirect:/task/my";
}else{
return "redirect:/task";
}
}
@RequiresPermissions(value = {"task:update","mytask:update"},logical = Logical.OR)
@RequestMapping(value = "/{id}/{type}/update", method = RequestMethod.GET)
public String showUpdateForm(@PathVariable("id") Long id, @PathVariable("type")String type, Model model) {
model.addAttribute("task", taskService.findOne(id));
model.addAttribute("op", "修改");
model.addAttribute("type",type);
return "task/edit";
}
@RequiresPermissions(value = {"task:update","mytask:update"},logical = Logical.OR)
@RequestMapping(value = "/{id}/{type}/update", method = RequestMethod.POST)
public String update(Task task, @PathVariable("type")String type, RedirectAttributes redirectAttributes) {
taskService.updateTask(task);
redirectAttributes.addFlashAttribute("msg", "修改成功");
if("1".equals(type)){
return "redirect:/task";
}else{
return "redirect:/task/my";
}
}
@RequiresPermissions("task:delete")
@RequestMapping(value = "/{id}/delete", method = RequestMethod.GET)
@ResponseBody
public Map delete(@PathVariable("id") Long id) {
try {
taskService.deleteTask(id);
return ResponseResult.buildSuccessResult().toMap();
} catch (Exception e) {
logger.error(e.getMessage(), e);
return ResponseResult.buildFailResult().toMap();
}
}
@RequiresPermissions("task:update")
@RequestMapping(value = "/{id}/finish", method = RequestMethod.GET)
@ResponseBody
public Map finish(@PathVariable("id") Long id) {
try {
Task task=taskService.findOne(id);
task.setStatus(Task.TaskStaus.FINISH);
taskService.updateTask(task);
return ResponseResult.buildSuccessResult().toMap();
} catch (Exception e) {
logger.error(e.getMessage(), e);
return ResponseResult.buildFailResult().toMap();
}
}
@RequiresPermissions("mytask:view")
@RequestMapping(value = "/my", method = RequestMethod.GET)
public String myList(Model model) {
Long userId = Functions.getCurrentUserId();
if (userId != null) {
model.addAttribute("taskList", taskService.findByUserId(userId));
}
return "task/mylist";
}
}