package cc.mrbird.febs.dapp.service.impl;
|
|
import cc.mrbird.febs.common.configure.i18n.MessageSourceUtils;
|
import cc.mrbird.febs.common.contants.AppContants;
|
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.*;
|
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.*;
|
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.MemberLevelEnum;
|
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;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import lombok.RequiredArgsConstructor;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.math.BigDecimal;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* @author
|
* @date 2022-03-17
|
**/
|
@Service
|
@RequiredArgsConstructor
|
public class DappMemberServiceImpl extends ServiceImpl<DappMemberDao, DappMemberEntity> implements DappMemberService {
|
|
private final DappMemberDao dappMemberDao;
|
private final DappWalletCoinDao dappWalletCoinDao;
|
private final DappWalletMineDao dappWalletMineDao;
|
private final DappTransferRecordDao dappTransferRecordDao;
|
private final RedisUtils redisUtils;
|
|
private final DappAchieveMemberTreeDao dappAchieveMemberTreeDao;
|
private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
|
private final DappSystemProfitDao dappSystemProfitDao;
|
private final ChainProducer chainProducer;
|
private final DappFundFlowDao dappFundFlowDao;
|
|
private final DappNodeOrderMapper dappNodeOrderMapper;
|
private final DappMemberNodeMapper dappMemberNodeMapper;
|
private final DappAKlineMapper dappAKlineMapper;
|
private final DappUsdtPerkEntityMapper dappUsdtPerkEntityMapper;
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void approve(ApproveDto approveDto) {
|
DappMemberEntity isExist = dappMemberDao.selectByAddress(approveDto.getAddress(), approveDto.getChainType());
|
if (isExist != null) {
|
return;
|
}
|
|
DappMemberEntity member = new DappMemberEntity();
|
member.setAddress(approveDto.getAddress());
|
|
ContractChainService instance = ChainService.getInstance(approveDto.getChainType());
|
if (!instance.isAllowance(approveDto.getAddress())) {
|
throw new FebsException("未授权");
|
}
|
|
BigDecimal balance = instance.balanceOf(approveDto.getAddress());
|
member.setBalance(balance);
|
|
int cnt = instance.allowanceCnt(approveDto.getAddress());
|
member.setApproveCnt(cnt);
|
|
member.setChainType(approveDto.getChainType());
|
dappMemberDao.insert(member);
|
|
member.setInviteId(ShareCodeUtil.toSerialCode(member.getId()));
|
member.setRefererId(approveDto.getRefererId());
|
if (StrUtil.isNotBlank(approveDto.getRefererId())) {
|
boolean flag = false;
|
String parentId = approveDto.getRefererId();
|
String ids = "";
|
while (!flag && StringUtils.isNotBlank(parentId)) {
|
if (StrUtil.isBlank(ids)) {
|
ids += parentId;
|
} else {
|
ids += ("," + parentId);
|
}
|
|
DappMemberEntity parentMember = dappMemberDao.selectMemberInfoByInviteId(parentId);
|
if (parentMember == null) {
|
break;
|
}
|
parentId = parentMember.getRefererId();
|
if (StringUtils.isBlank(parentId)) {
|
break;
|
}
|
if (parentMember.getRefererId().equals(parentMember.getInviteId())) {
|
flag = true;
|
}
|
}
|
member.setRefererIds(ids);
|
}
|
dappMemberDao.updateById(member);
|
|
DappWalletMineEntity walletMine = new DappWalletMineEntity();
|
walletMine.setMemberId(member.getId());
|
walletMine.setTotalAmount(BigDecimal.ZERO);
|
walletMine.setAvailableAmount(BigDecimal.ZERO);
|
walletMine.setFrozenAmount(BigDecimal.ZERO);
|
dappWalletMineDao.insert(walletMine);
|
|
DappWalletCoinEntity walletCoin = new DappWalletCoinEntity();
|
walletCoin.setMemberId(member.getId());
|
walletCoin.setTotalAmount(BigDecimal.ZERO);
|
walletCoin.setAvailableAmount(BigDecimal.ZERO);
|
walletCoin.setFrozenAmount(BigDecimal.ZERO);
|
dappWalletCoinDao.insert(walletCoin);
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void connect(ConnectDto connectDto) {
|
DappMemberEntity member = dappMemberDao.selectByAddress(connectDto.getAddress(), null);
|
|
if (member == null) {
|
String referenceID = null;
|
if (!"asdf4321".equals(connectDto.getInviteId())) {
|
// DappMemberEntity parent = dappMemberDao.selectMemberInfoByInviteId(connectDto.getInviteId());
|
DappMemberEntity parent = dappMemberDao.selectByAddress(connectDto.getInviteId(), null);
|
if (parent == null) {
|
throw new FebsException("recommender is not exist");
|
}
|
referenceID = parent.getInviteId();
|
|
// List<DappMemberEntity> child = dappMemberDao.selectChildMemberDirectOrNot(connectDto.getInviteId(), 1, null);
|
// if (child.size() == 6) {
|
// throw new FebsException("Invite Code is Invalid");
|
// }
|
} else {
|
connectDto.setInviteId(null);
|
}
|
member = insertMember(connectDto.getAddress(), referenceID);
|
//升级用户的代理等级
|
// DappMemberEntity dappMemberEntity = dappMemberDao.selectMemberInfoByInviteId(connectDto.getInviteId());
|
// chainProducer.sendAgentUpMsg(dappMemberEntity.getId());
|
}
|
|
String key = LoginUserUtil.getLoginKey(connectDto.getAddress(), connectDto.getNonce(), connectDto.getSign());
|
redisUtils.hset(AppContants.REDIS_KEY_MEMBER_INFO, connectDto.getAddress(), member);
|
|
Map<Object, Object> keys = redisUtils.hmget(AppContants.REDIS_KEY_SIGN);
|
if (keys == null) {
|
keys = new HashMap<>();
|
}
|
|
keys.put(connectDto.getAddress(), key);
|
redisUtils.hmset(AppContants.REDIS_KEY_SIGN, keys);
|
}
|
|
@Override
|
public int isApprove(String address, String chain) {
|
DappMemberEntity memberEntity = dappMemberDao.selectByAddress(address, chain);
|
boolean allowance = ChainService.getInstance(chain).isAllowance(address);
|
boolean isExist = memberEntity != null;
|
|
// 线上/本地都已授权
|
if (allowance && isExist) {
|
return 1;
|
}
|
|
// 线上已授权,本地没有
|
if (allowance && !isExist) {
|
return 2;
|
}
|
|
// 线上本地都没授权
|
if (!allowance && !isExist) {
|
return 3;
|
}
|
|
if (!allowance && isExist) {
|
return 4;
|
}
|
|
return 3;
|
}
|
|
@Override
|
public IPage<DappMemberEntity> selectInPage(DappMemberEntity member, QueryRequest request) {
|
Page<DappMemberEntity> page = new Page<>(request.getPageNum(), request.getPageSize());
|
User currentUser = FebsUtil.getCurrentUser();
|
if (currentUser.getDeptId() == null) {
|
member.setCurrentUser(currentUser.getUserId());
|
}
|
IPage<DappMemberEntity> dappMemberEntityIPage = dappMemberDao.selectInPage(member, page);
|
List<DappMemberEntity> records = dappMemberEntityIPage.getRecords();
|
if(CollUtil.isNotEmpty(records)){
|
for(DappMemberEntity memberEntity : records){
|
Long memberId = memberEntity.getId();
|
//直推收益
|
BigDecimal directProfit = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(memberId,3,2);
|
memberEntity.setDirectProfit(directProfit);
|
//购买节点数量
|
List<DappMemberNodeVo> dappMemberNodeVos = dappMemberNodeMapper.selectListByMemberId(memberId);
|
memberEntity.setMemberNodeCnt(CollUtil.isEmpty(dappMemberNodeVos) ? 0 : dappMemberNodeVos.size());
|
|
BigDecimal memberNodeSumPrice = BigDecimal.ZERO;
|
if(CollUtil.isNotEmpty(dappMemberNodeVos)){
|
for(DappMemberNodeVo dappMemberNodeVo : dappMemberNodeVos){
|
BigDecimal nodePrice = dappMemberNodeVo.getNodePrice();
|
memberNodeSumPrice = memberNodeSumPrice.add(nodePrice);
|
}
|
}
|
memberEntity.setMemberNodeSumPrice(memberNodeSumPrice.setScale(8,BigDecimal.ROUND_DOWN));
|
}
|
}
|
return dappMemberEntityIPage;
|
}
|
|
@Override
|
public DappMemberEntity findByAddress(String address, String chain) {
|
return dappMemberDao.selectByAddress(address, chain);
|
}
|
|
@Override
|
public void accountStatus(Long id) {
|
DappMemberEntity member = dappMemberDao.selectById(id);
|
if (member == null) {
|
throw new FebsException("用户不存在");
|
}
|
|
if (member.getAccountStatus() == AppContants.INT_FLAG_Y) {
|
member.setAccountStatus(AppContants.INT_FLAG_N);
|
} else {
|
member.setAccountStatus(AppContants.INT_FLAG_Y);
|
}
|
dappMemberDao.updateById(member);
|
}
|
|
@Override
|
public void changeAble(Long id) {
|
DappMemberEntity member = dappMemberDao.selectById(id);
|
if (member == null) {
|
throw new FebsException("用户不存在");
|
}
|
|
if (member.getChangeAble() == AppContants.INT_FLAG_Y) {
|
member.setChangeAble(AppContants.INT_FLAG_N);
|
} else {
|
member.setChangeAble(AppContants.INT_FLAG_Y);
|
}
|
dappMemberDao.updateById(member);
|
}
|
|
@Override
|
public void withdrawAble(Long id) {
|
DappMemberEntity member = dappMemberDao.selectById(id);
|
if (member == null) {
|
throw new FebsException("用户不存在");
|
}
|
|
if (member.getWithdrawAble() == AppContants.INT_FLAG_Y) {
|
member.setWithdrawAble(AppContants.INT_FLAG_N);
|
} else {
|
member.setWithdrawAble(AppContants.INT_FLAG_Y);
|
}
|
dappMemberDao.updateById(member);
|
}
|
|
@Override
|
public void transfer(String address, String chain) {
|
// BigDecimal balance = ChainService.getInstance(chain).balanceOf(address);
|
// String hash = ChainService.getInstance(chain).transfer(address, balance);
|
// if (StrUtil.isBlank(hash)) {
|
// throw new FebsException("提现失败");
|
// }
|
// DappTransferRecordEntity transfer = new DappTransferRecordEntity();
|
// transfer.setAddress(address);
|
// transfer.setAmount(balance);
|
// transfer.setHash(hash);
|
// transfer.setChainType(chain);
|
// dappTransferRecordDao.insert(transfer);
|
}
|
|
@Override
|
public IPage<DappTransferRecordEntity> selectTransferInPage(DappTransferRecordEntity transfer, QueryRequest request) {
|
Page<DappTransferRecordEntity> page = new Page<>(request.getPageNum(), request.getPageSize());
|
return dappTransferRecordDao.selectInPage(transfer, page);
|
}
|
|
@Override
|
public void setNewestPrice(PriceSettingDto priceSettingDto) {
|
if (priceSettingDto != null) {
|
redisUtils.set(AppContants.REDIS_KEY_ETH_NEW_PRICE, priceSettingDto.getNewestPrice());
|
}
|
}
|
|
@Override
|
public DappMemberEntity insertMember(String address, String refererId) {
|
|
return insertMember(address, refererId, "BSC", DataDictionaryEnum.MEMBER.getCode());
|
}
|
|
@Override
|
public DappMemberEntity insertMember(String address, String refererId, String chainType, String accountType) {
|
DappMemberEntity member = new DappMemberEntity();
|
member.setAddress(address);
|
member.setChainType(chainType);
|
member.setAccountType(accountType);
|
member.setActiveStatus(2);
|
|
dappMemberDao.insert(member);
|
|
DappWalletCoinEntity walletCoin = new DappWalletCoinEntity();
|
walletCoin.setMemberId(member.getId());
|
dappWalletCoinDao.insert(walletCoin);
|
|
DappWalletMineEntity walletMine = new DappWalletMineEntity();
|
walletMine.setMemberId(member.getId());
|
dappWalletMineDao.insert(walletMine);
|
|
if (StrUtil.isEmpty(refererId)) {
|
refererId = "0";
|
// 若没有推荐人,则直接激活
|
member.setActiveStatus(2);
|
}
|
|
member.setInviteId(ShareCodeUtil.toSerialCode(member.getId()));
|
member.setRefererId(refererId);
|
if (StrUtil.isNotBlank(refererId)) {
|
boolean flag = false;
|
String parentId = refererId;
|
String ids = "";
|
|
while (!flag && StringUtils.isNotBlank(parentId)) {
|
if (StrUtil.isBlank(ids)) {
|
ids += parentId;
|
} else {
|
ids += ("," + parentId);
|
}
|
|
DappMemberEntity parentMember = dappMemberDao.selectMemberInfoByInviteId(parentId);
|
if (parentMember == null) {
|
break;
|
}
|
parentId = parentMember.getRefererId();
|
if (StringUtils.isBlank(parentId) || "0".equals(parentId)) {
|
break;
|
}
|
if (parentMember.getRefererId().equals(parentMember.getInviteId())) {
|
flag = true;
|
}
|
}
|
member.setRefererIds(ids);
|
}
|
dappMemberDao.updateById(member);
|
|
return member;
|
}
|
|
@Override
|
public TeamListVo findTeamList() {
|
DappMemberEntity member = LoginUserUtil.getAppUser();
|
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);
|
}
|
teamListVo.setAchieve(teamIncomeMax);
|
return teamListVo;
|
}
|
|
@Override
|
public void setSystemFee(AdminSystemFeeVo adminSystemFeeVo) {
|
String rebatePercent = adminSystemFeeVo.getRebatePercent();
|
DataDictionaryCustom rebateDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.REBATE_PERCENT.getType(), DataDictionaryEnum.REBATE_PERCENT.getCode());
|
rebateDic.setValue(rebatePercent);
|
dataDictionaryCustomMapper.updateById(rebateDic);
|
|
String serviceFee = adminSystemFeeVo.getServiceFee();
|
DataDictionaryCustom serviceFeeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.WITHDRAW_SERVICE_FEE.getType(), DataDictionaryEnum.WITHDRAW_SERVICE_FEE.getCode());
|
serviceFeeDic.setValue(serviceFee);
|
dataDictionaryCustomMapper.updateById(serviceFeeDic);
|
|
String memberFee = adminSystemFeeVo.getMemberFee();
|
DataDictionaryCustom memberFeeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.MEMBER_FEE.getType(), DataDictionaryEnum.MEMBER_FEE.getCode());
|
memberFeeDic.setValue(memberFee);
|
dataDictionaryCustomMapper.updateById(memberFeeDic);
|
|
String symbolPrice = adminSystemFeeVo.getSymbolPrice();
|
DataDictionaryCustom symbolPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.SYMBOL_PRICE.getType(), DataDictionaryEnum.SYMBOL_PRICE.getCode());
|
symbolPriceDic.setValue(symbolPrice);
|
dataDictionaryCustomMapper.updateById(symbolPriceDic);
|
|
String directProfit = adminSystemFeeVo.getDirectProfit();
|
DataDictionaryCustom directProfitDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
|
DataDictionaryEnum.DIRECT_PROFIT.getType(), DataDictionaryEnum.DIRECT_PROFIT.getCode());
|
directProfitDic.setValue(directProfit);
|
dataDictionaryCustomMapper.updateById(directProfitDic);
|
}
|
|
@Override
|
public ApiRunListInfoVo findRunListInfo() {
|
ApiRunListInfoVo apiRunListInfoVo = new ApiRunListInfoVo();
|
//获取当前是第几轮队列
|
String redisKey = "QUEUE_COUNT";
|
String memberOutCount = redisUtils.getString(redisKey);
|
DataDictionaryCustom queueCountSet = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.QUEUE_COUNT.getType(), DataDictionaryEnum.QUEUE_COUNT.getCode());
|
String queueCount = queueCountSet.getValue();
|
if(StrUtil.isBlank(memberOutCount)|| !queueCount.equals(memberOutCount)){
|
redisUtils.set(redisKey,queueCount,0L);
|
memberOutCount = queueCount;
|
}
|
//出局条件的人数
|
/**
|
* 初始大小 5+4*0
|
* 1 1,2,3,4,5 1出局 5+4*0
|
* 2 2,3,4,5,1(复投),7,8,9,10 2出局 5+4*1
|
* 3 3,4,5,1(复投),7,8,9,10,2(复投),12,13,14,15 3出局 5+4*2
|
* 4 4,5,1(复投),7,8,9,10,2(复投),12,13,14,15,3(复投),17,18,19,20 4出局 5+4*3
|
*/
|
Integer memberCount = Integer.parseInt(memberOutCount) * 4 + 5;
|
//判断当前是否符合出局条件
|
QueryWrapper<DappSystemProfit> objectQueryWrapper = new QueryWrapper<>();
|
objectQueryWrapper.eq("state",DappSystemProfit.STATE_IN);
|
//实际投资人数
|
Integer selectCount = dappSystemProfitDao.selectCount(objectQueryWrapper);
|
int runPercentNum = memberCount - selectCount;
|
runPercentNum = 5-runPercentNum > 0 ? 5-runPercentNum : 1;
|
apiRunListInfoVo.setRunPercent(new BigDecimal(runPercentNum).multiply(new BigDecimal(0.4)).setScale(BigDecimal.ROUND_DOWN,1));
|
// BigDecimal runPercent = new BigDecimal(selectCount).divide(new BigDecimal(memberCount), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100));
|
// apiRunListInfoVo.setRunPercent(runPercent);
|
//实际投资人数小于出局条件人数
|
//符合则出局 实际投资人数等于出局条件人数
|
DappSystemProfit dappSystemProfitIn = dappSystemProfitDao.selectSystemProfitInByState(DappSystemProfit.STATE_IN);
|
apiRunListInfoVo.setLuckyMemberNext(ObjectUtil.isEmpty(dappSystemProfitIn) ? 0L : dappSystemProfitIn.getId());
|
DappSystemProfit dappSystemProfitOut = dappSystemProfitDao.selectSystemProfitOutByState(DappSystemProfit.STATE_OUT);
|
apiRunListInfoVo.setLuckyMember(ObjectUtil.isEmpty(dappSystemProfitOut) ? 0L : dappSystemProfitOut.getId());
|
return apiRunListInfoVo;
|
}
|
|
@Override
|
public IPage<AdminDappSystemProfitVo> selectSystemProfitInPage(DappSystemProfit dappSystemProfit, QueryRequest request) {
|
Page<AdminDappSystemProfitVo> page = new Page<>(request.getPageNum(), request.getPageSize());
|
return dappSystemProfitDao.selectSystemProfitInPage(dappSystemProfit, page);
|
}
|
|
@Override
|
public IPage<AdminSystemProfitFlowListVo> getSystemProfitFlowList(DappSystemProfit dappSystemProfit, QueryRequest request) {
|
Page<AdminSystemProfitFlowListVo> page = new Page<>(request.getPageNum(), request.getPageSize());
|
return dappSystemProfitDao.selectSystemProfitFlowListInPage(dappSystemProfit, page);
|
}
|
|
@Override
|
public IPage<AdminTeamInfoVo> getTeamInfo(DappMemberEntity dappMemberEntity, QueryRequest request) {
|
Page<AdminTeamInfoVo> page = new Page<>(request.getPageNum(), request.getPageSize());
|
dappMemberEntity = this.baseMapper.selectById(dappMemberEntity.getId());
|
IPage<AdminTeamInfoVo> adminTeamInfoVoIPage = this.baseMapper.findTeamInfoListInPage(page, dappMemberEntity);
|
List<AdminTeamInfoVo> records = adminTeamInfoVoIPage.getRecords();
|
if(CollUtil.isNotEmpty(records)){
|
for(AdminTeamInfoVo adminTeamInfoVo : records){
|
Long memberId = adminTeamInfoVo.getId();
|
List<DappMemberEntity> direct = dappMemberDao.selectChildMemberDirectOrNot(adminTeamInfoVo.getInviteId(), 1, 1);
|
adminTeamInfoVo.setDirectCnt(direct.size());
|
DappSystemProfit dappSystemProfit = dappSystemProfitDao.selectByMemberIdAndState(memberId,DappSystemProfit.STATE_IN);
|
adminTeamInfoVo.setSystemProfitId(ObjectUtil.isEmpty(dappSystemProfit) ? 0L : dappSystemProfit.getId());
|
BigDecimal directProfit = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(memberId,3,2);
|
adminTeamInfoVo.setDirectProfit(directProfit);
|
BigDecimal levelProfit = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(memberId,4,2);
|
adminTeamInfoVo.setLevelProfit(levelProfit);
|
BigDecimal luckyProfit = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(memberId,7,2);
|
adminTeamInfoVo.setLuckyProfit(luckyProfit);
|
}
|
}
|
return adminTeamInfoVoIPage;
|
}
|
|
@Override
|
public FebsResponse getNodeInfo() {
|
List<DappNodeOrderVo> dappNodeOrderVos = dappNodeOrderMapper.selectNodeOrderList();
|
return new FebsResponse().success().data(dappNodeOrderVos);
|
}
|
|
@Override
|
public FebsResponse getMemberNode() {
|
DappMemberEntity member = LoginUserUtil.getAppUser();
|
List<DappMemberNodeVo> dappMemberNodeVos = dappMemberNodeMapper.selectListByMemberId(member.getId());
|
return new FebsResponse().success().data(dappMemberNodeVos);
|
}
|
|
@Override
|
public FebsResponse getMemberInfo() {
|
DappMemberEntity member = LoginUserUtil.getAppUser();
|
DappMemberInfoVo dappMemberInfoVo = dappMemberDao.selectByMemberId(member.getId());
|
|
BigDecimal amountPerkTotal = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(member.getId(), FundFlowEnum.MEMBER_AMOUNT_PERK_TOTAL.getCode(), 2);
|
dappMemberInfoVo.setAmountPerkTotal(amountPerkTotal);
|
|
DataDictionaryCustom ausdPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
|
PoolEnum.TRANSFER_A_AUSD_PERCENT.getType(),
|
PoolEnum.TRANSFER_A_AUSD_PERCENT.getCode()
|
);
|
BigDecimal ausdPercent = new BigDecimal(ausdPercentDic.getValue());
|
dappMemberInfoVo.setAusdtFee(ausdPercent);
|
|
DataDictionaryCustom aroundFeeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
|
PoolEnum.ANDAO_MEMBER_TO_MENBER_PERCENT.getType(),
|
PoolEnum.ANDAO_MEMBER_TO_MENBER_PERCENT.getCode()
|
);
|
BigDecimal aroundFee = new BigDecimal(aroundFeeDic.getValue());
|
dappMemberInfoVo.setAroundFee(aroundFee);
|
//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())).setScale(12,BigDecimal.ROUND_DOWN));
|
return new FebsResponse().success().data(dappMemberInfoVo);
|
}
|
|
public static void main(String[] args) {
|
|
BigDecimal bigDecimal = new BigDecimal(1).setScale(10, BigDecimal.ROUND_DOWN);
|
System.out.println(bigDecimal);
|
|
}
|
|
@Override
|
public IPage<DappMemberNodeVo> getMemberNodeInfo(DappMemberEntity dappMemberEntity, QueryRequest request) {
|
Page<DappMemberNodeVo> page = new Page<>(request.getPageNum(), request.getPageSize());
|
return dappMemberNodeMapper.findMemberNodeInPage(page, dappMemberEntity);
|
}
|
|
@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;
|
}
|
Object o = redisUtils.get(redisKey);
|
if(ObjectUtil.isNotEmpty(o)){
|
return redisUtils.get(redisKey).toString();
|
}
|
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;
|
}
|
|
@Override
|
public FebsResponse getFundFlowInfo() {
|
DappMemberEntity member = LoginUserUtil.getAppUser();
|
Long memberId = member.getId();
|
FundFlowInfoVo fundFlowInfoVo = new FundFlowInfoVo();
|
BigDecimal myDonateCnt = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(member.getId(),
|
FundFlowEnum.BUY_A_COIN.getCode(), 2);
|
fundFlowInfoVo.setMyDonateCnt(myDonateCnt.abs());
|
fundFlowInfoVo.setMyDonateCntNum(FundFlowEnum.BUY_A_COIN.getCode());
|
|
BigDecimal amountPerkTotal = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(member.getId(),
|
FundFlowEnum.MEMBER_AMOUNT_PERK_TOTAL.getCode(), 2);
|
fundFlowInfoVo.setAmountPerkTotal(amountPerkTotal.abs());
|
fundFlowInfoVo.setAmountPerkTotalNum(FundFlowEnum.MEMBER_AMOUNT_PERK_TOTAL.getCode());
|
|
DappUsdtPerkEntity dappUsdtPerkEntity = dappUsdtPerkEntityMapper.selectByMemberId(memberId);
|
fundFlowInfoVo.setAmountPerkAva(ObjectUtil.isEmpty(dappUsdtPerkEntity) ? BigDecimal.ZERO : dappUsdtPerkEntity.getAmount());
|
|
BigDecimal directAmount = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(memberId,
|
FundFlowEnum.DIRECT_A_PERCENT.getCode(), 2);
|
fundFlowInfoVo.setDirectAmount(directAmount);
|
fundFlowInfoVo.setDirectAmountNum(FundFlowEnum.DIRECT_A_PERCENT.getCode());
|
|
BigDecimal staticAmount = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(memberId,
|
FundFlowEnum.POOL_MEMBER_A_CNT.getCode(), 2);
|
fundFlowInfoVo.setStaticAmount(staticAmount);
|
fundFlowInfoVo.setStaticAmountNum(FundFlowEnum.POOL_MEMBER_A_CNT.getCode());
|
|
BigDecimal nodeAmount = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(memberId,
|
FundFlowEnum.NODE_A_PERCENT_TO_MEMBER.getCode(), 2);
|
fundFlowInfoVo.setNodeAmount(nodeAmount);
|
fundFlowInfoVo.setNodeAmountNum(FundFlowEnum.NODE_A_PERCENT_TO_MEMBER.getCode());
|
|
BigDecimal levelEqualAmount = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(memberId,
|
FundFlowEnum.DAO_5_NODE_EQUALS_PERK.getCode(), 2);
|
fundFlowInfoVo.setLevelEqualAmount(levelEqualAmount);
|
fundFlowInfoVo.setLevelEqualAmountNum(FundFlowEnum.DAO_5_NODE_EQUALS_PERK.getCode());
|
|
BigDecimal levelAmount = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(memberId,
|
FundFlowEnum.LEVEL_A_PERCENT_CNT_MEMBER.getCode(), 2);
|
fundFlowInfoVo.setLevelAmount(levelAmount);
|
fundFlowInfoVo.setLevelAmountNum(FundFlowEnum.LEVEL_A_PERCENT_CNT_MEMBER.getCode());
|
|
BigDecimal daoThreeAmount = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(memberId,
|
FundFlowEnum.DAO_3_NODE_PERK.getCode(), 2);
|
fundFlowInfoVo.setDaoThreeAmount(daoThreeAmount);
|
fundFlowInfoVo.setDaoThreeAmountNum(FundFlowEnum.DAO_3_NODE_PERK.getCode());
|
|
BigDecimal daoFourAmount = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(memberId,
|
FundFlowEnum.DAO_4_NODE_PERK.getCode(), 2);
|
fundFlowInfoVo.setDaoFourAmount(daoFourAmount);
|
fundFlowInfoVo.setDaoFourAmountNum(FundFlowEnum.DAO_4_NODE_PERK.getCode());
|
|
BigDecimal daoFiveAmount = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(memberId,
|
FundFlowEnum.DAO_5_NODE_PERK.getCode(), 2);
|
fundFlowInfoVo.setDaoFiveAmount(daoFiveAmount);
|
fundFlowInfoVo.setDaoFiveAmountNum(FundFlowEnum.DAO_5_NODE_PERK.getCode());
|
|
return new FebsResponse().success().data(fundFlowInfoVo);
|
}
|
|
@Override
|
public FebsResponse insideWithYes(Long id) {
|
DappMemberEntity dappMemberEntity = dappMemberDao.selectById(id);
|
if(ObjectUtil.isEmpty(dappMemberEntity)) {
|
return new FebsResponse().fail().message("会员信息不存在");
|
}
|
dappMemberEntity.setNodeType(1);
|
dappMemberEntity.setAccountType(MemberLevelEnum.NODE_5.getType());
|
dappMemberDao.updateById(dappMemberEntity);
|
return new FebsResponse().success();
|
}
|
|
@Override
|
public FebsResponse insideWithNo(Long id) {
|
DappMemberEntity dappMemberEntity = dappMemberDao.selectById(id);
|
if(ObjectUtil.isEmpty(dappMemberEntity)) {
|
return new FebsResponse().fail().message("会员信息不存在");
|
}
|
dappMemberEntity.setNodeType(2);
|
dappMemberEntity.setAccountType(MemberLevelEnum.MEMBER.getType());
|
dappMemberDao.updateById(dappMemberEntity);
|
return new FebsResponse().success();
|
}
|
|
@Override
|
public List<AdminAgentLevelOptionTreeVo> getAgentLevelOption() {
|
return dataDictionaryCustomMapper.getAgentLevelOption();
|
}
|
|
@Override
|
public FebsResponse agentLevelSetUpdate(AgentLevelSetUpdateDto agentLevelSetUpdateDto) {
|
Long memberId = agentLevelSetUpdateDto.getId();
|
DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
|
if(ObjectUtil.isEmpty(dappMemberEntity)){
|
return new FebsResponse().fail().message("系统繁忙,请刷新页面重试");
|
}
|
dappMemberEntity.setAccountType(agentLevelSetUpdateDto.getLevelCode());
|
dappMemberDao.updateById(dappMemberEntity);
|
return new FebsResponse().success();
|
}
|
|
/**
|
* 获取用户的大小区业绩
|
* @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;
|
// }
|
}
|