From 4364ef09c533e8f5c336fc48bf5653a88ff18189 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sat, 15 Mar 2025 08:24:57 +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=E6=B5=81=E7=A8=8B=E5=89=8D=E5=90=8E?= =?UTF-8?q?=E7=BD=AE=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vo/model/BpmModelMetaInfoVO.java | 2 ++ .../BpmProcessDefinitionInfoDO.java | 7 ++--- .../core/util/BpmHttpRequestUtils.java | 31 ++++++++++--------- .../task/BpmProcessInstanceServiceImpl.java | 3 +- .../task/listener/BpmUserTaskListener.java | 24 +++++--------- .../trigger/http/BpmHttpCallbackTrigger.java | 8 ++--- .../http/BpmSyncHttpRequestTrigger.java | 1 + 7 files changed, 36 insertions(+), 40 deletions(-) diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelMetaInfoVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelMetaInfoVO.java index 9fc52fdc0c..254a5178f0 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelMetaInfoVO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelMetaInfoVO.java @@ -82,9 +82,11 @@ public class BpmModelMetaInfoVO { @Schema(description = "摘要设置", example = "{}") private SummarySetting summarySetting; + // TODO @lesan:processBeforeTriggerSetting;要不叫这个?主要考虑,notify 留给后续的站内信、短信、邮件这种 notify 通知哈。 @Schema(description = "流程前置通知设置", example = "{}") private HttpRequestSetting PreProcessNotifySetting; + // TODO @lesan:processAfterTriggerSetting @Schema(description = "流程后置通知设置", example = "{}") private HttpRequestSetting PostProcessNotifySetting; diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmProcessDefinitionInfoDO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmProcessDefinitionInfoDO.java index cc4c697e6f..549889e3aa 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmProcessDefinitionInfoDO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmProcessDefinitionInfoDO.java @@ -182,23 +182,22 @@ public class BpmProcessDefinitionInfoDO extends BaseDO { */ @TableField(typeHandler = JacksonTypeHandler.class) private BpmModelMetaInfoVO.TitleSetting titleSetting; - /** * 摘要设置 */ @TableField(typeHandler = JacksonTypeHandler.class) private BpmModelMetaInfoVO.SummarySetting summarySetting; + // TODO @lesan:processBeforeTriggerSetting;要不叫这个?主要考虑,notify 留给后续的站内信、短信、邮件这种 notify 通知哈。 /** * 流程前置通知设置 */ - @TableField(typeHandler = JacksonTypeHandler.class) + @TableField(typeHandler = JacksonTypeHandler.class, exist = false) // TODO @芋艿:临时注释 exist,因为要合并 master-jdk17 private BpmModelMetaInfoVO.HttpRequestSetting PreProcessNotifySetting; - /** * 流程后置通知设置 */ - @TableField(typeHandler = JacksonTypeHandler.class) + @TableField(typeHandler = JacksonTypeHandler.class, exist = false) // TODO @芋艿:临时注释 exist,因为要合并 master-jdk17 private BpmModelMetaInfoVO.HttpRequestSetting PostProcessNotifySetting; } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/BpmHttpRequestUtils.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/BpmHttpRequestUtils.java index 74a8da09f5..7f4428aac3 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/BpmHttpRequestUtils.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/BpmHttpRequestUtils.java @@ -37,51 +37,52 @@ public class BpmHttpRequestUtils { public static void executeBpmHttpRequest(ProcessInstance processInstance, String url, - List headerParam, - List bodyParam, + List headerParams, + List bodyParams, Boolean handleResponse, List> response, + // TODO @lesan:RestTemplate 直接通过 springUtil 获取好咧; RestTemplate restTemplate, + // TODO @lesan:processInstanceService 直接通过 springUtil 获取好咧; BpmProcessInstanceService processInstanceService) { // 1.1 设置请求头 - MultiValueMap headers = BpmHttpRequestUtils.buildHttpHeaders(processInstance, headerParam); + MultiValueMap headers = buildHttpHeaders(processInstance, headerParams); // 1.2 设置请求体 - MultiValueMap body = BpmHttpRequestUtils.buildHttpBody(processInstance, bodyParam); + MultiValueMap body = buildHttpBody(processInstance, bodyParams); // 2. 发起请求 - ResponseEntity responseEntity = BpmHttpRequestUtils.sendHttpRequest(url, headers, body, restTemplate); + ResponseEntity responseEntity = sendHttpRequest(url, headers, body, restTemplate); // 3. 处理返回 + // TODO @lesan:可以用 if return,让括号小点 if (Boolean.TRUE.equals(handleResponse)) { // 3.1 判断是否需要解析返回值 - if (responseEntity == null || StrUtil.isEmpty(responseEntity.getBody()) + if (responseEntity == null + || StrUtil.isEmpty(responseEntity.getBody()) || !responseEntity.getStatusCode().is2xxSuccessful() || CollUtil.isEmpty(response)) { return; } // 3.2 解析返回值, 返回值必须符合 CommonResult 规范。 - CommonResult> respResult = JsonUtils.parseObjectQuietly( - responseEntity.getBody(), new TypeReference<>() { - }); + CommonResult> respResult = JsonUtils.parseObjectQuietly(responseEntity.getBody(), + new TypeReference<>() {}); if (respResult == null || !respResult.isSuccess()) { return; } // 3.3 获取需要更新的流程变量 - Map updateVariables = BpmHttpRequestUtils.getNeedUpdatedVariablesFromResponse(respResult.getData(), response); + Map updateVariables = getNeedUpdatedVariablesFromResponse(respResult.getData(), response); // 3.4 更新流程变量 if (CollUtil.isNotEmpty(updateVariables)) { processInstanceService.updateProcessInstanceVariables(processInstance.getId(), updateVariables); } } - } public static ResponseEntity sendHttpRequest(String url, MultiValueMap headers, MultiValueMap body, RestTemplate restTemplate) { - // 3. 发起请求 HttpEntity> requestEntity = new HttpEntity<>(body, headers); ResponseEntity responseEntity; try { @@ -95,7 +96,7 @@ public class BpmHttpRequestUtils { } public static MultiValueMap buildHttpHeaders(ProcessInstance processInstance, - List headerSettings) { + List headerSettings) { Map processVariables = processInstance.getProcessVariables(); MultiValueMap headers = new LinkedMultiValueMap<>(); headers.add(HEADER_TENANT_ID, processInstance.getTenantId()); @@ -104,7 +105,7 @@ public class BpmHttpRequestUtils { } public static MultiValueMap buildHttpBody(ProcessInstance processInstance, - List bodySettings) { + List bodySettings) { Map processVariables = processInstance.getProcessVariables(); MultiValueMap body = new LinkedMultiValueMap<>(); addHttpRequestParam(body, bodySettings, processVariables); @@ -120,7 +121,7 @@ public class BpmHttpRequestUtils { * @return 需要更新的流程变量 */ public static Map getNeedUpdatedVariablesFromResponse(Map result, - List> responseSettings) { + List> responseSettings) { Map updateVariables = new HashMap<>(); if (CollUtil.isEmpty(result)) { return updateVariables; 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 4ca5a189ff..64abcef42e 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 @@ -935,10 +935,10 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService // 流程前置通知 BpmProcessDefinitionInfoDO processDefinitionInfo = processDefinitionService. getProcessDefinitionInfo(instance.getProcessDefinitionId()); + // TODO @lesan:if return 哈。减少括号。 if (ObjUtil.isNotNull(processDefinitionInfo) && ObjUtil.isNotNull(processDefinitionInfo.getPreProcessNotifySetting())) { BpmModelMetaInfoVO.HttpRequestSetting setting = processDefinitionInfo.getPreProcessNotifySetting(); - BpmHttpRequestUtils.executeBpmHttpRequest(instance, setting.getUrl(), setting.getHeader(), @@ -949,4 +949,5 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService } }); } + } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/listener/BpmUserTaskListener.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/listener/BpmUserTaskListener.java index d02844353d..6048423c91 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/listener/BpmUserTaskListener.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/listener/BpmUserTaskListener.java @@ -46,22 +46,14 @@ public class BpmUserTaskListener implements TaskListener { // 2. 发起请求 // TODO @芋艿:哪些默认参数,后续再调研下;感觉可以搞个 task 字段,把整个 delegateTask 放进去; - listenerHandler.getBody() - .add(new BpmSimpleModelNodeVO.HttpRequestParam().setKey("processInstanceId") - .setType(BpmHttpRequestParamTypeEnum.FIXED_VALUE.getType()) - .setValue(delegateTask.getProcessInstanceId())); - listenerHandler.getBody() - .add(new BpmSimpleModelNodeVO.HttpRequestParam().setKey("assignee") - .setType(BpmHttpRequestParamTypeEnum.FIXED_VALUE.getType()) - .setValue(delegateTask.getAssignee())); - listenerHandler.getBody() - .add(new BpmSimpleModelNodeVO.HttpRequestParam().setKey("taskDefinitionKey") - .setType(BpmHttpRequestParamTypeEnum.FIXED_VALUE.getType()) - .setValue(delegateTask.getTaskDefinitionKey())); - listenerHandler.getBody() - .add(new BpmSimpleModelNodeVO.HttpRequestParam().setKey("taskId") - .setType(BpmHttpRequestParamTypeEnum.FIXED_VALUE.getType()) - .setValue(delegateTask.getId())); + listenerHandler.getBody().add(new BpmSimpleModelNodeVO.HttpRequestParam().setKey("processInstanceId") + .setType(BpmHttpRequestParamTypeEnum.FIXED_VALUE.getType()).setValue(delegateTask.getProcessInstanceId())); + listenerHandler.getBody().add(new BpmSimpleModelNodeVO.HttpRequestParam().setKey("assignee") + .setType(BpmHttpRequestParamTypeEnum.FIXED_VALUE.getType()).setValue(delegateTask.getAssignee())); + listenerHandler.getBody().add(new BpmSimpleModelNodeVO.HttpRequestParam().setKey("taskDefinitionKey") + .setType(BpmHttpRequestParamTypeEnum.FIXED_VALUE.getType()).setValue(delegateTask.getTaskDefinitionKey())); + listenerHandler.getBody().add(new BpmSimpleModelNodeVO.HttpRequestParam().setKey("taskId") + .setType(BpmHttpRequestParamTypeEnum.FIXED_VALUE.getType()).setValue(delegateTask.getId())); BpmHttpRequestUtils.executeBpmHttpRequest(processInstance, listenerHandler.getPath(), listenerHandler.getHeader(), diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/trigger/http/BpmHttpCallbackTrigger.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/trigger/http/BpmHttpCallbackTrigger.java index fa50cf3917..ab1f54abd4 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/trigger/http/BpmHttpCallbackTrigger.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/trigger/http/BpmHttpCallbackTrigger.java @@ -41,13 +41,12 @@ public class BpmHttpCallbackTrigger extends BpmAbstractHttpRequestTrigger { log.error("[execute][流程({}) HTTP 回调触发器配置为空]", processInstanceId); return; } + // 2. 发起请求 ProcessInstance processInstance = processInstanceService.getProcessInstance(processInstanceId); - // 重要:回调请求 taskDefineKey 需要传给被调用方,用于回调执行 setting.getBody().add(new BpmSimpleModelNodeVO.HttpRequestParam() - .setKey("taskDefineKey") - .setType(BpmHttpRequestParamTypeEnum.FIXED_VALUE.getType()) - .setValue(setting.getCallbackTaskDefineKey())); + .setKey("taskDefineKey") // 重要:回调请求 taskDefineKey 需要传给被调用方,用于回调执行 + .setType(BpmHttpRequestParamTypeEnum.FIXED_VALUE.getType()).setValue(setting.getCallbackTaskDefineKey())); BpmHttpRequestUtils.executeBpmHttpRequest(processInstance, setting.getUrl(), setting.getHeader(), @@ -56,4 +55,5 @@ public class BpmHttpCallbackTrigger extends BpmAbstractHttpRequestTrigger { restTemplate, processInstanceService); } + } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/trigger/http/BpmSyncHttpRequestTrigger.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/trigger/http/BpmSyncHttpRequestTrigger.java index cc377fa1f6..6c74b066f0 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/trigger/http/BpmSyncHttpRequestTrigger.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/trigger/http/BpmSyncHttpRequestTrigger.java @@ -39,6 +39,7 @@ public class BpmSyncHttpRequestTrigger extends BpmAbstractHttpRequestTrigger { log.error("[execute][流程({}) HTTP 触发器请求配置为空]", processInstanceId); return; } + // 2. 发起请求 ProcessInstance processInstance = processInstanceService.getProcessInstance(processInstanceId); BpmHttpRequestUtils.executeBpmHttpRequest(processInstance,