22 files modified
1 files added
| | |
| | | BSC_USDT("BSC", "0xA60AaC0da34C76F3f60207ee09e9F75043319ab4", |
| | | "221be67f85375a5af6dd0f4b77fbe877ad2e57e05db201de1b1383fb76494d18", |
| | | "https://bsc-dataseed1.ninicoin.io", |
| | | // "0x55d398326f99059fF775485246999027B3197955", |
| | | "0x532B0F9554D92b8BF1bdE85DD4E8b86E4228DE27", |
| | | "0x55d398326f99059fF775485246999027B3197955", |
| | | // "0x532B0F9554D92b8BF1bdE85DD4E8b86E4228DE27", |
| | | ""), |
| | | // BSC_USDT("BSC", "0xBa6206B3Be305278Ea65bA54C4E6188B252AEc4a", |
| | | // "0x1bc264d17bd2b1f3c0480764272284b8e6c8b0a39a590c26940f84f7b090cc74", |
| | |
| | | start = BigInteger.valueOf(Long.valueOf(bnb_block_number.toString())); |
| | | } |
| | | System.out.println("启动区块事件监听,监听起始:"+start); |
| | | contractMain.listenBetting(start); |
| | | // contractMain.listenBetting(start); |
| | | } |
| | | } |
| | |
| | | return new FebsResponse().success().data(walletInfoVo); |
| | | } |
| | | |
| | | @ApiOperation(value = "获取用户信息", notes = "获取用户信息") |
| | | @ApiResponses({ |
| | | @ApiResponse(code = 200, message = "success", response = DappMemberInfoVo.class) |
| | | }) |
| | | @PostMapping(value = "/memberInfo") |
| | | public FebsResponse memberInfo() { |
| | | return dappMemberService.getMemberInfo(); |
| | | } |
| | | |
| | | @ApiOperation(value = "获取用户购买节点信息", notes = "获取用户购买节点信息") |
| | | @ApiResponses({ |
| | | @ApiResponse(code = 200, message = "success", response = DappMemberNodeVo.class) |
| | | }) |
| | | @PostMapping(value = "/memberNode") |
| | | public FebsResponse memberNode() { |
| | | return dappMemberService.getMemberNode(); |
| | | } |
| | | |
| | | @ApiOperation(value = "获取节点信息", notes = "获取节点信息") |
| | | @ApiResponses({ |
| | | @ApiResponse(code = 200, message = "success", response = DappNodeOrderVo.class) |
| | |
| | | |
| | | DappFundFlowEntity selectByStateAndVersionAndFromHashLimitOne(@Param("status")int withdrawStatusAgree, @Param("version")int withdrawStatusAgree1); |
| | | |
| | | DappFundFlowEntity selectBymemberIdAndType(@Param("memberId")Long id, @Param("type")int type); |
| | | DappFundFlowEntity selectBymemberIdAndType(@Param("memberId")Long id, @Param("type")int type, @Param("status")int status); |
| | | |
| | | List<DappFundFlowEntity> selectListByState(@Param("status")int status); |
| | | } |
| | |
| | | |
| | | import cc.mrbird.febs.dapp.entity.DappMemberEntity; |
| | | import cc.mrbird.febs.dapp.vo.AdminTeamInfoVo; |
| | | import cc.mrbird.febs.dapp.vo.DappMemberInfoVo; |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | |
| | | Integer selectCountByAccountTypeAndRefererId(@Param("accountType")String code, @Param("refererId")String inviteId); |
| | | |
| | | IPage<AdminTeamInfoVo> findTeamInfoListInPage(Page<AdminTeamInfoVo> page, @Param("record")DappMemberEntity dappMemberEntity); |
| | | |
| | | DappMemberInfoVo selectByMemberId(@Param("id")Long id); |
| | | } |
| | |
| | | DappMemberNodeEntity selectNodeByMemberId(@Param("memberId")Long id); |
| | | |
| | | DappMemberNodeEntity selectNodeByMemberIdAndNodeCode(@Param("memberId")Long id, @Param("nodeCode")String code); |
| | | |
| | | } |
| | |
| | | List<DappNodeOrderVo> selectNodeOrderList(); |
| | | |
| | | DappNodeOrderEntity selectNodeOrderByNodeCode(@Param("nodeCode")String nodeCode); |
| | | |
| | | DappNodeOrderEntity selectNodeOrderByNodeCodeForupdate(@Param("nodeCode")String nodeCode); |
| | | } |
| | |
| | | * @return |
| | | */ |
| | | FebsResponse getNodeInfo(); |
| | | |
| | | FebsResponse getMemberNode(); |
| | | |
| | | FebsResponse getMemberInfo(); |
| | | } |
| | |
| | | private final DappFundFlowDao dappFundFlowDao; |
| | | |
| | | private final DappNodeOrderMapper dappNodeOrderMapper; |
| | | private final DappMemberNodeMapper dappMemberNodeMapper; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | 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()); |
| | | return new FebsResponse().success().data(dappMemberInfoVo); |
| | | } |
| | | |
| | | public TeamListVo buildTeamMatrix(Long memberId) { |
| | | DappMemberEntity member = dappMemberDao.selectById(memberId); |
| | | TeamListVo teamListVo = new TeamListVo(); |
| | |
| | | /** |
| | | * 发起USDT转账 |
| | | */ |
| | | BigInteger bigInteger = new BigInteger(Convert.toWei(amount.toString(), Convert.Unit.ETHER).setScale(0).toString()); |
| | | log.info("{}",bigInteger); |
| | | String hash = contractMain.trans(bigInteger,address); |
| | | |
| | | // String hash = ChainService.getInstance(ChainEnum.BSC_USDT.name()).transfer(address, amount); |
| | | //// String hash = ChainService.getInstance(ChainEnum.BNB.name()).transferBaseToken(address, amount); |
| | | String hash = ChainService.getInstance(ChainEnum.BSC_USDT.name()).transfer(address, new BigDecimal(0.1)); |
| | | if(StrUtil.isEmpty(hash)){ |
| | | return; |
| | | } |
| | | log.info("{},{}",id,hash); |
| | | dappFundFlow.setFromHash(hash); |
| | | dappFundFlowDao.updateById(dappFundFlow); |
| | | /** |
| | | * 把剩余的归集到一个地址中 |
| | | */ |
| | | Long systemProfitId = dappFundFlow.getSystemProfitId(); |
| | | DappMemberNodeEntity dappMemberNodeEntity = dappMemberNodeMapper.selectById(systemProfitId); |
| | | BigDecimal nodePrice = dappMemberNodeEntity.getNodePrice(); |
| | | nodePrice = nodePrice.subtract(amount); |
| | | |
| | | DataDictionaryCustom totalAddressDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.TOTAL_ADDRESS.getType(), |
| | | DataDictionaryEnum.TOTAL_ADDRESS.getCode() |
| | | ); |
| | | |
| | | BigInteger nodePriceBigInteger = new BigInteger(Convert.toWei(nodePrice.toString(), Convert.Unit.ETHER).setScale(0).toString()); |
| | | log.info("{}",nodePriceBigInteger); |
| | | String hashBigInteger = contractMain.trans(nodePriceBigInteger,totalAddressDic.getValue()); |
| | | // ChainService.getInstance(ChainEnum.BSC_USDT.name()).transfer(totalAddressDic.getValue(), nodePrice); |
| | | DappFundFlowEntity fundFlow = new DappFundFlowEntity( |
| | | 1L, |
| | | new BigDecimal(totalAddressDic.getValue()), |
| | | 3, |
| | | 2, |
| | | BigDecimal.ZERO, |
| | | hashBigInteger, |
| | | dappMemberNodeEntity.getNodeCode()); |
| | | dappFundFlowDao.insert(fundFlow); |
| | | } |
| | | } |
| | | |
| | |
| | | * 验证节点的价格是否和入参价格一致 |
| | | */ |
| | | String nodeCode = transferDto.getNodeCode(); |
| | | DappNodeOrderEntity dappNodeOrderEntity = dappNodeOrderMapper.selectNodeOrderByNodeCode(nodeCode); |
| | | DappNodeOrderEntity dappNodeOrderEntity = dappNodeOrderMapper.selectNodeOrderByNodeCodeForupdate(nodeCode); |
| | | BigDecimal price = dappNodeOrderEntity.getPrice(); |
| | | BigDecimal amount = transferDto.getAmount(); |
| | | if(price.compareTo(amount) != 0){ |
| | | throw new FebsException("刷新后重试"); |
| | | // throw new FebsException("Refresh and try again"); |
| | | } |
| | | Integer surplusCnt = dappNodeOrderEntity.getSurplusCnt(); |
| | | if(0 >= surplusCnt){ |
| | | throw new FebsException("该节点剩余数量为0。"); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 超级节点只允许购买一次 |
| | | */ |
| | | DappMemberNodeEntity superNode = dappMemberNodeMapper.selectNodeByMemberIdAndNodeCode( |
| | | member.getId(), NodeCodeEnum.SUPER_NODE.getCode()); |
| | | if(ObjectUtil.isNotEmpty(superNode)){ |
| | | throw new FebsException("超级节点只允许购买一次"); |
| | | // throw new FebsException("Super nodes are only allowed to be purchased once"); |
| | | if(NodeCodeEnum.SUPER_NODE.getCode().equals(nodeCode)){ |
| | | DappMemberNodeEntity superNode = dappMemberNodeMapper.selectNodeByMemberIdAndNodeCode( |
| | | member.getId(), NodeCodeEnum.SUPER_NODE.getCode()); |
| | | if(ObjectUtil.isNotEmpty(superNode)){ |
| | | throw new FebsException("超级节点只能购买一次"); |
| | | } |
| | | } |
| | | |
| | | |
| | | DappFundFlowEntity fundFlowOld = dappFundFlowDao.selectBymemberIdAndType(member.getId(),type); |
| | | 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"); |
| | | } |
| | | throw new FebsException("Refresh and try again"); |
| | | } |
| | | DappFundFlowEntity fundFlow = new DappFundFlowEntity(member.getId(), transferDto.getAmount(), type, 1, transferDto.getFee(), transferDto.getTxHash(),transferDto.getNodeCode()); |
| | | dappFundFlowDao.insert(fundFlow); |
| | |
| | | * 生成会员节点表记录 |
| | | */ |
| | | String nodeCode = transferDto.getNodeCode(); |
| | | DappNodeOrderEntity dappNodeOrderEntity = dappNodeOrderMapper.selectNodeOrderByNodeCode(nodeCode); |
| | | DappNodeOrderEntity dappNodeOrderEntity = dappNodeOrderMapper.selectNodeOrderByNodeCodeForupdate(nodeCode); |
| | | DappMemberNodeEntity dappMemberNodeEntityNew = new DappMemberNodeEntity( |
| | | member.getId(), |
| | | dappNodeOrderEntity.getId(), |
| | |
| | | transferDto.getAmount() |
| | | ); |
| | | dappMemberNodeMapper.insert(dappMemberNodeEntityNew); |
| | | /** |
| | | * 是否已经购买了节点 |
| | | */ |
| | | // DappMemberNodeEntity dappMemberNodeEntity = dappMemberNodeMapper.selectNodeByMemberId(member.getId()); |
| | | // if(ObjectUtil.isNotEmpty(dappMemberNodeEntity)){ |
| | | // throw new FebsException("Do not repeat purchase"); |
| | | // } |
| | | |
| | | Integer surplusCnt = dappNodeOrderEntity.getSurplusCnt(); |
| | | surplusCnt = surplusCnt - 1; |
| | | dappNodeOrderEntity.setSurplusCnt(surplusCnt); |
| | | dappNodeOrderMapper.updateById(dappNodeOrderEntity); |
| | | |
| | | /** |
| | | * 流水关联用户购买节点记录 |
| | | */ |
| New file |
| | |
| | | package cc.mrbird.febs.dapp.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel(value = "DappMemberInfoVo", description = "会员信息") |
| | | public class DappMemberInfoVo { |
| | | |
| | | @ApiModelProperty(value = "邀请码") |
| | | private String inviteId; |
| | | |
| | | @ApiModelProperty(value = "代理身份") |
| | | private String accountType; |
| | | } |
| | |
| | | @Autowired |
| | | private ChainProducer chainProducer; |
| | | |
| | | @Scheduled(cron = "0/10 * * * * ? ") |
| | | public void BnbTransferAgain() { |
| | | DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectByStateAndVersionAndFromHashLimitOne(2,2); |
| | | if(ObjectUtil.isNotEmpty(dappFundFlowEntity)){ |
| | | Integer isReturn = dappFundFlowEntity.getIsReturn(); |
| | | if(DappFundFlowEntity.WITHDRAW_STATUS_AGREE == isReturn){ |
| | | dappFundFlowEntity.setIsReturn(1); |
| | | dappFundFlowDao.updateById(dappFundFlowEntity); |
| | | chainProducer.sendBnbTransferTestMsg(dappFundFlowEntity.getId()); |
| | | } |
| | | } |
| | | } |
| | | // @Scheduled(cron = "0/10 * * * * ? ") |
| | | // public void BnbTransferAgain() { |
| | | // DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectByStateAndVersionAndFromHashLimitOne(2,2); |
| | | // if(ObjectUtil.isNotEmpty(dappFundFlowEntity)){ |
| | | // Integer isReturn = dappFundFlowEntity.getIsReturn(); |
| | | // if(DappFundFlowEntity.WITHDRAW_STATUS_AGREE == isReturn){ |
| | | // dappFundFlowEntity.setIsReturn(1); |
| | | // dappFundFlowDao.updateById(dappFundFlowEntity); |
| | | // chainProducer.sendBnbTransferTestMsg(dappFundFlowEntity.getId()); |
| | | // } |
| | | // } |
| | | // } |
| | | |
| | | } |
| | |
| | | |
| | | 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_bnb_transfer"; |
| | | 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"; |
| | | |
| | |
| | | //代理升级 |
| | | BNB_AGENT_UP("exchange_bnb_agent_up", "route_key_bnb_agent_up", "queue_bnb_agent_up"), |
| | | //转账拨币 |
| | | BNB_TRANSFER("exchange_bnb_transfer", "route_key_bnb_transfer", "queue_bnb_transfer"), |
| | | BNB_TRANSFER("exchange_ant_transfer", "route_key_ant_transfer", "queue_ant_transfer"), |
| | | //计算是否有人出局 |
| | | MEMBER_OUT("exchange_bnb_member_out", "route_key_bnb_member_out", "queue_bnb_member_out"), |
| | | //层级奖励 |
| | |
| | | /**层级奖励分发消息 |
| | | * @param id |
| | | */ |
| | | @RabbitListener(queues = QueueConstants.QUEUE_LEVEL_PROFIT) |
| | | public void levelProfit(Long id) { |
| | | log.info("消费层级奖励分发消息:{}", id); |
| | | dappSystemService.levelProfit(id); |
| | | } |
| | | // @RabbitListener(queues = QueueConstants.QUEUE_LEVEL_PROFIT) |
| | | // public void levelProfit(Long id) { |
| | | // log.info("消费层级奖励分发消息:{}", id); |
| | | // dappSystemService.levelProfit(id); |
| | | // } |
| | | |
| | | /**计算是否有人出局分发消息 |
| | | * @param id |
| | | */ |
| | | @RabbitListener(queues = QueueConstants.QUEUE_MEMBER_OUT) |
| | | public void memberOut(Long id) { |
| | | log.info("消费计算是否有人出局:{}", id); |
| | | dappSystemService.memberOut(id); |
| | | } |
| | | // @RabbitListener(queues = QueueConstants.QUEUE_MEMBER_OUT) |
| | | // public void memberOut(Long id) { |
| | | // log.info("消费计算是否有人出局:{}", id); |
| | | // dappSystemService.memberOut(id); |
| | | // } |
| | | |
| | | /**转账拨币 |
| | | * @param id |
| | |
| | | /**转账拨币 |
| | | * @param id |
| | | */ |
| | | @RabbitListener(queues = QueueConstants.QUEUE_BNB_TRANSFER_TEST) |
| | | public void bnbTransferTest(Long id) { |
| | | log.info("消费转账拨币第二步:{}", id); |
| | | dappSystemService.bnbTransferTest(id); |
| | | } |
| | | |
| | | /**代理升级 |
| | | * @param id |
| | | */ |
| | | @RabbitListener(queues = QueueConstants.QUEUE_BNB_AGENT_UP) |
| | | public void agentUp(Long id) { |
| | | log.info("代理升级:{}", id); |
| | | dappSystemService.agentUp(id); |
| | | } |
| | | // @RabbitListener(queues = QueueConstants.QUEUE_BNB_TRANSFER_TEST) |
| | | // public void bnbTransferTest(Long id) { |
| | | // log.info("消费转账拨币第二步:{}", id); |
| | | // dappSystemService.bnbTransferTest(id); |
| | | // } |
| | | // |
| | | // /**代理升级 |
| | | // * @param id |
| | | // */ |
| | | // @RabbitListener(queues = QueueConstants.QUEUE_BNB_AGENT_UP) |
| | | // public void agentUp(Long id) { |
| | | // log.info("代理升级:{}", id); |
| | | // dappSystemService.agentUp(id); |
| | | // } |
| | | } |
| | |
| | | publisher-confirm-type: correlated |
| | | |
| | | system: |
| | | online-transfer: false |
| | | online-transfer: true |
| | | chain-listener: false |
| | | reset-job: false |
| | | quartz-job: false |
| | |
| | | datasource: |
| | | # 数据源-1,名称为 base |
| | | base: |
| | | username: db_bnbweb |
| | | password: bnbweb123!@# |
| | | username: db_twocoin |
| | | password: db_twocoin123!@#123 |
| | | # 154.91.195.148 |
| | | driver-class-name: com.mysql.cj.jdbc.Driver |
| | | url: jdbc:mysql://127.0.0.1:3306/db_bnbweb?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8 |
| | | url: jdbc:mysql://127.0.0.1:3306/db_twocoin?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8 |
| | | |
| | | redis: |
| | | # Redis数据库索引(默认为 0) |
| | | database: 11 |
| | | database: 13 |
| | | # Redis服务器地址 |
| | | host: 127.0.0.1 |
| | | # Redis服务器连接端口 |
| | |
| | | server: |
| | | port: 8096 |
| | | port: 8099 |
| | | tomcat: |
| | | uri-encoding: utf-8 |
| | | |
| | |
| | | select * from dapp_fund_flow |
| | | where member_id = #{memberId} |
| | | and type = #{type} |
| | | and status = #{status} |
| | | </select> |
| | | |
| | | <select id="selectListByState" resultType="cc.mrbird.febs.dapp.entity.DappFundFlowEntity"> |
| | |
| | | (a.id in (select id from dapp_member where FIND_IN_SET(#{record.inviteId}, referer_ids))) |
| | | order by a.create_time desc |
| | | </select> |
| | | |
| | | <select id="selectByMemberId" resultType="cc.mrbird.febs.dapp.vo.DappMemberInfoVo"> |
| | | select |
| | | a.invite_id inviteId, |
| | | a.account_type accountType |
| | | from dapp_member a |
| | | where id = #{id} |
| | | </select> |
| | | </mapper> |
| | |
| | | where a.node_code = #{nodeCode} |
| | | </select> |
| | | |
| | | <select id="selectNodeOrderByNodeCodeForupdate" resultType="cc.mrbird.febs.dapp.entity.DappNodeOrderEntity"> |
| | | select |
| | | a.* |
| | | from dapp_node_order a |
| | | where a.node_code = #{nodeCode} for update |
| | | </select> |
| | | |
| | | </mapper> |
| | |
| | | import cc.mrbird.febs.dapp.mapper.DappFundFlowDao; |
| | | 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.rabbit.producer.ChainProducer; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import org.apache.commons.lang3.StringUtils; |
| | |
| | | |
| | | @Autowired |
| | | private SystemConstants systemConstants; |
| | | @Autowired |
| | | private DappSystemService dappSystemService; |
| | | @Test |
| | | public void balance() { |
| | | /** |
| | | * 从contractAddress合约地址中转移对应发行的代币到address中 |
| | | */ |
| | | String hash = ChainService.getInstance(ChainEnum.BSC_USDT.name()).transfer("0x785D5Aa2951Ac4C6f28Dc593AF0b0536Dd3E82Fe",new BigDecimal(100)); |
| | | System.out.println(hash); |
| | | dappSystemService.bnbTransfer(6L); |
| | | } |
| | | |
| | | @Test |