From d4819e728d81b311621d41a92a69f5d26f1a9f70 Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Tue, 02 Jul 2024 18:03:08 +0800
Subject: [PATCH] 逻辑

---
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java |   16 -
 src/main/resources/templates/febs/views/dapp/member.html                  |  198 ++-------------------
 src/main/java/cc/mrbird/febs/dapp/mapper/DappStorageMapper.java           |    4 
 src/main/java/cc/mrbird/febs/dapp/chain/ContractChainService.java         |    9 +
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java |   28 ++
 src/main/java/cc/mrbird/febs/dapp/enumerate/MoneyFlowEnum.java            |    3 
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java |   17 +
 src/main/resources/templates/febs/views/dapp/money-change-flow.html       |   69 ++----
 src/main/java/cc/mrbird/febs/dapp/chain/EthService.java                   |   66 ++++++
 src/main/java/cc/mrbird/febs/dapp/entity/DappStorage.java                 |    4 
 src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java          |    5 
 src/main/resources/mapper/dapp/DappMemberDao.xml                          |    2 
 src/main/resources/templates/febs/views/dapp/member-withdraw.html         |    3 
 src/main/java/cc/mrbird/febs/dapp/vo/WalletInfoVo.java                    |    2 
 src/main/java/cc/mrbird/febs/dapp/controller/MemberController.java        |   24 ++
 src/main/java/cc/mrbird/febs/dapp/dto/BatchTransferDto.java               |   18 ++
 src/main/java/cc/mrbird/febs/dapp/chain/TrxService.java                   |    9 
 src/main/resources/application.yml                                        |    2 
 src/main/resources/mapper/dapp/DappStorageMapper.xml                      |   18 ++
 src/main/resources/templates/febs/views/dapp/member-transter.html         |   35 +++
 20 files changed, 272 insertions(+), 260 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/dapp/chain/ContractChainService.java b/src/main/java/cc/mrbird/febs/dapp/chain/ContractChainService.java
index 7e11eb8..798d691 100644
--- a/src/main/java/cc/mrbird/febs/dapp/chain/ContractChainService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/chain/ContractChainService.java
@@ -1,7 +1,10 @@
 package cc.mrbird.febs.dapp.chain;
 
+import cc.mrbird.febs.dapp.dto.BatchTransferDto;
+
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.util.List;
 
 public interface ContractChainService {
 
@@ -28,4 +31,10 @@
     BigInteger totalSupplyNFT();
 
     String safeMintNFT(String address);
+
+    /**
+     * 批量转账
+     * @param batchTransferDtos
+     */
+    void transferList(List<BatchTransferDto> batchTransferDtos);
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/chain/EthService.java b/src/main/java/cc/mrbird/febs/dapp/chain/EthService.java
index 609cdfd..4f1eff4 100644
--- a/src/main/java/cc/mrbird/febs/dapp/chain/EthService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/chain/EthService.java
@@ -1,10 +1,9 @@
 package cc.mrbird.febs.dapp.chain;
 
-import cn.hutool.core.util.HexUtil;
+import cc.mrbird.febs.dapp.dto.BatchTransferDto;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSONObject;
-import org.bouncycastle.jcajce.provider.digest.SHA3;
 import org.web3j.abi.FunctionEncoder;
 import org.web3j.abi.FunctionReturnDecoder;
 import org.web3j.abi.TypeReference;
@@ -12,12 +11,17 @@
 import org.web3j.abi.datatypes.Function;
 import org.web3j.abi.datatypes.Type;
 import org.web3j.abi.datatypes.generated.Uint256;
-import org.web3j.crypto.*;
+import org.web3j.crypto.Credentials;
+import org.web3j.crypto.RawTransaction;
+import org.web3j.crypto.TransactionEncoder;
 import org.web3j.protocol.Web3j;
 import org.web3j.protocol.core.DefaultBlockParameterName;
 import org.web3j.protocol.core.Request;
 import org.web3j.protocol.core.methods.request.Transaction;
-import org.web3j.protocol.core.methods.response.*;
+import org.web3j.protocol.core.methods.response.EthBlockNumber;
+import org.web3j.protocol.core.methods.response.EthCall;
+import org.web3j.protocol.core.methods.response.EthGetTransactionCount;
+import org.web3j.protocol.core.methods.response.EthSendTransaction;
 import org.web3j.protocol.http.HttpService;
 import org.web3j.utils.Convert;
 import org.web3j.utils.Numeric;
@@ -26,8 +30,9 @@
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.math.RoundingMode;
-import java.nio.charset.StandardCharsets;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
 
@@ -425,4 +430,53 @@
             return "";
         }
     }
