【代码评审】BPM:流程前后置通知

This commit is contained in:
YunaiV 2025-03-15 08:24:57 +08:00
parent 6f2e538927
commit 4364ef09c5
7 changed files with 36 additions and 40 deletions

View File

@ -82,9 +82,11 @@ public class BpmModelMetaInfoVO {
@Schema(description = "摘要设置", example = "{}") @Schema(description = "摘要设置", example = "{}")
private SummarySetting summarySetting; private SummarySetting summarySetting;
// TODO @lesanprocessBeforeTriggerSetting要不叫这个主要考虑notify 留给后续的站内信短信邮件这种 notify 通知哈
@Schema(description = "流程前置通知设置", example = "{}") @Schema(description = "流程前置通知设置", example = "{}")
private HttpRequestSetting PreProcessNotifySetting; private HttpRequestSetting PreProcessNotifySetting;
// TODO @lesanprocessAfterTriggerSetting
@Schema(description = "流程后置通知设置", example = "{}") @Schema(description = "流程后置通知设置", example = "{}")
private HttpRequestSetting PostProcessNotifySetting; private HttpRequestSetting PostProcessNotifySetting;

View File

@ -182,23 +182,22 @@ public class BpmProcessDefinitionInfoDO extends BaseDO {
*/ */
@TableField(typeHandler = JacksonTypeHandler.class) @TableField(typeHandler = JacksonTypeHandler.class)
private BpmModelMetaInfoVO.TitleSetting titleSetting; private BpmModelMetaInfoVO.TitleSetting titleSetting;
/** /**
* 摘要设置 * 摘要设置
*/ */
@TableField(typeHandler = JacksonTypeHandler.class) @TableField(typeHandler = JacksonTypeHandler.class)
private BpmModelMetaInfoVO.SummarySetting summarySetting; private BpmModelMetaInfoVO.SummarySetting summarySetting;
// TODO @lesanprocessBeforeTriggerSetting要不叫这个主要考虑notify 留给后续的站内信短信邮件这种 notify 通知哈
/** /**
* 流程前置通知设置 * 流程前置通知设置
*/ */
@TableField(typeHandler = JacksonTypeHandler.class) @TableField(typeHandler = JacksonTypeHandler.class, exist = false) // TODO @芋艿临时注释 exist因为要合并 master-jdk17
private BpmModelMetaInfoVO.HttpRequestSetting PreProcessNotifySetting; private BpmModelMetaInfoVO.HttpRequestSetting PreProcessNotifySetting;
/** /**
* 流程后置通知设置 * 流程后置通知设置
*/ */
@TableField(typeHandler = JacksonTypeHandler.class) @TableField(typeHandler = JacksonTypeHandler.class, exist = false) // TODO @芋艿临时注释 exist因为要合并 master-jdk17
private BpmModelMetaInfoVO.HttpRequestSetting PostProcessNotifySetting; private BpmModelMetaInfoVO.HttpRequestSetting PostProcessNotifySetting;
} }

View File

