| | |
| | | private final MallGoodsCouponMapper mallGoodsCouponMapper; |
| | | private final MallMemberCouponMapper mallMemberCouponMapper; |
| | | private final MallGoodsMapper mallGoodsMapper; |
| | | private final MallChargeMapper mallChargeMapper; |
| | | |
| | | private final MallVipConfigMapper mallVipConfigMapper; |
| | | private final RunVipMapper runVipMapper; |
| | |
| | | mallMember.setAccountStatus(YesOrNoEnum.YES.getValue()); |
| | | mallMember.setAccountType(MallMember.ACCOUNT_TYPE_NORMAL); |
| | | mallMember.setSex("男"); |
| | | mallMember.setDirector(YesOrNoEnum.NO.getValue()); |
| | | mallMember.setDirectorTime(DateUtil.date()); |
| | | mallMember.setBindPhone(account); |
| | | |
| | | this.baseMapper.insert(mallMember); |
| | |
| | | mallMemberVo.setLevelPng(runVip.getVipPng()); |
| | | mallMemberVo.setChangeState(runVip.getChangeState()); |
| | | mallMemberVo.setWithdrawState(runVip.getWithdrawState()); |
| | | mallMemberVo.setInsideState(runVip.getInsideState()); |
| | | |
| | | |
| | | MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(mallMemberVo.getId()); |
| | | mallMemberVo.setBalance(wallet.getBalance()); |
| | | mallMemberVo.setScore(wallet.getScore()); |
| | | return new FebsResponse().success().data(mallMemberVo); |
| | | } |
| | | |
| | | private BigDecimal getDirectAchieve(String inviteId,Date startTime,Date endTime) { |
| | | |
| | | try { |
| | | // 获取直推成员和团队成员的ID集合 |
| | | Set<Long> memberIds = getTeamMemberIds(inviteId); |
| | | |
| | | if (CollUtil.isEmpty(memberIds)) { |
| | | return BigDecimal.ZERO; |
| | | } |
| | | |
| | | // 获取团队业绩(不包含本人业绩) |
| | | List<MallCharge> mallCharges = mallChargeMapper.selectList( |
| | | new LambdaQueryWrapper<MallCharge>() |
| | | .in(MallCharge::getMemberId, memberIds) |
| | | .eq(MallCharge::getState, YesOrNoEnum.YES.getValue()) |
| | | .ge(MallCharge::getCreatedTime, startTime) |
| | | .lt(MallCharge::getCreatedTime, endTime) |
| | | ); |
| | | |
| | | if (CollUtil.isEmpty(mallCharges)) { |
| | | return BigDecimal.ZERO; |
| | | } |
| | | |
| | | return mallCharges.stream() |
| | | .map(MallCharge::getAmount) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | } catch (Exception e) { |
| | | // 异常处理 |
| | | log.error("Error occurred while calculating direct achieve for member: {}", inviteId, e); |
| | | return BigDecimal.ZERO; |
| | | } |
| | | } |
| | | private Set<Long> getTeamMemberIds(String inviteId) { |
| | | Set<Long> memberIds = new HashSet<>(); |
| | | // 获取直推成员 |
| | | List<MallMember> directMembers = this.baseMapper.selectList( |
| | | new LambdaQueryWrapper<MallMember>() |
| | | .eq(MallMember::getReferrerId, inviteId) |
| | | ); |
| | | if(CollUtil.isEmpty(directMembers)){ |
| | | return memberIds; |
| | | } |
| | | memberIds.addAll(directMembers.stream().map(MallMember::getId).collect(Collectors.toSet())); |
| | | |
| | | // 获取团队成员 |
| | | List<MallMember> teamMembers = this.baseMapper.selectList( |
| | | new LambdaQueryWrapper<MallMember>() |
| | | .in(MallMember::getReferrerId, directMembers.stream().map(MallMember::getInviteId).collect(Collectors.toSet())) |
| | | ); |
| | | if(CollUtil.isEmpty(teamMembers)){ |
| | | return memberIds; |
| | | } |
| | | memberIds.addAll(teamMembers.stream().map(MallMember::getId).collect(Collectors.toSet())); |
| | | |
| | | return memberIds; |
| | | } |
| | | |
| | | @Override |
| | |
| | | * 直属三级 |
| | | */ |
| | | MyTeamVo myTeamVo = new MyTeamVo(); |
| | | //节点和团队业绩 |
| | | myTeamVo.setDirector(mallMember.getDirector()); |
| | | if(mallMember.getDirector() == YesOrNoEnum.YES.getValue() && mallMember.getDirectorTime() != null){ |
| | | myTeamVo.setDirectorTime(mallMember.getDirectorTime()); |
| | | BigDecimal directAchieve = getDirectAchieve(mallMember.getInviteId(), mallMember.getDirectorTime(), DateUtil.date()); |
| | | myTeamVo.setDirectorAchieve(directAchieve); |
| | | }else{ |
| | | myTeamVo.setDirectorTime(mallMember.getCreatedTime()); |
| | | BigDecimal directAchieve = getDirectAchieve(mallMember.getInviteId(), mallMember.getCreatedTime(), DateUtil.date()); |
| | | myTeamVo.setDirectorAchieve(directAchieve); |
| | | } |
| | | //获取个人的碳币 |
| | | MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId); |
| | | myTeamVo.setMyBalance(mallMemberWallet.getBalance()); |
| | |
| | | * 用户的等级level是否允许兑换碳币 |
| | | */ |
| | | RunVip runVip = runVipMapper.selectOne(new LambdaQueryWrapper<RunVip>().eq(RunVip::getVipCode, loginMember.getLevel())); |
| | | if(ObjectUtil.isEmpty(runVip) || runVip.getWithdrawState() != YesOrNoEnum.YES.getValue()){ |
| | | if(ObjectUtil.isEmpty(runVip) || runVip.getInsideState() != YesOrNoEnum.YES.getValue()){ |
| | | throw new FebsException("请先升级会员"); |
| | | } |
| | | |
| | |
| | | dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | RunVipDataDictionaryEnum.RUN_VIP_BALANCE_TO_COIN_PERCENT.getType(), |
| | | RunVipDataDictionaryEnum.RUN_VIP_BALANCE_TO_COIN_PERCENT.getCode()).getValue() |
| | | ).setScale(4, BigDecimal.ROUND_DOWN); |
| | | ).setScale(2, BigDecimal.ROUND_DOWN); |
| | | |
| | | BigDecimal withdrawalAmount = withdrawalDto.getAmount().multiply(balanceToCoin).setScale(2, BigDecimal.ROUND_DOWN); |
| | | BigDecimal fee = balanceToCoinPercent; |
| | | // BigDecimal fee = balanceToCoinPercent.multiply(withdrawalAmount).setScale(2, BigDecimal.ROUND_DOWN); |
| | | BigDecimal withdrawalAmountReal = withdrawalAmount.subtract(fee); |
| | | if(BigDecimal.ZERO.compareTo(withdrawalAmountReal) >= 0){ |
| | | throw new FebsException(minCnt+"手续费不足"); |
| | | } |
| | | |
| | | /** |
| | | * 减少碳币,增加进行中提现记录 |
| | | */ |
| | | walletService.reduceBalance(withdrawalDto.getAmount(), loginMember.getId()); |
| | | |
| | | BigDecimal withdrawalAmount = withdrawalDto.getAmount().multiply(balanceToCoin).setScale(2, BigDecimal.ROUND_DOWN); |
| | | BigDecimal fee = balanceToCoinPercent.multiply(withdrawalAmount).setScale(2, BigDecimal.ROUND_DOWN); |
| | | BigDecimal withdrawalAmountReal = withdrawalAmount.subtract(fee); |
| | | String orderNo = MallUtils.getOrderNum("TX"); |
| | | MallMemberWithdraw withdraw = new MallMemberWithdraw(); |
| | | withdraw.setWithdrawNo(orderNo); |
| | |
| | | RunVip runVip = runVipMapper.selectOne(new LambdaQueryWrapper<RunVip>().eq(RunVip::getVipCode, loginMember.getLevel())); |
| | | if(ObjectUtil.isEmpty(runVip) || runVip.getChangeState() != YesOrNoEnum.YES.getValue()){ |
| | | throw new FebsException("请先升级会员"); |
| | | } |
| | | |
| | | MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId); |
| | | if(minScore.compareTo(mallMemberWallet.getScore()) > 0){ |
| | | throw new FebsException("碳积分不足"); |
| | | } |
| | | |
| | | BigDecimal scoreBalancePercent = new BigDecimal( |
| | |
| | | |
| | | |
| | | public static String hidePhoneNumber(String phoneNumber) { |
| | | //判断字符串的长度小于4就直接返回 |
| | | if (phoneNumber.length() < 4) { |
| | | return phoneNumber; |
| | | } |
| | | // 获取前3位和后4位 |
| | | String prefix = phoneNumber.substring(0, 3); |
| | | // 生成隐藏的电话号码 |