src/main/java/cc/mrbird/febs/dapp/controller/MemberController.java
@@ -8,6 +8,7 @@ import cc.mrbird.febs.dapp.entity.DappMemberEntity; import cc.mrbird.febs.dapp.entity.DappTransferRecordEntity; import cc.mrbird.febs.dapp.service.DappMemberService; import cc.mrbird.febs.dapp.vo.AdminSystemFeeVo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.annotations.Param; @@ -82,4 +83,10 @@ dappMemberService.setNewestPrice(priceSettingDto); return new FebsResponse().success(); } @PostMapping(value = "/setSystemFee") public FebsResponse setSystemFee(AdminSystemFeeVo adminSystemFeeVo) { dappMemberService.setSystemFee(adminSystemFeeVo); return new FebsResponse().success(); } } src/main/java/cc/mrbird/febs/dapp/controller/ViewController.java
@@ -4,7 +4,12 @@ import cc.mrbird.febs.common.entity.FebsConstant; import cc.mrbird.febs.common.utils.FebsUtil; import cc.mrbird.febs.common.utils.RedisUtils; import cc.mrbird.febs.dapp.entity.DataDictionaryCustom; import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum; import cc.mrbird.febs.dapp.mapper.DataDictionaryCustomMapper; import cc.mrbird.febs.dapp.service.DappMemberService; import cc.mrbird.febs.dapp.vo.AdminSystemFeeVo; import cn.hutool.core.util.ObjectUtil; import lombok.RequiredArgsConstructor; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.stereotype.Controller; @@ -25,6 +30,7 @@ public class ViewController { private final RedisUtils redisUtils; private final DataDictionaryCustomMapper dataDictionaryCustomMapper; @GetMapping(value = "admin") @RequiresPermissions("admin:view") @@ -115,4 +121,28 @@ model.addAttribute("newestPrice", price); return FebsUtil.view("dapp/newest-price-setting"); } //费率设置 @GetMapping(value ="systemFeeSet") @RequiresPermissions("fee:setting:view") public String systemFeeSet(Model model) { AdminSystemFeeVo adminSystemFeeVo = new AdminSystemFeeVo(); DataDictionaryCustom rebateDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.REBATE_PERCENT.getType(), DataDictionaryEnum.REBATE_PERCENT.getCode()); if(ObjectUtil.isNotEmpty(rebateDic)){ String value = rebateDic.getValue() == null ? "0":rebateDic.getValue(); adminSystemFeeVo.setRebatePercent(value); } DataDictionaryCustom memberFeeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.MEMBER_FEE.getType(), DataDictionaryEnum.MEMBER_FEE.getCode()); if(ObjectUtil.isNotEmpty(memberFeeDic)){ String value = memberFeeDic.getValue() == null ? "0":memberFeeDic.getValue(); adminSystemFeeVo.setMemberFee(value); } DataDictionaryCustom serviceFeeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.WITHDRAW_SERVICE_FEE.getType(), DataDictionaryEnum.WITHDRAW_SERVICE_FEE.getCode()); if(ObjectUtil.isNotEmpty(serviceFeeDic)){ String value = serviceFeeDic.getValue() == null ? "0":serviceFeeDic.getValue(); adminSystemFeeVo.setServiceFee(value); } model.addAttribute("systemFee", adminSystemFeeVo); return FebsUtil.view("dapp/system-fee-set"); } } src/main/java/cc/mrbird/febs/dapp/entity/DappMemberEntity.java
@@ -83,4 +83,13 @@ * 出局次数 */ private Integer outCnt; @TableField(exist = false) private BigDecimal totalAmount; @TableField(exist = false) private BigDecimal frozenAmount; @TableField(exist = false) private BigDecimal availableAmount; } src/main/java/cc/mrbird/febs/dapp/entity/DappWalletCoinEntity.java
@@ -29,5 +29,7 @@ /** * 盲盒数量 */ @TableField(exist = false) private Integer boxCnt; } src/main/java/cc/mrbird/febs/dapp/enumerate/DataDictionaryEnum.java
New file @@ -0,0 +1,22 @@ package cc.mrbird.febs.dapp.enumerate; import lombok.Getter; @Getter public enum DataDictionaryEnum { //每日返利的产矿百分比 REBATE_PERCENT("SYSTEM_SETTING","REBATE_PERCENT"), //分给推荐三人的终身VIP会员手续费 MEMBER_FEE("SYSTEM_SETTING","MEMBER_FEE"), //提现手续费 WITHDRAW_SERVICE_FEE("SYSTEM_SETTING", "WITHDRAW_SERVICE_FEE"); private String type; private String code; DataDictionaryEnum(String type, String code) { this.type = type; this.code = code; } } src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java
@@ -7,6 +7,7 @@ import cc.mrbird.febs.dapp.dto.TeamListDto; import cc.mrbird.febs.dapp.entity.DappMemberEntity; import cc.mrbird.febs.dapp.entity.DappTransferRecordEntity; import cc.mrbird.febs.dapp.vo.AdminSystemFeeVo; import cc.mrbird.febs.dapp.vo.TeamListVo; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; @@ -43,4 +44,6 @@ DappMemberEntity insertMember(String address, String refererId, String chainType, String accountType); TeamListVo findTeamList(); void setSystemFee(AdminSystemFeeVo adminSystemFeeVo); } src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
@@ -16,8 +16,10 @@ import cc.mrbird.febs.dapp.dto.PriceSettingDto; import cc.mrbird.febs.dapp.dto.TeamListDto; import cc.mrbird.febs.dapp.entity.*; import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum; import cc.mrbird.febs.dapp.mapper.*; import cc.mrbird.febs.dapp.service.DappMemberService; import cc.mrbird.febs.dapp.vo.AdminSystemFeeVo; import cc.mrbird.febs.dapp.vo.TeamListVo; import cc.mrbird.febs.system.entity.User; import cn.hutool.core.collection.CollUtil; @@ -51,6 +53,7 @@ private final RedisUtils redisUtils; private final DappAchieveMemberTreeDao dappAchieveMemberTreeDao; private final DataDictionaryCustomMapper dataDictionaryCustomMapper; @Override @Transactional(rollbackFor = Exception.class) @@ -345,6 +348,24 @@ return buildTeamMatrix(topNode); } @Override public void setSystemFee(AdminSystemFeeVo adminSystemFeeVo) { String rebatePercent = adminSystemFeeVo.getRebatePercent(); DataDictionaryCustom rebateDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.REBATE_PERCENT.getType(), DataDictionaryEnum.REBATE_PERCENT.getCode()); rebateDic.setValue(rebatePercent); dataDictionaryCustomMapper.updateById(rebateDic); String serviceFee = adminSystemFeeVo.getServiceFee(); DataDictionaryCustom serviceFeeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.WITHDRAW_SERVICE_FEE.getType(), DataDictionaryEnum.WITHDRAW_SERVICE_FEE.getCode()); serviceFeeDic.setValue(serviceFee); dataDictionaryCustomMapper.updateById(serviceFeeDic); String memberFee = adminSystemFeeVo.getMemberFee(); DataDictionaryCustom memberFeeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.MEMBER_FEE.getType(), DataDictionaryEnum.MEMBER_FEE.getCode()); memberFeeDic.setValue(memberFee); dataDictionaryCustomMapper.updateById(memberFeeDic); } public TeamListVo buildTeamMatrix(DappAchieveMemberTreeEntity node) { List<DappAchieveMemberTreeEntity> childNodes = dappAchieveMemberTreeDao.selectMatrixChildNode(node.getTopNode(), node.getTreeNode()); src/main/java/cc/mrbird/febs/dapp/vo/AdminSystemFeeVo.java
New file @@ -0,0 +1,15 @@ package cc.mrbird.febs.dapp.vo; import io.swagger.annotations.ApiModel; import lombok.Data; @Data @ApiModel(value = "AdminSystemFeeVo", description = "系统设置费率") public class AdminSystemFeeVo { private String rebatePercent; private String memberFee; private String serviceFee; } src/main/resources/mapper/dapp/DappMemberDao.xml
@@ -14,25 +14,30 @@ </select> <select id="selectInPage" resultType="cc.mrbird.febs.dapp.entity.DappMemberEntity"> select * from dapp_member 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 <where> <if test="record.currentUser != null"> and referer_id = (select invite_id from dapp_user_member_relate where user_id=#{record.currentUser}) and a.referer_id = (select invite_id from dapp_user_member_relate where user_id=#{record.currentUser}) </if> <if test="record.accountStatus != null"> and account_status = #{record.accountStatus} and a.account_status = #{record.accountStatus} </if> <if test="record.changeAble != null"> and change_able = #{record.changeAble} and a.change_able = #{record.changeAble} </if> <if test="record.withdrawAble != null"> and withdraw_able = #{record.withdrawAble} and a.withdraw_able = #{record.withdrawAble} </if> <if test="record.inviteId != null and record.inviteId != ''"> and invite_id = #{record.inviteId} and a.invite_id = #{record.inviteId} </if> </where> order by create_time desc order by a.create_time desc </select> <select id="selectAllMemberForInCome" resultType="cc.mrbird.febs.dapp.entity.DappMemberEntity"> src/main/resources/mapper/dapp/DappTransferRecordDao.xml
@@ -5,8 +5,8 @@ <select id="selectInPage" resultType="cc.mrbird.febs.dapp.entity.DappTransferRecordEntity"> select * from dapp_transfer_record <where> <if test="record.address != '' and record.address != null"> and address=#{record.address} <if test="record.fromAddress != '' and record.fromAddress != null"> and address=#{record.fromAddress} </if> </where> order by create_time desc src/main/resources/templates/febs/views/dapp/member.html
@@ -23,16 +23,16 @@ </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="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"> @@ -137,9 +137,9 @@ <span shiro:lacksPermission="member:accountStatus,member:changeAble,member:withdrawAble"> <span class="layui-badge-dot febs-bg-orange"></span> 无权限 </span> <a lay-event="accountStatus" shiro:hasPermission="member:accountStatus" title="设置用户状态">{{accountStatus.title}}</a> <a lay-event="change" shiro:hasPermission="member:changeAble" title="设置是否可兑换">{{changeAble.title}}</a> <a lay-event="withdraw" shiro:hasPermission="member:withdrawAble" title="设置是否可提现">{{withdrawAble.title}}</a> <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 () { @@ -183,15 +183,15 @@ }); } if (layEvent === 'change') { var text = "是否将该用户设置为可兑换?"; if (data.accountStatus === 1) { text = "是否将该用户设置为不可兑换?" } febs.modal.confirm('设置兑换状态', text, function () { changeStatus("member/changeAble/" + 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 () { @@ -246,19 +246,22 @@ id: 'memberTable', url: ctx + 'member/list', cols: [[ {type: 'checkbox'}, {type: 'numbers'}, {field: 'address', title: '地址', minWidth: 130}, {title: '余额(USDT)', templet: '#balance', minWidth: 120}, {title: '授权列表', templet: '#approve-list', minWidth: 110}, // {type: 'checkbox'}, // {type: 'numbers'}, {field: 'address', title: '地址', minWidth: 400}, // {title: '余额(USDT)', templet: '#balance', minWidth: 120}, // {title: '授权列表', templet: '#approve-list', minWidth: 110}, {field: 'chainType', title: '所属链', minWidth: 130}, {field: 'inviteId', title: '邀请码', minWidth: 130}, {field: 'refererId', title: '上级邀请码', minWidth: 130}, {title: '账户状态', templet: '#user-status', minWidth: 120}, {title: '是否可兑换', templet: '#change-able', minWidth: 130}, {title: '是否可提现', templet: '#withdraw-able', minWidth: 130}, {field: 'totalAmount', title: '总金额', minWidth: 80}, {field: 'availableAmount', title: '可用金额', minWidth: 80}, {field: 'frozenAmount', title: '冻结金额', minWidth: 80}, {field: 'inviteId', title: '邀请码', minWidth: 100}, {field: 'refererId', title: '上级邀请码', minWidth: 100}, {title: '账户状态', templet: '#user-status', minWidth: 100}, // {title: '是否可兑换', templet: '#change-able', minWidth: 100}, {title: '是否可提现', templet: '#withdraw-able', minWidth: 100}, {field: 'createTime', title: '创建时间', minWidth: 180}, {title: '操作', toolbar: '#member-option', minWidth: 200} {title: '操作', toolbar: '#member-option', minWidth: 300} ]] }); } @@ -266,9 +269,9 @@ function getQueryParams() { return { inviteId: $searchForm.find('input[name="inviteId"]').val().trim(), changeAble: $searchForm.find("select[name='changeAble']").val(), // changeAble: $searchForm.find("select[name='changeAble']").val(), accountStatus: $searchForm.find("select[name='accountStatus']").val(), withdrawAble: $searchForm.find("input[name='withdrawAble']").val(), withdrawAble: $searchForm.find("select[name='withdrawAble']").val(), invalidate_ie_cache: new Date() }; } src/main/resources/templates/febs/views/dapp/money-change-flow.html
@@ -24,16 +24,16 @@ </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="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"> src/main/resources/templates/febs/views/dapp/system-fee-set.html
New file @@ -0,0 +1,88 @@ <div class="layui-fluid layui-anim febs-anim" id="system-fee-set" lay-title="费率设置"> <div class="layui-row layui-col-space8 febs-container"> <form class="layui-form" action="" lay-filter="system-fee-set-form"> <div class="layui-card"> <div class="layui-card-body"> <div class="layui-form-item"> <label class="layui-form-label ">每日返利的产矿百分比:</label> <div class="layui-input-block"> <input type="text" name="rebatePercent" data-th-id="${systemFee.rebatePercent}" autocomplete="off" class="layui-input" > </div> <!-- <div class="layui-word-aux" style="margin-left: 150px;">--> <!-- 【填写整数】每日订单金额的百分之几,增加到积分池:直接输入百分比,例如25%,直接输入25--> <!-- </div>--> </div> <div class="layui-form-item"> <label class="layui-form-label ">分给推荐三人的终身VIP会员手续费:</label> <div class="layui-input-block"> <input type="text" name="memberFee" data-th-id="${systemFee.memberFee}" autocomplete="off" class="layui-input" > </div> <!-- <div class="layui-word-aux" style="margin-left: 150px;">--> <!-- 【填写整数】每日订单金额的百分之几,增加到积分池:直接输入百分比,例如25%,直接输入25--> <!-- </div>--> </div> <div class="layui-form-item"> <label class="layui-form-label ">提现手续费:</label> <div class="layui-input-block"> <input type="text" name="serviceFee" data-th-id="${systemFee.serviceFee}" autocomplete="off" class="layui-input" > </div> <!-- <div class="layui-word-aux" style="margin-left: 150px;">--> <!-- 【填写整数】每日订单金额的百分之几,增加到积分池:直接输入百分比,例如25%,直接输入25--> <!-- </div>--> </div> </div> <div class="layui-card-footer"> <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="system-fee-set-form-submit" id="submit">保存</button> </div> </div> </form> </div> </div> <style> .layui-form-label { width: 120px; } .layui-form-item .layui-input-block { margin-left: 150px; } .layui-table-form .layui-form-item { margin-bottom: 20px !important; } </style> <script data-th-inline="javascript" type="text/javascript"> layui.use(['dropdown', 'jquery', 'validate', 'febs', 'form', 'eleTree'], function () { var $ = layui.jquery, febs = layui.febs, form = layui.form, validate = layui.validate, systemFee = [[${systemFee}]], $view = $('#system-fee-set'); form.verify(validate); initSystemFeeValue(); form.render(); function initSystemFeeValue() { form.val("system-fee-set-form", { "rebatePercent": systemFee.rebatePercent, "memberFee": systemFee.memberFee, "serviceFee": systemFee.serviceFee }); } form.on('submit(system-fee-set-form-submit)', function (data) { febs.post(ctx + 'member/setSystemFee', data.field, function (res) { febs.alert.success('设置成功'); }); return false; }); }); </script>