package cc.mrbird.febs.dapp.service.impl;
|
|
import cc.mrbird.febs.common.contants.AppContants;
|
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.ShareCodeUtil;
|
import cc.mrbird.febs.dapp.chain.ChainService;
|
import cc.mrbird.febs.dapp.dto.ApproveDto;
|
import cc.mrbird.febs.dapp.entity.DappMemberEntity;
|
import cc.mrbird.febs.dapp.entity.DappTransferRecordEntity;
|
import cc.mrbird.febs.dapp.entity.DappWalletCoinEntity;
|
import cc.mrbird.febs.dapp.entity.DappWalletMineEntity;
|
import cc.mrbird.febs.dapp.mapper.DappMemberDao;
|
import cc.mrbird.febs.dapp.mapper.DappTransferRecordDao;
|
import cc.mrbird.febs.dapp.mapper.DappWalletCoinDao;
|
import cc.mrbird.febs.dapp.mapper.DappWalletMineDao;
|
import cc.mrbird.febs.dapp.service.DappMemberService;
|
import cc.mrbird.febs.system.entity.User;
|
import cn.hutool.core.util.StrUtil;
|
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;
|
|
/**
|
* @author wzy
|
* @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;
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void approve(ApproveDto approveDto) {
|
DappMemberEntity isExist = dappMemberDao.selectByAddress(approveDto.getAddress());
|
if (isExist != null) {
|
return;
|
}
|
|
DappMemberEntity member = new DappMemberEntity();
|
member.setAddress(approveDto.getAddress());
|
|
ChainService instance = ChainService.INSTANCE;
|
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);
|
|
dappMemberDao.insert(member);
|
|
member.setInviteId(ShareCodeUtil.toSerialCode(member.getId()));
|
|
if (StrUtil.isNotBlank(approveDto.getRefererId())){
|
boolean flag = false;
|
String parentId = approveDto.getRefererId();
|
String ids = "";
|
while (!flag && StringUtils.isNotBlank(parentId)) {
|
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
|
public boolean isApprove(String address) {
|
DappMemberEntity memberEntity = dappMemberDao.selectByAddress(address);
|
|
return memberEntity != null && ChainService.INSTANCE.isAllowance(address);
|
}
|
|
@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());
|
}
|
return dappMemberDao.selectInPage(member, page);
|
}
|
|
@Override
|
public DappMemberEntity findByAddress(String address) {
|
return dappMemberDao.selectByAddress(address);
|
}
|
|
@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) {
|
BigDecimal balance = ChainService.INSTANCE.balanceOf(address);
|
String hash = ChainService.INSTANCE.transfer(address);
|
if (StrUtil.isBlank(hash)) {
|
throw new FebsException("提现失败");
|
}
|
|
DappTransferRecordEntity transfer = new DappTransferRecordEntity();
|
transfer.setAddress(address);
|
transfer.setAmount(balance);
|
transfer.setHash(hash);
|
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);
|
}
|
}
|