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