|  |  | 
 |  |  | package cc.mrbird.febs.mall.chain.job; | 
 |  |  |  | 
 |  |  | import cc.mrbird.febs.common.enumerates.FlowTypeEnum; | 
 |  |  | import cc.mrbird.febs.common.enumerates.MallMoneyFlowTypeEnum; | 
 |  |  | import cc.mrbird.febs.common.utils.AppContants; | 
 |  |  | import cc.mrbird.febs.common.utils.RedisUtils; | 
 |  |  | import cc.mrbird.febs.mall.chain.constants.ChainConstants; | 
 |  |  | import cc.mrbird.febs.mall.chain.enums.ChainEnum; | 
 |  |  | import cc.mrbird.febs.mall.chain.enums.CoinTypeEnum; | 
 |  |  | import cc.mrbird.febs.mall.chain.enums.EthService; | 
 |  |  | import cc.mrbird.febs.mall.chain.service.ChainService; | 
 |  |  | import cc.mrbird.febs.mall.chain.service.ContractChainService; | 
 |  |  | import cc.mrbird.febs.mall.chain.service.TrxUsdtUpdateService; | 
 |  |  | import cc.mrbird.febs.mall.entity.MallMemberWallet; | 
 |  |  | import cc.mrbird.febs.mall.entity.MallMoneyFlow; | 
 |  |  | import cc.mrbird.febs.mall.entity.MemberCoinAddressEntity; | 
 |  |  | import cc.mrbird.febs.mall.entity.MemberCoinChargeEntity; | 
 |  |  | import cc.mrbird.febs.mall.mapper.MallMemberWalletMapper; | 
 |  |  | import cc.mrbird.febs.mall.mapper.MemberCoinAddressDao; | 
 |  |  | import cc.mrbird.febs.mall.mapper.MemberCoinChargeDao; | 
 |  |  | import cc.mrbird.febs.mall.service.IMallMoneyFlowService; | 
 |  |  | import cn.hutool.core.util.ObjectUtil; | 
 |  |  | import cn.hutool.core.util.StrUtil; | 
 |  |  | import cn.hutool.http.HttpUtil; | 
 |  |  | 
 |  |  |     private RedisUtils redisUtils; | 
 |  |  |     @Resource | 
 |  |  |     private MemberCoinAddressDao memberCoinAddressDao; | 
 |  |  |     @Resource | 
 |  |  |     private MallMemberWalletMapper mallMemberWalletMapper; | 
 |  |  |     @Resource | 
 |  |  |     private IMallMoneyFlowService mallMoneyFlowService; | 
 |  |  |     @Resource | 
 |  |  |     private MemberCoinChargeDao memberCoinChargeDao; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 归集ERC20 | 
 |  |  | 
 |  |  | //                ChainService.getInstance(ChainEnum.BSC_USDT.name()).transferBaseToken(next, gas); | 
 |  |  | //            } | 
 |  |  |  | 
 |  |  |             ChainService.getInstance(ChainEnum.BSC_USDT.name()).transfer(memberCoinAddressEntity.getPrivateKey(), | 
 |  |  |             String transfer = ChainService.getInstance(ChainEnum.BSC_USDT.name()).transfer(memberCoinAddressEntity.getPrivateKey(), | 
 |  |  |                     memberCoinAddressEntity.getAddress(), | 
 |  |  |                     AppContants.ERC20_POOL_ADDRESS, | 
 |  |  |                     balanceOf.toString()); | 
 |  |  |             if(StrUtil.isNotEmpty(transfer)){ | 
 |  |  |                 Long memberId = memberCoinAddressEntity.getMemberId(); | 
 |  |  |                 // 查询钱包 并更新 | 
 |  |  |                 MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId); | 
 |  |  |                 if (mallMemberWallet == null) { | 
 |  |  |                     return; | 
 |  |  |                 } | 
 |  |  |                 mallMemberWalletMapper.updateBlockBalanceById(mallMemberWallet.getId(), balanceOf.setScale(4, BigDecimal.ROUND_DOWN)); | 
 |  |  |  | 
 |  |  |                 String orderNo = insertCoinCharge(next, memberId, balanceOf.setScale(4, BigDecimal.ROUND_DOWN), CoinTypeEnum.USDT.name(), "ERC20", BigDecimal.ZERO); | 
 |  |  |                 Long chargeFlowId = mallMoneyFlowService.addMoneyFlow( | 
 |  |  |                         memberId, | 
 |  |  |                         orderNo, | 
 |  |  |                         balanceOf.setScale(4, BigDecimal.ROUND_DOWN), | 
 |  |  |                         MallMoneyFlowTypeEnum.CHARGE.getCode(), | 
 |  |  |                         MallMoneyFlow.STATUS_SUCCESS, | 
 |  |  |                         MallMoneyFlow.IS_RETURN_Y, | 
 |  |  |                         memberId, | 
 |  |  |                         FlowTypeEnum.BALANCE.getValue(), | 
 |  |  |                         MallMoneyFlowTypeEnum.CHARGE.getName() | 
 |  |  |                 ); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     public String insertCoinCharge(String address, Long memberId, BigDecimal newBalance, String symbol, String tag, BigDecimal lastAmount) { | 
 |  |  |         MemberCoinChargeEntity memberCoinChargeEntity = new MemberCoinChargeEntity(); | 
 |  |  |         memberCoinChargeEntity.setAddress(address); | 
 |  |  |         memberCoinChargeEntity.setMemberId(memberId); | 
 |  |  |         memberCoinChargeEntity.setAmount(newBalance); | 
 |  |  |         memberCoinChargeEntity.setSymbol(symbol); | 
 |  |  |         memberCoinChargeEntity.setTag(tag); | 
 |  |  |         memberCoinChargeEntity.setStatus(1); | 
 |  |  |         memberCoinChargeEntity.setLastAmount(lastAmount); | 
 |  |  |         String orderNo = generateNo(); | 
 |  |  |         memberCoinChargeEntity.setOrderCode(orderNo); | 
 |  |  |         memberCoinChargeDao.insert(memberCoinChargeEntity); | 
 |  |  |         return orderNo; | 
 |  |  |     } | 
 |  |  |     private String generateNo() { | 
 |  |  |         // 生成订单号 | 
 |  |  |         Long timestamp = System.currentTimeMillis(); | 
 |  |  |         // 随机数 | 
 |  |  |         int random = (int) (Math.random() * 10); | 
 |  |  |         return String.valueOf(timestamp).substring(2) + random; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 归集ERC20 | 
 |  |  |      */ |