Commit f71ec384568d6291fef8216d0a6897c4395a9f70

Authored by YunaiV
1 parent ff70aaa6

【同步】BOOT 和 CLOUD 的功能

yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java
@@ -40,7 +40,7 @@ public interface ErrorCodeConstants { @@ -40,7 +40,7 @@ public interface ErrorCodeConstants {
40 ErrorCode PROCESS_INSTANCE_START_USER_SELECT_ASSIGNEES_NOT_EXISTS = new ErrorCode(1_009_004_004, "任务({})的候选人({})不存在"); 40 ErrorCode PROCESS_INSTANCE_START_USER_SELECT_ASSIGNEES_NOT_EXISTS = new ErrorCode(1_009_004_004, "任务({})的候选人({})不存在");
41 ErrorCode PROCESS_INSTANCE_START_USER_CAN_START = new ErrorCode(1_009_004_005, "发起流程失败,你没有权限发起该流程"); 41 ErrorCode PROCESS_INSTANCE_START_USER_CAN_START = new ErrorCode(1_009_004_005, "发起流程失败,你没有权限发起该流程");
42 ErrorCode PROCESS_INSTANCE_CANCEL_FAIL_NOT_ALLOW = new ErrorCode(1_009_004_005, "流程取消失败,该流程不允许取消"); 42 ErrorCode PROCESS_INSTANCE_CANCEL_FAIL_NOT_ALLOW = new ErrorCode(1_009_004_005, "流程取消失败,该流程不允许取消");
43 - ErrorCode PROCESS_INSTANCE_HTTP_TRIGGER_CALL_ERROR = new ErrorCode(1_009_004_006, "流程 Http 触发器请求调用失败"); 43 + ErrorCode PROCESS_INSTANCE_HTTP_CALL_ERROR = new ErrorCode(1_009_004_006, "流程 Http 请求调用失败");
44 ErrorCode PROCESS_INSTANCE_APPROVE_USER_SELECT_ASSIGNEES_NOT_CONFIG = new ErrorCode(1_009_004_007, "下一个任务({})的审批人未配置"); 44 ErrorCode PROCESS_INSTANCE_APPROVE_USER_SELECT_ASSIGNEES_NOT_CONFIG = new ErrorCode(1_009_004_007, "下一个任务({})的审批人未配置");
45 ErrorCode PROCESS_INSTANCE_CANCEL_CHILD_FAIL_NOT_ALLOW = new ErrorCode(1_009_004_008, "子流程取消失败,子流程不允许取消"); 45 ErrorCode PROCESS_INSTANCE_CANCEL_CHILD_FAIL_NOT_ALLOW = new ErrorCode(1_009_004_008, "子流程取消失败,子流程不允许取消");
46 46
@@ -58,7 +58,6 @@ public interface ErrorCodeConstants { @@ -58,7 +58,6 @@ public interface ErrorCodeConstants {
58 ErrorCode TASK_SIGN_DELETE_NO_PARENT = new ErrorCode(1_009_005_012, "任务减签失败,被减签的任务必须是通过加签生成的任务"); 58 ErrorCode TASK_SIGN_DELETE_NO_PARENT = new ErrorCode(1_009_005_012, "任务减签失败,被减签的任务必须是通过加签生成的任务");
59 ErrorCode TASK_TRANSFER_FAIL_USER_REPEAT = new ErrorCode(1_009_005_013, "任务转办失败,转办人和当前审批人为同一人"); 59 ErrorCode TASK_TRANSFER_FAIL_USER_REPEAT = new ErrorCode(1_009_005_013, "任务转办失败,转办人和当前审批人为同一人");
60 ErrorCode TASK_TRANSFER_FAIL_USER_NOT_EXISTS = new ErrorCode(1_009_005_014, "任务转办失败,转办人不存在"); 60 ErrorCode TASK_TRANSFER_FAIL_USER_NOT_EXISTS = new ErrorCode(1_009_005_014, "任务转办失败,转办人不存在");
61 - ErrorCode TASK_CREATE_FAIL_NO_CANDIDATE_USER = new ErrorCode(1_009_006_003, "操作失败,原因:找不到任务的审批人!");  
62 ErrorCode TASK_SIGNATURE_NOT_EXISTS = new ErrorCode(1_009_005_015, "签名不能为空!"); 61 ErrorCode TASK_SIGNATURE_NOT_EXISTS = new ErrorCode(1_009_005_015, "签名不能为空!");
63 ErrorCode TASK_REASON_REQUIRE = new ErrorCode(1_009_005_016, "审批意见不能为空!"); 62 ErrorCode TASK_REASON_REQUIRE = new ErrorCode(1_009_005_016, "审批意见不能为空!");
64 63
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/BpmHttpRequestUtils.java
@@ -6,15 +6,15 @@ import cn.iocoder.yudao.framework.common.core.KeyValue; @@ -6,15 +6,15 @@ import cn.iocoder.yudao.framework.common.core.KeyValue;
6 import cn.iocoder.yudao.framework.common.pojo.CommonResult; 6 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
7 import cn.iocoder.yudao.framework.common.util.json.JsonUtils; 7 import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
8 import cn.iocoder.yudao.framework.common.util.spring.SpringUtils; 8 import cn.iocoder.yudao.framework.common.util.spring.SpringUtils;
  9 +import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
  10 +import cn.iocoder.yudao.module.bpm.api.event.BpmProcessInstanceStatusEvent;
9 import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO; 11 import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO;
10 import cn.iocoder.yudao.module.bpm.enums.definition.BpmHttpRequestParamTypeEnum; 12 import cn.iocoder.yudao.module.bpm.enums.definition.BpmHttpRequestParamTypeEnum;
11 import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; 13 import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
12 import com.fasterxml.jackson.core.type.TypeReference; 14 import com.fasterxml.jackson.core.type.TypeReference;
13 import lombok.extern.slf4j.Slf4j; 15 import lombok.extern.slf4j.Slf4j;
14 import org.flowable.engine.runtime.ProcessInstance; 16 import org.flowable.engine.runtime.ProcessInstance;
15 -import org.springframework.http.HttpEntity;  
16 -import org.springframework.http.HttpMethod;  
17 -import org.springframework.http.ResponseEntity; 17 +import org.springframework.http.*;
18 import org.springframework.util.LinkedMultiValueMap; 18 import org.springframework.util.LinkedMultiValueMap;
19 import org.springframework.util.MultiValueMap; 19 import org.springframework.util.MultiValueMap;
20 import org.springframework.web.client.RestClientException; 20 import org.springframework.web.client.RestClientException;
@@ -26,7 +26,7 @@ import java.util.Map; @@ -26,7 +26,7 @@ import java.util.Map;
26 26
27 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 27 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
28 import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.HEADER_TENANT_ID; 28 import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.HEADER_TENANT_ID;
29 -import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.PROCESS_INSTANCE_HTTP_TRIGGER_CALL_ERROR; 29 +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.PROCESS_INSTANCE_HTTP_CALL_ERROR;
30 30
31 /** 31 /**
32 * 工作流发起 HTTP 请求工具类 32 * 工作流发起 HTTP 请求工具类
@@ -42,7 +42,6 @@ public class BpmHttpRequestUtils { @@ -42,7 +42,6 @@ public class BpmHttpRequestUtils {
42 List<BpmSimpleModelNodeVO.HttpRequestParam> bodyParams, 42 List<BpmSimpleModelNodeVO.HttpRequestParam> bodyParams,
43 Boolean handleResponse, 43 Boolean handleResponse,
44 List<KeyValue<String, String>> response) { 44 List<KeyValue<String, String>> response) {
45 - RestTemplate restTemplate = SpringUtils.getBean(RestTemplate.class);  
46 BpmProcessInstanceService processInstanceService = SpringUtils.getBean(BpmProcessInstanceService.class); 45 BpmProcessInstanceService processInstanceService = SpringUtils.getBean(BpmProcessInstanceService.class);
47 46
48 // 1.1 设置请求头 47 // 1.1 设置请求头
@@ -51,6 +50,7 @@ public class BpmHttpRequestUtils { @@ -51,6 +50,7 @@ public class BpmHttpRequestUtils {
51 MultiValueMap<String, String> body = buildHttpBody(processInstance, bodyParams); 50 MultiValueMap<String, String> body = buildHttpBody(processInstance, bodyParams);
52 51
53 // 2. 发起请求 52 // 2. 发起请求
  53 + RestTemplate restTemplate = SpringUtils.getBean(RestTemplate.class);
54 ResponseEntity<String> responseEntity = sendHttpRequest(url, headers, body, restTemplate); 54 ResponseEntity<String> responseEntity = sendHttpRequest(url, headers, body, restTemplate);
55 55
56 // 3. 处理返回 56 // 3. 处理返回
@@ -78,27 +78,55 @@ public class BpmHttpRequestUtils { @@ -78,27 +78,55 @@ public class BpmHttpRequestUtils {
78 } 78 }
79 } 79 }
80 80
  81 + public static void executeBpmHttpRequest(BpmProcessInstanceStatusEvent event,
  82 + String url) {
  83 + // 1.1 设置请求头
  84 + HttpHeaders headers = new HttpHeaders();
  85 + headers.setContentType(MediaType.APPLICATION_JSON);
  86 + if (TenantContextHolder.getTenantId() != null) {
  87 + headers.add(HEADER_TENANT_ID, String.valueOf(TenantContextHolder.getTenantId()));
  88 + } else {
  89 + BpmProcessInstanceService processInstanceService = SpringUtils.getBean(BpmProcessInstanceService.class);
  90 + ProcessInstance processInstance = processInstanceService.getProcessInstance(event.getId());
  91 + if (processInstance != null) {
  92 + headers.add(HEADER_TENANT_ID, String.valueOf(TenantContextHolder.getTenantId()));
  93 + }
  94 + }
  95 + // 1.2 设置请求体
  96 +// MultiValueMap<String, String> body = new LinkedMultiValueMap<>();
  97 +// body.add("id", event.getId());
  98 +// body.add("processDefinitionKey", event.getProcessDefinitionKey());
  99 +// body.add("status", event.getStatus().toString());
  100 +// if (StrUtil.isNotEmpty(event.getBusinessKey())) {
  101 +// body.add("businessKey", event.getBusinessKey());
  102 +// }
  103 +
  104 + // 2. 发起请求
  105 + RestTemplate restTemplate = SpringUtils.getBean(RestTemplate.class);
  106 + sendHttpRequest(url, headers, event, restTemplate);
  107 + }
  108 +
81 public static ResponseEntity<String> sendHttpRequest(String url, 109 public static ResponseEntity<String> sendHttpRequest(String url,
82 MultiValueMap<String, String> headers, 110 MultiValueMap<String, String> headers,
83 - MultiValueMap<String, String> body, 111 + Object body,
84 RestTemplate restTemplate) { 112 RestTemplate restTemplate) {
85 - HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(body, headers); 113 + HttpEntity<Object> requestEntity = new HttpEntity<>(body, headers);
86 ResponseEntity<String> responseEntity; 114 ResponseEntity<String> responseEntity;
87 try { 115 try {
88 responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class); 116 responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);
89 - log.info("[sendHttpRequest][HTTP 触发器,请求头:{},请求体:{},响应结果:{}]", headers, body, responseEntity); 117 + log.info("[sendHttpRequest][HTTP 请求,请求头:{},请求体:{},响应结果:{}]", headers, body, responseEntity);
90 } catch (RestClientException e) { 118 } catch (RestClientException e) {
91 - log.error("[sendHttpRequest][HTTP 触发器,请求头:{},请求体:{},请求出错:{}]", headers, body, e.getMessage());  
92 - throw exception(PROCESS_INSTANCE_HTTP_TRIGGER_CALL_ERROR); 119 + log.error("[sendHttpRequest][HTTP 请求,请求头:{},请求体:{},请求出错:{}]", headers, body, e.getMessage());
  120 + throw exception(PROCESS_INSTANCE_HTTP_CALL_ERROR);
93 } 121 }
94 return responseEntity; 122 return responseEntity;
95 } 123 }
96 124
97 public static MultiValueMap<String, String> buildHttpHeaders(ProcessInstance processInstance, 125 public static MultiValueMap<String, String> buildHttpHeaders(ProcessInstance processInstance,
98 List<BpmSimpleModelNodeVO.HttpRequestParam> headerSettings) { 126 List<BpmSimpleModelNodeVO.HttpRequestParam> headerSettings) {
99 - Map<String, Object> processVariables = processInstance.getProcessVariables();  
100 MultiValueMap<String, String> headers = new LinkedMultiValueMap<>(); 127 MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
101 headers.add(HEADER_TENANT_ID, processInstance.getTenantId()); 128 headers.add(HEADER_TENANT_ID, processInstance.getTenantId());
  129 + Map<String, Object> processVariables = processInstance.getProcessVariables();
102 addHttpRequestParam(headers, headerSettings, processVariables); 130 addHttpRequestParam(headers, headerSettings, processVariables);
103 return headers; 131 return headers;
104 } 132 }
yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/util/CrmPermissionUtils.java
@@ -32,7 +32,7 @@ public class CrmPermissionUtils { @@ -32,7 +32,7 @@ public class CrmPermissionUtils {
32 * @return 是/否 32 * @return 是/否
33 */ 33 */
34 public static boolean isCrmAdmin() { 34 public static boolean isCrmAdmin() {
35 - PermissionApi permissionApi = SpringUtil.getBean(PermissionApi.class); 35 + PermissionCommonApi permissionApi = SpringUtil.getBean(PermissionCommonApi.class);
36 return permissionApi.hasAnyRoles(getLoginUserId(), RoleCodeEnum.CRM_ADMIN.getCode()); 36 return permissionApi.hasAnyRoles(getLoginUserId(), RoleCodeEnum.CRM_ADMIN.getCode());
37 } 37 }
38 38