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