From 904188781f4f68eadcba47b516483ca68c3cc5c6 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Mon, 28 Mar 2022 14:43:17 +0800
Subject: [PATCH] add simulate data

---
 src/main/java/cc/mrbird/febs/dapp/controller/DappUserController.java        |    6 
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappSimulateServiceImpl.java |  156 ++++++++++++++++++++++++++++++
 src/main/java/cc/mrbird/febs/dapp/controller/ViewController.java            |   10 ++
 src/main/java/cc/mrbird/febs/dapp/mapper/DappSimulateDataDao.java           |    3 
 src/main/java/cc/mrbird/febs/dapp/controller/ApiCommonController.java       |   10 ++
 src/main/resources/mapper/dapp/DappUserMemberRelateDao.xml                  |    5 +
 src/main/resources/templates/febs/views/dapp/simulate-data.html             |   16 +-
 src/main/resources/templates/febs/views/dapp/simulate-result.html           |   52 ++++++++++
 src/main/java/cc/mrbird/febs/dapp/vo/SimulateDataVo.java                    |   22 ++++
 src/main/java/cc/mrbird/febs/dapp/service/DappSimulateDataService.java      |    7 +
 src/main/java/cc/mrbird/febs/dapp/mapper/DappUserMemberRelateDao.java       |    2 
 src/main/resources/mapper/dapp/DappSimulateDataDao.xml                      |    3 
 12 files changed, 280 insertions(+), 12 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/dapp/controller/ApiCommonController.java b/src/main/java/cc/mrbird/febs/dapp/controller/ApiCommonController.java
index 5a24324..3b2e01b 100644
--- a/src/main/java/cc/mrbird/febs/dapp/controller/ApiCommonController.java
+++ b/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);
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/controller/DappUserController.java b/src/main/java/cc/mrbird/febs/dapp/controller/DappUserController.java
index 836e006..c518c94 100644
--- a/src/main/java/cc/mrbird/febs/dapp/controller/DappUserController.java
+++ b/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);
     }
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/controller/ViewController.java b/src/main/java/cc/mrbird/febs/dapp/controller/ViewController.java
index b5ac532..d7f19ca 100644
--- a/src/main/java/cc/mrbird/febs/dapp/controller/ViewController.java
+++ b/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");
     }
+
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappSimulateDataDao.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappSimulateDataDao.java
index 0df9049..8529719 100644
--- a/src/main/java/cc/mrbird/febs/dapp/mapper/DappSimulateDataDao.java
+++ b/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);
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappUserMemberRelateDao.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappUserMemberRelateDao.java
index 8f86d70..82e096e 100644
--- a/src/main/java/cc/mrbird/febs/dapp/mapper/DappUserMemberRelateDao.java
+++ b/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);
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/DappSimulateDataService.java b/src/main/java/cc/mrbird/febs/dapp/service/DappSimulateDataService.java
index 964f72e..dbfa64a 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/DappSimulateDataService.java
+++ b/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);
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSimulateServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSimulateServiceImpl.java
index 508bfc2..e46b59b 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSimulateServiceImpl.java
+++ b/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);
     }
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/vo/SimulateDataVo.java b/src/main/java/cc/mrbird/febs/dapp/vo/SimulateDataVo.java
new file mode 100644
index 0000000..c1ab625
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/vo/SimulateDataVo.java
@@ -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;
+}
diff --git a/src/main/resources/mapper/dapp/DappSimulateDataDao.xml b/src/main/resources/mapper/dapp/DappSimulateDataDao.xml
index 94ac7f4..c9388b7 100644
--- a/src/main/resources/mapper/dapp/DappSimulateDataDao.xml
+++ b/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>
\ No newline at end of file
diff --git a/src/main/resources/mapper/dapp/DappUserMemberRelateDao.xml b/src/main/resources/mapper/dapp/DappUserMemberRelateDao.xml
index 20e84f7..685387e 100644
--- a/src/main/resources/mapper/dapp/DappUserMemberRelateDao.xml
+++ b/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>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/dapp/simulate-data.html b/src/main/resources/templates/febs/views/dapp/simulate-data.html
index eaff6af..03057b5 100644
--- a/src/main/resources/templates/febs/views/dapp/simulate-data.html
+++ b/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;
         });
diff --git a/src/main/resources/templates/febs/views/dapp/simulate-result.html b/src/main/resources/templates/febs/views/dapp/simulate-result.html
new file mode 100644
index 0000000..5964ee9
--- /dev/null
+++ b/src/main/resources/templates/febs/views/dapp/simulate-result.html
@@ -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>
\ No newline at end of file

--
Gitblit v1.9.1