后端:创建订单时,创建支付交易记录

This commit is contained in:
YunaiV
2019-04-20 23:48:26 +08:00
parent 5785827748
commit 3a27ae5d96
8 changed files with 126 additions and 29 deletions

View File

@@ -57,10 +57,11 @@ public class UsersOrderController {
@PostMapping("create_order")
@ApiOperation("创建订单")
public CommonResult<OrderCreateBO> createOrder(@RequestBody @Validated OrderCreatePO orderCreatePO) {
public CommonResult<OrderCreateBO> createOrder(@RequestBody @Validated OrderCreatePO orderCreatePO,
HttpServletRequest request) {
Integer userId = UserSecurityContextHolder.getContext().getUserId();
OrderCreateDTO orderCreateDTO = OrderConvertAPP.INSTANCE.convert(orderCreatePO);
orderCreateDTO.setUserId(userId);
orderCreateDTO.setUserId(userId).setIp(HttpUtil.getIp(request));
return orderService.createOrder(orderCreateDTO);
}

View File

@@ -11,6 +11,6 @@ public class PayAppId {
/**
* 电商
*/
public static final String APP_ID_1024 = "1024";
public static final String APP_ID_SHOP_ORDER = "POd4RC6a";
}

View File

@@ -1,6 +1,7 @@
package cn.iocoder.mall.order.biz.service;
import cn.iocoder.common.framework.constant.DeletedStatusEnum;
import cn.iocoder.common.framework.util.DateUtil;
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.mall.order.api.OrderService;
@@ -8,6 +9,7 @@ import cn.iocoder.mall.order.api.bo.*;
import cn.iocoder.mall.order.api.constant.OrderErrorCodeEnum;
import cn.iocoder.mall.order.api.constant.OrderHasReturnExchangeEnum;
import cn.iocoder.mall.order.api.constant.OrderStatusEnum;
import cn.iocoder.mall.order.api.constant.PayAppId;
import cn.iocoder.mall.order.api.dto.*;
import cn.iocoder.mall.order.biz.constants.OrderDeliveryTypeEnum;
import cn.iocoder.mall.order.biz.constants.OrderRecipientTypeEnum;
@@ -15,6 +17,8 @@ import cn.iocoder.mall.order.biz.convert.*;
import cn.iocoder.mall.order.biz.dao.*;
import cn.iocoder.mall.order.biz.dataobject.*;
import cn.iocoder.mall.pay.api.PayTransactionService;
import cn.iocoder.mall.pay.api.bo.PayTransactionBO;
import cn.iocoder.mall.pay.api.dto.PayTransactionCreateDTO;
import cn.iocoder.mall.product.api.ProductSpuService;
import cn.iocoder.mall.product.api.bo.ProductSkuDetailBO;
import cn.iocoder.mall.user.api.UserAddressService;
@@ -41,9 +45,9 @@ import java.util.stream.Collectors;
public class OrderServiceImpl implements OrderService {
/**
* 支付过期时间 15 分钟
* 支付过期时间 120 分钟
*/
public static final int PAY_EXPIRE_TIME = 15;
public static final int PAY_EXPIRE_TIME = 120;
@Autowired
private OrderMapper orderMapper;
@@ -64,7 +68,7 @@ public class OrderServiceImpl implements OrderService {
private CartServiceImpl cartService;
@Reference
private UserAddressService userAddressService;
@Reference
@Reference(validation = "true")
private PayTransactionService payTransactionService;
@Override
@@ -187,7 +191,7 @@ public class OrderServiceImpl implements OrderService {
}
@Override
@Transactional
@Transactional // TODO 芋艿,先不考虑分布式事务的问题
public CommonResult<OrderCreateBO> createOrder(OrderCreateDTO orderCreateDTO) {
Integer userId = orderCreateDTO.getUserId();
List<OrderCreateItemDTO> orderItemDTOList = orderCreateDTO.getOrderItems();
@@ -245,6 +249,9 @@ public class OrderServiceImpl implements OrderService {
.setPresentTotal(priceItem.getPresentTotal());
}
// TODO 芋艿,标记优惠劵使用
// TODO 芋艿,扣除库存
// order
// TODO: 2019-04-11 Sin 订单号需要生成规则
@@ -310,19 +317,10 @@ public class OrderServiceImpl implements OrderService {
orderItemMapper.insert(orderItemDOList);
// 创建预订单
// TODO sin 支付订单 orderSubject 暂时取第一个子订单商品信息
// String orderSubject = orderItemDOList.get(0).getSkuName();
// Date expireTime = DateUtil.addDate(Calendar.MINUTE, PAY_EXPIRE_TIME);
// CommonResult commonResult = payTransactionService.createTransaction(
// new PayTransactionCreateDTO()
// .setCreateIp(orderCreateDTO.getIp())
// .setAppId(PayAppId.APP_ID_1024)
// .setExpireTime(expireTime)
// .setPrice(orderDO.getPayAmount())
// .setOrderSubject(orderSubject)
// .setOrderMemo(orderDO.getRemark())
// .setOrderDescription("")
// );
CommonResult<PayTransactionBO> createPayTransactionResult = createPayTransaction(orderDO, orderItemDOList, orderCreateDTO.getIp());
if (calcOrderPriceResult.isError()) {
return CommonResult.error(calcOrderPriceResult);
}
// if (commonResult.isError()) {
// //手动开启事务回滚
@@ -352,6 +350,23 @@ public class OrderServiceImpl implements OrderService {
return cartService.calcOrderPrice(calcOrderPriceDTO);
}
private CommonResult<PayTransactionBO> createPayTransaction(OrderDO order, List<OrderItemDO> orderItems, String ip) {
// TODO sin 支付订单 orderSubject 暂时取第一个子订单商品信息
String orderSubject = orderItems.get(0).getSkuName();
Date expireTime = DateUtil.addDate(Calendar.MINUTE, PAY_EXPIRE_TIME);
return payTransactionService.createTransaction(
new PayTransactionCreateDTO()
.setCreateIp(ip)
.setAppId(PayAppId.APP_ID_SHOP_ORDER)
.setOrderId(order.getId().toString())
.setExpireTime(expireTime)
.setPrice(order.getPresentPrice())
.setOrderSubject(orderSubject)
.setOrderMemo("测试备注") // TODO 芋艿,后面补充
.setOrderDescription("测试描述") // TODO 芋艿,后面补充
);
}
@Override
public CommonResult updateOrderItem(OrderItemUpdateDTO orderUpdateDTO) {
OrderItemDO orderItemDO = OrderItemConvert.INSTANCE.convert(orderUpdateDTO);