通过 RabbitMQ调用增加积分

This commit is contained in:
Guoqs
2025-12-24 16:14:21 +08:00
parent e135db56b0
commit c3f58adae7
6 changed files with 268 additions and 0 deletions

View File

@@ -198,6 +198,9 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
@Autowired
private AdapayRefundRecordService adapayRefundRecordService;
@Autowired
private com.jsowell.pile.mq.producer.PointsRewardProducer pointsRewardProducer;
@Override
public int deleteByPrimaryKey(Integer id) {
return orderBasicInfoMapper.deleteByPrimaryKey(id);
@@ -2229,12 +2232,67 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
logger.error("realTimeOrderSplit-订单:{}, 订单结算金额,汇付分账异常", afterSettleOrderDTO.getOrderCode(), e);
}
// 发放积分奖励(异步)
// 条件1.结算金额大于0 2.在线支付(微信支付、支付宝支付)
try {
sendPointsRewardMessage(afterSettleOrderDTO, orderBasicInfo);
} catch (Exception e) {
logger.error("realTimeOrderSplit-订单:{}, 发送积分奖励消息异常", afterSettleOrderDTO.getOrderCode(), e);
}
// 组装结果集
OrderSplitResult result = new OrderSplitResult();
result.setOrderCode(afterSettleOrderDTO.getOrderCode());
return result;
}
/**
* 发送积分奖励消息
* 条件1.结算金额大于0 2.在线支付(微信支付、支付宝支付)
*
* @param afterSettleOrderDTO 订单结算信息
* @param orderBasicInfo 订单基本信息
*/
private void sendPointsRewardMessage(AfterSettleOrderDTO afterSettleOrderDTO, OrderBasicInfo orderBasicInfo) {
String orderCode = afterSettleOrderDTO.getOrderCode();
String payMode = orderBasicInfo.getPayMode();
BigDecimal settleAmount = afterSettleOrderDTO.getOrderSettleAmount();
// 校验结算金额必须大于0
if (settleAmount == null || settleAmount.compareTo(BigDecimal.ZERO) <= 0) {
logger.info("积分奖励-订单:{}, 结算金额({})不大于0不发放积分", orderCode, settleAmount);
return;
}
// 校验:只有在线支付(微信支付、支付宝支付)才发放积分
boolean isOnlinePayment = StringUtils.equals(payMode, OrderPayModeEnum.PAYMENT_OF_WECHATPAY.getValue())
|| StringUtils.equals(payMode, OrderPayModeEnum.PAYMENT_OF_ALIPAY.getValue());
if (!isOnlinePayment) {
logger.info("积分奖励-订单:{}, 支付方式({})不是在线支付,不发放积分", orderCode, payMode);
return;
}
// 获取会员ID
String memberId = orderBasicInfo.getMemberId();
if (StringUtils.isBlank(memberId)) {
logger.warn("积分奖励-订单:{}, 会员ID为空不发放积分", orderCode);
return;
}
// 构建积分奖励消息,积分数量等于实际结算金额
com.jsowell.pile.dto.PointsRewardMessage message = com.jsowell.pile.dto.PointsRewardMessage.builder()
.memberId(memberId)
.points(settleAmount)
.orderCode(orderCode)
.payMode(payMode)
.settleAmount(settleAmount)
.build();
// 发送积分奖励消息到 RabbitMQ
pointsRewardProducer.sendPointsRewardMessage(message);
logger.info("积分奖励-订单:{}, 会员:{}, 积分:{}, 消息已发送", orderCode, memberId, settleAmount);
}
/**
* 获取订单待分账信息
*/