flowable 监听器无法获取spring bean ,自动注入bean为null,解决方案

package com.sinochem.it.bpm.flowable.handler;

import com.sinochem.it.bpm.flowable.config.TaskCallbackUrlConfig;
import com.sinochem.it.bpm.flowable.exception.FlowException;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.delegate.TaskListener;
import org.flowable.task.service.delegate.DelegateTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;

/**
 * 多实例任务监听器
 * @author : jiagang
 * @date : Created in 2021/9/14 9:06
 */
@Component
@Slf4j
public class MultiInstanceUserTaskListener implements TaskListener {


    @Autowired
    private TaskCallbackUrlConfig taskCallbackUrlConfig;

    @Autowired
    private RestTemplate restTemplate;


    private static MultiInstanceUserTaskListener myListener;

    /**
     * 监听器中无法获取spring bean配置
     */
    @PostConstruct
    public void init() {
        myListener = this;
        myListener.taskCallbackUrlConfig = this.taskCallbackUrlConfig;
        myListener.restTemplate = this.restTemplate;
    }

    @Override
    public void notify(DelegateTask delegateTask) {
        try {
            String[] strings = delegateTask.getAssignee().split("_");

            Map<String, Object> paramsMap = new HashMap<>();
            paramsMap.put("taskAssignee",delegateTask.getAssignee()); // 审批人code
            paramsMap.put("taskAssigneeName",delegateTask.getAssignee()); // 审批人name
            if (strings.length >= 2){
                paramsMap.put("taskAssignee",strings[0]); // 审批人code
                paramsMap.put("taskAssigneeName",strings[1]); // 审批人name
            }
            paramsMap.put("tenantId",delegateTask.getTenantId());
            paramsMap.put("businessInstanceId",delegateTask.getVariable("businessInstanceId"));
            paramsMap.put("initiatorUserCode", delegateTask.getVariable("userCode")); //发起人用户标识
            paramsMap.put("initiatorUserName", delegateTask.getVariable("userName")); //发起人用户名
            paramsMap.put("taskId", delegateTask.getId());
            paramsMap.put("taskName", delegateTask.getName());
            paramsMap.put("description", delegateTask.getDescription());
            paramsMap.put("wfName", delegateTask.getVariable("wfName"));
            paramsMap.put("billId", delegateTask.getVariable("billId")); //单据id
            paramsMap.put("approveTitle", delegateTask.getVariable("approveTitle")); //送审标题
            paramsMap.put("billType", delegateTask.getVariable("billType"));
            paramsMap.put("approveURL",delegateTask.getVariable("approveURL"));

            paramsMap.put("variables",delegateTask.getVariables());


            HttpHeaders headers = new HttpHeaders();
            headers.add("Content-Type","application/json");
            HttpEntity<Object> entity = new HttpEntity<Object>(paramsMap,headers);

            Map s = myListener.restTemplate.postForObject(myListener.taskCallbackUrlConfig.getAddMultiInstanceUserTaskCallbackUrl(), entity,Map.class);

            if (!s.get("code").equals(0)) {
                throw new FlowException("流程任务事件(多实例会签任务回调)回调API接口异常,异常信息:" + s.get("msg"));
            }

            log.info("流程实例id:" + delegateTask.getProcessInstanceId() + ",任务id:" + delegateTask.getId() + ",审批人:" + delegateTask.getAssignee());

        }catch (Exception e){
            String strMsg = "流程任务事件(多实例会签任务回调)回调API接口"
                    + ",流程实例ID=" + delegateTask.getProcessInstanceId()
                    + ",任务TaskID=" + delegateTask.getId()
                    + ",异常信息:" + e.getMessage();
            log.error(strMsg);
            throw new FlowException(strMsg);
        }

    }
}

注意调用时需要如下方式调用:
在这里插入图片描述

文章持续更新,可以关注下方公众号或者微信搜一搜「 最后一支迷迭香 」第一时间阅读,获取更完整的链路资料。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最后一支迷迭香

您的赞赏将给作者加杯☕️

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值