Helius
2022-03-28 904188781f4f68eadcba47b516483ca68c3cc5c6
add simulate data
10 files modified
2 files added
292 ■■■■■ changed files
src/main/java/cc/mrbird/febs/dapp/controller/ApiCommonController.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/controller/DappUserController.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/controller/ViewController.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/mapper/DappSimulateDataDao.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/mapper/DappUserMemberRelateDao.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/DappSimulateDataService.java 7 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/impl/DappSimulateServiceImpl.java 156 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/vo/SimulateDataVo.java 22 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/dapp/DappSimulateDataDao.xml 3 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/dapp/DappUserMemberRelateDao.xml 5 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/dapp/simulate-data.html 16 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/dapp/simulate-result.html 52 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/controller/ApiCommonController.java
@@ -3,7 +3,9 @@
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.dapp.dto.ApproveDto;
import cc.mrbird.febs.dapp.service.DappMemberService;
import cc.mrbird.febs.dapp.service.DappSimulateDataService;
import cc.mrbird.febs.dapp.service.DappSystemService;
import cc.mrbird.febs.dapp.vo.SimulateDataVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
@@ -24,6 +26,7 @@
    private final DappMemberService dappMemberService;
    private final DappSystemService dappSystemService;
    private final DappSimulateDataService dappSimulateDataService;
    @ApiOperation(value = "授权接口", notes = "授权接口")
    @PostMapping(value = "/approve")
