*业务参考代码
测试二级标题
如果 merchant_id 是外部白条,则执行相关逻辑
if(order.getMerchantId() == Constants.BaitiaoMerchant.XINYANG && type == ConsumeType.REPAY){
debtService.baitiaoOrderDebtNotify(order.getOrderNo(),"NEW_ORDER");
}
说明:重点在 Constants.BaitiaoMerchant.XINYANG ,关注实体类这部分的内容。
根据支付中心的 order_no 的前缀去判断
if (repayOrderNo.startsWith(Constants.BAITIAO_BILL_PREFIX)) { //如果是白条账单制后的还款计划
return repayNotifyBaitiaoBill(orderNo, repayOrderNo, repaidAt);
} else {
//没有前缀的是之前的还款计划,按照之前逻辑走
return repayNotifyBaitiaoOld(orderNo, repayOrderNo, repaidAt);
}
Collectors 在项目中的应用 1:收集成 List
List<Long> planIds = repaymentPlans.stream().map(BaitiaoBillRepaymentPlan::getId).collect(Collectors.toList());
说明:1、使用 map 完成映射,最后收集成 List 对象;
2、因为 id 是自增长不重复的,所以用 List 收集。
Collectors 在项目中的应用 2:收集成 Set
Set<Long> orderIds = repaymentPlans.stream().map(BaitiaoBillRepaymentPlan::getOrderId).collect(Collectors.toSet());
说明:因为 order_id 有可能是重复的,所以用 Set 收集
Supplier 的用法
Supplier<Heavy> supplier = () -> new Heavy();
Supplier<Heavy> supplier = Heavy::new;
发送消息的时候使用异步@Async
并且,为了不影响主要流程,我们要使用注解 @DummyException
,来笑话新添加逻辑抛出的异常。
@DummyException 的作用是消化掉这个方法中抛出的异常,保证新加的代码不会影响到主流程。
发送消息使用的模板代码
@Override
public void baitiaoRePayDebtNotify(String orderNo) {
// 1、先构造发送消息的对象的内容
RepaymentMQ repaymentOrderMQ = this.getRepaymentInfoAfterRefund(orderNo);
// 2、使用 JSON 工具类库将上一步的对象转换为 json 字符串
String msg = Constants.GSON.toJson(repaymentOrderMQ);
// 3、使用 RabbitMQ 的模板对象(rabbitTemplate)的 convertAndSend 方法发送消息报文
rabbitTemplate.convertAndSend(xyqbBaitiaoQueue.getName(),msg);
LOGGER.info("向债转债权池推送白条还款消息,消息内容-->{}", msg);
}
查询旧的还款计划
Long orderId = baitiaoOrder.getId();
// 查询旧的还款计划 根据 order_id 查询 baitiao_repayment_plan
// 根据 order_id 去查询白条还款计划表
List<BaitiaoRepaymentPlan> baitiaoRepaymentPlans = repaymentPlanRepository.findByOrderId(orderId);
查询新的还款计划
// 查询新的还款计划 根据 baitiao_bill_repayment_plan(该方法中已经完成了还款计划的更新)
List<BaitiaoBillRepaymentPlan> baitiaoBillRepaymentPlanList = baitiaoBillRepaymentPlanRepository.queryRepaymentPlanByOrderIdAndEnableTrue(orderId);