@ -37,51 +37,52 @@ public class BpmHttpRequestUtils {
public static void executeBpmHttpRequest(ProcessInstance processInstance, public static void executeBpmHttpRequest(ProcessInstance processInstance,
String url, String url,
List<BpmSimpleModelNodeVO.HttpRequestParam> headerParam, List<BpmSimpleModelNodeVO.HttpRequestParam> headerParams,
List<BpmSimpleModelNodeVO.HttpRequestParam> bodyParam, List<BpmSimpleModelNodeVO.HttpRequestParam> bodyParams,
Boolean handleResponse, Boolean handleResponse,
List<KeyValue<String, String>> response, List<KeyValue<String, String>> response,
// TODO @lesanRestTemplate 直接通过 springUtil 获取好咧
RestTemplate restTemplate, RestTemplate restTemplate,
// TODO @lesanprocessInstanceService 直接通过 springUtil 获取好咧
BpmProcessInstanceService processInstanceService) { BpmProcessInstanceService processInstanceService) {
// 1.1 设置请求头 // 1.1 设置请求头
MultiValueMap<String, String> headers = BpmHttpRequestUtils.buildHttpHeaders(processInstance, headerParam); MultiValueMap<String, String> headers = buildHttpHeaders(processInstance, headerParams);
// 1.2 设置请求体 // 1.2 设置请求体
MultiValueMap<String, String> body = BpmHttpRequestUtils.buildHttpBody(processInstance, bodyParam); MultiValueMap<String, String> body = buildHttpBody(processInstance, bodyParams);
// 2. 发起请求 // 2. 发起请求
ResponseEntity<String> responseEntity = BpmHttpRequestUtils.sendHttpRequest(url, headers, body, restTemplate); ResponseEntity<String> responseEntity = sendHttpRequest(url, headers, body, restTemplate);
// 3. 处理返回 // 3. 处理返回
// TODO @lesan可以用 if return让括号小点
if (Boolean.TRUE.equals(handleResponse)) { if (Boolean.TRUE.equals(handleResponse)) {
// 3.1 判断是否需要解析返回值 // 3.1 判断是否需要解析返回值
if (responseEntity == null || StrUtil.isEmpty(responseEntity.getBody()) if (responseEntity == null
|| StrUtil.isEmpty(responseEntity.getBody())
|| !responseEntity.getStatusCode().is2xxSuccessful() || !responseEntity.getStatusCode().is2xxSuccessful()
|| CollUtil.isEmpty(response)) { || CollUtil.isEmpty(response)) {
return; return;
} }
// 3.2 解析返回值, 返回值必须符合 CommonResult 规范 // 3.2 解析返回值, 返回值必须符合 CommonResult 规范
CommonResult<Map<String, Object>> respResult = JsonUtils.parseObjectQuietly( CommonResult<Map<String, Object>> respResult = JsonUtils.parseObjectQuietly(responseEntity.getBody(),
responseEntity.getBody(), new TypeReference<>() { new TypeReference<>() {});
});
if (respResult == null || !respResult.isSuccess()) { if (respResult == null || !respResult.isSuccess()) {
return; return;
} }
// 3.3 获取需要更新的流程变量 // 3.3 获取需要更新的流程变量
Map<String, Object> updateVariables = BpmHttpRequestUtils.getNeedUpdatedVariablesFromResponse(respResult.getData(), response); Map<String, Object> updateVariables = getNeedUpdatedVariablesFromResponse(respResult.getData(), response);
// 3.4 更新流程变量 // 3.4 更新流程变量
if (CollUtil.isNotEmpty(updateVariables)) { if (CollUtil.isNotEmpty(updateVariables)) {
processInstanceService.updateProcessInstanceVariables(processInstance.getId(), updateVariables); processInstanceService.updateProcessInstanceVariables(processInstance.getId(), updateVariables);
} }
} }
} }
public static ResponseEntity<String> sendHttpRequest(String url, public static ResponseEntity<String> sendHttpRequest(String url,
MultiValueMap<String, String> headers, MultiValueMap<String, String> headers,
MultiValueMap<String, String> body, MultiValueMap<String, String> body,
RestTemplate restTemplate) { RestTemplate restTemplate) {
// 3. 发起请求
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(body, headers); HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(body, headers);
ResponseEntity<String> responseEntity; ResponseEntity<String> responseEntity;
try { try {

View File

@ -935,10 +935,10 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
// 流程前置通知 // 流程前置通知
BpmProcessDefinitionInfoDO processDefinitionInfo = processDefinitionService. BpmProcessDefinitionInfoDO processDefinitionInfo = processDefinitionService.
getProcessDefinitionInfo(instance.getProcessDefinitionId()); getProcessDefinitionInfo(instance.getProcessDefinitionId());
// TODO @lesanif return 减少括号
if (ObjUtil.isNotNull(processDefinitionInfo) && if (ObjUtil.isNotNull(processDefinitionInfo) &&
ObjUtil.isNotNull(processDefinitionInfo.getPreProcessNotifySetting())) { ObjUtil.isNotNull(processDefinitionInfo.getPreProcessNotifySetting())) {
BpmModelMetaInfoVO.HttpRequestSetting setting = processDefinitionInfo.getPreProcessNotifySetting(); BpmModelMetaInfoVO.HttpRequestSetting setting = processDefinitionInfo.getPreProcessNotifySetting();
BpmHttpRequestUtils.executeBpmHttpRequest(instance, BpmHttpRequestUtils.executeBpmHttpRequest(instance,
setting.getUrl(), setting.getUrl(),
setting.getHeader(), setting.getHeader(),
@ -949,4 +949,5 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
} }
}); });
} }
} }

View File

