From e23c8975e6bb0934cb5db46a94d0f83c9739d9ab Mon Sep 17 00:00:00 2001
From: 935090232@qq.com <ak473600000>
Date: Sun, 20 Mar 2022 16:33:17 +0800
Subject: [PATCH] 重构:套餐项目

---
 zq-erp/src/main/java/com/matrix/system/hive/service/imp/MoneyCardUseServiceImpl.java |  277 ++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 171 insertions(+), 106 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 0e0cf8b..193c1f5 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
@@ -2,22 +2,25 @@
 
 import cn.hutool.core.bean.BeanUtil;
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 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.dao.SysUsersDao;
+import com.matrix.system.common.validate.GroupValidateStatusCheckUtil;
 import com.matrix.system.common.validate.group.Group;
 import com.matrix.system.constance.Dictionary;
 import com.matrix.system.hive.bean.*;
 import com.matrix.system.hive.dao.*;
 import com.matrix.system.hive.dto.MoneyCardOperationDto;
-import com.matrix.system.hive.dto.MoneyCardPayDto;
 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.service.SysOrderService;
+import com.matrix.system.hive.validation.MoneyCardUseGroup;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -47,6 +50,9 @@
     private SysOrderItemDao orderItemDao;
 
     @Autowired
+    SysOrderService sysOrderService;
+
+    @Autowired
     private SysVipLevelDao viplevelDao;
 
     @Autowired
@@ -58,6 +64,9 @@
     MoneyCardUseFlowDao moneyCardUseFlowDao;
 
     @Autowired
+    SysUsersDao sysUsersDao;
+
+    @Autowired
     private ShoppingGoodsService shoppingGoodsService;
 
 
@@ -65,31 +74,30 @@
     @Transactional(rollbackFor = Exception.class)
     public void addVipMoneyCard(List<MoneyCardOperationDto> moneyCardOperationDtos) {
         moneyCardOperationDtos.forEach(dto -> {
+
             //参数校验
-            ParameterValidate.ValidResult baseIdResult = ParameterValidate.validateBean(dto, Group.ADD.class);
-            if (baseIdResult.hasErrors()) {
-                throw new GlobleException(baseIdResult.getErrors());
-            }
-            ShoppingGoods moneyCar = shoppingGoodsDao.selectById(dto.getGoodsId());
+            GroupValidateStatusCheckUtil.check(dto,Group.ADD.class);
+
+            ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(dto.getGoodsId());
             MoneyCardUse moneyCardUse = new MoneyCardUse();
             BeanUtil.copyProperties(dto, moneyCardUse);
-            moneyCardUse.setVipId(dto.getVipId());
-            moneyCardUse.setGiftMoney(moneyCar.getReferencePice());
-            moneyCardUse.setRealMoney(moneyCar.getSealPice());
-            moneyCardUse.setGoodsId(moneyCar.getId());
+            moneyCardUse.setGiftMoney(shoppingGoods.getReferencePice());
+            moneyCardUse.setRealMoney(shoppingGoods.getSealPice());
+            moneyCardUse.setGoodsId(shoppingGoods.getId());
             moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX);
             moneyCardUse.setIsVipCar(Dictionary.FLAG_NO_N);
+            moneyCardUse.setCardName(shoppingGoods.getName());
 
             //余次处理
-            if (moneyCar.getCarUseCount() == null || moneyCar.getCarUseCount() == 0) {
+            if (shoppingGoods.getCarUseCount() == null || shoppingGoods.getCarUseCount() == 0) {
                 moneyCardUse.setUseTotal(999999999);
                 moneyCardUse.setLastCount(999999999);
             } else {
-                moneyCardUse.setUseTotal(moneyCar.getCarUseCount());
-                moneyCardUse.setLastCount(moneyCar.getCarUseCount());
+                moneyCardUse.setUseTotal(shoppingGoods.getCarUseCount());
+                moneyCardUse.setLastCount(shoppingGoods.getCarUseCount());
             }
             //失效时间处理
-            Date invalidTime = shoppingGoodsService.calInvalidTime(moneyCar, 1, null);
+            Date invalidTime = shoppingGoodsService.calInvalidTime(shoppingGoods, 1, null);
             moneyCardUse.setFailTime(invalidTime);
             moneyCardUseDao.insert(moneyCardUse);
 
@@ -97,82 +105,154 @@
     }
 
     @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);
-        }
+    public void deleteByOrderItemId(Long orderItemId) {
+
+        List<MoneyCardUse> moneyCardUseList = getMoneyCardUseListByOrderItemId(orderItemId);
+        moneyCardUseList.forEach(moneyCardUse -> {
+            MoneyCardUseFlow  moneyCardUseFlow=new MoneyCardUseFlow();
+            moneyCardUseFlow.setCarUseId(moneyCardUse.getId());
+            int i = moneyCardUseFlowDao.selectTotalRecord(moneyCardUseFlow);
+            if(i>0){
+                throw new GlobleException(moneyCardUse.getCardName()+"储值卡已经被启用无法删除");
+            }else {
+                LogUtil.info("根据订单明细id{},删除储值卡:{}", orderItemId,moneyCardUse.getCardName());
+                moneyCardUseDao.deleteById(moneyCardUse.getId());
+            }
+        });
+
+
     }
 
 
     @Override
     public void moneyCardTk(List<MoneyCardOperationDto> moneyCardOperationDtos) {
 
-        MoneyCardUseFlow  moneyCardUseFlow=new MoneyCardUseFlow();
-
         moneyCardOperationDtos.forEach(moneyCardOperationDto -> {
 
-            List<MoneyCardUse> moneyCardUseList = list(lambdaQuery().eq(MoneyCardUse::getOrderItemId, moneyCardOperationDto.getOrderItemId()));
+            GroupValidateStatusCheckUtil.check(moneyCardOperationDto, MoneyCardUseGroup.moneyCardUseTk.class);
+
+            List<MoneyCardUse> moneyCardUseList = getMoneyCardUseListByOrderItemId(moneyCardOperationDto.getOrderItemId());
             for (MoneyCardUse moneyCardUse : moneyCardUseList) {
-
-                moneyCardUse.setStatus(Dictionary.TAOCAN_STATUS_TK);
+                //本金扣款
+                if (moneyCardUse.getRealMoney() + moneyCardOperationDto.getRealMoney() >= 0) {
+                    double surplus = MoneyUtil.add(moneyCardUse.getRealMoney(), moneyCardOperationDto.getRealMoney());
+                    moneyCardUse.setRealMoney(surplus);
+                } else {
+                    throw new GlobleException(moneyCardUse.getCardName() + "余额不足");
+                }
+                //余额为0时充值卡变为无效
+                if (moneyCardUse.getRealMoney().equals(0D)) {
+                    moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y);
+                    moneyCardUse.setStatus(Dictionary.TAOCAN_STATUS_TK);
+                }
+                moneyCardUse.setGiftMoney(0D);
                 moneyCardUseDao.update(moneyCardUse);
-
-
-                //设置卡项使用流水
-                moneyCardUseFlow.setCarUseId(moneyCardUse.getId());
-                moneyCardUseFlow.setOrderNo(moneyCardOperationDto.getOrderNo());
-                moneyCardUseFlow.setVipId(moneyCardUse.getVipId());
-                moneyCardUseFlow.setTimes(moneyCardUse.getLastCount());
-                moneyCardUseFlow.setType(moneyCardOperationDto.getType());
-                moneyCardUseFlow.setCreateTime(new Date());
-                moneyCardUseFlow.setOperationId(moneyCardOperationDto.getUpdateUser());
-                moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney() + moneyCardUse.getRealMoney());
-                moneyCardUseFlowDao.insert(moneyCardUseFlow);
+                saveMoneyCardUseFlow(moneyCardOperationDto,moneyCardUse);
             }
 
         });
