| package com.matrix.system.hive.service.imp; | 
|   | 
| 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.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.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; | 
|   | 
| 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 { | 
|   | 
|   | 
|     @Autowired | 
|     private MoneyCardUseDao moneyCardUseDao; | 
|   | 
|     @Autowired | 
|     private MoneyCardUseFreezeDao moneyCardUseFreezeDao; | 
|   | 
|   | 
|     @Autowired | 
|     private SysVipInfoDao infoDao; | 
|     @Autowired | 
|     private SysOrderItemDao orderItemDao; | 
|   | 
|     @Autowired | 
|     SysOrderService sysOrderService; | 
|   | 
|     @Autowired | 
|     private SysVipLevelDao viplevelDao; | 
|   | 
|     @Autowired | 
|     ShoppingGoodsDao shoppingGoodsDao; | 
|   | 
|     @Autowired | 
|     MoneyCardAssembleDao moneyCardAssembleDao; | 
|     @Autowired | 
|     MoneyCardUseFlowDao moneyCardUseFlowDao; | 
|   | 
|     @Autowired | 
|     SysUsersDao sysUsersDao; | 
|   | 
|     @Autowired | 
|     private ShoppingGoodsService shoppingGoodsService; | 
|   | 
|   | 
|     @Override | 
|     @Transactional(rollbackFor = Exception.class) | 
|     public void addVipMoneyCard(List<MoneyCardOperationDto> moneyCardOperationDtos) { | 
|         moneyCardOperationDtos.forEach(dto -> { | 
|   | 
|             //参数校验 | 
|             GroupValidateStatusCheckUtil.check(dto,Group.ADD.class); | 
|   | 
|             ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(dto.getGoodsId()); | 
|             MoneyCardUse moneyCardUse = new MoneyCardUse(); | 
|             BeanUtil.copyProperties(dto, moneyCardUse); | 
|             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 (shoppingGoods.getCarUseCount() == null || shoppingGoods.getCarUseCount() == 0) { | 
|                 moneyCardUse.setUseTotal(999999999); | 
|                 moneyCardUse.setLastCount(999999999); | 
|             } else { | 
|                 moneyCardUse.setUseTotal(shoppingGoods.getCarUseCount()); | 
|                 moneyCardUse.setLastCount(shoppingGoods.getCarUseCount()); | 
|             } | 
|             //失效时间处理 | 
|             Date invalidTime = shoppingGoodsService.calInvalidTime(shoppingGoods, 1, null); | 
|             moneyCardUse.setFailTime(invalidTime); | 
|             moneyCardUseDao.insert(moneyCardUse); | 
|   | 
|         }); | 
|     } | 
|   | 
|     @Override | 
|     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) { | 
|   | 
|         moneyCardOperationDtos.forEach(moneyCardOperationDto -> { | 
|   | 
|             GroupValidateStatusCheckUtil.check(moneyCardOperationDto, MoneyCardUseGroup.moneyCardUseTk.class); | 
|   | 
|             List<MoneyCardUse> moneyCardUseList = getMoneyCardUseListByOrderItemId(moneyCardOperationDto.getOrderItemId()); | 
|             for (MoneyCardUse moneyCardUse : moneyCardUseList) { | 
|                 //本金扣款 | 
|                 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); | 
|                 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<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())) { | 
|                 //回退储值卡余额 | 
|                 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 moneyCardOperationDto | 
|      */ | 
|     private void returnMoneyCard(MoneyCardOperationDto moneyCardOperationDto) { | 
|         LogUtil.info("回退储值卡余额 {}", JSON.toJSONString(moneyCardOperationDto)); | 
|         MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(moneyCardOperationDto.getCarUseId()); | 
|         MoneyCardUseFlow moneyCardUseFlow = new MoneyCardUseFlow(); | 
|   | 
|         if (Objects.nonNull(moneyCardOperationDto.getGiftMoney())) { | 
|             //jyytodo 余额余次的修改和新增在数据库层面做加减 | 
|             moneyCardUse.setGiftMoney(moneyCardUse.getGiftMoney() + moneyCardOperationDto.getGiftMoney()); | 
|         } | 
|         if (Objects.nonNull(moneyCardOperationDto.getRealMoney())) { | 
|             moneyCardUse.setRealMoney(moneyCardUse.getRealMoney() + moneyCardOperationDto.getRealMoney()); | 
|         } | 
|         moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y); | 
|         moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX); | 
|         moneyCardUseDao.update(moneyCardUse); | 
|   | 
|   | 
|         //设置卡项使用流水 | 
|         saveMoneyCardUseFlow(moneyCardOperationDto,moneyCardUse); | 
|     } | 
|   | 
|     /** | 
|      * 储值卡支付订单 扣减储值卡余额 | 
|      * | 
|      * @param moneyCardOperationDto | 
|      */ | 
|     private void moneyCardPayOrder(MoneyCardOperationDto moneyCardOperationDto) { | 
|         // 判断商品是否在充值卡的限制购买 | 
|         VerificationResult verificationResult = checkIsBangding(moneyCardOperationDto.getCarUseId(), moneyCardOperationDto.getGoodsIds()); | 
|         if (!verificationResult.isJudgeResult()) { | 
|             throw new GlobleException(verificationResult.getMsg()); | 
|         } | 
|   | 
|         LogUtil.info("扣减储值卡余额 {}", JSON.toJSONString(moneyCardOperationDto)); | 
|         MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(moneyCardOperationDto.getCarUseId()); | 
|   | 
|         // 用户默认储值卡不进行欠款检查 20220512 wzy | 
|         if (Dictionary.FLAG_NO_N.equals(moneyCardUse.getIsVipCar())) { | 
|             //欠款检查 | 
|             checkOrderStatu(moneyCardUse.getOrderItemId()); | 
|         } | 
|   | 
|         //赠送金额扣款 | 
|         if (moneyCardUse.getGiftMoney() + moneyCardOperationDto.getGiftMoney() >= 0) { | 
|             double surplus = MoneyUtil.add(moneyCardUse.getGiftMoney(), moneyCardOperationDto.getGiftMoney()); | 
|             moneyCardUse.setGiftMoney(surplus); | 
|         } else { | 
|             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时充值卡变为无效 | 
|             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); | 
|         } | 
|   | 
|         // 储值卡不减少使用次数 20220512 wzy | 
|         if (Dictionary.FLAG_NO_N.equals(moneyCardUse.getIsVipCar())) { | 
|             moneyCardUse.setLastCount(moneyCardUse.getLastCount() - moneyCardOperationDto.getCount()); | 
|         } | 
|   | 
|         // 更新充值卡信息 | 
|         moneyCardUseDao.update(moneyCardUse); | 
|         //设置卡项使用流水 | 
|         saveMoneyCardUseFlow(moneyCardOperationDto,moneyCardUse); | 
|     } | 
|   | 
|     /** | 
|      * 检查商品是否在储值卡的消费范围内 | 
|      * | 
|      * @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 VerificationResult.success(); | 
|         } else { | 
|             // 不是默认储值卡判断卡是否可应用于所有产品 | 
|             ShoppingGoods cardGoods = shoppingGoodsDao.selectById(moneyCardUse.getGoodsId()); | 
|             if (cardGoods != null) { | 
|                 if (Dictionary.FLAG_YES.equals(cardGoods.getCarIsAll())) { | 
|                     return VerificationResult.success(); | 
|                 } | 
|             } | 
|             // 比较分类 | 
|             MoneyCardAssemble moneyCardAssemble = new MoneyCardAssemble(); | 
|             moneyCardAssemble.setCardId(moneyCardUse.getGoodsId()); | 
|             List<MoneyCardAssemble> cardAssembleList = moneyCardAssembleDao.selectByModel(moneyCardAssemble); | 
|             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() + "优惠中 "); | 
|                 } | 
|             } | 
|             if (msgBuilder.length() > 0) { | 
|                 return VerificationResult.fail(msgBuilder.toString()); | 
|             } else { | 
|                 return VerificationResult.success(); | 
|             } | 
|   | 
|         } | 
|     } | 
|   | 
|     @Override | 
|     public int add(MoneyCardUse moneyCardUse) { | 
|   | 
|         return moneyCardUseDao.insert(moneyCardUse); | 
|   | 
|     } | 
|   | 
|     @Override | 
|     public int modify(MoneyCardUse moneyCardUse) { | 
|   | 
|         return moneyCardUseDao.update(moneyCardUse); | 
|   | 
|     } | 
|   | 
|     @Override | 
|     public int remove(List<Long> list) { | 
|   | 
|         return moneyCardUseDao.deleteByIds(list); | 
|   | 
|     } | 
|   | 
|     @Override | 
|     public int removeById(Long id) { | 
|   | 
|         return moneyCardUseDao.deleteById(id); | 
|   | 
|     } | 
|   | 
|     @Override | 
|     public List<MoneyCardUse> findInPage(MoneyCardUse moneyCardUse, PaginationVO pageVo) { | 
|   | 
|         return moneyCardUseDao.selectInPage(moneyCardUse, pageVo); | 
|   | 
|     } | 
|   | 
|     @Override | 
|     public List<MoneyCardUse> findByModel(MoneyCardUse moneyCardUse) { | 
|   | 
|         return moneyCardUseDao.selectByModel(moneyCardUse); | 
|   | 
|     } | 
|   | 
|     @Override | 
|     public int findTotal(MoneyCardUse moneyCardUse) { | 
|   | 
|         return moneyCardUseDao.selectTotalRecord(moneyCardUse); | 
|   | 
|     } | 
|   | 
|     @Override | 
|     public MoneyCardUse findById(Long id) { | 
|         return moneyCardUseDao.selectById(id); | 
|   | 
|     } | 
|   | 
|     @Override | 
|     public MoneyCardUse findByVipId(Long id) { | 
|         return moneyCardUseDao.selectVipCard(id); | 
|     } | 
|   | 
|     @Override | 
|     public List<MoneyCardUse> findVipCardUseInPage(MoneyCardUse moneyCardUse, PaginationVO pageVo) { | 
|         return moneyCardUseDao.selectVipCardUseInPage(moneyCardUse, pageVo); | 
|     } | 
|   | 
|     @Override | 
|     public List<MoneyCardUse> findVipCardUse(MoneyCardUse moneyCardUse) { | 
|         return moneyCardUseDao.selectVipCardUse(moneyCardUse); | 
|     } | 
|   | 
|     @Override | 
|     public Integer findTotalVipCardUse(MoneyCardUse moneyCardUse) { | 
|         return moneyCardUseDao.selectVipCardUseTotal(moneyCardUse); | 
|     } | 
|   | 
|     @Override | 
|     @Transactional(rollbackFor = Exception.class) | 
|     public int freeze(MoneyCardUse moneyCardUse) { | 
|         // 态为有效的才能冻结 | 
|         MoneyCardUse moneyCard = moneyCardUseDao.selectById(moneyCardUse.getId()); | 
|         if (!moneyCard.getStatus().equals(Dictionary.TAOCAN_STATUS_YX)) { | 
|             throw new GlobleException("不是有效充值卡"); | 
|         } | 
|   | 
|         // 将充值卡的状态改为冻结 | 
|         moneyCard.setStatus(Dictionary.TAOCAN_STATUS_DJ); | 
|         moneyCardUseDao.update(moneyCard); | 
|         // 冻结记录 | 
|         MoneyCardUseFreeze freeze = new MoneyCardUseFreeze(); | 
|         freeze.setFreezeTime(new Date()); | 
|         freeze.setCardUseId(moneyCard.getId()); | 
|         ; | 
|         MoneyCardUseFreeze getfreeze = moneyCardUseFreezeDao.selectByMoneyCardUseId(moneyCard.getId()); | 
|   | 
|         //更新会员等级 | 
|         moneyCard.getVipInfo().setLevelId(0L); | 
|         infoDao.update(moneyCard.getVipInfo()); | 
|   | 
|         int i = 0; | 
|         if (getfreeze != null) { | 
|             freeze.setId(getfreeze.getId()); | 
|             i = moneyCardUseFreezeDao.update(freeze); | 
|         } else { | 
|             i = moneyCardUseFreezeDao.insert(freeze); | 
|         } | 
|         //记录流水 | 
|         String content = moneyCard.getCardName() + "冻结"; | 
|         return i; | 
|     } | 
|   | 
|     //转让充值卡 | 
|     @Override | 
|     @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("转让人不能是该充值卡拥有者!"); | 
|         } | 
|         System.out.println("id ====== " + moneyCardUse.getId()); | 
|         // 查询要转让的充值卡 | 
|         MoneyCardUse getObj = moneyCardUseDao.selectById(moneyCardUse.getId()); | 
|   | 
|         //检测商品是否已付款完成 | 
|         if (getObj.getOrderItemId() != 1) {//不是数据迁移过来的判断付款状态 | 
|             checkOrderStatu(getObj.getOrderItemId()); | 
|         } | 
|   | 
|         if (!(getObj.getStatus().equals(Dictionary.TAOCAN_STATUS_YX))) { | 
|             throw new GlobleException("不是有效的充值卡!"); | 
|         } | 
|         SysVipInfo info = infoDao.selectById(vipId2); | 
|   | 
|         if (money >= getObj.getRealMoney()) {//如果全部转让出去 | 
|             //更新状态 | 
|             moneyCardUse.setStatus(Dictionary.TAOCAN_SOURCE_ZR); | 
|             moneyCardUseDao.update(moneyCardUse); | 
|         } | 
|   | 
|         //更新会员等级 | 
|         getObj.getVipInfo().setLevelId(0L); | 
|         infoDao.update(getObj.getVipInfo()); | 
|         //新增转让流水 | 
|         StringBuilder content = new StringBuilder(); | 
|   | 
|         content.append(getObj.getCardName() + "转让给会员" + getObj.getCardName()); | 
|   | 
|   | 
|         MoneyCardUse infoCard = moneyCardUseDao.selectVipCard(info.getId()); | 
|         //清空content | 
|   | 
|   | 
|         //判断会员没有会籍卡,或者该充值卡不为会籍卡 | 
|         if (infoCard == null || Dictionary.FLAG_YES_Y.equals(getObj.getIsVipCar())) { | 
|             //添加一条接受转让的记录到充值卡使用情况表中 | 
|   | 
|             if (!getObj.getSource().contains(Dictionary.TAOCAN_STATUS_ZR)) { | 
|                 getObj.setSource(getObj.getSource() + Dictionary.TAOCAN_STATUS_ZR); | 
|             } | 
|             getObj.setVipId(vipId2); | 
|             getObj.setId(null); | 
|             content = new StringBuilder(); | 
|             moneyCardUseDao.insert(getObj); | 
|             content.append("获取会员" + getObj.getVipInfo().getVipName() + "的" + getObj.getCardName()) | 
|                     .append(",余次:" + getObj.getLastCountName()) | 
|                     .append(",本金余额:" + getObj.getRealMoney()) | 
|                     .append(",有效期:" + DateUtil.dateToString(getObj.getFailTime(), DateUtil.DATE_FORMAT_MM)) | 
|                     .append(",是否赠送:" + getObj.getSourceName()); | 
|         } | 
|     } | 
|   | 
|   | 
|     //设置为有效 | 
|     @Override | 
|     public void active(MoneyCardUse proj) { | 
|   | 
|         proj.setStatus(Dictionary.TAOCAN_STATUS_YX); | 
|         if (Dictionary.FLAG_YES_Y.equals(proj.getIsVipCar())) { | 
|             MoneyCardUse cardUse = moneyCardUseDao.selectVipCard(proj.getVipId()); | 
|             if (cardUse != null && !cardUse.getId().equals(proj.getId())) { | 
|                 throw new GlobleException("该会员已经存在有效的会籍卡!"); | 
|             } | 
|         } | 
|         moneyCardUseDao.update(proj); | 
|   | 
|     } | 
|   | 
|     //设置为失效 | 
|     @Override | 
|     public void invalid(MoneyCardUse proj) { | 
|   | 
|         proj.setStatus(Dictionary.TAOCAN_STATUS_WX); | 
|         moneyCardUseDao.update(proj); | 
|         StringBuilder content = new StringBuilder(); | 
|         content.append(proj.getCardName() + "设置失效"); | 
|     } | 
|   | 
|     /** | 
|      * 检测订单条目是否已付款完毕 | 
|      */ | 
|     public void checkOrderStatu(Long orderItemId) { | 
|         SysOrder order = sysOrderService.findById(orderItemDao.selectById(orderItemId).getOrderId()); | 
|         if (!Dictionary.ORDER_STATU_YFK.equals(order.getStatu())) { | 
|             throw new GlobleException("储值卡购买订单还存在欠款,在补交欠款后才能使用!"); | 
|         } | 
|     } | 
|   | 
| } |