@ -46,22 +46,14 @@ public class BpmUserTaskListener implements TaskListener {
// 2. 发起请求 // 2. 发起请求
// TODO @芋艿哪些默认参数后续再调研下感觉可以搞个 task 字段把整个 delegateTask 放进去 // TODO @芋艿哪些默认参数后续再调研下感觉可以搞个 task 字段把整个 delegateTask 放进去
listenerHandler.getBody() listenerHandler.getBody().add(new BpmSimpleModelNodeVO.HttpRequestParam().setKey("processInstanceId")
.add(new BpmSimpleModelNodeVO.HttpRequestParam().setKey("processInstanceId") .setType(BpmHttpRequestParamTypeEnum.FIXED_VALUE.getType()).setValue(delegateTask.getProcessInstanceId()));
.setType(BpmHttpRequestParamTypeEnum.FIXED_VALUE.getType()) listenerHandler.getBody().add(new BpmSimpleModelNodeVO.HttpRequestParam().setKey("assignee")
.setValue(delegateTask.getProcessInstanceId())); .setType(BpmHttpRequestParamTypeEnum.FIXED_VALUE.getType()).setValue(delegateTask.getAssignee()));
listenerHandler.getBody() listenerHandler.getBody().add(new BpmSimpleModelNodeVO.HttpRequestParam().setKey("taskDefinitionKey")
.add(new BpmSimpleModelNodeVO.HttpRequestParam().setKey("assignee") .setType(BpmHttpRequestParamTypeEnum.FIXED_VALUE.getType()).setValue(delegateTask.getTaskDefinitionKey()));
.setType(BpmHttpRequestParamTypeEnum.FIXED_VALUE.getType()) listenerHandler.getBody().add(new BpmSimpleModelNodeVO.HttpRequestParam().setKey("taskId")
.setValue(delegateTask.getAssignee())); .setType(BpmHttpRequestParamTypeEnum.FIXED_VALUE.getType()).setValue(delegateTask.getId()));
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, BpmHttpRequestUtils.executeBpmHttpRequest(processInstance,
listenerHandler.getPath(), listenerHandler.getPath(),
listenerHandler.getHeader(), listenerHandler.getHeader(),

View File

@ -41,13 +41,12 @@ public class BpmHttpCallbackTrigger extends BpmAbstractHttpRequestTrigger {
log.error("[execute][流程({}) HTTP 回调触发器配置为空]", processInstanceId); log.error("[execute][流程({}) HTTP 回调触发器配置为空]", processInstanceId);
return; return;
} }
// 2. 发起请求 // 2. 发起请求
ProcessInstance processInstance = processInstanceService.getProcessInstance(processInstanceId); ProcessInstance processInstance = processInstanceService.getProcessInstance(processInstanceId);
// 重要回调请求 taskDefineKey 需要传给被调用方用于回调执行
setting.getBody().add(new BpmSimpleModelNodeVO.HttpRequestParam() setting.getBody().add(new BpmSimpleModelNodeVO.HttpRequestParam()
.setKey("taskDefineKey") .setKey("taskDefineKey") // 重要回调请求 taskDefineKey 需要传给被调用方用于回调执行
.setType(BpmHttpRequestParamTypeEnum.FIXED_VALUE.getType()) .setType(BpmHttpRequestParamTypeEnum.FIXED_VALUE.getType()).setValue(setting.getCallbackTaskDefineKey()));
.setValue(setting.getCallbackTaskDefineKey()));
BpmHttpRequestUtils.executeBpmHttpRequest(processInstance, BpmHttpRequestUtils.executeBpmHttpRequest(processInstance,
setting.getUrl(), setting.getUrl(),
setting.getHeader(), setting.getHeader(),
@ -56,4 +55,5 @@ public class BpmHttpCallbackTrigger extends BpmAbstractHttpRequestTrigger {
restTemplate, restTemplate,
processInstanceService); processInstanceService);
} }
} }

View File

@ -39,6 +39,7 @@ public class BpmSyncHttpRequestTrigger extends BpmAbstractHttpRequestTrigger {
log.error("[execute][流程({}) HTTP 触发器请求配置为空]", processInstanceId); log.error("[execute][流程({}) HTTP 触发器请求配置为空]", processInstanceId);
return; return;
} }
// 2. 发起请求 // 2. 发起请求
ProcessInstance processInstance = processInstanceService.getProcessInstance(processInstanceId); ProcessInstance processInstance = processInstanceService.getProcessInstance(processInstanceId);
BpmHttpRequestUtils.executeBpmHttpRequest(processInstance, BpmHttpRequestUtils.executeBpmHttpRequest(processInstance,