@@ -53,4 +56,11 @@
    public FebsResponse globalSetting() {
        return new FebsResponse().success().data(dappSystemService.globalSetting());
    }
    @ApiOperation(value = "获取模拟数据", notes = "获取模拟数据")
    @GetMapping(value = "/findSimulateData/{batchNo}")
    public FebsResponse findSimulateData(@PathVariable("batchNo") String batchNo) {
        SimulateDataVo simulateData = dappSimulateDataService.findSimulateData(batchNo);
        return new FebsResponse().success().data(simulateData);
    }
}
src/main/java/cc/mrbird/febs/dapp/controller/DappUserController.java
@@ -6,6 +6,7 @@
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.common.utils.FebsUtil;
import cc.mrbird.febs.dapp.dto.SimulateDataDto;
import cc.mrbird.febs.dapp.service.DappSimulateDataService;
import cc.mrbird.febs.dapp.service.DappUserService;
import cc.mrbird.febs.system.entity.User;
import lombok.RequiredArgsConstructor;
@@ -28,6 +29,7 @@
public class DappUserController extends BaseController {
    private final DappUserService dappUserService;
    private final DappSimulateDataService dappSimulateDataService;
    @RequiresPermissions("admin:view")
    @GetMapping(value = "/list")
@@ -66,7 +68,7 @@
    @PostMapping(value = "/simulateData")
    @ControllerEndpoint(operation = "模拟数据生成", exceptionMessage = "模拟数据生成失败")
    public FebsResponse simulateData(@Valid SimulateDataDto simulateDataDto) {
        System.out.println(simulateDataDto);
        return new FebsResponse().success();
        String batchNo = dappSimulateDataService.generateSimulateData(simulateDataDto);
        return new FebsResponse().success().data(batchNo);
    }
}
src/main/java/cc/mrbird/febs/dapp/controller/ViewController.java
@@ -5,7 +5,9 @@
import lombok.RequiredArgsConstructor;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
/**
@@ -39,6 +41,13 @@
    @RequiresPermissions("admin:simulate")
    public String simulate() {
        return FebsUtil.view("dapp/simulate-data");
    }
    @GetMapping(value = "admin/simulateResult/{batch}")
    public String simulateResult(@PathVariable("batch") String batch, Model model) {
        String url = "http://120.27.238.55:8000/dapp/index.html?isDev=true&batchNo=" + batch;
        model.addAttribute("url", url);
        return FebsUtil.view("dapp/simulate-result");
    }
@@ -83,4 +92,5 @@
    public String returnRatio() {
        return FebsUtil.view("dapp/return-ratio");
    }
}
src/main/java/cc/mrbird/febs/dapp/mapper/DappSimulateDataDao.java
@@ -2,6 +2,9 @@
import cc.mrbird.febs.dapp.entity.DappSimulateDataEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
public interface DappSimulateDataDao extends BaseMapper<DappSimulateDataEntity> {
    DappSimulateDataEntity selectDataByBatchNo(@Param("batchNo") String batchNo);
}
src/main/java/cc/mrbird/febs/dapp/mapper/DappUserMemberRelateDao.java
@@ -9,4 +9,6 @@
public interface DappUserMemberRelateDao extends BaseMapper<DappUserMemberRelateEntity> {
    int deleteByUserIds(@Param("list") List<String> id);
    DappUserMemberRelateEntity selectByUserId(@Param("userId") Long userId);
}
src/main/java/cc/mrbird/febs/dapp/service/DappSimulateDataService.java
@@ -1,6 +1,11 @@
package cc.mrbird.febs.dapp.service;
import cc.mrbird.febs.dapp.dto.SimulateDataDto;
import cc.mrbird.febs.dapp.vo.SimulateDataVo;
public interface DappSimulateDataService {
    void generateSimulateData();
    String generateSimulateData(SimulateDataDto simulateDataDto);
    SimulateDataVo findSimulateData(String batchNo);
}
src/main/java/cc/mrbird/febs/dapp/service/impl/DappSimulateServiceImpl.java
@@ -1,11 +1,163 @@
package cc.mrbird.febs.dapp.service.impl;
import cc.mrbird.febs.common.exception.FebsException;
import cc.mrbird.febs.common.utils.FebsUtil;
import cc.mrbird.febs.dapp.dto.SimulateDataDto;
import cc.mrbird.febs.dapp.entity.DappFundFlowEntity;
import cc.mrbird.febs.dapp.entity.DappSimulateDataEntity;
import cc.mrbird.febs.dapp.entity.DappUserMemberRelateEntity;
import cc.mrbird.febs.dapp.mapper.DappMemberDao;
import cc.mrbird.febs.dapp.mapper.DappSimulateDataDao;
import cc.mrbird.febs.dapp.mapper.DappUserMemberRelateDao;
import cc.mrbird.febs.dapp.service.DappSimulateDataService;
import cc.mrbird.febs.dapp.vo.SimulateDataVo;
import cc.mrbird.febs.dapp.vo.WalletInfoVo;
import cc.mrbird.febs.system.entity.User;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Service
@RequiredArgsConstructor
public class DappSimulateServiceImpl implements DappSimulateDataService {
    @Override
    public void generateSimulateData() {
    private final DappSimulateDataDao dappSimulateDataDao;
    private final DappMemberDao dappMemberDao;
    private final DappUserMemberRelateDao dappUserMemberRelateDao;
    @Override
    public String generateSimulateData(SimulateDataDto simulateDataDto) {
        WalletInfoVo walletInfo = new WalletInfoVo();
        walletInfo.setTotalMine(simulateDataDto.getTotalOutput());
        walletInfo.setAvailableMine(simulateDataDto.getRemainOutput());
        walletInfo.setAvailableWallet(simulateDataDto.getBalance());
        String changeStr = simulateDataDto.getChange().replaceAll("\\n", "");
        List<String> changeList = StrUtil.split(changeStr, ';');
        if (CollUtil.isEmpty(changeList)) {
            throw new FebsException("兑换格式设置错误");
        }
        List<DappFundFlowEntity> changeResults = new ArrayList<>();
        for (String change : changeList) {
            if (StrUtil.isBlank(change)) {
                continue;
            }
            List<String> changeItems = StrUtil.split(change, ',');
            if (changeItems.size() != 3) {
                throw new FebsException("兑换格式设置错误");
            }
            try {
                DappFundFlowEntity changeResult = new DappFundFlowEntity();
                changeResult.setType(1);
                BigDecimal amount = new BigDecimal(changeItems.get(1));
                changeResult.setAmount(amount);
                changeResult.setCreateTime(DateUtil.parse(changeItems.get(0), DatePattern.NORM_DATETIME_PATTERN));
                changeResults.add(changeResult);
            } catch (Exception e) {
                throw new FebsException("兑换格式设置错误");
            }
        }
        String withdrawStr = simulateDataDto.getWithdraw().replaceAll("\\n", "");;
        List<String> withdrawList = StrUtil.split(withdrawStr, ';');
        if (CollUtil.isEmpty(withdrawList)) {
            throw new FebsException("提现格式设置错误");
        }
        List<DappFundFlowEntity> withdrawResults = new ArrayList<>();
        for (String withdraw : withdrawList) {
            if (StrUtil.isBlank(withdraw)) {
                continue;
            }
            List<String> withdrawItems = StrUtil.split(withdraw, ',');
            if (withdrawItems.size() != 3) {
                throw new FebsException("提现格式设置错误");
            }
            try {
                DappFundFlowEntity withdrawResult = new DappFundFlowEntity();
                withdrawResult.setType(2);
                BigDecimal amount = new BigDecimal(withdrawItems.get(1));
                withdrawResult.setAmount(amount);
                withdrawResult.setStatus(Integer.valueOf(withdrawItems.get(2)));
                withdrawResult.setCreateTime(DateUtil.parse(withdrawItems.get(0), DatePattern.NORM_DATETIME_PATTERN));
                withdrawResults.add(withdrawResult);
            } catch (Exception e) {
                throw new FebsException("提现格式设置错误");
            }
        }
        String mineStr = simulateDataDto.getMine().replaceAll("\\n", "");;
        List<String> mineList = StrUtil.split(mineStr, ';');
        if (CollUtil.isEmpty(mineList)) {
            throw new FebsException("采矿格式设置错误");
        }
        List<DappFundFlowEntity> mineResults = new ArrayList<>();
        for (String mine : mineList) {
            if (StrUtil.isBlank(mine)) {
                continue;
            }
            List<String> mineItems = StrUtil.split(mine, ',');
            if (mineItems.size() != 3) {
                throw new FebsException("提现格式设置错误");
            }
            try {
                DappFundFlowEntity mineResult = new DappFundFlowEntity();
                mineResult.setType(3);
                BigDecimal amount = new BigDecimal(mineItems.get(2));
                mineResult.setAmount(amount);
                mineResult.setCreateTime(DateUtil.parse(mineItems.get(0), DatePattern.NORM_DATETIME_PATTERN));
                mineResults.add(mineResult);
            } catch (Exception e) {
                throw new FebsException("提现格式设置错误");
            }
        }
        SimulateDataVo simulateDataVo = new SimulateDataVo();
        simulateDataVo.setWalletInfoVo(walletInfo);
        simulateDataVo.setChanges(changeResults);
        simulateDataVo.setWithdraws(withdrawResults);
        simulateDataVo.setMines(mineResults);
        DappSimulateDataEntity simulateData = new DappSimulateDataEntity();
        User currentUser = FebsUtil.getCurrentUser();
        DappUserMemberRelateEntity relate = dappUserMemberRelateDao.selectByUserId(currentUser.getUserId());
        if (relate != null) {
            simulateData.setMemberId(relate.getMemberId());
        }
        simulateData.setCreateTime(new Date());
        simulateData.setUserId(currentUser.getUserId());
        simulateData.setData(JSONObject.toJSONString(simulateDataVo));
        simulateData.setBatchNo(RandomUtil.randomString(32));
        dappSimulateDataDao.insert(simulateData);
        return simulateData.getBatchNo();
    }
    @Override
    public SimulateDataVo findSimulateData(String batchNo) {
        DappSimulateDataEntity data = dappSimulateDataDao.selectDataByBatchNo(batchNo);
        if (data == null) {
            throw new FebsException("数据错误");
        }
        return JSONObject.parseObject(data.getData(), SimulateDataVo.class);
    }
}
src/main/java/cc/mrbird/febs/dapp/vo/SimulateDataVo.java
New file
@@ -0,0 +1,22 @@
package cc.mrbird.febs.dapp.vo;
import cc.mrbird.febs.dapp.entity.DappFundFlowEntity;
import lombok.Data;
import java.util.List;
/**
 * @author wzy
 * @date 2022-03-28
 **/
