From f8d6f1e2c44bd26189ab121258e800c9643e90d8 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 26 Jan 2025 13:52:01 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E4=BB=A3=E7=A0=81=E8=AF=84=E5=AE=A1?= =?UTF-8?q?=E3=80=91Bpm=EF=BC=9A=E8=A7=A6=E5=8F=91=E5=99=A8=E7=9A=84?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vo/model/simple/BpmSimpleModelNodeVO.java | 11 +++++++---- .../task/BpmProcessInstanceService.java | 4 ++-- .../task/BpmProcessInstanceServiceImpl.java | 5 +++-- .../task/trigger/BpmHttpRequestTrigger.java | 18 ++++++++++++------ 4 files changed, 24 insertions(+), 14 deletions(-) diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/simple/BpmSimpleModelNodeVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/simple/BpmSimpleModelNodeVO.java index bbd1d2451b..41d14bbb95 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/simple/BpmSimpleModelNodeVO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/simple/BpmSimpleModelNodeVO.java @@ -158,6 +158,7 @@ public class BpmSimpleModelNodeVO { @Schema(description = "值", example = "xxx") @NotEmpty(message = "值不能为空") private String value; + } @Schema(description = "审批节点拒绝处理策略") @@ -362,12 +363,14 @@ public class BpmSimpleModelNodeVO { private List body; /** - * 请求返回处理设置。 用于修改流程表单值 - * key: 表示要修改的流程表单字段 Id. - * value: 接口返回的字段名 + * 请求返回处理设置,用于修改流程表单值 + * + * key:表示要修改的流程表单字段名(name) + * value:接口返回的字段名 */ @Schema(description = "请求返回处理设置", example = "[]") - private List> response; + private List> response; + } } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceService.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceService.java index 64265b3aa9..55b86a5514 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceService.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceService.java @@ -160,9 +160,9 @@ public interface BpmProcessInstanceService { /** * 更新 ProcessInstance 的变量 * - * @param processInstanceId 流程编号 + * @param id 流程编号 * @param variables 流程变量 */ - void updateProcessInstanceVariables(String processInstanceId, Map variables); + void updateProcessInstanceVariables(String id, Map variables); } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java index b2e76aefa3..37be5c26d7 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java @@ -758,7 +758,8 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService } @Override - public void updateProcessInstanceVariables(String processInstanceId, Map variables) { - runtimeService.setVariables(processInstanceId, variables); + public void updateProcessInstanceVariables(String id, Map variables) { + runtimeService.setVariables(id, variables); } + } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/trigger/BpmHttpRequestTrigger.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/trigger/BpmHttpRequestTrigger.java index 9f2ac60a27..654af1aab8 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/trigger/BpmHttpRequestTrigger.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/trigger/BpmHttpRequestTrigger.java @@ -76,7 +76,10 @@ public class BpmHttpRequestTrigger implements BpmTrigger { ResponseEntity responseEntity = restTemplate.exchange(setting.getUrl(), HttpMethod.POST, requestEntity, String.class); log.info("[execute][HTTP 触发器,请求头:{},请求体:{},响应结果:{}]", headers, body, responseEntity); + + // TODO @jason:建议把请求和失败,放在两个 try catch 里处理。 // 4. 处理请求返回 + // TODO @jason:返回结果,要不统一用 CommonResult,符合这个规范。这样,就可以验证 code 为 0 了。必须符合这个规范~~ if (CollUtil.isNotEmpty(setting.getResponse()) && responseEntity.getStatusCode().is2xxSuccessful() && StrUtil.isNotEmpty(responseEntity.getBody())) { // 4.1 获取需要更新的流程变量 @@ -86,15 +89,15 @@ public class BpmHttpRequestTrigger implements BpmTrigger { processInstanceService.updateProcessInstanceVariables(processInstanceId, updateVariables); } } - } catch (RestClientException e) { log.error("[execute][HTTP 触发器,请求头:{},请求体:{},请求出错:{}]", headers, body, e.getMessage()); } } - /** - * 从请求返回值获取需要更新的流程变量。优先从 data 字段获取,如果 data 字段不存在,从根节点获取。 + * 从请求返回值获取需要更新的流程变量 + * + * 优先从 data 字段获取,如果 data 字段不存在,从根节点获取 * * @param responseBody 请求返回报文体 * @param responseSettings 返回设置 @@ -103,18 +106,21 @@ public class BpmHttpRequestTrigger implements BpmTrigger { private Map getNeedUpdatedVariablesFromResponse(String responseBody, List> responseSettings) { Map updateVariables = new HashMap<>(); + // TODO @jason:这里 if return 更简洁一点; + // TODO @jason:JSONUtil => JsonUtils,尽量包一层 if (JSONUtil.isTypeJSONObject(responseBody)) { JSONObject dataObj = null; if (JSONUtil.parseObj(responseBody).getObj(PARSE_RESPONSE_FIELD) instanceof JSONObject) { dataObj = (JSONObject) JSONUtil.parseObj(responseBody).getObj(PARSE_RESPONSE_FIELD); } JSONObject updateObj = dataObj == null ? JSONUtil.parseObj(responseBody) : dataObj; - responseSettings.forEach(respSetting -> { - if (StrUtil.isNotEmpty(respSetting.getKey()) && updateObj.containsKey(respSetting.getValue())) { - updateVariables.put(respSetting.getKey(), updateObj.get(respSetting.getValue())); + responseSettings.forEach(responseSetting -> { + if (StrUtil.isNotEmpty(responseSetting.getKey()) && updateObj.containsKey(responseSetting.getValue())) { + updateVariables.put(responseSetting.getKey(), updateObj.get(responseSetting.getValue())); } }); } return updateVariables; } + }