Browse Source
待办事项Controller所有方法去掉权限注解,解决角色没有权限访问的问题 新增通用代办事项办理功能,用于完成对应角色登录后,可以通过点击设置->我的代办->办理功能处理对应的模块的审批任务 新增 流程任务处理统一接口,所有方法继承该接口 新增 流程任务处理器工厂,根据流程定义的key,获取对应的处理器 新增 代办项通用接口,用于;1、通用获取流程实例;2、获取代办任务url 新增 销售售后通知单处理类、客户报价代办处理类、客户资料代办处理类、销售订单代办处理类,统一实现流程任务处理统一接口实现里面的handleTask方法,每个类上面@Service注解加上对应的key,当通用办理功能从前端传入taskId的时候,找到流程实例类,找到processDefinitionKey,不同的找到processDefinitionKey会找到对应的handleTask类,用于跳转不同的模块页面dev
10 changed files with 359 additions and 9 deletions
@ -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; |
||||
|
} |
||||
|
} |
@ -0,0 +1,10 @@ |
|||||
|
package com.ruoyi.common.handler; |
||||
|
|
||||
|
import org.springframework.ui.ModelMap; |
||||
|
|
||||
|
/** |
||||
|
* 流程任务处理统一接口 |
||||
|
* */ |
||||
|
public interface TaskHandler { |
||||
|
void handleTask(String taskId, ModelMap mmap); |
||||
|
} |
@ -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); |
||||
|
} |
||||
|
} |
@ -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); |
||||
|
} |
||||
|
} |
@ -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); |
||||
|
} |
||||
|
} |
@ -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); |
||||
|
|
||||
|
} |
||||
|
} |
@ -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); |
||||
|
} |
@ -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"; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
@ -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…
Reference in new issue