+    }
+
+    /**
+     * 根据订单明细id查询会员卡
+     * @param orderItemId
+     * @return
+     */
+    private List<MoneyCardUse> getMoneyCardUseListByOrderItemId(Long orderItemId) {
+        LambdaQueryWrapper<MoneyCardUse> lambdaQueryChainWrapper = new LambdaQueryWrapper();
+        lambdaQueryChainWrapper.eq(MoneyCardUse::getOrderItemId, orderItemId);
+        List<MoneyCardUse> moneyCardUseList = list(lambdaQueryChainWrapper);
+        return moneyCardUseList;
+    }
+
+    /**
+     * 保存储值卡流水
+     * @param moneyCardOperationDto
+     * @param moneyCardUse
+     */
+    private  void saveMoneyCardUseFlow(MoneyCardOperationDto moneyCardOperationDto,MoneyCardUse moneyCardUse){
+        MoneyCardUseFlow  moneyCardUseFlow=new MoneyCardUseFlow();
+        moneyCardUseFlow.setCarUseId(moneyCardUse.getId());
+        moneyCardUseFlow.setOrderNo(moneyCardOperationDto.getOrderNo());
+        moneyCardUseFlow.setVipId(moneyCardUse.getVipId());
+        moneyCardUseFlow.setTimes(moneyCardUse.getLastCount());
+        moneyCardUseFlow.setType(moneyCardOperationDto.getType());
+        moneyCardUseFlow.setCreateTime(new Date());
+        moneyCardUseFlow.setOperationId(moneyCardOperationDto.getUpdateUser());
+        moneyCardUseFlow.setTotal(moneyCardUse.getRealMoney());
+        moneyCardUseFlow.setGiftMoney(moneyCardUse.getGiftMoney());
+        moneyCardUseFlow.setTotal(moneyCardOperationDto.getRealMoney());
+        moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney() + moneyCardUse.getRealMoney());
+        moneyCardUseFlow.setStaffName(sysUsersDao.selectById(moneyCardOperationDto.getUpdateUser()).getSuName());
 
 
 
