| package cc.mrbird.febs.mall.chain.ercCoin; | 
|   | 
| import cc.mrbird.febs.common.enumerates.RunVipDataDictionaryEnum; | 
| import cc.mrbird.febs.common.enumerates.YesOrNoEnum; | 
| import cc.mrbird.febs.mall.entity.MallCharge; | 
| import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper; | 
| import cc.mrbird.febs.mall.mapper.MallChargeMapper; | 
| import cc.mrbird.febs.rabbit.producter.AgentProducer; | 
| import cn.hutool.core.collection.CollUtil; | 
| import cn.hutool.core.util.StrUtil; | 
| import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.springframework.stereotype.Service; | 
|   | 
| import javax.annotation.Resource; | 
| import java.math.BigDecimal; | 
| import java.math.BigInteger; | 
| import java.math.RoundingMode; | 
| import java.util.List; | 
|   | 
| @Slf4j | 
| @Service | 
| public class BscUsdtContractEvent implements ContractEventService { | 
|   | 
|     @Resource | 
|     private DataDictionaryCustomMapper dataDictionaryCustomMapper; | 
|   | 
|     @Resource | 
|     private MallChargeMapper mallChargeMapper; | 
|     @Resource | 
|     private AgentProducer agentProducer; | 
|   | 
|     @Override | 
|     public void sdmUSDT(EthUsdtContract.TransferEventResponse e) { | 
|         if (e.to == null) { | 
|             return; | 
|         } | 
|         String sysAddress = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( | 
|                 RunVipDataDictionaryEnum.CHARGE_SYS_ADDRESS_BSC.getType(),  RunVipDataDictionaryEnum.CHARGE_SYS_ADDRESS_BSC.getCode() | 
|         ).getValue(); | 
|         String type = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( | 
|                 RunVipDataDictionaryEnum.CHARGE_TYPE_BSC.getType(),  RunVipDataDictionaryEnum.CHARGE_TYPE_BSC.getCode() | 
|         ).getValue(); | 
|         if(StrUtil.isBlank(sysAddress)){ | 
|             log.info("系统未设置充值地址"); | 
|             return; | 
|         } | 
|   | 
|         // 判断收款地址是否是设置的平台地址 | 
|         if (sysAddress.toLowerCase().equals(e.to)) { | 
|   | 
|             String transactionHash = e.log.getTransactionHash(); | 
|             LambdaQueryWrapper<MallCharge> mallChargeLambdaQueryWrapper = new LambdaQueryWrapper<>(); | 
|             mallChargeLambdaQueryWrapper.eq(MallCharge::getTransHash, transactionHash); | 
|             List<MallCharge> list = mallChargeMapper.selectList(mallChargeLambdaQueryWrapper); | 
|             if(CollUtil.isNotEmpty(list)){ | 
|                 log.info("扫描到HASH已使用:{}",transactionHash); | 
|                 return; | 
|             } | 
|   | 
|             ContractChainService sourceUsdtInstance = ChainService.getInstance(ChainEnum.BSC_USDT.name()); | 
|             int decimals = sourceUsdtInstance.decimals(); | 
|   | 
|             String fromAddress = e.from; | 
|             if (fromAddress.equals(sysAddress.toLowerCase())) { | 
|                 log.info("系统地址转出:{}",transactionHash); | 
|                 return; | 
|             } | 
|   | 
|             BigInteger tokens = e.tokens; | 
|             BigDecimal amount = new BigDecimal(tokens.toString()) | 
|                     .divide(BigDecimal.TEN.pow(decimals), decimals, RoundingMode.HALF_DOWN) | 
|                     .setScale(2,BigDecimal.ROUND_DOWN); | 
|             LambdaQueryWrapper<MallCharge> queryWrapper = new LambdaQueryWrapper<>(); | 
|             queryWrapper.eq(MallCharge::getAddress, fromAddress); | 
|             queryWrapper.eq(MallCharge::getSysAddress, sysAddress); | 
|             queryWrapper.eq(MallCharge::getAmount, amount); | 
|             queryWrapper.eq(MallCharge::getType, type); | 
|             queryWrapper.eq(MallCharge::getState, YesOrNoEnum.ING.getValue()); | 
|             List<MallCharge> mallCharges = mallChargeMapper.selectList(queryWrapper); | 
|             if(CollUtil.isEmpty(mallCharges)){ | 
|                 log.info("未查询到匹配充值记录,充值地址:{},HASH:{}",fromAddress,transactionHash); | 
|                 return; | 
|             } | 
|             MallCharge mallCharge = mallCharges.get(0); | 
|             mallCharge.setState(YesOrNoEnum.YES.getValue()); | 
|             mallChargeMapper.updateById(mallCharge); | 
|             agentProducer.sendBuyVipSuccessMsg(mallCharge.getId()); | 
|   | 
|   | 
|             log.info("扫描到用户ID:{},地址:{},充值金额:{}",mallCharge.getMemberId(),fromAddress,amount); | 
|   | 
|         } | 
|     } | 
|   | 
|   | 
| } |