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