From fbfd01086ad9dc0c710ebc3eee3bdf5499a07091 Mon Sep 17 00:00:00 2001
From: JiangYouYao <ak473600000>
Date: Fri, 18 Mar 2022 09:33:23 +0800
Subject: [PATCH] 重构:订单取消逻辑

---
 zq-erp/src/main/java/com/matrix/system/hive/service/imp/MoneyCardUseServiceImpl.java |  184 +++++++++++++++++++++++++++++----------------
 1 files changed, 119 insertions(+), 65 deletions(-)

diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/MoneyCardUseServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/MoneyCardUseServiceImpl.java
index a1b5de0..40b1c48 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/MoneyCardUseServiceImpl.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/MoneyCardUseServiceImpl.java
@@ -1,11 +1,13 @@
 package com.matrix.system.hive.service.imp;
 
 import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.matrix.core.exception.GlobleException;
 import com.matrix.core.pojo.PaginationVO;
 import com.matrix.core.pojo.VerificationResult;
 import com.matrix.core.tools.DateUtil;
+import com.matrix.core.tools.LogUtil;
 import com.matrix.system.common.validate.ParameterValidate;
 import com.matrix.system.common.validate.group.Group;
 import com.matrix.system.constance.Dictionary;
@@ -16,7 +18,6 @@
 import com.matrix.system.hive.plugin.util.MoneyUtil;
 import com.matrix.system.hive.service.MoneyCardUseService;
 import com.matrix.system.hive.service.ShoppingGoodsService;
