编码注意
静态数组换成动态数组
Arrays.asList(oldBagIndex.split(","));
换成 Lists.newArrayList(oldBagIndex.split(","));
由于发送消息破坏了事务,所以在事务提交成功后再批量发送异步消息
//1.支付掉FinanceOrder(临时的比如税费等,临时账单)
List<FinanceOrder> financeOrderList = financeOrderDao.findPrePackFinanceOrdersVAT(wallet.getCustomerId());
for (FinanceOrder financeOrder : financeOrderList) {
//如果当前的金额够支付,那么就进行扣,否则进行退出,不继续下一个
BigDecimal currentAmount = DataUtils.toBigDecimal(wallet.getCurrentAmount());
BigDecimal totalPrice = DataUtils.toBigDecimal(financeOrder.getTotalPrice());
if (currentAmount.compareTo(totalPrice) >=0 && currentAmount.compareTo(BigDecimal.ZERO) > 0) {
financeOrderPayed(customerId, wallet, payTime, financeOrder);
logger.debug("## 财务账单 {} 支付完成,发送JMS消息", financeOrder.getId());
RabbitMessage rabbitMessage = new RabbitMessage(RabbitMessageActionsConstant.FINANCE_ORDER_PAYED, financeOrder.getId());
} else {
break;
}
}
//事物提交好开始发送消息
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
@Override
public void afterCommit() {
try {
for (FinanceOrder financeOrder : financeOrderList) {
//订单列表
RabbitMessage rabbitMessage = new RabbitMessage(RabbitMessageActionsConstant.FINANCE_ORDER_PAYED, financeOrder.getId());
rabbitMessageService.sendMessage(RabbitMessageQueueKeyConstant.FINANCE_SERVICE_QUEUEKEY,rabbitMessage);
}
}catch (Exception exception){
logger.error(exception.getMessage(),exception);
}
}
});