From 60da6176964cb65963bd15e8a00772cc33efbf1a Mon Sep 17 00:00:00 2001
From: wzy <wzy19931122ai@163.com>
Date: Fri, 07 Oct 2022 16:04:32 +0800
Subject: [PATCH] 修改退款时无法退款到储值卡的bug

---
 zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceHelper.java |   26 ++++++++++++++++++++++----
 1 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceHelper.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceHelper.java
index 95207fe..bc75ac4 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceHelper.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceHelper.java
@@ -263,12 +263,19 @@
     /**
      * 储值卡退款
      * @param order
+     * @param isWholeOrder 是否整个订单退款
      */
-    public void returnMoneyCardPay(SysOrder order) {
+    public void returnMoneyCardPay(SysOrder order, boolean isWholeOrder) {
         SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
         List<MoneyCardOperationDto> moneyCardOperationDtos = Lists.newArrayList();
 
-        List<SysOrderFlow> flows = sysOrderFlowDao.selectByOrderId(order.getId());
+        List<SysOrderFlow> flows = null;
+        if (isWholeOrder) {
+            flows = sysOrderFlowDao.selectByOrderId(order.getId());
+        } else {
+            flows = order.getFlows();
+        }
+
         // 非现金收款退回扣卡余额
         for (SysOrderFlow flow : flows) {
             if (SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) {
@@ -280,11 +287,14 @@
                     dto.setCarUseId(flow.getCardId());
                     dto.setType(MoneyCardUseFlow.USE_TYPE_ORDRE_CANCEL);
                     if (SysOrderFlow.IS_GIFT_Y.equals(flow.getIsGift())) {
-                        dto.setGiftMoney(flow.getAmount().doubleValue());
+                        dto.setGiftMoney(flow.getAmount().abs().doubleValue());
                     } else {
-                        dto.setRealMoney(flow.getAmount().doubleValue());
+                        dto.setRealMoney(flow.getAmount().abs().doubleValue());
                     }
                     dto.setUpdateUser(user.getSuId());
+
+                    // 用于通过校验
+                    dto.setOrderItemId(-1L);
                     moneyCardOperationDtos.add(dto);
                 } else {
                     throw new GlobleException("无效的储值卡支付方式");
@@ -628,11 +638,19 @@
         for (SysOrderItem item : sysOrder.getItems()) {
             ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(item.getGoodsId());
             item.setType(shoppingGoods.getGoodType());
+            if (item.getZkPrice() == null) {
+                item.setZkPrice(shoppingGoods.getSealPice());
+            }
+
             if (item.getZkPrice() == 0) {
                 item.setIsFree(Dictionary.FLAG_YES);
             }
             Double itemZkTotal = MoneyUtil.mul(item.getZkPrice(), Double.valueOf(item.getCount()));
             zkTotal = MoneyUtil.add(zkTotal, itemZkTotal);
+
+            if (item.getPrice() == null) {
+                item.setPrice(shoppingGoods.getSealPice());
+            }
             item.setStatus(Dictionary.ORDER_STATU_DFK);
             item.setRefundCount(0);
         }

--
Gitblit v1.9.1