Browse Source

新增商品组合退款统计

大大的豆芽 1 day ago
parent
commit
b1941ce3a3

+ 2 - 33
yiqi-admin/src/main/java/com/yiqi/admin/controller/order/OrderGoodsController.java

@@ -154,45 +154,14 @@ public class OrderGoodsController extends BaseController {
         return R.ok(goodsOrderInfoVO);
     }
 
-    /**
-     * 新增零售商品订单-下单
-     */
-    @Log(title = "商品订单", businessType = BusinessType.INSERT)
-    @PostMapping("/insertRetailOrderGoods")
-    @ApiOperation(value = "新增零售商品订单-下单")
-    public R<OrderPayResultVO> insertRetailOrderGoods(@RequestBody @Valid OrderGoodsInsertDTO orderGoodsInsertDTO) {
-        OrderGoodsDTO orderGoodsDTO = new OrderGoodsDTO();
-        BeanUtils.copyProperties(orderGoodsInsertDTO, orderGoodsDTO);
-        orderGoodsDTO.setOrderSource(OrderSourceType.OFFLINE.getCode());
-        // 设置总价
-        List<OrderGoodsSkuInfoVO> orderGoodsSkuInfoVOS = orderGoodsService.getOrderSkuInfoByOrderSkuId(orderGoodsDTO);
-        BigDecimal totalPrice = orderGoodsSkuInfoVOS.stream().map(item -> item.getSalePrice().multiply(new BigDecimal(item.getBuyNum())))
-                .reduce(BigDecimal.ZERO, BigDecimal::add);
-        if (BigDecimal.ZERO.equals(totalPrice)) {
-            error("商品总价不能为0");
-        }
-        orderGoodsDTO.setTotalPrice(totalPrice);
-
-        // 设置门店线下参数
-        SysUser user = SecurityUtils.getLoginUser().getUser();
-        orderGoodsDTO.setGoodsType(orderGoodsInsertDTO.getGoodsType() == null ? GoodsType.NORMAL.getCode() : orderGoodsInsertDTO.getGoodsType());
-        orderGoodsDTO.setSourceType(user.getUserType());
-        orderGoodsDTO.setOrgId(user.getStoreId());
-        orderGoodsDTO.setSendTime(DateUtils.getNowDate());
-        orderGoodsDTO.setFinishTime(DateUtils.getNowDate());
-        if (orderGoodsDTO.getDeductAmount() == null) {
-            orderGoodsDTO.setDeductAmount(BigDecimal.ZERO);
-        }
-        return R.ok(orderGoodsService.insertRetailOrderGoods(orderGoodsDTO, orderGoodsSkuInfoVOS));
-    }
 
     /**
      * 新增零售商品订单-下单
      */
     @Log(title = "创建商品订单", businessType = BusinessType.INSERT)
-    @PostMapping("/createRetailOrderGoods")
+    @PostMapping("/insertRetailOrderGoods")
     @ApiOperation(value = "新增零售商品订单-下单")