-import com.matrix.system.hive.validation.ProjUseGroup;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -63,7 +64,7 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void addVipMoneyCard(List<MoneyCardOperationDto> moneyCardOperationDtos) {
-        moneyCardOperationDtos.forEach(dto->{
+        moneyCardOperationDtos.forEach(dto -> {
             //参数校验
             ParameterValidate.ValidResult baseIdResult = ParameterValidate.validateBean(dto, Group.ADD.class);
             if (baseIdResult.hasErrors()) {
@@ -71,7 +72,7 @@
             }
             ShoppingGoods moneyCar = shoppingGoodsDao.selectById(dto.getGoodsId());
             MoneyCardUse moneyCardUse = new MoneyCardUse();
-            BeanUtil.copyProperties(dto,moneyCardUse);
+            BeanUtil.copyProperties(dto, moneyCardUse);
             moneyCardUse.setVipId(dto.getVipId());
             moneyCardUse.setGiftMoney(moneyCar.getReferencePice());
             moneyCardUse.setRealMoney(moneyCar.getSealPice());
@@ -93,84 +94,137 @@
             moneyCardUseDao.insert(moneyCardUse);
 
         });
+    }
 
-
-
-
-
+    @Override
+    public void deleteByOrderItemId(Long id) {
+        MoneyCardUseFlow  moneyCardUseFlow=new MoneyCardUseFlow();
+        moneyCardUseFlow.setCarUseId(id);
+        int i = moneyCardUseFlowDao.selectTotalRecord(moneyCardUseFlow);
+        if(i>0){
+            MoneyCardUse one = getOne(lambdaQuery().eq(MoneyCardUse::getOrderItemId,id));
+            throw new GlobleException(one.getCardName()+"储值卡已经被启用无法删除");
+        }else {
+            moneyCardUseDao.deleteByOrderItemId(id);
+        }
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void changeMoneyCard(List<MoneyCardPayDto> moneyCardPayDtoList) {
-
-        // 判断商品是否在充值卡的限制购买
-        moneyCardPayDtoList.forEach(cardUse -> {
-            VerificationResult verificationResult = checkIsBangding(cardUse.getCarUseId(), cardUse.getGoodsIds());
-            if (!verificationResult.isJudgeResult()) {
-                throw new GlobleException(verificationResult.getMsg());
-            }
-        });
-
-
         moneyCardPayDtoList.forEach(moneyCardPayDto -> {
-            MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(moneyCardPayDto.getCarUseId());
-            MoneyCardUseFlow moneyCardUseFlow = new MoneyCardUseFlow();
-            if (Objects.nonNull(moneyCardPayDto.getGiftMoney()) && moneyCardPayDto.getGiftMoney()>0) {
-                if (moneyCardUse.getGiftMoney() >= moneyCardPayDto.getGiftMoney()) {
-                    double surplus = MoneyUtil.sub(moneyCardUse.getGiftMoney(), moneyCardPayDto.getGiftMoney());
-                    moneyCardUse.setGiftMoney(surplus);
-                    moneyCardUseFlow.setGiftMoney(0D - moneyCardPayDto.getGiftMoney());
-                } else {
-                    throw new GlobleException(moneyCardUse.getCardName() + "余额不足");
-                }
-            } else {
-                if (moneyCardUse.getRealMoney() >= moneyCardPayDto.getRealMoney()) {
-                    double surplus = MoneyUtil.sub(moneyCardUse.getRealMoney(),  moneyCardPayDto.getRealMoney());
-                    moneyCardUse.setRealMoney(surplus);
-                    moneyCardUseFlow.setTotal(0 -  moneyCardPayDto.getRealMoney());
-                } else {
-                    throw new GlobleException(moneyCardUse.getCardName() + "余额不足");
-                }
+            if (MoneyCardUseFlow.USE_TYPE_CONSUMER.equals(moneyCardPayDto.getType())) {
+                //扣减储值卡余额
+                deductMoneyCard(moneyCardPayDto);
+            } else if (MoneyCardUseFlow.USE_TYPE_ORDRE_CANCEL.equals(moneyCardPayDto.getType())) {
+                //回退储值卡余额
+                returnMoneyCard(moneyCardPayDto);
             }
-
-            if (moneyCardUse.getIsVipCar().equals(Dictionary.FLAG_NO_N)) {
-                //余额为0时充值卡变为无效
-                if (moneyCardUse.getRealMoney().equals(0D) && moneyCardUse.getGiftMoney().equals(0D)) {
-                    moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y);
-                    moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_WX);
-                }
-            }
-
-            ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(moneyCardUse.getGoodsId());
-            if (shoppingGoods != null) {
-                Date invalidTime = shoppingGoodsService.calInvalidTime(shoppingGoods, 2, moneyCardUse.getFailTime());
-                moneyCardUse.setFailTime(invalidTime);
-            }
-
-            moneyCardUse.setLastCount(moneyCardUse.getLastCount() - moneyCardPayDto.getCount());
-
-            // 更新充值卡信息
-            moneyCardUseDao.update(moneyCardUse);
-            //设置卡项使用流水
-            moneyCardUseFlow.setCarUseId(moneyCardUse.getId());
-            moneyCardUseFlow.setOrderNo(moneyCardPayDto.getOrderNo());
-            moneyCardUseFlow.setVipId(moneyCardUse.getVipId());
-            moneyCardUseFlow.setTimes(-1);
-            moneyCardUseFlow.setType(moneyCardPayDto.getType());
-            moneyCardUseFlow.setCreateTime(new Date());
-            moneyCardUseFlow.setOperationId(moneyCardPayDto.getUpdateUser());
-            moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney() + moneyCardUse.getRealMoney());
-            moneyCardUseFlowDao.insert(moneyCardUseFlow);
         });
+    }
+
+    /**
+     * 回退储值卡余额
+     *
+     * @param moneyCardPayDto
+     */
+    private void returnMoneyCard(MoneyCardPayDto moneyCardPayDto) {
+        LogUtil.info("回退储值卡余额 {}", JSON.toJSONString(moneyCardPayDto));
+        MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(moneyCardPayDto.getCarUseId());
+        MoneyCardUseFlow moneyCardUseFlow = new MoneyCardUseFlow();
+
+        if (Objects.nonNull(moneyCardPayDto.getGiftMoney())) {
+            //jyytodo 余额余次的修改和新增在数据库层面做加减
+            moneyCardUse.setGiftMoney(moneyCardUse.getGiftMoney() + moneyCardPayDto.getGiftMoney());
+        }
+        if (Objects.nonNull(moneyCardPayDto.getRealMoney())) {
+            moneyCardUse.setRealMoney(moneyCardUse.getRealMoney() + moneyCardPayDto.getRealMoney());
+        }
+        moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y);
+        moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX);
+        moneyCardUseDao.update(moneyCardUse);
 
 
+        //设置卡项使用流水
+        moneyCardUseFlow.setCarUseId(moneyCardUse.getId());
+        moneyCardUseFlow.setOrderNo(moneyCardPayDto.getOrderNo());
+        moneyCardUseFlow.setVipId(moneyCardUse.getVipId());
+        moneyCardUseFlow.setTimes(moneyCardUse.getLastCount());
+        moneyCardUseFlow.setType(moneyCardPayDto.getType());
+        moneyCardUseFlow.setCreateTime(new Date());
+        moneyCardUseFlow.setOperationId(moneyCardPayDto.getUpdateUser());
+        moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney() + moneyCardUse.getRealMoney());
+        moneyCardUseFlowDao.insert(moneyCardUseFlow);
+    }
+
+    /**
+     * 扣减储值余额
+     *
+     * @param moneyCardPayDto
+     */
+    private void deductMoneyCard(MoneyCardPayDto moneyCardPayDto) {
+        // 判断商品是否在充值卡的限制购买
+        VerificationResult verificationResult = checkIsBangding(moneyCardPayDto.getCarUseId(), moneyCardPayDto.getGoodsIds());
+        if (!verificationResult.isJudgeResult()) {
+            throw new GlobleException(verificationResult.getMsg());
+        }
+        LogUtil.info("扣减储值卡余额 {}", JSON.toJSONString(moneyCardPayDto));
+        MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(moneyCardPayDto.getCarUseId());
+        MoneyCardUseFlow moneyCardUseFlow = new MoneyCardUseFlow();
+        if (Objects.nonNull(moneyCardPayDto.getGiftMoney()) && moneyCardPayDto.getGiftMoney() > 0) {
+            if (moneyCardUse.getGiftMoney() >= moneyCardPayDto.getGiftMoney()) {
+                double surplus = MoneyUtil.sub(moneyCardUse.getGiftMoney(), moneyCardPayDto.getGiftMoney());
+                moneyCardUse.setGiftMoney(surplus);
+                moneyCardUseFlow.setGiftMoney(0D - moneyCardPayDto.getGiftMoney());
+            } else {
+                throw new GlobleException(moneyCardUse.getCardName() + "余额不足");
+            }
+        } else {
+            if (moneyCardUse.getRealMoney() >= moneyCardPayDto.getRealMoney()) {
+                double surplus = MoneyUtil.sub(moneyCardUse.getRealMoney(), moneyCardPayDto.getRealMoney());
+                moneyCardUse.setRealMoney(surplus);
+                moneyCardUseFlow.setTotal(0 - moneyCardPayDto.getRealMoney());
+            } else {
+                throw new GlobleException(moneyCardUse.getCardName() + "余额不足");
+            }
+        }
+
+        if (moneyCardUse.getIsVipCar().equals(Dictionary.FLAG_NO_N)) {
+            //余额为0时充值卡变为无效
+            if (moneyCardUse.getRealMoney().equals(0D) && moneyCardUse.getGiftMoney().equals(0D)) {
+                moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y);
+                moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_WX);
+            }
+        }
+
+        ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(moneyCardUse.getGoodsId());
+        if (shoppingGoods != null) {
+            Date invalidTime = shoppingGoodsService.calInvalidTime(shoppingGoods, 2, moneyCardUse.getFailTime());
+            moneyCardUse.setFailTime(invalidTime);
+        }
+
+        moneyCardUse.setLastCount(moneyCardUse.getLastCount() - moneyCardPayDto.getCount());
+
+        // 更新充值卡信息
+        moneyCardUseDao.update(moneyCardUse);
+
+        //设置卡项使用流水
+        moneyCardUseFlow.setCarUseId(moneyCardUse.getId());
+        moneyCardUseFlow.setOrderNo(moneyCardPayDto.getOrderNo());
+        moneyCardUseFlow.setVipId(moneyCardUse.getVipId());
+        moneyCardUseFlow.setTimes(moneyCardUse.getLastCount());
+        moneyCardUseFlow.setType(moneyCardPayDto.getType());
+        moneyCardUseFlow.setCreateTime(new Date());
+        moneyCardUseFlow.setOperationId(moneyCardPayDto.getUpdateUser());
+        moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney() + moneyCardUse.getRealMoney());
+        moneyCardUseFlowDao.insert(moneyCardUseFlow);
     }
 
     /**
      * 检查商品是否在储值卡的消费范围内
+     *
      * @param moneyCardUseId 储值卡id
-     * @param goodsIds  商品id集合
+     * @param goodsIds       商品id集合
      * @return
      */
     private VerificationResult checkIsBangding(Long moneyCardUseId, List<Long> goodsIds) {

--
Gitblit v1.9.1