From 163ee7c4bd868557fb7d7399feaa03d6d9660526 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Fri, 11 Aug 2023 17:46:17 +0800
Subject: [PATCH] 数据修改

---
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java |  748 ++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 450 insertions(+), 298 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
index ffd9e2b..5cbd84c 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
@@ -1,6 +1,5 @@
 package cc.mrbird.febs.dapp.service.impl;
 
-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;
@@ -9,6 +8,7 @@
 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.contract.andao.AndaoContractMain;
 import cc.mrbird.febs.dapp.dto.*;
 import cc.mrbird.febs.dapp.entity.*;
 import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum;
@@ -24,16 +24,20 @@
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
+import org.jsoup.helper.DataUtil;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.web3j.utils.Strings;
 
 import java.math.BigDecimal;
+import java.math.BigInteger;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -61,6 +65,11 @@
     private final DappMemberNodeMapper dappMemberNodeMapper;
     private final DappAKlineMapper dappAKlineMapper;
     private final DappUsdtPerkEntityMapper dappUsdtPerkEntityMapper;
+    private final MallGoodsMapper mallGoodsMapper;
+    private final MallOrderInfoMapper mallOrderInfoMapper;
+    private final MallOrderItemMapper mallOrderItemMapper;
+    private final MallAchieveRecordMapper mallAchieveRecordMapper;
+    private final DappAccountMoneyChangeDao dappAccountMoneyChangeDao;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -138,25 +147,19 @@
 
         if (member == null) {
             String referenceID = null;
+            int nodeType = 0;
+            //
             if (!"asdf4321".equals(connectDto.getInviteId())) {
-//                DappMemberEntity parent = dappMemberDao.selectMemberInfoByInviteId(connectDto.getInviteId());
-                DappMemberEntity parent = dappMemberDao.selectByAddress(connectDto.getInviteId(), null);
+                DappMemberEntity parent = dappMemberDao.selectMemberInfoByInviteId(connectDto.getInviteId());
                 if (parent == null) {
                     throw new FebsException("recommender is not exist");
                 }
                 referenceID = parent.getInviteId();
 
-//                List<DappMemberEntity> child = dappMemberDao.selectChildMemberDirectOrNot(connectDto.getInviteId(), 1, null);
-//                if (child.size() == 6) {
-//                    throw new FebsException("Invite Code is Invalid");
-//                }
             } else {
                 connectDto.setInviteId(null);
             }
-            member = insertMember(connectDto.getAddress(), referenceID);
-            //升级用户的代理等级
-//            DappMemberEntity dappMemberEntity = dappMemberDao.selectMemberInfoByInviteId(connectDto.getInviteId());
-//            chainProducer.sendAgentUpMsg(dappMemberEntity.getId());
+            member = insertMember(connectDto.getAddress(), referenceID,nodeType);
         }
 
         String key = LoginUserUtil.getLoginKey(connectDto.getAddress(), connectDto.getNonce(), connectDto.getSign());
@@ -207,27 +210,17 @@
             member.setCurrentUser(currentUser.getUserId());
         }
         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));
-            }
-        }
+//        List<DappMemberEntity> records = dappMemberEntityIPage.getRecords();
+//        if(CollUtil.isNotEmpty(records)){
+//            for(DappMemberEntity memberEntity : records){
+//                Long memberId = memberEntity.getId();
+//                DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(memberId);
+//                memberEntity.setCoinAmount(ObjectUtil.isEmpty(dappWalletCoinEntity) ? BigDecimal.ZERO : dappWalletCoinEntity.getAvailableAmount());
+//
+//                DappWalletMineEntity dappWalletMineEntity = dappWalletMineDao.selectByMemberId(memberId);
+//                memberEntity.setScoreAmount(ObjectUtil.isEmpty(dappWalletMineEntity) ? BigDecimal.ZERO : dappWalletMineEntity.getAvailableAmount());
+//            }
+//        }
         return dappMemberEntityIPage;
     }
 
@@ -310,18 +303,19 @@
     }
 
     @Override
