| | |
| | | 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.chain.ContractChainService; |
| | | import cc.mrbird.febs.dapp.dto.SystemDto; |
| | | import cc.mrbird.febs.dapp.entity.DappMemberEntity; |
| | | import cc.mrbird.febs.dapp.entity.DappMineDataEntity; |
| | | import cc.mrbird.febs.dapp.entity.DappReturnRatioEntity; |
| | | import cc.mrbird.febs.dapp.mapper.DappReturnRatioDao; |
| | | import cc.mrbird.febs.dapp.mapper.DappSystemDao; |
| | | import cc.mrbird.febs.dapp.entity.*; |
| | | import cc.mrbird.febs.dapp.enumerate.CardPeriod; |
| | | 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.utils.OnlineTransferUtil; |
| | | import cc.mrbird.febs.dapp.vo.RedisTransferPoolVo; |
| | | import cc.mrbird.febs.dapp.vo.SlipSettingVo; |
| | | import cc.mrbird.febs.job.SystemTradeJob; |
| | | import cc.mrbird.febs.rabbit.producer.ChainProducer; |
| | | import cc.mrbird.febs.tree.MatrixTree; |
| | | import cc.mrbird.febs.tree.MemberNode; |
| | | 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.util.RandomUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.jsoup.Jsoup; |
| | | import org.jsoup.nodes.Document; |
| | | import org.jsoup.nodes.Element; |
| | | import org.jsoup.select.Elements; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.io.IOException; |
| | | import java.math.BigDecimal; |
| | | import java.math.BigInteger; |
| | | import java.math.RoundingMode; |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.net.MalformedURLException; |
| | | import java.net.URL; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * @author |
| | | * @author |
| | | * @date 2022-03-24 |
| | | **/ |
| | | @Slf4j |
| | |
| | | private final DappSystemDao dappSystemDao; |
| | | private final DappReturnRatioDao dappReturnRatioDao; |
| | | private final RedisUtils redisUtils; |
| | | private final DappFundFlowDao dappFundFlowDao; |
| | | private final DappMemberDao dappMemberDao; |
| | | private final DataDictionaryCustomMapper dataDictionaryCustomMapper; |
| | | private final DappOnlineTransferDao dappOnlineTransferDao; |
| | | private final ChainProducer chainProducer; |
| | | private final DappSymbolDailyPriceMapper dappSymbolDailyPriceMapper; |
| | | private final DappMemberBoxRecordMapper dappMemberBoxRecordMapper; |
| | | private final DappWalletCoinDao dappWalletCoinDao; |
| | | |
| | | private final String[] ADDRESS_PREFIX = {"T", "0x"}; |
| | | @Override |
| | | public Map<String, Object> findTotalInComeAndList() { |
| | | DappMineDataEntity dataMine = dappSystemDao.selectMineDataForOne(); |
| | | private final DappAchieveTreeDao dappAchieveTreeDao; |
| | | private final DappAchieveMemberTreeDao dappAchieveMemberTreeDao; |
| | | private final DappWalletService dappWalletService; |
| | | |
| | | |
| | | Map<String, Object> result = new HashMap<>(); |
| | | result.put("total", 6000); |
| | | result.put("addreessCnt", 1234); |
| | | result.put("coinCnt", 4000); |
| | | return result; |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, Object> globalSetting() { |
| | | BigDecimal newPrice = (BigDecimal) redisUtils.get(AppContants.REDIS_KEY_ETH_NEW_PRICE); |
| | | Integer changeFee = (Integer) redisUtils.get(AppContants.REDIS_KEY_CHANGE_FEE); |
| | | |
| | | List<DappReturnRatioEntity> ratios = dappReturnRatioDao.selectList(null); |
| | | Map<String, Object> result = new HashMap<>(); |
| | | result.put("newPrice", newPrice); |
| | | result.put("changeFee", changeFee); |
| | | result.put("ratio", ratios); |
| | | return result; |
| | | } |
| | | |
| | | @Override |
| | | public SystemDto system() { |
| | | DappMemberEntity member = LoginUserUtil.getAppUser(); |
| | | |
| | | SystemDto system = new SystemDto(); |
| | | |
| | | RedisTransferPoolVo transferPool = (RedisTransferPoolVo) redisUtils.get(AppContants.REDIS_KEY_TRANSFER_POOL_VOL); |
| | | BigDecimal poolRemain = (BigDecimal) redisUtils.get(AppContants.REDIS_KEY_TRANSFER_POOL_VOL_REMAIN); |
| | | // 买币数量 |
| | | system.setBuyTotal(transferPool.getTodayVol()); |
| | | system.setBuyRemain(poolRemain); |
| | | |
| | | BigDecimal balance = ChainService.getInstance(ChainEnum.BSC_TFC.name()).balanceOf(member.getAddress()); |
| | | Object o = redisUtils.get(AppContants.REDIS_KEY_USDT_OUT_LIMIT_REMAIN); |
| | | BigDecimal remain; |
| | | if (o == null) { |
| | | remain = balance.multiply(BigDecimal.valueOf(0.3)); |
| | | redisUtils.set(AppContants.REDIS_KEY_USDT_OUT_LIMIT_REMAIN, remain); |
| | | } else { |
| | | remain = (BigDecimal) o; |
| | | } |
| | | // 卖币数量 |
| | | system.setSaleTotal(balance.multiply(BigDecimal.valueOf(0.3))); |
| | | system.setSaleRemain(remain); |
| | | |
| | | BigDecimal usdtRemain = (BigDecimal) redisUtils.get(AppContants.REDIS_KEY_USDT_OUT_LIMIT_REMAIN); |
| | | BigDecimal usdtTotal = (BigDecimal) redisUtils.get(AppContants.REDIS_KEY_USDT_OUT_LIMIT); |
| | | |
| | | // usdt数量 |
| | | system.setUsdtTotal(usdtTotal); |
| | | system.setUsdtRemain(usdtRemain); |
| | | |
| | | system.setFeeRatio(BigDecimal.TEN); |
| | | system.setBuyAmount(new BigDecimal("100")); |
| | | return system; |
| | | } |
| | | |
| | | // 最低容量(百分比) |
| | | private final BigDecimal volProp = new BigDecimal("2"); |
| | | // 每日增/减百分比 |
| | | private final BigDecimal changeProp = new BigDecimal("1"); |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public synchronized void achieveTree(Long memberId) { |
| | | DappMemberEntity member = dappMemberDao.selectById(memberId); |
| | | |
| | | // 在大树中,插入当前节点 |
| | | DappAchieveTreeEntity achieveTree = new DappAchieveTreeEntity(); |
| | | achieveTree.setMidNode(memberId); |
| | | achieveTree.setValidState(1); |
| | | dappAchieveTreeDao.insert(achieveTree); |
| | | |
| | | // 在内存树(大树)中插入当前节点,并返回父节点 |
| | | MemberNode node = new MemberNode(member.getId(), member.getAddress(), member.getInviteId(), member.getRefererId()); |
| | | MatrixTree tree = MatrixTree.getInstance(); |
| | | MemberNode parentNode = tree.addNode(node); |
| | | |
| | | // 创建该节点的矩阵 |
| | | DappAchieveMemberTreeEntity achieveMemberTree = new DappAchieveMemberTreeEntity(); |
| | | achieveMemberTree.setTreeNode(memberId); |
| | | achieveMemberTree.setTopNode(memberId); |
| | | achieveMemberTree.setDeep(1); |
| | | achieveMemberTree.setHasMoney(1); |
| | | if (parentNode != null) { |
| | | achieveMemberTree.setParentNode(parentNode.getMemberId()); |
| | | } |
| | | dappAchieveMemberTreeDao.insert(achieveMemberTree); |
| | | |
| | | // 激活用户状态 |
| | | member.setActiveStatus(1); |
| | | dappMemberDao.updateById(member); |
| | | |
| | | putIntoProfit(memberId, 2); |
| | | if (parentNode == null) { |
| | | return; |
| | | } |
| | | |
| | | // 修改父节点在数据库中的左/右节点数据 |
| | | DappAchieveTreeEntity treeMidNode = dappAchieveTreeDao.selectByMidNode(parentNode.getMemberId()); |
| | | boolean isLeft = false; |
| | | if (parentNode.getLeft() != null && memberId.equals(parentNode.getLeft().getMemberId())) { |
| | | treeMidNode.setLeftNode(memberId); |
| | | isLeft = true; |
| | | } else { |
| | | treeMidNode.setRightNode(memberId); |
| | | } |
| | | dappAchieveTreeDao.updateById(treeMidNode); |
| | | |
| | | // 更新矩阵中的数据 |
| | | List<DappAchieveMemberTreeEntity> matrixNodes = dappAchieveMemberTreeDao.selectNotBottomNodeInMatrix(parentNode.getMemberId()); |
| | | for (DappAchieveMemberTreeEntity matrixNode : matrixNodes) { |
| | | if (isLeft) { |
| | | matrixNode.setLeftNode(memberId); |
| | | } else { |
| | | matrixNode.setRightNode(memberId); |
| | | } |
| | | |
| | | dappAchieveMemberTreeDao.updateById(matrixNode); |
| | | |
| | | DappAchieveMemberTreeEntity newMatrixNode = new DappAchieveMemberTreeEntity(); |
| | | newMatrixNode.setTreeNode(memberId); |
| | | newMatrixNode.setTopNode(matrixNode.getTopNode()); |
| | | newMatrixNode.setParentNode(parentNode.getMemberId()); |
| | | newMatrixNode.setHasMoney(1); |
| | | newMatrixNode.setDeep(matrixNode.getDeep() + 1); |
| | | dappAchieveMemberTreeDao.insert(newMatrixNode); |
| | | |
| | | if (matrixNode.getDeep() == 2) { |
| | | finishMatrixTree(matrixNode.getTopNode()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 完成矩阵树,并重置矩阵且重入 |
| | | public void finishMatrixTree(Long memberId) { |
| | | List<DappAchieveMemberTreeEntity> matrixTree = dappAchieveMemberTreeDao.selectMatrixTreeByTopNode(memberId, 1); |
| | | // 如果达到标准,则重置该矩阵树 |
| | | if (matrixTree.size() == 7) { |
| | | dappAchieveMemberTreeDao.resetMatrixTree(memberId); |
| | | dappAchieveMemberTreeDao.reentryMoney(memberId); |
| | | |
| | | putIntoProfit(memberId, 1); |
| | | DappAchieveMemberTreeEntity bottomNode = dappAchieveMemberTreeDao.selectNodeByDeep(memberId, 3); |
| | | if (bottomNode != null) { |
| | | finishMatrixTree(bottomNode.getTopNode()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void putIntoProfit(Long memberId, int isReIn) { |
| | | DappMemberEntity member = dappMemberDao.selectById(memberId); |
| | | DappMemberEntity parent = dappMemberDao.selectMemberInfoByInviteId(member.getRefererId()); |
| | | |
| | | member.setOutCnt(member.getOutCnt() + 1); |
| | | dappMemberDao.updateById(member); |
| | | |
| | | if (parent != null) { |
| | | BigDecimal directProfit = new BigDecimal("100").multiply(new BigDecimal("0.15")); |
| | | dappWalletService.updateWalletCoinWithLock(directProfit, parent.getId()); |
| | | |
| | | DappFundFlowEntity fundFlow = new DappFundFlowEntity(parent.getId(), directProfit, 3, 2, null, null); |
| | | dappFundFlowDao.insert(fundFlow); |
| | | } |
| | | |
| | | // 如果是复投的,则需奖励 |
| | | if (isReIn == 1) { |
| | | dappWalletService.updateWalletCoinWithLock(new BigDecimal(190), member.getId()); |
| | | |
| | | DappFundFlowEntity matrixProfitFlow = new DappFundFlowEntity(memberId, new BigDecimal("190"), 2, 2, null, null); |
| | | dappFundFlowDao.insert(matrixProfitFlow); |
| | | |
| | | DappFundFlowEntity rePutInFlow = new DappFundFlowEntity(memberId, new BigDecimal("100").negate(), 1, 2, null, null); |
| | | dappFundFlowDao.insert(rePutInFlow); |
| | | |
| | | DappFundFlowEntity safePoolFlow = new DappFundFlowEntity(memberId, new BigDecimal("10").negate(), 4, 2, null, null); |
| | | dappFundFlowDao.insert(safePoolFlow); |
| | | |
| | | DappMineDataEntity mineData = dappSystemDao.selectMineDataForOne(); |
| | | mineData.setSafePool(mineData.getSafePool().add(BigDecimal.TEN)); |
| | | dappSystemDao.updateMineData(mineData); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void tfcNewPrice(String data) { |
| | | redisUtils.set(AppContants.REDIS_KEY_TFC_NEW_PRICE, new BigDecimal(data)); |
| | | } |
| | | } |