From a63d66f2911fb8ca8377225c13942bd9e97a76ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E5=86=B7?= <2270033969@qq.com> Date: Sat, 25 Jan 2025 23:28:07 +0800 Subject: [PATCH] =?UTF-8?q?feat(flow):=20=E9=80=82=E9=85=8D=20form-design?= =?UTF-8?q?=20=E8=A1=A8=E5=8D=95=E8=AE=BE=E8=AE=A1=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/EngineFlowController.java | 2 - .../NodeExpressionStrategyFactory.java | 17 +- .../impl/DateNodeConditionStrategy.java | 2 +- .../impl/InputNodeConditionStrategy.java | 2 +- .../impl/MoneyNodeConditionStrategy.java | 28 -- .../impl/NumberNodeConditionStrategy.java | 2 +- .../impl/TimeNodeConditionStrategy.java | 2 +- .../pigx/flow/engine/utils/ModelUtil.java | 2 +- .../api/feign/RemoteFlowEngineService.java | 2 - .../task/api/feign/RemoteFlowTaskService.java | 7 - .../pigx/flow/task/vo/ProcessVO.java | 5 + .../controller/ProcessInstanceController.java | 31 +-- .../controller/ProcessNodeDataController.java | 2 - .../task/controller/RemoteController.java | 256 ++++++++---------- .../impl/ProcessInstanceServiceImpl.java | 94 ++++--- .../task/service/impl/ProcessServiceImpl.java | 1 + .../pigx/flow/task/utils/NodeFormatUtil.java | 12 +- 17 files changed, 208 insertions(+), 259 deletions(-) delete mode 100644 pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/expression/condition/impl/MoneyNodeConditionStrategy.java diff --git a/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/controller/EngineFlowController.java b/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/controller/EngineFlowController.java index 7a86dc0a5..ac353f0c6 100644 --- a/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/controller/EngineFlowController.java +++ b/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/controller/EngineFlowController.java @@ -11,7 +11,6 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fasterxml.jackson.databind.ObjectMapper; import com.pig4cloud.pigx.common.core.util.R; -import com.pig4cloud.pigx.common.security.annotation.Inner; import com.pig4cloud.pigx.flow.engine.utils.ModelUtil; import com.pig4cloud.pigx.flow.task.dto.*; import com.pig4cloud.pigx.flow.task.entity.Process; @@ -96,7 +95,6 @@ public class EngineFlowController { * @param processInstanceParamDto 启动参数 * @return 流程实例ID */ - @Inner @PostMapping("/start") public R start(@RequestBody ProcessInstanceParamDto processInstanceParamDto) { Authentication.setAuthenticatedUserId(processInstanceParamDto.getStartUserId()); diff --git a/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/expression/condition/NodeExpressionStrategyFactory.java b/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/expression/condition/NodeExpressionStrategyFactory.java index 150766156..8985b28c7 100644 --- a/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/expression/condition/NodeExpressionStrategyFactory.java +++ b/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/expression/condition/NodeExpressionStrategyFactory.java @@ -10,18 +10,27 @@ import com.pig4cloud.pigx.flow.task.dto.Node; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.concurrent.atomic.AtomicReference; public class NodeExpressionStrategyFactory { public static String handleSingleCondition(Condition nodeConditionDto) { Map nodeConditionStrategyMap = SpringUtil .getBeansOfType(NodeConditionStrategy.class); - NodeConditionStrategy nodeConditionHandler = nodeConditionStrategyMap - .get(nodeConditionDto.getKeyType() + "NodeConditionStrategy"); - if (nodeConditionHandler == null) { + + // 通过keyType获取对应的处理器, 忽略大小写 + AtomicReference nodeConditionHandler = new AtomicReference<>(); + nodeConditionStrategyMap.forEach((k, v) -> { + if (k.equalsIgnoreCase(nodeConditionDto.getKeyType() + "NodeConditionStrategy")) { + nodeConditionHandler.set(v); + } + }); + + + if (nodeConditionHandler.get() == null) { return "(1==1)"; } - return nodeConditionHandler.handle(nodeConditionDto); + return nodeConditionHandler.get().handle(nodeConditionDto); } /** diff --git a/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/expression/condition/impl/DateNodeConditionStrategy.java b/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/expression/condition/impl/DateNodeConditionStrategy.java index 85a17089f..8c4ff67c2 100644 --- a/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/expression/condition/impl/DateNodeConditionStrategy.java +++ b/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/expression/condition/impl/DateNodeConditionStrategy.java @@ -8,7 +8,7 @@ import org.springframework.stereotype.Component; /** * 字符类型处理器 */ -@Component("DateNodeConditionStrategy") +@Component("datePickerNodeConditionStrategy") public class DateNodeConditionStrategy implements NodeConditionStrategy { /** diff --git a/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/expression/condition/impl/InputNodeConditionStrategy.java b/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/expression/condition/impl/InputNodeConditionStrategy.java index 6176f80b6..c9d8077d7 100644 --- a/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/expression/condition/impl/InputNodeConditionStrategy.java +++ b/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/expression/condition/impl/InputNodeConditionStrategy.java @@ -8,7 +8,7 @@ import org.springframework.stereotype.Component; /** * 字符类型处理器 */ -@Component("InputNodeConditionStrategy") +@Component("inputNodeConditionStrategy") public class InputNodeConditionStrategy implements NodeConditionStrategy { /** diff --git a/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/expression/condition/impl/MoneyNodeConditionStrategy.java b/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/expression/condition/impl/MoneyNodeConditionStrategy.java deleted file mode 100644 index 90e720521..000000000 --- a/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/expression/condition/impl/MoneyNodeConditionStrategy.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.pig4cloud.pigx.flow.engine.expression.condition.impl; - -import cn.hutool.core.util.StrUtil; -import com.pig4cloud.pigx.flow.engine.expression.condition.NodeConditionStrategy; -import com.pig4cloud.pigx.flow.task.dto.Condition; -import org.springframework.stereotype.Component; - -/** - * 字符类型处理器 - */ -@Component("MoneyNodeConditionStrategy") -public class MoneyNodeConditionStrategy implements NodeConditionStrategy { - - /** - * 抽象方法 处理表达式 - */ - @Override - public String handle(Condition condition) { - - String compare = condition.getExpression(); - String id = condition.getKey(); - Object value = condition.getValue(); - - return StrUtil.format("(expressionHandler.numberCompare(\"{}\",\"{}\",{},execution))", id, compare, value); - - } - -} diff --git a/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/expression/condition/impl/NumberNodeConditionStrategy.java b/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/expression/condition/impl/NumberNodeConditionStrategy.java index a55086c55..d722b6444 100644 --- a/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/expression/condition/impl/NumberNodeConditionStrategy.java +++ b/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/expression/condition/impl/NumberNodeConditionStrategy.java @@ -8,7 +8,7 @@ import org.springframework.stereotype.Component; /** * 字符类型处理器 */ -@Component("NumberNodeConditionStrategy") +@Component("inputNumberNodeConditionStrategy") public class NumberNodeConditionStrategy implements NodeConditionStrategy { /** diff --git a/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/expression/condition/impl/TimeNodeConditionStrategy.java b/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/expression/condition/impl/TimeNodeConditionStrategy.java index 44db0c2f0..7ba8adea9 100644 --- a/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/expression/condition/impl/TimeNodeConditionStrategy.java +++ b/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/expression/condition/impl/TimeNodeConditionStrategy.java @@ -8,7 +8,7 @@ import org.springframework.stereotype.Component; /** * 字符类型处理器 */ -@Component("TimeNodeConditionStrategy") +@Component("timePickerNodeConditionStrategy") public class TimeNodeConditionStrategy implements NodeConditionStrategy { /** diff --git a/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/utils/ModelUtil.java b/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/utils/ModelUtil.java index 0e2b09758..d2272b58d 100644 --- a/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/utils/ModelUtil.java +++ b/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/utils/ModelUtil.java @@ -184,7 +184,7 @@ public class ModelUtil { if (ord == size) { expression = NodeExpressionStrategyFactory.handleDefaultBranch(branchs, ord - 1); } - else if (nodeDto.getType() == NodeTypeEnum.EXCLUSIVE_GATEWAY.getValue().intValue() && ord > 1) { + else if (ord > 1) { expression = NodeExpressionStrategyFactory.handleDefaultBranch(branchs, ord - 1); } else { diff --git a/pigx-flow/pigx-flow-task/pigx-flow-task-api/src/main/java/com/pig4cloud/pigx/flow/task/api/feign/RemoteFlowEngineService.java b/pigx-flow/pigx-flow-task/pigx-flow-task-api/src/main/java/com/pig4cloud/pigx/flow/task/api/feign/RemoteFlowEngineService.java index 2f7404977..31932bd4b 100644 --- a/pigx-flow/pigx-flow-task/pigx-flow-task-api/src/main/java/com/pig4cloud/pigx/flow/task/api/feign/RemoteFlowEngineService.java +++ b/pigx-flow/pigx-flow-task/pigx-flow-task-api/src/main/java/com/pig4cloud/pigx/flow/task/api/feign/RemoteFlowEngineService.java @@ -3,7 +3,6 @@ package com.pig4cloud.pigx.flow.task.api.feign; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.pig4cloud.pigx.common.core.constant.ServiceNameConstants; import com.pig4cloud.pigx.common.core.util.R; -import com.pig4cloud.pigx.common.feign.annotation.NoToken; import com.pig4cloud.pigx.flow.task.dto.*; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; @@ -49,7 +48,6 @@ public interface RemoteFlowEngineService { * @param processInstanceParamDto 流程实例参数 * @return 启动流程结果 */ - @NoToken @PostMapping("/flow/start") R startProcess(@RequestBody ProcessInstanceParamDto processInstanceParamDto); diff --git a/pigx-flow/pigx-flow-task/pigx-flow-task-api/src/main/java/com/pig4cloud/pigx/flow/task/api/feign/RemoteFlowTaskService.java b/pigx-flow/pigx-flow-task/pigx-flow-task-api/src/main/java/com/pig4cloud/pigx/flow/task/api/feign/RemoteFlowTaskService.java index f41f3c2ba..6890886a2 100644 --- a/pigx-flow/pigx-flow-task/pigx-flow-task-api/src/main/java/com/pig4cloud/pigx/flow/task/api/feign/RemoteFlowTaskService.java +++ b/pigx-flow/pigx-flow-task/pigx-flow-task-api/src/main/java/com/pig4cloud/pigx/flow/task/api/feign/RemoteFlowTaskService.java @@ -2,7 +2,6 @@ package com.pig4cloud.pigx.flow.task.api.feign; import com.pig4cloud.pigx.common.core.constant.ServiceNameConstants; import com.pig4cloud.pigx.common.core.util.R; -import com.pig4cloud.pigx.common.feign.annotation.NoToken; import com.pig4cloud.pigx.flow.task.dto.*; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; @@ -23,7 +22,6 @@ public interface RemoteFlowTaskService { * 节点开始事件 * @param nodeRecordParamDto */ - @NoToken @PostMapping("/remote/startNodeEvent") void startNodeEvent(@RequestBody ProcessNodeRecordParamDto nodeRecordParamDto); @@ -31,7 +29,6 @@ public interface RemoteFlowTaskService { * 节点结束事件 * @param nodeRecordParamDto */ - @NoToken @PostMapping("/remote/endNodeEvent") void endNodeEvent(@RequestBody ProcessNodeRecordParamDto nodeRecordParamDto); @@ -47,7 +44,6 @@ public interface RemoteFlowTaskService { * 创建流程事件 * @param processInstanceRecordParamDto */ - @NoToken @PostMapping("/remote/createProcessEvent") void createProcessEvent(@RequestBody ProcessInstanceRecordParamDto processInstanceRecordParamDto); @@ -78,7 +74,6 @@ public interface RemoteFlowTaskService { * @param nodeId 节点id * @return */ - @NoToken @GetMapping("/processNodeData/getNodeData") R queryNodeOriData(@RequestParam("flowId") String flowId, @RequestParam("nodeId") String nodeId); @@ -86,7 +81,6 @@ public interface RemoteFlowTaskService { * 节点开始指派用户了 * @param processNodeRecordAssignUserParamDto */ - @NoToken @PostMapping("/remote/startAssignUser") R startAssignUser(@RequestBody ProcessNodeRecordAssignUserParamDto processNodeRecordAssignUserParamDto); @@ -94,7 +88,6 @@ public interface RemoteFlowTaskService { * 任务结束事件 * @param processNodeRecordAssignUserParamDto */ - @NoToken @PostMapping("/remote/taskEndEvent") R taskEndEvent(@RequestBody ProcessNodeRecordAssignUserParamDto processNodeRecordAssignUserParamDto); diff --git a/pigx-flow/pigx-flow-task/pigx-flow-task-api/src/main/java/com/pig4cloud/pigx/flow/task/vo/ProcessVO.java b/pigx-flow/pigx-flow-task/pigx-flow-task-api/src/main/java/com/pig4cloud/pigx/flow/task/vo/ProcessVO.java index 26898351a..73983d412 100644 --- a/pigx-flow/pigx-flow-task/pigx-flow-task-api/src/main/java/com/pig4cloud/pigx/flow/task/vo/ProcessVO.java +++ b/pigx-flow/pigx-flow-task/pigx-flow-task-api/src/main/java/com/pig4cloud/pigx/flow/task/vo/ProcessVO.java @@ -16,4 +16,9 @@ public class ProcessVO extends Process { private Map variableMap; + /** + * 发起人节点的表单权限 + */ + private Map formPerms; + } diff --git a/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/controller/ProcessInstanceController.java b/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/controller/ProcessInstanceController.java index d86a9058c..0509022c0 100644 --- a/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/controller/ProcessInstanceController.java +++ b/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/controller/ProcessInstanceController.java @@ -1,7 +1,6 @@ package com.pig4cloud.pigx.flow.task.controller; import com.pig4cloud.pigx.common.core.util.R; -import com.pig4cloud.pigx.common.security.annotation.Inner; import com.pig4cloud.pigx.flow.task.dto.ProcessInstanceParamDto; import com.pig4cloud.pigx.flow.task.dto.TaskQueryParamDto; import com.pig4cloud.pigx.flow.task.service.IProcessInstanceService; @@ -32,23 +31,11 @@ public class ProcessInstanceController { } /** - * 启动内部流程实例 + * 查询挖矿任务 * - * @param processInstanceParamDto 进程实例参数 DTO + * @param queryParamDto Query param DTO * @return {@link R } */ - @Inner - @SneakyThrows - @PostMapping("startInnerProcessInstance") - public R startInnerProcessInstance(@RequestBody ProcessInstanceParamDto processInstanceParamDto) { - return processInstanceService.startProcessInstance(processInstanceParamDto); - } - - /** - * 查询当前登录用户的待办任务 - * @param pageDto - * @return - */ @SneakyThrows @PostMapping("queryMineTask") public R queryMineTask(@RequestBody TaskQueryParamDto queryParamDto) { @@ -67,9 +54,10 @@ public class ProcessInstanceController { } /** - * 查询我发起的 - * @param pageDto - * @return + * 查询我已启动 + * + * @param taskQueryParamDto task query param dto + * @return {@link R } */ @SneakyThrows @PostMapping("queryMineStarted") @@ -78,9 +66,10 @@ public class ProcessInstanceController { } /** - * 查询抄送我的 - * @param pageDto - * @return + * 查询我 CC + * + * @param taskQueryParamDto task query param dto + * @return {@link R } */ @SneakyThrows @PostMapping("queryMineCC") diff --git a/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/controller/ProcessNodeDataController.java b/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/controller/ProcessNodeDataController.java index 929ce5c0c..2a5d6dce9 100644 --- a/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/controller/ProcessNodeDataController.java +++ b/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/controller/ProcessNodeDataController.java @@ -1,7 +1,6 @@ package com.pig4cloud.pigx.flow.task.controller; import com.pig4cloud.pigx.common.core.util.R; -import com.pig4cloud.pigx.common.security.annotation.Inner; import com.pig4cloud.pigx.flow.task.dto.Node; import com.pig4cloud.pigx.flow.task.dto.ProcessNodeDataDto; import com.pig4cloud.pigx.flow.task.service.IProcessNodeDataService; @@ -39,7 +38,6 @@ public class ProcessNodeDataController { * @param nodeId * @return */ - @Inner @GetMapping("getNodeData") public R getNodeData(String flowId, String nodeId) { return processNodeDataService.getNodeData(flowId, nodeId); diff --git a/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/controller/RemoteController.java b/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/controller/RemoteController.java index 57d606cef..551a84ea8 100644 --- a/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/controller/RemoteController.java +++ b/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/controller/RemoteController.java @@ -1,7 +1,6 @@ package com.pig4cloud.pigx.flow.task.controller; import com.pig4cloud.pigx.common.core.util.R; -import com.pig4cloud.pigx.common.security.annotation.Inner; import com.pig4cloud.pigx.flow.task.dto.*; import com.pig4cloud.pigx.flow.task.service.IRemoteService; import lombok.RequiredArgsConstructor; @@ -18,155 +17,136 @@ import java.util.Map; @RequestMapping("/remote") public class RemoteController { - private final IRemoteService remoteService; + private final IRemoteService remoteService; - /** - * 根据角色id集合查询用户id集合 - * - * @param roleIdList - * @return - */ - @PostMapping("queryUserIdListByRoleIdList") - public R> queryUserIdListByRoleIdList(@RequestBody List roleIdList) { - return remoteService.queryUserIdListByRoleIdList(roleIdList); - } + /** + * 根据角色id集合查询用户id集合 + * @param roleIdList + * @return + */ + @PostMapping("queryUserIdListByRoleIdList") + public R> queryUserIdListByRoleIdList(@RequestBody List roleIdList) { + return remoteService.queryUserIdListByRoleIdList(roleIdList); + } - /** - * 保存抄送 - * - * @param copyDto - * @return - */ - @PostMapping("savecc") - public R saveCC(@RequestBody ProcessCopyDto copyDto) { - return remoteService.saveCC(copyDto); - } + /** + * 保存抄送 + * @param copyDto + * @return + */ + @PostMapping("savecc") + public R saveCC(@RequestBody ProcessCopyDto copyDto) { + return remoteService.saveCC(copyDto); + } - /** - * 检查是否是所有的父级 - * - * @param checkParentDto - * @return - */ - @PostMapping("checkIsAllParent") - public R checkIsAllParent(@RequestBody CheckParentDto checkParentDto) { - return remoteService.checkIsAllParent(checkParentDto); - } + /** + * 检查是否是所有的父级 + * @param checkParentDto + * @return + */ + @PostMapping("checkIsAllParent") + public R checkIsAllParent(@RequestBody CheckParentDto checkParentDto) { + return remoteService.checkIsAllParent(checkParentDto); + } - /** - * 根据部门id集合查询用户id集合 - * - * @param depIdList - * @return - */ - @PostMapping("queryUserIdListByDepIdList") - public R> queryUserIdListByDepIdList(@RequestBody List depIdList) { - return remoteService.queryUserIdListByDepIdList(depIdList); - } + /** + * 根据部门id集合查询用户id集合 + * @param depIdList + * @return + */ + @PostMapping("queryUserIdListByDepIdList") + public R> queryUserIdListByDepIdList(@RequestBody List depIdList) { + return remoteService.queryUserIdListByDepIdList(depIdList); + } - /** - * 检查是否是所有的子级 - * - * @param checkChildDto - * @return - */ - @PostMapping("checkIsAllChild") - public R checkIsAllChild(@RequestBody CheckChildDto checkChildDto) { - return remoteService.checkIsAllChild(checkChildDto); - } + /** + * 检查是否是所有的子级 + * @param checkChildDto + * @return + */ + @PostMapping("checkIsAllChild") + public R checkIsAllChild(@RequestBody CheckChildDto checkChildDto) { + return remoteService.checkIsAllChild(checkChildDto); + } - /** - * 获取用户的信息-包括扩展字段 - * - * @param userId - * @return - */ - @GetMapping("queryUserAllInfo") - public R> queryUserAllInfo(long userId) { - return remoteService.queryUserAllInfo(userId); - } + /** + * 获取用户的信息-包括扩展字段 + * @param userId + * @return + */ + @GetMapping("queryUserAllInfo") + public R> queryUserAllInfo(long userId) { + return remoteService.queryUserAllInfo(userId); + } - /** - * 开始节点事件 - * - * @param recordParamDto - * @return - */ - @Inner - @PostMapping("/startNodeEvent") - public R startNodeEvent(@RequestBody ProcessNodeRecordParamDto recordParamDto) { - return remoteService.startNodeEvent(recordParamDto); - } + /** + * 开始节点事件 + * @param recordParamDto + * @return + */ + @PostMapping("startNodeEvent") + public R startNodeEvent(@RequestBody ProcessNodeRecordParamDto recordParamDto) { + return remoteService.startNodeEvent(recordParamDto); + } - /** - * 流程创建了 - * - * @param processInstanceRecordParamDto - * @return - */ - @Inner - @PostMapping("createProcessEvent") - public R createProcessEvent(@RequestBody ProcessInstanceRecordParamDto processInstanceRecordParamDto) { - return remoteService.createProcessEvent(processInstanceRecordParamDto); - } + /** + * 流程创建了 + * @param processInstanceRecordParamDto + * @return + */ + @PostMapping("createProcessEvent") + public R createProcessEvent(@RequestBody ProcessInstanceRecordParamDto processInstanceRecordParamDto) { + return remoteService.createProcessEvent(processInstanceRecordParamDto); + } - /** - * 结束节点事件 - * - * @param recordParamDto - * @return - */ - @Inner - @PostMapping("endNodeEvent") - public R endNodeEvent(@RequestBody ProcessNodeRecordParamDto recordParamDto) { - return remoteService.endNodeEvent(recordParamDto); - } + /** + * 结束节点事件 + * @param recordParamDto + * @return + */ + @PostMapping("endNodeEvent") + public R endNodeEvent(@RequestBody ProcessNodeRecordParamDto recordParamDto) { + return remoteService.endNodeEvent(recordParamDto); + } - /** - * 开始设置执行人 - * - * @param processNodeRecordAssignUserParamDto - * @return - */ - @Inner - @PostMapping("startAssignUser") - public R startAssignUser(@RequestBody ProcessNodeRecordAssignUserParamDto processNodeRecordAssignUserParamDto) { - return remoteService.startAssignUser(processNodeRecordAssignUserParamDto); - } + /** + * 开始设置执行人 + * @param processNodeRecordAssignUserParamDto + * @return + */ + @PostMapping("startAssignUser") + public R startAssignUser(@RequestBody ProcessNodeRecordAssignUserParamDto processNodeRecordAssignUserParamDto) { + return remoteService.startAssignUser(processNodeRecordAssignUserParamDto); + } - /** - * 任务结束事件 - * - * @param processNodeRecordAssignUserParamDto - * @return - */ - @Inner - @PostMapping("taskEndEvent") - public R taskEndEvent(@RequestBody ProcessNodeRecordAssignUserParamDto processNodeRecordAssignUserParamDto) { - return remoteService.taskEndEvent(processNodeRecordAssignUserParamDto); - } + /** + * 任务结束事件 + * @param processNodeRecordAssignUserParamDto + * @return + */ + @PostMapping("taskEndEvent") + public R taskEndEvent(@RequestBody ProcessNodeRecordAssignUserParamDto processNodeRecordAssignUserParamDto) { + return remoteService.taskEndEvent(processNodeRecordAssignUserParamDto); + } - /** - * 实例结束 - * - * @param processInstanceParamDto - * @return - */ - @Inner - @PostMapping("endProcess") - public R endProcess(@RequestBody ProcessInstanceParamDto processInstanceParamDto) { - return remoteService.endProcess(processInstanceParamDto.getProcessInstanceId()); - } + /** + * 实例结束 + * @param processInstanceParamDto + * @return + */ + @PostMapping("endProcess") + public R endProcess(@RequestBody ProcessInstanceParamDto processInstanceParamDto) { + return remoteService.endProcess(processInstanceParamDto.getProcessInstanceId()); + } - /** - * 查询流程管理员 - * - * @param flowId - * @return - */ - @GetMapping("queryProcessAdmin") - public R queryProcessAdmin(String flowId) { - return remoteService.queryProcessAdmin(flowId); - } + /** + * 查询流程管理员 + * @param flowId + * @return + */ + @GetMapping("queryProcessAdmin") + public R queryProcessAdmin(String flowId) { + return remoteService.queryProcessAdmin(flowId); + } } diff --git a/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/service/impl/ProcessInstanceServiceImpl.java b/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/service/impl/ProcessInstanceServiceImpl.java index 755067b2e..209c8f8dc 100644 --- a/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/service/impl/ProcessInstanceServiceImpl.java +++ b/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/service/impl/ProcessInstanceServiceImpl.java @@ -64,18 +64,16 @@ public class ProcessInstanceServiceImpl implements IProcessInstanceService { */ @Override public R startProcessInstance(ProcessInstanceParamDto processInstanceParamDto) { - // 如果没有传递根节点(发起人),则根据当前用户初始化一个 - if (StrUtil.isBlank(processInstanceParamDto.getStartUserId())) { - PigxUser user = SecurityUtils.getUser(); - processInstanceParamDto.setStartUserId(String.valueOf(user.getId())); - Map paramMap = processInstanceParamDto.getParamMap(); - Dict rootUser = Dict.create() - .set("id", user.getId()) - .set("name", user.getUsername()) - .set("type", NodeUserTypeEnum.USER.getKey()); - paramMap.put("root", CollUtil.newArrayList(rootUser)); - } + PigxUser user = SecurityUtils.getUser(); + + processInstanceParamDto.setStartUserId(String.valueOf(user.getId())); + Map paramMap = processInstanceParamDto.getParamMap(); + Dict rootUser = Dict.create() + .set("id", user.getId()) + .set("name", user.getUsername()) + .set("type", NodeUserTypeEnum.USER.getKey()); + paramMap.put("root", CollUtil.newArrayList(rootUser)); return flowEngineService.startProcess(processInstanceParamDto); } @@ -88,52 +86,52 @@ public class ProcessInstanceServiceImpl implements IProcessInstanceService { @Override public R queryMineTask(TaskQueryParamDto taskQueryParamDto) { taskQueryParamDto.setAssign(SecurityUtils.getUser().getId().toString()); - R> r = flowEngineService.queryAssignTask(taskQueryParamDto); + R> r = flowEngineService.queryAssignTask(taskQueryParamDto); - if (CollUtil.isEmpty(r.getData().getRecords())) { - return r; - } + if (CollUtil.isEmpty(r.getData().getRecords())) { + return r; + } - Set processInstanceIdSet = r.getData() - .getRecords() - .stream() - .map(TaskDto::getProcessInstanceId) - .collect(Collectors.toSet()); + Set processInstanceIdSet = r.getData() + .getRecords() + .stream() + .map(TaskDto::getProcessInstanceId) + .collect(Collectors.toSet()); // 流程实例记录 List processInstanceRecordList = processInstanceRecordService.lambdaQuery() .in(ProcessInstanceRecord::getProcessInstanceId, processInstanceIdSet) .list(); - // 发起人 + // 发起人 // 发起人 List collect = processInstanceRecordList.stream().map(ProcessInstanceRecord::getUserId).collect(Collectors.toList()); List startUserList = userService.getUserById(collect).getData(); - Page pageResultDto = r.getData(); - List taskDtoList = new ArrayList<>(); - for (TaskDto record : r.getData().getRecords()) { - ProcessInstanceRecord processInstanceRecord = processInstanceRecordList.stream() - .filter(w -> StrUtil.equals(w.getProcessInstanceId(), record.getProcessInstanceId())) - .findAny() - .orElse(null); + Page pageResultDto = r.getData(); + List taskDtoList = new ArrayList<>(); + for (TaskDto record : r.getData().getRecords()) { + ProcessInstanceRecord processInstanceRecord = processInstanceRecordList.stream() + .filter(w -> StrUtil.equals(w.getProcessInstanceId(), record.getProcessInstanceId())) + .findAny() + .orElse(null); - if (processInstanceRecord != null) { - record.setProcessName(processInstanceRecord.getName()); - SysUser startUser = startUserList.stream() - .filter(w -> w.getUserId().longValue() == processInstanceRecord.getUserId()) - .findAny() - .orElse(null); + if (processInstanceRecord != null) { + record.setProcessName(processInstanceRecord.getName()); + SysUser startUser = startUserList.stream() + .filter(w -> w.getUserId().longValue() == processInstanceRecord.getUserId()) + .findAny() + .orElse(null); - record.setRootUserId(processInstanceRecord.getUserId()); - record.setGroupName(processInstanceRecord.getGroupName()); - record.setRootUserName(startUser.getUsername()); - record.setRootUserAvatarUrl(startUser.getAvatar()); - record.setStartTime(processInstanceRecord.getCreateTime()); + record.setRootUserId(processInstanceRecord.getUserId()); + record.setGroupName(processInstanceRecord.getGroupName()); + record.setRootUserName(startUser.getUsername()); + record.setRootUserAvatarUrl(startUser.getAvatar()); + record.setStartTime(processInstanceRecord.getCreateTime()); - taskDtoList.add(record); - } - } + taskDtoList.add(record); + } + } pageResultDto.setRecords(taskDtoList); @@ -162,10 +160,10 @@ public class ProcessInstanceServiceImpl implements IProcessInstanceService { .map(TaskDto::getProcessInstanceId) .collect(Collectors.toSet()); - // 流程实例记录 - List processInstanceRecordList = processInstanceRecordService.lambdaQuery() - .in(ProcessInstanceRecord::getProcessInstanceId, processInstanceIdSet) - .list(); + // 流程实例记录 + List processInstanceRecordList = processInstanceRecordService.lambdaQuery() + .in(ProcessInstanceRecord::getProcessInstanceId, processInstanceIdSet) + .list(); // 发起人 List collect = processInstanceRecordList.stream().map(ProcessInstanceRecord::getUserId).collect(Collectors.toList()); @@ -198,9 +196,9 @@ public class ProcessInstanceServiceImpl implements IProcessInstanceService { } } - pageResultDto.setRecords(taskDtoList); + pageResultDto.setRecords(taskDtoList); - return R.ok(pageResultDto); + return R.ok(pageResultDto); } /** diff --git a/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/service/impl/ProcessServiceImpl.java b/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/service/impl/ProcessServiceImpl.java index 8eeaf5f3c..9138c6367 100644 --- a/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/service/impl/ProcessServiceImpl.java +++ b/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/service/impl/ProcessServiceImpl.java @@ -79,6 +79,7 @@ public class ProcessServiceImpl extends ServiceImpl impl ProcessVO processVO = BeanUtil.copyProperties(oaForms, ProcessVO.class); processVO.setSelectUserNodeId(selectUserNodeId); processVO.setFormItems(formItems); + processVO.setFormPerms(startNode.getFormPerms()); return processVO; } diff --git a/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/utils/NodeFormatUtil.java b/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/utils/NodeFormatUtil.java index 8d6990bd1..da6ac966c 100644 --- a/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/utils/NodeFormatUtil.java +++ b/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/utils/NodeFormatUtil.java @@ -8,6 +8,7 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.pig4cloud.pigx.admin.api.entity.SysUser; import com.pig4cloud.pigx.admin.api.feign.RemoteUserService; +import com.pig4cloud.pigx.common.core.util.RetOps; import com.pig4cloud.pigx.common.security.util.SecurityUtils; import com.pig4cloud.pigx.flow.task.constant.NodeStatusEnum; import com.pig4cloud.pigx.flow.task.constant.NodeTypeEnum; @@ -101,12 +102,16 @@ public class NodeFormatUtil { List value = entry.getValue(); List collect = value.stream().map(w -> { UserVo userVo = buildUser(Long.parseLong(w.getUserId())); + if (userVo == null) { + return null; + } + userVo.setShowTime(w.getEndTime()); userVo.setApproveDesc(w.getApproveDesc()); userVo.setStatus(w.getStatus()); userVo.setOperType(w.getTaskType()); return userVo; - }).toList(); + }).filter(Objects::nonNull).toList(); userVoList.addAll(collect); } @@ -257,7 +262,10 @@ public class NodeFormatUtil { } RemoteUserService userService = SpringUtil.getBean(RemoteUserService.class); - SysUser user = userService.getUserById(CollUtil.newArrayList(userId)).getData().get(0); + SysUser user = RetOps.of(userService.getUserById(CollUtil.newArrayList(userId))) + .getData() + .map(sysUsers -> sysUsers.isEmpty() ? null : sysUsers.get(0)) + .orElse(null); if (user == null) { return null; }