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

发布于:2023-01-04 ⋅ 阅读:(186) ⋅ 点赞:(0)

工作中会遇到一个订单改变,对应的信息需要推送到其它系统,比如移动设备的系统,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);
        }
    }


    }

网站公告

今日签到

点亮在社区的每一天
去签到