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