Browse Source

[feat] 审批模块管理

待办事项Controller所有方法去掉权限注解,解决角色没有权限访问的问题
新增通用代办事项办理功能,用于完成对应角色登录后,可以通过点击设置->我的代办->办理功能处理对应的模块的审批任务
新增 流程任务处理统一接口,所有方法继承该接口
新增 流程任务处理器工厂,根据流程定义的key,获取对应的处理器
新增 代办项通用接口,用于;1、通用获取流程实例;2、获取代办任务url
新增 销售售后通知单处理类、客户报价代办处理类、客户资料代办处理类、销售订单代办处理类,统一实现流程任务处理统一接口实现里面的handleTask方法,每个类上面@Service注解加上对应的key,当通用办理功能从前端传入taskId的时候,找到流程实例类,找到processDefinitionKey,不同的找到processDefinitionKey会找到对应的handleTask类,用于跳转不同的模块页面
dev
liuxiaoxu 2 months ago
parent
commit
1eeb3d82ad
  1. 20
      ruoyi-activiti/src/main/java/com/ruoyi/process/todoitem/controller/BizTodoItemController.java
  2. 25
      ruoyi-admin/src/main/java/com/ruoyi/common/factory/TaskHandlerFactory.java
  3. 10
      ruoyi-admin/src/main/java/com/ruoyi/common/handler/TaskHandler.java
  4. 44
      ruoyi-admin/src/main/java/com/ruoyi/common/handler/impl/AfterSalesNoticeTaskHandler.java
  5. 46
      ruoyi-admin/src/main/java/com/ruoyi/common/handler/impl/CustomerQuoteTaskHandler.java
  6. 43
      ruoyi-admin/src/main/java/com/ruoyi/common/handler/impl/CustomerTaskHandler.java
  7. 45
      ruoyi-admin/src/main/java/com/ruoyi/common/handler/impl/SalesOrderTaskHandler.java
  8. 14
      ruoyi-admin/src/main/java/com/ruoyi/common/service/IToDoItemService.java
  9. 60
      ruoyi-admin/src/main/java/com/ruoyi/common/service/impl/IToDoItemServiceImpl.java
  10. 61
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonToDoItemController.java

20
ruoyi-activiti/src/main/java/com/ruoyi/process/todoitem/controller/BizTodoItemController.java

