xiaoyong931011
2023-05-19 75d99d3bcab618f56725a3801bb64a6306d9ce63
src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
@@ -2,6 +2,7 @@
import cc.mrbird.febs.common.configure.i18n.MessageSourceUtils;
import cc.mrbird.febs.common.contants.AppContants;
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;
@@ -19,9 +20,8 @@
import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum;
import cc.mrbird.febs.dapp.mapper.*;
import cc.mrbird.febs.dapp.service.DappMemberService;
import cc.mrbird.febs.dapp.vo.AdminSystemFeeVo;
import cc.mrbird.febs.dapp.vo.ApiRunListInfoVo;
import cc.mrbird.febs.dapp.vo.TeamListVo;
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.util.ObjectUtil;
@@ -58,6 +58,11 @@
    private final DappAchieveMemberTreeDao dappAchieveMemberTreeDao;
    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
    private final DappSystemProfitDao dappSystemProfitDao;
    private final ChainProducer chainProducer;
    private final DappFundFlowDao dappFundFlowDao;
    private final DappNodeOrderMapper dappNodeOrderMapper;
    private final DappMemberNodeMapper dappMemberNodeMapper;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -148,6 +153,9 @@
                connectDto.setInviteId(null);
            }
            member = insertMember(connectDto.getAddress(), connectDto.getInviteId());
            //升级用户的代理等级
//            DappMemberEntity dappMemberEntity = dappMemberDao.selectMemberInfoByInviteId(connectDto.getInviteId());
//            chainProducer.sendAgentUpMsg(dappMemberEntity.getId());
        }
        String key = LoginUserUtil.getLoginKey(connectDto.getAddress(), connectDto.getNonce(), connectDto.getSign());
@@ -197,7 +205,29 @@
        if (currentUser.getDeptId() == null) {
            member.setCurrentUser(currentUser.getUserId());
        }
        return dappMemberDao.selectInPage(member, page);
        IPage<DappMemberEntity> dappMemberEntityIPage = dappMemberDao.selectInPage(member, page);
        List<DappMemberEntity> records = dappMemberEntityIPage.getRecords();
        if(CollUtil.isNotEmpty(records)){
            for(DappMemberEntity memberEntity : records){
                Long memberId = memberEntity.getId();
                //直推收益
                BigDecimal directProfit = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(memberId,3,2);
                memberEntity.setDirectProfit(directProfit);
                //购买节点数量
                List<DappMemberNodeVo> dappMemberNodeVos = dappMemberNodeMapper.selectListByMemberId(memberId);
                memberEntity.setMemberNodeCnt(CollUtil.isEmpty(dappMemberNodeVos) ? 0 : dappMemberNodeVos.size());
                BigDecimal memberNodeSumPrice = BigDecimal.ZERO;
                if(CollUtil.isNotEmpty(dappMemberNodeVos)){
                    for(DappMemberNodeVo dappMemberNodeVo : dappMemberNodeVos){
                        BigDecimal nodePrice = dappMemberNodeVo.getNodePrice();
                        memberNodeSumPrice = memberNodeSumPrice.add(nodePrice);
                    }
                }
                memberEntity.setMemberNodeSumPrice(memberNodeSumPrice.setScale(8,BigDecimal.ROUND_DOWN));
            }
        }
        return dappMemberEntityIPage;
    }
    @Override
@@ -349,6 +379,9 @@
        if(ObjectUtil.isEmpty(dappSystemProfit)){
            return null;
        }
        //升级用户的代理等级
        DappMemberEntity dappMemberEntity = dappMemberDao.selectMemberInfoByInviteId(member.getRefererId());
        chainProducer.sendAgentUpMsg(dappMemberEntity.getId());
        return buildTeamMatrix(member.getId());
    }
@@ -373,6 +406,12 @@
        DataDictionaryCustom symbolPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.SYMBOL_PRICE.getType(), DataDictionaryEnum.SYMBOL_PRICE.getCode());
        symbolPriceDic.setValue(symbolPrice);
        dataDictionaryCustomMapper.updateById(symbolPriceDic);
        String directProfit = adminSystemFeeVo.getDirectProfit();
        DataDictionaryCustom directProfitDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.DIRECT_PROFIT.getType(), DataDictionaryEnum.DIRECT_PROFIT.getCode());
        directProfitDic.setValue(directProfit);
        dataDictionaryCustomMapper.updateById(directProfitDic);
    }
    @Override
