liujunchi 3 лет назад
Родитель
Сommit
c17b49c045
13 измененных файлов с 199 добавлено и 120 удалено
  1. 1 1
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/OmsOrderReturnApplyServiceImpl.java
  2. 11 1
      cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/mapper/UserOrderPaymentMapper.java
  3. 25 0
      cooleshow-mall/mall-mbg/src/main/resources/config/mybatis/UserOrderPaymentMapper.xml
  4. 2 1
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/enums/PayChannelEnum.java
  5. 1 1
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/adapay/PaymentSdk.java
  6. 23 32
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/req/OrderPayReq.java
  7. 7 3
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/service/PaymentService.java
  8. 9 24
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/service/impl/AdapayPaymentServiceImpl.java
  9. 14 10
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/PaymentController.java
  10. 1 7
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/OmsPortalOrderService.java
  11. 34 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/UserOrderPaymentService.java
  12. 18 39
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java
  13. 53 1
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/UserOrderPaymentServiceImpl.java

+ 1 - 1
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/OmsOrderReturnApplyServiceImpl.java

@@ -110,7 +110,7 @@ public class OmsOrderReturnApplyServiceImpl implements OmsOrderReturnApplyServic
      */
     private void refundAmount(OmsOrderReturnApply returnApply) {
         // 退款
-        UserOrderPayment userOrderPayment = userOrderPaymentMapper.selectByTranNo(returnApply.getOrderSn());
+        UserOrderPayment userOrderPayment = userOrderPaymentMapper.selectByOrderNoAndStatusSucceeded(returnApply.getOrderSn());
         OrderRefundReq refundReq = new OrderRefundReq();
         refundReq.setOrderNo(returnApply.getOrderSn());
         refundReq.setRefundAmount(returnApply.getReturnAmount().setScale(2, RoundingMode.HALF_UP).toString());

+ 11 - 1
cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/mapper/UserOrderPaymentMapper.java

@@ -1,6 +1,9 @@
 package com.yonge.cooleshow.mbg.mapper;
 
 import com.yonge.cooleshow.mbg.model.UserOrderPayment;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 public interface UserOrderPaymentMapper {
 
@@ -13,5 +16,12 @@ public interface UserOrderPaymentMapper {
     int updateByPrimaryKeySelective(UserOrderPayment userOrderPayment);
 
 
-    UserOrderPayment selectByOrderNo(String orderSn, String payChannel, String payStaus);
+    List<UserOrderPayment> selectByOrderNo(@Param("orderSn") String orderSn);
+
+    UserOrderPayment selectByOrderNoAndStatus(@Param("orderSn") String orderSn, @Param(
+            "payChannel") String payChannel, @Param("payStatus") String payStatus);
+
+    UserOrderPayment selectByOrderNoAndStatusPaying(@Param("orderSn") String orderSn);
+
+    UserOrderPayment selectByOrderNoAndStatusSucceeded(@Param("orderSn") String orderSn);
 }

+ 25 - 0
cooleshow-mall/mall-mbg/src/main/resources/config/mybatis/UserOrderPaymentMapper.xml

@@ -226,4 +226,29 @@
         <include refid="Base_Column_List" />
       from user_order_payment where trans_no_ = #{orderNo} limit 1
     </select>
+
+    <select id="selectByOrderNo" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List" />
+        from user_order_payment where order_no_ = #{orderSn}
+    </select>
+
+    <select id="selectByOrderNoAndStatusPaying" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List" />
+        from user_order_payment where order_no_ = #{orderSn} and status_ = 'paying'
+    </select>
+
+    <select id="selectByOrderNoAndStatus" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List" />
+        from user_order_payment where order_no_ = #{orderSn}
+        and status_ = #{payStatus} and pay_channel_ = #{payChannel}
+    </select>
+
+    <select id="selectByOrderNoAndStatusSucceeded" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List" />
+        from user_order_payment where order_no_ = #{orderSn} and status_ = 'succeeded'
+    </select>
 </mapper>

+ 2 - 1
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/enums/PayChannelEnum.java

@@ -8,7 +8,8 @@ package com.yonge.cooleshow.enums;
  */
 public enum PayChannelEnum {
     alipay("alipay","支付宝APP支付"),
-    wx_lite("wx_lite","微信APP支付")
+    wx_lite("wx_lite","微信小程序支付"),
+    alipay_lite("alipay_lite","支付宝小程序支付")
     ;
     private String code;
     private String msg;

+ 1 - 1
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/adapay/PaymentSdk.java

@@ -221,7 +221,7 @@ public class PaymentSdk {
     /**
      *  查看退款订单
      *
-     * {
+     * @param {
      *     "status": "succeeded",
      *     "prod_mode": "true",
      *     "refunds": [

+ 23 - 32
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/req/OrderPayReq.java

@@ -21,17 +21,20 @@ public class OrderPayReq {
     @ApiModelProperty(value = "订单号 ", required = true)
     private String orderNo;
     @NotNull(message = "支付渠道不能为空")
-    @ApiModelProperty(value = "支付渠道:  alipay 支付宝  wx_lite 微信 ", required = true)
+    @ApiModelProperty(value = "支付渠道:  alipay 支付宝APP支付 alipay_lite 支付宝小程序支付  wx_lite 微信小程序支付 ", required = true)
     private PayChannelEnum payChannel;
+    @ApiModelProperty(value = "微信用户openId(微信支付必传)")
+    private String openId;
+    @ApiModelProperty(value = "买家的支付宝用户 id(支付宝小程序支付必传)")
+    private String buyerId;
+    @ApiModelProperty(value = "用户说明 ")
+    private String reason;
+
+
     @ApiModelProperty(value = "用户id ")
     private Long userId;
     @ApiModelProperty(value = "用户端公网ip ")
     private String ipAddress;
-    @ApiModelProperty(value = "微信用户openId(微信支付必传)")
-    private String openId;
-
-    @ApiModelProperty(value = "订单状态",hidden = true)
-    private OrderStatusEnum orderStatus;
 
     @ApiModelProperty(value = "订单金额",hidden = true)
     private BigDecimal orderPrice;
@@ -45,32 +48,20 @@ public class OrderPayReq {
     @ApiModelProperty(value = "拉起支付信息",hidden = true)
     private String payInfo;
 
-    public void orderStatus(Integer orderStatus) {
-        if (orderStatus == 0) {
-            this.orderStatus = OrderStatusEnum.PAYING;
-        } else if (orderStatus == 1) {
-            this.orderStatus = OrderStatusEnum.PAID;
-        }else if (orderStatus == 2) {
-            this.orderStatus = OrderStatusEnum.CLOSE;
-        }else if (orderStatus == 3) {
-            this.orderStatus = OrderStatusEnum.CLOSE;
-        }else if (orderStatus == 4) {
-            this.orderStatus = OrderStatusEnum.CLOSE;
-        }else if (orderStatus == 5) {
-            this.orderStatus = OrderStatusEnum.CLOSE;
-        }else if (orderStatus == 6) {
-            this.orderStatus = OrderStatusEnum.WAIT_PAY;
-        } else {
-            this.orderStatus = OrderStatusEnum.CLOSE;
-        }
-    }
-
-    public OrderStatusEnum getOrderStatus() {
-        return orderStatus;
-    }
-
-    public void setOrderStatus(OrderStatusEnum orderStatus) {
-        this.orderStatus = orderStatus;
+    public String getBuyerId() {
+        return buyerId;
+    }
+
+    public void setBuyerId(String buyerId) {
+        this.buyerId = buyerId;
+    }
+
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
     }
 
     public BigDecimal getOrderPrice() {

+ 7 - 3
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/service/PaymentService.java

@@ -23,10 +23,14 @@ public interface PaymentService {
      */
     OrderPayRes orderPay(OrderPayReq payReq);
 
-    OrderPayRes orderPayWaitPay(OrderPayReq payReq);
 
-
-    OrderPayRes orderPayPaying(OrderPayReq payReq);
+    /**
+     * 拉起原有支付信息,继续支付
+     *
+     * @param payReq
+     * @return
+     */
+    OrderPayRes orderContinue(OrderPayReq payReq);
 
     /**
      * 退款

+ 9 - 24
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/service/impl/AdapayPaymentServiceImpl.java

@@ -39,21 +39,6 @@ public class AdapayPaymentServiceImpl implements PaymentService {
 
     @Override
     public OrderPayRes orderPay(OrderPayReq payReq) {
-        if (OrderStatusEnum.WAIT_PAY.equals(payReq.getOrderStatus())) {
-            //处于待支付状态,需要调用汇付发起付款请求接口
-            return orderPayWaitPay(payReq);
-        } else if (OrderStatusEnum.PAYING.equals(payReq.getOrderStatus())) {
-            //处于付款中状态,需要拉起付款接口返回信息,并且去到汇付
-            return orderPayPaying(payReq);
-        }
-        OrderPayRes orderPayRes = new OrderPayRes();
-        orderPayRes.setStatus(false);
-        orderPayRes.setMessage("订单状态异常");
-        return orderPayRes;
-    }
-
-    @Override
-    public OrderPayRes orderPayWaitPay(OrderPayReq payReq) {
         PaymentReq paymentReq = new PaymentReq();
         paymentReq.setOrder_no(payReq.getOrderNo());
         paymentReq.setPay_channel(payReq.getPayChannel().getCode());
@@ -68,7 +53,11 @@ public class AdapayPaymentServiceImpl implements PaymentService {
         //异步通知地址
         paymentReq.setNotify_url(HuifuConfiguration.getHuifuProperties().getNotifyUrl());
 
-        if (PayChannelEnum.wx_lite.equals(payReq.getPayChannel())) {
+        if (PayChannelEnum.alipay_lite.equals(payReq.getPayChannel())) {
+            Map<String, Object> expend = new HashMap<>();
+            expend.put("buyer_id", payReq.getBuyerId());
+            paymentReq.setExpend(expend);
+        } else if (PayChannelEnum.wx_lite.equals(payReq.getPayChannel())) {
             Map<String, Object> expend = new HashMap<>();
             expend.put("open_id", payReq.getOpenId());
             paymentReq.setExpend(expend);
@@ -99,15 +88,11 @@ public class AdapayPaymentServiceImpl implements PaymentService {
     }
 
     @Override
-    public OrderPayRes orderPayPaying(OrderPayReq payReq) {
+    public OrderPayRes orderContinue(OrderPayReq payReq) {
         OrderPayRes orderPayRes = new OrderPayRes();
-        if (OrderStatusEnum.PAYING.getCode().equals(payReq.getOrderStatus().getCode())) {
-            orderPayRes.setPay_info(payReq.getPayInfo());
-            orderPayRes.setPay_amt(payReq.getOrderPrice().toString());
-        } else {
-            orderPayRes.setStatus(false);
-            orderPayRes.setMessage("订单不处于支付状态中");
-        }
+        orderPayRes.setPay_info(payReq.getPayInfo());
+        orderPayRes.setPayChannel(payReq.getPayChannel().getCode());
+        orderPayRes.setPay_amt(payReq.getOrderPrice().setScale(2, RoundingMode.HALF_UP).toString());
         return orderPayRes;
     }
 

+ 14 - 10
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/PaymentController.java

@@ -17,6 +17,7 @@ import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.utils.web.WebUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -112,22 +113,25 @@ public class PaymentController extends BaseController {
         payReq.setUserId(user.getId());
         payReq.setIpAddress(WebUtil.getRemoteIp(request));
 
-        Future<OrderPayRes> orderPayResFuture = DistributedLock.of(redissonClient)
-              .callIfLockCanGet(OrdeerCacherEnmu.LOCK_PAY_ORDER.getRedisKey(user.getId()),
-                                () -> portalOrderService.orderPay(payReq), 60L, TimeUnit.SECONDS);
-
+        RLock lock = redissonClient.getLock(OrdeerCacherEnmu.LOCK_PAY_ORDER.getRedisKey(user.getId()));
         try {
-            OrderPayRes orderPayRes = orderPayResFuture.get();
-            if (orderPayRes.isStatus()) {
-                return succeed(orderPayRes);
-            }  else {
-                return failed(orderPayRes.getMessage());
+            boolean b = lock.tryLock(60, TimeUnit.SECONDS);
+            if (b) {
+                OrderPayRes orderPayRes = portalOrderService.orderPay(payReq);
+                if (orderPayRes.isStatus()) {
+                    return succeed(orderPayRes);
+                }  else {
+                    return failed(orderPayRes.getMessage());
+                }
             }
+            return failed("请求超时");
         }catch (BizException e) {
             return failed(e.getMessage());
-        }catch (Exception e) {
+        } catch (Exception e) {
             e.printStackTrace();
             return HttpResponseResult.failed("付款失败");
+        }finally {
+            lock.unlock();
         }
     }
 }

+ 1 - 7
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/OmsPortalOrderService.java

@@ -44,7 +44,7 @@ public interface OmsPortalOrderService {
      * 取消单个超时订单
      */
     @Transactional
-    void cancelOrder(Long orderId, String message);
+    void cancelOrder(Long orderId,  String message);
 
     /**
      * 发送延迟消息取消订单
@@ -75,14 +75,8 @@ public interface OmsPortalOrderService {
     void deleteOrder(Long orderId);
 
     /**
-     *
-     * @param data
-     * @param type
-     */    /**
      * 订单拉起支付
      *
-     * @param payReq 支付信息
-     * @return
      */
     @Transactional
     void orderCallback(String data, String type);

+ 34 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/UserOrderPaymentService.java

@@ -4,6 +4,8 @@ import com.yonge.cooleshow.enums.PayChannelEnum;
 import com.yonge.cooleshow.enums.PayStatusEnum;
 import com.yonge.cooleshow.mbg.model.UserOrderPayment;
 
+import java.util.List;
+
 /**
  * Description
  *
@@ -31,4 +33,36 @@ public interface UserOrderPaymentService {
 
     UserOrderPayment getByOrderNo(String orderSn, PayChannelEnum payChannel, PayStatusEnum pending);
 
+    /**
+     * 根据订单查询 订单支付信息
+     *
+     * @param orderSn 订单号
+     * @return
+     */
+    List<UserOrderPayment> getByOrderNo(String orderSn);
+
+    /**
+     * 关单
+     *
+     * @param orderSn 订单号
+     * @param message 信息
+     */
+    void closePayment(String orderSn, String message);
+
+    /**
+     * 查询支付中的订单, 最多只有一个
+     *
+     * @param orderSn
+     * @return
+     */
+    UserOrderPayment getByOrderNoAndStatusPaying(String orderSn);
+
+
+    /**
+     * 查询支付成功的订单, 最多只有一个
+     *
+     * @param orderSn
+     * @return
+     */
+    UserOrderPayment getByOrderNoAndStatusSucceeded(String orderSn);
 }

+ 18 - 39
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java

@@ -327,26 +327,9 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
                 UmsMember member = memberService.getById(cancelOrder.getMemberId());
                 memberService.updateIntegration(cancelOrder.getMemberId(), member.getIntegration() + cancelOrder.getUseIntegration());
             }
-            UserOrderPayment orderPayment = userOrderPaymentService.getByTranNo(cancelOrder.getOrderSn());
-            if (null != orderPayment) {
-                // 发起关单
-                OrderCloseReq orderCloseReq = new OrderCloseReq();
-                orderCloseReq.setPaymentId(orderPayment.getTransNo());
-                orderCloseReq.setReason(message);
-                OrderCloseRes closeRes = adapayPaymentService.orderClose(orderCloseReq);
-                if (closeRes.isStatus()) {
-                    orderPayment.setCloseStatus(PayStatusEnum.pending.getCode());
-                } else {
-                    orderPayment.setCloseStatus(PayStatusEnum.failed.getCode());
-                    orderPayment.setCloseFailMsg(closeRes.getFailMsg());
-                }
+            // 发起关单
+            userOrderPaymentService.closePayment(cancelOrder.getOrderSn(),message);
 
-                //更新付款单
-                orderPayment.setStatus(PayStatusEnum.failed.getCode());
-                orderPayment.setPayFailMsg(message);
-                orderPayment.setUpdateTime(new Date());
-                userOrderPaymentService.saveOrUpdate(orderPayment);
-            }
         }
     }
 
