From 06d334585a2174726e3574ea939e10beec620bae Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Sat, 02 Apr 2022 17:55:39 +0800
Subject: [PATCH] fix some bug and problem and add agent return
---
src/main/java/cc/mrbird/febs/dapp/controller/ViewController.java | 7 +
src/main/java/cc/mrbird/febs/dapp/service/impl/DappUserServiceImpl.java | 14 ++
src/main/resources/mapper/dapp/DappUserMemberRelateDao.xml | 5 +
src/main/java/cc/mrbird/febs/dapp/mapper/DappAgentReturnFlowDao.java | 12 ++
src/main/java/cc/mrbird/febs/dapp/entity/DappAgentReturnFlowEntity.java | 31 ++++++
src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletMineDao.java | 4
src/main/resources/application-prod.yml | 2
src/main/resources/templates/febs/views/dapp/money-change-flow.html | 4
src/main/resources/templates/febs/views/dapp/agent-return.html | 103 ++++++++++++++++++++
src/main/resources/mapper/dapp/DappMemberDao.xml | 17 +++
src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java | 2
src/main/java/cc/mrbird/febs/job/MineProfitJob.java | 71 ++++++++++++++
src/main/resources/mapper/dapp/DappAgentReturnFlowDao.xml | 14 ++
src/main/java/cc/mrbird/febs/dapp/mapper/DappUserMemberRelateDao.java | 2
src/main/resources/mapper/dapp/DappWalletMineDao.xml | 7 +
15 files changed, 291 insertions(+), 4 deletions(-)
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 d7f19ca..0f07765 100644
--- a/src/main/java/cc/mrbird/febs/dapp/controller/ViewController.java
+++ b/src/main/java/cc/mrbird/febs/dapp/controller/ViewController.java
@@ -93,4 +93,11 @@
return FebsUtil.view("dapp/return-ratio");
}
+
+ @GetMapping(value = "agentReturn")
+ @RequiresPermissions("agentReturn:view")
+ public String agentReturn() {
+ return FebsUtil.view("dapp/agent-return");
+ }
+
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappAgentReturnFlowEntity.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappAgentReturnFlowEntity.java
new file mode 100644
index 0000000..a418f98
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappAgentReturnFlowEntity.java
@@ -0,0 +1,31 @@
+package cc.mrbird.febs.dapp.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author wzy
+ * @date 2022-04-02
+ **/
+@Data
+@TableName("dapp_agent_return_flow")
+public class DappAgentReturnFlowEntity {
+
+ @TableId(value = "id",type = IdType.AUTO)
+ private Long id;
+
+ private Date createTime;
+
+ private Long memberId;
+
+ private Long agentMemberId;
+
+ private BigDecimal amount;
+
+ private Integer isReturn;
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappAgentReturnFlowDao.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappAgentReturnFlowDao.java
new file mode 100644
index 0000000..0459ebf
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappAgentReturnFlowDao.java
@@ -0,0 +1,12 @@
+package cc.mrbird.febs.dapp.mapper;
+
+import cc.mrbird.febs.dapp.entity.DappAgentReturnFlowEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+
+public interface DappAgentReturnFlowDao extends BaseMapper<DappAgentReturnFlowEntity> {
+
+ BigDecimal selectTotalAmountByMemberId(@Param("memberId") Long memberId, @Param("isReturn") Integer isReturn);
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java
index 3959043..faa0af4 100644
--- a/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java
@@ -21,4 +21,6 @@
IPage<DappMemberEntity> selectInPage(@Param("record") DappMemberEntity member, Page<DappMemberEntity> page);
List<DappMemberEntity> selectAllMemberForInCome();
+
+ List<DappMemberEntity> selectAgentMemberList(@Param("list") List<String> inviteIds, @Param("size") Integer size);
}
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 82e096e..d9827fa 100644
--- a/src/main/java/cc/mrbird/febs/dapp/mapper/DappUserMemberRelateDao.java
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappUserMemberRelateDao.java
@@ -11,4 +11,6 @@
int deleteByUserIds(@Param("list") List<String> id);
DappUserMemberRelateEntity selectByUserId(@Param("userId") Long userId);
+
+ DappUserMemberRelateEntity selectByInviteId(@Param("inviteId") String inviteId);
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletMineDao.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletMineDao.java
index 6b7f09c..9f15730 100644
--- a/src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletMineDao.java
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletMineDao.java
@@ -6,9 +6,13 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
+import java.math.BigDecimal;
+
public interface DappWalletMineDao extends BaseMapper<DappWalletMineEntity> {
DappWalletMineEntity selectByMemberId(@Param("memberId") Long memberId);
IPage<DappWalletMineEntity> selectInPage(@Param("record") DappWalletMineEntity walletMine, Page<DappWalletMineEntity> page);
+
+ int updateBalance(@Param("totalAmount") BigDecimal totalAmount, @Param("availableAmount") BigDecimal availableAmount, @Param("memberId") Long memberId);
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappUserServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappUserServiceImpl.java
index 3e75e13..f4f40ac 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappUserServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappUserServiceImpl.java
@@ -48,9 +48,22 @@
@Override
@Transactional(rollbackFor = Exception.class)
public void add(User user) {
+ User currentUser = FebsUtil.getCurrentUser();
DappMemberEntity member = dappMemberDao.selectMemberInfoByInviteId(user.getInviteId());
if(member == null) {
throw new FebsException("邀请码错误");
+ }
+
+ if (currentUser.getDeptId() == null) {
+ DappUserMemberRelateEntity relate = dappUserMemberRelateDao.selectByUserId(currentUser.getUserId());
+ if (!relate.getInviteId().equals(member.getRefererId())) {
+ throw new FebsException("该用户不是直推");
+ }
+ }
+
+ DappUserMemberRelateEntity userMemberRelate = dappUserMemberRelateDao.selectByInviteId(user.getInviteId());
+ if (userMemberRelate != null) {
+ throw new FebsException("邀请码用户已存在");
}
user.setCreateTime(new Date());
@@ -66,7 +79,6 @@
userRole.setUserId(user.getUserId());
userRoleMapper.insert(userRole);
- User currentUser = FebsUtil.getCurrentUser();
DappUserMemberRelateEntity relate = new DappUserMemberRelateEntity();
relate.setMemberId(member.getId());
relate.setUserId(user.getUserId());
diff --git a/src/main/java/cc/mrbird/febs/job/MineProfitJob.java b/src/main/java/cc/mrbird/febs/job/MineProfitJob.java
index 34497f7..5ecd209 100644
--- a/src/main/java/cc/mrbird/febs/job/MineProfitJob.java
+++ b/src/main/java/cc/mrbird/febs/job/MineProfitJob.java
@@ -8,13 +8,13 @@
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
-import javax.annotation.PostConstruct;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
@@ -37,6 +37,8 @@
private DappAccountMoneyChangeDao dappAccountMoneyChangeDao;
@Autowired
private DappWalletMineDao dappWalletMineDao;
+ @Autowired
+ private DappAgentReturnFlowDao dappAgentReturnFlowDao;
@Autowired
private RedisUtils redisUtils;
@@ -87,9 +89,76 @@
walletMine.setAvailableAmount(walletMine.getAvailableAmount().add(ethIncome));
walletMine.setTotalAmount(walletMine.getTotalAmount().add(ethIncome));
dappWalletMineDao.updateById(walletMine);
+
+ // 计算代理返多少
+ calAgentMoney(member, ethIncome);
break;
}
}
}
+
+ returnMoney();
+ }
+
+ int[] ratios = {8, 4, 4, 2, 2};
+ BigDecimal returnRatio = new BigDecimal("20");
+
+ /**
+ * 代理返利
+ *
+ * @param member
+ * @param amount
+ */
+ private void calAgentMoney(DappMemberEntity member, BigDecimal amount) {
+ if (StrUtil.isBlank(member.getRefererIds())) {
+ return;
+ }
+
+ List<DappMemberEntity> agents = dappMemberDao.selectAgentMemberList(StrUtil.split(member.getRefererIds(), ','), 5);
+
+ for (int i = 0; i < agents.size(); i++) {
+ DappMemberEntity agent = agents.get(i);
+ BigDecimal balance = ChainService.INSTANCE.balanceOf(agent.getAddress());
+ if (balance.compareTo(BigDecimal.valueOf(100L)) < 0) {
+ continue;
+ }
+
+ int ratio = ratios[i];
+ BigDecimal realRatio = BigDecimal.valueOf(ratio).divide(returnRatio, 2, RoundingMode.HALF_DOWN);
+ BigDecimal returnMoney = amount.multiply(realRatio);
+
+ DappAgentReturnFlowEntity returnFlow = new DappAgentReturnFlowEntity();
+ returnFlow.setCreateTime(new Date());
+ returnFlow.setMemberId(member.getId());
+ returnFlow.setAgentMemberId(agent.getId());
+ returnFlow.setAmount(returnMoney);
+ returnFlow.setIsReturn(2);
+ dappAgentReturnFlowDao.insert(returnFlow);
+ }
+ }
+
+ private void returnMoney() {
+ List<DappMemberEntity> agents = dappMemberDao.selectAgentMemberList(null, null);
+ if (CollUtil.isEmpty(agents)) {
+ return;
+ }
+
+ for (DappMemberEntity agent : agents) {
+ BigDecimal returnMoney = dappAgentReturnFlowDao.selectTotalAmountByMemberId(agent.getId(), 2);
+ if (returnMoney.compareTo(BigDecimal.ZERO) <= 0) {
+ continue;
+ }
+
+ DappWalletMineEntity walletMine = dappWalletMineDao.selectByMemberId(agent.getId());
+ dappWalletMineDao.updateBalance(returnMoney, returnMoney, agent.getId());
+
+ // 流水
+ DappFundFlowEntity fundFlow = new DappFundFlowEntity(agent.getId(), returnMoney, 4, null, null);
+ dappFundFlowDao.insert(fundFlow);
+
+ String content = "代理返利:" + returnMoney.toPlainString();
+ DappAccountMoneyChangeEntity accountMoneyChange = new DappAccountMoneyChangeEntity(agent.getId(), walletMine.getAvailableAmount(), returnMoney, walletMine.getAvailableAmount().add(returnMoney), content, 4);
+ dappAccountMoneyChangeDao.insert(accountMoneyChange);
+ }
}
}
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
index 8ff710a..be7f21d 100644
--- a/src/main/resources/application-prod.yml
+++ b/src/main/resources/application-prod.yml
@@ -18,7 +18,7 @@
username: sys_dapp
password: sys_dapp!@#123
driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://127.0.0.1:3306/sys-dapp?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b9
+ url: jdbc:mysql://127.0.0.1:3306/sys_dapp?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b9
redis:
# Redis数据库索引(默认为 0)
diff --git a/src/main/resources/mapper/dapp/DappAgentReturnFlowDao.xml b/src/main/resources/mapper/dapp/DappAgentReturnFlowDao.xml
new file mode 100644
index 0000000..2c796bf
--- /dev/null
+++ b/src/main/resources/mapper/dapp/DappAgentReturnFlowDao.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!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.DappAgentReturnFlowDao">
+
+ <select id="selectTotalAmountByMemberId" resultType="java.math.BigDecimal">
+ select IFNULL(sum(amount),0)
+ from dapp_agent_return_flow
+ where agent_member_id=#{memberId}
+ <if test="isReturn!=null">
+ and is_return=#{isReturn}
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/dapp/DappMemberDao.xml b/src/main/resources/mapper/dapp/DappMemberDao.xml
index 7434256..8d3baac 100644
--- a/src/main/resources/mapper/dapp/DappMemberDao.xml
+++ b/src/main/resources/mapper/dapp/DappMemberDao.xml
@@ -36,4 +36,21 @@
select * from dapp_member
where account_status=1
</select>
+
+ <select id="selectAgentMemberList" resultType="cc.mrbird.febs.dapp.entity.DappMemberEntity">
+ select * from dapp_member a
+ inner join dapp_user_member_relate b on a.id=b.member_id
+ <where>
+ 1=1
+ <if test="list != null">
+ and a.invite_id in
+ <foreach collection="list" close=")" open="(" item="item" separator=",">
+ ${item}
+ </foreach>
+ </if>
+ </where>
+ <if test="size != null">
+ limit ${size}
+ </if>
+ </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 685387e..6c49d4d 100644
--- a/src/main/resources/mapper/dapp/DappUserMemberRelateDao.xml
+++ b/src/main/resources/mapper/dapp/DappUserMemberRelateDao.xml
@@ -16,4 +16,9 @@
select * from dapp_user_member_relate
where user_id=#{userId}
</select>
+
+ <select id="selectByInviteId" resultType="cc.mrbird.febs.dapp.entity.DappUserMemberRelateEntity">
+ select * from dapp_user_member_relate
+ where invite_id=#{inviteId}
+ </select>
</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/dapp/DappWalletMineDao.xml b/src/main/resources/mapper/dapp/DappWalletMineDao.xml
index 3e09ca2..6f103bb 100644
--- a/src/main/resources/mapper/dapp/DappWalletMineDao.xml
+++ b/src/main/resources/mapper/dapp/DappWalletMineDao.xml
@@ -18,4 +18,11 @@
</if>
</where>
</select>
+
+ <update id="updateBalance">
+ update dapp_wallet_mine
+ set total_amount = total_amount + #{totalAmount},
+ available_amount = available_amount + #{availableAmount}
+ where member_id=#{memberId}
+ </update>
</mapper>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/dapp/agent-return.html b/src/main/resources/templates/febs/views/dapp/agent-return.html
new file mode 100644
index 0000000..fdbea0e
--- /dev/null
+++ b/src/main/resources/templates/febs/views/dapp/agent-return.html
@@ -0,0 +1,103 @@
+<div class="layui-fluid layui-anim febs-anim" id="febs-agent-return" lay-title="代理返利">
+ <div class="layui-row febs-container">
+ <div class="layui-col-md12">
+ <div class="layui-card">
+ <div class="layui-card-body febs-table-full">
+ <form class="layui-form layui-table-form" lay-filter="withdraw-table-form">
+ <div class="layui-row">
+ <div class="layui-col-md10">
+ <div class="layui-form-item">
+ <div class="layui-inline">
+ <div class="layui-input-inline">
+ <input type="text" name="address" autocomplete="off" placeholder="输入地址或邀请码" class="layui-input">
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area">
+ <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="query">
+ <i class="layui-icon"></i>
+ </div>
+ <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset">
+ <i class="layui-icon"></i>
+ </div>
+ </div>
+ </div>
+ </form>
+ <table lay-filter="agentReturnTable" lay-data="{id: 'agentReturnTable'}"></table>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+<style>
+ .layui-table-cell {
+ height: auto !important;
+ }
+</style>
+<script data-th-inline="none" type="text/javascript">
+ layui.use(['dropdown', 'jquery', 'laydate', 'form', 'table', 'febs', 'treeSelect'], function () {
+ var $ = layui.jquery,
+ laydate = layui.laydate,
+ febs = layui.febs,
+ form = layui.form,
+ table = layui.table,
+ dropdown = layui.dropdown,
+ $view = $('#febs-agent-return'),
+ $query = $view.find('#query'),
+ $reset = $view.find('#reset'),
+ $searchForm = $view.find('form'),
+ sortObject = {field: 'createTime', type: null},
+ tableIns;
+
+ form.render();
+
+ initTable();
+
+ table.on('tool(agentReturnTable)', function (obj) {
+ var data = obj.data,
+ layEvent = obj.event;
+ });
+
+ table.on('sort(agentReturnTable)', function (obj) {
+ sortObject = obj;
+ tableIns.reload({
+ initSort: obj,
+ where: $.extend(getQueryParams(), {
+ field: obj.field,
+ order: obj.type
+ })
+ });
+ });
+
+ $query.on('click', function () {
+ var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type});
+ tableIns.reload({where: params, page: {curr: 1}});
+ });
+
+ $reset.on('click', function () {
+ $searchForm[0].reset();
+ tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject});
+ });
+
+ function initTable() {
+ tableIns = febs.table.init({
+ elem: $view.find('table'),
+ id: 'agentReturnTable',
+ url: ctx + 'flow/fundFlow?type=4',
+ cols: [[
+ {field: 'address', title: '地址', minWidth: 130},
+ {field: 'createTime', title: '创建时间', minWidth: 180},
+ {field: 'amount', title: '返利金额(ETH)', minWidth: 130}
+ ]]
+ });
+ }
+
+ function getQueryParams() {
+ return {
+ address: $searchForm.find('input[name="address"]').val().trim(),
+ invalidate_ie_cache: new Date()
+ };
+ }
+ })
+</script>
diff --git a/src/main/resources/templates/febs/views/dapp/money-change-flow.html b/src/main/resources/templates/febs/views/dapp/money-change-flow.html
index d5c9c36..de7ecbb 100644
--- a/src/main/resources/templates/febs/views/dapp/money-change-flow.html
+++ b/src/main/resources/templates/febs/views/dapp/money-change-flow.html
@@ -20,6 +20,7 @@
<option value="1">兑换</option>
<option value="2">提现</option>
<option value="3">采矿</option>
+ <option value="4">代理返利</option>
</select>
</div>
</div>
@@ -71,7 +72,8 @@
var type = {
1: {title: '兑换'},
2: {title: '提现'},
- 3: {title: '采矿'}
+ 3: {title: '采矿'},
+ 4: {title: '代理返利'}
}[d.type];
}}
<span>{{ type.title }}</span>
--
Gitblit v1.9.1