-    public DappMemberEntity insertMember(String address, String refererId) {
+    public DappMemberEntity insertMember(String address, String refererId,int nodeType) {
 
-        return insertMember(address, refererId, "BSC", DataDictionaryEnum.MEMBER.getCode());
+        return insertMember(address, refererId, "BSC", MemberLevelEnum.MEMBER.getType(),nodeType);
     }
 
     @Override
-    public DappMemberEntity insertMember(String address, String refererId, String chainType, String accountType) {
+    public DappMemberEntity insertMember(String address, String refererId, String chainType, String accountType,int nodeType) {
         DappMemberEntity member = new DappMemberEntity();
         member.setAddress(address);
         member.setChainType(chainType);
         member.setAccountType(accountType);
         member.setActiveStatus(2);
+        member.setNodeType(nodeType);
 
         dappMemberDao.insert(member);
 
@@ -338,8 +332,10 @@
             // 若没有推荐人,则直接激活
             member.setActiveStatus(2);
         }
-
-        member.setInviteId(ShareCodeUtil.toSerialCode(member.getId()));
+        String inviteIdStr = ShareCodeUtil.toSerialCode(member.getId());
+        member.setInviteId(inviteIdStr);
+        member.setInviteLeft(inviteIdStr+"L");
+        member.setInviteRight(inviteIdStr+"R");
         member.setRefererId(refererId);
         if (StrUtil.isNotBlank(refererId)) {
             boolean flag = false;
@@ -374,91 +370,106 @@
 
     @Override
     public TeamListVo findTeamList() {
-        DappMemberEntity member = LoginUserUtil.getAppUser();
-        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);
+        Long memberId = LoginUserUtil.getAppUser().getId();
+        DappMemberEntity dappMemberEntity = this.baseMapper.selectById(memberId);
+
+        TeamListVo myTeamVo = new TeamListVo();
+        myTeamVo.setMyAchieve(mallAchieveRecordMapper.selectAchieveByMemberId(dappMemberEntity.getInviteId(), 1));
+        myTeamVo.setMyTeamAchieve(mallAchieveRecordMapper.selectAchieveByMemberId(dappMemberEntity.getInviteId(), 2));
+        List<DappMemberEntity> child = dappMemberDao.selectAllMemberInfoByRefererId(dappMemberEntity.getInviteId());
+        myTeamVo.setMyTeamCnt(CollUtil.isEmpty(child) ? 0 : child.size());
+
+        List<TeamChildListVo> list = mallAchieveRecordMapper.selectTeamListByInviteId(dappMemberEntity.getInviteId());
+        if(CollUtil.isNotEmpty(list)){
+            for(TeamChildListVo teamChildListVo : list){
+                List<DappMemberEntity> childDirect = dappMemberDao.selectAllMemberInfoByRefererId(teamChildListVo.getInviteId());
+                teamChildListVo.setCnt(CollUtil.isEmpty(childDirect) ? 0 : childDirect.size());
+                List<MallAchieveRecord> memberAchieveList = mallAchieveRecordMapper.selectCountByInvitedId(teamChildListVo.getInviteId(), 1);
+                if(CollUtil.isEmpty(memberAchieveList)){
+                    teamChildListVo.setAchieveState(2);
+                }else{
+                    teamChildListVo.setAchieveState(1);
+                }
+                List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectCountByInvitedId(teamChildListVo.getInviteId(), 2);
+                if(CollUtil.isEmpty(mallAchieveRecords)){
+                    teamChildListVo.setRealAchieve(BigDecimal.ZERO);
+                    teamChildListVo.setOrderCnt(0);
+                }else{
+                    BigDecimal reduce = mallAchieveRecords.stream().map(MallAchieveRecord::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    teamChildListVo.setRealAchieve(reduce);
+                    teamChildListVo.setOrderCnt(mallAchieveRecords.size());
+                }
             }
-            teamIncomeMax = teamIncomeMax.setScale(4,BigDecimal.ROUND_DOWN);
         }
-        teamListVo.setAchieve(teamIncomeMax);
-        return teamListVo;
+        return myTeamVo;
     }
 
     @Override
     public void setSystemFee(AdminSystemFeeVo adminSystemFeeVo) {
-        String rebatePercent = adminSystemFeeVo.getRebatePercent();
-        DataDictionaryCustom rebateDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.REBATE_PERCENT.getType(), DataDictionaryEnum.REBATE_PERCENT.getCode());
-        rebateDic.setValue(rebatePercent);
-        dataDictionaryCustomMapper.updateById(rebateDic);
-
-        String serviceFee = adminSystemFeeVo.getServiceFee();
-        DataDictionaryCustom serviceFeeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.WITHDRAW_SERVICE_FEE.getType(), DataDictionaryEnum.WITHDRAW_SERVICE_FEE.getCode());
-        serviceFeeDic.setValue(serviceFee);
-        dataDictionaryCustomMapper.updateById(serviceFeeDic);
-
-        String memberFee = adminSystemFeeVo.getMemberFee();
-        DataDictionaryCustom memberFeeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.MEMBER_FEE.getType(), DataDictionaryEnum.MEMBER_FEE.getCode());
-        memberFeeDic.setValue(memberFee);
-        dataDictionaryCustomMapper.updateById(memberFeeDic);
-
-        String symbolPrice = adminSystemFeeVo.getSymbolPrice();
-        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);
+//        String rebatePercent = adminSystemFeeVo.getRebatePercent();
+//        DataDictionaryCustom rebateDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.REBATE_PERCENT.getType(), DataDictionaryEnum.REBATE_PERCENT.getCode());
+//        rebateDic.setValue(rebatePercent);
+//        dataDictionaryCustomMapper.updateById(rebateDic);
+//
+//        String serviceFee = adminSystemFeeVo.getServiceFee();
+//        DataDictionaryCustom serviceFeeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.WITHDRAW_SERVICE_FEE.getType(), DataDictionaryEnum.WITHDRAW_SERVICE_FEE.getCode());
+//        serviceFeeDic.setValue(serviceFee);
+//        dataDictionaryCustomMapper.updateById(serviceFeeDic);
+//
+//        String memberFee = adminSystemFeeVo.getMemberFee();
+//        DataDictionaryCustom memberFeeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.MEMBER_FEE.getType(), DataDictionaryEnum.MEMBER_FEE.getCode());
+//        memberFeeDic.setValue(memberFee);
+//        dataDictionaryCustomMapper.updateById(memberFeeDic);
+//
+//        String symbolPrice = adminSystemFeeVo.getSymbolPrice();
+//        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
     public ApiRunListInfoVo findRunListInfo() {
         ApiRunListInfoVo apiRunListInfoVo = new ApiRunListInfoVo();
-        //获取当前是第几轮队列
-        String redisKey = "QUEUE_COUNT";
-        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)|| !queueCount.equals(memberOutCount)){
-            redisUtils.set(redisKey,queueCount,0L);
-            memberOutCount = queueCount;
-        }
-        //出局条件的人数
-        /**
-         * 初始大小 5+4*0
-         * 1  1,2,3,4,5  1出局 5+4*0
-         * 2  2,3,4,5,1(复投),7,8,9,10  2出局 5+4*1
-         * 3  3,4,5,1(复投),7,8,9,10,2(复投),12,13,14,15 3出局 5+4*2
-         * 4  4,5,1(复投),7,8,9,10,2(复投),12,13,14,15,3(复投),17,18,19,20  4出局 5+4*3
-         */
-        Integer memberCount = Integer.parseInt(memberOutCount) * 4 + 5;
-        //判断当前是否符合出局条件
-        QueryWrapper<DappSystemProfit> objectQueryWrapper = new QueryWrapper<>();
-        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(ObjectUtil.isEmpty(dappSystemProfitIn) ? 0L : dappSystemProfitIn.getId());
-        DappSystemProfit dappSystemProfitOut = dappSystemProfitDao.selectSystemProfitOutByState(DappSystemProfit.STATE_OUT);
-        apiRunListInfoVo.setLuckyMember(ObjectUtil.isEmpty(dappSystemProfitOut) ? 0L : dappSystemProfitOut.getId());
+//        //获取当前是第几轮队列
+//        String redisKey = "QUEUE_COUNT";
+//        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)|| !queueCount.equals(memberOutCount)){
+//            redisUtils.set(redisKey,queueCount,0L);
+//            memberOutCount = queueCount;
+//        }
+//        //出局条件的人数
+//        /**
+//         * 初始大小 5+4*0
+//         * 1  1,2,3,4,5  1出局 5+4*0
+//         * 2  2,3,4,5,1(复投),7,8,9,10  2出局 5+4*1
+//         * 3  3,4,5,1(复投),7,8,9,10,2(复投),12,13,14,15 3出局 5+4*2
+//         * 4  4,5,1(复投),7,8,9,10,2(复投),12,13,14,15,3(复投),17,18,19,20  4出局 5+4*3
+//         */
+//        Integer memberCount = Integer.parseInt(memberOutCount) * 4 + 5;
+//        //判断当前是否符合出局条件
+//        QueryWrapper<DappSystemProfit> objectQueryWrapper = new QueryWrapper<>();
+//        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(ObjectUtil.isEmpty(dappSystemProfitIn) ? 0L : dappSystemProfitIn.getId());
+//        DappSystemProfit dappSystemProfitOut = dappSystemProfitDao.selectSystemProfitOutByState(DappSystemProfit.STATE_OUT);
+//        apiRunListInfoVo.setLuckyMember(ObjectUtil.isEmpty(dappSystemProfitOut) ? 0L : dappSystemProfitOut.getId());
         return apiRunListInfoVo;
     }
 
