From 57c12d09f1478036f659a718c81a18f7875aeccb Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Fri, 26 May 2023 15:10:47 +0800
Subject: [PATCH] twoCoin项目修改
---
src/main/java/cc/mrbird/febs/dapp/dto/AKLineDto.java | 14
src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletCoinDao.java | 2
src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java | 1325 +++++++++++++++++++
src/main/java/cc/mrbird/febs/dapp/vo/MyInviteInfoVo.java | 26
src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java | 45
src/main/java/cc/mrbird/febs/dapp/mapper/DappFundFlowDao.java | 10
src/main/java/cc/mrbird/febs/dapp/mapper/DappUsdtPerkEntityMapper.java | 11
src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java | 204 ++
src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java | 2
src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java | 80 +
src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java | 144 ++
src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java | 18
src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java | 9
src/main/resources/mapper/dapp/DappMemberDao.xml | 57
src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java | 15
src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java | 61
src/main/java/cc/mrbird/febs/dapp/mapper/DappAKlineMapper.java | 29
src/test/java/cc/mrbird/febs/MemberTest.java | 57
src/main/java/cc/mrbird/febs/dapp/dto/WithdrawDto.java | 6
src/main/resources/application-dev.yml | 10
src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java | 40
src/main/java/cc/mrbird/febs/dapp/vo/TeamListVo.java | 13
src/main/java/cc/mrbird/febs/dapp/enumerate/MemberLevelEnum.java | 100 +
src/main/resources/mapper/dapp/DappFundFlowDao.xml | 18
src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java | 509 +++++++
src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletMineDao.java | 4
src/main/java/cc/mrbird/febs/job/BnbTransferJob.java | 161 ++
src/main/resources/application-test.yml | 25
src/main/resources/mapper/dapp/DappMemberNodeMapper.xml | 7
src/main/java/cc/mrbird/febs/dapp/dto/MineToCoinDto.java | 15
src/main/java/cc/mrbird/febs/dapp/dto/TransferAusdDto.java | 41
src/main/java/cc/mrbird/febs/dapp/enumerate/FundFlowEnum.java | 78 +
src/main/java/cc/mrbird/febs/dapp/vo/DappFundFlowVo.java | 22
src/main/resources/mapper/dapp/DappWalletCoinDao.xml | 6
src/main/java/cc/mrbird/febs/dapp/vo/AKLineLimitVo.java | 26
src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java | 12
src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java | 80 +
src/main/java/cc/mrbird/febs/FebsShiroApplication.java | 13
src/main/resources/mapper/dapp/DappChargeUsdtMapper.xml | 11
src/main/java/cc/mrbird/febs/dapp/entity/DappAKlineEntity.java | 30
src/main/java/cc/mrbird/febs/dapp/mapper/DappChargeUsdtMapper.java | 13
src/main/java/cc/mrbird/febs/dapp/entity/NodePerk.java | 54
src/main/resources/mapper/dapp/DappAKlineMapper.xml | 64
src/main/java/cc/mrbird/febs/dapp/entity/DappChargeUsdtEntity.java | 61
src/main/java/cc/mrbird/febs/dapp/vo/DappMemberInfoVo.java | 30
src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java | 1
src/main/java/cc/mrbird/febs/common/entity/BaseEntity.java | 2
src/main/resources/mapper/dapp/DappWalletMineDao.xml | 7
src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberNodeMapper.java | 2
src/main/java/cc/mrbird/febs/dapp/entity/DappMemberNodeEntity.java | 2
src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java | 54
src/main/resources/templates/febs/views/dapp/money-change-flow.html | 8
src/main/java/cc/mrbird/febs/dapp/enumerate/PoolEnum.java | 139 ++
src/main/java/cc/mrbird/febs/dapp/entity/DappUsdtPerkEntity.java | 34
src/main/resources/mapper/dapp/DappUsdtPerkEntityMapper.xml | 13
src/main/java/cc/mrbird/febs/dapp/entity/DataDictionaryCustom.java | 7
src/main/java/cc/mrbird/febs/dapp/vo/AKLineVo.java | 35
src/main/java/cc/mrbird/febs/common/contants/AppContants.java | 29
src/main/java/cc/mrbird/febs/dapp/vo/MyInviteChildInfoVo.java | 23
src/main/java/cc/mrbird/febs/dapp/dto/TransferADto.java | 45
60 files changed, 3,792 insertions(+), 167 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/FebsShiroApplication.java b/src/main/java/cc/mrbird/febs/FebsShiroApplication.java
index f331bd3..b8c2b0f 100644
--- a/src/main/java/cc/mrbird/febs/FebsShiroApplication.java
+++ b/src/main/java/cc/mrbird/febs/FebsShiroApplication.java
@@ -5,6 +5,7 @@
import cc.mrbird.febs.dapp.entity.DataDictionaryCustom;
import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum;
import cc.mrbird.febs.dapp.mapper.DataDictionaryCustomMapper;
+import cc.mrbird.febs.dapp.service.DappSystemService;
import cn.hutool.core.util.StrUtil;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
@@ -30,6 +31,8 @@
@Autowired
private DataDictionaryCustomMapper dataDictionaryCustomMapper;
+ @Autowired
+ private DappSystemService dappSystemService;
@Autowired
private SystemConstants systemConstants;
@@ -42,7 +45,9 @@
@PostConstruct
public void systemConstantsInit() {
- DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.FEE_ADDRESS_KEY.getType(), DataDictionaryEnum.FEE_ADDRESS_KEY.getCode());
+ DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ DataDictionaryEnum.FEE_ADDRESS_KEY.getType(),
+ DataDictionaryEnum.FEE_ADDRESS_KEY.getCode());
String key = dataDictionaryCustom.getCode();
key = StrUtil.toCamelCase(key);
String value = dataDictionaryCustom.getValue();
@@ -57,4 +62,10 @@
}
}
+
+// @PostConstruct
+// public void systemDicInit() {
+// dappSystemService.selectAndInsertDics();
+// }
+
}
diff --git a/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java b/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java
index 753ce4c..faba2e6 100644
--- a/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java
+++ b/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java
@@ -28,6 +28,7 @@
registration.excludePathPatterns("/dapi/common/**");
registration.excludePathPatterns("/dapi/member/runListInfo");
registration.excludePathPatterns("/dapi/member/nodeInfo");
+ registration.excludePathPatterns("/dapi/member/aKLine");
}
/**
diff --git a/src/main/java/cc/mrbird/febs/common/contants/AppContants.java b/src/main/java/cc/mrbird/febs/common/contants/AppContants.java
index 771a36d..e8f0b02 100644
--- a/src/main/java/cc/mrbird/febs/common/contants/AppContants.java
+++ b/src/main/java/cc/mrbird/febs/common/contants/AppContants.java
@@ -7,10 +7,11 @@
public class AppContants {
+ public static final String MAXACHIEVE = "MAXACHIEVE";
+ public static final String MINACHIEVE = "MINACHIEVE";
/**
* 系统用户
*/
- public static final String SYSTEM_USER = "system";
public static final String PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzIfAF0gZs9zn9ENRtz6ocHa8MGljmMmCsjLsRvTIAilBMypMJz/VNooAOhd8GTdsWm8FNGVhRauv7RfxorFJ4Um2UbweUQBIZP2pzZMnclHxhUmYZsn/6IaPzijiUNfEjygtE7ezvso/67ecZJwqfrtlbEjqUbRgo17Qj23suwQIDAQAB";
@@ -191,5 +192,31 @@
*/
public static final String ADDRESS_PEOJECT = "0xbE3ACc3ae4f12f9b4795E4ed62a082cbCe6250Da";
+ /**
+ * A入金,90%进入A底池--A底池钱包
+ */
+ public static final String ADDRESS_A_POOL_PEOJECT = "0xA60AaC0da34C76F3f60207ee09e9F75043319ab4";
+
+
+ /**
+ * A入金,10%进入B底池--B底池钱包
+ */
+ public static final String ADDRESS_B_POOL_PEOJECT = "0xA60AaC0da34C76F3f60207ee09e9F75043319ab4";
+
+ public static final BigDecimal NODE_PERK_PERCENT = new BigDecimal(0.2);
+
public static final Map FEE_ADDRESS_KEY = new HashMap<String,String>();
+
+ /**
+ * AK线返回的条数
+ */
+ public static final int K_LINE_LIMIT = 100;
+
+ /**
+ * AK线返回的条数
+ */
+ public static final String K_LINE_HOUR = "K_LINE_HOUR";
+ public static final String K_LINE_DAY = "K_LINE_DAY";
+ public static final String K_LINE_WEEK = "K_LINE_WEEK";
+ public static final String K_LINE_MONTH = "K_LINE_MONTH";
}
diff --git a/src/main/java/cc/mrbird/febs/common/entity/BaseEntity.java b/src/main/java/cc/mrbird/febs/common/entity/BaseEntity.java
index 695e0d2..db0a16e 100644
--- a/src/main/java/cc/mrbird/febs/common/entity/BaseEntity.java
+++ b/src/main/java/cc/mrbird/febs/common/entity/BaseEntity.java
@@ -28,7 +28,7 @@
private String updateBy = "system";
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
- private Date updateTime = new Date();;
+ private Date updateTime = new Date();
private Integer version = 1;
diff --git a/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java b/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java
index 24dcd01..586c8fa 100644
--- a/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java
+++ b/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java
@@ -10,6 +10,24 @@
public enum ChainEnum {
/**
+ * 提现USDT
+ */
+ BSC_USDT_W_POOL("BSC", "0x891884eed30219DE39CCAE8b796F5fAE231A2Ea0",
+ "446b506156020a5f1160903fd298ad4621dadcb357b31aa166ce420e4ec82f88",
+ "https://bsc-dataseed1.ninicoin.io",
+ "0x55d398326f99059fF775485246999027B3197955",
+ ""),
+
+ /**
+ * A币入金的后进入A池,进入B池
+ */
+ BSC_USDT_A_POOL("BSC", "0x891884eed30219DE39CCAE8b796F5fAE231A2Ea0",
+ "446b506156020a5f1160903fd298ad4621dadcb357b31aa166ce420e4ec82f88",
+ "https://bsc-dataseed1.ninicoin.io",
+ "0x55d398326f99059fF775485246999027B3197955",
+ ""),
+
+ /**
* 币安 usdt合约
* 0x55d398326f99059fF775485246999027B3197955
* 测试链 0x337610d27c682E347C9cD60BD4b3b107C9d34dDd
diff --git a/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java b/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java
index 6b52c48..471a375 100644
--- a/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java
+++ b/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java
@@ -13,6 +13,7 @@
import cc.mrbird.febs.dapp.service.DappSystemService;
import cc.mrbird.febs.dapp.service.DappWalletService;
import cc.mrbird.febs.dapp.vo.*;
+import cn.hutool.core.util.ObjectUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
@@ -22,6 +23,7 @@
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
+import java.util.HashMap;
/**
* @author
@@ -84,10 +86,42 @@
return new FebsResponse().success().data(dappWalletService.transfer(transferDto));
}
+ @ApiOperation(value = "买入A币", notes = "买入A币")
+ @PostMapping(value = "/transferA")
+ public FebsResponse transferA(@RequestBody TransferADto transferADto) {
+ return new FebsResponse().success().data(dappWalletService.transferA(transferADto));
+ }
+
+ @ApiOperation(value = "A币K线", notes = "A币K线")
+ @ApiResponses({
+ @ApiResponse(code = 200, message = "success", response = AKLineVo.class)
+ })
+ @PostMapping(value = "/aKLine")
+ public FebsResponse aKLine(@RequestBody AKLineDto aKLineDto) {
+ return new FebsResponse().success().data(dappMemberService.aKLine(aKLineDto));
+ }
+
+ @ApiOperation(value = "兑换AUSD", notes = "兑换AUSD")
+ @PostMapping(value = "/transferAusd")
+ public FebsResponse transferAusd(@RequestBody TransferAusdDto transferAusdDto) {
+ return new FebsResponse().success().data(dappWalletService.transferAusd(transferAusdDto));
+ }
+
+ @ApiOperation(value = "闪兑-资产钱包转帐到闪兑钱包3% 手续费(扣币)", notes = "资产钱包转帐到闪兑钱包3% 手续费(扣币)")
+ @PostMapping(value = "/mineToCoin")
+ public FebsResponse mineToCoin(@RequestBody MineToCoinDto mineToCoinDto) {
+ dappWalletService.mineToCoin(mineToCoinDto);
+ return new FebsResponse().success().data("success");
+ }
+
@ApiOperation(value = "记录列表", notes = "记录列表")
+ @ApiResponses({
+ @ApiResponse(code = 200, message = "success", response = DappFundFlowVo.class)
+ })
@PostMapping(value = "/recordInPage")
public FebsResponse recordInPage(@RequestBody RecordInPageDto recordInPageDto) {
- return new FebsResponse().success().data(dappWalletService.recordInPage(recordInPageDto));
+// return new FebsResponse().success().data(dappWalletService.recordInPage(recordInPageDto));
+ return new FebsResponse().success().data(dappWalletService.getRecordVoInPage(recordInPageDto));
}
@ApiOperation(value = "提现", notes = "提现")
@@ -106,6 +140,15 @@
return new FebsResponse().success().data(dappMemberService.findTeamList());
}
+ @ApiOperation(value = "我的推广码", notes = "我的推广码")
+ @ApiResponses({
+ @ApiResponse(code = 200, message = "success", response = MyInviteInfoVo.class)
+ })
+ @PostMapping(value = "/inviteInfo")
+ public FebsResponse inviteInfo() {
+ return new FebsResponse().success().data(dappMemberService.findInviteInfo());
+ }
+
@ApiOperation(value = "动能信息", notes = "动能信息")
@ApiResponses({
@ApiResponse(code = 200, message = "success", response = ApiRunListInfoVo.class)
diff --git a/src/main/java/cc/mrbird/febs/dapp/dto/AKLineDto.java b/src/main/java/cc/mrbird/febs/dapp/dto/AKLineDto.java
new file mode 100644
index 0000000..5564eca
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/dto/AKLineDto.java
@@ -0,0 +1,14 @@
+package cc.mrbird.febs.dapp.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AKLineDto", description = "入参")
+public class AKLineDto {
+
+ @ApiModelProperty(value = "类型 1:小时 2:日 3:周 4:月", example = "1")
+ private int type;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/dto/MineToCoinDto.java b/src/main/java/cc/mrbird/febs/dapp/dto/MineToCoinDto.java
new file mode 100644
index 0000000..f6fcc4e
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/dto/MineToCoinDto.java
@@ -0,0 +1,15 @@
+package cc.mrbird.febs.dapp.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel(value = "MineToCoinDto", description = "资产转到兑换钱包入参")
+public class MineToCoinDto {
+ @ApiModelProperty(value = "资产钱包提币数量", example = "1")
+ private BigDecimal aCoinCnt;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/dto/TransferADto.java b/src/main/java/cc/mrbird/febs/dapp/dto/TransferADto.java
new file mode 100644
index 0000000..3a46d92
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/dto/TransferADto.java
@@ -0,0 +1,45 @@
+package cc.mrbird.febs.dapp.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author wzy
+ * @date 2022-05-27
+ **/
+@Data
+@ApiModel(value = "TransferADto", description = "转账A接口参数类")
+public class TransferADto {
+// 第一次{金额 amount: val, 手续费fee: 0, txHash: '', 1-买入type: 1, 钱包buyType: 2}
+// 成功{type: 1, txHash: result.transactionHash, id: res.data, flag: 'success', buyType: 2}
+// 失败{type: 1, id: res.data, flag: 'fail', buyType: 2}
+ @ApiModelProperty(value = "1-买入A 2-卖出", example = "1")
+ private Integer type;
+
+ @ApiModelProperty(value = "交易hash", example = "123")
+ private String txHash;
+
+ @ApiModelProperty(value = "金额", example = "1")
+ private BigDecimal amount;
+
+ @ApiModelProperty(value = "手续费", example = "1")
+ private BigDecimal fee;
+
+ @ApiModelProperty(value = "价格", example = "1.0")
+ private BigDecimal price;
+
+ @ApiModelProperty(value = "id", example = "1")
+ private Long id;
+
+ @ApiModelProperty(value = "success/fail", example = "success")
+ private String flag;
+
+ @ApiModelProperty(value = "1-余额 2-钱包")
+ private Integer buyType;
+
+ @ApiModelProperty(hidden = true)
+ private Long memberId;
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/dto/TransferAusdDto.java b/src/main/java/cc/mrbird/febs/dapp/dto/TransferAusdDto.java
new file mode 100644
index 0000000..dd69372
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/dto/TransferAusdDto.java
@@ -0,0 +1,41 @@
+package cc.mrbird.febs.dapp.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel(value = "TransferAusdDto", description = "转账A接口参数类")
+public class TransferAusdDto {
+ // 第一次{金额 amount: val, 手续费fee: 0, txHash: '', 1-买入type: 1, 钱包buyType: 2}
+// 成功{type: 1, txHash: result.transactionHash, id: res.data, flag: 'success', buyType: 2}
+// 失败{type: 1, id: res.data, flag: 'fail', buyType: 2}
+ @ApiModelProperty(value = "1-买入A 2-卖出", example = "1")
+ private Integer type;
+
+ @ApiModelProperty(value = "交易hash", example = "123")
+ private String txHash;
+
+ @ApiModelProperty(value = "USDT金额", example = "1")
+ private BigDecimal amount;
+
+ @ApiModelProperty(value = "手续费", example = "1")
+ private BigDecimal fee;
+
+ @ApiModelProperty(value = "价格", example = "1.0")
+ private BigDecimal price;
+
+ @ApiModelProperty(value = "id", example = "1")
+ private Long id;
+
+ @ApiModelProperty(value = "success/fail", example = "success")
+ private String flag;
+
+ @ApiModelProperty(value = "1-余额 2-钱包")
+ private Integer buyType;
+
+ @ApiModelProperty(hidden = true)
+ private Long memberId;
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/dto/WithdrawDto.java b/src/main/java/cc/mrbird/febs/dapp/dto/WithdrawDto.java
index 1aeff6d..f4c1e3c 100644
--- a/src/main/java/cc/mrbird/febs/dapp/dto/WithdrawDto.java
+++ b/src/main/java/cc/mrbird/febs/dapp/dto/WithdrawDto.java
@@ -16,11 +16,7 @@
public class WithdrawDto {
@NotNull(message = "Param Error")
- @ApiModelProperty(value = "提现金额")
+ @ApiModelProperty(value = "提币数量")
private BigDecimal amount;
-
- @NotNull(message = "Param Error")
- @ApiModelProperty(value = "手续费")
- private BigDecimal fee;
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappAKlineEntity.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappAKlineEntity.java
new file mode 100644
index 0000000..b8a4bfd
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappAKlineEntity.java
@@ -0,0 +1,30 @@
+package cc.mrbird.febs.dapp.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ *
+ */
+@Data
+@TableName("dapp_a_kline")
+public class DappAKlineEntity extends BaseEntity {
+ /**
+ * 类型 1:小时 2:日 3:周 4:月
+ */
+ private Integer type;
+
+ private BigDecimal openPrice;
+
+ private BigDecimal closePrice;
+
+ private BigDecimal lowestPrice;
+
+ private BigDecimal highestPrice;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappChargeUsdtEntity.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappChargeUsdtEntity.java
new file mode 100644
index 0000000..85d941d
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappChargeUsdtEntity.java
@@ -0,0 +1,61 @@
+package cc.mrbird.febs.dapp.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 会员入金买A币
+ */
+@Data
+@TableName("dapp_charge_usdt")
+public class DappChargeUsdtEntity extends BaseEntity {
+ /**
+ *
+ */
+ private Long memberId;
+ /**
+ *会员地址
+ */
+ private String memberAddress;
+ /**
+ *会员入金的HASH
+ */
+ private String memberHash;
+ /**
+ *状态 1:进行中 2:成功
+ */
+ private Integer status;
+ /**
+ *usdt金额
+ */
+ private BigDecimal amount;
+ /**
+ *购买数量
+ */
+ private BigDecimal totalCnt;
+ /**
+ *实际产生数量
+ */
+ private BigDecimal realCnt;
+
+ public DappChargeUsdtEntity(){}
+
+ public DappChargeUsdtEntity(Long memberId,
+ String memberAddress,
+ String memberHash,
+ Integer status,
+ BigDecimal amount,
+ BigDecimal totalCnt,
+ BigDecimal realCnt){
+ this.memberId = memberId;
+ this.memberAddress = memberAddress;
+ this.memberHash = memberHash;
+ this.status = status;
+ this.amount = amount;
+ this.totalCnt = totalCnt;
+ this.realCnt = realCnt;
+ }
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java
index 63304b7..187b386 100644
--- a/src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java
@@ -78,7 +78,7 @@
/**
* 类型 1-买入 2-矩阵收益 3-直推收益 4-保险池 5-提现 6-手续费充值 7-手续费扣除 8-结算 9-冻结 10-冻结释放 11-产矿 12-手续费返利
* 类型 1-加入动能 2-技术方收益 3-直推收益 4-层级收益 5-剩余层级收益给系统 6-复投动能 7-动能收益 8-结算 9-冻结 10-冻结释放 11-产矿 12-手续费返利
- * 类型 1-认购节点 2-直推收益 3-技术方收款
+ * 类型 1-认购节点 2-直推收益 3-技术方收款 4-入金,买入A币 5-进入a底池
*/
private Integer type;
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappMemberNodeEntity.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappMemberNodeEntity.java
index e68f414..8d1b300 100644
--- a/src/main/java/cc/mrbird/febs/dapp/entity/DappMemberNodeEntity.java
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappMemberNodeEntity.java
@@ -28,7 +28,7 @@
* 节点价格
*/
private BigDecimal nodePrice;
-
+ public DappMemberNodeEntity(){}
public DappMemberNodeEntity(Long memberId, Long nodeId, String nodeCode, BigDecimal nodePrice) {
this.memberId = memberId;
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappUsdtPerkEntity.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappUsdtPerkEntity.java
new file mode 100644
index 0000000..71058ef
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappUsdtPerkEntity.java
@@ -0,0 +1,34 @@
+package cc.mrbird.febs.dapp.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * dapp_usdt_perk
+ */
+@Data
+@TableName("dapp_usdt_perk")
+public class DappUsdtPerkEntity extends BaseEntity {
+
+ private Long memberId;
+ /**
+ * 补贴额度
+ */
+ private BigDecimal amount;
+ /**
+ * AUSD数量
+ */
+ private BigDecimal ausdAmount;
+ /**
+ * 业绩
+ */
+ private BigDecimal achieveAmount;
+ /**
+ * NFT贡献值
+ */
+ private BigDecimal nftDevote;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DataDictionaryCustom.java b/src/main/java/cc/mrbird/febs/dapp/entity/DataDictionaryCustom.java
index 02d0074..595c8a4 100644
--- a/src/main/java/cc/mrbird/febs/dapp/entity/DataDictionaryCustom.java
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DataDictionaryCustom.java
@@ -18,4 +18,11 @@
private String value;
private String description;
+ public DataDictionaryCustom(){}
+ public DataDictionaryCustom(String type,String code,String value,String description){
+ this.type = type;
+ this.code = code;
+ this.value = value;
+ this.description = description;
+ }
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/NodePerk.java b/src/main/java/cc/mrbird/febs/dapp/entity/NodePerk.java
new file mode 100644
index 0000000..517f790
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/NodePerk.java
@@ -0,0 +1,54 @@
+package cc.mrbird.febs.dapp.entity;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * DAO1.考核小区业绩5000USDT 享受团队新增业绩2%
+ * DAO2.伞下不同部门产生2个DAO1.享受团队新增业绩3%
+ * DAO3.伞下不同部门2个DAO2.享受团队新增业绩4%,全网加权分红1%
+ * DAO4.两个不同部门DAO3.享受团队新增业绩5%,全网1%分红。
+ * DAO5.两个不同部门DAO4.享受团队新增业绩6%,全网1%加权分红
+ * 平级奖.DAO5平级享受全网1%加权分红.
+ *
+ * DAO5直推DAO5平级拿一代,视为平级奖,享受原有DAO5一个点,额外再加一个点分红。享受双份收益,合计2%加权分红
+ * {"teamIncome":"5000","directCnt":2,"teamIncomePerk":"0.2","averagePerk":"0"}
+ * {"teamIncome":"0","directCnt":2,"teamIncomePerk":"0.3","averagePerk":"0"}
+ * {"teamIncome":"0","directCnt":2,"teamIncomePerk":"0.4","averagePerk":"0.1"}
+ * {"teamIncome":"0","directCnt":2,"teamIncomePerk":"0.5","averagePerk":"0.1"}
+ * {"teamIncome":"0","directCnt":2,"teamIncomePerk":"0.6","averagePerk":"0.1"}
+ *
+ */
+@Data
+public class NodePerk {
+ /**
+ * 团队业绩
+ */
+ private BigDecimal teamIncome;
+
+ /**
+ * 直推个数
+ */
+ private Integer directCnt;
+
+ /**
+ * 新增业绩补贴
+ */
+ private BigDecimal teamIncomePerk;
+
+ /**
+ * 全网加权分红
+ */
+ private BigDecimal averagePerk;
+
+ public NodePerk(){
+ }
+
+ public NodePerk(BigDecimal teamIncome,Integer directCnt,BigDecimal teamIncomePerk,BigDecimal averagePerk){
+ this.teamIncome = teamIncome;
+ this.directCnt = directCnt;
+ this.teamIncomePerk = teamIncomePerk;
+ this.averagePerk = averagePerk;
+ }
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/enumerate/FundFlowEnum.java b/src/main/java/cc/mrbird/febs/dapp/enumerate/FundFlowEnum.java
new file mode 100644
index 0000000..6488d47
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/enumerate/FundFlowEnum.java
@@ -0,0 +1,78 @@
+package cc.mrbird.febs.dapp.enumerate;
+
+import lombok.Getter;
+
+/**
+ * 流水类型
+ * 类型 1-认购节点 2-直推收益 3-技术方收款 4-入金,买入A币 5-进入a底池...
+ */
+@Getter
+public enum FundFlowEnum {
+ //20%全网加权分红(按20%释放递减)-(全网收益)
+ POOL_MEMBER_A_CNT("POOL_MEMBER_A_CNT", 30),
+ //每小时燃烧-(AN DAO燃烧)
+ A_COIN_FIRE("A_COIN_FIRE", 29),
+ //入金,买入AUSD币-(买入AUSD)
+ BUY_AUSD_COIN("BUY_AUSD_COIN", 28),
+ //闪对钱包转USDT(USDT流水)-(闪兑USDT)
+ WALLET_COIN_TO_USDT_W("WALLET_COIN_TO_USDT_W", 27),
+ //闪对钱包转USDT-(AN DAO-USDT)
+ WALLET_COIN_TO_USDT("WALLET_COIN_TO_USDT", 25),
+ //资产钱包转账到闪对钱包-(闪兑AN DAO)
+ WALLET_MINE_TO_COIN_FEE("WALLET_MINE_TO_COIN_FEE", 24),
+ //资产钱包转账到闪对钱包-(资产AN DAO-闪兑AN DAO)
+ WALLET_MINE_TO_COIN("WALLET_MINE_TO_COIN", 23),
+ //节点的全网分红-(DAO 5平级收益)
+ DAO_5_NODE_EQUALS_PERK("DAO_5_NODE_EQUALS_PERK", 22),
+ //-(DAO 5节点收益奖)
+ DAO_5_NODE_PERK("DAO_5_NODE_PERK", 21),
+ //-(DAO 4节点收益)
+ DAO_4_NODE_PERK("DAO_4_NODE_PERK", 20),
+ //-(DAO 3节点收益)
+ DAO_3_NODE_PERK("DAO_3_NODE_PERK", 19),
+ //dao5的平级全网分红-(每日DAO 5平级收益总量)
+ DAO_5_CNT_EQUALS_MEMBER("DAO_5_CNT_EQUALS_MEMBER", 18),
+ //dao5的全网分红-(每日DAO 5的全网收益总量)
+ DAO_5_CNT_MEMBER("DAO_5_CNT_MEMBER", 17),
+ //dao4的全网分红-(每日DAO 4的全网收益总量)
+ DAO_4_CNT_MEMBER("DAO_4_CNT_MEMBER", 16),
+ //dao3的全网分红-(每日DAO 3的全网收益总量)
+ DAO_3_CNT_MEMBER("DAO_3_CNT_MEMBER", 15),
+ //10%级差奖给会员-(业绩奖)
+ LEVEL_A_PERCENT_CNT_MEMBER("LEVEL_A_PERCENT_CNT_MEMBER", 14),
+ //10%级差奖-(业绩奖收益总量)
+ LEVEL_A_PERCENT_CNT("LEVEL_A_PERCENT_CNT", 13),
+ //5%基金会-(基金会收益总量)
+ FOUNDATION_A_PERCENT("NODE_A_PERCENT_TO_MEMBER", 12),
+ //5%节点平分-(超级节点收益)
+ NODE_A_PERCENT_TO_MEMBER("NODE_A_PERCENT_TO_MEMBER", 11),
+ //5%节点-(超级节点收益总量)
+ NODE_A_PERCENT("NODE_A_PERCENT", 10),
+ //10%直推-(直推收益)
+ DIRECT_A_PERCENT("DIRECT_A_PERCENT", 9),
+ //20%全网加权分红(按20%释放递减)-(全网加权分红收益总量)
+ POOL_ALL_MEMBER_A_CNT("POOL_ALL_MEMBER_A_CNT", 8),
+ //50%客户秒到-(AN DAO)
+ MEMBER_GET_A_CNT("MEMBER_GET_A_CNT", 7),
+ //进入b底池-(USDT B池)
+ USDT_IN_B_POOL("USDT_IN_B_POOL", 6),
+ //进入a底池-(USDT A池)
+ USDT_IN_A_POOL("USDT_IN_A_POOL", 5),
+ //入金,买入A币-(买入AN DAO)
+ BUY_A_COIN("BUY_A_COIN", 4),
+ //技术方收款-(技术方收益)
+ PROJECT_PERK("PROJECT_PERK", 3),
+ //直推收益-(节点直推收益)
+ DIRECT_PERK("DIRECT_PERK", 2),
+ //认购节点-(买入节点)
+ BUY_NODE("BUY_NODE", 1);
+
+ private String type;
+
+ private int code;
+
+ FundFlowEnum(String type, int code) {
+ this.type = type;
+ this.code = code;
+ }
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/enumerate/MemberLevelEnum.java b/src/main/java/cc/mrbird/febs/dapp/enumerate/MemberLevelEnum.java
new file mode 100644
index 0000000..82e8c97
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/enumerate/MemberLevelEnum.java
@@ -0,0 +1,100 @@
+package cc.mrbird.febs.dapp.enumerate;
+
+import lombok.Getter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Getter
+public enum MemberLevelEnum {
+ /**
+ */
+ NODE_5("NODE_5",5,"NODE_5"),
+ NODE_4("NODE_4",4,"NODE_4"),
+ NODE_3("NODE_3",3,"NODE_3"),
+ NODE_2("NODE_2",2,"NODE_2"),
+ NODE_1("NODE_1",1,"NODE_1"),
+ MEMBER("MEMBER",0,"普通会员");
+
+
+ private String type;
+
+ private Integer code;
+ private String description;
+
+ MemberLevelEnum(String type, Integer code,String description) {
+ this.type = type;
+ this.code = code;
+ this.description = description;
+ }
+
+ public List<String> getLevelType(){
+ List<String> strs = new ArrayList<>();
+ for (MemberLevelEnum value : MemberLevelEnum.values()) {
+ strs.add(value.type);
+ }
+ return strs;
+ }
+
+ public String getLevelDescription(String Level){
+ String description = "粉丝";
+ for (MemberLevelEnum value : MemberLevelEnum.values()) {
+ if(value.type.equals(Level)){
+ description = value.description;
+ }
+ }
+ return description;
+ }
+
+ public int getLevelCode(String Level){
+ int codeOne = 0;
+ for (MemberLevelEnum value : MemberLevelEnum.values()) {
+ if(value.type.equals(Level)){
+ codeOne = value.code;
+ }
+ }
+ return codeOne;
+ }
+
+ public String getNextLevel(String Level){
+ String levelNext = Level;
+ int codeOne = 0;
+ for (MemberLevelEnum value : MemberLevelEnum.values()) {
+ if(value.type.equals(Level)){
+ codeOne = value.code;
+ break;
+ }
+ }
+ codeOne = codeOne + 1;
+ for (MemberLevelEnum value : MemberLevelEnum.values()) {
+ if(value.code == (codeOne)){
+ levelNext = value.type;
+ break;
+ }
+ }
+ return levelNext;
+ }
+
+ /**
+ * 比较两个级别的大小,levelOne大于levelTwo返回1,levelOne等于levelTwo返回2,否则返回0
+ */
+ public int compareLevel(String levelOne ,String levelTwo) {
+ int codeOne = 0;
+ int codeTwo = 0;
+ for (MemberLevelEnum value : MemberLevelEnum.values()) {
+ if(value.type.equals(levelOne)){
+ codeOne = value.code;
+ }
+ if(value.type.equals(levelTwo)){
+ codeTwo = value.code;
+ }
+ }
+ if(codeOne > codeTwo){
+ return 1;
+ }
+ if(codeOne == codeTwo){
+ return 2;
+ }
+ return 0;
+ }
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/enumerate/PoolEnum.java b/src/main/java/cc/mrbird/febs/dapp/enumerate/PoolEnum.java
new file mode 100644
index 0000000..1977a49
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/enumerate/PoolEnum.java
@@ -0,0 +1,139 @@
+package cc.mrbird.febs.dapp.enumerate;
+
+import lombok.Getter;
+
+/**
+ * 底池设置
+ */
+@Getter
+public enum PoolEnum {
+ /**
+ * AUSD价格
+ */
+ TRANSFER_A_AUSD_PRICE("WALLET_SET", "TRANSFER_A_AUSD_PRICE"),
+ /**
+ * 10%的AUSD比例
+ */
+ TRANSFER_A_AUSD_PERCENT("WALLET_SET", "TRANSFER_A_AUSD_PERCENT"),
+ /**
+ * 30%回流底池溢价
+ */
+ WALLET_COIN_OUT_PERCENT("WALLET_SET", "WALLET_COIN_OUT_PERCENT"),
+ /**
+ * 闪对钱包USDT提现1%手续费.(扣USDT)
+ */
+ WALLET_COIN_TO_USDT_PERCENT("WALLET_SET", "WALLET_COIN_TO_USDT_PERCENT"),
+ /**
+ * 资产转闪对钱包 3%扣币
+ */
+ WALLET_MINE_TO_COIN_PERCENT("WALLET_SET", "WALLET_MINE_TO_COIN_PERCENT"),
+ /**
+ * 节点5的平级奖励底池
+ */
+ NODE_5_EQUALS_POOL("NODE_5_EQUALS_POOL", "NODE_5_EQUALS_POOL_CNT"),
+ /**
+ * 节点5的平级奖励比例
+ */
+ NODE_5_EQUALS("NODE_5_EQUALS", "NODE_5_EQUALS_CNT"),
+ /**
+ * 节点5的奖励底池
+ */
+ NODE_5_POOL("NODE_5_POOL", "NODE_5_POOL_CNT"),
+ /**
+ * 节点5的奖励
+ */
+ NODE_5("NODE_PERK", "NODE_5"),
+ /**
+ * 节点4的奖励底池
+ */
+ NODE_4_POOL("NODE_4_POOL", "NODE_4_POOL_CNT"),
+ /**
+ * 节点4的奖励
+ */
+ NODE_4("NODE_PERK", "NODE_4"),
+ /**
+ * 节点3的奖励底池
+ */
+ NODE_3_POOL("NODE_3_POOL", "NODE_3_POOL_CNT"),
+ /**
+ * 节点3的奖励
+ */
+ NODE_3("NODE_PERK", "NODE_3"),
+ /**
+ * 节点2的奖励
+ */
+ NODE_2("NODE_PERK", "NODE_2"),
+ /**
+ * 节点1的奖励
+ */
+ NODE_1("NODE_PERK", "NODE_1"),
+ /**
+ * A币币本位底池 -A币的数量
+ */
+ COIN_A_CNT("POOL_SET", "COIN_A_CNT"),
+ /**
+ * A币金本位底池-usdt数量
+ */
+ COIN_A_USDT_PRICE("POOL_SET", "COIN_A_USDT_PRICE"),
+ /**
+ * A币的价格
+ */
+ COIN_A_PRICE("POOL_SET", "COIN_A_PRICE"),
+ /**
+ * 10%极差奖
+ */
+ LEVEL_A_PERCENT("POOL_SET", "LEVEL_A_PERCENT"),
+ /**
+ * 5%基金会
+ */
+ FOUNDATION_A_PERCENT("POOL_SET", "FOUNDATION_A_PERCENT"),
+ /**
+ * 5%节点资金池
+ */
+ NODE_A_PERCENT_POOL("POOL_SET", "NODE_A_PERCENT_POOL"),
+ /**
+ * 5%节点
+ */
+ NODE_A_PERCENT("POOL_SET", "NODE_A_PERCENT"),
+ /**
+ * 10%直推
+ */
+ DIRECT_A_PERCENT("POOL_SET", "DIRECT_A_PERCENT"),
+ /**
+ * 每日所有人平分的底池20%,即底池总数 * 比例
+ */
+ POOL_MEMBER_A_PERCENT("POOL_SET", "POOL_MEMBER_A_PERCENT"),
+ /**
+ * 所有人平分的底池
+ */
+ POOL_ALL_MEMBER_A_CNT("POOL_SET", "POOL_ALL_MEMBER_A_CNT"),
+ /**
+ * 全网加权分红20%,即所有人平分的底池
+ */
+ POOL_ALL_MEMBER_A_PERCENT("POOL_SET", "POOL_ALL_MEMBER_A_PERCENT"),
+ /**
+ * 客户秒到50%的A币比例
+ */
+ MEMBER_GET_A_PERCENT("POOL_SET", "MEMBER_GET_A_PERCENT"),
+ /**
+ * 实际产生A币的数量的比例
+ */
+ PRODUCE_A_PERCENT("POOL_SET", "PRODUCE_A_PERCENT"),
+ /**
+ * 10%进入B底池的比例
+ */
+ USDT_B_PERCENT("POOL_SET", "USDT_B_PERCENT"),
+ /**
+ * 90%进入A底池的比例
+ */
+ USDT_A_PERCENT("POOL_SET", "USDT_A_PERCENT");
+
+ private String type;
+
+ private String code;
+
+ PoolEnum(String type, String code) {
+ this.type = type;
+ this.code = code;
+ }
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappAKlineMapper.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappAKlineMapper.java
new file mode 100644
index 0000000..e685614
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappAKlineMapper.java
@@ -0,0 +1,29 @@
+package cc.mrbird.febs.dapp.mapper;
+
+import cc.mrbird.febs.dapp.dto.AKLineDto;
+import cc.mrbird.febs.dapp.entity.DappAKlineEntity;
+import cc.mrbird.febs.dapp.vo.AKLineLimitVo;
+import cc.mrbird.febs.dapp.vo.AKLineVo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface DappAKlineMapper extends BaseMapper<DappAKlineEntity> {
+
+ IPage<AKLineVo> selectListByType(IPage<AKLineVo> page, @Param("record")AKLineDto aKLineDto);
+
+ /**
+ * @param i
+ * @param format yyyy-MM-dd
+ * @return
+ */
+ List<DappAKlineEntity> selectListByTypeAndTime(@Param("type")int i, @Param("dateStr")List<String> format);
+
+ List<DappAKlineEntity> selectListByTypeAndHour(@Param("dateStr")List<String> format);
+
+ List<AKLineLimitVo> selectListByTypeAndLimit(@Param("type")int type, @Param("kLineLimit")int kLineLimit);
+
+ DappAKlineEntity selectOneByType();
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappChargeUsdtMapper.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappChargeUsdtMapper.java
new file mode 100644
index 0000000..4523baa
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappChargeUsdtMapper.java
@@ -0,0 +1,13 @@
+package cc.mrbird.febs.dapp.mapper;
+
+import cc.mrbird.febs.dapp.entity.DappChargeUsdtEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+
+public interface DappChargeUsdtMapper extends BaseMapper<DappChargeUsdtEntity> {
+
+ BigDecimal selectByMaxAmountMemberId(@Param("memberId")Long id);
+
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappFundFlowDao.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappFundFlowDao.java
index 550e42a..6f8e681 100644
--- a/src/main/java/cc/mrbird/febs/dapp/mapper/DappFundFlowDao.java
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappFundFlowDao.java
@@ -1,6 +1,7 @@
package cc.mrbird.febs.dapp.mapper;
import cc.mrbird.febs.dapp.entity.DappFundFlowEntity;
+import cc.mrbird.febs.dapp.vo.DappFundFlowVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -14,6 +15,8 @@
public interface DappFundFlowDao extends BaseMapper<DappFundFlowEntity> {
IPage<DappFundFlowEntity> selectInPage(Page<DappFundFlowEntity> page, @Param("record") DappFundFlowEntity dappFundFlowEntity);
+
+ IPage<DappFundFlowVo> selectVoInPage(Page<DappFundFlowVo> page, @Param("record") DappFundFlowEntity dappFundFlowEntity);
List<DappFundFlowEntity> selectListForMemberAndDay(@Param("memberId") Long memberId, @Param("type") int type);
@@ -35,6 +38,13 @@
DappFundFlowEntity selectByStateAndVersionAndFromHashLimitOne(@Param("status")int withdrawStatusAgree, @Param("version")int withdrawStatusAgree1);
+ /**
+ * 根据会员ID、类型、状态去查询资金流水记录
+ * @param id
+ * @param type
+ * @param status
+ * @return
+ */
DappFundFlowEntity selectBymemberIdAndType(@Param("memberId")Long id, @Param("type")int type, @Param("status")int status);
List<DappFundFlowEntity> selectListByState(@Param("status")int status);
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 7cacd99..23e80d7 100644
--- a/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java
@@ -56,4 +56,19 @@
IPage<AdminTeamInfoVo> findTeamInfoListInPage(Page<AdminTeamInfoVo> page, @Param("record")DappMemberEntity dappMemberEntity);
DappMemberInfoVo selectByMemberId(@Param("id")Long id);
+
+ List<DappMemberEntity> selectByInviteIds(@Param("list")List<String> referrerIdList);
+
+ /**
+ * 获取级别为Type,且直推中有type级别的用户信息
+ * @param type
+ * @return
+ */
+ List<DappMemberEntity> selectMemberByAccountTypeAnd(@Param("accountType")String type);
+
+ List<DappMemberEntity> selectChildAgentListByAccountType(@Param("inviteId") String inviteId, @Param("accountType")String accountType);
+
+ BigDecimal selectAllAchieveByInviteId(@Param("inviteId")String inviteId);
+
+ List<DappMemberEntity> selectMemberByNotAccountType(@Param("accountType")String type);
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberNodeMapper.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberNodeMapper.java
index 5ad7122..5f8cc21 100644
--- a/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberNodeMapper.java
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberNodeMapper.java
@@ -24,4 +24,6 @@
DappMemberNodeEntity selectNodeByMemberIdAndNodeCode(@Param("memberId")Long id, @Param("nodeCode")String code);
IPage<DappMemberNodeVo> findMemberNodeInPage(Page<DappMemberNodeVo> page, @Param("record")DappMemberEntity dappMemberEntity);
+
+ List<DappMemberNodeEntity> selectNodeByNodeCode(@Param("nodeCode")String code);
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappUsdtPerkEntityMapper.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappUsdtPerkEntityMapper.java
new file mode 100644
index 0000000..16defd6
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappUsdtPerkEntityMapper.java
@@ -0,0 +1,11 @@
+package cc.mrbird.febs.dapp.mapper;
+
+import cc.mrbird.febs.dapp.entity.DappUsdtPerkEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+public interface DappUsdtPerkEntityMapper extends BaseMapper<DappUsdtPerkEntity> {
+
+ DappUsdtPerkEntity selectByMemberId(@Param("memberId")Long memberId);
+
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletCoinDao.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletCoinDao.java
index 6ed07d4..66fe044 100644
--- a/src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletCoinDao.java
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletCoinDao.java
@@ -41,4 +41,6 @@
List<DappMemberEntity> selectTotalAmount();
void addTotalAndaddAvailableByMemberId(@Param("memberId")Long id, @Param("balance")BigDecimal multiply);
+
+ List<DappWalletCoinEntity> selectAmountThanZero();
}
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 4b4cf24..0ecd54e 100644
--- a/src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletMineDao.java
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletMineDao.java
@@ -1,5 +1,6 @@
package cc.mrbird.febs.dapp.mapper;
+import cc.mrbird.febs.dapp.entity.DappWalletCoinEntity;
import cc.mrbird.febs.dapp.entity.DappWalletMineEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -7,6 +8,7 @@
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
+import java.util.List;
public interface DappWalletMineDao extends BaseMapper<DappWalletMineEntity> {
@@ -17,4 +19,6 @@
int updateBalance(@Param("totalAmount") BigDecimal totalAmount, @Param("availableAmount") BigDecimal availableAmount, @Param("memberId") Long memberId);
int updateWithLock(@Param("record") DappWalletMineEntity dappWalletMineEntity);
+
+ List<DappWalletMineEntity> selectAmountThanZero();
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java b/src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java
index 7a2bbcc..5f5296d 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java
@@ -2,10 +2,7 @@
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.entity.QueryRequest;
-import cc.mrbird.febs.dapp.dto.ApproveDto;
-import cc.mrbird.febs.dapp.dto.ConnectDto;
-import cc.mrbird.febs.dapp.dto.PriceSettingDto;
-import cc.mrbird.febs.dapp.dto.TeamListDto;
+import cc.mrbird.febs.dapp.dto.*;
import cc.mrbird.febs.dapp.entity.DappMemberEntity;
import cc.mrbird.febs.dapp.entity.DappSystemProfit;
import cc.mrbird.febs.dapp.entity.DappTransferRecordEntity;
@@ -67,4 +64,8 @@
FebsResponse getMemberInfo();
IPage<DappMemberNodeVo> getMemberNodeInfo(DappMemberEntity dappMemberEntity, QueryRequest request);
+
+ String aKLine(AKLineDto aKLineDto);
+
+ MyInviteInfoVo findInviteInfo();
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java b/src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java
index f2d5816..b894401 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java
@@ -1,9 +1,11 @@
package cc.mrbird.febs.dapp.service;
import cc.mrbird.febs.dapp.dto.SystemDto;
+import cc.mrbird.febs.dapp.entity.DappMemberEntity;
import cc.mrbird.febs.dapp.entity.DappMineDataEntity;
import java.math.BigDecimal;
+import java.util.List;
import java.util.Map;
public interface DappSystemService {
@@ -34,4 +36,63 @@
void agentUp(Long id);
void bnbTransferTest(Long id);
+
+ void AntACoinInMsg(Long id);
+
+ void AntACoinAPollInMsg(Long id);
+
+ void AntACoinBPollInMsg(Long id);
+
+ void antACoinInNodeMsg(Long id);
+
+ void antACoinInLevelMsg(Long id);
+
+ /**
+ * 根据会员ID、预计补贴数量,获取实际可获得补贴的额度
+ * 预计补贴数量是币本位的需要换算成金本位的数据
+ * 并且更新用户的补贴额度数量
+ * @param memberId
+ * @param amount
+ * @return
+ */
+ BigDecimal getAndUpdateMemberPerk(Long memberId,BigDecimal amount);
+
+ /**
+ * 根据会员的节点类型会平分
+ * @param nodeThreePoolDicCnt
+ * @param type
+ */
+ BigDecimal nodePoolPerk(BigDecimal nodeThreePoolDicCnt, String type, int typeFlow);
+
+ BigDecimal nodePoolEqualsPerk(BigDecimal nodeFivePoolDicCnt, String type, int code);
+
+ BigDecimal superNodePoolPerk(BigDecimal nodeFivePoolDicCnt, String code, int code1);
+
+ void selectAndInsertDics();
+
+ /**
+ * 初始化参数
+ * @param type
+ * @param code
+ * @param value
+ * @param description
+ */
+ void selectAndInsertDic(String type, String code, String value, String description);
+
+ void antACoinOutMsg(Long id);
+ /**
+ * A币全网每小时自动燃烧0.1%,燃烧按递减燃烧,按个人每小时0.1%每小时递减。
+ *
+ * A币技术做到资产钱包燃烧,闪兑钱包也要燃烧0.1%每小时
+ */
+ void aCoinFire();
+
+ void antMemberLevelMsg(Long memberId);
+
+ void aKlineJobHour();
+
+ void aKlineJobDay();
+
+ void antKLineMsg(int type);
+
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java b/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java
index 25cd784..3dd1dee 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java
@@ -7,6 +7,7 @@
import cc.mrbird.febs.dapp.entity.DappWalletCoinEntity;
import cc.mrbird.febs.dapp.entity.DappWalletMineEntity;
import cc.mrbird.febs.dapp.vo.ActiveNftListVo;
+import cc.mrbird.febs.dapp.vo.DappFundFlowVo;
import cc.mrbird.febs.dapp.vo.WalletInfoVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.web.bind.annotation.RequestBody;
@@ -47,4 +48,15 @@
void transferAgain(TransferDto transferDto);
+ Long transferA(TransferADto transferADto);
+
+ /**
+ * 资产钱包转帐到闪兑钱包3% 手续费(扣币)
+ * @param mineToCoinDto
+ */
+ void mineToCoin(MineToCoinDto mineToCoinDto);
+
+ Long transferAusd(TransferAusdDto transferAusdDto);
+
+ List<DappFundFlowVo> getRecordVoInPage(RecordInPageDto recordInPageDto);
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
index 209b953..ce24af0 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
@@ -5,25 +5,21 @@
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.common.exception.FebsException;
-import cc.mrbird.febs.common.utils.FebsUtil;
-import cc.mrbird.febs.common.utils.LoginUserUtil;
-import cc.mrbird.febs.common.utils.RedisUtils;
-import cc.mrbird.febs.common.utils.ShareCodeUtil;
+import cc.mrbird.febs.common.utils.*;
import cc.mrbird.febs.dapp.chain.ChainEnum;
import cc.mrbird.febs.dapp.chain.ChainService;
import cc.mrbird.febs.dapp.chain.ContractChainService;
-import cc.mrbird.febs.dapp.dto.ApproveDto;
-import cc.mrbird.febs.dapp.dto.ConnectDto;
-import cc.mrbird.febs.dapp.dto.PriceSettingDto;
-import cc.mrbird.febs.dapp.dto.TeamListDto;
+import cc.mrbird.febs.dapp.dto.*;
import cc.mrbird.febs.dapp.entity.*;
import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum;
+import cc.mrbird.febs.dapp.enumerate.PoolEnum;
import cc.mrbird.febs.dapp.mapper.*;
import cc.mrbird.febs.dapp.service.DappMemberService;
import cc.mrbird.febs.dapp.vo.*;
import cc.mrbird.febs.rabbit.producer.ChainProducer;
import cc.mrbird.febs.system.entity.User;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -36,10 +32,8 @@
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
/**
* @author
@@ -63,6 +57,8 @@
private final DappNodeOrderMapper dappNodeOrderMapper;
private final DappMemberNodeMapper dappMemberNodeMapper;
+ private final DappAKlineMapper dappAKlineMapper;
+ private final DappUsdtPerkEntityMapper dappUsdtPerkEntityMapper;
@Override
@Transactional(rollbackFor = Exception.class)
@@ -374,15 +370,22 @@
@Override
public TeamListVo findTeamList() {
DappMemberEntity member = LoginUserUtil.getAppUser();
- //如果没有加入动能即返回null
- DappSystemProfit dappSystemProfit = dappSystemProfitDao.selectByMemberIdAndState(member.getId(), DappSystemProfit.STATE_IN);
- if(ObjectUtil.isEmpty(dappSystemProfit)){
- return null;
+ TeamListVo teamListVo = new TeamListVo();
+ List<DappMemberEntity> childs = dappMemberDao.selectMemberInfoByRefererId(member.getInviteId());
+ teamListVo.setDirectCnt(CollUtil.isEmpty(childs) ? 0 : childs.size());
+ //团队业绩
+ BigDecimal teamIncomeMax = BigDecimal.ZERO;
+ if(CollUtil.isNotEmpty(childs)){
+ // 直推用户
+ List<String> childsInviteIds = childs.stream().map(DappMemberEntity::getInviteId).collect(Collectors.toList());
+ for(String inviteId : childsInviteIds){
+ BigDecimal totalIncomeMember = dappMemberDao.selectAllAchieveByInviteId(inviteId);
+ teamIncomeMax = teamIncomeMax.add(totalIncomeMember);
+ }
+ teamIncomeMax = teamIncomeMax.setScale(4,BigDecimal.ROUND_DOWN);
}
- //升级用户的代理等级
- DappMemberEntity dappMemberEntity = dappMemberDao.selectMemberInfoByInviteId(member.getRefererId());
- chainProducer.sendAgentUpMsg(dappMemberEntity.getId());
- return buildTeamMatrix(member.getId());
+ teamListVo.setAchieve(teamIncomeMax);
+ return teamListVo;
}
@Override
@@ -507,6 +510,30 @@
public FebsResponse getMemberInfo() {
DappMemberEntity member = LoginUserUtil.getAppUser();
DappMemberInfoVo dappMemberInfoVo = dappMemberDao.selectByMemberId(member.getId());
+ //ausd价格
+ DataDictionaryCustom ausdPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.TRANSFER_A_AUSD_PRICE.getType(),
+ PoolEnum.TRANSFER_A_AUSD_PRICE.getCode()
+ );
+ dappMemberInfoVo.setAusdPrice(ObjectUtil.isEmpty(ausdPriceDic) ? new BigDecimal("1") : new BigDecimal(ausdPriceDic.getValue()).setScale(4,BigDecimal.ROUND_DOWN));
+ //资产到闪兑的手续费比例
+ DataDictionaryCustom mineToCoinFeeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.WALLET_MINE_TO_COIN_PERCENT.getType(),
+ PoolEnum.WALLET_MINE_TO_COIN_PERCENT.getCode()
+ );
+ dappMemberInfoVo.setMineToCoinFee(ObjectUtil.isEmpty(mineToCoinFeeDic) ? new BigDecimal("0.03") : new BigDecimal(mineToCoinFeeDic.getValue()));
+ //提现手续费比例
+ DataDictionaryCustom coinOutFeeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.WALLET_COIN_TO_USDT_PERCENT.getType(),
+ PoolEnum.WALLET_COIN_TO_USDT_PERCENT.getCode()
+ );
+ dappMemberInfoVo.setCoinOutFee(ObjectUtil.isEmpty(coinOutFeeDic) ? new BigDecimal("0.01") : new BigDecimal(coinOutFeeDic.getValue()));
+ //A币的价格
+ DataDictionaryCustom coinAPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.COIN_A_PRICE.getType(),
+ PoolEnum.COIN_A_PRICE.getCode()
+ );
+ dappMemberInfoVo.setCoinAPrice(ObjectUtil.isEmpty(coinAPriceDic) ? new BigDecimal("1") : new BigDecimal(coinAPriceDic.getValue()));
return new FebsResponse().success().data(dappMemberInfoVo);
}
@@ -516,24 +543,127 @@
return dappMemberNodeMapper.findMemberNodeInPage(page, dappMemberEntity);
}
- public TeamListVo buildTeamMatrix(Long memberId) {
- DappMemberEntity member = dappMemberDao.selectById(memberId);
- TeamListVo teamListVo = new TeamListVo();
- teamListVo.setAddress(member.getAddress());
- teamListVo.setAccountType(member.getAccountType());
- teamListVo.setActiveStatus(member.getActiveStatus());
- List<DappMemberEntity> dappMemberEntities = dappMemberDao.selectMemberInfoByRefererId(member.getInviteId());
- teamListVo.setDirectCnt(dappMemberEntities.size());
-
- if (CollUtil.isEmpty(dappMemberEntities)) {
- return teamListVo;
+ @Override
+ public String aKLine(AKLineDto aKLineDto) {
+ int type = aKLineDto.getType();
+ String redisKey = null;
+ if(1 == type){
+ redisKey = AppContants.K_LINE_HOUR;
+ }else if(2 == type){
+ redisKey = AppContants.K_LINE_DAY;
+ }else if(3 == type){
+ redisKey = AppContants.K_LINE_WEEK;
+ }else if(4 == type){
+ redisKey = AppContants.K_LINE_MONTH;
+ }else{
+ redisKey = AppContants.K_LINE_HOUR;
}
-
- List<TeamListVo> list = new ArrayList<>();
- for (DappMemberEntity childNode : dappMemberEntities) {
- list.add(buildTeamMatrix(childNode.getId()));
+ Object o = redisUtils.get(redisKey);
+ if(ObjectUtil.isNotEmpty(o)){
+ return redisUtils.get(redisKey).toString();
}
- teamListVo.setChildren(list);
- return teamListVo;
+ return null;
}
+
+ @Override
+ public MyInviteInfoVo findInviteInfo() {
+ MyInviteInfoVo myInviteInfoVo = new MyInviteInfoVo();
+
+ DappMemberEntity member = LoginUserUtil.getAppUser();
+ Long memberId = member.getId();
+ DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
+ myInviteInfoVo.setMemberAddress(dappMemberEntity.getAddress());
+ DappUsdtPerkEntity dappUsdtPerkEntity = dappUsdtPerkEntityMapper.selectByMemberId(memberId);
+ if(ObjectUtil.isEmpty(dappUsdtPerkEntity)){
+ dappUsdtPerkEntity = new DappUsdtPerkEntity();
+ dappUsdtPerkEntity.setMemberId(memberId);
+ dappUsdtPerkEntityMapper.insert(dappUsdtPerkEntity);
+ }
+ myInviteInfoVo.setMemberAchieve(dappUsdtPerkEntity.getAchieveAmount());
+ String refererId = dappMemberEntity.getRefererId();
+ DappMemberEntity parentMember = dappMemberDao.selectMemberInfoByInviteId(refererId);
+ myInviteInfoVo.setReferenceAddress(parentMember.getAddress());
+ HashMap<String, BigDecimal> maxMinAchieve = getMaxMinAchieve(memberId);
+ myInviteInfoVo.setMaxAchieve(maxMinAchieve.get(AppContants.MAXACHIEVE));
+ myInviteInfoVo.setMinAchieve(maxMinAchieve.get(AppContants.MINACHIEVE));
+
+ List<MyInviteChildInfoVo> myInviteChildInfoVos = new ArrayList<>();
+ List<DappMemberEntity> childs = dappMemberDao.selectMemberInfoByRefererId(member.getInviteId());
+ if(CollUtil.isNotEmpty(childs)){
+ for(DappMemberEntity child : childs){
+ MyInviteChildInfoVo myInviteChildInfoVo = new MyInviteChildInfoVo();
+ myInviteChildInfoVo.setAddress(child.getAddress());
+ myInviteChildInfoVo.setAccountType(child.getAccountType());
+ DappUsdtPerkEntity childUsdtPerkEntity = dappUsdtPerkEntityMapper.selectByMemberId(child.getId());
+ if(ObjectUtil.isEmpty(dappUsdtPerkEntity)){
+ dappUsdtPerkEntity = new DappUsdtPerkEntity();
+ dappUsdtPerkEntity.setMemberId(child.getId());
+ dappUsdtPerkEntityMapper.insert(dappUsdtPerkEntity);
+ }
+ myInviteChildInfoVo.setMemberAchieve(childUsdtPerkEntity.getAchieveAmount());
+ HashMap<String, BigDecimal> childMaxMinAchieve = getMaxMinAchieve(child.getId());
+ myInviteChildInfoVo.setMaxAchieve(childMaxMinAchieve.get(AppContants.MAXACHIEVE));
+ myInviteChildInfoVo.setMinAchieve(childMaxMinAchieve.get(AppContants.MINACHIEVE));
+ myInviteChildInfoVos.add(myInviteChildInfoVo);
+ }
+ }
+
+ myInviteInfoVo.setMyInviteChildInfoVos(myInviteChildInfoVos);
+ return myInviteInfoVo;
+ }
+
+ /**
+ * 获取用户的大小区业绩
+ * @param memberId
+ * @return
+ */
+ private HashMap<String,BigDecimal> getMaxMinAchieve(Long memberId) {
+ //业绩集合
+ List<BigDecimal> list = new ArrayList<>();
+ //总业绩
+ BigDecimal teamIncomeMax = BigDecimal.ZERO;
+ //所有直推团队,就是这个会员的所有区域的业绩。
+ DappMemberEntity member = dappMemberDao.selectById(memberId);
+ // 直推用户
+ List<DappMemberEntity> childs = dappMemberDao.selectMemberInfoByRefererId(member.getInviteId());
+ List<String> childsInviteIds = childs.stream().map(DappMemberEntity::getInviteId).collect(Collectors.toList());
+ for(String inviteId : childsInviteIds){
+ BigDecimal totalIncomeMember = dappMemberDao.selectAllAchieveByInviteId(inviteId);
+ teamIncomeMax = teamIncomeMax.add(totalIncomeMember);
+ list.add(totalIncomeMember);
+ }
+ HashMap<String, BigDecimal> objectObjectHashMap = new HashMap<>();
+ if(CollUtil.isNotEmpty(list)){
+ //最大区的业绩
+ BigDecimal maxAchieve = list.stream().max(BigDecimal::compareTo).get();
+ BigDecimal minAchieve = teamIncomeMax.subtract(maxAchieve);
+ objectObjectHashMap.put(AppContants.MAXACHIEVE,maxAchieve);
+ objectObjectHashMap.put(AppContants.MINACHIEVE,minAchieve);
+ }else{
+ objectObjectHashMap.put(AppContants.MAXACHIEVE,BigDecimal.ZERO);
+ objectObjectHashMap.put(AppContants.MINACHIEVE,BigDecimal.ZERO);
+ }
+ return objectObjectHashMap;
+ }
+// public TeamListVo buildTeamMatrix(Long memberId) {
+// DappMemberEntity member = dappMemberDao.selectById(memberId);
+// TeamListVo teamListVo = new TeamListVo();
+// teamListVo.setAddress(member.getAddress());
+// teamListVo.setAccountType(member.getAccountType());
+// List<DappMemberEntity> dappMemberEntities = dappMemberDao.selectMemberInfoByRefererId(member.getInviteId());
+// teamListVo.setDirectCnt(dappMemberEntities.size());
+// DappUsdtPerkEntity dappUsdtPerkEntity = dappUsdtPerkEntityMapper.selectByMemberId(memberId);
+// teamListVo.setAchieve(ObjectUtil.isEmpty(dappUsdtPerkEntity) ? BigDecimal.ZERO : dappUsdtPerkEntity.getAchieveAmount());
+//
+// if (CollUtil.isEmpty(dappMemberEntities)) {
+// return teamListVo;
+// }
+//
+// List<TeamListVo> list = new ArrayList<>();
+// for (DappMemberEntity childNode : dappMemberEntities) {
+// list.add(buildTeamMatrix(childNode.getId()));
+// }
+// teamListVo.setChildren(list);
+// return teamListVo;
+// }
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
index 5a310a3..1c38810 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
@@ -10,20 +10,24 @@
import cc.mrbird.febs.dapp.dto.SystemDto;
import cc.mrbird.febs.dapp.dto.TransferDto;
import cc.mrbird.febs.dapp.entity.*;
-import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum;
-import cc.mrbird.febs.dapp.enumerate.LevelProfitEnum;
+import cc.mrbird.febs.dapp.enumerate.*;
import cc.mrbird.febs.dapp.mapper.*;
import cc.mrbird.febs.dapp.service.DappSystemService;
import cc.mrbird.febs.dapp.service.DappWalletService;
+import cc.mrbird.febs.dapp.vo.AKLineLimitVo;
import cc.mrbird.febs.rabbit.producer.ChainProducer;
import cc.mrbird.febs.tree.MatrixTree;
import cc.mrbird.febs.tree.MemberNode;
import cc.mrbird.febs.tree.TreeConstants;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.date.Week;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -35,6 +39,7 @@
import java.math.BigInteger;
import java.math.RoundingMode;
import java.util.*;
+import java.util.stream.Collectors;
/**
* @author
@@ -59,6 +64,12 @@
private final ContractMain contractMain;
private final DappMemberNodeMapper dappMemberNodeMapper;
+ private final DappChargeUsdtMapper dappChargeUsdtMapper;
+ private final DappUsdtPerkEntityMapper dappUsdtPerkEntityMapper;
+ private final DappWalletCoinDao dappWalletCoinDao;
+ private final DappWalletMineDao dappWalletMineDao;
+ private final DappAKlineMapper dappAKlineMapper;
+
@Override
@@ -494,13 +505,6 @@
}
}
- public static void main(String[] args) {
- BigDecimal amount = new BigDecimal(150);
-// BigDecimal divide = amount.multiply(new BigDecimal(100)).multiply(new BigDecimal(0.9)).setScale(2,BigDecimal.ROUND_DOWN);
- BigDecimal divide = amount.multiply(new BigDecimal(100)).multiply(new BigDecimal(0.9)).setScale(2,BigDecimal.ROUND_DOWN);
- System.out.println(divide);
- }
-
@Override
public void agentUp(Long id) {
//根据邀请码获取用户信息
@@ -594,11 +598,1300 @@
}
}
-// public static void main(String[] args) {
-// String refererIds = "1,2,3,4,5," +
-// "6,7,8,9,10," +
-// "11,12,13,14,15";
-// List<String> refererIdList = StrUtil.split(refererIds, ',');
-// System.out.println(refererIdList);
-// }
+ @Override
+ public void AntACoinInMsg(Long id) {
+ /**
+ * 获取对应的流水记录
+ */
+ DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectInfoById(id);
+ if(ObjectUtil.isEmpty(dappFundFlowEntity)){
+ return;
+ }
+ Long memberId = dappFundFlowEntity.getMemberId();
+ DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
+ if(ObjectUtil.isEmpty(dappMemberEntity)){
+ return;
+ }
+ /**
+ * 会员充值金额
+ */
+ BigDecimal amount = dappFundFlowEntity.getAmount();
+ /**
+ * A币的当前价格
+ */
+ DataDictionaryCustom coinAPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.COIN_A_PRICE.getType(),
+ PoolEnum.COIN_A_PRICE.getCode()
+ );
+ BigDecimal coinAPrice = new BigDecimal(StrUtil.isEmpty(coinAPriceDic.getValue()) ? "0" : coinAPriceDic.getValue()).setScale(8,BigDecimal.ROUND_DOWN);
+ /**
+ * 会员充值USDT买入A币记录的ID
+ */
+ Long chergeRecordId = dappFundFlowEntity.getSystemProfitId();
+ DappChargeUsdtEntity dappChargeUsdtEntity = dappChargeUsdtMapper.selectById(chergeRecordId);
+ if(2 != dappChargeUsdtEntity.getStatus()){
+ return;
+ }
+ if(StrUtil.isEmpty(dappChargeUsdtEntity.getMemberHash())){
+ return;
+ }
+ /**
+ * 金本位的三倍额度,增加业绩,增加对应的NFT的值
+ */
+ DappUsdtPerkEntity dappUsdtPerkEntity = dappUsdtPerkEntityMapper.selectByMemberId(memberId);
+ if(ObjectUtil.isEmpty(dappUsdtPerkEntity)){
+ dappUsdtPerkEntity = new DappUsdtPerkEntity();
+ dappUsdtPerkEntity.setAmount(amount.multiply(new BigDecimal(3)));
+ dappUsdtPerkEntity.setNftDevote(amount);
+ dappUsdtPerkEntity.setMemberId(memberId);
+ dappUsdtPerkEntityMapper.insert(dappUsdtPerkEntity);
+ }
+ //金本位的三倍额度
+ BigDecimal amountPerk = dappUsdtPerkEntity.getAmount();
+ amountPerk = amountPerk.add(amount.multiply(new BigDecimal(3)));
+ dappUsdtPerkEntity.setAmount(amountPerk);
+ //增加业绩
+ BigDecimal achieveAmount = dappUsdtPerkEntity.getAchieveAmount();
+ achieveAmount = achieveAmount.add(amount);
+ dappUsdtPerkEntity.setAchieveAmount(achieveAmount);
+ //增加对应的NFT的值
+ BigDecimal nftDevote = dappUsdtPerkEntity.getNftDevote();
+ nftDevote = nftDevote.add(amount);
+ dappUsdtPerkEntity.setNftDevote(nftDevote);
+ dappUsdtPerkEntityMapper.updateById(dappUsdtPerkEntity);
+ /**
+ * 90%进入A币底池 10%进入B币LP薄饼底池
+ */
+ DataDictionaryCustom usdtAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.USDT_A_PERCENT.getType(),
+ PoolEnum.USDT_A_PERCENT.getCode()
+ );
+ BigDecimal usdtAPercent = new BigDecimal(StrUtil.isEmpty(usdtAPercentDic.getValue()) ? "0.9" : usdtAPercentDic.getValue());
+ BigDecimal usdtAAmount = amount.multiply(usdtAPercent).setScale(4, BigDecimal.ROUND_DOWN);
+
+ //生成一条进行中的90%进入A币底池的资金流水记录
+ DappFundFlowEntity fundFlowToA = new DappFundFlowEntity(
+ 1L,
+ usdtAAmount,
+ FundFlowEnum.USDT_IN_A_POOL.getCode(),
+ 1,
+ BigDecimal.ZERO,
+ null,
+ chergeRecordId);
+ dappFundFlowDao.insert(fundFlowToA);
+ //90%进入A币底池
+ chainProducer.sendAntACoinInAPoolMsg(fundFlowToA.getId());
+
+ DataDictionaryCustom usdtBPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.USDT_B_PERCENT.getType(),
+ PoolEnum.USDT_B_PERCENT.getCode()
+ );
+ BigDecimal usdtBPercent = new BigDecimal(StrUtil.isEmpty(usdtBPercentDic.getValue()) ? "0.1" : usdtBPercentDic.getValue());
+ BigDecimal usdtBAmount = amount.multiply(usdtBPercent).setScale(4, BigDecimal.ROUND_DOWN);
+ //生成一条进行中的10%进入B币底池的资金流水记录
+ DappFundFlowEntity fundFlowToB = new DappFundFlowEntity(
+ 1L,
+ usdtBAmount,
+ FundFlowEnum.USDT_IN_B_POOL.getCode(),
+ 1,
+ BigDecimal.ZERO,
+ null,
+ chergeRecordId);
+ dappFundFlowDao.insert(fundFlowToB);
+ //10%进入B币LP薄饼底池
+ chainProducer.sendAntACoinInBPoolMsg(fundFlowToB.getId());
+ /**
+ * 1.90%底池的USDT做成100%溢价,铸造出70%金本位价值的A币。
+ */
+ DataDictionaryCustom produceAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.PRODUCE_A_PERCENT.getType(),
+ PoolEnum.PRODUCE_A_PERCENT.getCode()
+ );
+ BigDecimal produceAPercent = new BigDecimal(StrUtil.isEmpty(produceAPercentDic.getValue()) ? "0.7" : produceAPercentDic.getValue());
+ //购买数量
+ BigDecimal totalCnt = amount.divide(coinAPrice, 4, BigDecimal.ROUND_DOWN);
+ /**
+ * 铸造出70%金本位价值的A币。实际产生数量
+ */
+ BigDecimal realCnt = totalCnt.multiply(produceAPercent).setScale(4, BigDecimal.ROUND_DOWN);
+ dappChargeUsdtEntity.setTotalCnt(totalCnt);
+ dappChargeUsdtEntity.setRealCnt(realCnt);
+ dappChargeUsdtMapper.updateById(dappChargeUsdtEntity);
+ /**
+ * 重新计算A币的价格
+ */
+ DataDictionaryCustom coinACntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.COIN_A_CNT.getType(),
+ PoolEnum.COIN_A_CNT.getCode()
+ );
+ //A币币本位底池-A币的数量
+ BigDecimal coinACntDicCnt = new BigDecimal(coinACntDic.getValue());
+ coinACntDicCnt = coinACntDicCnt.add(realCnt);
+ coinACntDic.setValue(coinACntDicCnt.toString());
+ dataDictionaryCustomMapper.updateById(coinACntDic);
+
+ DataDictionaryCustom coinAUsdtPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.COIN_A_USDT_PRICE.getType(),
+ PoolEnum.COIN_A_USDT_PRICE.getCode()
+ );
+ //A币金本位底池-usdt数量
+ BigDecimal coinAUsdtPriceDicCnt = new BigDecimal(coinAUsdtPriceDic.getValue());
+ coinAUsdtPriceDicCnt = coinAUsdtPriceDicCnt.add(amount);
+ coinAUsdtPriceDic.setValue(coinAUsdtPriceDicCnt.toString());
+ dataDictionaryCustomMapper.updateById(coinAUsdtPriceDic);
+
+ BigDecimal divide = coinAUsdtPriceDicCnt.divide(coinACntDicCnt, 8, BigDecimal.ROUND_DOWN);
+ coinAPriceDic.setValue(divide.toString());
+ dataDictionaryCustomMapper.updateById(coinAPriceDic);
+
+ chainProducer.sendAntKLineMsg(0);
+ /**
+ * A币的分配 walletMine
+ * 【70%换算100%分配】
+ * 50%客户秒到
+ * 20%全网加权分红(按20%释放递减)
+ * 10%直推
+ * 5%节点
+ * 5%基金会
+ * 10%级差奖
+ */
+ /**
+ * 50%客户秒到
+ */
+ DataDictionaryCustom memberGetAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.MEMBER_GET_A_PERCENT.getType(),
+ PoolEnum.MEMBER_GET_A_PERCENT.getCode()
+ );
+ BigDecimal memberGetAPercent = new BigDecimal(StrUtil.isEmpty(memberGetAPercentDic.getValue()) ? "0.5" : memberGetAPercentDic.getValue());
+ BigDecimal memberGetACnt = realCnt.multiply(memberGetAPercent).setScale(4, BigDecimal.ROUND_DOWN);
+
+ BigDecimal fundFlowToMemberFlag = this.getAndUpdateMemberPerk(dappFundFlowEntity.getMemberId(), memberGetACnt);
+ if(fundFlowToMemberFlag.compareTo(BigDecimal.ZERO) > 0){
+ //生成一条50%客户秒到的资金流水记录
+ DappFundFlowEntity fundFlowToMember = new DappFundFlowEntity(
+ dappFundFlowEntity.getMemberId(),
+ fundFlowToMemberFlag,
+ FundFlowEnum.MEMBER_GET_A_CNT.getCode(),
+ 2,
+ BigDecimal.ZERO,
+ null,
+ chergeRecordId);
+ dappFundFlowDao.insert(fundFlowToMember);
+ //用户的A币账户增加memberGetACnt数量
+ dappWalletService.updateWalletMineWithLock(fundFlowToMemberFlag,dappFundFlowEntity.getMemberId(),1);
+ }
+ /**
+ * 20%全网加权分红(按20%释放递减)进入加权分红底池
+ */
+ DataDictionaryCustom poolAllMemberAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.POOL_ALL_MEMBER_A_PERCENT.getType(),
+ PoolEnum.POOL_ALL_MEMBER_A_PERCENT.getCode()
+ );
+ BigDecimal poolAllMemberAPercent = new BigDecimal(StrUtil.isEmpty(poolAllMemberAPercentDic.getValue()) ? "0.2" : poolAllMemberAPercentDic.getValue());
+ BigDecimal poolAllMemberAPercentCnt = realCnt.multiply(poolAllMemberAPercent).setScale(4, BigDecimal.ROUND_DOWN);
+
+ DataDictionaryCustom poolAllMemberACntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.POOL_ALL_MEMBER_A_CNT.getType(),
+ PoolEnum.POOL_ALL_MEMBER_A_CNT.getCode()
+ );
+ BigDecimal poolAllMemberACnt = new BigDecimal(StrUtil.isEmpty(poolAllMemberACntDic.getValue()) ? "0" : poolAllMemberACntDic.getValue());
+ poolAllMemberACnt = poolAllMemberACnt.add(poolAllMemberAPercentCnt);
+ poolAllMemberACntDic.setValue(poolAllMemberACnt.toString());
+ dataDictionaryCustomMapper.updateById(poolAllMemberACntDic);
+ //生成一条20%全网加权分红(按20%释放递减)进入加权分红底池的资金流水记录
+ DappFundFlowEntity poolAllMemberAFundFlow = new DappFundFlowEntity(
+ 1L,
+ poolAllMemberAPercentCnt,
+ FundFlowEnum.POOL_ALL_MEMBER_A_CNT.getCode(),
+ 2,
+ BigDecimal.ZERO,
+ null,
+ chergeRecordId);
+ dappFundFlowDao.insert(poolAllMemberAFundFlow);
+
+ nodePoolPerk(poolAllMemberAPercentCnt, MemberLevelEnum.MEMBER.getType(), FundFlowEnum.POOL_MEMBER_A_CNT.getCode());
+ /**
+ * 10%直推
+ */
+ DataDictionaryCustom directAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.DIRECT_A_PERCENT.getType(),
+ PoolEnum.DIRECT_A_PERCENT.getCode()
+ );
+ BigDecimal directAPercent = new BigDecimal(StrUtil.isEmpty(directAPercentDic.getValue()) ? "0.1" : directAPercentDic.getValue());
+ BigDecimal directAPercentCnt = realCnt.multiply(directAPercent).setScale(4, BigDecimal.ROUND_DOWN);
+
+ String refererId = dappMemberEntity.getRefererId();
+ DappMemberEntity directMemberEntity = dappMemberDao.selectMemberInfoByInviteId(refererId);
+ if(ObjectUtil.isNotEmpty(directMemberEntity)){
+ /**
+ *推荐用户入单可享有贡献值.例.推荐100获得100贡献值
+ */
+ DappUsdtPerkEntity directDappUsdtPerkEntity = dappUsdtPerkEntityMapper.selectByMemberId(directMemberEntity.getId());
+ if(ObjectUtil.isEmpty(directDappUsdtPerkEntity)){
+ directDappUsdtPerkEntity = new DappUsdtPerkEntity();
+ directDappUsdtPerkEntity.setNftDevote(amount);
+ directDappUsdtPerkEntity.setMemberId(directMemberEntity.getId());
+ dappUsdtPerkEntityMapper.insert(directDappUsdtPerkEntity);
+ }
+
+ BigDecimal directNftDevote = directDappUsdtPerkEntity.getNftDevote();
+ directNftDevote = directNftDevote.add(amount);
+ directDappUsdtPerkEntity.setNftDevote(directNftDevote);
+ dappUsdtPerkEntityMapper.updateById(directDappUsdtPerkEntity);
+
+ BigDecimal directAPercentFundFlowToMemberFlag = this.getAndUpdateMemberPerk(directMemberEntity.getId(), directAPercentCnt);
+ if(directAPercentFundFlowToMemberFlag.compareTo(BigDecimal.ZERO) > 0){
+ //生成一条10%直推的资金流水记录
+ DappFundFlowEntity directAPercentFundFlowToMember = new DappFundFlowEntity(
+ directMemberEntity.getId(),
+ directAPercentFundFlowToMemberFlag,
+ FundFlowEnum.DIRECT_A_PERCENT.getCode(),
+ 2,
+ BigDecimal.ZERO,
+ null,
+ chergeRecordId);
+ dappFundFlowDao.insert(directAPercentFundFlowToMember);
+ //用户的A币账户增加directAPercentCnt数量
+ dappWalletService.updateWalletMineWithLock(directAPercentFundFlowToMemberFlag,directMemberEntity.getId(),1);
+ }
+ }
+ /**
+ * 5%节点
+ */
+ DataDictionaryCustom nodeAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.NODE_A_PERCENT.getType(),
+ PoolEnum.NODE_A_PERCENT.getCode()
+ );
+ BigDecimal nodeAPercent = new BigDecimal(StrUtil.isEmpty(nodeAPercentDic.getValue()) ? "0.05" : nodeAPercentDic.getValue());
+ BigDecimal nodeAPercentCnt = realCnt.multiply(nodeAPercent).setScale(4, BigDecimal.ROUND_DOWN);
+ //生成一条5%节点的资金流水记录
+ DappFundFlowEntity nodeAPercentFundFlow = new DappFundFlowEntity(
+ 1L,
+ nodeAPercentCnt,
+ FundFlowEnum.NODE_A_PERCENT.getCode(),
+ 2,
+ BigDecimal.ZERO,
+ null,
+ chergeRecordId);
+ dappFundFlowDao.insert(nodeAPercentFundFlow);
+// chainProducer.sendAntACoinInNodeMsg(nodeAPercentFundFlow.getId());
+ DataDictionaryCustom nodeAPercentPoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.NODE_A_PERCENT_POOL.getType(),
+ PoolEnum.NODE_A_PERCENT_POOL.getCode()
+ );
+ BigDecimal nodeAPercentPoolDicCnt = new BigDecimal(StrUtil.isEmpty(nodeAPercentPoolDic.getValue()) ? "0" : nodeAPercentPoolDic.getValue());
+ nodeAPercentPoolDicCnt = nodeAPercentPoolDicCnt.add(nodeAPercentCnt);
+ nodeAPercentPoolDic.setValue(nodeAPercentPoolDicCnt.toString());
+ dataDictionaryCustomMapper.updateById(nodeAPercentPoolDic);
+
+ superNodePoolPerk(nodeAPercentCnt, NodeCodeEnum.SUPER_NODE.getCode(), FundFlowEnum.NODE_A_PERCENT_TO_MEMBER.getCode());
+ /**
+ * 5%基金会
+ */
+ DataDictionaryCustom foundationAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.FOUNDATION_A_PERCENT.getType(),
+ PoolEnum.FOUNDATION_A_PERCENT.getCode()
+ );
+ BigDecimal foundationAPercent = new BigDecimal(StrUtil.isEmpty(foundationAPercentDic.getValue()) ? "0.05" : foundationAPercentDic.getValue());
+ BigDecimal foundationAPercentCnt = realCnt.multiply(foundationAPercent).setScale(4, BigDecimal.ROUND_DOWN);
+
+ //生成一条5%基金会的资金流水记录
+ DappFundFlowEntity foundationAPercentFundFlow = new DappFundFlowEntity(
+ 1L,
+ foundationAPercentCnt,
+ FundFlowEnum.FOUNDATION_A_PERCENT.getCode(),
+ 2,
+ BigDecimal.ZERO,
+ null,
+ chergeRecordId);
+ dappFundFlowDao.insert(foundationAPercentFundFlow);
+ //用户的A币账户增加memberGetACnt数量
+ dappWalletService.updateWalletMineWithLock(foundationAPercentCnt,1L,1);
+ /**
+ * 10%级差奖
+ */
+ DataDictionaryCustom levelAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.LEVEL_A_PERCENT.getType(),
+ PoolEnum.LEVEL_A_PERCENT.getCode()
+ );
+ BigDecimal levelAPercent = new BigDecimal(StrUtil.isEmpty(levelAPercentDic.getValue()) ? "0.1" : levelAPercentDic.getValue());
+ BigDecimal levelAPercentCnt = realCnt.multiply(levelAPercent).setScale(4, BigDecimal.ROUND_DOWN);
+
+ //生成一条10%级差奖进入10%级差奖底池的资金流水记录
+ DappFundFlowEntity levelAPercentCntFundFlow = new DappFundFlowEntity(
+ 1L,
+ levelAPercentCnt,
+ FundFlowEnum.LEVEL_A_PERCENT_CNT.getCode(),
+ 2,
+ BigDecimal.ZERO,
+ null,
+ chergeRecordId);
+ dappFundFlowDao.insert(levelAPercentCntFundFlow);
+ chainProducer.sendAntACoinInLevelMsg(levelAPercentCntFundFlow.getId());
+
+ }
+
+ @Override
+ public void AntACoinAPollInMsg(Long id) {
+ log.info("{}",id);
+ //获取对应的流水记录
+ DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectInfoById(id);
+ if(ObjectUtil.isEmpty(dappFundFlowEntity)){
+ return;
+ }
+ //金额
+ BigDecimal amount = dappFundFlowEntity.getAmount();
+ //目标地址
+ String address = AppContants.ADDRESS_A_POOL_PEOJECT;
+ /**
+ * 发起USDT转账
+ */
+ String hash = ChainService.getInstance(ChainEnum.BSC_USDT_A_POOL.name()).transfer(address, amount);
+ if(StrUtil.isEmpty(hash)){
+ return;
+ }
+ log.info("{},{}",id,hash);
+ dappFundFlowEntity.setFromHash(hash);
+ dappFundFlowEntity.setStatus(2);
+ dappFundFlowDao.updateById(dappFundFlowEntity);
+ }
+
+ @Override
+ public void AntACoinBPollInMsg(Long id) {
+ log.info("{}",id);
+ //获取对应的流水记录
+ DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectInfoById(id);
+ if(ObjectUtil.isEmpty(dappFundFlowEntity)){
+ return;
+ }
+ //金额
+ BigDecimal amount = dappFundFlowEntity.getAmount();
+ //目标地址
+ String address = AppContants.ADDRESS_B_POOL_PEOJECT;
+ /**
+ * 发起USDT转账
+ */
+ String hash = ChainService.getInstance(ChainEnum.BSC_USDT_A_POOL.name()).transfer(address, amount);
+ if(StrUtil.isEmpty(hash)){
+ return;
+ }
+ log.info("{},{}",id,hash);
+ dappFundFlowEntity.setFromHash(hash);
+ dappFundFlowEntity.setStatus(2);
+ dappFundFlowDao.updateById(dappFundFlowEntity);
+ }
+
+ @Override
+ public void antACoinInNodeMsg(Long id) {
+ /**
+ * 全网节点99名.享受全网5%分红
+ */
+ log.info("{}",id);
+ //获取对应的流水记录
+ DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectInfoById(id);
+ if(ObjectUtil.isEmpty(dappFundFlowEntity)){
+ return;
+ }
+ //金额
+ BigDecimal amount = dappFundFlowEntity.getAmount();
+ /**
+ * 获取全网的超级节点个数
+ */
+ List<DappMemberNodeEntity> dappMemberNodeEntities = dappMemberNodeMapper.selectNodeByNodeCode(NodeCodeEnum.SUPER_NODE.getCode());
+ if(CollUtil.isNotEmpty(dappMemberNodeEntities)){
+ BigDecimal divide = amount.divide(new BigDecimal(dappMemberNodeEntities.size()), 4, BigDecimal.ROUND_DOWN);
+ for(DappMemberNodeEntity dappMemberNodeEntity : dappMemberNodeEntities){
+ Long memberId = dappMemberNodeEntity.getMemberId();
+
+ DappFundFlowEntity nodeAPercentFundFlow = new DappFundFlowEntity(
+ memberId,
+ divide,
+ FundFlowEnum.NODE_A_PERCENT_TO_MEMBER.getCode(),
+ 2,
+ BigDecimal.ZERO,
+ null,
+ dappFundFlowEntity.getSystemProfitId());
+ dappFundFlowDao.insert(nodeAPercentFundFlow);
+ //用户的A币账户增加divide数量
+ dappWalletService.updateWalletMineWithLock(divide,memberId,1);
+ }
+ dappFundFlowEntity.setFromHash("已分成"+dappMemberNodeEntities.size()+"人");
+ }else{
+ dappFundFlowEntity.setFromHash("已分成0人");
+ dappWalletService.updateWalletMineWithLock(amount,1L,1);
+ }
+ dappFundFlowEntity.setStatus(2);
+ dappFundFlowDao.updateById(dappFundFlowEntity);
+ }
+
+ @Override
+ public void antACoinInLevelMsg(Long id) {
+ /**
+ * DAO1.考核小区业绩5000USDT 享受团队新增业绩2%
+ * DAO2.伞下不同部门产生2个DAO1.享受团队新增业绩3%
+ * DAO3.伞下不同部门2个DAO2.享受团队新增业绩4%,全网加权分红1%
+ * DAO4.两个不同部门DAO3.享受团队新增业绩5%,全网1%分红。
+ * DAO5.两个不同部门DAO4.享受团队新增业绩6%,全网1%加权分红
+ * 平级奖.DAO5平级享受全网1%加权分红.
+ *
+ * DAO5直推DAO5平级拿一代,视为平级奖,享受原有DAO5一个点,额外再加一个点分红。享受双份收益,合计2%加权分红
+ */
+ log.info("{}",id);
+ //获取对应的流水记录
+ DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectInfoById(id);
+ if(ObjectUtil.isEmpty(dappFundFlowEntity)){
+ return;
+ }
+ /**
+ * 极差总金额
+ */
+ BigDecimal amountTC = dappFundFlowEntity.getAmount();
+
+ Long systemProfitId = dappFundFlowEntity.getSystemProfitId();
+ DappChargeUsdtEntity dappChargeUsdtEntity = dappChargeUsdtMapper.selectById(systemProfitId);
+ Long memberId = dappChargeUsdtEntity.getMemberId();
+ DappMemberEntity mallMember = dappMemberDao.selectById(memberId);
+
+ /**
+ * 团队下不同代理级别获取不用的比例新增业绩补贴
+ */
+ if(StrUtil.isNotEmpty(mallMember.getRefererIds())){
+
+ String referrerIds = mallMember.getRefererIds();
+ List<String> referrerIdList = StrUtil.splitTrim(referrerIds, ",");
+ if(CollUtil.isNotEmpty(referrerIdList)){
+ List<DappMemberEntity> mallMemberTeamPerk = dappMemberDao.selectByInviteIds(referrerIdList);
+
+ if(CollUtil.isNotEmpty(mallMemberTeamPerk)){
+ //初始级别
+ String levelNormal = MemberLevelEnum.NODE_1.getType();
+ //初始团队新增业绩补贴
+ BigDecimal teamIncomePerkNormal = BigDecimal.ZERO;
+ //补贴总数
+ BigDecimal teamIncomePerkTotal = BigDecimal.ZERO;
+
+ for(DappMemberEntity teamPerkMember : mallMemberTeamPerk){
+ String level = teamPerkMember.getAccountType();
+ //比较两个级别的大小,level大于levelNormal返回1
+ int compareMin = MemberLevelEnum.NODE_1.compareLevel(level, levelNormal);
+ int compareMax = MemberLevelEnum.NODE_1.compareLevel(MemberLevelEnum.NODE_5.getType(), level);
+ if(compareMin >= 1 && compareMax >= 1){
+ Long teamPerkMemberId = teamPerkMember.getId();
+ DataDictionaryCustom teamPerkMemberDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ "NODE_PERK", level);
+
+ NodePerk nodePerk = JSONObject.parseObject(teamPerkMemberDic.getValue(), NodePerk.class);
+ BigDecimal teamIncomePerk = nodePerk.getTeamIncomePerk();
+ //极差
+ teamIncomePerk = teamIncomePerk.subtract(teamIncomePerkNormal);
+
+ BigDecimal teamIncomePerkAmount = amountTC.multiply(teamIncomePerk).setScale(4, BigDecimal.ROUND_DOWN);
+
+ BigDecimal nodeAPercentFundFlowFlag = this.getAndUpdateMemberPerk(teamPerkMemberId, teamIncomePerkAmount);
+ if(nodeAPercentFundFlowFlag.compareTo(BigDecimal.ZERO) > 0){
+ DappFundFlowEntity nodeAPercentFundFlow = new DappFundFlowEntity(
+ teamPerkMemberId,
+ nodeAPercentFundFlowFlag,
+ FundFlowEnum.LEVEL_A_PERCENT_CNT_MEMBER.getCode(),
+ 2,
+ BigDecimal.ZERO,
+ null,
+ dappFundFlowEntity.getSystemProfitId());
+ dappFundFlowDao.insert(nodeAPercentFundFlow);
+ //用户的A币账户增加divide数量
+ dappWalletService.updateWalletMineWithLock(nodeAPercentFundFlowFlag,teamPerkMemberId,1);
+ //累加补贴总数
+ teamIncomePerkTotal = teamIncomePerkTotal.add(nodeAPercentFundFlowFlag);
+ }
+
+ //初始级别变成当前遍历的会员的级别
+ levelNormal = level;
+ //初始新增业绩补贴比例变成当前会员级别的补贴比例
+ teamIncomePerkNormal = nodePerk.getTeamIncomePerk();
+ }
+ }
+ //更新总数据
+ dappFundFlowEntity.setFromHash("已分成"+teamIncomePerkTotal.setScale(4,BigDecimal.ROUND_DOWN));
+ dappFundFlowEntity.setStatus(2);
+ dappFundFlowDao.updateById(dappFundFlowEntity);
+ BigDecimal subtract = amountTC.subtract(teamIncomePerkTotal);
+ //用户的A币账户增加divide数量
+ dappWalletService.updateWalletMineWithLock(subtract,1L,1);
+ }
+ }
+ }
+ /**
+ * 极差的dao3、dao4、dao5级别全网分红入自己的底池,每天按20%平分
+ */
+ //获取新增数量
+ DataDictionaryCustom nodeThreeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.NODE_3.getType(),
+ PoolEnum.NODE_3.getCode());
+ NodePerk nodePerk = JSONObject.parseObject(nodeThreeDic.getValue(), NodePerk.class);
+ BigDecimal averagePerk = nodePerk.getAveragePerk();
+ BigDecimal averagePerkCnt = amountTC.multiply(averagePerk).setScale(4, BigDecimal.ROUND_DOWN);
+
+ nodePoolPerk(averagePerkCnt, MemberLevelEnum.NODE_3.getType(), FundFlowEnum.DAO_3_NODE_PERK.getCode());
+ //生成流水记录
+ DappFundFlowEntity nodeThreeFundFlow = new DappFundFlowEntity(
+ 1L,
+ averagePerkCnt,
+ FundFlowEnum.DAO_3_CNT_MEMBER.getCode(),
+ 2,
+ BigDecimal.ZERO,
+ null,
+ dappChargeUsdtEntity.getId());
+ dappFundFlowDao.insert(nodeThreeFundFlow);
+ //更新底池
+ DataDictionaryCustom nodeThreePoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.NODE_3_POOL.getType(),
+ PoolEnum.NODE_3_POOL.getCode());
+ BigDecimal nodeThreePool = new BigDecimal(nodeThreePoolDic.getValue());
+ nodeThreePool = nodeThreePool.add(averagePerkCnt).setScale(4,BigDecimal.ROUND_DOWN);
+ nodeThreePoolDic.setValue(nodeThreePool.toString());
+ dataDictionaryCustomMapper.updateById(nodeThreePoolDic);
+
+ DataDictionaryCustom nodeFourDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.NODE_4.getType(),
+ PoolEnum.NODE_4.getCode());
+ NodePerk nodeFourDicPerk = JSONObject.parseObject(nodeFourDic.getValue(), NodePerk.class);
+ BigDecimal averagePerkFour = nodeFourDicPerk.getAveragePerk();
+ BigDecimal averagePerkFourCnt = amountTC.multiply(averagePerkFour).setScale(4, BigDecimal.ROUND_DOWN);
+
+ nodePoolPerk(averagePerkFourCnt, MemberLevelEnum.NODE_4.getType(), FundFlowEnum.DAO_4_NODE_PERK.getCode());
+ DappFundFlowEntity nodeFourFundFlow = new DappFundFlowEntity(
+ 1L,
+ averagePerkFourCnt,
+ FundFlowEnum.DAO_4_CNT_MEMBER.getCode(),
+ 2,
+ BigDecimal.ZERO,
+ null,
+ dappChargeUsdtEntity.getId());
+ dappFundFlowDao.insert(nodeFourFundFlow);
+ DataDictionaryCustom nodeFourPoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.NODE_4_POOL.getType(),
+ PoolEnum.NODE_4_POOL.getCode());
+ BigDecimal nodeFourPool = new BigDecimal(nodeFourPoolDic.getValue());
+ nodeFourPool = nodeFourPool.add(averagePerkFourCnt).setScale(4,BigDecimal.ROUND_DOWN);
+ nodeFourPoolDic.setValue(nodeFourPool.toString());
+ dataDictionaryCustomMapper.updateById(nodeFourPoolDic);
+
+ DataDictionaryCustom nodeFiveDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.NODE_5.getType(),
+ PoolEnum.NODE_5.getCode());
+ NodePerk nodeFiveDicPerk = JSONObject.parseObject(nodeFiveDic.getValue(), NodePerk.class);
+ BigDecimal averagePerkFive = nodeFiveDicPerk.getAveragePerk();
+ BigDecimal averagePerkFiveCnt = amountTC.multiply(averagePerkFive).setScale(4, BigDecimal.ROUND_DOWN);
+
+ nodePoolPerk(averagePerkFiveCnt, MemberLevelEnum.NODE_5.getType(), FundFlowEnum.DAO_5_NODE_PERK.getCode());
+ DappFundFlowEntity nodeFiveFundFlow = new DappFundFlowEntity(
+ 1L,
+ averagePerkFiveCnt,
+ FundFlowEnum.DAO_5_CNT_MEMBER.getCode(),
+ 2,
+ BigDecimal.ZERO,
+ null,
+ dappChargeUsdtEntity.getId());
+ dappFundFlowDao.insert(nodeFiveFundFlow);
+ DataDictionaryCustom nodeFivePoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.NODE_5_POOL.getType(),
+ PoolEnum.NODE_5_POOL.getCode());
+ BigDecimal nodeFivePool = new BigDecimal(nodeFivePoolDic.getValue());
+ nodeFivePool = nodeFivePool.add(averagePerkFiveCnt).setScale(4,BigDecimal.ROUND_DOWN);
+ nodeFivePoolDic.setValue(nodeFivePool.toString());
+ dataDictionaryCustomMapper.updateById(nodeFivePoolDic);
+
+ /**
+ * DAO5直推DAO5平级拿一代,视为平级奖,享受原有DAO5一个点,额外再加一个点分红。享受双份收益,合计2%加权分红
+ */
+ DataDictionaryCustom nodeFiveEqualsDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.NODE_5_EQUALS.getType(),
+ PoolEnum.NODE_5_EQUALS.getCode());
+ BigDecimal nodeFiveEquals = new BigDecimal(nodeFiveEqualsDic.getValue());
+ BigDecimal nodeFiveEqualsCnt = amountTC.multiply(nodeFiveEquals).setScale(4, BigDecimal.ROUND_DOWN);
+
+ nodePoolEqualsPerk(nodeFiveEqualsCnt, MemberLevelEnum.NODE_5.getType(), FundFlowEnum.DAO_5_NODE_EQUALS_PERK.getCode());
+ DappFundFlowEntity nodeFiveEqualsFundFlow = new DappFundFlowEntity(
+ 1L,
+ nodeFiveEqualsCnt,
+ FundFlowEnum.DAO_5_CNT_EQUALS_MEMBER.getCode(),
+ 2,
+ BigDecimal.ZERO,
+ null,
+ dappChargeUsdtEntity.getId());
+ dappFundFlowDao.insert(nodeFiveEqualsFundFlow);
+ DataDictionaryCustom nodeFiveEqualsPoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.NODE_5_EQUALS_POOL.getType(),
+ PoolEnum.NODE_5_EQUALS_POOL.getCode());
+ BigDecimal nodeFiveEqualsPool = new BigDecimal(nodeFiveEqualsPoolDic.getValue());
+ nodeFiveEqualsPool = nodeFiveEqualsPool.add(nodeFiveEqualsCnt).setScale(4,BigDecimal.ROUND_DOWN);
+ nodeFiveEqualsPoolDic.setValue(nodeFiveEqualsPool.toString());
+ dataDictionaryCustomMapper.updateById(nodeFiveEqualsPoolDic);
+ }
+
+ @Override
+ public BigDecimal getAndUpdateMemberPerk(Long memberId, BigDecimal amount) {
+ /**
+ * 把币本位换算成金本位
+ */
+ DataDictionaryCustom coinAPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.COIN_A_PRICE.getType(),
+ PoolEnum.COIN_A_PRICE.getCode()
+ );
+ BigDecimal coinAPrice = new BigDecimal(coinAPriceDic.getValue());
+ //实际补贴的USDT数量 = 币的数量 * 当前A币的价格
+ BigDecimal realUsdtAmount = amount.multiply(coinAPrice);
+ //实际补贴额度USDT
+ BigDecimal perkAmount = BigDecimal.ZERO;
+ DappUsdtPerkEntity dappUsdtPerkEntity = dappUsdtPerkEntityMapper.selectByMemberId(memberId);
+ if(ObjectUtil.isEmpty(dappUsdtPerkEntity)){
+ return BigDecimal.ZERO;
+ }
+ //用户剩余补贴额度
+ BigDecimal amountSurplus = dappUsdtPerkEntity.getAmount();
+ if(BigDecimal.ZERO.compareTo(amountSurplus) >= 0){
+ return BigDecimal.ZERO;
+ }
+
+ if(realUsdtAmount.compareTo(amountSurplus) >= 0){
+ perkAmount = amountSurplus;
+ }else{
+ perkAmount = realUsdtAmount;
+ }
+ if(BigDecimal.ZERO.compareTo(perkAmount) < 0){
+ amountSurplus = amountSurplus.subtract(perkAmount);
+ dappUsdtPerkEntity.setAmount(amountSurplus);
+ dappUsdtPerkEntityMapper.updateById(dappUsdtPerkEntity);
+ }else{
+ return BigDecimal.ZERO;
+ }
+
+ /**
+ * 把金本位换算成币本位
+ */
+ perkAmount = perkAmount.divide(coinAPrice,4,BigDecimal.ROUND_DOWN);
+ return perkAmount;
+ }
+
+ @Override
+ public BigDecimal nodePoolPerk(BigDecimal nodeThreePoolDicCnt, String type, int typeFlow) {
+ BigDecimal realPerkAmount = BigDecimal.ZERO;
+ List<DappMemberEntity> dappMemberEntities = new ArrayList<>();
+ //获取type级别的会员
+ if(MemberLevelEnum.MEMBER.getType().equals(type)){
+ dappMemberEntities = dappMemberDao.selectMemberByNotAccountType(type);
+ }else{
+ dappMemberEntities = dappMemberDao.selectMemberByAccountType(type);
+ }
+ //每日补贴总数
+ BigDecimal nodePerk = nodeThreePoolDicCnt;
+// BigDecimal nodePerk = nodeThreePoolDicCnt.multiply(AppContants.NODE_PERK_PERCENT);
+ if(CollUtil.isNotEmpty(dappMemberEntities)){
+ //每人的补贴
+ BigDecimal averagePerk = nodePerk.divide(new BigDecimal(dappMemberEntities.size()), 4, BigDecimal.ROUND_DOWN);
+
+ for(DappMemberEntity dappMemberEntity : dappMemberEntities){
+ BigDecimal fundFlowToMemberFlag = this.getAndUpdateMemberPerk(dappMemberEntity.getId(), averagePerk);
+ if(fundFlowToMemberFlag.compareTo(BigDecimal.ZERO) > 0){
+ //生成一条50%客户秒到的资金流水记录
+ DappFundFlowEntity fundFlowToMember = new DappFundFlowEntity(
+ dappMemberEntity.getId(),
+ fundFlowToMemberFlag,
+ typeFlow,
+ 2,
+ BigDecimal.ZERO);
+ dappFundFlowDao.insert(fundFlowToMember);
+ //用户的A币账户增加memberGetACnt数量
+ dappWalletService.updateWalletMineWithLock(fundFlowToMemberFlag,dappMemberEntity.getId(),1);
+
+ realPerkAmount = realPerkAmount.add(fundFlowToMemberFlag);
+ }
+ }
+ }
+ return realPerkAmount;
+ }
+
+ @Override
+ public BigDecimal nodePoolEqualsPerk(BigDecimal nodeFivePoolDicCnt, String type, int code) {
+
+ BigDecimal realPerkAmount = BigDecimal.ZERO;
+ //获取type级别的会员
+ List<DappMemberEntity> dappMemberEntities = dappMemberDao.selectMemberByAccountTypeAnd(type);
+ //每日补贴总数
+ BigDecimal nodePerk = nodeFivePoolDicCnt.multiply(AppContants.NODE_PERK_PERCENT);
+ if(CollUtil.isNotEmpty(dappMemberEntities)){
+ //每人的补贴
+ BigDecimal averagePerk = nodePerk.divide(new BigDecimal(dappMemberEntities.size()), 4, BigDecimal.ROUND_DOWN);
+
+ for(DappMemberEntity dappMemberEntity : dappMemberEntities){
+ BigDecimal fundFlowToMemberFlag = this.getAndUpdateMemberPerk(dappMemberEntity.getId(), averagePerk);
+ if(fundFlowToMemberFlag.compareTo(BigDecimal.ZERO) > 0){
+ DappFundFlowEntity fundFlowToMember = new DappFundFlowEntity(
+ dappMemberEntity.getId(),
+ fundFlowToMemberFlag,
+ code,
+ 2,
+ BigDecimal.ZERO);
+ dappFundFlowDao.insert(fundFlowToMember);
+ //用户的A币账户增加memberGetACnt数量
+ dappWalletService.updateWalletMineWithLock(fundFlowToMemberFlag,dappMemberEntity.getId(),1);
+
+ realPerkAmount = realPerkAmount.add(fundFlowToMemberFlag);
+ }
+ }
+ }
+ return realPerkAmount;
+ }
+
+ @Override
+ public BigDecimal superNodePoolPerk(BigDecimal nodeFivePoolDicCnt, String code, int code1) {
+ BigDecimal realPerkAmount = BigDecimal.ZERO;
+ //获取type级别的会员
+ List<DappMemberNodeEntity> dappMemberNodeEntities = dappMemberNodeMapper.selectNodeByNodeCode(NodeCodeEnum.SUPER_NODE.getCode());
+ //每日补贴总数
+// BigDecimal nodePerk = nodeFivePoolDicCnt.multiply(AppContants.NODE_PERK_PERCENT);
+ BigDecimal nodePerk = nodeFivePoolDicCnt;
+ if(CollUtil.isNotEmpty(dappMemberNodeEntities)){
+ //每人的补贴
+ BigDecimal averagePerk = nodePerk.divide(new BigDecimal(dappMemberNodeEntities.size()), 4, BigDecimal.ROUND_DOWN);
+
+ for(DappMemberNodeEntity dappMemberNodeEntity : dappMemberNodeEntities){
+
+ DappFundFlowEntity fundFlowToMember = new DappFundFlowEntity(
+ dappMemberNodeEntity.getMemberId(),
+ averagePerk,
+ code1,
+ 2,
+ BigDecimal.ZERO);
+ dappFundFlowDao.insert(fundFlowToMember);
+ //用户的A币账户增加memberGetACnt数量
+ dappWalletService.updateWalletMineWithLock(averagePerk,dappMemberNodeEntity.getMemberId(),1);
+
+ realPerkAmount = realPerkAmount.add(averagePerk);
+ }
+ }
+ return realPerkAmount;
+ }
+
+ @Override
+ public void selectAndInsertDics() {
+ selectAndInsertDic(PoolEnum.TRANSFER_A_AUSD_PRICE.getType(),PoolEnum.TRANSFER_A_AUSD_PRICE.getCode(),"0.01","AUSD价格");
+ selectAndInsertDic(PoolEnum.TRANSFER_A_AUSD_PERCENT.getType(),PoolEnum.TRANSFER_A_AUSD_PERCENT.getCode(),"0.1","买入A,10%的AUSD比例");
+ selectAndInsertDic(PoolEnum.WALLET_COIN_OUT_PERCENT.getType(),PoolEnum.WALLET_COIN_OUT_PERCENT.getCode(),"0.3","30%回流底池溢价");
+ selectAndInsertDic(PoolEnum.WALLET_COIN_TO_USDT_PERCENT.getType(),PoolEnum.WALLET_COIN_TO_USDT_PERCENT.getCode(),"0.01","闪对钱包USDT提现1%手续费.(扣USDT)");
+ selectAndInsertDic(PoolEnum.WALLET_MINE_TO_COIN_PERCENT.getType(),PoolEnum.WALLET_MINE_TO_COIN_PERCENT.getCode(),"0.03","资产转闪对钱包 3%扣币");
+ selectAndInsertDic(PoolEnum.NODE_5_EQUALS_POOL.getType(),PoolEnum.NODE_5_EQUALS_POOL.getCode(),"0","节点5的平级奖励底池");
+ selectAndInsertDic(PoolEnum.NODE_5_EQUALS.getType(),PoolEnum.NODE_5_EQUALS.getCode(),"0.1","节点5的平级奖励比例");
+ selectAndInsertDic(
+ PoolEnum.NODE_5.getType(),
+ PoolEnum.NODE_5.getCode(),
+ JSONObject.toJSONString(new NodePerk(BigDecimal.ZERO,2,new BigDecimal("0.6"),new BigDecimal("0.1"))),
+ "节点5的奖励");
+ selectAndInsertDic(
+ PoolEnum.NODE_4.getType(),
+ PoolEnum.NODE_4.getCode(),
+ JSONObject.toJSONString(new NodePerk(BigDecimal.ZERO,2,new BigDecimal("0.5"),new BigDecimal("0.1"))),
+ "节点4的奖励");
+ selectAndInsertDic(
+ PoolEnum.NODE_3.getType(),
+ PoolEnum.NODE_3.getCode(),
+ JSONObject.toJSONString(new NodePerk(BigDecimal.ZERO,2,new BigDecimal("0.4"),new BigDecimal("0.1"))),
+ "节点3的奖励");
+ selectAndInsertDic(
+ PoolEnum.NODE_2.getType(),
+ PoolEnum.NODE_2.getCode(),
+ JSONObject.toJSONString(new NodePerk(BigDecimal.ZERO,2,new BigDecimal("0.3"),new BigDecimal("0.1"))),
+ "节点2的奖励");
+ selectAndInsertDic(
+ PoolEnum.NODE_1.getType(),
+ PoolEnum.NODE_1.getCode(),
+ JSONObject.toJSONString(new NodePerk(new BigDecimal(5000),3,new BigDecimal("0.2"),new BigDecimal("0.1"))),
+ "节点1的奖励");
+
+ selectAndInsertDic(PoolEnum.NODE_5_POOL.getType(),PoolEnum.NODE_5_POOL.getCode(),"0","节点5的奖励底池");
+ selectAndInsertDic(PoolEnum.NODE_4_POOL.getType(),PoolEnum.NODE_4_POOL.getCode(),"0","节点4的奖励底池");
+ selectAndInsertDic(PoolEnum.NODE_3_POOL.getType(),PoolEnum.NODE_3_POOL.getCode(),"0","节点3的奖励底池");
+
+ selectAndInsertDic(PoolEnum.COIN_A_CNT.getType(),PoolEnum.COIN_A_CNT.getCode(),"0","A币币本位底池 -A币的数量");
+ selectAndInsertDic(PoolEnum.COIN_A_USDT_PRICE.getType(),PoolEnum.COIN_A_USDT_PRICE.getCode(),"0","A币金本位底池-usdt数量");
+ selectAndInsertDic(PoolEnum.COIN_A_PRICE.getType(),PoolEnum.COIN_A_PRICE.getCode(),"0","A币的价格");
+
+ selectAndInsertDic(PoolEnum.LEVEL_A_PERCENT.getType(),PoolEnum.LEVEL_A_PERCENT.getCode(),"0.1","10%极差奖");
+ selectAndInsertDic(PoolEnum.FOUNDATION_A_PERCENT.getType(),PoolEnum.FOUNDATION_A_PERCENT.getCode(),"0.05","5%基金会");
+ selectAndInsertDic(PoolEnum.NODE_A_PERCENT_POOL.getType(),PoolEnum.NODE_A_PERCENT_POOL.getCode(),"0","5%节点资金池");
+ selectAndInsertDic(PoolEnum.NODE_A_PERCENT.getType(),PoolEnum.NODE_A_PERCENT.getCode(),"0.05","5%节点");
+ selectAndInsertDic(PoolEnum.DIRECT_A_PERCENT.getType(),PoolEnum.DIRECT_A_PERCENT.getCode(),"0.1","10%直推");
+ selectAndInsertDic(PoolEnum.POOL_MEMBER_A_PERCENT.getType(),PoolEnum.POOL_MEMBER_A_PERCENT.getCode(),"0.2","每日所有人平分的底池20%,即底池总数 * 比例");
+ selectAndInsertDic(PoolEnum.POOL_ALL_MEMBER_A_CNT.getType(),PoolEnum.POOL_ALL_MEMBER_A_CNT.getCode(),"0","所有人平分的底池");
+ selectAndInsertDic(PoolEnum.POOL_ALL_MEMBER_A_PERCENT.getType(),PoolEnum.POOL_ALL_MEMBER_A_PERCENT.getCode(),"0","全网加权分红20%,即所有人平分的底池");
+ selectAndInsertDic(PoolEnum.MEMBER_GET_A_PERCENT.getType(),PoolEnum.MEMBER_GET_A_PERCENT.getCode(),"0.5","客户秒到50%的A币比例");
+ selectAndInsertDic(PoolEnum.PRODUCE_A_PERCENT.getType(),PoolEnum.PRODUCE_A_PERCENT.getCode(),"0.7","实际产生A币的数量的比例");
+ selectAndInsertDic(PoolEnum.USDT_B_PERCENT.getType(),PoolEnum.USDT_B_PERCENT.getCode(),"0.1","10%进入B底池的比例");
+ selectAndInsertDic(PoolEnum.USDT_A_PERCENT.getType(),PoolEnum.USDT_A_PERCENT.getCode(),"0.9","90%进入A底池的比例");
+ }
+
+ @Override
+ public void selectAndInsertDic(String type, String code, String value, String description) {
+ DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(type, code);
+ if(ObjectUtil.isEmpty(dic)){
+ dic = new DataDictionaryCustom(type,code,value,description);
+ dataDictionaryCustomMapper.insert(dic);
+ }
+ }
+
+ @Override
+ public void antACoinOutMsg(Long id) {
+ log.info("{}",id);
+ //获取对应的流水记录
+ DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectInfoById(id);
+ if(ObjectUtil.isEmpty(dappFundFlowEntity)){
+ return;
+ }
+ //金额
+ BigDecimal amount = dappFundFlowEntity.getAmount();
+
+ Long memberId = dappFundFlowEntity.getMemberId();
+ DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
+ //目标地址
+ String address = dappMemberEntity.getAddress();
+ /**
+ * 发起USDT转账
+ */
+ log.info("amount:{},address:{}",amount,address);
+// String hash = ChainService.getInstance(ChainEnum.BSC_USDT_W_POOL.name()).transfer(address, amount);
+// if(StrUtil.isEmpty(hash)){
+// return;
+// }
+// log.info("{},{}",id,hash);
+// dappFundFlowEntity.setFromHash(hash);
+// dappFundFlowEntity.setStatus(2);
+// dappFundFlowDao.updateById(dappFundFlowEntity);
+ }
+
+ @Override
+ public void aCoinFire() {
+ /**
+ * A币技术做到资产钱包燃烧,闪兑钱包也要燃烧0.1%每小时
+ */
+ BigDecimal totalCnt = BigDecimal.ZERO;
+ //闪兑钱包
+ List<DappWalletCoinEntity> walletCoinEntities = dappWalletCoinDao.selectAmountThanZero();
+ if(CollUtil.isNotEmpty(walletCoinEntities)){
+ for(DappWalletCoinEntity dappWalletCoinEntity : walletCoinEntities){
+ BigDecimal availableAmount = dappWalletCoinEntity.getAvailableAmount();
+ BigDecimal fireCnt = availableAmount.multiply(new BigDecimal("0.001")).setScale(4,BigDecimal.ROUND_DOWN);
+ dappWalletService.updateWalletCoinWithLock(fireCnt,dappWalletCoinEntity.getMemberId(),2);
+ totalCnt = totalCnt.add(fireCnt);
+ }
+ }
+ //资产钱包
+ List<DappWalletMineEntity> walletMineEntities = dappWalletMineDao.selectAmountThanZero();
+ if(CollUtil.isNotEmpty(walletMineEntities)){
+ for(DappWalletMineEntity dappWalletMineEntity : walletMineEntities){
+ BigDecimal availableAmount = dappWalletMineEntity.getAvailableAmount();
+ BigDecimal fireCnt = availableAmount.multiply(new BigDecimal("0.001")).setScale(4,BigDecimal.ROUND_DOWN);
+ dappWalletService.updateWalletMineWithLock(fireCnt,dappWalletMineEntity.getMemberId(),2);
+ totalCnt = totalCnt.add(fireCnt);
+ }
+ }
+ if(BigDecimal.ZERO.compareTo(totalCnt) >= 0){
+ return;
+ }
+
+ totalCnt = totalCnt.setScale(4,BigDecimal.ROUND_DOWN);
+ /**
+ * 插入每小时燃烧的资金流水
+ */
+ DappFundFlowEntity dappFundFlowEntity = new DappFundFlowEntity(1L, totalCnt, FundFlowEnum.A_COIN_FIRE.getCode(), 2, BigDecimal.ZERO);
+ dappFundFlowDao.insert(dappFundFlowEntity);
+ /**
+ * 更新A币的价格
+ */
+ DataDictionaryCustom coinACntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.COIN_A_CNT.getType(),
+ PoolEnum.COIN_A_CNT.getCode());
+ BigDecimal coinACnt = new BigDecimal(coinACntDic.getValue());
+ coinACnt = coinACnt.subtract(totalCnt);
+ coinACntDic.setValue(coinACnt.toString());
+ dataDictionaryCustomMapper.updateById(coinACntDic);
+
+ DataDictionaryCustom coinAUsdtDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.COIN_A_USDT_PRICE.getType(),
+ PoolEnum.COIN_A_USDT_PRICE.getCode());
+ BigDecimal coinAUsdt = new BigDecimal(coinAUsdtDic.getValue());
+
+ DataDictionaryCustom coinAPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.COIN_A_PRICE.getType(),
+ PoolEnum.COIN_A_PRICE.getCode());
+ BigDecimal coinAPrice = coinAUsdt.divide(coinACnt,8,BigDecimal.ROUND_DOWN);
+ coinAPriceDic.setValue(coinAPrice.toString());
+ dataDictionaryCustomMapper.updateById(coinAPriceDic);
+
+ chainProducer.sendAntKLineMsg(0);
+ }
+
+ @Override
+ public void antMemberLevelMsg(Long memberId) {
+ DappMemberEntity member = dappMemberDao.selectById(memberId);
+ if(StrUtil.isBlank(member.getRefererIds())) {
+ return;
+ }
+
+ List<String> ids = StrUtil.split(member.getRefererIds(), ',');
+ List<DappMemberEntity> parentMembers = dappMemberDao.selectByInviteIds(ids);
+ for (DappMemberEntity parent : parentMembers) {
+ //DAO5不能再升级了
+ if(parent.getAccountType().equals(MemberLevelEnum.NODE_5.getType())){
+ continue;
+ }
+ /**
+ * 升级到董事就无法升级了
+ */
+ String nextLevelName = MemberLevelEnum.MEMBER.getNextLevel(parent.getAccountType());
+ int levelCode = MemberLevelEnum.MEMBER.getLevelCode(nextLevelName);
+
+ DataDictionaryCustom newLevelDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode("NODE_PERK", nextLevelName);
+ if(ObjectUtil.isEmpty(newLevelDic)){
+ continue;
+ }
+ NodePerk nodeFiveDicPerk = JSONObject.parseObject(newLevelDic.getValue(), NodePerk.class);
+
+ //需要判断小区业绩
+ if( MemberLevelEnum.NODE_1.getType().equals(nextLevelName)){
+ if (!directMemberCnt(parent, nodeFiveDicPerk)) {
+ continue;
+ }
+ if (!teamIncome(parent, nodeFiveDicPerk)) {
+ continue;
+ }
+ }else{
+ if (!agentCntFinish(parent, nodeFiveDicPerk)) {
+ continue;
+ }
+ }
+
+ parent.setAccountType(nextLevelName);
+ dappMemberDao.updateById(parent);
+ }
+ }
+
+ @Override
+ public void aKlineJobHour() {
+ DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.COIN_A_PRICE.getType(),
+ PoolEnum.COIN_A_PRICE.getCode()
+ );
+
+ BigDecimal coinAPrice = new BigDecimal(dataDictionaryCustom.getValue());
+ DateTime dateTime = DateUtil.offsetHour(DateUtil.date(), -1);
+ String format = DateUtil.format(dateTime, "yyyy-MM-dd HH");
+ List<String> dataDayStrList = new ArrayList<>();
+ dataDayStrList.add(format);
+ List<DappAKlineEntity> dappAKlineEntities = dappAKlineMapper.selectListByTypeAndHour(dataDayStrList);
+
+ DappAKlineEntity dappAKlineEntity = new DappAKlineEntity();
+ dappAKlineEntity.setType(1);
+ if(CollUtil.isNotEmpty(dappAKlineEntities)){
+
+ List<BigDecimal> openPriceList = dappAKlineEntities.stream().map(DappAKlineEntity::getOpenPrice).collect(Collectors.toList());
+ BigDecimal openPrice = openPriceList.stream().min(BigDecimal::compareTo).get();
+ dappAKlineEntity.setOpenPrice(openPrice);
+ //获取最高价
+ List<BigDecimal> highestPriceList = dappAKlineEntities.stream().map(DappAKlineEntity::getHighestPrice).collect(Collectors.toList());
+ BigDecimal highestPrice = highestPriceList.stream().max(BigDecimal::compareTo).get();
+ dappAKlineEntity.setHighestPrice(highestPrice);
+
+ List<BigDecimal> lowestPriceList = dappAKlineEntities.stream().map(DappAKlineEntity::getLowestPrice).collect(Collectors.toList());
+ BigDecimal lowestPrice = lowestPriceList.stream().min(BigDecimal::compareTo).get();
+ dappAKlineEntity.setLowestPrice(lowestPrice);
+ }else{
+ dappAKlineEntity.setOpenPrice(coinAPrice);
+ dappAKlineEntity.setHighestPrice(coinAPrice);
+ dappAKlineEntity.setLowestPrice(coinAPrice);
+ }
+ DappAKlineEntity oldOne = dappAKlineMapper.selectOneByType();
+ if(ObjectUtil.isNotEmpty(oldOne)){
+ dappAKlineEntity.setClosePrice(oldOne.getClosePrice());
+ }else{
+ dappAKlineEntity.setClosePrice(coinAPrice);
+ }
+ dappAKlineMapper.insert(dappAKlineEntity);
+
+ chainProducer.sendAntKLineMsg(1);
+ }
+
+ @Override
+ public void aKlineJobDay() {
+ DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.COIN_A_PRICE.getType(),
+ PoolEnum.COIN_A_PRICE.getCode()
+ );
+ BigDecimal coinAPrice = new BigDecimal(dataDictionaryCustom.getValue());
+ /**
+ * 当前时间往前推12小时,得到前一天的所有时间的yyyy-MM-dd格式的所有小时的记录
+ */
+ DappAKlineEntity dappAKlineEntity = new DappAKlineEntity();
+ dappAKlineEntity.setType(2);
+ DateTime dateTime = DateUtil.offsetHour(DateUtil.date(), -12);
+ String format = DateUtil.format(dateTime, "yyyy-MM-dd");
+ List<String> dataDayStrList = new ArrayList<>();
+ dataDayStrList.add(format);
+ List<DappAKlineEntity> dappAKlineEntities = dappAKlineMapper.selectListByTypeAndTime(1,dataDayStrList);
+ if(CollUtil.isNotEmpty(dappAKlineEntities)){
+ List<BigDecimal> openPriceList = dappAKlineEntities.stream().map(DappAKlineEntity::getOpenPrice).collect(Collectors.toList());
+ BigDecimal openPrice = openPriceList.stream().min(BigDecimal::compareTo).get();
+ dappAKlineEntity.setOpenPrice(openPrice);
+ //获取最高价
+ List<BigDecimal> highestPriceList = dappAKlineEntities.stream().map(DappAKlineEntity::getHighestPrice).collect(Collectors.toList());
+ BigDecimal highestPrice = highestPriceList.stream().max(BigDecimal::compareTo).get();
+ dappAKlineEntity.setHighestPrice(highestPrice);
+
+ List<BigDecimal> lowestPriceList = dappAKlineEntities.stream().map(DappAKlineEntity::getLowestPrice).collect(Collectors.toList());
+ BigDecimal lowestPrice = lowestPriceList.stream().min(BigDecimal::compareTo).get();
+ dappAKlineEntity.setLowestPrice(lowestPrice);
+ }else{
+ dappAKlineEntity.setOpenPrice(coinAPrice);
+ dappAKlineEntity.setHighestPrice(coinAPrice);
+ dappAKlineEntity.setLowestPrice(coinAPrice);
+ }
+ dappAKlineEntity.setClosePrice(coinAPrice);
+ dappAKlineMapper.insert(dappAKlineEntity);
+
+ chainProducer.sendAntKLineMsg(2);
+ //周
+ String week = DateUtil.dayOfWeekEnum(DateUtil.date()).toChinese();
+ if("星期日".equals(week)){
+ /**
+ * 当前时间往前推6天,得到前一周的所有时间的yyyy-MM-dd格式的所有type为日的记录
+ */
+ DappAKlineEntity dappAKlineEntityDay = new DappAKlineEntity();
+ dappAKlineEntityDay.setType(3);
+
+ List<String> dataWeekStrList = new ArrayList<>();
+ String one = DateUtil.format(DateUtil.offsetDay(DateUtil.date(), -6), "yyyy-MM-dd");
+ String two = DateUtil.format(DateUtil.offsetDay(DateUtil.date(), -5), "yyyy-MM-dd");
+ String three = DateUtil.format(DateUtil.offsetDay(DateUtil.date(), -4), "yyyy-MM-dd");
+ String four = DateUtil.format(DateUtil.offsetDay(DateUtil.date(), -3), "yyyy-MM-dd");
+ String five = DateUtil.format(DateUtil.offsetDay(DateUtil.date(), -2), "yyyy-MM-dd");
+ String six = DateUtil.format(DateUtil.offsetDay(DateUtil.date(), -1), "yyyy-MM-dd");
+ dataWeekStrList.add(one);
+ dataWeekStrList.add(two);
+ dataWeekStrList.add(three);
+ dataWeekStrList.add(four);
+ dataWeekStrList.add(five);
+ dataWeekStrList.add(six);
+ List<DappAKlineEntity> dappAKlineEntitieDays = dappAKlineMapper.selectListByTypeAndTime(2,dataWeekStrList);
+ if(CollUtil.isNotEmpty(dappAKlineEntitieDays)){
+
+ List<BigDecimal> openPriceList = dappAKlineEntitieDays.stream().map(DappAKlineEntity::getOpenPrice).collect(Collectors.toList());
+ BigDecimal openPrice = openPriceList.stream().min(BigDecimal::compareTo).get();
+ dappAKlineEntityDay.setOpenPrice(openPrice);
+ //获取最高价
+ List<BigDecimal> highestPriceList = dappAKlineEntitieDays.stream().map(DappAKlineEntity::getHighestPrice).collect(Collectors.toList());
+ BigDecimal highestPrice = highestPriceList.stream().max(BigDecimal::compareTo).get();
+ dappAKlineEntityDay.setHighestPrice(highestPrice);
+
+ List<BigDecimal> lowestPriceList = dappAKlineEntitieDays.stream().map(DappAKlineEntity::getLowestPrice).collect(Collectors.toList());
+ BigDecimal lowestPrice = lowestPriceList.stream().min(BigDecimal::compareTo).get();
+ dappAKlineEntityDay.setLowestPrice(lowestPrice);
+ }else{
+ dappAKlineEntityDay.setOpenPrice(coinAPrice);
+ dappAKlineEntityDay.setHighestPrice(coinAPrice);
+ dappAKlineEntityDay.setLowestPrice(coinAPrice);
+ }
+ dappAKlineEntityDay.setClosePrice(coinAPrice);
+ dappAKlineMapper.insert(dappAKlineEntityDay);
+
+ chainProducer.sendAntKLineMsg(3);
+ }
+ //月
+ int month = DateUtil.dayOfMonth(DateUtil.date());
+ if(1 == month){
+ /**
+ * 当前时间往前推10天,得到前一月的所有时间的yyyy-MM-dd格式的所有type为周的记录
+ */
+ DappAKlineEntity dappAKlineEntityWeek = new DappAKlineEntity();
+ dappAKlineEntityWeek.setType(4);
+
+ List<String> dataMonthStrList = new ArrayList<>();
+ String one = DateUtil.format(DateUtil.offsetDay(DateUtil.date(), -10), "yyyy-MM-dd");
+ dataMonthStrList.add(one);
+ List<DappAKlineEntity> dappAKlineEntitieWeeks = dappAKlineMapper.selectListByTypeAndTime(3,dataMonthStrList);
+ if(CollUtil.isNotEmpty(dappAKlineEntitieWeeks)){
+ List<BigDecimal> openPriceList = dappAKlineEntitieWeeks.stream().map(DappAKlineEntity::getOpenPrice).collect(Collectors.toList());
+ BigDecimal openPrice = openPriceList.stream().min(BigDecimal::compareTo).get();
+ dappAKlineEntityWeek.setOpenPrice(openPrice);
+ //获取最高价
+ List<BigDecimal> highestPriceList = dappAKlineEntitieWeeks.stream().map(DappAKlineEntity::getHighestPrice).collect(Collectors.toList());
+ BigDecimal highestPrice = highestPriceList.stream().max(BigDecimal::compareTo).get();
+ dappAKlineEntityWeek.setHighestPrice(highestPrice);
+
+ List<BigDecimal> lowestPriceList = dappAKlineEntitieWeeks.stream().map(DappAKlineEntity::getLowestPrice).collect(Collectors.toList());
+ BigDecimal lowestPrice = lowestPriceList.stream().min(BigDecimal::compareTo).get();
+ dappAKlineEntityWeek.setLowestPrice(lowestPrice);
+ }else{
+ dappAKlineEntityWeek.setOpenPrice(coinAPrice);
+ dappAKlineEntityWeek.setHighestPrice(coinAPrice);
+ dappAKlineEntityWeek.setLowestPrice(coinAPrice);
+ }
+ dappAKlineEntityWeek.setClosePrice(coinAPrice);
+ dappAKlineMapper.insert(dappAKlineEntityWeek);
+
+ chainProducer.sendAntKLineMsg(4);
+ }
+ }
+
+ @Override
+ public void antKLineMsg(int type) {
+ /**
+ * 根据类型去更新redis的K线数据
+ */
+ String redisKey = null;
+ if(1 == type){
+ redisKey = AppContants.K_LINE_HOUR;
+ }else if(2 == type){
+ redisKey = AppContants.K_LINE_DAY;
+ }else if(3 == type){
+ redisKey = AppContants.K_LINE_WEEK;
+ }else if(4 == type){
+ redisKey = AppContants.K_LINE_MONTH;
+ }else if(0 == type){
+ createKDate();
+ return;
+ }else{
+ return;
+ }
+ List<cn.hutool.json.JSONObject> objects = new ArrayList<>();
+ List<AKLineLimitVo> akLineLimitVos = dappAKlineMapper.selectListByTypeAndLimit(type, AppContants.K_LINE_LIMIT);
+ if(CollUtil.isNotEmpty(akLineLimitVos)){
+ Collections.reverse(akLineLimitVos);
+ for(AKLineLimitVo akLineLimitVo : akLineLimitVos){
+ cn.hutool.json.JSONObject parseObj = JSONUtil.parseObj(akLineLimitVo);
+ objects.add(parseObj);
+ }
+ redisUtils.del(redisKey);
+ redisUtils.set(redisKey, objects.toString());
+ }
+
+ }
+
+ /**
+ * 生成当前分钟的k线数据,type为0
+ */
+ public void createKDate(){
+ DappAKlineEntity dappAKlineEntity = new DappAKlineEntity();
+ dappAKlineEntity.setType(0);
+ DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.COIN_A_PRICE.getType(),
+ PoolEnum.COIN_A_PRICE.getCode()
+ );
+ BigDecimal coinAPrice = new BigDecimal(dataDictionaryCustom.getValue());
+
+ /**
+ * 获取最新一条小时或者分钟的数据
+ */
+ DappAKlineEntity oldOne = dappAKlineMapper.selectOneByType();
+ if(ObjectUtil.isNotEmpty(oldOne)){
+ dappAKlineEntity.setOpenPrice(oldOne.getClosePrice());
+ }
+ dappAKlineEntity.setOpenPrice(coinAPrice);
+ dappAKlineEntity.setLowestPrice(coinAPrice);
+ dappAKlineEntity.setHighestPrice(coinAPrice);
+ dappAKlineEntity.setClosePrice(coinAPrice);
+ dappAKlineMapper.insert(dappAKlineEntity);
+
+ }
+
+ public static void main(String[] args) {
+
+ int month = DateUtil.dayOfMonth(DateUtil.date());
+ String s = DateUtil.dayOfWeekEnum(DateUtil.date()).toChinese();
+ System.out.println(s);
+ System.out.println(month);
+ }
+
+ /**
+ * 判断直推人数是否达标
+ *
+ * @param member
+ * @return
+ */
+ private boolean directMemberCnt(DappMemberEntity member, NodePerk agentInfo) {
+ List<DappMemberEntity> childs = dappMemberDao.selectMemberInfoByRefererId(member.getInviteId());
+ if (CollUtil.isEmpty(childs)) {
+ return false;
+ }
+
+ if (childs.size() >= agentInfo.getDirectCnt()) {
+ return true;
+ }
+
+ log.info("用户:{}直推数量未达标, 当前等级:{}, 当前数量:{}, 目标数量:{}", member.getAddress(), member.getAccountType(), childs.size(), agentInfo.getDirectCnt());
+ return false;
+ }
+
+ /**
+ * 判断下级代理数量是否达标
+ *
+ * @return
+ */
+ private boolean agentCntFinish(DappMemberEntity member, NodePerk agentInfo) {
+ if (agentInfo.getDirectCnt() == null || agentInfo.getDirectCnt() == 0) {
+ return true;
+ }
+ // 直推用户
+ List<DappMemberEntity> childs = dappMemberDao.selectMemberInfoByRefererId(member.getInviteId());
+ if (CollUtil.isEmpty(childs)) {
+ return false;
+ }
+ // 用户团队达到指定代理数量,且都不在同一条线
+ int i = 0;
+ for (DappMemberEntity child : childs) {
+ List<DappMemberEntity> mallMembers = dappMemberDao.selectChildAgentListByAccountType(child.getInviteId(), member.getAccountType());
+ if (CollUtil.isNotEmpty(mallMembers)) {
+ i++;
+ }
+ }
+ if (i >= agentInfo.getDirectCnt()) {
+ return true;
+ }
+ log.info("用户:{}代理数量未达标, 当前等级:{}, 当前数量:{}, 目标数量:{}", member.getAddress(), member.getAccountType(), i, agentInfo.getDirectCnt());
+ return false;
+ }
+
+ /**
+ * 团队业绩是否达标
+ * 除去直属的最大的一个业绩团队,剩余的所有业绩之和
+ *
+ * @param
+ * @param agentInfo
+ * @return
+ */
+ private boolean teamIncome(DappMemberEntity member, NodePerk agentInfo) {
+ BigDecimal teamIncome = agentInfo.getTeamIncome();
+ //业绩集合
+ List<BigDecimal> list = new ArrayList<>();
+ //总业绩
+ BigDecimal teamIncomeMax = BigDecimal.ZERO;
+ //所有直推团队,就是这个会员的所有区域的业绩。
+
+ // 直推用户
+ List<DappMemberEntity> childs = dappMemberDao.selectMemberInfoByRefererId(member.getInviteId());
+ List<String> childsInviteIds = childs.stream().map(DappMemberEntity::getInviteId).collect(Collectors.toList());
+ for(String inviteId : childsInviteIds){
+ BigDecimal totalIncomeMember = dappMemberDao.selectAllAchieveByInviteId(inviteId);
+ teamIncomeMax = teamIncomeMax.add(totalIncomeMember);
+ list.add(totalIncomeMember);
+ }
+ //去掉一个最大区的业绩
+ BigDecimal bigMax = list.stream().max(BigDecimal::compareTo).get();
+ teamIncomeMax = teamIncomeMax.subtract(bigMax);
+
+ if (teamIncomeMax.compareTo(teamIncome) >= 0) {
+ return true;
+ }
+ log.info("用户:{}团队业绩未达标, 当前等级:{}, 当前业绩:{}, 目标业绩:{}", member.getAddress(), member.getAccountType(), teamIncomeMax, teamIncome);
+ return false;
+ }
+
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
index 209ac93..5e52838 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
@@ -13,11 +13,14 @@
import cc.mrbird.febs.dapp.dto.*;
import cc.mrbird.febs.dapp.entity.*;
import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum;
+import cc.mrbird.febs.dapp.enumerate.FundFlowEnum;
import cc.mrbird.febs.dapp.enumerate.NodeCodeEnum;
+import cc.mrbird.febs.dapp.enumerate.PoolEnum;
import cc.mrbird.febs.dapp.mapper.*;
import cc.mrbird.febs.dapp.service.DappWalletService;
import cc.mrbird.febs.dapp.utils.BoxUtil;
import cc.mrbird.febs.dapp.vo.ActiveNftListVo;
+import cc.mrbird.febs.dapp.vo.DappFundFlowVo;
import cc.mrbird.febs.dapp.vo.DappMemberNodeVo;
import cc.mrbird.febs.dapp.vo.WalletInfoVo;
import cc.mrbird.febs.rabbit.producer.ChainProducer;
@@ -67,6 +70,8 @@
private final DappNodeOrderMapper dappNodeOrderMapper;
private final DappMemberNodeMapper dappMemberNodeMapper;
+ private final DappChargeUsdtMapper dappChargeUsdtMapper;
+ private final DappUsdtPerkEntityMapper dappUsdtPerkEntityMapper;
@Override
public WalletInfoVo walletInfo() {
@@ -163,12 +168,12 @@
throw new FebsException("功能升级中");
}
- if (transferDto.getType() != 2) {
- member = dappMemberDao.selectById(member.getId());
- if (member.getActiveStatus() == 1) {
- throw new FebsException("Do not repeat purchase");
- }
- }
+// if (transferDto.getType() != 2) {
+// member = dappMemberDao.selectById(member.getId());
+// if (member.getActiveStatus() == 1) {
+// throw new FebsException("Do not repeat purchase");
+// }
+// }
/**
* buyType=1,余额购买
*/
@@ -188,7 +193,7 @@
/**
* buyType=2,钱包购买
*/
- int type = 1;
+ int type = FundFlowEnum.BUY_NODE.getCode();
// 1-认购 2-充值tfc
if (transferDto.getType() == 2) {
type = 6;
@@ -296,7 +301,7 @@
DappFundFlowEntity fundFlow = new DappFundFlowEntity(
refererMember.getId(),
directProfit,
- 3,
+ 2,
1,
BigDecimal.ZERO,
null,
@@ -315,7 +320,7 @@
DappFundFlowEntity fundFlowEntityProject = new DappFundFlowEntity(
4L,
subtract,
- 4,
+ 3,
1,
BigDecimal.ZERO,
null,
@@ -352,48 +357,108 @@
@Override
@Transactional(rollbackFor = Exception.class)
public void withdraw(WithdrawDto withdrawDto) {
+ /**
+ * USDT提现1%手续费.(扣USDT)
+ * 提币需要*当前a币价格,转换成USDT
+ * A币卖币规则,卖出100%销毁,30%回流底池溢价
+ */
DappMemberEntity member = LoginUserUtil.getAppUser();
-
+ //提币数量
+ BigDecimal amount = withdrawDto.getAmount();
+ if(BigDecimal.ZERO.compareTo(amount) >= 0){
+ throw new FebsException("输入正确的数量");
+ }
DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(member.getId());
if (walletCoin.getAvailableAmount().compareTo(withdrawDto.getAmount()) < 0) {
- throw new FebsException("Balance Not Enough");
+ throw new FebsException("可提现的数量不足");
+ }
+ DataDictionaryCustom aCoinPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.COIN_A_PRICE.getType(),
+ PoolEnum.COIN_A_PRICE.getCode()
+ );
+ BigDecimal coinAPrice = new BigDecimal(aCoinPriceDic.getValue());
+ //预计提现的USDT数量 = 币的数量 * 当前A币的价格
+ BigDecimal coinUsdtAmount = amount.multiply(coinAPrice);
+ /**
+ * 卖币可享有贡献值,鼓励卖币,例.卖出价值100U获得100贡献值
+ */
+ DappUsdtPerkEntity directDappUsdtPerkEntity = dappUsdtPerkEntityMapper.selectByMemberId(member.getId());
+ if(ObjectUtil.isEmpty(directDappUsdtPerkEntity)){
+ directDappUsdtPerkEntity = new DappUsdtPerkEntity();
+ directDappUsdtPerkEntity.setNftDevote(coinUsdtAmount);
+ directDappUsdtPerkEntity.setMemberId(member.getId());
+ dappUsdtPerkEntityMapper.insert(directDappUsdtPerkEntity);
}
- DappWalletMineEntity walletMine = dappWalletMineDao.selectByMemberId(member.getId());
- if (walletMine.getAvailableAmount().compareTo(withdrawDto.getFee()) < 0) {
- throw new FebsException("DMD Not Enough");
- }
+ BigDecimal directNftDevote = directDappUsdtPerkEntity.getNftDevote();
+ directNftDevote = directNftDevote.add(coinUsdtAmount);
+ directDappUsdtPerkEntity.setNftDevote(directNftDevote);
+ dappUsdtPerkEntityMapper.updateById(directDappUsdtPerkEntity);
- updateWalletCoinWithLock(withdrawDto.getAmount(), member.getId(), 2);
- updateWalletMineWithLock(withdrawDto.getFee(), member.getId(), 2);
+ DataDictionaryCustom toUsdtPercentFeeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.WALLET_COIN_TO_USDT_PERCENT.getType(),
+ PoolEnum.WALLET_COIN_TO_USDT_PERCENT.getCode()
+ );
+ BigDecimal feePercent = new BigDecimal(toUsdtPercentFeeDic.getValue());
+ //手续费扣除USDT
+ BigDecimal feeUsdtAmount = coinUsdtAmount.multiply(feePercent).setScale(4,BigDecimal.ROUND_DOWN);
+ //实际提现USDT数量
+ BigDecimal realUsdtAmount = coinUsdtAmount.subtract(feeUsdtAmount).setScale(4,BigDecimal.ROUND_DOWN);
-
- DappFundFlowEntity feeFlow = new DappFundFlowEntity(member.getId(), withdrawDto.getFee().negate(), 7, 2, null, null);
- dappFundFlowDao.insert(feeFlow);
-
- DappFundFlowEntity fundFlow = new DappFundFlowEntity(member.getId(), withdrawDto.getAmount().negate(), 5, 2, withdrawDto.getFee(), null);
- dappFundFlowDao.insert(fundFlow);
-
+ //减少闪对钱包的币的数量
+ this.updateWalletCoinWithLock(amount, member.getId(), 2);
+ //增加流水
+ DappFundFlowEntity dappFundFlowEntity = new DappFundFlowEntity(member.getId(), amount.negate(), FundFlowEnum.WALLET_COIN_TO_USDT.getCode(), 2, BigDecimal.ZERO);
+ dappFundFlowDao.insert(dappFundFlowEntity);
+ //增加流水
+ DappFundFlowEntity realUsdtAmountFlow = new DappFundFlowEntity(member.getId(), realUsdtAmount.negate(), FundFlowEnum.WALLET_COIN_TO_USDT_W.getCode(), 1, feeUsdtAmount);
+ dappFundFlowDao.insert(realUsdtAmountFlow);
+ //增加提现的记录
MemberCoinWithdrawEntity memberCoinWithdraw = new MemberCoinWithdrawEntity();
memberCoinWithdraw.setMemberId(member.getId());
memberCoinWithdraw.setAddress(member.getAddress());
- memberCoinWithdraw.setAmount(withdrawDto.getAmount());
- memberCoinWithdraw.setFeeAmount(withdrawDto.getFee());
+ memberCoinWithdraw.setAmount(realUsdtAmount);
+ memberCoinWithdraw.setFeeAmount(feeUsdtAmount);
memberCoinWithdraw.setStatus(MemberCoinWithdrawEntity.STATUS_YES);
memberCoinWithdraw.setSymbol("USDT");
- memberCoinWithdraw.setFlowId(fundFlow.getId());
+ memberCoinWithdraw.setFlowId(realUsdtAmountFlow.getId());
memberCoinWithdrawDao.insert(memberCoinWithdraw);
+ //发送提现消息
+ chainProducer.sendAntACoinOutMsg(realUsdtAmountFlow.getId());
- String hash = ChainService.getInstance(ChainEnum.BSC_USDT.name()).transfer(member.getAddress(), withdrawDto.getAmount());
- fundFlow.setToHash(hash);
- dappFundFlowDao.updateById(fundFlow);
+ /**
+ * A币卖币规则,卖出100%销毁,30%回流底池溢价
+ */
+ DataDictionaryCustom outPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.WALLET_COIN_OUT_PERCENT.getType(),
+ PoolEnum.WALLET_COIN_OUT_PERCENT.getCode()
+ );
+ BigDecimal outPercent = new BigDecimal(outPercentDic.getValue());
+ coinUsdtAmount = coinUsdtAmount.multiply(outPercent).setScale(4,BigDecimal.ROUND_DOWN);
+ //金本位底池数量
+ DataDictionaryCustom coinAUsdtPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.COIN_A_USDT_PRICE.getType(),
+ PoolEnum.COIN_A_USDT_PRICE.getCode()
+ );
+ BigDecimal coinAUsdtCnt = new BigDecimal(coinAUsdtPriceDic.getValue());
+ coinAUsdtCnt = coinAUsdtCnt.add(coinUsdtAmount).setScale(4,BigDecimal.ROUND_DOWN);
+ coinAUsdtPriceDic.setValue(coinAUsdtCnt.toString());
+ dataDictionaryCustomMapper.updateById(coinAUsdtPriceDic);
+ //币本位底池数量
+ DataDictionaryCustom coinACntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.COIN_A_CNT.getType(),
+ PoolEnum.COIN_A_CNT.getCode()
+ );
+ BigDecimal coinACnt = new BigDecimal(coinACntDic.getValue());
+ coinACnt = coinACnt.subtract(amount).setScale(4,BigDecimal.ROUND_DOWN);
+ coinACntDic.setValue(coinACnt.toString());
+ dataDictionaryCustomMapper.updateById(coinACntDic);
- chainProducer.sendFeeDistributeMsg(fundFlow.getId());
-// Map<String, Object> map = new HashMap<>();
-// map.put("fee", withdrawDto.getFee());
-// map.put("address", ChainEnum.BSC_TFC_FEE.getAddress());
-// map.put("flow", feeFlow.getId());
-// chainProducer.sendTfcFee(JSONObject.toJSONString(map));
+ coinAPrice = coinAUsdtCnt.divide(coinACnt,8,BigDecimal.ROUND_DOWN);
+ aCoinPriceDic.setValue(coinAPrice.toString());
+ dataDictionaryCustomMapper.updateById(aCoinPriceDic);
+
+ chainProducer.sendAntKLineMsg(0);
}
@Override
@@ -401,7 +466,9 @@
boolean isSuccess = false;
while(!isSuccess) {
DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(memberId);
-
+ if(ObjectUtil.isEmpty(walletCoin)){
+ return;
+ }
// 加
if (type == 1) {
walletCoin.setTotalAmount(walletCoin.getTotalAmount().add(amount));
@@ -427,13 +494,15 @@
boolean isSuccess = false;
while(!isSuccess) {
DappWalletMineEntity walletMine = dappWalletMineDao.selectByMemberId(memberId);
-
+ if(ObjectUtil.isEmpty(walletMine)){
+ return;
+ }
if (type == 1) {
walletMine.setTotalAmount(walletMine.getTotalAmount().add(amount));
walletMine.setAvailableAmount(walletMine.getAvailableAmount().add(amount));
} else {
if (amount.compareTo(walletMine.getAvailableAmount()) > 0) {
- throw new FebsException("DMD Not Enough");
+ throw new FebsException("Not Enough");
}
walletMine.setTotalAmount(walletMine.getTotalAmount().subtract(amount));
walletMine.setAvailableAmount(walletMine.getAvailableAmount().subtract(amount));
@@ -547,4 +616,366 @@
}
}
+
+ @Override
+ public Long transferA(TransferADto transferADto) {
+ DappMemberEntity member = LoginUserUtil.getAppUser();
+ DappMemberEntity dappMemberEntity = dappMemberDao.selectById(member.getId());
+
+ String upgrade = redisUtils.getString("APP_UPGRADE");
+ if ("upgrade".equals(upgrade)) {
+ throw new FebsException("功能升级中");
+ }
+
+// if (transferADto.getType() != 2) {
+// member = dappMemberDao.selectById(member.getId());
+// if (member.getActiveStatus() == 1) {
+// throw new FebsException("Do not repeat purchase");
+// }
+// }
+ /**
+ * buyType=1,余额购买
+ */
+ if (transferADto.getBuyType() == 1) {
+ DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(member.getId());
+ if (transferADto.getAmount().compareTo(walletCoin.getAvailableAmount()) > 0) {
+ throw new FebsException("Balance Not Enough");
+ }
+
+ updateWalletCoinWithLock(transferADto.getAmount(), member.getId(), 2);
+
+ DappFundFlowEntity fundFlow = new DappFundFlowEntity(
+ member.getId(),
+ transferADto.getAmount().negate(),
+ FundFlowEnum.BUY_A_COIN.getCode(),
+ 2,
+ transferADto.getFee(),
+ transferADto.getTxHash());
+ dappFundFlowDao.insert(fundFlow);
+ } else {
+ /**
+ * buyType=2,钱包购买
+ * 4:入金,买入A币
+ */
+ int type = FundFlowEnum.BUY_A_COIN.getCode();
+ // 1-认购 2-充值tfc
+ if (transferADto.getType() == 2) {
+ type = 6;
+ }
+ /**
+ * 第一次请求,生成一条资金流水ID,并且返回。
+ */
+ if (transferADto.getId() == null) {
+ /**
+ * 查询会员是否已经有正在进行中的入金记录
+ */
+ DappFundFlowEntity fundFlowOld = dappFundFlowDao.selectBymemberIdAndType(member.getId(),type,DappFundFlowEntity.WITHDRAW_STATUS_ING);
+ if(ObjectUtil.isNotEmpty(fundFlowOld)){
+ //网络问题导致第二次提交前,未成功就关闭了页面
+ if (fundFlowOld.getStatus() == 1 && StrUtil.isEmpty(fundFlowOld.getFromHash())) {
+ dappFundFlowDao.deleteById(fundFlowOld.getId());
+ throw new FebsException("Refresh and try again");
+ }
+ }
+ /**
+ * 验证账户是否有入金金额的10%的AUSD
+ */
+ DappUsdtPerkEntity dappUsdtPerkEntity = dappUsdtPerkEntityMapper.selectByMemberId(member.getId());
+ if(ObjectUtil.isEmpty(dappUsdtPerkEntity)){
+ dappUsdtPerkEntity = new DappUsdtPerkEntity();
+ dappUsdtPerkEntity.setMemberId(member.getId());
+ dappUsdtPerkEntityMapper.insert(dappUsdtPerkEntity);
+ }
+ BigDecimal ausdAmount = dappUsdtPerkEntity.getAusdAmount();
+ DataDictionaryCustom ausdPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.TRANSFER_A_AUSD_PERCENT.getType(),
+ PoolEnum.TRANSFER_A_AUSD_PERCENT.getCode()
+ );
+ BigDecimal ausdPercent = new BigDecimal(ausdPercentDic.getValue());
+ BigDecimal ausdPercentUsdt = transferADto.getAmount().multiply(ausdPercent);
+
+ DataDictionaryCustom ausdPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.TRANSFER_A_AUSD_PRICE.getType(),
+ PoolEnum.TRANSFER_A_AUSD_PRICE.getCode()
+ );
+ BigDecimal ausdPrice = new BigDecimal(ausdPriceDic.getValue());
+ BigDecimal ausdAmountNeed = ausdPercentUsdt.divide(ausdPrice);
+ if(BigDecimal.ZERO.compareTo(ausdAmount) >= 0){
+ throw new FebsException("AUSD数量不足");
+ }
+ if(ausdAmountNeed.compareTo(ausdAmount) > 0){
+ throw new FebsException("AUSD数量不足");
+ }
+ /**
+ * 出局复投要求等于戓大于自己上次投资金额
+ */
+ BigDecimal maxAmount = dappChargeUsdtMapper.selectByMaxAmountMemberId(member.getId());
+ if(maxAmount.compareTo(transferADto.getAmount()) > 0){
+ throw new FebsException("投资金额不能小于"+maxAmount.setScale(4,BigDecimal.ROUND_DOWN));
+ }
+ //生成一条进行中的入金资金流水记录
+ DappFundFlowEntity fundFlow = new DappFundFlowEntity(
+ member.getId(),
+ transferADto.getAmount(),
+ type,
+ 1,
+ ausdAmountNeed,
+ transferADto.getTxHash());
+ dappFundFlowDao.insert(fundFlow);
+ return fundFlow.getId();
+ }
+
+ if ("success".equals(transferADto.getFlag())) {
+ DappFundFlowEntity flow = dappFundFlowDao.selectById(transferADto.getId());
+ if(DappFundFlowEntity.WITHDRAW_STATUS_AGREE == flow.getStatus()){
+ throw new FebsException("请勿重复提交");
+ }
+ /**
+ * 生成会员入金买A币的记录
+ */
+ DappChargeUsdtEntity dappChargeUsdtEntity = new DappChargeUsdtEntity(
+ member.getId(),
+ dappMemberEntity.getAddress(),
+ transferADto.getTxHash(),
+ 2,
+ transferADto.getAmount(),
+ BigDecimal.ZERO,
+ BigDecimal.ZERO);
+ dappChargeUsdtMapper.insert(dappChargeUsdtEntity);
+ /**
+ * 减少用户的AUSD数量
+ */
+ DappUsdtPerkEntity dappUsdtPerkEntity = dappUsdtPerkEntityMapper.selectByMemberId(member.getId());
+ BigDecimal ausdAmount = dappUsdtPerkEntity.getAusdAmount();
+ ausdAmount = ausdAmount.subtract(flow.getFee()).setScale(4,BigDecimal.ROUND_DOWN);
+ dappUsdtPerkEntity.setAusdAmount(ausdAmount);
+ dappUsdtPerkEntityMapper.updateById(dappUsdtPerkEntity);
+ /**
+ * 流水关联用户购买记录
+ */
+ flow.setSystemProfitId(dappChargeUsdtEntity.getId());
+ /**
+ * 链上转账的hash值
+ */
+ flow.setFromHash(transferADto.getTxHash());
+ flow.setStatus(DappFundFlowEntity.WITHDRAW_STATUS_AGREE);
+ dappFundFlowDao.updateById(flow);
+ dappMemberDao.updateMemberActiveStatus(1,member.getId());
+ /**
+ * 发送消息处理返利逻辑
+ */
+ chainProducer.sendAntACoinInMsg(flow.getId());
+ /**
+ * 发送消息处理代理升级
+ */
+ chainProducer.sendAntMemberLevelMsg(member.getId());
+ } else {
+ DappFundFlowEntity flow = dappFundFlowDao.selectById(transferADto.getId());
+ if (flow.getStatus() == 1) {
+ dappFundFlowDao.deleteById(transferADto.getId());
+ }
+ }
+ }
+ return null;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void mineToCoin(MineToCoinDto mineToCoinDto) {
+ /**
+ * 资产钱包转帐到闪兑钱包3% 手续费(扣币)
+ * 4、增加闪对钱包
+ * 5、增加流水
+ */
+ DappMemberEntity member = LoginUserUtil.getAppUser();
+ DappMemberEntity dappMemberEntity = dappMemberDao.selectById(member.getId());
+
+ BigDecimal aCoinCnt = mineToCoinDto.getACoinCnt();
+ if(BigDecimal.ZERO.compareTo(aCoinCnt) >= 0){
+ throw new FebsException("输入正确的数量");
+ }
+
+ DappWalletMineEntity dappWalletMineEntity = dappWalletMineDao.selectByMemberId(dappMemberEntity.getId());
+ BigDecimal availableAmount = dappWalletMineEntity.getAvailableAmount();
+ if(availableAmount.compareTo(aCoinCnt) < 0){
+ throw new FebsException("数量不足");
+ }
+ //减少资产钱包
+ this.updateWalletMineWithLock(aCoinCnt,dappMemberEntity.getId(),2);
+ //插入资产闪对的流水
+ DappFundFlowEntity aCoinCntFlow = new DappFundFlowEntity(
+ dappMemberEntity.getId(),
+ aCoinCnt.negate(),
+ FundFlowEnum.WALLET_MINE_TO_COIN.getCode(),
+ 2,
+ BigDecimal.ZERO);
+ dappFundFlowDao.insert(aCoinCntFlow);
+ //闪对钱包3% 手续费(扣币)
+ DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.WALLET_MINE_TO_COIN_PERCENT.getType(),
+ PoolEnum.WALLET_MINE_TO_COIN_PERCENT.getCode());
+ BigDecimal feePercent = new BigDecimal(StrUtil.isEmpty(dic.getValue()) ? "0.03" : dic.getValue());
+ //手续费
+ BigDecimal feeCnt = aCoinCnt.multiply(feePercent).setScale(4,BigDecimal.ROUND_DOWN);
+ //闪对钱包获取的
+ BigDecimal aCoinCntReal = aCoinCnt.subtract(feeCnt).setScale(4, BigDecimal.ROUND_DOWN);
+ //增加闪对钱包
+ this.updateWalletCoinWithLock(aCoinCntReal,dappMemberEntity.getId(),1);
+ //插入资产闪对的流水
+ DappFundFlowEntity dappFundFlowEntity = new DappFundFlowEntity(
+ dappMemberEntity.getId(),
+ aCoinCntReal,
+ FundFlowEnum.WALLET_MINE_TO_COIN.getCode(),
+ 2,
+ BigDecimal.ZERO);
+ dappFundFlowDao.insert(dappFundFlowEntity);
+
+ //插入资产闪对手续费的流水
+ DappFundFlowEntity memberFeeflow = new DappFundFlowEntity(
+ dappMemberEntity.getId(),
+ feeCnt.negate(),
+ FundFlowEnum.WALLET_MINE_TO_COIN_FEE.getCode(),
+ 2,
+ BigDecimal.ZERO);
+ dappFundFlowDao.insert(memberFeeflow);
+ //插入资产闪对手续费的流水
+ DappFundFlowEntity dappFundFlowEntityFee = new DappFundFlowEntity(
+ 1L,
+ feeCnt,
+ FundFlowEnum.WALLET_MINE_TO_COIN_FEE.getCode(),
+ 2,
+ BigDecimal.ZERO);
+ dappFundFlowDao.insert(dappFundFlowEntityFee);
+ this.updateWalletMineWithLock(feeCnt,1L,1);
+ }
+
+ @Override
+ public Long transferAusd(TransferAusdDto transferAusdDto) {
+ DappMemberEntity member = LoginUserUtil.getAppUser();
+ DappMemberEntity dappMemberEntity = dappMemberDao.selectById(member.getId());
+
+ String upgrade = redisUtils.getString("APP_UPGRADE");
+ if ("upgrade".equals(upgrade)) {
+ throw new FebsException("功能升级中");
+ }
+
+// if (transferAusdDto.getType() != 2) {
+// member = dappMemberDao.selectById(member.getId());
+// if (member.getActiveStatus() == 1) {
+// throw new FebsException("Do not repeat purchase");
+// }
+// }
+ /**
+ * buyType=1,余额购买
+ */
+ if (transferAusdDto.getBuyType() == 1) {
+ DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(member.getId());
+ if (transferAusdDto.getAmount().compareTo(walletCoin.getAvailableAmount()) > 0) {
+ throw new FebsException("Balance Not Enough");
+ }
+
+ updateWalletCoinWithLock(transferAusdDto.getAmount(), member.getId(), 2);
+
+ DappFundFlowEntity fundFlow = new DappFundFlowEntity(
+ member.getId(),
+ transferAusdDto.getAmount().negate(),
+ FundFlowEnum.BUY_AUSD_COIN.getCode(),
+ 2,
+ transferAusdDto.getFee(),
+ transferAusdDto.getTxHash());
+ dappFundFlowDao.insert(fundFlow);
+ } else {
+ /**
+ * buyType=2,钱包购买
+ * 4:入金,买入A币
+ */
+ int type = FundFlowEnum.BUY_AUSD_COIN.getCode();
+ // 1-认购 2-充值tfc
+ if (transferAusdDto.getType() == 2) {
+ type = 6;
+ }
+ /**
+ * 第一次请求,生成一条资金流水ID,并且返回。
+ */
+ if (transferAusdDto.getId() == null) {
+ /**
+ * 查询会员是否已经有正在进行中的入金记录
+ */
+ DappFundFlowEntity fundFlowOld = dappFundFlowDao.selectBymemberIdAndType(member.getId(),type,DappFundFlowEntity.WITHDRAW_STATUS_ING);
+ if(ObjectUtil.isNotEmpty(fundFlowOld)){
+ //网络问题导致第二次提交前,未成功就关闭了页面
+ if (fundFlowOld.getStatus() == 1 && StrUtil.isEmpty(fundFlowOld.getFromHash())) {
+ dappFundFlowDao.deleteById(fundFlowOld.getId());
+ throw new FebsException("Refresh and try again");
+ }
+ }
+ //生成一条进行中的入金资金流水记录
+ DappFundFlowEntity fundFlow = new DappFundFlowEntity(
+ member.getId(),
+ transferAusdDto.getAmount(),
+ type,
+ 1,
+ transferAusdDto.getFee(),
+ transferAusdDto.getTxHash());
+ dappFundFlowDao.insert(fundFlow);
+ return fundFlow.getId();
+ }
+
+ if ("success".equals(transferAusdDto.getFlag())) {
+ DappFundFlowEntity flow = dappFundFlowDao.selectById(transferAusdDto.getId());
+ if(DappFundFlowEntity.WITHDRAW_STATUS_AGREE == flow.getStatus()){
+ throw new FebsException("请勿重复提交");
+ }
+ /**
+ * 增加用户的AUSD数量
+ */
+ BigDecimal amount = transferAusdDto.getAmount();
+ DataDictionaryCustom ausdPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PoolEnum.TRANSFER_A_AUSD_PRICE.getType(),
+ PoolEnum.TRANSFER_A_AUSD_PRICE.getCode()
+ );
+ BigDecimal ausdPrice = new BigDecimal(ausdPriceDic.getValue());
+ BigDecimal ausdCnt = amount.divide(ausdPrice, 4, BigDecimal.ROUND_DOWN);
+
+ DappUsdtPerkEntity dappUsdtPerkEntity = dappUsdtPerkEntityMapper.selectByMemberId(member.getId());
+ if(ObjectUtil.isEmpty(dappUsdtPerkEntity)){
+ dappUsdtPerkEntity = new DappUsdtPerkEntity();
+ dappUsdtPerkEntity.setMemberId(member.getId());
+ dappUsdtPerkEntity.setAmount(BigDecimal.ZERO);
+ dappUsdtPerkEntity.setAusdAmount(BigDecimal.ZERO);
+ dappUsdtPerkEntityMapper.insert(dappUsdtPerkEntity);
+ }
+ BigDecimal ausdAmount = dappUsdtPerkEntity.getAusdAmount();
+ ausdAmount = ausdAmount.add(ausdCnt).setScale(4,BigDecimal.ROUND_DOWN);
+ dappUsdtPerkEntity.setAusdAmount(ausdAmount);
+ dappUsdtPerkEntityMapper.updateById(dappUsdtPerkEntity);
+ /**
+ * 链上转账的hash值
+ */
+ flow.setFromHash(transferAusdDto.getTxHash());
+ flow.setStatus(DappFundFlowEntity.WITHDRAW_STATUS_AGREE);
+ dappFundFlowDao.updateById(flow);
+ } else {
+ DappFundFlowEntity flow = dappFundFlowDao.selectById(transferAusdDto.getId());
+ if (flow.getStatus() == 1) {
+ dappFundFlowDao.deleteById(transferAusdDto.getId());
+ }
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public List<DappFundFlowVo> getRecordVoInPage(RecordInPageDto recordInPageDto) {
+ Page<DappFundFlowVo> page = new Page<>(recordInPageDto.getPageNum(), recordInPageDto.getPageSize());
+
+ DappMemberEntity member = LoginUserUtil.getAppUser();
+ DappFundFlowEntity dappFundFlowEntity = new DappFundFlowEntity();
+ if (recordInPageDto.getType() != null && recordInPageDto.getType() != 0) {
+ dappFundFlowEntity.setType(recordInPageDto.getType());
+ }
+ dappFundFlowEntity.setMemberId(member.getId());
+ IPage<DappFundFlowVo> records = dappFundFlowDao.selectVoInPage(page, dappFundFlowEntity);
+ return records.getRecords();
+ }
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/vo/AKLineLimitVo.java b/src/main/java/cc/mrbird/febs/dapp/vo/AKLineLimitVo.java
new file mode 100644
index 0000000..ffd42bb
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/vo/AKLineLimitVo.java
@@ -0,0 +1,26 @@
+package cc.mrbird.febs.dapp.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@ApiModel(value = "AKLineLimitVo", description = "K线数据")
+public class AKLineLimitVo {
+
+ private BigDecimal openPrice;
+
+ private BigDecimal closePrice;
+
+ private BigDecimal lowestPrice;
+
+ private BigDecimal highestPrice;
+
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date createTime;
+
+
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/vo/AKLineVo.java b/src/main/java/cc/mrbird/febs/dapp/vo/AKLineVo.java
new file mode 100644
index 0000000..c90d189
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/vo/AKLineVo.java
@@ -0,0 +1,35 @@
+package cc.mrbird.febs.dapp.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@ApiModel(value = "AKLineVo", description = "K线数据")
+public class AKLineVo {
+
+ @ApiModelProperty(value = "openPrice")
+ private BigDecimal openPrice;
+
+
+ @ApiModelProperty(value = "closePrice")
+ private BigDecimal closePrice;
+
+
+ @ApiModelProperty(value = "lowestPrice")
+ private BigDecimal lowestPrice;
+
+
+ @ApiModelProperty(value = "highestPrice")
+ private BigDecimal highestPrice;
+
+
+ @ApiModelProperty(value = "时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date createTime;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/vo/DappFundFlowVo.java b/src/main/java/cc/mrbird/febs/dapp/vo/DappFundFlowVo.java
new file mode 100644
index 0000000..966723b
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/vo/DappFundFlowVo.java
@@ -0,0 +1,22 @@
+package cc.mrbird.febs.dapp.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@ApiModel(value = "DappFundFlowVo", description = "流水信息")
+public class DappFundFlowVo {
+ @ApiModelProperty(value = "金额")
+ private BigDecimal amount;
+
+ @ApiModelProperty(value = "类型")
+ private Integer type;
+
+ @ApiModelProperty(value = "时间")
+ private String createTime;
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/vo/DappMemberInfoVo.java b/src/main/java/cc/mrbird/febs/dapp/vo/DappMemberInfoVo.java
index 643deef..e89949c 100644
--- a/src/main/java/cc/mrbird/febs/dapp/vo/DappMemberInfoVo.java
+++ b/src/main/java/cc/mrbird/febs/dapp/vo/DappMemberInfoVo.java
@@ -4,6 +4,8 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import java.math.BigDecimal;
+
@Data
@ApiModel(value = "DappMemberInfoVo", description = "会员信息")
public class DappMemberInfoVo {
@@ -13,4 +15,32 @@
@ApiModelProperty(value = "代理身份")
private String accountType;
+
+ @ApiModelProperty(value = "资产余额")
+ private BigDecimal propertyAmount;
+
+ @ApiModelProperty(value = "闪兑余额")
+ private BigDecimal exchangeAmount;
+
+ @ApiModelProperty(value = "ASUD余额")
+ private BigDecimal ausdAmount;
+
+ @ApiModelProperty(value = "补贴额度")
+ private BigDecimal amount;
+
+ @ApiModelProperty(value = "AUSD的价格")
+ private BigDecimal ausdPrice;
+
+ @ApiModelProperty(value = "A币的价格")
+ private BigDecimal coinAPrice;
+
+ @ApiModelProperty(value = "资产到闪兑的手续费比例")
+ private BigDecimal mineToCoinFee;
+
+ @ApiModelProperty(value = "提现手续费比例")
+ private BigDecimal coinOutFee;
+
+ @ApiModelProperty(value = "我的贡献值")
+ private BigDecimal nftDevote;
+
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/vo/MyInviteChildInfoVo.java b/src/main/java/cc/mrbird/febs/dapp/vo/MyInviteChildInfoVo.java
new file mode 100644
index 0000000..67e98cf
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/vo/MyInviteChildInfoVo.java
@@ -0,0 +1,23 @@
+package cc.mrbird.febs.dapp.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel(value = "MyInviteChildInfoVo", description = "我的推荐-只显示直推数据")
+public class MyInviteChildInfoVo {
+
+ @ApiModelProperty(value = "我的地址")
+ private String address;
+ @ApiModelProperty(value = "账户类型")
+ private String accountType;
+ @ApiModelProperty(value = "个人算力")
+ private BigDecimal memberAchieve;
+ @ApiModelProperty(value = "大区算力")
+ private BigDecimal maxAchieve;
+ @ApiModelProperty(value = "小区算力")
+ private BigDecimal minAchieve;
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/vo/MyInviteInfoVo.java b/src/main/java/cc/mrbird/febs/dapp/vo/MyInviteInfoVo.java
new file mode 100644
index 0000000..d127113
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/vo/MyInviteInfoVo.java
@@ -0,0 +1,26 @@
+package cc.mrbird.febs.dapp.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@ApiModel(value = "MyInviteInfoVo", description = "我的推广码")
+public class MyInviteInfoVo {
+ @ApiModelProperty(value = "我的地址")
+ private String memberAddress;
+ @ApiModelProperty(value = "我的推荐人个人算力")
+ private BigDecimal memberAchieve;
+ @ApiModelProperty(value = "我的推荐人地址")
+ private String referenceAddress;
+ @ApiModelProperty(value = "我的算力大区算力")
+ private BigDecimal maxAchieve;
+ @ApiModelProperty(value = "我的算力小区算力")
+ private BigDecimal minAchieve;
+ @ApiModelProperty(value = "我的推荐-只显示直推数据")
+ private List<MyInviteChildInfoVo> myInviteChildInfoVos;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/vo/TeamListVo.java b/src/main/java/cc/mrbird/febs/dapp/vo/TeamListVo.java
index f5ee998..9c5b8b5 100644
--- a/src/main/java/cc/mrbird/febs/dapp/vo/TeamListVo.java
+++ b/src/main/java/cc/mrbird/febs/dapp/vo/TeamListVo.java
@@ -17,19 +17,10 @@
@ApiModel(value = "TeamLIstVo", description = "团队列表接口返回参数类")
public class TeamListVo {
- @ApiModelProperty(value = "地址")
- private String address;
-
- @ApiModelProperty(value = "等级")
- private String accountType;
-
- @ApiModelProperty(value = "是否加入动能")
- private Integer activeStatus;
-
@ApiModelProperty(value = "直推人数")
private int directCnt;
- @ApiModelProperty(value = "子节点")
- private List<TeamListVo> children = new ArrayList<>();
+ @ApiModelProperty(value = "团队业绩,不包含本人的")
+ private BigDecimal achieve;
}
diff --git a/src/main/java/cc/mrbird/febs/job/BnbTransferJob.java b/src/main/java/cc/mrbird/febs/job/BnbTransferJob.java
index aaffcaa..da0db31 100644
--- a/src/main/java/cc/mrbird/febs/job/BnbTransferJob.java
+++ b/src/main/java/cc/mrbird/febs/job/BnbTransferJob.java
@@ -1,7 +1,14 @@
package cc.mrbird.febs.job;
import cc.mrbird.febs.dapp.entity.DappFundFlowEntity;
+import cc.mrbird.febs.dapp.entity.DataDictionaryCustom;
+import cc.mrbird.febs.dapp.enumerate.FundFlowEnum;
+import cc.mrbird.febs.dapp.enumerate.MemberLevelEnum;
+import cc.mrbird.febs.dapp.enumerate.NodeCodeEnum;
+import cc.mrbird.febs.dapp.enumerate.PoolEnum;
import cc.mrbird.febs.dapp.mapper.DappFundFlowDao;
+import cc.mrbird.febs.dapp.mapper.DataDictionaryCustomMapper;
+import cc.mrbird.febs.dapp.service.DappSystemService;
import cc.mrbird.febs.rabbit.producer.ChainProducer;
import cn.hutool.core.util.ObjectUtil;
import lombok.extern.slf4j.Slf4j;
@@ -9,6 +16,9 @@
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+
@Slf4j
@Component
@ConditionalOnProperty(prefix = "system", name = "online-transfer", havingValue = "true")
@@ -20,6 +30,10 @@
private DappFundFlowDao dappFundFlowDao;
@Autowired
private ChainProducer chainProducer;
+ @Autowired
+ private DataDictionaryCustomMapper dataDictionaryCustomMapper;
+ @Autowired
+ private DappSystemService dappSystemService;
@Scheduled(cron = "0/30 * * * * ? ")
public void BnbTransferAgain() {
@@ -32,4 +46,151 @@
}
}
+ /**
+ * 20%所有人平分的底池
+ */
+// @Scheduled(cron = "0 0 1 * * ?")
+// public void memberPool() {
+// DataDictionaryCustom nodeThreePoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+// PoolEnum.POOL_ALL_MEMBER_A_CNT.getType(),
+// PoolEnum.POOL_ALL_MEMBER_A_CNT.getCode()
+// );
+// BigDecimal nodeThreePoolDicCnt = new BigDecimal(nodeThreePoolDic.getValue());
+// if(BigDecimal.ZERO.compareTo(nodeThreePoolDicCnt) >= 0){
+// return;
+// }
+// BigDecimal nodeThreePoolDicCntReal = dappSystemService.nodePoolPerk(nodeThreePoolDicCnt, MemberLevelEnum.MEMBER.getType(), FundFlowEnum.POOL_MEMBER_A_CNT.getCode());
+// BigDecimal nodeThreePoolDicCntAva = nodeThreePoolDicCnt.subtract(nodeThreePoolDicCntReal);
+// nodeThreePoolDic.setValue(nodeThreePoolDicCntAva.compareTo(BigDecimal.ZERO) > 0 ? nodeThreePoolDicCntAva.toString() : "0");
+// dataDictionaryCustomMapper.updateById(nodeThreePoolDic);
+// }
+ /**
+ * NODE_5_POOL
+ * NODE_4_POOL
+ * NODE_3_POOL
+ * 节点底池的每日分配
+ */
+// @Scheduled(cron = "0 0 1 * * ?")
+// public void NodeThreePool() {
+// DataDictionaryCustom nodeThreePoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+// PoolEnum.NODE_3_POOL.getType(),
+// PoolEnum.NODE_3_POOL.getCode()
+// );
+// BigDecimal nodeThreePoolDicCnt = new BigDecimal(nodeThreePoolDic.getValue());
+// if(BigDecimal.ZERO.compareTo(nodeThreePoolDicCnt) >= 0){
+// return;
+// }
+// BigDecimal nodeThreePoolDicCntReal = dappSystemService.nodePoolPerk(nodeThreePoolDicCnt, MemberLevelEnum.NODE_3.getType(), FundFlowEnum.DAO_3_NODE_PERK.getCode());
+// BigDecimal nodeThreePoolDicCntAva = nodeThreePoolDicCnt.subtract(nodeThreePoolDicCntReal);
+// nodeThreePoolDic.setValue(nodeThreePoolDicCntAva.compareTo(BigDecimal.ZERO) > 0 ? nodeThreePoolDicCntAva.toString() : "0");
+// dataDictionaryCustomMapper.updateById(nodeThreePoolDic);
+// }
+
+ /**
+ * 节点四的每日分配
+ */
+ @Scheduled(cron = "0 0 1 * * ?")
+// public void NodeFourFivePool() {
+// DataDictionaryCustom nodeFourPoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+// PoolEnum.NODE_4_POOL.getType(),
+// PoolEnum.NODE_4_POOL.getCode()
+// );
+// BigDecimal nodeFourPoolDicCnt = new BigDecimal(nodeFourPoolDic.getValue());
+// if(BigDecimal.ZERO.compareTo(nodeFourPoolDicCnt) >= 0){
+// return;
+// }
+// BigDecimal nodeFourPoolDicCntReal = dappSystemService.nodePoolPerk(nodeFourPoolDicCnt, MemberLevelEnum.NODE_4.getType(), FundFlowEnum.DAO_4_NODE_PERK.getCode());
+// BigDecimal nodeFourPoolDicCntAva = nodeFourPoolDicCnt.subtract(nodeFourPoolDicCntReal);
+// nodeFourPoolDic.setValue(nodeFourPoolDicCntAva.compareTo(BigDecimal.ZERO) > 0 ? nodeFourPoolDicCntAva.toString() : "0");
+// dataDictionaryCustomMapper.updateById(nodeFourPoolDic);
+// }
+
+ /**
+ * 节点五的每日分配
+ */
+ @Scheduled(cron = "0 0 1 * * ?")
+// public void NodeFivePool() {
+// DataDictionaryCustom nodeFivePoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+// PoolEnum.NODE_5_POOL.getType(),
+// PoolEnum.NODE_5_POOL.getCode()
+// );
+// BigDecimal nodeFivePoolDicCnt = new BigDecimal(nodeFivePoolDic.getValue());
+// if(BigDecimal.ZERO.compareTo(nodeFivePoolDicCnt) >= 0){
+// return;
+// }
+// BigDecimal nodeFivePoolDicCntReal = dappSystemService.nodePoolPerk(nodeFivePoolDicCnt, MemberLevelEnum.NODE_5.getType(), FundFlowEnum.DAO_5_NODE_PERK.getCode());
+// BigDecimal nodeFivePoolDicCntAva = nodeFivePoolDicCnt.subtract(nodeFivePoolDicCntReal);
+// nodeFivePoolDic.setValue(nodeFivePoolDicCntAva.compareTo(BigDecimal.ZERO) > 0 ? nodeFivePoolDicCntAva.toString() : "0");
+// dataDictionaryCustomMapper.updateById(nodeFivePoolDic);
+// }
+
+ /**
+ * 节点五的平级奖励每日分配
+ */
+ @Scheduled(cron = "0 0 1 * * ?")
+// public void NodeFiveEqualsPool() {
+// DataDictionaryCustom nodeFivePoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+// PoolEnum.NODE_5_EQUALS_POOL.getType(),
+// PoolEnum.NODE_5_EQUALS_POOL.getCode()
+// );
+// BigDecimal nodeFivePoolDicCnt = new BigDecimal(nodeFivePoolDic.getValue());
+// if(BigDecimal.ZERO.compareTo(nodeFivePoolDicCnt) >= 0){
+// return;
+// }
+// BigDecimal nodeFivePoolDicCntReal = dappSystemService.nodePoolEqualsPerk(nodeFivePoolDicCnt, MemberLevelEnum.NODE_5.getType(), FundFlowEnum.DAO_5_NODE_EQUALS_PERK.getCode());
+// BigDecimal nodeFivePoolDicCntAva = nodeFivePoolDicCnt.subtract(nodeFivePoolDicCntReal);
+// nodeFivePoolDic.setValue(nodeFivePoolDicCntAva.compareTo(BigDecimal.ZERO) > 0 ? nodeFivePoolDicCntAva.toString() : "0");
+// dataDictionaryCustomMapper.updateById(nodeFivePoolDic);
+// }
+
+ /**
+ * 超级节点奖励每日分配
+ */
+ @Scheduled(cron = "0 0 1 * * ?")
+// public void NodeAPercentPool() {
+// DataDictionaryCustom nodeFivePoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+// PoolEnum.NODE_A_PERCENT_POOL.getType(),
+// PoolEnum.NODE_A_PERCENT_POOL.getCode()
+// );
+// BigDecimal nodeFivePoolDicCnt = new BigDecimal(nodeFivePoolDic.getValue());
+// if(BigDecimal.ZERO.compareTo(nodeFivePoolDicCnt) >= 0){
+// return;
+// }
+// /**
+// * todo 超级节点的分红
+// */
+// BigDecimal nodeFivePoolDicCntReal = dappSystemService.superNodePoolPerk(nodeFivePoolDicCnt, NodeCodeEnum.SUPER_NODE.getCode(), FundFlowEnum.NODE_A_PERCENT_TO_MEMBER.getCode());
+// BigDecimal nodeFivePoolDicCntAva = nodeFivePoolDicCnt.subtract(nodeFivePoolDicCntReal);
+// nodeFivePoolDic.setValue(nodeFivePoolDicCntAva.compareTo(BigDecimal.ZERO) > 0 ? nodeFivePoolDicCntAva.toString() : "0");
+// dataDictionaryCustomMapper.updateById(nodeFivePoolDic);
+// }
+
+ /**
+ * A币全网每小时自动燃烧0.1%,燃烧按递减燃烧,按个人每小时0.1%每小时递减。
+ *
+ * A币技术做到资产钱包燃烧,闪兑钱包也要燃烧0.1%每小时
+ */
+ @Scheduled(cron = "0 0 * * * ?")
+ public void aCoinFire() {
+ dappSystemService.aCoinFire();
+ }
+
+ /**
+ * A币内网要做K线图,K线效果做到与交易所效果接近。
+ * 小时
+ */
+ @Scheduled(cron = "0 0 * * * ?")
+ public void aKlineJobHour() {
+ dappSystemService.aKlineJobHour();
+ }
+ /**
+ * A币内网要做K线图,K线效果做到与交易所效果接近。
+ * 日
+ */
+ @Scheduled(cron = "0 0 0 * * ?")
+ public void aKlineJobDay() {
+ dappSystemService.aKlineJobDay();
+ }
+
+
}
diff --git a/src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java b/src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java
index e5ae47f..8fbc5a8 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java
@@ -6,16 +6,48 @@
**/
public class QueueConstants {
- public static final String QUEUE_BNB_TRANSFER_TEST = "queue_bnb_agent_up_test";
- public static final String QUEUE_BNB_AGENT_UP = "queue_bnb_agent_up";
- public static final String QUEUE_BNB_TRANSFER = "queue_ant_transfer";
- public static final String QUEUE_MEMBER_OUT = "queue_bnb_member_out";
- public static final String QUEUE_LEVEL_PROFIT = "queue_bnb_level_profit_transfer";
+ public static final String QUEUE_BNB_TRANSFER_TEST = "queue_bnb_agent_up_test_test";
+ public static final String QUEUE_BNB_AGENT_UP = "queue_bnb_agent_up_test";
+ public static final String QUEUE_BNB_TRANSFER = "queue_ant_transfer_test";
+ public static final String QUEUE_MEMBER_OUT = "queue_bnb_member_out_test";
+ public static final String QUEUE_LEVEL_PROFIT = "queue_bnb_level_profit_transfer_test";
- public static final String ONLINE_TRANSFER = "queue_sdm_online_transfer";
- public static final String DISTRIB_PROFIT = "queue_sdm_distrib_profit";
- public static final String USER_BUY_REWARD = "queue_sdm_user_buy_reward";
- public static final String NFT_BOX = "queue_sdm_nft_box";
- public static final String ACHIEVE_TREE = "queue_sdm_achieve_tree";
- public static final String TFC_NEW_PRICE = "queue_tfc_new_price";
+ public static final String ONLINE_TRANSFER = "queue_sdm_online_transfer_test";
+ public static final String DISTRIB_PROFIT = "queue_sdm_distrib_profit_test";
+ public static final String USER_BUY_REWARD = "queue_sdm_user_buy_reward_test";
+ public static final String NFT_BOX = "queue_sdm_nft_box_test";
+ public static final String ACHIEVE_TREE = "queue_sdm_achieve_tree_test";
+ public static final String TFC_NEW_PRICE = "queue_tfc_new_price_test";
+ /**
+ * A 入金的消息 队列
+ */
+ public static final String QUEUE_ANT_A_CION_IN = "queue_ant_a_coin_in_test";
+ /**
+ * A 入金,转入A底池 队列
+ */
+ public static final String QUEUE_ANT_A_CION_IN_A_POOL = "queue_ant_a_coin_in_a_pool_test";
+ /**
+ * A 入金,转入B底池 队列
+ */
+ public static final String QUEUE_ANT_A_CION_IN_B_POOL = "queue_ant_a_coin_in_b_pool_test";
+ /**
+ * A 入金,5%节点 队列
+ */
+ public static final String QUEUE_ANT_A_CION_IN_NODE = "queue_ant_a_coin_in_node_test";
+ /**
+ * A 入金,极差奖 队列
+ */
+ public static final String QUEUE_ANT_A_CION_IN_LEVEL = "queue_ant_a_coin_in_level_test";
+ /**
+ * A 提现
+ */
+ public static final String QUEUE_ANT_A_CION_OUT = "queue_ant_a_coin_out_test";
+ /**
+ * A 会员升级
+ */
+ public static final String QUEUE_ANT_MEMBER_LEVEL = "queue_ant_member_level_test";
+ /**
+ * A k线数据
+ */
+ public static final String QUEUE_ANT_K_LINE = "queue_ant_k_line_test";
}
diff --git a/src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java b/src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java
index cb5c8b1..c6b4c31 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java
@@ -5,24 +5,40 @@
@Getter
public enum QueueEnum {
+ //A k线数据
+ ANT_K_LINE("exchange_ant_k_line_test", "route_key_ant_k_line_test", QueueConstants.QUEUE_ANT_K_LINE),
+ //A 会员升级
+ ANT_MEMBER_LEVEL("exchange_ant_member_level_test", "route_key_ant_member_level_test", QueueConstants.QUEUE_ANT_MEMBER_LEVEL),
+ //A 入金的消息
+ ANT_A_CION_OUT("exchange_ant_a_coin_out_test", "route_key_ant_a_coin_out_test", QueueConstants.QUEUE_ANT_A_CION_OUT),
+ //A 入金的消息
+ ANT_A_CION_IN_LEVEL("exchange_ant_a_coin_in_level_test", "route_key_ant_a_coin_in_level_test", QueueConstants.QUEUE_ANT_A_CION_IN_LEVEL),
+ //A 入金的消息
+ ANT_A_CION_IN_NODE("exchange_ant_a_coin_in_node_test", "route_key_ant_a_coin_in_node_test", QueueConstants.QUEUE_ANT_A_CION_IN_NODE),
+ //A 入金的消息
+ ANT_A_CION_IN_B_POOL("exchange_ant_a_coin_in_b_pool_test", "route_key_ant_a_coin_in_b_pool_test", QueueConstants.QUEUE_ANT_A_CION_IN_B_POOL),
+ //A 入金的消息
+ ANT_A_CION_IN_A_POOL("exchange_ant_a_coin_in_a_pool_test", "route_key_ant_a_coin_in_a_pool_test", QueueConstants.QUEUE_ANT_A_CION_IN_A_POOL),
+ //A 入金的消息
+ ANT_A_CION_IN("exchange_ant_a_coin_in_test", "route_key_ant_a_coin_in_test", QueueConstants.QUEUE_ANT_A_CION_IN),
//代理升级
- BNB_TRANSFER_TEST("exchange_bnb_agent_up_test", "route_key_bnb_agent_up_test", "queue_bnb_agent_up_test"),
+ BNB_TRANSFER_TEST("exchange_bnb_agent_up_test_test", "route_key_bnb_agent_up_test_test", "queue_bnb_agent_up_test_test"),
//代理升级
- BNB_AGENT_UP("exchange_bnb_agent_up", "route_key_bnb_agent_up", "queue_bnb_agent_up"),
+ BNB_AGENT_UP("exchange_bnb_agent_up_test", "route_key_bnb_agent_up_test", "queue_bnb_agent_up_test"),
//转账拨币
- BNB_TRANSFER("exchange_ant_transfer", "route_key_ant_transfer", "queue_ant_transfer"),
+ BNB_TRANSFER("exchange_ant_transfer_test", "route_key_ant_transfer_test", "queue_ant_transfer_test"),
//计算是否有人出局
- MEMBER_OUT("exchange_bnb_member_out", "route_key_bnb_member_out", "queue_bnb_member_out"),
+ MEMBER_OUT("exchange_bnb_member_out_test", "route_key_bnb_member_out_test", "queue_bnb_member_out_test"),
//层级奖励
- LEVEL_PROFIT("exchange_bnb_level_profit_transfer", "route_key_bnb_level_profit_transfer", "queue_bnb_level_profit_transfer"),
+ LEVEL_PROFIT("exchange_bnb_level_profit_transfer_test", "route_key_bnb_level_profit_transfer_test", "queue_bnb_level_profit_transfer_test"),
- ONLINE_TRANSFER("exchange_sdm_online_transfer", "route_key_sdm_online_transfer", "queue_sdm_online_transfer"),
- DISTRIB_PROFIT("exchange_sdm_distrib_profit", "route_key_sdm_distrib_profit", "queue_sdm_distrib_profit"),
- USER_BUY_REWARD("exchange_sdm_user_buy_reward", "route_key_sdm_user_buy_reward", "queue_sdm_user_buy_reward"),
- NFT_BOX("exchange_sdm_nft_box", "route_key_sdm_nft_box", "queue_sdm_nft_box"),
- ACHIEVE_TREE("exchange_sdm_achieve_tree", "route_key_sdm_achieve_tree", "queue_sdm_achieve_tree"),
- WITHDRAW_FEE("exchange_withdraw_fee", "route_key_withdraw_fee", "queue_withdraw_fee"),
- TFC_NEW_PRICE("exchange_tfc_new_price", "route_key_tfc_new_price", "queue_tfc_new_price");
+ ONLINE_TRANSFER("exchange_sdm_online_transfer_test", "route_key_sdm_online_transfer_test", "queue_sdm_online_transfer_test"),
+ DISTRIB_PROFIT("exchange_sdm_distrib_profit_test", "route_key_sdm_distrib_profit_test", "queue_sdm_distrib_profit_test"),
+ USER_BUY_REWARD("exchange_sdm_user_buy_reward_test", "route_key_sdm_user_buy_reward_test", "queue_sdm_user_buy_reward_test"),
+ NFT_BOX("exchange_sdm_nft_box_test", "route_key_sdm_nft_box_test", "queue_sdm_nft_box_test"),
+ ACHIEVE_TREE("exchange_sdm_achieve_tree_test", "route_key_sdm_achieve_tree_test", "queue_sdm_achieve_tree_test"),
+ WITHDRAW_FEE("exchange_withdraw_fee_test", "route_key_withdraw_fee_test", "queue_withdraw_fee_test"),
+ TFC_NEW_PRICE("exchange_tfc_new_price_test", "route_key_tfc_new_price_test", "queue_tfc_new_price_test");
private String exchange;
diff --git a/src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java b/src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java
index 99c73c0..3781345 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java
@@ -196,4 +196,148 @@
return BindingBuilder.bind(bnbTransferTestQueue()).to(bnbTransferTestExchange()).with(QueueEnum.BNB_TRANSFER_TEST.getRoute());
}
// === 消息测试 end ===
+
+
+ // === A 入金的消息 start ===
+ @Bean
+ public DirectExchange antACoinInExchange() {
+ return new DirectExchange(QueueEnum.ANT_A_CION_IN.getExchange());
+ }
+
+ @Bean
+ public Queue antACoinInQueue() {
+ return new Queue(QueueEnum.ANT_A_CION_IN.getQueue());
+ }
+
+ @Bean
+ public Binding antACoinInBind() {
+ return BindingBuilder.bind(antACoinInQueue()).to(antACoinInExchange()).with(QueueEnum.ANT_A_CION_IN.getRoute());
+ }
+ // === A 入金的消息 end ===
+
+
+ // === A 入金,转入A底池 start ===
+ @Bean
+ public DirectExchange antACoinInAPoolExchange() {
+ return new DirectExchange(QueueEnum.ANT_A_CION_IN_A_POOL.getExchange());
+ }
+
+ @Bean
+ public Queue antACoinInAPoolQueue() {
+ return new Queue(QueueEnum.ANT_A_CION_IN_A_POOL.getQueue());
+ }
+
+ @Bean
+ public Binding antACoinInAPoolBind() {
+ return BindingBuilder.bind(antACoinInAPoolQueue()).to(antACoinInAPoolExchange()).with(QueueEnum.ANT_A_CION_IN_A_POOL.getRoute());
+ }
+ // === A 入金,转入A底池 end ===
+
+
+ // === A 入金,转入B底池 start ===
+ @Bean
+ public DirectExchange antACoinInBPoolExchange() {
+ return new DirectExchange(QueueEnum.ANT_A_CION_IN_B_POOL.getExchange());
+ }
+
+ @Bean
+ public Queue antACoinInBPoolQueue() {
+ return new Queue(QueueEnum.ANT_A_CION_IN_B_POOL.getQueue());
+ }
+
+ @Bean
+ public Binding antACoinInBPoolBind() {
+ return BindingBuilder.bind(antACoinInBPoolQueue()).to(antACoinInBPoolExchange()).with(QueueEnum.ANT_A_CION_IN_B_POOL.getRoute());
+ }
+ // === A 入金,转入B底池 end ===
+
+
+ // === A 入金,5%节点 start ===
+ @Bean
+ public DirectExchange antACoinInNodeExchange() {
+ return new DirectExchange(QueueEnum.ANT_A_CION_IN_NODE.getExchange());
+ }
+
+ @Bean
+ public Queue antACoinInNodeQueue() {
+ return new Queue(QueueEnum.ANT_A_CION_IN_NODE.getQueue());
+ }
+
+ @Bean
+ public Binding antACoinInNodeBind() {
+ return BindingBuilder.bind(antACoinInNodeQueue()).to(antACoinInNodeExchange()).with(QueueEnum.ANT_A_CION_IN_NODE.getRoute());
+ }
+ // === A 入金,5%节点 end ===
+
+
+ // === A 入金,极差奖 start ===
+ @Bean
+ public DirectExchange antACoinInLevelExchange() {
+ return new DirectExchange(QueueEnum.ANT_A_CION_IN_LEVEL.getExchange());
+ }
+
+ @Bean
+ public Queue antACoinInLevelQueue() {
+ return new Queue(QueueEnum.ANT_A_CION_IN_LEVEL.getQueue());
+ }
+
+ @Bean
+ public Binding antACoinInLevelBind() {
+ return BindingBuilder.bind(antACoinInLevelQueue()).to(antACoinInLevelExchange()).with(QueueEnum.ANT_A_CION_IN_LEVEL.getRoute());
+ }
+ // === A 入金,极差奖 end ===
+
+
+ // === A 提现 start ===
+ @Bean
+ public DirectExchange antACoinOutExchange() {
+ return new DirectExchange(QueueEnum.ANT_A_CION_OUT.getExchange());
+ }
+
+ @Bean
+ public Queue antACoinOutQueue() {
+ return new Queue(QueueEnum.ANT_A_CION_OUT.getQueue());
+ }
+
+ @Bean
+ public Binding antACoinOutBind() {
+ return BindingBuilder.bind(antACoinOutQueue()).to(antACoinOutExchange()).with(QueueEnum.ANT_A_CION_OUT.getRoute());
+ }
+ // === A 提现 end ===
+
+
+ // === A 会员升级 start ===
+ @Bean
+ public DirectExchange antMemberLevelExchange() {
+ return new DirectExchange(QueueEnum.ANT_MEMBER_LEVEL.getExchange());
+ }
+
+ @Bean
+ public Queue antMemberLevelQueue() {
+ return new Queue(QueueEnum.ANT_MEMBER_LEVEL.getQueue());
+ }
+
+ @Bean
+ public Binding antMemberLevelBind() {
+ return BindingBuilder.bind(antMemberLevelQueue()).to(antMemberLevelExchange()).with(QueueEnum.ANT_MEMBER_LEVEL.getRoute());
+ }
+ // === A 会员升级 end ===
+
+
+ // === A k线数据 start ===
+ @Bean
+ public DirectExchange antKLineExchange() {
+ return new DirectExchange(QueueEnum.ANT_K_LINE.getExchange());
+ }
+
+ @Bean
+ public Queue antKLineQueue() {
+ return new Queue(QueueEnum.ANT_K_LINE.getQueue());
+ }
+
+ @Bean
+ public Binding antKLineBind() {
+ return BindingBuilder.bind(antKLineQueue()).to(antKLineExchange()).with(QueueEnum.ANT_K_LINE.getRoute());
+ }
+ // === A k线数据 end ===
}
diff --git a/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java b/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java
index bd2471e..e29c987 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java
@@ -90,4 +90,84 @@
// log.info("代理升级:{}", id);
// dappSystemService.agentUp(id);
// }
+
+ /**
+ * 消费---A 入金的消息
+ * @param id
+ */
+ @RabbitListener(queues = QueueConstants.QUEUE_ANT_A_CION_IN)
+ public void AntACoinInMsg(Long id) {
+ log.info("消费---A 入金的消息:{}", id);
+ dappSystemService.AntACoinInMsg(id);
+ }
+
+ /**
+ * 消费---A 入金,转入A底池
+ * @param id
+ */
+ @RabbitListener(queues = QueueConstants.QUEUE_ANT_A_CION_IN_A_POOL)
+ public void AntACoinAPollInMsg(Long id) {
+ log.info("消费---A 入金,转入A底池:{}", id);
+ dappSystemService.AntACoinAPollInMsg(id);
+ }
+
+ /**
+ * 消费---A 入金,转入B底池
+ * @param id
+ */
+ @RabbitListener(queues = QueueConstants.QUEUE_ANT_A_CION_IN_B_POOL)
+ public void AntACoinBPollInMsg(Long id) {
+ log.info("消费---A 入金,转入B底池:{}", id);
+ dappSystemService.AntACoinBPollInMsg(id);
+ }
+
+ /**
+ * 消费---A 入金,5%节点
+ * @param id
+ */
+ @RabbitListener(queues = QueueConstants.QUEUE_ANT_A_CION_IN_NODE)
+ public void antACoinInNodeMsg(Long id) {
+ log.info("消费---A 入金,转入5%节点:{}", id);
+ dappSystemService.antACoinInNodeMsg(id);
+ }
+
+ /**
+ * 消费---A 入金,10%极差奖
+ * @param id
+ */
+ @RabbitListener(queues = QueueConstants.QUEUE_ANT_A_CION_IN_LEVEL)
+ public void antACoinInLevelMsg(Long id) {
+ log.info("消费---A 入金,转入10%极差奖:{}", id);
+ dappSystemService.antACoinInLevelMsg(id);
+ }
+
+ /**
+ * 提现
+ * @param id
+ */
+ @RabbitListener(queues = QueueConstants.QUEUE_ANT_A_CION_OUT)
+ public void antACoinOutMsg(Long id) {
+ log.info("消费---A 提现:{}", id);
+ dappSystemService.antACoinOutMsg(id);
+ }
+
+ /**
+ * A 代理升级
+ * @param memberId
+ */
+ @RabbitListener(queues = QueueConstants.QUEUE_ANT_MEMBER_LEVEL)
+ public void antMemberLevelMsg(Long memberId) {
+ log.info("消费---A 代理升级:{}", memberId);
+ dappSystemService.antMemberLevelMsg(memberId);
+ }
+
+ /**
+ * A k线数据
+ * @param type
+ */
+ @RabbitListener(queues = QueueConstants.QUEUE_ANT_K_LINE)
+ public void antKLineMsg(int type) {
+ log.info("消费---A k线数据:{}", type);
+ dappSystemService.antKLineMsg(type);
+ }
}
diff --git a/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java b/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java
index 1b37a63..69bcc03 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java
@@ -109,4 +109,84 @@
CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
rabbitTemplate.convertAndSend(QueueEnum.BNB_AGENT_UP.getExchange(), QueueEnum.BNB_AGENT_UP.getRoute(), id, correlationData);
}
+
+ /**
+ * A 入金的消息
+ * @param id
+ */
+ public void sendAntACoinInMsg(Long id) {
+ log.info("开始---A 入金的消息:{}", id);
+ CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
+ rabbitTemplate.convertAndSend(QueueEnum.ANT_A_CION_IN.getExchange(), QueueEnum.ANT_A_CION_IN.getRoute(), id, correlationData);
+ }
+
+ /**
+ * A 入金,转入A底池
+ * @param id
+ */
+ public void sendAntACoinInAPoolMsg(Long id) {
+ log.info("开始---A 入金,转入A底池:{}", id);
+ CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
+ rabbitTemplate.convertAndSend(QueueEnum.ANT_A_CION_IN_A_POOL.getExchange(), QueueEnum.ANT_A_CION_IN_A_POOL.getRoute(), id, correlationData);
+ }
+
+ /**
+ * A 入金,转入B底池
+ * @param id
+ */
+ public void sendAntACoinInBPoolMsg(Long id) {
+ log.info("开始---A 入金,转入B底池:{}", id);
+ CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
+ rabbitTemplate.convertAndSend(QueueEnum.ANT_A_CION_IN_B_POOL.getExchange(), QueueEnum.ANT_A_CION_IN_B_POOL.getRoute(), id, correlationData);
+ }
+
+ /**
+ * A 入金,5%节点
+ * @param id
+ */
+ public void sendAntACoinInNodeMsg(Long id) {
+ log.info("开始---A 入金,转入5%节点:{}", id);
+ CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
+ rabbitTemplate.convertAndSend(QueueEnum.ANT_A_CION_IN_NODE.getExchange(), QueueEnum.ANT_A_CION_IN_NODE.getRoute(), id, correlationData);
+ }
+
+ /**
+ * A 入金,10%极差奖
+ * @param id
+ */
+ public void sendAntACoinInLevelMsg(Long id) {
+ log.info("开始---A 入金,转入10%极差奖:{}", id);
+ CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
+ rabbitTemplate.convertAndSend(QueueEnum.ANT_A_CION_IN_LEVEL.getExchange(), QueueEnum.ANT_A_CION_IN_LEVEL.getRoute(), id, correlationData);
+ }
+
+ /**
+ * A 提现
+ * @param id
+ */
+ public void sendAntACoinOutMsg(Long id) {
+ log.info("开始---A 提现:{}", id);
+ CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
+ rabbitTemplate.convertAndSend(QueueEnum.ANT_A_CION_OUT.getExchange(), QueueEnum.ANT_A_CION_OUT.getRoute(), id, correlationData);
+ }
+
+ /**
+ * A 代理升级
+ * @param memberId
+ */
+ public void sendAntMemberLevelMsg(Long memberId) {
+ log.info("开始---A 代理升级:{}", memberId);
+ CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
+ rabbitTemplate.convertAndSend(QueueEnum.ANT_MEMBER_LEVEL.getExchange(), QueueEnum.ANT_MEMBER_LEVEL.getRoute(), memberId, correlationData);
+ }
+
+ /**
+ * A k线数据
+ * @param type
+ */
+ public void sendAntKLineMsg(int type) {
+ log.info("开始---A k线数据:{}", type);
+ CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
+ rabbitTemplate.convertAndSend(QueueEnum.ANT_K_LINE.getExchange(), QueueEnum.ANT_K_LINE.getRoute(), type, correlationData);
+ }
}
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 1763843..f6c70ad 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -15,11 +15,11 @@
datasource:
# 数据源-1,名称为 base
base:
- username: db_twocoin
- password: db_twocoin123!@#123
+ username: ct_test
+ password: 123456
# 154.91.195.148
driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://154.91.195.148:3306/db_twocoin?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8
+ url: jdbc:mysql://120.27.238.55:3406/db_twocoin?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8
# username: ct_test
# password: 123456
# driver-class-name: com.mysql.cj.jdbc.Driver
@@ -27,7 +27,7 @@
redis:
# Redis数据库索引(默认为 0)
- database: 11
+ database: 14
# Redis服务器地址
host: 120.27.238.55
# Redis服务器连接端口
@@ -54,7 +54,7 @@
publisher-confirm-type: correlated
system:
- online-transfer: false
+ online-transfer: true
chain-listener: false
reset-job: false
quartz-job: false
diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml
index 56975be..89a467b 100644
--- a/src/main/resources/application-test.yml
+++ b/src/main/resources/application-test.yml
@@ -15,20 +15,20 @@
datasource:
# 数据源-1,名称为 base
base:
- username: ct_test
- password: 123456
+ username: db_twocoin_test
+ password: db_twocoin_test123!@#123
driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://120.27.238.55:3306/db_sdm?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8
+ url: jdbc:mysql://127.0.0.1:3306/db_twocoin_test?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8
redis:
# Redis数据库索引(默认为 0)
- database: 10
+ database: 14
# Redis服务器地址
- host: 120.27.238.55
+ host: 127.0.0.1
# Redis服务器连接端口
port: 6379
# Redis 密码
- password: xcong123
+ password: dapp!@#123
lettuce:
pool:
# 连接池中的最小空闲连接
@@ -42,14 +42,19 @@
# 连接超时时间(毫秒)
timeout: 5000
rabbitmq:
- host: 120.27.238.55
+ host: 127.0.0.1
port: 5672
- username: ct_rabbit
- password: 123456
+ username: xc_rabbit
+ password: xuncong123
publisher-confirm-type: correlated
+ jackson:
+ date-format: yyyy-MM-dd HH:mm:ss
+ time-zone: GMT+8
+
system:
- online-transfer: false
+ online-transfer: true
chain-listener: false
reset-job: false
+ quartz-job: false
debug: false
diff --git a/src/main/resources/mapper/dapp/DappAKlineMapper.xml b/src/main/resources/mapper/dapp/DappAKlineMapper.xml
new file mode 100644
index 0000000..6ec217f
--- /dev/null
+++ b/src/main/resources/mapper/dapp/DappAKlineMapper.xml
@@ -0,0 +1,64 @@
+<?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.DappAKlineMapper">
+
+ <select id="selectListByType" resultType="cc.mrbird.febs.dapp.vo.AKLineVo">
+ select
+ a.type type,
+ a.create_time createTime,
+ a.price price
+ from dapp_a_kline a
+ <where>
+ <if test="record.type != null">
+ and a.type = #{record.type}
+ </if>
+ </where>
+ order by a.create_time asc
+ </select>
+
+ <select id="selectListByTypeAndTime" resultType="cc.mrbird.febs.dapp.entity.DappAKlineEntity">
+ select
+ a.*
+ from dapp_a_kline a
+ where a.type = #{type}
+ and date_format(a.create_time, '%Y-%m-%d') in
+ <foreach collection="dateStr" separator="," close=")" open="(" item="item">
+ #{item}
+ </foreach>
+ order by a.create_time asc
+ </select>
+
+ <select id="selectListByTypeAndLimit" resultType="cc.mrbird.febs.dapp.vo.AKLineLimitVo">
+ select
+ a.open_price openPrice,
+ a.close_price closePrice,
+ a.lowest_price lowestPrice,
+ a.highest_price highestPrice,
+ a.create_time createTime
+ from dapp_a_kline a
+ where a.type = #{type}
+ order by a.create_time desc
+ limit #{kLineLimit}
+ </select>
+
+ <select id="selectOneByType" resultType="cc.mrbird.febs.dapp.entity.DappAKlineEntity">
+ select
+ a.*
+ from dapp_a_kline a
+ where type in (0,1)
+ order by a.create_time desc
+ limit 1
+ </select>
+
+ <select id="selectListByTypeAndHour" resultType="cc.mrbird.febs.dapp.entity.DappAKlineEntity">
+ select
+ a.*
+ from dapp_a_kline a
+ where date_format(a.create_time, '%Y-%m-%d %H') in
+ <foreach collection="dateStr" separator="," close=")" open="(" item="item">
+ #{item}
+ </foreach>
+ order by a.create_time asc
+ </select>
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/dapp/DappChargeUsdtMapper.xml b/src/main/resources/mapper/dapp/DappChargeUsdtMapper.xml
new file mode 100644
index 0000000..55b4344
--- /dev/null
+++ b/src/main/resources/mapper/dapp/DappChargeUsdtMapper.xml
@@ -0,0 +1,11 @@
+<?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.DappChargeUsdtMapper">
+
+ <select id="selectByMaxAmountMemberId" resultType="java.math.BigDecimal">
+ select ifnull(MAX(amount),0)
+ from dapp_charge_usdt
+ where member_id = #{memberId}
+ </select>
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/dapp/DappFundFlowDao.xml b/src/main/resources/mapper/dapp/DappFundFlowDao.xml
index 201a83a..17a8af7 100644
--- a/src/main/resources/mapper/dapp/DappFundFlowDao.xml
+++ b/src/main/resources/mapper/dapp/DappFundFlowDao.xml
@@ -31,6 +31,24 @@
order by a.create_time desc, a.id desc
</select>
+ <select id="selectVoInPage" resultType="cc.mrbird.febs.dapp.vo.DappFundFlowVo">
+ select
+ a.amount amount,
+ a.type type,
+ date_format(a.create_time, '%Y-%m-%d %h:%m:%s') createTime
+ from dapp_fund_flow a
+ <where>
+ member_id = #{record.memberId}
+ <if test="record.type != null">
+ and a.type = #{record.type}
+ </if>
+ <if test="record.status != null">
+ and a.status = #{record.status}
+ </if>
+ </where>
+ order by a.create_time desc, a.id desc
+ </select>
+
<select id="selectListForMemberAndDay" resultType="cc.mrbird.febs.dapp.entity.DappFundFlowEntity">
select * from dapp_fund_flow
where member_id=#{memberId} and date_format(create_time, '%Y-%m-%d') = date_format(now(), '%Y-%m-%d')
diff --git a/src/main/resources/mapper/dapp/DappMemberDao.xml b/src/main/resources/mapper/dapp/DappMemberDao.xml
index 1b7bdd0..2a0e2a5 100644
--- a/src/main/resources/mapper/dapp/DappMemberDao.xml
+++ b/src/main/resources/mapper/dapp/DappMemberDao.xml
@@ -10,7 +10,7 @@
</select>
<select id="selectMemberInfoByInviteId" resultType="cc.mrbird.febs.dapp.entity.DappMemberEntity">
- select * from dapp_member where invite_id=#{inviteId}
+ select * from dapp_member where invite_id = #{inviteId}
</select>
<select id="selectInPage" resultType="cc.mrbird.febs.dapp.entity.DappMemberEntity">
@@ -90,7 +90,7 @@
<select id="selectMemberByAccountType" resultType="cc.mrbird.febs.dapp.entity.DappMemberEntity">
select * from dapp_member
<where>
- account_type=#{accountType}
+ account_type = #{accountType}
</where>
</select>
@@ -189,8 +189,57 @@
<select id="selectByMemberId" resultType="cc.mrbird.febs.dapp.vo.DappMemberInfoVo">
select
a.invite_id inviteId,
- a.account_type accountType
+ a.account_type accountType,
+ b.ausd_amount ausdAmount,
+ b.nft_devote nftDevote,
+ b.amount amount,
+ c.available_amount propertyAmount,
+ d.available_amount exchangeAmount
from dapp_member a
- where id = #{id}
+ left join dapp_usdt_perk b on a.id = b.member_id
+ left join dapp_wallet_mine c on a.id = c.member_id
+ left join dapp_wallet_coin d on a.id = d.member_id
+ where a.id = #{id}
+ </select>
+
+ <select id="selectByInviteIds" resultType="cc.mrbird.febs.dapp.entity.DappMemberEntity">
+ select
+ *
+ from dapp_member
+ where invite_id IN
+ <foreach collection = "list" item = "item" separator="," open = "(" close = ")" >
+ #{item}
+ </foreach >
+ order by id desc
+ </select>
+
+ <select id="selectMemberByAccountTypeAnd" resultType="cc.mrbird.febs.dapp.entity.DappMemberEntity">
+ select
+ a.*
+ from dapp_member a
+ where a.account_type = #{accountType}
+ and a.invite_id in (
+ select b.referer_id from dapp_member b where b.account_type = #{accountType}
+ )
+ </select>
+
+ <select id="selectChildAgentListByAccountType" resultType="cc.mrbird.febs.dapp.entity.DappMemberEntity">
+ select *
+ from dapp_member
+ where
+ (find_in_set(#{inviteId}, referer_ids) or invite_id=#{inviteId})
+ and account_type = #{accountType}
+ </select>
+
+ <select id="selectAllAchieveByInviteId" resultType="java.math.BigDecimal">
+ select sum(IFNULL(a.achieve_amount, 0))
+ from dapp_usdt_perk a
+ inner join dapp_member b on a.member_id = b.id
+ where find_in_set(#{inviteId}, b.referer_ids) or b.invite_id = #{inviteId}
+ </select>
+
+ <select id="selectMemberByNotAccountType" resultType="cc.mrbird.febs.dapp.entity.DappMemberEntity">
+ select * from dapp_member
+ where active_status = 1
</select>
</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/dapp/DappMemberNodeMapper.xml b/src/main/resources/mapper/dapp/DappMemberNodeMapper.xml
index 1ba30db..4059926 100644
--- a/src/main/resources/mapper/dapp/DappMemberNodeMapper.xml
+++ b/src/main/resources/mapper/dapp/DappMemberNodeMapper.xml
@@ -42,4 +42,11 @@
order by a.create_time desc
</select>
+ <select id="selectNodeByNodeCode" resultType="cc.mrbird.febs.dapp.entity.DappMemberNodeEntity">
+ select
+ a.*
+ from dapp_member_node a
+ where a.node_code = #{nodeCode}
+ </select>
+
</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/dapp/DappUsdtPerkEntityMapper.xml b/src/main/resources/mapper/dapp/DappUsdtPerkEntityMapper.xml
new file mode 100644
index 0000000..fdbf5c8
--- /dev/null
+++ b/src/main/resources/mapper/dapp/DappUsdtPerkEntityMapper.xml
@@ -0,0 +1,13 @@
+<?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.DappUsdtPerkEntityMapper">
+
+ <select id="selectByMemberId" resultType="cc.mrbird.febs.dapp.entity.DappUsdtPerkEntity">
+ select *
+ from dapp_usdt_perk
+ where member_id = #{memberId}
+ </select>
+
+
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/dapp/DappWalletCoinDao.xml b/src/main/resources/mapper/dapp/DappWalletCoinDao.xml
index 5e7fbeb..87a7f49 100644
--- a/src/main/resources/mapper/dapp/DappWalletCoinDao.xml
+++ b/src/main/resources/mapper/dapp/DappWalletCoinDao.xml
@@ -3,7 +3,7 @@
<mapper namespace="cc.mrbird.febs.dapp.mapper.DappWalletCoinDao">
<select id="selectByMemberId" resultType="cc.mrbird.febs.dapp.entity.DappWalletCoinEntity">
- select * from dapp_wallet_coin where member_id=#{memberId}
+ select * from dapp_wallet_coin where member_id=#{memberId} for update
</select>
<select id="selectInPage" resultType="cc.mrbird.febs.dapp.entity.DappWalletCoinEntity">
@@ -140,4 +140,8 @@
where
member_id = #{memberId}
</update>
+
+ <select id="selectAmountThanZero" resultType="cc.mrbird.febs.dapp.entity.DappWalletCoinEntity">
+ select * from dapp_wallet_coin where available_amount > 0
+ </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 4aebd21..8ecb63b 100644
--- a/src/main/resources/mapper/dapp/DappWalletMineDao.xml
+++ b/src/main/resources/mapper/dapp/DappWalletMineDao.xml
@@ -3,7 +3,7 @@
<mapper namespace="cc.mrbird.febs.dapp.mapper.DappWalletMineDao">
<select id="selectByMemberId" resultType="cc.mrbird.febs.dapp.entity.DappWalletMineEntity">
- select * from dapp_wallet_mine where member_id=#{memberId}
+ select * from dapp_wallet_mine where member_id=#{memberId} for update
</select>
<select id="selectInPage" resultType="cc.mrbird.febs.dapp.entity.DappWalletMineEntity">
@@ -32,7 +32,12 @@
update dapp_wallet_mine
set total_amount=#{record.totalAmount},
available_amount=#{record.availableAmount},
+ frozen_amount=#{record.frozenAmount},
version=version+1
where id=#{record.id} and version=#{record.version}
</update>
+
+ <select id="selectAmountThanZero" resultType="cc.mrbird.febs.dapp.entity.DappWalletMineEntity">
+ select * from dapp_wallet_mine where available_amount > 0
+ </select>
</mapper>
\ No newline at end of file
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 acd4e2a..18fbf71 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
@@ -28,8 +28,8 @@
<select name="type">
<option value=""></option>
<option value="1">购买节点</option>
- <option value="3">直推收益</option>
- <option value="4">收益</option>
+ <option value="2">直推收益</option>
+ <option value="3">收益</option>
</select>
</div>
</div>
@@ -55,8 +55,8 @@
{{#
var type = {
1: {title: '购买节点', color: 'orange'},
- 3: {title: '直推收益', color: 'green'},
- 4: {title: '收益', color: 'blue'},
+ 2: {title: '直推收益', color: 'green'},
+ 3: {title: '收益', color: 'blue'},
}[d.type];
}}
<span class="layui-badge febs-bg-{{type.color}}">{{ type.title }}</span>
diff --git a/src/test/java/cc/mrbird/febs/MemberTest.java b/src/test/java/cc/mrbird/febs/MemberTest.java
index 570e636..a7a76b8 100644
--- a/src/test/java/cc/mrbird/febs/MemberTest.java
+++ b/src/test/java/cc/mrbird/febs/MemberTest.java
@@ -2,6 +2,7 @@
import cc.mrbird.febs.common.contants.AppContants;
import cc.mrbird.febs.common.contants.SystemConstants;
+import cc.mrbird.febs.common.utils.RedisUtils;
import cc.mrbird.febs.dapp.chain.ChainEnum;
import cc.mrbird.febs.dapp.chain.ChainService;
import cc.mrbird.febs.dapp.contract.ContractMain;
@@ -11,8 +12,14 @@
import cc.mrbird.febs.dapp.mapper.DappMemberDao;
import cc.mrbird.febs.dapp.mapper.DataDictionaryCustomMapper;
import cc.mrbird.febs.dapp.service.DappSystemService;
+import cc.mrbird.febs.dapp.vo.AKLineLimitVo;
+import cc.mrbird.febs.dapp.vo.AKLineVo;
import cc.mrbird.febs.rabbit.producer.ChainProducer;
+import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
import org.apache.commons.lang3.StringUtils;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
@@ -21,6 +28,7 @@
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -44,13 +52,58 @@
@Autowired
private ChainProducer chainProducer;
+
+ @Autowired
+ private RedisUtils redisUtils;
// String address = dappMemberEntity.getAddress();
// String hash = ChainService.getInstance(ChainEnum.BSC_USDT.name()).transfer(address, amount);
// if(StrUtil.isEmpty(hash)){
// return;
// }
+
+ public static void main(String[] args) {
+
+ List<JSONObject> objects = new ArrayList<>();
+ AKLineVo akLineVo = new AKLineVo();
+ akLineVo.setCreateTime(DateUtil.date());
+ akLineVo.setClosePrice(BigDecimal.ZERO);
+ akLineVo.setOpenPrice(BigDecimal.ZERO);
+ akLineVo.setLowestPrice(BigDecimal.ZERO);
+ akLineVo.setHighestPrice(BigDecimal.ZERO);
+ JSONObject parseObj = JSONUtil.parseObj(akLineVo);
+ objects.add(parseObj);
+ objects.add(parseObj);
+ objects.add(parseObj);
+ objects.add(parseObj);
+ System.out.println(objects);
+ }
@Test
public void tranfer(){
+// dappSystemService.antKLineMsg(1);
+ dappSystemService.aKlineJobHour();
+// dappSystemService.aKlineJobDay();
+// dappSystemService.AntACoinInMsg(164L);
+
+// List<JSONObject> objects = new ArrayList<>();
+// AKLineVo akLineVo = new AKLineVo();
+// akLineVo.setCreateTime(DateUtil.date());
+// akLineVo.setClosePrice(BigDecimal.ZERO);
+// akLineVo.setOpenPrice(BigDecimal.ZERO);
+// akLineVo.setLowestPrice(BigDecimal.ZERO);
+// akLineVo.setHighestPrice(BigDecimal.ZERO);
+// JSONObject parseObj = JSONUtil.parseObj(akLineVo);
+// objects.add(parseObj);
+// objects.add(parseObj);
+// objects.add(parseObj);
+// objects.add(parseObj);
+// System.out.println(objects);
+// System.out.println(objects.toString());
+// redisUtils.set("test",objects.toString());
+// Object test = redisUtils.get("test");
+// System.out.println(test.toString());
+// JSONArray jsonArray = JSONUtil.parseArray(test);
+// System.out.println(jsonArray);
+
// String hash = ChainService.getInstance(ChainEnum.BNB.name()).transferBaseToken(address, amount);
//// if(StrUtil.isEmpty(hash)){
//// return;
@@ -62,7 +115,7 @@
// System.out.println(balance);
- dappSystemService.bnbTransferTest(44L);
+// dappSystemService.bnbTransferTest(44L);
//发送转币消息
@@ -79,6 +132,8 @@
private DappSystemService dappSystemService;
@Test
public void balance() {
+
+ dappSystemService.selectAndInsertDics();
/**
* 从contractAddress合约地址中转移对应发行的代币到address中
*/
--
Gitblit v1.9.1