-    public R<OrderGoods> cereateRetailOrderGoods(@RequestBody @Valid OrderGoodsInsertDTO orderGoodsInsertDTO) {
+    public R<OrderGoods> insertRetailOrderGoods(@RequestBody @Valid OrderGoodsInsertDTO orderGoodsInsertDTO) {
         OrderGoodsDTO orderGoodsDTO = new OrderGoodsDTO();
         BeanUtils.copyProperties(orderGoodsInsertDTO, orderGoodsDTO);
         orderGoodsDTO.setOrderSource(OrderSourceType.OFFLINE.getCode());

+ 20 - 22
yiqi-api/src/main/java/com/yiqi/api/controller/order/WeAppOrderGoodsController.java

@@ -21,6 +21,7 @@ import com.yiqi.common.utils.SecurityUtils;
 import com.yiqi.common.utils.bean.BeanUtils;
 import com.yiqi.order.domain.OrderGoods;
 import com.yiqi.order.domain.dto.OrderGoodsDTO;
+import com.yiqi.order.domain.dto.OrderGoodsPayDTO;
 import com.yiqi.order.domain.dto.OrderGoodsRefundDTO;
 import com.yiqi.order.domain.dto.OrderRetailGoodsSkusDTO;
 import com.yiqi.order.domain.dto.weapp.*;
@@ -88,7 +89,7 @@ public class WeAppOrderGoodsController extends BaseController {
      */
     @PostMapping("/insertOrderGoodsByAppMarket")
     @ApiOperation(value = "APP新增零售商品订单-购物车")
-    public R<OrderPayResultVO> insertOrderGoodsByAppMarket(@RequestBody @Validated AppGoodsMarketOrderDTO appGoodsMarketOrderDTO) {
+    public R<OrderGoods> insertOrderGoodsByAppMarket(@RequestBody @Validated AppGoodsMarketOrderDTO appGoodsMarketOrderDTO) {
         OrderGoodsDTO orderGoodsDTO = new OrderGoodsDTO();
         BeanUtils.copyProperties(appGoodsMarketOrderDTO, orderGoodsDTO);
         orderGoodsDTO.setOrderSource(OrderSourceType.APP.getCode());
@@ -112,14 +113,14 @@ public class WeAppOrderGoodsController extends BaseController {
 
         orderGoodsDTO.setDeductAmount(new BigDecimal(0));
 
-        OrderPayResultVO orderGoodsPayResultVO = orderGoodsService.insertRetailOrderGoods(orderGoodsDTO, orderGoodsSkuInfoVOS);
+        OrderGoods orderGoods = orderGoodsService.cereateRetailOrderGoods(orderGoodsDTO, orderGoodsSkuInfoVOS);
 
         // app清空选中购物车
         appGoodsMarketService.remove(new QueryWrapper<AppGoodsMarket>().lambda()
                 .eq(AppGoodsMarket::getAppUserId, AuthHolder.userId())
                 .eq(AppGoodsMarket::getIsSelect, SysBoolType.YES.getCode()));
 
-        return R.ok(orderGoodsPayResultVO);
+        return R.ok(orderGoods);
     }
 
     /**
@@ -128,7 +129,7 @@ public class WeAppOrderGoodsController extends BaseController {
     @Transactional(rollbackFor = RuntimeException.class)
     @PostMapping("/insertOrderOneGoodsByApp")
     @ApiOperation(value = "APP新增零售商品订单-单商品直接下单")
-    public R<OrderPayResultVO> insertOrderOneGoodsByApp(@RequestBody @Validated AppGoodsOrderDTO appGoodsOrderDTO) {
+    public R<OrderGoods> insertOrderOneGoodsByApp(@RequestBody @Validated AppGoodsOrderDTO appGoodsOrderDTO) {
         OrderGoodsDTO orderGoodsDTO = new OrderGoodsDTO();
         BeanUtils.copyProperties(appGoodsOrderDTO, orderGoodsDTO);
         orderGoodsDTO.setOrderSource(OrderSourceType.APP.getCode());
@@ -154,8 +155,8 @@ public class WeAppOrderGoodsController extends BaseController {
         }
         orderGoodsDTO.setTotalPrice(totalPrice);
         orderGoodsDTO.setDeductAmount(new BigDecimal(0));
-        OrderPayResultVO orderGoodsPayResultVO = orderGoodsService.insertRetailOrderGoods(orderGoodsDTO, orderGoodsSkuInfoVOS);
-        return R.ok(orderGoodsPayResultVO);
+        OrderGoods orderGoods = orderGoodsService.cereateRetailOrderGoods(orderGoodsDTO, orderGoodsSkuInfoVOS);
+        return R.ok(orderGoods);
     }
 
     /**
@@ -173,19 +174,16 @@ public class WeAppOrderGoodsController extends BaseController {
     }
 
     /**
-     * 零售普通商品订单-支付
+     * 新增零售商品订单-下单
      */
-    @Transactional(rollbackFor = Exception.class)
-    @PostMapping("/goodsOrderPay")
-    @ApiOperation(value = "APP零售商品订单-支付")
-    public R<OrderPayResultVO> goodsOrderPay(@RequestBody @Valid AppGoodsOrderRePayDTO appGoodsOrderRePayDTO) {
-        OrderGoodsDTO orderGoodsDTO = new OrderGoodsDTO();
-        BeanUtils.copyProperties(appGoodsOrderRePayDTO, orderGoodsDTO);
-        orderGoodsDTO.setId(appGoodsOrderRePayDTO.getOrderId());
-        orderGoodsDTO.setOrderSource(OrderSourceType.APP.getCode());
-        return R.ok(orderGoodsService.rePayOrder(orderGoodsDTO));
+    @PostMapping("/orderGoodsPay")
+    @ApiOperation(value = "新增零售商品订单-支付")
+    public R<OrderPayResultVO> orderGoodsPay(@RequestBody @Valid OrderGoodsPayDTO orderGoodsPayDTO) {
+        OrderPayResultVO resultVO = orderGoodsService.orderGoodsPay(orderGoodsPayDTO);
+        return R.ok(resultVO);
     }
 
+
     /**
      * 零售普通商品订单-取消订单
      */
@@ -202,7 +200,7 @@ public class WeAppOrderGoodsController extends BaseController {
      */
     @PostMapping("/insertOrderOneGoodsByAppLifeService")
     @ApiOperation(value = "APP生活服务商品订单-商品直接下单")
-    public R<OrderPayResultVO> insertOrderOneGoodsByAppLifeService(@RequestBody @Validated AppGoodsOrderLifeServiceDTO appGoodsOrderDTO) {
+    public R<OrderGoods> insertOrderOneGoodsByAppLifeService(@RequestBody @Validated AppGoodsOrderLifeServiceDTO appGoodsOrderDTO) {
         OrderGoodsDTO orderGoodsDTO = new OrderGoodsDTO();
         BeanUtils.copyProperties(appGoodsOrderDTO, orderGoodsDTO);
         orderGoodsDTO.setOrderSource(OrderSourceType.APP.getCode());
@@ -224,8 +222,8 @@ public class WeAppOrderGoodsController extends BaseController {
         }
         orderGoodsDTO.setTotalPrice(totalPrice);
         orderGoodsDTO.setDeductAmount(new BigDecimal(0));
-        OrderPayResultVO orderGoodsPayResultVO = orderGoodsService.insertRetailOrderGoods(orderGoodsDTO, orderGoodsSkuInfoVOS);
-        return R.ok(orderGoodsPayResultVO);
+        OrderGoods orderGoods = orderGoodsService.cereateRetailOrderGoods(orderGoodsDTO, orderGoodsSkuInfoVOS);
+        return R.ok(orderGoods);
     }
 
     /**
@@ -234,7 +232,7 @@ public class WeAppOrderGoodsController extends BaseController {
     @Transactional(rollbackFor = RuntimeException.class)
     @PostMapping("/insertOrderOneGoodsByAppCar")
     @ApiOperation(value = "APP汽车美容商品订单-商品直接下单")
-    public R<OrderPayResultVO> insertOrderOneGoodsByAppCar(@RequestBody @Validated AppGoodsOrderCarDTO appGoodsOrderDTO) {
+    public R<OrderGoods> insertOrderOneGoodsByAppCar(@RequestBody @Validated AppGoodsOrderCarDTO appGoodsOrderDTO) {
         OrderGoodsDTO orderGoodsDTO = new OrderGoodsDTO();
         BeanUtils.copyProperties(appGoodsOrderDTO, orderGoodsDTO);
         orderGoodsDTO.setOrderSource(OrderSourceType.APP.getCode());
@@ -256,8 +254,8 @@ public class WeAppOrderGoodsController extends BaseController {
         }
         orderGoodsDTO.setTotalPrice(totalPrice);
         orderGoodsDTO.setDeductAmount(new BigDecimal(0));
-        OrderPayResultVO orderGoodsPayResultVO = orderGoodsService.insertRetailOrderGoods(orderGoodsDTO, orderGoodsSkuInfoVOS);
-        return R.ok(orderGoodsPayResultVO);
+        OrderGoods orderGoods = orderGoodsService.cereateRetailOrderGoods(orderGoodsDTO, orderGoodsSkuInfoVOS);
+        return R.ok(orderGoods);
     }
 
     /**

+ 2 - 2
yiqi-common/src/main/java/com/yiqi/common/enums/GoodsType.java

@@ -3,8 +3,8 @@ package com.yiqi.common.enums;
 
 public enum GoodsType  implements CodeEnum{
 
-    NORMAL("0", "普通商品"),
-    MATERIAL("1", "材料商品"),
+    MATERIAL("0", "材料商品"),
+    NORMAL("1", "普通商品"),
     LIFE_SERVICE("2","生活服务"),
     CAR("3","汽车美容")
     ;

+ 46 - 46
yiqi-core/src/main/java/com/yiqi/core/service/impl/SettlementManageBillServiceImpl.java

@@ -318,28 +318,10 @@ public class SettlementManageBillServiceImpl extends ServiceImpl<SettlementManag
         stats.setTotalAmount(totalAmount);
 
         // 3. 支付方式统计
-        Map<String, BigDecimal> payTypeAmounts = calculateGoodsPayTypeAmounts(orderList);
-        stats.setWechatAmount(payTypeAmounts.getOrDefault("0", BigDecimal.ZERO)); // 微信
-        stats.setAlipayAmount(payTypeAmounts.getOrDefault("1", BigDecimal.ZERO)); // 支付宝
-        stats.setCashAmount(payTypeAmounts.getOrDefault("2", BigDecimal.ZERO)); // 现金
-        stats.setMemberAmount(payTypeAmounts.getOrDefault("3", BigDecimal.ZERO)); // 余额
-        stats.setUnionAmount(payTypeAmounts.getOrDefault("4", BigDecimal.ZERO)); // 银联
-        //循环获取总支付金额
-        payTypeAmounts.keySet().forEach(key -> {
-            stats.setTransactionAmount(stats.getTransactionAmount().add(payTypeAmounts.get(key)));
-        });
+        calculateGoodsPayTypeAmounts(orderList, stats);
 
         // 4. 退款方式统计
-        Map<String, BigDecimal> refundTypeAmounts = calculateGoodsRefundTypeAmounts(refundList);
-        stats.setWechatRefundAmount(refundTypeAmounts.getOrDefault("0", BigDecimal.ZERO)); // 微信
-        stats.setAlipayRefundAmount(refundTypeAmounts.getOrDefault("1", BigDecimal.ZERO)); // 支付宝
-        stats.setCashRefundAmount(refundTypeAmounts.getOrDefault("2", BigDecimal.ZERO)); // 现金
-        stats.setMemberRefundAmount(refundTypeAmounts.getOrDefault("3", BigDecimal.ZERO)); // 余额
-        stats.setUnionRefundAmount(refundTypeAmounts.getOrDefault("4", BigDecimal.ZERO)); // 银联
-        //循环获取总金额
-        refundTypeAmounts.keySet().forEach(key -> {
-            stats.setTransactionRefundAmount(stats.getTransactionRefundAmount().add(refundTypeAmounts.get(key)));
-        });
+        calculateGoodsRefundTypeAmounts(refundList, stats);
 
         // 5. 退款统计
         Map<String, BigDecimal> refundAmounts = calculateGoodsRefundAmounts(refundList);
@@ -380,20 +362,29 @@ public class SettlementManageBillServiceImpl extends ServiceImpl<SettlementManag
     /**
      * 计算商品订单支付方式金额
      */
-    private Map<String, BigDecimal> calculateGoodsPayTypeAmounts(List<OrderGoods> orderList) {
-        if (orderList == null || orderList.size() == 0) {
-            return new HashMap<>();
+    private void calculateGoodsPayTypeAmounts(List<OrderGoods> orderList, OrderStatisticsVO stats) {
+        BigDecimal wxPayAmount = BigDecimal.ZERO;
+        BigDecimal alipayAmount = BigDecimal.ZERO;
+        BigDecimal cashAmount = BigDecimal.ZERO;
+        BigDecimal memberAmount = BigDecimal.ZERO;
+        BigDecimal unionAmount = BigDecimal.ZERO;
+        BigDecimal transactionAmount = BigDecimal.ZERO;
+        for (OrderGoods order : orderList) {
+            if (PayStatus.HAS_PAY.getCode().equals(order.getPayStatus())) {
+                wxPayAmount = CurrencyUtil.add(wxPayAmount, order.getWxPayAmount());
+                alipayAmount = CurrencyUtil.add(alipayAmount, order.getAliPayAmount());
+                cashAmount = CurrencyUtil.add(cashAmount, order.getCashPayAmount());
+                memberAmount = CurrencyUtil.add(memberAmount, order.getMemberPayAmount());
+                transactionAmount = CurrencyUtil.add(transactionAmount, order.getPayAmount());
+            }
         }
-        return orderList.stream()
-                .filter(order -> PayStatus.HAS_PAY.getCode().equals(order.getPayStatus()))
-                .collect(Collectors.groupingBy(
-                        OrderGoods::getPayType,
-                        Collectors.reducing(
-                                BigDecimal.ZERO,
-                                OrderGoods::getPayAmount,
-                                BigDecimal::add
-                        )
-                ));
+
+        stats.setWechatAmount(wxPayAmount); // 微信
+        stats.setAlipayAmount(alipayAmount); // 支付宝
+        stats.setCashAmount(cashAmount); // 现金
+        stats.setMemberAmount(memberAmount); // 余额
+        stats.setUnionAmount(unionAmount); // 银联
+        stats.setTransactionAmount(transactionAmount);
     }
 
 
@@ -430,20 +421,29 @@ public class SettlementManageBillServiceImpl extends ServiceImpl<SettlementManag
     /**
      * 计算商品订单支付方式金额
      */
-    private Map<String, BigDecimal> calculateGoodsRefundTypeAmounts(List<OrderGoodsRefund> orderList) {
-        if (orderList == null || orderList.size() == 0) {
-            return new HashMap<>();
+    private void calculateGoodsRefundTypeAmounts(List<OrderGoodsRefund> orderList, OrderStatisticsVO stats) {
+        BigDecimal wxPayAmount = BigDecimal.ZERO;
+        BigDecimal alipayAmount = BigDecimal.ZERO;
+        BigDecimal cashAmount = BigDecimal.ZERO;
+        BigDecimal memberAmount = BigDecimal.ZERO;
+        BigDecimal unionAmount = BigDecimal.ZERO;
+        BigDecimal transactionAmount = BigDecimal.ZERO;
+        for (OrderGoodsRefund order : orderList) {
+            if (OrderRefundStatus.REFUND_SUCCESS.getCode().equals(order.getRefundStatus())) {
+                wxPayAmount = CurrencyUtil.add(wxPayAmount, order.getWxRefundAmount());
+                alipayAmount = CurrencyUtil.add(alipayAmount, order.getAliRefundAmount());
+                cashAmount = CurrencyUtil.add(cashAmount, order.getCashRefundAmount());
+                memberAmount = CurrencyUtil.add(memberAmount, order.getMemberRefundAmount());
+                transactionAmount = CurrencyUtil.add(transactionAmount, order.getRefundAmount());
+            }
         }
-        return orderList.stream()
-                .filter(order -> OrderRefundStatus.REFUND_SUCCESS.getCode().equals(order.getRefundStatus()))
-                .collect(Collectors.groupingBy(
-                        OrderGoodsRefund::getPayType,
-                        Collectors.reducing(
-                                BigDecimal.ZERO,
-                                OrderGoodsRefund::getRefundAmount,
-                                BigDecimal::add
-                        )
-                ));
+
+        stats.setWechatRefundAmount(wxPayAmount); // 微信
+        stats.setAlipayRefundAmount(alipayAmount); // 支付宝
+        stats.setCashRefundAmount(cashAmount); // 现金
+        stats.setMemberRefundAmount(memberAmount); // 余额
+        stats.setUnionRefundAmount(unionAmount); // 银联
+        stats.setTransactionRefundAmount(transactionAmount);
     }
 
 

+ 0 - 2
yiqi-core/src/main/java/com/yiqi/order/service/impl/OrderClothServiceImpl.java

@@ -219,7 +219,6 @@ public class OrderClothServiceImpl extends ServiceImpl<OrderClothMapper, OrderCl
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
     public R refundSuccess(String refundNo, String orderNo) {
         OrderClothRefund orderClothRefund = orderClothRefundService.getOrderClothRefundByRefundNo(refundNo);
         orderClothRefund.setRefundStatus(OrderRefundStatus.REFUND_SUCCESS.getCode());
@@ -569,7 +568,6 @@ public class OrderClothServiceImpl extends ServiceImpl<OrderClothMapper, OrderCl
                     baseMapper.updateById(orderCloth);
                 }
             }
-
         }
     }
 

+ 90 - 15
yiqi-core/src/main/java/com/yiqi/order/service/impl/OrderGoodsServiceImpl.java

@@ -324,7 +324,7 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
         }
         //会员余额支付
         if (orderGoods.getPayType().equals(PayType.BALANCE.getCode())) {
-            RechargeCardPayDTO rechargeCardPayDTO = new RechargeCardPayDTO(orderGoods.getAppUserId(), orderGoods.getId(), orderGoods.getSourceType(), orderGoods.getOrgId(), orderGoods.getOrderNo(), orderGoods.getPayAmount(), OrderType.goods.getCode());
+            RechargeCardPayDTO rechargeCardPayDTO = new RechargeCardPayDTO(orderGoods.getAppUserId(), orderGoods.getId(), orderGoods.getSourceType(), orderGoods.getOrgId(), orderGoods.getOrderNo(), orderGoods.getPayAmount(), orderGoods.getGoodsType());
             rechargePasswordCardService.orderPayByBalance(rechargeCardPayDTO);
             this.handlePaySuccessUpdateOrderStatus(orderGoods.getOrderNo(), null);
             orderPayResultVO = OrderPayResultVO.paySuccess(orderGoods.getOrderNo());
@@ -371,10 +371,32 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
                 break;
             }
         }
+        if (orderGoods.getPayType().equals(PayType.CASH.getCode())) {
+            orderGoods.setCashPayAmount(orderGoods.getPayAmount());
+        } else if (orderGoods.getPayType().equals(PayType.BALANCE.getCode())) {
+            orderGoods.setMemberPayAmount(orderGoods.getPayAmount());
+        } else if (orderGoods.getPayType().equals(PayType.WECHAT.getCode())) {
+            orderGoods.setWxPayAmount(orderGoods.getPayAmount());
+        } else if (orderGoods.getPayType().equals(PayType.ALIPAY.getCode())) {
+            orderGoods.setAliPayAmount(orderGoods.getPayAmount());
+        }
         orderGoods.setPayStatus(PayStatus.HAS_PAY.getCode());
         orderGoods.setPayTime(DateUtils.getNowDate());
         orderGoods.buildUpdateData();
         this.updateById(orderGoods);
+        //如果是组合支付,则扣除会员余额
+        if (orderGoods.getPayType().equals(PayType.COMBINE.getCode())) {
+            if (orderGoods.getMemberPayAmount().compareTo(BigDecimal.ZERO) > 0) {
+                //如果支付金额大于0,则扣除会员余额
+                /**
+                 *     goods("1", "商品订单"),
+                 *     life("2", "生活服务"),
+                 *     car("3", "汽车美容"),*
+                 */
+                RechargeCardPayDTO rechargeCardPayDTO = new RechargeCardPayDTO(orderGoods.getAppUserId(), orderGoods.getId(), orderGoods.getSourceType(), orderGoods.getOrgId(), orderGoods.getOrderNo(), orderGoods.getMemberPayAmount(), orderGoods.getGoodsType());
+                rechargePasswordCardService.orderPayByBalance(rechargeCardPayDTO);
+            }
+        }
         // 减库存
         List<OrderGoodsSku> orderGoodsSkus = this.handleMinusStock(orderGoods);
         //  出库记录
@@ -502,9 +524,14 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
         if (!orderGoods.getOrderStatus().equals(OrderGoodsStatusType.NO_PAY.getCode())) {
             throw new ServiceException("订单状态不正确支付");
         }
+        orderGoods.setMemberPayAmount(BigDecimal.ZERO);
+        orderGoods.setCashPayAmount(BigDecimal.ZERO);
+        orderGoods.setWxPayAmount(BigDecimal.ZERO);
+        orderGoods.setAliPayAmount(BigDecimal.ZERO);
         OrderPayResultVO orderPayResultVO = new OrderPayResultVO();
         if (orderGoods.getPayType().equals(PayType.CASH.getCode()) && OrderSourceType.OFFLINE.getCode().equals(orderGoods.getOrderSource())) {
             orderGoods.setPayType(PayType.CASH.getCode());
+            this.updateById(orderGoods);
             this.handlePaySuccessUpdateOrderStatus(orderGoods.getOrderNo(), null);
             orderPayResultVO = OrderPayResultVO.paySuccess(orderGoods.getOrderNo());
             orderPayResultVO.setOrderId(orderGoods.getId());
@@ -530,7 +557,9 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
         }
         //会员余额支付
         if (orderGoods.getPayType().equals(PayType.BALANCE.getCode())) {
-            RechargeCardPayDTO rechargeCardPayDTO = new RechargeCardPayDTO(orderGoods.getAppUserId(), orderGoods.getId(), orderGoods.getSourceType(), orderGoods.getOrgId(), orderGoods.getOrderNo(), orderGoods.getPayAmount(), OrderType.goods.getCode());
+            orderGoods.setPayType(PayType.BALANCE.getCode());
+            this.updateById(orderGoods);
+            RechargeCardPayDTO rechargeCardPayDTO = new RechargeCardPayDTO(orderGoods.getAppUserId(), orderGoods.getId(), orderGoods.getSourceType(), orderGoods.getOrgId(), orderGoods.getOrderNo(), orderGoods.getPayAmount(), orderGoods.getGoodsType());
             rechargePasswordCardService.orderPayByBalance(rechargeCardPayDTO);
             this.handlePaySuccessUpdateOrderStatus(orderGoods.getOrderNo(), null);
             orderPayResultVO = OrderPayResultVO.paySuccess(orderGoods.getOrderNo());
@@ -539,6 +568,8 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
         }
         //微信或者支付宝小程序支付
         if (orderGoods.getPayType().equals(PayType.WECHAT.getCode()) || orderGoods.getPayType().equals(PayType.ALIPAY.getCode())) {
+            orderGoods.setPayType(orderGoods.getPayType());
+            this.updateById(orderGoods);
             orderPayResultVO.setAppPayRespVO(payService.appPay(PayOrderAppDTO.buildGoodsOrderPayData(orderGoods, orderGoodsPayDTO.getOrderSource())));
             orderPayResultVO.setPayResult(100);
             return orderPayResultVO;
@@ -556,6 +587,7 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
             }
             if (otherPayType.equals(PayType.CASH.getCode())) {
                 orderGoods.setCashPayAmount(CurrencyUtil.sub(orderGoodsPayDTO.getPayAmount(), orderGoodsPayDTO.getMemberPayAmount()));
+                this.updateById(orderGoods);
                 this.handlePaySuccessUpdateOrderStatus(orderGoods.getOrderNo(), null);
                 orderPayResultVO = OrderPayResultVO.paySuccess(orderGoods.getOrderNo());
                 orderPayResultVO.setOrderId(orderGoods.getId());
@@ -714,7 +746,7 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
         }
         // 超过3个月不能退单
         if ((DateUtils.getNowDate().compareTo(DateUtils.addMonths(orderGoods.getCreateTime(), 3))) > 0) {
-            throw new GlobalException("订单已经超过退单时间,不能操作退单");
+            throw new GlobalException("订单已经超过3个月时间,不能操作退单");
         }
         if (OrderGoodsStatusType.NO_PAY.getCode().equals(orderGoods.getOrderStatus())) {
             throw new GlobalException("订单未支付,不能操作退单");
@@ -734,6 +766,10 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
         orderGoodsRefund.setRefundNo(orderNoUtils.getGoodsOrderNo());
         orderGoodsRefund.setGoodsType(orderGoods.getGoodsType());
         orderGoodsRefund.setRefundAmount(orderGoods.getRefundAmount());
+        orderGoodsRefund.setAliRefundAmount(orderGoods.getAliPayAmount());
+        orderGoodsRefund.setCashRefundAmount(orderGoods.getCashPayAmount());
+        orderGoodsRefund.setWxRefundAmount(orderGoods.getWxPayAmount());
+        orderGoodsRefund.setMemberRefundAmount(orderGoods.getMemberPayAmount());
         orderGoodsRefund.setRefundApplyTime(DateUtils.getNowDate());
         orderGoodsRefund.setRefundReason(orderGoodsRefundDTO.getRefundReason());
         orderGoodsRefund.setRefundStatus(OrderRefundStatus.REFUND_APPLYING.getCode());
@@ -768,24 +804,52 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
                 //暂不执行
                 delayQueueCache.addDelayJob(delayMessage, RefundQueryTimesEnum.getDelayTime(delayMessage.getPollingNum()));
             }
-
         }
-
-//        // 退款内容
-//        appUserBillMstrService.refundRecord(ConsumeOrderDTO.buildOrderGoodsRefundData(orderGoods), new RefundBaseDTO(orderNoUtils.getGoodsOrderNo()));
+        //组合退款
+        if (orderGoods.getPayType().equals(PayType.COMBINE.getCode())) {
+            if (orderGoodsRefund.getCashRefundAmount().compareTo(BigDecimal.ZERO) > 0) {
+                //退款成功
+                refundSuccess(orderGoodsRefund.getRefundNo(), orderGoodsRefund.getOrderNo());
+            }
+            if (orderGoodsRefund.getWxRefundAmount().compareTo(BigDecimal.ZERO) > 0 || orderGoodsRefund.getAliRefundAmount().compareTo(BigDecimal.ZERO) > 0) {
+                //执行微信退款逻辑
+                BigDecimal refundAmount = orderGoodsRefund.getWxRefundAmount().add(orderGoodsRefund.getAliRefundAmount());
+                String payType = orderGoodsRefund.getWxRefundAmount().compareTo(BigDecimal.ZERO) > 0 ? PayType.WECHAT.getCode() : PayType.ALIPAY.getCode();
+                PayRefundDTO payRefundDTO = new PayRefundDTO(payType, orderGoods.getOrderNo(), refundAmount, orderGoodsRefund.getRefundNo(), orderGoods.getOutTradeOrderNo(), orderGoodsRefundDTO.getRefundReason());
+                payRefundDTO.setTotalAmount(refundAmount);
+                payRefundDTO.setStoreId(orderGoods.getOrgId());
+                RefundResponseDTO refundResponse = payService.refundApply(payRefundDTO);
+                if (refundResponse.getRefundResult().equals(PayResult.fail.getCode())) {
+                    orderGoodsRefund.setRefundStatus(OrderRefundStatus.ERROR.getCode());
+                    orderGoodsRefund.setRemark(refundResponse.getPayMsg());
+                    orderGoodsRefundService.updateById(orderGoodsRefund);
+                    orderGoods.setRefundStatus(OrderRefundStatus.ERROR.getCode());
+                    baseMapper.updateById(orderGoods);
+                }
+            }
+        }
         return 1;
     }
 
     @Override
     public R refundSuccess(String refundNo, String orderNo) {
-        if (StrUtil.isNotBlank(refundNo)) {
-            OrderGoodsRefund orderGoodsRefund = orderGoodsRefundService.getOrderClothRefundByRefundNo(refundNo);
-            orderGoodsRefund.setRefundStatus(OrderRefundStatus.REFUND_SUCCESS.getCode());
-            orderGoodsRefund.setRefundTime(DateUtils.getNowDate());
-            orderGoodsRefundService.updateById(orderGoodsRefund);
-            if (orderNo == null) {
-                orderNo = orderGoodsRefund.getOrderNo();
-            }
+        OrderGoodsRefund orderGoodsRefund = orderGoodsRefundService.getOrderClothRefundByRefundNo(refundNo);
+        orderGoodsRefund.setRefundStatus(OrderRefundStatus.REFUND_SUCCESS.getCode());
+        orderGoodsRefund.setRefundTime(DateUtils.getNowDate());
+
+        if (orderGoodsRefund.getPayType().equals(PayType.CASH.getCode())) {
+            orderGoodsRefund.setCashRefundAmount(orderGoodsRefund.getRefundAmount());
+        } else if (orderGoodsRefund.getPayType().equals(PayType.BALANCE.getCode())) {
+            orderGoodsRefund.setMemberRefundAmount(orderGoodsRefund.getRefundAmount());
+        } else if (orderGoodsRefund.getPayType().equals(PayType.WECHAT.getCode())) {
+            orderGoodsRefund.setWxRefundAmount(orderGoodsRefund.getRefundAmount());
+        } else if (orderGoodsRefund.getPayType().equals(PayType.ALIPAY.getCode())) {
+            orderGoodsRefund.setAliRefundAmount(orderGoodsRefund.getRefundAmount());
+        }
+
+        orderGoodsRefundService.updateById(orderGoodsRefund);
+        if (orderNo == null) {
+            orderNo = orderGoodsRefund.getOrderNo();
         }
 
         OrderGoods orderGoods = this.getOne(new QueryWrapper<OrderGoods>().lambda().eq(OrderGoods::getOrderNo, orderNo));
@@ -806,6 +870,17 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
         orderGoods.setRefundStatus(OrderRefundStatus.REFUND_SUCCESS.getCode());
         baseMapper.updateById(orderGoods);
 
+        //如果是组合支付,退会员余额
+        if (orderGoods.getPayType().equals(PayType.COMBINE.getCode())) {
+            if (orderGoodsRefund.getMemberRefundAmount().compareTo(BigDecimal.ZERO) > 0) {
+                //如果支付金额大于0,则扣除会员余额
+                Boolean res = rechargePasswordCardService.orderRefundByBalance(orderGoodsRefund.getOrderNo(), orderGoodsRefund.getMemberRefundAmount());
+                if (res) {
+                    throw new ServiceException("会员余额退款失败");
+                }
+            }
+        }
+
         // 处理销量 - 扣商品销量
         List<OrderGoodsSku> list = orderGoodsSkuService.list(new QueryWrapper<OrderGoodsSku>().lambda().eq(OrderGoodsSku::getOrderId, orderGoods.getId()));
         if (CollUtil.isNotEmpty(list)) {