@@ -499,64 +510,19 @@
     }
 
     @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());
+        if(StrUtil.isNotEmpty(dappMemberInfoVo.getAccountType())){
+            String levelDescription = MemberLevelEnum.MEMBER.getLevelDescription(dappMemberInfoVo.getAccountType());
+            dappMemberInfoVo.setAccountType(levelDescription);
+        }
 
-        BigDecimal amountPerkTotal = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(member.getId(),
-                FundFlowEnum.MEMBER_AMOUNT_PERK_TOTAL.getCode(), 2);
-        dappMemberInfoVo.setAmountPerkTotal(amountPerkTotal);
+        DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(member.getId());
+        dappMemberInfoVo.setAmount(ObjectUtil.isEmpty(dappWalletCoinEntity) ? BigDecimal.ZERO : dappWalletCoinEntity.getTotalAmount());
 
-        DataDictionaryCustom ausdPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
-                PoolEnum.TRANSFER_A_AUSD_PERCENT.getType(),
-                PoolEnum.TRANSFER_A_AUSD_PERCENT.getCode()
-        );
-        BigDecimal ausdPercent = new BigDecimal(ausdPercentDic.getValue());
-        dappMemberInfoVo.setAusdtFee(ausdPercent);
-
-        DataDictionaryCustom aroundFeeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
-                PoolEnum.ANDAO_MEMBER_TO_MENBER_PERCENT.getType(),
-                PoolEnum.ANDAO_MEMBER_TO_MENBER_PERCENT.getCode()
-        );
-        BigDecimal aroundFee = new BigDecimal(aroundFeeDic.getValue());
-        dappMemberInfoVo.setAroundFee(aroundFee);
-        //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())).setScale(12,BigDecimal.ROUND_DOWN));
+        DappWalletMineEntity dappWalletMineEntity = dappWalletMineDao.selectByMemberId(member.getId());
+        dappMemberInfoVo.setScore(ObjectUtil.isEmpty(dappWalletMineEntity) ? BigDecimal.ZERO : dappWalletMineEntity.getTotalAmount());
         return new FebsResponse().success().data(dappMemberInfoVo);
     }
 