+
+    @Override
+    public void transferList(List<BatchTransferDto> batchTransferDtos) {
+        String gas = getGas();
+        Credentials credentials = Credentials.create(privateKey);
+        BigInteger nonce = null;
+        try {
+            nonce = web3j.ethGetTransactionCount(credentials.getAddress(), DefaultBlockParameterName.LATEST).send().getTransactionCount();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        for(BatchTransferDto batchTransferDto : batchTransferDtos){
+
+            String amount = batchTransferDto.getAmount().toPlainString();
+            String toAddress = batchTransferDto.getToAddress();
+
+            BigDecimal amountPow = new BigDecimal(amount).multiply(BigDecimal.TEN.pow(18));
+            amount = amountPow.toPlainString();
+            if (amount.contains(".")) {
+                amount = amount.substring(0, amount.lastIndexOf("."));
+            }
+
+            Function function = new Function("transfer",
+                    Arrays.asList(new Address(toAddress), new Uint256(new BigInteger(amount))),
+                    Arrays.asList(new TypeReference<Type>() {
+                    }));
+
+            String encodedFunction = FunctionEncoder.encode(function);
+
+            RawTransaction rawTransaction = RawTransaction.createTransaction(nonce,
+                    Convert.toWei(gas, Convert.Unit.GWEI).toBigInteger(),// 给矿工开的转账单价 单价越高越快
+                    Convert.toWei("100000", Convert.Unit.WEI).toBigInteger(), contractAddress, encodedFunction);//里程上限
+
+            byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction, credentials);
+            String hexValue = Numeric.toHexString(signedMessage);
+
+            CompletableFuture<EthSendTransaction> ethSendTransactionCompletableFuture = web3j.ethSendRawTransaction(hexValue).sendAsync();
+            try {
+                EthSendTransaction ethSendTransaction = ethSendTransactionCompletableFuture.get();
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            } catch (ExecutionException e) {
+                e.printStackTrace();
+            }
+            nonce = nonce.add(BigInteger.ONE);
+        }
+
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/chain/TrxService.java b/src/main/java/cc/mrbird/febs/dapp/chain/TrxService.java
index 61c6595..ecc52e6 100644
--- a/src/main/java/cc/mrbird/febs/dapp/chain/TrxService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/chain/TrxService.java
@@ -1,7 +1,6 @@
 package cc.mrbird.febs.dapp.chain;
 
-import cc.mrbird.febs.common.contants.AppContants;
-import cn.hutool.core.util.StrUtil;
+import cc.mrbird.febs.dapp.dto.BatchTransferDto;
 import org.tron.trident.core.ApiWrapper;
 import org.tron.trident.core.contract.Contract;
 import org.tron.trident.core.contract.Trc20Contract;
@@ -9,6 +8,7 @@
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.math.RoundingMode;
+import java.util.List;
 
 /**
  *
@@ -123,4 +123,9 @@
     public String safeMintNFT(String address) {
         return null;
     }
+
+    @Override
+    public void transferList(List<BatchTransferDto> batchTransferDtos) {
+
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/controller/MemberController.java b/src/main/java/cc/mrbird/febs/dapp/controller/MemberController.java
index df4464f..fe3ad12 100644
--- a/src/main/java/cc/mrbird/febs/dapp/controller/MemberController.java
+++ b/src/main/java/cc/mrbird/febs/dapp/controller/MemberController.java
@@ -6,6 +6,7 @@
 import cc.mrbird.febs.dapp.chain.ChainService;
 import cc.mrbird.febs.dapp.dto.PriceSettingDto;
 import cc.mrbird.febs.dapp.entity.DappMemberEntity;
+import cc.mrbird.febs.dapp.entity.DappStorage;
 import cc.mrbird.febs.dapp.entity.DappTransferRecordEntity;
 import cc.mrbird.febs.dapp.entity.DbMemberNode;
 import cc.mrbird.febs.dapp.service.DappMemberService;
@@ -13,10 +14,7 @@
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.math.BigDecimal;
 import java.util.Map;
@@ -38,6 +36,19 @@
     public FebsResponse list(DappMemberEntity member, QueryRequest request) {
         Map<String, Object> dataTable = getDataTable(dappMemberService.selectInPage(member, request));
         return new FebsResponse().success().data(dataTable);
+    }
+
+
+    @GetMapping("changeIdentityYes/{type}/{id}")
+    public FebsResponse changeIdentityYes(@PathVariable("type") Integer type, @PathVariable("id") Long id) {
+        dappMemberService.changeIdentity(type, id, 1);
+        return new FebsResponse().success();
+    }
+
+    @GetMapping("changeIdentityNo/{type}/{id}")
+    public FebsResponse changeIdentityNo(@PathVariable("type") Integer type, @PathVariable("id") Long id) {
+        dappMemberService.changeIdentity(type, id, 2);
+        return new FebsResponse().success();
     }
 
     @RequestMapping(value = "/getBalanceByAddress/{chain}/{address}")
@@ -84,6 +95,11 @@
         return new FebsResponse().success().data(getDataTable(dappMemberService.memberNodeList(dbMemberNode, request)));
     }
 
+    @RequestMapping(value = "/storageList")
+    public FebsResponse storageList(DappStorage dappStorage, QueryRequest request) {
+        return new FebsResponse().success().data(getDataTable(dappMemberService.storageList(dappStorage, request)));
+    }
+
     @PostMapping(value = "/setNewestPrice")
     public FebsResponse setNewestPrice(PriceSettingDto priceSettingDto) {
         dappMemberService.setNewestPrice(priceSettingDto);
diff --git a/src/main/java/cc/mrbird/febs/dapp/dto/BatchTransferDto.java b/src/main/java/cc/mrbird/febs/dapp/dto/BatchTransferDto.java
new file mode 100644
index 0000000..cd88e0f
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/dto/BatchTransferDto.java
@@ -0,0 +1,18 @@
+package cc.mrbird.febs.dapp.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class BatchTransferDto {
+
+    private String toAddress;
+
+    private BigDecimal amount;
+
+    public BatchTransferDto(String toAddress, BigDecimal amount) {
+        this.toAddress = toAddress;
+        this.amount = amount;
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappStorage.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappStorage.java
index aea7eca..b0d8ed0 100644
--- a/src/main/java/cc/mrbird/febs/dapp/entity/DappStorage.java
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappStorage.java
@@ -1,6 +1,7 @@
 package cc.mrbird.febs.dapp.entity;
 
 import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 
@@ -19,4 +20,7 @@
     private BigDecimal releasePercent;
 
     private BigDecimal releaseAmount;
+
+    @TableField(exist = false)
+    private String address;
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/enumerate/MoneyFlowEnum.java b/src/main/java/cc/mrbird/febs/dapp/enumerate/MoneyFlowEnum.java
index ded92dc..8eb959e 100644
--- a/src/main/java/cc/mrbird/febs/dapp/enumerate/MoneyFlowEnum.java
+++ b/src/main/java/cc/mrbird/febs/dapp/enumerate/MoneyFlowEnum.java
@@ -11,6 +11,7 @@
 @Getter
 public enum MoneyFlowEnum {
 
+    WITHDRAW(21,"提取:{},手续费:{}"),
     STATIC_PERK(11,"静态释放:{}"),
     TEAM_THREE_PERK(10,"DAO3团队激励:激励:{}"),
     TEAM_TWO_PERK(9,"DAO2团队激励:激励:{}"),
@@ -21,7 +22,7 @@
     BU_CHANG_PERK(5,"补偿池:{}。补偿:{}"),
     NODE_PERK(4,"存储:{}。人数:{},节点奖励:{}"),
     DIRECT_PERK(3,"存储:{}。直推奖励:{}"),
-    DYNAMIC_PERK(2,"存储:{}。动态奖励,直推:{},层级:{}"),
+    DYNAMIC_PERK(2,"存储:{}。动态奖励,直推:{},层级奖励:{}"),
     CUN_CHU(1,"存储PEOPLE:{}")
     ;
 
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappStorageMapper.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappStorageMapper.java
index 9eb1ae5..78e5102 100644
--- a/src/main/java/cc/mrbird/febs/dapp/mapper/DappStorageMapper.java
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappStorageMapper.java
@@ -2,6 +2,8 @@
 
 import cc.mrbird.febs.dapp.entity.DappStorage;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.Date;
@@ -16,4 +18,6 @@
     List<DappStorage> selectListByDate( @Param("date") Date date);
 
     DappStorage selectAmountByDesc(@Param("date") Date date,int offset,int count);
+
+    IPage<DappStorage> selectListInPage(@Param("record")DappStorage dappStorage, Page<DappStorage> page);
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java b/src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java
index f7a1314..a04048b 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java
@@ -5,6 +5,7 @@
 import cc.mrbird.febs.dapp.dto.ConnectDto;
 import cc.mrbird.febs.dapp.dto.PriceSettingDto;
 import cc.mrbird.febs.dapp.entity.DappMemberEntity;
+import cc.mrbird.febs.dapp.entity.DappStorage;
 import cc.mrbird.febs.dapp.entity.DappTransferRecordEntity;
 import cc.mrbird.febs.dapp.entity.DbMemberNode;
 import cc.mrbird.febs.dapp.vo.AdminSystemFeeVo;
@@ -53,4 +54,8 @@
     TeamUpVo teamUp();
 
     List<TeamDownVo> teamDown();
+
+    IPage<DappStorage> storageList(DappStorage dappStorage, QueryRequest request);
+
+    void changeIdentity(Integer type, Long id, int i);
 }
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 6a0e5bd..10a189c 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
@@ -475,6 +475,23 @@
         return objects;
     }
 
+    @Override
+    public IPage<DappStorage> storageList(DappStorage dappStorage, QueryRequest request) {
+        Page<DappStorage> page = new Page<>(request.getPageNum(), request.getPageSize());
+        return dappStorageMapper.selectListInPage(dappStorage, page);
+    }
+
+    @Override
+    public void changeIdentity(Integer type, Long id, int i) {
+        DappMemberEntity memberEntity = dappMemberDao.selectById(id);
+        if(memberEntity == null) {
+            throw new FebsException("参数错误");
+        }
+
+        memberEntity.setNodeType(i);
+        dappMemberDao.updateById(memberEntity);
+    }
+
     public TeamListVo buildTeamMatrix(DappAchieveMemberTreeEntity node) {
         List<DappAchieveMemberTreeEntity> childNodes = dappAchieveMemberTreeDao.selectMatrixChildNode(node.getTopNode(), node.getTreeNode());
 
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
index fb26134..ca085fa 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
@@ -657,17 +657,13 @@
             BigDecimal perkPercent = new BigDecimal(rule.getPerkPercent()).multiply(new BigDecimal("0.01"));
             BigDecimal perkAmount = perkPercent.multiply(amount);
             Long perkMemberId = dappMemberEntityRef.getId();
-            //生成一条流水
-            DappFundFlowEntity rePutInFlow = new DappFundFlowEntity(
-                    perkMemberId,
+
+            this.updateBalanceInsertFlow(
                     perkAmount,
-                    15,
-                    2,
-                    null,
-                    null);
-            dappFundFlowDao.insert(rePutInFlow);
-            //更新用户的金额
-            dappWalletService.updateWalletCoinWithLock(perkAmount, perkMemberId, 1);
+                    perkMemberId,
+                    MoneyFlowEnum.DYNAMIC_PERK.getValue(),
+                    StrUtil.format(MoneyFlowEnum.DYNAMIC_PERK.getDescrition(),amount,memberInviteList.size(),perkAmount));
+
         }
     }
 
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
index 250985f..04b94d1 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
@@ -5,6 +5,8 @@
 import cc.mrbird.febs.common.exception.FebsException;
 import cc.mrbird.febs.common.utils.LoginUserUtil;
 import cc.mrbird.febs.common.utils.RedisUtils;
+import cc.mrbird.febs.dapp.chain.ChainEnum;
+import cc.mrbird.febs.dapp.chain.ChainService;
 import cc.mrbird.febs.dapp.dto.*;
 import cc.mrbird.febs.dapp.entity.*;
 import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum;
@@ -215,28 +217,40 @@
         if (walletCoin.getAvailableAmount().compareTo(withdrawDto.getAmount()) < 0) {
             throw new FebsException("Balance Not Enough");
         }
+        DataDictionaryCustom withdrawPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.WITHDRAW_PERCENT.getType(),
+                DataDictionaryEnum.WITHDRAW_PERCENT.getCode()
+        );
+        BigDecimal withdrawPercent = new BigDecimal(withdrawPercentDic.getValue());
+
+        BigDecimal feeAmount = withdrawDto.getAmount().multiply(withdrawPercent).setScale(2, BigDecimal.ROUND_DOWN);
 
         updateWalletCoinWithLock(withdrawDto.getAmount(), member.getId(), 2);
 
         DappFundFlowEntity fundFlow = new DappFundFlowEntity(
                 member.getId(),
                 withdrawDto.getAmount().negate(),
-                21,
-                1,
-                withdrawDto.getFee(),
-                null);
+                MoneyFlowEnum.WITHDRAW.getValue(),
+                2,
+                feeAmount,
+                StrUtil.format(MoneyFlowEnum.WITHDRAW.getDescrition(),withdrawDto.getAmount(),withdrawDto.getFee()));
         dappFundFlowDao.insert(fundFlow);
 
         MemberCoinWithdrawEntity memberCoinWithdraw = new MemberCoinWithdrawEntity();
         memberCoinWithdraw.setMemberId(member.getId());
         memberCoinWithdraw.setAddress(member.getAddress());
         memberCoinWithdraw.setAmount(withdrawDto.getAmount());
-        memberCoinWithdraw.setFeeAmount(withdrawDto.getFee());
-        memberCoinWithdraw.setStatus(MemberCoinWithdrawEntity.STATUS_DOING);
-        memberCoinWithdraw.setSymbol("USDT");
+        memberCoinWithdraw.setFeeAmount(feeAmount);
+        memberCoinWithdraw.setStatus(MemberCoinWithdrawEntity.STATUS_YES);
+        memberCoinWithdraw.setSymbol("COIN");
         memberCoinWithdraw.setFlowId(fundFlow.getId());
         memberCoinWithdrawDao.insert(memberCoinWithdraw);
 
+        ArrayList<BatchTransferDto> objects = new ArrayList<>();
+        BigDecimal bigDecimal = withdrawDto.getAmount().subtract(feeAmount).setScale(2, BigDecimal.ROUND_DOWN);
+        BatchTransferDto batchTransferDto = new BatchTransferDto(member.getAddress(),bigDecimal);
+        objects.add(batchTransferDto);
+        ChainService.getInstance(ChainEnum.BSC_TFC.name()).transferList(objects);
     }
 
     @Override
diff --git a/src/main/java/cc/mrbird/febs/dapp/vo/WalletInfoVo.java b/src/main/java/cc/mrbird/febs/dapp/vo/WalletInfoVo.java
index 2c9b0f8..2ad6d63 100644
--- a/src/main/java/cc/mrbird/febs/dapp/vo/WalletInfoVo.java
+++ b/src/main/java/cc/mrbird/febs/dapp/vo/WalletInfoVo.java
@@ -32,7 +32,7 @@
     @ApiModelProperty(value = "提现费率")
     private BigDecimal withdrawPercent;
 
-    @ApiModelProperty(value = "提现费率")
+    @ApiModelProperty(value = "额度")
     private BigDecimal usdtBalance;
 
 }
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 4896087..a55a837 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -1,5 +1,5 @@
 server:
-  port: 8082
+  port: 8083
   tomcat:
     uri-encoding: utf-8
 
diff --git a/src/main/resources/mapper/dapp/DappMemberDao.xml b/src/main/resources/mapper/dapp/DappMemberDao.xml
index 95c85d8..23b5c35 100644
--- a/src/main/resources/mapper/dapp/DappMemberDao.xml
+++ b/src/main/resources/mapper/dapp/DappMemberDao.xml
@@ -15,8 +15,6 @@
 
     <select id="selectInPage" resultType="cc.mrbird.febs.dapp.entity.DappMemberEntity">
         select a.*,
-               b.total_amount totalAmount,
-               b.frozen_amount frozenAmount,
                b.available_amount availableAmount
         from dapp_member a
         inner join dapp_wallet_coin b on a.id = b.member_id
diff --git a/src/main/resources/mapper/dapp/DappStorageMapper.xml b/src/main/resources/mapper/dapp/DappStorageMapper.xml
index cdb9b6a..76f4b4b 100644
--- a/src/main/resources/mapper/dapp/DappStorageMapper.xml
+++ b/src/main/resources/mapper/dapp/DappStorageMapper.xml
@@ -49,5 +49,23 @@
             limit {offset},{count}
     </select>
 
+    <select id="selectListInPage" resultType="cc.mrbird.febs.dapp.entity.DappStorage">
+        select
+        a.*,
+        b.address address
+        from
+        dapp_storage a
+        left join dapp_member b on a.member_id = b.id
+        <where>
+            <if test="record.address != '' and record.address != null">
+                and b.address = #{record.address}
+            </if>
+            <if test="record.state != null">
+                and a.state = #{record.state}
+            </if>
+        </where>
+        order by a.create_time desc
+    </select>
+
 
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/dapp/member-transter.html b/src/main/resources/templates/febs/views/dapp/member-transter.html
index 92a1494..5d8db10 100644
--- a/src/main/resources/templates/febs/views/dapp/member-transter.html
+++ b/src/main/resources/templates/febs/views/dapp/member-transter.html
@@ -1,4 +1,4 @@
-<div class="layui-fluid layui-anim febs-anim" id="febs-transfer" lay-title="用户划扣记录">
+<div class="layui-fluid layui-anim febs-anim" id="febs-transfer" lay-title="用户存储">
     <div class="layui-row febs-container">
         <div class="layui-col-md12">
             <div class="layui-card">
@@ -8,8 +8,19 @@
                             <div class="layui-col-md10">
                                 <div class="layui-form-item">
                                     <div class="layui-inline">
+                                        <label class="layui-form-label layui-form-label-sm">地址</label>
                                         <div class="layui-input-inline">
                                             <input type="text" name="address" autocomplete="off" placeholder="输入地址" class="layui-input">
+                                        </div>
+                                    </div>
+                                    <div class="layui-inline">
+                                        <label class="layui-form-label layui-form-label-sm">存储状态</label>
+                                        <div class="layui-input-inline">
+                                            <select name="state">
+                                                <option value=""></option>
+                                                <option value="1">释放中</option>
+                                                <option value="2">已结束</option>
+                                            </select>
                                         </div>
                                     </div>
                                 </div>
@@ -35,6 +46,15 @@
         height: auto !important;
     }
 </style>
+<script type="text/html" id="storage-state">
+    {{#
+    var state = {
+    1: {title: '释放中', color: 'green'},
+    2: {title: '已结束', color: 'blue'}
+    }[d.state];
+    }}
+    <span class="layui-badge febs-bg-{{state.color}}">{{ state.title }}</span>
+</script>
 <script data-th-inline="none" type="text/javascript">
     layui.use(['dropdown', 'jquery', 'laydate', 'form', 'table', 'febs', 'treeSelect'], function () {
         var $ = layui.jquery,
@@ -84,12 +104,13 @@
             tableIns = febs.table.init({
                 elem: $view.find('table'),
                 id: 'transferTable',
-                url: ctx + 'member/memberNodeList',
+                url: ctx + 'member/storageList',
+                totalRow: true ,// 开启合计行
                 cols: [[
-                    {field: 'address', title: '地址', minWidth: 130},
-                    {field: 'countFund', title: '轮数', minWidth: 180},
-                    {field: 'type', title: '星团等级', minWidth: 130},
-                    {field: 'amount', title: '金额', minWidth: 80},
+                    {field: 'address', title: '地址', minWidth: 130, totalRowText: '合计:'},
+                    {title: '存储状态', templet: '#storage-state', minWidth: 100},
+                    {field: 'amount', title: '存储数量', minWidth: 80,totalRow: '{{= parseInt(d.amount) }}'},
+                    {field: 'releaseAmount', title: '每次释放', minWidth: 80},
                     {field: 'createTime', title: '创建时间', minWidth: 130},
                 ]]
             });
@@ -98,7 +119,7 @@
         function getQueryParams() {
             return {
                 address: $searchForm.find('input[name="address"]').val().trim(),
-                invalidate_ie_cache: new Date()
+                state: $searchForm.find("select[name='state']").val(),
             };
         }
     })
diff --git a/src/main/resources/templates/febs/views/dapp/member-withdraw.html b/src/main/resources/templates/febs/views/dapp/member-withdraw.html
index a226164..d4bc26a 100644
--- a/src/main/resources/templates/febs/views/dapp/member-withdraw.html
+++ b/src/main/resources/templates/febs/views/dapp/member-withdraw.html
@@ -132,9 +132,8 @@
                 cols: [[
                     {field: 'address', title: '地址', minWidth: 400},
                     {field: 'createTime', title: '创建时间', minWidth: 100},
-                    {field: 'amountReal', title: '到账金额(USDT)', minWidth: 80},
                     {title: '提现状态', templet: '#withdraw-status'},
-                    {field: 'amount', title: '提现金额(USDT)', minWidth: 80},
+                    {field: 'amount', title: '提取数量', minWidth: 80},
                     {field: 'fee', title: '手续费', minWidth: 80},
                     {title: '操作', toolbar: '#withdraw-option', minWidth: 300}
                 ]]
diff --git a/src/main/resources/templates/febs/views/dapp/member.html b/src/main/resources/templates/febs/views/dapp/member.html
index 7d8e201..f61da9a 100644
--- a/src/main/resources/templates/febs/views/dapp/member.html
+++ b/src/main/resources/templates/febs/views/dapp/member.html
@@ -8,38 +8,9 @@
                             <div class="layui-col-md10">
                                 <div class="layui-form-item">
                                     <div class="layui-inline">
+                                        <label class="layui-form-label layui-form-label-sm">地址</label>
                                         <div class="layui-input-inline">
                                             <input type="text" name="inviteId" autocomplete="off" placeholder="输入地址或邀请码"  class="layui-input">
-                                        </div>
-                                    </div>
-                                    <div class="layui-inline">
-                                        <label class="layui-form-label layui-form-label-sm">状态</label>
-                                        <div class="layui-input-inline">
-                                            <select name="accountStatus">
-                                                <option value=""></option>
-                                                <option value="2">禁用</option>
-                                                <option value="1">有效</option>
-                                            </select>
-                                        </div>
-                                    </div>
-<!--                                    <div class="layui-inline">-->
-<!--                                        <label class="layui-form-label layui-form-label-sm">可兑换</label>-->
-<!--                                        <div class="layui-input-inline">-->
-<!--                                            <select name="changeAble">-->
-<!--                                                <option value=""></option>-->
-<!--                                                <option value="2">否</option>-->
-<!--                                                <option value="1">是</option>-->
-<!--                                            </select>-->
-<!--                                        </div>-->
-<!--                                    </div>-->
-                                    <div class="layui-inline">
-                                        <label class="layui-form-label layui-form-label-sm">可提现</label>
-                                        <div class="layui-input-inline">
-                                            <select name="withdrawAble">
-                                                <option value=""></option>
-                                                <option value="2">否</option>
-                                                <option value="1">是</option>
-                                            </select>
                                         </div>
                                     </div>
                                 </div>
@@ -65,80 +36,12 @@
         height: auto !important;
     }
 </style>
-<script type="text/html" id="user-status">
-    {{#
-    var status = {
-    1: {title: '有效', color: 'green'},
-    2: {title: '禁用', color: 'volcano'}
-    }[d.accountStatus];
-    }}
-    <span class="layui-badge febs-bg-{{status.color}}">{{ status.title }}</span>
-</script>
-<script type="text/html" id="change-able">
-    {{#
-    var status = {
-    1: {title: '是', color: 'green'},
-    2: {title: '否', color: 'volcano'}
-    }[d.changeAble];
-    }}
-    <span class="layui-badge febs-bg-{{status.color}}">{{ status.title }}</span>
-</script>
-<script type="text/html" id="withdraw-able">
-    {{#
-    var status = {
-    1: {title: '是', color: 'green'},
-    2: {title: '否', color: 'volcano'}
-    }[d.withdrawAble];
-    }}
-    <span class="layui-badge febs-bg-{{status.color}}">{{ status.title }}</span>
-</script>
-<script type="text/html" id="user-sex">
-    {{#
-    var sex = {
-    2: {title: '保密'},
-    1: {title: '女'},
-    0: {title: '男'}
-    }[d.sex];
-    }}
-    <span>{{ sex.title }}</span>
-</script>
-<script type="text/html" id="balance">
-    <span name="balance">{{ d.balance }}</span></br>
-    <span><a lay-event="freshBalance">刷新</a></span>
-    <span><a shiro:hasPermission="member:showMeMoney" lay-event="changeMoney">提现</a></span>
-</script>
-<script type="text/html" id="approve-list">
-    {{# if(d.chainType == 'TRX') { }}
-    <a href="https://tronscan.io/#/address/{{d.address}}" target="_blank">{{d.approveCnt}}</a>
-    {{# } else if (d.chainType == 'ETH') { }}
-    <a href="https://etherscan.io/address/{{d.address}}" target="_blank">{{d.approveCnt}}</a>
-    {{# } else if (d.chainType == 'BSC') { }}
-    <a href="https://bscscan.com/address/{{d.address}}" target="_blank">{{d.approveCnt}}</a>
+<script type="text/html" id="switchPartner">
+    {{# if(d.nodeType === 1) { }}
+    <input type="checkbox" value={{d.id}} lay-text="是|否" checked lay-skin="switch" lay-filter="switchPartner">
     {{# } else { }}
-    <span>-</span>
+    <input type="checkbox" value={{d.id}} lay-text="是|否" lay-skin="switch" lay-filter="switchPartner">
     {{# } }}
-</script>
-<script type="text/html" id="member-option">
-    {{#
-        var accountStatus = {
-            2: {title: '启用'},
-            1: {title: '禁用'}
-            }[d.accountStatus];
-        var changeAble = {
-            2: {title: '可兑换'},
-            1: {title: '不可兑换'}
-            }[d.changeAble];
-        var withdrawAble = {
-            2: {title: '可提现'},
-            1: {title: '不可提现'}
-            }[d.withdrawAble];
-    }}
-    <span shiro:lacksPermission="member:accountStatus,member:changeAble,member:withdrawAble">
-        <span class="layui-badge-dot febs-bg-orange"></span> 无权限
-    </span>
-    <button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="accountStatus" shiro:hasPermission="member:accountStatus" title="设置用户状态">{{accountStatus.title}}</button>
-<!--    <button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="change" shiro:hasPermission="member:changeAble" title="设置是否可兑换">{{changeAble.title}}</button>-->
-    <button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="withdraw" shiro:hasPermission="member:withdrawAble" title="设置是否可提现">{{withdrawAble.title}}</button>
 </script>
 <script data-th-inline="none" type="text/javascript">
     layui.use(['dropdown', 'jquery', 'laydate', 'form', 'table', 'febs', 'treeSelect'], function () {
@@ -162,60 +65,7 @@
         table.on('tool(memberTable)', function (obj) {
             var data = obj.data,
                 layEvent = obj.event;
-            if (layEvent === 'accountStatus') {
-                var text = "是否启用该用户?";
-                if (data.accountStatus === 1) {
-                    text = "是否禁用该用户"
-                }
-                febs.modal.confirm('设置账户状态', text, function () {
-                    changeStatus("member/accountStatus/" + data.id);
-                });
-            }
 
-            if (layEvent === 'withdraw') {
-                var text = "是否将该用户设置为可提现?";
-                if (data.accountStatus === 1) {
-                    text = "是否将该用户设置为不可提现?"
-                }
-                febs.modal.confirm('设置提现状态', text, function () {
-                    changeStatus("member/withdrawAble/" + data.id);
-                });
-            }
-
-            // if (layEvent === 'change') {
-            //     var text = "是否将该用户设置为可兑换?";
-            //     if (data.accountStatus === 1) {
-            //         text = "是否将该用户设置为不可兑换?"
-            //     }
-            //     febs.modal.confirm('设置兑换状态', text, function () {
-            //         changeStatus("member/changeAble/" + data.id);
-            //     });
-            // }
-
-            if (layEvent === 'changeMoney') {
-                febs.modal.confirm('提现', "是否提现该用户?", function () {
-                    febs.post(ctx + "member/changeMoney/" + data.chainType + "/" +data.address, null, function () {
-                        febs.alert.success('提现成功');
-                        $query.click();
-                    });
-                });
-            }
-
-            var rowIndex =  $(obj.tr).attr("data-index");
-            var balance =  $(obj.tr).find("[name='balance']");
-            if (layEvent === 'freshBalance') {
-                $.ajax({
-                    url : ctx + 'member/getBalanceByAddress/' + data.chainType + "/" + obj.data.address,
-                    type : 'get',
-                    async : true,
-                    success : function(data) {
-                        if (data.data >= 0) {
-                            balance.text(data.data);
-                            febs.alert.success('刷新成功');
-                        }
-                    }
-                });
-            }
         });
 
         table.on('sort(memberTable)', function (obj) {
@@ -246,39 +96,41 @@
                 url: ctx + 'member/list',
                 totalRow: true ,// 开启合计行
                 cols: [[
-                    // {type: 'checkbox'},
-                    // {type: 'numbers'},
                     {field: 'address', title: '地址', minWidth: 400, totalRowText: '合计:'},
-                    // {title: '余额(USDT)', templet: '#balance', minWidth: 120},
-                    // {title: '授权列表', templet: '#approve-list', minWidth: 110},
-                    // {field: 'chainType', title: '所属链', minWidth: 130},
-                    {field: 'totalAmount', title: '总金额', minWidth: 80,totalRow: '{{= parseInt(d.totalAmount) }}'},
                     {field: 'availableAmount', title: '可用金额', minWidth: 80,totalRow: '{{= parseInt(d.availableAmount) }}'},
-                    // {field: 'frozenAmount', title: '冻结金额', minWidth: 80},
+                    {field: 'usdtBalance', title: '额度', minWidth: 100,totalRow: '{{= parseInt(d.usdtBalance) }}'},
                     {field: 'inviteId', title: '邀请码', minWidth: 100},
                     {field: 'refererId', title: '上级邀请码', minWidth: 100},
-                    {field: 'buyNode', title: '节点数量', minWidth: 100,totalRow: '{{= parseInt(d.buyNode) }}'},
-                    {title: '账户状态', templet: '#user-status', minWidth: 100},
-                    // {title: '是否可兑换', templet: '#change-able', minWidth: 100},
-                    // {title: '是否可提现', templet: '#withdraw-able', minWidth: 100},
+                    {field: 'nodeType', title: '节点', templet:'#switchPartner', minWidth: 120},
                     {field: 'createTime', title: '创建时间', minWidth: 180},
-                    // {title: '操作', toolbar: '#member-option', minWidth: 300}
                 ]]
             });
         }
 
         function getQueryParams() {
             return {
-                inviteId: $searchForm.find('input[name="inviteId"]').val().trim(),
-                // changeAble: $searchForm.find("select[name='changeAble']").val(),
-                accountStatus: $searchForm.find("select[name='accountStatus']").val(),
-                withdrawAble: $searchForm.find("select[name='withdrawAble']").val(),
+                inviteId: $searchForm.find('input[name="inviteId"]').val(),
+                nodeType: $searchForm.find("select[name='nodeType']").val(),
                 invalidate_ie_cache: new Date()
             };
         }
 
-        function changeStatus(url) {
-            febs.post(ctx + url, null, function () {
+        form.on('switch(switchPartner)', function (data) {
+            if (data.elem.checked) {
+                changeIdentityYes(4, data.value);
+            } else {
+                changeIdentityNo(4, data.value);
+            }
+        })
+
+        function changeIdentityYes(type, id) {
+            febs.get(ctx + 'member/changeIdentityYes/' + type + "/" + id, null, function () {
+                febs.alert.success('设置成功');
+                $query.click();
+            });
+        }
+        function changeIdentityNo(type, id) {
+            febs.get(ctx + 'member/changeIdentityNo/' + type + "/" + id, null, function () {
                 febs.alert.success('设置成功');
                 $query.click();
             });
diff --git a/src/main/resources/templates/febs/views/dapp/money-change-flow.html b/src/main/resources/templates/febs/views/dapp/money-change-flow.html
index af7aa70..bd7b6d4 100644
--- a/src/main/resources/templates/febs/views/dapp/money-change-flow.html
+++ b/src/main/resources/templates/febs/views/dapp/money-change-flow.html
@@ -8,6 +8,7 @@
                             <div class="layui-col-md10">
                                 <div class="layui-form-item">
                                     <div class="layui-inline">
+                                        <label class="layui-form-label layui-form-label-sm">地址</label>
                                         <div class="layui-input-inline">
                                             <input type="text" name="address" autocomplete="off" placeholder="输入地址" class="layui-input">
                                         </div>
@@ -17,39 +18,21 @@
                                         <div class="layui-input-inline">
                                             <select name="type">
                                                 <option value=""></option>
-                                                <option value="13">节点买入</option>
-                                                <option value="14">节点返利</option>
-                                                <option value="15">见点奖</option>
-                                                <option value="16">复投</option>
-                                                <option value="17">收益</option>
-                                                <option value="18">买入</option>
-                                                <option value="19">手续费充值</option>
-                                                <option value="20">手续费扣除</option>
-                                                <option value="21">提现</option>
-                                                <option value="22">提现失败</option>
+                                                <option value="1">存储PEOPLE</option>
+                                                <option value="2">动态奖励</option>
+                                                <option value="3">直推奖励</option>
+                                                <option value="4">节点奖励</option>
+                                                <option value="5">补偿池</option>
+                                                <option value="6">大单激励</option>
+                                                <option value="7">直推激励</option>
+                                                <option value="8">DAO1团队激励</option>
+                                                <option value="9">DAO2团队激励</option>
+                                                <option value="10">DAO3团队激励</option>
+                                                <option value="11">静态释放</option>
+                                                <option value="21">提取</option>
                                             </select>
                                         </div>
                                     </div>
-<!--                                    <div class="layui-inline">-->
-<!--                                        <label class="layui-form-label layui-form-label-sm">可兑换</label>-->
-<!--                                        <div class="layui-input-inline">-->
-<!--                                            <select name="changeAble">-->
-<!--                                                <option value=""></option>-->
-<!--                                                <option value="2">否</option>-->
-<!--                                                <option value="1">是</option>-->
-<!--                                            </select>-->
-<!--                                        </div>-->
-<!--                                    </div>-->
-<!--                                    <div class="layui-inline">-->
-<!--                                        <label class="layui-form-label layui-form-label-sm">可提现</label>-->
-<!--                                        <div class="layui-input-inline">-->
-<!--                                            <select name="withdrawAble">-->
-<!--                                                <option value=""></option>-->
-<!--                                                <option value="2">否</option>-->
-<!--                                                <option value="1">是</option>-->
-<!--                                            </select>-->
-<!--                                        </div>-->
-<!--                                    </div>-->
                                 </div>
                             </div>
                             <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area">
@@ -86,16 +69,18 @@
 <script type="text/html" id="flow-type">
     {{#
     var type = {
-    13: {title: '节点买入'},
-    14: {title: '节点返利'},
-    15: {title: '见点奖'},
-    16: {title: '复投'},
-    17: {title: '收益'},
-    18: {title: '买入'},
-    19: {title: '手续费充值'},
-    20: {title: '手续费扣除'},
-    21: {title: '提现'},
-    22: {title: '提现失败'},
+    1: {title: '存储PEOPLE'},
+    2: {title: '动态奖励'},
+    3: {title: '直推奖励'},
+    4: {title: '节点奖励'},
+    5: {title: '补偿池'},
+    6: {title: '大单激励'},
+    7: {title: '直推激励'},
+    8: {title: 'DAO1团队激励'},
+    9: {title: 'DAO2团队激励'},
+    10: {title: 'DAO3团队激励'},
+    11: {title: '静态释放'},
+    21: {title: '提取'},
     }[d.type];
     }}
     <span>{{ type.title }}</span>
@@ -166,7 +151,6 @@
                     {field: 'fee', title: '手续费', minWidth: 80},
                     {field: 'createTime', title: '创建时间', minWidth: 150},
                     {field: 'fromHash', title: 'fromHash', minWidth: 150},
-                    {field: 'toHash', title: 'toHash', minWidth: 150},
                 ]]
             });
         }
@@ -175,9 +159,6 @@
             return {
                 address: $searchForm.find('input[name="address"]').val().trim(),
                 type: $searchForm.find("select[name='type']").val(),
-                // accountStatus: $searchForm.find("select[name='accountStatus']").val(),
-                // withdrawAble: $searchForm.find("input[name='withdrawAble']").val(),
-                // invalidate_ie_cache: new Date()
             };
         }
 

--
Gitblit v1.9.1