xiaoyong931011
2023-08-12 cbbc9d5e7df63bb1ea10bdd80e9a08660b82cc88
后台修改
10 files modified
3 files added
665 ■■■■■ changed files
src/main/java/cc/mrbird/febs/dapp/controller/AdminMallGoodsController.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/controller/ViewAdminMallGoodsController.java 104 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/dto/HlmBasicPerkDto.java 44 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/IAdminMallGoodsService.java 11 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/impl/AdminMallGoodsService.java 81 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/dapp/member-charge.html 1 ●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/dapp/member-wallet-coin.html 1 ●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/dapp/member-wallet-mine.html 5 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/dapp/member-withdraw.html 1 ●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/dapp/member.html 28 ●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/dapp/money-change-flow.html 88 ●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/goods/basicPerkSetting.html 156 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/goods/profitSetting.html 126 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/controller/AdminMallGoodsController.java
@@ -7,10 +7,12 @@
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.common.utils.OssUtils;
import cc.mrbird.febs.dapp.dto.AddMallGoodsDto;
import cc.mrbird.febs.dapp.dto.HlmBasicPerkDto;
import cc.mrbird.febs.dapp.dto.MallGoodsUpdateDto;
import cc.mrbird.febs.dapp.dto.MallOrderInfoDto;
import cc.mrbird.febs.dapp.entity.MallGoods;
import cc.mrbird.febs.dapp.entity.MallOrderInfo;
import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum;
import cc.mrbird.febs.dapp.service.IAdminMallGoodsService;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
@@ -174,6 +176,23 @@
        return new FebsResponse().success().data(dataTable);
    }
    @GetMapping(value = "/findDicByType/{type}")
    public FebsResponse findDicByType(@PathVariable("type") String type) {
        return new FebsResponse().success().data(adminMallGoodsService.findDataDicByType(type));
    }
    @PostMapping(value = "/bonusSystemSetting")
    public FebsResponse bonusSystemSetting(@RequestBody Map<String, Object> map) {
        adminMallGoodsService.bonusSystemSetting(map);
        return new FebsResponse().success().message("设置成功");
    }
    @PostMapping(value = "/hlmBasicPerk")
    public FebsResponse hlmBasicPerk(HlmBasicPerkDto hlmBasicPerkDto) {
        adminMallGoodsService.hlmBasicPerk(hlmBasicPerkDto);
        return new FebsResponse().success();
    }
}
src/main/java/cc/mrbird/febs/dapp/controller/ViewAdminMallGoodsController.java
@@ -3,8 +3,13 @@
import cc.mrbird.febs.common.controller.BaseController;
import cc.mrbird.febs.common.entity.FebsConstant;
import cc.mrbird.febs.common.utils.FebsUtil;
import cc.mrbird.febs.dapp.dto.HlmBasicPerkDto;
import cc.mrbird.febs.dapp.entity.DataDictionaryCustom;
import cc.mrbird.febs.dapp.entity.MallGoods;
import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum;
import cc.mrbird.febs.dapp.mapper.DataDictionaryCustomMapper;
import cc.mrbird.febs.dapp.service.IAdminMallGoodsService;
import cn.hutool.core.util.ObjectUtil;
import lombok.RequiredArgsConstructor;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
@@ -19,6 +24,7 @@
public class ViewAdminMallGoodsController extends BaseController {
    private final IAdminMallGoodsService mallGoodsService;
    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
    /**
     * 商品列表
@@ -77,4 +83,102 @@
        idOrderMoneyFlow = id;
        return FebsUtil.view("goods/orderMoneyFlow");
    }
    @GetMapping("profitSetting")
    @RequiresPermissions("profitSetting:view")
    public String profitSetting() {
        return FebsUtil.view("goods/profitSetting");
    }
    @GetMapping("basicPerk")
    @RequiresPermissions("basicPerk:view")
    public String basicPerkSetting(Model model) {
        HlmBasicPerkDto hlmBasicPerkDto = new HlmBasicPerkDto();
        DataDictionaryCustom donateScorePercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.DONATE_SCORE_PERCENT.getType(),
                DataDictionaryEnum.DONATE_SCORE_PERCENT.getCode());
        if (donateScorePercentDic != null) {
            String donateScorePercent = ObjectUtil.isEmpty(donateScorePercentDic.getValue()) ? "0" : donateScorePercentDic.getValue();
            hlmBasicPerkDto.setDonateScorePercent(donateScorePercent);
        }
        DataDictionaryCustom staticReleaseDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.STATIC_RELEASE.getType(),
                DataDictionaryEnum.STATIC_RELEASE.getCode());
        if (staticReleaseDic != null) {
            String staticRelease = ObjectUtil.isEmpty(staticReleaseDic.getValue()) ? "0" : staticReleaseDic.getValue();
            hlmBasicPerkDto.setStaticRelease(staticRelease);
        }
        DataDictionaryCustom directReleaseDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.DIRECT_RELEASE.getType(),
                DataDictionaryEnum.DIRECT_RELEASE.getCode());
        if (directReleaseDic != null) {
            String directRelease = ObjectUtil.isEmpty(directReleaseDic.getValue()) ? "0" : directReleaseDic.getValue();
            hlmBasicPerkDto.setDirectRelease(directRelease);
        }
        DataDictionaryCustom maxReleaseDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.MAX_RELEASE.getType(),
                DataDictionaryEnum.MAX_RELEASE.getCode());
        if (maxReleaseDic != null) {
            String maxRelease = ObjectUtil.isEmpty(maxReleaseDic.getValue()) ? "0" : maxReleaseDic.getValue();
            hlmBasicPerkDto.setMaxRelease(maxRelease);
        }
        DataDictionaryCustom usdtOrderReleaseDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.USDT_ORDER_PERCENT.getType(),
                DataDictionaryEnum.USDT_ORDER_PERCENT.getCode());
        if (usdtOrderReleaseDic != null) {
            String usdtOrderRelease = ObjectUtil.isEmpty(usdtOrderReleaseDic.getValue()) ? "0" : usdtOrderReleaseDic.getValue();
            hlmBasicPerkDto.setUsdtOrderRelease(usdtOrderRelease);
        }
        DataDictionaryCustom teamPerkLevelEqualsDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.TEAM_PERK_LEVEL_EQUALS.getType(),
                DataDictionaryEnum.TEAM_PERK_LEVEL_EQUALS.getCode());
        if (teamPerkLevelEqualsDic != null) {
            String teamPerkLevelEquals = ObjectUtil.isEmpty(teamPerkLevelEqualsDic.getValue()) ? "0" : teamPerkLevelEqualsDic.getValue();
            hlmBasicPerkDto.setTeamPerkLevelEquals(teamPerkLevelEquals);
        }
        DataDictionaryCustom memberBuyMaxAmountDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.MEMBER_BUY_MAX_AMOUNT.getType(),
                DataDictionaryEnum.MEMBER_BUY_MAX_AMOUNT.getCode());
        if (memberBuyMaxAmountDic != null) {
            String memberBuyMaxAmount = ObjectUtil.isEmpty(memberBuyMaxAmountDic.getValue()) ? "0" : memberBuyMaxAmountDic.getValue();
            hlmBasicPerkDto.setMemberBuyMaxAmount(memberBuyMaxAmount);
        }
        DataDictionaryCustom packagePoorDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.PACKAGE_POOR.getType(),
                DataDictionaryEnum.PACKAGE_POOR.getCode());
        if (packagePoorDic != null) {
            String packagePoor = ObjectUtil.isEmpty(packagePoorDic.getValue()) ? "0" : packagePoorDic.getValue();
            hlmBasicPerkDto.setPackagePoor(packagePoor);
        }
        DataDictionaryCustom packageTotalScoreDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getType(),
                DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getCode());
        if (packageTotalScoreDic != null) {
            String packageTotalScore = ObjectUtil.isEmpty(packageTotalScoreDic.getValue()) ? "0" : packageTotalScoreDic.getValue();
            hlmBasicPerkDto.setPackageTotalScore(packageTotalScore);
        }
        DataDictionaryCustom packageScorePriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.PACKAGE_SCORE_PRICE.getType(),
                DataDictionaryEnum.PACKAGE_SCORE_PRICE.getCode());
        if (packageScorePriceDic != null) {
            String packageScorePrice = ObjectUtil.isEmpty(packageScorePriceDic.getValue()) ? "0" : packageScorePriceDic.getValue();
            hlmBasicPerkDto.setPackageScorePrice(packageScorePrice);
        }
        DataDictionaryCustom packageSaleToPoorPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.PACKAGE_SALE_TO_POOR_PERCENT.getType(),
                DataDictionaryEnum.PACKAGE_SALE_TO_POOR_PERCENT.getCode());
        if (packageSaleToPoorPercentDic != null) {
            String packageSaleToPoorPercent = ObjectUtil.isEmpty(packageSaleToPoorPercentDic.getValue()) ? "0" : packageSaleToPoorPercentDic.getValue();
            hlmBasicPerkDto.setPackageSaleToPoorPercent(packageSaleToPoorPercent);
        }
        DataDictionaryCustom withDrawFeeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.WITHDRAW_FEE.getType(),
                DataDictionaryEnum.WITHDRAW_FEE.getCode());
        if (withDrawFeeDic != null) {
            String withDrawFee = ObjectUtil.isEmpty(withDrawFeeDic.getValue()) ? "0" : withDrawFeeDic.getValue();
            hlmBasicPerkDto.setWithDrawFee(withDrawFee);
        }
        model.addAttribute("hlmBasicPerk", hlmBasicPerkDto);
        return FebsUtil.view("goods/basicPerkSetting");
    }
}
src/main/java/cc/mrbird/febs/dapp/dto/HlmBasicPerkDto.java
New file
@@ -0,0 +1,44 @@
package cc.mrbird.febs.dapp.dto;
import lombok.Data;
@Data
public class HlmBasicPerkDto {
    //赠送消费金额1.5倍增值积分(释放额度,额度为零就要复购)
    private String donateScorePercent;
    //每天按照消费金额的5‰个人静态释放
    private String staticRelease;
    //直推加速,享受直推人的100%个人静态释放
    private String directRelease;
    //最大封顶为此消费单的本金5%
    private String maxRelease;
    //商城入单的10%入底池
    private String usdtOrderRelease;
    //平级10%
    private String teamPerkLevelEquals;
    //普通会员购买上线
    private String memberBuyMaxAmount;
    //资产包USDT底池
    private String packagePoor;
    //资产包总积分
    private String packageTotalScore;
    //资产包积分价格
    private String packageScorePrice;
    //资产包卖出划入底池比例
    private String packageSaleToPoorPercent;
    //提现手续费
    private String withDrawFee;
}
src/main/java/cc/mrbird/febs/dapp/service/IAdminMallGoodsService.java
@@ -3,13 +3,18 @@
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.dapp.dto.AddMallGoodsDto;
import cc.mrbird.febs.dapp.dto.HlmBasicPerkDto;
import cc.mrbird.febs.dapp.dto.MallGoodsUpdateDto;
import cc.mrbird.febs.dapp.dto.MallOrderInfoDto;
import cc.mrbird.febs.dapp.entity.DataDictionaryCustom;
import cc.mrbird.febs.dapp.entity.MallGoods;
import cc.mrbird.febs.dapp.entity.MallOrderInfo;
import cc.mrbird.febs.dapp.vo.AdminMallMoneyFlowVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
import java.util.Map;
public interface IAdminMallGoodsService extends IService<MallGoods> {
@@ -30,4 +35,10 @@
    IPage<MallOrderInfo> getOrderListInPage(MallOrderInfoDto mallOrderInfo, QueryRequest request);
    IPage<AdminMallMoneyFlowVo> orderMoneyFlow(QueryRequest request, MallOrderInfo mallOrderInfo);
    List<DataDictionaryCustom> findDataDicByType(String type);
    void bonusSystemSetting(Map<String, Object> map);
    void hlmBasicPerk(HlmBasicPerkDto hlmBasicPerkDto);
}
src/main/java/cc/mrbird/febs/dapp/service/impl/AdminMallGoodsService.java
@@ -3,11 +3,15 @@
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.dapp.dto.AddMallGoodsDto;
import cc.mrbird.febs.dapp.dto.HlmBasicPerkDto;
import cc.mrbird.febs.dapp.dto.MallGoodsUpdateDto;
import cc.mrbird.febs.dapp.dto.MallOrderInfoDto;
import cc.mrbird.febs.dapp.entity.DataDictionaryCustom;
import cc.mrbird.febs.dapp.entity.MallGoods;
import cc.mrbird.febs.dapp.entity.MallOrderInfo;
import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum;
import cc.mrbird.febs.dapp.mapper.DappFundFlowDao;
import cc.mrbird.febs.dapp.mapper.DataDictionaryCustomMapper;
import cc.mrbird.febs.dapp.mapper.MallGoodsMapper;
import cc.mrbird.febs.dapp.mapper.MallOrderInfoMapper;
import cc.mrbird.febs.dapp.service.IAdminMallGoodsService;
@@ -22,6 +26,10 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@Service
@RequiredArgsConstructor
@@ -31,6 +39,7 @@
    private final MallGoodsMapper mallGoodsMapper;
    private final MallOrderInfoMapper mallOrderInfoMapper;
    private final DappFundFlowDao dappFundFlowDao;
    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
    @Override
    public IPage<MallGoods> getCategoryListInPage(MallGoods mallGoods, QueryRequest request) {
@@ -141,4 +150,76 @@
        IPage<AdminMallMoneyFlowVo> adminMallMoneyFlowVos = dappFundFlowDao.selectOrderMoneyFlowInPage(page, mallOrder);
        return adminMallMoneyFlowVos;
    }
    @Override
    public List<DataDictionaryCustom> findDataDicByType(String type) {
        return dataDictionaryCustomMapper.selectDicByType(type);
    }
    @Override
    public void bonusSystemSetting(Map<String, Object> map) {
        for (Map.Entry<String, Object> entry : map.entrySet()) {
            if (entry.getValue() instanceof String) {
                dataDictionaryCustomMapper.updateDicValueByTypeAndCode(null, entry.getKey(), (String) entry.getValue());
            } else {
                List<LinkedHashMap<String, Object>> value = (List<LinkedHashMap<String, Object>>) entry.getValue();
                for (LinkedHashMap<String, Object> dic : value) {
                    String type = (String) dic.get("type");
                    String code = (String) dic.get("code");
                    String dataValue = (String) dic.get("value");
                    dataDictionaryCustomMapper.updateDicValueByTypeAndCode(type, code, dataValue);
                }
            }
        }
    }
    @Override
    public void hlmBasicPerk(HlmBasicPerkDto hlmBasicPerkDto) {
        updateDataDic(DataDictionaryEnum.DONATE_SCORE_PERCENT.getType(),
                DataDictionaryEnum.DONATE_SCORE_PERCENT.getCode(),
                hlmBasicPerkDto.getDonateScorePercent());
        updateDataDic(DataDictionaryEnum.STATIC_RELEASE.getType(),
                DataDictionaryEnum.STATIC_RELEASE.getCode(),
                hlmBasicPerkDto.getStaticRelease());
        updateDataDic(DataDictionaryEnum.DIRECT_RELEASE.getType(),
                DataDictionaryEnum.DIRECT_RELEASE.getCode(),
                hlmBasicPerkDto.getDirectRelease());
        updateDataDic(DataDictionaryEnum.MAX_RELEASE.getType(),
                DataDictionaryEnum.MAX_RELEASE.getCode(),
                hlmBasicPerkDto.getMaxRelease());
        updateDataDic(DataDictionaryEnum.USDT_ORDER_PERCENT.getType(),
                DataDictionaryEnum.USDT_ORDER_PERCENT.getCode(),
                hlmBasicPerkDto.getUsdtOrderRelease());
        updateDataDic(DataDictionaryEnum.TEAM_PERK_LEVEL_EQUALS.getType(),
                DataDictionaryEnum.TEAM_PERK_LEVEL_EQUALS.getCode(),
                hlmBasicPerkDto.getTeamPerkLevelEquals());
        updateDataDic(DataDictionaryEnum.MEMBER_BUY_MAX_AMOUNT.getType(),
                DataDictionaryEnum.MEMBER_BUY_MAX_AMOUNT.getCode(),
                hlmBasicPerkDto.getMemberBuyMaxAmount());
        updateDataDic(DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getType(),
                DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getCode(),
                hlmBasicPerkDto.getPackageTotalScore());
        updateDataDic(DataDictionaryEnum.PACKAGE_SCORE_PRICE.getType(),
                DataDictionaryEnum.PACKAGE_SCORE_PRICE.getCode(),
                hlmBasicPerkDto.getPackageScorePrice());
        updateDataDic(DataDictionaryEnum.PACKAGE_SALE_TO_POOR_PERCENT.getType(),
                DataDictionaryEnum.PACKAGE_SALE_TO_POOR_PERCENT.getCode(),
                hlmBasicPerkDto.getPackageSaleToPoorPercent());
        updateDataDic(DataDictionaryEnum.PACKAGE_POOR.getType(),
                DataDictionaryEnum.PACKAGE_POOR.getCode(),
                hlmBasicPerkDto.getPackagePoor());
        updateDataDic(DataDictionaryEnum.WITHDRAW_FEE.getType(),
                DataDictionaryEnum.WITHDRAW_FEE.getCode(),
                hlmBasicPerkDto.getWithDrawFee());
    }
    public void updateDataDic(String type, String code, String value) {
        DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(type, code);
        if (dic != null) {
            dic.setValue(value);
            dataDictionaryCustomMapper.updateById(dic);
        }
    }
}
src/main/resources/templates/febs/views/dapp/member-charge.html
@@ -8,6 +8,7 @@
                            <div class="layui-col-md10">
                                <div class="layui-form-item">
                                    <div class="layui-inline">
                                        <label class="layui-form-label">地址邀请码:</label>
                                        <div class="layui-input-inline">
                                            <input type="text" name="address" autocomplete="off" placeholder="输入地址或邀请码" class="layui-input">
                                        </div>
src/main/resources/templates/febs/views/dapp/member-wallet-coin.html
@@ -8,6 +8,7 @@
                            <div class="layui-col-md10">
                                <div class="layui-form-item">
                                    <div class="layui-inline">
                                        <label class="layui-form-label">地址:</label>
                                        <div class="layui-input-inline">
                                            <input type="text" name="address" autocomplete="off" placeholder="输入地址"  class="layui-input">
                                        </div>
src/main/resources/templates/febs/views/dapp/member-wallet-mine.html
@@ -8,6 +8,7 @@
                            <div class="layui-col-md10">
                                <div class="layui-form-item">
                                    <div class="layui-inline">
                                        <label class="layui-form-label">地址:</label>
                                        <div class="layui-input-inline">
                                            <input type="text" name="address" autocomplete="off" placeholder="输入地址" class="layui-input">
                                        </div>
@@ -87,8 +88,8 @@
                url: ctx + 'wallet/walletMine',
                cols: [[
                    {field: 'address', title: '地址', minWidth: 130},
                    {field: 'availableAmount', title: '剩余产量(LAB)', minWidth: 130},
                    {field: 'totalAmount', title: '总产量(LAB)', minWidth: 180}
                    {field: 'availableAmount', title: '可用', minWidth: 130},
                    {field: 'totalAmount', title: '总量', minWidth: 180}
                ]]
            });
        }
src/main/resources/templates/febs/views/dapp/member-withdraw.html
@@ -8,6 +8,7 @@
                            <div class="layui-col-md10">
                                <div class="layui-form-item">
                                    <div class="layui-inline">
                                        <label class="layui-form-label">地址邀请码:</label>
                                        <div class="layui-input-inline">
                                            <input type="text" name="address" autocomplete="off" placeholder="输入地址或邀请码" class="layui-input">
                                        </div>
src/main/resources/templates/febs/views/dapp/member.html
@@ -12,20 +12,20 @@
                                        <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="accountType">
                                                <option value=""></option>
                                                <option value="MEMBER">MEMBER</option>
                                                <option value="NODE_1">NODE_1</option>
                                                <option value="NODE_2">NODE_2</option>
                                                <option value="NODE_3">NODE_3</option>
                                                <option value="NODE_4">NODE_4</option>
                                                <option value="NODE_5">NODE_5</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="accountType">-->
<!--                                                <option value=""></option>-->
<!--                                                <option value="MEMBER">MEMBER</option>-->
<!--                                                <option value="NODE_1">NODE_1</option>-->
<!--                                                <option value="NODE_2">NODE_2</option>-->
<!--                                                <option value="NODE_3">NODE_3</option>-->
<!--                                                <option value="NODE_4">NODE_4</option>-->
<!--                                                <option value="NODE_5">NODE_5</option>-->
<!--                                            </select>-->
<!--                                        </div>-->
<!--                                    </div>-->
                                </div>
                            </div>
                            <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area">
src/main/resources/templates/febs/views/dapp/money-change-flow.html
@@ -15,50 +15,50 @@
                                        </div>
                                    </div>
                                    <div class="layui-inline">
                                        <label class="layui-form-label">转账HASH:</label>
                                        <div class="layui-input-inline">
                                            <input type="text" placeholder="输入转账HASH" name="fromHash" autocomplete="off" class="layui-input">
                                        </div>
                                    </div>
                                    <div class="layui-inline">
                                        <label class="layui-form-label">类型:</label>
                                        <div class="layui-input-inline">
                                            <select name="type">
                                                <option value=""></option>
                                                <option value="4">入金,买入A币</option>
                                                <option value="5">进入a底池</option>
                                                <option value="6">进入b底池</option>
                                                <option value="7">50%客户秒到</option>
                                                <option value="8">全网加权分红收益总量</option>
                                                <option value="9">10%直推</option>
                                                <option value="10">5%节点-(超级节点收益总量)</option>
                                                <option value="11">5%节点平分</option>
                                                <option value="12">5%基金会-(基金会收益总量)</option>
                                                <option value="13">10%级差奖-(业绩奖收益总量)</option>
                                                <option value="14">10%级差奖给会员</option>
                                                <option value="15">dao3的全网分红</option>
                                                <option value="16">dao4的全网分红</option>
                                                <option value="17">dao5的全网分红</option>
                                                <option value="18">dao5的平级全网分红</option>
                                                <option value="19">DAO 3节点收益</option>
                                                <option value="20">DAO 4节点收益</option>
                                                <option value="21">DAO 5节点收益</option>
                                                <option value="22">DAO 5平级收益</option>
                                                <option value="23">资产钱包转账到闪对钱包</option>
                                                <option value="24">资产钱包转账到闪对钱包手续费</option>
                                                <option value="25">闪对钱包转USDT</option>
                                                <option value="27">闪对钱包转USDT(USDT流水)</option>
                                                <option value="28">入金,买入AUSD币</option>
                                                <option value="29">每小时燃烧</option>
                                                <option value="30">20%全网加权分红剩余</option>
                                                <option value="31">AUSDT互转</option>
                                                <option value="32">ANDAO互转</option>
                                                <option value="33">权益额度增加</option>
                                                <option value="34">进入提现池</option>
                                            </select>
                                        </div>
                                    </div>
<!--                                    <div class="layui-inline">-->
<!--                                        <label class="layui-form-label">转账HASH:</label>-->
<!--                                        <div class="layui-input-inline">-->
<!--                                            <input type="text" placeholder="输入转账HASH" name="fromHash" autocomplete="off" class="layui-input">-->
<!--                                        </div>-->
<!--                                    </div>-->
<!--                                    <div class="layui-inline">-->
<!--                                        <label class="layui-form-label">类型:</label>-->
<!--                                        <div class="layui-input-inline">-->
<!--                                            <select name="type">-->
<!--                                                <option value=""></option>-->
<!--                                                <option value="4">入金,买入A币</option>-->
<!--                                                <option value="5">进入a底池</option>-->
<!--                                                <option value="6">进入b底池</option>-->
<!--                                                <option value="7">50%客户秒到</option>-->
<!--                                                <option value="8">全网加权分红收益总量</option>-->
<!--                                                <option value="9">10%直推</option>-->
<!--                                                <option value="10">5%节点-(超级节点收益总量)</option>-->
<!--                                                <option value="11">5%节点平分</option>-->
<!--                                                <option value="12">5%基金会-(基金会收益总量)</option>-->
<!--                                                <option value="13">10%级差奖-(业绩奖收益总量)</option>-->
<!--                                                <option value="14">10%级差奖给会员</option>-->
<!--                                                <option value="15">dao3的全网分红</option>-->
<!--                                                <option value="16">dao4的全网分红</option>-->
<!--                                                <option value="17">dao5的全网分红</option>-->
<!--                                                <option value="18">dao5的平级全网分红</option>-->
<!--                                                <option value="19">DAO 3节点收益</option>-->
<!--                                                <option value="20">DAO 4节点收益</option>-->
<!--                                                <option value="21">DAO 5节点收益</option>-->
<!--                                                <option value="22">DAO 5平级收益</option>-->
<!--                                                <option value="23">资产钱包转账到闪对钱包</option>-->
<!--                                                <option value="24">资产钱包转账到闪对钱包手续费</option>-->
<!--                                                <option value="25">闪对钱包转USDT</option>-->
<!--                                                <option value="27">闪对钱包转USDT(USDT流水)</option>-->
<!--                                                <option value="28">入金,买入AUSD币</option>-->
<!--                                                <option value="29">每小时燃烧</option>-->
<!--                                                <option value="30">20%全网加权分红剩余</option>-->
<!--                                                <option value="31">AUSDT互转</option>-->
<!--                                                <option value="32">ANDAO互转</option>-->
<!--                                                <option value="33">权益额度增加</option>-->
<!--                                                <option value="34">进入提现池</option>-->
<!--                                            </select>-->
<!--                                        </div>-->
<!--                                    </div>-->
                                </div>
                            </div>
                            <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area">
src/main/resources/templates/febs/views/goods/basicPerkSetting.html
New file
@@ -0,0 +1,156 @@
<div class="layui-fluid layui-anim febs-anim" id="hlm-basic-perk" lay-title="基础设置">
    <div class="layui-row layui-col-space8 febs-container">
        <form class="layui-form" action="" lay-filter="hlm-basic-perk-form">
            <div class="layui-card">
                <div class="layui-card-body">
                    <blockquote class="layui-elem-quote blue-border">基础设置:</blockquote>
                    <div class="layui-row layui-col-space10 layui-form-item">
                        <label class="layui-form-label febs-form-item-require">赠送倍数:</label>
                        <div class="layui-input-block">
                            <input type="text" name="donateScorePercent" lay-verify="required" placeholder="请输入数字" autocomplete="off" class="layui-input" >
                            <div class="layui-word-aux">赠送消费金额1.5倍增值积分(释放额度,额度为零就要复购)</div>
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <label class="layui-form-label febs-form-item-require">个人静态(%):</label>
                        <div class="layui-input-block">
                            <input type="text" name="staticRelease" lay-verify="required" placeholder="请输入数字" autocomplete="off" class="layui-input" >
                            <div class="layui-word-aux">每天按照消费金额的5‰个人静态释放</div>
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <label class="layui-form-label febs-form-item-require">直推加速(%):</label>
                        <div class="layui-input-block">
                            <input type="text" name="directRelease" lay-verify="required" placeholder="请输入数字" autocomplete="off" class="layui-input" >
                            <div class="layui-word-aux">直推加速,享受直推人的100%个人静态释放</div>
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <label class="layui-form-label febs-form-item-require">封顶比例(%):</label>
                        <div class="layui-input-block">
                            <input type="text" name="maxRelease" lay-verify="required" placeholder="请输入数字" autocomplete="off" class="layui-input" >
                            <div class="layui-word-aux">最大封顶为此消费单的本金5%</div>
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <label class="layui-form-label febs-form-item-require">入单底池(%):</label>
                        <div class="layui-input-block">
                            <input type="text" name="usdtOrderRelease" lay-verify="required" placeholder="请输入数字" autocomplete="off" class="layui-input" >
                            <div class="layui-word-aux">商城入单的10%入底池</div>
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <label class="layui-form-label febs-form-item-require">平级补贴(%):</label>
                        <div class="layui-input-block">
                            <input type="text" name="teamPerkLevelEquals" lay-verify="required" placeholder="请输入数字" autocomplete="off" class="layui-input" >
                            <div class="layui-word-aux">平级10%</div>
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <label class="layui-form-label febs-form-item-require">普通上限:</label>
                        <div class="layui-input-block">
                            <input type="text" name="memberBuyMaxAmount" lay-verify="required" placeholder="请输入数字" autocomplete="off" class="layui-input" >
                            <div class="layui-word-aux">普通会员购买上限</div>
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <label class="layui-form-label febs-form-item-require">USDT底池:</label>
                        <div class="layui-input-block">
                            <input type="text" name="packagePoor" lay-verify="required" placeholder="请输入数字" autocomplete="off" class="layui-input" >
                            <div class="layui-word-aux">资产包USDT底池</div>
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <label class="layui-form-label febs-form-item-require">资产总分(%):</label>
                        <div class="layui-input-block">
                            <input type="text" name="packageTotalScore" lay-verify="required" placeholder="请输入数字" autocomplete="off" class="layui-input" >
                            <div class="layui-word-aux">资产包总积分</div>
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <label class="layui-form-label febs-form-item-require">积分价格:</label>
                        <div class="layui-input-block">
                            <input type="text" name="packageScorePrice" lay-verify="required" placeholder="请输入数字" autocomplete="off" class="layui-input" >
                            <div class="layui-word-aux">资产包积分价格</div>
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <label class="layui-form-label febs-form-item-require">卖出划入(%):</label>
                        <div class="layui-input-block">
                            <input type="text" name="packageSaleToPoorPercent" lay-verify="required" placeholder="请输入数字" autocomplete="off" class="layui-input" >
                            <div class="layui-word-aux">资产包卖出划入底池比例</div>
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <label class="layui-form-label febs-form-item-require">提现手续(%):</label>
                        <div class="layui-input-block">
                            <input type="text" name="withDrawFee" lay-verify="required" placeholder="请输入数字" autocomplete="off" class="layui-input" >
                            <div class="layui-word-aux">提现手续费,划入底池比例</div>
                        </div>
                    </div>
                </div>
                <div class="layui-card-footer">
                    <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="hlm-basic-perk-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', 'febs', 'form', 'eleTree'], function () {
        var $ = layui.jquery,
            febs = layui.febs,
            form = layui.form,
            hlmBasicPerk = [[${hlmBasicPerk}]],
            $view = $('#hlm-basic-perk');
        form.verify({
            integer: [
                /^[1-9]\d*$/
                , '只能输入正整数'
            ]
        });
        initHlmBasicPerkValue();
        form.render();
        function initHlmBasicPerkValue() {
            form.val("hlm-basic-perk-form", {
                "withDrawFee": hlmBasicPerk.withDrawFee,
                "packageSaleToPoorPercent": hlmBasicPerk.packageSaleToPoorPercent,
                "packageScorePrice": hlmBasicPerk.packageScorePrice,
                "packageTotalScore": hlmBasicPerk.packageTotalScore,
                "packagePoor": hlmBasicPerk.packagePoor,
                "donateScorePercent": hlmBasicPerk.donateScorePercent,
                "staticRelease": hlmBasicPerk.staticRelease,
                "directRelease": hlmBasicPerk.directRelease,
                "maxRelease": hlmBasicPerk.maxRelease,
                "usdtOrderRelease": hlmBasicPerk.usdtOrderRelease,
                "teamPerkLevelEquals": hlmBasicPerk.teamPerkLevelEquals,
                "memberBuyMaxAmount": hlmBasicPerk.memberBuyMaxAmount
            });
        }
        form.on('submit(hlm-basic-perk-submit)', function (data) {
            febs.post(ctx + 'admin/goods/hlmBasicPerk', data.field, function (res) {
                febs.alert.success('设置成功');
                return ;
            });
            return false;
        });
    });
</script>
src/main/resources/templates/febs/views/goods/profitSetting.html
New file
@@ -0,0 +1,126 @@
<div class="layui-fluid layui-anim febs-anim" id="profit-setting" lay-title="会员等级设置">
    <div class="layui-row layui-col-space8 febs-container">
        <form class="layui-form" action="" lay-filter="profit-setting-form">
            <div class="layui-card">
                <div class="layui-card-body">
                    <blockquote class="layui-elem-quote blue-border">等级</blockquote>
                    <div class="layui-tab-item layui-show">
                        <table id="agentBonus" lay-filter="agentBonus"></table>
                    </div>
                </div>
                <div class="layui-card-footer">
                    <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="profit-setting-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', 'laytpl', 'table'], function () {
        var $ = layui.jquery,
            febs = layui.febs,
            form = layui.form,
            table = layui.table,
            validate = layui.validate,
            $view = $('#profit-setting')
            , laytpl = layui.laytpl
            , agentBonusArr;
        form.verify(validate);
        form.render();
        table.render({
            elem: '#agentBonus'
            ,cols: [[ //表头
                {field: 'description', title: '名称'}
                ,{field: 'shareMinPercent', title: '共享区加速百分比', edit:'text'}
                ,{field: 'shareMaxPercent', title: '共享区加速最大值', edit:'text'}
                ,{field: 'smallAchieve', title: '升级要求业绩', edit:'text'}
                ,{field: 'teamPercent', title: '团队静态收益', edit:'text'}
                ,{field: 'orderSalePercent', title: '全网销售额加权平分分红', edit:'text'}
                ,{field: 'lastAgentCnt', title: '上一级代理数量', edit:'text'}
                ,{field: 'buyMaxAmount', title: '购买上限', edit:'text'}
                ,{field: 'type', title: '比例', edit:'text', hide:'true'}
                ,{field: 'code', title: '比例', edit:'text', hide:'true'}
            ]]
            ,data: []
        });
        table.on('edit(agentBonus)', function(obj){
            var value = obj.value //得到修改后的值
                ,data = obj.data //得到所在行所有键值
                ,field = obj.field; //得到字段
            for (let i = 0; i < agentBonusArr.length; i++) {
                if (agentBonusArr[i].code === data.code) {
                    var valueData = {};
                    valueData.shareMinPercent = data.shareMinPercent;
                    valueData.shareMaxPercent = data.shareMaxPercent;
                    valueData.smallAchieve = data.smallAchieve;
                    valueData.teamPercent = data.teamPercent;
                    valueData.orderSalePercent = data.orderSalePercent;
                    valueData.lastAgentCnt = data.lastAgentCnt;
                    valueData.buyMaxAmount = data.buyMaxAmount;
                    agentBonusArr[i].value = JSON.stringify(valueData);
                }
            }
        });
        dicDataReq("TEAM_LEVEL");
        function dicDataReq(type) {
            $.get(ctx + 'admin/goods/findDicByType/' + type, function (r) {
                if (r.code === 200) {
                    var data = r.data;
                    if ("TEAM_LEVEL" == type) {
                        for (let i = 0; i < data.length; i++) {
                            data[i].shareMinPercent = JSON.parse(data[i].value).shareMinPercent;
                            data[i].shareMaxPercent = JSON.parse(data[i].value).shareMaxPercent;
                            data[i].smallAchieve = JSON.parse(data[i].value).smallAchieve;
                            data[i].teamPercent = JSON.parse(data[i].value).teamPercent;
                            data[i].orderSalePercent = JSON.parse(data[i].value).orderSalePercent;
                            data[i].lastAgentCnt = JSON.parse(data[i].value).lastAgentCnt;
                            data[i].buyMaxAmount = JSON.parse(data[i].value).buyMaxAmount;
                        }
                        agentBonusArr = data;
                        table.reload('agentBonus', {
                            data : data
                        });
                    }
                }
            });
        }
        form.on('submit(profit-setting-form-submit)', function (data) {
            data.field.agentBonus = agentBonusArr;
            $.ajax({
                'url':ctx + 'admin/goods/bonusSystemSetting',
                'type':'post',
                'dataType':'json',
                'headers' : {'Content-Type' : 'application/json;charset=utf-8'},
                'traditional': true,
                'data':JSON.stringify(data.field),
                'success':function (data) {
                    if (data.code == 200) {
                        febs.alert.success(data.message);
                    }
                },
                'error':function () {
                    febs.alert.warn('服务器繁忙');
                }
            })
            return false;
        });
    });
</script>