|
|
@@ -1,15 +1,16 @@
|
|
|
package com.kxs.product.biz.service.impl;
|
|
|
|
|
|
-import cn.hutool.core.lang.Snowflake;
|
|
|
import cn.hutool.core.util.IdUtil;
|
|
|
import com.alipay.api.AlipayApiException;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.kxs.common.core.constant.CommonConstants;
|
|
|
import com.kxs.common.core.exception.GlobalCustomerException;
|
|
|
import com.kxs.common.core.util.R;
|
|
|
import com.kxs.common.pay.enums.PayPlatformEnum;
|
|
|
+import com.kxs.common.pay.factory.PaymentFactory;
|
|
|
import com.kxs.common.pay.model.PayRequest;
|
|
|
import com.kxs.common.pay.model.PayResponse;
|
|
|
import com.kxs.common.pay.service.PayService;
|
|
|
@@ -27,11 +28,14 @@ import com.kxs.product.api.model.KxsShopOrder;
|
|
|
import com.kxs.product.biz.service.KxsShopOrderService;
|
|
|
import com.kxs.user.api.feign.RemoteKxsUserService;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.util.List;
|
|
|
+import java.util.Optional;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* 商城订单表(KxsShopOrder)表服务实现类
|
|
|
@@ -41,6 +45,7 @@ import java.util.List;
|
|
|
*/
|
|
|
@Service("kxsShopOrderService")
|
|
|
@RequiredArgsConstructor
|
|
|
+@Slf4j
|
|
|
public class KxsShopOrderServiceImpl extends ServiceImpl<KxsShopOrderMapper, KxsShopOrder> implements KxsShopOrderService {
|
|
|
|
|
|
private final KxsShopGoodsMapper goodsMapper;
|
|
|
@@ -49,7 +54,7 @@ public class KxsShopOrderServiceImpl extends ServiceImpl<KxsShopOrderMapper, Kxs
|
|
|
|
|
|
private final RemoteKxsUserService remoteKxsUserService;
|
|
|
|
|
|
- private final PayService payService;
|
|
|
+ private final PaymentFactory paymentFactory;
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@@ -58,20 +63,20 @@ public class KxsShopOrderServiceImpl extends ServiceImpl<KxsShopOrderMapper, Kxs
|
|
|
Long userId = SecurityUtils.getUser().getId();
|
|
|
|
|
|
//订单号
|
|
|
- Snowflake snowflake = IdUtil.getSnowflake(1, userId);
|
|
|
- long orderSn = snowflake.nextId();
|
|
|
+ String orderSn = CommonConstants.KXS_SHOP_PREFIX + IdUtil.getSnowflakeNextIdStr();
|
|
|
|
|
|
KxsShopOrder order = new KxsShopOrder();
|
|
|
//参数赋值
|
|
|
BeanUtils.copyProperties(param, order);
|
|
|
order.setUserId(userId);
|
|
|
- order.setOrderSn(String.valueOf(orderSn));
|
|
|
+ order.setOrderSn(orderSn);
|
|
|
//支付金额
|
|
|
order.setPayPrice(order.getTotalPrice());
|
|
|
baseMapper.insert(order);
|
|
|
|
|
|
//查询商品
|
|
|
KxsShopGoods goods = goodsMapper.selectById(param.getGoodsId());
|
|
|
+ Optional.ofNullable(goods).orElseThrow(() -> new GlobalCustomerException("商品不存在"));
|
|
|
//订单详情
|
|
|
KxsShopOrderInfo orderInfo = new KxsShopOrderInfo();
|
|
|
orderInfo.setNumber(param.getNumber());
|
|
|
@@ -84,7 +89,7 @@ public class KxsShopOrderServiceImpl extends ServiceImpl<KxsShopOrderMapper, Kxs
|
|
|
orderInfo.setOrderId(order.getId());
|
|
|
orderInfoMapper.insert(orderInfo);
|
|
|
|
|
|
- return R.ok(Boolean.TRUE);
|
|
|
+ return R.ok(order.getId());
|
|
|
|
|
|
}
|
|
|
|
|
|
@@ -111,24 +116,40 @@ public class KxsShopOrderServiceImpl extends ServiceImpl<KxsShopOrderMapper, Kxs
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public R payOrder(KxsShopOrder param) {
|
|
|
|
|
|
+ if(param.getId() == null){
|
|
|
+ return R.failed(ProductErrorTypeEnum.ORDER_EMPTY.getDescription());
|
|
|
+ }
|
|
|
+ if(param.getPayType() == null){
|
|
|
+ return R.failed("请选择支付方式");
|
|
|
+ }
|
|
|
KxsShopOrder order = baseMapper.selectById(param.getId());
|
|
|
if(order == null){
|
|
|
return R.failed(ProductErrorTypeEnum.ORDER_EMPTY.getDescription());
|
|
|
}
|
|
|
+ List<KxsShopOrderInfo> kxsShopOrderInfos = orderInfoMapper.selectList(Wrappers.<KxsShopOrderInfo>lambdaQuery().eq(KxsShopOrderInfo::getOrderId, order.getId()));
|
|
|
+
|
|
|
+ //修改订单内容
|
|
|
+ this.update(Wrappers.<KxsShopOrder>lambdaUpdate().eq(KxsShopOrder::getId, param.getId())
|
|
|
+ .set(KxsShopOrder::getPayType, param.getPayType())
|
|
|
+ .set(KxsShopOrder::getGetMode, param.getGetMode())
|
|
|
+ .set(KxsShopOrder::getRemark, param.getRemark()));
|
|
|
|
|
|
//余额支付
|
|
|
if(param.getPayType().equals(KxsShopEnum.YUE_PAY.getType())){
|
|
|
- return this.yuePay(param);
|
|
|
+ return this.yuePay(order);
|
|
|
}
|
|
|
|
|
|
//支付宝支付
|
|
|
if(param.getPayType().equals(KxsShopEnum.ALI_PAY.getType())){
|
|
|
- return this.aliPay(param);
|
|
|
+ String subject = kxsShopOrderInfos.stream().map(KxsShopOrderInfo::getGoodsName).collect(Collectors.joining(","));
|
|
|
+ return this.aliPay(order, subject);
|
|
|
}
|
|
|
|
|
|
- return R.failed();
|
|
|
+
|
|
|
+ return R.failed("未知的支付方式!");
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -215,21 +236,27 @@ public class KxsShopOrderServiceImpl extends ServiceImpl<KxsShopOrderMapper, Kxs
|
|
|
/**
|
|
|
* 支付宝支付
|
|
|
*
|
|
|
- * @param param 参数
|
|
|
+ * @param param 参数
|
|
|
+ * @param subject 订单标题。
|
|
|
* @return {@link R}
|
|
|
*/
|
|
|
- private R aliPay(KxsShopOrder param){
|
|
|
+ private R aliPay(KxsShopOrder param, String subject){
|
|
|
|
|
|
try {
|
|
|
PayRequest payReq = new PayRequest();
|
|
|
payReq.setPayTypeEnum(PayPlatformEnum.ALIPAY);
|
|
|
payReq.setOutTradeNo(param.getOrderSn());
|
|
|
- payReq.setSubject(param.getRemark());
|
|
|
+ payReq.setSubject(subject);
|
|
|
payReq.setTotalAmount(param.getPayPrice().doubleValue());
|
|
|
- PayResponse payResponse = payService.appPay(payReq);
|
|
|
+ //扩展参数
|
|
|
+ payReq.setPassbackParams("shop_order");
|
|
|
+
|
|
|
+ PayResponse payResponse = paymentFactory.getPayService(PayPlatformEnum.ALIPAY.getType()).appPay(payReq);
|
|
|
+
|
|
|
return R.ok(payResponse);
|
|
|
} catch (AlipayApiException e) {
|
|
|
- throw new GlobalCustomerException(e.getMessage());
|
|
|
+ log.error("支付宝支付异常:{}", param.getOrderSn(), e);
|
|
|
+ throw new GlobalCustomerException("支付宝参数异常");
|
|
|
}
|
|
|
}
|
|
|
|