@@ -383,7 +422,7 @@
        String memberOutCount = redisUtils.getString(redisKey);
        DataDictionaryCustom queueCountSet = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.QUEUE_COUNT.getType(), DataDictionaryEnum.QUEUE_COUNT.getCode());
        String queueCount = queueCountSet.getValue();
        if(StrUtil.isBlank(memberOutCount)){
        if(StrUtil.isBlank(memberOutCount)|| !queueCount.equals(memberOutCount)){
            redisUtils.set(redisKey,queueCount,0L);
            memberOutCount = queueCount;
        }
@@ -401,15 +440,82 @@
        objectQueryWrapper.eq("state",DappSystemProfit.STATE_IN);
        //实际投资人数
        Integer selectCount = dappSystemProfitDao.selectCount(objectQueryWrapper);
        int runPercentNum = memberCount - selectCount;
        runPercentNum = 5-runPercentNum > 0 ? 5-runPercentNum : 1;
        apiRunListInfoVo.setRunPercent(new BigDecimal(runPercentNum).multiply(new BigDecimal(0.4)).setScale(BigDecimal.ROUND_DOWN,1));
//        BigDecimal runPercent = new BigDecimal(selectCount).divide(new BigDecimal(memberCount), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100));
//        apiRunListInfoVo.setRunPercent(runPercent);
        //实际投资人数小于出局条件人数
        //符合则出局 实际投资人数等于出局条件人数
        DappSystemProfit dappSystemProfitIn = dappSystemProfitDao.selectSystemProfitInByState(DappSystemProfit.STATE_IN);
        apiRunListInfoVo.setLuckyMemberNext(dappSystemProfitIn.getId());
        apiRunListInfoVo.setLuckyMemberNext(ObjectUtil.isEmpty(dappSystemProfitIn) ? 0L : dappSystemProfitIn.getId());
        DappSystemProfit dappSystemProfitOut = dappSystemProfitDao.selectSystemProfitOutByState(DappSystemProfit.STATE_OUT);
        apiRunListInfoVo.setLuckyMember(dappSystemProfitOut.getId());
        apiRunListInfoVo.setLuckyMember(ObjectUtil.isEmpty(dappSystemProfitOut) ? 0L : dappSystemProfitOut.getId());
        return apiRunListInfoVo;
    }
    @Override
    public IPage<AdminDappSystemProfitVo> selectSystemProfitInPage(DappSystemProfit dappSystemProfit, QueryRequest request) {
        Page<AdminDappSystemProfitVo> page = new Page<>(request.getPageNum(), request.getPageSize());
        return dappSystemProfitDao.selectSystemProfitInPage(dappSystemProfit, page);
    }
    @Override
    public IPage<AdminSystemProfitFlowListVo> getSystemProfitFlowList(DappSystemProfit dappSystemProfit, QueryRequest request) {
        Page<AdminSystemProfitFlowListVo> page = new Page<>(request.getPageNum(), request.getPageSize());
        return dappSystemProfitDao.selectSystemProfitFlowListInPage(dappSystemProfit, page);
    }
    @Override
    public IPage<AdminTeamInfoVo> getTeamInfo(DappMemberEntity dappMemberEntity, QueryRequest request) {
        Page<AdminTeamInfoVo> page = new Page<>(request.getPageNum(), request.getPageSize());
        dappMemberEntity = this.baseMapper.selectById(dappMemberEntity.getId());
        IPage<AdminTeamInfoVo> adminTeamInfoVoIPage = this.baseMapper.findTeamInfoListInPage(page, dappMemberEntity);
        List<AdminTeamInfoVo> records = adminTeamInfoVoIPage.getRecords();
        if(CollUtil.isNotEmpty(records)){
            for(AdminTeamInfoVo adminTeamInfoVo : records){
                Long memberId = adminTeamInfoVo.getId();
                List<DappMemberEntity> direct = dappMemberDao.selectChildMemberDirectOrNot(adminTeamInfoVo.getInviteId(), 1, 1);
                adminTeamInfoVo.setDirectCnt(direct.size());
                DappSystemProfit dappSystemProfit = dappSystemProfitDao.selectByMemberIdAndState(memberId,DappSystemProfit.STATE_IN);
                adminTeamInfoVo.setSystemProfitId(ObjectUtil.isEmpty(dappSystemProfit) ? 0L : dappSystemProfit.getId());
                BigDecimal directProfit = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(memberId,3,2);
                adminTeamInfoVo.setDirectProfit(directProfit);
                BigDecimal levelProfit = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(memberId,4,2);
                adminTeamInfoVo.setLevelProfit(levelProfit);
                BigDecimal luckyProfit = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(memberId,7,2);
                adminTeamInfoVo.setLuckyProfit(luckyProfit);
            }
        }
        return adminTeamInfoVoIPage;
    }
    @Override
    public FebsResponse getNodeInfo() {
        List<DappNodeOrderVo> dappNodeOrderVos = dappNodeOrderMapper.selectNodeOrderList();
        return new FebsResponse().success().data(dappNodeOrderVos);
    }
    @Override
    public FebsResponse getMemberNode() {
        DappMemberEntity member = LoginUserUtil.getAppUser();
        List<DappMemberNodeVo> dappMemberNodeVos = dappMemberNodeMapper.selectListByMemberId(member.getId());
        return new FebsResponse().success().data(dappMemberNodeVos);
    }
    @Override
    public FebsResponse getMemberInfo() {
        DappMemberEntity member = LoginUserUtil.getAppUser();
        DappMemberInfoVo dappMemberInfoVo = dappMemberDao.selectByMemberId(member.getId());
        return new FebsResponse().success().data(dappMemberInfoVo);
    }
    @Override
    public IPage<DappMemberNodeVo> getMemberNodeInfo(DappMemberEntity dappMemberEntity, QueryRequest request) {
        Page<DappMemberNodeVo> page = new Page<>(request.getPageNum(), request.getPageSize());
        return dappMemberNodeMapper.findMemberNodeInPage(page, dappMemberEntity);
    }
    public TeamListVo buildTeamMatrix(Long memberId) {
        DappMemberEntity member = dappMemberDao.selectById(memberId);
        TeamListVo teamListVo = new TeamListVo();