src/main/java/cc/mrbird/febs/common/contants/AppContants.java
@@ -170,4 +170,6 @@ public static final String RESP_PRIVATE_KEY = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBANyCPnifddX7HYN/wexyqxt3cFCKoE1/+lCIv7i+Epo83xlwbRet6rTXyGX7JCs5qpg1UvC+LuB+Relv8bZPEwScLmu0B5awwDmY954974KD6Yn/JdHi2WT933QvmDs9PFqUfnQd0KhfAUF6eS2K0quwN9DOLX5UIcEZSE9SOwkdAgMBAAECgYAt52Mv4yo5qHQFavQoz9o09pFIAwPJ/mlSmJUo1VC0ERX0isX7FvZ0PTN3n2dxJCkSVI92lHDXxRGyvd4YsK9pdErGVL2DecbbER7069y94g/uHsYq15skzLlyUNhyu2FOUCsVFy+M/C0qk14z/xG1ze3GWNHP1oc1leAYpoWmAQJBAPXxRvYTxmZAFv3J4pcf/FXqmUXdbJI5sHWXe6Pcs+rIuil5ePqX6AQBoQ5PalYhe5/kKzr7Gy6GSzlpztuOV50CQQDlhrTNytQdDCNIOL8uw3t4D8mDGuslPcRoykmaCQhd4NvaqLZrBS8k+TuS2+v5ryng3HhcYjR0h1MHHG69En+BAkEAzt2G5mxzsIWv0QACi0LoKAwPp+g67jN/7SjhYk69Nnpnu4Lk80LacKQ+J588vf2j0jVE93NGxbdHhp8s0xfDMQJBAJFlOqVeRe28oaD/aYRLCqyse39Ujv6BWSj0c5li/WzSoxKpaxzyJMIsK2PFcn8xSbsKjigfgZELpDnN9gxJaoECQCn+tZB0g9WJMaGNCMdlStPHAO2ajS1HY6BV5Xq13hixAdp5bLzbg0GrY25MrpTCFBEqCx+7F4cYUvVazLuAK6g="; public static final LinkedList<String> ENCRYPT_METHOD = new LinkedList<>(); public static final String IDO_MEMBER_RECOMMEND_CNT = "IDO_MEMBER_RECOMMEND_CNT"; } src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java
@@ -54,6 +54,12 @@ return new FebsResponse().success().data(dappWalletService.transfer(transferDto)); } @ApiOperation(value = "开盲盒", notes = "开盲盒") @PostMapping(value = "/boxSurprise") public FebsResponse boxSurprise() { return new FebsResponse().success().data(dappWalletService.boxSurprise()); } // @ApiOperation(value = "记录列表", notes = "记录列表") // @PostMapping(value = "/recordInPage") // public FebsResponse recordInPage(@RequestBody RecordInPageDto recordInPageDto) { src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java
@@ -47,7 +47,7 @@ private BigDecimal amount; /** * 类型 1-买入 2-卖出 3-采矿 * 类型 1-买入 2-卖出 3-采矿 5-获取盲盒 6-开盲盒获取卡牌 */ private Integer type; src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java
@@ -1,8 +1,10 @@ package cc.mrbird.febs.dapp.service; import cc.mrbird.febs.dapp.dto.SystemDto; import cc.mrbird.febs.dapp.entity.DappMemberEntity; import cc.mrbird.febs.dapp.entity.DappMineDataEntity; import java.math.BigDecimal; import java.util.Map; public interface DappSystemService { @@ -39,4 +41,6 @@ void transferPoolSetting(); void sourcePoolUsdtOutLimitSetting(); void idoBuy(DappMemberEntity member, BigDecimal amount); } src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java
@@ -39,4 +39,6 @@ Long transfer(TransferDto transferDto); Map<String, BigDecimal> calPrice(PriceDto priceDto); int boxSurprise(); } src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java
@@ -5,10 +5,7 @@ import cc.mrbird.febs.common.utils.ShareCodeUtil; import cc.mrbird.febs.dapp.chain.*; import cc.mrbird.febs.dapp.entity.*; import cc.mrbird.febs.dapp.mapper.DappFundFlowDao; import cc.mrbird.febs.dapp.mapper.DappMemberDao; import cc.mrbird.febs.dapp.mapper.DappOnlineTransferDao; import cc.mrbird.febs.dapp.mapper.DataDictionaryCustomMapper; import cc.mrbird.febs.dapp.mapper.*; import cc.mrbird.febs.dapp.service.DappMemberService; import cc.mrbird.febs.dapp.service.DappSystemService; import cc.mrbird.febs.dapp.utils.OnlineTransferUtil; @@ -44,12 +41,10 @@ @Resource private ChainProducer chainProducer; @Resource private DappOnlineTransferDao dappOnlineTransferDao; @Resource private DataDictionaryCustomMapper dataDictionaryCustomMapper; @Autowired private DappSystemService dappSystemService; @@ -84,8 +79,6 @@ return; } String hasStart = redisUtils.getString(AppContants.SYSTEM_START_FLAG); BigInteger tokens = e.tokens; BigDecimal amount = new BigDecimal(tokens.toString()).divide(BigDecimal.TEN.pow(decimals), decimals, RoundingMode.HALF_DOWN); @@ -105,7 +98,7 @@ boolean hasFlow = false; for (DappFundFlowEntity flow : flows) { if (flow.getStatus() == 1) { if (amount.compareTo(flow.getAmount().multiply(flow.getNewestPrice()).setScale(4, RoundingMode.HALF_UP)) == 0) { if (amount.compareTo(flow.getAmount()) == 0) { hasFlow = true; fundFlow = flow; fundFlow.setFromHash(e.log.getTransactionHash()); @@ -127,8 +120,7 @@ fundFlow.setTargetAmount(amount); dappFundFlowDao.updateById(fundFlow); // 查找直推,并判断自身是否大于50,若大于50则,上级推荐则+1 dappSystemService.idoBuy(fromMember, amount); } } } src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
@@ -50,6 +50,8 @@ private final RedisUtils redisUtils; private final DataDictionaryCustomMapper dataDictionaryCustomMapper; private final DappIdoAssetsDao dappIdoAssetsDao; @Override @Transactional(rollbackFor = Exception.class) public void approve(ApproveDto approveDto) { @@ -129,7 +131,14 @@ throw new FebsException("邀请人不存在"); } member = insertMember(connectDto.getAddress(), null); member = insertMember(connectDto.getAddress(), connectDto.getInviteId()); DappIdoAssetsEntity dappIdoAssetsEntity = new DappIdoAssetsEntity(); dappIdoAssetsEntity.setBoxCnt(0); dappIdoAssetsEntity.setCoinAmount(BigDecimal.ZERO); dappIdoAssetsEntity.setUsdtAmount(BigDecimal.ZERO); dappIdoAssetsEntity.setMemberId(member.getId()); dappIdoAssetsDao.insert(dappIdoAssetsEntity); } String key = LoginUserUtil.getLoginKey(connectDto.getAddress(), connectDto.getNonce(), connectDto.getSign()); @@ -286,12 +295,11 @@ member.setNodeType(2); } member.setActiveStatus(1); dappMemberDao.insert(member); if (StrUtil.isEmpty(refererId)) { refererId = "0"; // 若没有推荐人,则直接激活 member.setActiveStatus(1); } member.setInviteId(ShareCodeUtil.toSerialCode(member.getId())); src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
@@ -50,6 +50,7 @@ private final DataDictionaryCustomMapper dataDictionaryCustomMapper; private final DappOnlineTransferDao dappOnlineTransferDao; private final ChainProducer chainProducer; private final DappIdoAssetsDao dappIdoAssetsDao; @Override @@ -507,4 +508,38 @@ redisUtils.set(AppContants.REDIS_KEY_USDT_OUT_LIMIT, total); redisUtils.set(AppContants.REDIS_KEY_USDT_OUT_LIMIT_REMAIN, total); } @Override public void idoBuy(DappMemberEntity member, BigDecimal amount) { DappMemberEntity parent = dappMemberDao.selectMemberInfoByInviteId(member.getRefererId()); int box = 0; Object parentRecommend = redisUtils.hget(AppContants.IDO_MEMBER_RECOMMEND_CNT, parent.getAddress()); if (parentRecommend == null) { redisUtils.hset(AppContants.IDO_MEMBER_RECOMMEND_CNT, parent.getAddress(), 1); } else { int i = (int) parentRecommend; // 如果超过10个,则新增一个盲盒,并重置推荐人数 if (++i == 10) { box = 1; redisUtils.hset(AppContants.IDO_MEMBER_RECOMMEND_CNT, parent.getAddress(), 1); } else { redisUtils.hset(AppContants.IDO_MEMBER_RECOMMEND_CNT, parent.getAddress(), i); } } if (box > 0) { DappFundFlowEntity boxFundFlow = new DappFundFlowEntity(parent.getId(), new BigDecimal(box), 5, 2, BigDecimal.ZERO); dappFundFlowDao.insert(boxFundFlow); } DappIdoAssetsEntity idoAssets = dappIdoAssetsDao.selectByMemberId(member.getId()); BigDecimal count = amount.divide(new BigDecimal(50), 0, RoundingMode.HALF_UP); BigDecimal coinAmount = new BigDecimal(1000).multiply(count); idoAssets.setBoxCnt(idoAssets.getBoxCnt() + box); idoAssets.setCoinAmount(idoAssets.getCoinAmount().add(coinAmount)); idoAssets.setUsdtAmount(idoAssets.getUsdtAmount().add(amount)); dappIdoAssetsDao.updateById(idoAssets); } } src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
@@ -230,7 +230,6 @@ public Map<String, BigDecimal> calPrice(PriceDto priceDto) { DappMemberEntity member = LoginUserUtil.getAppUser(); String hasStart = redisUtils.getString(AppContants.SYSTEM_START_FLAG); if (!"start".equals(hasStart)) { HashMap<String, BigDecimal> map = new HashMap<>(); @@ -255,4 +254,21 @@ map.put("y", y); return map; } @Override public int boxSurprise() { DappMemberEntity member = LoginUserUtil.getAppUser(); DappIdoAssetsEntity idoAssets = dappIdoAssetsDao.selectByMemberId(member.getId()); if (idoAssets.getBoxCnt() < 1) { throw new FebsException("盲盒数量不足"); } idoAssets.setBoxCnt(idoAssets.getBoxCnt() - 1); dappIdoAssetsDao.updateById(idoAssets); // TODO 线上转账 return 1; } } src/main/java/cc/mrbird/febs/job/ChainListenerJob.java
@@ -71,7 +71,7 @@ long start = System.currentTimeMillis(); log.info("区块链监听开始启动"); Object incrementObj = redisUtils.get(AppContants.REDIS_KEY_BLOCK_ETH_INCREMENT_NUM); BigInteger newest = ChainService.getInstance(ChainEnum.BSC_TFC.name()).blockNumber(); BigInteger newest = ChainService.getInstance(ChainEnum.BSC_USDT.name()).blockNumber(); BigInteger block; if (incrementObj == null) { block = newest; src/test/java/cc/mrbird/febs/MemberTest.java
@@ -1,6 +1,7 @@ package cc.mrbird.febs; import cc.mrbird.febs.common.contants.AppContants; import cc.mrbird.febs.common.utils.RedisUtils; import cc.mrbird.febs.dapp.entity.DappMemberEntity; import cc.mrbird.febs.dapp.entity.DataDictionaryCustom; import cc.mrbird.febs.dapp.mapper.DappMemberDao; @@ -68,4 +69,12 @@ member.setRefererIds(ids); member.setFeeProfitIds(feeProfitIds); } @Autowired private RedisUtils redisUtils; @Test public void redisTest() { redisUtils.hget("1234567", "1111111"); } }