You've already forked FrameTour-BE
feat(profit-share): 实现分账消息发送功能
- 修改 ProfitShareKafkaProducer 的 sendRefundMessage 方法返回 CompletableFuture - 在 WxMpPayAdapter 中增加 transactionId 和 refundTransactionId 字段解析 - 在 PayResponse 和 RefundResponse 中新增 transactionId 相关字段 - 在 WxPayServiceImpl 中注入 ProfitShareKafkaProducer 并发送分账消息 - 调整退款逻辑以异步方式发送分账退款消息后再执行退款操作
This commit is contained in:
@@ -7,6 +7,9 @@ import com.ycwl.basic.enums.BizCodeEnum;
|
||||
import com.ycwl.basic.enums.OrderStateEnum;
|
||||
import com.ycwl.basic.enums.StatisticEnum;
|
||||
import com.ycwl.basic.exception.AppException;
|
||||
import com.ycwl.basic.integration.profitshare.dto.message.OrderMessage;
|
||||
import com.ycwl.basic.integration.profitshare.dto.message.RefundMessage;
|
||||
import com.ycwl.basic.integration.profitshare.service.ProfitShareKafkaProducer;
|
||||
import com.ycwl.basic.mapper.OrderMapper;
|
||||
import com.ycwl.basic.mapper.PaymentMapper;
|
||||
import com.ycwl.basic.mapper.StatisticsMapper;
|
||||
@@ -71,6 +74,8 @@ public class WxPayServiceImpl implements WxPayService {
|
||||
@Autowired
|
||||
@Lazy
|
||||
private RedisTemplate<String, String> redisTemplate;
|
||||
@Autowired
|
||||
private ProfitShareKafkaProducer profitShareKafkaProducer;
|
||||
|
||||
@Override
|
||||
public Map<String, Object> createOrder(Long scenicId, WXPayOrderReqVO req) {
|
||||
@@ -121,6 +126,15 @@ public class WxPayServiceImpl implements WxPayService {
|
||||
invalidateStatisticsCache(scenicId);
|
||||
}
|
||||
});
|
||||
profitShareKafkaProducer.sendProfitShareMessage(OrderMessage.builder()
|
||||
.orderId(callbackResponse.getOrderNo())
|
||||
.scenicId(scenicId)
|
||||
.totalAmount(callbackResponse.getPayPrice() / 100.0)
|
||||
.paymentSystem("wechat")
|
||||
.paymentOrderId(callbackResponse.getTransactionId())
|
||||
.timestamp(System.currentTimeMillis() / 1000)
|
||||
.build()
|
||||
);
|
||||
} catch (Exception e) {
|
||||
throw new AppException(BizCodeEnum.ADVANCE_PAYMENT_CALLBACK_FAILED, e.toString());
|
||||
}
|
||||
@@ -143,23 +157,31 @@ public class WxPayServiceImpl implements WxPayService {
|
||||
IPayAdapter scenicPayAdapter = scenicService.getScenicPayAdapter(order.getScenicId());
|
||||
BigDecimal payPrice = order.getPayPrice();
|
||||
int priceInCents = payPrice.multiply(new BigDecimal(NumberConstant.HUNDRED)).intValue(); // 转换为分(int)
|
||||
RefundOrderRequest request = new RefundOrderRequest()
|
||||
.setOrderNo(orderId)
|
||||
.setPrice(priceInCents)
|
||||
.setRefundNo(SnowFlakeUtil.getId())
|
||||
.setRefundPrice(priceInCents)
|
||||
.setNotifyUrl("https://zhentuai.com/api/mobile/wx/pay/v1/"+order.getScenicId()+"/refundNotify");
|
||||
RefundOrderResponse response = scenicPayAdapter.refund(request);
|
||||
if (response.isSuccess()) {
|
||||
OrderUpdateReq orderUpdateReq = new OrderUpdateReq();
|
||||
orderUpdateReq.setId(Long.parseLong(orderId));
|
||||
orderUpdateReq.setRefundStatus(OrderStateEnum.REFUNDED.getType());
|
||||
orderUpdateReq.setRefundAt(new Date());
|
||||
orderMapper.update(orderUpdateReq);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
profitShareKafkaProducer.sendRefundMessage(RefundMessage.builder()
|
||||
.refundOrderId(String.valueOf(order.getId()))
|
||||
.originalOrderId(String.valueOf(order.getId()))
|
||||
.refundAmount(payPrice.doubleValue())
|
||||
.refundType("full")
|
||||
.paymentSystem("wechat")
|
||||
.timestamp(System.currentTimeMillis() / 1000)
|
||||
.build()
|
||||
).whenComplete((result, throwable) -> {
|
||||
RefundOrderRequest request = new RefundOrderRequest()
|
||||
.setOrderNo(orderId)
|
||||
.setPrice(priceInCents)
|
||||
.setRefundNo(SnowFlakeUtil.getId())
|
||||
.setRefundPrice(priceInCents)
|
||||
.setNotifyUrl("https://zhentuai.com/api/mobile/wx/pay/v1/"+order.getScenicId()+"/refundNotify");
|
||||
RefundOrderResponse response = scenicPayAdapter.refund(request);
|
||||
if (response.isSuccess()) {
|
||||
OrderUpdateReq orderUpdateReq = new OrderUpdateReq();
|
||||
orderUpdateReq.setId(Long.parseLong(orderId));
|
||||
orderUpdateReq.setRefundStatus(OrderStateEnum.REFUNDED.getType());
|
||||
orderUpdateReq.setRefundAt(new Date());
|
||||
orderMapper.update(orderUpdateReq);
|
||||
}
|
||||
});
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user