监听类Listener的写法思路(写的我自己都不想看)

工作中会遇到一个订单改变,对应的信息需要推送到其它系统,比如移动设备的系统,pc端的系统等

1.先把更新操作的方法写好,接口完成对接。
2.在订单类里的save方法里加一个beforeSave方法,在里面发出对应的一个信号。
3.定位到需要写Listener的地方做准备,创建一个继承MessageListner类重写onMessage方法的Listener类,接受发出的那个信号,然后执行对应的操作。

0.提前准备好MessageKit类,MessageListener接口,MessageManager类,
网上比较容易找到。
1.更新操作的接口
2.在Bill类里的beforeSave方法里,开一个线程(可用threadLocal发送完了就关掉)
来发送消息:
MessageKit.sendMessage(PUSH_ACTION,billNo)放在新开的线程里,
这个PUSH_ACTION在Bill类里大写
public static final String PUSH_ACTION = “ABCD”; //用_ACTION结尾
3.在billListener类上加@Listener(action ={Bill.PUSH_ACTION})
    private PushBillService p= Aop.get(PushBillServiceImpl.class);

    @Override
    public void onMessage(Message message) {
        if(StringUtils.equals(message.getAction(),Bill.PUSH_ACTION)){
            handleBill(message);
        }
//        else if(StringUtils.equals(message.getAction(),WayOrders.PUSH_BMYCT_WAY_ORDER_ACTION)){
//            handleBill2(message);
//        }
    }
    //handleBill
    protected void handleBill(Message message){
        Long BillId=message.getData();

        int pageSize=100;
        int pageNumber=1;
        //JFinal的分页
        Page<Record> page = Db.paginate(pageNumber, pageSize,selectSql , sql, lineId);

        int totalPage = page.getTotalPage();
        int totalRow = page.getTotalRow();

        log.info("【更新事件】订单【{}】处理【推送订单】totalPage=【{}】 totalRow=【{}】 ",BillId,totalPage,totalRow);

        for (int i = 0; i <totalPage ; i++) {
        //分页处理,避免数据太多
       pushBill(page.getList().stream().map(record -> record.getStr("bill_no")).collect(Collectors.toList()));
        }

	//pushBill
    protected void pushBill(List<String> billList){
        PushBillApiRequest request = new PushBillApiRequest ();
        request.setBillNoList(billNoList);

        try {
            pushBillService.pushBill(request);
        }catch (Exception e){
            log.error("【事件】处理异常",e);
        }
    }


    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值