parent
b88c09f48d
commit
3f8221ba84
@ -0,0 +1,66 @@ |
||||
package cn.iocoder.yudao.module.bpm.service.task.trigger; |
||||
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO; |
||||
import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.SimpleModelUtils; |
||||
import jakarta.annotation.Resource; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.flowable.engine.runtime.ProcessInstance; |
||||
import org.springframework.http.HttpEntity; |
||||
import org.springframework.http.HttpMethod; |
||||
import org.springframework.http.ResponseEntity; |
||||
import org.springframework.util.LinkedMultiValueMap; |
||||
import org.springframework.util.MultiValueMap; |
||||
import org.springframework.web.client.RestClientException; |
||||
import org.springframework.web.client.RestTemplate; |
||||
|
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.HEADER_TENANT_ID; |
||||
|
||||
/** |
||||
* BPM 发送 HTTP 请求触发器抽象类 |
||||
* |
||||
* @author jason |
||||
*/ |
||||
@Slf4j |
||||
public abstract class BpmAbstractHttpRequestTrigger implements BpmTrigger { |
||||
|
||||
@Resource |
||||
private RestTemplate restTemplate; |
||||
|
||||
protected ResponseEntity<String> sendHttpRequest(String url, |
||||
MultiValueMap<String, String> headers, |
||||
MultiValueMap<String, String> body) { |
||||
// TODO @芋艿:要不要抽象一个 Http 请求的工具类,方便复用呢?
|
||||
// 3. 发起请求
|
||||
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(body, headers); |
||||
ResponseEntity<String> responseEntity = null; |
||||
try { |
||||
responseEntity = restTemplate.exchange(url, HttpMethod.POST, |
||||
requestEntity, String.class); |
||||
log.info("[sendHttpRequest][HTTP 触发器,请求头:{},请求体:{},响应结果:{}]", headers, body, responseEntity); |
||||
} catch (RestClientException e) { |
||||
log.error("[sendHttpRequest][HTTP 触发器,请求头:{},请求体:{},请求出错:{}]", headers, body, e.getMessage()); |
||||
} |
||||
return responseEntity; |
||||
} |
||||
|
||||
protected MultiValueMap<String, String> buildHttpHeaders(ProcessInstance processInstance, |
||||
List<BpmSimpleModelNodeVO.HttpRequestParam> headerSettings) { |
||||
Map<String, Object> processVariables = processInstance.getProcessVariables(); |
||||
MultiValueMap<String, String> headers = new LinkedMultiValueMap<>(); |
||||
headers.add(HEADER_TENANT_ID, processInstance.getTenantId()); |
||||
SimpleModelUtils.addHttpRequestParam(headers, headerSettings, processVariables); |
||||
return headers; |
||||
} |
||||
|
||||
protected MultiValueMap<String, String> buildHttpBody(ProcessInstance processInstance, |
||||
List<BpmSimpleModelNodeVO.HttpRequestParam> bodySettings) { |
||||
Map<String, Object> processVariables = processInstance.getProcessVariables(); |
||||
MultiValueMap<String, String> body = new LinkedMultiValueMap<>(); |
||||
SimpleModelUtils.addHttpRequestParam(body, bodySettings, processVariables); |
||||
body.add("processInstanceId", processInstance.getId()); |
||||
return body; |
||||
} |
||||
} |
@ -0,0 +1,50 @@ |
||||
package cn.iocoder.yudao.module.bpm.service.task.trigger; |
||||
|
||||
import cn.iocoder.yudao.framework.common.util.json.JsonUtils; |
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO; |
||||
import cn.iocoder.yudao.module.bpm.enums.definition.BpmTriggerTypeEnum; |
||||
import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; |
||||
import jakarta.annotation.Resource; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.flowable.engine.runtime.ProcessInstance; |
||||
import org.springframework.stereotype.Component; |
||||
import org.springframework.util.MultiValueMap; |
||||
|
||||
/** |
||||
* BPM 发送异步 HTTP 请求触发器 |
||||
* |
||||
* @author jason |
||||
*/ |
||||
@Component |
||||
@Slf4j |
||||
public class BpmAsyncHttpRequestTrigger extends BpmAbstractHttpRequestTrigger { |
||||
|
||||
@Resource |
||||
private BpmProcessInstanceService processInstanceService; |
||||
|
||||
@Override |
||||
public BpmTriggerTypeEnum getType() { |
||||
return BpmTriggerTypeEnum.ASYNC_HTTP_REQUEST; |
||||
} |
||||
|
||||
@Override |
||||
public void execute(String processInstanceId, String param) { |
||||
// 1. 解析 http 请求配置
|
||||
BpmSimpleModelNodeVO.TriggerSetting.HttpRequestTriggerSetting setting = JsonUtils.parseObject(param, |
||||
BpmSimpleModelNodeVO.TriggerSetting.HttpRequestTriggerSetting.class); |
||||
if (setting == null) { |
||||
log.error("[execute][流程({}) HTTP 异步触发器请求配置为空]", processInstanceId); |
||||
return; |
||||
} |
||||
|
||||
// 2.1 设置请求头
|
||||
ProcessInstance processInstance = processInstanceService.getProcessInstance(processInstanceId); |
||||
MultiValueMap<String, String> headers = buildHttpHeaders(processInstance, setting.getHeader()); |
||||
// 2.2 设置请求体
|
||||
MultiValueMap<String, String> body = buildHttpBody(processInstance, setting.getBody()); |
||||
body.add("callbackId", setting.getCallbackId()); // 异步请求 callbackId 需要传给被调用方. 用于回调执行
|
||||
|
||||
// 3. 发起请求
|
||||
sendHttpRequest(setting.getUrl(), headers, body); |
||||
} |
||||
} |
Loading…
Reference in new issue