From 76ed413ae6fd573996207760904304b4951df5d5 Mon Sep 17 00:00:00 2001
From: 935090232@qq.com <ak473600000>
Date: Sun, 13 Mar 2022 18:43:34 +0800
Subject: [PATCH] 重构:套餐项目

---
 zq-erp/src/main/java/com/matrix/system/hive/service/imp/MoneyCardUseServiceImpl.java |  185 ++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 152 insertions(+), 33 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 2b6ba2e..a1b5de0 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,28 +1,36 @@
 package com.matrix.system.hive.service.imp;
 
+import cn.hutool.core.bean.BeanUtil;
 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.system.common.validate.ParameterValidate;
+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.MoneyCardChangeDto;
+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.validation.ProjUseGroup;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 
 /**
  * @date 2016-09-17 10:17
  */
 @Service("moneyCardUseService")
-public class MoneyCardUseServiceImpl extends ServiceImpl<MoneyCardUseDao,MoneyCardUse> implements MoneyCardUseService {
+public class MoneyCardUseServiceImpl extends ServiceImpl<MoneyCardUseDao, MoneyCardUse> implements MoneyCardUseService {
 
 
     @Autowired
@@ -45,64 +53,176 @@
 
     @Autowired
     MoneyCardAssembleDao moneyCardAssembleDao;
+    @Autowired
+    MoneyCardUseFlowDao moneyCardUseFlowDao;
+
+    @Autowired
+    private ShoppingGoodsService shoppingGoodsService;
+
 
     @Override
-    public void changeMoneyCard(List<MoneyCardChangeDto> moneyCardChangeDtoList) {
+    @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());
+            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.setStatus(Dictionary.MONEYCARD_STATUS_YX);
+            moneyCardUse.setIsVipCar(Dictionary.FLAG_NO_N);
 
-        // 判断商品是否在充值卡的限制购买,判断分类
-        moneyCardChangeDtoList.forEach(cardUse->{
-            VerificationResult verificationResult = checkIsBangding(cardUse, cardUse.getGoodsIds());
+            //余次处理
+            if (moneyCar.getCarUseCount() == null || moneyCar.getCarUseCount() == 0) {
+                moneyCardUse.setUseTotal(999999999);
+                moneyCardUse.setLastCount(999999999);
+            } else {
+                moneyCardUse.setUseTotal(moneyCar.getCarUseCount());
+                moneyCardUse.setLastCount(moneyCar.getCarUseCount());
+            }
+            //失效时间处理
+            Date invalidTime = shoppingGoodsService.calInvalidTime(moneyCar, 1, null);
+            moneyCardUse.setFailTime(invalidTime);
+            moneyCardUseDao.insert(moneyCardUse);
+
+        });
+
+
+
+
+
+    }
+
+    @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());
             }
         });
 
-        moneyCardChangeDtoList.get().forEach(item -> {
-            if (!isInBangding(moneyCardUse, item.getGoodsId())) {
-                throw new GlobleException(shoppingGoodsDao.selectById(item.getGoodsId()).getName() + "不在" + moneyCardUse.getCardName() + "优惠中");
+
+        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 (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);
         });
 
 
     }
 
-    private VerificationResult checkIsBangding(MoneyCardChangeDto moneyCardUse, List<Long> goodsIds) {
+    /**
+     * 检查商品是否在储值卡的消费范围内
+     * @param moneyCardUseId 储值卡id
+     * @param goodsIds  商品id集合
+     * @return
+     */
+    private VerificationResult checkIsBangding(Long moneyCardUseId, List<Long> goodsIds) {
         // 如果是一卡通则肯定在绑定范围内
-
+        MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(moneyCardUseId);
+        //默认储值卡可以购买所有产品
         if (moneyCardUse.getIsVipCar().equals(Dictionary.FLAG_YES_Y)) {
-            return true;
+            return VerificationResult.success();
         } else {
-            // 不是一卡通,
-            // 判断卡是否可应用于所有产品
+            // 不是默认储值卡判断卡是否可应用于所有产品
             ShoppingGoods cardGoods = shoppingGoodsDao.selectById(moneyCardUse.getGoodsId());
             if (cardGoods != null) {
-                if (Dictionary.FLAG_YES.equals(cardGoods.getCarIsAll())) {
-                    return true;
+                if (Dictionary.FLAG_YES.equals(cardGoods.getGoodType())) {
+                    return VerificationResult.success();
                 }
             }
-
             // 比较分类
             MoneyCardAssemble moneyCardAssemble = new MoneyCardAssemble();
             moneyCardAssemble.setCardId(moneyCardUse.getGoodsId());
             List<MoneyCardAssemble> cardAssembleList = moneyCardAssembleDao.selectByModel(moneyCardAssemble);
-            ShoppingGoods yhGoods = shoppingGoodsDao.selectById(goodsId);
-            boolean flag = false;
-            for (MoneyCardAssemble cardAssemble : cardAssembleList) {
-                // 比较类型
-                if (cardAssemble.getType().equals(Dictionary.CZK_ASSEMBLE_FL)) {
-                    if (yhGoods.getCateId().equals(cardAssemble.getCateId())) {
-                        flag = true;
-                        break;
-                    }
-                } else {
-                    // 比较绑定
-                    if (yhGoods.getId().equals(cardAssemble.getGoodsId())) {
-                        flag = true;
-                        break;
+            List<ShoppingGoods> yhGoods = shoppingGoodsDao.selectByIds(goodsIds);
+
+            StringBuilder msgBuilder = new StringBuilder();
+
+            for (ShoppingGoods goods : yhGoods) {
+                boolean isMatch = false;
+                for (MoneyCardAssemble cardAssemble : cardAssembleList) {
+                    // 比较类型
+                    if (cardAssemble.getType().equals(Dictionary.CZK_ASSEMBLE_FL)) {
+
+                        if (goods.getCateId().equals(cardAssemble.getCateId())) {
+                            isMatch = true;
+                            break;
+                        }
+                    } else {
+                        // 比较绑定
+                        if (goods.getId().equals(cardAssemble.getGoodsId())) {
+                            isMatch = true;
+                            break;
+                        }
                     }
                 }
+                if (!isMatch) {
+                    msgBuilder.append(goods.getName() + "不在" + moneyCardUse.getCardName() + "优惠中 ");
+                }
             }
-            return flag;
+            if (msgBuilder.length() > 0) {
+                return VerificationResult.fail(msgBuilder.toString());
+            } else {
+                return VerificationResult.success();
+            }
+
         }
     }
 
@@ -276,7 +396,6 @@
                     .append(",是否赠送:" + getObj.getSourceName());
         }
     }
-
 
 
     //设置为有效

--
Gitblit v1.9.1