@@ -574,143 +540,12 @@
     }
 
     @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;
-    }
-
-    @Override
-    public FebsResponse getFundFlowInfo() {
-        DappMemberEntity member = LoginUserUtil.getAppUser();
-        Long memberId = member.getId();
-        FundFlowInfoVo fundFlowInfoVo = new FundFlowInfoVo();
-        BigDecimal myDonateCnt = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(member.getId(),
-                FundFlowEnum.BUY_A_COIN.getCode(), 2);
-        fundFlowInfoVo.setMyDonateCnt(myDonateCnt.abs());
-        fundFlowInfoVo.setMyDonateCntNum(FundFlowEnum.BUY_A_COIN.getCode());
-
-        BigDecimal amountPerkTotal = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(member.getId(),
-                FundFlowEnum.MEMBER_AMOUNT_PERK_TOTAL.getCode(), 2);
-        fundFlowInfoVo.setAmountPerkTotal(amountPerkTotal.abs());
-        fundFlowInfoVo.setAmountPerkTotalNum(FundFlowEnum.MEMBER_AMOUNT_PERK_TOTAL.getCode());
-
-        DappUsdtPerkEntity dappUsdtPerkEntity = dappUsdtPerkEntityMapper.selectByMemberId(memberId);
-        fundFlowInfoVo.setAmountPerkAva(ObjectUtil.isEmpty(dappUsdtPerkEntity) ? BigDecimal.ZERO : dappUsdtPerkEntity.getAmount());
-
-        BigDecimal directAmount = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(memberId,
-                FundFlowEnum.DIRECT_A_PERCENT.getCode(), 2);
-        fundFlowInfoVo.setDirectAmount(directAmount);
-        fundFlowInfoVo.setDirectAmountNum(FundFlowEnum.DIRECT_A_PERCENT.getCode());
-
-        BigDecimal staticAmount = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(memberId,
-                FundFlowEnum.POOL_MEMBER_A_CNT.getCode(), 2);
-        fundFlowInfoVo.setStaticAmount(staticAmount);
-        fundFlowInfoVo.setStaticAmountNum(FundFlowEnum.POOL_MEMBER_A_CNT.getCode());
-
-        BigDecimal nodeAmount = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(memberId,
-                FundFlowEnum.NODE_A_PERCENT_TO_MEMBER.getCode(), 2);
-        fundFlowInfoVo.setNodeAmount(nodeAmount);
-        fundFlowInfoVo.setNodeAmountNum(FundFlowEnum.NODE_A_PERCENT_TO_MEMBER.getCode());
-
-        BigDecimal levelEqualAmount = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(memberId,
-                FundFlowEnum.DAO_5_NODE_EQUALS_PERK.getCode(), 2);
-        fundFlowInfoVo.setLevelEqualAmount(levelEqualAmount);
-        fundFlowInfoVo.setLevelEqualAmountNum(FundFlowEnum.DAO_5_NODE_EQUALS_PERK.getCode());
-
-        BigDecimal levelAmount = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(memberId,
-                FundFlowEnum.LEVEL_A_PERCENT_CNT_MEMBER.getCode(), 2);
-        fundFlowInfoVo.setLevelAmount(levelAmount);
-        fundFlowInfoVo.setLevelAmountNum(FundFlowEnum.LEVEL_A_PERCENT_CNT_MEMBER.getCode());
-
-        BigDecimal daoThreeAmount = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(memberId,
-                FundFlowEnum.DAO_3_NODE_PERK.getCode(), 2);
-        fundFlowInfoVo.setDaoThreeAmount(daoThreeAmount);
-        fundFlowInfoVo.setDaoThreeAmountNum(FundFlowEnum.DAO_3_NODE_PERK.getCode());
-
-        BigDecimal daoFourAmount = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(memberId,
-                FundFlowEnum.DAO_4_NODE_PERK.getCode(), 2);
-        fundFlowInfoVo.setDaoFourAmount(daoFourAmount);
-        fundFlowInfoVo.setDaoFourAmountNum(FundFlowEnum.DAO_4_NODE_PERK.getCode());
-
-        BigDecimal daoFiveAmount = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(memberId,
-                FundFlowEnum.DAO_5_NODE_PERK.getCode(), 2);
-        fundFlowInfoVo.setDaoFiveAmount(daoFiveAmount);
-        fundFlowInfoVo.setDaoFiveAmountNum(FundFlowEnum.DAO_5_NODE_PERK.getCode());
-
-        return new FebsResponse().success().data(fundFlowInfoVo);
-    }
-
-    @Override
     public FebsResponse insideWithYes(Long id) {
         DappMemberEntity dappMemberEntity = dappMemberDao.selectById(id);
         if(ObjectUtil.isEmpty(dappMemberEntity)) {
             return new FebsResponse().fail().message("会员信息不存在");
         }
-        dappMemberEntity.setNodeType(1);
-        dappMemberEntity.setAccountType(MemberLevelEnum.NODE_5.getType());
+        dappMemberEntity.setActiveStatus(1);
         dappMemberDao.updateById(dappMemberEntity);
         return new FebsResponse().success();
     }
