xiaoyong931011
2023-05-26 57c12d09f1478036f659a718c81a18f7875aeccb
src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
@@ -5,25 +5,21 @@
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.common.exception.FebsException;
import cc.mrbird.febs.common.utils.FebsUtil;
import cc.mrbird.febs.common.utils.LoginUserUtil;
import cc.mrbird.febs.common.utils.RedisUtils;
import cc.mrbird.febs.common.utils.ShareCodeUtil;
import cc.mrbird.febs.common.utils.*;
import cc.mrbird.febs.dapp.chain.ChainEnum;
import cc.mrbird.febs.dapp.chain.ChainService;
import cc.mrbird.febs.dapp.chain.ContractChainService;
import cc.mrbird.febs.dapp.dto.ApproveDto;
import cc.mrbird.febs.dapp.dto.ConnectDto;
import cc.mrbird.febs.dapp.dto.PriceSettingDto;
import cc.mrbird.febs.dapp.dto.TeamListDto;
import cc.mrbird.febs.dapp.dto.*;
import cc.mrbird.febs.dapp.entity.*;
import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum;
import cc.mrbird.febs.dapp.enumerate.PoolEnum;
import cc.mrbird.febs.dapp.mapper.*;
import cc.mrbird.febs.dapp.service.DappMemberService;
import cc.mrbird.febs.dapp.vo.*;
import cc.mrbird.febs.rabbit.producer.ChainProducer;
import cc.mrbird.febs.system.entity.User;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -36,10 +32,8 @@
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
 * @author
@@ -63,6 +57,8 @@
    private final DappNodeOrderMapper dappNodeOrderMapper;
    private final DappMemberNodeMapper dappMemberNodeMapper;
    private final DappAKlineMapper dappAKlineMapper;
    private final DappUsdtPerkEntityMapper dappUsdtPerkEntityMapper;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -374,15 +370,22 @@
    @Override
    public TeamListVo findTeamList() {
        DappMemberEntity member = LoginUserUtil.getAppUser();
        //如果没有加入动能即返回null
        DappSystemProfit dappSystemProfit = dappSystemProfitDao.selectByMemberIdAndState(member.getId(), DappSystemProfit.STATE_IN);
        if(ObjectUtil.isEmpty(dappSystemProfit)){
            return null;
        TeamListVo teamListVo = new TeamListVo();
        List<DappMemberEntity> childs = dappMemberDao.selectMemberInfoByRefererId(member.getInviteId());
        teamListVo.setDirectCnt(CollUtil.isEmpty(childs) ? 0 : childs.size());
        //团队业绩
        BigDecimal teamIncomeMax = BigDecimal.ZERO;
        if(CollUtil.isNotEmpty(childs)){
            // 直推用户
            List<String> childsInviteIds = childs.stream().map(DappMemberEntity::getInviteId).collect(Collectors.toList());
            for(String inviteId : childsInviteIds){
                BigDecimal totalIncomeMember = dappMemberDao.selectAllAchieveByInviteId(inviteId);
                teamIncomeMax = teamIncomeMax.add(totalIncomeMember);
        }
        //升级用户的代理等级
        DappMemberEntity dappMemberEntity = dappMemberDao.selectMemberInfoByInviteId(member.getRefererId());
        chainProducer.sendAgentUpMsg(dappMemberEntity.getId());
        return buildTeamMatrix(member.getId());
            teamIncomeMax = teamIncomeMax.setScale(4,BigDecimal.ROUND_DOWN);
        }
        teamListVo.setAchieve(teamIncomeMax);
        return teamListVo;
    }
    @Override
@@ -507,6 +510,30 @@
    public FebsResponse getMemberInfo() {
        DappMemberEntity member = LoginUserUtil.getAppUser();
        DappMemberInfoVo dappMemberInfoVo = dappMemberDao.selectByMemberId(member.getId());
        //ausd价格
        DataDictionaryCustom ausdPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                PoolEnum.TRANSFER_A_AUSD_PRICE.getType(),
                PoolEnum.TRANSFER_A_AUSD_PRICE.getCode()
        );
        dappMemberInfoVo.setAusdPrice(ObjectUtil.isEmpty(ausdPriceDic) ? new BigDecimal("1") : new BigDecimal(ausdPriceDic.getValue()).setScale(4,BigDecimal.ROUND_DOWN));
        //资产到闪兑的手续费比例
        DataDictionaryCustom mineToCoinFeeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                PoolEnum.WALLET_MINE_TO_COIN_PERCENT.getType(),
                PoolEnum.WALLET_MINE_TO_COIN_PERCENT.getCode()
        );
        dappMemberInfoVo.setMineToCoinFee(ObjectUtil.isEmpty(mineToCoinFeeDic) ? new BigDecimal("0.03") : new BigDecimal(mineToCoinFeeDic.getValue()));
        //提现手续费比例
        DataDictionaryCustom coinOutFeeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                PoolEnum.WALLET_COIN_TO_USDT_PERCENT.getType(),
                PoolEnum.WALLET_COIN_TO_USDT_PERCENT.getCode()
        );
        dappMemberInfoVo.setCoinOutFee(ObjectUtil.isEmpty(coinOutFeeDic) ? new BigDecimal("0.01") : new BigDecimal(coinOutFeeDic.getValue()));
        //A币的价格
        DataDictionaryCustom coinAPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                PoolEnum.COIN_A_PRICE.getType(),
                PoolEnum.COIN_A_PRICE.getCode()
        );
        dappMemberInfoVo.setCoinAPrice(ObjectUtil.isEmpty(coinAPriceDic) ? new BigDecimal("1") : new BigDecimal(coinAPriceDic.getValue()));
        return new FebsResponse().success().data(dappMemberInfoVo);
    }
