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.common.utils.AppContants;
|
import cc.mrbird.febs.common.utils.RedisUtils;
|
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;
|
@Resource
|
private RedisUtils redisUtils;
|
|
@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,RoundingMode.DOWN);
|
|
|
String chargeRedis = redisUtils.getString(AppContants.CHARGE_AMOUNT_PROFIX + amount);
|
if (StrUtil.isBlank(chargeRedis)) {
|
log.info("Redis未扫描到充值金额:{}",transactionHash);
|
return;
|
}else{
|
redisUtils.del(AppContants.CHARGE_AMOUNT_PROFIX + amount);
|
log.info("Redis扫描到充值记录:{},{}",transactionHash,chargeRedis);
|
}
|
|
LambdaQueryWrapper<MallCharge> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.eq(MallCharge::getSysAddress, sysAddress);
|
queryWrapper.eq(MallCharge::getAmountReal, amount);
|
queryWrapper.eq(MallCharge::getMemberId, Long.parseLong(chargeRedis));
|
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);
|
|
if(StrUtil.isNotEmpty(mallCharge.getVipCode())){
|
agentProducer.sendBuyVipSuccessMsg(mallCharge.getId());
|
}else{
|
agentProducer.sendChargeSuccessMsg(mallCharge.getId());
|
}
|
|
log.info("扫描到用户ID:{},地址:{},充值金额:{}",mallCharge.getMemberId(),fromAddress,amount);
|
|
}
|
}
|
|
|
}
|