@@ -721,8 +556,7 @@
         if(ObjectUtil.isEmpty(dappMemberEntity)) {
             return new FebsResponse().fail().message("会员信息不存在");
         }
-        dappMemberEntity.setNodeType(2);
-        dappMemberEntity.setAccountType(MemberLevelEnum.MEMBER.getType());
+        dappMemberEntity.setActiveStatus(2);
         dappMemberDao.updateById(dappMemberEntity);
         return new FebsResponse().success();
     }
@@ -744,6 +578,324 @@
         return new FebsResponse().success();
     }
 
+    @Override
+    public IPage<MallGoodsListVo> findMallGoodsListInPage(MallGoodsQueryDto queryDto) {
+        Page<MallGoodsListVo> page = new Page<>(queryDto.getPageNow(), queryDto.getPageSize());
+        return dappMemberDao.selectMallGoodsListQueryInPage(queryDto, page);
+    }
+
+    @Override
+    public IPage<MallOrderListVo> findMallOrderListInPage(MallOrderQueryDto queryDto) {
+        DappMemberEntity member = LoginUserUtil.getAppUser();
+        queryDto.setMemberId(member.getId());
+        Page<MallOrderListVo> page = new Page<>(queryDto.getPageNow(), queryDto.getPageSize());
+        return dappMemberDao.selectMallOrderListQueryInPage(queryDto, page);
+    }
+
+    @Override
+    public MallOrderListVo findOrderDetailsById(Long id) {
+        DappMemberEntity member = LoginUserUtil.getAppUser();
+        MallOrderListVo mallOrderListVo = dappMemberDao.selectMallOrderListVoById(id);
+        List<MallOrderItemVo> mallOrderItemVoList = dappMemberDao.selectMallOrderItemVoByOrderId(id);
+        mallOrderListVo.setItems(mallOrderItemVoList);
+        return mallOrderListVo;
+    }
+
+    @Override
+    public MallGoodsListVo findGoodsDetailsById(Long id) {
+        DappMemberEntity member = LoginUserUtil.getAppUser();
+        MallGoodsListVo mallGoodsListVo = dappMemberDao.selectMallGoodsListVoById(id);
+        return mallGoodsListVo;
+    }
+
+    @Override
+    @Transactional
+    public Long createOrder(AddOrderDto addOrderDto) {
+        DappMemberEntity member = LoginUserUtil.getAppUser();
+//        DappMemberEntity member = dappMemberDao.selectById(1L);
+        /**
+         * 1、商品是否上架
+         * 2、用户余额是否足够
+         */
+        MallGoods mallGoods = mallGoodsMapper.selectById(addOrderDto.getGoodsId());
+        if(ObjectUtil.isEmpty(mallGoods)){
+            throw new FebsException("商品不存在");
+        }
+        if(MallGoods.ISSALE_STATUS_DISABLED == mallGoods.getIsSale()){
+            throw new FebsException("商品已下架");
+        }
+        DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(member.getId());
+        if(ObjectUtil.isEmpty(dappWalletCoinEntity)){
+            throw new FebsException("余额不足");
+        }
+        BigDecimal presentPrice = new BigDecimal(mallGoods.getPresentPrice());
+        BigDecimal totalAmount = presentPrice.multiply(new BigDecimal(addOrderDto.getGoodsCnt())).setScale(2,BigDecimal.ROUND_DOWN);
+        if(BigDecimal.ZERO.compareTo(totalAmount) >= 0){
+            throw new FebsException("商品异常");
+        }
+        BigDecimal availableAmount = dappWalletCoinEntity.getAvailableAmount();
+        if(totalAmount.compareTo(availableAmount) > 0){
+            throw new FebsException("余额不足");
+        }
+        /**
+         * 生成一条待支付的订单
+         */
+
+        String orderNo = MallUtils.getOrderNum();
+        MallOrderInfo mallOrderInfo = new MallOrderInfo();
+        mallOrderInfo.setOrderNo(orderNo);
+        mallOrderInfo.setMemberId(member.getId());
+        mallOrderInfo.setOrderTime(DateUtil.date());
+        mallOrderInfo.setAmount(totalAmount);
+        mallOrderInfo.setStatus(MallOrderInfo.STATUS_WAIT);
+        mallOrderInfo.setOrderType(1);
+        mallOrderInfoMapper.insert(mallOrderInfo);
+        MallOrderItem mallOrderItem = new MallOrderItem();
+        mallOrderItem.setOrderId(mallOrderInfo.getId());
+        mallOrderItem.setGoodsId(addOrderDto.getGoodsId());
+        mallOrderItem.setGoodsName(mallGoods.getGoodsName());
+        mallOrderItem.setCnt(addOrderDto.getGoodsCnt());
+        mallOrderItem.setPrice(presentPrice);
+        mallOrderItem.setAmount(totalAmount);
+        mallOrderItemMapper.insert(mallOrderItem);
+        return mallOrderInfo.getId();
+    }
+
+    @Override
+    @Transactional
+    public void cancelOrder(Long id) {
+//        DappMemberEntity member = LoginUserUtil.getAppUser();
+        DappMemberEntity member = dappMemberDao.selectById(1L);
+        MallOrderInfo orderInfo = mallOrderInfoMapper.selectById(id);
+        if (ObjectUtil.isEmpty(orderInfo)) {
+            throw new FebsException("订单异常");
+        }
+
+        if (MallOrderInfo.STATUS_WAIT != orderInfo.getStatus()) {
+            throw new FebsException("只能取消待支付的订单");
+        }
+
+        orderInfo.setStatus(MallOrderInfo.STATUS_CANCEL);
+        orderInfo.setCancelType(MallOrderInfo.CANCEL_BY_SELF);
+        mallOrderInfoMapper.updateById(orderInfo);
+    }
+
+    @Override
+    @Transactional
+    public void payOrder(Long id) {
+        DappMemberEntity member = LoginUserUtil.getAppUser();
+//        DappMemberEntity member = dappMemberDao.selectById(1L);
+        MallOrderInfo orderInfo = mallOrderInfoMapper.selectById(id);
+        if (ObjectUtil.isEmpty(orderInfo)) {
+            throw new FebsException("订单异常");
+        }
+        if (MallOrderInfo.STATUS_WAIT != orderInfo.getStatus()) {
+            throw new FebsException("只能支付待支付的订单");
+        }
+        /**
+         * 限制用户的购买总量
+         */
+        //实际可购买数量
+        BigDecimal achieveAva = BigDecimal.ZERO;
+        DappMemberEntity dappMemberEntity = dappMemberDao.selectById(member.getId());
+        String accountType = dappMemberEntity.getAccountType();
+        //普通会员的购买上线
+        if(MemberLevelEnum.MEMBER.getType().equals(accountType)){
+            DataDictionaryCustom memberBuyMaxAmountDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                    DataDictionaryEnum.MEMBER_BUY_MAX_AMOUNT.getType(),
+                    DataDictionaryEnum.MEMBER_BUY_MAX_AMOUNT.getCode()
+            );
+            achieveAva = new BigDecimal(ObjectUtil.isEmpty(memberBuyMaxAmountDic) ? "1000" : memberBuyMaxAmountDic.getValue());
+        }else{
+            DataDictionaryCustom memberBuyMaxAmountDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                    "TEAM_LEVEL",accountType
+            );
+            if(ObjectUtil.isEmpty(memberBuyMaxAmountDic)){
+                achieveAva = new BigDecimal("1000");
+            }else{
+                TeamLevelPerk adminAgentInfo = JSONObject.parseObject(memberBuyMaxAmountDic.getValue(), TeamLevelPerk.class);
+                BigDecimal buyMaxAmount = adminAgentInfo.getBuyMaxAmount();
+                achieveAva = buyMaxAmount;
+            }
+        }
+        List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberId(dappMemberEntity.getId());
+        if(CollUtil.isNotEmpty(mallAchieveRecords)){
+            BigDecimal reduce = mallAchieveRecords.stream().map(MallAchieveRecord::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+            achieveAva = achieveAva.subtract(reduce);
+        }
+        if(BigDecimal.ZERO.compareTo(achieveAva) >= 0){
+            throw new FebsException("用户无法购买");
+        }
+        BigDecimal totalAmount = orderInfo.getAmount();
+        if(achieveAva.compareTo(totalAmount) < 0){
+            throw new FebsException("用户最多购买"+achieveAva.setScale(2,BigDecimal.ROUND_DOWN)+"USDT");
+        }
+
+        DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(member.getId());
+        BigDecimal availableAmount = dappWalletCoinEntity.getAvailableAmount();
+        if(totalAmount.compareTo(availableAmount) > 0){
+            throw new FebsException("余额不足");
+        }
+        orderInfo.setPayTime(DateUtil.date());
+        String payOrderNo = MallUtils.getOrderNum("PAY");
+        orderInfo.setPayOrderNo(payOrderNo);
+        orderInfo.setPayMethod("余额支付");
+        orderInfo.setPayResult(1);
+        orderInfo.setStatus(MallOrderInfo.STATUS_PAY);
+        mallOrderInfoMapper.updateById(orderInfo);
+        /**
+         * 更新用户余额
+         */
+        dappWalletCoinDao.reduceTotalAndAvailableByMemberId(member.getId(),totalAmount);
+        DappFundFlowEntity donateScoreFlow = new DappFundFlowEntity(
+                member.getId(),
+                totalAmount.negate(),
+                FundFlowEnum.PAY_ORDER.getCode(),
+                2,
+                BigDecimal.ZERO,
+                payOrderNo,
+                id);
+        dappFundFlowDao.insert(donateScoreFlow);
+
+        /**
+         * 支付成功,消费后成有效账户后可分享(有效用户可推广)
+         */
+        if(2 == dappMemberEntity.getActiveStatus()){
+            dappMemberEntity.setActiveStatus(1);
+            dappMemberDao.updateById(dappMemberEntity);
+        }
+        /**
+         * todo 发送一条订单出的消息
+         */
+        chainProducer.sendSpeedPayOrderMsg(id);
+        chainProducer.sendAutoLevelUpTeamMsg(member.getId());
+    }
+
+    @Override
+    public FebsResponse packageInfo() {
+        Long memberId = LoginUserUtil.getAppUser().getId();
+        PackageInfoVo packageInfoVo = new PackageInfoVo();
+        DataDictionaryCustom packageTotalScoreDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getType(),
+                DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getCode()
+        );
+        BigDecimal packageTotalScore = new BigDecimal(ObjectUtil.isEmpty(packageTotalScoreDic) ? "0" : packageTotalScoreDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
+        packageInfoVo.setPackageTotalScore(packageTotalScore);
+
+        DataDictionaryCustom packageScorePriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.PACKAGE_SCORE_PRICE.getType(),
+                DataDictionaryEnum.PACKAGE_SCORE_PRICE.getCode()
+        );
+        BigDecimal packageScorePrice = new BigDecimal(ObjectUtil.isEmpty(packageScorePriceDic) ? "0" : packageScorePriceDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
+        packageInfoVo.setPackageScorePrice(packageScorePrice);
+
+        DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
+        BigDecimal balance = dappMemberEntity.getBalance();
+        packageInfoVo.setPackageMemberScore(balance);
+        return new FebsResponse().success().data(packageInfoVo);
+    }
+
+    @Override
+    public FebsResponse salePackage(SalePackageDto salePackageDto) {
+        Long memberId = LoginUserUtil.getAppUser().getId();
+        BigDecimal cnt = salePackageDto.getCnt();
+        DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
+        BigDecimal saleDoing = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(memberId, FundFlowEnum.SALE_PACKAGE.getCode(), DappFundFlowEntity.WITHDRAW_STATUS_ING);
+        if(BigDecimal.ZERO.compareTo(saleDoing) < 0){
+            throw new FebsException("正在进行中,请稍后再试");
+        }
+        BigDecimal balance = dappMemberEntity.getBalance();
+        if(BigDecimal.ZERO.compareTo(cnt) >= 0){
+            throw new FebsException("资产不足");
+        }
+        if(cnt.compareTo(balance) > 0){
+            throw new FebsException("资产不足");
+        }
+        //生成一条资金流水
+        DappFundFlowEntity scoreFlow = new DappFundFlowEntity(
+                memberId,
+                cnt,
+                FundFlowEnum.SALE_PACKAGE.getCode(),
+                DappFundFlowEntity.WITHDRAW_STATUS_ING,
+                BigDecimal.ZERO);
+        dappFundFlowDao.insert(scoreFlow);
+
+        BigDecimal subtract = balance.subtract(cnt);
+        dappMemberEntity.setBalance(subtract);
+        dappMemberDao.updateById(dappMemberEntity);
+
+        chainProducer.sendSalePackageMsg(scoreFlow.getId());
+        return new FebsResponse().success();
+    }
+
+    @Override
+    public FebsResponse updateSystemPay(MallSystemPayDto mallSystemPayDto) {
+        Long memberId = mallSystemPayDto.getId();
+        DappMemberEntity mallMember = dappMemberDao.selectById(memberId);
+        if(ObjectUtil.isEmpty(mallMember)){
+            return new FebsResponse().fail().message("系统繁忙,请刷新页面重试");
+        }
+
+        BigDecimal bigDecimal = mallSystemPayDto.getAddBalance();
+
+        Integer type = mallSystemPayDto.getType();
+        if (type == 1) {
+            dappWalletCoinDao.addTotalAndaddAvailableByMemberId(memberId,bigDecimal);
+            //插入流水
+            DappFundFlowEntity amountFlow = new DappFundFlowEntity(
+                    memberId,
+                    bigDecimal,
+                    FundFlowEnum.SYSTEM_AMOUNT.getCode(),
+                    DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
+                    BigDecimal.ZERO);
+            dappFundFlowDao.insert(amountFlow);
+        } else if (type == 2) {
+            dappWalletMineDao.addTotalAndaddAvailableById(bigDecimal,memberId);
+            //插入流水
+            DappFundFlowEntity amountFlow = new DappFundFlowEntity(
+                    memberId,
+                    bigDecimal,
+                    FundFlowEnum.SYSTEM_SCORE.getCode(),
+                    DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
+                    BigDecimal.ZERO);
+            dappFundFlowDao.insert(amountFlow);
+        } else if (type == 3) {
+            BigDecimal balance = mallMember.getBalance();
+            balance = balance.add(bigDecimal);
+            mallMember.setBalance(balance);
+            dappMemberDao.updateById(mallMember);
+            //插入流水
+            DappFundFlowEntity amountFlow = new DappFundFlowEntity(
+                    memberId,
+                    bigDecimal,
+                    FundFlowEnum.SYSTEM_PACKAGE.getCode(),
+                    DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
+                    BigDecimal.ZERO);
+            dappFundFlowDao.insert(amountFlow);
+        } else {
+            throw new FebsException("参数错误");
+        }
+        return new FebsResponse().success();
+    }
+
+    @Override
+    public IPage<MemberMoneyFlowVo> memberMoneyFlow(QueryRequest request, DappMemberEntity dappMemberEntity) {
+        Page<MemberMoneyFlowVo> page = new Page<>(request.getPageNum(), request.getPageSize());
+        IPage<MemberMoneyFlowVo> memberMoneyFlowVos = dappAccountMoneyChangeDao.selectMemberMoneyFlowInPage(page, dappMemberEntity);
+        return memberMoneyFlowVos;
+    }
+
+    public static List<List<String>> partitionList(List<String> originalList, int partitionSize) {
+        List<List<String>> partitionedList = new ArrayList<>();
+        int size = originalList.size();
+        for (int i = 0; i < size; i += partitionSize) {
+            int end = Math.min(size, i + partitionSize);
+            List<String> sublist = originalList.subList(i, end);
+            partitionedList.add(sublist);
+        }
+        return partitionedList;
+    }
+
     /**
      * 获取用户的大小区业绩
      * @param memberId

--
Gitblit v1.9.1