diff --git a/ruoyi-activiti/src/main/java/com/ruoyi/process/todoitem/controller/BizTodoItemController.java b/ruoyi-activiti/src/main/java/com/ruoyi/process/todoitem/controller/BizTodoItemController.java index 5a770dda..dfb72ed1 100644 --- a/ruoyi-activiti/src/main/java/com/ruoyi/process/todoitem/controller/BizTodoItemController.java +++ b/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 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/common/factory/TaskHandlerFactory.java b/ruoyi-admin/src/main/java/com/ruoyi/common/factory/TaskHandlerFactory.java new file mode 100644 index 00000000..d004e446 --- /dev/null +++ b/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 taskHandlers; + + /** + * 根据流程定义的key,获取对应的处理器 + * */ + public TaskHandler getHandler(String processDefinitionKey) { + TaskHandler result = taskHandlers.getOrDefault(processDefinitionKey, null); + return result; + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/common/handler/TaskHandler.java b/ruoyi-admin/src/main/java/com/ruoyi/common/handler/TaskHandler.java new file mode 100644 index 00000000..fce5826f --- /dev/null +++ b/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); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/common/handler/impl/AfterSalesNoticeTaskHandler.java b/ruoyi-admin/src/main/java/com/ruoyi/common/handler/impl/AfterSalesNoticeTaskHandler.java new file mode 100644 index 00000000..49c13692 --- /dev/null +++ b/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); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/common/handler/impl/CustomerQuoteTaskHandler.java b/ruoyi-admin/src/main/java/com/ruoyi/common/handler/impl/CustomerQuoteTaskHandler.java new file mode 100644 index 00000000..5f4502ac --- /dev/null +++ b/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); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/common/handler/impl/CustomerTaskHandler.java b/ruoyi-admin/src/main/java/com/ruoyi/common/handler/impl/CustomerTaskHandler.java new file mode 100644 index 00000000..4d367be5 --- /dev/null +++ b/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); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/common/handler/impl/SalesOrderTaskHandler.java b/ruoyi-admin/src/main/java/com/ruoyi/common/handler/impl/SalesOrderTaskHandler.java new file mode 100644 index 00000000..e5b90a9a --- /dev/null +++ b/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); + + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/common/service/IToDoItemService.java b/ruoyi-admin/src/main/java/com/ruoyi/common/service/IToDoItemService.java new file mode 100644 index 00000000..731cbbd8 --- /dev/null +++ b/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); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/common/service/impl/IToDoItemServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/common/service/impl/IToDoItemServiceImpl.java new file mode 100644 index 00000000..10a641b6 --- /dev/null +++ b/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"; + } + } + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonToDoItemController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonToDoItemController.java new file mode 100644 index 00000000..c22dd9e5 --- /dev/null +++ b/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; + } + +}