@@ -479,16 +462,20 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             orderPayRes.setMessage("订单已付款或已关闭");
             return orderPayRes;
         }
+        payReq.setOrderPrice(detail.getPayAmount());
         UserOrderPayment userOrderPayment = userOrderPaymentService
                 .getByOrderNo(detail.getOrderSn(), payReq.getPayChannel(), PayStatusEnum.pending);
-        payReq.orderStatus(detail.getStatus());
-        payReq.setOrderNo(detail.getOrderSn());
-        payReq.setOrderPrice(detail.getPayAmount());
-        payReq.setGoodTitle("");
-        payReq.setGoodDesc("");
-        if (userOrderPayment != null) {
+
+        if (userOrderPayment == null) {
+            // 支付订单号
+            payReq.setOrderNo(generateOrderSn(detail));
+        }else {
+            // 拉起原有的支付
             payReq.setPayInfo(userOrderPayment.getPayInfo());
+            return adapayPaymentService.orderContinue(payReq);
         }
+        payReq.setGoodTitle("酷乐秀商城订单编号-" + detail.getOrderSn());
+        payReq.setGoodDesc("酷乐秀商城订单编号-" + detail.getOrderSn());
         // 支付中的返回拉起信息
         orderPayRes = adapayPaymentService.orderPay(payReq);
         if (!orderPayRes.isStatus()) {
@@ -500,12 +487,6 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             cancelOrder(detail.getId(),"订单金额和实际支付金额不符");
             throw new BizException("订单金额和实际支付金额不符");
         }
-        // 订单状态和付款状态都是付款中,直接返回付款拉起信息
-        if (OrderStatusEnum.PAYING.getCode().equals(payReq.getOrderStatus().getCode())
-                && PayStatusEnum.pending.getCode().equals(orderPayRes.getPayStatus().getCode())) {
-            return orderPayRes;
-        }
-
 
         OmsOrder omsOrder = new OmsOrder();
         omsOrder.setId(detail.getId());
@@ -513,10 +494,9 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             omsOrder.setStatus(0);
             orderMapper.updateByPrimaryKeySelective(omsOrder);
             // 保存订单支付表
-            if (userOrderPayment == null) {
-                userOrderPayment = new UserOrderPayment();
-            }
-            userOrderPayment.setOrderNo(orderPayRes.getOrderNo());
+            userOrderPayment = new UserOrderPayment();
+            userOrderPayment.setOrderNo(detail.getOrderSn());
+            userOrderPayment.setAdapayNo(orderPayRes.getOrderNo());
             userOrderPayment.setPayChannel(orderPayRes.getPayChannel());
             userOrderPayment.setTransNo(orderPayRes.getTransNo());
             userOrderPayment.setPayAmt(new BigDecimal(orderPayRes.getPay_amt()));
@@ -635,9 +615,9 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
     @Transactional(rollbackFor = Exception.class)
     void payingOrderHandle(OmsOrder userOrder) {
         //判断汇付订单状态
-        UserOrderPayment orderPayment = userOrderPaymentService.getByTranNo(userOrder.getOrderSn());
+        UserOrderPayment orderPayment = userOrderPaymentService.getByOrderNoAndStatusPaying(userOrder.getOrderSn());
         if (null == orderPayment) {
-            return;
+            cancelOrder(userOrder.getId(), "支付超时");
         }
         try {
             Map<String, Object> resMap = paymentSdk.queryPayment(orderPayment.getTransNo());
@@ -659,14 +639,13 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
     /**
      * 订单完成
      *
-     * @author liweifan
      * @param: detail
      * @updateTime 2022/4/13 17:17
      */
     @Transactional(rollbackFor = Exception.class)
     void orderSuccess(OmsOrder detail, JSONObject hfRes) {
         //更新订单
-        UserOrderPayment orderPayment = userOrderPaymentService.getByTranNo(detail.getOrderSn());
+        UserOrderPayment orderPayment = userOrderPaymentService.getByOrderNoAndStatusPaying(detail.getOrderSn());
         if (orderPayment.getPayChannel().equals("alipay")) {
             paySuccess(detail.getId(),1);
         } else if (orderPayment.getPayChannel().equals("wx_lite")) {

+ 53 - 1
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/UserOrderPaymentServiceImpl.java

@@ -5,9 +5,16 @@ import com.yonge.cooleshow.enums.PayStatusEnum;
 import com.yonge.cooleshow.mbg.mapper.UserOrderPaymentMapper;
 import com.yonge.cooleshow.mbg.model.UserOrderPayment;
 import com.yonge.cooleshow.portal.service.UserOrderPaymentService;
+import com.yonge.cooleshow.sdk.req.OrderCloseReq;
+import com.yonge.cooleshow.sdk.res.OrderCloseRes;
+import com.yonge.cooleshow.service.PaymentService;
+import com.yonge.toolset.utils.string.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
+import java.util.List;
+
 /**
  * Description
  *
@@ -20,6 +27,9 @@ public class UserOrderPaymentServiceImpl implements UserOrderPaymentService {
     @Autowired
     private UserOrderPaymentMapper userOrderPaymentMapper;
 
+    @Autowired
+    private PaymentService adapayPaymentService;
+
     @Override
     public UserOrderPayment getByTranNo(String orderNo) {
         return userOrderPaymentMapper.selectByTranNo(orderNo);
@@ -42,6 +52,48 @@ public class UserOrderPaymentServiceImpl implements UserOrderPaymentService {
     @Override
     public UserOrderPayment getByOrderNo(String orderSn, PayChannelEnum payChannel, PayStatusEnum payStatus) {
 
-        return userOrderPaymentMapper.selectByOrderNo(orderSn,payChannel.getCode(),payStatus.getCode());
+        return userOrderPaymentMapper.selectByOrderNoAndStatus(orderSn,payChannel.getCode(),payStatus.getCode());
+    }
+
+    @Override
+    public List<UserOrderPayment> getByOrderNo(String orderSn) {
+        return userOrderPaymentMapper.selectByOrderNo(orderSn);
+    }
+
+    @Override
+    public void closePayment(String orderSn, String message) {
+        UserOrderPayment orderPayment = userOrderPaymentMapper.selectByOrderNoAndStatusPaying(orderSn);
+
+        if (orderPayment != null) {
+            //更新付款单
+            orderPayment.setStatus(PayStatusEnum.failed.getCode());
+            orderPayment.setPayFailMsg(StringUtil.isEmpty(message) ? "交易取消" : message);
+            orderPayment.setUpdateTime(new Date());
+
+            //发送支付关单请求
+            if (!StringUtil.isEmpty(orderPayment.getTransNo())) {
+                OrderCloseReq orderCloseReq = new OrderCloseReq();
+                orderCloseReq.setPaymentId(orderPayment.getTransNo());
+                orderCloseReq.setReason(message);
+                OrderCloseRes closeRes = adapayPaymentService.orderClose(orderCloseReq);
+                if (!closeRes.isStatus()) {
+                    orderPayment.setCloseStatus(PayStatusEnum.failed.getCode());
+                    orderPayment.setCloseFailMsg(closeRes.getFailMsg());
+                } else {
+                    orderPayment.setCloseStatus(PayStatusEnum.pending.getCode());
+                }
+            }
+            userOrderPaymentMapper.updateByPrimaryKeySelective(orderPayment);
+        }
+    }
+
+    @Override
+    public UserOrderPayment getByOrderNoAndStatusPaying(String orderSn) {
+        return userOrderPaymentMapper.selectByOrderNoAndStatusPaying(orderSn);
+    }
+
+    @Override
+    public UserOrderPayment getByOrderNoAndStatusSucceeded(String orderSn) {
+        return userOrderPaymentMapper.selectByOrderNoAndStatusSucceeded(orderSn);
     }
 }