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