flowable任务监听器获取spring bean

Flowable,userTask加任务监听器,然而通常情况下实现类注入的bean一直为null,解决方案如下:

1、流程定义xml中的任务监听器,使用delegateExpression表达式将所使用的任务监听器关联起来

<userTask id="test" name="测试" flowable:assignee="${applyUserId}" flowable:formKey="testForm">
      <extensionElements>
        <!-- <flowable:taskListener event="create" class="cn.flowable.listener.MyListener"></flowable:taskListener> -->
        <flowable:taskListener event="create" delegateExpression="${myListener}"></flowable:taskListener>
        <modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
      </extensionElements>
    </userTask>

2、自己的任务监听器实现类需要实现org.flowable.engine.delegate.TaskListener类,通过   @Component(value="myListener")  注解将我的监听器交给spring管理,其中value的值和xml中delegateExpression表达式中变量的值保持一致

@Component(value="myListener")

public class MyListener implements TaskListener {


@Autowired
private AsyncServiceImpl asyncService;
  
@Override
    public void notify(DelegateExecution delegateExecution) {
        Map<String, Object> variables = delegateExecution.getVariables(); //获取任务处理参数
        String orderNo = variables.get("orderNo").toString(); //获取订单号
        String expressNo = variables.get("expressNo").toString(); //获取快递单号
        Wrapper<Tborder> wrapper = new EntityWrapper<>();
        wrapper.eq("order_no",orderNo);
        Tborder tborder = iTborderService.getTborderProcessId(wrapper);
        Map<String,Object> var = new HashMap<>();
        var.put("title",variables.get("title")+delegateExecution.getEventName());
        var.put("applyUserId",variables.get("applyUserId"));
        var.put("applyUserName",variables.get("applyUserName"));
        var.put("market","market");
        var.put("processType",variables.get("processType"));
        var.put("noticeyw","noticeyw");
        var.put("processId",delegateExecution.getProcessDefinitionId());
        if (variables.containsKey("harveststate")){
            int harveststate = Integer.parseInt(variables.get("harveststate").toString());
            switch (harveststate){
                //仅损坏退货补发数量
                case 1:
                    //损坏数量退回
                    Map<String, String> addressMap = DetailedAddressUtil.detailAddress(tborder.getBizAddress());
                    String damage = variables.get("damage").toString();
                    tborder.setId(null);
                    tborder.setExpressNo(expressNo);
                    tborder.setCreateTime(DateUtil.getTime());
                    tborder.setQrcode(null);
                    tborder.setBizProvince(addressMap.get("province"));
                    tborder.setBizCity(addressMap.get("city"));
                    tborder.setBizArea(addressMap.get("county"));
                    tborder.setBizAddress(addressMap.get("village"));
                    tborder.setOperator("系统任务处理");
                    tborder.setBz(variables.get("orderDamage")==null?variables.get("orderDamage").toString():"");
                    tborder.setSendTime(DateUtil.getTime()); 
                    tborder.setOrderType(6); //设置退货类型订单
                    tborder.setOrderState(1); //设置退货中状态
                    tborder.setCause("到货玻璃破损/到货破损"); //退货原因
                    iTborderService.insertOrder(tborder,"","","","","2","单面游戏机","0",damage);
                    String orderIdDamage = tborder.getOrderNo();
                    new Thread(()->{
                        Map<String,Object> map = new HashMap<>();
                        map.put("title",variables.get("title"));
                        map.put("applyUserId",variables.get("operation"));
                        map.put("applyUserName","系统任务处理");
                        map.put("processType", ProcessType.TBORDERPROCESS.getType());
                        map.put("processType2","tborderinfo");
                        map.put("orderType",6);
                        String processId = completeService.processStart("order1678083939449", map,true);
                        iTborderService.updateProcessId(orderIdDamage, processId);
                        map = null;
                        map = new HashMap<>();
                        map.put("message","系统处理");
                        completeService.processIdComplete(processId,map);
                    }).start();
                    //补发数量
                    String reissue = variables.get("damage").toString();
                    delegateExecution.setVariable("title",variables.get("title")+"机器有损坏发已自动发起退货新增发货");
                    tborder.setId(null);
                    tborder.setExpressNo(null);
                    tborder.setCreateTime(DateUtil.getTime());
                    tborder.setQrcode(null);
                    tborder.setBz(variables.get("orderDamage")==null?variables.get("orderDamage").toString():"");
                    //tborder.setOrderType(7);
                    //补发在订单管理新增订单,设置为场地维护
                    tborder.setOrderType(5);
                    tborder.setCause("到货玻璃破损/到货破损");  //补发原因与退货原因一致
                    iTborderService.insertOrder(tborder,"","","","","2","单面游戏机","0",reissue);
                    String orderNoReissue = tborder.getOrderNo();
                    new Thread(()->{
                        Map<String,Object> map = new HashMap<>();
                        map.put("title",variables.get("title"));
                        map.put("applyUserId",variables.get("operation"));
                        map.put("applyUserName","系统任务处理");
                        map.put("processType", ProcessType.TBORDERPROCESS.getType());
                        map.put("processType2","tbordernew");
                        map.put("warehouse","order_game_ship");
                        map.put("orderType",variables.get("orderType"));
                        map.put("orderTypeSing",1);
                        map.put("orderDetail",2);
                        String processId = completeService.processStart("order1678083939449", map,true);
                        iTborderService.updateProcessId(orderNoReissue, processId);
                        map = null;
                        map = new HashMap<>();
                        map.put("message","系统处理");
                        completeService.processIdComplete(processId,map);
                        var.put("title",variables.get("title")+"进场出现机器损坏");
                        var.put("processId",processId);
                        completeService.noticeProcessStart(var);
                        
                    }).start();
                    break;
                //仅多余退货    
                case 2:
                    // 多余数量退回
                    String superfluous = variables.get("superfluous").toString();
                    delegateExecution.setVariable("title",variables.get("title")+"场地机器存在多余业务处理退货");
                    tborder.setId(null);
                    tborder.setExpressNo(expressNo);
                    tborder.setCreateTime(DateUtil.getTime());
                    tborder.setQrcode(null);
                    tborder.setOperator("系统任务处理");
                    tborder.setBz(variables.get("orderDamage")==null?variables.get("orderDamage").toString():"");
                    tborder.setSendTime(DatetimeUtil.formatDateTime(new Date()));
                    tborder.setOrderType(6); //设置退货类型订单
                    tborder.setOrderState(4); //设置退货中状态
                    iTborderService.insertOrder(tborder,"","","","","2","单面游戏机","0",superfluous);
                    String orderNoSuperfluous = tborder.getOrderNo();
                    new Thread(()->{
                        Map<String,Object> map = new HashMap<>();
                        map.put("title","退货订单"+variables.get("title"));
                        map.put("applyUserId",variables.get("operation"));
                        map.put("applyUserName","系统任务处理");
                        map.put("processType", ProcessType.TBORDERPROCESS.getType());
                        map.put("processType2","tborderinfo");
                        map.put("orderTypeSing",1);
                        map.put("orderType",6);
                        String processId = completeService.processStart("order1678083939449", map,true);
                        iTborderService.updateProcessId(orderNoSuperfluous, processId);
                        map = null;
                        map = new HashMap<>();
                        map.put("message","系统处理");
                        completeService.processIdComplete(processId,map);
                        var.put("title",variables.get("title")+"已进场多余机器进行撤回");
                        var.put("processId",processId);
                        
                            completeService.noticeProcessStart(var);
                        
                    }).start();
                    break;
            }
        }else {
            var.put("title",variables.get("title")+"已进场");
                completeService.noticeProcessStart(var);
            
        }
        if (variables.containsKey("bindZFB")&&"15".equals(variables.get("orderTypeSing").toString())){
            String bizCode = variables.get("bizCode").toString();
            String bindZFB = variables.get("bindZFB").toString().replaceAll("ZFB0", "");
            Tborder tborder1 = new Tborder();
            tborder1.setQrcode(bindZFB);
            tborder1.setBizCode(bizCode);
            asyncService.bindMachine(tborder1);
        }
        
    }

}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值