Kaynağa Gözat

适配订单支付0元

wangzhengliang 3 yıl önce
ebeveyn
işleme
139a295a56

+ 36 - 16
src/main/java/com/chuanghai/ihotel/service/impl/HotelOrderServiceImpl.java

@@ -325,8 +325,12 @@ public class HotelOrderServiceImpl extends ServiceImpl<HotelOrderDao, HotelOrder
         rabbitTemplate.convertAndSend(rabbitMQConfig.getOrderEventExchange(), rabbitMQConfig.getOrderCloseDelayRoutingKey(), eventMessage);
 
         // 返回支付参数
-        String payUrl = String.format(jxnxsPayConfig.getPayUrl(), hotelOrder.getId(), request.getPayAmount());
-        return OrderSubmitVO.builder().orderId(hotelOrder.getId()).payUrl(payUrl).build();
+        String payUrl = null;
+        if (totalAmount.doubleValue() > 0) {
+            payUrl = String.format(jxnxsPayConfig.getPayUrl(), hotelOrder.getId(), request.getPayAmount());
+        }
+
+        return OrderSubmitVO.builder().orderId(hotelOrder.getId()).payAmount(totalAmount).payUrl(payUrl).build();
     }
 
     @Override
@@ -543,18 +547,24 @@ public class HotelOrderServiceImpl extends ServiceImpl<HotelOrderDao, HotelOrder
         }
 
         // 结算订单
-        BillHandleResultDTO billHandleResult = orderBillService.calcBill(orderId);
+        BigDecimal payAmount = order.getPayAmount();
+
         String orderStatu = OrderStatuEnum.WAIT_BILL.getCode();
-        if ("1".equals(billHandleResult.getResultFlag())) { // 待退款
-            if (billHandleResult.getReturnFee().doubleValue() > 0) {
-                // TODO 发起退款
-            } else {
-                // 自动完结订单
-                orderStatu = OrderStatuEnum.FINISH.getCode();
+        BillHandleResultDTO billHandleResult = orderBillService.calcBill(orderId);
+        if (payAmount.doubleValue() == 0) { // 实际支付金额为0,表明不需要支付
+            // 自动完结订单
+            orderStatu = OrderStatuEnum.FINISH.getCode();
+        } else {
+            if ("1".equals(billHandleResult.getResultFlag())) { // 待退款
+                if (billHandleResult.getReturnFee().doubleValue() > 0) {
+                    // TODO 发起退款
+                } else {
+                    // 自动完结订单
+                    orderStatu = OrderStatuEnum.FINISH.getCode();
+                }
             }
         }
 
-
         // 密码锁密码删除
         roomDoorLockDataService.deleteByOrderId(orderId);
 
@@ -571,9 +581,13 @@ public class HotelOrderServiceImpl extends ServiceImpl<HotelOrderDao, HotelOrder
         OrderBillHandleVO vo = new OrderBillHandleVO();
         vo.setOrderId(orderId);
         vo.setBillId(billHandleResult.getBillId());
-        vo.setFlag(billHandleResult.getResultFlag());
-        vo.setRefundFee(billHandleResult.getReturnFee());
-        vo.setSupperFee(billHandleResult.getRealFee());
+        if (OrderStatuEnum.FINISH.getCode().equals(orderStatu)) {
+            vo.setFlag("3");
+        } else {
+            vo.setFlag(billHandleResult.getResultFlag());
+            vo.setRefundFee(billHandleResult.getReturnFee());
+            vo.setSupperFee(billHandleResult.getRealFee());
+        }
 
         return vo;
     }
@@ -603,12 +617,18 @@ public class HotelOrderServiceImpl extends ServiceImpl<HotelOrderDao, HotelOrder
             orderEntityList.forEach(order -> {
                 Long orderId = order.getId();
                 // 结算订单
-                BillHandleResultDTO billHandleResult = orderBillService.calcBill(orderId);
-                if ("1".equals(billHandleResult.getResultFlag()) && billHandleResult.getReturnFee().doubleValue() == 0) { // 待退款
+                BigDecimal payAmount = order.getPayAmount();
+                if (payAmount.doubleValue() == 0) {
                     finishOrderIdList.add(orderId);
                 } else {
-                    waitBillOrderIdList.add(orderId);
+                    BillHandleResultDTO billHandleResult = orderBillService.calcBill(orderId);
+                    if ("1".equals(billHandleResult.getResultFlag()) && billHandleResult.getReturnFee().doubleValue() == 0) { // 待退款
+                        finishOrderIdList.add(orderId);
+                    } else {
+                        waitBillOrderIdList.add(orderId);
+                    }
                 }
+
                 // 密码锁密码删除
                 roomDoorLockDataService.deleteByOrderId(orderId);
                 // 更新房态状态

+ 1 - 1
src/main/java/com/chuanghai/ihotel/vo/OrderBillHandleVO.java

@@ -24,7 +24,7 @@ public class OrderBillHandleVO {
     @JsonFormat(shape = JsonFormat.Shape.STRING)
     private Long billId;
     /**
-     * 处理标识 1待退款、2待补缴
+     * 处理标识 1待退款、2待补缴、3订单完结
      */
     private String flag;
     /**

+ 6 - 0
src/main/java/com/chuanghai/ihotel/vo/OrderSubmitVO.java

@@ -4,6 +4,8 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Builder;
 import lombok.Data;
 
+import java.math.BigDecimal;
+
 /**
  * @Author: codingliang
  * @Description: 订单提交vo
@@ -20,6 +22,10 @@ public class OrderSubmitVO {
     @JsonFormat(shape = JsonFormat.Shape.STRING)
     private Long orderId;
     /**
+     * 实际支付金额,如果实际支付金额为0,则不需要调用支付接口,直接跳转到支付成功页面
+     */
+    private BigDecimal payAmount;
+    /**
      * 支付地址
      */
     private String payUrl;