| | |
| | | package cc.mrbird.febs; |
| | | |
| | | import cc.mrbird.febs.common.contants.AppContants; |
| | | import cc.mrbird.febs.dapp.chain.ChainEnum; |
| | | import cc.mrbird.febs.dapp.chain.ChainService; |
| | | import cc.mrbird.febs.dapp.dto.BatchTransferDto; |
| | | import cc.mrbird.febs.dapp.entity.DappMemberEntity; |
| | | import cc.mrbird.febs.dapp.entity.DataDictionaryCustom; |
| | | import cc.mrbird.febs.dapp.entity.DappStorage; |
| | | import cc.mrbird.febs.dapp.enumerate.MemberLevelEnum; |
| | | import cc.mrbird.febs.dapp.mapper.DappMemberDao; |
| | | import cc.mrbird.febs.dapp.mapper.DataDictionaryCustomMapper; |
| | | import cc.mrbird.febs.dapp.mapper.DappStorageMapper; |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import org.junit.jupiter.api.Test; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.boot.test.context.SpringBootTest; |
| | | |
| | | import java.util.List; |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @author wzy |
| | |
| | | @SpringBootTest |
| | | public class MemberTest { |
| | | |
| | | @Autowired |
| | | // @Autowired |
| | | // private DappMemberService dappMemberService; |
| | | // @Autowired |
| | | // private DappFundFlowDao dappFundFlowDao; |
| | | // |
| | | // @Resource |
| | | // private DappSystemService dappSystemService; |
| | | // |
| | | @Resource |
| | | private DappStorageMapper dappStorageMapper; |
| | | // |
| | | // @Resource |
| | | // private DataDictionaryCustomMapper dataDictionaryCustomMapper; |
| | | // |
| | | @Resource |
| | | private DappMemberDao dappMemberDao; |
| | | |
| | | @Autowired |
| | | private DataDictionaryCustomMapper dataDictionaryCustomMapper; |
| | | |
| | | @Test |
| | | public void refererIdsTest() { |
| | | DappMemberEntity member = dappMemberDao.selectById(24); |
| | | public void withdraw() {//注册 |
| | | |
| | | boolean flag = false; |
| | | String parentId = "35087336"; |
| | | String ids = ""; |
| | | String feeProfitIds = ""; |
| | | ArrayList<BatchTransferDto> objects = new ArrayList<>(); |
| | | BatchTransferDto batchTransferDto = new BatchTransferDto("0x677696d67c2b9e87aecf60bc17b116f5b25e2927",new BigDecimal("38.8")); |
| | | objects.add(batchTransferDto); |
| | | |
| | | int i = 1; |
| | | List<DataDictionaryCustom> feeProfitDic = dataDictionaryCustomMapper.selectDicByType(AppContants.DIC_TYPE_DISTRIBUTE_PROP); |
| | | while (!flag && StringUtils.isNotBlank(parentId)) { |
| | | if (StrUtil.isBlank(ids)) { |
| | | ids += parentId; |
| | | } else { |
| | | ids += ("," + parentId); |
| | | BatchTransferDto batchTransferDtoFee = new BatchTransferDto("0x3caf594503573341ae7a83fc6daed9bd5276b6bd",new BigDecimal("1.2")); |
| | | objects.add(batchTransferDtoFee); |
| | | ChainService.getInstance(ChainEnum.BSC_USDT.name()).transferList(objects); |
| | | } |
| | | // |
| | | @Test |
| | | public void register() {//注册 |
| | | List<DappMemberEntity> dappMemberEntities = dappMemberDao.selectList(null); |
| | | for(DappMemberEntity memberEntityNow : dappMemberEntities){ |
| | | DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberEntityNow.getId()); |
| | | if(StrUtil.isEmpty(dappMemberEntity.getRefererIds())){ |
| | | continue; |
| | | } |
| | | |
| | | if (i <= 4) { |
| | | if (StrUtil.isBlank(feeProfitIds)) { |
| | | feeProfitIds += parentId; |
| | | } else { |
| | | feeProfitIds += ("," + parentId); |
| | | //获取全部上级 |
| | | ArrayList<DappMemberEntity> activeMembers = new ArrayList<>(); |
| | | List<String> refererIds = Arrays.asList(StrUtil.split(dappMemberEntity.getRefererIds(),",")); |
| | | for(String inviteId : refererIds){ |
| | | DappMemberEntity memberEntity = dappMemberDao.selectMemberInfoByInviteId(inviteId); |
| | | if(ObjectUtil.isNotEmpty(memberEntity)){ |
| | | activeMembers.add(memberEntity); |
| | | } |
| | | } |
| | | if(CollUtil.isEmpty(activeMembers)){ |
| | | continue; |
| | | } |
| | | |
| | | i++; |
| | | DappMemberEntity parentMember = dappMemberDao.selectMemberInfoByInviteId(parentId); |
| | | if (parentMember == null) { |
| | | break; |
| | | } |
| | | parentId = parentMember.getRefererId(); |
| | | if(StringUtils.isBlank(parentId) || "0".equals(parentId)){ |
| | | break; |
| | | } |
| | | if (parentMember.getRefererId().equals(parentMember.getInviteId())) { |
| | | flag = true; |
| | | for(DappMemberEntity activeMember : activeMembers){ |
| | | //获取每一个上级的所有直推,分辨大小区是否满足业绩需求 |
| | | List<DappMemberEntity> directMembers = dappMemberDao.selectChildMemberDirectOrNot(activeMember.getInviteId(), 1, null); |
| | | if(CollUtil.isEmpty(directMembers)){ |
| | | continue; |
| | | } |
| | | if(directMembers.size() < 2){ |
| | | continue; |
| | | } |
| | | //获取activeMember的每一个直推的团队有效业绩 |
| | | HashMap<Long, BigDecimal> daXiaoQu = new HashMap<>(); |
| | | for(DappMemberEntity directMember : directMembers){ |
| | | //每一个直推的团队 |
| | | List<DappMemberEntity> direct = dappMemberDao.selectChildMemberDirectOrNot(directMember.getInviteId(), 2, null); |
| | | direct.add(directMember); |
| | | if(CollUtil.isEmpty(direct)){ |
| | | continue; |
| | | } |
| | | //获取直推的团队的全部有效业绩 |
| | | List<Long> collect = direct.stream().map(DappMemberEntity::getId).collect(Collectors.toList()); |
| | | QueryWrapper<DappStorage> storageQueryWrapper = new QueryWrapper<>(); |
| | | storageQueryWrapper.in("member_id",collect); |
| | | // storageQueryWrapper.eq("state",1); |
| | | List<DappStorage> dappStorages = dappStorageMapper.selectList(storageQueryWrapper); |
| | | if(CollUtil.isEmpty(dappStorages)){ |
| | | continue; |
| | | } |
| | | |
| | | BigDecimal directAchieve = dappStorages.stream() |
| | | .map(DappStorage::getAmount) // 映射amount到流中 |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | daXiaoQu.put(directMember.getId(),directAchieve); |
| | | } |
| | | if(daXiaoQu.isEmpty()){ |
| | | continue; |
| | | } |
| | | //输出小区的总业绩 |
| | | BigDecimal sum = sumExcludingMax(daXiaoQu); |
| | | BigDecimal dao_1_levelAchieve = new BigDecimal(MemberLevelEnum.DAO_1.getLevelAchieve()); |
| | | BigDecimal dao_2_levelAchieve = new BigDecimal(MemberLevelEnum.DAO_2.getLevelAchieve()); |
| | | BigDecimal dao_3_levelAchieve = new BigDecimal(MemberLevelEnum.DAO_3.getLevelAchieve()); |
| | | if(sum.compareTo(dao_3_levelAchieve) >= 0){ |
| | | activeMember.setLevel(MemberLevelEnum.DAO_3.getCode()); |
| | | dappMemberDao.updateById(activeMember); |
| | | }else if(sum.compareTo(dao_2_levelAchieve) >= 0 && sum.compareTo(dao_3_levelAchieve) < 0){ |
| | | activeMember.setLevel(MemberLevelEnum.DAO_2.getCode()); |
| | | dappMemberDao.updateById(activeMember); |
| | | }else if(sum.compareTo(dao_1_levelAchieve) >= 0 && sum.compareTo(dao_2_levelAchieve) < 0){ |
| | | activeMember.setLevel(MemberLevelEnum.DAO_1.getCode()); |
| | | dappMemberDao.updateById(activeMember); |
| | | }else{ |
| | | activeMember.setLevel(MemberLevelEnum.DAO_0.getCode()); |
| | | dappMemberDao.updateById(activeMember); |
| | | } |
| | | } |
| | | } |
| | | member.setRefererIds(ids); |
| | | member.setFeeProfitIds(feeProfitIds); |
| | | } |
| | | |
| | | public static BigDecimal sumExcludingMax(HashMap<Long, BigDecimal> map) { |
| | | if (map == null) { |
| | | throw new NullPointerException("HashMap cannot be null"); |
| | | } |
| | | |
| | | // 使用Stream API找到最大的BigDecimal值及其对应的key |
| | | Optional<Map.Entry<Long, BigDecimal>> maxEntry = map.entrySet().stream() |
| | | .max((e1, e2) -> e1.getValue().compareTo(e2.getValue())); |
| | | |
| | | // 检查是否找到了最大值 |
| | | if (maxEntry.isPresent()) { |
| | | // 移除最大值对应的键值对 |
| | | map.remove(maxEntry.get().getKey()); |
| | | |
| | | // 计算剩余数据的累计和 |
| | | BigDecimal sumOfRemaining = map.entrySet().stream() |
| | | .map(Map.Entry::getValue) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | |
| | | // 返回累计和 |
| | | return sumOfRemaining; |
| | | } else { |
| | | // 如果没有找到最大值(即HashMap为空),则返回BigDecimal.ZERO |
| | | return BigDecimal.ZERO; |
| | | } |
| | | } |
| | | // |
| | | // @Test |
| | | // public void registerV2() {//存储 |
| | | // Long memberId = 348L; |
| | | // BigDecimal bigDecimal = new BigDecimal("500"); |
| | | // DappFundFlowEntity fundFlow = new DappFundFlowEntity( |
| | | // memberId, |
| | | // bigDecimal.abs(), |
| | | // MoneyFlowEnum.CUN_CHU.getValue(), |
| | | // 1, |
| | | // BigDecimal.ZERO, |
| | | // StrUtil.format(MoneyFlowEnum.CUN_CHU.getDescrition(),bigDecimal)); |
| | | // dappFundFlowDao.insert(fundFlow); |
| | | // |
| | | // } |
| | | // |
| | | // @Test |
| | | // public void registerV3() {//存储 |
| | | // dappSystemService.teamPerk(4360L); |
| | | // |
| | | // } |
| | | // |
| | | // @Test |
| | | // public void registerV4() {//存储 |
| | | // |
| | | // DataDictionaryCustom jiliChiDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // DataDictionaryEnum.JILI_CHI.getType(), |
| | | // DataDictionaryEnum.JILI_CHI.getCode() |
| | | // ); |
| | | // |
| | | // BigDecimal realAmount = BigDecimal.ZERO; |
| | | // //DAO永动激励池50% |
| | | // BigDecimal jiLiTotal = new BigDecimal(jiliChiDic.getValue()).multiply(new BigDecimal("0.5")).setScale(2, BigDecimal.ROUND_DOWN); |
| | | // if(BigDecimal.ZERO.compareTo(jiLiTotal) >= 0){ |
| | | // return; |
| | | // } |
| | | // |
| | | // |
| | | // /** |
| | | // * 其中50%给予当天大单排名激励前4名,40%、30%、20、10% |
| | | // */ |
| | | // BigDecimal daDanTotal = jiLiTotal.multiply(new BigDecimal("0.5")).setScale(2, BigDecimal.ROUND_DOWN); |
| | | // if(daDanTotal.compareTo(BigDecimal.ZERO) > 0){ |
| | | // |
| | | // int oneCount = 4; |
| | | // int twoCount = 3; |
| | | // int threeCount = 2; |
| | | // int fourCount = 1; |
| | | // int count = oneCount + twoCount + threeCount + fourCount; |
| | | // //每一份的奖励数量 |
| | | // BigDecimal everyAmount = daDanTotal.divide(new BigDecimal(count)); |
| | | // |
| | | // if(everyAmount.compareTo(BigDecimal.ZERO) > 0){ |
| | | // DappStorage dappStorageOne = dappStorageMapper.selectAmountByDesc(DateUtil.offsetDay(new Date(),0),0,1); |
| | | // if(ObjectUtil.isNotEmpty(dappStorageOne)){ |
| | | // BigDecimal multiply = everyAmount.multiply(new BigDecimal(oneCount)); |
| | | // dappSystemService.updateBalanceInsertFlow( |
| | | // multiply, |
| | | // dappStorageOne.getMemberId(), |
| | | // MoneyFlowEnum.DA_DAN_JI_LI_PERK.getValue(), |
| | | // StrUtil.format(MoneyFlowEnum.DA_DAN_JI_LI_PERK.getDescrition(),daDanTotal,multiply)); |
| | | // |
| | | // realAmount = realAmount.add(multiply); |
| | | // } |
| | | // DappStorage dappStorageTwo = dappStorageMapper.selectAmountByDesc(DateUtil.offsetDay(new Date(),0),1,1); |
| | | // if(ObjectUtil.isNotEmpty(dappStorageTwo)){ |
| | | // BigDecimal multiply = everyAmount.multiply(new BigDecimal(twoCount)); |
| | | // dappSystemService.updateBalanceInsertFlow( |
| | | // multiply, |
| | | // dappStorageTwo.getMemberId(), |
| | | // MoneyFlowEnum.DA_DAN_JI_LI_PERK.getValue(), |
| | | // StrUtil.format(MoneyFlowEnum.DA_DAN_JI_LI_PERK.getDescrition(),daDanTotal,multiply)); |
| | | // |
| | | // realAmount = realAmount.add(multiply); |
| | | // } |
| | | // DappStorage dappStorageThree = dappStorageMapper.selectAmountByDesc(DateUtil.offsetDay(new Date(),0),2,1); |
| | | // if(ObjectUtil.isNotEmpty(dappStorageThree)){ |
| | | // BigDecimal multiply = everyAmount.multiply(new BigDecimal(threeCount)); |
| | | // dappSystemService.updateBalanceInsertFlow( |
| | | // multiply, |
| | | // dappStorageThree.getMemberId(), |
| | | // MoneyFlowEnum.DA_DAN_JI_LI_PERK.getValue(), |
| | | // StrUtil.format(MoneyFlowEnum.DA_DAN_JI_LI_PERK.getDescrition(),daDanTotal,multiply)); |
| | | // |
| | | // realAmount = realAmount.add(multiply); |
| | | // } |
| | | // DappStorage dappStorageFour = dappStorageMapper.selectAmountByDesc(DateUtil.offsetDay(new Date(),0),3,1); |
| | | // if(ObjectUtil.isNotEmpty(dappStorageFour)){ |
| | | // BigDecimal multiply = everyAmount.multiply(new BigDecimal(fourCount)); |
| | | // dappSystemService.updateBalanceInsertFlow( |
| | | // multiply, |
| | | // dappStorageFour.getMemberId(), |
| | | // MoneyFlowEnum.DA_DAN_JI_LI_PERK.getValue(), |
| | | // StrUtil.format(MoneyFlowEnum.DA_DAN_JI_LI_PERK.getDescrition(),daDanTotal,multiply)); |
| | | // |
| | | // realAmount = realAmount.add(multiply); |
| | | // } |
| | | // } |
| | | // } |
| | | // |
| | | // /** |
| | | // * 另外50% 给予当天直推总业绩排名激励前10名,第1名40%,2-4名30%,5-10名30% |
| | | // */ |
| | | // BigDecimal directTotal = jiLiTotal.multiply(new BigDecimal("0.5")).setScale(2, BigDecimal.ROUND_DOWN); |
| | | // /** |
| | | // * 存放直推业绩<上级的memberId,直推总业绩> |
| | | // */ |
| | | // HashMap<Long, BigDecimal> map = new HashMap<>(); |
| | | // |
| | | // List<DappStorage> dappStorages = dappStorageMapper.selectListByDate(DateUtil.offsetDay(new Date(),0)); |
| | | // if(CollUtil.isNotEmpty(dappStorages)){ |
| | | // for(DappStorage dappStorage : dappStorages){ |
| | | // DappMemberEntity member = dappMemberDao.selectById(dappStorage.getMemberId()); |
| | | // if(StrUtil.isEmpty(member.getRefererId())){ |
| | | // continue; |
| | | // } |
| | | // DappMemberEntity memberRef = dappMemberDao.selectMemberInfoByInviteId(member.getRefererId()); |
| | | // if(ObjectUtil.isEmpty(memberRef)){ |
| | | // continue; |
| | | // } |
| | | // Long id = memberRef.getId(); |
| | | // if(map.containsKey(id)){ |
| | | // BigDecimal bigDecimal = map.get(id); |
| | | // BigDecimal add = bigDecimal.add(dappStorage.getAmount()); |
| | | // map.put(id,add); |
| | | // }else{ |
| | | // map.put(id,dappStorage.getAmount()); |
| | | // } |
| | | // } |
| | | // } |
| | | // /** |
| | | // * 获取这个map的直推总业绩前十,分发奖励 |
| | | // */ |
| | | // if(!map.isEmpty()){ |
| | | // // 使用Stream API按照BigDecimal从大到小排序 |
| | | // List<Map.Entry<Long, BigDecimal>> topTenEntries = map.entrySet().stream() |
| | | // .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())) |
| | | // .limit(10) |
| | | // .collect(Collectors.toList()); |
| | | // |
| | | // int startNum = 1; |
| | | // for (Map.Entry<Long, BigDecimal> entry : topTenEntries) { |
| | | // |
| | | // Long memberId = entry.getKey(); |
| | | // BigDecimal directAchieve = entry.getValue(); |
| | | // //第一名 |
| | | // if(startNum == 1){ |
| | | // BigDecimal bigDecimal = directTotal.multiply(new BigDecimal("0.4")).setScale(2, BigDecimal.ROUND_DOWN); |
| | | // dappSystemService.updateBalanceInsertFlow( |
| | | // bigDecimal, |
| | | // memberId, |
| | | // MoneyFlowEnum.ZHI_TUI_JI_LI_PERK.getValue(), |
| | | // StrUtil.format(MoneyFlowEnum.ZHI_TUI_JI_LI_PERK.getDescrition(),directAchieve,startNum,bigDecimal)); |
| | | // |
| | | // realAmount = realAmount.add(bigDecimal); |
| | | // }else if(startNum > 1 && startNum <=4){ |
| | | // BigDecimal bigDecimal = directTotal.multiply(new BigDecimal("0.3")).setScale(2, BigDecimal.ROUND_DOWN); |
| | | // BigDecimal divide = bigDecimal.divide(new BigDecimal("3"), 2, BigDecimal.ROUND_DOWN); |
| | | // |
| | | // dappSystemService.updateBalanceInsertFlow( |
| | | // divide, |
| | | // memberId, |
| | | // MoneyFlowEnum.ZHI_TUI_JI_LI_PERK.getValue(), |
| | | // StrUtil.format(MoneyFlowEnum.ZHI_TUI_JI_LI_PERK.getDescrition(),directAchieve,startNum,divide)); |
| | | // |
| | | // realAmount = realAmount.add(divide); |
| | | // }else{ |
| | | // BigDecimal bigDecimal = directTotal.multiply(new BigDecimal("0.3")).setScale(2, BigDecimal.ROUND_DOWN); |
| | | // BigDecimal divide = bigDecimal.divide(new BigDecimal("6"), 2, BigDecimal.ROUND_DOWN); |
| | | // |
| | | // dappSystemService.updateBalanceInsertFlow( |
| | | // divide, |
| | | // memberId, |
| | | // MoneyFlowEnum.ZHI_TUI_JI_LI_PERK.getValue(), |
| | | // StrUtil.format(MoneyFlowEnum.ZHI_TUI_JI_LI_PERK.getDescrition(),directAchieve,startNum,divide)); |
| | | // |
| | | // realAmount = realAmount.add(divide); |
| | | // } |
| | | // startNum = startNum + 1; |
| | | // } |
| | | // } |
| | | // |
| | | // BigDecimal subtract = new BigDecimal(jiliChiDic.getValue()).subtract(realAmount); |
| | | // jiliChiDic.setValue(subtract.toString()); |
| | | // dataDictionaryCustomMapper.updateById(jiliChiDic); |
| | | // } |
| | | // @Test |
| | | // public void testv5(){ |
| | | // Long memberId = 1L; |
| | | // List<TeamDownVo> objects = new ArrayList<>(); |
| | | // |
| | | // DappMemberEntity memberEntity = dappMemberDao.selectById(memberId); |
| | | // List<DappMemberEntity> directMembers = dappMemberDao.selectChildMemberDirectOrNot(memberEntity.getInviteId(), 1, null); |
| | | // |
| | | // if(CollUtil.isNotEmpty(directMembers)){ |
| | | // |
| | | // for(DappMemberEntity directMember : directMembers){ |
| | | // TeamDownVo teamDownVo = new TeamDownVo(); |
| | | // |
| | | // |
| | | // |
| | | // teamDownVo.setAddress(directMember.getAddress()); |
| | | // List<DappMemberEntity> teamMembers = dappMemberDao.selectChildMemberDirectOrNot(directMember.getInviteId(), 2, null); |
| | | // if(CollUtil.isEmpty(teamMembers)){ |
| | | // teamDownVo.setActiveCnt(0); |
| | | // teamDownVo.setActiveAchieve(BigDecimal.ZERO); |
| | | // }else{ |
| | | // List<DappMemberEntity> teamCntAva = teamMembers.stream().filter(dappMemberEntity -> dappMemberEntity.getActiveStatus() == 1).collect(Collectors.toList()); |
| | | // List<Long> collectTeam = teamCntAva.stream().map(DappMemberEntity::getId).collect(Collectors.toList()); |
| | | // |
| | | // if(CollUtil.isNotEmpty(collectTeam)){ |
| | | // QueryWrapper<DappStorage> collectTeamWrapper = new QueryWrapper<>(); |
| | | // collectTeamWrapper.in("member_id",collectTeam); |
| | | // collectTeamWrapper.eq("state",1); |
| | | // List<DappStorage> dappStoragesTeam = dappStorageMapper.selectList(collectTeamWrapper); |
| | | // BigDecimal teamAchieve = dappStoragesTeam.stream() |
| | | // .map(DappStorage::getAmount) // 映射amount到流中 |
| | | // .reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | // |
| | | // teamDownVo.setActiveCnt(teamCntAva.size()); |
| | | // teamDownVo.setActiveAchieve(teamAchieve); |
| | | // }else{ |
| | | // teamDownVo.setActiveCnt(0); |
| | | // teamDownVo.setActiveAchieve(BigDecimal.ZERO); |
| | | // } |
| | | // } |
| | | // |
| | | // objects.add(teamDownVo); |
| | | // } |
| | | // } |
| | | // System.out.println(objects); |
| | | // } |
| | | } |