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 |   30 ++++++++++++++++++++++++------
 1 files changed, 24 insertions(+), 6 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 daf9c9a..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
@@ -202,7 +202,7 @@
      */
     private boolean isGiftMoneyPay(SysOrder order) {
         BusParameterSettings giftiIsfree = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.SHOP_MANAGE_GIFTISFREE, order.getCompanyId());
-        if (giftiIsfree.getParamValue().equals("是")) {
+        if (BooleanEnum.TRUE.getValue() == giftiIsfree.getIntParamValue()) {
             return order.getFlows().stream().allMatch(item -> SysOrderFlow.IS_GIFT_Y.equals(item.getIsGift())
                     && item.getAmount().doubleValue() > 0D);
         } else {
@@ -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("无效的储值卡支付方式");
@@ -349,7 +359,7 @@
 
         BusParameterSettings manageStockSetting = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WAREHOUSE_MANAGE_STOCK, order.getCompanyId());
 //        if (AppConstance.IS_Y.equals(manageStockSetting.getParamValue())) {
-        if (BooleanEnum.TRUE.getValue().equals(manageStockSetting.getParamValue())) {
+        if (BooleanEnum.TRUE.getValue() == manageStockSetting.getIntParamValue()) {
 
             List<SysOutStoreItem> storeItemList = new ArrayList<>();
 
@@ -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