@ -43,6 +43,7 @@ public class BizTodoItemController extends BaseController {
@Autowired
private IBizTodoItemService bizTodoItemService;
// @Autowired
// private IBizLeaveService bizLeaveService;
@ -55,6 +56,7 @@ public class BizTodoItemController extends BaseController {
@Autowired
private RuntimeService runtimeService;
@GetMapping("/todoListView")
public String todoListView(ModelMap mmap) {
BizTodoItem todoItem = new BizTodoItem();
@ -84,7 +86,7 @@ public class BizTodoItemController extends BaseController {
// return prefix + "/task" + verifyName;
// }
@RequiresPermissions("process:todoitem:view")
// @RequiresPermissions("process:todoitem:view")
@GetMapping()
public String todoitem(ModelMap mmap) {
mmap.put("currentUser", ShiroUtils.getSysUser());
@ -94,7 +96,7 @@ public class BizTodoItemController extends BaseController {
/**
* 查询待办事项列表
*/
@RequiresPermissions("process:todoitem:list")
// @RequiresPermissions("process:todoitem:list")
@PostMapping("/list")
@ResponseBody
public TableDataInfo list(BizTodoItem bizTodoItem) {
@ -107,7 +109,7 @@ public class BizTodoItemController extends BaseController {
return getDataTable(list);
}
@RequiresPermissions("process:todoitem:doneView")
// @RequiresPermissions("process:todoitem:doneView")
@GetMapping("/doneitemView")
public String doneitem() {
return prefix + "/doneitem";
@ -116,7 +118,7 @@ public class BizTodoItemController extends BaseController {
/**
* 查询已办事项列表
*/
@RequiresPermissions("process:todoitem:doneList")
// @RequiresPermissions("process:todoitem:doneList")
@PostMapping("/doneList")
@ResponseBody
public TableDataInfo doneList(BizTodoItem bizTodoItem) {
@ -133,7 +135,7 @@ public class BizTodoItemController extends BaseController {
/**
* 导出待办事项列表
*/
@RequiresPermissions("process:todoitem:export")
// @RequiresPermissions("process:todoitem:export")
@PostMapping("/export")
@ResponseBody
public AjaxResult export(BizTodoItem bizTodoItem) {
@ -146,7 +148,7 @@ public class BizTodoItemController extends BaseController {
/**
* 导出已办事项列表
*/
@RequiresPermissions("process:todoitem:doneExport")
// @RequiresPermissions("process:todoitem:doneExport")
@PostMapping("/doneExport")
@ResponseBody
public AjaxResult doneExport(BizTodoItem bizTodoItem) {
@ -167,7 +169,7 @@ public class BizTodoItemController extends BaseController {
/**
* 新增保存待办事项
*/
@RequiresPermissions("process:todoitem:add")
// @RequiresPermissions("process:todoitem:add")
@Log(title = "待办事项", businessType = BusinessType.INSERT)
@PostMapping("/add")
@ResponseBody
@ -188,7 +190,7 @@ public class BizTodoItemController extends BaseController {
/**
* 修改保存待办事项
*/
@RequiresPermissions("process:todoitem:edit")
// @RequiresPermissions("process:todoitem:edit")
@Log(title = "待办事项", businessType = BusinessType.UPDATE)
@PostMapping("/edit")
@ResponseBody
@ -199,7 +201,7 @@ public class BizTodoItemController extends BaseController {
/**
* 删除待办事项
*/
@RequiresPermissions("process:todoitem:remove")
// @RequiresPermissions("process:todoitem:remove")
@Log(title = "待办事项", businessType = BusinessType.DELETE)
@PostMapping( "/remove")
@ResponseBody

25
ruoyi-admin/src/main/java/com/ruoyi/common/factory/TaskHandlerFactory.java

@ -0,0 +1,25 @@
package com.ruoyi.common.factory;
import com.ruoyi.common.handler.TaskHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
* 流程任务处理器工厂
* */
@Component
public class TaskHandlerFactory {
@Autowired
private Map<String, TaskHandler> taskHandlers;
/**
* 根据流程定义的key获取对应的处理器
* */
public TaskHandler getHandler(String processDefinitionKey) {
TaskHandler result = taskHandlers.getOrDefault(processDefinitionKey, null);
return result;
}
}

10
ruoyi-admin/src/main/java/com/ruoyi/common/handler/TaskHandler.java

@ -0,0 +1,10 @@
package com.ruoyi.common.handler;
import org.springframework.ui.ModelMap;
/**
* 流程任务处理统一接口
* */
public interface TaskHandler {
void handleTask(String taskId, ModelMap mmap);
}

44
ruoyi-admin/src/main/java/com/ruoyi/common/handler/impl/AfterSalesNoticeTaskHandler.java

@ -0,0 +1,44 @@
package com.ruoyi.common.handler.impl;
import com.ruoyi.common.handler.TaskHandler;
import com.ruoyi.common.service.IToDoItemService;
import com.ruoyi.sales.domain.VO.SalesAftersalesNoticeVO;
import com.ruoyi.sales.service.ISalesAftersalesNoticeService;
import com.ruoyi.system.domain.SysCustomerQuoteVo;
import org.activiti.engine.TaskService;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.ui.ModelMap;
/**
* 销售售后通知单处理类
*/
@Service("aftersalesNotice")
public class AfterSalesNoticeTaskHandler implements TaskHandler {
@Autowired
private ISalesAftersalesNoticeService salesAftersalesNoticeService;
@Autowired
private TaskService taskService;
@Autowired
private IToDoItemService toDoItemService;
@Override
public void handleTask(String taskId, ModelMap mmap) {
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
// 业务逻辑...
ProcessInstance processInstance = toDoItemService.getProcessInstance(taskId);
SalesAftersalesNoticeVO aftersalesNoticeVO = salesAftersalesNoticeService.selectSalesAftersalesNoticeById(new Long(processInstance.getBusinessKey()));
mmap.put("formData", aftersalesNoticeVO);
mmap.put("taskId", taskId);
String verifyName = task.getTaskDefinitionKey().substring(0, 1).toUpperCase() + task.getTaskDefinitionKey().substring(1);
mmap.put("verifyName", verifyName);
}
}

46
ruoyi-admin/src/main/java/com/ruoyi/common/handler/impl/CustomerQuoteTaskHandler.java

@ -0,0 +1,46 @@
package com.ruoyi.common.handler.impl;
import com.ruoyi.common.handler.TaskHandler;
import com.ruoyi.common.service.IToDoItemService;
import com.ruoyi.system.domain.SysCustomerQuoteVo;
import com.ruoyi.system.domain.SysCustomerVo;
import com.ruoyi.system.service.ISysCustomerQuoteService;
import com.ruoyi.system.service.ISysCustomerService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.ui.ModelMap;
/**
* 客户报价代办处理类
* */
@Service("customerQuote")
public class CustomerQuoteTaskHandler implements TaskHandler {
@Autowired
private ISysCustomerQuoteService customerQuoteService;
@Autowired
private TaskService taskService;
@Autowired
private IToDoItemService toDoItemService;
@Override
public void handleTask(String taskId, ModelMap mmap) {
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
// 业务逻辑...
ProcessInstance processInstance = toDoItemService.getProcessInstance(taskId);
SysCustomerQuoteVo sysCustomerQuoteVo = customerQuoteService.selectSysCustomerQuoteById(new Long(processInstance.getBusinessKey()));
mmap.put("formData", sysCustomerQuoteVo);
mmap.put("taskId", taskId);
String verifyName = task.getTaskDefinitionKey().substring(0, 1).toUpperCase() + task.getTaskDefinitionKey().substring(1);
mmap.put("verifyName", verifyName);
}
}

43
ruoyi-admin/src/main/java/com/ruoyi/common/handler/impl/CustomerTaskHandler.java

@ -0,0 +1,43 @@
package com.ruoyi.common.handler.impl;
import com.ruoyi.common.handler.TaskHandler;
import com.ruoyi.common.service.IToDoItemService;
import com.ruoyi.system.domain.SysCustomerVo;
import com.ruoyi.system.service.ISysCustomerService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.ui.ModelMap;
/**
* 客户资料代办处理类
* */
@Service("customer")
public class CustomerTaskHandler implements TaskHandler {
@Autowired
private ISysCustomerService customerService;
@Autowired
private TaskService taskService;
@Autowired
private IToDoItemService toDoItemService;
@Override
public void handleTask(String taskId, ModelMap mmap) {
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
// 业务逻辑...
ProcessInstance processInstance = toDoItemService.getProcessInstance(taskId);
SysCustomerVo sysCustomerVo = customerService.selectSysCustomerById(new Long(processInstance.getBusinessKey()));
mmap.put("formData", sysCustomerVo);
mmap.put("taskId", taskId);
String verifyName = task.getTaskDefinitionKey().substring(0, 1).toUpperCase() + task.getTaskDefinitionKey().substring(1);
mmap.put("verifyName", verifyName);
}
}

45
ruoyi-admin/src/main/java/com/ruoyi/common/handler/impl/SalesOrderTaskHandler.java

@ -0,0 +1,45 @@
package com.ruoyi.common.handler.impl;
import com.ruoyi.common.handler.TaskHandler;
import com.ruoyi.common.service.IToDoItemService;
import com.ruoyi.system.domain.SysCustomerVo;
import com.ruoyi.system.domain.SysSalesOrderVo;
import com.ruoyi.system.service.ISysSalesOrderService;
import org.activiti.engine.TaskService;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.ui.ModelMap;
/**
* 销售订单代办处理类
* */
@Service("salesorder")
public class SalesOrderTaskHandler implements TaskHandler {
@Autowired
private IToDoItemService todoItemService;
@Autowired
private ISysSalesOrderService salesOrderService;
@Autowired
private TaskService taskService;
@Override
public void handleTask(String taskId, ModelMap mmap) {
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
// 业务逻辑...
ProcessInstance processInstance = todoItemService.getProcessInstance(taskId);
SysSalesOrderVo sysSalesOrderVo = salesOrderService.selectSysSalesOrderById(new Long(processInstance.getBusinessKey()));
mmap.put("formData", sysSalesOrderVo);
mmap.put("taskId", taskId);
String verifyName = task.getTaskDefinitionKey().substring(0, 1).toUpperCase() + task.getTaskDefinitionKey().substring(1);
mmap.put("verifyName", verifyName);
}
}

14
ruoyi-admin/src/main/java/com/ruoyi/common/service/IToDoItemService.java

@ -0,0 +1,14 @@
package com.ruoyi.common.service;
import org.activiti.engine.runtime.ProcessInstance;
/**
* 代办项通用接口
* */
public interface IToDoItemService {
String determinePrefix(String processDefinitionKey);
ProcessInstance getProcessInstance(String taskId);
}

60
ruoyi-admin/src/main/java/com/ruoyi/common/service/impl/IToDoItemServiceImpl.java

@ -0,0 +1,60 @@
package com.ruoyi.common.service.impl;
import com.ruoyi.common.service.IToDoItemService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* 待办事项服务实现类
* */
@Service
public class IToDoItemServiceImpl implements IToDoItemService {
@Autowired
private TaskService taskService;
@Autowired
private RuntimeService runtimeService;
/**
* 通用获取流程实例
* */
@Override
public ProcessInstance getProcessInstance(String taskId) {
// 业务逻辑...
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
String processInstanceId = task.getProcessInstanceId();
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceId(processInstanceId)
.singleResult();
return processInstance;
}
/**
* 获取代办任务url
* */
@Override
public String determinePrefix(String processDefinitionKey) {
// 根据 processDefinitionKey 确定不同的前缀
switch (processDefinitionKey) {
case "customer":
return "system/customer";
case "customerQuote":
return "system/customerQuote";
case "salesorder":
return "system/salesOrder";
case "aftersalesNotice":
return "sales/afterSalesNotice";
// 其他case...
default:
return "defaultPrefix";
}
}
}

61
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonToDoItemController.java

@ -0,0 +1,61 @@
package com.ruoyi.web.controller.common;
import com.ruoyi.common.factory.TaskHandlerFactory;
import com.ruoyi.common.handler.TaskHandler;
import com.ruoyi.common.service.IToDoItemService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 通用代办事项办理
* */
@Controller
@RequestMapping("/process/todoitem")
public class CommonToDoItemController {
private String prefix = "process/todoitem";
@Autowired
private TaskService taskService;
@Autowired
private RuntimeService runtimeService;
@Autowired
private TaskHandlerFactory taskHandlerFactory;
@Autowired
private IToDoItemService toDoItemService;
/**
* 通用办理功能
* */
@RequestMapping("/showVerifyDialog/{taskId}")
public String handle(@PathVariable("taskId") String taskId, ModelMap mmap) {
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
String processInstanceId = task.getProcessInstanceId();
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceId(processInstanceId)
.singleResult();
String processDefinitionKey = processInstance.getProcessDefinitionKey();
TaskHandler handler = taskHandlerFactory.getHandler(processDefinitionKey);
if (handler != null) {
handler.handleTask(taskId, mmap);
}
// 动态确定前缀
String prefix = toDoItemService.determinePrefix(processDefinitionKey);
String verifyName = (String) mmap.get("verifyName");
return prefix + "/task" + verifyName;
}
}
Loading…
Cancel
Save