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