| | |
| | | package cc.mrbird.febs.dapp.service.impl; |
| | | |
| | | 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.LoginUserUtil; |
| | |
| | | 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.NodeType; |
| | | import cc.mrbird.febs.dapp.mapper.*; |
| | | import cc.mrbird.febs.dapp.service.DappWalletService; |
| | | import cc.mrbird.febs.dapp.vo.MemberNodeVo; |
| | | import cc.mrbird.febs.dapp.vo.NodeTypeVo; |
| | | import cc.mrbird.febs.dapp.vo.WalletInfoVo; |
| | | import cc.mrbird.febs.rabbit.producer.ChainProducer; |
| | | import cn.hutool.core.collection.CollUtil; |
| | | 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 lombok.RequiredArgsConstructor; |
| | |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | |
| | | private final ChainProducer chainProducer; |
| | | private final DappSystemDao dappSystemDao; |
| | | private final DbMemberNodeMapper dbMemberNodeMapper; |
| | | |
| | | @Override |
| | | public WalletInfoVo walletInfo() { |
| | |
| | | |
| | | DappMineDataEntity mineData = dappSystemDao.selectMineDataForOne(); |
| | | walletInfo.setDirectCnt(direct.size()); |
| | | walletInfo.setInviteId(member.getActiveStatus() == 1 ? member.getInviteId() : "-"); |
| | | // walletInfo.setInviteId(member.getActiveStatus() == 1 ? member.getInviteId() : "-"); |
| | | walletInfo.setInviteId(member.getInviteId()); |
| | | walletInfo.setBalance(walletCoin.getAvailableAmount()); |
| | | walletInfo.setHasBuy(memberInfo.getActiveStatus()); |
| | | walletInfo.setOutCnt(memberInfo.getOutCnt()); |
| | |
| | | ); |
| | | BigDecimal buyNodeAmount = new BigDecimal(StrUtil.isEmpty(buyNodeAmountDic.getValue()) ? "100" : buyNodeAmountDic.getValue()); |
| | | walletInfo.setBuyNodeAmount(buyNodeAmount); |
| | | |
| | | DataDictionaryCustom buyNodeCodeCntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.BUY_NODE_CNT.getType(), |
| | | DataDictionaryEnum.BUY_NODE_CNT.getCode() |
| | | ); |
| | | BigDecimal buyNodeCodeCnt = new BigDecimal(StrUtil.isEmpty(buyNodeCodeCntDic.getValue()) ? "3" : buyNodeCodeCntDic.getValue()); |
| | | walletInfo.setBuyNodeCnt(buyNodeCodeCnt); |
| | | walletInfo.setBuyNode(ObjectUtil.isEmpty(memberInfo.getBuyNode()) ? 0 : memberInfo.getBuyNode()); |
| | | |
| | | BigDecimal bigDecimal = dappFundFlowDao.selectSumAmountByMemberIdAndType(member.getId(), 14); |
| | | walletInfo.setBuyNodePerk(bigDecimal); |
| | | return walletInfo; |
| | | } |
| | | |
| | |
| | | DappFundFlowEntity fundFlow = new DappFundFlowEntity(member.getId(), transferDto.getAmount().negate(), 1, 2, transferDto.getFee(), transferDto.getTxHash()); |
| | | dappFundFlowDao.insert(fundFlow); |
| | | |
| | | chainProducer.sendAchieveTreeMsg(member.getId()); |
| | | // chainProducer.sendAchieveTreeMsg(member.getId()); |
| | | } else { |
| | | int type = 1; |
| | | // 1-认购 2-充值tfc |
| | |
| | | } |
| | | |
| | | member = dappMemberDao.selectById(member.getId()); |
| | | int buyNode = ObjectUtil.isEmpty(member.getBuyNode()) ? 0 : 1; |
| | | if (1 == buyNode) { |
| | | // int buyNode = ObjectUtil.isEmpty(member.getBuyNode()) ? 0 : 1; |
| | | int buyNode = member.getBuyNode(); |
| | | DataDictionaryCustom buyNodeCodeCntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.BUY_NODE_CNT.getType(), |
| | | DataDictionaryEnum.BUY_NODE_CNT.getCode() |
| | | ); |
| | | if (buyNode >= Integer.parseInt(buyNodeCodeCntDic.getValue())) { |
| | | throw new FebsException("Do not repeat purchase"); |
| | | } |
| | | |
| | |
| | | return null; |
| | | } |
| | | if ("success".equals(transferDto.getFlag())) { |
| | | flow.setStatus(2); |
| | | flow.setFromHash(transferDto.getTxHash()); |
| | | dappFundFlowDao.updateById(flow); |
| | | member.setBuyNode(1); |
| | | dappMemberDao.updateById(member); |
| | | |
| | | } else { |
| | | if (flow.getStatus() == 1) { |
| | |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public Long buyStar(BuyStarDto buyStarDto) { |
| | | DappMemberEntity member = LoginUserUtil.getAppUser(); |
| | | |
| | | String upgrade = redisUtils.getString("APP_UPGRADE"); |
| | | if ("upgrade".equals(upgrade)) { |
| | | throw new FebsException("功能升级中"); |
| | | } |
| | | |
| | | /** |
| | | * 买入先验证当前星团是否已经买入 |
| | | */ |
| | | Integer nodeType = buyStarDto.getNodeType(); |
| | | QueryWrapper<DbMemberNode> nodeQueryWrapper = new QueryWrapper<>(); |
| | | nodeQueryWrapper.eq("member_id",member.getId()); |
| | | nodeQueryWrapper.eq("type", nodeType); |
| | | nodeQueryWrapper.eq("work_state", DbMemberNode.STATE_ONE); |
| | | List<DbMemberNode> dbMemberNodes = dbMemberNodeMapper.selectList(nodeQueryWrapper); |
| | | if(CollUtil.isNotEmpty(dbMemberNodes)){ |
| | | throw new FebsException("已购买"); |
| | | } |
| | | |
| | | if (ObjectUtil.isEmpty(buyStarDto.getId())) {//第一次 |
| | | DappFundFlowEntity fundFlow = new DappFundFlowEntity( |
| | | member.getId(), |
| | | buyStarDto.getAmount().negate(), |
| | | 18, |
| | | 1, |
| | | BigDecimal.ZERO, |
| | | buyStarDto.getTxHash()); |
| | | dappFundFlowDao.insert(fundFlow); |
| | | return fundFlow.getId(); |
| | | } else {//第二次 |
| | | DappFundFlowEntity flow = dappFundFlowDao.selectById(buyStarDto.getId()); |
| | | if(ObjectUtil.isEmpty(flow)){ |
| | | return null; |
| | | } |
| | | if ("success".equals(buyStarDto.getFlag())) { |
| | | flow.setFromHash(buyStarDto.getTxHash()); |
| | | flow.setToHash(buyStarDto.getNodeType().toString()); |
| | | dappFundFlowDao.updateById(flow); |
| | | } else { |
| | | if (flow.getStatus() == 1) { |
| | | dappFundFlowDao.deleteById(buyStarDto.getId()); |
| | | } |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public FebsResponse nodeList() { |
| | | List<NodeType> nodeList = NodeType.NODE_1.getNodeList(); |
| | | List<NodeTypeVo> objects = new ArrayList<>(); |
| | | if(CollUtil.isNotEmpty(nodeList)){ |
| | | for(NodeType nodeType : nodeList){ |
| | | NodeTypeVo nodeTypeVo = new NodeTypeVo(); |
| | | nodeTypeVo.setNodeType(nodeType.getNodeType()); |
| | | nodeTypeVo.setNodeAmount(nodeType.getNodeAmount()); |
| | | nodeTypeVo.setNodePerk(nodeType.getNodePerk()); |
| | | objects.add(nodeTypeVo); |
| | | } |
| | | } |
| | | return new FebsResponse().success().data(objects); |
| | | } |
| | | |
| | | @Override |
| | | public MemberNodeVo memberNode(MemberNodeDto memberNodeDto) { |
| | | DappMemberEntity member = LoginUserUtil.getAppUser(); |
| | | Integer type = memberNodeDto.getType(); |
| | | |
| | | QueryWrapper<DbMemberNode> objectQueryWrapper = new QueryWrapper<>(); |
| | | objectQueryWrapper.eq("member_id",member.getId()); |
| | | objectQueryWrapper.eq("type", type); |
| | | objectQueryWrapper.eq("work_state", DbMemberNode.STATE_ONE); |
| | | DbMemberNode dbMemberNode = dbMemberNodeMapper.selectOne(objectQueryWrapper); |
| | | if(ObjectUtil.isEmpty(dbMemberNode)){ |
| | | return null; |
| | | } |
| | | |
| | | return buildTeamMatrix(dbMemberNode); |
| | | } |
| | | |
| | | public MemberNodeVo buildTeamMatrix(DbMemberNode dbMemberNode) { |
| | | Long id = dbMemberNode.getId(); |
| | | |
| | | MemberNodeVo memberNodeVo = new MemberNodeVo(); |
| | | memberNodeVo.setInviteId(getInviteId(id)); |
| | | memberNodeVo.setId(id); |
| | | memberNodeVo.setParentNode(ObjectUtil.isEmpty(dbMemberNode.getParentNode()) ? 0L : dbMemberNode.getParentNode()); |
| | | memberNodeVo.setLeftNode(ObjectUtil.isEmpty(dbMemberNode.getLeftNode()) ? 0L : dbMemberNode.getLeftNode()); |
| | | memberNodeVo.setRightNode(ObjectUtil.isEmpty(dbMemberNode.getRightNode()) ? 0L : dbMemberNode.getRightNode()); |
| | | memberNodeVo.setLeftRight(ObjectUtil.isEmpty(dbMemberNode.getLeftRight()) ? 0 : dbMemberNode.getLeftRight()); |
| | | |
| | | QueryWrapper<DbMemberNode> childQuery = new QueryWrapper<>(); |
| | | childQuery.eq("parent_node",id); |
| | | childQuery.eq("type", dbMemberNode.getType()); |
| | | childQuery.eq("work_state", DbMemberNode.STATE_ONE); |
| | | List<DbMemberNode> childrenNode = dbMemberNodeMapper.selectList(childQuery); |
| | | if(CollUtil.isEmpty(childrenNode)){ |
| | | return memberNodeVo; |
| | | } |
| | | |
| | | List<MemberNodeVo> list = new ArrayList<>(); |
| | | for (DbMemberNode childNode : childrenNode) { |
| | | list.add(buildTeamMatrix(childNode)); |
| | | } |
| | | memberNodeVo.setChildren(list); |
| | | return memberNodeVo; |
| | | } |
| | | |
| | | public String getInviteId(Long memberNodeId){ |
| | | DbMemberNode dbMemberNode = dbMemberNodeMapper.selectById(memberNodeId); |
| | | Long memberId = dbMemberNode.getMemberId(); |
| | | DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId); |
| | | return dappMemberEntity.getInviteId(); |
| | | } |
| | | } |