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"></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>