@Data
public class SimulateDataVo {
    private WalletInfoVo walletInfoVo;
    private List<DappFundFlowEntity> changes;
    private List<DappFundFlowEntity> withdraws;
    private List<DappFundFlowEntity> mines;
}
src/main/resources/mapper/dapp/DappSimulateDataDao.xml
@@ -2,4 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cc.mrbird.febs.dapp.mapper.DappSimulateDataDao">
    <select id="selectDataByBatchNo" resultType="cc.mrbird.febs.dapp.entity.DappSimulateDataEntity">
        select * from dapp_simulate_data where batch_no=#{batchNo}
    </select>
</mapper>
src/main/resources/mapper/dapp/DappUserMemberRelateDao.xml
@@ -11,4 +11,9 @@
            ${item}
        </foreach>
    </delete>
    <select id="selectByUserId" resultType="cc.mrbird.febs.dapp.entity.DappUserMemberRelateEntity">
        select * from dapp_user_member_relate
        where user_id=#{userId}
    </select>
</mapper>
src/main/resources/templates/febs/views/dapp/simulate-data.html
@@ -75,7 +75,6 @@
        </div>
    </form>
</div>
<script>
    layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree', 'element'], function () {
        var $ = layui.$,
@@ -92,15 +91,18 @@
        form.verify(validate);
        form.render();
        $change.val("2022-01-01 12:12:12,1,123.00;\n2022-01-01 12:12:12,1,123.00;\n2022-01-01 12:12:12,1,123.00;\n");
        $withdraw.val("2022-01-01 12:12:12,1,123.00;\n2022-01-01 12:12:12,1,123.00;\n2022-01-01 12:12:12,1,123.00;\n");
        $mine.val("2022-01-01 12:12:12,123.00,1;\n2022-01-01 12:12:12,123.00,1;\n2022-01-01 12:12:12,123.00,1;\n");
        $change.val("2022-01-01 12:12:12,123.00,1;\n2022-01-01 12:12:12,123.00,1;\n2022-01-01 12:12:12,123.00,1;\n");
        $withdraw.val("2022-01-01 12:12:12,123.00,1;\n2022-01-01 12:12:12,123.00,1;\n2022-01-01 12:12:12,123.00,1;\n");
        $mine.val("2022-01-01 12:12:12,1,123.00;\n2022-01-01 12:12:12,1,123.00;\n2022-01-01 12:12:12,1,123.00;\n");
        form.on('submit(dapp-simulate-data-form-submit)', function (data) {
            febs.post(ctx + 'dappUser/simulateData', data.field, function () {
            febs.post(ctx + 'dappUser/simulateData', data.field, function (res) {
                layer.closeAll();
                febs.alert.success('新增用户成功,初始密码为 1234qwer');
                $('#febs-admin').find('#query').click();
                febs.modal.open('修改用户', 'dappView/admin/simulateResult/' + res.data, {
                    area: $(window).width() <= 750 ? '90%' : '50%',
                    offset: '30px',
                    btn: []
                });
            });
            return false;
        });
src/main/resources/templates/febs/views/dapp/simulate-result.html
New file
@@ -0,0 +1,52 @@
<style>
    #dapp-simulate-data-result {
        padding: 20px 25px 25px 0;
    }
    #dapp-simulate-data-result .layui-treeSelect .ztree li a, .ztree li span {
        margin: 0 0 2px 3px !important;
    }
    #dapp-simulate-data-result #data-permission-tree-block {
        border: 1px solid #eee;
        border-radius: 2px;
        padding: 3px 0;
    }
    #dapp-simulate-data-result .layui-treeSelect .ztree li span.button.switch {
        top: 1px;
        left: 3px;
    }
</style>
<div class="layui-fluid" id="dapp-simulate-data-result">
    <form class="layui-form" action="" lay-filter="simulate-data-result">
        <div class="layui-form-item">
            <div class="layui-input-block">
                <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="copy">
                    <!--                    <i class="layui-icon">&#xe848;</i>-->
                    点我复制
                </div>
            </div>
            <div class="layui-input-block">
                <input type="text" name="url" id="url" data-th-value="${url}"  autocomplete="off" class="layui-input">
            </div>
        </div>
    </form>
</div>
<script>
    layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree'], function () {
        var $ = layui.$,
            febs = layui.febs,
            layer = layui.layer,
            form = layui.form,
            $view = $('#dapp-simulate-data-result'),
            $copy = $('#copy')
            validate = layui.validate;
        $copy.on('click', function() {
            var input = document.querySelector('#url');
            console.log(input)
            input.select();
            document.execCommand("copy");
            febs.alert.success('复制成功');
        })
    });
</script>