|
@@ -4,27 +4,32 @@ import cn.kdan.cloud.pdf.office.api.payment.bo.GeneratePayLinkPaddleBO;
|
|
import cn.kdan.cloud.pdf.office.api.payment.bo.GeneratePayLinkResultPaddleBO;
|
|
import cn.kdan.cloud.pdf.office.api.payment.bo.GeneratePayLinkResultPaddleBO;
|
|
import cn.kdan.cloud.pdf.office.api.payment.bo.OrderSucceededBO;
|
|
import cn.kdan.cloud.pdf.office.api.payment.bo.OrderSucceededBO;
|
|
import cn.kdan.cloud.pdf.office.api.payment.constant.OrderConstant;
|
|
import cn.kdan.cloud.pdf.office.api.payment.constant.OrderConstant;
|
|
|
|
+import cn.kdan.cloud.pdf.office.api.payment.constant.SubscriptionConstant;
|
|
|
|
+import cn.kdan.cloud.pdf.office.api.payment.dto.ChargebackOrderDTO;
|
|
import cn.kdan.cloud.pdf.office.api.payment.dto.CreatOrderDTO;
|
|
import cn.kdan.cloud.pdf.office.api.payment.dto.CreatOrderDTO;
|
|
import cn.kdan.cloud.pdf.office.api.payment.dto.CreatOrderManualDTO;
|
|
import cn.kdan.cloud.pdf.office.api.payment.dto.CreatOrderManualDTO;
|
|
import cn.kdan.cloud.pdf.office.api.payment.vo.CreatOrderResultVO;
|
|
import cn.kdan.cloud.pdf.office.api.payment.vo.CreatOrderResultVO;
|
|
import cn.kdan.cloud.pdf.office.api.payment.vo.OrderUpdateVO;
|
|
import cn.kdan.cloud.pdf.office.api.payment.vo.OrderUpdateVO;
|
|
-import cn.kdan.cloud.pdf.office.api.payment.vo.ProductPriceVo;
|
|
|
|
|
|
+import cn.kdan.cloud.pdf.office.api.payment.vo.OrdersVO;
|
|
|
|
+import cn.kdan.cloud.pdf.office.api.product.feign.ProductApi;
|
|
|
|
+import cn.kdan.cloud.pdf.office.api.product.vo.ProductPriceVo;
|
|
import cn.kdan.cloud.pdf.office.common.constant.RabbitMqConstant;
|
|
import cn.kdan.cloud.pdf.office.common.constant.RabbitMqConstant;
|
|
import cn.kdan.cloud.pdf.office.common.constant.RedisKeyConstant;
|
|
import cn.kdan.cloud.pdf.office.common.constant.RedisKeyConstant;
|
|
import cn.kdan.cloud.pdf.office.common.exception.BackendRuntimeException;
|
|
import cn.kdan.cloud.pdf.office.common.exception.BackendRuntimeException;
|
|
-import cn.kdan.cloud.pdf.office.common.utils.JsonUtils;
|
|
|
|
import cn.kdan.cloud.pdf.office.common.utils.MyDateUtils;
|
|
import cn.kdan.cloud.pdf.office.common.utils.MyDateUtils;
|
|
import cn.kdan.cloud.pdf.office.payment.client.PaddleClient;
|
|
import cn.kdan.cloud.pdf.office.payment.client.PaddleClient;
|
|
-import cn.kdan.cloud.pdf.office.payment.entity.Orders;
|
|
|
|
|
|
+import cn.kdan.cloud.pdf.office.payment.entity.Order;
|
|
|
|
+import cn.kdan.cloud.pdf.office.payment.entity.Subscription;
|
|
import cn.kdan.cloud.pdf.office.payment.error.ErrorMessage;
|
|
import cn.kdan.cloud.pdf.office.payment.error.ErrorMessage;
|
|
import cn.kdan.cloud.pdf.office.payment.mapper.OrdersMapper;
|
|
import cn.kdan.cloud.pdf.office.payment.mapper.OrdersMapper;
|
|
import cn.kdan.cloud.pdf.office.payment.service.OrdersService;
|
|
import cn.kdan.cloud.pdf.office.payment.service.OrdersService;
|
|
-import cn.kdan.cloud.pdf.office.payment.service.ProductService;
|
|
|
|
|
|
+import cn.kdan.cloud.pdf.office.payment.service.SubscriptionsService;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
+import org.jetbrains.annotations.NotNull;
|
|
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
|
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
|
import org.springframework.beans.BeanUtils;
|
|
import org.springframework.beans.BeanUtils;
|
|
import org.springframework.cache.annotation.Cacheable;
|
|
import org.springframework.cache.annotation.Cacheable;
|
|
@@ -42,9 +47,9 @@ import java.util.UUID;
|
|
@Service
|
|
@Service
|
|
@Slf4j
|
|
@Slf4j
|
|
@RequiredArgsConstructor
|
|
@RequiredArgsConstructor
|
|
-public class OrdersServiceImpl extends ServiceImpl<OrdersMapper, Orders> implements OrdersService {
|
|
|
|
|
|
+public class OrdersServiceImpl extends ServiceImpl<OrdersMapper, Order> implements OrdersService {
|
|
|
|
|
|
- private final ProductService productService;
|
|
|
|
|
|
+ private final ProductApi productApi;
|
|
|
|
|
|
private final StringRedisTemplate redisTemplate;
|
|
private final StringRedisTemplate redisTemplate;
|
|
|
|
|
|
@@ -52,6 +57,8 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersMapper, Orders> impleme
|
|
|
|
|
|
private final RabbitTemplate rabbitTemplate;
|
|
private final RabbitTemplate rabbitTemplate;
|
|
|
|
|
|
|
|
+// private final SubscriptionsService subscriptionsService;
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
@Cacheable(value = RedisKeyConstant.CACHE_PAYMENT_CREAT_ORDER + "#3#h",
|
|
@Cacheable(value = RedisKeyConstant.CACHE_PAYMENT_CREAT_ORDER + "#3#h",
|
|
key = "T(String).valueOf(#creatOrderDTO.userId)" +
|
|
key = "T(String).valueOf(#creatOrderDTO.userId)" +
|
|
@@ -60,7 +67,7 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersMapper, Orders> impleme
|
|
cacheManager = "myRedisCacheManager", unless = "#result == null")
|
|
cacheManager = "myRedisCacheManager", unless = "#result == null")
|
|
public CreatOrderResultVO creatOrder(CreatOrderDTO creatOrderDTO) {
|
|
public CreatOrderResultVO creatOrder(CreatOrderDTO creatOrderDTO) {
|
|
log.info("creatOrder:{}", creatOrderDTO);
|
|
log.info("creatOrder:{}", creatOrderDTO);
|
|
- Orders orders = new Orders();
|
|
|
|
|
|
+ Order orders = new Order();
|
|
orders.setAppId(creatOrderDTO.getAppId());
|
|
orders.setAppId(creatOrderDTO.getAppId());
|
|
orders.setUserId(creatOrderDTO.getUserId());
|
|
orders.setUserId(creatOrderDTO.getUserId());
|
|
orders.setProductId(creatOrderDTO.getProductId());
|
|
orders.setProductId(creatOrderDTO.getProductId());
|
|
@@ -72,7 +79,7 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersMapper, Orders> impleme
|
|
String readeNo = MyDateUtils.getTimeStamp() + "-" + creatOrderDTO.getProductId() + "-" + (int) ((Math.random() * 9 + 1) * 1000);
|
|
String readeNo = MyDateUtils.getTimeStamp() + "-" + creatOrderDTO.getProductId() + "-" + (int) ((Math.random() * 9 + 1) * 1000);
|
|
orders.setTradeNo(readeNo);
|
|
orders.setTradeNo(readeNo);
|
|
// 查询当前产品多少钱
|
|
// 查询当前产品多少钱
|
|
- ProductPriceVo productPrice = productService.getProductPrice(creatOrderDTO.getProductId());
|
|
|
|
|
|
+ ProductPriceVo productPrice = productApi.getProductPrice(creatOrderDTO.getProductId()).getResult();
|
|
switch (creatOrderDTO.getPaymentMethod()) {
|
|
switch (creatOrderDTO.getPaymentMethod()) {
|
|
case WXPAY:
|
|
case WXPAY:
|
|
break;
|
|
break;
|
|
@@ -101,35 +108,39 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersMapper, Orders> impleme
|
|
CreatOrderResultVO creatOrderResultVO = new CreatOrderResultVO();
|
|
CreatOrderResultVO creatOrderResultVO = new CreatOrderResultVO();
|
|
BeanUtils.copyProperties(orders, creatOrderResultVO);
|
|
BeanUtils.copyProperties(orders, creatOrderResultVO);
|
|
// 订单关闭
|
|
// 订单关闭
|
|
|
|
+ log.info("rabbitMq 发送延时队列,关闭订单:{}", orders.getId());
|
|
rabbitTemplate.convertAndSend(RabbitMqConstant.PAYMENT_EXCHANGE,
|
|
rabbitTemplate.convertAndSend(RabbitMqConstant.PAYMENT_EXCHANGE,
|
|
RabbitMqConstant.PAYMENT_ORDER_ROUTING_KEY,
|
|
RabbitMqConstant.PAYMENT_ORDER_ROUTING_KEY,
|
|
orders.getId(),
|
|
orders.getId(),
|
|
- (msg -> { msg.getMessageProperties().setExpiration((60 * 1000) + "");
|
|
|
|
- return msg; }));
|
|
|
|
|
|
+ (msg -> {
|
|
|
|
+ msg.getMessageProperties().setExpiration((60 * 1000) + "");
|
|
|
|
+ return msg;
|
|
|
|
+ }));
|
|
return creatOrderResultVO;
|
|
return creatOrderResultVO;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public void closeOrder(String orderId) {
|
|
public void closeOrder(String orderId) {
|
|
- Orders orders = getOrderById(orderId);
|
|
|
|
|
|
+ OrdersVO orders = getOrderById(orderId);
|
|
log.info("当前订单信息:{}", orders);
|
|
log.info("当前订单信息:{}", orders);
|
|
- if (orders.getStatus().equals(OrderConstant.CREATED)){
|
|
|
|
- orders.setStatus(OrderConstant.CLOSED);
|
|
|
|
- orders.setId(orderId);
|
|
|
|
- this.baseMapper.updateById(orders);
|
|
|
|
|
|
+ if (orders.getStatus().equals(OrderConstant.CREATED)) {
|
|
|
|
+ Order order = new Order();
|
|
|
|
+ order.setStatus(OrderConstant.CLOSED);
|
|
|
|
+ order.setId(orderId);
|
|
|
|
+ this.baseMapper.updateById(order);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public OrderUpdateVO updateOrderSucceeded(OrderSucceededBO orderSucceeded) {
|
|
public OrderUpdateVO updateOrderSucceeded(OrderSucceededBO orderSucceeded) {
|
|
- Orders orders = new Orders();
|
|
|
|
|
|
+ Order orders = new Order();
|
|
orders.setThirdOrderNo(orderSucceeded.getThirdTradeNo());
|
|
orders.setThirdOrderNo(orderSucceeded.getThirdTradeNo());
|
|
orders.setStatus(OrderConstant.COMPLETED);
|
|
orders.setStatus(OrderConstant.COMPLETED);
|
|
- this.baseMapper.update(orders,new LambdaQueryWrapper<Orders>()
|
|
|
|
- .eq(Orders::getTradeNo,orderSucceeded.getTradeNo()));
|
|
|
|
- Orders orderTradeNo = this.baseMapper.selectOne(new LambdaQueryWrapper<Orders>()
|
|
|
|
- .select(Orders::getId, Orders::getUserId)
|
|
|
|
- .eq(Orders::getTradeNo, orderSucceeded.getTradeNo()));
|
|
|
|
|
|
+ this.baseMapper.update(orders, new LambdaQueryWrapper<Order>()
|
|
|
|
+ .eq(Order::getTradeNo, orderSucceeded.getTradeNo()));
|
|
|
|
+ Order orderTradeNo = this.baseMapper.selectOne(new LambdaQueryWrapper<Order>()
|
|
|
|
+ .select(Order::getId, Order::getUserId)
|
|
|
|
+ .eq(Order::getTradeNo, orderSucceeded.getTradeNo()));
|
|
return OrderUpdateVO.builder()
|
|
return OrderUpdateVO.builder()
|
|
.orderId(orderTradeNo.getId())
|
|
.orderId(orderTradeNo.getId())
|
|
.userId(orderTradeNo.getUserId())
|
|
.userId(orderTradeNo.getUserId())
|
|
@@ -137,24 +148,29 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersMapper, Orders> impleme
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public Orders getOrderById(String orderId){
|
|
|
|
- return this.baseMapper.selectOne(new LambdaQueryWrapper<Orders>().eq(Orders::getId,orderId));
|
|
|
|
|
|
+ public OrdersVO getOrderById(String orderId) {
|
|
|
|
+ OrdersVO ordersVO = new OrdersVO();
|
|
|
|
+ BeanUtils.copyProperties(this.baseMapper.selectOne(new LambdaQueryWrapper<Order>().eq(Order::getId, orderId)), ordersVO);
|
|
|
|
+ return ordersVO;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public Orders getOrderByTradeNo(String tradeNo){
|
|
|
|
- return this.baseMapper.selectOne(new LambdaQueryWrapper<Orders>().eq(Orders::getTradeNo,tradeNo));
|
|
|
|
|
|
+ public OrdersVO getOrderByTradeNo(String tradeNo) {
|
|
|
|
+ OrdersVO ordersVO = new OrdersVO();
|
|
|
|
+ BeanUtils.copyProperties(this.baseMapper.selectOne(new LambdaQueryWrapper<Order>().eq(Order::getTradeNo, tradeNo)), ordersVO);
|
|
|
|
+ return ordersVO;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public OrderUpdateVO creatOrderManual(CreatOrderManualDTO creatOrderManual) {
|
|
public OrderUpdateVO creatOrderManual(CreatOrderManualDTO creatOrderManual) {
|
|
- Orders orders = new Orders();
|
|
|
|
|
|
+ Order orders = new Order();
|
|
orders.setAppId(creatOrderManual.getAppId());
|
|
orders.setAppId(creatOrderManual.getAppId());
|
|
orders.setProductId(creatOrderManual.getProductId());
|
|
orders.setProductId(creatOrderManual.getProductId());
|
|
orders.setUserId(creatOrderManual.getUserId());
|
|
orders.setUserId(creatOrderManual.getUserId());
|
|
orders.setTradeNo(creatOrderManual.getTradeNo());
|
|
orders.setTradeNo(creatOrderManual.getTradeNo());
|
|
orders.setThirdTradeNo(creatOrderManual.getThirdTradeNo());
|
|
orders.setThirdTradeNo(creatOrderManual.getThirdTradeNo());
|
|
orders.setPrice(creatOrderManual.getPrice());
|
|
orders.setPrice(creatOrderManual.getPrice());
|
|
|
|
+ orders.setPayment(creatOrderManual.getPaymentMethod().getValue());
|
|
this.baseMapper.insert(orders);
|
|
this.baseMapper.insert(orders);
|
|
return OrderUpdateVO.builder()
|
|
return OrderUpdateVO.builder()
|
|
.userId(creatOrderManual.getUserId())
|
|
.userId(creatOrderManual.getUserId())
|
|
@@ -163,6 +179,17 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersMapper, Orders> impleme
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
+ public void chargebackOrder(@NotNull ChargebackOrderDTO chargebackOrderDTO) {
|
|
|
|
+ log.info("手动退单修改状态:{}", chargebackOrderDTO);
|
|
|
|
+ // 修改订单状态
|
|
|
|
+ Order orders = new Order();
|
|
|
|
+ orders.setId(chargebackOrderDTO.getOrderId());
|
|
|
|
+ orders.setStatus(OrderConstant.REFUND);
|
|
|
|
+ this.baseMapper.updateById(orders);
|
|
|
|
+ log.info("手动退单修改状态成功:{}", chargebackOrderDTO);
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 对价格进行处理
|
|
* 对价格进行处理
|
|
*
|
|
*
|
|
@@ -171,7 +198,7 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersMapper, Orders> impleme
|
|
* @param orders orders
|
|
* @param orders orders
|
|
* @return 新价格
|
|
* @return 新价格
|
|
*/
|
|
*/
|
|
- private BigDecimal priceHandle(CreatOrderDTO creatOrderDTO, BigDecimal price, Orders orders) {
|
|
|
|
|
|
+ private BigDecimal priceHandle(CreatOrderDTO creatOrderDTO, BigDecimal price, Order orders) {
|
|
if (!ObjectUtils.isEmpty(creatOrderDTO.getDiscount())) {
|
|
if (!ObjectUtils.isEmpty(creatOrderDTO.getDiscount())) {
|
|
price = price.multiply(creatOrderDTO.getDiscount());
|
|
price = price.multiply(creatOrderDTO.getDiscount());
|
|
}
|
|
}
|