diff --git a/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/utils/DictUtil.java b/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/cache/DictCache.java similarity index 89% rename from blade-service-api/blade-dict-api/src/main/java/org/springblade/system/utils/DictUtil.java rename to blade-service-api/blade-dict-api/src/main/java/org/springblade/system/cache/DictCache.java index 8d079a2b..c247d966 100644 --- a/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/utils/DictUtil.java +++ b/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/cache/DictCache.java @@ -1,4 +1,4 @@ -package org.springblade.system.utils; +package org.springblade.system.cache; import org.springblade.core.cache.constant.CacheConstant; import org.springblade.core.cache.utils.CacheUtil; @@ -12,13 +12,17 @@ import org.springblade.system.feign.IDictClient; import java.util.List; /** - * DictUtil + * DictCache * * @author Chill */ -public class DictUtil { +public class DictCache { - private static IDictClient dictClient = SpringUtil.getBean(IDictClient.class); + private static IDictClient dictClient; + + static { + dictClient = SpringUtil.getBean(IDictClient.class); + } /** * 获取字典值 diff --git a/blade-service-api/blade-flow-api/src/main/java/org/springblade/flowable/core/entity/BladeFlow.java b/blade-service-api/blade-flow-api/src/main/java/org/springblade/flowable/core/entity/BladeFlow.java index 651ce45c..5da13566 100644 --- a/blade-service-api/blade-flow-api/src/main/java/org/springblade/flowable/core/entity/BladeFlow.java +++ b/blade-service-api/blade-flow-api/src/main/java/org/springblade/flowable/core/entity/BladeFlow.java @@ -145,9 +145,13 @@ public class BladeFlow implements Serializable { */ private String comment; /** - * 是否继续 + * 是否通过 */ private boolean isPass; + /** + * 是否通过代号 + */ + private String flag; /** * 批复名 */ @@ -169,7 +173,14 @@ public class BladeFlow implements Serializable { * 获取批复名 */ public String getPassComment() { - return this.isPass ? ProcessConstant.PASS_COMMENT : ProcessConstant.NOT_PASS_COMMENT; + return isPass() ? ProcessConstant.PASS_COMMENT : ProcessConstant.NOT_PASS_COMMENT; + } + + /** + * 获取是否通过 + */ + public boolean isPass() { + return "ok".equals(flag); } } diff --git a/blade-service-api/blade-flow-api/src/main/java/org/springblade/flowable/core/feign/IFlowClient.java b/blade-service-api/blade-flow-api/src/main/java/org/springblade/flowable/core/feign/IFlowClient.java index b8e06ce4..54bd260e 100644 --- a/blade-service-api/blade-flow-api/src/main/java/org/springblade/flowable/core/feign/IFlowClient.java +++ b/blade-service-api/blade-flow-api/src/main/java/org/springblade/flowable/core/feign/IFlowClient.java @@ -69,12 +69,11 @@ public interface IFlowClient { * * @param taskId 任务id * @param processInstanceId 流程实例id - * @param title 任务标题 * @param comment 评论 * @param variables 参数 * @return R */ @PostMapping(COMPLETE_TASK) - R completeTask(@RequestParam("taskId") String taskId, @RequestParam("processInstanceId") String processInstanceId, @RequestParam("title") String title, @RequestParam("comment") String comment, @RequestBody Map variables); + R completeTask(@RequestParam("taskId") String taskId, @RequestParam("processInstanceId") String processInstanceId, @RequestParam("comment") String comment, @RequestBody Map variables); } diff --git a/blade-service-api/blade-flow-api/src/main/java/org/springblade/flowable/core/feign/IFlowClientFallback.java b/blade-service-api/blade-flow-api/src/main/java/org/springblade/flowable/core/feign/IFlowClientFallback.java index 16c842b1..6bb6eb4a 100644 --- a/blade-service-api/blade-flow-api/src/main/java/org/springblade/flowable/core/feign/IFlowClientFallback.java +++ b/blade-service-api/blade-flow-api/src/main/java/org/springblade/flowable/core/feign/IFlowClientFallback.java @@ -32,16 +32,17 @@ public class IFlowClientFallback implements IFlowClient { @Override public R startProcessInstanceById(String processDefinitionId, String businessKey, Map variables) { - return null; + return R.fail("远程调用失败"); } @Override public R startProcessInstanceByKey(String processDefinitionKey, String businessKey, Map variables) { - return null; + return R.fail("远程调用失败"); } @Override - public R completeTask(String taskId, String processInstanceId, String title, String comment, Map variables) { - return null; + public R completeTask(String taskId, String processInstanceId, String comment, Map variables) { + return R.fail("远程调用失败"); } + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/controller/LeaveController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/controller/LeaveController.java index 60c8dee4..227c953a 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/controller/LeaveController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/controller/LeaveController.java @@ -22,6 +22,7 @@ import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.tool.api.R; import org.springblade.desk.entity.ProcessLeave; import org.springblade.desk.service.ILeaveService; +import org.springblade.flowable.core.entity.BladeFlow; import org.springblade.system.user.cache.UserCache; import org.springframework.web.bind.annotation.*; import springfox.documentation.annotations.ApiIgnore; @@ -65,11 +66,11 @@ public class LeaveController extends BladeController implements CacheNames { /** * 完成任务 * - * @param leave 请假信息 + * @param flow 请假信息 */ @PostMapping("complete-task") - public R completeTask(@RequestBody ProcessLeave leave) { - return R.status(leaveService.completeTask(leave)); + public R completeTask(@RequestBody BladeFlow flow) { + return R.status(leaveService.completeTask(flow)); } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/service/ILeaveService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/service/ILeaveService.java index 284d79fb..3eea4ee6 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/service/ILeaveService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/service/ILeaveService.java @@ -18,6 +18,7 @@ package org.springblade.desk.service; import org.springblade.core.mp.base.BaseService; import org.springblade.desk.entity.ProcessLeave; +import org.springblade.flowable.core.entity.BladeFlow; /** * 服务类 @@ -40,6 +41,6 @@ public interface ILeaveService extends BaseService { * @param leave 请假信息 * @return boolean */ - boolean completeTask(ProcessLeave leave); + boolean completeTask(BladeFlow leave); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/service/impl/LeaveServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/service/impl/LeaveServiceImpl.java index 05f31bc1..caa45dcf 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/service/impl/LeaveServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/service/impl/LeaveServiceImpl.java @@ -77,10 +77,8 @@ public class LeaveServiceImpl extends BaseServiceImpl } @Override - public boolean completeTask(ProcessLeave leave) { - BladeFlow flow = leave.getFlow(); - flow.setComment(flow.getPassComment()); - - return false; + public boolean completeTask(BladeFlow flow) { + R result = flowClient.completeTask(flow.getTaskId(), flow.getProcessInstanceId(), flow.getPassComment(), Kv.create().set("pass", flow.isPass())); + return result.isSuccess(); } } diff --git a/blade-service/blade-flow/src/main/java/org/springblade/flowable/business/controller/LeaveController.java b/blade-service/blade-flow/src/main/java/org/springblade/flowable/business/controller/LeaveController.java deleted file mode 100644 index 15876a02..00000000 --- a/blade-service/blade-flow/src/main/java/org/springblade/flowable/business/controller/LeaveController.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * Neither the name of the dreamlu.net developer nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * Author: Chill 庄骞 (smallchill@163.com) - */ -package org.springblade.flowable.business.controller; - -import lombok.AllArgsConstructor; -import org.flowable.engine.RuntimeService; -import org.flowable.engine.TaskService; -import org.flowable.engine.runtime.ProcessInstance; -import org.flowable.task.api.Task; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.util.HashMap; -import java.util.List; - -/** - * 报销控制器 - * - * @author Chill - */ -@Controller -@AllArgsConstructor -@RequestMapping(value = "leave") -public class LeaveController { - - private RuntimeService runtimeService; - - private TaskService taskService; - - /** - * 添加报销 - * - * @param userId 用户Id - * @param money 报销金额 - * @param descption 描述 - */ - @RequestMapping(value = "add") - @ResponseBody - public String addExpense(String userId, Integer money, String descption) { - //启动流程 - HashMap map = new HashMap<>(); - map.put("taskUser", userId); - map.put("money", money); - ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("Expense", map); - return "提交成功.流程Id为:" + processInstance.getId(); - } - - /** - * 获取审批管理列表 - */ - @RequestMapping(value = "/list") - @ResponseBody - public Object list(String userId) { - List tasks = taskService.createTaskQuery().taskAssignee(userId).orderByTaskCreateTime().desc().list(); - for (Task task : tasks) { - System.out.println(task.toString()); - } - return tasks.toArray().toString(); - } - - /** - * 批准 - * - * @param taskId 任务ID - */ - @RequestMapping(value = "apply") - @ResponseBody - public String apply(String taskId) { - Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); - if (task == null) { - throw new RuntimeException("流程不存在"); - } - //通过审核 - HashMap map = new HashMap<>(); - map.put("outcome", "通过"); - taskService.complete(taskId, map); - return "processed ok!"; - } - - /** - * 拒绝 - */ - @ResponseBody - @RequestMapping(value = "reject") - public String reject(String taskId) { - HashMap map = new HashMap<>(); - map.put("outcome", "驳回"); - taskService.complete(taskId, map); - return "reject"; - } -} diff --git a/blade-service/blade-flow/src/main/java/org/springblade/flowable/business/feign/FlowClient.java b/blade-service/blade-flow/src/main/java/org/springblade/flowable/business/feign/FlowClient.java index 377f1e69..024967f1 100644 --- a/blade-service/blade-flow/src/main/java/org/springblade/flowable/business/feign/FlowClient.java +++ b/blade-service/blade-flow/src/main/java/org/springblade/flowable/business/feign/FlowClient.java @@ -62,7 +62,7 @@ public class FlowClient implements IFlowClient { @Override @PostMapping(START_PROCESS_INSTANCE_BY_KEY) - public R startProcessInstanceByKey(String processDefinitionKey, String businessKey, Map variables) { + public R startProcessInstanceByKey(String processDefinitionKey, String businessKey, @RequestBody Map variables) { // 设置流程启动用户 identityService.setAuthenticatedUserId(String.valueOf(SecureUtil.getUserId())); // 开启流程 @@ -75,7 +75,7 @@ public class FlowClient implements IFlowClient { @Override @PostMapping(COMPLETE_TASK) - public R completeTask(String taskId, String processInstanceId, String title, String comment, Map variables) { + public R completeTask(String taskId, String processInstanceId, String comment, @RequestBody Map variables) { // 增加评论 if (StringUtil.isNoneBlank(processInstanceId, comment)) { taskService.addComment(taskId, processInstanceId, comment); @@ -84,10 +84,6 @@ public class FlowClient implements IFlowClient { if (Func.isEmpty(variables)) { variables = Kv.create(); } - // 增加标题 - if (StringUtil.isNotBlank(title)) { - variables.put("title", title); - } // 完成任务 taskService.complete(taskId, variables); return R.success("流程提交成功"); diff --git a/blade-service/blade-flow/src/main/java/org/springblade/flowable/business/handler/BossTaskHandler.java b/blade-service/blade-flow/src/main/java/org/springblade/flowable/business/handler/BossTaskHandler.java deleted file mode 100644 index 009dee99..00000000 --- a/blade-service/blade-flow/src/main/java/org/springblade/flowable/business/handler/BossTaskHandler.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.springblade.flowable.business.handler; - - -import org.flowable.engine.delegate.TaskListener; -import org.flowable.task.service.delegate.DelegateTask; - -/** - * 老板处理器 - * - * @author Chill - */ -public class BossTaskHandler implements TaskListener { - - @Override - public void notify(DelegateTask delegateTask) { - delegateTask.setAssignee("老板"); - } - -} diff --git a/blade-service/blade-flow/src/main/java/org/springblade/flowable/business/handler/ManagerTaskHandler.java b/blade-service/blade-flow/src/main/java/org/springblade/flowable/business/handler/ManagerTaskHandler.java deleted file mode 100644 index eeebcb60..00000000 --- a/blade-service/blade-flow/src/main/java/org/springblade/flowable/business/handler/ManagerTaskHandler.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.springblade.flowable.business.handler; - -import org.flowable.engine.delegate.TaskListener; -import org.flowable.task.service.delegate.DelegateTask; - -/** - * 经理处理器 - * - * @author Chill - */ -public class ManagerTaskHandler implements TaskListener { - - @Override - public void notify(DelegateTask delegateTask) { - delegateTask.setAssignee("经理"); - } - -} diff --git a/blade-service/blade-flow/src/main/java/org/springblade/flowable/business/service/impl/FlowBusinessServiceImpl.java b/blade-service/blade-flow/src/main/java/org/springblade/flowable/business/service/impl/FlowBusinessServiceImpl.java index a7b7a1b9..7039f5d9 100644 --- a/blade-service/blade-flow/src/main/java/org/springblade/flowable/business/service/impl/FlowBusinessServiceImpl.java +++ b/blade-service/blade-flow/src/main/java/org/springblade/flowable/business/service/impl/FlowBusinessServiceImpl.java @@ -52,7 +52,7 @@ public class FlowBusinessServiceImpl implements FlowBusinessService { @Override public IPage selectClaimPage(IPage page, BladeFlow bladeFlow) { - String taskUser = String.valueOf(SecureUtil.getUserId()); + String taskUser = String.valueOf(SecureUtil.getUserAccount()); List flowList = new LinkedList<>(); // 等待签收的任务 @@ -75,7 +75,7 @@ public class FlowBusinessServiceImpl implements FlowBusinessService { @Override public IPage selectTodoPage(IPage page, BladeFlow bladeFlow) { - String taskUser = String.valueOf(SecureUtil.getUserId()); + String taskUser = String.valueOf(SecureUtil.getUserAccount()); List flowList = new LinkedList<>(); // 已签收的任务 @@ -98,7 +98,7 @@ public class FlowBusinessServiceImpl implements FlowBusinessService { @Override public IPage selectSendPage(IPage page, BladeFlow bladeFlow) { - String taskUser = String.valueOf(SecureUtil.getUserId()); + String taskUser = String.valueOf(SecureUtil.getUserAccount()); List flowList = new LinkedList<>(); HistoricProcessInstanceQuery historyQuery = historyService.createHistoricProcessInstanceQuery().startedBy(taskUser).orderByProcessInstanceStartTime().desc(); @@ -120,11 +120,13 @@ public class FlowBusinessServiceImpl implements FlowBusinessService { flow.setProcessInstanceId(historicProcessInstance.getId()); flow.setHistoryProcessInstanceId(historicProcessInstance.getId()); // ProcessDefinition - ProcessDefinition pd = FlowCache.getProcessDefinition(historicProcessInstance.getProcessDefinitionId()); - flow.setProcessDefinitionId(pd.getId()); - flow.setProcessDefinitionName(pd.getName()); - flow.setProcessDefinitionKey(pd.getKey()); - flow.setProcessDefinitionVersion(pd.getVersion()); + ProcessDefinition processDefinition = FlowCache.getProcessDefinition(historicProcessInstance.getProcessDefinitionId()); + flow.setProcessDefinitionId(processDefinition.getId()); + flow.setProcessDefinitionName(processDefinition.getName()); + flow.setProcessDefinitionVersion(processDefinition.getVersion()); + flow.setProcessDefinitionKey(processDefinition.getKey()); + flow.setCategory(processDefinition.getCategory()); + flow.setCategoryName(FlowCache.getCategoryName(processDefinition.getCategory())); flow.setProcessInstanceId(historicProcessInstance.getId()); // HistoricTaskInstance HistoricTaskInstance historyTask = historyService.createHistoricTaskInstanceQuery().processInstanceId(historicProcessInstance.getId()).orderByHistoricTaskInstanceEndTime().desc().list().get(0); @@ -151,7 +153,7 @@ public class FlowBusinessServiceImpl implements FlowBusinessService { @Override public IPage selectDonePage(IPage page, BladeFlow bladeFlow) { - String taskUser = String.valueOf(SecureUtil.getUserId()); + String taskUser = String.valueOf(SecureUtil.getUserAccount()); List flowList = new LinkedList<>(); HistoricTaskInstanceQuery doneQuery = historyService.createHistoricTaskInstanceQuery().taskAssignee(taskUser).finished() @@ -177,11 +179,13 @@ public class FlowBusinessServiceImpl implements FlowBusinessService { flow.setHistoryTaskEndTime(historicTaskInstance.getEndTime()); flow.setVariables(historicTaskInstance.getProcessVariables()); - ProcessDefinition pd = FlowCache.getProcessDefinition(historicTaskInstance.getProcessDefinitionId()); - flow.setProcessDefinitionId(pd.getId()); - flow.setProcessDefinitionName(pd.getName()); - flow.setProcessDefinitionKey(pd.getKey()); - flow.setProcessDefinitionVersion(pd.getVersion()); + ProcessDefinition processDefinition = FlowCache.getProcessDefinition(historicTaskInstance.getProcessDefinitionId()); + flow.setProcessDefinitionId(processDefinition.getId()); + flow.setProcessDefinitionName(processDefinition.getName()); + flow.setProcessDefinitionKey(processDefinition.getKey()); + flow.setProcessDefinitionVersion(processDefinition.getVersion()); + flow.setCategory(processDefinition.getCategory()); + flow.setCategoryName(FlowCache.getCategoryName(processDefinition.getCategory())); flow.setProcessInstanceId(historicTaskInstance.getProcessInstanceId()); flow.setHistoryProcessInstanceId(historicTaskInstance.getProcessInstanceId()); diff --git a/blade-service/blade-flow/src/main/java/org/springblade/flowable/engine/service/impl/FlowServiceImpl.java b/blade-service/blade-flow/src/main/java/org/springblade/flowable/engine/service/impl/FlowServiceImpl.java index 5459d556..53c15cc6 100644 --- a/blade-service/blade-flow/src/main/java/org/springblade/flowable/engine/service/impl/FlowServiceImpl.java +++ b/blade-service/blade-flow/src/main/java/org/springblade/flowable/engine/service/impl/FlowServiceImpl.java @@ -50,7 +50,6 @@ import org.springblade.flowable.engine.entity.FlowModel; import org.springblade.flowable.engine.entity.FlowProcess; import org.springblade.flowable.engine.mapper.FlowMapper; import org.springblade.flowable.engine.service.FlowService; -import org.springblade.flowable.engine.utils.FlowCache; import org.springblade.system.user.cache.UserCache; import org.springblade.system.user.entity.User; import org.springframework.stereotype.Service; @@ -132,7 +131,8 @@ public class FlowServiceImpl extends ServiceImpl implemen flow.setHistoryActivityName(historicActivityInstance.getActivityName()); flow.setCreateTime(historicActivityInstance.getStartTime()); flow.setEndTime(historicActivityInstance.getEndTime()); - flow.setHistoryActivityDurationTime(DateUtil.secondToTime(historicActivityInstance.getDurationInMillis())); + String durationTime = DateUtil.secondToTime(Func.toLong(historicActivityInstance.getDurationInMillis(),0L) / 1000); + flow.setHistoryActivityDurationTime(durationTime); // 获取流程发起人名称 if (FlowConstant.START_EVENT.equals(historicActivityInstance.getActivityType())) { List processInstanceList = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).orderByProcessInstanceStartTime().asc().list(); diff --git a/blade-service/blade-flow/src/main/java/org/springblade/flowable/engine/utils/FlowCache.java b/blade-service/blade-flow/src/main/java/org/springblade/flowable/engine/utils/FlowCache.java index 87f0e5da..aaebe053 100644 --- a/blade-service/blade-flow/src/main/java/org/springblade/flowable/engine/utils/FlowCache.java +++ b/blade-service/blade-flow/src/main/java/org/springblade/flowable/engine/utils/FlowCache.java @@ -22,7 +22,7 @@ import org.springblade.core.cache.utils.CacheUtil; import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.SpringUtil; import org.springblade.core.tool.utils.StringPool; -import org.springblade.system.utils.DictUtil; +import org.springblade.system.cache.DictCache; /** * 流程缓存 @@ -66,7 +66,7 @@ public class FlowCache { if (Func.isEmpty(category)) { return StringPool.EMPTY; } - return DictUtil.getValue(category.split(StringPool.UNDERSCORE)[0], Func.toInt(category.split(StringPool.UNDERSCORE)[1])); + return DictCache.getValue(category.split(StringPool.UNDERSCORE)[0], Func.toInt(category.split(StringPool.UNDERSCORE)[1])); } } diff --git a/blade-service/blade-flow/src/main/resources/processes/LeaveProcess.bpmn20.xml b/blade-service/blade-flow/src/main/resources/processes/LeaveProcess.bpmn20.xml index 389fa93d..58ed8e49 100644 --- a/blade-service/blade-flow/src/main/resources/processes/LeaveProcess.bpmn20.xml +++ b/blade-service/blade-flow/src/main/resources/processes/LeaveProcess.bpmn20.xml @@ -3,20 +3,20 @@ 请假流程 - + - + - + - + - +