diff --git a/src/main/java/com/ycwl/basic/service/mobile/impl/WxPayServiceImpl.java b/src/main/java/com/ycwl/basic/service/mobile/impl/WxPayServiceImpl.java index bddd9742..5992c06a 100644 --- a/src/main/java/com/ycwl/basic/service/mobile/impl/WxPayServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/mobile/impl/WxPayServiceImpl.java @@ -31,10 +31,12 @@ import com.ycwl.basic.repository.OrderRepository; import com.ycwl.basic.service.mobile.WxPayService; import com.ycwl.basic.service.pc.ScenicService; import com.ycwl.basic.utils.SnowFlakeUtil; +import io.netty.util.concurrent.CompleteFuture; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.kafka.support.SendResult; import org.springframework.stereotype.Service; import jakarta.servlet.http.HttpServletRequest; @@ -42,6 +44,7 @@ import java.io.IOException; import java.math.BigDecimal; import java.math.BigInteger; import java.util.*; +import java.util.concurrent.CompletableFuture; /** * @Author: songmingsong @@ -74,7 +77,7 @@ public class WxPayServiceImpl implements WxPayService { @Autowired @Lazy private RedisTemplate redisTemplate; - @Autowired + @Autowired(required = false) private ProfitShareKafkaProducer profitShareKafkaProducer; @Override @@ -126,15 +129,17 @@ 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() - ); + if (profitShareKafkaProducer != null) { + 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()); } @@ -157,15 +162,21 @@ 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) - 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) -> { + CompletableFuture> future; + if (profitShareKafkaProducer != null) { + future = 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() + ); + } else { + future = CompletableFuture.completedFuture(null); + } + future.whenComplete((result, throwable) -> { RefundOrderRequest request = new RefundOrderRequest() .setOrderNo(orderId) .setPrice(priceInCents)