1. 迁移创建支付交易单接口
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
package cn.iocoder.mall.tradeservice.client.pay;
|
||||
|
||||
import cn.iocoder.common.framework.vo.CommonResult;
|
||||
import cn.iocoder.mall.payservice.rpc.transaction.PayTransactionRpc;
|
||||
import cn.iocoder.mall.payservice.rpc.transaction.dto.PayTransactionCreateReqDTO;
|
||||
import org.apache.dubbo.config.annotation.DubboReference;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class PayTransactionClient {
|
||||
|
||||
@DubboReference(version = "${dubbo.consumer.PayTransactionRpc.version}")
|
||||
private PayTransactionRpc payTransactionRpc;
|
||||
|
||||
public Integer createPayTransaction(PayTransactionCreateReqDTO createReqDTO) {
|
||||
CommonResult<Integer> createPayTransactionResult = payTransactionRpc.createPayTransaction(createReqDTO);
|
||||
createPayTransactionResult.checkError();
|
||||
return createPayTransactionResult.getData();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package cn.iocoder.mall.tradeservice.config;
|
||||
|
||||
import lombok.Data;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@Component
|
||||
@ConfigurationProperties("biz")
|
||||
@Validated
|
||||
@Data
|
||||
public class TradeBizProperties {
|
||||
|
||||
/**
|
||||
* 支付应用编号
|
||||
*
|
||||
* 由 pay-service 支付系统提供
|
||||
*/
|
||||
@NotNull(message = "支付应用编号不能为空")
|
||||
private String payAppId;
|
||||
|
||||
/**
|
||||
* 支付超时时间,单位:分
|
||||
*/
|
||||
@NotNull(message = "支付超时时间不能为空")
|
||||
private Integer payExpireTime;
|
||||
|
||||
}
|
||||
@@ -5,14 +5,17 @@ import cn.iocoder.common.framework.util.CollectionUtils;
|
||||
import cn.iocoder.common.framework.util.DateUtil;
|
||||
import cn.iocoder.common.framework.util.MathUtil;
|
||||
import cn.iocoder.common.framework.vo.PageResult;
|
||||
import cn.iocoder.mall.payservice.rpc.transaction.dto.PayTransactionCreateReqDTO;
|
||||
import cn.iocoder.mall.productservice.enums.sku.ProductSkuDetailFieldEnum;
|
||||
import cn.iocoder.mall.productservice.rpc.sku.dto.ProductSkuRespDTO;
|
||||
import cn.iocoder.mall.promotion.api.rpc.price.dto.PriceProductCalcReqDTO;
|
||||
import cn.iocoder.mall.promotion.api.rpc.price.dto.PriceProductCalcRespDTO;
|
||||
import cn.iocoder.mall.tradeservice.client.pay.PayTransactionClient;
|
||||
import cn.iocoder.mall.tradeservice.client.product.ProductSkuClient;
|
||||
import cn.iocoder.mall.tradeservice.client.promotion.CouponCardClient;
|
||||
import cn.iocoder.mall.tradeservice.client.promotion.PriceClient;
|
||||
import cn.iocoder.mall.tradeservice.client.user.UserAddressClient;
|
||||
import cn.iocoder.mall.tradeservice.config.TradeBizProperties;
|
||||
import cn.iocoder.mall.tradeservice.convert.order.TradeOrderConvert;
|
||||
import cn.iocoder.mall.tradeservice.dal.mysql.dataobject.order.TradeOrderDO;
|
||||
import cn.iocoder.mall.tradeservice.dal.mysql.dataobject.order.TradeOrderItemDO;
|
||||
@@ -61,6 +64,11 @@ public class TradeOrderServiceImpl implements TradeOrderService {
|
||||
private PriceClient priceClient;
|
||||
@Autowired
|
||||
private CouponCardClient couponCardClient;
|
||||
@Autowired
|
||||
private PayTransactionClient payTransactionClient;
|
||||
|
||||
@Autowired
|
||||
private TradeBizProperties tradeBizProperties;
|
||||
|
||||
@Override
|
||||
// @GlobalTransactional TODO 芋艿,使用 seata 实现分布式事务
|
||||
@@ -92,15 +100,15 @@ public class TradeOrderServiceImpl implements TradeOrderService {
|
||||
}
|
||||
|
||||
// 创建交易订单(本地事务)
|
||||
Integer tradeOrderId = self.createTradeOrder0(createReqDTO, listProductSkus, priceProductCalcRespDTO, userAddressRespDTO);
|
||||
TradeOrderDO tradeOrderDO = self.createTradeOrder0(createReqDTO, listProductSkus, priceProductCalcRespDTO, userAddressRespDTO);
|
||||
|
||||
// 创建支付订单,对接支付服务
|
||||
createPayTransaction();
|
||||
return tradeOrderId;
|
||||
createPayTransaction(tradeOrderDO, createReqDTO, listProductSkus);
|
||||
return tradeOrderDO.getId();
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public Integer createTradeOrder0(TradeOrderCreateReqDTO createReqDTO, List<ProductSkuRespDTO> listProductSkus,
|
||||
public TradeOrderDO createTradeOrder0(TradeOrderCreateReqDTO createReqDTO, List<ProductSkuRespDTO> listProductSkus,
|
||||
PriceProductCalcRespDTO priceProductCalcRespDTO, UserAddressRespDTO userAddressRespDTO) {
|
||||
// 构建 TradeOrderDO 对象,并进行保存
|
||||
TradeOrderDO tradeOrderDO = new TradeOrderDO();
|
||||
@@ -154,11 +162,24 @@ public class TradeOrderServiceImpl implements TradeOrderService {
|
||||
// 最终保存
|
||||
tradeOrderItemMapper.insertList(tradeOrderItemDOs);
|
||||
|
||||
return tradeOrderDO.getId();
|
||||
return tradeOrderDO;
|
||||
}
|
||||
|
||||
private void createPayTransaction() {
|
||||
private void createPayTransaction(TradeOrderDO tradeOrderDO, TradeOrderCreateReqDTO createReqDTO,
|
||||
List<ProductSkuRespDTO> listProductSkus) {
|
||||
// 创建支付单
|
||||
String orderSubject = listProductSkus.get(0).getSpu().getName();
|
||||
Date expireTime = DateUtil.addDate(Calendar.MINUTE, tradeBizProperties.getPayExpireTime());
|
||||
Integer payTransactionId = payTransactionClient.createPayTransaction(
|
||||
new PayTransactionCreateReqDTO().setCreateIp(createReqDTO.getIp()).setAppId(tradeBizProperties.getPayAppId())
|
||||
.setOrderId(tradeOrderDO.getId().toString()).setExpireTime(expireTime)
|
||||
.setPrice(tradeOrderDO.getPresentPrice()).setOrderSubject(orderSubject)
|
||||
.setOrderMemo("测试备注") // TODO 芋艿,后面补充
|
||||
.setOrderDescription("测试描述") // TODO 芋艿,后面补充
|
||||
);
|
||||
|
||||
// 更新
|
||||
tradeOrderMapper.updateById(new TradeOrderDO().setId(tradeOrderDO.getId()).setPayTransactionId(payTransactionId));
|
||||
}
|
||||
|
||||
private String generateTradeOrderNo() {
|
||||
|
||||
Reference in New Issue
Block a user