@@ -516,24 +543,127 @@
        return dappMemberNodeMapper.findMemberNodeInPage(page, dappMemberEntity);
    }
    public TeamListVo buildTeamMatrix(Long memberId) {
    @Override
    public String aKLine(AKLineDto aKLineDto) {
        int type = aKLineDto.getType();
        String redisKey = null;
        if(1 == type){
            redisKey = AppContants.K_LINE_HOUR;
        }else if(2 == type){
            redisKey = AppContants.K_LINE_DAY;
        }else if(3 == type){
            redisKey = AppContants.K_LINE_WEEK;
        }else if(4 == type){
            redisKey = AppContants.K_LINE_MONTH;
        }else{
            redisKey = AppContants.K_LINE_HOUR;
        }
        Object o = redisUtils.get(redisKey);
        if(ObjectUtil.isNotEmpty(o)){
            return redisUtils.get(redisKey).toString();
        }
        return null;
    }
    @Override
    public MyInviteInfoVo findInviteInfo() {
        MyInviteInfoVo myInviteInfoVo = new MyInviteInfoVo();
        DappMemberEntity member = LoginUserUtil.getAppUser();
        Long memberId = member.getId();
        DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
        myInviteInfoVo.setMemberAddress(dappMemberEntity.getAddress());
        DappUsdtPerkEntity dappUsdtPerkEntity = dappUsdtPerkEntityMapper.selectByMemberId(memberId);
        if(ObjectUtil.isEmpty(dappUsdtPerkEntity)){
            dappUsdtPerkEntity = new DappUsdtPerkEntity();
            dappUsdtPerkEntity.setMemberId(memberId);
            dappUsdtPerkEntityMapper.insert(dappUsdtPerkEntity);
        }
        myInviteInfoVo.setMemberAchieve(dappUsdtPerkEntity.getAchieveAmount());
        String refererId = dappMemberEntity.getRefererId();
        DappMemberEntity parentMember = dappMemberDao.selectMemberInfoByInviteId(refererId);
        myInviteInfoVo.setReferenceAddress(parentMember.getAddress());
        HashMap<String, BigDecimal> maxMinAchieve = getMaxMinAchieve(memberId);
        myInviteInfoVo.setMaxAchieve(maxMinAchieve.get(AppContants.MAXACHIEVE));
        myInviteInfoVo.setMinAchieve(maxMinAchieve.get(AppContants.MINACHIEVE));
        List<MyInviteChildInfoVo> myInviteChildInfoVos = new ArrayList<>();
        List<DappMemberEntity> childs = dappMemberDao.selectMemberInfoByRefererId(member.getInviteId());
        if(CollUtil.isNotEmpty(childs)){
            for(DappMemberEntity child : childs){
                MyInviteChildInfoVo myInviteChildInfoVo = new MyInviteChildInfoVo();
                myInviteChildInfoVo.setAddress(child.getAddress());
                myInviteChildInfoVo.setAccountType(child.getAccountType());
                DappUsdtPerkEntity childUsdtPerkEntity = dappUsdtPerkEntityMapper.selectByMemberId(child.getId());
                if(ObjectUtil.isEmpty(dappUsdtPerkEntity)){
                    dappUsdtPerkEntity = new DappUsdtPerkEntity();
                    dappUsdtPerkEntity.setMemberId(child.getId());
                    dappUsdtPerkEntityMapper.insert(dappUsdtPerkEntity);
                }
                myInviteChildInfoVo.setMemberAchieve(childUsdtPerkEntity.getAchieveAmount());
                HashMap<String, BigDecimal> childMaxMinAchieve = getMaxMinAchieve(child.getId());
                myInviteChildInfoVo.setMaxAchieve(childMaxMinAchieve.get(AppContants.MAXACHIEVE));
                myInviteChildInfoVo.setMinAchieve(childMaxMinAchieve.get(AppContants.MINACHIEVE));
                myInviteChildInfoVos.add(myInviteChildInfoVo);
            }
        }
        myInviteInfoVo.setMyInviteChildInfoVos(myInviteChildInfoVos);
        return myInviteInfoVo;
    }
    /**
     * 获取用户的大小区业绩
     * @param memberId
     * @return
     */
    private HashMap<String,BigDecimal> getMaxMinAchieve(Long memberId) {
        //业绩集合
        List<BigDecimal> list = new ArrayList<>();
        //总业绩
        BigDecimal teamIncomeMax = BigDecimal.ZERO;
        //所有直推团队,就是这个会员的所有区域的业绩。
        DappMemberEntity member = dappMemberDao.selectById(memberId);
        TeamListVo teamListVo = new TeamListVo();
        teamListVo.setAddress(member.getAddress());
        teamListVo.setAccountType(member.getAccountType());
        teamListVo.setActiveStatus(member.getActiveStatus());
        List<DappMemberEntity> dappMemberEntities = dappMemberDao.selectMemberInfoByRefererId(member.getInviteId());
        teamListVo.setDirectCnt(dappMemberEntities.size());
        if (CollUtil.isEmpty(dappMemberEntities)) {
            return teamListVo;
        // 直推用户
        List<DappMemberEntity> childs = dappMemberDao.selectMemberInfoByRefererId(member.getInviteId());
        List<String> childsInviteIds = childs.stream().map(DappMemberEntity::getInviteId).collect(Collectors.toList());
        for(String inviteId : childsInviteIds){
            BigDecimal totalIncomeMember = dappMemberDao.selectAllAchieveByInviteId(inviteId);
            teamIncomeMax = teamIncomeMax.add(totalIncomeMember);
            list.add(totalIncomeMember);
        }
        List<TeamListVo> list = new ArrayList<>();
        for (DappMemberEntity childNode : dappMemberEntities) {
            list.add(buildTeamMatrix(childNode.getId()));
        HashMap<String, BigDecimal> objectObjectHashMap = new HashMap<>();
        if(CollUtil.isNotEmpty(list)){
            //最大区的业绩
            BigDecimal maxAchieve = list.stream().max(BigDecimal::compareTo).get();
            BigDecimal minAchieve = teamIncomeMax.subtract(maxAchieve);
            objectObjectHashMap.put(AppContants.MAXACHIEVE,maxAchieve);
            objectObjectHashMap.put(AppContants.MINACHIEVE,minAchieve);
        }else{
            objectObjectHashMap.put(AppContants.MAXACHIEVE,BigDecimal.ZERO);
            objectObjectHashMap.put(AppContants.MINACHIEVE,BigDecimal.ZERO);
        }
        teamListVo.setChildren(list);
        return teamListVo;
        return objectObjectHashMap;
    }
//    public TeamListVo buildTeamMatrix(Long memberId) {
//        DappMemberEntity member = dappMemberDao.selectById(memberId);
//        TeamListVo teamListVo = new TeamListVo();
//        teamListVo.setAddress(member.getAddress());
//        teamListVo.setAccountType(member.getAccountType());
//        List<DappMemberEntity> dappMemberEntities = dappMemberDao.selectMemberInfoByRefererId(member.getInviteId());
//        teamListVo.setDirectCnt(dappMemberEntities.size());
//        DappUsdtPerkEntity dappUsdtPerkEntity = dappUsdtPerkEntityMapper.selectByMemberId(memberId);
//        teamListVo.setAchieve(ObjectUtil.isEmpty(dappUsdtPerkEntity) ? BigDecimal.ZERO : dappUsdtPerkEntity.getAchieveAmount());
//
//        if (CollUtil.isEmpty(dappMemberEntities)) {
//            return teamListVo;
//        }
//
//        List<TeamListVo> list = new ArrayList<>();
//        for (DappMemberEntity childNode : dappMemberEntities) {
//            list.add(buildTeamMatrix(childNode.getId()));
//        }
//        teamListVo.setChildren(list);
//        return teamListVo;
//    }
}