| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | @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()) { |
| | |
| | | } |
| | | 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()); |
| | |
| | | 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 |
| | | public void moneyCardTk(List<MoneyCardOperationDto> moneyCardOperationDtos) { |
| | | |
| | | MoneyCardUseFlow moneyCardUseFlow=new MoneyCardUseFlow(); |
| | | |
| | | moneyCardOperationDtos.forEach(moneyCardOperationDto -> { |
| | | |
| | | List<MoneyCardUse> moneyCardUseList = list(lambdaQuery().eq(MoneyCardUse::getOrderItemId, moneyCardOperationDto.getOrderItemId())); |
| | | for (MoneyCardUse moneyCardUse : moneyCardUseList) { |
| | | |
| | | moneyCardUse.setStatus(Dictionary.TAOCAN_STATUS_TK); |
| | | 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); |
| | | } |
| | | |
| | | }); |
| | | |
| | | |
| | | |
| | |
| | | @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) { |