-
+        moneyCardUseFlowDao.insert(moneyCardUseFlow);
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void changeMoneyCard(List<MoneyCardPayDto> moneyCardPayDtoList) {
-        moneyCardPayDtoList.forEach(moneyCardPayDto -> {
-            if (MoneyCardUseFlow.USE_TYPE_CONSUMER.equals(moneyCardPayDto.getType())) {
-                //扣减储值卡余额
-                deductMoneyCard(moneyCardPayDto);
-            } else if (MoneyCardUseFlow.USE_TYPE_ORDRE_CANCEL.equals(moneyCardPayDto.getType())) {
+    public void changeMoneyCard(List<MoneyCardOperationDto> moneyCardOperationDtoList) {
+        moneyCardOperationDtoList.forEach(moneyCardOperationDto -> {
+
+
+            if (MoneyCardUseFlow.USE_TYPE_CONSUMER.equals(moneyCardOperationDto.getType())) {
+                //储值卡支付订单 扣减储值卡余额
+                GroupValidateStatusCheckUtil.check(moneyCardOperationDto,MoneyCardUseGroup.moneyCardUseOrderChange.class);
+                moneyCardPayOrder(moneyCardOperationDto);
+            } else if (MoneyCardUseFlow.USE_TYPE_ORDRE_CANCEL.equals(moneyCardOperationDto.getType())) {
                 //回退储值卡余额
-                returnMoneyCard(moneyCardPayDto);
+                GroupValidateStatusCheckUtil.check(moneyCardOperationDto,MoneyCardUseGroup.moneyCardUseOrderChange.class);
+                returnMoneyCard(moneyCardOperationDto);
+            } else if (MoneyCardUseFlow.USE_TYPE_CZ.equals(moneyCardOperationDto.getType())) {
+                //回退储值卡余额
+                GroupValidateStatusCheckUtil.check(moneyCardOperationDto,MoneyCardUseGroup.moneyCardUseCz.class);
+                moneyCardCz(moneyCardOperationDto);
             }
         });
     }
 
     /**
+     * 会员卡充值
+     * @param moneyCardOperationDto
+     */
+    private void moneyCardCz(MoneyCardOperationDto moneyCardOperationDto) {
+
+        LogUtil.info("会员卡充值 {}", JSON.toJSONString(moneyCardOperationDto));
+        MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(moneyCardOperationDto.getCarUseId());
+
+
+        if (Objects.nonNull(moneyCardOperationDto.getGiftMoney())) {
+            //jyytodo 余额余次的修改和新增在数据库层面做加减
+            moneyCardUse.setGiftMoney(moneyCardUse.getGiftMoney() + moneyCardOperationDto.getGiftMoney());
+        }
+        if (Objects.nonNull(moneyCardOperationDto.getRealMoney())) {
+            moneyCardUse.setRealMoney(moneyCardUse.getRealMoney() + moneyCardOperationDto.getRealMoney());
+        }
+        moneyCardUseDao.update(moneyCardUse);
+        //设置卡项使用流水
+        saveMoneyCardUseFlow(moneyCardOperationDto,moneyCardUse);
+
+
+
+    }
+
+    /**
      * 回退储值卡余额
      *
-     * @param moneyCardPayDto
+     * @param moneyCardOperationDto
      */
-    private void returnMoneyCard(MoneyCardPayDto moneyCardPayDto) {
-        LogUtil.info("回退储值卡余额 {}", JSON.toJSONString(moneyCardPayDto));
-        MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(moneyCardPayDto.getCarUseId());
+    private void returnMoneyCard(MoneyCardOperationDto moneyCardOperationDto) {
+        LogUtil.info("回退储值卡余额 {}", JSON.toJSONString(moneyCardOperationDto));
+        MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(moneyCardOperationDto.getCarUseId());
         MoneyCardUseFlow moneyCardUseFlow = new MoneyCardUseFlow();
 
-        if (Objects.nonNull(moneyCardPayDto.getGiftMoney())) {
+        if (Objects.nonNull(moneyCardOperationDto.getGiftMoney())) {
             //jyytodo 余额余次的修改和新增在数据库层面做加减
-            moneyCardUse.setGiftMoney(moneyCardUse.getGiftMoney() + moneyCardPayDto.getGiftMoney());
+            moneyCardUse.setGiftMoney(moneyCardUse.getGiftMoney() + moneyCardOperationDto.getGiftMoney());
         }
-        if (Objects.nonNull(moneyCardPayDto.getRealMoney())) {
-            moneyCardUse.setRealMoney(moneyCardUse.getRealMoney() + moneyCardPayDto.getRealMoney());
+        if (Objects.nonNull(moneyCardOperationDto.getRealMoney())) {
+            moneyCardUse.setRealMoney(moneyCardUse.getRealMoney() + moneyCardOperationDto.getRealMoney());
         }
         moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y);
         moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX);
@@ -180,48 +260,42 @@
 
 
         //设置卡项使用流水
-        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);
+        saveMoneyCardUseFlow(moneyCardOperationDto,moneyCardUse);
     }
 
     /**
-     * 扣减储值余额
+     * 储值卡支付订单 扣减储值卡余额
      *
-     * @param moneyCardPayDto
+     * @param moneyCardOperationDto
      */
-    private void deductMoneyCard(MoneyCardPayDto moneyCardPayDto) {
+    private void moneyCardPayOrder(MoneyCardOperationDto moneyCardOperationDto) {
         // 判断商品是否在充值卡的限制购买
-        VerificationResult verificationResult = checkIsBangding(moneyCardPayDto.getCarUseId(), moneyCardPayDto.getGoodsIds());
+        VerificationResult verificationResult = checkIsBangding(moneyCardOperationDto.getCarUseId(), moneyCardOperationDto.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() + "余额不足");
-            }
+
+        LogUtil.info("扣减储值卡余额 {}", JSON.toJSONString(moneyCardOperationDto));
+        MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(moneyCardOperationDto.getCarUseId());
+
+        //欠款检查
+        checkOrderStatu(moneyCardUse.getOrderItemId());
+
+        //赠送金额扣款
+        if (moneyCardUse.getGiftMoney() + moneyCardOperationDto.getGiftMoney() >= 0) {
+            double surplus = MoneyUtil.add(moneyCardUse.getGiftMoney(), moneyCardOperationDto.getGiftMoney());
+            moneyCardUse.setGiftMoney(surplus);
         } 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() + "余额不足");
-            }
+            throw new GlobleException(moneyCardUse.getCardName() + "余额不足");
         }
+        //本金扣款
+        if (moneyCardUse.getRealMoney() + moneyCardOperationDto.getRealMoney() >= 0) {
+            double surplus = MoneyUtil.add(moneyCardUse.getRealMoney(), moneyCardOperationDto.getRealMoney());
+            moneyCardUse.setRealMoney(surplus);
+        } else {
+            throw new GlobleException(moneyCardUse.getCardName() + "余额不足");
+        }
+
 
         if (moneyCardUse.getIsVipCar().equals(Dictionary.FLAG_NO_N)) {
             //余额为0时充值卡变为无效
@@ -237,21 +311,11 @@
             moneyCardUse.setFailTime(invalidTime);
         }
 
-        moneyCardUse.setLastCount(moneyCardUse.getLastCount() - moneyCardPayDto.getCount());
-
+        moneyCardUse.setLastCount(moneyCardUse.getLastCount() - moneyCardOperationDto.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);
+        saveMoneyCardUseFlow(moneyCardOperationDto,moneyCardUse);
     }
 
     /**
@@ -271,7 +335,7 @@
             // 不是默认储值卡判断卡是否可应用于所有产品
             ShoppingGoods cardGoods = shoppingGoodsDao.selectById(moneyCardUse.getGoodsId());
             if (cardGoods != null) {
-                if (Dictionary.FLAG_YES.equals(cardGoods.getGoodType())) {
+                if (Dictionary.FLAG_YES.equals(cardGoods.getCarIsAll())) {
                     return VerificationResult.success();
                 }
             }
@@ -429,6 +493,7 @@
     @Transactional(rollbackFor = Exception.class)
     public void transfer(MoneyCardUse moneyCardUse, Long vipId2, Double money) {
         Long oldId = moneyCardUse.getId();
+
         moneyCardUse = moneyCardUseDao.selectById(moneyCardUse.getId());
         if (moneyCardUse.getVipId().equals(vipId2)) {
             throw new GlobleException("转让人不能是该充值卡拥有者!");
@@ -514,10 +579,10 @@
     /**
      * 检测订单条目是否已付款完毕
      */
-    public void checkOrderStatu(Long id) {
-        SysOrderItem item = orderItemDao.selectById(id);
-        if (!Dictionary.ORDER_STATU_YFK.equals(item.getStatus())) {
-            throw new GlobleException("该商品还存在欠款!");
+    public void checkOrderStatu(Long orderItemId) {
+        SysOrder order = sysOrderService.findById(orderItemDao.selectById(orderItemId).getOrderId());
+        if (!Dictionary.ORDER_STATU_YFK.equals(order.getStatu())) {
+            throw new GlobleException("储值卡购买订单还存在欠款,在补交欠款后才能使用!");
         }
     }
 

--
Gitblit v1.9.1